Я новичок с CUDA, и мои коллеги всегда дизайн ядра с помощью следующей упаковки:Должен ли я проверять количество потоков в коде ядра?
__global__ void myKernel(int nbThreads)
{
int threadId = blockDim.x*blockIdx.y*gridDim.x //rows preceeding current row in grid
+ blockDim.x*blockIdx.x //blocks preceeding current block
+ threadIdx.x;
if (threadId < nbThreads)
{
statement();
statement();
statement();
}
}
Они думают, что есть некоторые ситуации, когда CUDA может запустить больше потоков, чем указано ради выравнивания/сновальной, так что нам нужно проверять его каждый раз. Тем не менее, я пока не видел ни одного примера ядра в Интернете, где они действительно делают эту проверку.
Может ли CUDA запускать больше потоков, чем заданные размеры блока/сетки?