Hello, I'm trying to refresh my skills to more modern practices and after a small trip in DirectCompute, I'm now taking a look at OpenCL.
For the time being, I'm just dumping some data about my GPU (a Capeverde, running driver 13.35.1005-140312a-169198E), I've written the following.
cl_bool boolValue; #define QUERYBOOL(what) clGetDeviceInfo(devices[i], what, sizeof(boolValue), &boolValue, NULL); cout<<#what<<"="<<boolValue<<endl; ... QUERYBOOL(CL_DEVICE_COMPILER_AVAILABLE); QUERYBOOL(CL_DEVICE_LINKER_AVAILABLE); ...
To my surprise, output is:
Is this supposed to happen?
Is CL_FALSE if the implementation does not have a linker available.
Is CL_TRUE if the linker is available.
This can be CL_FALSE for the embedded platform profile only.
This must be CL_TRUE if CL_DEVICE_COMPILER_AVAILABLE is CL_TRUE.
It is my understanding the macro should output 1.
I assume this implies only full compile is supported.
We have verified from our side and and the OCL runtime indeed returns CL_DEVICE_LINKER_AVAILABLE = 0. This seems to be a bug in OCL tool-chain and we will refer it to appropriate team for a fix.
However the linker is actually available as could be checked by calling clCompileProgram() and clLinkProgram() APIs.
Thank you for pointing this out.