![](/img/trans.png)
[英]Print the total number and the indices of elements which are larger than a number
[英]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.