コンピュータのしくみ初心者向け基本コース

LESSON 05 ・ PARALLEL PROCESSING

GPUってなに?

は、同じ形の計算を大量のデータへ並行して適用することが得意な処理装置です。

THE GPU'S ROLE

GPUは出力装置ではなく、処理装置

GPUは画像を計算できますが、最終的に光を出すディスプレイとは別の装置です。このページでは計算する側だけを扱います。

RECEIVE

仕事を受け取る

CPU側で作られた命令列、実行するプログラム、画像や配列などの入力データ、結果の保存先を受け取ります。

PROCESS

並列に計算する

大きな仕事を多数の小さな処理へ分け、多数の演算器で同じ命令を異なるデータへ適用します。

STORE

結果を書き戻す

計算した画素、行列、物理量などをビデオメモリや主記憶へ書き、CPUや次のGPU処理が使えるようにします。

表示装置の説明は「出力装置のいろいろ」へ

フレームバッファから映像信号を送り、CRT・LCD・OLEDが光を作る仕組みは、出力装置教材の「表示デバイス」で扱います。

A JOB'S JOURNEY

CPUが依頼し、GPUが結果を返すまで

GPUは単独でアプリ全体を進めるのではなく、CPU、主記憶、ドライバ、ビデオメモリと協調します。

  1. CPUが仕事を組み立てる:使うGPUプログラム、入力データ、出力先、実行個数を決める。
  2. コマンドキューへ登録する:転送、計算、描画などの命令を順序付きでまとめる。
  3. データを準備する:主記憶からVRAMへ移す、または共有メモリ領域をGPUが参照できるようにする。
  4. 仕事を小さく分配する:多数のスレッドをグループにし、実行できる計算チームへ割り当てる。
  5. 並列に実行する:各担当が同じ命令を別々のデータへ適用し、待ち時間には別のグループを進める。
  6. 結果と完了を返す:VRAMや主記憶へ書き戻し、後続処理やCPUが安全に使える時点を知らせる。

非同期処理:CPUはGPUへ仕事を登録した後、完了を待つ間に別の仕事を進められます。結果が必要な場所では同期して、書き込み完了を確認します。

CPU AND GPU

優劣ではなく、得意な仕事が違う

観点CPUGPU
基本方針少数の高機能なコアで、複雑な流れを速く進める多数の処理単位で、似た計算を大量に並行する
得意OS、アプリの進行、分岐の多い処理、短い仕事画素、頂点、行列、粒子など同じ形の大量計算
制御分岐予測や大きなキャッシュで1本の処理を素早く進めるスレッド群をまとめ、同じ命令を効率よく実行する
待ち時間キャッシュでデータ待ちを減らす待っているグループから、実行可能な別グループへ切り替える
関係仕事を準備してGPUへ依頼する依頼された部分を処理し、結果を返す

コア数だけを直接比べない

CPUコアとGPUの処理単位は、機能、命令の実行方法、数え方が異なります。「GPUに何個あるからCPUの何倍」という単純な比較はできません。実際の速さは処理内容とデータ転送にも左右されます。

INSIDE THE GPU

配る、計算する、近くに置く、大きく保存する

名称とまとまり方は製品ごとに異なりますが、初心者向けには四つの役割で捉えられます。

スケジューラ

実行できるスレッド群を選び、計算チームへ割り当てます。データ待ちのグループがあれば、別のグループを進めます。

演算器

加減算、積和、比較、論理演算などを行います。多数の演算器が同じ種類の命令を別々の値へ適用します。

レジスタ・共有メモリ

各スレッドの途中結果や、近くのスレッド同士で再利用する値を、演算器の近くへ一時保持します。

キャッシュ・VRAM

は大きな入力と結果を保持します。キャッシュはよく使う範囲を近くへ複製して待ち時間を減らします。

スレッド
一つのデータ要素を担当する、GPUプログラムの実行単位です。
スレッドグループ
協調して実行するスレッドのまとまりです。近くの高速なメモリを共有し、必要に応じて待ち合わせます。
Warp / Wave
GPUが同じ命令をまとめて進める実行上のスレッド群です。呼び名と個数は設計により異なります。
Single Instruction, Multiple Threadsの略で、同じ命令を多数のスレッドへ適用する考え方です。

MINI PARALLEL LAB

8人の担当へ、同じ加算命令を配る

8つのレーンが、配列Aと配列Bの同じ位置を担当します。読み込み、加算、書き戻しを段階表示します。

A + B → C

各レーンは担当番号だけが異なり、全員が同じ ADD 命令を実行します。

8レーン並列加算

待機中:8レーンへ同じ命令を配ります。

結果 C:[?, ?, ?, ?, ?, ?, ?, ?]

本物のGPUは、はるかに多くのスレッドを階層的にまとめて実行します。この模型は「同じ命令、異なるデータ」という中心部分だけを示します。

GRAPHICS BOUNDARY

GPUは画像を作り、出力系が光へ変える

画像表示を一続きに見ながらも、計算と出力を分けることが大切です。

GPUで描画頂点、画素、色、陰影などを並列に計算
画像を保持完成した画素データをフレームバッファへ保存
表示用に送信表示コントローラが決められた時刻で映像信号を作る
光へ変換CRT、LCD、OLEDなどの表示デバイスが像を作る

このページで扱う範囲

GPUへの仕事の登録、頂点・画素・一般計算の並列実行、GPU内部のメモリ、結果の書き戻しです。

WORKLOADS

同じ形の大量計算がある場所で使う

画像・3D描画

多数の頂点や画素へ座標変換、陰影、色、テクスチャ処理を適用します。

映像処理

動画の圧縮・展開、拡大縮小、色変換、ノイズ除去などを多数の画素へ適用します。

AI

ニューラルネットワークで繰り返す行列の積和演算を、多数の計算器で処理します。

科学技術計算

流体、粒子、天気、分子など、多数の要素へ同じ式を繰り返す計算を行います。

画像生成・加工

フィルタ、変換、合成、機械学習モデルの推論を大量の画素や特徴量へ適用します。

一般並列計算

結果同士の依存が少なく、小さな同種の仕事へ分けられる処理をGPUプログラムで実行します。

LIMITS

GPUへ任せれば、いつも速いわけではない

並列度同時に進められる独立した仕事が十分にあるか。
転送量CPUとGPUの間で運ぶ時間が、計算時間を上回らないか。
分岐同じグループ内で別々の道へ進むと、効率が下がりやすい。
メモリアクセス近い場所をまとめて読み、データ待ちを減らせるか。

小さい仕事には準備費用が大きい

プログラムの準備、命令登録、データ転送、完了待ちには時間がかかります。数回の足し算ならCPUで終える方が速い場合があります。

ピーク性能は実際の性能ではない

演算器の数や理論上の演算回数だけでなく、メモリ帯域、キャッシュ、実行グループの使われ方、電力・温度制限が実効性能を決めます。

よくある誤解

GPUは「画面そのもの」ではなく、画像や数値を計算する処理装置です。画像表示に使わない計算もでき、反対に表示装置はGPUがなくても別の表示制御回路から信号を受け取れます。

CHECK

確かめてみよう

GPUが得意な「同じ命令、異なるデータ」とは何ですか?

多数の画素や配列要素へ、同じ加算、変換、比較などを適用することです。担当するデータだけを変え、多数のスレッドが並行して進めます。

CPUとGPUはどのように役割分担しますか?

CPUがアプリ全体を進めてGPU向きの仕事を登録し、GPUが大量並列部分を実行して結果をメモリへ書き戻します。

GPUのスレッド群で分岐が多いと、効率が下がるのはなぜですか?

同じ命令をまとめて進めるスレッドが別々の道へ分かれると、一方を実行している間に他方が待つ場合があるからです。

GPUが画像を計算した後、光が出るまでに何が必要ですか?

フレームバッファ、表示コントローラ、映像信号、表示駆動回路、CRT・LCD・OLEDなどの表示デバイスが必要です。

次のページへ

GPUが作った画素データを、表示回路がどのように送り、表示デバイスがどのように光へ変えるかを学びます。
出力装置のいろいろへ →