OpenCL - local_work_size没有任何影响

时间:2013-12-02 14:19:05

标签: opencl

我使用以下代码运行openCL程序:

CL_CHECK( clEnqueueNDRangeKernel(this->commands, this->kernel, 
                    settings.dimCount, NULL, settings.globalWorkSize, settings.localWorkSize, 
                    0, NULL, NULL) );

,其中

settings.dimCount = 3
settings.globalWorkSize = {100, 1, 1}
settings.localWorkSize = {10, 1, 1}

但是我的get_global_id(0)给出的输出数据总是在< 0,100>范围内。从来没有更多。为什么?我希望得到范围< 0,1000>

我的内核

__kernel void main(                                              
   __global float* output)                                           
{                                                                      

   //int i = get_local_id(0) + get_local_size(0) * get_group_id(0); //should be same as get_global_id  
   int i = get_global_id(0);                                                   
   output[i] = i;                              
} 

2 个答案:

答案 0 :(得分:1)

全球工作规模是将要处理的项目总数。如果它是100,那么您将拥有100个项目,不再有。

本地工作大小是分配给每个工作组的项目数。然后,通过将一个工作组除以另一个来确定工作组的总数 - 在您的情况下,您将有10个工作组,每个工作组处理10个工作项。

答案 1 :(得分:0)

致电时:

clEnqueueNDRangeKernel(this->commands, this->kernel, 
                    settings.dimCount, NULL, settings.globalWorkSize, settings.localWorkSize, 
                    0, NULL, NULL)

全局和本地工作尺寸正是您设定的尺寸。

在你的情况下,

settings.globalWorkSize = {100, 1, 1}
settings.localWorkSize = {10, 1, 1}

为什么您希望这些值有所不同?

尝试一些实验:更改值并重新运行代码。