私は、ブロックとグリッドが 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 を使用して、ブロック = (10,100,1)、グリッド = (1,10) などを試しましたが、行列要素を完全にカバーすることはできません。これを行う正しい方法は何ですか?