GPUを支える技術 ――超並列ハードウェアの快進撃[技術基礎]

本書について

この記事を読むのに必要な時間:およそ 1 分

本書は,GPUの解説書です。スマートフォンなどのカラフルな画面を作り上げているのはGPUですから,GPUは私達の生活に一番密着しているプロセッサとも言えます。本書では,グラフィックスの画面表示がどのようにして行われているのか,グラフィックス表示用のGPUは従来のCPUとどのような違いがあるかから解説を行っています。

グラフィックス表示,特に3Dモデルに基づく画面表示を行うには大量の計算が必要であり,GPUは「高い計算能力」を持つという方向に進化していき,トップクラスの製品同士を比較すると現在ではCPUに比べてGPUは10倍程度の計算能力を持っています。

しかし,CPUはいわばスポーツカーで,少数の人をできるだけ速く運ぶことを目的としています。一方,GPUはバスで,速度はスポーツカーには及びませんが,多数の乗客を運ぶので人数×距離という尺度では,スポーツカーより10倍高い性能を持っているのと同じことで,一つの面だけを取り上げて性能を比較することは適当ではありません。

GPUの計算能力の向上には,ゲームグラフィックスが大きな支えになっています。本書第3章(3.3節)に,西川善司氏に寄稿いただいた最近のゲームグラフィックスの解説があります。

GPUの高い計算能力に注目した研究者やエンジニアが,GPUを科学技術計算に使い始めました。これに対応してGPUメーカーも,GPUで科学技術計算を行うためのプログラミング言語やそのコンパイラなどのツールを開発し,GPU自体も科学技術計算で必要となる64ビットの倍精度浮動小数点演算機能をサポートしたり,大規模長時間の計算に対応するためのエラー検出,訂正機能をサポートするなどの改良を行いました。

これにより,GPUは数値計算を行うアクセラレータとしての地位を確立し,世界のトップレベルのスーパーコンピュータの1/3程度がGPUなどのアクセラレータを使うという状況になっています。

本書では,GPUはどのような構造になっており,なぜCPUより数値計算性能が大幅に高いのかを特に詳しく説明しています。基本的にGPUはたくさんの演算器を搭載して,並列に計算を行うことで高い計算性能を実現しているのですが,たくさんの演算器があってもそれらを有効に使うプログラムでなければ高い性能は実現できません。本書では,GPUで実行する超並列プログラムの記述機能を持つCUDAやOpenCLといった言語の説明と,これらの言語を使った性能の高いプログラムの作り方を説明しています。

また,最近では,CortanaやGoogle Assistantのような音声認識や,画像認識を使った類似の写真の検索,自動翻訳などのAI(人工知能)を使うWebサービスが増えています。また,車の自動運転でも周りの状況の認識などにAIが使われます。このようなAIには大量の計算が必要になるのですが,AIの計算はGPUの得意なタイプの計算なので,GPUが多く使われています。

GPUを利用したAIの進化がAIを利用する分野を拡大し,利用分野の拡大がGPUに新たな改良を促すというポジティブなフィードバックが起こり,急速な進歩が起こっています。本書では,第7章でGPUの使われ方の広がりと,新たな使い方を説明しています。最後の第8章は,GPUだけではなくCPUやその他のプロセッサを含めて,今後どうなって行くのかという展望を述べています。

本書では,汎用CPUの基本的な処理方法の概念はおおよそ理解があるという想定で解説を行っています。また,GPUのプログラミングに関してはC言語の基本的な知識を持っていることを前提に解説を進めますが,並列プログラミングについては特別な知識は必要ではありません。

GPUは広く使われていますが,その構造を解説した初学者向けの書物はほとんどありません。また,CUDAやOpenCLによるプログラムの書き方を扱っている書物は多くありますが,GPUのハードウェアの構造と関連付けて,どのように書けばハードウェアを有効利用できるかという観点で説明を行っている書物は少ないと思います。本書を通して,GPUを理解し,うまく利用していく方が増えることになれば幸いです。

2017年6月 Hisa Ando

著者プロフィール

Hisa Ando

シリコンバレーで,1990年代に先端プロセッサの開発に従事。現在はフリーのテクニカルライターとして,プロセッサやスーパーコンピュータ関係の報道や解説を中心に活動している。『コンピュータ設計の基礎』(マイナビ出版,2010),『プロセッサを支える技術』(技術評論社,2011)などコンピュータアーキテクチャ関係の6冊の著書がある。また,ブログでプロセッサ関係の話題を紹介している。博士(工学)。