在PTX中使用共享内存时出现“意外的地址空间”编译错误

时间:2013-03-07 06:55:01

标签: cuda llvm ptx

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

extern __shared__ float As[100];

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

配置CUDA 5.0,Nvidia Tesla C1060

2 个答案:

答案 0 :(得分:1)

好吧,根据Nvidia论坛的Gert-Jan,在这种情况下并不真正需要extern关键字。我不确定他的身份是什么。

他的回复 -

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

希望这有助于其他用户。

答案 1 :(得分:0)

我不确定CUDA-C / C ++是否支持此功能,但可能会尝试将地址空间属性设置为解决方法:

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

强制llvm将其放入共享地址空间.... 祝你好运!