GPUを支える技術1

設計システムはCAD(Computer Aided Design)と呼ばれています。入社後、営業管理部門から希望して移動した営業部門は、機械系設計のCADシステムや解析(CAE)システムなどを販売する部門でした。

ドイツで開発されたCADのソフトウェアは2次元の設計・製図システムがME10、3次元の立体モデルの設計システムがME30という名称でした。ざっと35年前の恐ろしく昔の話です。このME30というシステムはソフトウェアとハードウェアで1システム2,000万円以上、年間10台~15台売ればノルマ達成という感じでした。 

画像出展:「Yahoo Auction

現代では想像もできないような価格ですが、このME30という3次元CADにはSRXというグラフィックエンジンを搭載した特別仕様のEWS(エンジニアリングワークステーション)が必要なため、これだけで1,000万円以上していたと思います。

おそらく、当時のグラフィック処理をするエンジンが、NVIDIAなどが開発するGPUにつながったのだと思います。GPUはGraphics Processing Unitという名の通りグラフィックス処理用の半導体チップですが、同時に様々なソフトウェアの技術革新もあったのだろうと思います。

そして、そのグラフィック処理エンジンから派生する様々な革新が、AIの土台となるニューラルネットワークなど、新しいITの世界を切り開こうとしているように見えます。そこにはどんな歩みがあったのか、将来の可能性はどのようなものなのか、多くの発見があると期待しこの本を購入しました。

著者:Hisa Ando

第2版発行:2021年3月

出版:(株)技術評論社

目次 (大項目と中項目だけを書き出しています)

第1章 [入門]プロセッサとGPU

1.1 コンピュータシステムと画像表示基盤

●コンピュータ画像で表示するしくみ

●画像を表示するディスプレイ

●液晶ディスプレイ

-Column プロセッサの構造と動き

●フレームバッファとディスプレイインターフェース

1.2 3Dグラフィックスの歴史

●初期のグラフィックス

●コンピュータグラフィックスの利用の広がり

●3次元物体のモデル化と表示

1.3 3Dモデルの作成

●張りぼてモデルを作る

●マトリクスを掛けて位置や向きを変えて配置を決める

●光の反射を計算する

1.4 CPUとGPUの違い

●GPUは並列処理で高い性能を実現する

●GPUの出現

●GPUコンピューティングの出現

-整数と浮動小数点数

●GPUは超並列プロセッサ

●CPUはGPUのヘテロジニアスシステムと、抱える問題

1.5 ユーザーの身近にあるGPUのバリエーション

●携帯機器向けのGPU

●CPUチップに内蔵されたGPU

●ディスクリートGPUとグラフィックスワークステーション

1.6 GPUと主な処理方式

●共通メモリ空間か、別メモリ空間か

●フルバッファ方式か、タイリング方式か

●SIMD方式か、SIMT方式か

1.7 まとめ

-Column プロセッサと半導体の世代

第2章 GPUと計算処理の変遷

2.1 グラフィックとアクセラレータの歴史

●グラフィック処理ハードウェアの歴史

●アーケードゲーム機

●家庭用ゲーム機

●グラフィック

2.2 グラフィックボードの技術

●2Dの背景+スプライト

●BitBLT

●2Dグラフィックアクセラレータ

●3Dグラフィックスアクセラレータ

2.3 GPUの科学技術計算への応用

●ユニファイドシェーダ

●GPUで科学技術計算

●科学技術計算は32ビットでは精度不足

●CUDAプログラミング環境

エラー検出、訂正

-Column ムーアの法則と並列プロセッサ

2.4 並列処理のパラダイム

●GPUの座標変換計算を並列化する

●MIMD型プロセッサ

●SIMD型プロセッサ

●SIMD実行の問題

●SIMT実行

-Column ARMv7のプレディケート実行機能

2.5 まとめ

第3章 [基礎知識]GPUと計算処理

3.1 3Dグラフィックスの基本

●[基礎知識]OpenGLのレンダリングパイプライン

●フラグメントシェーダ

●サンプルごとのオペレーション

3.2 グラフィック処理を行うハードウェアの構造

●Intel HD Graphics Gen9 GPUコア

3.3 [速習]ゲームグラフィックとGPU

●【ハードウェア面の進化】先端3Dゲームグラフィック・デモクラシー

●PlayStationとセガサターンが呼び込んだ3Dゲームグラフィック・デモクラシー

●DirectX 7時代

●プログラマブルシェーダ時代の幕開け

●【ソフトウェア面の進化】近代ゲームグラフィックにおける「三種の神器」

●【光の表現】法線マッピング

●【影の表現】最新のGPUでも影生成の自動生成メカニズムは搭載されていない

●【現在主流の影表現】デプスシャドウ技法

●HDRレンダリング

●HDRレンダリングがもたらした3つの効能

●ジオメトリパイプラインに改良の兆し

●DirectX Raytracing(DXR)

●DirectX Raytracingのパイプライン

3.4 科学技術計算、ニューラルネットワークとGPU

●科学技術計算の対象は非常に範囲が広い

●科学技術計算と浮動小数点演算

●浮動小数点演算の精度の使い分け

●ディープラーニングに最適化された低精度浮動小数点数

3.5 並列計算処理

●GPUのデータ並列とスレッド並列

●3Dグラフィックスの並列性

●科学技術計算の並列計算

3.6 GPUの関連ハードウェア

●デバイスメモリに関する基礎知識

●CPUとGPUの接続

●電子回路のエラーメカニズムと対策

3.7 まとめ

第4章 [詳説]GPUの超並列処理

4.1 GPUの並列処理方式

●SIMD方式

●SIMT方式

4.2 GPUの構造

●NVIDIA Turing GPUの基礎知識

●NVIDIA GPUの命令実行のメカニズム

●多数のスレッドの実行

●SMの実行ユニット

●NVIDIAのTensorコア

-Column ディープラーニングの計算と演算精度

●GPUのメモリシステム

-Column RISCとCISC

●ワープスケジューラ

●プレディケート実行

4.3 AMDとArmのSIMT方式のGPU

●AMD RDNAアーキテクチャGPU

●スマートフォン用SoC

●Arm Bifrost GPU

4.4 GPUの使い勝手を改善する最近の技術

●ユニファイドメモリアドレス

●NVIDIA Pascal GPUのユニファイドメモリ

●細粒度プリエンプション

4.5 エラーの検出と訂正

●科学技術計算の計算結果とエラー

●エラー検出と訂正の基本のしくみ

●パリティエラーチェック

●ECC

●強力なエラー検出能力を持つCRC

●デバイスメモリのECCの問題

-Column ACEプロトコルとACEメモリデバイス

4.6 まとめ

第5章 GPUプログラミングの基本

5.1 GPUの互換性の考え方

●ハードウェアの互換性、機械語命令レベルの互換性

●NVIDIAの抽象化アセンブラPTX

●GPU言語レベルの互換性

5.2 CUDA[NVIDIAのGPUプログラミング環境]

●CUDAのC言語拡張

●CUDAプログラムで使われる変数

●デバイスメモリの獲得/解放とホストメモリとのデータ転送

●[簡単な例]行列積を計算するCUDAプログラム

●CUDAの数学ライブラリ

●NVIDIA GPUのコンピュート能力

●CUDAのプログラムの実行制御

●CUDAのユニファイドメモリ

●複数CPUシステムの制御

5.3 OpenCL

●OpenCLとは

●OpenCLの変数

●OpenCLの実行環境

●カーネルの実行

●OpenCLにおけるメモリ

●OpenCLのプログラム例

5.4 GPUプログラムの最適化

●NVIDIA GPUのグリッドの実行

●メモリアクセスを効率化する

●ダブルバッファを使って通信と計算をオーバーラップする

5.5 OpenMPとOpenACC

●OpenMPとOpenACCの基礎知識

●NVIDIAが力を入れるOpenACC

●OpenMPを使う並列化

●OpenACCとOpenMP

5.6 まとめ

第6章 GPUの周辺技術

6.1 GPUのデバイスメモリ

●DRAM

6.2 CPUとGPU間のデータ転送

●PCI Express

●NVIDIAのNVLink

●IBMのCAPI

●NVIDIA NVSwitch

6.3 まとめ

-Column AMD HIP

第7章 GPU活用の最前線

7.1 ディープラーニングとGPU

●ディープラーニングで使われるニューラルネットワーク

●ディープラーニングで必要な計算とGPU

●ディープラーニングでのGPUの活用例

7.2 3DグラフィックスとGPU

●自動車の開発や販売への活用

●建設や建築での活用

●Nikeのスポーツシューズの開発

●VR、ARの産業利用

●NVIDIAのGRID

●物理的に複数ユーザーにGPUを分割するMIG

7.3 スマートフォン向けのSoC

●Snapdragon 865とSnapdragon 835

7.4 スーパーコンピュータとGPU

●世界の上位15位までのスーパーコンピュータの状況

●スーパーコンピュータ「富岳」

●Preferred Networksのスーパーコンピュータ「MN-3」

7.5 まとめ

-Column Apple M1とそのGPU

第8章 ディープラーニングの台頭とGPUの進化

8.1 ディープラーニング用のハードウェア

●ディープラーニング用のハードウェア

●低精度並列計算で演算性能を上げる

8.2 各社のAIアクセラレータ

●GoogleのTPU

●NVIDIAのTensorコア

●LeapMindのEfficiera

●Habana LabsのGoyaとGaudi

-Column RoCE Remote DMA on Converged Ethernet

●システムの拡張性

●ArmのMLプロセッサ

●CerebrasのWafer Scale Engine

8.3 ディープラーニング/マシンラーニングのベンチマーク

●ILSVRCの性能測定

●MLPerfベンチマーク

●MLPerfの学習ベンチマーク

●MLPerfの推論ベンチマーク

●MLPerfに登録された学習ベンチマークの測定結果(v0.7)

●MLPerfに登録された推論ベンチマークの測定結果(v0.7)

8.4 エクサスパコンとNVIDIA、Intel、AMDの新世代GPU

●Perlmutter

●NVIDIAのAmpere A100 GPU

●Intelは新アーキテクチャのXe GPUを投入

●AMDは新アーキテクチャCDNA GPU開発へ

8.5 今後のLSI、CPUはどうなっていくのか?

●微細化と高性能化

●チップレットと3次元実装

●CPUはどうなっていくのか

●高性能CPUの技術動向

●機械学習を使う分岐予測

●演算性能を引き上げるSIMD命令

8.6 GPUはどうなっていくのか

●GPUの今

●GPUの種類

●消費電力の低減

●アーキテクチャによる省電力設計

●回路技術による省電力化

8.7 まとめ

第1章 [入門]プロセッサとGPU  ※GPU:Graphics Processing Unit

1.1 コンピュータシステムと画像表示基盤

コンピュータ画像で表示するしくみ

・コンピュータはプログラムを実行し、フレームバッファ(メモリ)にデータを書き込む。動画はフレームをパラパラ漫画のようにして表示する。

・表示専用のメモリはVRAM(Video RAM)と呼ばれる。

・フレームバッファをディスプレイに表示するためには、ディスプレイインターフェースが必要である。

・複雑な画像の場合、データ生成、フレームバッファの書き込みには多くの計算とメモリアクセスが必要であり、高速に表示、描画させるためにプロセッサ(CPU)を補助する専用チップが開発された。これらはビデオチップや、グラフィックアクセラレータと呼ばれてきた。

画像を表示するディスプレイ

・昔はブラウン管(CRT:Cathode Ray Tube)という一種の真空管が使われていた。現在は液晶ディスプレイや有機EL(Electro-luminescence)が使われている。

フレームバッファとディスプレイインターフェース

・最近のGPUは表示機能、描画機能に加えてビデオのデコードやエンコード機能を内蔵しており、今はディスプレイインターフェース専用のチップは過去のものとなっている。

1.2 3Dグラフィックスの歴史

文字だけでなく図が加わると、情報の伝達が飛躍的に容易になる。

コンピュータグラフィックスの利用の広がり

・汎用コンピュータや専用の画像処理プロセッサの能力が向上するにつれて、より高度な画像表示ができるようになった。

・コンピュータグラフィックス(CG)は、画像の品質、動画、ゲームなど、それぞれのニーズにあったプロセッサが求められた。

3次元物体のモデル化と表示

・3Dグラフィックスは1つの次元を固定すれば2次元になる。それにより3次元の表示機能を持つGPUが一般的になっている。1999年頃になると3Dグラフィックスに必要な機能の大部分をワンチップに収めることができるようになった。NVIDIAは「GeForce 256」などゲーム向けの3DグラフィックスLSIを発売した。

1.4 CPUとGPUの違い

GPUは並列処理で高い性能を実現する

CPUの演算器は数個~数十個だが、GPUの場合は数十~数千個にものぼる。すべて並列に動作させればCPUより1~2桁高い演算性能を得られる。

・メモリはGDDR DRAM(Graphics Double Data Rate Dynamic Random Access Memory)という従来のDDRメモリより1桁高いバンド幅を持つメモリを使っている。

性能を高めるには並列に実行させるプログラムが必要である。

GPUの出現

1999年、NVIDIAは開発したGeForce 256をGPU(Graphics Processing Unit)と名付けた。そして、3Dの画像を描画するLSIを「GPU」と呼ぶようになった。

画像出展:「GPUを支える技術」

・GeForce 256の出現から10年くらいは、グラフィックス計算には整数演算が使われていた。その後、GPUチップに使えるトランジスタ数が増えると、浮動小数点演算器を搭載するようになり、2008年には32ビットのGPU(GeForce 8000)が一般的になった。これによりGPUは行列(マトリクス)の掛け算など、科学技術計算にも利用され始めた。さらに64ビットのGPUも開発された

GPUは超並列プロセッサ

・デスクトップPC向けCPUとゲーム向けGPUの違い

画像出展:「GPUを支える技術」

特に印象的なのはスレッド数(1つのCPUが同時に実行できるプログラム数の最小単位)、オンチップメモリ、クロック周波数です。この差をみると、CPUではどうしようもない計算世界が存在するのが分かります。

また、最近ではGPUへの依存度を減らすためカスタムシリコン(システム・オン・チップASIC)が注目されています。

CPUはGPUのヘテロジニアスシステムと、抱える問題

・CPUとGPUによる共同作業

-CPU:OS、I/Oネットワーク、データ入力、データ送受信(PCI)

-GPU:データ送受信(PCI)、計算、ディスプレイ

1.5 ユーザーの身近にあるGPUのバリエーション

携帯機器向けのGPU

・CPUとGPU、その他の各種ユニットをワンチップにまとめたスマートフォン用のSoC(System on Chip)が代表的である。熱問題(冷却器がない)や使用時間を考慮し、低消費電力(1W以下)が重要である。

CPUチップに内蔵されたGPU

・ノートPCではCPUチップにGPUが内蔵されているものが多い。消費電力は数Wから最大100W程度。

ディスクリートGPUとグラフィックスワークステーション

・ゲーマーやデザイナーは高性能なグラフィックスを求める。そのため、CPUとは独立したPCI Expressカードなどに搭載されたGPU(ディスクリートGPU)が使われる。これにより消費電力による影響を減らし、高バンド幅のメモリを使うことができる。

1.6 GPUと主な処理方式

共通メモリ空間か、別メモリ空間か

・GPUは高いバンド幅を必要とするため、両者が共通のメモリを利用するのは難しい。そのためメモリ空間は別というのが一般的である。

・メモリ間のデータ転送にはDMAエンジン(Direct Memory Access engine)が必要になる。

CPUとGPUのメモリを共有することは、GPU開発メーカーの重要な開発目標になっている。

SIMD方式か、SIMT方式か

・科学技術計算などの用途のためにNVIDIAが開発したのがSIMT(Single Instruction, Multiple Threading)という処理方式である。要素数に関わらず全ての演算器を無駄なく使えるので、SIMT方式が増えている。