繁体   English   中英

Cuda 元素数量大于分配的线程

[英]Cuda number of elements is larger than assigned threads

我是 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 个线程,剩下的数组元素会怎样呢?

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

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

出于这个原因(为了方便地处理独立于所选网格大小的任意数据集大小),人们有时会建议网格步幅循环内核设计。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM