2016-06-15 170 views

回答

4

这确保了正确的工作组规模在过去。通常情况下,本地存储的必要规模的工作组大小的函数。例如。在一张16x16的图片上工作。

E.g.可以这样写:

__attribute__((reqd_work_group_size(16, 16, 1))) 
kernel foo void(...) { 
    local float tile[16][16]; // compiler allocates local memory 
    ... 
} 

编译器分配本地内存,我们不需要将它作为显式参数传递。但是,我们需要确保工作组大小符合该假设。这个属性确实如此。

+0

因此设置工作组大小是硬代码,对吧?无论如何要动态设置工作组大小? – ThSorn

+0

您可以在内核编译时将它作为#define传递(并且可以在运行时或事先编译各种预定义的大小并在运行时交换),但据我所知,您不能拥有一个真实的动态调整大小的本地数组 –

+0

您可以将本地缓冲区作为内核参数传递,并使用'clSetKernelArg'在入列NDRange时调整大小。这使得它在NDRange之间变得动态。 – Tim

相关问题