来自question 众所周知,PTX可以跨各种架构移植。我相信这允许迁移前进:sm_20到sm_30。我有一个特殊的用例从sm_20到sm_10。因此可以为sm_10目标生成二进制文件,例如cubin,并为PT_20目标编译PTX。
答案 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指出这个愚蠢的错误。