Hi all

I’d like to ask if anyone has ever managed to get meaningful results for the CL_DEVICE_AVAILABLE query on clGetDeviceInfo. Perhaps I’m doing this wrong (code below) but so far I have never seen a device flagged as unavailable!

I’m using a unix node with 4 Tesla S1070s, running in exclusive mode. The whole programme takes a long time, occupying a single GPU. I can run the programme on device 0, send it to the background and then run a second instance of the programme, this time on device 1. It works fine, but it reports that all devices are available, even though device 0 is in use. If I were to run the second instance of the programme on device 0 then they both crash (first instance CL_OUT_OF_RESOURCES, second instance CL_DEVICE_NOT_AVAILABLE). This is to be expected, the only puzzling behaviour is the CL_DEVICE_AVAILABLE flag in clGetDeviceInfo (unless I have misunderstood what this is actually supposed to do!)

Here’s the part of the programme that checks for availability:

cl_platform_id platform;
cl_device_id devs[100];
cl_uint ndevs = 0,  ret_num_platforms = 0;
cl_bool av[10];
char devname[2048];

clGetDeviceIDs(platform, CL_DEVICE_TYPE_GPU, 100, devs, &ndevs);
printf("Devices (availability):
for(i = 0; (unsigned int)i < ndevs; i++)
        printf("%d:	%s (%d)

I’d like to be able to check if a device is available before proceeding to create a command queue on that device. Is there a problem with how I’m querying this?

Thanks in advance for your time.


p.s. This is probably a stupid question, but how would you search the khronos forum for the whole term ‘CL_DEVICE_AVAILABLE’?
p.p.s. This is a re-post from the nvidia opencl forum, apologies if this is bad etiquette.