يتيح chipStar تجميع وتشغيل تطبيقات HIP وCUDA على الأنظمة الأساسية التي تدعم SPIR-V كتمثيل وسيط للجهاز. وهو يدعم OpenCL وLevel Zero كبدائل وقت تشغيل منخفضة المستوى.
وثائق المستخدم
وثائق المطور
قائمة بالميزات (غير) المدعومة
تم إنشاء chipStar في البداية من خلال الجمع بين أعمال النماذج الأولية التي تم إنجازها في مشاريع HIPCL وHIPLZ (التي عفا عليها الزمن الآن).
إذا كنت ترغب في الاستشهاد بـ chipStar في المنشورات الأكاديمية، فيرجى الرجوع إلى ملخص ملصق HIPCL عند مناقشة الواجهة الخلفية لـ OpenCL و/أو ورقة مؤتمر HIPLZ عند ذكر الواجهة الخلفية للمستوى Zero. يقوم المطورون الأساسيون لـ chipStar بكتابة مقال مناسب لمشروع chipStar المتكامل، ولكنه قيد التقدم.
يأتي اسم chipStar من c
uda و hip
وكلمة Star
التي تعني العلامة النجمية، وهي عبارة عن حرف بدل نموذجي يشير إلى نية جعل "تطبيقات CUDA وHIP تعمل في كل مكان". كان المشروع يسمى سابقًا CHIP-SPV.
تم نقل المكتبات التالية للعمل على وحدات معالجة الرسومات Intel عبر MKL:
hipBLAS (يمكن إنشاؤه كجزء من chipStar بإضافة -DCHIP_BUILD_HIPBLAS=ON
)
hipFTT (يمكن إنشاؤه كجزء من chipStar بإضافة -DCHIP_BUILD_HIPFTT=ON
)
hipSOLVER
hipCUB
تم نقل المكتبات التالية ويجب أن تعمل على أي نظام أساسي:
rocRAND
rocPRIM
إذا كانت هناك مكتبة تحتاجها ولم يتم دعمها بعد، فيرجى فتح مشكلة توضح المكتبات التي تحتاجها والتطبيق الذي تحاول إنشاءه.
تم اختبار chipStar حتى الآن باستخدام التطبيقات التالية:
libCEED تتضمن شوكتنا بعض الحلول.
كود مصدر GAMESS ليس عامًا.
معايير HeCBench CUDA.
أسرع طريقة للبدء هي استخدام حاوية Docker المُنشأة مسبقًا. يرجى الرجوع إلى ملف التمهيد الخاص بـ Docker إذا كنت ترغب في إنشاء كل شيء بنفسك، فيمكنك اتباع الخطوات الأولى المفصلة
على الرغم من أنه يمكن بالفعل استخدام chipStar 1.1 لتشغيل العديد من تطبيقات HPC الكبيرة بنجاح، إلا أنه لا يزال في وضع التطوير بشكل كبير مع الكثير من المشكلات المعروفة والميزات غير المنفذة. هناك أيضًا تحسينات معروفة منخفضة الأداء لا يزال يتعين القيام بها. ومع ذلك، فإننا نعتبر أن chipStar جاهز للاختبار على نطاق أوسع ونرحب بمساهمات المجتمع في شكل تقارير أخطاء قابلة للتكرار وطلبات سحب عالية الجودة.
ملاحظات الإصدار للإصدارات 1.1 و1.0 و0.9.
كميك >= 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 ثنائي، وإلا فقد تجد clang ملف llvm-spirv مختلفًا وتستخدمه، مما يؤدي إلى حدوث أخطاء.
يوصى باستخدام شوكة chipStar الخاصة بـ 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- موقع الرأس <path>--الإصدار: إصدار LLVM 15، 16، 17، 18، 19 --install-dir: دليل التثبيت --نوع الرابط: ثابت أو ديناميكي (الافتراضي: ثابت) --only-necessary-spirv-exts: تشغيل أو إيقاف (الافتراضي: إيقاف) --binutils-header-location: المسار إلى رأس binutils (الافتراضي: فارغ) ./scripts/configure_llvm.sh --الإصدار 17 --install-dir /opt/install/llvm/17.0cd llvm-project/llvm/build_17 جعل -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 تسريع عملية التحويل البرمجي عن طريق إنشاء هدف مضيف وحدة المعالجة المركزية الضروري فقط # 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 قم بتثبيت -C build -j8 بالكامل
برنامج تشغيل OpenCL 2.0 أو 3.0 مزود بالميزات التالية المدعومة على الأقل:
الذاكرة الافتراضية المشتركة المخزنة الخشنة (SVM)
إدخال SPIR-V
مساحة العنوان العامة
متغيرات نطاق البرنامج
قد تكون هناك حاجة إلى المزيد من ملحقات أو ميزات OpenCL اعتمادًا على تطبيق CUDA/HIP المترجم. على سبيل المثال، لدعم أساسيات الالتواء، يجب أن يدعم برنامج تشغيل OpenCL أيضًا ميزات المجموعة الفرعية الإضافية مثل عمليات خلط الأوراق وبطاقات الاقتراع وcl_intel_required_subgroup_size.
Intel Compute Runtime أو oneAPI
محمل مستوى OneAPI صفر
لقابلية التشغيل البيني HIP-SYCL وHIP-MKL: oneAPI
يمكنك تنزيل أحدث حزمة مصدر تم إصدارها وتفريغها أو استنساخ فرع التطوير عبر git. نحن نهدف إلى الحفاظ على استقرار فرع التطوير main
، ولكن قد يواجه مشكلات في الاستقرار أثناء دورة التطوير.
لاستنساخ المصادر من جيثب:
استنساخ بوابة 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_test -j8
| يمكنك أيضًا ترجمة وتثبيت hipBLAS عن طريق إضافة -DCHIP_BUILD_HIPBLAS=ON
ملاحظة: إذا لم يكن لديك libOpenCL.so (على سبيل المثال من حزمة ocl-icd-opencl-dev
)، ولكن تم تثبيت libOpenCL.so.1 فقط، فسيفشل CMake في العثور عليه ويعطل الواجهة الخلفية لـ OpenCL. توضح هذه المشكلة حلاً بديلاً.
لإنشاء chipStar للاستخدام مع وحدة معالجة الرسومات ARM Mali G52، استخدم الخطوات التالية:
قم ببناء 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، يمكن اتباع الخطوات الافتراضية. يوجد حل تلقائي مطبق لمشكلة في تطبيق OpenCL الخاص بـ PowerVR.
هناك بعض القيود: لن تعمل النوى التي تستخدم النوع المزدوج، وقد لا تعمل النوى التي تستخدم مجموعات فرعية، وقد تواجه أيضًا أخطاء OpenCL غير متوقعة مثل CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST ومشكلات أخرى.
لاحظ أن chipStar يعتمد على تطبيق OpenCL الخاص الذي توفره Imagination Technologies. لقد نجحنا في تجميع وتشغيل chipStar باستخدام جهاز VisionFive2، باستخدام صورة Debian 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 أو Arc.export CHIP_PLATFORM=N # إذا كانت هناك منصات OpenCL متعددة موجودة على النظام، فاختر أي منها تريد استخدامه .يمكنك دائمًا التحقق من الجهاز الذي يستخدمه chipStar عن طريق: CHIP_LOGLEVEL=info ./build/hipInfo
python3 $SOURCE_DIR/scripts/check.py $BUILD_DIR $DEVICE $BACKEND
يرجى الرجوع إلى وثائق المستخدم للحصول على إرشادات حول كيفية استخدام chipStar المثبت لإنشاء برامج CUDA/HIP.
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(default)> # تفريغ كود SPIR-V الذي تم إنشاؤه إلى ملفCHIP_JIT_FLAGS=<flags> # علامات JIT إضافيةCHIP_L0_COLLECT_EVENTS_TIMEOUT=<N(30s default)> # Timeout in ثواني لجمع المستوى صفر eventsCHIP_L0_EVENT_TIMEOUT=<N(0 default) # المهلة بالثواني للمدة التي يجب أن ينتظرها المستوى صفر في الحدث قبل انتهاء المهلةCHIP_SKIP_UNINIT=<ON/OFF(default)> # إذا تم تمكينه، فسيتخطى عدم تهيئة كائنات الواجهة الخلفية لـ chipStar عند إنهاء البرنامجCHIP_MODULE_CACHE_DIR=/ path/to/desired/dir # ذاكرة التخزين المؤقت للوحدة/البرنامج dir. القيمة الافتراضية هي $HOME/.cache/chipStar، إذا كان التخزين المؤقت غير مرغوب فيه، فاضبطه على سلسلة فارغة، أي تصدير CHIP_MODULE_CACHE_DIR=
مثال:
╭─pvelesko@cupcake ~╰─$ clinfo -l النظام الأساسي رقم 0: Intel(R) OpenCL Graphics `-- الجهاز رقم 0: Intel(R) Arc(TM) A380 Graphicsالمنصة رقم 1: Intel(R) OpenCL Graphics `-- الجهاز رقم 0: Intel(R) UHD Graphics 770
بناءً على هذه القيم، إذا أردنا التشغيل على OpenCL iGPU:
تصدير CHIP_BE=openclexport CHIP_PLATFORM=1تصدير CHIP_DEVICE=0
ملحوظة: المستوى صفر ليس له معادل لـ clinfo. عادةً، إذا كان لديك أكثر من جهاز من المستوى صفر، فلن يكون هناك سوى نظام أساسي واحد، لذا قم بتعيين CHIP_PLATFORM=0 ثم CHIP_DEVICE على الجهاز الذي تريد استخدامه. *يمكنك التحقق من اسم الجهاز عن طريق تشغيل نموذج يطبع الاسم مثل build/samples/0_MatrixMultiply/MatrixMultiply
يحدث هذا غالبًا عندما لا يتضمن أحدث إصدار مثبت من دول مجلس التعاون الخليجي libstdc++، ويختار Clang++ افتراضيًا أحدث إصدار تم العثور عليه بغض النظر، وينتهي الأمر بالفشل في ربط برامج C++. تتم مناقشة المشكلة هنا.
يمكن حل المشكلة عن طريق تحديد ملف تكوين Clang++ الذي يجبر مجلس التعاون الخليجي على تحقيق ما نريد. مثال:
صدى --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
إذا كان جهازك لا يدعم المحاكاة، فيمكنك تخطي هذه الاختبارات مع توفير خيار -DSKIP_TESTS_WITH_DOUBLES=ON
في وقت تكوين cmake.