我对运行OpenCL1.2的macbook pro上clCreateCommandQueue()的行为感到惊讶。
我可以提供CL_QUEUE_PROFILING_ENABLE队列属性而不会出现问题。 但是,如果我尝试设置CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE属性,则无法创建队列。
根据API documentation,我能理解它是否因CL_INVALID_QUEUE_PROPERTIES而失败。然而,它失败了CL_INVALID_VALUE,这是有道理的。它声称该属性无效,而不仅仅是被设备不支持。 这在Iris GPU设备和Intel CPU设备上都会发生。
代码:
context = clCreateContext( 0, 1, &device_id, opencl_notify, NULL, &err );
CHECK_CL
if ( !context )
{
LOGE( "Failed to create CL context. err=0x%x", err );
return 0;
}
cl_command_queue_properties queue_properties =
CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE |
CL_QUEUE_PROFILING_ENABLE |
0;
commands = clCreateCommandQueue( context, device_id, queue_properties, &err );
CHECK_CL
输出:
Found 1 OpenCL platforms.
Platform FULL_PROFILE OpenCL 1.2 (Sep 20 2014 22:01:02) Apple Apple had 2 devices:
Intel(R) Core(TM) i5-4278U CPU @ 2.60GHz Intel(R) Core(TM) i5-4278U CPU @ 2.60GHz with [4 units]
Iris Iris with [40 units]
ERR OpenCL called back with error: [CL_INVALID_VALUE] : OpenCL Error : clCreateCommandQueue failed: Device failed to create queue (cld returned: -35).
ERR OpenCL called back with error: [CL_INVALID_VALUE] : OpenCL Error : clCreateCommandQueue failed: Device failed to create queue: -30
CL_INVALID_VALUE
ERR Failed to create a command queue. err=0xffffffe2
答案 0 :(得分:2)
我相信在OS上使用CL_DEVICE_QUEUE_PROPERTIES的clGetDeviceInfo X将返回CL_QUEUE_PROFILING_ENABLE,但不返回CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE,因此显然不支持它。
令人困惑的错误消息可能是一个错误。