|
同時マルチスレッディング(どうじマルチスレッディング、Simultaneous Multithreading、SMT)とは、単一CPUにより複数の実行スレッドを同時に実行するプロセッサの機能。 ==概要== 単一CPUで複数スレッドを同時実行することで、擬似的なSMP環境を提供することができる。これは主にハードウェアの観点からの見方だが、ソフトウェアの視点からこの技術を見た場合は複数の実行スレッドが単一のプロセッサを共有していると言える。 上に「擬似的なSMP環境を提供する」と書いたが、これはSMTの結果であって目的ではない。SMTの本来の目的は、プロセッサ内部の各実行ユニットの使用率を上げることにある。高度にパイプライン化された現代のスーパースカラープロセッサの実行の様子をつぶさに調べると、プロセッサ内部の実行ユニットすべてが動作しているわけではない場合が多いことがわかった。つまり、せっかくプロセッサ内部を高度に並列化しているにも拘らず並列性が最大限に活かされていない。単一スレッドでは完全には使われないプロセッサ内部資源を複数のスレッドに分配することで、プロセッサが本来持つ並列性を最大限に引き出してシステム全体のパフォーマンスを向上させようというのがSMTの本来の目的である。また、CGMTやFGMTといった同時にマルチスレッドを実行しないマルチスレッディング技術同様に、メモリレイテンシを隠蔽する効果もある。 例えば極端な話だが、整数演算ばかり行うスレッドAと浮動小数点演算ばかり行うスレッドBを同時に実行すると、スレッドAは整数演算ユニットばかり使いスレッドBは浮動小数点演算ユニットを使うのでお互いにプロセッサ内部資源の競合が極めて少なく、効率的に両者を実行できると考えられる。特に、浮動小数点命令は複数段のパイプラインで実行されることが多く、実行パイプラインを効率良く埋めるのに有用な技術と言える。 ただし、どれほどうまく資源配分を行ったとしても若干の競合が起きてどちらかのスレッドが待ち状態となることは完全には避けられないため、2スレッドを同時実行したとしても2倍のシステム性能が得られることは絶対にない。つまりスレッド当たりの性能はマルチスレッディングを使用しない場合と比較すると必ず低下する。現実的には2スレッド同時実行の場合で全体性能は5%から良くて20%程度の増加が得られることが多いようである。 しかし、一般的なPCユーザーの使用状況では、マルチスレッド対応アプリケーションは少なく、単純なマルチコア化は、トランジスタ数あたりの性能でいえば効率の良い手段とは言えない部分もある。例えば、マルチコアの場合、シングルスレッド時に於いて1コア分しか使われないとき、デュアルコアCPUであれば50%の使われないトランジスタの無駄が生じるが(トランジスタの無駄が生じると、製造コストに見合うパフォーマンスが得られないということである)、SMTの場合、僅かなアーキテクチャの拡張により実現しているため、シングルスレッド時であっても、生じる無駄も僅かであるといえる。 したがってSMTにより20%でも性能が向上すれば御の字であろう(0%でも問題はないだろう)。 SMTは同時に、つまり同じクロックサイクルで複数のスレッドを動かす技術である。従来のマルチスレッディングではハザードや命令ごと、あるいはクロックごとに実行するスレッドを切り替えており、複数のスレッドを実行できるプロセッサでも、あるクロックサイクルに実行されているスレッドはひとつであった。 単一CPUで複数のスレッドを処理できるものとしてマルチコア(クアッドコア、デュアルコアとも)があるが、これは一つのCPUの中に二つ以上のコアが存在するものであり、一つのコアの中で二つに分けられている同時マルチスレッディングとは似て非なるものである。 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「同時マルチスレッディング」の詳細全文を読む 英語版ウィキペディアに対照対訳語「 Simultaneous multithreading 」があります。 スポンサード リンク
|