这是内核代码的一部分-声明每个线程的变量和所需的操作
.global.f32 sum = 0.0
.reg.f32 reg;
atom.global.add.f32 reg, [sum], val;
我想在每个线程中将不同的变量添加到全局变量总和中。
我认为上面发布的代码是正确的-一切都能顺利编译。但是我在将全局变量总和的值返回给主机方面遇到问题。
内核执行后,我得到了主机的以下代码。
CUdeviceptr hostSumPtr;
size_t bytes;
cuModuleGetGlobal(&hostSumPtr, &bytes, hModule, "sum");
但是返回错误代码500“ CUDA_ERROR_NOT_FOUND”
是否有任何方法可以将内核中声明的全局变量的值获取给主机,或者有任何方法可以通过其他方法绕过此问题?
最佳答案
有3个问题:
全局变量应在内核范围之外声明。
架构必须设置为sm_30及更高版本(这仅适用于这种特定情况,未显示细节)
内核版本必须设置为3.0或更高版本(这也仅适用于此特定情况,问题中未显示详细信息)
问题已解决。
关于c++ - CUDA PTX,驱动程序API-如何在执行后从内核获取全局变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34932461/