triSYCL هو مشروع بحثي لتجربة مواصفات معيار SYCL ولتقديم تعليقات إلى لجنة Khronos Group SYCL_committee وأيضًا إلى لجنة ISO C++.
في الآونة الأخيرة، تم استخدام هذا المشروع لتجربة برمجة C++ عالية المستوى لـ AMD AIE CGRA المستوحاة من بعض مفاهيم SYCL، كما هو موضح في امتدادات ACAP++ وAIE++: C++ لهندسة AMD Versal AIE CGRA.
نظرًا لنقص الموارد ، فإن تطبيق SYCL هذا غير مكتمل جدًا ويجب ألا يستخدمه المستخدم النهائي العادي. لحسن الحظ، هناك الآن العديد من التطبيقات الأخرى المتاحة لـ SYCL، بما في ذلك بعض التطبيقات القوية مثل DPC++ أو hipSYCL التي يمكن استخدامها على أهداف مختلفة.
يعتمد هذا التنفيذ بشكل أساسي على ميزات C++23 المدعومة بـ OpenMP أو TBB للتنفيذ المتوازي على وحدة المعالجة المركزية، مع Boost.Compute لطبقة التشغيل البيني OpenCL غير أحادية المصدر ومع إصدار LLVM/Clang التجريبي لمترجم الجهاز (من 2017-2018 والذي أصبح قديمًا الآن) يوفر تجربة SYCL كاملة أحادية المصدر، والتي تستهدف عادةً جهاز SPIR. نظرًا لوجود احتياطي للمضيف في SYCL، يمكن اعتبار تطبيق وحدة المعالجة المركزية هذا بمثابة تطبيق لهذا البديل أيضًا.
منذ عام 2018 تقريبًا، بذلت Intel الكثير من الجهد في مشروع oneAPI DPC++ SYCL الخاص بها لتدفق SYCL إلى LLVM/Clang، وهناك مشروع آخر حول دمج تطبيق oneAPI DPC++ SYCL مع triSYCL على https://github.com/triSYCL /sycl لإعطاء تجربة مستخدم أكبر لـ AMD FPGA بدلاً من استخدام برنامج التحويل البرمجي القديم للأجهزة التجريبية القديمة. لكن هذا لا يزال تجريبيًا للغاية لأن سلسلة أدوات AMD تعتمد على إصدارات قديمة غير متوافقة من LLVM/Clang ولا يدعم فرق منتجات AMD أيًا منها.
تم استخدام triSYCL للتجربة وتقديم التعليقات لـ SYCL 1.2 و1.2.1 و2.2 و2020 وحتى لغة kernel OpenCL C++ 1.0 من OpenCL 2.2.
يتم توفير ذلك كما هو، دون أي ضمان، وبنفس ترخيص LLVM/Clang.
القائد الفني: رونان في نقطة كيريل FR. بدأت التطويرات أولاً في AMD، ثم تم تمويلها بشكل أساسي من قبل Xilinx والآن مرة أخرى من قبل AMD منذ أن استحوذت AMD على Xilinx في عام 2022.
من الممكن الحصول على تدريب مدفوع الأجر حول triSYCL، إذا كانت لديك بعض المهارات المتعلقة بهذا المشروع. اتصل بالقائد الفني بخصوص هذا الأمر. تقوم AMD أيضًا بالتوظيف في هذا المجال... :-)
SYCL عبارة عن DSEL (لغة مضمنة خاصة بالمجال) حديثة أحادية المصدر ومعتمدة على C++ ومعيار مفتوح من Khronos يهدف إلى تسهيل برمجة المسرعات غير المتجانسة من خلال الاستفادة من المفاهيم الحالية المستوحاة من OpenCL وCUDA وC++AMP وOpenMP...
تبدو النواة النموذجية عند إطلاقها مثل كود C++ الحديث الخالص:
queue {}.submit([&](handler &h) {
auto accA = bufA. get_access < access ::mode:: read >(h);
auto accB = bufB. get_access < access ::mode:: write >(h);
h. parallel_for < class myKernel >(myRange, [=](item i) {
accA[i] = accB[i] + 1 ;
});
});
ابحث عن المثال على https://github.com/triSYCL/triSYCL/blob/master/tests/examples/demo_parallel_matrix_add.cpp للحصول على مثال كامل.
تم تطوير SYCL داخل لجنة Khronos SYCL، وبالتالي لمزيد من المعلومات حول SYCL، انظر إلى https://www.khronos.org/sycl
لاحظ أنه حتى لو كانت المفاهيم الكامنة وراء SYCL مستوحاة من مفاهيم OpenCL، فإن نموذج برمجة SYCL هو نموذج رسم بياني للمهام غير المتزامن عام جدًا للحوسبة غير المتجانسة التي تستهدف أطر عمل مختلفة وواجهة برمجة التطبيقات (API) وليس له علاقة بـ OpenCL نفسه، إلا عند استخدام وضع قابلية التشغيل البيني OpenCL API ، مثل أي هدف آخر.
للتعرف على النظام البيئي SYCL، انظر إلى https://sycl.tech
تركز معظم جهودنا الحالية على الامتدادات، مثل استهداف AMD FPGA وVersal ACAP AIE CGRA، مما يوفر طريقة لبرمجة وحدة المعالجة المركزية (CPU) ووحدة معالجة الرسومات (GPU) وFPGA وCGRA في نفس الوقت في برنامج C++ أحادي المصدر.
هذا المشروع قيد التنفيذ ونستهدف حاليًا جزئيًا فقط الجيل الأول من الأجهزة، AIE/AIE1، في حين أن النماذج الحالية من AMD RyzenAI مثل Ryzen 9 7940HS تحتوي على AIE-ML/AIE2 مثل XDNA/NPU/ الاتحاد البرلماني الدولي.
نموذج برمجة الجيل الأول، ACAP++، كان يعتمد على بنيات C++17/C++20.
راجع https://github.com/triSYCL/sycl/blob/sycl/unified/master/sycl/test/acap/test_aie_mandelbrot.cpp وما حولها، الاختبارات/acap والأدلة الأخرى التي تبدأ بـ acap لبعض عينات التعليمات البرمجية التي تعمل بلغة C++ الخالصة مضاهاة وحدة المعالجة المركزية للمكتبة مع هذا المشروع.
انظر إلى doc/acap.rst لمعرفة المزيد حول كيفية تثبيت/استخدام بيئة ACAP++.
تم العثور على وقت التشغيل لمحاكاة وحدة المعالجة المركزية وجهاز AIE في include/triSYCL/vendor/Xilinx والذي يتطلب أيضًا مترجمًا خاصًا يوفره https://github.com/triSYCL/sycl للتشغيل على لوحات VCK190.
يعتمد نموذج برمجة الجيل الثاني، AIE++، على بنيات C++23/C++26، مما يسمح ببناء جملة أكثر إيجازًا.
راجع https://github.com/triSYCL/sycl/blob/sycl/unified/master/sycl/test/aie/mandelbrot.cpp للحصول على بعض الأمثلة.
تم العثور على وقت التشغيل لمحاكاة وحدة المعالجة المركزية ودعم جهاز AIE في include/aie والمترجم لدعم الجهاز هو https://github.com/triSYCL/sycl
مشاريع أخرى مفتوحة المصدر تتعلق بـ AIE والتي تهم برنامج AIE:
بعض الوثائق حول AMD AIE CGRA:
يرجى الاطلاع على SYCL للحصول على بعض السياق وقائمة العروض التقديمية وبعض المشاريع ذات الصلة.
SYCL عبارة عن مكتبة قوالب، لذا لا يلزم التثبيت الحقيقي.
ومع ذلك، هناك بعض الأمثلة التي يمكنك بنائها.
انظر الاختبار.
تصف بنية وقت تشغيل triSYCL والمترجم قاعدة التعليمات البرمجية مع بعض المخططات عالية المستوى ولكن أيضًا كيف كان من الممكن تجميع واستخدام مترجم الجهاز القديم على بعض AMD FPGA على سبيل المثال. انظر الآن إلى https://github.com/triSYCL/sycl بدلاً من ذلك.
يمكن العثور على بعض التفاصيل حول تكوين وتنظيم CMake في CMake.
نعم، هناك بعض وحدات الماكرو المستخدمة في triSYCL! انظر إلى وحدات الماكرو الخاصة بالمعالج المسبق المستخدمة في triSYCL لاكتشاف بعضها.
راجع متغيرات البيئة باستخدام triSYCL.
انظر العقود الآجلة المحتملة.
يمكن العثور على وثائق تنفيذ triSYCL نفسها في https://trisycl.github.io/triSYCL/Doxygen/triSYCL/html وhttps://trisycl.github.io/triSYCL/Doxygen/triSYCL/triSYCL-implementation-refman .pdf
ctest
ويعمل على Windows 10 مع Visual Studio 2017. ويعمل أيضًا مع Ubuntu WSL على Windows. :-) مزيد من المعلومات