0
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函数时在第二个块中会发生什么。只有一个线程在第二个块中执行,或者所有256个线程都执行,尽管255个线程没有输出。所以最基本的问题是每个vecAddKernel调用的参数'n'是如何确定的?对于每个块是256还是对于第一个块是256,对于第二个块是1?如何在CUDA中执行正确的线程数