【发布时间】:2016-06-25 15:20:41
【问题描述】:
我想使用来自 OpenCL API 函数 clEnqueueNDRangeKernel 的 global_work_offset 参数。我不知道如何在pyopencl API 中做到这一点。这是一个演示代码,我想在内核调用中添加 2 的偏移量,因此 get_global_id(0) 从 2 而不是 0 开始:
import pyopencl as cl
import pyopencl.array
import numpy as np
platform = cl.get_platforms()[0]
devices = platform.get_devices()[1] #gpu
context = cl.Context(devices=[devices])
queue = cl.CommandQueue(context)
kernel = cl.Program(context, """
__kernel void derp(global char* a) {
a[get_global_id(0)] = 1;
}""").build()
buffarr = cl.array.zeros(queue, 4, dtype=np.uint8)
kernel.derp(queue, (2,), None, buffarr.data)
np_data = buffarr.get()
# within this demo the buffer contains currently [1,1,0,0]
assert np.array_equal(np_data, [0,0,1,1])
如何更改代码以使断言不会失败?我不想在内核代码中添加额外的参数。
【问题讨论】: