CUDA PTX,驱动程序 api - 如何在执行后从内核获取全局变量
CUDA PTX, driver api - how to get global variable from kernel after execution
这是内核代码的一部分 - 为每个线程声明变量和所需的操作
.global.f32 sum = 0.0
.reg.f32 reg;
atom.global.add.f32 reg, [sum], val;
我想在每个线程中添加不同的变量到全局变量总和。
我假设上面发布的代码是正确的——一切都可以顺利编译。但是我无法将全局变量 sum 的值返回给主机。
内核执行后,我得到了主机的以下代码。
CUdeviceptr hostSumPtr;
size_t bytes;
cuModuleGetGlobal(&hostSumPtr, &bytes, hModule, "sum");
但是 returns 错误代码 500 "CUDA_ERROR_NOT_FOUND"
有什么方法可以将内核中声明的全局变量的值传递给主机,或者有什么方法可以通过不同的方法绕过这个问题吗?
有 3 个问题:
- 全局变量应该在内核范围之外声明。
- 架构必须设置为 sm_30 及更高版本(这仅适用于此特定情况,未显示详细信息)
- 内核版本必须设置为 3.0 及以上(这也仅适用于此特定情况,问题中未显示详细信息)
问题已解决。
这是内核代码的一部分 - 为每个线程声明变量和所需的操作
.global.f32 sum = 0.0
.reg.f32 reg;
atom.global.add.f32 reg, [sum], val;
我想在每个线程中添加不同的变量到全局变量总和。 我假设上面发布的代码是正确的——一切都可以顺利编译。但是我无法将全局变量 sum 的值返回给主机。
内核执行后,我得到了主机的以下代码。
CUdeviceptr hostSumPtr;
size_t bytes;
cuModuleGetGlobal(&hostSumPtr, &bytes, hModule, "sum");
但是 returns 错误代码 500 "CUDA_ERROR_NOT_FOUND"
有什么方法可以将内核中声明的全局变量的值传递给主机,或者有什么方法可以通过不同的方法绕过这个问题吗?
有 3 个问题:
- 全局变量应该在内核范围之外声明。
- 架构必须设置为 sm_30 及更高版本(这仅适用于此特定情况,未显示详细信息)
- 内核版本必须设置为 3.0 及以上(这也仅适用于此特定情况,问题中未显示详细信息)
问题已解决。