マルチスレッド (コンピュータアーキテクチャ)

Interleaved/Temporal multithreadingEdit

Main article:

Coarse-grained multithreadingEdit

最も単純なタイプのマルチスレッドは、通常は長い待ち時間のストールを発生させるイベントによってブロックされるまで、1 つのスレッドが実行されるときに発生します。 このようなストールは、オフチップ メモリにアクセスしなければならないキャッシュ ミスで、データが戻ってくるまでに何百もの CPU サイクルがかかるかもしれません。 スレッドプロセッサーは、ストールの解消を待つ代わりに、実行準備が整った別のスレッドに実行を切り替えます。

たとえば、

  1. Cycle i: スレッド A からの命令 j が発行される
  2. Cycle i + 1: スレッド A からの命令 j + 1 が発行される
  3. Cycle i + 2: すべてのキャッシュで失敗するロード命令であるスレッド A からの命令 j + 2 が発行される
  4. サイクルが終了したとき

    スレッド プロセッサのデータ転送が再開し、前のスレッドのデータが届いたときだけ前のスレッドを実行可能状態のリストに戻しました。

  5. i + 3 サイクル: スレッド スケジューラーが呼び出され、スレッド B に切り替わる
  6. i + 4 サイクル: スレッド B からの命令 k が発行される
  7. i + 5 サイクル: スレッド B からの命令 k + 1 が発行される

コンセプト的には、リアルタイム OS で使われる協調的マルチタスキングのように、ある種のイベント時に待つ必要があるタスクに自発的に執行時間を割かせるというものです。

マルチスレッド ハードウェア サポートの目標は、ブロックされたスレッドと実行可能な別のスレッドをすばやく切り替えられるようにすることです。 この目標を達成するために、ハードウェアのコストは、プログラムの可視レジスタと、いくつかのプロセッサ制御レジスタ (プログラム カウンターなど) を複製することです。 あるスレッドから別のスレッドへの切り替えは、ハードウェアがあるレジスタセットから別のレジスタセットに切り替えることを意味します。アクティブなスレッド間を効率的に切り替えるには、アクティブな各スレッドが独自のレジスタセットを持つ必要があります。 たとえば、2 つのスレッドをすばやく切り替えるには、レジスタ ハードウェアを 2 回インスタンス化する必要があります。

マルチスレッドに対する追加のハードウェア サポートにより、スレッドの切り替えを 1 CPU サイクルで実行できるようになり、パフォーマンスが向上しました。

マイクロコントローラーおよび組み込みプロセッサの多くのファミリーは、割り込みの迅速なコンテキスト切り替えを可能にするために、複数のレジスタ バンクを備えています。 このようなスキームは、ユーザー プログラム スレッドと割り込みスレッド間のブロック マルチスレッドの一種と考えることができます。

インターリーブ マルチスレッド

Main article: バレルプロセッサ

インターリーブマルチスレッディングの目的は、実行パイプラインからすべてのデータ依存性ストールを取り除くことである。 1 つのスレッドが他のスレッドから比較的独立しているため、あるパイプライン ステージにある命令が、パイプライン内の古い命令からの出力を必要とする可能性は低くなります。 概念的には、オペレーティング システムで使用されるプリエンプティブ マルチタスクに似ています。類推すると、各アクティブ スレッドに与えられるタイムスライスは 1 CPU サイクルです。

  • サイクル i + 2: スレッド C からの命令が発行される。
  • このタイプのマルチスレッドは、最初はバレル処理と呼ばれ、バレルの碑はパイプライン ステージとその実行スレッドを表しています。

    ブロック タイプのマルチスレッドで説明したハードウェア コストに加え、インターリーブ マルチスレッドには、各パイプライン ステージが処理中の命令のスレッド ID を追跡するという追加のコストがあります。 また、パイプラインで同時に実行されるスレッドが増えるため、異なるスレッド間のスラッシュを回避するために、キャッシュや TLB などの共有リソースをより大きくする必要があります。

    最も高度なマルチスレッドのタイプは、スーパースカラー プロセッサに適用されます。 通常のスーパースカラ プロセッサが CPU サイクルごとに 1 つのスレッドから複数の命令を発行するのに対し、同時マルチスレッド (SMT) では、スーパースカラ プロセッサが CPU サイクルごとに複数のスレッドから命令を発行することができます。

    たとえば、

    1. 1 サイクル: スレッド A からの命令 j および j + 1 とスレッド B からの命令 k が同時に発行されます。
    2. Cycle i + 2: スレッド A からの命令 j + 3 とスレッド C からの命令 m + 1 および m + 2 がすべて同時に発行される

    他のタイプのマルチスレッドを SMT と区別するために、「テンポラリー マルチスレッド」という用語が、一度にひとつのスレッドからのみ命令を発行できる場合を示すために使用されています。

    インターリーブ マルチスレッドについて説明したハードウェア コストに加えて、SMT には、各パイプライン ステージが処理中の各命令のスレッド ID を追跡するコストが追加されます。

    実装には、DEC (後の Compaq) EV8 (未完成)、Intel Hyper-Threading Technology、IBM POWER5、Sun Microsystems UltraSPARC T2、Cray XMT、および AMD Bulldozer と Zen マイクロアーキテクチャが含まれます。