在使用Python在Ctree中编写代码时,我们如何使用__local
OpenCL标识符?我们正在尝试执行以下操作:
__local int *some_array[WORK_GROUP_SIZE];
除了Ctree。
答案 0 :(得分:1)
查看文件stencil_code / backend / ocl.py中的stencil specializer如何处理。传递给内核函数的第三个参数是对工作组本地内存空间的引用。
def visit_FunctionDecl(self, node):
...
node.params[-1].set_global()
node.params[-1].type = ct.POINTER(ct.c_float)()
node.params.append(SymbolRef('block', ct.POINTER(ct.c_float)()))
node.params[-1].set_local()
node.defn = node.defn[0]
...
return node
构造调用此内核的c例程的代码在同一个函数中,您的local_mem_size计算应该没有此处显示的那么复杂。这有点难以理解,但它为set_arg调用构建了local_memory引用,如下所示
local_mem_size = reduce(
operator.mul,
(size + 2 * self.kernel.ghost_depth[index]
for index, size in enumerate(local_size)),
ct.sizeof(cl.cl_float())
)
setargs.append(
clSetKernelArg(
'kernel', len(arg_cfg) + 1,
local_mem_size,
NULL()
)
)
希望这有帮助