有Cuda能力的GPU核心

立体风發表於2024-06-04

當CUDA應用程式啟動一個核心時,CUDA執行時會確定系統中每個GPU的計算能力,並利用這些資訊自動尋找最適合該GPU的核心cubin檔案或PTX版本(如果可用)。如果存在支援目標GPU架構的cubin檔案,將直接使用它;否則,CUDA執行時將載入PTX程式碼,並在啟動之前將其即時編譯(JIT編譯)為GPU的本機cubin格式。如果兩者都不可用,則核心啟動將會失敗。

核心(kernel)是指在GPU上並行執行的功能。在CUDA程式設計中,核心是用來設計並利用NVIDIA GPU的強大並行處理能力的函式。編寫CUDA程式時,你會定義一個或多個核心來執行可分解為大量併發任務的計算。這些核心並行處理大量資料,每個執行緒負責資料的一部分。

上述過程概述了CUDA如何在不同GPU架構上高效執行這些核心:

  1. 確定計算能力:執行時,CUDA執行時系統識別系統中每個GPU的具體計算能力(一個代表硬體特性和能力的版本號)。

  2. 匹配核心版本:利用這一資訊,它尋找已為檢測到的GPU架構編譯的最佳版本的每個核心,無論是作為cubin(CUDA二進位制)還是PTX(並行執行緒執行,一種類似中間彙編的語言)。

  3. 優先使用cubin:如果找到了完全針對GPU架構預編譯的cubin檔案,則直接載入並使用它。這提供了最優效能,因為執行時無需進一步編譯。

  4. PTX作為回退方案:如果沒有找到匹配的cubin檔案,系統則轉而使用PTX程式碼。然後,由CUDA執行時將PTX即時編譯為GPU的本機二進位制格式,再啟動核心。這種即時編譯確保了即使沒有為特定GPU架構預先編譯cubin,也能保持相容性。

  5. 核心啟動失敗:如果既沒有相容的cubin版本也沒有PTX版本的核心可用,核心啟動將會失敗。

這種機制使CUDA應用程式能在不同GPU世代間保持可移植性,同時在可能的情況下受益於針對特定架構的最佳化。它還允許開發者在不為每種可能的GPU架構提供單獨構建的情況下分發他們的應用程式,依靠PTX實現向前相容性。

相關文章