# 同時マルチスレッディング(SMT)
1 つの物理プロセッサコアが**複数のスレッドを同時実行**し、論理的に複数の独立プロセッサに見える設計手法。スレッドレベル並列性(TLP)を命令レベル並列性(ILP)に変換することで、機能ユニットの空きサイクルを埋める。
## 基本原理
スーパースカラー OOO プロセッサは、ILP の限界(依存・分岐誤予測・キャッシュミス)により機能ユニットが頻繁に遊ぶ。その空きサイクルを**別スレッドの命令**で充填する。
ハードウェアコストが低い:
- 複製が必要なもの: プログラムカウンタ、アーキテクチャレジスタ、TLB エントリなど「実行状態」(全体の約 10%)
- 共有できるもの: デコーダ・ディスパッチロジック・機能ユニット・キャッシュ(全体の大半)
結果として 10% 程度のロジック追加で複数スレッドを同時実行できる。
## Intel ハイパースレッディング
- Pentium 4 で初採用(2 スレッド SMT)。Intel の商品名。
- 性能向上: アプリ依存で **-10% 〜 +30%** と幅が大きい。
- Skylake 世代(Core i第6〜第10世代)まで 2 スレッド SMT。一部 Core Ultra で廃止後、再導入予定。
## 主なプロセッサの SMT 設定
| プロセッサ | コア数 | スレッド/コア | 総スレッド数 |
|---|---|---|---|
| Core i7(12コア) | 12 | 2 | 24 |
| AMD Zen 1〜5 | 〜32 | 2 | 〜64 |
| UltraSPARC T1 | 8 | 4 | 32 |
| UltraSPARC T2/T3 | 8〜16 | 8 | 64〜128 |
| IBM POWER5 | 2 | 2 | 4 |
| IBM POWER8 | 12 | 8 | 96 |
## SMT の性能特性
### 有利なケース
- **メモリレイテンシ律速**: データベース・3D レンダリング・汎用コードなど、キャッシュミス中の待機時間を別スレッドで穴埋め。
### 不利なケース
- **同一リソース競合**: 2 スレッドが同一機能ユニットを奪い合うと互いを足を引っ張る。
- **キャッシュ競合**: 共有キャッシュを分け合うため、ワーキングセットが大きいアプリでは各スレッドのキャッシュヒット率が低下。
- **帯域律速**: イメージ処理など帯域が律速のアプリは SMT で改善しにくい。
> [!key-insight] SMT の本質的な難しさ
> 「最大 2 プロセッサ並みに速い」場合と「2 プロセッサ合計より遅い」場合の両方があり、予測が難しい。マーケティング上も扱いにくいトレードオフ。
## マルチコアとの比較
| 観点 | SMT | マルチコア |
|---|---|---|
| ハードウェアコスト | 低(+10%ロジック) | 高(コア丸ごと追加) |
| スレッド当たり面積効率 | 高 | 低 |
| スレッド間リソース競合 | 高(全共有) | 低(各コアが専用) |
| 並列化効果の天井 | ILP に依存 | 真の並列実行 |
**発行幅のスケーリング問題**: 単一コアを広幅にするほどディスパッチロジックが n² でスケールする。よって「1 コア 20-issue SMT」より「2 コア 10-issue」のほうが面積効率がよく、現実的。これがマルチコアが主流になった理由の一つ。
## 非対称マルチコア(big.LITTLE / hybrid)
大コア(Brainiac・広幅 OOO)と小コア(シンプル・低消費電力)を混在させる設計:
- ARM big.LITTLE: スマホ・タブレットの主流。軽負荷時は大コアをオフ。
- Intel Alder Lake / Raptor Lake: 高性能 P コア + 効率 E コア(Gracemont)。
- **Cell プロセッサ(PS3)**: 大コア + 特殊処理コアの先駆け。ISA 非互換の設計ミスで普及せず。
## SoC(System-on-Chip)
CPU + GPU + 動画エンコーダ + I/O を同一チップに統合。コスト・省スペース・低消費電力を重視するスマホ・タブレット・軽量ノート向け。NVIDIA Tegra が初期の例。Apple M シリーズは統合メモリアーキテクチャを持つ高性能 SoC。
## Linuxカーネルから見たSMT(『詳解 システム・パフォーマンス 第2版』6章)
Linuxカーネルは各ハードウェアスレッドを独立した論理CPUとしてアドレッシングする。4コア・8ハードウェアスレッドのプロセッサはOSからCPUが8個あるように見えるが、OSはどのCPUが同じコアに乗っているか(トポロジ)の知識を持ち、スケジューリングの決定を最適化する。カーネルは、コア全体に負荷を分散して各コアでビジー状態になるハードウェアスレッドが1つだけになるようにし、ハードウェアスレッド競合を避ける設計が一般的である。また、ストールサイクルが多い(IPCが低い)ワークロードは、ハードウェアスレッド間の競合が相対的に減るため、命令数が多い(IPCが高い)ワークロードよりSMT下でのパフォーマンスが高くなりやすい。実装例としてはコアごとに2スレッドのIntel Hyper-Threading Technology、コアごとに8スレッドのPOWER8がある。(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 6 CPU]] §6.2.1, §6.3.6)
## 横断的知見
- **「IPCが低いワークロードほどSMTで有利」という指摘は、既存知見(帯域律速では改善しにくい)と整合しつつ、IPCという定量指標で言い換えている**: 本ページの既存知見(§SMTの性能特性)は「メモリレイテンシ律速」で有利、「帯域律速」で不利と定性的に述べるが、『詳解 システム・パフォーマンス 第2版』6章はこれを[[Instructions Per Cycle]](IPC)という定量指標で捉え直し、IPCが低い(ストールが多い)ワークロードほどハードウェアスレッド間の競合が相対的に減りSMTの恩恵を受けやすいと説明する。定性的な「メモリレイテンシ律速で有利」という主張と、定量的な「低IPCワークロードで有利」という主張は同じ現象を異なる粒度で述べたものであり、IPC計測(`perf stat`)でSMTの有効性を事前に予測できる可能性を示唆する。(Source: [[Modern-Microprocessors-A-90-Minute-Guide|Modern Microprocessors: A 90-Minute Guide]], [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 6 CPU]] §6.3.6)
## 未解決の問い
- IPCとSMTの有効性の相関(低IPC=SMT向き)は、実測でどの程度の強さの相関を持つか。ワークロード事前分類にどこまで実用的か。
- Linuxカーネルの「1コアにつきビジーなハードウェアスレッドを1つに保つ」ロードバランシング方針は、SMTを積極活用したい高スループット指向のワークロードとどう衝突するか、あるいはチューニングで回避できるか。
## 関連
- ILP の限界と TLP の役割 → [[Brainiac設計]]
- キャッシュ競合 → [[メモリ階層とキャッシュ]]
- IPCによるSMT有効性の定量化 → [[Instructions Per Cycle]]
- ソース: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 6 CPU]](§6.2.1 論理CPUとトポロジ、§6.3.6 SMT)
## 出典
- [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 6 CPU]](§6.2.1, §6.3.6)