2017-01-23 58 views
0

如果我在C++中有一个for循环,但是如何在OpenCL内核中对其进行并行化。在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; 
} 

这只是一个例子,我想知道,如何能与步幅工作。有没有其他方法?

+0

什么样的数据类型是a和b? (我假设为整数)两个列表中有多少条目? – mfa

+0

如果你不安排你的代码来实现读写合并,你将在桌面上留下很多性能。 – Dithermaster

回答

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;