错误:asm 操作数类型大小 (1) 与约束“r”隐含的类型/大小不匹配。关于 Duane Merrill 的 GPU 基数排序

发布于 2024-11-29 18:20:20 字数 391 浏览 1 评论 0原文

当我尝试在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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

栖竹 2024-12-06 18:20:20

这似乎是由于尝试在 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文