【问题标题】:how the right amount of threads are executed in CUDA如何在 CUDA 中执行适量的线程
【发布时间】:2012-11-29 08:27:51
【问题描述】:
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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2014-12-01
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 2021-05-05
      • 2011-07-13
      • 1970-01-01
      相关资源
      最近更新 更多