在 OSX 上创建 OpenCL 命令队列



我对运行OpenCL1.2的Macbook pro上的clCreateCommandQueue()的行为感到惊讶。

我可以毫无问题地提供一个CL_QUEUE_PROFILING_ENABLE队列属性。但是,如果我尝试设置 CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE 属性,则无法创建队列。

根据 API 文档,我可以理解它是否因CL_INVALID_QUEUE_PROPERTIES而失败。然而,它失败了,CL_INVALID_VALUE这是有道理的。它声称该属性无效,而不仅仅是设备不支持。这发生在 Iris GPU 设备和英特尔 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

我相信 clGetDeviceInfo 在操作系统上具有CL_DEVICE_QUEUE_PROPERTIESX 将返回CL_QUEUE_PROFILING_ENABLE,但不会返回CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE,因此显然不受支持。

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

最新更新