該項目最近 LLVM 宣布發布 新版本的編譯器 高性能虛擬機 2.0 (異構並行虛擬機), 其目標是簡化系統編程 並提供工具來為特定領域的 CPU、GPU、FPGA 和硬件加速器生成代碼。
由於系統中存在使用不同模型來實現並行性(CPU 內核、向量指令、GPU 等)、不同指令集和不同內存層次結構的組件,因此對異構並行系統進行編程很複雜。 每個系統都使用自己的這些組件組合。
主要思想 HPVM 項目 就是在編譯的時候使用並行可執行程序的統一表示, 可用於支持並行計算的各類硬件,包括GPU、向量指令、多核處理器、FPGA以及各種專用加速器芯片。
與其他系統不同, HPVM 試圖結合三種可能性 組織異構計算:中間表示 (IR)、虛擬指令集架構 (V-ISA) 和運行時編程,無論編程語言和硬件如何。
HPVM 中間表示 通過使用分層數據流圖擴展 LLVM 指令的中間表示 捕獲任務、數據和計算管道級別的並行性。 HPVM 中間表示還包括向量指令和共享內存。 使用中間表示的主要目標是高效的代碼生成和異構系統的優化。
虛擬指令集架構 (V-ISA) 抽象了低級硬件,並僅使用底層並發模型(數據流圖)統一了各種形式的並行性和內存架構。
V-ISA 允許不同類型硬件之間的可移植性以進行並行計算,並使得在使用異構系統的不同元素時不會損失性能。 虛擬 ISA 還可用於交付可在 CPU、GPU、FPGA 和各種加速器上運行的通用程序可執行代碼。
靈活的計算調度策略在運行時應用,並基於有關程序的信息(圖形結構)和通過編譯各個程序節點以在系統中任何可用的目標計算設備上執行來實現。
該項目開發的代碼生成器能夠翻譯由虛擬 ISA 定義的應用程序節點,以在 NVIDIA GPU(cuDNN 和 OpenCL)、英特爾 AVX 矢量指令、FPGA 和 x86 多核 CPU 上運行。 值得注意的是,HPVM 翻譯器的輸出性能與 GPU 和矢量計算設備的手寫 OpenCL 代碼相當。
HPVM 2.0的主要新特性
對於部分 提出的新奇事物 在這個新版本中,以下內容脫穎而出:
- 提出了Hetero-C++語言前端,簡化了應用程序代碼在C/C++語言中的並行化,以便在HPVM中編譯。 Hetero-C++ 定義了映射到 HPVM 線程圖的數據級並行性和分層任務的擴展。
- 已添加 FPGA 後端以支持在英特爾 FPGA 上運行代碼。 為了協調執行,使用了面向 OpenCL 的英特爾 FPGA SDK。
- 添加了 DSE(設計空間探索)框架,其中包括編譯器優化和瓶頸檢測機制,可針對給定硬件平台自動調整應用程序。
- 該框架包含適用於英特爾 FPGA 的開箱即用性能模型,允許您連接自己的處理器以優化任何支持 HPVM 的設備。
- 可以在 HPVM 數據流圖級別和 LLVM 級別應用優化。
- 將 LLVM 組件更新到版本 13.0。
- 代碼已重新組織,以便更輕鬆地瀏覽代碼庫、庫和實用程序。
- 測試的基礎設施得到了改進,為各種 HPVM 組件添加了新的測試。
最後, 如果您有興趣了解有關 HPVM 的更多信息, 您可以在中查看詳細信息 以下鏈接。