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