ハードウェアマルチスレッディング
研究の主な領域は、実行可能スレッドのリストの中から次に実行するものを高速に選択し、同時に実行可能およびストールしたスレッドのリストを管理するスレッドスケジューラである。スレッドスケジューラは、完全にソフトウェアでも完全にハードウェアでも、ハード/ソフトの組み合わせでも実現することができる。
それ以外の研究の領域として、キャッシュミス、スレッド間通信、DMA の完了など、どの種類のイベントがスレッドの切り替えを起こすべきか、という問題がある。
もしマルチスレッディングの方法としてすべてのソフトウェアから見える状態、権限管理レジスタ、TLB などを含めて複製するのであれば、それは各スレッドに仮想マシンを有効にすることである。これにより各スレッドが自分のオペレーティングシステムを同じプロセッサ上で実行できる。一方で、もしユーザーモードの状態のみが保存されるのであれば、ハードウェアへの要求は少なく、同じダイエリア/コストでより多くのスレッドが一度にアクティブに動作できるようになる。
もっともシンプルなタイプのマルチスレッディングは、一つのスレッドが、通常長い遅延のあるストールを発生させるイベントによりブロックされるまで動作しつづけるものである。こうしたストールはチップの外にあるメモリにアクセスする必要があり、データを取得して復帰するまで数百 CPU サイクルかかるキャッシュミスである可能性がある。スレッド化されたプロセッサは、ストールが解決されるのを待たず、動作の準備ができている別のスレッドに実行を切り替える。以前のスレッドにデータが到着した場合にのみ、以前のスレッドが実行可能なスレッドのリスト上に復帰する。
例:
サイクル i: スレッド A からの命令 j が発行される
サイクル i+1: スレッド A からの命令 j+1 が発行される
サイクル i+2: スレッド A からの命令 j+2 が発行され、すべてのキャッシュをミスする load 命令である
サイクル i+3: スレッドスケジューラが呼び出され、スレッド B に切り替える
サイクル i+4: スレッド B からの命令 k が発行される
サイクル i+5: スレッド B からの命令 k+1 が発行される
概念的には、リアルタイムオペレーティングシステムで使用される協調マルチタスクに似ている。これは、特定のイベントを待つ必要がある場合にタスクが自主的に実行時間を引き渡す。
多数のマイクロコントローラおよび組み込み用途のプロセッサファミリが、割り込みのための高速なコンテキストスイッチが可能なよう複数の高速なレジスタバンクを持っている。こうした戦略はユーザープログラムスレッドと割り込みスレッドの間のブロック型マルチスレッディングの一種と考えることができる。