错误:asm 操作数类型大小 (1) 与约束“r”隐含的类型/大小不匹配。关于 Duane Merrill 的 GPU 基数排序
当我尝试在win-XP + VS2005下编译Merrill的基数排序时出现错误。
错误:asm 操作数类型大小(1) 与约束“r”隐含的类型/大小不匹配。
它出现在以下代码中
#define B40C_DEFINE_GLOBAL_LOAD(base_type, dest_type, short_type, ptx_type, reg_mod)\
asm("ld.global.cg."#ptx_type" %0, [%1];" : "="#reg_mod(dest) : _B40C_ASM_PTR_(d_ptr + offset));\
...
B40C_DEFINE_GLOBAL_LOAD(char, signed char, char, s8, r)
谢谢
I have an error when I am trying to compile Merrill's radix sort under win-XP + VS2005.
error: asm operand type size(1) does not match type/size implied by constraint 'r'.
it occurs in the following code
#define B40C_DEFINE_GLOBAL_LOAD(base_type, dest_type, short_type, ptx_type, reg_mod)\
asm("ld.global.cg."#ptx_type" %0, [%1];" : "="#reg_mod(dest) : _B40C_ASM_PTR_(d_ptr + offset));\
...
B40C_DEFINE_GLOBAL_LOAD(char, signed char, char, s8, r)
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这似乎是由于尝试在 32 位平台上编译包含专门为 64 位主机平台编写的内联汇编指令的 CUDA 内核代码而导致的。
CUDA 工具链通过发出与主机 CPU 的地址模式匹配的 GPU 代码来确保
sizeof(void *)
在主机和设备上保持一致。此特定代码假设指针是 64 位,而代码是在 32 位主机模式下编译的,导致大小不匹配。This would appear to be caused by attempting to compile CUDA kernel code containing inline assembly instructions writing specifically for a 64 bit host platform on a 32 bit platform.
The CUDA toolchain ensures that
sizeof(void *)
is consistent on both host and device by emitting GPU code which matches the address mode of the host CPU. This particular code is assuming that pointers are 64 bit, whereas the code is being compiled in 32 bit host mode, leading to a size mismatch.