I have installed AMD SDK for OpenCL. My system has “NVIDIA GeForce 9200M GS” GPU and I have the latest driver installed for this GPU. I want to know should this GPU work with AMD implementation of OpenCL? Because I read somewhere that Nvidia OpenCL doesnt work with AMD GPU by AMD’s OpenCL implementation works with Nividia GPU too because AMD manufactures both CPUs and GPUs.
In my program, though when I try to find GPU device, it failes to return GPU…
AMD have two conformant implementations of OpenCL for their GPUs/APUs and for their CPUs. They don’t have implementation for NVidia video cards. You can use AMD implementation for CPUs, which works on any CPU with SSE3 and which I think is best among others.
Others are Intel implementation which works only Windows 7 and only Intel processors, Apple implementation which works only on MacOS X 10.7+. NVidia implementation only supports OpenCL 1.0 with little amount of KHR extensions, they monopolistically forcing you to use CUDA.
Also note that only AMD implementation have very good redistributable to install with your application on clients machines.
Also note that AMD implementation transparently merges with Visual Studio and gDEBugger allowing you running OpenCL kernel step by step which increases OpenCL learning curve and you don’t have to use OpenCL’s printf.
I have both NVIDIA and AMD cards installed in my system, and drivers for both devices installed. I can create a program that is linked to either NVIDIA’s or AMD’s OpenCL SDK and run code on both cards in the program. I think this is because most of the functionality for OpenCL is placed in the drivers for the devices, not in the layer that is linked in with the code. At first, some of the sample OpenCL code that I used failed to find devices too. But that was because the code passed NULL for platform ID into clGetDeviceIDs(). When it’s NULL, the behavior is “implementation dependent” according to the spec. So, maybe that’s one area where there is a difference in the two SDK’s. Try getting the platform id’s using clGetPlatformIDs() first, and see if that helps. --Ken
OpenCL programs should be compiled using “-g” compiler option in clBuildProgram() and you should start debugging using not regular F5, but gDEBugger menu Start OpenCL and OpenGL debugging or Shift-Alt-F5.
I have only AMD SDK and with it I can select Nvidia platform (since I have installed Nvidia driver) and then I select my gpu, make a context for it, command queue too and then I made program object. But when I build program object with clBuildProgram() it fails and the output screen exits automaticlly… my program executes successfully when I try to choose my cpu device from platform AMD. whats problem, should I have to install nvidia implementation too? if yes, then why it also showing me Nvidia platform and its gpu device and successfully makes context and command queue for it?