研究Topics

GPUコンピューティングことはじめ

額田 彰 教授

高性能計算システム研究部門

額田教授は、スーパーコンピュータ等の最先端計算機システムを効果的に活用してさまざまな計算の高速化を実現することを目的とした高性能計算の研究者です。

(2020.11.9 公開)

 

GPUとは

GPU(Graphics Processing Unit)は本来グラフィックス処理専用のデバイスです。計算処理はCPUが担当し、可視化処理などだけがGPUに分担され、そのままディスプレイに出力されるのが一般的でした。パソコン用のゲームが普及していった結果、より高解像度のきれいな画像生成をより高速に行う需要が増え、それに応えるためGPUの処理速度が飛躍的に向上していきました。GPUが行う画像処理は定型的で、画面の各ピクセルの値(色)を計算するために同等の処理を多数、別個のデータに対して行うという性質があります。

CPUとGPUの違い

 

このため演算器の数を増大させることがCPUよりずっと容易なアーキテクチャになっており、いつのまにか32bitの浮動小数演算性能において当時のCPUを上回っていました。また多数の演算器にデータを送る必要があるためGPUは少ない容量ながらも専用のメモリを搭載し、そのデータ転送速度はCPUのメインメモリを超えるようになりました。

GPUによる汎用計算

GPUがCPUより高い演算性能を持つとわかるとGPUを計算に使いたくなるものです。元々GPUはグラフィックス処理しかできない構造でしたが、グラフィックス分野も急激に進歩し、GPUのハードウェアも処理内容を詳細にプログラム可能になってきて、2000年代後半ついに、汎用計算向けのプログラム開発環境がGPUベンダーから提供されるようになりました。

これまで様々な計算がGPUプログラムに移植されて高速化を実現しています。しかしどのような計算でもよいわけではなく、「同等の処理を多数」実行するというハードウェアの基本に合わせなければ意味がありません。CPUは多くても数十コアを搭載しているものが主流ですが、GPUのコア数は数千規模でさらにその何倍もの並列性がなければ演算器をフルに活用することができません。提供されているプログラミング言語もこれを想定したものになっていて、その型にはまるようにうまく記述できるような計算内容であればGPUで高速化できることが多いと言えます。

CPU用のプログラムをGPUに移植すると、今後CPU用とGPU用の2つのコードを管理し続けなければなりません。計算内容がもう変わることがないのであれば問題ありませんが、最先端研究で使用されているソフトウェアは頻繁に更新され続けることが多くなっています。そこで近年需要が高まっているのがOpenACCやOpenMPのような、指示詞(コメント文)によるGPU化の方法です。プログラマはコードの中で並列性が高くGPUで高速化可能な箇所を指示し、コンパイラがGPU用のコードを生成してくれます。コンパイラの負担が非常に大きいのですが、これによってCPU用とGPU用の両方の実行プログラムをコンパイラのオプションの切り替えのみで生成でき、コードの管理が楽になります。

指示詞(コメント文)によるGPU化(OpenACCの場合)

 

今後

現在、世界トップ500のスパコンの中にはCygnusを含め多数のGPU搭載システムがあります。これはGPUがすでに汎用計算用のプロセッサとして広く受け入れられていることを示し、またコストパフォーマンスや電力効率においても優れていることもシステム調達の検討時に大きなポイントになっているようです。

 

さらに詳しく知りたい人へ