2014-11-06 49 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() 
     ) 
    ) 

希望這有助於

相關問題