2014-11-06 46 views

回答

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

希望这有助于

相关问题