OpenACCIntro
20/27 forループの並列化
【テロップ】
※各テロップ文字をクリックすると該当の場所がピンポイントで閲覧できます。
【ノート】
では、両方のフォーループにパラレル及びループプラグマを付ければどのようになるでしょうか。 まず、最初のフォーループの実行を行う前に、 ★ CPUメモリからGPUメモリへデータ転送が行われ、 ★ GPUによる並列計算が行われ、 ★ GPUメモリからCPUメモリへのデータ転送が行われます。 ★ さらに、2個目のフォーループの実行の前に、 ★ CPUメモリからGPUメモリへデータ転送が行われ、 ★ GPUによる並列計算が行われ、 ★ 最後にGPUメモリからCPUメモリへのデータ転送が行われます。 ★ 並列計算が行われ、高速化が実現できるように思うのですが、データ転送が頻繁なように見えます。 実際、2個目のフォーループを計算する前に、CPUメモリからGPUメモリに、配列xと配列yをデータ転送しましたが、 これらの配列は、一つ目のフォーループの並列計算のときに、 既にGPUメモリの上にデータが存在するので、不要なデータ転送ということになります。 そこで、データ転送の必要性を、明示的に示すためのプラグマ、すなわちデータプラグマを用いて、データ転送の最適化を図ります。