【问题标题】:Does CUDA applications' compute capability automatically upgrade?CUDA应用的计算能力会自动升级吗?
【发布时间】:2012-09-07 14:16:09
【问题描述】:

如果我编译一个具有较低计算能力的 CUDA 程序,例如 1.3(nvcc 标志 sm_13),并在具有 Compute Capability 2.1 的设备上运行它,它会利用 Compute 2.1 的功能吗?

在这种情况下,计算 2.1 设备的行为会像计算 1.3 设备一样吗?

【问题讨论】:

    标签: cuda nvcc


    【解决方案1】:

    不,它不会利用您需要明确编程的任何功能。 只有那些对用户透明的功能(如缓存或更大的寄存器文件)才会被使用。

    此外,您需要确保您的目标文件包含编译为 PTX 中间语言的代码版本,该版本可以动态编译为目标架构,否则您的程序将无法运行。

    编译为虚拟架构 (nvcc -arch compute_13) 以确保这一点,或者使用 nvcc 的 -gencode 选项为多个架构创建包含代码的胖二进制文件。

    使用胖二进制文件,如果将代码包装在#if __CUDA_ARCH__ >= xyz 预处理器条件中,则可以针对仅在更高计算能力上可用的功能进行编程。

    【讨论】:

    • 感谢您的回答。我更喜欢为所有计算能力创建带有代码的胖二进制文件。
    • 请注意,最好的选择是两者都做(创建一个包含 PTX 版本的胖二进制文件)。这样,即使在未来具有不同指令集的 GPU 上,程序也将始终运行。
    • 我之前评论的第二部分格式不正确。我已将其移至答案。
    猜你喜欢
    • 2015-06-08
    • 1970-01-01
    • 2015-05-10
    相关资源
    最近更新 更多