0

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

.global.f32 sum = 0.0
.reg.f32 reg;
atom.global.add.f32 reg, [sum], val;

我想将每个线程中的不同变量添加到全局变量 sum。我假设上面发布的代码是正确的 - 一切都顺利编译。但是我无法将全局变量 sum 的值返回给主机。

在内核执行之后,我有以下主机代码。

CUdeviceptr hostSumPtr;
size_t bytes;
cuModuleGetGlobal(&hostSumPtr, &bytes, hModule, "sum");

但返回错误代码 500 "CUDA_ERROR_NOT_FOUND"

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

4

1 回答 1

1

有3个问题:

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

问题已解决。

于 2016-01-21T21:58:57.580 回答