(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-12-16
(45)【発行日】2024-12-24
(54)【発明の名称】ロード/ストアスペキュレーションのためのアドレスベースのフィルタリング
(51)【国際特許分類】
G06F 9/38 20180101AFI20241217BHJP
G06F 9/34 20180101ALI20241217BHJP
G06F 12/1009 20160101ALI20241217BHJP
【FI】
G06F9/38 310F
G06F9/34 350A
G06F12/1009
(21)【出願番号】P 2021568276
(86)(22)【出願日】2020-10-19
(86)【国際出願番号】 US2020056279
(87)【国際公開番号】W WO2021080907
(87)【国際公開日】2021-04-29
【審査請求日】2023-10-11
(32)【優先日】2019-10-21
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ジョン カラマティアノス
(72)【発明者】
【氏名】クリシュナン ヴィー. ラマニ
(72)【発明者】
【氏名】眞下 達
【審査官】坂東 博司
(56)【参考文献】
【文献】特開2002-163105(JP,A)
【文献】特開平11-167516(JP,A)
【文献】米国特許出願公開第2017/0371659(US,A1)
【文献】米国特許第8024522(US,B1)
【文献】米国特許第5625835(US,A)
【文献】西川 卓、塩谷 亮太 、入江 英嗣 、五島 正裕 、坂井 修一,フィルタを用いたメモリ・アクセス順序違反検出手法の評価,電子情報通信学会技術研究報告 Vol.115 No.519,第115巻 第519号,日本,一般社団法人電子情報通信学会,2016年03月17日,pp.85-90,【ISSN】0913-5685
【文献】FERNANDO CASTRO et al.,DMDC: Delayed Memory Dependence Checking through Age-Based Filtering,2006 39th Annual IEEE/ACM International Symposium on Microarchitecture (MICRO '06),米国,IEEE,2006年12月09日,pp.1-10,[online],[令和6年10月30日検索],インターネット <URL:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=4041855>,DOI: 10.1109/MICRO.2006.21, Print ISBN: 0-7695-2732-9
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
G06F 9/34
G06F 12/1009
(57)【特許請求の範囲】
【請求項1】
ロード/ストアスペキュレーションのためのアドレスベースのフィルタリングを用いるプロセッサのロードストアユニットであって、
前記ロードストアユニットは、
アドレスの範囲に関連するテーブルエントリを含むフィルタリングテーブルを含み、
前記ロードストアユニットの制御ロジックは、
前記フィルタリングテーブルを維持することと、
順序チェックトリガトランザクションを受信したことに応じて、前記順序チェックトリガトランザクションに依存する命令が以前に物理アドレスを生成したかどうかを判別するために、前記順序チェックトリガトランザクションのターゲットアドレスを使用して、前記フィルタリングテーブルに照会することと、
前記順序チェックトリガトランザクションに依存する命令が以前に物理アドレスを生成したことを示す指標を前記フィルタリングテーブルが有していないと判別したことに応じて、前記順序チェックトリガトランザクションに依存する命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造においてルックアップ動作をバイパスすることと、
を行うように構成されている、
ロードストアユニット。
【請求項2】
前記制御ロジックは、前記順序チェックトリガトランザクションに依存する命令が以前に物理アドレスを生成したことを示す指標を前記フィルタリングテーブルが含むと判別したことに応じて、前記順序チェックトリガトランザクションに依存する命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造においてルックアップ動作を実行するように更に構成されている、
請求項
1のロードストアユニット。
【請求項3】
前記制御ロジックは、
依存する命令が物理アドレスを生成したことを検出することと、
前記依存する命令のターゲットアドレスに関連するフィルタリングテーブルのエントリにおいて、前記依存する命令が物理アドレスを生成したことを示すことと、
を行うように更に構成されている、
請求項
1のロードストアユニット。
【請求項4】
前記制御ロジックは、特定のスロットがプログラム順に割り当て解除されたキューにおいて再使用されたことを検出したことに応じて、前記フィルタリングテーブルにおいて前記テーブルエントリをシフトするように更に構成されている、
請求項
1のロードストアユニット。
【請求項5】
前記プログラム順に割り当て解除されたキューは、ストアキュー及びロードトラッキングキューから構成されたグループから選択されたキューである、
請求項
4のロードストアユニット。
【請求項6】
前記制御ロジックは、事前に選択されたリオーダバッファIDの再使用を検出したことに応じて、前記フィルタリングテーブルにおいて前記テーブルエントリをシフトするように更に構成されている、
請求項
1のロードストアユニット。
【請求項7】
前記フィルタリングテーブルは、複数の個別のテーブルを含む、
請求項
1のロードストアユニット。
【請求項8】
前記順序チェックトリガトランザクションがロード命令であり、
前記順序チェックトリガトランザクションを受信することは、前記ロード命令が物理アドレスを生成したことを検出することを含み、
前記順序チェックトリガトランザクションに依存する命令が以前に物理アドレスを生成したかどうかを判別するために、前記順序チェックトリガトランザクションのターゲットアドレスを使用して、前記フィルタリングテーブルに照会することは、ストア命令が以前に物理アドレスを生成したかどうかを判別するために、前記ロード命令の前記ターゲットアドレスを使用して、前記フィルタリングテーブルに照会することを含み、
前記順序チェックトリガトランザクションに依存する命令が以前に物理アドレスを生成したことを示す指標を前記フィルタリングテーブルが有していないと判別することは、前記ストア命令が以前に物理アドレスを生成したことを示す指標を前記フィルタリングテーブルが有していないと判別することを含み、
前記順序チェックトリガトランザクションに依存する命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造においてルックアップ動作をバイパスすることは、前記ストア命令が現在インフライトであるかどうかを判別するために、ストアツーロード転送メモリ構造において前記ルックアップ動作をバイパスすることを含む、
請求項
1のロードストアユニット。
【請求項9】
前記順序チェックトリガトランザクションがストア命令であり、
前記順序チェックトリガトランザクションを受信することは、前記ストア命令が物理アドレスを生成したことを検出することを含み、
前記順序チェックトリガトランザクションに依存する命令が以前に物理アドレスを生成したかどうかを判別するために、前記順序チェックトリガトランザクションのターゲットアドレスを使用して、前記フィルタリングテーブルに照会することは、ロード命令が以前に物理アドレスを生成したかどうかを判別するために、前記ストア命令の前記ターゲットアドレスを使用して、前記フィルタリングテーブルに照会することを含み、
前記順序チェックトリガトランザクションに依存する命令が以前に物理アドレスを生成したことを示す指標を前記フィルタリングテーブルが有していないと判別することは、前記ロード命令が以前に物理アドレスを生成したことを示す指標を前記フィルタリングテーブルが有していないと判別することを含み、
前記順序チェックトリガトランザクションに依存する命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造においてルックアップ動作をバイパスすることは、前記ロード命令が現在インフライトであるかどうかを判別するために、アウトオブオーダバッファメモリ構造において前記ルックアップ動作をバイパスすることを含む、
請求項
1のロードストアユニット。
【請求項10】
前記順序チェックトリガトランザクションがキャッシュイベントであり、
前記順序チェックトリガトランザクションを受信することは、前記キャッシュイベントが物理アドレスを生成したことを検出することを含み、
前記順序チェックトリガトランザクションに依存する命令が以前に物理アドレスを生成したかどうかを判別するために、前記順序チェックトリガトランザクションのターゲットアドレスを使用して、前記フィルタリングテーブルに照会することは、ロード命令が以前に物理アドレスを生成したかどうかを判別するために、前記キャッシュイベントの前記ターゲットアドレスを使用して、前記フィルタリングテーブルに照会することを含み、
前記順序チェックトリガトランザクションに依存する命令が以前に物理アドレスを生成したことを示す指標を前記フィルタリングテーブルが有していないと判別することは、前記ロード命令が以前に物理アドレスを生成したことを示す指標を前記フィルタリングテーブルが有していないと判別することを含み、
前記順序チェックトリガトランザクションに依存する命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造においてルックアップ動作をバイパスすることは、前記ロード命令が現在インフライトであるかどうかを判別するために、ロードオーダキューメモリ構造において前記ルックアップ動作をバイパスすることを含む、
請求項
1のロードストアユニット。
【発明の詳細な説明】
【技術分野】
【0001】
(連邦政府支援の研究開発に関する記述)
本開示は、DOEによって授与されたPathForward Project with Lawrence Livermore National Security(Prime Contract No.DE-AC52-07NA27344、Subcontract No.B620717)の下で、政府の支援によってなされた。政府は、本開示における一定の権利を有する。
【背景技術】
【0002】
データスペキュレーションを使用するコンピュータプロセッサは、通常、ロードストアユニット内のロード命令及びストア命令がプログラム順序とは無関係に完了するのを可能にする。このデータスペキュレーションでは、順序違反のエラーを抑制するために、順序違反に関してメモリの依存関係をチェックする必要がある。これらのチェックでは、ロード又はストアと、インフライトストア又はインフライトロードのサブセットと、の間の全ての物理アドレス比較を必要とする場合がある。いくつかのメモリ整合性モデルでは、チェックは、外部プローブの全ての物理アドレスをインフライトロードの物理アドレスと比較することも必要とする。順序違反を抑制することは、通常、連想メモリ(CAM)構造の使用を伴う。
【図面の簡単な説明】
【0003】
【
図1】本開示の実施形態による、ロード/ストアスペキュレーションのためのアドレスベースのフィルタリングに関する例示的なシステムのブロック図である。
【
図2】本開示の実施形態による、ロード/ストアスペキュレーションのためのアドレスベースのフィルタリングに関する例示的なシステムのブロック図である。
【
図3】本開示の実施形態による、ロード/ストアスペキュレーションのためのアドレスベースのフィルタリングに関する例示的な方法を示すフローチャートである。
【
図4】本開示の実施形態による、ロード/ストアスペキュレーションのためのアドレスベースのフィルタリングに関する例示的な方法を示すフローチャートである。
【
図5】本開示の実施形態による、ロード/ストアスペキュレーションのためのアドレスベースのフィルタリングに関する例示的な方法を示すフローチャートである。
【
図6】本開示の実施形態による、ロード/ストアスペキュレーションのためのアドレスベースのフィルタリングに関する例示的な方法を示すフローチャートである。
【
図7】本開示の実施形態による、ロード/ストアスペキュレーションのためのアドレスベースのフィルタリングに関する例示的な方法を示すフローチャートである。
【
図8】本開示の実施形態による、ロード/ストアスペキュレーションのためのアドレスベースのフィルタリングに関する例示的な方法を示すフローチャートである。
【発明を実施するための形態】
【0004】
順序違反エラーを抑制するために連想メモリ(CAM)構造及びルックアップ動作を使用することは、電力使用の点で高価である。したがって、ロードストアユニット(LSU)におけるCAMルックアップの回数を低減することによって、LSUの全体的な電力使用を低減させる。本開示の実施形態は、フィルタリングメカニズムを用いて、いくつかの着信命令に対するCAMルックアップ等のメモリ操作をバイパスする。このフィルタリングメカニズムは、以前に受信したストア命令又はロード命令のアドレス又はアドレス範囲に対応するエントリのテーブルを維持することによって動作する。着信ストア命令、着信ロード命令又は着信キャッシュプローブが、以前に受信した命令がターゲットとしていない範囲内のターゲットアドレスを含む場合に、その着信ストア命令、着信ロード命令又は着信キャッシュプローブは、CAMルックアップを必要とせず、完了に向けて転送される。いくつかの実施形態では、このフィルタリングメカニズムは、LSUパイプラインのいくつかの異なるステージにおいて利用される。
【0005】
図1は、いくつかの実施形態による、ロード/ストアスペキュレーションのためのアドレスベースのフィルタリングに関する非限定的な例示的なコンピューティングシステム(152)のブロック図である。
図1のコンピューティングシステム(152)は、少なくとも1つのコンピュータプロセッサ(156)又は「CPU」と、高速メモリバス(166)及びバスアダプタ(158)を介してプロセッサ(156)及びコンピューティングシステム(152)の他の構成要素に接続されたランダムアクセスメモリ(168)(RAM)と、を含む。
【0006】
RAM(168)には、オペレーティングシステム(154)が記憶されている。ロード/ストアスペキュレーションのためのアドレスベースのフィルタリングに関するコンピュータにおいて有用なオペレーティングシステムは、UNIX(登録商標)、Linux(登録商標)、Microsoft Windows(登録商標)、AIX(商標)、及び、当業者が想像する他のものを含む。
図1の例におけるオペレーティングシステム(154)は、RAM(168)に存在するものとして示されているが、このようなソフトウェアの多くの構成要素は、典型的には、例えば、ディスクドライブ等のデータ記憶装置(170)等の不揮発性メモリにも記憶される。
【0007】
図1のコンピューティングシステム(152)は、拡張バス(160)及びバスアダプタ(158)を介してプロセッサ(156)及びコンピューティングシステム(152)の他の構成要素に結合されたディスクドライブアダプタ(172)を含む。ディスクドライブアダプタ(172)は、データ記憶装置(170)の形態で、不揮発性データ記憶装置をコンピューティングシステム(152)に接続する。いくつかの実施形態では、ディスクドライブアダプタは、インテグレーティドドライブエレクトロニクス(IDE)アダプタ、スモールコンピュータシステムインタフェース(SCSI)アダプタ、及び、当業者が想像する他のものを含む。いくつかの実施形態では、不揮発性コンピュータメモリは、当業者が想像するように、光学ディスクドライブ、電気的に消去可能なプログラマブルリードオンリメモリ(いわゆる「EEPROM」又は「フラッシュ」メモリ)、RAMドライブ等として実装される。
【0008】
図1の例示的なコンピューティングシステム(152)は、1つ以上の入力/出力(I/O)アダプタ(178)を含む。I/Oアダプタは、例えば、コンピュータディスプレイスクリーン等のディスプレイデバイスへの出力と共に、キーボード及びマウス等のユーザ入力デバイス(181)からのユーザ入力を制御するためのソフトウェアドライバ及びコンピュータハードウェアを介して、ユーザ指向の入力/出力を実現する。
図1の例示的なコンピューティングシステム(152)は、ビデオアダプタ(209)を含み、ビデオアダプタ(209)は、ディスプレイスクリーン又はコンピュータモニタ等のディスプレイデバイス(180)へのグラフィック出力のために特別に設計されたI/Oアダプタの一例である。ビデオアダプタ(209)は、高速ビデオバス(164)、バスアダプタ(158)及び高速バスでもあるフロントサイドバス(162)を介してプロセッサ(156)に接続されている。
【0009】
図1の例示的なコンピューティングシステム(152)は、他のコンピュータとのデータ通信及びデータ通信ネットワークとのデータ通信のための通信アダプタ(167)を含む。いくつかの実施形態では、このようなデータ通信は、RS-232接続を介して、ユニバーサルシリアルバス(USB)等の外部バスを介して、IPデータ通信ネットワーク等のデータ通信ネットワークを介して、及び、当業者が想像する他の方法でシリアルに実行される。通信アダプタは、ハードウェアレベルのデータ通信を実現し、これにより、1つのコンピュータが、データ通信を、直接又はデータ通信ネットワークを介して別のコンピュータに送信する。いくつかの実施形態では、通信アダプタの例は、有線ダイアルアップ通信用のモデム、有線データ通信用のイーサネット(登録商標)(IEEE802.3)アダプタ、及び、無線データ通信用の802.11アダプタを含む。
【0010】
図2は、いくつかの実施形態による、ロード/ストアスペキュレーションのためのアドレスベースのフィルタリングに関する非限定的な例示的なプロセッサ(156)のブロック図である。
図2に示すように、例示的なプロセッサ(156)は、ロードストアユニット(LSU)(200)と、アドレス生成ユニット(202)と、制御ロジック(204)と、フィルタリングテーブルシフトトリガ(206)と、順序違反メモリ構造フィルタリングテーブル(208)と、順序違反メモリ構造(210)と、を含む。
図2におけるLSU(200)の表示は、LSU(200)における異なる特定の構造を表す要素を含む。具体的には、いくつかの実施形態では、フィルタリングテーブルシフトトリガ(206)及び順序違反メモリ構造(210)は、後述するように、LSU(200)パイプラインに従ったいくつかの異なる要素に適用される。
【0011】
LSU(200)は、ロード命令及びストア命令を実行するプロセッサ(156)の一部である。LSU(200)は、ロード及びストアがプログラム順と無関係に(out of program order)完了することが許可されている場合に、メモリ依存関係及び順序違反をチェックする。LSU(200)の制御ロジック(204)は、ロード命令及びストア命令を完了するまで実行することを含むLSU(200)の機能を実施する。
図2における制御ロジック(204)は、説明目的で、LSU(200)内の別個の要素として表されている。実際には、制御ロジック(204)は、LSU(200)上の他の要素内及び他の要素間の動作の集合である。アドレス生成ユニット(202)は、ロード命令又はストア命令を実行する際の初期ステップとして、ロード命令及びストア命令についての物理アドレスを計算し、物理アドレスをLSU(200)に提供する。
【0012】
フィルタリングテーブルシフトトリガ(206)は、フィルタリングテーブル(208)におけるシフトをトリガするために制御ロジック(204)によって使用されるデータ構造である。制御ロジック(204)は、制御ロジック(204)がフィルタリングテーブル(208)におけるシフトを開始する特定の条件について、フィルタリングテーブルシフトトリガ(206)を監視する。フィルタリングテーブルにおけるシフトは、ロード命令及びストア命令によってターゲットとされるメモリ位置とのパリティを維持するように実行される。いくつかの実施形態では、フィルタリングテーブルシフトトリガ(206)は、LSU(200)のストアキュー(STQ)又はロードトラッキングキュー(LTQ)等のように、プログラム順に割り当て及び割り当て解除されるキューである。いくつかの実施形態では、シフトは、キュー内の特定の事前にプログラムされたスロットの再使用によってトリガされる。いくつかの実施形態では、特定のスロットは、基本入力/出力システム(BIOS)設定を使用して事前にプログラムされる。
【0013】
順序違反メモリ構造(210)は、制御ロジックのメモリ依存関係チェック及び順序違反チェックの一部として動作するCAM構造等のメモリ構造である。順序違反メモリ構造(210)の例は、ストアツーロード転送(STLF)CAM、アウトオブオーダバッファ(OOB)CAM、及び、ロードオーダキュー(LOQ)CAMを含む。これらの順序違反メモリ構造におけるルックアップ動作が電力使用の点で高価であるため、本開示の実施形態は、全てのアドレス比較又は部分的なアドレス比較を行わずに、フィルタリングテーブル(208)内の予め定義された物理アドレス範囲でインフライトロード及びインフライトストアの存在を追跡することによってルックアップ動作の回数を低減するためのフィルタリングテーブル(208)を含む。
【0014】
STLF CAMは、実行されようとしているロードが、未だ実行されていない古いストアと同じターゲットアドレスを有することを検証するために、LSU(200)によって使用されるメモリ構造である。ロードの実行がロードストアキュー(LSQ)によってスケジュールされると、制御ロジック(204)は、STLF CAM内の全てのエントリをロードのターゲットアドレスと比較して、ロードのターゲットアドレスと同じターゲットアドレスへの以前の古いストアが存在するかどうかを判別する。OOB CAMは、STLF CAMと同様の機能を実行するが、LSQによってロードが最初にメモリにスケジュールされた場合にミスしたストア命令とロード命令との間のメモリ順序違反を検出する。これは、ロードの実行時に、全ての以前の古いストアが物理アドレスを生成していない可能性があるので可能である。完了したロードは、全ての古いストアが物理アドレスを生成し、依存関係をチェックするまで、OOBに残る。同様に、LOQ CAMは、キャッシュイベントを監視することによって、(同じ又は異なるスレッドの)ロード命令間のメモリ順序違反を検出する。キャッシュイベントは、レベル1データキャッシュプローブ等のキャッシュプローブと、レベル1データキャッシュエビクション等のキャッシュエビクションと、を含む。
【0015】
順序違反メモリ構造フィルタリングテーブル(208)は、順序違反メモリ構造(210)から、依存関係違反を含む順序違反が存在する特定の順序チェックトリガトランザクション(ordering check triggering transactions)(例えば、ロード命令、ストア命令及びキャッシュイベント)をフィルタ除去(filter out)するメカニズムである。フィルタリングテーブル(208)は、順序チェックトリガトランザクションのターゲットアドレス(すなわち、物理アドレス若しくは論理アドレス)又はターゲットアドレスの範囲を表すエントリを含む。例えば、いくつかの実施形態では、フィルタリングテーブルは、2N個のエントリを含み、Nは、順序チェックトリガトランザクションのターゲットアドレス内のビットのサブセットである。いくつかの実施形態では、フィルタリングテーブル(208)は、LSU(200)内の各々の順序違反メモリ構造(210)又は任意の順序違反メモリ構造(210)に対して実装される。
【0016】
いくつかの実施形態では、順序違反メモリ構造フィルタリングテーブル(208)は、2つ以上の別々のフィルタリングテーブルとして実装される。いくつかの実施形態では、フィルタリングテーブルの各々は、ターゲットアドレスの異なる範囲のセットに割り当てられる。いくつかの実施形態では、制御ロジック(204)は、ターゲットアドレスの一部に基づいて、何れのフィルタリングテーブルを照会するかについての最初の決定を行う。
【0017】
図3は、いくつかの実施形態による、ロード/ストアスペキュレーションのためのアドレスベースのフィルタリングに関する非限定的な例示的な方法を示すフローチャートであり、方法は、アドレスの範囲に関連するテーブルエントリを含むフィルタリングテーブルを維持すること(302)を含む。いくつかの実施形態では、アドレスの範囲に関連するテーブルエントリを含むフィルタリングテーブルを維持すること(302)は、制御ロジック(204)が、潜在的な順序違反についての指標をフィルタリングテーブルに配置することによって実施される。いくつかの実施形態では、アドレスの範囲に関連するテーブルエントリを含むフィルタリングテーブルを維持すること(302)は、制御ロジック(204)が、フィルタリングテーブルシフトトリガの条件に基づいてテーブルエントリをシフトすることによって実施される。
【0018】
図3の方法は、順序チェックトリガトランザクション(320)を受信したことに応じて、順序チェックトリガトランザクション(320)に依存する命令が以前に物理アドレスを生成したかどうかを判別するために、順序チェックトリガトランザクション(320)のターゲットアドレスを使用して、フィルタリングテーブル(208)に照会すること(304)を含む。いくつかの実施形態では、順序チェックトリガトランザクション(320)を受信することは、制御ロジック(204)が、順序チェックトリガトランザクション(320)(例えば、ロード命令、ストア命令、キャッシュイベント)の物理アドレスをアドレス生成ユニットが提供していたのを検出することによって実施される。いくつかの実施形態では、制御ロジック(204)は、アドレス生成ユニットから物理アドレスを受信し、物理アドレスのサブセットを、フィルタリングテーブル(208)へのキーとして使用するために抽出する。或いは、いくつかの実施形態では、制御ロジック(204)は、論理アドレスの一部を、フィルタリングテーブル(208)へのキーとして使用する。
【0019】
いくつかの実施形態では、順序チェックトリガトランザクション(320)に依存する命令が以前に物理アドレスを生成したかどうかを判別するために、順序チェックトリガトランザクション(320)のターゲットアドレスを使用して、フィルタリングテーブル(208)に照会すること(304)は、制御ロジック(204)が、ターゲットアドレス(すなわち、物理アドレス又は論理アドレス)の一部を使用してクエリエントリ識別子を生成し、エントリ識別子によって識別されるエントリにアクセスすることによって実施される。いくつかの実施形態では、例えば、エントリ識別子は、[M:M+N-1]を使用して物理アドレスから生成され、Mは、メモリウインドウの開始アドレスであり、Nは、フィルタリングテーブル(208)についての物理アドレスビットのサブセットである。
【0020】
図3の方法は、順序チェックトリガトランザクション(320)に依存する命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブル(208)が有していないと判別したことに応じて、順序チェックトリガトランザクション(320)に依存する命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造においてルックアップ動作をバイパスすること(306)を含む。「インフライト」は、命令が完了したが未だリタイアしていないことを指す。いくつかの実施形態では、順序チェックトリガトランザクション(320)に依存する命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブル(208)が有していないと判別することは、制御ロジック(204)が、フィルタリングテーブル内のエントリにアクセスし、エントリのコンテンツがゼロであると判別することによって実施される。順序チェックトリガトランザクション(320)に依存する以前の命令の指標が存在しないので、制御ロジック(204)は、依存する以前の命令が現在インフライトでない(すなわち、パイプライン内の何れのインフライト命令によっても、データが、ターゲット物理アドレスからロードされておらず、又は、ターゲット物理アドレスに記憶されていない)ことが保証される。
【0021】
いくつかの実施形態では、順序チェックトリガトランザクション(320)に依存する命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造においてルックアップ動作をバイパスすること(306)は、制御ロジック(204)が、順序違反メモリ構造におけるルックアップ動作が実行されたかのように動作し、及び、順序チェックトリガトランザクション(320)に依存する命令が現在インフライトでない(すなわち、パイプライン内の何れのインフライト命令によっても、データが、ターゲット物理アドレスからロードされておらず、又は、ターゲット物理アドレスに記憶されていない)ことを示す応答が返されるように動作することによって実施される。
【0022】
上記の機能は、状況によっては、フィルタリングテーブルの安価なアクセスを使用して依存する命令が存在しないことを識別することができる着信順序チェックトリガトランザクション(例えば、ロード命令、ストア命令、キャッシュイベント)に対してフィルタリングテーブルを維持することによって、メモリ構造において高価なルックアップ動作を回避することによって、コンピュータシステムの動作を改善する。さらに、性能を劣化させることなく動的な電力消費を低減することによって、プロセッサコア内で多数のロード/ストアマイクロ動作を実行するアプリケーションの実行をより効率的に行う。
【0023】
更なる説明のために、
図4は、実施形態による、ロード/ストアスペキュレーションのためのアドレスベースのフィルタリングに関する更なる例示的な方法を示すフローチャートであり、方法は、アドレスの範囲に関連するテーブルエントリを含むフィルタリングテーブルを維持すること(302)と、順序チェックトリガトランザクション(320)を受信したことに応じて、順序チェックトリガトランザクション(320)に依存する命令が以前に物理アドレスを生成したかどうかを判別するために、順序チェックトリガトランザクション(320)のターゲットアドレスを使用して、フィルタリングテーブル(208)に照会すること(304)と、順序チェックトリガトランザクション(320)に依存する命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブル(208)が有していないと判別したことに応じて、順序チェックトリガトランザクション(320)に依存する命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造においてルックアップ動作をバイパスすること(306)と、を含む。
【0024】
しかしながら、
図4の方法は、順序チェックトリガトランザクション(320)に依存する命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブル(208)が含むと判別したことに応じて、順序チェックトリガトランザクション(320)に依存する命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造(210)においてルックアップ動作を実行すること(402)を更に含む点において、
図3の方法と異なる。
【0025】
いくつかの実施形態では、順序チェックトリガトランザクション(320)に依存する命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブル(208)が含むと判別することは、制御ロジック(204)が、フィルタリングテーブル内のエントリにアクセスし、エントリがゼロでない(すなわち、エントリが、以前の依存する命令が潜在的にインフライトであることを示すようにマーク付けされている(すなわち、何れのインフライト命令によっても、データが、ターゲット物理アドレスからロードされておらず、又は、ターゲット物理アドレスに記憶されていない))と判別することによって実施される。各々のエントリがアドレスの範囲を表す場合、エントリのマーク付けは、必ずしも順序違反の存在を示すわけではない。代わりに、マークは、依存する命令が、同じ範囲をターゲットとする、生成された物理アドレスを有することを示す。順序チェックトリガトランザクション(320)に潜在的に依存する以前の命令の指標が存在するので、制御ロジック(204)は、依存する以前の命令が現在インフライトでない(すなわち、何れのインフライト命令によっても、データが、ターゲット物理アドレスからロードされておらず、又は、ターゲット物理アドレスに記憶されていない)という保証を有していない。このような場合、順序チェックトリガトランザクション(320)に依存する命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造(210)において、比較的高価なルックアップ動作が実行される。
【0026】
更なる説明のために、
図5は、実施形態による、ロード/ストアスペキュレーションのためのアドレスベースのフィルタリングに関する更なる例示的な方法を示すフローチャートであり、方法は、アドレスの範囲に関連するテーブルエントリを含むフィルタリングテーブルを維持すること(302)と、順序チェックトリガトランザクション(320)を受信したことに応じて、順序チェックトリガトランザクション(320)に依存する命令が以前に物理アドレスを生成したかどうかを判別するために、順序チェックトリガトランザクション(320)のターゲットアドレスを使用して、フィルタリングテーブル(208)に照会すること(304)と、順序チェックトリガトランザクション(320)に依存する命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブル(208)が有していないと判別したことに応じて、順序チェックトリガトランザクション(320)に依存する命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造においてルックアップ動作をバイパスすること(306)と、を含む。
【0027】
しかしながら、
図5の方法は、アドレスの範囲に関連するテーブルエントリを含むフィルタリングテーブルを維持すること(302)が、依存する命令が物理アドレスを生成したことを検出すること(502)と、依存する命令のターゲットアドレスに関連するフィルタリングテーブル(208)のエントリにおいて、依存する命令が物理アドレスを生成したことを示すこと(504)と、特定のスロットがプログラム順に割り当て解除されたキューにおいて再使用されたことを検出したことに応じて、フィルタリングテーブル(208)においてテーブルエントリをシフトすること(506)と、を含む点において、
図3の方法と異なる。
【0028】
いくつかの実施形態では、依存する命令が物理アドレスを生成したことを検出すること(502)は、制御ロジック(204)が、アドレス生成ユニット(202)によって、特定のタイプの依存する命令(例えば、ロード命令又はストア命令)についての物理アドレスが生成されたことを通知されることによって実施される。いくつかの実施形態では、制御ロジック(204)は、命令についての物理アドレス、命令についての論理アドレス、又は、その何れかの一部を受信する。
【0029】
いくつかの実施形態では、依存する命令のターゲットアドレスに関連するフィルタリングテーブル(208)のエントリにおいて、依存する命令が物理アドレスを生成したことを示すこと(504)は、制御ロジック(204)が、フィルタリングテーブル(208)においてターゲットアドレスについてのエントリをマーク付けすることによって実施される。いくつかの実施形態では、制御ロジック(204)は、最小の電力量を使用する方法でエントリをマーク付けする。いくつかの実施形態では、例えば、制御ロジック(204)は、非ゼロのエントリを示すために「0x03」の値を書き込む。
【0030】
いくつかの実施形態では、特定のスロットがプログラム順に割り当て解除されたキューにおいて再使用されたことを検出することは、制御ロジック(204)が、フィルタリングテーブル(208)がシフトされる条件について、フィルタリングテーブルシフトトリガ(206)を監視することによって実施される。いくつかの実施形態では、条件は、キュー内の特定のスロットの再使用である。いくつかの実施形態では、特定のスロットがプログラム順に割り当て解除されたキューにおいて再使用されたことを検出したことに応じて、フィルタリングテーブル(208)においてテーブルエントリをシフトすること(506)は、制御ロジック(204)が、エントリがゼロである場合に、インデックスするアドレス(the address indexing)と同じ物理アドレスビットを有するインフライトのロード/ストアが存在しないことを保証するために、各々のテーブルエントリを1つずつ進めることによって実施される。いくつかの実施形態では、プログラム順に割り当て解除されたキューは、フィルタリングが実行される順序違反メモリ構造に応じて、ストアキュー又はロードトラッキングキューである。或いは、いくつかの実施形態では、フィルタリングテーブルシフトトリガ(206)は、命令ウィンドウ内の事前に選択されたリオーダバッファIDの再使用の検出である。
【0031】
更なる説明のために、
図6、
図7及び
図8は、
図3、
図4及び
図5において説明した方法のコンテキスト例を示すフローチャートである。具体的には、
図6、
図7及び
図8は、ストアツーロード転送(STLF)CAM、アウトオブオーダバッファ(OOB)CAM、及び、ロードオーダキュー(LOQ)CAMの各々のコンテキストにおける例を示すフローチャートである。
図6は、STLF CAMのコンテキスト内の実施形態による、ロード/ストアスペキュレーションのためのアドレスベースのフィルタリングに関する例示的な方法を示すフローチャートである。
図3、
図4及び
図5の組み合わせと同様に、
図6は、依存する(ストア)命令が物理アドレスを生成したことを検出すること(502)と、依存する(ストア)命令のターゲットアドレスに関連するフィルタリングテーブル(208A)のエントリにおいて、依存する(ストア)命令が物理アドレスを生成したことを示すこと(504)と、特定のスロットがプログラム順に割り当て解除されたキューにおいて再使用されたことを検出したことに応じて、フィルタリングテーブル(208A)においてテーブルエントリをシフトすること(506)と、を含む、アドレスの範囲に関連するテーブルエントリを含むフィルタリングテーブルを維持すること(302)を含む。更に、
図6は、順序チェックトリガトランザクション(ロード命令)(320)を受信したことに応じて、順序チェックトリガトランザクション(ロード命令)に依存する(ストア)命令が以前に物理アドレスを生成したかどうかを判別するために、順序チェックトリガトランザクション(ロード命令)(320)のターゲットアドレスを使用して、フィルタリングテーブル(208A)に照会すること(304)と、順序チェックトリガトランザクション(ロード命令)(320)に依存する(ストア)命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブル(208A)が有していないと判別したことに応じて、順序チェックトリガトランザクション(ロード命令)(320)に依存する(ストア)命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造においてルックアップ動作をバイパスすること(306)と、順序チェックトリガトランザクション(ロード命令)(320)に依存する(ストア)命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブル(208A)が含むと判別したことに応じて、順序チェックトリガトランザクション(ロード命令)(320)に依存する(ストア)命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造(210A)においてルックアップ動作を実行すること(402)と、を含む。
【0032】
図6の例示的な方法では、依存する命令が物理アドレスを生成したことを検出すること(502)は、制御ロジック(204)が、アドレス生成ユニット(202A)によってストア命令が物理アドレスを生成したことを検出することによって実施される。制御ロジック(204)は、アドレス生成ユニット(202A)がストア命令についての物理アドレスを生成したことを通知される毎に、STLF CAM(210A)のフィルタリングテーブル(208A)を更新する。具体的には、
図6の例示的な方法では、依存する命令のターゲットアドレスに関連するフィルタリングテーブル(208A)のエントリにおいて、依存する命令が物理アドレスを生成したことを示すこと(504)は、制御ロジック(204)が、ストア命令のターゲットアドレス(すなわち、物理アドレス又は論理アドレスの一部)のビットのサブセットを、STLF CAM(210A)についてのフィルタリングテーブル(208A)内のエントリの識別として使用することによって実施される。このエントリは、ターゲットアドレスの範囲を表し、0x03でマーク付けされる。このアクションは、示されたエントリ範囲内のアドレスをターゲットとするインフライトストア命令が存在することを示す。
【0033】
図6の例示的な方法では、特定のスロットがプログラム順に割り当て解除されたキューにおいて再使用されたことを検出したことに応じて、フィルタリングテーブル(208A)においてテーブルエントリをシフトすること(506)は、制御ロジック(204)が、ストアキュー(206A)内の事前にプログラムされたスロットが再使用されたことを検出することによって実施される。パイプラインの部分的なフラッシュ又は全体的なフラッシュの場合、テーブルが変更されない。ストアキューがプログラム順に割り当て及び割り当て解除されるので、ストアキューは、ファーストインファーストアウトキューと同様に動作し、したがって、テーブルのフラッシュが必要ない。
【0034】
図6の例示的な方法では、順序チェックトリガトランザクション(320)を受信することは、制御ロジック(204)が、アドレス生成ユニット(202A)によってロード命令が物理アドレスを生成したことを検出することによって実施される。制御ロジック(204)は、アドレス生成ユニット(202A)がロード命令についての物理アドレスを生成したことを通知される毎に、STLF CAM(210A)のフィルタリングテーブル(208A)に照会する。
図6の例示的な方法では、順序チェックトリガトランザクション(320)に依存する命令が以前に物理アドレスを生成したかどうかを判別するために、順序チェックトリガトランザクション(320)のターゲットアドレスを使用して、フィルタリングテーブル(208A)に照会すること(304)は、制御ロジック(204)が、インフライトストア命令がロード命令のターゲットアドレスの同じ範囲において以前に物理アドレスを生成したかどうかを判別するために、ロード命令のターゲットアドレスを使用して、フィルタリングテーブル(208A)に照会することによって実施される。
【0035】
図6の例示的な方法では、順序チェックトリガトランザクション(320)に依存する命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブル(208A)が有していないと判別することは、制御ロジック(204)が、ロード命令のターゲットアドレスの一部を使用して、STLF CAMフィルタリングテーブル(208A)にアクセスし、ゼロエントリ(例えば、「0x0」)を読み出すことによって実施される。その結果、制御ロジック(204)は、同じターゲットアドレス範囲に対するインフライトストア命令が、アドレス生成ユニット(202A)によって以前に物理アドレスを生成したことを示す指標を、フィルタリングテーブル(208A)内の関連するエントリが有していないと判別する。
【0036】
図6の例示的な方法では、順序チェックトリガトランザクション(320)に依存する命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造においてルックアップ動作をバイパスすること(306)は、制御ロジック(204)が、ストア命令が現在インフライトであるかどうか(すなわち、データが、インフライトストア命令によってターゲット物理アドレスに記憶されたかどうか)を判別するために、STLF CAM(210A)においてルックアップ動作をバイパスすることによって実施される。
【0037】
図6の例示的な方法では、順序チェックトリガトランザクション(320)に依存する命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブル(208A)が含むと判別することは、制御ロジック(204)が、ロード命令のターゲットアドレスの一部を使用して、STLF CAMフィルタリングテーブル(208A)にアクセスし、非ゼロエントリを読み出すことによって実施される。その結果、制御ロジック(204)は、同じターゲットアドレス範囲に対するインフライトストア命令が、アドレス生成ユニット(202A)によって以前に物理アドレスを生成したことを示す指標をフィルタリングテーブル(208A)内の関連するエントリが含むと判別する。
【0038】
図6の例示的な方法では、順序チェックトリガトランザクション(320)に依存する命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造(210A)においてルックアップ動作を実行すること(402)は、制御ロジック(204)が、ロード命令がインフライトストア命令と依存関係にあるかどうかを判別するために、STLF CAM(210A)上でCAMルックアップ動作を実行することによって実施される。
【0039】
図7は、OOB CAMのコンテキスト内の実施形態による、ロード/ストアスペキュレーションのためのアドレスベースのフィルタリングに関する例示的な方法を示すフローチャートである。
図3、
図4及び
図5の組み合わせと同様に、
図7は、依存する(ロード)命令が物理アドレスを生成したことを検出すること(502)と、依存する(ロード)命令のターゲットアドレスに関連するフィルタリングテーブル(208B)のエントリにおいて、依存する(ロード)命令が物理アドレスを生成したことを示すこと(504)と、特定のスロットがプログラム順に割り当て解除されたキューにおいて再使用されたことを検出したことに応じて、フィルタリングテーブル(208B)においてテーブルエントリをシフトすること(506)と、を含む、アドレスの範囲に関連するテーブルエントリを含むフィルタリングテーブルを維持すること(302)を含む。更に、
図7は、順序チェックトリガトランザクション(ストア命令)(320)を受信したことに応じて、順序チェックトリガトランザクション(ストア命令)(320)に依存する(ロード)命令が以前に物理アドレスを生成したかどうかを判別するために、順序チェックトリガトランザクション(ストア命令)(320)のターゲットアドレスを使用して、フィルタリングテーブル(208B)に照会すること(304)と、順序チェックトリガトランザクション(ストア命令)(320)に依存する(ロード)命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブル(208B)が有していないと判別したことに応じて、順序チェックトリガトランザクション(ストア命令)(320)に依存する(ロード)命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造においてルックアップ動作をバイパスすること(306)と、順序チェックトリガトランザクション(ストア命令)(320)に依存する(ロード)命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブル(208B)が含むと判別したことに応じて、順序チェックトリガトランザクション(ストア命令)(320)に依存する(ロード)命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造(210B)においてルックアップ動作を実行すること(402)と、を含む。
【0040】
図7の例示的な方法では、依存する命令が物理アドレスを生成したと判別すること(502)は、制御ロジック(204)が、ロード命令が、アドレス生成ユニット(202B)によって物理アドレスを生成したことを検出することによって実施される。制御ロジック(204)は、アドレス生成ユニット(202B)がロード命令についての物理アドレスを生成したことを通知される毎に、OOB CAM(210B)のフィルタリングテーブル(208B)が更新される。具体的には、
図7の例示的な方法では、依存する命令のターゲットアドレスに関連するフィルタリングテーブル(208B)のエントリにおいて、依存する命令が物理アドレスを生成したことを示すこと(504)は、制御ロジック(204)が、ロード命令のターゲットアドレス(すなわち、物理アドレス又は論理アドレスの一部)のビットのサブセットを、OOB CAM(210B)のフィルタリングテーブル(208B)内のエントリの識別として使用することによって実施される。このエントリは、ターゲットアドレスの範囲を表し、0x03でマーク付けされる。このアクションは、示されたエントリ範囲内のアドレスをターゲットとするインフライトロード命令が存在することを示す。
【0041】
図7の例示的な方法では、特定のスロットがプログラム順に割り当て解除されるキューにおいて再使用されたことを検出したことに応じて、フィルタリングテーブル(208B)においてテーブルエントリをシフトすること(506)は、制御ロジック(204)が、ロードトラッキングキュー(206B)内の事前にプログラムされたスロットが再使用されたのを検出することによって実施される。ロードトラッキングキュー(206B)は、ロードIDによってインデックス付けされたビットベクトルであり、ディスパッチ時に(プログラム順に)割り当てられ、リタイア時に(再びプログラム順に)割り当て解除される。ロードトラッキングキュー(206B)は、対応するロードIDがインフライトロードによって予約された場合にビットを設定する。ロードトラッキングキュー(206B)は、ファーストインファーストアウトキューとして管理され、パイプラインフラッシュ時に、ロードトラッキングキュー(206B)は、違反するロードのロードID、又は、違反する命令若しくはパイプラインのフラッシュをトリガしたマイクロオペレーションに最も近い最古のロードのロードIDを用いてクリアされる。
【0042】
図7の例示的な方法では、順序チェックトリガトランザクション(320)を受信することは、制御ロジック(204)が、ストア命令が、アドレス生成ユニット(202B)によって物理アドレスを生成したことを検出することによって実施される。制御ロジック(204)は、アドレス生成ユニット(202B)がストア命令についての物理アドレスを生成したことが通知される毎に、OOB CAM(210B)のフィルタリングテーブル(208B)に照会する。
図7の例示的な方法では、順序チェックトリガトランザクション(320)に依存する命令が以前に物理アドレスを生成したかどうかを判別するために、順序チェックトリガトランザクション(320)のターゲットアドレスを使用して、フィルタリングテーブル(208B)に照会すること(304)は、制御ロジック(204)が、ロード命令が、ストア命令のターゲットアドレスの同じ範囲において以前に物理アドレスを生成したかどうかを判別するために、ストア命令のターゲットアドレスを使用して、フィルタリングテーブル(208B)に照会することによって実施される。
【0043】
図7の例示的な方法では、順序チェックトリガトランザクション(320)に依存する命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブル(208B)が有していないと判別することは、制御ロジック(204)が、ストア命令のターゲットアドレスの一部を使用してOOB CAMフィルタリングテーブル(208B)にアクセスし、ゼロエントリを読み出すことによって実施される。その結果、制御ロジック(204)は、同じターゲットアドレス範囲に対するロード命令が、アドレス生成ユニット(202B)によって以前に物理アドレスを生成したことを示す指標をフィルタリングテーブル(208B)内の関連するエントリが有していないと判別する。
【0044】
図7の例示的な方法では、順序チェックトリガトランザクション(320)に依存する命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造においてルックアップ動作をバイパスすること(306)は、制御ロジック(204)が、ロード命令が現在インフライトであるかどうか(すなわち、データが、インフライトロードによってターゲットとされた物理アドレスからロードされたかどうか)を判別するために、OOB CAM(210B)においてルックアップ動作をバイパスすることによって実施される。
【0045】
図7の例示的な方法では、順序チェックトリガトランザクション(320)に依存する命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブル(208B)が含むと判別することは、制御ロジック(204)が、ストア命令のターゲットアドレスの一部を使用してOOB CAMフィルタリングテーブル(208B)にアクセスし、非ゼロエントリを読み出すことによって実施される。その結果、制御ロジック(204)は、同じターゲットアドレス範囲に対するロード命令が、アドレス生成ユニット(202B)によって以前に物理アドレスを生成したことを示す指標をフィルタリングテーブル(208B)内の関連するエントリが含むと判別する。
【0046】
図7の例示的な方法では、順序チェックトリガトランザクション(320)に依存する命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造(210B)においてルックアップ動作を実行すること(402)は、制御ロジック(204)が、ストア命令が順序違反の対象(subject)であるかどうかを判別するために、OOB CAM(210B)上でCAMルックアップ動作を実行することによって実施される。
【0047】
図8は、LOQ CAMのコンテキスト内の実施形態による、ロード/ストアスペキュレーションのためのアドレスベースのフィルタリングに関する例示的な方法を示すフローチャートである。
図3、
図4及び
図5の組み合わせと同様に、
図8は、依存する(第1のロード)命令が物理アドレスを生成したことを検出すること(502)と、依存する(第1のロード)命令のターゲットアドレスに関連するフィルタリングテーブル(208C)のエントリにおいて、依存する(第1のロード)命令が物理アドレスを生成したことを示すこと(504)と、特定のスロットがプログラム順に割り当て解除されたキューにおいて再使用されたことを検出したことに応じて、フィルタリングテーブル(208C)においてテーブルエントリをシフトすること(506)と、を含む、アドレスの範囲に関連するテーブルエントリを含むフィルタリングテーブルを維持すること(302)を含む。更に、
図8は、順序チェックトリガトランザクション(第2のロード命令)(320)を受信したことに応じて、順序チェックトリガトランザクション(第2のロード命令)(320)に依存する(第1のロード)命令が以前に物理アドレスを生成したかどうかを判別するために、順序チェックトリガトランザクション(第2のロード命令)(320)のターゲットアドレスを使用して、フィルタリングテーブル(208C)に照会すること(304)と、順序チェックトリガトランザクション(第2のロード命令)(320)に依存する(第1のロード)命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブル(208C)が有していないと判別したことに応じて、順序チェックトリガトランザクション(第2のロード命令)(320)に依存する(第1のロード)命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造においてルックアップ動作をバイパスすること(306)と、順序チェックトリガトランザクション(第2のロード命令)(320)に依存する(第1のロード)命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブル(208C)が含むと判別したことに応じて、順序チェックトリガトランザクション(第2のロード命令)(320)に依存する(第1のロード)命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造(210C)においてルックアップ動作を実行すること(402)と、を含む。
【0048】
図8の例示的な方法では、依存する命令が物理アドレスを生成したことを検出すること(502)は、制御ロジック(204)が、ロード命令が、アドレス生成ユニット(202C)によって物理アドレスを生成したことを検出することによって実施される。制御ロジック(204)は、アドレス生成ユニット(202C)がロード命令についての物理アドレスを生成したことを通知される毎に、LOQ CAM(210C)のフィルタリングテーブル(208C)を更新する。具体的には、
図8の例示的な方法では、依存する命令のターゲットアドレスに関連するフィルタリングテーブル(208C)のエントリにおいて、依存する命令が物理アドレスを生成したことを示すこと(504)は、制御ロジック(204)が、ロード命令のターゲットアドレス(すなわち、物理アドレス又は論理アドレスの一部)のビットのサブセットを、LOQ CAM(210C)のフィルタリングテーブル(208C)内のエントリの識別として使用することによって実施される。このエントリは、ターゲットアドレスの範囲を表し、0x03でマーク付けされる。このアクションは、示されたエントリ範囲内のアドレスをターゲットとするインフライトロード命令が存在することを示す。
【0049】
図8の例示的な方法では、特定のスロットがプログラム順に割り当て解除されたキューにおいて再使用されたことを検出したことに応じて、フィルタリングテーブル(208C)においてテーブルエントリをシフトすること(506)は、制御ロジック(204)が、ロードトラッキングキュー(206C)内の事前にプログラムされたスロットが再使用されたことを検出することによって実施される。いくつかの実施形態では、ロードトラッキングキュー(206C)は、OOB CAMのコンテキスト及びLOQ CAMのコンテキストの両方においてフィルタリングテーブルシフトトリガとして使用される。
【0050】
図8の例示的な方法では、順序チェックトリガトランザクション(320)を受信することは、制御ロジック(204)が、キャッシュプローブ又はキャッシュエビクションが行われたことを検出することによって実施される。制御ロジック(204)は、キャッシュプローブ又はキャッシュエビクションが行われたことを通知される毎に、LOQ CAM(210B)のフィルタリングテーブル(208C)に照会する。
図8の例示的な方法では、順序チェックトリガトランザクション(320)に依存する命令が以前に物理アドレスを生成したかどうかを判別するために、順序チェックトリガトランザクション(320)のターゲットアドレスを使用して、フィルタリングテーブル(208C)に照会すること(304)は、制御ロジック(204)が、ロード命令が、キャッシュプローブのビクティム又はキャッシュエビクションのビクティムのターゲットアドレスの同じ範囲において以前に物理アドレスを生成したかどうかを判別するために、キャッシュプローブのビクティム又はキャッシュエビクションのビクティムのターゲットアドレスを使用して、フィルタリングテーブル(208C)に照会することによって実施される。
【0051】
図8の例示的な方法では、順序チェックトリガトランザクション(320)に依存する命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブル(208C)が有していないと判別することは、制御ロジック(204)が、キャッシュプローブのターゲットアドレスの一部を使用してLOQ CAMフィルタリングテーブル(208C)にアクセスし、ゼロエントリを読み出すことによって実施される。その結果、制御ロジック(204)は、同じターゲットアドレス範囲に対するロード命令が、アドレス生成ユニット(202C)によって以前に物理アドレスを生成したことを示す指標をフィルタリングテーブル(208B)内の関連するエントリが有していないと判別する。
【0052】
図8の例示的な方法では、順序チェックトリガトランザクション(320)に依存する命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造においてルックアップ動作をバイパスすること(306)は、制御ロジック(204)が、ロード命令が現在インフライトであるかどうか(すなわち、データが、インフライトロードによってターゲットとされた物理アドレスからロードされたかどうか)を判別するために、LOQ CAM(210C)においてルックアップ動作をバイパスすることによって実施される。
【0053】
図8の例示的な方法では、順序チェックトリガトランザクション(320)に依存する命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブル(208C)が含むと判別することは、制御ロジック(204)が、キャッシュプローブのターゲットアドレスの一部を使用してLOQ CAMフィルタリングテーブル(208C)にアクセスし、非ゼロエントリを読み出すことによって実施される。その結果、制御ロジック(204)は、同じターゲットアドレス範囲に対するロード命令が、アドレス生成ユニット(202C)によって以前に物理アドレスを生成したことを示す指標をフィルタリングテーブル(208C)内の関連するエントリが含むと判別する。
【0054】
図8の例示的な方法では、順序チェックトリガトランザクション(320)に依存する命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造(210C)においてルックアップ動作を実行すること(402)は、制御ロジック(204)が、キャッシュプローブのビクティム又はキャッシュエビクションのビクティムがメモリ順序違反の対象(subject)であるかどうかを判別するために、LOQ CAM(210C)上でCAMルックアップ動作を実行することによって実施される。
【0055】
上記の説明に鑑みて、読者は、実施形態によるロード/ストアスペキュレーションのためのアドレスベースのフィルタリングの利点が以下の点を含むことを認識するであろう。
・着信順序チェックトリガトランザクション(例えば、ロード命令、ストア命令、キャッシュプローブ、キャッシュエビクション)についてのフィルタリングテーブルを維持することによって、コンピューティングシステムの動作を改善し、いくつかの状況では、安価なフィルタリングテーブルのアクセスを使用して、依存する命令が存在しないことを識別することができ、コンピューティングシステムの電力効率を向上させること。
・性能を低下させることなく動的な電力消費を低減させることによって、コンピューティングシステムの動作を改善し、プロセッサコアにおけるロード/ストアマイクロ動作の電力効率を向上させること。
【0056】
例示的な実施形態は、主に、ロード/ストアスペキュレーションのためのアドレスベースのフィルタリングに関して十分に機能するコンピュータシステムのコンテキストにおいて説明される。本開示の態様は、本明細書において、本開示の実施形態による方法、装置(システム)及びコンピュータプログラム製品のフローチャートの図及び/又はブロック図を参照して説明される。フローチャートの図及び/又はブロック図の各々のブロック、並びに、フローチャートの図及び/又はブロック図におけるブロックの組み合わせは、コンピュータ可読プログラム命令によって実装されてもよいことが理解されよう。
【0057】
図面におけるフローチャート及びブロック図は、様々な実施形態によるシステム、方法及びコンピュータプログラム製品の可能な実装のアーキテクチャ、機能及び動作を表す。この点について、フローチャート又はブロック図の各ブロックは、特定の論理機能(複数可)を実施するための1つ以上の実行可能命令を含むモジュール、セグメント又は命令の一部を表してもよい。いくつかの代替的な実装形態では、ブロックに記述された機能は、図面において記述された順序以外で行われてもよい。例えば、連続して示された2つのブロックは、実際には、関連する機能に応じて、実質的に同時に実行されてもよいし、時には逆の順序で実行されてもよい。また、ブロック図及び/又はフローチャートの図の各々のブロック、並びに、ブロック図及び/又はフローチャートの図におけるブロックの組み合わせは、特定の機能又は動作を実行する特殊目的のハードウェアに基づくシステムによって実施されてもよいし、特殊目的ハードウェア及びコンピュータ命令の組み合わせで実施されてもよいことに留意されたい。
【0058】
上記は、ロード/ストアスペキュレーションのためのアドレスベースのフィルタリングの方法を説明し、方法は、アドレスの範囲に関連するテーブルエントリを含むフィルタリングテーブルを維持することと、順序チェックトリガトランザクションを受信したことに応じて、順序チェックトリガトランザクションに依存する命令が以前に物理アドレスを生成したかどうかを判別するために、順序チェックトリガトランザクションのターゲットアドレスを使用して、フィルタリングテーブルに照会することと、順序チェックトリガトランザクションに依存する命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブルが有していないと判別したことに応じて、順序チェックトリガトランザクションに依存する命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造においてルックアップ動作をバイパスすることと、を含む。
【0059】
方法は、順序チェックトリガトランザクションに依存する命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブルが含むと判別したことに応じて、順序チェックトリガトランザクションに依存する命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造においてルックアップ動作を実行することを含む。
【0060】
また、上記は、ロード/ストアスペキュレーションのためのアドレスベースのフィルタリングを用いるプロセッサのロードストアユニット、プロセッサ及び装置を説明する。ロードストアユニットは、アドレスの範囲に関連するテーブルエントリを含むフィルタリングテーブルを含み、ロードストアユニットの制御ロジックは、フィルタリングテーブルを維持し、順序チェックトリガトランザクションを受信したことに応じて、順序チェックトリガトランザクションに依存する命令が以前に物理アドレスを生成したかどうかを判別するために、順序チェックトリガトランザクションのターゲットアドレスを使用して、フィルタリングテーブルに照会し、順序チェックトリガトランザクションに依存する命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブルが有していないと判別したことに応じて、順序チェックトリガトランザクションに依存する命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造においてルックアップ動作をバイパスする。
【0061】
制御ロジックは、順序チェックトリガトランザクションに以前する命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブルが含むと判別したことに応じて、順序チェックトリガトランザクションに依存する命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造においてルックアップ動作を実行する。
【0062】
アドレスの範囲に関連するテーブルエントリを含むフィルタリングテーブルを維持することは、依存する命令が物理アドレスを生成したことを検出することと、依存する命令のターゲットアドレスに関連するフィルタリングテーブルのエントリにおいて、依存する命令が物理アドレスを生成したことを示すことと、を含む。また、アドレスの範囲に関連するテーブルエントリを含むフィルタリングテーブルを維持することは、特定のスロットがプログラム順に割り当て解除されたキューにおいて再使用されたことを検出したことに応じて、フィルタリングテーブルにおいてテーブルエントリをシフトすることを含んでもよい。プログラム順に割り当て解除されたキューは、ストアキュー又はロードトラッキングキューであってもよい。また、アドレスの範囲に関連するテーブルエントリを含むフィルタリングテーブルを維持することは、事前に選択されたリオーダバッファIDの再使用を検出したことに応じて、フィルタリングテーブルにおいてテーブルエントリをシフトすることを含んでもよい。フィルタリングテーブルは、複数の個別のテーブルを含んでもよい。
【0063】
順序チェックトリガトランザクションは、ロード命令であってもよい。したがって、順序チェックトリガトランザクションを受信することは、ロード命令が物理アドレスを生成したことを検出することを含んでもよく、順序チェックトリガトランザクションに依存する命令が以前に物理アドレスを生成したかどうかを判別するために、順序チェックトリガトランザクションのターゲットアドレスを使用して、フィルタリングテーブルに照会することは、ストア命令が以前に物理アドレスを生成したかどうかを判別するために、ロード命令のターゲットアドレスを使用して、フィルタリングテーブルに照会することを含んでもよく、順序チェックトリガトランザクションに依存する命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブルが有していないと判別することは、ストア命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブルが有していないと判別することを含んでもよく、順序チェックトリガトランザクションに依存する命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造においてルックアップ動作をバイパスすることは、ストアが現在インフライトであるかどうかを判別するために、ストアツーロード転送メモリ構造においてルックアップ動作をバイパスすることを含んでもよい。
【0064】
順序チェックトリガトランザクションは、ストア命令であってもよい。したがって、順序チェックトリガトランザクションを受信することは、ストア命令が物理アドレスを生成したことを検出することを含んでもよく、順序チェックトリガトランザクションに依存する命令が以前に物理アドレスを生成したかどうかを判別するために、順序チェックトリガトランザクションのターゲットアドレスを使用して、フィルタリングテーブルに照会することは、ロード命令が以前に物理アドレスを生成したかどうかを判別するために、ストア命令のターゲットアドレスを使用して、フィルタリングテーブルに照会することを含んでもよく、順序チェックトリガトランザクションに依存する命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブルが有していないと判別することは、ロード命令が以前に物理アドレスを生成したことを示す指標をフィルタリングテーブルが有していないと判別することを含んでもよく、順序チェックトリガトランザクションに依存する命令が現在インフライトであるかどうかを判別するために、順序違反メモリ構造においてルックアップ動作をバイパスすることは、ロードが現在インフライトであるかどうかを判別するために、アウトオブオーダバッファメモリ構造においてルックアップ動作をバイパスすることを含んでもよい。
【0065】
読者は、本明細書で説明したステップが様々な方法で実施されてもよく、特定の順序付けが必要とされないことを認識するであろう。本開示の様々な実施形態において修正及び変更を行うことができることが、上述した説明から更に理解されよう。本明細書における説明は、例示のみを目的としており、限定的な意味として解釈されない。本開示の範囲は、以下の特許請求の範囲の文言のみによって限定される。