同時マルチスレッディング

同時マルチスレッディング（どうじマルチスレッディング、Simultaneous Multi-Threading、SMT）とは、パイプライン化されたスーパースカラーCPUにおいて、同一パイプラインステージ上で複数のスレッドの命令を処理することを特徴とする、ハードウェアマルチスレッディングの一形態。

**概要**
パイプライン全体の命令充填率を上げるため、同一のパイプラインステージに複数スレッドからの命令を充填する機構を実装し、システムの性能(スループット)を改善することを目標としている。
実装は各CPUのアーキテクチャに依存した最適なものが選択され、プログラムカウンタを複数備えるだけの単純なものから、APICを複数実装し疑似的な対称型マルチプロセッシングを実現するもの、Bulldozerのように複雑なマルチスレッディング機構を有しその一部としてSMTを利用するもの、一つのデコーダで複数スレッドの命令を同時にデコードするものまで様々である。
スレッドの供給は一般的にOSがそのスケジューラにより決定する。

**誕生の背景**
CPUの性能(スループット)向上については、古典的には高クロック化と命令レベルの並列性(ILP)の実現(スーパースカラーの採用、パイプライン化等によるIPCの向上)、キャッシュの採用により実現されていた。
これらは同時にCPU資源の無駄を発生させていた。
そこで、スレッドレベルの並列性(TLP)の概念が生まれ、TLPはSMPやCMPによる並列化、FGMTのようなマルチスレッド技術で実現されつつあった。
SMTはそれらの技術におけるパイプラインの充填率の低さを欠点とみなし、FGMTのようなパイプラインハザードの隠蔽効果をシングルスレッド性能をなるべく犠牲にせず、CMPに比べて少ないチップ面積で実現することを目指して発明された。

**詳細**
単一CPU（単一コア）で複数スレッドを同時実行することで、擬似的な対称型マルチプロセッシング (SMP) 環境を提供することができる。これは主にハードウェアの観点からの見方だが、ソフトウェアの視点からこの技術を見た場合は複数の実行スレッドが単一のプロセッサを共有していると言える。SMTを有効にすることで、見かけのプロセッサ数（論理プロセッサ数、論理コア数）が増加する。オペレーティングシステム (OS) がSMTに対応することで、アプリケーションソフトウェアからは透過的に複数のプロセッサとして利用することができるようになる。SMTにより同時駆動されるスレッドは、タイムスライスで切り替えて疑似的に同時実行するスレッドと対比して、ハードウェアスレッドと呼ばれることがある。
上に「擬似的なSMP環境を提供する」と書いたが、これはSMTの結果であって目的ではない。SMTの本来の目的は、プロセッサ内部の各実行ユニットの使用率を上げることにある。高度にパイプライン化された現代のスーパースカラープロセッサの実行の様子をつぶさに調べると、プロセッサ内部の実行ユニットすべてが動作しているわけではない場合が多いことがわかった。つまり、せっかくプロセッサ内部を高度に並列化しているにも拘らず並列性が最大限に活かされていない。単一スレッドでは完全には使われないプロセッサ内部資源を複数のスレッドに分配することで、プロセッサが本来持つ並列性を最大限に引き出してシステム全体のパフォーマンスを向上させようというのがSMTの本来の目的である。また、CGMTやFGMTといった同時にマルチスレッドを実行しないマルチスレッディング技術同様に、メモリレイテンシを隠蔽する効果もある。
例えて言うと、整数演算ばかり行うスレッドAと浮動小数点演算ばかり行うスレッドBを同時に実行すると、スレッドAは整数演算ユニットばかり使いスレッドBは浮動小数点演算ユニットを使うのでお互いにプロセッサ内部資源の競合が極めて少なく、効率的に両者を実行できると考えられる。特に、浮動小数点命令は複数段のパイプラインで実行されることが多く、実行パイプラインを効率良く埋めるのに有用な技術と言える。
ただし、どれほどうまく資源配分をしても、共有資源の奪い合いが起きて、どちらかのスレッドが調停のために待ち状態となることは完全には避けられないため、2スレッドを同時実行したとしても2倍のシステム性能が得られることは絶対にない。つまりスレッド当たりの性能（シングルコア性能）はSMTを使用しない場合と比較すると必ず低下する。また、物理的にNコアを持っている場合と論理的にNコアを持っている場合を比較したとき、それ以外の性能がまったく同じであれば、物理的にNコアを持っているほうが性能面で有利であることには変わりない。
。efn|SMT (HTT) のサポート有無以外は類似した性能を持つCPUである「Core i9-9900K」と「Core i7-9700K」の比較では、PassMark® Software社が公開しているPassMarkのベンチマークスコアは18,538 vs 14,549となっている。CPU-Monkey.comによるCinebench R23 CPU (マルチコア) のスコアは12,450 vs 10,326となっている。しかし、これら2つのプロセッサは、L3キャッシュの容量や、Intel Turbo Boostが動作したときのターボクロック周波数が異なるため、SMTによる性能向上率の比較としては公平ではない。対照実験の原則の観点から、少なくとも同じCPUを用いて、SMTをONにした場合とOFFにした場合とでベンチマークスコアを比較すべきである。
インテルは自社のSMT技術であるハイパースレッディング・テクノロジー (HTT) により、CPUスループットをサーバーアプリケーションで最高30%向上することが可能であると述べている。
PCアプリケーションにおいてもマルチスレッド対応が進み、SMTは追加リソースに比較して性能向上率が大きく、近年ではマルチコア化の進展に合わせSMT対応も同時に進行している。
演算の種類によっては、SMTを有効にしたときの性能向上率よりも消費電力増加率のほうが大きく、実際の電力効率が悪化するケースもある。消費電力はOSのスレッドスケジューリングアルゴリズムにも左右され、OS層には物理コアと論理コアの違いを考慮した対応と最適化が求められる。
PCやモバイルではSMTが積極的に用いられることは少ないが、大量のデータを処理するサーバー向けの分野ではレイテンシ隠蔽を目的にSMTが採用されることもある。
SMTは同時に、つまり同じクロックサイクルで複数のスレッドを動かす技術である。従来のマルチスレッディングではハザードや命令ごと、あるいはクロックごとに実行するスレッドを切り替えており、複数のスレッドを実行できるプロセッサでも、あるクロックサイクルに実行されているスレッドはひとつであった。
単一CPU（単一パッケージ）で同時に複数のスレッドを処理できるものとして、デュアルコア（2コア）、クアッドコア（4コア）、……といったマルチコア技術があるが、これは1つのCPUパッケージの中に2つ以上の物理コアが実装されているものであり、1つのコアの中で2つに分けられている同時マルチスレッディングとは似て非なるものである。同時マルチスレッディングはマルチコア技術と併用することも可能である。Intelはシングルコア設計のNetBurstマイクロアーキテクチャにおいて実装したハイパースレッディング・テクノロジー (HTT) を、マルチコア設計のCoreマイクロアーキテクチャでいったん捨てたが、Nehalemマイクロアーキテクチャ以降で再び採用したことにより、SMTとマルチコアを併用できるようになった。Alder Lake世代のプロセッサでは、高性能コア（Pコア）および高効率コア（Eコア）という2種類のコアをそれぞれ複数個搭載しているが、HTTはPコアでのみ利用可能であり、Eコアではサポートされない。
PCやワークステーション向けのプロセッサでは、通例BIOS/UEFI設定によってSMTの有効／無効を切り替えることができる。プロセッサの内部ハードウェア的にはSMT機能を実装しているものの、ブランドやグレードに応じてサポートするかどうか（有効化できるかどうか）を制限している製品もある。
SMTはプロセッサコアあたり2スレッド (2-way) とは限らない。4スレッド (4-way) 以上を同時に実行できるプロセッサも存在するefn|IBMのPOWER7以降や、サン・マイクロシステムズ（現オラクル）のUltraSPARC Tシリーズなど。。
CPUの物理コア数が増えるにつれて、SMTが合理的でなくなってきている、という指摘もある。また、SMTを有効化したときにスレッド上の情報を盗み取られる可能性のある脆弱性などもいくつか見つかっている。

**商用の実装**

**DEC Alphaファミリ**
DEC Alpha EV8はさらにパワフルな4スレッドSMTエンジンを搭載する予定であったが、コンパックはプロジェクトを商用化前に打ち切った。

**IBM POWERファミリ**
2004年5月に発表されたIBMのPOWER5はデュアルコアプロセッサで、それぞれのコアに2スレッドのSMTエンジンが組み込まれている。IBMの実装はそれ以前の実装と比較してより洗練されており、異なるスレッドに優先度を与えることや、SMTが性能向上をもたらさないタイプのワークロードをより効率的に処理するため動的にSMTエンジンをオン・オフすることが可能となっている。
2005年に発売されたマイクロソフトのゲーム機Xbox 360のCPUには、PowerPCベースの対称型3コアプロセッサXenonが採用されており、2-way SMTにより最大6つのハードウェアスレッドをサポートする。
2006年に発売されたソニーのゲーム機PlayStation 3のCPUには、PowerPC 970互換のプロセッサが採用されており、2-way SMTをサポートする。
2010年2月に発表されたIBMのPOWER7では、それぞれのコアで同時実行可能なスレッド数が4へと倍増されている。
また2013年8月には同時8スレッドが実行可能なPOWER8を発表している。

**Sun UltraSPARCファミリ**
2007年の段階で、サン・マイクロシステムズと富士通が開発中の次世代プロセッサ、コードネーム「Rock」は2009年～2010年に登場が予定されていた。現行の「UltraSPARC IV+」を置き換える予定のRockはマルチコアでコア内でも複数スレッドを同時実行する。Rockは16コアｘ16スレッドが同時平行的に実行され、1つのプロセッサで256スレッドになる。これらサンの新プロセッサは「Solaris OS」が備える「Solarisコンテナ」機能によってマルチスレッディングに対応する。

**x86/x64**

**Intel Pentiumファミリ**
NetBurstマイクロアーキテクチャのXeonとPentium 4がSMTを採用した最初の商用プロセッサで、以降さまざまなモデルに同機能が搭載されている。インテルはこの機能を「ハイパースレッディング・テクノロジー (Hyper-Threading Technology)」と呼び、その内容は基本的な2スレッドのSMTエンジンである。

**Intel Atomファミリ**
インテルの低消費電力プロセッサであるAtomにはSMTが採用された。Atomはインオーダー実行のプロセッサであり、NetBurstマイクロアーキテクチャとは異なるマイクロアーキテクチャである。

**Intel Core iファミリ**
Nehalemマイクロアーキテクチャ以降のCore i/XeonにおいてもSMTが採用されている。インテルのメインストリーム向けプロセッサとしてはNetBurst系以来の採用である。

**AMD Ryzen/EPYC**
AMDのZenマイクロアーキテクチャでは、同社史上初のSMTが実装された。

**ARM**

**ARM Cortex**
ARMは2018年に自動車ソリューション向けのSMT対応プロセッサCortex-A65AEを発表した。

**脚注**

**注釈**

**出典**

**参考文献**

**関連項目**
マルチコア
*ハードウェアマルチスレッディング

**外部リンク**
 SMT research at the University of Washington