CUDA C++ 編譯器更新影響 ELF 可見性和Linkage

Back
Category : News

在下一個 CUDA 主要版本 CUDA 13.0 中,NVIDIA 將對NVIDIA CUDA 編譯器驅動程式 (NVCC)__global__引入兩項重大變化,這將影響 ELF 可見性和函數和裝置變數的連結。這些更新旨在防止長期以來難以檢測和調試的細微運行時錯誤。但是,這些變更可能會影響一些現有的 CUDA C++ 程式。

這篇文章旨在提醒用戶注意潛在的中斷,解釋更改背後的原因,並提供可以恢復舊行為的 NVCC 標誌的指導。表 1 總結了這兩項變更。 

特徵ELF 可見性強制內部連結
功能 詳情強制隱藏 __global__函數、__managed__/__device__/__constant__變數的ELF 可見性強制__global__函數宿主模板存根定義具有內部連結(僅限整個程式模式)
受影響的平台非 Windows 上的共用程式庫所有平台均採用NVCC全程式編譯模式(-rdc=false)。這是預設的 NVCC 模式。
用戶影響__global__預設情況下,函數、__managed__/__device__/__shared__變數不會從共享庫匯出對另一個翻譯單元中的模板實例的引用__global__將無法建置。
控制標誌(CUDA 12.8+)-device-entity-has-hidden-visibility={true|false}
CUDA 13.0+ 中的預設值:true
CUDA <13.0 中的預設值:false
-static-global-template-stub={true|false}
CUDA 13.0+ 中的預設值:true
CUDA <13.0 中的預設值:false
選擇退出(CUDA 13.0+)-device-entity-has-hidden-visibility=false-static-global-template-stub=false
選擇加入(CUDA 12.8+)-device-entity-has-hidden-visibility=true-static-global-template-stub=true

表 1. CUDA 13.0 中 NVCC 的變更摘要,這些變更將影響 ELF 可見性以及__global__函數和設備變數的鏈接

https://developer.nvidia.com/blog/cuda-c-compiler-updates-impacting-elf-visibility-and-linkage/