Wednesday, September 30th, 2020 Posted by Jim Thacker

Khronos Group finalises radical new OpenCL 3.0 spec

Originally posted on 29 April 2020. Scroll down for news of the final spec and SDK.

Industry standards body Khronos Group has released the provisional specification for OpenCL 3.0, a radical attempt to reinvent the veteran open GPU computing standard for the 2020s.

The proposed spec strips OpenCL back to its core, making any functionality beyond OpenCL 1.2, the last widely implemented version, optional – both that of the 2.x releases, and those of 3.0 itself.

Khrnonos Group hopes that the increased flexibility will encourage platform vendors and software developers to deploy at least some of the newer features.

The group has also floated the idea of deploying OpenCL as a layer over other GPU computing frameworks, which would potentially enable it to run over Apple’s Metal on macOS and iOS devices.

Adopted early within graphics software, but momentum has ebbed in recent years
Originally developed by Apple, and backed by the leading processor manufacturers, OpenCL was subsequently taken up by Khronos Group, with the OpenCL 1.0 spec being released in 2008.

In the graphics market, OpenCL saw some early success as a hardware-agnostic alternative to Nvidia’s CUDA, being supported in Maya for Bullet physics and subdivision, and in Houdini’s Pyro smoke solver.

Adobe also implemented it in parallel with CUDA in Photoshop and Premiere Pro as a means of GPU-acclerating processor-intensive effects for users with AMD GPUs.

However, OpenCL struggled to penetrate the GPU rendering market: key players like OctaneRender and Redshift never supported it, and Chaos Group quietly mothballed OpenCL in V-Ray Next.

Even AMD’s own Radeon ProRender, included with Cinema 4D and Modo, and available as a plugin for other DCC tools, uses 2011’s OpenCL 1.2.

More critically, OpenCL began to run into problems with vendor support: Apple deprecated it in macOS 10.14 in favour of its Metal API, and support for recent versions of the spec among GPU manufacturers is patchy.

OpenCL 3.0: everything beyond the OpenCL 1.2 spec is now optional
In response, Khronos Group proposes stripping OpenCL to its core, making all functionality beyond 1.2 optional: both features added in the poorly adopted 2.x updates and those proposed for 3.0 itself.

That means that existing OpenCL 1.2 applications would run unchanged on OpenCL 3.0 devices, while for hardware firms, the work to update 1.2 drivers to 3.0 would be minimal.

The move would also make it possible for developers to cherry pick features from 2.x, like shared virtual memory, without having to commit the development resources required to support the entire spec.

In its official announcement, Khronos Group describes the change as “increas[ing] deployment flexibility by empowering conformant OpenCL implementations to focus on functionality relevant to their target markets”.

The statement is backed by supportive quotes from hardware vendors still invested in OpenCL, including Nvidia as well as Intel and mobile processor manufacturers Qualcomm and Imagination Technologies.

It would, however, make OpenCL a partial standard: some, but not all, of its features are mandatory.

No longer the definitive GPU computing API, but one that plays nicely with others?
In an excellent article on OpenCL 3.0, Andantech’s Ryan Smith describes the move as “[without] parallel in the computing industry” and a “large step backwards” for the framework.

His story goes into far more detail on the implications of the proposed spec than we can here – including new features like the open-source project to support C++ as an OpenCL programming language – so it’s well worth reading in full. However, one issue worth singling out is that of API layering.

Khronos Group proposes that in future, OpenCL 3.0 could be run as a layer over other APIs: initially, its own Vulkan, but eventually, on platforms that are unlikely otherwise to support it, such as Metal.

The approach has already been used by Khronos Group in its MoltenVK runtime library, which makes it possible to run Vulkan over Metal on macOS and iOS.

Although there is currently no equivalent project for OpenCL, the slide above from Khronos Group’s OpenCL 3.0 press deck suggests that it is a definite possibility in future.

Updated 30 September 2020: Khronos Group has now released the final OpenCL 3.0 specification, along with an initial OpenCL SDK, intended to enable developers to begin coding OpenCL apps.

Khronos has also confirmed that an extension to the core spec to improve interoperability between OpenCL and next-gen graphics and compute API Vulkan is in development.

Read Khronos Group’s blog post announcing the final OpenCL 3.0 spec and SDK

Read more about the OpenCL 3.0 specification on Khronos Group’s website