dim3 DimGrid((n-1)/256 + 1, 1, 1);
dim3 DimBlock(256, 1, 1);
vecAddKernel<<<DimGrid,DimBlock>>>(d_A, d_B, d_C, n);
__global__
void vecAddkernel(float* A, float* B, float* C, int n)
{
int i = threadIdx.x + blockDim.x * blockIdx.x;
if(i<n) C[i] = A[i] + B[i];
}
上記の関数では、長さ n=257 のベクトルがあると仮定すると、割り当てられるブロックは 2 つだけになります。vecAddkernel 関数が呼び出されたときに 2 番目のブロックで何が起こるかを知りたかっただけです。2 番目のブロックで実行されるスレッドは 1 つだけですか、それとも 256 のスレッドすべてが実行されますが、そのうちの 255 には出力がありません。したがって、基本的な質問は、各 vecAddKernel 呼び出しに対してパラメーター 'n' がどのように固定されるかということです。ブロックごとに 256 ですか、それとも最初のブロックが 256 で 2 番目のブロックが 1 ですか?