CUDA C基础
CUDA C是对C/C++语言进行拓展后形成的变种,兼容C/C++语法,文件类型为”.cu”文件,编译器为”nvcc”,相比传统的C/C++,主要添加了以下几个方面:
- 函数类型限定符
- 执行配置运算符
- 五个内置变量
- 变量类型限定符
- 其他的还有数学函数、原子函数、纹理读取、绑定函数等
函数类型限定符
用来确定某个函数是在CPU还是GPU上运行,以及这个函数是从CPU调用还是从GPU调用:
- device表示从GPU调用,在GPU上执行
- global表示从CPU调用,在GPU上执行,也称之为kernel函数
- host表示在CPU上调用,在CPU上执行
执行配置运算符
- 执行配置运算符
<<< >>>
. 用来传递内核函数的执行参数 kernel<<<gridDim, blockDim, memSize, stream>>>(para1, para2, ...);
五个内置变量
这些内置变量用来在运行时获得Grid和Block的尺寸及线程索引等信息
- gridDim: 包含三个元素x, y, z的结构体,表示Grid在三个方向上的尺寸,对应于执行配置中的第一个参数
- blockDim: 包含上元素x, y, z的结构体,表示Block在三个方向上的尺寸,对应于执行配置中的第二个参数
- blockIdx: 包含三个元素x, y, z的结构体,分别表示当前线程所在块在网格中x, y, z方向上的索引
- threadIdx: 包含三个元素x, y, z的结构体,分别表示当前线程在其所在块中x, y, z方向上的索引
- warpSize: 表明warp的尺寸
变量类型限定符
用来确定某个变量在设备上的内存位置
- device表示位于全局内存空间,默认类型
- share表示位于共享内存空间
- constant表示位于常量内存空间
- texture表示其绑定的变量可以被纹理缓存加速访问