この記事には複数の問題があります。改善
やノートページでの議論にご協力ください。同時マルチスレッディング(どうじマルチスレッディング、英: Simultaneous Multi-Threading、SMT)とは、パイプライン化されたスーパースカラーCPUにおいて、同一パイプラインステージ上で複数のスレッドの命令を処理することを特徴とする、ハードウェアマルチスレッディングの一形態。 パイプライン全体の命令充填率を上げるため、同一のパイプラインステージに複数スレッドからの命令を充填する機構を実装し、システムの性能(スループット)を改善することを目標としている。 実装は各CPUのアーキテクチャに依存した最適なものが選択され、プログラムカウンタを複数備えるだけの単純なものから、APICを複数実装し疑似的な対称型マルチプロセッシングを実現するもの[1]、Bulldozerのように複雑なマルチスレッディング機構を有しその一部としてSMTを利用するもの、一つのデコーダで複数スレッドの命令を同時にデコードするものまで様々である。 スレッドの供給は一般的にOSがそのスケジューラにより決定する。 CPUの性能(スループット)向上については、古典的には高クロック化と命令レベルの並列性(ILP)の実現(スーパースカラーの採用、パイプライン化等によるIPCの向上)、キャッシュの採用により実現されていた[2]。これらは同時にCPU資源の無駄を発生させていた[3]。そこで、スレッドレベルの並列性 単一CPU(単一コア)で複数スレッドを同時実行することで、擬似的な対称型マルチプロセッシング (SMP) 環境を提供することができる。これは主にハードウェアの観点からの見方だが、ソフトウェアの視点からこの技術を見た場合は複数の実行スレッドが単一のプロセッサを共有していると言える。SMTを有効にすることで、見かけのプロセッサ数(論理プロセッサ数、論理コア数)が増加する。オペレーティングシステム (OS) がSMTに対応することで、アプリケーションソフトウェアからは透過的に複数のプロセッサとして利用することができるようになる。SMTにより同時駆動されるスレッドは、タイムスライスで切り替えて疑似的に同時実行するスレッドと対比して、ハードウェアスレッドと呼ばれることがある。 上に「擬似的なSMP環境を提供する」と書いたが、これはSMTの結果であって目的ではない。SMTの本来の目的は、プロセッサ内部の各実行ユニットの使用率を上げることにある。高度にパイプライン化された現代のスーパースカラープロセッサの実行の様子をつぶさに調べると、プロセッサ内部の実行ユニットすべてが動作しているわけではない場合が多いことがわかった。つまり、せっかくプロセッサ内部を高度に並列化しているにも拘らず並列性が最大限に活かされていない。単一スレッドでは完全には使われないプロセッサ内部資源を複数のスレッドに分配することで、プロセッサが本来持つ並列性を最大限に引き出してシステム全体のパフォーマンスを向上させようというのがSMTの本来の目的である。また、CGMTやFGMTといった同時にマルチスレッドを実行しないマルチスレッディング技術同様に、メモリレイテンシを隠蔽する効果もある。 例えて言うと、整数演算ばかり行うスレッドAと浮動小数点演算ばかり行うスレッドBを同時に実行すると、スレッドAは整数演算ユニットばかり使いスレッドBは浮動小数点演算ユニットを使うのでお互いにプロセッサ内部資源の競合が極めて少なく、効率的に両者を実行できると考えられる。特に、浮動小数点命令は複数段のパイプラインで実行されることが多く、実行パイプラインを効率良く埋めるのに有用な技術と言える。 ただし、どれほどうまく資源配分をしても、共有資源の奪い合いが起きて、どちらかのスレッドが調停のために待ち状態となることは完全には避けられないため、2スレッドを同時実行したとしても2倍のシステム性能が得られることは絶対にない。つまりスレッド当たりの性能(シングルコア性能)はSMTを使用しない場合と比較すると必ず低下する。また、物理的にNコアを持っている場合と論理的にNコアを持っている場合を比較したとき、それ以外の性能がまったく同じであれば、物理的にNコアを持っているほうが性能面で有利であることには変わりない。 @media screen{.mw-parser-output .fix-domain{border-bottom:dashed 1px}}また、CPU開発動向において実行効率改善のために演算を含む内部リソースを大量に備える方向に進んでおり、SMT有効化後でもリソースが余る程強力な構成が一般化しつつある。現実的な全体性能としてはSMT有効化にて10%?50%程度の上昇がみられる[要出典]。[注釈 1] インテルは自社のSMT技術であるハイパースレッディング・テクノロジー (HTT) により、CPUスループットをサーバーアプリケーションで最高30%向上することが可能であると述べている[11]。 PCアプリケーションにおいてもマルチスレッド対応が進み、SMTは追加リソースに比較して性能向上率が大きく[注釈 2]、近年[いつ?]ではマルチコア化の進展に合わせSMT対応も同時に進行している。 消費電力面では、SMTによってパフォーマンスが改善する場合実行ユニットが動作するため、有効化によって見かけ上の電力効率が悪化するケースもある。[要出典] 演算の種類によっては、SMTを有効にしたときの性能向上率よりも消費電力増加率のほうが大きく、実際の電力効率が悪化するケースもある[13]。消費電力はOSのスレッドスケジューリングアルゴリズムにも左右され、OS層には物理コアと論理コアの違いを考慮した対応と最適化が求められる[14]。 PCやモバイルではSMTが積極的に用いられることは少ないが、大量のデータを処理するサーバー向けの分野ではレイテンシ隠蔽を目的にSMTが採用されることもある[15]。 SMTは同時に、つまり同じクロックサイクルで複数のスレッドを動かす技術である。従来のマルチスレッディングではハザードや命令ごと、あるいはクロックごとに実行するスレッドを切り替えており、複数のスレッドを実行できるプロセッサでも、あるクロックサイクルに実行されているスレッドはひとつであった。 単一CPU(単一パッケージ)で同時に複数のスレッドを処理できるものとして、デュアルコア(2コア)、クアッドコア(4コア)、……といったマルチコア技術があるが、これは1つのCPUパッケージの中に2つ以上の物理コアが実装されているものであり、1つのコアの中で2つに分けられている同時マルチスレッディングとは似て非なるものである。
概要
誕生の背景
詳細