【问题标题】:Cuda number of elements is larger than assigned threadsCuda 元素数大于分配的线程数
【发布时间】:2021-12-24 10:18:54
【问题描述】:

我是 CUDA 编程的新手。 我很好奇如果元素的数量大于线程的数量会发生什么?

在这个简单的 vector_add 示例中

__global__
void add(int n, float *x, float *y)
{
    int i = blockIdx.x * blockDim.x + threadIdx.x;
    if (i < n) 
        y[i] = x[i] + y[i];
}

假设数组元素的数量是 10,000,000。我们使用 64 个块和每个块 256 个线程来调用这个函数:

int n = 1e8;
int grid_size = 64;
int block_sie = 256;

那么,只分配了 64*256 = 16384 个线程,剩下的数组元素怎么办?

【问题讨论】:

    标签: c++ cuda


    【解决方案1】:

    其余的数组元素会发生什么?

    什么都没有。它们不会被触动,并且会保持不变。当然,您的 x 数组元素无论如何都不会改变。所以我们在这里指的是yy[0..16383] 的值将反映向量相加的结果。 y[16384..9999999] 的值将保持不变。

    出于这个原因(为了方便地处理与所选网格大小无关的任意数据集大小),人们有时建议采用grid-stride-loop 内核设计。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-31
      • 2011-04-25
      • 2016-07-09
      • 2011-07-01
      • 1970-01-01
      • 2019-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多