The State of OpenCL & the First End-User OpenCL Drivers
by Ryan Smith on October 6, 2009 12:00 AM EST- Posted in
- Ryan's Ramblings
Last week NVIDIA released their first set of end-user OpenCL drivers. Previously OpenCL drivers had only been available for developers on the NVIDIA side of things, and this continues to be the case on the AMD side of things. With NVIDIA’s driver release, the launch of AMD’s 5800 series, and some recent developments with OpenCL, this is a good time to recap the current state of OpenCL, and what has changed since our OpenCL introductory article from last year.
A CPU & GPU Framework
Although we commonly talk about OpenCL alongside GPUs, it’s technically a hardware agnostic parallel programming framework. Any device implementing OpenCL should be cable of running any OpenCL kernel, so long as the developers take in to account querying the host device ahead of time as to not spawn too many threads at once. And while GPUs (being the parallel beasts that they are) are the primary focus, OpenCL is also intended for use on CPUs and more exotic processors such as the Cell BE and DSPs.
What this means is that when it comes to discussing the use of OpenCL on computers, we have two things to focus on. Not only is there the use of OpenCL on the GPU, but there’s the use of OpenCL on CPUs. If Khronos has their way, then OpenCL will be a commonly used framework for CPUs both to take better advantage of multi-core CPUs (8 threaded i7 anyone?) and as a fallback mechanism for when OpenCL isn’t available on a GPU.
This also makes things tricky when it comes to who is responsible for what. AMD for example, in making both GPUs and CPUs, is writing drivers for both. They are currently sampling their CPU driver as part of their latest Stream SDK (even if it is a GPU programming SDK), and their entire CPU+GPU driver set has been submitted to the Khronos group for certification.
NVIDIA on the other hand is not a CPU manufacturer (Tegra aside), so they are only responsible for having a GPU OpenCL driver, which is what they have been giving to developers for months. They have submitted it to Khronos and it has been certified, and as we mentioned they have released it to the public as of last week. NVIDIA is not responsible for a CPU driver, and as such they are reliant on AMD and Intel for OpenCL CPU drivers. AMD likes to pick at NVIDIA for this, but ultimately it’s not going to matter once everyone finally gets up to speed.
Intel thus far is the laggard; they do not have an OpenCL implementation in any kind of public testing, for either CPUs or GPUs. For AMD GPU users this won’t be an issue, since AMD’s CPU driver will work on Intel CPUs as well. For NVIDIA GPU users with Intel CPUs, they'll be waiting on Intel for a CPU driver. Do note however that a CPU driver isn't required to use OpenCL on a GPU, and indeed we expect the first significant OpenCL applications to be intended to run solely on GPUs anyhow. So it's not a bad situation for NVIDIA, it's just one that needs to be solved sooner than later.
OpenCL ICD: Coming Soon
Unfortunately matters are made particularly complex by the fact that on Windows and Linux, writing an OpenCL program right now requires linking against a vendor-specific OpenCL driver. The code itself is still cross-platform/cross-device, but in terms of compiling and linking OpenCL has not been fully abstracted. It’s not yet at the point where it’s possible to write and run a single Windows/Linux program that will work with any OpenCL device. It would be the equivalent of requiring an OpenGL game (e.g. Quake) to have a different binary for each GPU vendor’s drivers.
The solution to this problem is that OpenCL needs an Installable Client Driver (ICD), just like OpenGL does. With an ICD developers can link against that, and it will handle the duties of passing things off to vendor-specific drivers. However an ICD isn’t ready yet, and in fact we don’t know when it will be ready. NVIDIA - who chairs the OpenCL working group - tells us that the WG is “driving to get an ICD implementation released as quickly as possible”, but with no timetable attached to that. The effort right now appears to be on getting more OpenCL 1.0 implementations certified (NV is certified, AMD is in progress), with an ICD to follow.
Meanwhile Apple, in the traditional Apple manner, has simply done a runaround on the whole issue. When it comes to drivers they shipped Snow Leopard with their own OpenCL CPU driver, and they have GPU drivers for both AMD and NVIDIA cards. Their OpenCL framework doesn’t have an ICD per-say, but it has features that allow developers to query for devices and use any they like. It effectively accomplishes the same thing, but it’s only of use when writing programs against Apple’s framework. But to Apple’s credit, as of this moment they currently have the only complete OpenCL platform, offering CPU+GPU development and execution with a full degree of abstraction.
What GPUs Will Support OpenCL
One final matter is what GPUs will support OpenCL. While OpenCL is based around the hardware aspects of DirectX10-class hardware, being DX10 compliant isn’t enough. Even among NVIDIA and AMD, there will be some DX10 hardware that won’t support OpenCL.
NVIDIA: Anything that runs CUDA will run OpenCL. In practice, this means anything in the 8-series or later that has 256MB or more of VRAM. NVIDIA has a full list here.
AMD: AMD will only be supporting OpenCL on the 4000 series and later. Presumably there was some feature in the OpenCL 1.0 specification that AMD didn’t implement until the 4000 series, which NVIDIA had since the launch of the 8-series. Given that AMD is giving Brook+ the heave-ho in favor of OpenCL, this will mean that there’s going to continue to be a limited selection of GPGPU applications that work on these cards as compared to the 4000 series and later.
End-User Drivers
Finally to wrap this up, we have the catalyst of this story: drivers. As we previously mentioned, NVIDIA released their OpenCL-enabled 190.89 drivers to the public last week, which we’re happy to see even if the applications themselves aren’t quite ready. This driver release was a special release outside of NVIDIA’s mainline driver releases however, and as such they’re already out of date. NVIDIA released their 191.07 WHQL-certified driver set yesterday, and these drivers don’t include OpenCL support. So while NVIDIA is shipping an OpenCL driver for both developers and end-users, it’s going to be a bit longer until it shows up in a regular release.
AMD meanwhile is still in a developer-only beta, which makes sense given that they’re still waiting on certification. The estimates we’ve heard is that the process takes a month, so with AMD having submitted their drivers early last month, they should be certified soon if everything went well.
67 Comments
View All Comments
drmo - Wednesday, October 14, 2009 - link
Sorry, they were released today: Oct 13.http://developer.amd.com/GPU/ATISTREAMSDKBETAPROGR...">http://developer.amd.com/GPU/ATISTREAMSDKBETAPROGR...
Granted, it is beta, but let us not try to make predictions when we don't really know what we are talking about.
Scali - Wednesday, October 14, 2009 - link
My prediction still stands, I don't think the OpenCL driver will be in this months Catalyst release, or in next month's.drmo - Wednesday, October 14, 2009 - link
I don't see why they would release them in the Catalyst drivers until there are actual applications to use OpenCL. It wasn't clear to me that you were referring to an official Catalyst release.I think Nvidia is at pretty much the same point (but having released them earlier (about 2 weeks)) with beta drivers released. Has Nvidia put them in their official public release? I don't even know why they would do so, with no programs to use it; it would just make the download larger.
Scali - Wednesday, October 14, 2009 - link
"Also, nVidia kept the drivers in beta another 3 months, before making it a first public release, and they haven't put them in the official driver release yet (as the article says, 190.89 supports it, but the recently released 191.07 doesn't yet).I would think that AMD will also keep the drivers in beta for a while, even if they do pass OpenCL-conformance testing."
I think it was pretty clear...
And nVidia's drivers aren't beta anymore. They're a public release, just not the main release. The 190.89 drivers were beta for a number of weeks, available to registered developers, before they made them public.
It seems the same goes for AMD now. They're in the SDK beta 4, but you can only download them after you're registered as a developer.
And it's a chicken-and-egg problem. As a developer I find it very important that they release public drivers ASAP, because I want to know what drivers my software is expected to run on. Drivers first, applications later. It doesn't work the other way around.
I can't release applications if users need to register as developers with their IHV, and then download a beta SDK just to run my application. I also cannot guarantee that my application will run with future updates to the beta SDK/drivers.
Besides, don't forget that running beta drivers will also impact performance, stability and compatibility with other software. I cannot recommend end-users to run beta drivers rather than the official supported drivers.
So plenty of reasons to put them in the official release, no reasons not to (unless you want to sabotage the adoption of OpenCL).
drmo - Wednesday, October 14, 2009 - link
According to people who have downloaded them, they are labeled as Catalyst 9.11 RC, which suggests they could be released in November. Thank you for clarifying; I'm not a developer, so I didn't really consider the implications for developers. Looking on Nvidias website, I didn't see the download for the 190.89 drivers, so I thought those were a beta as well.Scali - Wednesday, November 18, 2009 - link
Well, the 9.11 drivers are released, but I haven't seen any mention of OpenCL in the release notes.bobvodka - Wednesday, October 7, 2009 - link
Hmmm, you raise good points there.My 'this month' thing mostly depended on them submitting the OpenCL stuff for certaificantion early last month.
Scali - Tuesday, October 6, 2009 - link
You don't need CPU-drivers for OpenCL. All you need is nVidia's GPU-accelerated OpenCL drivers, and you're up and running.So the current status is like this:
- People with an nVidia card will be able to run OpenCL by installing the proper drivers (version 190.89 currently).
- People with anything other than an nVidia card can currently only run a CPU-based OpenCL implementation. AMD currently supplies a CPU implementation in their Stream beta SDK, which works on both AMD and Intel CPUs, although obviously it was aimed at AMD CPUs. Intel currently hasn't released anything, not even in beta.
There's also some OpenCL support in the works with the opensource Mesa/Gallium3D project.
JarredWalton - Tuesday, October 6, 2009 - link
"For NVIDIA GPU users with Intel CPUs, they'll be waiting on Intel for a CPU driver. Do note however that a CPU driver isn't required to use OpenCL on a GPU, and indeed we expect the first significant OpenCL applications to be intended to run solely on GPUs anyhow. So it's not a bad situation for NVIDIA, it's just one that needs to be solved sooner than later."OpenCL has both CPU and GPU implementations, so if you want a fully utilized system with OpenCL you need to have CPU and GPU drivers. At least, that's how I understand it, and of course near-term the GPU driver is going to prove more important than the CPU driver.
Scali - Wednesday, October 7, 2009 - link
I just think it's a very confusing thing to write. It shouldn't even have been mentioned in the first place.Firstly, obviously nVidia doesn't need to provide a CPU driver, since that's the job of the CPU manufacturer. Just like nVidia doesn't need to provide a GPU driver for AMD hardware either.
Secondly, there's absolutely no need to have a "fully utilized system" with both CPU and GPU drivers. As you say yourself, the CPU driver isn't going to be important.
Thirdly, AMD never said anything about nVidia not having a CPU driver. The point with AMD (which is REALLY lame) is that they keep pretending that nVidia doesn't support OpenCL at all, and that nVidia is only pushing its proprietary C for Cuda and PhysX standards, so AMD is trying to look like the 'good guy', while in reality nVidia is the one offering OpenCL support (not to mention that AMD also tried a proprietary standard first, but only nVidia actually managed to get some software support with their proprietary technology). In fact, AMD even claimed that they were the first to support DirectCompute with the launch of the HD5870 (if they added CS5.0 to the statement they would be right, but they didn't). This is also not true, since nVidia has supported DirectCompute since the first 190-release drivers in July, months before the HD5870 was launched.