在OSX上创建OpenCL命令队列

时间:2015-01-22 23:08:32

标签: macos opencl gpgpu

我对运行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

1 个答案:

答案 0 :(得分:2)

我相信在OS上使用CL_DEVICE_QUEUE_PROPERTIES的clGetDeviceInfo X将返回CL_QUEUE_PROFILING_ENABLE,但不返回CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE,因此显然不支持它。

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