【发布时间】:2021-06-16 13:51:21
【问题描述】:
在如下的 CUDA 函数中:
__global__ void Kernel(int value) {
value += 1;
...
}
void Host() {
Kernel<<<10, 10>>>(123);
}
value 的内存空间是在Kernel 设备内部(全局)、共享还是本地?
如果一个线程修改了它,那么该修改对其他线程是否可见?还是变量位于每个线程的堆栈上,就像函数内部定义的变量一样?
【问题讨论】:
-
以上都不是
-
value按值传递给每个内核,通常将其存储在寄存器中。如果内核使用的寄存器太多,它可能会以全局变量的形式存储,但无论如何,当通过值传递时,该值对于每个内核都是局部的。 -
@AnderBiguri:内核参数存储在所有硬件上的专用常量内存库中,除了使用共享内存的计算 1.x。不涉及寄存器
-
我的错!感谢您的澄清!
标签: cuda