「ハードウェアマルチスレッディング」の版間の差分

削除された内容 追加された内容
編集の要約なし
1行目:
'''''ハードウェアマルチスレッディング(Hardware multithreading)'''('''Hardware multithreading''')は、[[コンピュータ]]において[[ハードウェア]]のサポートにより複数の[[スレッド (コンピュータ)|スレッド]]を効率的に実行することである。
 
=== 概要= ==
'''''ハードウェアマルチスレッド'''''のパラダイムは、1990年代後半以来、[[命令レベルの並列性]]をこれ以上利用する努力が行き詰まったため、注目されるようになった。''スループットコンピューティング'' の概念をより特化した分野である[[トランザクション処理]]から突如再浮上させることになった。
 
'''''ハードウェアマルチスレッド'''''のパラダイムは、1990年代後半以来、[[命令レベルの並列性]]をこれ以上利用する努力が行き詰まったため、注目されるようになった。''スループットコンピューティング'' の概念をより特化した分野である[[トランザクション処理]]から突如再浮上させることになった。
 
* これ以上シングルスレッドやシングルプログラムの性能を向上させるのは非常に難しいが、ほとんどのコンピュータシステムは実際には複数のスレッドやプログラムによりマルチタスクを行っている。
17 ⟶ 16行目:
[[スレッド (コンピュータ)|マルチスレッド]]サポートするために用いられるハードウェア技術は、コンピュータプログラムの[[マルチタスク]]のためのソフトウェア技術と匹敵する。<!--同時に用いることができる。-->
 
=== ブロック型マルチスレッディング= ==
==== 概念= ===
もっともシンプルなタイプのマルチスレッディングは、一つのスレッドが、通常長い遅延のあるストールを発生させるイベントによりブロックされるまで動作しつづけるものである。こうしたストールはチップの外にあるメモリにアクセスする必要があり、データを取得して復帰するまで数百 CPU サイクルかかるキャッシュミスである可能性がある。スレッド化されたプロセッサは、ストールが解決されるのを待たず、動作の準備ができている別のスレッドに実行を切り替える。以前のスレッドにデータが到着した場合にのみ、以前のスレッドが実行可能なスレッドのリスト上に復帰する。
 
31 ⟶ 30行目:
概念的には、[[リアルタイムオペレーティングシステム]]で使用される協調マルチタスクに似ている。これは、特定のイベントを待つ必要がある場合にタスクが自主的に実行時間を引き渡す。
 
==== 用語= ===
この種類のマルチスレッディングは''ブロック型(Block)マルチスレッディング''、''協調(Cooperative)マルチスレッディング''、''粗粒度(Coarse-grained)''マルチスレッディング(CGMT)として知られる。
 
==== ハードウェアのコスト= ===
マルチスレッディングをハードウェアでサポートすることの目標は、ブロックされたスレッドと、実行可能な別のスレッドの切り替えを高速に行うことである。この目標を達成するためのハードウェアのコストは、プログラムから見えるレジスタといくつかのプロセッサ制御レジスタ(プログラムカウンタなど)を複数持つことである。あるスレッドから別のスレッドへの切り替えは、使用するレジスタセットを別のものに切り替えることを意味する。
 
43 ⟶ 42行目:
アクティブなスレッド同士を効率的に切り替えるため、それぞれのアクティブなスレッドは専用のレジスタを一式持つ必要がある。たとえば、二つのスレッドを高速に切り替えるため、レジスタのハードウェアは二つ作成する必要がある。
 
==== = ===
* 多数の[[マイクロコントローラ]]および組み込み用途のプロセッサファミリが、割り込みのための高速な[[コンテキストスイッチ]]が可能なよう複数の高速なレジスタバンクを持っている。こうした戦略はユーザープログラムスレッドと割り込みスレッドの間のブロック型マルチスレッディングの一種と考えることができる。
 
=== インターリーブ型マルチスレッディング= ==
{{Main|バレルプロセッサ}}
 
==== 概念= ===
より高い性能を持つマルチスレッディングの種類は、プロセッサが各 CPU サイクルでスレッドを切り替えるものである。
 
61 ⟶ 60行目:
概念的には、オペレーティングシステムで用いられる[[マルチタスク#プリエンプティブ・マルチタスク|プリエンプティブ・マルチタスク]]と似ている。各アクティブスレッドに与えられたタイムスライスを 1 CPU サイクルに例えることができるだろう。
 
==== 用語= ===
この種のマルチスレッディングは初め''バレルプロセッシング''と呼ばれ、樽(barrel)の段がパイプラインのステージと、実行スレッドを表す。''インターリーブ型(Interleaved)マルチスレッディング''、''プリエンプティブ(Pre-emptive)マルチスレッディング''、''細粒度(Fine-grained)マルチスレッディング''(FGMT)、''タイムスライス(time-sliced)''マルチスレッディングなどがより現代的な用語である。
 
==== ハードウェアのコスト= ===
''ブロック''型のマルチスレッディングで議論したハードウェアコストに加え、''インターリーブ''型マルチスレッディングはさらに各パイプラインステージが処理する各命令のスレッド ID を追跡するためのコストがかかる。また、パイプライン内でより多くのスレッドが並列に実行されるため、異なるスレッド間のスラッシングを避けるためキャッシュや TLB などの共有リソースを大きくする必要がある。
 
==== = ===
* Denelcor [[:en:Heterogeneous Element Processor|Heterogeneous Element Processor]]
* [[インテル|Intel]] [[:en:Super-threading|Super-threading]]
75 ⟶ 74行目:
* [[:en:Raza Microelectronics Inc|Raza Microelectronics Inc]] XLR
 
=== 同時マルチスレッディング= ==
''[[同時マルチスレッディング]]を参照''
 
==== 概念= ===
もっとも進歩したタイプのマルチスレッディングは[[スーパースケーラ]] CPU に適用するものである。通常のスーパースケーラプロセッサは一つのスレッドから毎サイクル複数の命令を発行する。同時マルチスレッディング(SMT)ではスーパースケーラプロセッサは複数のスレッドから毎サイクル複数の命令を発行する。各シングルスレッドの[[命令レベルの並列性]]が限定されていることを認識し、この種のマルチスレッディングは、使用されていない命令発行スロットに関連した無駄を削減するため、スレッド間で利用できる並列性を活用しようとするものである。
 
86 ⟶ 85行目:
# サイクル i+2: スレッド A からの命令 j+3 、 スレッド C からの命令 m+1 とm+2 がすべて同時に発行される
 
==== 用語= ===
 
SMT をその他のマルチスレッディングの種類と区別するため、同時に一つのスレッドからの命令しか発行できない場合には[[:en:Temporal multithreading|一時マルチスレッディング]](Temporal multithreading)という用語が用いられる。
 
==== ハードウェアのコスト= ===
''インターリーブ''型マルチスレッディングで議論したハードウェアのコストに加え、SMT は 各パイプラインのステージが処理する命令のスレッド ID を''各命令ごとに''認識するコストがかかる。さらに多数のアクティブのためキャッシュや TLB などの共有リソースを大きくしなければならない。
 
==== = ===
* [[DEC Alpha|Alpha AXP]] EV8 (未完成)
* [[インテル|Intel]] [[ハイパースレッディング・テクノロジー|Hyperthreading]]
99 ⟶ 98行目:
** [[Cell|Cell プロセッサ]]内の Power Processing Element (PPE)
 
=== 実装に固有の課題= ==
 
研究の主な領域は、実行可能スレッドのリストの中から次に実行するものを高速に選択し、同時に実行可能およびストールしたスレッドのリストを管理するスレッドスケジューラである。スレッドスケジューラは、完全にソフトウェアでも完全にハードウェアでも、ハード/ソフトの組み合わせでも実現することができる。
107 ⟶ 106行目:
もしマルチスレッディングの方法として'''すべての'''ソフトウェアから見える状態、権限管理レジスタ、TLB などを含めて複製するのであれば、それは各スレッドに[[仮想機械|仮想マシン]]を有効にすることである。これにより各スレッドが自分のオペレーティングシステムを同じプロセッサ上で実行できる。一方で、もしユーザーモードの状態のみが保存されるのであれば、ハードウェアへの要求は少なく、同じダイエリア/コストでより多くのスレッドが一度にアクティブに動作できるようになる。
 
=== 関連項目= ==
* [[スレッド|スレッド]]
* [[同時マルチスレッディング]](Simultaneous multithreading), SMT