OSX 上的 OpenCL 命令队列创建
OpenCL command queue creation on OSX
我对 clCreateCommandQueue() 在我的 macbook pro 上的行为感到惊讶 运行 OpenCL1.2。
我可以毫无问题地提供 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
我相信 OS 上的 CL_DEVICE_QUEUE_PROPERTIES 有 clGetDeviceInfo
X 会 return CL_QUEUE_PROFILING_ENABLE,但不会 CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE,所以它显然不受支持。
令人困惑的错误消息可能是一个错误。
我对 clCreateCommandQueue() 在我的 macbook pro 上的行为感到惊讶 运行 OpenCL1.2。
我可以毫无问题地提供 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
我相信 OS 上的 CL_DEVICE_QUEUE_PROPERTIES 有 clGetDeviceInfo X 会 return CL_QUEUE_PROFILING_ENABLE,但不会 CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE,所以它显然不受支持。
令人困惑的错误消息可能是一个错误。