Blog

NVIDIA’s Industry-Leading “Support” For OpenCL

  |   General   |   19 Comments

If you are looking for the samples in one zip-file, scroll down. The removed OpenCL-PDFs are also available for download.

This sentence “NVIDIA’s Industry-Leading Support For OpenCL” was proudly used on NVIDIA’s OpenCL page last year. It seems that NVIDIA saw a great future for OpenCL on their GPUs. But when CUDA began borrowing the idea of using LLVM for compiling kernels, NVIDIA’s support for OpenCL slowly started to fade instead. Since with LLVM CUDA-kernels can be loaded in OpenCL and vice versa, this could have brought the two techniques more together.

What is the cause for this decreased support for OpenCL? Did they suddenly got aware LLVM would decrease any advantage of CUDA over OpenCL and therefore decreased support for OpenCL? Or did they decide so long ago, as their last OpenCL-conformant product on Windows is from July 2010? We cannot be sure, but we do know NVIDIA does not have an official statement on the matter.

The latest action demonstrating NVIDIA’s reduced support of OpenCL is the absence of the samples in their GPGPU-SDK. NVIDIA removed them without notice or clear statement on their position on OpenCL. Therefore we decided to start a petition to get these OpenCL samples back. The only official statement on the removal of the samples was on LinkedIn:

All of our OpenCL code samples are available at http://developer.nvidia.com/opencl, and the latest versions all work on the new Kepler GPUs.
They are released as a separate download because developers using OpenCL don’t need the rest of the CUDA Toolkit, which is getting to be quite large.
Sorry if this caused any alarm, we’re just trying to make life a little easier for OpenCL developers.

Best regards,

Will.

William Ramey
Sr. Product Manager, GPU Computing
NVIDIA Corporation

And this is what we got:

  • 38 old samples which are to be downloaded sample by sample, not as one easy SDK. Also the Linux-samples do not even work, as some files are missing.
  • The webpage http://developer.nvidia.com/opencl is not linked from any main NVIDIA page and even a Google-search did not find it easily.
  • Only 4 out of 38 samples were updated in 2011, where the rest has been from 2010 or earlier. So they surely have not been improved to take advantage of the latest GPU hardware improvements.
  • While NVIDIA claims they removed OpenCL to reduce the download size, a search of NVIDIA’s dev-forum for such complaints comes up empty.
  • While NVIDIA claims they have made life easier for developers by removing the OpenCL examples from the SDK and instead posting links to them, it is clear that this is lip service. Those links were not even made available until after we started complaining, and previous versions of these same links had much more informative text to help developers.  Additionally, no one on the dev-forum is thanking NVIDIA for this decision.
  • Did I already mention that the OpenCL-page only had the link to the samples after the complaints started, and previous versions had much more text?

NVIDIA’s position of early GPU computing leadership should not be give way to vendor-lockdown tactics and open standards avoidance.  Our goal is to keep the ecosystem honest and focused on standards that move the industry forward.  Whatever NVIDIA may have invested in GPU computing R&D to move the industry forward, the developers writing code for their hardware are expending much more and deserve to have their investments maximized through open standards.

Dear Will Ramey, this blog article is for you. My promise is that I will replace this blog-article if you make us OpenCL-developers and standard-supporters happy again.

Quotes from the petition

As of 10 September 2010 there were 100 signatures. 100 developers who want to have industry-wide support for OpenCL.

An industry standard is important:

It’s great that NVIDIA moves ahead with CUDA, but industry-wide OpenCL support is also important. – Anonymous

Better to focus on OpenCL than CUDA. Nvidia has the best OpenCL right now and we use this for all our own applications development, and steer all our industrial partners this way. If Nvidia starts to de-prioritise OpenCL we’ll have to look at using AMD’s GPUs instead. – Simon McIntosh-Smith

Please do not ignore OpenCL, the developer community see this as a better tool-set overall for the industry. CUDA is great but not what we need going forward, I have always been a massive fan of Nvidia and would love to see the developer tool support that you have given CUDA available for OpenCL and I’m sure I speak for many of us who rate your hardware as the industry leader. – Alexander Bath

(…) Proper support for OpenCL (1.2 and on) would allow these customers to keep using NVIDIA hardware, rather than finding other hardware providers. All I ask, is that you keep that in mind, when considering this petition’s simple request. – Liad Weinberger

As head of the OpenCL-based linear algebra library ViennaCL, seeing NVIDIA slowly undermining an industry standard is unacceptable. If, in the long run, NVIDIA GPUs may even cease to support OpenCL, this would require our research codes to be migrated to a proprietary framework in order to support NVIDIA GPUs. Doing the same for every other GPU supplier would be ridiculous and a clear waste of (scarce) research resources, and that’s exactly why we have OpenCL. Thus, I request to reintegrate the OpenCL samples into the CUDA SDK. – Karl Rupp

Dear Nvidia, The sample code in your SDK has always been a great learning resource and the first stop in figuring out if drivers are working correctly. As OpenCL becomes more and more pervasive it would be sad to loose your library of examples – especially as it seems that you might abandon OpenCL (?). With kind regards! – Bjoern Knafla

Understanding NVIDIA hardware:

The OpenCL SDK examples are very helpful in understanding some of the nuances of OpenCL development on NVIDIA hardware. Please continue to include and enhance these samples in your SDK. – John McInerney

Cuda will sell itself, if it is the better choice:

Agree add the samples and let us decide what to use, enforcing Cuda could end up bad if Cuda is awesome, people will use it. – Alvaro Castañeda

Coming up with an alternative solution:

Or make OpenCL SDK. – Bernhard Stader

To sum it up:

Please do not shoot yourself in the foot by doing this. – Pavan Yalamanchili

The message is clear

The good news is that NVIDIA cannot escape OpenCL, as it is possible to get OpenCL-kernels loaded trough LLVM. The current problem is that learning the specifics of Nvidia’s latest hardware is best accomplished today by working with their CUDA-samples, not OpenCL-samples. So NVIDIA’s focus on CUDA over OpenCL is leading to more and more developers sinking time and energy into a vendor-locked mindset.

At IBC’12 I spoke to people at the NVIDIA booth and got a nice quote: “The actual porting to the gpu is a snap. The optimisation is the time-consuming part”. So show us how the second part is done best in more languages than just CUDA.

The petition requested this: “We, OpenCL developers, humbly request that OpenCL samples again be included in the SDK. Industry standards like OpenCL help in building up a bigger market for GPU computing, and will be beneficial to NVIDIA in the long term.” – and this request is now signed by 100+ people. We now request NVIDIA to have an official statement on the matter.

Dear Will Ramey, could you show us what is done to make life a little easier for OpenCL developers?

Keeping the pressure

NVIDIA also has an ARM-product ‘Tegra’ and while there is not a real statement on OpenCL-support,  NVIDIA’s dev-boards only support CUDA. The mobile market has always been very open to standards leading to much innovation and the generation of new companies with bright ideas – so we should do everything to keep it that way.

If you not have done yet: sign the petition. Also if you are a CUDA-developer, an alternative like OpenCL has many advantages – mostly long-term. The petition will remain open to keep repeating the message that short-term profit is in closed software, and the long-term profit is in open source and open standards.

Download removed samples & docs

What I understand is that distribution of the unmodified SDK is allowed, if the license is included.

View the LICENSE before downloading. If you do not agree, you cannot download the SDK.

If you have mirrors, let me know.

  • Pavan Yalamanchili

    Thanks for quoting me on this. I have to clarify that my comment was before I realized that they had OpenCL examples on a separate page. I think having a separate OpenCL sdk may be a good idea as long as they continue providing the support and visibility.

    • streamcomputing

      I think your quote sums it up pretty well – they shoot themselves in the foot the moment they stop providing the support and visibility.

      Problem I have with those samples from 2010, is that they do not explaining any OpenCL 1.2 features or explain how to use the Kepler architecture to the fullest through OpenCL.

  • MySchizoBuddy

    All courses on GPGPU or parallel computing for eg (https://www.coursera.org/course/hetero) require both CUDA and OpenCL as part of the course. So I have decided to buy AMD APU for the OpenCL part with Nvidia GPU for the CUDA part. This is going to suck.

    • streamcomputing

      I think it is strange that they use CUDA too, as a better choice would have been OpenCL-CPU and OpenCL-GPU. Using a CPU with embedded GPU is very nice to program though.

      • MySchizoBuddy

        university courses require you to learn both CUDA and OpenCL. like the one i linked in the previous comment.

  • david moloney

    The issue for Nvidia is that OpenCL would allow customers to migrate away from their platform. This is particularly an issue where customers want to move from a PC-based demonstrator to an embedded device. As Nvidia GPUs currently offer only a max of 10GFLOPS/W they cannot provide a migration part to embedded devices. Against this backdrop Movidius and other embedded suppliers are demonstrating 50GFLOP/W with OpenCL support … no wonder Nvidia don’t want to support OpenCL.

    http://www.hotchips.org/wp-content/uploads/hc_archives/hc23/HC23.19.8-Video/HC23.19.811-1TOPS-Media-Moloney-Movidius.pdf

    http://www.youtube.com/watch?v=KiTaPRtN2yM

  • PENG ZHAO

    I have complained the OpenCL support of Nvidia for many times. Just tell Nvidia if they don’t want to improve their implementation, we will buy AMD’s product for computation next time.

    • streamcomputing

      Or Intel, or ARM, or IBM, or FPGA, etc… The OpenCL ecosphere is huge.

  • pip010

    it is indeed one of the most frustrating recent developments on the GPU front. as always, standards are good thing, if only we dont have more than one doing the same thing! :( CUDA being a complementary as approach to OpenCL and having not clear benefit in implementation wise the big question still remains: WHY?

  • Sebastian

    It would appear the examples are now gone entirely. Can somebody tell me where to get them now?

    • Jonathan

      You can download them with the archived 4.2.9 cuda-sdk. … That’s horrible!

      • Sebastian

        I put them here in a github repository for everyone:
        https://github.com/sschaetz/nvidia-opencl-examples

      • streamcomputing

        Great! Know the license prohibits redistribution, but maybe somebody could email me a link to a torrent… Then I can put the link to the torrent in this blog-post.

      • Sebastian

        Hmm that could be a problem. I’ll remove the code if Nvidia takes offense. Note that the repository at the moment only contains the Linux examples.

      • streamcomputing

        Double-checked the license and it seems ok to redistribute the SDK, as long as it is accompanied by the license-file.

      • testOCL

        Thanks a lot for useful tips !
        For OpenCL I needed to download whole CUDA SDK 4.2.9 as sschaetz’s git does not provide shrUtils.h and CUDA 5.0 does not contain ocl at all.
        Explanation in http://streamcomputing.eu/blog/2012-09-10/nvidias-industry-leading-support-for-opencl/
        It complied and run on Fedora 18 x64 and Fedora 16 x64 just fine.
        OCL examples here for your convenience :
        http://uloz.to/xfwNX2K/nvidia-opencl-examples-cuda-4-2-9-sdk-zip
        yum -y install gcc libXmu-devel

  • MySchizoBuddy

    the petition has stalled. time to reignite this cause.