CUDA:确定网格内螺纹块的#
我正在看一个简单的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
// 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