triSYCL は、SYCL 標準の仕様を実験し、Khronos Group SYCL_committee および ISO C++ 委員会にフィードバックを提供する研究プロジェクトです。
最近では、「ACAP++ および AIE++: AMD Versal AIE CGRA アーキテクチャ用の C++ 拡張機能」で説明されているように、このプロジェクトは、いくつかの SYCL 概念に触発された AMD AIE CGRA の高レベル C++ プログラミングを実験するために使用されています。
リソースが不足しているため、この SYCL 実装は非常に不完全であるため、通常のエンドユーザーは使用しないでください。幸いなことに、現在では、さまざまなターゲットで使用できる DPC++ や hipSYCL などの強力な実装を含む、他にも多くの SYCL 実装が利用可能です。
この実装は主に、CPU での並列実行のために OpenMP または TBB でサポートされた C++23 機能、非単一ソース OpenCL 相互運用性レイヤーとして Boost.Compute、およびデバイス コンパイラとして実験的な LLVM/Clang バージョンを使用して基づいています。 2017-2018 (現在は廃止されています) は、完全な単一ソース SYCL エクスペリエンスを提供し、通常は SPIR デバイスを対象としています。 SYCL にはホスト フォールバックがあるため、この CPU 実装もこのフォールバックの実装とみなすことができます。
2018 年頃から、インテルは SYCL を LLVM/Clang にアップストリームするための独自の oneAPI DPC++ SYCL プロジェクトに多大な労力を費やしてきました。https://github.com/triSYCL には、oneAPI DPC++ SYCL 実装と triSYCL のマージに関する別のプロジェクトがあります。 /sycl を使用すると、廃止された実験的な不格好なデバイス コンパイラを使用する代わりに、AMD FPGA のユーザー エクスペリエンスが向上します。しかし、AMD ツールチェーンは互換性のない古いバージョンの LLVM/Clang に基づいており、これらはいずれも AMD 製品チームによってサポートされていないため、これはまだ非常に実験的です。
triSYCL は、SYCL 1.2、1.2.1、2.2、2020、さらには OpenCL 2.2 からの OpenCL C++ 1.0 カーネル言語の実験とフィードバックの提供に使用されています。
これは、LLVM/Clang と同じライセンスで、無保証で現状のまま提供されます。
テクニカルリード: ケリルポイントFRのロナン。開発は最初 AMD で始まり、その後主にザイリンクスから資金提供を受け、2022 年にザイリンクスが AMD に買収されたため、現在は再び AMD によって開発されています。
このプロジェクトに関連するスキルをお持ちであれば、triSYCL 周辺で有給のインターンシップを受けることが可能です。これについては技術責任者にお問い合わせください。 AMD もこの分野で採用を行っています... :-)
SYCL は、シングルソースの最新の C++ ベースの DSEL (Domain Specific Embedded Language) であり、OpenCL、CUDA、C++AMP、OpenMP などからインスピレーションを得た既存の概念を活用することで、異種アクセラレータのプログラミングを容易にすることを目的とした Khronos のオープン スタンダードです。
起動時の一般的なカーネルは、次の純粋な最新の 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 API 相互運用モードを使用する場合を除き、OpenCL 自体とは何の関係もないことに注意してください。 、他のターゲットと同様に。
SYCL エコシステムについては、https://sycl.tech をご覧ください。
現在の取り組みのほとんどは、AMD FPGA や Versal ACAP AIE CGRA をターゲットとする拡張機能に焦点を当てており、単一ソース C++ プログラムで CPU、GPU、FPGA、および CGRA を同時にプログラムする方法を提供します。
このプロジェクトは進行中のもので、現在は部分的に第 1 世代のデバイスである AIE/AIE1 のみを対象としていますが、Ryzen 9 7940HS などの AMD RyzenAI の現行モデルには XDNA/NPU/ として AIE-ML/AIE2 が搭載されています。 IPU。
第一世代のプログラミング モデルである ACAP++ は、C++17/C++20 構造に基づいていました。
純粋な C++ で実行されるコード サンプルについては、https://github.com/triSYCL/sycl/blob/sycl/unified/master/sycl/test/acap/test_aie_mandelbrot.cpp とその周辺、tests/acap、および acap で始まるその他のディレクトリを参照してください。このプロジェクトのライブラリ CPU エミュレーション。
ACAP++ 環境のインストール/使用方法の詳細については、doc/acap.rst を参照してください。
CPU エミュレーションと AIE デバイスのランタイムは include/triSYCL/vendor/Xilinx にあります。これには、VCK190 ボードで実行するには https://github.com/triSYCL/sycl によって提供される特別なコンパイラも必要です。
第 2 世代のプログラミング モデルである 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
使用でき、Visual Studio 2017 を備えた Windows 10 上で動作します。Windows 上の Ubuntu WSL でも動作します。 :-) 詳細情報