chipStar 能夠在支援 SPIR-V 作為設備中間表示的平台上編譯和運行 HIP 和 CUDA 應用程式。它支援 OpenCL 和零級作為低階運行時替代方案。
使用者文件
開發者文檔
(不)支援的功能列表
chipStar 最初是透過結合(現已廢棄的)HIPCL 和 HIPLZ 專案中完成的原型設計工作而建造的。
如果您希望在學術出版物中引用chipStar,請在討論 OpenCL 後端時參考 HIPCL 海報摘要和/或在提及零級後端時參考 HIPLZ 會議論文。 chipStar的核心開發人員正在撰寫整合chipStar專案的正式文章,但正在進行中。
ChipStar這個名字來自c
uda和hip
, Star
一詞的意思是星號,是典型的shell通配符,表示讓「CUDA和HIP應用程式到處運作」的意圖。該專案以前稱為 CHIP-SPV。
以下函式庫已透過 MKL 移植到 Intel GPU 上:
hipBLAS(可以透過添加-DCHIP_BUILD_HIPBLAS=ON
來建造為chipStar的一部分)
hipFTT(可以透過添加-DCHIP_BUILD_HIPFTT=ON
來建構為chipStar的一部分)
髖解算器
臀部CUB
以下庫已被移植並且應該可以在任何平台上運行:
洛克蘭德
羅克PRIM
如果您需要的庫尚未受支持,請開啟一個問題,說明您需要哪些程式庫以及您正在嘗試建立什麼應用程式。
迄今為止,chipStar 已使用以下應用程式進行了測試:
libCEED 我們的分支包含一些解決方法。
GAMESS 原始碼不公開。
HeCBench CUDA 基準測試。
最快的入門方法是使用預先建置的 Docker 容器。請參閱 Docker README 如果您想自己建立所有內容,可以按照詳細的入門指南
雖然chipStar 1.1已可用於成功運行各種大型HPC應用程序,但它仍處於嚴重開發模式,存在大量已知問題和未實現的功能。還有一些已知的低效能優化仍有待完成。然而,我們認為chipStar已經準備好進行更廣泛的測試,並歡迎社群以可重現的錯誤報告和高品質拉取請求的形式做出貢獻。
1.1、1.0 和 0.9 的發行說明。
Cmake >= 3.20.0
Clang 和 LLVM 17(Clang/LLVM 15 和 16 也可能有效)
例如,可以透過新增 LLVM 的 Debian/Ubuntu 儲存庫並安裝軟體套件「clang-17 llvm-17 clang-tools-17」來安裝。
為了獲得最佳結果,請從chipStar LLVM/Clang 分支安裝Clang/LLVM,該分支具有LLVM 上游專案中尚未包含的修復程式。請參閱下文,了解建置和安裝修補版本的腳本化方法。
來自與 LLVM 主要版本相符的分支的 SPIRV-LLVM-Translator:(例如 LLVM 17 的 llvm_release_170)、llvm-spirv。
確保建置的 llvm-spirv 二進位檔案安裝到與 clang 二進位檔案相同的路徑中,否則 clang 可能會找到並使用不同的 llvm-spirv,從而導致錯誤。
建議使用 LLVM 的chipStar 分支,它有一些補丁尚未上傳到上游。為此,您可以使用chipStar儲存庫中包含的腳本:
./scripts/configure_llvm.sh 用法: ./configure_llvm.sh --version <版本> --install-dir <目錄> --link-type static(預設)/動態 --only-necessary-spirv-exts <on|off> --binutils- header-location <路徑>--版本:LLVM 版本15、16、17、18、19 --install-dir: 安裝目錄 --link-type:靜態或動態(預設:靜態) --only-necessary-spirv-exts:開啟或關閉(預設值:關閉) --binutils-header-location:binutils 標頭的路徑(預設值:空) ./scripts/configure_llvm.sh --version 17 --install-dir /opt/install/llvm/17.0cd llvm-project/llvm/build_17 make -j 16<sudo> 進行安裝
或者您可以手動執行以下步驟:
git克隆--深度1 https://github.com/CHIP-SPV/llvm-project.git -bchipStar-llvm-17cd llvm-project/llvm/projects git clone --depth 1 https://github.com/CHIP-SPV/SPIRV-LLVM-Translator.git -bchipStar-llvm-17cd ../..# DLLVM_ENABLE_PROJECTS="clang;openmp" OpenMP 是可選的,但有許多應用程式使用它# DLLVM_TARGETS_TO_BUILD 透過僅建置必要的 CPU 主機目標來加速編譯# CMAKE_INSTALL_PREFIX 在哪裡安裝 LLVMcmake -S llvm -B build -DCMAKE_BUILD_TYPE=發布 -DLLVM_ENABLE_PROJECTS="clang;openmp" -DLLVM_TARGETS_TO_BUILD=X86 -DCMAKE_INSTALL_PREFIX=$HOME/local/llvm-17 make -C build -j8 全部安裝
OpenCL 2.0 或 3.0 驅動程式至少支援以下功能:
粗粒度緩衝區共享虛擬記憶體 (SVM)
SPIR-V 輸入
通用位址空間
程式範圍變數
根據編譯的 CUDA/HIP 應用程序,可能需要進一步的 OpenCL 擴充或功能。例如,為了支援 warp-primitives,OpenCL 驅動程式還應支援其他子組功能,例如隨機播放、選票和 cl_intel_required_subgroup_size。
英特爾計算運行時或 oneAPI
oneAPI等級零載入器
對於 HIP-SYCL 和 HIP-MKL 互通性:oneAPI
您可以下載並解壓縮最新發布的源碼包或透過git克隆開發分支。我們的目標是保持main
開發分支的穩定,但它在開發週期中可能會出現穩定性問題。
要從 Github 克隆源:
git 克隆 https://github.com/CHIP-SPV/chipStar.gitcdchipStar git 子模組更新 --init --recursive
mkdir build && cd build# LLVM_CONFIG_BIN 是可選的,如果 LLVM 可以在 PATH 中找到,或者如果不使用 version-sufficed# 二進位檔案(例如 llvm-config-17)cmake .. -DLLVM_CONFIG_BIN=/path/to/llvm-config -DCMAKE_INSTALL_PREFIX=/路徑/到/安裝 使所有 build_tests 安裝 -j8
|您也可以透過新增-DCHIP_BUILD_HIPBLAS=ON
來編譯並安裝 hipBLAS
注意:如果您沒有 libOpenCL.so(例如來自ocl-icd-opencl-dev
套件),但僅安裝了 libOpenCL.so.1,則 CMake 無法找到它並停用 OpenCL 後端。此問題描述了一種解決方法。
若要建立與 ARM Mali G52 GPU 一起使用的chipStar,請使用下列步驟:
如上所述建置 LLVM 和 SPIRV-LLVM-Translator
使用 -DCHIP_MALI_GPU_WORKAROUNDS=ON cmake 選項建構chipStar
有一些限制 - 使用雙精度類型的內核將無法工作,並且使用子組的內核可能無法工作。
請注意,chipStar 依賴 ARM 提供的專有 OpenCL 實作。我們已經成功地在 Odroid N2 裝置上編譯並運行了chipStar,使用 Ubuntu 22.04.2 LTS,驅動程式版本為 OpenCL 3.0 v1.r40p0-01eac0。
要建立與 PowerVR GPU 一起使用的chipStar,可以遵循預設步驟。針對 PowerVR 的 OpenCL 實作中的問題應用了自動解決方法。
有一些限制:使用雙精確度類型的核心將無法運作,使用子群組的核心可能無法運作,您也可能遇到意外的 OpenCL 錯誤,例如 CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST 和其他問題。
請注意,chipStar 依賴 Imagination Technologies 提供的專有 OpenCL 實作。我們使用 VisionFive2 的預先建置 Debian 映像 202403、驅動程式版本 1.19,成功地在 VisionFive2 裝置上編譯並運行了chipStar。其他 SBC 可能需要額外的解決方法。
有一個腳本check.py
可用於執行單元測試並過濾掉不同平台的已知失敗測試。其用法如下。
BUILD_DIR={建置目錄的路徑。確保 build_tests 目標已建置} 後端={opencl/level0} ^ 您希望測試哪個後端/驅動程式/平台:「opencl」= Intel OpenCL 執行時,「level0」= Intel LevelZero 執行時 DEVICE={cpu,igpu,dgpu,pocl} # 要測試的設備類型。 'igpu' 是 Intel Iris Xe iGPU,'dgpu' 是典型的最新 Intel dGPU,例如資料中心 GPU Max 系列或 Arc.export CHIP_PLATFORM=N # 如果系統上存在多個 OpenCL 平台,請選擇使用哪一個您隨時可以透過以下方式驗證chipStar正在使用哪個裝置: CHIP_LOGLEVEL=訊息 ./build/hipInfo
python3 $SOURCE_DIR/scripts/check.py $BUILD_DIR $DEVICE $BACKEND
有關如何使用已安裝的chipStar 建置CUDA/HIP 程式的說明,請參閱使用者文件。
CHIP_BE=<opencl/level0> # 選擇要使用的後端。如果零級和 OpenCL 都可用,則預設使用零級CHIP_PLATFORM=<N> # 如果系統上存在多個平台,則選擇使用哪一個。預設為 0CHIP_DEVICE=<N> # 如果系統上存在多個設備,請選擇使用哪一個。預設為 0CHIP_DEVICE_TYPE=<gpu/cpu/accel/fpga> 或空 # 選擇要使用的設備類型。預設為空。如果在RELEASE 中編譯,則只有err/crit 可用CHIP_DUMP_SPIRV=<ON/OFF(default)> # 將產生的SPIR-V 程式碼轉儲到檔案CHIP_JIT_FLAGS=<flags> # 附加JIT 標誌CHIP_L0_COLLECT_EVENTS_TIOUTECT_EVENTS_MEOUT=秒)> # 逾時收集零級事件的秒數CHIP_L0_EVENT_TIMEOUT=<N(預設為0) # 零級在超時之前應等待事件的超時時間(以秒為單位)CHIP_SKIP_UNINIT=<ON/OFF(預設)> #如果啟用,則跳過chipStar後端物件的未初始化在程式終止時CHIP_MODULE_CACHE_DIR=/path/to/desired/dir # 模組/程式快取目錄。預設為$HOME/.cache/chipStar,如果不需要緩存,則設定為空字串,即導出CHIP_MODULE_CACHE_DIR=
例子:
╭─pvelesko@cupcake ~╰─$ clinfo -l 平台#0:Intel(R) OpenCL 顯示卡`-- 裝置#0:英特爾(R) Arc(TM) A380 顯示卡平台#1:英特爾(R) OpenCL 顯示卡`-- 裝置#0:英特爾(R) UHD 顯示卡770
根據這些值,如果我們想在 OpenCL iGPU 上運行:
導出 CHIP_BE=openclexport CHIP_PLATFORM=1導出 CHIP_DEVICE=0
注意:零級沒有 clinfo 等效項。通常,如果您有多個零級設備,則只會有一個平台,因此請設定 CHIP_PLATFORM=0,然後將 CHIP_DEVICE 設定為您要使用的設備。 *您可以透過執行列印名稱的範例來檢查裝置的名稱,例如build/samples/0_MatrixMultiply/MatrixMultiply
當最新安裝的 GCC 版本不包含 libstdc++ 時,通常會發生這種情況,並且 Clang++ 預設會選擇最新找到的版本,最終無法連結 C++ 程式。這裡討論這個問題。
這個問題可以透過定義一個 Clang++ 設定檔來解決,該檔案強制 GCC 達到我們想要的效果。例子:
echo --gcc-install-dir=/usr/lib/gcc/x86_64-linux-gnu/11 > ~/local/llvm-17/bin/x86_64-unknown-linux-gnu-clang++.cfg
在不支援雙精確度浮點數的 OpenCL 裝置上執行測試時,會有多個測試出錯。
透過設定兩個環境變數以使使用雙精度的核心工作,可以為 Intel iGPU 啟用雙精度浮點的軟體模擬,但軟體模擬的主要開銷是:
導出 IGC_EnableDPEmulation=1導出 OverrideDefaultFP64Settings=1
如果您的設備不支援仿真,則可以在 cmake 配置時提供-DSKIP_TESTS_WITH_DOUBLES=ON
選項來跳過這些測試。