2017-01-23 9 views
0

もし私がいくつかのストライドを持ったC++のforループを持っていたら、どうすればOpenCLカーネルでそれを並列化できますか?例えばOpenCLでのストライドを伴うループ

:私は、ループを並列化したい場合にOpenCLでは

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

、私は"/"または"%"を使用して考えることができますが、他の解決策はありますか? 私はこのようなものを考えています:

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ですか? (私は整数と仮定します)2つのリストに含まれるエントリの数はいくつですか? – 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; 
関連する問題