Hi, sorry for the newbie question, I’m still a little confused about how to deliver software to the end user on PC with OpenCL.
Does the user simply have to be up to date with their graphics drivers for this all to work, meaning I don’t need to install extra DLLs for OpenCl? - as in ‘cudart.dll’ is for Cuda.
BTW cudart.dll is required only if you wrote the program using the Runtime API. I believe with Driver API you also wouldn’t have to supply any .dlls apart from what’s already in the driver.
Everything you need for OpenCL is in the display driver. Since OpenCL is implemented on top of CUDA, it is also present. If you are going to distribute an OpenCL application, dynamically loading the DLL’s might be the way to go. My host language is Java. The bindings I use are multi-OS, and dynamically load OpenCL. The only reason I even bother to get the SDK is to look at the source for sample code.
Using dynamic loading also allows either an nVidia or ATi installation, if-when they get their act together and put everything needed in their display driver (until this week, you actually had to sign up for a developer id to even download the SDK, and redistribution is not allowed, I think). Dynamic is also key to multi-OS. My app can run on OSX / Win / Linux un-modified.
Edit / Added: Static may also allow multi vendor implementations, but I believe dynamic is more graceful at failure when encountering a machine that is not OpenCL capable, or has an old driver.
Thanks for the detailed reply, I get the idea of not locking the library into my code, as there could be many different versions.
After looking through the various info for a couple of days (and finding out my Laptop’s HD 5470 won’t have OpenCl drivers until “later in 2010”) I’ve decided to do what I want using offscreen buffers and fragment shaders! I’ll get a lot more compatibility.
PCs are serious lagging behind Apple on OpenCl - but there are many different graphics cards of course - nightmare.