I have a system with an NVidia graphics card and I’m looking at using openCL to replace openMP for some small on CPU tasks (thanks to VS2010 making openMP useless)
Since I have NVidia’s opencl SDK installed clGetPlatformIDs() only returns a single platform (NVidia’s) and so only a single device (the GPU).
Do I need to also install Intel’s openCL sdk to get access to the CPU platform?
Shouldn’t the CPU platform always be available – I mean, how do you NOT have a cpu?
How do you manage to build against two openCL SDKs simultaneously?
You need to have a SDK which provides interface to CPU. nVidia does not, AMD and Intel’s SDKs do; in my case the one from Intel is significantly (something like 10x) faster, which might due to bad programming on my part however.
You don’t need the SDK for programs to run, just the runtime. In Linux, each vendor installs a file in
/etc/OpenCL/vendors/*.icd, which contains path of the runtime library to use. That is scanned by the OpenCL runtime you link to (libOpenCL.so), which then calls each of the vendor’s libs when querying for devices on that particular platform.In Linux, the GPU drivers install OpenCL runtime automatically, the Intel runtime is likely to be downloadable separately from the SDK, but is part of the SDK as well, of course.