安装cuda我就不说了。
nvcc -o filename filename.cu,编译
nvcc -o filename filename.cu -g, 之后可以debug
CUT_CHECK_ERROR(),CUDA_SAFE_CALL(), 错误检测
nvcc -I /home/user/NVIDIA_GPU_Computing_SDK/C/common/inc -o filename filename.cu, 添加头文件, -I
如果利用makefile编译, 如下:
filename : filename.cu
其次说明一下cuda函数是怎么调用的:实际上也就是核函数, 在每个thread上运行(grid包含block包含thread),函数声明:
__global__ void kernel(param list){ }
核函数只能在主机端调用
Kernel<<<Dg,Db, Ns, S>>>(param list);
- 参数Dg用于定义整个grid的维度和尺寸,即一个grid有多少个block。为dim3类型。Dim3 Dg(Dg.x, Dg.y, 1)表示grid中每行有Dg.x个block,每列有Dg.y个block,第三维恒为1(目前一个核函数只有一个grid)。整个grid中共有Dg.x*Dg.y个block,其中Dg.x和Dg.y最大值为65535。
- 参数Db用于定义一个block的维度和尺寸,即一个block有多少个thread。为dim3类型。Dim3 Db(Db.x, Db.y, Db.z)表示整个block中每行有Db.x个thread,每列有Db.y个thread,高度为Db.z。Db.x和Db.y最大值为512,Db.z最大值为62。 一个block中共有Db.x*Db.y*Db.z个thread。计算能力为1.0,1.1的硬件该乘积的最大值为768,计算能力为1.2,1.3的硬件支持的最大值为1024。
- 参数Ns是一个可选参数,用于设置每个block除了静态分配的shared Memory以外,最多能动态分配的shared memory大小,单位为byte。不需要动态分配时该值为0或省略不写。
- 参数S是一个cudaStream_t类型的可选参数,初始值为零,表示该核函数处在哪个流之中。
1.kernel函数是以block为单位执行的
2.block之间是并行的,没有通信,没有执行顺序
3.row是y, col是x,也就是(1,2,1)代表的是第一列,第二行,z为1(坐标从0开始)