ChipStar를 사용하면 SPIR-V를 장치 중간 표현으로 지원하는 플랫폼에서 HIP 및 CUDA 애플리케이션을 컴파일하고 실행할 수 있습니다. 낮은 수준의 런타임 대안으로 OpenCL 및 Level Zero를 지원합니다.
사용자 문서
개발자 문서
(비)지원되는 기능 목록
ChipStar는 처음에 (현재는 사용되지 않는) HIPCL 및 HIPLZ 프로젝트에서 수행된 프로토타입 작업을 결합하여 구축되었습니다.
학술 출판물에서 ChipStar를 인용하려면 OpenCL 백엔드를 논의할 때 HIPCL 포스터 초록을 참조하거나 Level Zero 백엔드를 언급할 때 HIPLZ 컨퍼런스 논문을 참조하세요. ChipStar의 핵심 개발자들은 통합된 ChipStar 프로젝트에 대한 적절한 기사를 작성하고 있지만 진행 중입니다.
ChipStar라는 이름은 c
와 hip
그리고 일반적인 쉘 와일드카드인 별표를 의미하는 Star
라는 단어에서 유래되었으며, 이는 "CUDA 및 HIP 응용 프로그램이 어디에서나 실행되도록"하려는 의도를 나타냅니다. 이 프로젝트는 이전에 CHIP-SPV라고 불렸습니다.
다음 라이브러리는 MKL을 통해 Intel GPU에서 작동하도록 포팅되었습니다.
hipBLAS( -DCHIP_BUILD_HIPBLAS=ON
추가하여 ChipStar의 일부로 구축 가능)
hipFTT ( -DCHIP_BUILD_HIPFTT=ON
추가하여 ChipStar의 일부로 구축 가능)
hipSOLVER
hipCUB
다음 라이브러리가 이식되었으며 모든 플랫폼에서 작동합니다.
록랜드
rocPRIM
필요한 라이브러리가 아직 지원되지 않는 경우 필요한 라이브러리와 빌드하려는 애플리케이션을 명시하는 문제를 열어주세요.
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' 패키지를 설치하여 설치할 수 있습니다.
최상의 결과를 얻으려면 LLVM 업스트림 프로젝트에 아직 수정되지 않은 수정 사항이 있는 ChipStar LLVM/Clang 분기에서 Clang/LLVM을 설치하세요. 패치된 버전을 빌드하고 설치하는 스크립트 방식은 아래를 참조하세요.
LLVM 주요 버전과 일치하는 분기의 SPIRV-LLVM-번역기: (예: 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 <dir> --link-type static(기본값)/dynamic --only-necessary-spirv-exts <on|off> --binutils- 헤더 위치 <경로>--버전: 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> make install
또는 다음 단계를 수동으로 수행할 수도 있습니다.
git clone --깊이 1 https://github.com/CHIP-SPV/llvm-project.git -b 칩스타-llvm-17cd llvm-project/llvm/projects git clone --깊이 1 https://github.com/CHIP-SPV/SPIRV-LLVM-Translator.git -b ChipStar-llvm-17cd ../..# DLLVM_ENABLE_PROJECTS="clang;openmp" OpenMP는 선택 사항이지만 많은 경우 앱에서 사용합니다.# DLLVM_TARGETS_TO_BUILD 필요한 CPU 호스트 대상만 빌드하여 컴파일 속도를 높입니다.# CMAKE_INSTALL_PREFIX 설치 위치 LLVMcmake -S llvm -B 빌드 -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 확장 또는 기능이 필요할 수 있습니다. 예를 들어, 워프 프리미티브를 지원하려면 OpenCL 드라이버는 셔플, 투표 및 cl_intel_required_subgroup_size와 같은 추가 하위 그룹 기능도 지원해야 합니다.
Intel Compute Runtime 또는 oneAPI
oneAPI 레벨 제로 로더
HIP-SYCL 및 HIP-MKL 상호 운용성: oneAPI
최신 릴리스 소스 패키지를 다운로드하여 압축을 풀거나 git을 통해 개발 브랜치를 복제할 수 있습니다. 우리는 main
개발 브랜치를 안정적으로 유지하는 것을 목표로 하고 있지만 개발 주기 동안 안정성 문제가 발생할 수 있습니다.
Github에서 소스를 복제하려면:
자식 클론 https://github.com/CHIP-SPV/chipStar.gitcd 칩스타 git 하위 모듈 업데이트 --init --recursive
mkdir build && cd build# LLVM_CONFIG_BIN은 PATH에서 LLVM을 찾을 수 있거나 버전 충족# 바이너리(예: llvm-config-17)cmake를 사용하지 않는 경우 선택 사항입니다. -DLLVM_CONFIG_BIN=/경로/to/llvm-config -DCMAKE_INSTALL_PREFIX=/경로/to/설치 모든 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 구현을 사용합니다. 우리는 드라이버 버전 OpenCL 3.0 v1.r40p0-01eac0과 Ubuntu 22.04.2 LTS를 사용하여 Odroid N2 장치로 ChipStar를 성공적으로 컴파일하고 실행했습니다.
PowerVR GPU와 함께 사용할 ChipStar를 구축하려면 기본 단계를 따를 수 있습니다. PowerVR의 OpenCL 구현 문제에 적용되는 자동 해결 방법이 있습니다.
몇 가지 제한 사항이 있습니다. 이중 유형을 사용하는 커널은 작동하지 않고, 하위 그룹을 사용하는 커널은 작동하지 않을 수 있으며, CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST와 같은 예기치 않은 OpenCL 오류 및 기타 문제가 발생할 수도 있습니다.
ChipStar는 Imagination Technologies에서 제공하는 독점 OpenCL 구현을 사용합니다. 우리는 VisionFive2의 사전 빌드된 데비안 이미지 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'는 Data Center GPU Max 시리즈 또는 Arc.export와 같은 일반적인 최신 Intel dGPU입니다. CHIP_PLATFORM=N # 시스템에 여러 OpenCL 플랫폼이 있는 경우 사용할 플랫폼을 선택합니다. .다음을 통해 언제든지 ChipStar에서 어떤 장치를 사용하고 있는지 확인할 수 있습니다. CHIP_LOGLEVEL=정보 ./build/hipInfo
python3 $SOURCE_DIR/scripts/check.py $BUILD_DIR $DEVICE $BACKEND
CUDA/HIP 프로그램을 구축하기 위해 설치된 ChipStar를 사용하는 방법에 대한 지침은 사용자 문서를 참조하십시오.
CHIP_BE=<opencl/level0> # 사용할 백엔드를 선택합니다. Level Zero와 OpenCL을 모두 사용할 수 있는 경우 기본적으로 Level Zero가 사용됩니다.CHIP_PLATFORM=<N> # 시스템에 여러 플랫폼이 있는 경우 사용할 플랫폼을 선택합니다. 기본값은 0CHIP_DEVICE=<N> # 시스템에 여러 장치가 있는 경우 사용할 장치를 선택합니다. 기본값은 0CHIP_DEVICE_TYPE=<gpu/cpu/accel/fpga> 또는 비어 있음 # 사용할 장치 유형을 선택합니다. 기본값은 비어 있습니다.CHIP_LOGLEVEL=<trace/debug/info/warn/err/crit> # 로그 수준을 설정합니다. RELEASE로 컴파일한 경우 오류/크릿만 사용할 수 있습니다.CHIP_DUMP_SPIRV=<ON/OFF(기본값)> # 생성된 SPIR-V 코드를 파일로 덤프합니다.CHIP_JIT_FLAGS=<flags> # 추가 JIT 플래그CHIP_L0_COLLECT_EVENTS_TIMEOUT=<N(30초 기본값)> # 시간 초과 레벨 0 이벤트 수집을 위한 초 CHIP_L0_EVENT_TIMEOUT=<N(0 기본값) # 레벨 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: Intel(R) Arc(TM) A380 그래픽플랫폼 #1: Intel(R) OpenCL 그래픽 `-- 장치 #0: Intel(R) UHD 그래픽 770
이러한 값을 기반으로 OpenCL iGPU에서 실행하려는 경우:
내보내기 CHIP_BE=openclexport CHIP_PLATFORM=1내보내기 CHIP_DEVICE=0
참고: 레벨 0에는 clinfo와 동등한 기능이 없습니다. 일반적으로 레벨 0 장치가 두 개 이상 있는 경우 플랫폼은 하나만 있으므로 CHIP_PLATFORM=0을 설정한 다음 CHIP_DEVICE를 사용하려는 장치로 설정합니다. * build/samples/0_MatrixMultiply/MatrixMultiply
등 이름을 출력하는 샘플을 실행하면 디바이스 이름을 확인할 수 있습니다.
이는 설치된 최신 GCC 버전에 libstdc++가 포함되어 있지 않고 Clang++가 기본적으로 최신 버전을 선택하여 C++ 프로그램을 연결하지 못하는 경우에 자주 발생합니다. 문제는 여기에서 논의됩니다.
이 문제는 GCC를 우리가 원하는 대로 강제하는 Clang++ 구성 파일을 정의하여 해결할 수 있습니다. 예:
echo --gcc-install-dir=/usr/lib/gcc/x86_64-linux-gnu/11 > ~/local/llvm-17/bin/x86_64-unknown-linux-gnu-clang++.cfg
배정밀도 부동 소수점을 지원하지 않는 OpenCL 장치에서 테스트를 실행하면 오류가 발생하는 여러 테스트가 발생합니다.
두 개의 환경 변수를 설정하여 double을 사용하는 커널이 작동하도록 하지만 소프트웨어 에뮬레이션의 주요 오버헤드를 사용하여 Intel iGPU에 대한 배정밀도 부동 소수점의 소프트웨어 에뮬레이션을 활성화할 수 있습니다.
IGC_EnableDPEmulation=1내보내기 OverrideDefaultFP64Settings=1 내보내기
장치가 에뮬레이션을 지원하지 않는 경우 cmake 구성 시 -DSKIP_TESTS_WITH_DOUBLES=ON
옵션을 제공하여 이러한 테스트를 건너뛸 수 있습니다.