OpenACCIntro
10/27 ホストとデバイス(データ転送)

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



【ノート】
GP GPUでは、CPU側をホストと呼び、GPU側をデバイスと呼びます。また、これらは別々のメモリを持つので、両者を組み合わせて計算する場合は、メモリ間でデータ移動が発生します。 GP GPUによるGPUの計算では、ホストとデバイスという用語が使われます。すなわち、CPUを用いて計算する部分をホストといい、GPUを用いて計算する部分をデバイスと言います。また、ホストで用いられるメモリとデバイスで用いられるメモリは別のハードウエアです。なお、両者のメモリを一体化する場合もありますが、ここでは別のハードウエアの場合で考えます。 上記のプログラムをホストだけで実行する場合は、 ★ メモリ上に割り当てられた配列を用いて、 ホストのCPUメモリ間で実行を進めて、実行を完了します。 デバイスのGPUを用いた実行の場合は、手順が少し複雑になります。 まず、デバイスのメモリ上に計算に使用する配列の領域が確保されます。 ★ 次に、ホスト上のyとzの配列の内容を、デバイス上の配列にコピーします。 ★ これを、ホストからデバイスへのメモリコピーもしくはデータ転送といいます。 ここで、デバイス上で並列計算が行われます。 ★ これをカーネル実行といいます。 その後、計算結果が書かれたデバイス上の配列xを ★ ホストの配列にメモリコピーします。 最後に、デバイス上に割り当てられた配列を解放します。 ★ 以上のように、オープンACCを用いたGPGPUにおいては、GPU上での計算以外に、デバイス上のメモリに対して、ホストとのデータの送受信が必要になります。これらのことを行うためのプログラミング方法ついては、のちほど述べていきたいと思います。