CUDA PTX类似于汇编,因此揭示了源代码.我已经阅读了在线CUDA编译器文档中的CUDA编程指南的3.1节和3.2.7节.我对-arch与-code编译器选项有基本的了解.
如果我理解正确,指定-arch compute_XX会生成PTX.而代码sm_XX 同时生成 PTX和cubin.
我只想要Cubin,这样在得到的图像中没有PTX.我怎样才能做到这一点?
最好通过Visual Studio设置,虽然我只在Visual Studio项目设置中找到-gencode选项.
PTX与装配不太相似.PTX是程序的中间表示,可以编译为Nvidia GPU随时间使用的不同的,不兼容的指令集架构(ISA).通常,用于Nvidia GPU的新ISA附带更新版本的PTX,可以代表ISA的新功能.
在-arch
和-code
选项nvcc
略微不同的方式工作,以你的描述.它们不是(互斥的)替代品,而是决定不同的方面.
-arch
控制哪个PTX版本用作中间表示.因此,它与compute_XX
PTX版本结合使用.
-code
控制嵌入到结果二进制文件中的代码 - 如果在-code sm_XX
表单中使用指定的ISA的机器代码,或者如果-code compute_XX
指定则由GPU驱动程序进行即时编译.
作为一种特殊的快捷方式,只 指定-arch sm_XX
将指定的ISA 和 PTX代码的编译代码嵌入到二进制文件中 - 这可能是您要引用的情况.
最后,该-gencode
选项允许您指定多个-arch
/ -code
对,结果二进制包含每个对的单独代码.
您可以使用nvprune
从二进制文件中删除除所需ISA代码之外的所有代码.
如果不确定,您可以随时使用cuobjdump
来检查特定二进制文件中的内容.
因此,防止任何PTX代码出现在生成的二进制文件中的方法是将nvcc调用为nvcc -arch compute_XX -code sm_XX
(或将多个这样的对一起使用-gencode
).