ISO C++ and SYCL Join for the Future of Heterogeneous Programming
by Michael Wong, VP R&D, Codeplay Software
Share this on:
SYCL is being talked about a lot, especially now that it has been selected as the programming model for Argonne National Lab’s Aurora supercomputer, the first exascale supercomputer in the world. The US Exascale Computing Project selects a programming model based on its exacting standard compliance because they have workloads that last decades, while their hardware can change every few years. They tend to avoid proprietary programming models, believing in open standards that are collaboratively contributed to by many companies, instead of being defined by a few or single entity. SYCL’s selection is the group’s belief that it is an open standard that can be relied on long into the future.
SYCL was designed from the ground up to be ISO C++ first, then augmented with heterogeneous support using OpenCL. SYCL is part of a set of open specifications developed by The Khronos Group and sits in the “Parallel Computation Group.”
It is a single-source C++ parallel programming abstraction or framework that takes standard ISO C++ application code, including frameworks like TensorFlow, and compiles them with a host CPU compiler, and a device SYCL compiler generating code for many types of processors.
Two of the main objectives of the SYCL standards are to:
Ensure SYCL uses only standard ISO C++ syntax
Align SYCL, and in the long term converge, with ISO C++
There are several implementations of SYCL already available – ComputeCpp,DPC++,hipSYCL, and triSYCL. You can find details of each of these on the https://sycl.tech/#get-sycl website alongside other information including news, videos, and research papers.
In 2020, the proposed future roadmap of SYCL was unveiled and it is clear how the standard has moved to be more closely aligned with the C++ ISO standard.
This year will see a provisional SYCL specification made available for public review during Q3, with a final specification release in Q4 2020. This version of SYCL will be based on C++17, aligning with the latest ratified version of the ISO C++ standard. This means it enables exciting C++ features such as Class Template Argument Deduction (CTAD) and Deduction Guides that make code less verbose. We have also changed the naming scheme to naming by year rather than being related to OpenCL versioning, allowing us to be based on multiple back-end options. We have seen already that it is possible to build back-ends using PTX for NVIDIA processors and HIP for AMD processors.
We are now projecting that a future SYCL version will be released after 2021 (exact version to be named later) and will be based on C++20 which is likely to be ratified at the end of the year. This shows the increasing alignment that SYCL is developing with ISO C++ and we are also contributing our heterogeneous knowledge into the ISO specifications and adapting C++ features to ensure they can accommodate parallel and heterogeneous architectures.
SYCL has had tremendous growth in the last three years with Working Group participation up 100 percent. We now have an active presence at the Supercomputing conference due to US National Laboratory interest and Intel support for the Aurora supercomputer using oneAPI and DPC++. There is active open-source collaborative implementation in the LLVM/Clang project which hosts its weekly meeting.
We are now seeing the adoption of SYCL in HPC for exascale computing, in AI for automotive ADAS and self-driving vehicles, as well as increasingly in FPGA, AI, and custom chips. We will continue the tight integration with ISO C++ and OpenCL but ensure flexibility for alternative back-ends. Look for more open collaboration using GitHub and continued cadence of ratification of between 1.5-3 years, just like ISO C++.
And just like ISO C++, we plan to look ahead to a future where we integrate their features, such as
Executors, coroutines, futures
Adapt property mechanism
Parallel algorithm with ranges
It’s a testament to the progress of SYCL that we have a growing group of skilled individuals that can deliver a standard that works for all heterogeneous systems. There is now a group of more than 30 at the working group meetings and there continues to be strong attendance from AMD, Argonne National Laboratory, Arm, Codeplay, Intel, Qualcomm, University of Bristol, University of Salerno and Xilinx. The ecosystem is strong and continues to grow with contributions in research, benchmarks, linear algebra, and Machine learning.
The commits have recently spiked and grown in our repositories. These spikes show when we are about to release, and the massive recent activity is as we prepare for SYCL 2020:
In this chart, you see all the ways you can participate in SYCL, and three out of four of them require no membership with Khronos. Anyone can suggest a feature, or a fix and a small fee will allow you to participate in the design of features in the working group and give you a larger voice on the future of SYCL.
In conclusion, it’s advisable to focus on open collaboration and deliver the best we can for the heterogeneous world both in ISO C++ and the SYCL world so that both can converge in the future. Our intention is that SYCL will always have a role in working on the latest devices and research and together with ISO C++, and many other heterogeneous frameworks, drive towards the best possible future for heterogeneous computing. In that future, the only thing that matters is that the consumer gains via the best model possible.