我希望在OpenCL中拥有一个全局计数器,可以由每个工作组中的每个工作项增加。
在我的内核中,我这样做:
#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable
void increase(volatile __global int* counter)
{
atomic_inc(counter);
}
__kernel void test()
{
volatile __global int* counter = 0;
increase(counter);
printf("Counter: %i",&counter);
}
我的主机代码是使用最少的pyopencl来排队内核:
import pyopencl as cl
platform = cl.get_platforms()[0]
devs = platform.get_devices()
device = devs[0]
ctx = cl.Context([device])
queue = cl.CommandQueue(ctx)
mf = cl.mem_flags
f = open('Minimal.cl', 'r')
fstr = "".join(f.readlines())
prg = cl.Program(ctx, fstr).build()
test_knl = prg.test
def f():
cl.enqueue_nd_range_kernel(queue,test_knl,(1,1,2),None)
f()
我希望输出显示一个(可能是随机的)外观为"Counter:i"
,其中i
是总工作项的数量(在我的情况下为2)。但实际上我没有得到任何输出。当我重新运行程序时,它失败了。
pyopencl.cffi_cl.LogicError: clcreatecontext failed: <unknown error -9999>
彻底关闭我的IDE(Spyder)。