OpenCL, what is and what is this API for CPU and GPU?

First of all, we should make clear that OpenCL is not a kind of {hardware}, however somewhat a software program or somewhat an API that serves to speak the functions with the GPU by making use of an abstraction on the software program degree of the GPU itself. Its distinction with the remainder of the APIs that the functions talk with the GPU is that it is not what will be stated a graphical API, however an API for scientific computing.

GPUs for computingNVIDIA Tesla OpenCL

What is GPU computing? Keep in thoughts that GPUs can execute applications referred to as shaders, that are used to control the traits of the totally different primitives within the 3D pipeline, no matter their form. Obviously, any processor solely sees a sequence of information in binary, so when a shader unit executes a shader program what it does is course of a set of information and due to this fact it may be used to course of any kind of information.

In the mid-2000s with the arrival of GPUs with unified shaders, the potential for utilizing them in markets past that of PC gaming appeared, the primary one being that of scientific computing, which allowed the departure of the NVIDIA Tesla vary to as of 2007.

The distinction between these GPUs and these used for gaming is their capacity to work with double precision floating level, which is not mandatory in video games, however on this planet of science in all its features. Either for astronomical calculations or to supply a next-generation drug.

OpenCL, an API for GPU computing

OpenCL Processing Elements

Until the looks of OpenCL, the graphics APIs had been designed solely for rendering graphics, however not for computing functions, in order that they weren’t completely environment friendly to run non-graphics algorithms on a GPU. The answer? Obviously, the event of an API for computing, which they referred to as OpenCL the place CL comes from Compute Library.

But how are OpenCL and different APIs totally different? We can run OpenCL on any kind of processor, not solely on GPUs, but when we wish we are able to run OpenCL code, it is a CPU if we want it, aside from that we are able to additionally run it on DSPs, FPGAs, neural networks and an extended etcetera.

The motive for this is that their mannequin is based mostly on distributed computing the place we now have a Host unit that is the CPU and a sequence of processing items that may be GPUs, DSP, FPGA, and so forth. To which the duties to be executed are despatched. Each activity being a processing component, which when it is processed the outcome is despatched to the host and / or a affirmation that it has carried out stated activity. Each processing component is a separate program, due to this fact a thread with its personal program counter.

OpenCL is not a graphical API

GPU virtualization

It must be clarified that OpenCL doesn’t management the graphical pipeline and due to this fact it is not used to execute graphs, since a great a part of the capabilities that OpenGL and different APIs similar to Direct3D, Vulkan, and so forth. have. They usually are not present in OpenCL. What’s extra, OpenCL was initially designed to interface with OpenGL collectively and is presently designed to work with Vulkan, the present graphical API from the Khronos group.

Another distinction has to do with the programming language used to run the Shader applications. In the case of graphic APIs, high-level shader languages ​​are used, similar to GLSL within the case of OpenGL and Vulkan, HLSL within the case of DirectX, and so on.

On the opposite hand, with OpenCL this is not the case, normal and non-specific-purpose languages ​​similar to C and C ++ are used, which permits to port applications and algorithms written in these languages ​​to OpenCL in order that they are often executed on all kinds of units that assist this API. and to have the ability to reap the benefits of its higher versatility than the restricted languages ​​for shaders.

How is OpenCL utilized in on a regular basis functions?

digital video editing

OpenCL is broadly utilized in some PC functions, particularly multimedia ones. When, for instance, in Photoshop we inform this system to run a picture filter as we speak, it is finished by means of OpenCL and the algorithm runs on probably the most appropriate {hardware} that helps the API, so if we now have probably the most applicable part then the OpenCL half will run on it.

Other kinds of on a regular basis functions that use OpenCL are video codecs similar to AV1, HEVC, H.264, and so forth. Most of them are programmed in OpenCL for the identical causes we now have mentioned earlier than. It permits the CPU to run them and builders don’t have to interrupt their horns if there is a video codec within the {hardware} and optimize for it.

Interestingly, OpenCL is additionally the explanation why the 2D half based mostly on VGA has disappeared from graphics playing cards, and that is that though it appears contradictory, it is a lot better to run the 2D graphical interface of an working system by means of computing by way of GPU.

DirectX Computing and the NVIDIA Boycott with CUDA

DirectX Compute

OpenCL is in decline in its use, particularly after DirectX 11 included Compute Shaders in its repertoire and Apple additionally included its Metal API. The look of graphical APIs with partial assist for computing was what made OpenCL start to lose significance.

It was from the introduction of Compute Shaders that the abandonment to OpenCL started to be gradual. The newest model broadly used is 1.2 of the usual. This is a really rudimentary model in comparison with what different APIs can do, because it doesn’t assist issues like shared digital reminiscence, SPIR-V for higher interplay with Vulkan.


But CUDA is the primary enemy of OpenCL. The motive is that NVIDIA has dominated the world of excessive efficiency GPUs for years and they’ve taken benefit of it to make a lot of the scientific computing work round CUDA and not underneath OpenCL, since this ties the applications to their {hardware}. NVIDIA has been in a position to do this as a result of a complete lack of competitors in the direction of its NVIDIA Tesla,

How to boycott OpenCL by NVIDIA? Not formally supporting the enhancements in OpenCL 2.0, which had been additionally in CUDA. Not solely that, however NVIDIA has by no means supported OpenCL on its NVIDIA Tesla, Quadro, or GeForce GPUs.

The third time fortunate?


In the tip, in an effort to keep away from the ultimate collapse of OpenCL for its third model, they’ve needed to rethink the whole API in its third model. In the model, a great a part of the weather that had been a part of the primary department of OpenCL 2.x have been downgraded to non-obligatory extensions and due to this fact the bottom {hardware} doesn’t must assist them once more. So now it is doable to run OpenCL 3.Zero on {hardware} that has OpenCL 1.2 drivers and add the extensions we wish to use ourselves, a option to bypass NVIDIA censorship.

In all the issue that OpenCL faces is that exterior the world of scientific computing the place it is most used is in video video games. Especially when calculating the physics of video video games, in addition to collision detection. The incontrovertible fact that Compute Shaders exist in each Vulkan and DirectX relegate the usage of OpenCL to scientific computing, which is presently absolutely the area of CUDA.

One market that the API may have reached and succeeded in is Raspberry Pi-like embedded units, however model 2.Zero pushed them apart because it targeted an excessive amount of on scientific computing. Version 3.0 is not designed to carry OpenCL to embedded methods that might undertake it with out issues for a mess of functions, however somewhat seeks to win a warfare already misplaced prematurely and that throughout the Khronos group itself there is already competitors to OpenCL within the type of Vulkan .