c++ - CUDA PTX,驱动程序 api - 执行后如何从内核获取全局变量

标签 c++ c cuda ptx

这是内核代码的一部分——为每个线程声明变量和所需的操作

.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");

但这会返回错误代码 500“CUDA_ERROR_NOT_FOUND”

有什么方法可以将内核中声明的全局变量的值传递给主机,或者有什么方法可以通过不同的方法绕过这个问题吗?

最佳答案

有3个问题:

  1. 全局变量应该在内核范围之外声明。
  2. 架构必须设置为 sm_30 及更高版本(这仅适用于此特定情况,未显示详细信息)
  3. 内核版本必须设置为 3.0 及以上(这也仅适用于此特定情况,问题中未显示详细信息)

问题已解决。

关于c++ - CUDA PTX,驱动程序 api - 执行后如何从内核获取全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34932461/

相关文章:

c - 使用或不使用-fpic

c - 使用没有最后一个元素的字符串连接在 c 中打印数组

cuda - 如何在Windows上模拟CUDA

c++ - 在 CUDA 分配模板函数中弃用了从字符串常量到 'char *' 的转换

cudaThreadSynchronize() 要求

c++ - 使用 IOCP 的 TCP/IP 服务器。接收缓冲区中的偶尔数据损坏

c++ - boost::serialization 中的派生类偏移量计算。有效吗?

c++ - 如何从 Qt 中的标准 C++ 函数中获取值

c++ - 在 wxWidgets 的事件中包含我自己的数据的最佳方式是什么?

C编程如何在另一个头文件中打印出结构的元素?