ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CUDA C语言扩展

2022-08-24 08:31:53  阅读:288  来源: 互联网

标签:__ 调用 函数 扩展 指定 C语言 CUDA block 变量


 

 

CUDA C语言对C语言的扩展主要包含以下几个方面。
1.函数限定符

__device__:声明在设备上执行的函数。该函数无法被CPU端调用,只能由GPU端程序调用,即只能被__device__或__global__声明的函数调用。
__global__:声明的函数称为kernel函数。该函数只能被CPU端调用,执行在GPU上。Kernel函数类型必须是void,即返回类型必须为空。
__host__:声明在主机执行的函数,仅可在CPU端调用。一般情况可省略,只有该函数同时存在被设备端和主机端同时调用的情况需要添加该限定符,且无法与__global__联用。
2.变量限定符

__device__:声明在设备上的变量,该变量位于global memory(参见3.3节GPU存储体系),只能在设备端使用,是全局变量,无须也不能在函数参数表中出现。
__constant__:声明在常量存储中的变量,只能在设备端使用。此变量一般情况下是只读的,只能通过特定方式进行修改(详见16.6节)。该变量是全局变量,无须也不能在函数参数表中出现。
__shared__:声明在共享存储中的变量,仅供block内所有thread共享访存,退出kernel函数后失效。该变量无法初始化,一般声明在kernel函数中。
3.内置数组变量

char2、uchar2、char3、uchar3、char4、uchar4、short2、ushorta2、short3、ushort.3、short4、ushort4、int2、uint2、int3、uint3、int4、uint4、long2、ulong?2、long3、ulong3、long4、ulong4、f1oat2、float3、loat4、double2:结构体数据.
4.内建变量

gridDim:指定grid维度,类型为dim3。
blockDim:指定block维度,类型为dim3。
blockIdx:指定grid内block索引号,类型为uint3。
threadIdx:指定block内thread索引号,类型为uint3。
warpsize:指定warp内thread数量,类型为int。
5.kernel调用

kernel函数调用就是调用声明为__global__的函数,必须在主机端调用。调用时需要指定线程维度,指定方式为<<Bs,Ts,Ss,Si≥>,其中Bs指定gid内block维度,类型为dim3;Ts指定block内thread维度,类型为dim3;Ss指定共享存储空间大小,类型为size_t;Si指定流索引号;其中Ss和Si可选。
下面给出了一个实例(详细代码见第6章)进行说明,其中,blocknum为grid内的block数量,threadnum为block内的thread数量。vector_add_gpu_3<<<blocknum, threadnum>>>(d_a,d_b,d_c,n);

6.特殊函数和内建函数
CUDA C中引入了大量专用的特殊函数和内建函数以实现特定功能,比如同步函数、数学函数、纹理函数、测时函数、原子函数、存储栅栏函数等。



标签:__,调用,函数,扩展,指定,C语言,CUDA,block,变量
来源: https://www.cnblogs.com/oliver2022/p/16610253.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有