triSYCL เป็นโครงการวิจัยเพื่อทดลองข้อกำหนดเฉพาะของมาตรฐาน SYCL และให้ข้อเสนอแนะแก่คณะกรรมการ Khronos Group SYCL และคณะกรรมการ ISO C++ ด้วย
เมื่อเร็วๆ นี้ โปรเจ็กต์นี้ใช้เพื่อทดลองการเขียนโปรแกรม C++ ระดับสูงสำหรับ AMD AIE CGRA ที่ได้รับแรงบันดาลใจจากแนวคิด SYCL บางอย่าง ดังที่อธิบายไว้ใน ACAP++ และ AIE++: ส่วนขยาย C++ สำหรับสถาปัตยกรรม AMD Versal AIE CGRA
เนื่องจากขาดทรัพยากร การใช้งาน SYCL นี้จึงไม่สมบูรณ์มากและไม่ควรถูกใช้โดยผู้ใช้ทั่วไป โชคดีที่ขณะนี้มีการใช้งาน SYCL อื่นๆ อีกมากมาย รวมถึงการใช้งานที่แข็งแกร่งบางอย่าง เช่น DPC++ หรือ hipSYCL ที่สามารถใช้กับเป้าหมายต่างๆ
การใช้งานนี้อิงตามคุณสมบัติ C++23 ที่ได้รับการสนับสนุนด้วย OpenMP หรือ TBB เป็นหลักสำหรับการดำเนินการแบบขนานบน CPU พร้อมด้วย Boost.Compute สำหรับเลเยอร์การทำงานร่วมกันของ OpenCL ที่ไม่ใช่แหล่งเดียว และด้วยเวอร์ชัน LLVM/Clang รุ่นทดลองสำหรับคอมไพเลอร์อุปกรณ์ (จาก 2017-2018 ซึ่งปัจจุบันล้าสมัยแล้ว) ให้ประสบการณ์ SYCL จากแหล่งเดียวเต็มรูปแบบ โดยทั่วไปจะกำหนดเป้าหมายไปที่อุปกรณ์ SPIR เนื่องจากใน SYCL มีโฮสต์สำรอง การใช้งาน CPU นี้จึงถือได้ว่าเป็นการใช้งานฟอลแบ็คนี้เช่นกัน
ตั้งแต่ประมาณปี 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 และแม้แต่ภาษาเคอร์เนล OpenCL C++ 1.0 จาก OpenCL 2.2
สิ่งนี้มีให้ตามที่เป็นอยู่ โดยไม่มีการรับประกันใดๆ โดยมีใบอนุญาตเดียวกันกับ LLVM/Clang
หัวหน้าฝ่ายเทคนิค: Ronan ที่ keryell point FR การพัฒนาเริ่มต้นครั้งแรกที่ AMD จากนั้นได้รับทุนสนับสนุนจาก Xilinx เป็นหลัก และตอนนี้อีกครั้งโดย AMD นับตั้งแต่ Xilinx ถูกซื้อโดย AMD ในปี 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 ++ ล้วนๆ การจำลอง CPU ของไลบรารีกับโปรเจ็กต์นี้
ดูที่ doc/acap.rst เพื่อทราบข้อมูลเพิ่มเติมเกี่ยวกับวิธีการติดตั้ง/ใช้งานสภาพแวดล้อม ACAP++
รันไทม์สำหรับการจำลอง CPU และอุปกรณ์ 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 สำหรับตัวอย่างบางส่วน
รันไทม์สำหรับการจำลอง CPU และการรองรับอุปกรณ์ 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 :-) ข้อมูลเพิ่มเติม