2017-01-23 56 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;