CUDA PTX类似于汇编,因此揭示了源代码。我已经阅读了CUDA编程指南的第3.1节和Section 3.2.7 from the online CUDA compiler documentation。我对-arch与-code编译器选项有基本的了解。
如果我理解正确,指定-arch compute_XX会生成PTX。而-code sm_XX使 PTX和cubin。
我希望仅 cubin,以便在结果图像中没有PTX。我怎样才能做到这一点?
最好通过Visual Studio设置,尽管我只在Visual Studio项目设置中找到-gencode选项。
答案 0 :(得分:6)
PTX与装配不太相似。 PTX是程序的中间表示,可以编译为Nvidia GPU随时间使用的不同的,不兼容的指令集架构(ISA)。通常,用于Nvidia GPU的新ISA附带更新版本的PTX,可以代表ISA的新功能。
-arch
和-code
选项nvcc
work slightly differently与您描述的内容相同。它们不是(互相排斥的)替代品,而是决定不同的方面
-arch
控制哪个PTX版本用作中间表示。因此,它与compute_XX
PTX版本组合
-code
控制嵌入到生成的二进制文件中的代码 - 如果在-code sm_XX
形式中使用,则指定ISA的机器代码,或者如果{{{{{}},则由PTX进行即时编译。指定1}}
作为一种特殊的快捷方式,仅指定 -code compute_XX
会将指定的ISA 和 PTX代码的已编译代码嵌入到二进制文件中 - 这可能是您的情况是指你想避免的。-arch sm_XX
选项允许您指定多个-gencode
/ -arch
对,结果二进制包含每个对的单独代码。nvprune
从二进制文件中删除除所需的所有ISA代码之外的所有代码。 cuobjdump
检查特定二进制文件中的内容。因此,阻止任何PTX代码出现在生成的二进制文件中的方法是将nvcc作为-code
调用(或者将多个此类对与nvcc -arch compute_XX -code sm_XX
一起使用)。