在OpenCL中大步循环

时间:2017-01-23 15:05:34

标签: opencl

如果我在c ++中有一个for循环的for循环,我怎么能在OpenCL内核中并行化它。

例如:

for(int i=0;i<100;i++4)
   for(int j=0;j<60;j++4)
    {
       a[i]= b[j]+2;
    }

在OpenCL中,如果我想并行化循环,我可以考虑使用“/”“%”,但还有其他解决方案吗? 我在想这样的事情:

int id1= get_global_id(0);
int id2= get_global_id(1);

if((id1%4==0) && (id2%4==0))
 {
   a[id1] = b[id2]+2;
 }

这只是一个例子,正如我想知道的,如何才能有效地工作。还有其他办法吗?

1 个答案:

答案 0 :(得分:2)

将id1和id2与4相乘,并在启动内核时将全局大小设置为100/4和60/4。

int id1= get_global_id(0)*4;
int id2= get_global_id(1)*4;
a[id1] = b[id2]+2;