概要
組み込みGPU(Embedded GPU)は、組み込みシステム向けに搭載されたGraphics Processing Unit(グラフィクス処理ユニット)です。元来はディスプレイへの映像出力・3Dグラフィクス処理を目的として設計されましたが、現代では画像認識・機械学習推論・映像エンコード・デコードなど幅広い並列演算に活用されています。
組み込みGPUの最大の特徴は「大規模な並列処理能力」にあります。CPUが少数の高性能コアで逐次処理を得意とするのに対し、GPUは数百〜数千のシェーダーコア(シェーダープロセッサ)を持ち、同じ演算を多数のデータに対して同時実行するSIMD(Single Instruction, Multiple Data)型の処理が得意です。
代表的な組み込みGPUとしては:
- Arm Mali-G系列: NXP・MediaTek・Samsung・Rockchip等のSoCに採用
- Imagination PowerVR: Apple A系(初期)・旧Intel Atom
- Vivante GC系列: NXP i.MX 8系列
- NVIDIA GPU(Ampere/Volta): Jetsonシリーズ
- Qualcomm Adreno: Snapdragon SoC搭載
歴史・背景
GPUの源流は1970〜80年代のビデオチップに遡ります。PC向けでは1999年にNVIDIAがGeForce 256で「GPU」という用語を初めて使用し、T&L(Transform and Lighting)をハードウェア化しました。
組み込み向けGPUは2000年代のスマートフォン・PDAの普及とともに急成長しました。2007年のiPhone(PowerVR MBX搭載)が組み込みGPUの重要性を示した代表例です。2010年代には3Dゲーム対応のスマートフォン(OpenGL ES対応GPU搭載)が普及しました。
GPGPU(GPU General Purpose Computing: GPUを汎用計算に使う技術)は2006年にNVIDIA CUDAが公開されてから本格化。組み込み分野ではOpenCL(2009年)がマルチベンダー標準として採用され、2010年代後半からエッジAI推論でのGPU活用が広がりました。
2017年にNVIDIAがJetson TX2を発売してから、組み込みLinux向けGPGPU市場が急拡大。自動運転・ロボット・医療AI・製造業AIなどの高性能エッジコンピューティングにJetsonシリーズが広く採用されています。
技術仕様
GPUアーキテクチャの基本
シェーダーコア(Shader Processor)
組み込みGPUはSIMD型の浮動小数点演算器(シェーダーコア)を多数並列に持ちます:
Arm Mali-G77(スマートフォン向け):
16コアクラスター × 3 = 最大16コア
各コアに浮動小数点演算器16本
→ 最大16 × 16 = 256並列演算
NVIDIA Jetson AGX Orin GPU:
2048 CUDA Cores (Ampereアーキテクチャ)
16 Tensor Cores
最大275 TOPS (INT8)
タイルベースレンダリング(TBR)
スマートフォン向けGPU(Mali・PowerVR・Adreno)の多くはTBR(Tile-Based Rendering)を採用し、フレームバッファを小さなタイル(16×16〜32×32ピクセル)に分割してオンチップSRAM上で処理します:
フレームバッファ(例: 1920×1080)
↓
タイル分割(32×32ピクセル = 1980タイル)
↓
各タイルをオンチップSRAM上でレンダリング(外部メモリアクセス最小化)
↓
完成したタイルを外部フレームバッファに書き出し
これにより外部メモリ(LPDDR)へのアクセスを削減し、電力消費を抑えます。デスクトップGPU(IMR: Immediate Mode Rendering)とは根本的に異なるアプローチです。
主要な組み込みGPU比較
| GPU | 搭載チップ例 | API対応 | 用途 |
|---|---|---|---|
| Arm Mali-G52 | MediaTek Helio系 | OpenGL ES 3.2 / Vulkan / OpenCL 2.0 | ミドルレンジスマホ |
| Arm Mali-G76 | Kirin 980・Exynos 9820 | OpenGL ES 3.2 / Vulkan / OpenCL 2.0 | ハイエンドスマホ |
| Vivante GC7000L | NXP i.MX 8 | OpenGL ES 3.1 / Vulkan / OpenCL 1.2 | 産業組み込みLinux |
| Imagination AXM-8-256 | - | OpenGL ES / Vulkan | 組み込み・車載 |
| NVIDIA Ampere | Jetson Orin系 | CUDA 11 / OpenGL / Vulkan | ハイエンドエッジAI |
| Qualcomm Adreno 690 | Snapdragon 888 | OpenGL ES 3.2 / Vulkan / OpenCL 2.0 | モバイル |
グラフィクスAPI
組み込み向けの主要グラフィクスAPI:
| API | 概要 | 組み込み採用 |
|---|---|---|
| OpenGL ES 3.x | 組み込み向けOpenGL | HMI・ゲーム |
| Vulkan | 低レベル・マルチプラットフォーム | 高性能アプリ |
| OpenCL 1.2/2.0 | 汎用GPU計算 | 画像処理・AI |
| CUDA | NVIDIA専用 | Jetsonシリーズ |
| Metal | Apple専用 | iOS・macOS |
| DirectX 12 | Microsoft専用 | Windows Arm SBC |
動作原理
GPGPUによる並列演算
GPUが多数のシェーダーコアで同じ計算を並列実行する仕組み:
入力データ: 1000×1000のRGB画像 (100万ピクセル)
CPU処理(逐次):
for pixel in pixels: # 100万回ループ
output[pixel] = process(pixel)
→ 1コア × 100万処理
GPU処理(並列):
各シェーダーコアが異なるピクセルグループを同時処理
→ 256コア × ~4000並列 = 100万処理を同時
→ 約256倍のスループット向上(理論値)
OpenCLカーネル例(画像処理)
// OpenCLカーネル(GPU上で実行されるコード)
__kernel void rgb_to_gray(
__global const uchar4 *input, // RGB入力
__global uchar *output, // グレースケール出力
int width, int height)
{
int x = get_global_id(0); // ピクセルX座標
int y = get_global_id(1); // ピクセルY座標
if (x >= width || y >= height) return;
int idx = y * width + x;
uchar4 pixel = input[idx];
// BT.601 輝度変換
output[idx] = (uchar)(0.299f * pixel.x + 0.587f * pixel.y + 0.114f * pixel.z);
}
ホスト側(CPU)からの起動:
// OpenCLカーネルを1000×1000グリッドで並列実行
size_t global_work_size[2] = {width, height}; // 100万スレッド起動
clEnqueueNDRangeKernel(queue, kernel, 2, NULL,
global_work_size, NULL, 0, NULL, NULL);
TensorRT / CUDA(Jetsonでのディープラーニング)
NVIDIA Jetson(NVIDIA Jetson)では、TensorRT経由でGPU上に推論を最適化・実行します:
# TensorRT Python APIによる推論(Jetson上)
import tensorrt as trt
import pycuda.driver as cuda
# ONNX → TensorRTエンジン変換
TRT_LOGGER = trt.Logger(trt.Logger.WARNING)
with trt.Builder(TRT_LOGGER) as builder:
with builder.create_network(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH) as net:
parser = trt.OnnxParser(net, TRT_LOGGER)
parser.parse_from_file("model.onnx")
config = builder.create_builder_config()
config.max_workspace_size = 1 << 30 # 1GB
config.set_flag(trt.BuilderFlag.FP16) # FP16精度使用
engine = builder.build_engine(net, config)
# 推論実行(Jetson GPU)
context = engine.create_execution_context()
cuda.memcpy_htod(d_input, input_data)
context.execute_v2([int(d_input), int(d_output)])
cuda.memcpy_dtoh(output_data, d_output)
用途・ユースケース
HMI(ヒューマン・マシン・インタフェース)
産業機器のタッチパネルHMI・カーナビゲーション・デジタルコックピットでは、OpenGL ESを使った滑らかなUI描画・アニメーション・3Dビジュアライゼーションに組み込みGPUが不可欠です。NXP i.MX 8(Vivante GC7000L)やRenesas RZ/G2(Arm Mali)が産業HMI向けで広く採用されています。
// OpenGL ES 3.0でのUI描画(Qt/QMLの内部で使用)
// Raspberry Pi / i.MX 8等の組み込みLinux + GPU
glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(shaderProgram);
glUniformMatrix4fv(modelMatrixLoc, 1, GL_FALSE, modelMatrix);
glDrawElements(GL_TRIANGLES, indexCount, GL_UNSIGNED_INT, 0);
eglSwapBuffers(display, surface);
映像エンコード・デコード
カメラ映像のH.264/H.265エンコード・デコードは組み込みGPUのハードウェアVPU(Video Processing Unit)で処理します:
- Raspberry Pi 4: VideoCore VI GPU(H.264エンコード・デコード対応)
- Jetson Orin: NVENC(H.264/H.265/AV1エンコード)・NVDEC(デコード)
GPUを使うことでCPU負荷を大幅に削減しながら、4K60fps相当の映像処理が可能です。
エッジAI推論
エッジAIでの物体検出・セグメンテーション・姿勢推定では、NPUがない場合にGPUが推論を担います:
- TFLite GPU Delegate: Arm Mali GPUでの推論加速(最大10倍高速化)
- OpenCL Inference(Arm Compute Library経由)
- CUDA + TensorRT(NVIDIA Jetson)
コンピュータビジョン前処理
# OpenCV + GPU(CUDA)による高速画像前処理(Jetson)
import cv2
# CUDA対応のOpenCVでGPU処理
gpu_frame = cv2.cuda_GpuMat()
gpu_frame.upload(cpu_frame)
# GPU上でリサイズ・色変換
gpu_resized = cv2.cuda.resize(gpu_frame, (640, 640))
gpu_rgb = cv2.cuda.cvtColor(gpu_resized, cv2.COLOR_BGR2RGB)
# 結果をCPUに戻す(必要な場合のみ)
cpu_result = gpu_rgb.download()
実装・開発のポイント
Wayland/DRM(組み込みLinux + GPU)
デスクトップ環境なしの組み込みLinuxでのGPU活用:
# DRM/KMSでのフレームバッファ制御(X11・Waylandなし)
apt-get install libdrm-dev
# Qt with EGLFSバックエンド(Windowシステムなし)
./configure -platform linux-aarch64-gnu-g++ \
-device-option CROSS_COMPILE=aarch64-linux-gnu- \
-eglfs
メモリ帯域の最適化
組み込みGPUのボトルネックは多くの場合、外部メモリ(LPDDR)の帯域です:
// テクスチャ圧縮(ASTC)でメモリ帯域を削減
glCompressedTexImage2D(GL_TEXTURE_2D, 0,
GL_COMPRESSED_RGBA_ASTC_4x4_KHR, // 4×4ブロック圧縮(8bpp→2bpp)
width, height, 0,
dataSize, compressedData);
// ゼロコピー(CPU-GPU共有メモリ)
// Raspberry Piや多くのSoCはCPU・GPU共有メモリアーキテクチャ
// dma-buf / GBM(Generic Buffer Management)を使ったゼロコピー
他技術との比較
組み込みGPU vs NPU
| 項目 | 組み込みGPU | NPU |
|---|---|---|
| 設計目的 | グラフィクス→汎用 | AI推論専用 |
| 推論OPS/W | 中(1〜10 TOPS/W) | 高(10〜100 TOPS/W) |
| 量子化効率 | FP16主体(INT8は非最適) | INT8/INT4特化 |
| 汎用性 | 高(OpenCL・Vulkan・描画) | 低(推論特化) |
| ソフトウェアAPI | OpenCL・CUDA(標準化済み) | ベンダー固有(移植性低) |
NPUは推論に特化した電力効率で優位ですが、グラフィクス描画・映像処理にNPUは使えません。最新のSoC(Qualcomm Snapdragon・Apple M系等)では両者が統合され、用途に応じて自動的にNPU・GPU・CPUが連携する設計になっています。
組み込みGPU vs デスクトップGPU
消費電力が桁違いに異なります。RTX 4090は450Wですが、Arm Mali-G57は数百mW以下です。処理能力もその分低いですが、組み込み用途(HMI・カメラ・ライトAI推論)には十分な性能があります。NVIDIA Jetsonは組み込みGPUの中では突出した性能(最大275 TOPS)を持ち、自動運転・ロボティクスの基板として使われています。