CUDA:确定网格内螺纹块的#

CUDA:确定网格内螺纹块的#,cuda,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", bloc

我正在看一个简单的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);
不仅仅是

numElements / threadsPerBlock

这给出了整数除法:

numElements / threadsPerBlock
如果
numElements
不能被
threadsPerBlock
平均整除,那么这将不会给出正确的结果-我们需要一个额外的threadblock来覆盖所需的“额外”线程

这个算法:

(numElements + threadsPerBlock - 1) / threadsPerBlock 

根据需要为我们提供一个额外的threadblock。

问问自己如果
numElement
numElements
在这两种情况下都不是
threadsPerBlock
的整数倍会发生什么
(numElements + threadsPerBlock - 1) / threadsPerBlock