我最近更新了 CUDA Toolkit 版本 12.8。nvcc 编译器现在发出以下警告:
未来版本将删除对“<compute/sm/lto>_75”之前的架构的离线编译支持(使用 -Wno-deprecated-gpu-targets 来抑制警告)。
我对 CUDA 编译有基本的了解。nvcc 编译器会针对各种架构和计算能力生成 PTX,并且 PTX 会在运行时由 NVidia 驱动程序进行 JIT 编译。
我不明白“离线编译”是什么。
我主要关心的是,这个警告对于 Compute 6.1 及更高版本设备的支持意味着什么。我需要继续支持 Compute 6.1。我的 Visual Studio CUDA 代码生成构建设置是compute_61,sm_61
。如果我删除此设置,我的应用将无法在 Compute 6.1 设备上运行。运行时错误是由于缺少内核造成的。我想知道正确的代码生成选项,以便在不禁用警告的情况下支持 Compute 6.1 设备,并且不会发出此警告。
您收到该警告是因为 CUDA 12.8 通知您:
“嘿,我们将在未来的版本中放弃针对 Pascal(sm_61)等旧 GPU 的离线编译(又名预编译二进制文件)。”
离线编译 只是意味着在构建时
nvcc
生成实际的 GPU 就绪代码(sm_61
),而不是将其保留为 PTX(稍后在应用程序运行时进行编译)。所以你现在完全没问题,但 NVidia 表示,未来这可能会(也意味着它会)停止工作。他们只会为较旧的 GPU 支持 PTX,并希望驱动程序在运行时完成繁重的工作。这就是发出警告的原因:
当您指定:
-gencode arch=compute_61,code=sm_61
您告诉 nvcc 直接编译为在具有计算能力 6.1 的 GPU 上运行的代码;这是 sm_61 的离线编译。
您可以使用标志来抑制警告:
但这只是一个暂时的解决方法,直到旧 GPU 的离线编译被弃用。
https://forums.developer.nvidia.com/t/nvcc-warning-support-for-offline-compilation-for-architectures/328141