同時マルチスレッド(Simultaneous Multithreading、略称:SMT)は、ハードウェア・マルチスレッドを用いて、スーパースカラCPUの全体的な効率を向上させる技術です。SMTは、現代のコンピュータアーキテクチャが提供するリソースをより有効に利用するため、複数の独立したスレッドを同時に実行できるようにします。

マルチスレッドという概念は古くからありますが、最新のスーパースカラープロセッサでは「スレッドレベル」での並列実行によって実装される点が特徴です。プロセッサ設計において、オンチップでの並列性を高めつつリソースを節約する代表的な方法がいくつかあります。

  1. スーパースカラ技術:同時に複数の命令を実行することで命令レベルの並列性(ILP)を高めます。プロセッサ内部に複数の実行ユニットがあり、1サイクルに複数命令をディスパッチ(同時ディスパッチ)できる点が特徴です。
  2. チップレベルマルチスレッド(CMT)技術:1つのプロセッサチップ内で複数スレッドからの命令を同時に扱うため、スレッドレベル並列化(TLP)を利用する方法です。

チップ内でのマルチスレッド方式(代表例)

同じチップ内で複数スレッドをサポートするアプローチにはいくつかの種類があります。以下は主要な方式とその特徴です。

  1. Interleaved multithreading (IMT)(インターリーブ型、Temporal multithreading): 異なるスレッドからの命令を時間的に交互に発行します。命令を発行する頻度により「細粒度(fine-grain)」と「粗粒度(coarse-grain)」に分かれます。粗粒度は現在のスレッドが長い待ち状態(例:ページフォルトやキャッシュミス)になった場合にのみ別スレッドへ切り替えるため、スレッド間のコンテキスト切替コストが低く一般的です。単一パイプラインで1サイクルに1命令しか発行できないコアでは、IMTが実装可能な唯一の方式になります。
  2. 同時マルチスレッド(SMT): 1サイクルで複数スレッドから複数の命令を同時に発行します。これを実現するにはスーパースカラ構成(複数の発行ポートや実行ユニット)が必要です。SMTは、リソース(実行ユニット、キャッシュ帯域、翻訳バッファなど)を複数スレッドで共有し、各スレッドの実行が局所的にアイドルになる時間を埋めることでスループットを向上させます。
  3. チップレベルのマルチプロセッシング(CMP/マルチコアプロセッサ): 2つ以上の独立したスーパースカラプロセッサコアを1チップに統合し、それぞれが独立してスレッドを実行します。各コアは独自のリソース(パイプライン、レジスタファイルなど)を持つため、スレッド間の干渉が少なく、スケーラビリティに優れます。
  4. IMT/SMT/CMPの組み合わせ: 実際のプロセッサでは上記方式を組み合わせることが多く、コアごとにSMTを持ちつつ、複数コアを集積するCMP構成などが一般的です。

SMTと他の方式の違い(要点)

  • 観点:1サイクルで発行できる命令数と、その命令が何スレッド由来かを確認すれば方式を区別できます。SMTは1サイクルに複数スレッドの命令を混在させて発行する点が特徴です。
  • 資源共有:SMTは実行ユニット、キャッシュ、分岐予測器など多くのハードウェア資源をスレッド間で共有します。CMPは各コアが独立した資源を持つため、共有による干渉は比較的少ないです。
  • スケーラビリティ:CMPはコア数を増やすことでほぼ直線的にスレッド数を増やせますが、SMTは1コア内での共有資源がボトルネックとなりやすく、追加の論理スレッドあたりの性能向上は限定的です。

利点と欠点

利点

  • CPUリソースの利用率向上:単一コアでのパイプラインの空き時間を埋め、スループットを上げられる。
  • コスト効率:物理コアを増やすより面積や消費電力を抑えて並列度を高められる。
  • 応答性の改善:I/O待ちやメモリ遅延が多いワークロードでは、他スレッドで処理を進められるため応答性が良くなる。

欠点・注意点

  • 共有資源の競合:キャッシュや帯域を巡る競合が発生し、特定のワークロードでは性能が悪化することがある。
  • セキュリティ/サイドチャネル:SMTにより同一物理コア上のスレッド間で微細な状態を共有するため、サイドチャネル攻撃(例:タイミングやキャッシュを利用した攻撃)のリスクが高まる場合がある。実際に過去に報告された脆弱性によりSMTを無効化して対応した例もあります。
  • スレッドあたりの性能のばらつき:並列化効果はアプリケーションに依存し、性能向上が期待通り得られない場合がある。

実装例と運用上のポイント

代表例としてIntelの「Hyper-Threading(HT)」やAMDのSMTがあり、OSからは論理コアとして認識されます。実運用では次の点に注意します。

  • スケジューラ設定:高いパフォーマンスが必要なスレッドは物理コアや専用コアに割り当て、競合しやすいワークロードは論理スレッドの共有を避ける設定が有効な場合があります。
  • ベンチマークとプロファイリング:SMTを有効/無効にしてベンチマークを取り、実際のワークロードでの効果を確認することが重要です。
  • セキュリティ対策:重要な環境では脆弱性情報を常に監視し、必要に応じてSMTを無効化するなどの措置を検討します。

まとめ

SMTは、スーパースカラ設計と組み合わせることで1物理コア当たりのスループットを向上させる有力な技術です。一方で、共有資源による競合やセキュリティ上の懸念もあり、用途やワークロードに応じてIMT、CMP(マルチコア)との組み合わせやOSレベルのスケジューリング方針を最適化する必要があります。設計者は、性能、消費電力、チップ面積、セキュリティといったトレードオフを考慮して最適な構成を選びます。