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 个?

4

1 回答 1

5

块中执行的线程数仅由块的维度决定,因此执行了 256 个线程,尽管其中 255 个没有“输出”。此外,“n”仅定义网格的维度,并且每个网格块中的线程数相同。

于 2012-12-11T18:47:36.710 回答