triSYCL adalah proyek penelitian untuk bereksperimen dengan spesifikasi standar SYCL dan memberikan umpan balik kepada komite SYCL_Khronos Group dan juga kepada komite ISO C++.
Baru-baru ini, proyek ini telah digunakan untuk bereksperimen dengan pemrograman C++ tingkat tinggi untuk AMD AIE CGRA yang terinspirasi oleh beberapa konsep SYCL, seperti yang dijelaskan dalam ACAP++ & AIE++: ekstensi C++ untuk arsitektur AMD Versal AIE CGRA.
Karena kurangnya sumber daya , implementasi SYCL ini sangat tidak lengkap dan tidak boleh digunakan oleh pengguna akhir biasa. Untungnya kini terdapat banyak implementasi SYCL lain yang tersedia, termasuk beberapa implementasi kuat seperti DPC++ atau hipSYCL yang dapat digunakan pada berbagai target.
Implementasi ini terutama didasarkan pada fitur C++23 yang didukung dengan OpenMP atau TBB untuk eksekusi paralel pada CPU, dengan Boost.Compute untuk lapisan interoperabilitas OpenCL non-sumber tunggal dan dengan versi LLVM/Clang eksperimental untuk compiler perangkat (dari 2017-2018 yang sekarang sudah usang) memberikan pengalaman SYCL sumber tunggal lengkap, biasanya menargetkan perangkat SPIR. Karena di SYCL terdapat fall-back host, implementasi CPU ini dapat dilihat sebagai implementasi dari fall-back ini juga.
Sejak sekitar tahun 2018 Intel telah berupaya keras dalam proyek oneAPI DPC++ SYCL mereka untuk melakukan upstream SYCL ke LLVM/Clang, ada proyek lain tentang menggabungkan implementasi oneAPI DPC++ SYCL dengan triSYCL di https://github.com/triSYCL /sycl untuk memberikan pengalaman pengguna yang lebih baik untuk AMD FPGA daripada menggunakan kompiler perangkat eksperimental kami yang kikuk dan usang. Namun hal ini masih sangat eksperimental karena rantai alat AMD didasarkan pada versi lama LLVM/Clang yang tidak kompatibel dan tidak ada satupun yang didukung oleh tim produk AMD.
triSYCL telah digunakan untuk bereksperimen dan memberikan umpan balik untuk SYCL 1.2, 1.2.1, 2.2, 2020 dan bahkan bahasa kernel OpenCL C++ 1.0 dari OpenCL 2.2.
Ini disediakan apa adanya, tanpa jaminan apa pun, dengan lisensi yang sama dengan LLVM/Clang.
Pimpinan teknis: Ronan di keryell point FR. Pengembangan dimulai pertama kali di AMD, kemudian sebagian besar didanai oleh Xilinx dan sekarang lagi oleh AMD sejak Xilinx diakuisisi oleh AMD pada tahun 2022.
Dimungkinkan untuk mendapatkan magang berbayar di sekitar triSYCL, jika Anda memiliki beberapa keterampilan yang terkait dengan proyek ini. Hubungi pimpinan teknis mengenai hal ini. AMD juga membuka lowongan di bidang ini... :-)
SYCL adalah DSEL (Bahasa Tertanam Khusus Domain) modern berbasis C++ sumber tunggal dan standar terbuka dari Khronos yang bertujuan memfasilitasi pemrograman akselerator heterogen dengan memanfaatkan konsep yang ada yang terinspirasi oleh OpenCL, CUDA, C++AMP, OpenMP...
Kernel tipikal saat diluncurkan terlihat seperti kode C++ modern murni ini:
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 ;
});
});
Lihat misalnya di https://github.com/triSYCL/triSYCL/blob/master/tests/examples/demo_parallel_matrix_add.cpp untuk contoh lengkap.
SYCL dikembangkan di dalam komite Khronos SYCL dan oleh karena itu, untuk informasi lebih lanjut tentang SYCL, lihat https://www.khronos.org/sycl
Perhatikan bahwa meskipun konsep di balik SYCL terinspirasi oleh konsep OpenCL, model pemrograman SYCL adalah model grafik tugas asinkron yang sangat umum untuk komputasi heterogen yang menargetkan berbagai kerangka kerja dan API dan tidak ada hubungannya dengan OpenCL itu sendiri, kecuali saat menggunakan mode interoperabilitas API OpenCL , seperti target lainnya.
Untuk ekosistem SYCL, lihat https://sycl.tech
Sebagian besar upaya kami saat ini terfokus pada ekstensi, seperti menargetkan AMD FPGA dan Versal ACAP AIE CGRA, menyediakan cara untuk memprogram CPU, GPU, FPGA, dan CGRA secara bersamaan dalam program C++ sumber tunggal.
Proyek ini sedang dalam proses dan saat ini kami hanya menargetkan sebagian perangkat generasi pertama, AIE/AIE1, sedangkan model AMD RyzenAI saat ini seperti Ryzen 9 7940HS memiliki AIE-ML/AIE2 sebagai XDNA/NPU/ IPU.
Model pemrograman generasi pertama, ACAP++ didasarkan pada konstruksi C++17/C++20.
Lihat https://github.com/triSYCL/sycl/blob/sycl/unified/master/sycl/test/acap/test_aie_mandelbrot.cpp dan sekitarnya, tes/acap dan direktori lain yang dimulai dengan acap untuk beberapa contoh kode yang berjalan di C++ murni emulasi CPU perpustakaan dengan proyek ini.
Lihat doc/acap.rst untuk mengetahui lebih banyak tentang cara menginstal/menggunakan lingkungan ACAP++.
Runtime untuk emulasi CPU dan perangkat AIE ditemukan di include/triSYCL/vendor/Xilinx yang juga memerlukan kompiler khusus yang disediakan oleh https://github.com/triSYCL/sycl untuk dijalankan pada papan VCK190.
Model pemrograman generasi kedua, AIE++ didasarkan pada konstruksi C++23/C++26, memungkinkan sintaksis yang lebih ringkas.
Lihat di sekitar https://github.com/triSYCL/sycl/blob/sycl/unified/master/sycl/test/aie/mandelbrot.cpp untuk beberapa contoh.
Runtime untuk emulasi CPU dan dukungan perangkat AIE ditemukan di include/aie dan kompiler untuk dukungan perangkat adalah https://github.com/triSYCL/sycl
Proyek sumber terbuka lain terkait AIE yang menarik untuk diprogram AIE:
Beberapa dokumentasi tentang AMD AIE CGRA:
Silakan lihat tentang SYCL untuk mengetahui beberapa konteks, daftar presentasi, beberapa proyek terkait.
SYCL adalah perpustakaan template, jadi tidak diperlukan instalasi nyata.
Namun ada beberapa contoh yang dapat Anda buat.
Lihat Pengujian.
Arsitektur runtime dan kompiler triSYCL menjelaskan basis kode dengan beberapa diagram tingkat tinggi tetapi juga bagaimana mungkin untuk mengkompilasi dan menggunakan kompiler perangkat usang pada beberapa AMD FPGA misalnya. Sekarang lihat https://github.com/triSYCL/sycl saja.
Beberapa detail tentang konfigurasi dan organisasi CMake dapat ditemukan di CMake.
Ya, ada beberapa makro yang digunakan di triSYCL! Lihat makro Pra-prosesor yang digunakan di triSYCL untuk mengetahui beberapa di antaranya.
Lihat Variabel lingkungan dengan triSYCL.
Lihat Kemungkinan masa depan.
Dokumentasi implementasi triSYCL sendiri dapat ditemukan di https://trisycl.github.io/triSYCL/Doxygen/triSYCL/html dan https://trisycl.github.io/triSYCL/Doxygen/triSYCL/triSYCL-implementation-refman .pdf
ctest
dan berfungsi di Windows 10 dengan Visual Studio 2017. Ia juga berfungsi dengan Ubuntu WSL di Windows. :-) Informasi lebih lanjut