WEB+DB PRESS plus
                    GPUを支える技術
                    ――超並列ハードウェアの快進撃[技術基礎] 
                  
                  
                  
                  - Hisa Ando 著
 - 定価
 - 3,564円(本体3,240円+税10%)
 - 発売日
 - 2017.6.30[在庫なし]
 - 判型
 - A5
 - 頁数
 - 320ページ
 - ISBN
 - 978-4-7741-9056-3 978-4-7741-9121-8
 
概要
GPUの基本構造と技術動向に焦点を当てた解説書。3Dグラフィックス、ゲーム、モバイル、VR/AR、科学技術計算、そして人工知能/ディープラーニングに至るまで、幅広い分野でGPU/並列計算の重要度は高まる一方です。その背景にあるハードウェアおよび計算処理への要求とは、どのようなものでしょうか。
本書ではGPUの今を主軸に、ハードウェアおよびソフトウェアの観点の基本事項、超並列処理の根幹部、重要技術の動向まで徹底解説。先端の実製品例、各分野での具体的な導入事例なども豊富に盛り込み、現場で活かせる技術知識を凝縮してお届けします。
補足情報
本書の構成
本書は、以下のような構成で解説を行っています。
第1章 [入門]プロセッサとGPU
どのようにして画像表示を行うのかというグラフィックスの基礎から、グラフィックスの歴史、3Dグラフィックスの考え方、CPUとGPUの違いなど、グラフィックスの基礎知識を解説しています。さらに、グラフィックシステムの基本的な構造やGPUの実行方式など、第2章以降に読み進むための基礎を説明します。
第2章 GPUと計算処理の変遷
第2章では、グラフィックス処理ハードウェアの歴史から、GPUの科学技術計算への利用について説明しています。特に、SIMT実行やプレディケート実行など、今日のGPUの並列処理の方法について解説しています。
第3章 [基礎知識]GPUと計算処理
第3章では、3Dグラフィックスとはどのような処理をするのか、そのための表示パイプラインを説明しています。そして、ゲームにおける最近の3Dグラフィックス処理について解説しています。そして、GPUによる科学技術計算とは、どのような用途に使われるのかを解説しています。
第4章 [詳説]GPUの超並列処理
第4章は本書の中心で、GPUの構造はどのようになっているのかを詳しく解説しています。本章を注意深く読んでいくと、なぜGPUが高い演算性能を持っているのかをしっかりと理解できるでしょう。また、科学技術計算ではエラーの発生が最終結果を誤らせてしまうという問題があり、エラーの検出や訂正が重要になります。第4章では、エラー検出や訂正の方法も説明を行っています。
第5章 GPUプログラミングの基本
GPUハードウェアは高い演算能力を持っているのですが、それらの計算資源を有効利用するプログラムがなければ性能を発揮できません。
第5章は、超並列のGPUプログラムを記述するプログラミングの基本事項について説明しています。
第6章 GPUの周辺技術
GPUが高い性能を発揮するためには、データの供給と演算結果を格納する高バンド幅のメモリが必要です。また、CPUとGPU、あるいはGPU同士で高速にデータを転送することが必要になります。本章では、GPUのデバイスメモリやデータ転送の技術を解説しています。
第7章 GPU活用の最前線
GPUは3Dグラフィックス表示から汎用の科学技術計算へと適用範囲を拡大してきました。その3D表示はより品質を高め、製品開発の過程で試作を省くというような効率化を実現しています。また、VRやARのように、より高度な表示も使われ始めています。さらにはGPUの計算能力をAIの計算に使って自動運転を目指すというように、GPUの適用範囲が広がっています。第7章は、GPUがどのように使われていくのかの展望を持つのに役に立つでしょう。
第8章 プロセッサとGPUの技術動向
第8章は、これからCPUやGPUがどのように発展してくのかについて筆者の主観を交えつつ概観します。
必要となる前提知識について
本書を読むために必要となる特別な前提知識はそれほどはありません。以下のような基礎知識があれば、より読みやすいでしょう。
- 命令フェッチから演算に至るプロセッサの動作原理
 - C言語の基礎知識
 - 並列処理を行う場合の問題点
 
本書に関するお知らせ
本書に関連する記事を公開しております。
こんな方にオススメ
- GPUがどのようになっているのかを知りたい方
 - GPUの仕組みを知って、より高性能のプログラムを書きたい方
 - GPUの仕組みと現在の使われ方を理解して、より良く使いたい方、新たな使い方を考えたい方
 
知的好奇心からGPUがどうなっているのかを知りたいという方も歓迎です。
目次
本書について
本書の構成
本書の読者対象および必要となる前提知識について
第1章 [入門]プロセッサとGPU
1.1 コンピュータシステムと画像表示の基礎 ……フレームバッファ、VRAM、ディスプレイインターフェース
- コンピュータで画像を表示する仕組み
 - 画像を表示するディスプレイ ……ブラウン管とラスタースキャン
 - 液晶ディスプレイ ……液晶セル、ピクセル、dpi
- 液晶セルのアクセス ……互換性が高いスキャン方法
 - Column ……プロセッサの構造と動き
 
 - フレームバッファとディスプレイインターフェース
 
1.2 3Dグラフィックスの歴史 ……文字から図、2D、3Dへ。高品質とリアルタイム
- 初期のグラフィックス
 - コンピュータグラフィックスの利用の広がり ……高品質画像、リアルタイム描画
 - 3次元物体のモデル化と表示
 
1.3 3Dモデルの作成 ……パネル、座標、配置、光
- 張りぼてモデルを作る ……パネル、ローカル座標とグローバル座標
 - マトリクスを掛けて位置や向きを変えて配置を決める ……モデリング変換、視点変換、モデリングビュー変換、トランスポーズ
 - 光の反射を計算する ……ライティング
 
1.4 CPUとGPUの違い ……プロセッサも適材適所
- GPUは並列処理で高い性能を実現する ……数十~数千個の演算器、GDDR DRAM
 - GPUの出現
 - GPUコンピューティングの出現 ……浮動小数点演算で広がった活躍の場
 - GPUは超並列プロセッサ ……デスクトップPC向けCPUとゲーム向けGPUの比較
- GPUは、並列に実行できない処理は苦手
 
 - CPUとGPUのヘテロジニアスシステムと、抱える問題
- Column ……整数と浮動小数点数
 - ヘテロジニアス構成では「データ転送」が必要
 - ディープコピーの問題
 
 
1.5 ユーザーの身近にあるGPUのバリエーション ……SoC、CPUチップ内蔵、ディスクリートGPU
- 携帯機器向けのGPU ……スマートフォンやタブレット向けのSoCに搭載
 - CPUチップに内蔵されたGPU ……Intel Coreシリーズ、AMD APU
 - ディスクリートGPUとグラフィックスワークステーション ……消費電力は200W超え(!?)コストの許す範囲で最高の性能を求めるユーザー達
 
1.6 GPUとおもな処理方式 ……メモリ空間、描画時のGPUメモリ確保方式、並列処理
- 共通メモリ空間か、別メモリ空間か
- CPUとGPUが同一チップ ……共用の一つのメモリのバンド幅で我慢
 - 高いメモリバンドへの要求
 
 - フルバッファ方式か、タイリング方式か ……描画時のGPUメモリ確保方式
 - SIMD方式か、SIMT方式か ……座標やピクセル色で、4要素を一まとめに扱うために
 
1.7 まとめ
- Column ……プロセッサと半導体の世代 ……24nm世代、16nm世代... 「PxxMxx」表記
 
第2章 GPUと計算処理の変遷
2.1 グラフィックスとアクセラレータの歴史 ……ゲーム機、PCグラフィックス
- グラフィックス処理ハードウェアの歴史 ……ゲーム、ハイエンドシュミレータ、科学技術計算
 - アーケードゲーム機
 - 家庭用ゲーム機
 - グラフィックス
 
2.2 グラフィックスボードの技術 ……2Dの背景+スプライト、BitBLT、2D/2.5D/3Dグラフィックアクセラレータ
- 2Dの背景+スプライト
 - BitBLT
 - 2Dグラフィックアクセラレータ
 - 3Dグラフィックアクセラレータ
 
2.3 GPUの科学技術計算への応用 ……ユニファイドシェーダ、倍精度浮動小数点演算、プログラミング環境
- ユニファイドシェーダ
 - GPUで科学技術計算 ……G80アーキテクチャ
 - 科学技術計算は32ビットでは精度不足 ……GT200のアーキテクチャ、GF100 Fermi GPU
 - CUDAプログラミング環境
 - エラー検出、訂正
- Column ……ムーアの法則と並列プロセッサ
 
 
2.4 並列処理のパラダイム ……基本、MIMD/SIMD/SIMTの違い
- GPUの座標変換計算を並列化する ……並列計算のための基礎知識
 - MIMD型プロセッサ
 - SIMD型プロセッサ
 - SIMD実行の問題
- 演算器の数とベクトル長のマッチング
 - メモリアクセスと分岐命令の処理
 
 - SIMT実行
- SIMT実行では条件分岐が実現できる ……プレディケート機構
 - SIMTプロセッサのロード/ストア命令の実行
 - SIMT実行のプログラミング上のメリット
 
 
2.5 まとめ
- Column ……ARMv7のプレディケート実行機能
 
第3章 [基礎知識]GPUと計算処理
3.1 3Dグラフィックスの基本 ……OpenGLのレンダリングパイプラインを例に
- [基礎知識]OpenGLのレンダリングパイプライン
- 頂点シェーダ ……頂点データの入力と出力
 - テッセレーション ……細かく分解して、多数のプリミティブを生成
 - ジオメトリシェーダ ……プリミティブの全頂点データが入力され、面の法線の計算などに使える
 - 頂点ポストプロセスとプリミティブアセンブリ ……ビューボリューム、クリッピング
 - ラスタライズ ……フラグメント(ピクセル)への変換
 
 - フラグメントシェーダ ……フラグメントの色と奥行き方向の位置を計算
- Zバッファ ……多数のプリミティブの重なりを処理するための機構
 - テクスチャマッピング ……壁紙を立体の表面に貼り付ける
 - ライティング ……光の当たり具合、反射、光源
 - 光の反射を計算するフラグメントシェーディング
 
 - サンプルごとのオペレーション ……レンダリングパイプラインの最後
 
3.2 グラフィックス処理を行うハードウェアの構造 ……Intel HD Graphics Gen 9 GPUの例
- Intel HD Graphics Gen 9 GPUコア ……強力なGPUを搭載したPC用プロセッサ
 
3.3 [速習]ゲームグラフィックスとGPU ……ハードウェアとソフトウェア、進化の軌跡
- ○特別寄稿 西川 善司
 
- [ハードウェア面の進化]先端3Dゲームグラフィックスはアーケードから ……独自のシステム、独自の3Dグラフィックス
 - PlayStationとセガサターンが呼び込んだ3Dゲームグラフィックス・デモクラシー ……PCの3Dグラフィックスの黎明期
 - DirectX 7時代 ……本当の意味での「GPU」が台頭し始めた
 - プログラマブルシェーダ時代の幕開け ……Shader Model(SM)仕様
 - [ソフトウェア面の進化]近代ゲームグラフィックスにおける「三種の神器」 ……表現要素で見る近代ゲームグラフィックス
 - [光の表現]法線マッピング ……HDゲームグラフィックス時代だからこそ求められたハイディテール表現
 - [影の表現]最新のGPUでも影生成の自動生成メカニズムは搭載されていない
- 「丸影」と「シルエット影」 ……前世代までの影表現
 
 - [現在主流の影表現]デプスシャドウ技法 ……あらゆる影が出せるようになった
 - HDRレンダリング ……現実世界の輝度をできるだけ正確に表現するために
 - HDRレンダリングがもたらした3つの効能
 
3.4 GPUと科学技術計算 ……高い演算性能で用途が拡大
- 科学技術計算の対象は非常に範囲が広い
 - 科学技術計算と浮動小数点演算 ……極めて大きい数や極めて小さい数を同時に扱うために
 - 浮動小数点演算の精度の使い分け ……グラフィックス、スマートフォン、科学技術計算
- 脚光を浴びる16ビット長の半精度浮動小数点演算 ……ディープラーニングでの使用
 
 
3.5 並列計算処理 ……プロセッサのコア数の増加と、計算/プログラムの関係
- GPUのデータ並列とスレッド並列
 - 3Dグラフィックスの並列性 ……頂点の座標変換、ピクセルのシェーディング
 - 科学技術計算の並列計算 ……並列化をどのように活かすか
- 流体計算
 - 重力多体計算
 
 
3.6 GPUの関連ハードウェア ……メモリ容量、バンド幅、CPUとの接続、エラーと対策
- デバイスメモリに関する基礎知識
 - CPUとGPUの接続
 - 電子回路のエラーメカニズムと対策
 
3.7 まとめ
第4章 [詳説]GPUの超並列処理
4.1 GPUの並列処理方式
- SIMD方式……4つの座標値を一まとまりのデータとして扱う
- SIMD演算での座標変換
 - 全部のSIMD演算器が使えない場合がある
 
 - SIMT方式……1つ1つ計算する
- SIMT方式GPUの広がり
 - SIMT方式の実行の問題点
 - SIMT方式での条件分岐の実現
 
 
4.2 GPUの構造 ……NVIDIA Pascal GPU
- NVIDIA Pascal GPUの基礎知識
 - NVIDIA GPUの命令実行のメカニズム ……[ハードウェア観点]プログラムの構造と実行
- GPUを使うプログラムの構造
 
 - 多数のスレッドの実行
- グリッドとスレッドブロックの管理 ……ギガスレッドエンジン
 - NVIDIAのダイナミックパラレリズム ……カーネルプログラムを直接起動
 
 - SMの実行ユニット
- FP32に加えてFP64、FP16をサポートする演算器
 
 - GPUのメモリシステム ……演算器に直結した高速な最上位の記憶レジスタファイルから
- Column ……ディープラーニングの計算と演算精度
 - シェアードメモリ
 - ロード/ストアユニットとリプレイ
 - Column ……RISCとCISC
 - L1データキャッシュ
 - L2キャッシュとデバイスメモリの関係
 - デバイスメモリのテクノロジー
 
 - ワープスケジューラ ……演算レイテンシを隠す
- メモリアクセスレイテンシを隠すには?
 - NVIDIA GPUは、できるだけ32の倍数のスレッドで実行する
 
 - 条件分岐を実現するプレディケート実行
 
4.3 AMDとARMのSIMT方式のGPU ……AMD GCNアーキテクチャとARM Bifrost GPU
- AMD GCNアーキテクチャGPU
- GCNアーキテクチャのCU
 
 - スマートフォン用SoC
- スマートフォン用SoCは省電力
 
 - ARM Bifrost GPU
- タイリングで画面を分割して描画を処理
 
 
4.4 GPUの使い勝手を改善する最近の技術 ……ユニファイドメモリ、SSG、細粒度プリエンプション
- ユニファイドメモリアドレス
 - NVIDIA Pascal GPUのユニファイドメモリ
- ユニファイドメモリがあれば、ディープコピーも簡単
 
 - AMD Polaris GPUのSSG
 - 命令の終わりで処理を切り替える細粒度プリエンプション
 
4.5 エラーの検出と訂正 ……科学技術計算用途では必須機能
- 科学技術計算の計算結果とエラー
 - エラー検出と訂正の基本の仕組み
 - パリティーチェック
 - ECC ……ハミングコード
- SECDEDコード
 
 - 強力なエラー検出能力を持つCRC
- 再送によるエラー訂正
 
 - デバイスメモリのECCの問題
- Column Advanced eXtensible Interface
 
 
4.6 まとめ
第5章 GPUプログラミングの基本
5.1 GPUの互換性の考え方 ……完全な上位互換は難しい状況
- ハードウェアの互換性、機械語命令レベルの互換性
 - NVIDIAの抽象化アセンブラPTX
 - GPU言語レベルの互換性 ……CUDAやOpenCL
 
5.2 CUDA ……NVIDIAのGPUプログラミング環境
- CUDAのC言語拡張
- CUDA実行プログラム(関数)の修飾子
 - NVIDIA CPU+GPUシステムのメモリ構造
 - メモリ領域の修飾子
 
 - CUDAプログラムで使われる変数 ……ベクトル型の変数のサポート
- CUDAにおけるベクトル型の変数タイプ
 - 自分の処理分担を知る組み込み変数
 
 - デバイスメモリの獲得/解放とホストメモリとのデータ転送
 - [簡単な例]行列積を計算するCUDAプログラム
 - CUDAの数学ライブラリ
 - NVIDIA GPUのコンピュート能力
 - CUDAプログラムの実行制御
- ストリームを使ってメモリ転送とカーネル実行をオーバーラップする
 - フェンス関数を使ってメモリアクセスを順序付ける
 - CUDAの関数実行を同期させるsyncthreads関数
 - ストリームの実行を同期させるcudaDeviceSynchronize関数
 
 - CUDAのダイナミックパラレリズム
 - CUDAのユニファイドメモリ
 - 複数GPUシステムの制御
 
5.3 OpenCL ……業界標準のGPU計算言語
- OpenCLとは
 - OpenCLの変数
 - OpenCLの実行環境
 - カーネルの実行
 - OpenCLのメモリ
- OpenCLのメモリの獲得と転送
 - OpenCLのSVM
 
 - OpenCLのプログラム例
- OpenCL使用上の注意
 
 
5.4 GPUプログラムの最適化 ……性能を引き出す
- NVIDIA GPUのグリッドの実行
- すべての演算器を有効に使う
 - 演算器に待ちぼうけをさせない
 - 条件分岐は気をつけて使おう
 
 - メモリアクセスを効率化する
- メモリアクセスと演算の比率 ……Byte/Flop比
 - ルーフラインモデルを使って性能を見積もる
 - メモリのアクセスパターンに注意する
 - シェアードメモリをうまく使う
 - シェアードメモリをもっとうまく使う
 - ブロッキング
 
 - ダブルバッファを使って通信と計算をオーバーラップする
 
5.5 OpenMPとOpenACC ……ディレクティブを使うGPUプログラミング
- OpenMPとOpenACCの基礎知識
- OpenMPの基本的な並列処理方法
 
 - NVIDIAが力を入れるOpenACC
- OpenACCの並列実行モデル
 - OpenACCの並列化指示
 - OpenACCを使う場合の注意点 ……データ依存の解決が必要
 - OpenACCを使う場合の注意点 ……ディープコピー
 - OpenACCで合計を求める
 - OpenACCのデータ転送指示
 - データの領域の有効期間をコントロールする
 
 - OpenMPを使う並列化
- OpenMP4の簡単な例
 - OpenMP4のデバイスの起動と並列実行
 - OpenMP4のデータ領域指定
 - OpenMP4の処理分散
 
 - OpenACCとOpenMP4
- Column ……GoogleのTPU
 
 
5.6 まとめ
第6章 GPUの周辺技術
6.1 GPUのデバイスメモリ ……大量データを高速に供給
- DRAM
- GDDR5 グラフィックスDRAM
 - HBM
 - GDDR5XとGDDR6
 
 
6.2 CPUとGPU間のデータ伝送 ……PCI Express関連技術、NVLink、CAPI
- PCI Express
- PCI ExpressのPeer to Peer転送
 - NVIDIAのGPU Direct
 - PCI Expressスイッチ
 
 - NVIDIAのNVLink
 - IBMのCAPI
 - AMDのSSD搭載GPU ……ビッグデータ処理に威力発揮の可能性
 
6.3 まとめ
第7章 GPU活用の最前線
7.1 ディープラーニングにGPUを活用する ……ニューラルネットの基本から活用事例まで
- ディープラーニングで使われるニューラルネットワーク
- 基本構成単位のニューロン
 - ニューラルネットワーク
 - ILSVRC 2012で優勝したAlexNet
 - ディープラーニングの推論動作
 - ディープラーニングの学習動作
 - 画像認識CNNはどう作るのか
 
 - ディープラーニングとGPU
 - カスタムASICやFPGAによるディープラーニング ……強力なライバルの存在
 - ディープラーニングでのGPUの活用事例
- 視覚障害者を補助するHorusのウェアラブルデバイス
 - 画像認識は多くの分野で利用が始まっている
 - NVIDIAは自動運転に向けたSoCに注力
 
 
7.2 3Dグラフィックスの活用 ……3Dで広がる事例
- 自動車の開発や販売への活用
 - 建設や建築での活用
 - Nikeのスポーツシューズの開発
 - VR、ARの産業利用
 
- NVIDIAのGRID
 
7.3 GPUを活用するスーパーコンピュータ ……高い演算性能を求めて
- 世界の上位15位までのスーパーコンピュータの状況
 - 筑波大学のHA-PACS/TCAスーパーコンピュータ
 - スーパーコンピュータを何に使うのか
 
7.4 まとめ
第8章 プロセッサとGPUの技術動向
8.1 CPUはどうなっていくのか ……スマートフォンSoC向け、データセンター向けCPU
- スマートフォンSoC向けCPU
 - データセンター向けCPU
 - 高性能CPUの技術動向
- Intelの変換命令キャッシュ
 - 機械学習を使う分岐予測
 - 演算性能を引き上げるSIMD命令
 
 
8.2 GPUはどうなっていくのか ……GPUの種別と今後
- GPUの種類
 - スマートフォンGPUはどうなっていくのか
 - ハイエンドGPUはどうなっていくのか
- CPU - GPU分離メモリの問題の解決
 - AMDを中心とするHSA
 - 新世代のメモリインターコネクト ……CCIX、Gen-Z、OpenCAPI
 
 - Knights Landing ……CPUとアクセラレータを一体化
 - PEZY-SC ……日本発メニーコアCPU
 
8.3 消費電力の低減 ……アーキテクチャおよび回路技術からのアプローチ
- アーキテクチャによる省電力設計 ……カスタムロジック、ビデオ、ディープラーニング
 - 回路技術による省電力化
 
8.4 ディープラーニングのサポート ……AIへの挑戦
- ディープラーニングの処理エンジン ……16ビットの半精度浮動小数点演算や8ビットの固定小数点演算の機能
- Column ……AI(人工知能)の歴史
 
 - Microsoftのチャットボット達 ……Tay、Xiaoice、Zo
 
8.5 まとめ
プロフィール
Hisa Ando
シリコンバレーで、1990年代に先端プロセッサの開発に従事。現在はフリーのテクニカルライターとして、プロセッサやスーパーコンピュータ関係の報道や解説を中心に活動している。『コンピュータ設計の基礎』(マイナビ出版、2010)、『プロセッサを支える技術』(技術評論社、2011)などコンピュータアーキテクチャ関係の6冊の著書がある。また、ブログでプロセッサ関係の話題を紹介している。博士(工学)。
西川善司
特別寄稿。
トライゼット
テクニカルジャーナリスト。高校時代からパソコン誌へのプログラムの寄稿、商業ゲームソフトの移植業務を受託。その後、日立製作所を経て記者業務に転向。ゲーム開発技術以外に、映像技術、自動車技術にもフォーカスした取材を行っている。