【问题标题】:How to set device side queue size in pyopencl?如何在 pyopencl 中设置设备端队列大小?
【发布时间】:2017-08-19 04:46:40
【问题描述】:

在英特尔 opencl 2.0 教程资源Sierpiński Carpet 中,他们使用了在 opencl 2.0 中添加的设备端入队属性。在源码中,有这样一段:

// You need to create device side queue for enqueue_kernel to work
// We set the device side queue to 16MB, since we are going to have a large 
// number of enqueues
cl_queue_properties qprop[] = {CL_QUEUE_SIZE, 16*1024*1024, 
      CL_QUEUE_PROPERTIES,                              
      (cl_command_queue_properties)CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | 
      CL_QUEUE_ON_DEVICE | CL_QUEUE_ON_DEVICE_DEFAULT, 0};    
cl_command_queue my_device_q = 
      clCreateCommandQueueWithProperties(CLU_CONTEXT, 
            cluGetDevice(CL_DEVICE_TYPE_GPU), qprop, &status);

现在想用pyopencl重写python中的代码来学习动态并行的方法。但是我找不到任何指令来设置队列大小,如代码所示。 CommandQueue API 有 properties 选项,但在文档中这些选项/值不包括 size。 有什么建议吗?

【问题讨论】:

    标签: python opencl pyopencl


    【解决方案1】:

    我实际上面临与您完全相同的问题。查看 PyOpenCL 后端,仅使用了函数 clCreateCommandQueue [1],但您实际上需要使用 clCreateCommandQueueWithProperties。

    作为我尝试的一个快速更改,是编辑 src/c_wrapper/command_queue.cpp 并添加代码,当 PYOPENCL_CL_VERSION >= 0x2000 时创建在 Sierpinski 地毯中描述的类型的队列。

    因此,队列创建将是正常的——至少看起来是这样。 但后来当我调用入队函数时,我得到了 INVALID_COMMAND_QUEUE。此错误适用于 AMD CL2.0 GPU 以及 INTEL 2.1 CPU EXPERIMENTAL。我还在调试这个。

    [1]https://www.khronos.org/registry/OpenCL/sdk/1.0/docs/man/xhtml/clCreateCommandQueue.html [2]https://www.khronos.org/registry/OpenCL/sdk/2.0/docs/man/xhtml/clCreateCommandQueueWithProperties.html

    【讨论】:

    • 很高兴看到另一个 pyopencl 用户 :)。看到 Andreas 将问题列入非紧急名单,我感到很难过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 2013-08-06
    • 2018-11-06
    • 2020-03-07
    相关资源
    最近更新 更多