OpenACCIntro
14/27 parallelプラグマとloopプラグマ
【テロップ】
※各テロップ文字をクリックすると該当の場所がピンポイントで閲覧できます。
【ノート】
このプラグマを詳しくみていきます。 ★ まず、これは、パラレルプラグマとループプラグマが合体したもので、本来は、パラレルプラグマで、並列化部分を指定し、ループプラグマで、計算の分散を指示します。 ★ では、パラレルプラグマだけであれば、どのようになるかをみていきます。このようなプラグマで、フォーループを囲みます。 この場合、適切な数、例えば、同時に実行可能なスレッドの最大数などの数のスレッドが生成されます。ここでは、10個とします。それぞれのスレッドは書かれているプログラムの内容を実行するので、同じことを行います。 ★ つまり、まず0番目の配列要素の計算を全てのスレッドが 行ないます。 ★ 次は1番目、 ★ 次が2番目、 ★ さらに3番目、 ★ 4番目、 ★ 5番目、 ★ 6番目、 ★ 7番目、 ★ 8番目、 ★ 最後にが9番目の実行を行います。 ★ このままでは、並列実行にはなっていないので、高速化にはなりません。 ★ つまり、パラレルプラグマは、複数のスレッドを生成し、計算を実行するもので、そのままでは、同じ計算を行なうだけなので、高速化にはなりません。 ★ そこで、ループプラグマで、計算を複数のスレッドに分散し、スレッド毎の計算量を最小化します。 つまり、データ1要素の計算を、ひとつのスレッドで実行することになります。