SYCL
| 원저자 | 크로노스 그룹 |
|---|---|
| 개발자 | 크로노스 그룹 |
| 발표일 | 2014년 3월 |
| 안정화 버전 | 2020 revision 11
/ 2025년 11월 7일[1] |
| 운영 체제 | 크로스 플랫폼 |
| 플랫폼 | 크로스 플랫폼 |
| 종류 | 고급 프로그래밍 언어 |
| 웹사이트 | www |
SYCL(발음: "sickle")은 다양한 하드웨어 가속 장치에서 프로그래밍 생산성을 높이기 위한 고수준 프로그래밍 모델이다. 이는 순수 C++17에 기반한 단일 소스 임베디드 도메인 특화 언어(eDSL)이다. 2014년 3월에 발표된 크로노스 그룹이 개발한 표준이다.
이름의 유래
[편집]SYCL(발음: ‘sickle’)은 원래 System-wide Compute Language의 약자였으나,[2] 2020년부터 SYCL 개발자들은 SYCL이 고유 명칭이며 더 이상 두문자어가 아니고 OpenCL과는 무관함을 분명히 했다.[3]
목적
[편집]SYCL은 OpenCL에서 영감을 받은 개념, 이식성, 효율성을 기반으로 하는 로열티 없는 크로스 플랫폼 추상화 계층으로, 완전히 표준화된 C++를 사용하여 "단일 소스" 스타일로 이기종 프로세서용 코드를 작성할 수 있게 한다. SYCL은 C++ 템플릿 함수가 호스트 코드와 장치 코드를 모두 포함하여 하드웨어 가속 장치를 사용하는 복잡한 알고리즘을 구성하고, 이를 소스 코드 전반에서 다양한 데이터 유형에 재사용할 수 있는 단일 소스 개발을 가능하게 한다.
SYCL 표준은 처음에는 OpenCL 워킹 그룹의 고수준 프로그래밍 모델 하위 그룹으로 시작되었고 원래 OpenCL 및 SPIR과 함께 사용하기 위해 개발되었으나, 2019년 9월 20일부터 OpenCL 워킹 그룹으로부터 독립된 크로노스 그룹 워킹 그룹이 되었다. SYCL 2020부터는 다른 시스템을 대상으로 할 수 있는 더 범용적인 이기종 프레임워크로 일반화되었다. 이는 이제 범용 백엔드 개념을 통해 가능해졌으며, 기존 네이티브 라이브러리를 사용하여 성능을 극대화하고 프로그래밍 노력을 단순화하는 등 대상 API와 완전한 상호 운용성을 유지하면서 모든 가속 API를 대상으로 할 수 있게 되었다. 예를 들어, AdaptiveCPP 구현체는 AMD의 교차 벤더 HIP을 통해 ROCm 및 CUDA를 대상으로 한다.
버전
[편집]SYCL은 2014년 3월 GDC에서 프로비저널 버전 1.2로 소개되었고,[4] 이후 2015년 5월 IWOCL 2015에서 SYCL 1.2 최종 버전이 소개되었다.[5]
이전 SYCL 1.2.1 시리즈의 최신 버전은 2020년 4월 27일에 게시된 SYCL 1.2.1 리비전 7이다(첫 번째 버전은 2017년 12월 6일에 게시됨[6]).
SYCL 2.2 프로비저널은 2016년 5월 IWOCL 2016에서 C++14 및 OpenCL 2.2를 대상으로 소개되었다.[7] 그러나 SYCL 위원회는 이 버전을 최종 확정하지 않고, 인공지능 엔진을 포함한 현재 하드웨어 가속 장치의 증가하는 다양성을 해결하기 위해 더 유연한 SYCL 사양으로 나아가기로 했으며, 이것이 SYCL 2020으로 이어졌다.
최신 버전은 2022년 11월 13일에 게시된 SYCL 2020 리비전 6이며, 2021년 6월 30일에 게시된 SYCL 2020 프로비저널 사양 리비전 1에 대한 사용자와 구현자들의 피드백을 반영하여 2021년 2월 9일에 게시된 리비전 2의 첫 릴리스에서 진화한 것이다.[8][9] C++17 및 OpenCL 3.0 지원이 이 릴리스의 주요 목표이다. 통합 공유 메모리(USM)는 OpenCL 및 CUDA를 지원하는 GPU의 주요 기능 중 하나이다.
IWOCL 2021에서 로드맵이 발표되었다. DPC++, ComputeCpp, AdaptiveCPP, triSYCL 및 neoSYCL이 SYCL의 주요 구현체이다. 다음 개발 목표는 향후 SYCL 202x에서 C++20을 지원하는 것이다.[10]
구현체
[편집]| 이름 | SYCL 프런트엔드 기능 | 장치/API 백엔드 | 비고 / 상태 |
|---|---|---|---|
| Data Parallel C++ (DPC++) | SYCL 2020 (C++17 및 C++20 일부)[11] | LLVM 및 oneAPI[12] | 인텔의 오픈 소스 프로젝트. |
| ComputeCpp | SYCL 1.2.1 준수[13] | 구체적인 백엔드는 자세히 나와 있지 않으나 프레임워크에 플랫폼 지원 가이드가 있음.[14] | Codeplay 사의 프레임워크로 커뮤니티 버전이 있음. 현재 DPC++를 위해 더 이상 사용되지 않음.[15] |
| AdaptiveCpp (이전의 hipSYCL 및 Open SYCL) | 1.2.1 지원 미완성 (이미지, OpenCL 상호 운용성 누락); SYCL 2020 부분 지원.[16] 또한 C++ 표준 병렬성(std::execution) 및 CUDA/HIP 프로그래밍 모델의 방언인 PCUDA를 지원함. |
AMD (ROCm), Nvidia (CUDA), Intel (SPIR-V를 통한 Level Zero), CPU (LLVM + OpenMP)[17] | JIT(Just-in-time) 런타임을 사용하여 완전히 범용적인 바이너리를 생성할 수 있음.[18] |
| triSYCL | 미완성. C++20 지원. | OpenMP 및 OpenCL 기반. 실험적인 AMD FPGA 및 CGRA 지원.[19] | 느린 개발. 주로 테스트 환경으로 사용되며 DPC++ 기반 버전이 있음. |
| neoSYCL | SYCL 1.2.1 거의 완성 (이미지 지원 등 OpenCL 전용 기능 누락)[20] | SX-Aurora Tsubasa[21] | |
| SYCL-gtx | C++11 지원[22], 미완성 | OpenCL 1.2+[23] | 실질적인 개발 없음[24]. |
| Sylkan | ? | 벌컨 장치[25] | 실험 단계. 벌컨이 SPIR-V를 사용하므로 커널에 구조화된 제어 흐름이 필요함. |
| Inteon Polygeist | ? | ?[26] | MLIR 프런트엔드인 LLVM "Polygeist"의 포크. Inteon 사가 후원.[27] |
확장
[편집]SYCL 안전 필수 (Safety Critical)
[편집]2023년 3월, 크로노스 그룹은 안전 필수 시스템을 위한 고수준 이기종 컴퓨팅 프레임워크를 만드는 것을 목표로 SYCL SC 워킹 그룹의 창설을 발표했다.[28] 이러한 시스템은 항공 전자 공학, 자동차, 산업 및 의료 분야를 포함한 다양한 분야에 걸쳐 있다.
SYCL 안전 필수 프레임워크는 신뢰성과 안전성을 보장하기 위해 몇 가지 산업 표준을 준수할 것이다. 이러한 표준에는 중요 시스템에서 C++ 사용 지침을 제공하는 MISRA C++ 202X,[29] 항공 시스템 및 장비 인증의 소프트웨어 고려 사항 표준인 RTCA DO-178C / EASA ED-12C,[30] 도로 차량의 기능 안전과 관련된 ISO 26262/21448,[31] 전기/전자/프로그래밍 가능한 전자 안전 관련 시스템의 기능 안전을 다루는 IEC 61508, 의료 기기 소프트웨어의 수명 주기 요구 사항과 관련된 IEC 62304 등이 있다.[28]
소프트웨어
[편집]SYCL을 사용하는 몇 가지 주목할 만한 소프트웨어 분야는 다음과 같다(예시 포함):
리소스
[편집]크로노스 그룹은 SYCL 리소스 목록을 유지 관리한다.[38] Codeplay Software는 또한 sycl.tech 웹사이트에서 SYCL 생태계에 대한 뉴스와 기타 정보와 함께 튜토리얼을 제공한다.
라이선스
[편집]메이크파일 및 일부 스크립트와 같은 사양을 빌드하기 위한 소스 파일, SYCL 헤더 및 SYCL 코드 샘플은 아파치 라이선스 2.0 하에 있다.[39]
다른 도구와의 비교
[편집]오픈 표준인 SYCL과 OpenCL은 엔비디아의 독점 스택 CUDA 및 AMD가 지원하는 오픈 소스 스택 ROCm의 HIP 프로그래밍 모델과 유사하다.[40]
크로노스 그룹 영역에서 OpenCL과 벌컨은 저수준의 비단일 소스 API로, 하드웨어 자원과 작업에 대한 세밀한 제어를 제공한다. OpenCL은 다양한 하드웨어 유형 전반의 병렬 프로그래밍에 널리 사용되는 반면, 벌컨은 주로 고성능 그래픽 및 컴퓨팅 작업에 초점을 맞춘다.[41]
반면, SYCL은 고수준 단일 소스 C++ eDSL이다. 이를 통해 개발자는 CPU, GPU 및 기타 가속 장치를 포함한 이기종 컴퓨팅 시스템을 위한 코드를 단일 소스 접근 방식으로 작성할 수 있다. 즉, 호스트 코드와 장치 코드를 모두 동일한 C++ 소스 파일에 작성할 수 있음을 의미한다.[42]
CUDA
[편집]비교하자면, "CUDA 런타임 API"라고 명명된 CUDA의 단일 소스 C++ eDSL 버전은 SYCL과 다소 유사하다. 실제로 인텔은 CUDA 코드를 SYCL로 자동 변환하는 SYCLOMATIC이라는 도구를 출시했다.[43] 그러나 OpenCL과 유사하며, 예를 들어 CUDA 런타임 API 구현 자체에서 사용하는 "CUDA 드라이버 API"라고 불리는 덜 알려진 CUDA의 비단일 소스 버전이 존재한다.[40]
SYCL은 C++ AMP 기능을 확장하여 버퍼와 접근자(accessor)를 사용함으로써 프로그래머가 호스트와 장치 간에 데이터를 명시적으로 전송하지 않아도 되도록 한다. 이는 명시적인 데이터 전송이 필요했던 CUDA(CUDA 6의 Unified Memory 도입 이전)와 대조된다. SYCL 2020부터는 버퍼 기반 인터페이스를 대체하는 대신 증강하기 위해 통합 공유 메모리(USM)를 사용할 수 있으며,[44] CUDA의 통합 메모리와 유사한 저수준 프로그래밍 모델을 제공한다.[45]
SYCL은 모든 커널 간에 명시적인 종속성 그래프를 구축할 필요가 없으며, 컴파일러 지원 없이도 접근자 개념을 사용하여 통신 및 계산 오버랩과 함께 자동 비동기 커널 스케줄링을 제공하므로 C++ AMP 및 CUDA보다 고수준이다.[46]
C++ AMP 및 CUDA와 달리, SYCL은 C++ 확장이 없는 순수 C++ eDSL이다. 이를 통해 특정 컴파일러 없이 순수 런타임에 의존하는 기본 CPU 구현이 가능하다.[42]
DPC++[47]와 AdaptiveCpp[48] 컴파일러는 모두 CUDA와 유사하게 NVIDIA GPU를 위한 백엔드를 제공한다. 이를 통해 SYCL 코드를 컴파일하여 NVIDIA 하드웨어에서 실행할 수 있으며, 개발자는 CUDA 지원 GPU에서 SYCL의 고수준 추상화를 활용할 수 있다.[47][48]
인텔은 CUDA C++ 코드 기반을 SYCL C++로 자동 변환하기 위한 프리웨어인 "DPC++ 호환성 도구"(dpct)를 제공한다. SYCLomatic이라는 오픈 소스 버전의 도구도 있다.[49]
ROCm HIP
[편집]ROCm HIP은 Nvidia GPU, AMD GPU 및 x86 CPU를 대상으로 한다. HIP은 CUDA의 API와 매우 유사한 저수준 API이다.[50] 예를 들어, AMD는 CUDA 코드를 자동으로 HIP으로 변환할 수 있는 HIPIFY라는 도구를 출시했다.[51] 따라서 CUDA와 SYCL 간의 비교에서 언급된 많은 점은 HIP과 SYCL 간의 비교에도 적용된다.[52]
ROCm HIP은 다양한 벤더(AMD 및 Nvidia)와 가속기 유형(GPU 및 CPU)을 대상으로 할 수 있다는 점에서 SYCL과 유사한 점이 있다.[53] 그러나 SYCL은 더 광범위한 가속 장치와 벤더를 대상으로 할 수 있다. SYCL은 백엔드 개념을 통해 단일 애플리케이션 내에서 여러 유형의 가속 장치를 동시에 지원한다. 또한 SYCL은 순수 C++로 작성되는 반면, HIP은 CUDA처럼 일부 언어 확장을 사용한다. 이러한 확장으로 인해 HIP은 표준 C++ 컴파일러로 컴파일할 수 없다.[52]
DPC++[47]와 AdaptiveCpp[48] 컴파일러는 모두 HIP과 유사하게 NVIDIA 및 AMD GPU를 위한 백엔드를 제공한다. 이를 통해 SYCL 코드를 컴파일하고 이러한 벤더의 하드웨어에서 실행할 수 있으며, 개발자는 다양한 장치 및 플랫폼 전반에서 SYCL의 고수준 추상화를 활용할 수 있는 유연성을 제공받는다.[48][47]
Kokkos
[편집]SYCL은 불투명한 다차원 배열 객체(SYCL 버퍼 및 Kokkos 배열), 병렬 실행을 위한 다차원 범위, 리덕션(SYCL 2020에 추가됨) 사용을 포함하여 Kokkos 프로그래밍 모델과 많은 유사점이 있다.[54] SYCL 2020의 수많은 기능은 Kokkos 커뮤니티의 피드백에 대한 응답으로 추가되었다.[55]
SYCL은 이기종 시스템에 더 중점을 둔다. OpenCL과의 통합 덕분에 광범위한 장치에서 채택될 수 있다. 반면 Kokkos는 대부분의 HPC 플랫폼을 대상으로 하므로[56] 성능을 위해 HPC 지향적인 편이다.
2024년 현재 Kokkos 팀은 SYCL 백엔드를 개발 중이며,[57] 이를 통해 Kokkos는 이미 지원하는 플랫폼 외에도 인텔 하드웨어를 대상으로 할 수 있게 된다. 이 개발은 Kokkos의 적용 가능성을 넓히고 HPC 애플리케이션 내에서 서로 다른 하드웨어 아키텍처를 활용하는 데 더 큰 유연성을 허용한다.[54]
Raja
[편집]Raja[58][59]는 HPC 애플리케이션의 아키텍처 및 프로그래밍 이식성을 활성화하기 위한 C++ 소프트웨어 추상화 라이브러리이다.
SYCL과 마찬가지로 이기종 플랫폼 전반에 걸쳐 이식 가능한 코드를 제공한다. 그러나 SYCL과 달리 Raja는 CUDA, HIP, OpenMP 등과 같은 다른 프로그래밍 모델 위에 추상화 계층을 도입한다. 이를 통해 개발자는 코드를 한 번 작성하고 핵심 로직을 수정하지 않고도 다양한 백엔드에서 실행할 수 있다. Raja는 로렌스 리버모어 국립연구소(LLNL)에서 유지 관리 및 개발되는 반면, SYCL은 커뮤니티에서 유지 관리하는 오픈 표준이다.[41]
Kokkos와 마찬가지로 Raja는 HPC 사용 사례에 더 맞춰져 있으며 고성능 컴퓨팅 환경에서의 성능과 확장성에 초점을 맞춘다. 반면 SYCL은 더 광범위한 장치를 지원하므로 HPC를 넘어 다양한 유형의 애플리케이션에 더 범용적으로 사용할 수 있다.[59]
2024년 현재 Raja 팀은 SYCL 백엔드를 개발 중이며,[60] 이를 통해 Raja도 인텔 하드웨어를 대상으로 할 수 있게 될 것이다. 이 개발은 Raja의 이식성과 유연성을 향상시켜 SYCL의 기능을 활용하고 더 넓은 하드웨어 플랫폼 배열로 적용 가능성을 확장할 수 있게 할 것이다.[41]
OpenMP
[편집]OpenMP는 다중 코어 아키텍처 및 GPU에 주로 초점을 맞춰 외부 가속 장치로의 계산 오프로딩을 대상으로 한다.[61] 반면 SYCL은 다양한 유형의 하드웨어 가속 장치에 대한 지원을 가능하게 하는 OpenCL과의 통합으로 인해 더 광범위한 장치를 지향한다.[62]
OpenMP는 프라그마 기반 접근 방식을 사용하며, 여기서 프로그래머는 지시자로 코드에 주석을 달고 컴파일러가 병렬 실행 및 메모리 관리의 복잡성을 처리한다. 이러한 고수준 추상화 덕분에 개발자는 메모리 전송 및 동기화의 복잡한 세부 사항을 다루지 않고도 애플리케이션을 병렬화하기가 더 쉬워진다.[63]
OpenMP와 SYCL은 모두 C++를 지원하며 표준화되어 있다. OpenMP는 OpenMP ARB에 의해 표준화되고, SYCL은 크로노스 그룹에 의해 표준화된다.[41]
std::par
[편집]std::par은 C++17 표준의 일부이며[65] C++ 표준 컨테이너에서 알고리즘의 병렬 실행을 촉진하도록 설계되었다. 개발자가 std::for_each, std::transform, std::reduce와 같은 병렬 작업을 위한 실행 정책을 지정할 수 있도록 하여 외부 가속 장치를 활용하는 표준 방법을 제공한다. 이를 통해 코드의 상당한 변경 없이도 다중 코어 프로세서 및 기타 병렬 하드웨어를 효율적으로 사용할 수 있다.[66]
SYCL은 std::par의 백엔드로 사용될 수 있어 인텔, AMD, NVIDIA의 GPU를 포함한 다양한 외부 가속 장치와 기타 유형의 가속 장치에서 표준 알고리즘을 실행할 수 있다.[67] SYCL의 기능을 활용함으로써 개발자는 이기종 컴퓨팅 환경에서 원활하게 실행되는 표준 C++ 코드를 작성할 수 있다. 이 통합은 서로 다른 하드웨어 플랫폼 전반에서 더 큰 유연성과 성능 최적화를 허용한다.[67]
std::par의 백엔드로서 SYCL을 사용하는 것은 컴파일러에 종속적이므로 SYCL과 C++17에 도입된 병렬 실행 정책을 모두 지원하는 컴파일러가 필요하다.[67] 이러한 컴파일러의 예로는 DPC++ 및 기타 SYCL 준수 컴파일러가 있다. 이러한 컴파일러를 사용하면 개발자는 친숙한 C++ 표준 알고리즘과 실행 정책을 사용하면서 SYCL의 메모리 관리 및 병렬 실행 추상화를 활용할 수 있다.[47]
같이 보기
[편집]각주
[편집]- ↑ “Khronos SYCL Registry - The Khronos Group Inc”. 《registry.khronos.org》.
- ↑ Keryell, Ronan (2019년 11월 17일). “SYCL: A Single-Source C++ Standard for Heterogeneous Computing” (PDF). 《Khronos.org》. 2023년 9월 26일에 확인함.
- ↑ Keryell, Ronan. “Meaning of SYCL”. 《GitHub》. 2021년 2월 5일에 확인함.
- ↑ Khronos Group (2014년 3월 19일). “Khronos Releases SYCL 1.2 Provisional Specification”. 《Khronos》. 2017년 8월 20일에 확인함.
- ↑ Khronos Group (2015년 5월 11일). “Khronos Releases SYCL 1.2 Final Specification”. 《Khronos》. 2017년 8월 20일에 확인함.
- ↑ Khronos Group (2017년 12월 6일). “The Khronos Group Releases Finalized SYCL 1.2.1”. 《Khronos》. 2017년 12월 12일에 확인함.
- ↑ Khronos Group (2016년 4월 18일). “Khronos Releases OpenCL 2.2 Provisional Specification with OpenCL C++ Kernel Language”. 《Khronos》. 2017년 9월 18일에 확인함.
- ↑ Khronos Group (2021년 2월 9일). “Khronos Releases SYCL 2020 Specification”. 《Khronos》. 2021년 2월 22일에 확인함.
- ↑ Khronos Group (2020년 6월 30일). “Khronos Steps Towards Widespread Deployment of SYCL with Release of SYCL 2020 Provisional Specification”. 《Khronos》. 2020년 12월 4일에 확인함.
- ↑ “SYCL State of the Union Keynote SYCLCon 2021” (PDF). 《www.iwocl.org》.
- ↑ Reinders, James. “SYCL, DPC++, XPU's, oneAPI” (PDF). 《www.iwocl.org》.
- ↑ “Compile Cross-Architecture: Intel® oneAPI DPC++/C++ Compiler”.
- ↑ “Home - ComputeCpp CE - Products - Codeplay Developer”.
- ↑ “Guides - ComputeCpp CE - Products - Codeplay Developer”.
- ↑ “The Future of ComputeCpp” (영어). 《www.codeplay.com》. 2023년 12월 9일에 확인함.
- ↑ “AdaptiveCpp feature support”. 《GitHub》. 2023년 7월 4일.
- ↑ “AdaptiveCpp/doc/compilation.md at develop · AdaptiveCpp/AdaptiveCpp” (영어). 《GitHub》.
- ↑ “AdaptiveCpp (formerly known as hipSYCL / Open SYCL)”. 《GitHub》. 2023년 7월 4일.
- ↑ “triSYCL”. 《GitHub》. 2022년 1월 6일.
- ↑ 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》. 50–57쪽. doi:10.1145/3432261.3432268. ISBN 9781450388429. S2CID 231597238.
- ↑ 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》. 50–57쪽. doi:10.1145/3432261.3432268. ISBN 9781450388429. S2CID 231597238.
- ↑ “Sycl-GTX”. 《GitHub》. 2021년 4월 10일.
- ↑ “Sycl-GTX”. 《GitHub》. 2021년 4월 10일.
- ↑ “Sycl-GTX”. 《GitHub》. 2021년 4월 10일.
- ↑ Thoman, Peter; Gogl, Daniel; Fahringer, Thomas. “Sylkan - Towards a Vulkan Compute Target Platform for SYCL” (PDF).
- ↑ “Polygeist”. 《GitHub》. 2022년 2월 25일.
- ↑ “Inteon”. 2022년 2월 25일.
- 1 2 “Khronos to Create SYCL SC Open Standard for Safety-Critical C++ Based Heterogeneous Compute” (영어). 《The Khronos Group》. 2023년 3월 15일. 2024년 7월 10일에 확인함.
- ↑ “MISRA” (영국 영어). 2024년 7월 11일에 확인함.
- ↑ “ED-12C Aviation Software Standards Training - Airborne” (영어). 《Eurocae》. 2024년 7월 11일에 확인함.
- ↑ “SOTIF – practical training”. 《www.kuglermaag.com》. 2024년 7월 11일에 확인함.
- ↑ Trevett, Neil. “State of the Union OpenCL Working Group” (PDF). 《www.iwocl.org》.
- ↑ Crisci, Luigi; Salimi Beni, Majid; Cosenza, Biagio; Scipione, Nicolò; Gadioli, Davide; Vitali, Emanuele; Palermo, Gianluca; Beccari, Andrea (2022년 5월 10일). 〈Towards a Portable Drug Discovery Pipeline with SYCL 2020〉. 《International Workshop on OpenCL》. IWOCL '22. New York, NY, USA: Association for Computing Machinery. 1–2쪽. doi:10.1145/3529538.3529688. ISBN 978-1-4503-9658-5.
- ↑ Solis-Vasquez, Leonardo; Mascarenhas, Edward; Koch, Andreas (2023년 4월 18일). 〈Experiences Migrating CUDA to SYCL: A Molecular Docking Case Study〉. 《International Workshop on OpenCL》. IWOCL '23. New York, NY, USA: Association for Computing Machinery. 1–11쪽. doi:10.1145/3585341.3585372. ISBN 979-8-4007-0745-2.
- ↑ “Llama.CPP/Docs/Backend/SYCL.md at master · ggerganov/Llama.CPP”. 《GitHub》.
- ↑ Rudkin, Illya. “Can SYCL and OpenCL meet the challenges of functional safety” (PDF). 《2021-04-09》.
- ↑ Rangel, Esteban Miguel; Pennycook, Simon John; Pope, Adrian; Frontiere, Nicholas; Ma, Zhiqiang; Madananth, Varsha (2023년 11월 12일). 〈A Performance-Portable SYCL Implementation of CRK-HACC for Exascale〉. 《Proceedings of the SC '23 Workshops of the International Conference on High Performance Computing, Network, Storage, and Analysis》. SC-W '23. New York, NY, USA: Association for Computing Machinery. 1114–1125쪽. arXiv:2310.16122. doi:10.1145/3624062.3624187. ISBN 979-8-4007-0785-8.
- ↑ “SYCL Resources”. 《khronos.org》. Khronos group. 2014년 1월 20일.
- ↑ “SYCL Open Source Specification”. 《GitHub》. 2022년 1월 10일.
- 1 2 Breyer, Marcel; Van Craen, Alexander; Pflüger, Dirk (2022년 5월 10일). 〈A Comparison of SYCL, OpenCL, CUDA, and OpenMP for Massively Parallel Support Vector Machine Classification on Multi-Vendor Hardware〉. 《International Workshop on OpenCL》. IWOCL '22. New York, NY, USA: Association for Computing Machinery. 1–12쪽. doi:10.1145/3529538.3529980. ISBN 978-1-4503-9658-5.
- 1 2 3 4 “SYCL - C++ Single-source Heterogeneous Programming for Acceleration Offload” (영어). 《The Khronos Group》. 2014년 1월 20일. 2024년 7월 12일에 확인함.
- 1 2 “SYCL™ 2020 Specification (revision 8)”. 《registry.khronos.org》. 2024년 7월 12일에 확인함.
- ↑ 《oneapi-src/SYCLomatic》, oneAPI-SRC, 2024년 7월 11일, 2024년 7월 11일에 확인함
- ↑ “SYCL™ 2020 Specification (revision 9), 4.8. Unified shared memory (USM)”. 2024년 10월 30일에 확인함.
- ↑ Chen, Jolly; Dessole, Monica; Varbanescu, Ana Lucia (2024년 1월 24일), 《Lessons Learned Migrating CUDA to SYCL: A HEP Case Study with ROOT RDataFrame》, arXiv:2401.13310
- ↑ “Buffer Accessor Modes” (영어). 《Intel》. 2024년 7월 11일에 확인함.
- 1 2 3 4 5 “DPC++ Documentation — oneAPI DPC++ Compiler documentation”. 《intel.github.io》. 2024년 7월 11일에 확인함.
- 1 2 3 4 “AdaptiveCpp/doc/sycl-ecosystem.md at develop · AdaptiveCpp/AdaptiveCpp” (영어). 《GitHub》. 2024년 7월 11일에 확인함.
- ↑ “Migrate CUDA* to DPC++ Code: Intel® DPC++ Compatibility Tool” (영어). 《Intel》.
- ↑ 《ROCm/HIP》, AMD ROCm™ Software, 2024년 7월 11일, 2024년 7월 11일에 확인함
- ↑ “HIPIFY/README.md at amd-staging · ROCm/HIPIFY” (영어). 《GitHub》. 2024년 7월 11일에 확인함.
- 1 2 Jin, Zheming; Vetter, Jeffrey S. (November 2022). 〈Evaluating Nonuniform Reduction in HIP and SYCL on GPUs〉. 《2022 IEEE/ACM 8th International Workshop on Data Analysis and Reduction for Big Scientific Data (DRBSD)》. IEEE. 37–43쪽. doi:10.1109/DRBSD56682.2022.00010. ISBN 978-1-6654-6337-9. OSTI 1996715.
- ↑ Reguly, Istvan Z. (2023년 11월 12일). 〈Evaluating the performance portability of SYCL across CPUs and GPUs on bandwidth-bound applications〉. 《Proceedings of the SC '23 Workshops of the International Conference on High Performance Computing, Network, Storage, and Analysis》. SC-W '23. New York, NY, USA: Association for Computing Machinery. 1038–1047쪽. arXiv:2309.10075. doi:10.1145/3624062.3624180. ISBN 979-8-4007-0785-8.
- 1 2 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.
- ↑ Dufek, Amanda S.; Gayatri, Rahulkumar; Mehta, Neil; Doerfler, Douglas; Cook, Brandon; Ghadar, Yasaman; DeTar, Carleton (November 2021). 〈Case Study of Using Kokkos and SYCL as Performance-Portable Frameworks for Milc-Dslash Benchmark on NVIDIA, AMD and Intel GPUs〉. 《2021 International Workshop on Performance, Portability and Productivity in HPC (P3HPC)》. IEEE. 57–67쪽. doi:10.1109/P3HPC54578.2021.00009. ISBN 978-1-6654-2439-4.
- ↑ Trott, Christian R.; Lebrun-Grandié, Damien; Arndt, Daniel; Ciesko, Jan; Dang, Vinh; Ellingwood, Nathan; Gayatri, Rahulkumar; Harvey, Evan; Hollman, Daisy S. (2022), “Kokkos 3: Programming Model Extensions for the Exascale Era”, 《IEEE Transactions on Parallel and Distributed Systems》 33 (4): 805, Bibcode:2022ITPDS..33..805T, doi:10.1109/TPDS.2021.3097283, 2024년 7월 10일에 확인함
- ↑ Arndt, Daniel; Lebrun-Grandie, Damien; Trott, Christian (2024년 4월 8일). 〈Experiences with implementing Kokkos' SYCL backend〉. 《Proceedings of the 12th International Workshop on OpenCL and SYCL》. IWOCL '24. New York, NY, USA: Association for Computing Machinery. 1–11쪽. doi:10.1145/3648115.3648118. ISBN 979-8-4007-1790-1. OSTI 2336667.
- ↑ 《LLNL/RAJA》, Lawrence Livermore National Laboratory, 2024년 7월 8일, 2024년 7월 10일에 확인함
- 1 2 Beckingsale, David A.; Scogland, Thomas RW; Burmark, Jason; Hornung, Rich; Jones, Holger; Killian, William; Kunen, Adam J.; Pearce, Olga; Robinson, Peter; Ryujin, Brian S. (November 2019). 〈RAJA: Portable Performance for Large-Scale Scientific Applications〉. 《2019 IEEE/ACM International Workshop on Performance, Portability and Productivity in HPC (P3HPC)》. IEEE. 71–81쪽. doi:10.1109/P3HPC49587.2019.00012. ISBN 978-1-7281-6003-0. OSTI 1488819.
- ↑ Homerding, Brian; Vargas, Arturo; Scogland, Tom; Chen, Robert; Davis, Mike; Hornung, Rich (2024년 4월 8일). 〈Enabling RAJA on Intel GPUs with SYCL〉. 《Proceedings of the 12th International Workshop on OpenCL and SYCL》. IWOCL '24. New York, NY, USA: Association for Computing Machinery. 1–10쪽. doi:10.1145/3648115.3648131. ISBN 979-8-4007-1790-1.
- ↑ tim.lewis. “Home” (미국 영어). 《OpenMP》. 2024년 7월 10일에 확인함.
- ↑ “OpenCL - The Open Standard for Parallel Programming of Heterogeneous Systems” (영어). 《The Khronos Group》. 2013년 7월 21일. 2024년 7월 12일에 확인함.
- ↑ Friedman, Richard. “Reference Guides” (미국 영어). 《OpenMP》. 2024년 7월 12일에 확인함.
- ↑ “OpenMP Compilers & Tools”.
- ↑ “std::execution::seq, std::execution::par, std::execution::par_unseq, std::execution::unseq - cppreference.com”. 《en.cppreference.com》. 2024년 7월 10일에 확인함.
- ↑ “Accelerating Standard C++ with GPUs Using stdpar” (미국 영어). 《NVIDIA Technical Blog》. 2020년 8월 4일. 2024년 7월 10일에 확인함.
- 1 2 3 Alpay, Aksel; Heuveline, Vincent (2024년 4월 8일). 〈AdaptiveCpp Stdpar: C++ Standard Parallelism Integrated into a SYCL Compiler〉. 《Proceedings of the 12th International Workshop on OpenCL and SYCL》. IWOCL '24. New York, NY, USA: Association for Computing Machinery. 1–12쪽. doi:10.1145/3648115.3648117. ISBN 979-8-4007-1790-1.
외부 링크
[편집]- Khronos SYCL webpage
- The SYCL specifications in Khronos registry
- C++17 ParallelSTL in SYCL
- SYCL tech resources
- Codeplay ComputeCpp SYCL implementation
- Implementation of SYCL started by Intel with the goal of Clang/LLVM up-streaming
- AdaptiveCpp (formerly known as hipSYCL / Open SYCL)
- triSYCL open-source SYCL implementation
- "SYCL 2020 Launches with New Name, New Features, and High Ambition", HPCWire article (2021 Feb. 9th)
- James Reinders, Ben Ashbaugh, James Brodman, Michael Kinsner, John Pennycook, Xinmin Tian: "Data Parallel C++: Mastering DPC++ for Programming of Heterogeneous Systems using C++ and SYCL", Apress (2021), OpenAccess.