同時マルチスレッディング(SMT)とは
同時マルチスレッディング(Simultaneous Multi-Threading、SMT)とは、パイプライン化された
スーパースカラーCPUにおいて、同一パイプラインステージ上で複数のスレッドの命令を処理する技術です。
ハードウェアマルチスレッディングの一種であり、
CPUの性能(スループット)を向上させることを目的としています。
SMTの概要
SMTは、
CPU内部のパイプラインの命令充填率を上げるために、複数のスレッドからの命令を同時に実行します。これにより、
CPUのリソースを効率的に活用し、システムの処理能力を向上させることができます。SMTの実装は、
CPUのアーキテクチャによって異なり、プログラムカウンタを複数備えるだけの単純なものから、複数のAPICを実装して疑似的な対称型
マルチプロセッシング(SMP)を実現するもの、複雑なマルチスレッディング機構の一部としてSMTを利用するものなど、さまざまな形態があります。
スレッドの供給は、通常、OSのスケジューラによって決定されます。
SMT誕生の背景
CPUの性能向上は、従来、高
クロック化、命令レベルの並列性(ILP)の実現(
スーパースカラーの採用、パイプライン化など)、キャッシュの採用によって実現されていました。しかし、これらの技術は
CPU資源の無駄も発生させていました。
そこで、スレッドレベルの並列性(TLP)の概念が生まれ、SMPやCMPによる
並列化、FGMTのようなマルチスレッド技術で実現されるようになりました。SMTは、これらの技術におけるパイプラインの充填率の低さを改善し、FGMTのようなパイプラインハザードの隠蔽効果をシングルスレッド性能を犠牲にすることなく、CMPよりも少ないチップ面積で実現することを目指して開発されました。
SMTの詳細
単一の
CPUコアで複数のスレッドを同時に実行することで、擬似的なSMP環境を提供できます。
ソフトウェアの視点からは、複数の実行スレッドが単一のプロセッサを共有しているとみなせます。SMTを有効にすると、見かけ上のプロセッサ数(論理プロセッサ数、論理コア数)が増加し、OSがSMTに対応することで、アプリケーションからは複数のプロセッサとして利用できます。SMTにより同時に駆動されるスレッドは、
ハードウェアスレッドと呼ばれることもあります。
SMTの本来の目的は、プロセッサ内部の各実行ユニットの使用率を上げることです。単一スレッドでは完全に使われないプロセッサ内部資源を複数のスレッドに分配することで、プロセッサが持つ並列性を最大限に引き出し、システム全体のパフォーマンスを向上させます。また、メモリレイテンシを隠蔽する効果もあります。
例えば、整数演算を行うスレッドAと浮動小数点演算を行うスレッドBを同時に実行すると、お互いに使用する実行ユニットが異なるため、効率的に両者を実行できます。特に、浮動小数点命令は複数段のパイプラインで実行されることが多く、実行パイプラインを効率良く埋めるのに役立ちます。
ただし、共有資源の奪い合いは避けられないため、SMTを有効にしても、2スレッドを同時実行した場合に2倍のシステム性能が得られるわけではありません。また、シングルコア性能はSMTを使用しない場合と比較すると低下します。物理的にNコアを持っている場合と論理的にNコアを持っている場合を比較すると、性能面では物理的にNコアを持っている方が有利です。
近年では、
CPU内部リソースの増強が進んでおり、SMT有効化後でもリソースが余るほど強力な構成が一般的になりつつあります。現実的な全体性能としては、SMT有効化で10%~50%程度の性能向上が見られます。
インテルは、自社のSMT技術である
ハイパースレッディング・テクノロジー(HTT)により、
CPUスループットがサーバーアプリケーションで最高30%向上すると述べています。
PCアプリケーションにおいてもマルチスレッド対応が進んでおり、SMTはリソース追加に対する性能向上率が大きく、
マルチコア化の進展に合わせてSMTも同時に進行しています。
消費電力面では、SMTによってパフォーマンスが改善する場合、実行ユニットが動作するため、有効化によって見かけ上の電力効率が悪化するケースもあります。演算の種類によっては、SMTを有効にしたときの性能向上率よりも消費電力増加率の方が大きく、実際の電力効率が悪化することもあります。消費電力はOSのスレッドスケジューリングアルゴリズムにも左右されるため、OS層には物理コアと論理コアの違いを考慮した対応と最適化が求められます。
SMTは、大量のデータを処理するサーバー向けの分野では、レイテンシ隠蔽を目的に採用されることがあります。PCやモバイルでは、SMTは積極的に用いられることは少ないです。
SMTは、複数のスレッドを同じ
クロックサイクルで動かす技術です。従来のマルチスレッディングでは、ハザードや命令ごと、あるいは
クロックごとに実行するスレッドを切り替えていました。
マルチコア技術は、1つの
CPUパッケージの中に複数の物理コアを実装する技術ですが、SMTは1つのコアの中で複数のスレッドを同時に実行する技術です。SMTは
マルチコア技術と併用できます。Intelは、シングルコア設計のNetBurstマイクロアーキテクチャで実装したHTTを、
マルチコア設計の
Coreマイクロアーキテクチャで一旦捨てましたが、
Nehalemマイクロアーキテクチャ以降で再び採用し、SMTと
マルチコアを併用できるようになりました。
PCやワークステーション向けのプロセッサでは、BIOS/UEFI設定でSMTの有効/無効を切り替えることができます。プロセッサによっては、SMT機能を実装しているものの、ブランドやグレードによってサポートが制限されている場合もあります。
SMTは、プロセッサコアあたり2スレッド (2-way) とは限りません。4スレッド (4-way) 以上を同時に実行できるプロセッサも存在します。
CPUの物理コア数が増えるにつれて、SMTが合理的でなくなってきているという指摘もあります。また、SMTを有効にしたときにスレッド上の情報が盗まれる可能性のある脆弱性も報告されています。
商用実装例
DEC Alphaファミリ
DEC Alpha EV8は、4スレッドSMTエンジンを搭載する予定でしたが、
コンパックはプロジェクトを商用化前に打ち切りました。
IBM POWERファミリ
IBMのPOWER5は、各コアに2スレッドのSMTエンジンが組み込まれたデュアルコアプロセッサです。
IBMの実装は、以前の実装よりも洗練されており、異なるスレッドに優先度を与えることや、SMTが性能向上をもたらさないタイプのワークロードを効率的に処理するために、SMTエンジンを動的にオン・オフすることが可能です。
マイクロソフトのゲーム機
Xbox 360の
CPUには、PowerPCベースの3コアプロセッサXenonが採用されており、2-way SMTにより最大6つの
ハードウェアスレッドをサポートします。
ソニーのゲーム機
PlayStation 3の
CPUには、PowerPC 970互換のプロセッサが採用されており、2-way SMTをサポートします。
IBMのPOWER7では、各コアで同時実行可能なスレッド数が4に倍増し、POWER8では同時8スレッドが実行可能になっています。
Sun UltraSPARCファミリ
サン・マイクロシステムズと
富士通が開発中の次世代プロセッサ「Rock」は、16コア×16スレッドで、1つのプロセッサで256スレッドが同時平行的に実行されます。
x86/x64
Intel Pentiumファミリ
NetBurstマイクロアーキテクチャの
Xeonと
Pentium 4が、SMTを採用した最初の商用プロセッサです。
インテルはこの機能を「
ハイパースレッディング・テクノロジー(Hyper-Threading Technology)」と呼んでいます。
インテルの低消費電力プロセッサであるAtomにもSMTが採用されています。
Nehalemマイクロアーキテクチャ以降のCore i/
XeonにおいてもSMTが採用されています。
AMD Ryzen/EPYC
AMDのZenマイクロアーキテクチャでは、同社初のSMTが実装されました。
ARM
ARM Cortex
ARMは、2018年に自動車ソリューション向けのSMT対応プロセッサCortex-A65AEを発表しました。
まとめ
SMTは、
CPUの性能を向上させるための重要な技術です。単一の
CPUコアで複数のスレッドを同時に実行することで、システム全体の処理能力を最大限に引き出すことができます。しかし、SMTには限界もあり、常に有効な技術とは限りません。SMTの有効/無効は、システムの用途や構成によって慎重に判断する必要があります。
参考文献
Hisa Ando『プロセッサを支える技術 : 果てしなくスピードを追求する世界』技術評論社、2011年1月25日。ISBN 978-4-7741-4521-1。
関連項目
マルチコア
ハードウェアマルチスレッディング
外部リンク
*
SMT research at the University of Washington