GPUの仕組み

CUDAを使う上で、必要最小限のGPUの仕組みをここにまとめる。

GPUとは

GPU(Graphic Processing Uint)とは、元々3Dレンダリング等の画像処理を高速に行うためのハードウェアで、Graphic BoardやVideo Cardとも呼ばれる。高速な画像処理が必要なFPSゲームを買う際にGPUの性能が…と耳にするあのGPUである。

Tesla V100[1]

似たものにCPU(Central Processing Unit)がある。 CPUもGPUもコンピューターが機能するために必要な計算処理を行うという点では同じだが、CPUは汎用的かつ複雑な処理、GPUは膨大な計算をまとめて処理することにそれぞれ特化している。

また、GPUはCPUに対して独立したハードウェアである。また、GPUは単体で動かすことが出来ず、GPUを動かすためのCPUが必要である。従って、GPUを扱うためにはCPUとGPUの間でデータの転送を行う必要がある。

これまでGPUは主に画像処理をする際に用いられてきたが、昨今はその圧倒的な計算処理能力を、より汎用性のある目的のために使おうとする動きが出てきた。そのために開発されたものがGPGPU(General Purpose GPU)である。GPGPUに対応しているGPUとしては、NVIDEA社製のGeForceシリーズが有名である。GPGPUが用いられている分野としてはDeep Learning, 量子化学計算, 数値流体計算, 分子動力学計算, バイオ情報学等々、昨今のホットな話題が満載である[2]。上のことを学びたい人はGPUを使った計算手法を学ぶ意義があると言えるだろう。

GPUとCPU

CPUとGPUの比較[3,4]

この図は典型的なCPUとGPUを比較したものである。Core i7とGeForceは一般的なPC、XeonとTeslaはサーバー用途で用いられている。

CPUはコアの数こそ少ないものの、CPU高速化[5]にあるような高速化技術を駆使して、複雑な条件分岐などを高速に処理している。

対して、GPUは1つのコアあたりの性能こそ貧弱だが、それを数千集めることでSIMD演算やベクトル計算に対して高速に処理する能力を持っている。ただその特性上、並列化出来ない部分の多い処理(条件分岐等)に対して良い性能を出すことは出来ない。

GPUの構造

GPUはたくさんのブロックとGlobalメモリと呼ばれるメモリ領域で構成されており、更にそれぞれのブロックの内部に着目してみると、ブロックの中は千以上のスレッドとSharedメモリと呼ばれるメモリ領域で構成されている。

それぞれのブロックとスレッドには固有のIDがあり、そのIDによって割り振られる似たような処理を独立に行う。同期を取りたい場合は専用の命令をGPUに対して呼ばなければならない。

また、GPU側からCPU上のメモリにアクセスしたり、逆にCPU側からGPU上のメモリにアクセスすることは出来ないので、必要なときに相互間通信処理を入れる必要がある。

メモリの階層性

メモリについて見ていくと、Globalメモリは数GBの容量を持っており、GPU上のあらゆるブロックからアクセスできる扱いやすいメモリである。

一方ブロック内にあるSharedメモリは数十MBしか容量がなく、そのブロック内でしかアクセスできない代わりにGlobalメモリよりも圧倒的に速いのが特長だ。

従って、GPUで効率の良いプログラムを組む場合は、なるべくGlobalメモリからデータをSharedメモリに持ってきて、さらにSharedメモリ上でデータを使い回すような組み方をすることが重要だ。

GPUを用いた処理の流れ

以上をまとめるとGPUを用いた処理の流れは次のようになる。

  1. CPUによる前処理(メモリの確保やファイルの読み込み)
  2. 必要なデータをCPU上のメモリからGlobalメモリに転送
  3. GlobalメモリからSharedメモリに必要なデータをコピー
  4. 並列処理
  5. Sharedメモリから処理後のデータをGlobalメモリに戻す
  6. GlobalメモリからCPU上のメモリにデータを転送
  7. CPUによる後処理

GPUに向いている処理

最後にGPUで行うべき処理をまとめておく。

  • SIMD演算、ベクトル演算
  • 分岐処理が少ない
  • CPUとGPUの間の通信が少ない

References

[1]Tesla V100

[2] 畝山多加志 『大規模並列数値計算特論 GPUプログラミング(1)』2019年度講義資料

[3] インテルのCPU性能

[4] Tesla V100の性能

[5] CPU高速化

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です