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.
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.