CUDA学习3
创始人
2024-06-02 00:11:36
0

昨天试着在GPU上输出了"HELLO WORD!"以及cuda的存储问题,那么今天先开始看第一个:线程管理:

核函数在主机端启动的时候,他的执行会移动到设备上去,这个时候,设备上会产生大量的线程,而且每一个线程都在执行由核函数指定的语句,所以,怎么样去组织线程是CUDA的一个关键部分,CUDA明确了线程层次抽象的概念,以便于我们组织线程,这里我们展示书上的一个两层的线程层次结构:

图一

由一个内核启动所产生的线程统称为一个网格,同意网格中的所有线程共享相同的全局存储空间,一个网格由多个线程块构成,一个线程块内又包含了一组线程,同一线程块内的线程写作可以通过以下方式来实现:

  1. 同步

  1. 共享内存

但是,不同块内的线程不能够协作!!!

线程依靠两个坐标变量来找:

  1. blockidx:线程块在线程网格内的索引

  1. threadidx:线程块内的线程索引

这两个变量是核函数中需要预先初始化的,当执行一个核函数的时候,CUDA运行时就会给每个线程分配以上两个变量,基于这种思想,我们就可以很轻松的把数据给分配到不同的线程中去,

CUDA是可以组织三维的网格和块的:

blockIdx.x
blockIdx.y
blockIdx.z
threadIdx.x
threadIdx.y
threadIdx.z

他的结构是一个包含二维块的二维网格,网格和快的维度由下面两个内置变量指定:

  1. blockDim:线程快的维度:每个线程块中的线程数

  1. gridDim:线程格的维度,每个线程格中的线程数来表示

和上面一样也是三维的;

通常,一个线程格会被组装成线程块的二维数组形式,一个线程块会被组织成线程的三维数组形式。

CUDA程序中有两种不同的网格和块变量:

  1. 手动定义的dim3数据类型(仅主机端可见)

  1. 预定义的uint3数据类型(仅设备端可见)

主机端作为内核调用的一部分,可以用dim3来定义一个网格和块的维度,执行核函数的时候,CUDA运行时会自动生成相应的内置预初始化的网格,块和线程变量,在核函数内均可以被访问且都是uint3类型。网格大小是块的倍数,跟着书上的学着写一下:checkDimension.cu文件:

#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include
#include
#include
__global__ void checkDimension() {printf("threadindex:(%d,%d,%d) blockindex:(%d,%d,%d)    blockdimindex:(%d,%d,%d)""griddim:(%d,%d,%d)\n", threadIdx.x, threadIdx.y, threadIdx.z, blockIdx.x, blockIdx.y, blockIdx.z, blockDim.x, blockDim.y, blockDim.z, gridDim.x, gridDim.y, gridDim.z);}
int main() {int nElem = 6;dim3 block(3);dim3 grid((nElem + block.x - 1) / block.x);printf("grid.x%d,grid.y%d,grid.z%d\n", grid.x, grid.y, grid.z);printf("block.x%d,block.y%d,block.z%d\n", block.x, block.y, block.z);checkDimension << > > ();cudaDeviceReset();return 0;
}

图二:运行结果

对于一个给定的数据大小,确认网格和块尺寸的一般步骤是:

  1. 确定块的大小

  1. 在已知数据大小和块大小的基础上计算网格维度

要确定块的尺寸,通常要考虑的是

  1. 内核的性能特性

  1. GPU资源的限制

相关内容

热门资讯

安卓系统文件解压缩,轻松掌握文... 你有没有遇到过这种情况:手机里下载了一大堆安卓系统文件,但是不知道怎么解压缩呢?别急,今天就来给你详...
安卓系统有深夜模式吗,揭秘深夜... 安卓系统有深夜模式吗?夜幕降临,手机屏幕的亮光在黑暗中显得格外刺眼。你是否有过这样的困扰:深夜时分,...
安卓系统a收音机,尽享无线音域 你有没有想过,在安卓手机上,除了刷剧、聊天、玩游戏,还能干点啥?今天,就让我带你一探究竟,看看安卓系...
安卓怎么退回老系统,安卓系统升... 手机用久了,是不是觉得新系统越来越卡,老系统那个熟悉的感觉又回来了?别急,今天就来教你怎么把安卓手机...
安卓系统44限制吗 最近你的安卓手机是不是突然感觉有点儿“力不从心”了呢?别急,让我来给你揭秘一下安卓系统44的限制之谜...
闪回门店系统安卓版,焕新零售体... 你有没有想过,那些曾经陪伴我们度过无数美好时光的门店,现在是不是还留在你的记忆里呢?今天,就让我带你...
安卓系统和windows同步,... 你有没有发现,手机里的照片、文档、音乐,还有那些重要的联系人信息,有时候真是让人头疼,因为它们都分散...
安卓系统在哪儿开源,从诞生到全... 你有没有想过,安卓系统这个我们每天不离手的家伙,它到底是从哪儿来的呢?没错,就是开源!今天,就让我带...
三星安卓系统711,探索创新与... 你有没有发现,最近手机圈里又掀起了一股热潮?没错,就是三星的新款手机,搭载的安卓系统7.1.1。这可...
安卓系统应用无法启动,探究无法... 手机里的安卓系统应用突然打不开,是不是让你心头一紧?别急,今天就来给你详细解析一下这个问题,让你轻松...
安卓主题仿苹果系统吗,探索苹果... 你有没有发现,最近手机界又掀起了一股风潮?那就是安卓手机上的主题设计,竟然开始模仿苹果系统的风格了!...
安卓系统盒马餐饮熟食,安卓系统... 你有没有发现,现在的生活越来越离不开手机了?尤其是安卓系统,几乎成了我们生活中不可或缺的一部分。这不...
thinkpad8安卓双系统,... 你有没有想过,一台笔记本电脑既能满足你工作时的严谨需求,又能让你在闲暇时刻畅游安卓世界?今天,就让我...
想看安卓系统u青年影院,U青年... 亲爱的读者们,你是否也和我一样,对安卓系统的电影应用充满了好奇?今天,就让我带你一起探索一个特别的地...
安卓系统王者荣耀更新慢,探究原... 最近你是不是也遇到了这个问题?每次打开王者荣耀,总是慢吞吞的,让人等得心痒痒。安卓系统的王者荣耀更新...
安卓系统怎么装ios系统软件,... 你是不是也和我一样,对安卓系统上的iOS软件垂涎欲滴呢?想象在安卓手机上流畅运行《王者荣耀》或者《原...
蓝牙系统和安卓哪个好使,谁更胜... 蓝牙系统和安卓哪个好使?这个问题,相信不少手机用户都曾纠结过。蓝牙系统,作为无线通信技术的一种,让我...
安卓系统停用怎么回事 最近你的安卓手机是不是突然有点儿“闹脾气”了?屏幕上突然弹出一个通知,告诉你安卓系统要停用了?别急,...
安卓系统照片怎么发视频 你是不是也和我一样,手机里存了好多珍贵的照片,突然想和朋友们分享一段美好的回忆呢?别急,今天就来教你...
永远会用安卓系统的手机 亲爱的手机控们,你是否也有那么一款手机,它陪伴你度过了无数个日夜,成为了你生活中不可或缺的一部分?没...