c - CUDA 内联汇编从 GAS 到 Intel 的翻译

标签 c linux windows cuda inline-assembly

我有一些 C-CUDA 代码,其中包含 inline PTX assembly ,它在带有 g++ 后端的 Linux 上编译正常。

我需要在 Windows 下构建它,显然 MSVC 后端无法正确识别内联 asm - 给出诸如“不是 asm 字符串”之类的错误。我认为这与编写此 PTX 程序集的语法有关,例如:

    asm volatile ("subc.cc.u32 %0, %0, "q2_s";": "+r"(c[2]));
    asm volatile ("subc.cc.u32 %0, %0, "q3_s";": "+r"(c[3]));

我对汇编不太了解,并且想知道 - 是否有从 GAS(at&t) 风格到 Intel 语法的翻译器?

或者是否有一些解决方法可以在 Linux 上将 CUDA 内核构建到 PTX,然后在 Windows 上构建 PTX 并链接到剩余代码? 我已经尝试过了,但是 Linux 上的 PTX 编译器为内核函数提供了一些无法识别的 _Z 开头名称,并且链接器不知道如何链接这些内容。

最佳答案

事实证明,问题不在于内联汇编,而在于预处理,例如例如,asm 字符串

asm volatile ("subc.cc.u32 %0, %0, "q2_s";": "+r"(c[2]));

依赖于这个定义

#define q2_s "0xAF48A03B"

在 Linux 上编译时没有错误,但在 Windows 上却给出了“expected an asm string”错误。 因此,Windows 的解决方法只是在 asm 字符串中硬编码十六进制值,它与汇编语法无关,抱歉误导了。

关于c - CUDA 内联汇编从 GAS 到 Intel 的翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55718729/

相关文章:

windows - 将参数传递到 Azure ARM 模板

php - 带有 mmap 缓存错误的 Apache 错误日志

php - 我怎样才能有效地让我的脚本休眠准确的毫秒数?

c - 在 C 中打开文件并输出

linux - 我挂载的 EBS 卷没有显示

php - apc_store 在请求之间不工作

c# - 使用ADSI检索本地组成员所需的权限

C - 运行可执行文件并等待它完成

c++ - 回声抑制库?

linux - 基于 Web 浏览器的 Xpra 客户端?