chipStar memungkinkan kompilasi dan menjalankan aplikasi HIP dan CUDA pada platform yang mendukung SPIR-V sebagai representasi perantara perangkat. Ini mendukung OpenCL dan Level Zero sebagai alternatif runtime tingkat rendah.
Dokumentasi pengguna
Dokumentasi pengembang
Daftar fitur (yang tidak) didukung
chipStar awalnya dibangun dengan menggabungkan pekerjaan pembuatan prototipe yang dilakukan dalam proyek HIPCL dan HIPLZ (yang sekarang sudah usang).
Jika Anda ingin mengutip chipStar dalam publikasi akademis, silakan merujuk ke abstrak poster HIPCL ketika membahas backend OpenCL dan/atau makalah konferensi HIPLZ ketika menyebutkan backend Level Zero. Pengembang inti chipStar sedang menulis artikel yang tepat tentang proyek chipStar terintegrasi, tetapi proyek ini sedang dalam proses.
Nama chipStar berasal dari c
uda dan hip
serta kata Star
yang berarti asterisk, wildcard khas shell, yang menunjukkan niat untuk membuat "aplikasi CUDA dan HIP berjalan di mana saja". Proyek ini sebelumnya disebut CHIP-SPV.
Pustaka berikut telah di-porting agar berfungsi pada GPU Intel melalui MKL:
hipBLAS (Dapat dibuat sebagai bagian dari chipStar dengan menambahkan -DCHIP_BUILD_HIPBLAS=ON
)
hipFTT (Dapat dibuat sebagai bagian dari chipStar dengan menambahkan -DCHIP_BUILD_HIPFTT=ON
)
hipSOLVER
hipCUB
Pustaka berikut telah di-porting dan dapat berfungsi pada platform apa pun:
rocRAND
rocPRIM
Jika ada perpustakaan yang Anda perlukan namun belum didukung, silakan buka terbitan yang menyatakan perpustakaan mana yang Anda perlukan dan aplikasi apa yang ingin Anda bangun.
chipStar sejauh ini telah diuji menggunakan aplikasi berikut:
libCEED Garpu kami menyertakan beberapa solusi.
Kode Sumber GAMESS tidak bersifat publik.
Tolok Ukur CUDA HeCBench.
Cara tercepat untuk memulai adalah dengan menggunakan container Docker bawaan. Silakan merujuk ke Docker README Jika Anda ingin membangun semuanya sendiri, Anda dapat mengikuti detail Memulai
Meskipun chipStar 1.1 sudah dapat digunakan untuk menjalankan berbagai aplikasi HPC besar dengan sukses, chipStar 1.1 masih dalam mode pengembangan dengan banyak masalah umum dan fitur yang belum diterapkan. Ada juga optimasi kinerja rendah yang masih harus dilakukan. Namun, kami menganggap chipStar siap untuk pengujian yang lebih luas dan menyambut kontribusi komunitas dalam bentuk laporan bug yang dapat direproduksi dan permintaan penarikan berkualitas baik.
Catatan rilis untuk 1.1, 1.0 dan 0.9.
Buat >= 3.20.0
Dentang dan LLVM 17 (Dentang/LLVM 15 dan 16 mungkin juga berfungsi)
Dapat diinstal, misalnya, dengan menambahkan repositori Debian/Ubuntu LLVM dan menginstal paket 'clang-17 llvm-17 clang-tools-17'.
Untuk hasil terbaik, instal Clang/LLVM dari cabang chipStar LLVM/Clang yang memiliki perbaikan yang belum ada di proyek upstream LLVM. Lihat di bawah untuk mengetahui cara skrip membuat dan menginstal versi yang dipatch.
SPIRV-LLVM-Translator dari cabang yang cocok dengan versi utama LLVM: (misalnya llvm_release_170 untuk LLVM 17) , llvm-spirv.
Pastikan biner llvm-spirv yang dibangun dipasang ke jalur yang sama dengan biner dentang, jika tidak, dentang mungkin menemukan dan menggunakan llvm-spirv yang berbeda, sehingga menyebabkan kesalahan.
Disarankan untuk menggunakan fork chipStar dari LLVM yang memiliki beberapa patch yang belum di-upstream. Untuk ini, Anda dapat menggunakan skrip yang disertakan dalam repositori chipStar:
./scripts/configure_llvm.sh Penggunaan: ./configure_llvm.sh --version <version> --install-dir <dir> --link-type static(default)/dynamic --only-necessary-spirv-exts <on|off> --binutils- lokasi header <jalur>--versi: LLVM versi 15, 16, 17, 18, 19 --install-dir: direktori instalasi --link-type: statis atau dinamis (default: statis) --only-necessary-spirv-exts: aktif atau nonaktif (default: nonaktif) --binutils-header-location: jalur ke header binutils (default: kosong) ./scripts/configure_llvm.sh --version 17 --install-dir /opt/install/llvm/17.0cd llvm-project/llvm/build_17 buat -j 16<sudo> buat instal
Atau Anda dapat melakukan langkah-langkahnya secara manual:
git clone --kedalaman 1 https://github.com/CHIP-SPV/llvm-project.git -b chipStar-llvm-17cd llvm-project/llvm/projects git clone --kedalaman 1 https://github.com/CHIP-SPV/SPIRV-LLVM-Translator.git -b chipStar-llvm-17cd ../..# DLLVM_ENABLE_PROJECTS="clang;openmp" OpenMP bersifat opsional tetapi banyak aplikasi menggunakannya# DLLVM_TARGETS_TO_BUILD Mempercepat kompilasi dengan hanya membangun target host CPU yang diperlukan# CMAKE_INSTALL_PREFIX Dimana instal LLVMcmake -S llvm -B build -DCMAKE_BUILD_TYPE=Lepaskan -DLLVM_ENABLE_PROJECTS="dentang;openmp" -DLLVM_TARGETS_TO_BUILD=X86 -DCMAKE_INSTALL_PREFIX=$HOME/local/llvm-17 buat -C build -j8 semua instal
Driver OpenCL 2.0 atau 3.0 dengan setidaknya mendukung fitur berikut:
Memori virtual bersama buffer berbutir kasar (SVM)
Masukan SPIR-V
Ruang alamat generik
Variabel cakupan program
Ekstensi atau fitur OpenCL lebih lanjut mungkin diperlukan tergantung pada aplikasi CUDA/HIP yang dikompilasi. Misalnya, untuk mendukung warp-primitif, driver OpenCL juga harus mendukung fitur subgrup tambahan seperti shuffles, ballots dan cl_intel_required_subgroup_size.
Intel Compute Runtime atau oneAPI
Pemuat Nol Tingkat oneAPI
Untuk Interoperabilitas HIP-SYCL dan HIP-MKL: oneAPI
Anda dapat mengunduh dan membongkar paket sumber terbaru yang dirilis atau mengkloning cabang pengembangan melalui git. Kami bertujuan untuk menjaga cabang pengembangan main
tetap stabil, namun mungkin ada masalah stabilitas selama siklus pengembangan.
Untuk mengkloning sumber dari Github:
git clone https://github.com/CHIP-SPV/chipStar.gitcd chipStar pembaruan submodul git --init --rekursif
mkdir build && cd build# LLVM_CONFIG_BIN bersifat opsional jika LLVM dapat ditemukan di PATH atau jika tidak menggunakan # biner yang mencukupi versi (misalnya, llvm-config-17)cmake .. -DLLVM_CONFIG_BIN=/path/ke/llvm-config -DCMAKE_INSTALL_PREFIX=/jalur/ke/instal buat semua build_tests instal -j8
| Anda juga dapat mengkompilasi dan menginstal hipBLAS dengan menambahkan -DCHIP_BUILD_HIPBLAS=ON
CATATAN: Jika Anda tidak memiliki libOpenCL.so (misalnya dari paket ocl-icd-opencl-dev
), tetapi hanya libOpenCL.so.1 yang diinstal, CMake gagal menemukannya dan menonaktifkan backend OpenCL. Masalah ini menjelaskan solusinya.
Untuk membuat chipStar untuk digunakan dengan GPU ARM Mali G52, gunakan langkah-langkah berikut:
membangun LLVM dan SPIRV-LLVM-Translator seperti dijelaskan di atas
buat chipStar dengan opsi cmake -DCHIP_MALI_GPU_WORKAROUNDS=ON
Ada beberapa batasan - kernel yang menggunakan tipe ganda tidak akan berfungsi, dan kernel yang menggunakan subgrup mungkin tidak berfungsi.
Perhatikan bahwa chipStar bergantung pada implementasi OpenCL berpemilik yang disediakan oleh ARM. Kami telah berhasil mengkompilasi dan menjalankan chipStar dengan perangkat Odroid N2, menggunakan Ubuntu 22.04.2 LTS, dengan versi driver OpenCL 3.0 v1.r40p0-01eac0.
Untuk membuat chipStar untuk digunakan dengan GPU PowerVR, langkah-langkah default dapat diikuti. Ada solusi otomatis yang diterapkan untuk masalah dalam implementasi OpenCL PowerVR.
Ada beberapa batasan: kernel yang menggunakan tipe ganda tidak akan berfungsi, kernel yang menggunakan subgrup mungkin tidak berfungsi, Anda juga mungkin mengalami kesalahan OpenCL yang tidak terduga seperti CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST dan masalah lainnya.
Perhatikan bahwa chipStar bergantung pada implementasi OpenCL berpemilik yang disediakan oleh Imagination Technologies. Kami telah berhasil mengkompilasi dan menjalankan chipStar dengan perangkat VisionFive2, menggunakan image Debian 202403 bawaan VisionFive2, driver versi 1.19. SBC lain mungkin memerlukan solusi tambahan.
Ada skrip check.py
yang dapat digunakan untuk menjalankan pengujian unit dan menyaring pengujian gagal yang diketahui untuk platform berbeda. Penggunaannya adalah sebagai berikut.
BUILD_DIR={jalur ke direktori build. Pastikan target build_tests telah dibuat} KEMBALI={opencl/level0} ^ Backend/driver/platform mana yang ingin Anda uji:"opencl" = runtime Intel OpenCL, "level0" = runtime Intel LevelZero DEVICE={cpu,igpu,dgpu,pocl} # Jenis perangkat apa yang akan diuji.^ Ini memilih daftar kelulusan tes yang diharapkan. 'igpu' adalah iGPU Intel Iris Xe, 'dgpu' adalah dGPU Intel terbaru seperti seri Data Center GPU Max atau Arc.export CHIP_PLATFORM=N # Jika terdapat beberapa platform OpenCL pada sistem, pilih yang mana yang akan digunakan .Anda selalu dapat memverifikasi perangkat mana yang digunakan oleh chipStar dengan: CHIP_LOGLEVEL=info ./build/hipInfo
python3 $SOURCE_DIR/scripts/check.py $BUILD_DIR $DEVICE $BACKEND
Silakan merujuk ke dokumentasi pengguna untuk petunjuk tentang cara menggunakan chipStar yang diinstal untuk membangun program CUDA/HIP.
CHIP_BE=<opencl/level0> # Memilih backend yang akan digunakan. Jika Level Zero dan OpenCL tersedia, Level Zero digunakan secara defaultCHIP_PLATFORM=<N> # Jika ada beberapa platform di sistem, pilih platform mana yang akan digunakan. Defaultnya adalah 0CHIP_DEVICE=<N> # Jika ada beberapa perangkat di sistem, pilih perangkat mana yang akan digunakan. Defaultnya adalah 0CHIP_DEVICE_TYPE=<gpu/cpu/accel/fpga> atau kosong # Memilih jenis perangkat yang akan digunakan. Defaultnya adalah kosong.CHIP_LOGLEVEL=<trace/debug/info/warn/err/crit> # Menyetel level log. Jika dikompilasi di RELEASE, hanya err/crit yang tersediaCHIP_DUMP_SPIRV=<ON/OFF(default)> # Membuang kode SPIR-V yang dihasilkan ke fileCHIP_JIT_FLAGS=<flags> # Flag JIT tambahanCHIP_L0_COLLECT_EVENTS_TIMEOUT=<N(30s default)> # Timeout in detik untuk mengumpulkan Level Nol eventsCHIP_L0_EVENT_TIMEOUT=<N(0 default) # Batas waktu dalam hitungan detik untuk berapa lama Level Zero harus menunggu pada suatu peristiwa sebelum waktu habisCHIP_SKIP_UNINIT=<ON/OFF(default)> # Jika diaktifkan, lewati uninisialisasi objek backend chipStar saat penghentian programCHIP_MODULE_CACHE_DIR=/ jalur/ke/yang diinginkan/dir # Modul/Program cache dir. Defaultnya adalah $HOME/.cache/chipStar, jika caching tidak diinginkan, setel ke string kosong yaitu ekspor CHIP_MODULE_CACHE_DIR=
Contoh:
╭─pvelesko@cupcake ~╰─$ clinfo -l Platform #0: Intel(R) OpenCL Graphics `-- Perangkat #0: Intel(R) Arc(TM) A380 GraphicsPlatform #1: Intel(R) OpenCL Graphics `-- Perangkat #0: Intel(R) UHD Graphics 770
Berdasarkan nilai-nilai ini, jika kita ingin berjalan di OpenCL iGPU:
ekspor CHIP_BE=openclexport CHIP_PLATFORM=1ekspor CHIP_DEVICE=0
CATATAN: Level Zero tidak memiliki klinfo yang setara. Biasanya jika Anda memiliki lebih dari satu perangkat Level Zero, hanya akan ada satu platform jadi atur CHIP_PLATFORM=0 lalu CHIP_DEVICE ke perangkat yang ingin Anda gunakan. *Anda dapat memeriksa nama perangkat dengan menjalankan sampel yang mencetak nama seperti build/samples/0_MatrixMultiply/MatrixMultiply
Hal ini sering terjadi ketika versi GCC terbaru yang diinstal tidak menyertakan libstdc++, dan Clang++ secara default memilih versi terbaru yang ditemukan, dan akhirnya gagal menautkan program C++. Masalahnya dibahas di sini.
Masalah ini dapat diatasi dengan mendefinisikan file konfigurasi Clang++ yang memaksa GCC sesuai keinginan kita. Contoh:
echo --gcc-install-dir=/usr/lib/gcc/x86_64-linux-gnu/11 > ~/local/llvm-17/bin/x86_64-unknown-linux-gnu-clang++.cfg
Saat menjalankan pengujian pada perangkat OpenCL yang tidak mendukung float presisi ganda, akan ada beberapa pengujian yang menghasilkan kesalahan.
Emulasi perangkat lunak float presisi ganda dapat diaktifkan untuk iGPU Intel dengan menetapkan dua variabel lingkungan agar kernel yang menggunakan doubles dapat berfungsi, namun dengan overhead emulasi perangkat lunak yang besar:
ekspor IGC_EnableDPEmulation=1ekspor OverrideDefaultFP64Settings=1
Jika perangkat Anda tidak mendukung emulasi, Anda dapat melewati pengujian ini dengan menyediakan opsi -DSKIP_TESTS_WITH_DOUBLES=ON
pada waktu konfigurasi cmake.