I work on BOINC and we are in the process of attempting to extend BOINC to support OpenCL. The problem we are facing in extending the job scheduling algorithm is matching the vendor specific implementation of the device with the OpenCL implementation of the device.
As an example let us say a given BOINC client is attached to several BOINC projects, one BOINC project publishes CUDA work and another BOINC project publishes OpenCL work. If a BOINC client has 3 Nvidia Geforce GTX 570 cards how do we prevent scheduling work for the same device?
As far as I know this would only be a problem for devices from Nvidia and AMD which support a different framework. So it seems to me that the easiest solution is an OpenCL extension that can be called that returns the position of the device in the other framework’s enumeration routine.
Prototype similar to this:
cl_int clGetDeviceOrdinal( cl_device_id device_id, cl_uint* device_ordinal);
Or it could be just another piece of information returned by clGetDeviceInfo.