同時マルチスレッディング(SMT )は、ハードウェアマルチスレッディングによってスーパースカラCPUの全体的な効率を向上させる技術です。SMTは、複数の独立した実行スレッドを可能にし、最新のプロセッサアーキテクチャが提供するリソースをより効果的に活用します。
マルチスレッドという用語は曖昧です。なぜなら、1つのCPUコア上で複数のスレッドが同時に実行できるだけでなく、複数のタスク(異なるページテーブル、異なるタスク状態セグメント、異なる保護リング、異なるI/O権限などを持つ)も同時に実行できるからです。同じコア上で実行されていても、それらは完全に分離されています。マルチスレッドは、概念的にはプリエンプティブマルチタスクに似ていますが、最新のスーパースカラプロセッサではスレッドレベルで実装されています。
同時マルチスレッド (SMT) は、マルチスレッドの主な実装方法の 2 つのうちの 1 つで、もう 1 つはテンポラルマルチスレッド(スーパースレッディングとも呼ばれる) です。テンポラルマルチスレッドでは、パイプラインの任意のステージで一度に実行できる命令スレッドは 1 つだけです。同時マルチスレッドでは、パイプラインの任意のステージで一度に複数のスレッドからの命令を実行できます。これは、基本的なプロセッサ アーキテクチャに大きな変更を加えることなく実現できます。必要な主な追加機能は、1 サイクルで複数のスレッドから命令をフェッチする機能と、複数のスレッドからのデータを保持するためのより大きなレジスタ ファイルです。同時実行スレッドの数は、チップ設計者によって決定されます。CPU コアあたり 2 つの同時実行スレッドが一般的ですが、プロセッサによっては、より多くの同時実行スレッドをサポートするものもあります。[ 1 ]
共有リソースの競合が必然的に増加するため、その有効性を測定したり合意したりすることは困難です。しかし、 130 nm から 32 nm までの Intel SMT (ハイパースレッディング) 実装で並列ネイティブワークロードとマネージドワークロードを使用した SMT のエネルギー効率を測定したところ、45 nm および 32 nm 実装では、順序通りの Atom プロセッサでも SMT は非常にエネルギー効率が高いことがわかりました。 [ 2 ]最新のシステムでは、SMT は動的電力のほとんど追加なしに並列処理を効果的に活用します。つまり、パフォーマンスの向上が最小限であっても、消費電力の削減は相当なものになる可能性があります。[ 2 ]
研究者の中には、追加のスレッドをキャッシュなどの共有リソースに積極的に投入することで、別の単一スレッドのパフォーマンスを向上させることができると実証している者もおり、これはSMTが効率性を向上させるだけでなく、他の機能も備えていることを示していると主張している。また、SMTを冗長な計算処理に利用し、ある程度のレベルのエラー検出と回復を実現している研究者もいる。
しかしながら、現在のほとんどのケースでは、SMTはメモリアクセスなどの高レイテンシ処理中の停止を隠蔽することを目的としており、既存のリソースをより有効活用することで、使用するハードウェア量あたりの計算効率とスループットを向上させる。
プロセッサ設計において、より少ないリソースでオンチップ並列性を向上させる方法は2つあります。1つは命令レベル並列性(ILP)を活用しようとするスーパースカラ技術、もう1つはスレッドレベル並列性(TLP)を活用するマルチスレッド方式です。
スーパースカラとは、複数の命令を同時に実行することを意味し、スレッドレベル並列処理(TLP)とは、1つのプロセッサチップ内で複数のスレッドからの命令を同時に実行することです。チップ内で複数のスレッドをサポートする方法は数多くあり、具体的には以下のとおりです。
両者を区別する重要な要素は、プロセッサが1サイクルで発行できる命令数と、その命令がどのスレッドから発行されるかを確認することです。例えば、サン・マイクロシステムズのUltraSPARC T1は、マルチコアプロセッサでありながら、各コアが一度に1つの命令しか発行できないため、同時マルチスレッドではなく、きめ細かいマルチスレッド技術を採用しています。
マルチスレッドCPUは1950年代から存在していましたが、同時マルチスレッドは1968年にIBMがACS-360プロジェクトの一環として初めて研究しました。[ 3 ] SMTを使用して開発された最初の主要な商用マイクロプロセッサはAlpha 21464(EV8)でした。このマイクロプロセッサは、カリフォルニア大学サンディエゴ校のDean Tullsen、ワシントン大学のSusan Eggers、Henry Levyと連携してDECによって開発されました。Alphaマイクロプロセッサシリーズは、HPがCompaqを買収し、CompaqがDECを買収する直前に廃止されたため、このマイクロプロセッサは発売されませんでした。Dean Tullsenの研究は、「Northwood」や「Prescott」などのIntel Pentium 4マイクロプロセッサのハイパースレッディング版の開発にも使用されました 。
Intel Pentium 4 は、 2002 年にリリースされた3.06 GHz モデルから同時マルチスレッドを実装した最初の現代のデスクトップ プロセッサであり、その後、多くのプロセッサに導入されました。 Intel は、この機能をHyper-Threading Technologyと呼び、基本的な 2 スレッド SMT エンジンを提供します。 Intel は、それ以外は同一の、SMT 非対応の Pentium 4 と比較して、最大 30% の速度向上を主張しています[ 4 ]。見られるパフォーマンスの向上はアプリケーションに大きく依存しますが、プロセッサの完全な注意を必要とする 2 つのプログラムを実行すると、Hyper-threading をオンにすると、実際には 1 つまたは両方のプログラムがわずかに遅くなるように見えることがあります。[ 5 ]これは、 Pentium 4 のリプレイ システムによって貴重な実行リソースが占有され、帯域幅、キャッシュ、 TLB、リオーダー バッファエントリなどのリソースの競合が増加し、2 つのプログラム間でプロセッサ リソースが均等化され、実行時間が変動するためです。 Pentium 4 Prescottコアはリプレイキューを獲得し、リプレイシステムに必要な実行時間を短縮しました。これにより、パフォーマンス低下を完全に克服することができました。[ 6 ]
2008年に初めてリリースされたIntel Atomは、命令の並べ替え、投機的実行、レジスタ名の変更をサポートせずに、双方向SMT(ハイパースレッディングとして販売)を搭載した最初のIntel製品です。Intelは、Coreマイクロアーキテクチャではハイパースレッディングが利用できなかった後、Nehalemマイクロアーキテクチャでハイパースレッディングを再導入しました。
Intel Xeon Phi (2010 – 2020) は、通常の Hyper-Threading とは異なり、ハードウェアベースのスレッドによる 4 ウェイ SMT (時分割多重マルチスレッディング) を備えており、これを無効にすることはできません。[ 7 ]
AMD Bulldozerマイクロアーキテクチャ(2011年)は2スレッドの「モジュール」を使用しています。各モジュールには2つの独立した整数コアがありますが、FlexFPUとL2キャッシュは共有されているため、部分的なSMT実装に過ぎません。[ 8 ] [ 9 ]
AMDのZenファミリーのマイクロアーキテクチャは2ウェイSMTを採用しています。Zen 5コアのほとんどのリソースはSMTで競合的に共有され、アクティブなスレッドがすべてのリソース(ウォーターマーク付きリソースの場合は「ほとんど」)を取得できます。静的に分割される例外は、マイクロオペレーションキュー、リタイアメントキュー、およびFPU非スケジューリングキューです。[ 10 ]
Imagination Technologies の最新のMIPS アーキテクチャ設計には、「MIPS MT」と呼ばれる SMT システムが含まれています。[ 11 ] MIPS MT は、重量級の仮想処理要素と軽量のハードウェア マイクロ スレッドの両方を提供します。クパチーノに拠点を置くスタートアップ企業であるRMI は、それぞれ 4 つのスレッドを実行する 8 つのコアに基づくプロセッサSOC を提供する最初の MIPS ベンダーです。スレッドは、サイクルごとに異なるスレッドを実行できるきめ細かいモードで実行できます。スレッドには優先順位を割り当てることもできます。Imagination Technologies のMIPS CPU は、コアごとに 2 つの SMT スレッドを備えています。
IBMのBlue Gene /Qは4ウェイSMTに対応している。
2004 年 5 月に発表されたIBM POWER5は、デュアル コア デュアル チップ モジュール (DCM) またはクアッド コアまたはオクト コア マルチ チップ モジュール (MCM) のいずれかで提供され、各コアには 2 スレッド SMT エンジンが含まれています。IBMの実装は、さまざまなスレッドに異なる優先順位を割り当てることができ、よりきめ細かく、SMT プロセッサがパフォーマンスを向上させないワークロードをより適切に実行するために、SMT エンジンを動的にオン/オフできるため、以前のものよりも洗練されています。これは、IBM が一般に利用可能なハードウェア マルチスレッドの 2 番目の実装です。2010 年に、IBM は、それぞれ 4 つの同時インテリジェント スレッドを備えた 8 つのコアを備えた POWER7 プロセッサに基づくシステムをリリースしました。これにより、その時点でスケジュールされているプロセス スレッドの数に応じて、スレッド モードが 1 つのスレッド、2 つのスレッド、または 4 つのスレッドの間で切り替わります。これにより、応答時間の最小化またはスループットの最大化のためにコアの使用が最適化されます。IBM POWER8 は、コアごとに 8 つのインテリジェント同時スレッド (SMT8) を備えています。
IBM Zは、 2013年に発売されたz13プロセッサ以降、コアあたり2スレッド(SMT-2)を搭載しています。
多くの人が、Sun Microsystemsの UltraSPARC T1 (2005 年 11 月 14 日のリリースまでは「Niagara」として知られていた) と、現在は開発中止となったプロセッサ「 Rock (当初は 2005 年に発表されたが、度重なる延期を経て 2010 年に中止された) は、SMT と CMP 技術の活用にほぼ完全に焦点を当てたSPARCの実装であると報告しているが、Niagara は実際には SMT を使用していない。Sun はこれらの複合アプローチを「CMT」と呼び、全体的な概念を「スループット コンピューティング」と呼んでいる。Niagara は 8 つのコアを持つが、各コアにはパイプラインが 1 つしかないため、実際にはきめ細かいマルチスレッドを使用している。各サイクルで複数のスレッドからの命令が発行ウィンドウを共有する SMT とは異なり、このプロセッサはラウンド ロビン ポリシーを使用して、各サイクルで次にアクティブなスレッドからの命令を発行する。これにより、バレル プロセッサに近くなる。Sun Microsystems の Rock プロセッサは異なり、複数のパイプラインを持つより複雑なコアを備えている。
Oracle CorporationのSPARC T3は、コアあたり8つのきめ細かいスレッドを備えています。SPARC T4、SPARC T5、SPARC M5、M6、M7は、コアあたり8つのきめ細かいスレッドを備えており、そのうち2つを同時に実行できます。
富士通のSPARC64 VIは粗粒度垂直マルチスレッディング(VMT)を採用しており、SPARC VII以降は2ウェイSMTを採用しています。
Intel Itanium (IA-64、2001年~ 2020年) Montecitoは粗粒度マルチスレッドを使用し、Tukwilaおよびそれ以降の世代は2ウェイSMT(デュアルドメインマルチスレッド)を使用します。
VISCアーキテクチャ(2016年)[ 12 ] [ 13 ] [ 14 ] [ 15 ]は、仮想ソフトウェアレイヤー(変換レイヤー)を使用して、単一の命令スレッドをグローバルフロントエンドにディスパッチします。グローバルフロントエンドは、命令を仮想ハードウェアスレッドレットに分割し、それらを個別の仮想コアにディスパッチします。これらの仮想コアは、それらを任意の物理コア上の利用可能なリソースに送信できます。複数の仮想コアは、スレッドレットを単一の物理コアの再順序バッファにプッシュすることができ、これにより、複数のスレッドレットからの部分的な命令とデータを実行ポートを介して同時に分割できます。各仮想コアは、相対出力の位置を追跡します。この形式のマルチスレッドは、単一のスレッドがCPUのすべてのリソースを使用できるようにすることで、シングルスレッドのパフォーマンスを向上させることができます。リソースの割り当ては、ほぼシングルサイクルのレイテンシレベル(個々のアプリケーションのニーズに応じて割り当てが変わるため、1~4サイクル)で動的です。したがって、2つの仮想コアがリソースを競合している場合は、どのリソースをどこに割り当てるかを決定するための適切なアルゴリズムが用意されています。
SMTはリソースの共有を導入します。一部の共有方式(静的分割など)では、別のスレッドが使用していない場合でも、あるスレッドが1つのリソースをより多く取得することを許可しないため、SMTを使用しない場合と比較してパフォーマンスの潜在的なボトルネックが発生します。[ 16 ]また、公平性の問題が発生する可能性もあります。新しいSMT実装では、静的パーティショニング、競合共有、およびウォーターマーキング付き競合共有(後者は両方の組み合わせ)を組み合わせることで、これらの問題の発生を最小限に抑えようとしています。[ 17 ]
批評家は、ソフトウェア開発者がさまざまな状況で同時マルチスレッドがアプリケーションにとって良いか悪いかをテストし、パフォーマンスが低下する場合はそれをオフにするための追加のロジックを挿入する必要があることは、開発者にとってかなりの負担であると主張している。2009 年のオペレーティングシステムには、この目的や、異なる優先度のプロセスが互いにリソースを奪い合うのを防ぐための便利なAPIコールがない。 [ 18 ]クロス プラットフォームのhwlocライブラリが利用可能で、SMT とNUMA設定の存在を検出できる。どちらもプログラマが考慮する必要がある場合が多い。Prime95はhwloc を使用するプログラムの 1 つで、デフォルトでは整数試行除算を行うときに追加の SMT スレッドを使用するが、通常の浮動小数点演算にはコアごとに 1 つのスレッドのみを使用する。[ 19 ]
同時マルチスレッドの実装には、バグやサイドチャネル情報漏洩によるセキュリティ上の懸念もあります。NetBurst ベースのプロセッサにおける Intel のハイパースレッディングには、キャッシュの使用状況を監視することで、同じプロセッサで実行されている別のアプリケーションから暗号鍵を盗むことができる脆弱性があります。 [ 20 ]また、 Black Hat 2018で説明された HT 実装に対する高度な機械学習エクスプロイトも存在します。[ 21 ]