#0161（2025/06/02）Shading Units

# Shading Unitsとは

## はじめに

グラフィックスカードの仕様表には「CUDA Cores 8 704」「Stream Processors 6 144」のように膨大な数が並びます。これらは一般に *Shading Units*（シェーディングユニット）と総称され、GPU の並列計算能力を示す象徴的な数字です。しかし「多ければ多いほど速い」という理解だけでは、実際の性能を正しく見積もれません。本稿では、抽象的なイメージからマイクロアーキテクチャレベルの厳密な構造までを解きほぐし、エンジニアが GPU 選定やプログラム最適化で迷わないための指針を提示します。


---

## 1. 抽象的に捉える Shading Units

CPU でいう「コア」がタスクの並列実行単位であるのに対し、GPU の Shading Unit は**スレッドの最小演算レーン**です。レンダリングでは頂点シェーダやピクセルシェーダ、GPGPU ではスカラー演算や行列演算を担当します。プログラマ視点では *threadIdx* や *laneId* が対応し、SIMT（Single Instruction Multiple Threads）モデルで一斉に同じ命令を実行します。

* **イメージ図**: 32 本の麦わら（Shading Units）を束ねた箒が一本の Warp を掃くように、同一命令列を高速に処理する。
* **並列度の指標**: 単一 GPU に数千〜数万のユニットが存在し、膨大なピクセルやニューラルネットワーク演算を「面」で処理できる。

この抽象像だけでも、GPU が映像や深層学習に強い理由を直感的に理解できます。

---

## 2. 厳密な定義と階層構造

### 2.1 ALU としての Shading Unit

ハードウェア的には **FP32/INT32 の演算器（ALU）＋レジスタ**が 1 ユニットです。命令デコーダや L1 キャッシュは SM（Streaming Multiprocessor, NVIDIA）／CU（Compute Unit, AMD）単位で共有され、Shading Unit はあくまでも *演算ステージ*のみを担います。

### 2.2 SM / WGP / Die の階層

```
Shading Unit ×128  →  SM/CU  →  TPC・WGP  →  GPU Die
```

* **SM（Ada 世代）**: FP32 ALU 128基、Tensor Core 4基、Warp Scheduler 2基、L0/L1 共有メモリを内包。
* **WGP（RDNA4 世代）**: CU 2基を束ね、Wavefront 64 スレッドを同時発行。

このように、Shading Unit 数は **並列深度の最下層**を表すだけで、上位階層のキャッシュ容量やスケジューラ本数が同世代内の IPC を左右します。

---

## 3. 数字が示すものと示さないもの

### 3.1 理論性能の算出

理論 FP32 性能 ≒ *Shading Units × 2 × クロック* で計算できます。RTX 4090 の場合、16 384 × 2 × 2.52 GHz ≈ 82 TFLOPS です。ここで **2** は FMA (Fused Multiply Add) が 1 サイクルで積和 2 演算を行うためです。

### 3.2 実効性能を決める要因

* **メモリ帯域**: データを供給できなければ ALU は空転する。
* **キャッシュ階層**: L2/L1 容量とレイテンシが畳み込み演算のヒット率を左右。
* **電力制限**: 動的電圧周波数制御によりブーストクロックが頭打ちになる。
* **スレッド占有率（Occupancy）**: レジスタ消費が多いカーネルは並列化できる Warp 数が減り、NOP スロットが発生。

つまり Shading Unit の多寡だけでは評価できず、「供給」「制御」「電力」の 3 つのボトルネックを同時に解消して初めて理論値に近づきます。

> クロック: GPU が 1 秒間に繰り返す動作サイクル数。単位は GHz。理論 FLOPS は「Shading Units × 2（FMA）× クロック」で概算できる。

---

## 4. Tensor Core・RT Core との関係

近年の GPU は **専用演算器**を搭載し、Shading Unit とは異なる命令セットで動作します。

* **Tensor Core**: 行列FMAに特化し FP16/BF16/INT8/FP8 を高速実行。TensorRT で量子化したモデルを流すと 4–16 倍の実効性能。
* **RT Core**: BVH 交差判定や三角形交点計算を固定機能化し、レイトレーシング時に Shading Unit の負荷を大幅に削減。

これらは "補助" ではなく **主要ワークロードをオフロードする強力なアクセラレータ**です。Shading Unit 数が同じでも、Tensor Core 世代が新しい方が AI 推論で圧倒的に速い、という現象はここに起因します。

> TensorRT: NVIDIA が提供する推論最適化フレームワーク。モデルを INT8／FP16 へ変換し、Tensor Core を最大限活用してレイテンシと消費電力を削減する。

---

## 5. エンジニアが取るべき視点

1. **並列度の指標**として Shading Unit 数を把握し、カーネルのスレッド総数やブロック構成を設計する。
2. **メモリ帯域・キャッシュ最適化**で ALU の稼働率を高める。Shared Memory と L2 への局所性を重視。
3. **TensorRT などのランタイム**を用いて専用演算器を最大活用し、電力効率を引き上げる。
4. ベンチマークでは **理論値 vs 実測値** のギャップを観測し、Occupancy Calculator や Nsight Compute でボトルネックを可視化する。

こうしたアプローチで初めて、Shading Unit の“大きな数字”を現実的なアプリケーション性能へと転化できます。

---

## まとめ

Shading Unit は GPU の並列演算レーンを数値化したものであり、**抽象的には「並列度の象徴」**、\*\*厳密には「FP32/INT32 ALU の個数」\*\*です。しかし性能は単純比例せず、クロック、メモリ帯域、キャッシュ、電力制御、そして Tensor Core などの専用演算器の世代と統合的に考える必要があります。GPU を選定・最適化する際は、「シェーディングユニット数×クロック＝理論値」という第一印象を入り口に、ボトルネック解析と専用 IP の活用で実効性能を詰めていきましょう。

> SIMT: Single Instruction, Multiple Threads。GPU が 32 あるいは 64 スレッドの束に同一命令を同時発行する実行モデル。
> Tensor Core: 行列演算専用のハードウェアブロック。FP16/BF16/INT8/FP8 で高効率な FMA を実現する。
> Occupancy: 1 SM/CU 内で同時にスケジュール可能な Warp/Wavefront 割合。高いほど ALU 利用率が上がる。