我正在做的事情突出了一个事实,即我对块和网格在 cuda 中的工作方式没有牢牢掌握。我有一个 1000x10 矩阵,我想遍历它并用一个值填充每个元素。内核是这样的:
__global__ void myfun(float *vals,float *out, int M, int N)
{
int row = blockIdx.y*blockDim.y + threadIdx.y;
int col = blockIdx.x*blockDim.x + threadIdx.x;
int index = row*N + col;
if( (row < M ) && (col < N) ) {
out[index] = index;
}
}
其中,M=1000 和 N = 10。我不知道如何将其分割,以便覆盖矩阵中的每个元素。由于我需要覆盖 1000*10 = 10,000 个元素并且考虑到线程数量的限制,我不能使用 (10,1000,1) 的块大小。使用 pycuda,我尝试过诸如 block = (10,100,1), grid = (1,10) 之类的方法,但我从未完全覆盖矩阵元素。这样做的正确方法是什么?