triSYCL은 SYCL 표준 사양을 실험하고 크로노스 그룹 SYCL_위원회와 ISO C++ 위원회에 피드백을 제공하는 연구 프로젝트입니다.
최근에 이 프로젝트는 ACAP++ 및 AIE++: AMD Versal AIE CGRA 아키텍처용 C++ 확장에 설명된 대로 일부 SYCL 개념에서 영감을 받은 AMD AIE CGRA용 고급 C++ 프로그래밍을 실험하는 데 사용되었습니다.
리소스 부족으로 인해 이 SYCL 구현은 매우 불완전하며 일반 최종 사용자가 사용해서는 안 됩니다. 다행스럽게도 이제 다양한 대상에서 사용할 수 있는 DPC++ 또는 hipSYCL과 같은 일부 강력한 구현을 포함하여 사용 가능한 다른 SYCL 구현이 많이 있습니다.
이 구현은 주로 CPU에서의 병렬 실행을 위한 OpenMP 또는 TBB, 단일 소스가 아닌 OpenCL 상호 운용성 계층을 위한 Boost.Compute 및 장치 컴파일러를 위한 실험적인 LLVM/Clang 버전을 사용하여 지원되는 C++23 기능을 기반으로 합니다( 2017~2018(현재는 사용되지 않음)은 일반적으로 SPIR 장치를 대상으로 완전한 단일 소스 SYCL 환경을 제공합니다. SYCL에는 호스트 폴백이 있으므로 이 CPU 구현도 이 폴백의 구현으로 볼 수 있습니다.
2018년경부터 Intel은 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 케릴 지점의 Ronan. 개발은 AMD에서 처음 시작되었고 그 후 Xilinx가 주로 자금을 지원했으며 2022년 Xilinx가 AMD에 인수된 이후 AMD가 다시 자금을 지원했습니다.
이 프로젝트와 관련된 기술이 있으면 triSYCL 주변에서 유급 인턴십을 할 수 있습니다. 이에 대해서는 기술 책임자에게 문의하세요. AMD도 이 분야에서 채용하고 있습니다... :-)
SYCL은 OpenCL, CUDA, C++AMP, OpenMP에서 영감을 받은 기존 개념을 활용하여 이기종 가속기의 프로그래밍을 용이하게 하는 것을 목표로 하는 Khronos의 단일 소스 최신 C++ 기반 DSEL(도메인 특정 임베디드 언어) 및 개방형 표준입니다.
출시된 일반적인 커널은 다음과 같은 순수 최신 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를 참조하세요.
현재 우리의 노력의 대부분은 단일 소스 C++ 프로그램에서 CPU, GPU, FPGA 및 CGRA를 동시에 프로그래밍하는 방법을 제공하는 AMD FPGA 및 Versal ACAP AIE CGRA를 대상으로 하는 확장에 중점을 두고 있습니다.
이 프로젝트는 진행 중이며 현재 우리는 부분적으로 1세대 장치인 AIE/AIE1만을 대상으로 하고 있는 반면, Ryzen 9 7940HS와 같은 AMD RyzenAI의 현재 모델에는 XDNA/NPU/로 AIE-ML/AIE2가 있습니다. IPU.
1세대 프로그래밍 모델인 ACAP++는 C++17/C++20 구성을 기반으로 했습니다.
순수 C++에서 실행되는 일부 코드 샘플은 https://github.com/triSYCL/sycl/blob/sycl/unified/master/sycl/test/acap/test_aie_mandelbrot.cpp 및 그 주변, 테스트/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에서도 작동합니다. :-) 추가 정보