CUDA:确定网格中的线程块数

时间:2015-06-01 17:43:36

标签: cuda

我正在研究一个简单的示例CUDA程序,并对如何确定网格中的块数有疑问。代码的相关部分是:

// Launch the Vector Add CUDA Kernel
int threadsPerBlock = 256;
int blocksPerGrid =(numElements + threadsPerBlock - 1) / threadsPerBlock;
printf("CUDA kernel launch with %d blocks of %d threads\n", blocksPerGrid, threadsPerBlock);
vectorAdd<<<blocksPerGrid, threadsPerBlock>>>(d_A, d_B, d_C, numElements);

为什么blocksPerGrid等于

(numElements + threadsPerBlock - 1) / threadsPerBlock 

而不仅仅是

numElements / threadsPerBlock

1 个答案:

答案 0 :(得分:3)

这给出了整数除法:

perl

如果numElements / threadsPerBlock 不能被numElements整除,那么这不会给出正确的结果 - 我们需要一个额外的线程块来覆盖&#34;额外的&#34;需要线程。

这个算术:

threadsPerBlock

根据需要给我们一个额外的线程块。