As you know, CUDA technology is only available for nVidia graphics cards. Because of this fact often there are questions: what about the owners of ATI Radeon video cards, and whether you should use the solutions that are available only on the hardware of one manufacturer.
With that in mind, I decided to clarify a bit what CUDA is all about, and what role it plays in the implementation of unified GPGPU standards on nVidia graphics cards.
GPGPU software implementations
At the moment there is not yet a universal technology on the market for using GPUs in non-graphical computing, although developments are well underway.
Among the technologies under development, it is especially worth noting Microsoft DirectX Compute and OpenCL which Apple suggested. We can guess from the title that today we are talking about OpenCL and its implementation by nVidia.
OpenCL – an open standard for GPGPU, which is being developed by the Khronos consortium ( khronos.org ), and by design, will allow the power of the GPU to be used on a variety of software and hardware platforms.
Perhaps some people may ask why nVidia develops CUDA and ATI develops Stream, wouldn’t it be easier to agree on a common standard. But in fact, everything is not as simple as it seems, and it is not only in the manufacturers’ policy, although it is in it, too. It just so happens that the GPU is developing in a somewhat different way, unlike the CPU, where the common architecture was unified long time ago. GPUs from different manufacturers initially had a completely different architecture. For example, there are no common commands for GPUs from different manufacturers, there is no universal assembler. The answer to CUDA and Stream is quite simple – those are the hardware-dependent layers on top of which the unified OpenCL and DirectX Compute architectures are built. If anyone has read the previous posts on nVidia CUDA, he probably noticed the mention of CUDA driver API. The CUDA driver API is the hardware-dependent layer to work with the GPU from nVidia. In general, the software stack to work with nVidia GPU is as follows (can be found in the official CUDA documentation):
As you can see, OpenCL and DX11 Compute work on top of CUDA technology.
When to expect OpenCL from nVidia
Not so long ago Khronos consortium released the first version of OpenCL specification, which is available on the Khronos website as a pdf-document.
nVidia also introduced a roadmap for OpenCL support in their products :
True, the beta-version is likely to be available only to nVidia partners. We can only hope that by the middle of this year a complete implementation of OpenCL will appear and everyone will be able to take advantage of it.
I hope I have cleared up a bit of the fog of war regarding nVidia’s OpenCL support, and what role CUDA plays in that.