我正在尝试使用 jcuda 中的共享内存做一些非常非常简单的事情。我的内核:
__shared__ int testMe;
extern "C"
__global__ void test() {
testMe = 5;
}
将共享内存设置为全局允许我在设备函数中使用它,不幸的是,我什至无法将共享内存声明为全局。 Cuda 刚刚崩溃,内核无法启动问题。我也尝试过:
extern __shared__ int test
但是 nvcc 编译器给出了 cannot external link shared memory 错误。我真的很想让它工作以简化内核的编写,但我看不出有什么办法。
最佳答案
您不能在翻译单元范围内定义静态共享内存,您必须在内核范围内声明它。如果这样做,您的共享内存将是同一 block 中每个线程的相同内存。如果你想为所有 block 中的每个线程使用相同的内存,你必须使用全局内存(在主机代码中调用 cudaMalloc() 并将内存指针传递给你的内核)。
关于c++ - JCuda全局共享内存导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31068816/