A call to clGetPlatformIDs will tell you how many different platforms you have managed to install. After allocating some memory for a platform structure, you can then loop through calling clGetPlatformInfo.  Note that the second parameter in the call defines what information you seek. We have not found much use for CL_PLATFORM_PROFILE, CL_PLATFORM_NAME or CL_PLATFORM_EXTENSIONS. Currently, CL_PLATFORM_VENDOR does not tell us anything new. We are mostly interested in CL_PLATFORM_VERSION, which we expect will be more useful as time goes by.
Prior Click here
Next Click here
Next Nabro Click here
Next Maputo Click here
Next Gabon Click here
Next Iran Click here
Similarly, you may wish to call clGetDeviceIDs. Note that this should be done inside the loop where you are asking about platforms because PlatformID is a required parameter to the clGetDeviceIDs call. We call with a second parameter of CL_DEVIC E_TYPE_ALL, but one can specify CL_DEVICE_TYPE_GPU,
CL_DEVICE_TYPE_ACCELERATOR, or CL_DEVICE_TYPE_DEFAULT. We would be curious what is returned in a multi-CPU system (as opposed to multi-core) when one calls with CL_DEVICE_TYPE_CPU. When we loop through calling clGetDeviceInfo we send in a second parameter of CL_DEVICE_EXECUTION_CAPABILITIES. What we are looking for is CL_EXEC_KERNEL(= device can execute OpenCL kernels) or  CL_EXEC_NATIVE_KERNEL (= device can execute native kernels).
We also record CL_DEVICE_GLOBAL_MEM_CACHE_SIZE and CL_DEVICE_GLOBAL_MEM_SIZE as well as CL_DEVICE_MAX_CLOCK_FREQUENCY and CL_DEVICE_MAX_COMPUTE_UNITS. We are not certain yet what CL_DEVICE_MAX_WORK_GROUP_SIZE  actually does.