0
votes

I have implemented a project on my computer using AMD SDK v2.5 and ATI Catalyst drivers, as I have an ATI HD5570 graphics card.

I would like my executable to run on a different platform. I would like to be able to check whether an available OpenCL platform can be found on the configuration my executable is run. And of course the configuration can have Nvidia graphics card.

I have searched over internet but I couldn't find a final answer to my question. I am totally lost through my seach. Is there a well-known way to deploy install-client-drivers? Is there a robust-plausible and well-organized method to cover all these needs? Isn't OpenCL too messy?

Thanks and regards,

edit : In short,

I want to provide the client computer with 1) my executable 2) any necessary files and DLL's, and i want to keep these support files minimal. So is there a way for a client computer to run my code without installing SDK's? (the client computer might have a GPU device from a different vendor)

edit 2 :

Does the requirements/installations on the client side, depend on the SDK used by the developer side? If not, why does my client receive a getplatformID error, even if he installed the latest drivers for his nvidia gpu?

edit 3 :

What should my client do, if he wanted to run an OpenCL .exe developed in a different computer (and probably using different vendors) ?

2

2 Answers

0
votes

If you have multiple versions of OpenCL installed on a system you will see multiple platforms.

Call clGetPlatformIDs to get the number of platforms. The count will be greater than 1.

Call clGetPlatformIDs again to get the list of ids.

call clGetPlatformInfo to get information on each platform.

Next decide which platform to use and then get the device information and properties. Then establish the OpenCL context and queues and run kernels on the chosen platform and device combo.

How and why does this work? See the Khronos site for the ICD extension details

http://www.khronos.org/registry/cl/extensions/khr/cl_khr_icd.txt

0
votes

Well IMHO you need to know the hardware details of client computer you are planning to run, there is no universal OpenCL.dll or atiocl.dll/atiocl64.dll nvcuda.dll, that you can package along with the application and hope that everything works.

Even if you are running only CPU and not GPU you need vendor provided OpenCL.dll (openCL runtime) to be present in the client computer before you attempt to make clGetPlatformIDs... or such simmilar calls.

HTH