OpenACCIntro
17/27 reduction節

【テロップ】
※各テロップ文字をクリックすると該当の場所がピンポイントで閲覧できます。



【ノート】
オープンACCのプラグマには、補助的なせつを負荷することができますが、ここでは、リダクションせつについて紹介しておきます。 プラグマループプラグマで並列化されるフォーループの中には、配列要素だけでなく、スカラ変数を用いた計算をすることができます。 例えば、ループ1では、変数sが一時的なあたいを保持し、次のぎょうの代入文の右辺で参照されています。 変数sは、スレッド毎に記憶領域を確保し、スレッド毎にあたいを読み書きできるように実装されます。 これに対し、ループ2においては、変数sは、フォーループの中で、配列要素xと配列要素yの乗算結果を加算し、 総和を計算するような使われ方をしています。 スカラ変数sは、スレッド毎で和を求めた後、スレッド間で加算をする必要があります。 このような動作をリダクションといい、 ★ このようなせつ、つまり注意書きをプラグマに追加します。つまり、変数sは加算をリダクション演算を行う、ということを指示します。 ループ3は、少しわかりにくい例ですが、sが総和を取るスカラ変数となっています ★ この場合も、リダクション演算であることを示す情報をプラグマに追加します。 ★ リダクションは、どういう演算をするか、つまりオペレーターが何かを指定し、その処理にかかわる変数名をコロンの右にかきます。 リダクション演算は、加算だけでなく、乗算、最大値探索、最小値探索などがあります。 リダクションせつを書かなくても、コンパイラがリダクション演算であることを認識する場合もありますが、コンパイラに正しい情報をつたえるように、必要な場合はリダクションせつを書くようにしましょう。