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,所以它显然不受支持。

令人困惑的错误消息可能是一个错误。