如何在pyopencl中设置设备端队列大小?

时间:2017-08-19 04:46:40

标签: python opencl pyopencl

在英特尔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。   有什么建议吗?

1 个答案:

答案 0 :(得分:0)

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

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

接下来,队列创建将是正常的 - 或者看起来如此。 但是后来当我调用enqueue函数时,我得到了INVALID_COMMAND_QUEUE。这个错误既适用于AMD CL2.0 GPU,也适用于INTEL 2.1 CPU实验。我还在调试这个。

[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