我有一些包含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起始名称,链接器不知道如何链接这些东西。
事实证明,问题不在于内联asm,而在于预处理,例如:例如,asm字符串
asm volatile ("subc.cc.u32 %0, %0, "q2_s";": "+r"(c[2]));
依靠这个定义
#define q2_s "0xAF48A03B"
在Linux上它编译没有错误,但在Windows上给出了“预期的asm字符串”错误。因此,Windows的解决方法只是在asm字符串中硬编码十六进制值,它与汇编语法无关,对于误导而言。