5

だから私はアウトオブオーダー命令実行のためのトマスロアルゴリズムを理解しようとしています。これが私がこれまでに得たものです:

  • 命令は順番にフェッチされ、命令キューに格納されます。

  • レジスターの名前変更は次のどこかで行われます...? 私が理解していることから、これはレジスタにラベルを付けることで WAR/WAW の危険を回避することです。add r1,r2,r3 (1) add r3,r5,r6 (2) WAR ハザードがあり、r1 に追加する前に命令 (1) が r3 の古い値を読み取ることを確認する必要があるとします。したがって、命令キュー (?) 内で、ハードウェアがレジスタの名前を変更すると思います。

  • 予約ステーションに指示が出されます。私が理解していることから、各機能ユニットには独自の予約ステーションのセットがあります。しかし、それは、適切にタグ付けされたオペランドが共通データ バス上で利用可能な場合に、その機能ユニットが実行する命令のキュー (FIFO) のようなものでしょうか?

  • 命令は任意の順序で (順不同で) 終了する可能性があり、さらに多くの命令が来る可能性があるため... より多くの命令が入る前に、共通データ バスがレジスタ ファイルを更新する段階のようなものはありますか? リオーダーバッファが使用されていると聞いたことがあります。これは基本的に命令を順番に並べ替え (これは、命令に何らかのタグがあることを意味する必要があります)、レジスタの結果がレジスタファイルにコミットされます。

私が混乱しているのは、レジスタの名前変更の実装と、リザベーション ステーションの構造です。

助けてくれてありがとう。

4

2 に答える 2

6

Tomasuloのアルゴリズムは実際には特定のハードウェアに関連付けられておらず、実際、実際のマシンでは、レジスタの名前変更は通常、命令が命令キューに挿入される前に行われます。いくつかの基本的なポイントを理解しましょう。まず、プログラムで表現されているレジスタは論理レジスタです。次に、実際のハードウェアレジスタは物理レジスタと呼ばれます。Tomasuloのアルゴリズムは、論理レジスタを物理レジスタにマッピングするためのメカニズムにすぎません。実際のマシンでは、通常、論理レジスタを物理レジスタにマッピングする2つのテーブルがあります。1つは名前変更段階にあり、もう1つはコミット段階にあります。また、論理レジスタよりも多くの物理レジスタが必要です。これは基本的に次のように機能します。

  1. 論理入力ごとに、名前変更ステージのマッピングテーブルを調べて、現在その論理レジスタ値を保持している物理レジスタを見つけます。
  2. 論理出力ごとに、未使用の物理レジスタを見つけて、それに出力をマップします。名前変更ステージマッピングテーブルを更新します。使用可能な物理レジスタがない場合は、使用可能になるまで待ちます。
  3. コミット段階で、命令がコミットされるときに、命令の論理出力の古い論理から物理へのマッピングを新しいマッピングで上書きします。古いマッピングの一部であった物理レジスタを解放します。
  4. 予測ミス(またはパイプラインに何らかのスカッシュ)がある場合、コミットステージのテーブルが名前変更ステージのテーブルを上書きし、その間のパイプラインのすべてが吹き飛ばされます。

リザベーションステーションに関する部分は、実際にはアウトオブオーダーパイプラインの特定の実装であり、基本的に物理レジスタが付属しています。リザベーションステーションの概念を実際に持っていないマシンはたくさんあります。

ヘネシーとパターソンのコンピュータアーキテクチャに関する本は、この種のものに関する標準的な教科書です。私はこれをできるだけ簡単に説明しようとしましたが、このようなものを最適化するための文字通り何千もの提案があります。

于 2012-06-28T22:30:41.847 に答える