2016-04-19 5 views
0

私は複数の作業項目を持つOpenCLカーネルを持っています。議論のために、x * y要素が同じ大きさだが疎な入力要素の配列を扱う2-Dワークスペースを持っていると仮定しよう。これらの入力要素の中には結果を生成するものはほとんどありません。私は入力として保持された結果だけを取る、別のカーネルをエンキューしたい。OpenCLの結果をリストに追加/ソリューションルームを縮小

OpenCLでは、結果をある種のリストに追加して別のカーネルに入力として渡すことは可能ですか、ソリューションスペースの容量を減らす方が良いでしょうか?さらに:これは、OpenCLのプログラミングモデルを念頭に置いて尋ねるのも良い質問ですか?

答えて

2

結果データの量が小さい(つまり、0〜10%)場合は、ローカルアトミックとグローバルアトミックをグローバルカウンタで使用します。

データインターフェース 2 ---->カーネル< 1カーネル間:

int counter     //used by atomics to know where to write 
data_type results[counter]; //used to store the results 

Kernel1:

  • データに対して操作を行い、カーネル関数を作成
  • 結果を生成する作業項目:
    • ローカルメモリに結果を保存し、ローカルカウンタでローカルアトミックを使用してデータ競合が発生していないことを確認します。
  • グローバルアトミックを使用して、すべてのローカル結果をグローバルメモリに保存するには、作業項目0を使用します。

Kernel2: "カウンター" の作業を行うよりも

  • 作業項目下、他の人がちょうど返します。
関連する問題