利用 Intel® DPC++ 相容性工具將 Spectral 3D Globe 移植到 DPC++
目錄
- 簡介
- 規格 3D 球面套件
- 遷移到資料平行 C++
- 3.1 Intel 資料平行 C++ 相容性工具
- 3.2 遷移工作流程
- 總結
- 效能比較
- 優點
- 缺點
- 常見問題
- 8.1 小型緩衝區資料傳輸時間的問題是由 DPC++ 或 OpenCL 引起的嗎?
- 8.2 這個問題與執行時期及驅動程式有關,還是與資料平行 C++ 本身有關?
🔍 簡介
我是 Sunny Goghar,目前在 Intel 的架構和圖像軟體團隊擔任應用工程師,今天我將向大家展示我們團隊使用 Intel 資料平行 C++ 相容性工具將 Spectral 3D Globe 的規格移植到資料平行 C++ 的工作。首先,我們會簡單介紹 Spectral 3D Globe 套件的結構和使用方式,並解釋為什麼我們決定將其移植到資料平行 C++ 的動機。接著,我們會介紹 Intel 資料平行 C++ 相容性工具,並討論遷移應用程式的一般工作流程。最後,我們會總結整個遷移過程並進行性能比較。
📦 規格 3D 球面套件
2.1 結構
規格 3D Globe 軟體套件模擬全球和區域地震波傳播。該套件由 Fortran、MPI 和 Ruby 程式碼組成,Ruby 程式碼通常用於使用 Boost 自動化工具生成 OpenCL 和 CUDA 程式碼。官方儲存庫位於幻燈片中所示的位置,我們正使用開發分支進行這項工作,以獲得最新的程式碼位元。
2.2 使用方式
我們選擇了兩個工作量來進行分析,這些工作量適用於基於 Intel Gen9 HD 圖形卡的記憶體需求和仿真時間。具體而言,我們使用了一個大小為 64x64 的各向同性基底地震和一個較複雜的地震模擬工作量 s362a_ini,但我們將網格的大小減小為 80x80 以適應 Gen9 圖形卡。
📝 遷移到資料平行 C++
3.1 Intel 資料平行 C++ 相容性工具
Intel 資料平行 C++ 相容性工具可幫助開發人員將 CUDA 程式碼遷移為資料平行 C++ 程式碼。根據我的經驗,這個工具可以自動生成八到九成的程式碼,並將其遷移,對於未遷移的程式碼,工具會在適當的位置留下註釋或診斷訊息。在幻燈片中有一個範例診斷訊息,顯示了訊息的結構和引導開發人員如何修復問題的參考指南。
3.2 遷移工作流程
遷移應用程式的過程通常分為三個步驟。首先,我們需準備遷移工作,這包括製作編譯數據庫(compile commands.json)以攔截編譯過程並記錄有用的資訊,如包含頭文件的路徑和編譯時的常數。接下來,我們使用 Intel 資料平行 C++ 相容性工具進行自動遷移操作。最後,我們需要對遷移後的程式碼進行驗證,並手動完成未遷移的部分。
📊 總結
經過遷移後,我們觀察到資料平行 C++ 版本與 OpenCL 版本相比的解算時間基本相同,但由於小型緩衝區資料傳輸時間的顯著減少,整體執行時間大幅降低。因此,資料平行 C++ 可能更適合實現可攜性和性能。
⚡ 效能比較
我們將資料平行 C++ 版本與使用 OpenCL 的版本在 Intel Gen9 圖形卡上進行效能比較。結果顯示,在同一硬體上,資料平行 C++ 版本的整體執行時間明顯優於 OpenCL 版本。例如,對於工作量一,使用 OpenCL 版本解算所需的時間為 3600 多秒,而使用資料平行 C++ 版本解算所需的時間只有 393 秒。
👍 優點
- 通過資料平行 C++ 的遷移,我們可以支持更多類型的加速器,並實現可攜性和性能。
- Intel 資料平行 C++ 相容性工具大大簡化了遷移過程,節省了大量時間。
👎 缺點
- 在遷移過程中,有些特定於應用程式的問題需要手動修復。
- 部分部分代碼使用的功能指標在遷移中未被自動轉換,需要手動重新編寫。
FAQ
Q: 小型緩衝區資料傳輸時間的問題是由 DPC++ 或 OpenCL 引起的嗎?
A: 這個問題主要是由 OpenCL 的實現方式引起的,它在將小型緩衝區從主機傳輸到設備時存在效率問題。
Q: 這個問題與執行時期及驅動程式有關,還是與資料平行 C++ 本身有關?
A: 這個問題主要與資料平行 C++ 本身無關,與執行時期及驅動程式有關。執行時期及驅動程式的實現方式會影響到資料傳輸的效率。
🔗 相關資源
Highlights:
- Spectral 3D Globe 是一個模擬全球和區域地震波傳播的軟體套件。
- 使用 Intel 資料平行 C++ 相容性工具將 Spectral 3D Globe 從 CUDA 移植到資料平行 C++。
- 遷移後,資料平行 C++ 版本的整體執行時間明顯優於 OpenCL 版本。
- 資料平行 C++ 提供了更好的可攜性和性能,可以在不同類型的加速器上運行。
FAQ:
Q: 小型緩衝區資料傳輸時間的問題是由 DPC++ 或 OpenCL 引起的嗎?
A: 這個問題主要是由 OpenCL 的實現方式引起的,它在將小型緩衝區從主機傳輸到設備時存在效率問題。
Q: 這個問題與執行時期及驅動程式有關,還是與資料平行 C++ 本身有關?
A: 這個問題主要與執行時期及驅動程式有關,而與資料平行 C++ 本身無關。執行時期及驅動程式的實現方式會影響到資料傳輸的效率。
資源: