SYCL

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
SYCL
SYCL logo
Original author(s)Khronos Group
Developer(s)Khronos Group
Initial releaseMarch 2014 (2014-03)
Stable release
2020 revision 3 / March 4, 2021; 8 months ago (2021-03-04)
Operating systemCross-platform
PlatformCross-platform
TypeHigh-level programming language
Websitewww.khronos.org/sycl/ sycl.tech

SYCL is a higher-level programming model to improve programming productivity on various hardware accelerators. It is a single-source domain-specific embedded language (DSEL) based on pure C++17. It is a standard developed by Khronos Group, announced in March 2014.

Origin of the name[edit]

SYCL (pronounced ‘sickle’) is a name and not an acronym. In particular, SYCL developers made clear that the name contains no reference to OpenCL.[1]

Purpose[edit]

SYCL is a royalty-free, cross-platform abstraction layer that builds on the underlying concepts, portability and efficiency inspired by OpenCL that enables code for heterogeneous processors to be written in a “single-source” style using completely standard C++. SYCL enables single-source development where C++ template functions can contain both host and device code to construct complex algorithms that use hardware accelerators, and then re-use them throughout their source code on different types of data.

While the SYCL standard started as the higher-level programming model sub-group of the OpenCL working group and was originally developed for use with OpenCL and SPIR, SYCL is a Khronos Group workgroup independent from the OpenCL working group since September 20, 2019 and starting with SYCL 2020, SYCL has been generalized as a more general heterogeneous framework able to target other systems. This is now possible with the concept of a generic backend to target any acceleration API while enabling full interoperability with the target API, like using existing native libraries to reach the maximum performance along with simplifying the programming effort. For example, the hipSYCL implementation targets ROCm and CUDA via AMD's cross-vendor HIP.

Versions[edit]

SYCL was introduced at GDC in March 2014 with provisional version 1.2,[2] then the SYCL 1.2 final version was introduced at IWOCL 2015 in May 2015.[3]

The latest version for the previous SYCL 1.2.1 series is SYCL 1.2.1 revision 7 which was published on April 27, 2020 (the first version was published on December 6, 2017[4]).

SYCL 2.2 provisional was introduced at IWOCL 2016 in May 2016[5] targeting C++14 and OpenCL 2.2. But the SYCL committee preferred not to finalize this version and to move towards a more flexible SYCL specification to address the increasing diversity of current hardware accelerators, including artificial intelligence engines, which led to SYCL 2020.

The latest version is SYCL 2020 revision 2 which was published on February 9, 2021,[6] taking into account the feedback from users and implementors on the SYCL 2020 Provisional Specification revision 1 published on June 30, 2020.[7] C++17 and OpenCL 3.0 support are main targets of this release. Unified shared memory (USM) is one main feature for GPUs with OpenCL and CUDA support.

At IWOCL 2021 a roadmap was presented. DPC++, ComputeCpp, triSYCL, hipSYCL and neoSYCL are the main implementations of SYCL. Next Target in development is support of C++20 in future SYCL 202x. [8]

Implementations[edit]

  • DPC++: (data parallel C++) is an open source project of Intel to introduce SYCL for LLVM and oneAPI. C++17 and parts of C++20 with SYCL 2020 are base of this Compiler framework. [9][10]
  • ComputeCpp: SYCL 1.2.1 conformant framework of firm Codeplay with community version [11][12]
  • HipSYCL: incomplete 1.2.1 support without OpenCL coupling and images, partly SYCL 2020, supports RocM (AMD), CUDA (Nvidia), OpenMP (CPUs) and Level Zero (Intel). Actual Version is 0.9.1 in March 2021.[13][14][15]
  • triSYCL: based on OpenCL++ of OpenCL 2.2, slow development, incomplete, partly C++17 [16]
  • neoSYCL: SYCL 1.2.1 nearly complete, for hpc SX-Aurora Tsubasa, no OpenCL specific features like image support [17][18]
  • SYCL-gtx: C++11 support, for OpenCL 1.2+, far from complete, no actual development [19]
  • SYLKAN is an implementation of SYCL to Vulkan devices in an experimental state. [20]

Software[edit]

  • Gromacs: SYCL 2020 is Part of Gromacs Version 2021. [21]
  • use in automotive Industrie for autonomous driving with support of ISO 26262. [22]

Tutorials[edit]

There are a few tutorials in the ComputeCpp SYCL guides.[23]

License[edit]

The source files for building the specification, such as Makefiles and some scripts, the SYCL headers and the SYCL code samples are under the Apache 2.0 license. [24] Details of the license are at: https://www.apache.org/licenses/LICENSE-2.0.html

Comparison with other APIs[edit]

The open standards SYCL and OpenCL are similar to vendor-specific CUDA from Nvidia.

In the Khronos Group realm, OpenCL and Vulkan are the low-level non-single source API and SYCL is the high-level single-source C++ domain-specific embedded language.

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 extends the C++ AMP features relieving the programmer from explicitly transferring the data between the host and devices by using buffers and accessors, by opposition to CUDA (before the introduction of Unified Memory in CUDA 6). But starting with SYCL 2020, it is also possible to use USM instead of buffers and accessors to use a lower-level programming model similar to Unified Memory in CUDA.

SYCL is higher-level than C++ AMP and CUDA since you do not need to build an explicit dependency graph between all the kernels, and provides you automatic asynchronous scheduling of the kernels with communication and computation overlap. This is all done by using the concept of accessors, without requiring any compiler support.

Unlike C++ AMP and CUDA, SYCL is a pure C++ DSEL without any C++ extension, allowing a basic CPU implementation relying on pure runtime without any specific compiler. This is very useful for debugging an application or for prototyping for a new architecture without having the architecture and compiler available yet.

The hipSYCL implementation adds SYCL higher-level programming to CUDA and HIP.

SYCL has many similarities to the Kokkos programming model,[25] including the use of opaque multi-dimensional array objects (SYCL buffers and Kokkos arrays), multi-dimensional ranges for parallel execution, and reductions (added in SYCL 2020). Numerous features in SYCL 2020 were added in response to feedback from the Kokkos community.

See also[edit]

References[edit]

  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
  9. ^ https://www.iwocl.org/wp-content/uploads/k01-iwocl-syclcon-2021-reinders-slides.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. ^ https://developer.codeplay.com/products/computecpp/ce/guides/platform-support
  13. ^ https://www.iwocl.org/wp-content/uploads/23-iwocl-syclcon-2021-alpay-slides.pdf
  14. ^ https://github.com/illuhad/hipSYCL
  15. ^ https://github.com/hipSYCL/featuresupport
  16. ^ https://github.com/triSYCL/triSYCL
  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. ^ https://github.com/ProGTX/sycl-gtx
  20. ^ https://www.iwocl.org/wp-content/uploads/14-iwocl-syclcon-2021-thoman-slides.pdf
  21. ^ https://www.iwocl.org/wp-content/uploads/k03-iwocl-syclcon-2021-trevett-updated.mp4.pdf
  22. ^ https://www.iwocl.org/wp-content/uploads/20-iwocl-syclcon-2021-rudkin-slides.pdf
  23. ^ "Introduction to GPGPU programming with SYCL". Codeplay. Retrieved 3 October 2017.
  24. ^ https://github.com/KhronosGroup/SYCL-Docs/blob/SYCL-1.2.1/master/LICENSE.txt. Missing or empty |title= (help)
  25. ^ 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.

External links[edit]