从GAS到英特尔的CUDA内联asm的翻译

问题描述 投票:-2回答:1

我有一些包含inline PTX assembly的C-CUDA代码,它在Linux上用g ++后端编译好。

我需要在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)风格到英特尔语法的翻译?

或者是否有一些解决方法在Linux上为PTX构建CUDA内核,然后在Windows上构建PTX并链接到其余代码?我试过了,但linux上的PTX编译器给内核函数一些无法识别的_Z起始名称,链接器不知道如何链接这些东西。

c linux windows cuda inline-assembly
1个回答
1
投票

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

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

依靠这个定义

#define q2_s "0xAF48A03B"

在Linux上它编译没有错误,但在Windows上给出了“预期的asm字符串”错误。因此,Windows的解决方法只是在asm字符串中硬编码十六进制值,它与汇编语法无关,对于误导而言。

© www.soinside.com 2019 - 2024. All rights reserved.