OpenACCIntro
13/27 forループの並列化
【テロップ】
※各テロップ文字をクリックすると該当の場所がピンポイントで閲覧できます。
【ノート】
では、最初のフォーループをオープンACCで並列化してみましょう。いま示したように、フォーループの前に、プラグマを書きます。プラグマとは、C言語の仕様の一部で、コンパイラに対して、何らかの指示を与えたい場合に使われる構文で、シャープ記号のあとに、プラグマと書きます。さらに、今回は、オープンACCのプログラマなので、その後に、ACCと書きます。これで、オープンACCに関するプラグマであることが分かります。オープンACCは、GPUを用いた並列計算に用いられ、並列化したいフォーループを指定したい場合には、パラレル、そしてループとプラグマに書きます。このようにすることで、後続するフォーループが、GPUで並列計算されることになります。 このフォーループには、配列xと配列yがあるので、GPUのメモリにも、同じく、配列xと配列yの領域が取られます。 ★ まず最初に、CPUメモリ上の配列xと配列yのあたいが、GPUメモリ上にデータ転送されます。これで、GPUが計算する準備が整います。 ★ そこで、GPUじょうのスレッドが、配列要素毎に起動され、ここで示すような計算が実行されます。具体的には、配列要素が10個あるので、10個のスレッドが起動し、それぞれが、1個の加算と代入を行います。 ★ そこ後、計算した結果が、GPUメモリ上の配列xに格納されているので、それを、CPUメモリ上にデータ転送します。 ★ 以上で、プラグマをつけたフォーループが、CPUではなく,GPUで実行されたことになります。