Please read this article about Microsoft and OpenCL, before reading on. The requested benchmarking is done by the people of Unigine have some results on differences between the three big GPGPU-APIs: part I, part II and part III with some typical results.
The following read is not about the technical differences of the 3 APIs, but more about the reason behind why alternate APIs are being kept maintained while OpenCL does the trick. Please comment, if you think OpenCL doesn’t do the trick
As was described in the article, it is important for big companies (such as Microsoft and nVidia) to defend their market-share. This protection is not provided through an open standard like OpenCL. As it went with OpenGL – which was sort of replaced by DirectX to gain market-share for Windows – now nVidia does the same with CUDA. First we will sum up the many ways nVidia markets Cuda and then we discuss the situation.
The way nVidia wanted to play the game, was soon very clear: it wanted to market CUDA to be seen as the better alternative for OpenCL. And it is doing a very good job.
The best way to get better acceptance is giving away free information, such as articles and courses. See Cuda’s university courses as an example. Also sponsoring helps a lot, so the first main-stream oriented books about GPGPU discussed Cuda in the first place and interesting conferences were always supported by Cuda’s owner. Furthermore loads of money is put into an expensive webpage with very complete information about GPGPU there is to find. nVidia does give a choice, by also having implemented OpenCL in its drivers – it does just not have big pages on how-to-learn-OpenCL.
AMD – having spent their money on buying ATI, could not put this much effort in the “war” and had to go for OpenCL. You have to know, AMD has faster graphics-cards for lower prices than nVidia at the moment; so based on that, they could become the winners on GPGPU (if that was to only thing to do). Intel saw the light too late and is even postponing their High-end GPU, the Larrabee. The only help for them is that Apple demands to have OpenCL on nVidia’s drivers – but for how long? Apple does not want strict dependency on nVidia, since it i.e. also has a mobile market. But what if all Apple-developers create their applications on CUDA?
Most developers – helped by the money&support of nVidia – see that there is just little difference between Cuda and OpenCL and in case of a changing market they could translate their programs from one to the other. For now a demand to have a high-end videocard of nVidia can be rectified, a card which actually many people have or easily could buy within the budget of their current project. The difference between Cuda and OpenCL is comparable with C# and Java – the corporate tactics are also the same. Possibly nVidia will have better driver-support for Cuda than OpenCL and since Cuda does not work on AMD-cards, the conclusion is that Cuda is faster. There can then be a situation that AMD and Intel have to buy Cuda-patents, since OpenCL does not have the support.
We hope that OpenCL will stay the main-stream GPGPU-API, so the battle will be on hardware/drivers and support of higher-level programming-languages. We do really appreciate what nVidia already has done for the GPGPU-industry, but we hope they will solely embrace OpenCL for the sake of the long-term market-development.
What we left out of this discussion is Microsoft’s DirectCompute. It will be used by game-developers in the Windows-platform, which just need physics-calculations. When discussing the game-industry, we will tell more about Microsoft’s DirectX-extension.
Also come back and read our upcoming article about FPGAs + OpenCL, a combination from which we expect a lot.
Pingback: Tweets die vermelden StreamHPC » Blog Archive » nVidia’s CUDA vs OpenCL -- Topsy.com
Pingback: uberVU - social comments
I think you should also have look at what’s happening on mobile platforms, and there, OpenCL seems to be the upcoming winner. At least, it looks like Imagination Technologies and Qualcomm are betting on it.
Hi,
Interesting post. I’m hoping you can help me understand something about CUDA vs OpenCL…
I’ve noticed a trend in the past few months of high-end film and television post-production software products tying themselves to CUDA to achieve real-time interactivity when working with High-Definition or larger frame sizes. In my reading, the Linux origin of some of these products seems to be the determining factor – since it seems OpenCL is poorly supported in Linux.
Is this correct?
It seems to me the choice between deciding CUDA vs OpenCL is largerly based on the maturity of the CUDA platform and/or the OS the programmer is targeting?
Thanks. I’m just trying to wrap my head around the decisions these companies have made.
– patrick
@Mikael, I sure did and I’m so waiting for the ARM-family to actually show up with OpenCL, since that would the boom OpenCL needs to compete with CUDA.
@Patrick, CUDA is more high-level and easier to start with. Since CUDA and OpenCL are in the same driver, there is no specific support-problem: they are both available or both missing. So maturity is a (good) reason to choose for CUDA over OpencL, OS not.
Side note: currently Microsoft is using the marketing-efforts of their friend NVidia to get a larger market in HPC (which is currently very small compared to other OS-es): http://www.nvidia.com/object/io_1254126305481.html
Pingback: StreamHPC » Blog Archive » Difference between CUDA and OpenCL 2010