0

我编写了一个简单的内核,在其中我将共享内存数组声明为

extern __shared__ float As[100];

在我的内核启动中,我指定了共享内存的 number_of_bytes。编译内核(到 PTX)时出现错误“意外的地址空间”。我正在使用来自 svn 的相当新版本的 LLVM(3.3 正在进行中)。有什么想法我在这里做错了吗?问题似乎与 extern 关键字有关,但是我还要如何指定它呢?(共享内存)。我应该使用不同的 LLVM 构建吗?

配置 CUDA 5.0 , Nvidia Tesla C1060

4

2 回答 2

1

好吧,根据Nvidia论坛的Gert-Jan,在这种情况下实际上并不需要extern关键字。我不确定他在 SO 上的 id 是什么。

他的回复——

“如果你知道你的共享内存数组有多少个元素(例如 100 个元素),你不应该使用 extern 关键字,并且你不必在内核启动时指定共享内存的字节数(编译器可以计算它自己出来)。只有当你不知道你需要多少元素时,你必须在内核启动中指定它,并且在你的内核中你必须写“extern shared float *As”。

希望这可以帮助其他用户。

于 2013-03-08T16:12:43.873 回答
0

我不确定 CUDA-C/C++ 是否支持这一点,但也许尝试将地址空间属性设置为解决方法:

__attribute__((address_space(3)))
extern __shared__ float As[100];

应该迫使 llvm 把它放在共享地址空间中......祝你好运!

于 2013-03-18T20:24:40.830 回答