CUDA 12.8 deprecated GPU targets警告解读及Compute 6.1兼容方案咨询
CUDA 12.8警告处理与Compute 6.1设备支持方案
一、“离线编译”的定义
离线编译指nvcc在编译阶段直接生成针对特定GPU架构(sm_xx)的二进制SASS代码——这是可直接在对应硬件上运行的机器码,无需程序运行时再做编译。与之相对的是PTX(compute_xx)中间代码,它需要NVIDIA驱动在程序运行时通过JIT(即时编译)转换成SASS,属于“在线”编译环节。
二、警告的核心含义
CUDA 12.8的该警告明确:未来版本会移除对sm_75及更早架构的离线编译支持——也就是无法再直接生成sm_61、sm_70这类的二进制SASS,但仍支持生成这些架构对应的PTX代码(compute_61、compute_70),可通过运行时JIT兼容旧设备。
三、你的场景问题分析
当前你设置的compute_61,sm_61,是同时生成compute_61的PTX和sm_61的离线SASS。移除该设置后程序在Compute 6.1设备上无法运行,本质是丢失了compute_61的PTX,导致驱动无法通过JIT生成适配的SASS。
四、消除警告且保留Compute 6.1支持的正确设置
将Visual Studio的CUDA代码生成选项修改为:
compute_61,compute_75,sm_75
compute_61:保留针对Compute 6.1架构的PTX代码,确保驱动可在Compute 6.1设备上JIT生成可运行的SASS,实现向下兼容;compute_75,sm_75:指定当前仍支持离线编译的最低架构(sm_75),生成对应的PTX和离线SASS,满足编译器对“有效离线编译目标”的要求,从而消除警告。
此设置既不会丢失对Compute 6.1设备的支持,也无需禁用警告即可消除提示。
补充说明(基于官方文档与社区总结)
compute_xx代表对应计算能力版本的PTX中间代码,用于JIT编译兼容该版本及更高规格的GPU;sm_xx代表特定GPU架构的二进制SASS代码,是离线编译的产物,可直接在对应硬件上运行;- 只要保留目标架构的
compute_xx,即使不生成对应的sm_xx,驱动也能通过JIT为旧设备生成适配的SASS,不会出现内核缺失错误。
内容的提问来源于stack exchange,提问作者Tyson Hilmer
相关产品推荐
相关产品推荐

