It is my understanding that physical location of private memory is not defined by the specification. I have heard and read on forums that primitive types might be stored in registers directly, while (private) arrays (especially bigger ones) might be stored in global memory, and it is clear these two memory spaces don’t have the same access time.
My suggestion would be to maybe clarify a bit where physically private memory might be stored physically, and maybe have a function that would query the capacity of private memory at each of these possible spaces, e.g. add to the type ‘cl_device_info’ the values ‘CL_DEVICE_PRIVATE_MEM_SIZE_IN_REGISTERS’ and the like.
I don’t know if it feasible, but it would certainly be nice.