【发布时间】:2020-05-31 19:43:07
【问题描述】:
__global__ void add(int *a, int *b, int *c, int n)
{
size_t index = threadIdx. + blockId.x * blockDim.x;
if(index < n)
c[index] = a[index] + b[index] ;
}
您好,我想记住为什么需要进行 if 测试的原因。我记得这是关于这个内核中的块大小的东西。它只是关于数组边界吗?
索引大于 n 的线程会发生什么?
【问题讨论】:
-
假设您正在启动 1024 个线程的块。您的数组大小为 4000,因此启动的块数为 4(4096 个线程)。在最后一个块中,如果不检查边界,最后 96 个线程将尝试写入非法内存位置。
标签: cuda