将CUDA PTX编译为二进制文件以获取较旧的目标

时间:2016-06-11 02:46:19

标签: cuda ptx

来自question 众所周知,PTX可以跨各种架构移植。我相信这允许迁移前进:sm_20到sm_30。我有一个特殊的用例从sm_20到sm_10。因此可以为sm_10目标生成二进制文件,例如cubin,并为PT_20目标编译PTX。

1 个答案:

答案 0 :(得分:4)

PTX在针对特定架构(即使用sm_*标志)编译时正向兼容,但它不向后兼容。解决这个问题的一种方法是指定一个特定的虚拟架构,然后为你想要定位的所有真实架构生成二进制映像。例如,

nvcc -arch=compute_20 -code=sm_20,sm_30,sm_35

为compute 2.0虚拟架构生成PTX,并为2.0,3.0和3.5设备生成二进制映像。请注意,自CUDA 7.0起,不推荐使用compute 1.0。这被称为fat binary方法。

有关实际架构和虚拟架构之间的区别,请参阅code generation options

编辑:实际上,指定-arch=compute_35-code=sm_35有点多余,因为JIT编译器会干预并为您构建它。只要你不介意脂肪二元中多一点脂肪,那么我认为它并不重要。

EDIT2 code 必须 大于或等于arch,因为PTX不向后兼容。感谢Robert Crovella指出这个愚蠢的错误。