【问题标题】:Compiling CUDA PTX to binary for an older target将 CUDA PTX 编译为旧目标的二进制文件
【发布时间】:2016-10-12 02:00:08
【问题描述】:

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

【问题讨论】:

    标签: cuda ptx


    【解决方案1】:

    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。这被称为fat binary 方法。

    请参阅code generation options,了解真实架构和虚拟架构之间的区别。


    编辑:实际上,指定-arch=compute_35 和-code=sm_35 有点多余,因为JIT 编译器会干预并为您构建它。只要你不介意在你的 fat 二进制文件中有一点额外的脂肪,那么我想这并不重要。

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

    【讨论】:

    • @RobertCrovella 我不敢相信我写了那个。就好像我没有读过我写的第一句话。感谢您指出我的愚蠢错误。
    猜你喜欢
    • 1970-01-01
    • 2013-11-28
    • 2013-05-09
    • 2022-01-03
    • 2017-02-20
    • 2015-10-17
    • 2013-05-06
    • 1970-01-01
    • 2011-01-09
    相关资源
    最近更新 更多