我们如何在内核函数中分配给Ctree中的本地内存

时间:2014-11-06 01:30:02

标签: python opencl

在使用Python在Ctree中编写代码时,我们如何使用__local OpenCL标识符?我们正在尝试执行以下操作:

__local int *some_array[WORK_GROUP_SIZE];

除了Ctree。

1 个答案:

答案 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()
        )
    )

希望这有帮助