---
title: "GPGPUとは？（GPU汎用計算）G検定対策"
description: "GPGPUについて、GPUの多数のコアを画像処理以外の並列計算へ利用する仕組みと、深層学習の行列演算を高速化できる理由を整理します。CPU・GPU・TPUの違い、CUDAやcuDNNとの関係も比較し、G検定で役割を見分けます。"
canonical_url: "https://stemtazoo.github.io/gk/gpgpu/"
section: "gk"
---

## まず結論

* **GPGPU（General-Purpose computing on Graphics Processing Units）**とは、本来は画像処理を得意とするGPUを、行列演算や科学技術計算などの汎用計算に利用する考え方です。
* G検定では、**GPUはハードウェア、GPGPUはGPUの汎用的な使い方**と切り分けます。

## 直感的な説明

CPUは、少人数の熟練者が複雑な仕事を順番に処理するイメージです。
一方、GPUは、多数の作業者が同じ種類の計算を一斉に処理するイメージです。

深層学習では、

* 行列の掛け算
* 同じ形の積和演算
* 多数のデータに対する同種の計算

が繰り返されます。

このような処理は、多数の計算を並列に実行できるGPUと相性がよいため、学習や推論を高速化できます。

## 定義・仕組み

GPUは、画面描画のために大量の画素を並列処理する目的で発展したプロセッサです。
GPGPUでは、この並列計算能力を画像処理以外にも利用します。

### なぜ深層学習で速いのか

ニューラルネットワークの学習では、順伝播と逆伝播の両方で大量の行列演算を行います。

* 順伝播：入力と重みの行列積から出力を計算
* 逆伝播：勾配を行列演算で計算
* ミニバッチ：複数データをまとめて処理

これらを多数のコアで並列実行できるため、GPUは深層学習に向いています。

### 関連する技術

* **CUDA**：NVIDIA製GPUを汎用計算に使うための開発環境・プラットフォーム
* **cuDNN**：深層学習向け演算を高速化するNVIDIAのライブラリ
* **OpenCL**：異なる種類の計算装置で並列計算を行うための標準的な枠組み
* **PyTorch・TensorFlow**：これらの技術を利用し、GPU上でニューラルネットワークを実行できるフレームワーク

## いつ使う？（得意・不得意）

### 得意な場面

* 深層学習の学習・推論
* 大規模な行列演算
* 画像・動画処理
* 科学技術計算
* 同じ処理を大量のデータへ適用する計算

### 不得意・注意点

* 条件分岐が多く、処理内容がばらばらな計算
* 逐次的に一つずつ進める必要がある処理
* 小さすぎる計算
* CPUとGPUの間のデータ転送が多い処理
* GPUメモリに収まらない大規模データ

GPUは常にCPUより速いわけではありません。
並列化しにくい処理や、データ転送の負担が大きい処理では、CPUのほうが適する場合があります。

## G検定ひっかけポイント

### CPU・GPU・GPGPU

* **CPU**：複雑な制御や逐次処理が得意な汎用プロセッサ
* **GPU**：多数の単純な計算を並列実行するハードウェア
* **GPGPU**：GPUを画像処理以外の汎用計算に使う考え方

「GPGPUはGPUの一種である」は誤りです。

### GPUとTPU

* **GPU**：画像処理から発展した並列計算向けプロセッサ
* **TPU**：機械学習、特にテンソル演算を高速化するためにGoogleが開発した専用プロセッサ

どちらも機械学習を高速化できますが、成り立ちと目的が異なります。

### CUDA・cuDNNとの違い

* GPU：ハードウェア
* GPGPU：GPUの利用方法
* CUDA：GPU汎用計算のための開発基盤
* cuDNN：深層学習向けの高速演算ライブラリ

### 試験での判断基準

* GPUを画像処理以外へ利用 → GPGPU
* 多数の同種計算を同時実行 → GPUが得意
* 複雑な分岐や逐次処理 → CPUが得意
* Googleの機械学習専用プロセッサ → TPU

## まとめ（試験直前用）

* GPGPUはGPUを汎用計算に利用する考え方
* GPUは多数の同種計算を並列実行するのが得意
* 深層学習では行列演算が多いためGPUと相性がよい
* GPUはハードウェア、CUDAは開発基盤、cuDNNはライブラリ
* 「画像処理以外にGPUを使う」ならGPGPU
