常见变量
gridDim.x
:grid中包含的线程块的索引(上图包含4096个线程块)blockIdx.x
:grid中包含当前线程块的索引(上图每个线程块的索引从0-255)blockDim.x
:线程块中线程数量(上图线程块中的线程数为256)threadIdx.x
:线程块中的线程的索引(上图的中橙色3的线程索引为3)
线程索引:index = blockIdx.x * blockDim.x + threadIdx.x
# 线程块大小
int blockSize = 256;
# N表示需要处理的元素个数
int numBlocks = (N + blockSize - 1) / blockSize;
# 每个时钟处理blocksize个线程,需要至少numBlock个线程块处理
add<<<numBlocks, blockSize>>>(N, x, y);
CUDA工具
- nvprof:探测cu程序运行统计信息
- nvcc:cuda程序编译器