从这个问题 可知,PTX 可以跨各种架构移植。我相信这允许迁移例如:sm_20 到 sm_30。我有一个从 sm_20 到 sm_10 的特殊用例。因此,是否可以使用为 sm_20 目标编译的 PTX 为 sm_10 目标生成二进制文件,例如 cubin。
问问题
356 次
1 回答
4
PTX在针对特定架构(即使用标志)编译时向前sm_*
兼容,但不向后兼容。解决此问题的一种方法是指定特定的虚拟架构,然后为您想要定位的所有真实架构生成二进制映像。例如,
nvcc -arch=compute_20 -code=sm_20,sm_30,sm_35
为计算 2.0 虚拟架构生成 PTX,并为 2.0、3.0 和 3.5 设备生成二进制映像。请注意,从 CUDA 7.0 开始不推荐使用计算 1.0。这被称为胖二元方法。
请参阅代码生成选项,了解真实架构和虚拟架构之间的区别。
编辑:实际上,指定它有点多余-arch=compute_35
,-code=sm_35
因为 JIT 编译器会干预并为您构建它。只要您不介意脂肪二进制文件中的多余脂肪,那么我想这并不重要。
EDIT2:code
必须大于或等于,arch
因为 PTX 不向后兼容。感谢 Robert Crovella 指出了这个愚蠢的错误。
于 2016-06-11T04:05:32.740 回答