CUDA 学习 2 - 代码
创始人
2024-06-03 00:15:45
0

CUDA 学习 2

  • 开发小技巧
    • 调试
    • 性能
    • 错误处理
  • 函数说明
    • 核函数
    • 内置变量

开发小技巧

调试

当进行调试的时候可以把核函数设置成单线程:

kernelName<<<1,1>>>(argument list)

性能

调整网格和线程块大小可以得到不同的性能。

错误处理

建议在CUDA开发时加上错误信息提示处理,提高排错效率,在release版本可以去除这部分,例如添加下宏:

#define CHECK(call)\
{\const cudaError_t error=call;\if(error!=cudaSuccess)\{\printf("ERROR: %s:%d,",__FILE__,__LINE__);\printf("code:%d,reason:%s\n",error,cudaGetErrorString(error));\exit(1);\}\
}//使用示例
CHECK(cudaMalloc((float**)&a, size));

函数说明

核函数

kernelName<<>>(argument list)
  • Dg:int型或者dim3类型(x,y,z),用于定义一个Grid中Block是如何组织的,如果是int型,则表示一维组织结构
  • Db:int型或者dim3类型(x,y,z),用于定义一个Block中Thread是如何组织的,如果是int型,则表示一维组织结构
  • Ns:size_t类型,可缺省,默认为0; 用于设置每个block除了静态分配的共享内存外,最多能动态分配的共享内存大小,单位为byte。 0表示不需要动态分配。
  • S:cudaStream_t类型,可缺省,默认为0。 表示该核函数位于哪个流。
//一个Grid中有3x2x1=6个Block,在(x,y,z)三个方向上的排布方式分别是3、2、1
//一个Block中有4x3x1=12个Thread,在(x,y,z)三个方向上的排布方式分别是4、3、1
dim3 grid(3,2,1), block(4,3,1);
kernelName<<>>(...);//一个Grid中有5个Block,在(x,y,z)三个方向上的排布方式分别是5、1、1
//一个Block中有8个Thread,在(x,y,z)三个方向上的排布方式分别是8、1、1
kernelName<<<5,8>>>(...);

注:grid(3,2)表示第一维度有3个索引值,第二维度有2个索引值,即2行3列

内置变量

  • threadIdx.[x, y, z]表示Block内Thread的编号
  • blockIdx.[x, y, z]表示Gird内Block的编号
  • blockDim.[x, y, z]表示Block的维度,也就是Block中每个方向上的Thread的数目
  • gridDim.[x, y, z]表示Gird的维度,也就是Grid中每个方向上Block的数目
//各维度索引计算公式//一维Grid 一维Block
int blockId = blockIdx.x; 
int threadId = blockIdx.x *blockDim.x + threadIdx.x;//一维Grid 二维Block
int blockId = blockIdx.x; 
int threadId = blockIdx.x * blockDim.x * blockDim.y + threadIdx.y * blockDim.x + threadIdx.x;//一维Grid 三维Block
int blockId = blockIdx.x; 
int threadId = blockIdx.x * blockDim.x * blockDim.y * blockDim.z + threadIdx.z * blockDim.y * blockDim.x + threadIdx.y * blockDim.x + threadIdx.x;//二维Grid 一维Block
int blockId = blockIdx.y * gridDim.x + blockIdx.x;  
int threadId = blockId * blockDim.x + threadIdx.x;//二维Grid 二维Block
int blockId = blockIdx.x + blockIdx.y * gridDim.x;  
int threadId = blockId * (blockDim.x * blockDim.y) + (threadIdx.y * blockDim.x) + threadIdx.x;  //二维Grid 三维Block
int blockId = blockIdx.x + blockIdx.y * gridDim.x;  
int threadId = blockId * (blockDim.x * blockDim.y * blockDim.z)  + (threadIdx.z * (blockDim.x * blockDim.y))  + (threadIdx.y * blockDim.x) + threadIdx.x;  //三维Grid 一维Block
int blockId = blockIdx.x + blockIdx.y * gridDim.x + gridDim.x * gridDim.y * blockIdx.z;  
int threadId = blockId * blockDim.x + threadIdx.x;  //三维Grid 二维Block
int blockId = blockIdx.x + blockIdx.y * gridDim.x + gridDim.x * gridDim.y * blockIdx.z;  
int threadId = blockId * (blockDim.x * blockDim.y) + (threadIdx.y * blockDim.x) + threadIdx.x;  //三维Grid 三维Block
int blockId = blockIdx.x + blockIdx.y * gridDim.x + gridDim.x * gridDim.y * blockIdx.z;  
int threadId = blockId * (blockDim.x * blockDim.y * blockDim.z)  + (threadIdx.z * (blockDim.x * blockDim.y))  + (threadIdx.y * blockDim.x) + threadIdx.x;//二维
int blockId = blockIdx.x + blockId.y * gridDim.x;
int threadId = blockId * (blockDim.x * blockDim.y) + (threadIdx.y *blockDim.x) + threadIdx.x;//三维
int blockId = blockIdx.x + blockIdx.y * gridDim.x + gridDim.x * gridDim.y * blockIdx.z;
int threadIc = blockId * (blockDim.x * blockDim.y * blockDim.z) + (threadIdx.z * (blockDim.x * blockDim.y)) + (threadIdx.y * blockDim.x) + threadIdx.x;   

相关内容

热门资讯

文艺晚会主持人主持词 文艺晚会主持人主持词(精选10篇)  主持词是各种演出活动和集会中主持人串联节目的串联词。在当下这个...
校园文艺晚会结束语 下面文艺晚会结束语是小编为你们寻找的,希望你们会喜欢喔文艺晚会结束语一女1:最明快的,莫过于一年一度...
红色经典诵读主持词 红色经典诵读主持词红色经典诵读主持词尊敬的各位领导、敬爱的老师、亲爱的同学们 :大家好!甲:今天的阳...
答谢会主持词 答谢会主持词15篇  主持词要根据活动对象的不同去设置不同的主持词。随着中国在不断地进步,主持人在活...
年会游戏主持词 年会游戏主持词  主持词没有固定的格式,他的最大特点就是富有个性。在人们积极参与各种活动的今天,主持...
《我是女王》经典台词及剧情介... 《我是女王》经典台词及剧情介绍  一、经典台词  一个偶尔会消失的男人,总有一天会永远的消失。  女...
追梦的主持串词 关于追梦的主持串词  篇一:梦想串词  各位老师,大家好:  又到了一个追梦的季节。春之漫妙、夏之热...
生日宴会精彩致辞 生日宴会精彩致辞(精选5篇)  在日常学习、工作抑或是生活中,大家都不可避免地会接触到致辞吧,致辞是...
暨迎元旦合唱比赛主持词 暨迎元旦合唱比赛主持词  主持词没有固定的格式,他的最大特点就是富有个性。在当下这个社会中,很多场合...
六一主持词开场白和结束语 六一主持词开场白和结束语(精选9篇)  主持词是各种演出活动和集会中主持人串联节目的串联词。在如今这...
国学大讲堂主持词 国学大讲堂主持词  (开场语)同学们老师们:  大家下午好!在各方的积极努力下,国学大讲堂终于以全新...
文艺汇演主持词优秀 文艺汇演主持词优秀  主持词要注意活动对象,针对活动对象写相应的主持词。在当下这个社会中,主持人在活...
《老爸快跑》里的经典台词 《老爸快跑》里的经典台词  《老爸快跑》是由高一功执导,张云宵编剧,徐峥、伊春德主演的电视剧,于20...
公司领导年会致辞 公司领导年会致辞  在日常学习、工作和生活中,大家或多或少都用到过致辞吧,致辞要求风格的雅、俗、庄、...
秋季开学典礼主持词 秋季开学典礼主持词(精选6篇)  主持词已成为各种演出活动和集会中不可或缺的一部分。在一步步向前发展...
当幸福来敲门经典台词 当幸福来敲门经典台词大全  在日新月异的现代社会中,我们都可能会用到台词,台词可以刻画人物的性格,表...
六一儿童节开幕致辞 六一儿童节开幕致辞(通用5篇)  在日常的学习、工作、生活中,大家一定都接触过致辞吧,致辞要求风格的...
春晚主持词 春晚主持词(精选11篇)  主持词要根据活动对象的不同去设置不同的主持词。随着社会一步步向前发展,各...
小学国庆节主题活动主持词 小学国庆节主题活动主持词  主持词是主持人在节目进行过程中用于串联节目的串联词。在当下的社会中,活动...
八年级班会主持词 八年级班会主持词  主持词要注意活动对象,针对活动对象写相应的主持词。在如今这个中国,活动集会越来越...