如何在CUDA中执行适量的线程

时间:2012-12-11 18:20:14

标签: cuda

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

1 个答案:

答案 0 :(得分:5)

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