Early Access to the SYCL Open Standard for C++ Acceleration

19 September 2016

At Codeplay, we believe that the full performance of today's highly parallel devices should not be locked down to one platform, but be available to all programmers by using open standards. That is why we are giving developers free, early access to ComputeCpp™, our implementation of the SYCL™ open standard. The SYCL specification from the Khronos™ Group is for developers who want to take software written using C++ single-source programming models like CUDA® or C++AMP and port to a wide range of OpenCL™ devices. The current early-access ComputeCpp Community Edition Beta release provides pre-conformance SYCL v1.2 support for AMD® and Intel® OpenCL GPUs and CPUs. Further operating system and device support is on its way. This version will let developers work on acceleration of open-source C++ software such as TensorFlow, Eigen and the C++ 17 Parallel STL. These projects are currently a work-in-progress, with this being a step towards building out an open standards based ecosystem.

SYCL is designed to not lock in your software development to one platform. There are a range of C++ single-source programming models available. Some of our sample code shows how you can write in a style that enables the same source code to be compiled with multiple, different C++ programming models. Alternatives are: CUDA, C++ AMP, HCC, C++ 17 Parallel STL and OpenMP®. What SYCL provides is acceleration using OpenCL devices, meaning you can accelerate your software on a wide range of platforms.

Why are we releasing the ComputeCpp Community Edition Beta? 

The next wave of innovation is in devices that can respond to their environment through embedded intelligence. This requires extremely complex processing within very low levels of power consumption. The only technologies that have demonstrated this massive performance-per-Watt capability are those that take the graphics processors used in video games and repurpose them for other uses. Most artificial intelligence software today is developed using the CUDA tools for NVIDIA® GPUs. The CUDA programming model is classed as a "single-source C++ programming model". At Codeplay, we have been working hard in the Khronos Group to define open standard programming models that work across multiple platforms and devices. For developers who want to take software written using a C++ single-source programming model like CUDA and port it to a wide range of devices, the SYCL standard from Khronos supports the acceleration capabilities of OpenCL. This lets developers take complex C++ software, like machine learning libraries, and bring it to the broad range of low-power OpenCL devices.

Who should download the ComputeCpp Community Edition Beta?

This release is for C++ software developers who want to accelerate their software on existing OpenCL devices. If you are a semiconductor company who wants optimized SYCL support for your devices, then we have a range of solutions available for you.

If you want to do things with this release, be prepared to be a pioneer. This release is pre-conformance, which means that we do not implement 100% of the SYCL specification. We currently only support Linux and two OpenCL implementations, by Intel and AMD, but wider support is coming. You may find that some unsupported implementations of OpenCL work with ComputeCpp. That's great, but we don't officially support anything else (yet). Most of the open-source libraries being ported to SYCL are not completed yet. This means that you should only check out some of these projects if you want to do some development yourself. We are building a big vision here: large, complex software highly accelerated on a wide range of processors, entirely by open standards. So, please be patient, or work with us.

Where to start?

  • Download the ComputeCpp Community Edition Beta release for Linux here: http://computecpp.codeplay.com/ (requires registration and acceptance of a click-through license agreement).
  • We have created a SYCL community site, for all related projects, here: http://sycl.tech/. If you do things with SYCL, you can post your projects, videos, news or tutorials to the site. This site is about everything related to SYCL, whether it uses ComputeCpp or not. 
  • If you have problems with ComputeCpp, you can report bugs or requests in our ticketing system, here: https://computecpp.codeplay.com/releases/latest/support/
  • The SYCL specifications are here: https://www.khronos.org/sycl. For this release of ComputeCpp, we support the SYCL v1.2 specification. SYCL v2.2 is still a provisional specification and thus unsupported, for now. 
  • You can work through the code samples in the ComputeCpp SDK. 
  • If you are interested in performance, or performance portability, using C++, then check out VisionCpp and the associated papers (Kernel composition in SYCL, VisionCpp: A SYCL-based Computer Vision Framework). VisionCpp is a demonstrator of C++ performance portability techniques. Some of these techniques are used in Eigen for more complex software. 
  • You can take a look at progress on porting TensorFlow to OpenCL and SYCL, on this bug status page here: https://github.com/tensorflow/tensorflow/issues/22. If you want to work with us on this project, then feel free to contact us and get involved. 
  • The ISO C++ 17 standard will have a Parallel STL library in the spec. There is an implementation of the Parallel STL for SYCL being developed open-source here: https://github.com/KhronosGroup/SyclParallelSTL.
  • Instead of ComputeCpp, you might want to check out the open-source in-development SYCL implementation triSYCL (it does not work on OpenCL devices, yet). Or another open-source project based on the SYCL specification: https://github.com/ProGTX/sycl-gtx
  • If you want to run ComputeCpp on an unsupported OpenCL platform, what you need to look out for is OpenCL v1.2 and above, along with the "SPIR" feature of OpenCL. The open-source OpenCL implementation, pocl, supports OpenCL v1.2 with SPIR, but we do not yet officially support pocl. The open-source OpenCL validation tool, Oclgrind, also supports OpenCL v1.2 with SPIR. If you want a commercial implementation of OpenCL, targeted at your hardware, then Codeplay provides a retargetable OpenCL product called ComputeAorta

What's next?

The release of this ComputeCpp Beta is a major milestone on a journey to building out a complete open-standards-based ecosystem for parallel computing. Codeplay will continue to work hard on developing the tools to deliver open-standard programming models for parallel processors. ComputeCpp will be developed to be fully SYCL 1.2 conformant and then we will progress to implementing the SYCL v2.2 standard.

We will be building out the ecosystem of C++ software on top of SYCL so that as much open-source C++ software as possible works on open standards for parallel processing, while following the C++ and Khronos Standards that we are actively contributing to.

Codeplay has also been working with partner companies in the HSA Foundation to develop low-latency offloading, shared address space, profiling and debugging standards. This standards work will enable us to deliver more advanced and user friendly C++ for heterogeneous systems technologies in the future. At the same time, we are also working the ISO C++ standards bodies so that future versions of C++ may enable parallel execution on a range of OpenCL devices.

Download ComputeCpp Community Edition Beta now!

Codeplay Software Ltd has published this article only as an opinion piece. Although every effort has been made to ensure the information contained in this post is accurate and reliable, Codeplay cannot and does not guarantee the accuracy, validity or completeness of this information. The information contained within this blog is provided "as is" without any representations or warranties, expressed or implied. Codeplay Sofware Ltd makes no representations or warranties in relation to the information in this post.
Andrew Richards's Avatar

Andrew Richards