在旧 CUDA 驱动程序上运行使用较新 CUDA 版本编译的 CUDA 应用程序时,应该发生什么?

问题描述 投票:0回答:0

从 CUDA 11 开始,NVIDIA 为其设备驱动程序添加了一种向前兼容性,允许在其发布时支持 CUDA 主要版本 = 11 的驱动程序支持使用任何次要版本的 CUDA 11 编译的任何二进制文件(有一些限制)

从 CUDA 11 开始,使用 CUDA 主要版本系列中的 CUDA 工具包版本编译的应用程序可以在具有有限功能集的系统上运行,系统至少具有如下所示的最低要求驱动程序版本。这个最低要求的驱动程序可能与 CUDA 工具包打包的驱动程序不同,但应该属于同一主要版本。
资料来源:https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html

其中一个限制与PTX组装有关

  • 使用 PTX 的应用程序会出现运行时问题
    将设备代码编译为 PTX 的应用程序将无法在较旧的驱动程序上运行。如果应用程序需要 PTX,则管理员必须升级已安装的驱动程序。
    PTX 开发人员应参阅 CUDA C++ 编程指南中的 CUDA 兼容性开发人员指南和 PTX 编程指南,了解有关此限制的详细信息。
    资料来源:https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html

这解释了为什么我无法在 RTX 3060 卡 (

sm_35
) 上使用支持 11.4.
 的驱动程序运行使用 CUDA 11.7 编译的应用程序
sm_86

不过,如果我指定

arch_86
目标,它就会起作用。

如果我为其计算能力的主要版本编译了一个 cubin,它也可以工作(例如

sm_80
用于 RTX 3060)

CUDA 应用程序二进制文件(具有一个或多个 GPU 内核)可以包含两种形式的已编译 GPU 代码,二进制 cubin 对象和每个内核的前向兼容 PTX 程序集。 cubin 和 PTX 都是针对某个目标计算能力生成的。支持为特定计算能力生成的立方体在具有相同主要版本和相同或更高次要版本的计算能力的任何 GPU 上运行。例如,计算能力7.0生成的cubin支持在计算能力7.5的GPU上运行,但是计算能力7.5生成的cubin不支持在计算能力7.0的GPU上运行,计算能力生成的cubin 7.x 不支持在具有计算能力 8.x 的 GPU 上运行。
资料来源:https://docs.nvidia.com/cuda/ampere-compatibility-guide/

话虽如此,问题来了。考虑以下场景

  • 使用 CUDA 11.7 编译的应用程序,它为 CC 8.0 生成 PTX 和 Cubin (
    sm_80, arch_80
    )
  • 带有RTX 3060卡(CC 8.6)和报告支持CUDA的驱动程序的机器11.4

应用程序在这种情况下工作。它应该没有使用 JIT 编译器和可用的二进制 PTX 编译为二进制文件,因为它被声明为不受支持的操作。所以它与 8.0 的现有二进制文件一起运行。 我说的对吗?

现在考虑以下场景:

  • 使用 CUDA 11.7 编译的应用程序,它为 CC 8.0 生成 PTX 和 Cubin (
    sm_80, arch_80
    )
  • 带有RTX 3060卡(CC 8.6)和报告支持CUDA的驱动程序的机器11.7

应用程序也适用于这种情况。它是使用 JIT 将二进制文件编译为 CC 8.6,还是使用 8.0 可用的二进制文件?

cuda driver nvidia
© www.soinside.com 2019 - 2024. All rights reserved.