IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドの特許一覧

特許7403541メモリ順序付け違反チェックバッファの排出遅延を許容するための投機的命令ウェイクアップ
<>
  • 特許-メモリ順序付け違反チェックバッファの排出遅延を許容するための投機的命令ウェイクアップ 図1
  • 特許-メモリ順序付け違反チェックバッファの排出遅延を許容するための投機的命令ウェイクアップ 図2
  • 特許-メモリ順序付け違反チェックバッファの排出遅延を許容するための投機的命令ウェイクアップ 図3A
  • 特許-メモリ順序付け違反チェックバッファの排出遅延を許容するための投機的命令ウェイクアップ 図3B
  • 特許-メモリ順序付け違反チェックバッファの排出遅延を許容するための投機的命令ウェイクアップ 図4
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-12-14
(45)【発行日】2023-12-22
(54)【発明の名称】メモリ順序付け違反チェックバッファの排出遅延を許容するための投機的命令ウェイクアップ
(51)【国際特許分類】
   G06F 9/38 20180101AFI20231215BHJP
【FI】
G06F9/38 310F
G06F9/38 350A
【請求項の数】 20
(21)【出願番号】P 2021531323
(86)(22)【出願日】2020-03-27
(65)【公表番号】
(43)【公表日】2022-05-23
(86)【国際出願番号】 US2020025357
(87)【国際公開番号】W WO2020205570
(87)【国際公開日】2020-10-08
【審査請求日】2023-03-16
(31)【優先権主張番号】62/828,861
(32)【優先日】2019-04-03
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/671,097
(32)【優先日】2019-10-31
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【弁理士】
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【弁理士】
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【弁理士】
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ジョン カラマティアノス
(72)【発明者】
【氏名】眞下 達
(72)【発明者】
【氏名】クリシュナン ヴィー. ラマニ
(72)【発明者】
【氏名】スコット トーマス ビンガム
【審査官】坂東 博司
(56)【参考文献】
【文献】特表2001-520415(JP,A)
【文献】特表2002-508568(JP,A)
【文献】特開平10-320198(JP,A)
【文献】米国特許出願公開第2015/0100766(US,A1)
【文献】特開2006-048696(JP,A)
【文献】米国特許第7529911(US,B1)
【文献】米国特許第7293161(US,B1)
【文献】米国特許出願公開第2012/0221835(US,A1)
【文献】米国特許出願公開第2012/0303934(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
(57)【特許請求の範囲】
【請求項1】
ロード依存命令を投機的に実行するための方法であって、
完了したロード命令についてメモリ順序付け整合性キューが満杯であることを検出することと、
前記完了したロード命令によってロードされたデータを、前記メモリ順序付け整合性キューが満杯である場合にデータを記憶するための記憶位置に記憶することと、
前記完了したロード命令に依存する命令を投機的に実行することと、
前記メモリ順序付け整合性キューにおいてスロットが使用可能になったことに応じて、前記ロード命令を再実行することと、
前記再実行されたロード命令についてロードされたデータを受信したことに応じて、前記再実行されたロード命令についてロードされたデータを、前記記憶位置に記憶されている、前記完了したロード命令によってロードされたデータと比較することによって、データの誤推測をテストすることと、を含む、
方法。
【請求項2】
前記再実行されたロード命令についてロードされたデータが、前記完了したロード命令によってロードされたデータと同じであると判別したことに応じて、前記メモリ順序付けルールに対する違反が発生していないと判別することをさらに含む、
請求項1の方法。
【請求項3】
ロードキューから前記ロード命令を削除することと、
前記ロード命令を前記メモリ順序付け整合性キューに記憶することと、
前記メモリ順序付け整合性キュー内の前記ロード命令について前記メモリ順序付け整合性ルールの違反をテストすることと、をさらに含む、
請求項2の方法。
【請求項4】
前記再実行されたロード命令についてロードされたデータが、前記完了したロード命令によってロードされたデータと同じでないと判別したことに応じて、前記メモリ順序付けセマンティックに対する違反が発生していると判別することをさらに含む、
請求項1の方法。
【請求項5】
前記違反の発生に応じて、前記ロード命令をフラッシュして再実行することをさらに含む、
請求項4の方法。
【請求項6】
前記完了したロード命令に依存する命令は、前記完了したロード命令によってロードされたデータを消費する命令を含む、
請求項1の方法。
【請求項7】
前記メモリ順序付けルールは、ロードからロードへの順序付けルールを含む、
請求項1の方法。
【請求項8】
前記メモリ順序付けルールは、ストアからロードへの順序付けルールを含む、
請求項1の方法。
【請求項9】
前記記憶位置は、レジスタファイル内の1つのレジスタであって、前記完了したロード命令の宛先レジスタであるレジスタと、ロード依存命令のメモリ順序付け整合性セマンティクスの違反をテストするためにロードされたデータを記憶するための専用のメモリと、を含む、
請求項1の方法。
【請求項10】
ロード依存命令を投機的に実行するためのプロセッササブシステムであって、
メモリ順序付け整合性キューと、
ロード/ストアユニットと、を備え
前記ロード/ストアユニットは、
完了したロード命令についてメモリ順序付け整合性キューが満杯であることを検出することと、
前記完了したロード命令によってロードされたデータを、前記メモリ順序付け整合性キューが満杯である場合にデータを記憶するための記憶位置に記憶することと、
前記完了したロード命令に依存する命令を投機的に実行するのを可能にすることと、
前記メモリ順序付け整合性キューにおいてスロットが使用可能になったことに応じて、前記ロード命令を再実行することと、
前記再実行されたロード命令についてロードされたデータを受信したことに応じて、前記再実行されたロード命令についてロードされたデータを、前記記憶位置に記憶されている、前記完了したロード命令によってロードされたデータと比較することによって、データの誤推測をテストすることと、
を行うように構成されている、
前記プロセッササブシステム。
【請求項11】
前記ロード/ストアユニットは、
前記再実行されたロード命令についてロードされたデータが、前記完了したロード命令によってロードされたデータと同じであると判別したことに応じて、前記メモリ順序付けルールに対する違反が発生していないと判別するように構成されている、
請求項10のプロセッササブシステム。
【請求項12】
前記ロード/ストアユニットは、
ロードキューから前記ロード命令を削除することと、
前記ロード命令を前記メモリ順序付け整合性キューに記憶することと、
前記メモリ順序付け整合性キュー内の前記ロード命令について前記メモリ順序付け整合性ルールの違反をテストすることと、
を行うように構成されている、
請求項11のプロセッササブシステム。
【請求項13】
前記ロード/ストアユニットは、
前記再実行されたロード命令についてロードされたデータが、前記完了したロード命令によってロードされたデータと同じでないと判別したことに応じて、前記メモリ順序付けセマンティックに対する違反が発生していると判別するように構成されている、
請求項10のプロセッササブシステム。
【請求項14】
前記ロード/ストアユニットは、
前記違反の発生に応じて、前記ロード命令をフラッシュして再実行するように構成されている、
請求項13のプロセッササブシステム。
【請求項15】
前記完了したロード命令に依存する命令は、前記完了したロード命令によってロードされたデータを消費する命令を含む、
請求項10のプロセッササブシステム。
【請求項16】
前記メモリ順序付けルールは、ロードからロードへの順序付けルールを含む、
請求項10のプロセッササブシステム。
【請求項17】
前記メモリ順序付けルールは、ストアからロードへの順序付けルールを含む、
請求項10のプロセッササブシステム。
【請求項18】
前記記憶位置は、レジスタファイル内の1つレジスタであって、前記完了したロード命令の宛先レジスタであるレジスタと、ロード依存命令のメモリ順序付け整合性セマンティクスの違反をテストするためにロードされたデータを記憶するための専用のメモリと、を含む、
請求項10のプロセッササブシステム。
【請求項19】
ロード依存命令を投機的に実行するためのプロセッサであって、
メモリ順序付け整合性キューと、
ロード/ストアユニットと、
1つ以上の機能ユニットと、を備え、
前記ロード/ストアユニットは、
完了したロード命令についてメモリ順序付け整合性キューが満杯であることを検出することと、
前記完了したロード命令によってロードされたデータを、前記メモリ順序付け整合性キューが満杯である場合にデータを記憶するための記憶位置に記憶することと、
前記完了したロード命令に依存する命令を投機的に実行するのを可能にすることと、
前記メモリ順序付け整合性キューにおいてスロットが使用可能になったことに応じて、前記ロード命令を再実行することと、
前記再実行されたロード命令についてロードされたデータを受信したことに応じて、前記再実行されたロード命令についてロードされたデータを、前記記憶位置に記憶されている、前記完了したロード命令によってロードされたデータと比較することによって、データの誤推測をテストすることと、
を行うように構成されており、
前記機能ユニットは、
前記完了したロード命令に依存する命令を投機的に実行するように構成されている、
プロセッサ。
【請求項20】
前記メモリ順序付けルールは、ロードからロードへの順序付けルール、及び、ストアからロードへの順序付けルールのうち何れかを含む、
請求項19のプロセッサ。
【発明の詳細な説明】
【技術分野】
【0001】
(関連出願の相互参照)
本願は、2019年10月31日に出願された米国特許出願第16/671,097号、及び、2019年4月3日に出願された米国仮特許出願第62/828,861号の利益を主張し、これらの内容が言及することによって本明細書に組み込まれる。
【0002】
(政府権益に関する記述)
本発明は、米国エネルギー省(DOE)から授与されたローレンスリバモアナショナルセキュリティ(主契約番号:DE-AC52-07NA27344、下請契約番号:B620717)のPathForwardプロジェクトの下で、政府の支援を受けてなされたものである。米国政府は、本発明において一定の権利を有する。
【背景技術】
【0003】
アウトオブオーダープロセッサは、命令を順不同で実行するが、プログラムで指定されたとおりに実行されるように、特定の制約に従う。制約の1つのクラスは、特定のメモリ順序付けセマンティクス(memory ordering semantics)に従うことを保証することを含む。メモリ順序付けのセマンティクスに関連する制約は、性能を向上させるために緩和される場合があるが、実行の正確性を保証するために追加のステップを実行する必要がある。
【0004】
添付図面と併せて例として与えられる以下の説明から、より詳細な理解を得ることができる。
【図面の簡単な説明】
【0005】
図1】1つ以上の開示された実施形態を実施し得る例示的なデバイスのブロック図である。
図2】一例による、図1のプロセッサ内に配置された命令実行パイプラインのブロック図である。
図3A】満杯のメモリ順序付け整合性キューに配置するのに適格なロード命令に依存する命令の投機的実行をトリガーするための動作例を示す図である。
図3B】メモリ順序付け整合性キューにおいて、そのキューがロード命令に対して以前に満杯であったスロットが空きになったことに応じた例示的な動作を示す図である。
図4】一例による、メモリ順序付け整合性キューが満杯の場合に、ロード命令に依存する命令を投機的に実行する方法のフロー図である。
【発明を実施するための形態】
【0006】
ロード依存命令を投機的に実行するための技法が提供される。この技術は、完了したロード命令に対してメモリ順序付け整合性キューが満杯であることを検出することを含む。また、この技術は、完了したロード命令によってロードされたデータを、メモリ順序付け整合性キューが満杯である場合にデータを記憶するための記憶位置に記憶することを含む。この技術は、完了したロード命令に依存する命令を投機的に実行することをさらに含む。この技術は、メモリ順序付け整合性キューにおいてスロットが使用可能になったことに応じて、ロード命令を再実行することも含む。さらに、この技術は、再実行されたロード命令についてロードされたデータを受信したことに応じて、再実行されたロード命令についてロードされたデータを、記憶位置に記憶されている、完了したロード命令によってロードされたデータと比較することによって、データの誤推測をテストすることを含む。
【0007】
ロード依存命令を投機的に実行するためのプロセッササブシステムが提供される。プロセッササブシステムは、メモリ順序付け整合性キューと、ロード/ストアユニットと、を含む。ロード/ストアユニットは、完了したロード命令についてメモリ順序付け整合性キューが満杯であることを検出し、完了したロード命令によってロードされたデータを、メモリ順序付け整合性キューが満杯になった場合にデータを記憶するための記憶位置に書き込み、メモリ順序付け整合性キューにおいてスロットが使用可能になったことに応じて、完了したロード命令に依存する命令が投機的に実行されるのを可能にし、ロード命令を再実行し、再実行されたロード命令についてロードされたデータを受信したことに応じて、再実行されたロード命令についてロードされたデータを、記憶位置に記憶されている、完了したロード命令によってロードされたデータと比較することによって、データの誤推測をテストする。
【0008】
ロードに依存する命令を投機的に実行するためのプロセッサが提供される。プロセッサは、メモリ順序付け整合性キューと、ロード/ストアユニットと、1つ以上の機能ユニットと、を含む。ロード/ストアユニットは、完了したロード命令についてメモリ順序付け整合性キューが満杯であることを検出し、完了したロード命令によってロードされたデータを、メモリ順序付け整合性キューが満杯になった場合にデータを記憶するための記憶位置に書き込み、メモリ順序付け整合性キューにおいてスロットが使用可能になったことに応じて、完了したロード命令に依存する命令が投機的に実行されるのを可能にし、ロード命令を再実行し、再実行されたロード命令についてロードされたデータを受信したことに応じて、再実行されたロード命令についてロードされたデータを、記憶位置に記憶されている、完了したロード命令によってロードされたデータと比較することによって、データの誤推測をテストする。1つ以上の機能ユニットは、完了したロード命令に依存する命令を投機的に実行する。
【0009】
図1は、本開示の態様が実施される例示的なデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲーミングデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、又は、タブレットコンピュータを含む。デバイス100は、プロセッサ102と、メモリ104と、ストレージ106と、1つ以上の入力デバイス108と、1つ以上の出力デバイス110と、を含む。デバイス100は、オプションとして、入力ドライバ112及び出力ドライバ114を含んでもよい。デバイス100が、図1に示されていない追加の構成要素を含んでもよいことを理解されたい。
【0010】
プロセッサ102は、中央処理装置(CPU)、グラフィックスプロセッシングユニット(GPU)、同一のダイ上に配置されたCPU及びGPU、又は、1つ以上のプロセッサコアを含み、各プロセッサコアは、CPU又はGPUである。メモリ104は、プロセッサ102と同一のダイ上に配置されてもよいし、プロセッサ102とは別に配置されてもよい。メモリ104は、例えば、ランダムアクセスメモリ(RAM)、ダイナミックRAM、キャッシュ等の揮発性又は不揮発性メモリを含む。
【0011】
ストレージ106は、固定ストレージ又はリムーバブルストレージ(例えば、ハードディスクドライブ、ソリッドステートドライブ、光学ディスク、フラッシュドライブ等)を含む。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイク、加速度計、ジャイロスコープ、生体スキャナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信のための無線ローカルエリアネットワークカード)を含む。出力デバイス110は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上のライト、アンテナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信のための無線ローカルエリアネットワークカード)を含む。
【0012】
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信することを可能にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信することを可能にする。入力ドライバ112及び出力ドライバ114は、オプションの構成要素であり、入力ドライバ112及び出力ドライバ114が存在しない場合には、デバイス100が同様に動作することに留意されたい。
【0013】
図2は、一例による、図1のプロセッサ102内に配置される命令実行パイプライン200のブロック図である。命令実行パイプライン200は、メモリから命令を取り出して実行し、メモリにデータを出力し、命令実行パイプライン200内の要素(例えば、レジスタファイル218内のレジスタ等)の状態を変更する。
【0014】
命令実行パイプライン200は、命令キャッシュ202を介してシステムメモリ(メモリ104等)から命令をフェッチする命令フェッチユニット204と、フェッチされた命令を復号するデコーダ208と、計算を実行して命令を処理するように構成された機能ユニット216と、データキャッシュ220を介してシステムメモリからデータをロードし、システムメモリにデータを記憶するロード/ストアユニット214と、命令についての作業データを記憶するレジスタを含むレジスタファイル218と、を含む。再順序付けバッファ210は、現在実行中(in-flight)の命令を追跡し、実行中の順序が正しくない実行を可能にするにも関わらず、命令の順序通りのリタイアを保証する。「実行中の」命令は、再順序付けバッファ210によって受信されているが、結果をプロセッサの構造上の状態(例えば、レジスタファイルに書き込まれた非投機的な結果等)にコミットさせていない命令を指す。予約ステーション212は、機能ユニット216上で実行されるのを待機中の命令を維持し、命令オペランドを追跡する。全てのオペランドが特定の命令の実行のために準備されている場合、予約ステーション212は、実行のために機能ユニット216又はロード/ストアユニット214に命令を送信する。完了した命令は、再順序付けバッファ210へのリタイアのためにマーク付けされ、再順序付けバッファキュー210の先頭でリタイアされる。リタイアとは、プロセッサの構造上の状態に命令の結果をコミットする動作を指す。例えば、加算命令によって、アーキテクチャレジスタの最も新しい非投機的コピーに加算結果を書き込むこと、ロード命令によって、アーキテクチャレジスタの最も新しい非投機的コピーにロードされた値を書き込むこと、又は、分岐命令によって、新たな位置にジャンプする命令フローを非投機的に生じさせることは、全て命令のリタイアの例である。
【0015】
命令実行パイプライン200の様々な要素は、共通データバス222を介して通信する。例えば、機能ユニット216及びロード/ストアユニット214は、結果を共通データバス222に書き込み、これは、依存命令の実行のために予約ステーション212によって読み込むことができ、また、実行を終了させた実行中命令(in-flight instruction)の最終的な処理結果として再順序付けバッファ210によって読み込むことができる。ロード/ストアユニット214は、共通データバス222からデータを読み込む。例えば、ロード/ストアユニット214は、共通データバス222から、完了した命令の結果を読み込み、命令を記憶するためにデータキャッシュ220を介してメモリに結果を書き込む。
【0016】
命令実行パイプライン200は、(他の命令の中で)ロード命令及びストア命令を実行することができる。ロード命令は、メモリからデータをロードし、そのデータを、レジスタファイル218内のレジスタに配置する命令である。ストア命令は、レジスタからメモリ位置にデータを記憶する命令である。ストア又はロードの何れの場合も、指定されたアドレスは、1つ以上のレジスタの内容及び/又は命令自体で指定された1つ以上の値に基づいて計算される。さらに、仮想メモリアドレスを指定するロード又はストアの場合、これらのアドレスは物理アドレスに変換される。
【0017】
ロード/ストアユニット214は、ソフトウェアがロード及びストアの実行を監視する相対的な順序を指定するメモリ整合性モデルをサポートする。一例では、ロード/ストアユニット214は、ロード命令が他のスレッドのロード命令に対して順番に実行されるようにソフトウェアに見えるロード順序付け整合性モデルを実装する。詳細には、このロード順序付けメモリ整合性モデルは、次のように動作する。予約ステーション212は、仮想アドレスを生成するために、機能ユニット216にロード命令を発行する(例えば、ロード命令によって指定された方法で仮想アドレスを計算する)。次に、機能ユニット216は、ロード命令をロード/ストアユニット214に送信し、ロード/ストアユニット214は、ロード命令を実行し、データ変換ルックアサイドバッファ(TLB)226から物理アドレスへの変換をフェッチし、データキャッシュ220からの物理アドレスに基づいてデータをフェッチする。いくつかの実装形態では、ロード/ストアユニット214は、ロード命令がデコーダ208からリオーダーバッファ210にディスパッチされるのに応じて、ロードキュー224にロードを記憶する。他の実装形態では、ロードは、他の技術的に実行可能な任意の時間にロードキュー224に配置される。
【0018】
ロード命令によって要求されたデータが戻されると、ロード命令は、完了したと見なされる。しかしながら、リオーダーバッファ210は、メモリ整合性違反がチェックされるまで、ロード命令をリタイアに適格であるとマークしない。ロード命令についてメモリ整合性モデルへの違反が発生した場合、ロード/ストアユニット214は、ロード命令(及び、様々な状況において、そのロード命令よりも新しい命令)を命令パイプライン200からフラッシュさせ、ロード命令を再実行させる。いくつかの実装では、ロードからロードへの順序付けへの違反と、ストアからロードへの順序付けへの違反と、の2種類の違反が発生する可能性がある。
【0019】
ロードからロードへの順序付けの定義は、メモリ整合性モデルによって適用される順序付けルールに依存する。いくつかの実装では、メモリの順序付けでは、ロードが同じアドレスにアクセスするかどうかに関係なく、全てのロードがプログラムの順序で実行されているように見える必要がある。ロードからロードへの順序付けは、ロードがプログラムの順序でリタイアするのに適格となった場合に、ロードが互いに同じ値を観察するかどうかをチェックすることによって実行される。このような実行は、データキャッシュ220への外部プローブ及びデータキャッシュ220の削除を監視することによって達成される。アドレス(A)への外部プローブがデータキャッシュ220に到着し、アドレスAから読み取る命令がロード順序付けキュー228にある場合、ロード順序付けキュー228内の最も古い命令がロードからロードへの順序付け違反を経験したと判別される。アドレスAのロード命令がリオーダーバッファ210内の最も古いロードになる前に、アドレスAのデータがデータキャッシュ220から削除される場合、その命令は、ロードからロードへの順序付け違反を経験している。ロード命令のロードからロードへの順序付け違反の場合、ロード/ストアユニット214は、そのロード命令を命令実行パイプライン200からフラッシュして、再実行させる。
【0020】
ストアからロードへの順序付けは、プログラムの順序(つまり、命令を実行するソフトウェアの制御フローに従って命令が実行されると想定されている順序)で定義されているとおりに、全てのロードがストア動作からデータを受信することを要求するメモリ順序付けルールである。命令実行パイプライン200は、ロード命令及びストア命令を含む命令を順不同で実行することができるので、ロード命令が古いデータを消費するのを防ぐために、同じスレッドの命令間でストアからロードへの順序付けが実施される。
【0021】
アウトオブオーダープロセッサ(例えば、プロセッサ102)においてメモリ順序付けルールを実施するために、命令パイプライン200は、ロード及びストア命令を順不同で実行することが可能にされ、場合によっては実行する。ロード命令が完了したが、リタイアする準備ができていない場合、命令パイプライン200は、そのロード命令を監視して、1つ以上のメモリ順序付けルールに違反していないかどうかを確認する。ロード命令は、そのロード命令でメモリ順序付けルールの違反が発生する可能性がない場合に、リタイアする準備ができている。ロード命令の完了とリタイアの準備が同時に行われる可能性があり、その場合、そのロード命令のメモリ順序付けルールの違反のチェックは行われない。違反が発生した場合、ロード命令はパイプライン200からフラッシュされ、再実行される。再実行メカニズムによっては、ロード命令よりも新しい命令等のような他の命令もフラッシュされる。違反が発生しない場合、ロード命令はリタイアすることが可能にされ、これは、ロード命令の結果が命令パイプライン200のアーキテクチャ状態にコミットされることを意味する。違反をチェックするためのいくつかの例示的な技術を以下に説明する。
【0022】
いくつかの例では、ロードからロードへの順序付けの違反は次の方法でチェックされる。ロード命令が完了し、そのロード命令が、ロード順序付けキュー228内の最も古いロード命令ではないことに応じて、ロード/ストアユニット214は、その命令をロードキュー224から削除し、その命令をロード順序付けキュー228に配置する。ロード命令が、そのロード命令が完了したときにロード順序付けキュー228内の最も古いロード命令である場合、ロード/ストアユニット214は、その命令をロードキュー224から削除し、その命令をロード順序付けキュー228に配置しない。
【0023】
ロード命令がロード順序付けキュー228にある間、ロード/ストアユニット214は、ロードされたデータを記憶する最下位レベルのキャッシュ(例えば、L1キャッシュ)内のキャッシュラインを監視する。次の何れかの場合、つまり、キャッシュラインが(例えば、別のキャッシュラインに置き換えられるため)キャッシュから削除された場合、又は、ロード命令を実行したスレッドとは異なるスレッドによってキャッシュラインがアクセスされた場合(アクセスは、キャッシュで受信されたプローブによって識別される)、ロード/ストアユニット214は、ロードからロードへの順序付け違反が発生したと判別する。ロード命令がロード順序付けキュー228で監視されなくなるまでに違反が発生しなかった場合、ロード/ストアユニット214は、ロード命令をロード順序付けキュー228から削除する。ロード命令が、ロード順序付けキュー228及びロードキュー224内のそのスレッドの最も古いロード命令である状況では、ロード命令は、ロード順序付けキュー228において監視されなくなる。
【0024】
いくつかの例では、ストアからロードへの順序付けの違反は次の方法でチェックされる。ロード命令が完了し、そのロード命令がアウトオブオーダーバッファ230への配置に適格であることに応じて、ロード/ストアユニット214は、ロード命令をアウトオブオーダーバッファ230に配置する。ロード命令は、ロード命令がストアからロードへの順序付けルールの違反をコミットする可能性がある状況において、アウトオブオーダーバッファ230に配置するのに適格である。ロード命令よりも古いストア命令が少なくとも1つあり、ロード/ストアユニット214がより古いストア命令の物理アドレスを未だ決定していない場合、このような違反の可能性がある。ロード命令がアウトオブオーダーバッファ230に配置するのに適格でない場合、ロード/ストアユニット214は、ロード命令をアウトオブオーダーバッファ230に配置しない。
【0025】
アウトオブオーダーバッファ230内にある間、ロード/ストアユニット214は、以下の方法でストアからロードへの順序付けルールの違反をチェックする。ロード命令よりも古いストア命令の物理アドレスを決定すると、ロード/ストアユニット214は、その物理アドレスをロード命令の物理アドレスと比較する。一致する場合、ロード/ストアユニット214は、違反が発生したと判別し、一致がない場合、ロード/ストアユニット214は、そのストア命令に対して違反が発生していないと判別する。ロード命令よりも古く、物理アドレスが未だ決定されていないストア命令がこれ以上ないことに応じて、ロード/ストアユニット214は、ロード命令の違反がもはや不可能であると判別し、ロード命令をアウトオブオーダーバッファ230から削除する。
【0026】
ロードからロードへの順序付けとストアからロードへの順序付けの両方を実施する場合に、ロード命令がロード順序付けキュー228又はアウトオブオーダーバッファ230の何れかに未だある場合には、ロード命令がこれらのキューの何れかから削除されたとしても、ロード命令はリタイアされない。この状況では、ロード命令が何れのキューにも存在しない状況で、ロード命令はリタイアされる。それぞれがそれぞれのキューを持つ、代替又は追加のメモリ順序付けルールを使用することもできる。このような状況では、ロード命令がこのような全てのキューに存在しないことに応じて、ロード命令はリタイアされる。ロード順序付けキュー、アウトオブオーダーバッファ、及び/又は、メモリ整合性モデルの検証に使用される他の任意のキューを、本明細書ではメモリ順序付け整合性キュー232と呼ぶ。
【0027】
状況によっては、メモリ順序付け整合性キュー232の1つ以上が満杯になる。ロード命令が完了し、メモリ順序付け整合性キュー232に配置するのに適格であるが、そのキューが満杯である場合、ロード命令は、そのメモリ順序付け整合性キュー232に配置されない。その状況では、ロード命令は、満杯であるメモリ順序付け整合性キュー232内でスロットが空きになるまで、ロードキュー224に留まる。このようなロード命令は、本明細書では、メモリ順序付け整合性キュー232内のスロットが空きになるのを待機しているロード命令と呼ぶことがある。
【0028】
1つの技術では、ロード命令がメモリ順序付け整合性キュー内のスロットが空きになるのを待っている間、ロード命令に依存する命令は、実行のために発行されない。命令が、ロード命令によってロードされたデータをオペランドとして消費する場合、その命令は、ロード命令に依存する。この技術は、ロード命令に依存する命令に対してメモリ順序付けルールの違反が発生したかどうかを識別するための特別なステップを必要としないという点で「単純」である。より具体的には、このような命令は単に実行されないので、このような違反検出は必要ない。しかしながら、このような依存命令を投機的に実行し、メモリ順序付けルールの違反を検出するメカニズムを使用することで、性能を向上させることができる。
【0029】
図3Aは、満杯のメモリ順序付け整合性キュー232に配置するのに適格なロード命令に依存する命令の投機的実行をトリガーするための動作例を示す図である。ロード/ストアユニット214は、実行のためにロード命令301を受け取り、ロード命令301をロードキュー224に配置する。ロード/ストアユニット214は、ロード命令301によって指定されるように、アドレス計算302を実行する。アドレス計算302は、ロード命令301によって明示的又は暗黙的に指定された演算及びオペランドに基づいて、データがロードされるアドレスを計算することを含む。ロード命令301がアドレス変換を必要とする場合(例えば、ロード命令301が仮想アドレスを指定するため)、ロード/ストアユニット214は、動作304でデータTLB226からアドレス変換を要求し、データTLB226は、動作306において変換されたアドレスを戻す。動作308において、ロード/ストアユニット214は、データキャッシュ220からそのアドレスでデータを要求し、データキャッシュ220は、動作310において要求されたデータを戻す。この時点で、ロード命令は完了したと見なされる。しかしながら、ロード/ストアユニット214は、メモリ命令を順不同で実行するので、ロード/ストアユニット214は、メモリ順序付けルールの違反をチェックする。本明細書の他の箇所で説明するように、ロード命令が少なくとも1つのメモリ順序付け整合性キュー232に配置されるのに適格である場合、ロード/ストアユニット214は、ロード命令をそのようなキューに配置しようとする。
【0030】
しかしながら、図3Aの動作では、キュー232が満杯である。したがって、動作312で、ロード/ストアユニット214は、ロード命令が配置されるメモリ順序付け整合性キュー232の少なくとも1つが満杯であることを検出する。本明細書の他の箇所で説明するように、全てのロード命令が全てのメモリ順序付け整合性キュー232に配置されるわけではない。ロード命令がメモリ順序付け整合性キュー232に配置されるかされないかについての議論は、本明細書の他の箇所で提供される。一般に、ロード命令は、メモリ順序付け整合性キュー232に関連するタイプの違反が発生する可能性がある場合に、メモリ順序付け整合性キュー232に配置される。ロード命令は、そのタイプの違反が発生することがもはや不可能である場合、メモリ順序付け整合性キュー232に配置されない。動作312は、ロード/ストアユニット214が、ロード命令が配置されるメモリ順序付け整合性キュー232の少なくとも1つが満杯であることを検出することを含む。
【0031】
検出312に応じて、ロード/ストアユニット214は、ロードキュー224にロード命令301を保持し、動作314において、データキャッシュ220から取得されたデータを、取得されたデータの記憶位置に記憶する。一例では、記憶位置は、レジスタファイル218である。別の例では、記憶位置は、そのようなロードデータを一時的に記憶するためのメモリ320である。ロード/ストアユニット214は、その後、取得されたデータの記憶位置に記憶されたデータを使用して、投機的に実行されたロード依存命令のデータ推測の違反をチェックする。レジスタファイル218を記憶位置として使用することにより、データ推測の違反をチェックするために(チップ面積に関して)追加のコストがかからないという利点があり、さらに、メモリ順序付け整合性キュー232に配置されるロード命令に割り当てられたレジスタファイル218ポートが読み取り/書き込みである場合、そのポートは、違反をチェックするために「フリー」に使用することができる。
【0032】
図3Bは、メモリ順序付け整合性キュー232内のスロットが、そのキュー232がロード命令に対して以前に満杯であったスロットが空きになったことに応じた動作例を示している。いくつかの実装形態では、図3Bの動作は、ロード命令が待機している全てのメモリ順序付け整合性キュー232においてスロットが空きになることに応じて発生する。他の実装形態では、図3Bの動作は、ロード命令が待機しているメモリ順序付け整合性キュー232の1つでスロットが空きになる毎に発生する。一般に、図3Bの動作は、メモリ順序付け整合性キュー232が満杯であるためにロードキュー224に保持されるロード依存命令のデータ誤推測のチェックを示している。
【0033】
動作330において、ロード/ストアユニット214は、ロード命令301を再実行する。この再実行は、データキャッシュ220からデータをフェッチすることを含む。動作332において、ロード/ストアユニット214は、再実行されたロード命令のために取得されたデータを、元のロード命令から取得されたデータのために記憶位置に記憶されたデータと比較する。データが同じである場合、ロード命令に依存する命令についてデータの誤推測は発生しておらず、ロード/ストアユニット214は、パイプラインをフラッシュしたり、ロード命令を再実行したりしない。データが同じでない場合、データの誤推測が発生しており、ロード/ストアユニット214は、少なくともロード命令及びロード依存命令の命令パイプライン200をフラッシュし、ロード命令を再実行させる。
【0034】
動作332においてデータが同じであり、ロード命令が依然としてメモリ順序付けルールの違反についてチェックされるべきである場合、ロード/ストアユニット214は、ロード命令を、メモリ順序付け整合性キュー232の現在空いているスロットに記憶する。ロード/ストアユニット214は、このスロットを使用して、本明細書の他の箇所で説明するように、後でそのような違反をチェックする。チェックされる違反は、空きになったキュー232に関連するタイプのロード命令の違反である。例えば、ロード命令がロード順序付けキュー228内のスロットを待機していた場合、チェックされる違反は、ロードからロードへの順序付けの違反である。
【0035】
比較332が完了した場合に、スロットが空きになったキュー232のメモリ順序付けルールの違反についてロード命令をチェックする必要がない可能性がある(例えば、ロード命令がそのキュー232内の最も古いロード命令であるか、全ての古いストア命令が既に物理アドレスを計算しており、ロード命令と競合するものがないからである)。その場合、ロード命令は、そのキュー232に配置されない。この時点で、ロード命令がロードキュー224又はメモリ順序付け整合性キュー232に存在しない場合、ロード命令は、リタイアする準備ができている。
【0036】
図4は、一例による、メモリ順序付け整合性キューが満杯の場合に、ロード命令に依存する命令を投機的に実行する方法400のフロー図である。図1図3Bのシステムに関して説明するが、当業者は、任意の技術的に実現可能な順序で法400のステップを実行するように構成された任意のシステムが本開示の範囲内に含まれることを理解するであろう。
【0037】
方法400は、ステップ402で始開始し、ここで、ロード命令が完了し、ロード命令が配置されるのに適格なメモリ順序付け整合性キュー232が満杯になる。ロード命令によって要求されたデータがロード/ストアユニット214に戻されると、ロード命令が完了する。既にロードキュー224にあるロード命令は、そこに残る。ステップ404において、ロード/ストアユニット214は、ロードされたデータを、メモリ順序付け整合性キュー232が満杯になったときにロードされるデータの記憶位置に配置する。本明細書の他の箇所で説明するように、一例では、その記憶位置はレジスタファイル218であり、別の例では、その記憶位置は一時的ロードデータ記憶メモリ320である。
【0038】
ステップ406において、命令パイプライン200は、ステップ402に関して説明したロード命令に依存するロード依存命令を投機的に実行する。ロード依存命令は、ロード命令によってロードされた値をオペランドとして消費する命令、又は、他のロード依存命令に依存する命令である。これらの命令は、ロード命令がメモリ順序付けルールに違反していると判別される可能性があるため、消費する値が正しいかどうかわからないので、投機的に実行される。
【0039】
ステップ408において、スロットが、満杯のメモリ順序付け整合性キュー232で利用可能になることに応じて、ロード/ストアユニット214は、データを再びフェッチするためにロード命令を再実行する。ステップ410において、ロード/ストアユニット214は、再実行されたロード命令によってロードされたデータを、メモリ順序付け整合性キュー232が満杯になったときにロードされたデータの記憶位置に記憶された、最初に実行されたロード命令のデータと比較することによって、投機的に実行されたロード依存命令のデータ誤推測をテストする。テストには、再実行されたロードの値を記憶位置の値と比較することが含まれる。値が同じでない場合、誤推測が発生し、ロード命令とロード依存命令とがフラッシュされ、ロード命令が再実行される。値が同じである場合、誤推測は発生していない。
【0040】
データの誤推測が発生しなかった場合、ロード/ストアユニット214は、ロード命令を、満杯だったが現在利用可能であるメモリ順序付け整合性キュー232に移動する。このメモリ順序付け整合性キュー232において、ロード/ストアユニット214は、そのキュー232に関連するメモリ順序付けルールの違反についてロード命令を監視する。このような違反をテストするためのいくつかの例示的な技術が本明細書に記載されている。ロード命令がキュー232内にある間に違反が発生せず、違反が発生し得ないことが確実になった場合(例えば、ロード命令がキュー232内で最も古いロード命令になるか、ロード命令よりも古く、物理アドレスが未だ決定されていないストア命令がそれ以上ない場合)、ロード命令はキューを離れる。ロード命令がメモリ順序付け整合性キュー232にもはや存在しない場合、ロード命令はリタイアする準備ができている。
【0041】
本明細書で使用される「命令」という用語は、デコーダステージ208又は命令パイプライン200の他のステージによって生成されるアーキテクチャ命令又はマイクロオペレーションの何れかを指すことができる。一般的に知られているように、命令セットアーキテクチャによって指定されたアーキテクチャ命令は、命令パイプラインによって複数の個別のマイクロオペレーションとして実行されることがある。
【0042】
データがキャッシュからフェッチされると述べられている場合、データは、要求に応じてキャッシュに存在しない可能性があり、そのような要求に応じて、キャッシュは、階層の上位レベルからデータを要求し、最終的にそのデータを元のキャッシュに提供してもよいことを理解されたい。
【0043】
本明細書の開示に基づいて、多くの変形が可能であることを理解されたい。特徴及び要素が特定の組み合わせで上述されているが、各特徴又は要素は、他の特徴及び要素なしに単独で、又は、他の特徴及び要素を伴う若しくは伴わない様々な組み合わせで使用されてもよい。
【0044】
本明細書に記載の様々な要素は、本明細書に記載の機能を実行する回路として、プロセッサ上で実行されるソフトウェアとして、又は、これらの組み合わせとして実装される。図1において、プロセッサ102は、本明細書で説明する動作を実行するコンピュータプロセッサである。入力ドライバ112、出力ドライバ114、入力デバイス108及び出力デバイス110は、1つ以上のプロセッサ、ハードウェア、又は、これらの組み合わせで実行されるソフトウェアである。命令パイプライン200の様々な要素は、ハードウェア回路である。
【0045】
提供される方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実施されてもよい。適切なプロセッサは、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタルシグナルプロセッサ(DSP)、複数のマイクロプロセッサ、DSPコアに関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、任意の他のタイプの集積回路(IC)、及び/又は、状態機械を含む。このようなプロセッサは、処理されるハードウェア記述言語(HDL)命令及びネットリストを含む他の中間データ(コンピュータ可読記憶媒体に記憶することが可能な命令)の結果を用いて製造プロセスを構成することによって製造されてもよい。このような処理の結果は、実施形態の態様を実施するプロセッサを製造する半導体製造プロセスにおいてその後用いられるマスクワークであってもよい。
【0046】
本明細書で提供される方法又はフローチャートは、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア又はファームウェアにおいて実施されてもよい。非一時的なコンピュータ可読記憶媒体の例としては、リードオンリーメモリ(ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及び可搬型ディスク等の磁気媒体、光磁気媒体、CD-ROMディスク及びデジタル多用途ディスク(DVD)等の光学媒体が挙げられる。
図1
図2
図3A
図3B
図4