SYCL

SYCL
SYCL
SYCL logo
원본 작성자크로노스 그룹
개발자크로노스 그룹
초기 릴리즈2014년 3월; 8년(2014-03)
안정적 해제
2020년 개정 4 / 2021년 11월 12일; 4개월 전(2021-11-12)
운영 체제크로스 플랫폼
플랫폼크로스 플랫폼
유형고급 프로그래밍 언어
웹사이트www.khronos.org/sycl/ sycl.tech

SYCL은 다양한 하드웨어 가속기의 프로그래밍 생산성을 향상시키기 위한 상위 수준의 프로그래밍 모델이다.순수 C++17을 기반으로 한 단일 소스 도메인별 임베디드 언어(DSEL)이다.크로노스그룹이 2014년 3월 발표한 표준이다.

이름의 유래

SYCL('sickle'로 발음됨)은 약어가 아닌 이름이다.특히 SYCL 개발자들은 이름에 OpenCL에 대한 참조가 포함되어 있지 않음을 명확히 하였다.[1]

목적

SYCL은 완전한 표준 C++를 사용하여 이기종 프로세서에 대한 코드를 "단일 소스" 스타일로 작성할 수 있도록 OpenCL에서 영감을 받은 기본 개념, 이식성 및 효율성을 기반으로 구축된 로열티 없는 교차 플랫폼 추상화 레이어로서, SYCL은 C++ 템플릿 기능이 두 가지 호스를 모두 포함할 수 있는 단일 소스 개발을 가능하게 한다.t와 장치 코드는 하드웨어 가속기를 사용하는 복잡한 알고리즘을 구성한 다음, 소스 코드 전체에 걸쳐 다른 유형의 데이터에 다시 사용한다.

SYCL 표준이 OpenCL 워킹그룹의 상위 프로그래밍 모델 하위그룹으로 시작되어 원래 OpenCLSIRFR과 함께 사용하기 위해 개발된 반면, SYCL은 2019년 9월 20일부터 SYCL 2020을 시작으로 하는 Khronos 그룹 워크그룹이다.다른 시스템을 타겟으로 할 수 있는 eous 프레임워크.이는 기존의 네이티브 라이브러리를 사용하여 프로그래밍 작업을 단순화하고 최대 성능에 도달하는 것과 같이 대상 API와의 완전한 상호운용성을 가능하게 하면서 모든 가속 API를 대상으로 하는 일반 백엔드의 개념으로 가능하다.예를 들어, hipSYCL 구현은 AMD의 크로스벤더 HIP를 통해 ROCm과 CUDA를 목표로 한다.

버전

SYCL은 2014년 3월 GDC에서 잠정 버전 1.2로 도입되었고,[2] 이후 2015년 5월 IWOCL 2015에서 SYCL 1.2 최종 버전이 도입되었다.[3]

이전 SYCL 1.2.1 시리즈의 최신 버전은 2020년 4월 27일에 발행된 SYCL 1.2.1 개정 7이다(2017년[4] 12월 6일 첫 번째 버전이 발표됨).

2016년[5] 5월 IWOCL 2016에서 C++14OpenCL 2.2를 목표로 SYCL 2.2가 도입되었다.그러나 SYCL 위원회는 이 버전을 확정하지 않고, SYCL 2020으로 이어진 인공지능 엔진을 포함한 현재의 하드웨어 가속기의 다양성을 다루기 위해 보다 유연한 SYCL 규격을 지향하기를 원했다.

최신 버전은 2021년 11월에 발행된 SYCL 2020 개정 4로,[6] 2020년 6월 30일에 발행된 SYCL 2020 임시 사양 개정 1에 대한 이용자와 이행자의 피드백을 고려하여 2021년 2월 9일에 발행된 개정 2의 첫 공개로부터의 진화다.[7]C++17과 OpenCL 3.0 지원은 이 릴리스의 주요 타깃이다.USM(Unified Shared Memory)은 OpenCL과 CUDA를 지원하는 GPU의 주요 기능 중 하나이다.

IWOCL 2021에서는 로드맵이 제시되었다.DPC++, ComputeCpp, triSYCL, hipSYCL 및 neoSYCL은 SYCL의 주요 구현사항이며, 다음 개발대상은 향후 SYCL 202x에서 C++20의 지원이다.[8]

구현

  • DPC++: (데이터 병렬 C++)는 LLVM과 1API용 SYCL을 도입하기 위한 인텔의 오픈소스 프로젝트다.C++17과 SYCL 2020이 있는 C++20의 일부는 이 컴파일러 프레임워크의 기반이다.[9][10]
  • ComputeCpp: 커뮤니티 버전을 사용하는 기업 코드 플레이의 SYCL 1.2.1 일치 프레임워크
  • HIPSYCL: OpenCL 커플링 및 이미지가 없는 불완전한 1.2.1 지원, 부분적으로는 SYCL 2020은 ROCM(AMD), CUDA(Nvidia), OpenMP(CPU) 및 Level Zero(Intel)를 지원한다.실제 버전은 2021년 3월 0.9.1이다.[13][14][15]
  • triSYCL: C++20 기반, OpenMP 및 OpenCL 기반, 느린 개발, 불완전, DPC++ 기반 버전
  • neoSYCL: SYCL 1.2.1 거의 완료, hpc SX-Aurora Tsubasa의 경우 이미지 지원과 같은 OpenCL 특정 기능 없음
  • SYCL-gtx: C++11 지원, OpenCL 1.2+ 지원, 완료와는 거리가 멀고 실제 개발 없음
  • 실칸은 실험 상태에서 벌칸 장치에 SYCL을 구현한 것이다.[20]
  • 폴리게이스트는 인스턴사의 지원을 받는 MLIR을 통한 포크 컴파일 SYCL을 보유하고 있다.[22]

소프트웨어

  • 그로맥스: SYCL 2020은 그로맥스 버전 2021의 일부다.[23]
  • ISO 26262의 지원을 받아 자율 주행을 위해 자동차 산업에서 사용.[24]

자습서

ComputeCpp SYCL 가이드에는 몇 가지 자습서가 있다.[25]

면허증

Makefiles 및 일부 스크립트, SYCL 헤더 및 SYCL 코드 샘플과 같은 규격을 구축하기 위한 원본 파일은 Apache 2.0 라이센스에 따른다.[26]라이센스에 대한 자세한 내용은 https://www.apache.org/licenses/LICENSE-2.0.html를 참조하십시오.

다른 API와의 비교

개방형 표준 SYCL과 OpenCLNvidia의 독점 스택 CUDAAMD가 지원하는 오픈소스 스택 ROCmHIP의 프로그래밍 모델과 유사하다.

크로노스 그룹 영역에서 OpenCLVulkan은 로우 레벨 비 싱글 소스 API이고 SYCL은 하이 레벨 싱글 소스 C++ 도메인별 임베디드 언어(DSEL)이다.

쿠다

By comparison, the single-source C++ domain-specific embedded language version of CUDA, which is actually named "CUDA Runtime API", is somewhat similar to SYCL. But there is actually a less known non single-source version of CUDA which is called "CUDA Driver API", similar to OpenCL, and used for example by the CUDA Runtime API implementation itself.

SYCL은 프로그래머가 버퍼액세스기를 사용하여 호스트와 장치 간에 데이터를 명시적으로 전송하지 못하도록 하는 C++ AMP 기능을 확장한다(CUDA 6의 Unified Memory 도입 전).그러나 SYCL 2020을 시작으로 버퍼접근기 대신 USM을 사용하여 CUDA의 Unified Memory와 유사한 하위 레벨 프로그래밍 모델을 사용하는 것도 가능하다.

모든 커널 사이에 명시적 종속성 그래프를 구축할 필요가 없고, 통신과 계산이 겹치는 커널의 자동 비동기식 스케줄링을 제공하기 때문에 SYCL은 C++ AMP와 CUDA보다 높은 수준이다.이 모든 것은 컴파일러 지원을 요구하지 않고 접근자 개념을 사용함으로써 이루어진다.

C++ AMP, CUDA와 달리 SYCL은 C++ 확장 없이 순수 C++ DSEL로, 특정 컴파일러 없이 순수 런타임에 의존하는 기본 CPU 구현이 가능하다.이는 아직 아키텍처와 컴파일러를 사용할 수 없는 상태에서 애플리케이션을 디버깅하거나 새로운 아키텍처의 프로토타이핑에 매우 유용하다.

ROCm HIP

HIP를 통한 HipSYCL 구현은 CUDA와 HIP에 SYCL 프로그래밍을 추가한다.

기타 프로그래밍 모델

SYCL은 불투명 다차원 배열 객체(SYCL 버퍼 및 Kokos 어레이), 병렬 실행을 위한 다차원 범위, 감소(SYCL 2020에 추가)를 사용하는 [27]Kokkos 프로그래밍 모델과 유사한 점이 많다.Kokkos 커뮤니티의 피드백에 대응하여 SYCL 2020의 수많은 특징들이 추가되었다.

참고 항목

참조

  1. ^ Keryell, Ronan. "Meaning of SYCL". GitHub. Retrieved 5 February 2021.
  2. ^ Khronos Group (19 March 2014). "Khronos Releases SYCL 1.2 Provisional Specification". Khronos. Retrieved 20 August 2017.
  3. ^ Khronos Group (11 May 2015). "Khronos Releases SYCL 1.2 Final Specification". Khronos. Retrieved 20 August 2017.
  4. ^ Khronos Group (6 December 2017). "The Khronos Group Releases Finalized SYCL 1.2.1". Khronos. Retrieved 12 December 2017.
  5. ^ Khronos Group (18 April 2016). "Khronos Releases OpenCL 2.2 Provisional Specification with OpenCL C++ Kernel Language". Khronos. Retrieved 18 September 2017.
  6. ^ Khronos Group (9 February 2021). "Khronos Releases SYCL 2020 Specification". Khronos. Retrieved 22 February 2021.
  7. ^ Khronos Group (30 June 2020). "Khronos Steps Towards Widespread Deployment of SYCL with Release of SYCL 2020 Provisional Specification". Khronos. Retrieved 4 December 2020.
  8. ^ https://www.iwocl.org/wp-content/uploads/k04-iwocl-syclcon-2021-wong-slides.pdf[bare URL PDF]
  9. ^ https://www.iwocl.org/wp-content/uploads/k01-iwocl-syclcon-2021-reinders-slides.pdf[bare URL PDF]
  10. ^ https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/dpc-compiler.html#gs.zk33gz
  11. ^ https://developer.codeplay.com/products/computecpp/ce/home
  12. ^ "Guides - ComputeCpp CE - Products - Codeplay Developer".
  13. ^ https://www.iwocl.org/wp-content/uploads/23-iwocl-syclcon-2021-alpay-slides.pdf[bare URL PDF]
  14. ^ "HipSYCL - a SYCL implementation for CPUs and GPUs". GitHub. 13 January 2022.
  15. ^ "HipSYCL feature support". GitHub. 27 June 2021.
  16. ^ "triSYCL". GitHub. 6 January 2022.
  17. ^ Ke, Yinan; Agung, Mulya; Takizawa, Hiroyuki (2021). "NeoSYCL: A SYCL implementation for SX-Aurora TSUBASA". The International Conference on High Performance Computing in Asia-Pacific Region. pp. 50–57. doi:10.1145/3432261.3432268. ISBN 9781450388429. S2CID 231597238.
  18. ^ Ke, Yinan; Agung, Mulya; Takizawa, Hiroyuki (2021). "NeoSYCL: A SYCL implementation for SX-Aurora TSUBASA". The International Conference on High Performance Computing in Asia-Pacific Region. pp. 50–57. doi:10.1145/3432261.3432268. ISBN 9781450388429. S2CID 231597238.
  19. ^ "Sycl-GTX". GitHub. 10 April 2021.
  20. ^ https://www.iwocl.org/wp-content/uploads/14-iwocl-syclcon-2021-thoman-slides.pdf[bare URL PDF]
  21. ^ "Polygeist". GitHub. 25 February 2022.
  22. ^ "Inteon". 25 February 2022.
  23. ^ https://www.iwocl.org/wp-content/uploads/k03-iwocl-syclcon-2021-trevett-updated.mp4.pdf[bare URL PDF]
  24. ^ https://www.iwocl.org/wp-content/uploads/20-iwocl-syclcon-2021-rudkin-slides.pdf[bare URL PDF]
  25. ^ "Introduction to GPGPU programming with SYCL". Codeplay. Retrieved 3 October 2017.
  26. ^ "SYCL Open Source Specification". GitHub. 10 January 2022.
  27. ^ Hammond, Jeff R.; Kinsner, Michael; Brodman, James (2019). "A comparative analysis of Kokkos and SYCL as heterogeneous, parallel programming models for C++ applications". Proceedings of the International Workshop on OpenCL: 1–2. doi:10.1145/3318170.3318193. ISBN 9781450362306. S2CID 195777149.

외부 링크