將現有 CPU 應用程序移植到 NVIDIA GPU 可以釋放性能提升,使用戶能夠以更大的規模和更快的速度解決問題。雖然修改代碼以實現 NVIDIA GPU 加速需要在初始階段投入時間和精力,但由此帶來的吞吐量和效率提升通常遠遠超過成本。
這樣的任務可能看起來令人生畏,并引起了人們的擔憂,因為他們會浪費時間,最終產生無法提供任何好處的半移植 CPU 代碼到 GPU 代碼。但是,將 CPU 代碼移植到 GPU 代碼可以逐步完成,從而實現即時加速并更大限度地降低風險。
在整個移植過程中,如果不需要先進的內核優化技術,將單個任務從 CPU 移植到 GPU 可提供顯著的加速和下游性能優勢,則經常會出現這種情況。
無論您是初學者還是資深 NVIDIA CUDA 開發者,NVIDIA Nsight 工具套件都支持整個移植流程。只需輕松設置 NVIDIA Nsight Systems,即可開始分析代碼并識別需要更少努力的加速機會。NVIDIA Nsight Compute 等高級工具可以在這些工作的基礎上進行構建,并優化單個內核的性能,確保整個應用程序盡可能快地運行。
加速能源模擬
法國電力公司 (EDF) 、AWS、NVIDIA 和 Aneo 正在攜手合作,以迭代方式將由 EDF 使用并由 NVIDIA GPU 加速的 code_saturne 計算流體動力學 (CFD) 應用移植到 AWS。
EDF 是一家歸法國政府所有的跨國電力公用事業公司,也是全球最大的電力生產商之一。1997 年,該公司開發了 code_saturne,以提供能夠模擬復雜流體動力學流的多功能開源工具。此工具通過對物理實驗無法獲得的場景進行高保真建模,實現發電廠的安全評估和生命周期延長。
該項目旨在使 code_saturne 能夠使用 NVIDIA 軟件和硬件平臺,同時維護其模塊化架構,以促進適應 NVIDIA GPU,包括通過 AWS Cloud 進行訪問。
本博文使用正在進行的 code_saturne 協作的摘要,展示如何開始使用 Nsight 在 NVIDIA GPU 上輕松加速 CPU 應用程序。
準備用于分析的代碼
對于 code_saturne 等高級且功能豐富的代碼,應優先移植哪些部分并不明顯。使用 Nsight Systems 進行的仔細分析有助于識別代碼瓶頸,并告知開發者在此過程中的工作重點。
以增量方式移植,以最大限度地減少破壞性更改,并確保代碼在整個過程中始終可用。最初的挑戰是確保隨著代碼的發展,內存在 GPU 中始終可見。CUDA 托管內存解決了這一難題,它使 CUDA 驅動程序能夠根據使用位置自動在 CPU 和 GPU 內存之間遷移數據。
受管理內存使開發者能夠更輕松地完成工作。它確保 CPU 和 GPU 可以使用相同的邏輯地址,并使 Nsight Systems 可以看到內存傳輸以進行跟蹤和分析。
通過將其與 NVIDIA 工具擴展程序 (NVTX) 注釋相結合,Nsight Systems 分析并追蹤了移植 code_saturne 的進展,以確定代碼的哪些部分是流程中每個步驟的瓶頸以及每個瓶頸的性質。
您可以在 code_saturne 代碼的關鍵部分中輕松添加和嵌套 NVTX 標注。nvtxRangePushA
命令開始并命名范圍,而 nvtxRangePop
則關閉每個范圍。這使得開發者能夠命名代碼區域,以便它們在應用程序配置文件中熟悉和清晰。此標注 API 也可用于 Python 和 Fortran,而且許多 NVIDIA 數學庫內置 NVTX。
圖 1 定性展示了通過 code_saturne 仿真生成的 Nsight Systems 報告。每個迭代都包含一個自定義編寫的梯度代碼 (綠色) ,然后是多網格求解器步驟的進程 (紫色) ,這些步驟依賴于 AmgX 等庫。

在這里,可以直觀地觀察代碼的主要部分,以確定哪些例程最耗時,并值得進一步調查,以確定是否有任何代碼移植機會。
識別 Porting 機會
對 NVTX 標記的特定代碼段 (例如上圖中的“Gradients”) 進行詳細分析,可以提供豐富的見解和潛在的代碼移植機會。圖 2 展示了一段 code_saturne 的 Gradients 代碼,可立即揭示兩個潛在問題。
首先,很長的代碼段僅在 GPU 空閑時在 CPU 上運行。其次,當數據從 CPU 傳輸到 GPU 時,跟隨的兩個內核會顯示頁面遷移。兩者都證明這部分 CPU 代碼是移植到 GPU 的絕佳候選代碼。

開發者使用這些信息來指導他們,并以增量方式將更多計算轉移到 GPU,從而減少分頁遷移和 GPU 空閑時間。圖 3 顯示了這項工作的結果。移植前,CPU 段運行時間為 12.3 毫秒。移植后,運行時間為 0.69 毫秒,速度提高了 18 倍。第二個下游優勢是,現在 GPU 上有更多的數據,這減少了以下兩個內核的內存傳輸,將其總執行時間加快了 4 倍。

code_saturne 項目仍在進行中,接下來已在進行的步驟是開始內核優化,以確定如何進一步改進 GPU 代碼。Nsight Compute 等工具對于這項工作至關重要。
立即加速您的代碼
將 CPU 代碼移植到 GPU 并不像您想象的那樣令人生畏。這個過程可以是漸進式的,而 NVIDIA 提供的 power tools 使這項工作成為一項輕松且值得的時間投資。
訪問 Nsight Systems、Nsight Compute 和 NVTX 的文檔頁面,詳細了解可用工具。
詳細了解 EDF 的 code_saturne。
?
?