chipStar ช่วยให้สามารถคอมไพล์และรันแอปพลิเคชัน HIP และ CUDA บนแพลตฟอร์มที่รองรับ SPIR-V เป็นตัวแทนระดับกลางของอุปกรณ์ รองรับ OpenCL และ Level Zero เป็นทางเลือกรันไทม์ระดับต่ำ
เอกสารสำหรับผู้ใช้
เอกสารสำหรับนักพัฒนา
รายการคุณสมบัติ (ไม่) รองรับ
chipStar ถูกสร้างขึ้นครั้งแรกโดยการรวมงานสร้างต้นแบบที่ทำในโครงการ HIPCL และ HIPLZ (ปัจจุบันล้าสมัย)
หากคุณต้องการอ้างอิง chipStar ในสิ่งพิมพ์เชิงวิชาการ โปรดดูบทคัดย่อโปสเตอร์ HIPCL เมื่อพูดคุยเกี่ยวกับแบ็กเอนด์ OpenCL และ/หรือรายงานการประชุม HIPLZ เมื่อกล่าวถึงแบ็กเอนด์ Level Zero นักพัฒนาหลักของ chipStar กำลังเขียนบทความที่เหมาะสมเกี่ยวกับโครงการ integrated chipStar แต่อยู่ระหว่างดำเนินการ
ชื่อ chipStar มาจาก c
uda และ hip
และคำว่า Star
ซึ่งหมายถึงเครื่องหมายดอกจัน ซึ่งเป็นเชลล์ไวด์การ์ดทั่วไป ซึ่งแสดงถึงความตั้งใจที่จะทำให้ "แอปพลิเคชัน CUDA และ HIP ทำงานได้ทุกที่" ก่อนหน้านี้โครงการนี้เรียกว่า CHIP-SPV
ไลบรารีต่อไปนี้ได้รับการย้ายให้ทำงานบน Intel GPU ผ่าน MKL:
hipBLAS (สามารถสร้างเป็นส่วนหนึ่งของ chipStar ได้โดยเพิ่ม -DCHIP_BUILD_HIPBLAS=ON
)
hipFTT (สามารถสร้างเป็นส่วนหนึ่งของ chipStar ได้โดยการเพิ่ม -DCHIP_BUILD_HIPFTT=ON
)
ฮิปโซลเวอร์
ฮิปคิวบี
ไลบรารีต่อไปนี้ได้รับการย้ายแล้วและควรทำงานบนแพลตฟอร์มใดก็ได้:
ร็อคแรนด์
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 อาจใช้งานได้)
สามารถติดตั้งได้ เช่น โดยการเพิ่มที่เก็บ Debian/Ubuntu ของ LLVM และติดตั้งแพ็คเกจ 'clang-17 llvm-17 clang-tools-17'
เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด ให้ติดตั้ง Clang/LLVM จากสาขา chipStar LLVM/Clang ซึ่งมีการแก้ไขที่ยังไม่มีอยู่ในโปรเจ็กต์อัปสตรีม LLVM ดูด้านล่างสำหรับวิธีการสร้างและติดตั้งเวอร์ชันที่ได้รับการติดตั้งด้วยสคริปต์
SPIRV-LLVM-นักแปลจากสาขาที่ตรงกับเวอร์ชันหลักของ LLVM: (เช่น llvm_release_170 สำหรับ LLVM 17) , llvm-spirv
ตรวจสอบให้แน่ใจว่าได้ติดตั้งไบนารี llvm-spirv ที่สร้างขึ้นในพาธเดียวกันกับ clang binary ไม่เช่นนั้น clang อาจค้นหาและใช้ llvm-spirv อื่น ซึ่งนำไปสู่ข้อผิดพลาด
ขอแนะนำให้ใช้ chipStar fork ของ LLVM ซึ่งมีแพตช์บางส่วนที่ยังไม่ได้อัปสตรีม สำหรับสิ่งนี้ คุณสามารถใช้สคริปต์ที่รวมอยู่ในที่เก็บ chipStar:
./scripts/configure_llvm.sh การใช้งาน: ./configure_llvm.sh --version <version> --install-dir <dir> --link-type static(default)/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> ทำการติดตั้ง
หรือคุณสามารถทำตามขั้นตอนด้วยตนเอง:
git clone --ความลึก 1 https://github.com/CHIP-SPV/llvm-project.git -b chipStar-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 build ได้ที่ไหน -DCMAKE_BUILD_TYPE=ปล่อย -DLLVM_ENABLE_PROJECTS="เสียงดังกราว;openmp" -DLLVM_TARGETS_TO_BUILD=X86 -DCMAKE_INSTALL_PREFIX=$HOME/local/llvm-17 ทำให้ -C build -j8 ติดตั้งทั้งหมด
ไดรเวอร์ OpenCL 2.0 หรือ 3.0 ที่มีคุณสมบัติอย่างน้อยต่อไปนี้ที่รองรับ:
หน่วยความจำเสมือนที่ใช้ร่วมกันแบบบัฟเฟอร์หยาบ (SVM)
อินพุต SPIR-V
พื้นที่ที่อยู่ทั่วไป
ตัวแปรขอบเขตโปรแกรม
อาจจำเป็นต้องใช้ส่วนขยายหรือคุณสมบัติ OpenCL เพิ่มเติม ทั้งนี้ขึ้นอยู่กับแอปพลิเคชัน CUDA/HIP ที่คอมไพล์แล้ว ตัวอย่างเช่น เพื่อรองรับ warp-primitives ไดรเวอร์ OpenCL ควรสนับสนุนคุณสมบัติกลุ่มย่อยเพิ่มเติม เช่น shuffles, ballots และ 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 chipStar อัปเดตโมดูลย่อย git --init --recursive
mkdir build && cd build# LLVM_CONFIG_BIN เป็นทางเลือกหาก LLVM สามารถพบได้ใน PATH หรือหากไม่ได้ใช้ไบนารี่ที่มีเวอร์ชันเพียงพอ # (เช่น llvm-config-17)cmake .. -DLLVM_CONFIG_BIN=/path/to/llvm-config -DCMAKE_INSTALL_PREFIX=/path/to/install ทำให้ build_tests ทั้งหมดติดตั้ง -j8
- คุณยังสามารถคอมไพล์และติดตั้ง hipBLAS ได้โดยการเพิ่ม -DCHIP_BUILD_HIPBLAS=ON
หมายเหตุ: หากคุณไม่มี libOpenCL.so (เช่น จากแพ็คเกจ ocl-icd-opencl-dev
) แต่ติดตั้งเฉพาะ libOpenCL.so.1 เท่านั้น CMake จะล้มเหลวในการค้นหาและปิดใช้งานแบ็กเอนด์ OpenCL ปัญหานี้อธิบายวิธีแก้ปัญหา
หากต้องการสร้าง chipStar เพื่อใช้กับ ARM Mali G52 GPU ให้ใช้ขั้นตอนเหล่านี้:
สร้าง LLVM และ SPIRV-LLVM-Translator ตามที่อธิบายไว้ข้างต้น
สร้าง chipStar ด้วยตัวเลือก -DCHIP_MALI_GPU_WORKAROUNDS=ON cmake
มีข้อจำกัดบางประการ - เคอร์เนลที่ใช้ประเภทคู่จะไม่ทำงาน และเคอร์เนลที่ใช้กลุ่มย่อยอาจไม่ทำงาน
โปรดทราบว่า chipStar อาศัยการใช้งาน OpenCL ที่เป็นกรรมสิทธิ์ของ ARM เราจัดการคอมไพล์และรัน chipStar ด้วยอุปกรณ์ Odroid N2 ได้สำเร็จ โดยใช้ Ubuntu 22.04.2 LTS พร้อมไดรเวอร์เวอร์ชัน OpenCL 3.0 v1.r40p0-01eac0
หากต้องการสร้าง chipStar เพื่อใช้กับ PowerVR GPU คุณสามารถทำตามขั้นตอนเริ่มต้นได้ มีวิธีแก้ไขปัญหาอัตโนมัติที่ใช้สำหรับปัญหาในการใช้งาน OpenCL ของ PowerVR
มีข้อจำกัดบางประการ: เคอร์เนลที่ใช้ Double Type จะไม่ทำงาน เคอร์เนลที่ใช้กลุ่มย่อยอาจไม่ทำงาน คุณอาจพบข้อผิดพลาด OpenCL ที่ไม่คาดคิด เช่น CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST และปัญหาอื่นๆ
โปรดทราบว่า chipStar อาศัยการใช้งาน OpenCL ที่เป็นกรรมสิทธิ์ของ Imagination Technologies เราจัดการคอมไพล์และรัน chipStar ด้วยอุปกรณ์ VisionFive2 ได้สำเร็จโดยใช้เดเบียนอิมเมจ 202403 ที่สร้างไว้ล่วงหน้าของ VisionFive2 ไดรเวอร์เวอร์ชัน 1.19 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 ล่าสุดทั่วไป เช่น Data Center GPU Max series หรือ 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> # เลือกแบ็กเอนด์ที่จะใช้ หากมีทั้ง Level Zero และ OpenCL Level Zero จะถูกใช้โดย defaultCHIP_PLATFORM=<N> # หากมีหลายแพลตฟอร์มบนระบบ ให้เลือกแพลตฟอร์มที่จะใช้ ค่าเริ่มต้นเป็น 0CHIP_DEVICE=<N> # หากมีอุปกรณ์หลายตัวอยู่ในระบบ ให้เลือกอุปกรณ์ที่จะใช้ ค่าเริ่มต้นเป็น 0CHIP_DEVICE_TYPE=<gpu/cpu/accel/fpga> หรือว่าง # เลือกประเภทอุปกรณ์ที่จะใช้ ค่าเริ่มต้นเป็น Empty.CHIP_LOGLEVEL=<trace/debug/info/warn/err/crit> # ตั้งค่าระดับบันทึก หากคอมไพล์ใน RELEASE จะมีเฉพาะข้อผิดพลาด/crit เท่านั้น CHIP_DUMP_SPIRV=<ON/OFF(default)> # ดัมพ์โค้ด SPIR-V ที่สร้างขึ้นไปยังไฟล์CHIP_JIT_FLAGS=<flags> # แฟล็ก JIT เพิ่มเติมCHIP_L0_COLLECT_EVENTS_TIMEOUT=<N(ค่าเริ่มต้น 30 วินาที)> # หมดเวลาใน วินาทีในการรวบรวมระดับศูนย์ eventsCHIP_L0_EVENT_TIMEOUT=<N(0 ค่าเริ่มต้น) # หมดเวลาเป็นวินาทีสำหรับระยะเวลาที่ Level Zero ควรรอในเหตุการณ์ก่อนที่จะหมดเวลาCHIP_SKIP_UNINIT=<ON/OFF(ค่าเริ่มต้น)> # หากเปิดใช้งาน จะข้ามการเริ่มต้นของออบเจ็กต์แบ็กเอนด์ของ chipStar เมื่อสิ้นสุดโปรแกรมCHIP_MODULE_CACHE_DIR=/ เส้นทาง / ถึง / ต้องการ / dir # โมดูล / โปรแกรมแคช 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
หมายเหตุ: Level Zero ไม่มีข้อมูลเทียบเท่ากับ clinfo โดยปกติ หากคุณมีอุปกรณ์ Level Zero มากกว่าหนึ่งเครื่อง จะมีเพียงแพลตฟอร์มเดียวเท่านั้น ดังนั้นให้ตั้งค่า 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 ที่ไม่รองรับ double precision float จะมีการทดสอบหลายครั้งที่จะเกิดข้อผิดพลาด
อาจเป็นไปได้ที่จะเปิดใช้งานการจำลองซอฟต์แวร์ของ double precision float สำหรับ Intel iGPU โดยการตั้งค่าตัวแปรสภาพแวดล้อมสองตัวเพื่อให้เคอร์เนลที่ใช้ doubles ทำงาน แต่มีค่าใช้จ่ายหลักในการจำลองซอฟต์แวร์:
ส่งออก IGC_EnableDPEmulation=1ส่งออกแทนที่ค่าเริ่มต้นFP64Settings=1
หากอุปกรณ์ของคุณไม่รองรับการจำลอง คุณสามารถข้ามการทดสอบเหล่านี้โดยมีตัวเลือก -DSKIP_TESTS_WITH_DOUBLES=ON
ในเวลากำหนดค่า cmake