LLVM 專案引入了 HPVM 1.0,這是一個針對 CPU、GPU、FPGA 和加速器的編譯器

LLVM專案的開發人員發布了HPVM 1.0(異構平行虛擬機)編譯器,旨在簡化異質系統的編程,並提供為CPU、GPU、FPGA和特定領域硬體加速器產生程式碼的工具(支援FGPA 和加速器未包含在1.0 版本中)。 專案代碼根據 Apache 2.0 許可證分發。

HPVM的主要想法是在編譯時提供平行可執行程式的統一表示,可以使用支援平行運算的各種類型的硬體來執行,包括GPU、向量指令、多核心處理器、FPGA和各種專用加速器晶片。 與其他系統不同,HPVM 嘗試結合三種功能來組織異質運算:獨立於語言和硬體的中間表示、虛擬指令集架構 (ISA) 和運行時調度。

HPVM 的目標無關中間表示 (IR) 建立在 LLVM 9.0 中間指令表示的基礎上,並透過分層資料流程圖進行擴展,以擷取任務級、資料級和管道級並行性。 HPVM 中間表示也包含向量指令和共享記憶體。 使用中間表示的主要目的是異質系統的高效程式碼產生和最佳化。

虛擬指令集架構(ISA)允許不同類型的平行計算硬體之間的可移植性,並且使得在使用異質系統的不同元素時不會損失效能成為可能。 虛擬 ISA 也可用於提供可使用 CPU、GPU、FPGA 和各種加速器運行的通用執行程式碼。

在目前的開發階段,HPVM 提供的程式碼產生器能夠將使用虛擬 ISA 定義的應用程式節點轉換為使用 NVIDIA GPU(cuDNN 和 OpenCL)、Intel AVX 向量指令和多核心 x86 CPU 執行。 在運行時,HPVM 應用靈活的計算進程調度策略,這些策略基於程式資訊(圖形結構)並透過編譯各個程式節點以在系統中可用的任何目標計算設備上執行來實現。

值得注意的是,使用HPVM可以實現生產率的顯著提高。 HPVM 轉換器的效能可與 GPU 和向量運算裝置的手寫 OpenCL 程式碼相媲美。

與第一個預覽版本相比,HPVM 1.0 支援線性代數張量運算、Pytorch 和Keras 前端、卷積算子近似以及近似調整框架,該框架可自動為特定張量運算選擇最佳近似並選擇提供最佳性能的配置。

來源: opennet.ru

添加評論