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

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

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

特表2022-551776ページレベル追跡ロードオーダキューを用いた投機的実行
<>
  • 特表-ページレベル追跡ロードオーダキューを用いた投機的実行 図1
  • 特表-ページレベル追跡ロードオーダキューを用いた投機的実行 図2
  • 特表-ページレベル追跡ロードオーダキューを用いた投機的実行 図3
  • 特表-ページレベル追跡ロードオーダキューを用いた投機的実行 図4
  • 特表-ページレベル追跡ロードオーダキューを用いた投機的実行 図5
  • 特表-ページレベル追跡ロードオーダキューを用いた投機的実行 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-12-14
(54)【発明の名称】ページレベル追跡ロードオーダキューを用いた投機的実行
(51)【国際特許分類】
   G06F 9/38 20060101AFI20221207BHJP
   G06F 9/34 20060101ALI20221207BHJP
   G06F 9/312 20060101ALI20221207BHJP
【FI】
G06F9/38 310F
G06F9/34 350A
G06F9/312 L
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2021531811
(86)(22)【出願日】2020-10-18
(85)【翻訳文提出日】2022-01-13
(86)【国際出願番号】 US2020056209
(87)【国際公開番号】W WO2021080883
(87)【国際公開日】2021-04-29
(31)【優先権主張番号】16/658,688
(32)【優先日】2019-10-21
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.SMALLTALK
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【弁理士】
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【弁理士】
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【弁理士】
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】クリシュナン ヴィー. ラマニ
【テーマコード(参考)】
5B013
5B033
【Fターム(参考)】
5B013AA12
5B013CC20
5B033AA04
5B033DB01
(57)【要約】
ページレベル追跡ロードオーダキューを用いた投機的実行は、第1のロード命令が、確定したメモリ領域を対象にしていると判別することと、第1のロード命令が、確定したメモリ領域を対象にしていることに応じて、エントリを、ロードオーダキューの代わりにページレベル追跡ロードオーダキューに追加することとを含み、エントリは、第1のロード命令の対象のページアドレスを示す。
【選択図】図1
【特許請求の範囲】
【請求項1】
ページレベル追跡ロードオーダキューを用いた投機的実行のための方法であって、
第1のロード命令が、確定したメモリ領域を対象にしていると判別することと、
前記第1のロード命令が、前記確定したメモリ領域を対象にしていることに応じて、エントリを、ロードオーダキューの代わりに前記ページレベル追跡ロードオーダキューに追加することであって、前記エントリは、前記第1のロード命令の対象のページアドレスを示す、ことと、を含む、
方法。
【請求項2】
第2のロード命令が、前記確定したメモリ領域を対象にしていると判別することと、
前記第2のロード命令が、前記エントリで特定された前記ページアドレスを対象にしていると判別することと、
前記エントリのアクティビティカウンタを更新することと、をさらに含む、
請求項1の方法。
【請求項3】
第2のロード命令が、前記確定したメモリ領域を対象にしていないと判別することと、
前記第2のロード命令に基づいて、前記ロードオーダキューにエントリを追加することと、をさらに含む、
請求項1の方法。
【請求項4】
リオーダバッファの状態に基づいて、前記ページレベル追跡ロードオーダキューから前記エントリを削除するのを決定することをさらに含む、
請求項1の方法。
【請求項5】
前記リオーダバッファの状態に基づいて、前記ページレベル追跡ロードオーダキューから前記エントリを削除するのを決定することは、
前記リオーダバッファの状態に基づいて、前記エントリのアクティビティカウンタをデクリメントすることと、
前記アクティビティカウンタに基づいて、前記エントリを前記ページレベル追跡ロードオーダキューから削除することと、を含む、
請求項4の方法。
【請求項6】
前記確定したメモリ領域がプログラムスタックを含み、前記ロード命令が、確定したメモリ領域を対象にしていると判別することは、前記第1のロード命令が、スタックポインタに対するメモリアドレスを対象にしていると判別することを含む、
請求項1の方法。
【請求項7】
前記第1のロード命令が第1のスレッドに関連付けられており、
前記方法は、
第2のスレッドからストア命令対象を示すクエリを受信することと、
前記ストア命令対象が、前記エントリで特定された前記ページアドレスを含むことに応じて、パイプラインフラッシュを開始することと、をさらに含む、
請求項1の方法。
【請求項8】
ページレベル追跡ロードオーダキューを用いた投機的実行のためのロードストアユニットであって、
第1のロード命令が、確定したメモリ領域を対象にしていると判別することと、
前記第1のロード命令が、前記確定したメモリ領域を対象にしていることに応じて、エントリを、ロードオーダキューの代わりに前記ページレベル追跡ロードオーダキューに追加することであって、前記エントリは、前記第1のロード命令の対象のページアドレスを示す、ことと、
を含むステップを実行するように構成されている、
ロードストアユニット。
【請求項9】
前記ロードストアユニットは、
第2のロード命令が、前記確定したメモリ領域を対象にしていると判別することと、
前記第2のロード命令が、前記エントリで特定された前記ページアドレスを対象にしていると判別することと、
前記エントリのアクティビティカウンタを更新することと、
を含むステップを実行するように構成されている、
請求項8のロードストアユニット。
【請求項10】
前記ロードストアユニットは、
第2のロード命令が、前記確定したメモリ領域を対象にしていないと判別することと、
前記第2のロード命令に基づいて、前記ロードオーダキューにエントリを追加することと、
を含むステップを実行するように構成されている、
請求項8のロードストアユニット。
【請求項11】
前記ロードストアユニットは、リオーダバッファの状態に基づいて、前記ページレベル追跡ロードオーダキューから前記エントリを削除するのを決定することを含むステップを実行するように構成されている、
請求項8のロードストアユニット。
【請求項12】
前記リオーダバッファの状態に基づいて、前記ページレベル追跡ロードオーダキューから前記エントリを削除するのを決定することは、
前記リオーダバッファの状態に基づいて、前記エントリのアクティビティカウンタをデクリメントすることと、
前記アクティビティカウンタに基づいて、前記ページレベル追跡ロードオーダキューから前記エントリを削除することと、を含む、
請求項11のロードストアユニット。
【請求項13】
前記確定したメモリ領域がプログラムスタックを含み、前記ロード命令が、確定したメモリ領域を対象にしていると判別することは、前記第1のロード命令が、スタックポインタに対するメモリアドレスを対象にしていると判別することを含む、
請求項8のロードストアユニット。
【請求項14】
前記第1のロード命令が第1のスレッドに関連付けられており、
前記ロードストアユニットは、
第2のスレッドからストア命令対象を示すクエリを受信することと、
前記ストア命令対象が、前記エントリで特定された前記ページアドレスを含むことに応じて、パイプラインフラッシュを開始することと、
を含むステップを実行するように構成されている、
請求項8のロードストアユニット。
【請求項15】
ページレベル追跡ロードオーダキューを用いた投機的実行のためのプロセッサであって、
第1のロード命令が、確定したメモリ領域を対象にしていると判別することと、
前記第1のロード命令が、前記確定したメモリ領域を対象にしていることに応じて、エントリを、ロードオーダキューの代わりに前記ページレベル追跡ロードオーダキューに追加することであって、前記エントリは、前記第1のロード命令の対象のページアドレスを示す、ことと、
を含むステップを実行するように構成されたロードストアユニットを備える、
プロセッサ。
【請求項16】
前記プロセッサは、
第2のロード命令が、前記確定したメモリ領域を対象にしていると判別することと、
前記第2のロード命令が、前記エントリで特定された前記ページアドレスを対象にしていると判別することと、
前記エントリのアクティビティカウンタを更新することと、
を含むステップを実行するように構成されている、
請求項15のプロセッサ。
【請求項17】
前記プロセッサは、
第2のロード命令が、前記確定したメモリ領域を対象にしていないと判別することと、
前記第2のロード命令に基づいて、前記ロードオーダキューにエントリを追加することと、
を含むステップを実行するように構成されている、
請求項15のプロセッサ。
【請求項18】
前記プロセッサは、リオーダバッファの状態に基づいて、前記ページレベル追跡ロードオーダキューから前記エントリを削除するのを決定することを含むステップを実行するように構成されている、
請求項15のプロセッサ。
【請求項19】
前記リオーダバッファの状態に基づいて、前記ページレベル追跡ロードオーダキューから前記エントリを削除するのを決定することは、
前記リオーダバッファの状態に基づいて、前記エントリのアクティビティカウンタをデクリメントすることと、
前記アクティビティカウンタに基づいて、前記ページレベル追跡ロードオーダキューから前記エントリを削除することと、を含む、
請求項18のプロセッサ。
【請求項20】
前記確定したメモリ領域がプログラムスタックを含み、前記ロード命令が、確定したメモリ領域を対象にしていると判別することは、前記第1のロード命令が、スタックポインタに対するメモリアドレスを対象にしていると判別することを含む、
請求項15のプロセッサ。
【請求項21】
前記第1のロード命令が第1のスレッドに関連付けられており、
前記プロセッサは、
第2のスレッドからストア命令対象を示すクエリを受信することと、
前記ストア命令対象が、前記エントリで特定された前記ページアドレスを含むことに応じて、パイプラインフラッシュを開始することと、
を含むステップを実行するように構成されている、
請求項15のプロセッサ。
【発明の詳細な説明】
【背景技術】
【0001】
命令のアウトオブオーダ実行中に、投機的に実行されるロード命令を、ロードオーダキューに追加することができる。同じスレッドの古いロードが実行を完了すると、投機的に実行されたロードをロードオーダキューから削除することができる。ロードオーダキューが満杯になると、それ以上の投機的実行が許可されない。
【図面の簡単な説明】
【0002】
図1】いくつかの実施形態による、ページレベル追跡ロードオーダキューを用いた投機的実行のための例示的なプロセッサのブロック図である。
図2】いくつかの実施形態による、ページレベル追跡ロードオーダキューを用いた投機的実行のための例示的な方法のフローチャートである。
図3】いくつかの実施形態による、ページレベル追跡ロードオーダキューを用いた投機的実行のための例示的な方法のフローチャートである。
図4】いくつかの実施形態による、ページレベル追跡ロードオーダキューを用いた投機的実行のための例示的な方法のフローチャートである。
図5】いくつかの実施形態による、ページレベル追跡ロードオーダキューを用いた投機的実行のための例示的な方法のフローチャートである。
図6】いくつかの実施形態による、ページレベル追跡ロードオーダキューを用いた投機的実行のための例示的な方法のフローチャートである。
【発明を実施するための形態】
【0003】
いくつかの実施形態では、ページレベル追跡ロードオーダキュー(a page-level tracked load order queue)を用いた投機的実行の方法は、第1のロード命令が、確定したメモリ領域を対象にしていると判別することと、第1のロード命令が、確定したメモリ領域を対象にしていることに応じて、エントリを、ロードオーダキューの代わりにページレベル追跡ロードオーダキューに追加することであって、エントリは、第1のロード命令の対象のページアドレスを示す、ことと、を含む。
【0004】
いくつかの実施形態では、方法は、第2のロード命令が、確定したメモリ領域を対象にしていると判別することと、第2のロード命令が、エントリで指定されたページアドレスを対象にしていると判別することと、エントリのアクティビティカウンタを更新することと、をさらに含む。いくつかの実施形態では、方法は、第2のロード命令が、確定したメモリ領域を対象にしていないと判別することと、第2のロード命令に基づいて、エントリをロードオーダキューに追加することと、をさらに含む。いくつかの実施形態では、方法は、リオーダバッファの状態に基づいて、エントリをページレベル追跡ロードオーダキューから削除するのを決定することをさらに含む。いくつかの実施形態では、リオーダバッファの状態に基づいて、エントリをページレベル追跡ロードオーダキューから削除するのを決定することは、リオーダバッファの状態に基づいて、エントリのアクティビティカウンタをデクリメントすることと、アクティビティカウンタに基づいて、エントリをページレベル追跡ロードオーダキューから削除することと、を含む。いくつかの実施形態では、確定したメモリ領域がプログラムスタックであり、ロード命令が、確定したメモリ領域を対象にしていると判別することは、第1のロード命令が、スタックポインタに対するメモリアドレスを対象にしていると判別することを含む。いくつかの実施形態では、第1のロード命令が第1のスレッドに関連付けられており、方法は、第2のスレッドからストア命令対象を示すクエリを受信することと、ストア命令対象が、エントリで特定されたページアドレスを含むことに応じて、パイプラインフラッシュを開始することと、をさらに含む。
【0005】
いくつかの実施形態では、ページレベル追跡ロードオーダキューを用いた投機的実行のためのロードストアユニットは、第1のロード命令が、確定したメモリ領域を対象にしていると判別することと、第1のロード命令が、確定したメモリ領域を対象にしていることに応じて、エントリを、ロードオーダキューの代わりにページレベル追跡ロードオーダキューに追加することであって、エントリは、第1のロード命令の対象のページアドレスを示す、ことと、を含むステップを実行する。
【0006】
いくつかの実施形態では、上記のステップは、第2のロード命令が、確定したメモリ領域を対象にしていると判別することと、第2のロード命令が、エントリで指定されたページアドレスを対象にしていると判別することと、エントリのアクティビティカウンタを更新することと、をさらに含む。いくつかの実施形態では、上記のステップは、第2のロード命令が、確定したメモリ領域を対象にしていないと判別することと、第2のロード命令に基づいて、エントリをロードオーダキューに追加することと、をさらに含む。いくつかの実施形態では、上記のステップは、リオーダバッファの状態に基づいて、エントリをページレベル追跡ロードオーダキューから削除するのを決定することをさらに含む。いくつかの実施形態では、リオーダバッファの状態に基づいて、エントリをページレベル追跡ロードオーダキューから削除するのを決定することは、リオーダバッファの状態に基づいて、エントリのアクティビティカウンタをデクリメントすることと、アクティビティカウンタに基づいて、エントリをページレベル追跡ロードオーダキューから削除することと、を含む。いくつかの実施形態では、確定したメモリ領域がプログラムスタックであり、ロード命令が、確定したメモリ領域を対象にしていると判別することは、第1のロード命令が、スタックポインタに対するメモリアドレスを対象にしていると判別することを含む。いくつかの実施形態では、第1のロード命令が第1のスレッドに関連付けられており、上記のステップは、第2のスレッドからストア命令対象を示すクエリを受信することと、ストア命令対象が、エントリで指定されたページアドレスを含むことに応じて、パイプラインフラッシュを開始することと、をさらに含む。
【0007】
いくつかの実施形態では、ページレベル追跡ロードオーダキューを用いた投機的実行のためのプロセッサは、第1のロード命令が、確定したメモリ領域を対象にしていると判別することと、第1のロード命令が、確定したメモリ領域を対象にしていることに応じて、エントリを、ロードオーダキューの代わりにページレベル追跡ロードオーダキューに追加することであって、エントリは、第1のロード命令の対象のページアドレスを示す、ことと、を含むステップを実行するロードストアユニットを含む。
【0008】
いくつかの実施形態では、上記のステップは、第2のロード命令が、確定したメモリ領域を対象にしていると判別することと、第2のロード命令が、エントリで指定されたページアドレスを対象にしていると判別することと、エントリのアクティビティカウンタを更新することと、をさらに含む。いくつかの実施形態では、上記のステップは、第2のロード命令が、確定したメモリ領域を対象にしていないと判別することと、第2のロード命令に基づいて、エントリをロードオーダキューに追加することと、をさらに含む。いくつかの実施形態では、上記のステップは、リオーダバッファの状態に基づいて、エントリをページレベル追跡ロードオーダキューから削除するのを決定することをさらに含む。いくつかの実施形態では、リオーダバッファの状態に基づいて、エントリをページレベル追跡ロードオーダキューから削除するのを決定することは、リオーダバッファの状態に基づいて、エントリのアクティビティカウンタをデクリメントすることと、アクティビティカウンタに基づいて、エントリをページレベル追跡ロードオーダキューから削除することと、を含む。いくつかの実施形態では、確定したメモリ領域がプログラムスタックであり、ロード命令が、確定したメモリ領域を対象にしていると判別することは、第1のロード命令が、スタックポインタに対するメモリアドレスを対象にしていると判別することを含む。いくつかの実施形態では、第1のロード命令が第1のスレッドに関連付けられており、上記のステップは、第2のスレッドからストア命令対象を示すクエリを受信することと、ストア命令対象が、エントリで指定されたページアドレスを含むことに応じて、パイプラインフラッシュを開始することと、をさらに含む。
【0009】
いくつかの実施形態では、ページレベル追跡ロードオーダキューを用いた投機的実行のための装置は、第1のロード命令が、確定したメモリ領域を対象にしていると判別することと、第1のロード命令が、確定したメモリ領域を対象にしていることに応じて、エントリを、ロードオーダキューの代わりにページレベル追跡ロードオーダキューに追加することであって、エントリは、第1のロード命令の対象のページアドレスを示す、ことと、を含むステップを実行するロードストアユニットを含むプロセッサを含む。
【0010】
いくつかの実施形態では、上記のステップは、第2のロード命令が、確定したメモリ領域を対象にしていると判別することと、第2のロード命令が、エントリで指定されたページアドレスを対象にしていると判別することと、エントリのアクティビティカウンタを更新することと、をさらに含む。いくつかの実施形態では、上記のステップは、第2のロード命令が、確定したメモリ領域を対象にしていないと判別することと、第2のロード命令に基づいて、エントリをロードオーダキューに追加することと、をさらに含む。いくつかの実施形態では、上記のステップは、リオーダバッファの状態に基づいて、エントリをページレベル追跡ロードオーダキューから削除するのを決定することをさらに含む。いくつかの実施形態では、リオーダバッファの状態に基づいて、エントリをページレベル追跡ロードオーダキューから削除するのを決定することは、リオーダバッファの状態に基づいて、エントリのアクティビティカウンタをデクリメントすることと、アクティビティカウンタに基づいて、エントリをページレベル追跡ロードオーダキューから削除することと、を含む。いくつかの実施形態では、確定したメモリ領域がプログラムスタックであり、ロード命令が、確定したメモリ領域を対象にしていると判別することは、第1のロード命令が、スタックポインタに対するメモリアドレスを対象にしていると判別することを含む。いくつかの実施形態では、第1のロード命令が第1のスレッドに関連付けられており、上記のステップは、第2のスレッドからストア命令対象を示すクエリを受信することと、ストア命令対象が、エントリで指定されたページアドレスを含むことに応じて、パイプラインフラッシュを開始することと、をさらに含む。
【0011】
図1は、いくつかの実施形態による、非限定的な例示的なプロセッサ100のブロック図である。例示的なプロセッサ100は、モバイルデバイス、パーソナルコンピュータ、周辺ハードウェアコンポーネント、ゲーミングデバイス、セットトップボックス等を含む様々なコンピューティングデバイスに実装することができる。プロセッサ100は、ロードストアユニット102を含む。ロードストアユニット102は、ロード命令及びストア命令の実行、ロード操作及びストア操作の仮想アドレスの生成、メモリからのデータのロード、及び/又は、レジスタからメモリへのデータのストアを担当する専用の実行ユニット(例えば、ロジック及び/又は回路の組み合わせ)である。
【0012】
プロセッサ100は、パフォーマンスを向上させるために、いくつかの命令をアウトオブオーダで実行する。したがって、ロードストアユニット102は、ロード命令を、他の命令に対して順序を変えて投機的に実行する。そのために、ロードストアユニット102は、ロードオーダキュー104を維持する。ロードオーダキュー104は、投機的に実行されるロード命令を各エントリに記憶するデータ構造である。ロードオーダキュー104のエントリ内の投機的に実行されたロードに関係のある全ての古いロードがコミットされると、そのエントリはロードオーダキューから削除され得る。
【0013】
ロードストアユニット102は、別のスレッドから(例えば、コヒーレンシインタフェース105を介して別のプロセッサ又はコアから)、他のスレッドによってアクセスされている(例えば、書き込まれている)メモリアドレスを示すクエリを受信することができる。メモリアドレスがロードオーダキュー104のエントリと一致する場合には、投機的に実行されたロードが正しくない可能性があるため、順序違反が発生している。したがって、実行パイプラインをフラッシュする必要がある。
【0014】
既存のソリューションでは、投機的に実行される全てのロード命令は、ロードオーダキュー104又は同様のデータ構造(例えば、ロードストアキュー、ロードキュー等)に追加される。ロードオーダキュー104が満杯になると、追加のロード命令を投機的に実行することができなくなり、パフォーマンスが低下する。対照的に、ページレベル追跡ロードオーダキューを用いる投機的実行のためのプロセッサ100のロードストアユニット102は、ロード命令(例えば、投機的に実行されるロード命令)が、確定したメモリ領域を対象にしているかどうかを判別する。確定したメモリ領域は、プログラムスタックを含むことができる。したがって、ロードストアユニット102は、ロード命令が、スタックレジスタ106にストアされたスタックポインタに対するメモリアドレスを対象にしているかどうかを判別する。例えば、命令「mov regX,[rsp+offset]」は、データがロードされるメモリアドレスが、スタックレジスタ106内のスタックポインタ(命令では「rsp」として識別される)にオフセット(offset)を加えることによって計算されるので、プログラムスタック(確定したメモリ領域)を対象にしている。一方、命令「regX,[regBase+regIndex+offset]」は、データがロードされるメモリアドレスがスタックポインタと無関係であるので、確定したメモリ領域を対象としない。
【0015】
プログラムスタックを対象にしているロード命令は、殆どがデータキャッシュ108にヒットするので、他のロード命令と比較して処理が速い。多くのプログラムシナリオでは(例えば、高度にループされ又は反復されたコードでは)、プログラムスタックを対象にしているロード命令は、他のロード命令の数よりも不釣り合いに多く、したがって、ロードオーダキュー104に偏ってロードされることになり、ロードオーダキュー104を満杯にし、さらなる投機的実行を停止させる。
【0016】
ロード命令が、確定したメモリ領域を対象にしていることに応じて、ロードストアユニット102は、ロードオーダキュー104の代わりに、ページレベル追跡ロードオーダキュー110にエントリを追加する。エントリは、ロード命令の対象のページアドレスを示す(例えば、確定したメモリ領域の記憶位置のページアドレス)。エントリに示されるページサイズは、実行中のオペレーティングシステムの最小ページサイズによって異なる。したがって、4キロバイトの最小ページサイズを実装するオペレーティングシステムでは、各エントリは、確定したメモリ領域内のページのうち4キロバイトのページアドレスを示す。
【0017】
ページレベル追跡ロードオーダキュー110の各エントリには、そのエントリのページを対象にしているロード命令が投機的に実行された各エントリの最新性を示すアクティビティカウンタも含まれている。例えば、アクティビティカウンタは、最初に全て「1」に設定された複数のビット(例えば、2ビット)を含むことができる。以下に説明するように、追加の命令が実行され及び/又はコミットされると、アクティビティカウンタは1つ右にシフトし得る。例えば、「11」に設定された2ビットアクティビティカウンタは、「01」にシフトされることになる。アクティビティカウンタは、後に、エントリが、ページレベル追跡ロードオーダキュー110から削除され得ることを示す「00」に設定され得る。
【0018】
第1のロード命令のエントリが、ページレベル追跡ロードオーダキュー110にストアされると仮定すると、ロードストアユニット102は、第2のロード命令が、確定したメモリ領域を対象にしていると判別することができる。ロードストアユニット102は、第2のロード命令が、エントリで識別されたページアドレスを対象にしている場合、エントリのアクティビティカウンタを更新する。例えば、エントリのアクティビティカウンタが「01」に設定されている場合、アクティビティカウンタは「11」に更新される。別の例として、エントリのアクティビティカウンタが「11」に設定されている場合、アクティビティカウンタは「11」のままである。したがって、第2のロード命令のために新しいエントリがページレベル追跡ロードオーダキュー110に追加される代わりに、アクティビティカウンタが更新される。これにより、確定したメモリ領域の同じページアドレスを対象にして投機的に実行される複数のロード命令が、ページレベル追跡ロードオーダキュー110の1つのエントリによって反映されることが可能になる。したがって、これにより、全てのロード命令が、ロードオーダキュー104又は同等のデータ構造内の対応するエントリによってそれぞれ反映される既存のソリューションと比較して、より効率的なメモリ使用方法が提供される。第2のロード命令が、ページレベル追跡ロードオーダキュー110のエントリに含まれないページアドレスを代わりに対象にした場合、ページレベル追跡ロードオーダキューには、第2のロード命令のために新しいエントリが生成される。
【0019】
また、ロードストアユニット102は、受信した投機的に実行されるロード命令が、確定したメモリ領域を対象にしていないと判別することもある。その場合、ロードストアユニット102は、第2のロード命令に基づいて、ロードオーダキュー104にエントリを追加する。言い換えれば、確定したメモリ領域を対象にしない投機的に実行されるロード命令は、エントリをロードオーダキュー104に追加させ、一方、確定したメモリ領域を対象にしている投機的に実行されるロード命令は、エントリをページレベル追跡ロードオーダキュー110に追加又は更新させる。
【0020】
第1のロード命令のエントリがページレベル追跡ロードオーダキュー110にストアされ、第1のロード命令が第1のスレッドに関連付けられている(例えば、プロセッサ100によって実行される)と仮定する。ロードストアユニット102は、(例えば、別のプロセッサ又はコアによって実行される)第2のスレッドから、ストア命令対象を示すクエリを(例えば、コヒーレンシインタフェース105を介して)受信する。ストア命令対象がページレベル追跡ロードオーダキュー110内のエントリのページアドレスを含む場合、ストア命令対象は、順序違反が発生したことを示す。したがって、実行パイプラインがフラッシュされる。
【0021】
ロードストアユニット102は、リオーダバッファ112の状態に基づいて、ページレベル追跡ロードオーダキュー110からエントリを削除することを決定する。リオーダバッファ112は、プログラム順に「コミット」するために、投機的に実行される命令とその結果とをストアする。例えば、ロードストアユニット102は、リオーダバッファ112のバッファコミットメントサイクル毎に、ページレベル追跡ロードオーダキュー110内の各エントリのアクティビティカウンタをデクリメントする(例えば、シフトする)。バッファコミットメントサイクルとは、リオーダバッファ112が、リオーダバッファ112内のエントリ数に等しい数の命令をコミットすることである。例えば、リオーダバッファ112が100個のエントリを有すると仮定すると、100個の命令がコミットされる毎にバッファコミットサイクルが発生することになる。エントリのアクティビティカウンタが「00」又は別の確定状態に達すると、そのエントリはページレベル追跡ロードオーダキューから削除され得る。
【0022】
さらなる説明のために、図2は、本開示の実施形態による、ページレベル追跡ロードオーダキューを用いる投機的実行のための例示的な方法を説明するフローチャートを示しており、方法は、第1のロード命令204(例えば、投機的に実行されたロード命令)が、確定したメモリ領域を対象にしていると(例えば、ロードストアユニット102によって)判別すること(202)を含む。確定したメモリ領域は、プログラムスタックを含み得る。したがって、判別すること(202)は、第1のロード命令204が、スタックレジスタ106にストアされたスタックポインタに対するメモリアドレスを対象にしていると判別することを含む。例えば、命令「mov regX,[rsp+offset]」は、データがロードされるメモリアドレスが、スタックレジスタ106内のスタックポインタ(命令では「rsp」として識別される)にオフセット(offset)を加えることによって計算されるので、プログラムスタック(確定したメモリ領域)を対象にしている。一方、命令「mov regX,[regBase+regIndex+offset]」は、データがロードされるメモリアドレスがスタックポインタと無関係であるので、確定したメモリ領域を対象としない。
【0023】
また、図2の方法は、第1のロード命令204が、確定したメモリ領域を対象にしていることに応じて、ロードオーダキュー104の代わりにページレベル追跡ロードオーダキュー110に(例えば、ロードストアユニット102によって)エントリ208を追加すること(206)を含み、この場合、エントリ208は、第1のロード命令204の対象のページアドレス(例えば、確定したメモリ領域の記憶位置のページアドレス)を示す。エントリに示されるページサイズは、実行中のオペレーティングシステムの最小ページサイズによって決まる。したがって、4キロバイトの最小ページサイズを実装するオペレーティングシステムの場合、各エントリ208は、確定したメモリ領域内のページのうち4キロバイトのページアドレスを示す。
【0024】
ページレベル追跡ロードオーダキュー110のエントリ208は、そのエントリ208のページを対象にしているロード命令が投機的に実行された各エントリの最新性(recency)を示すアクティビティカウンタも含む。例えば、アクティビティカウンタは、最初に全て「1」に設定された複数のビット(例えば、2ビット)を含むことができる。追加の命令が実行及び/又はコミットされると、アクティビティカウンタは1つ右にシフトし得る。例えば、「11」に設定された2ビットアクティビティカウンタは、「01」にシフトされることになる。アクティビティカウンタは、後に、エントリが、ページレベル追跡ロードオーダキュー110から削除され得ることを示す「00」に設定され得る。
【0025】
さらなる説明のために、図2は、本開示の実施形態による、ページレベル追跡ロードオーダキューを用いる投機的実行のための例示的な方法を説明するフローチャートを示しており、方法は、第1のロード命令204(例えば、投機的に実行されたロード命令)が、確定したメモリ領域を対象にしていると(例えば、ロードストアユニット102によって)判別すること(202)と、第1のロード命令204が、確定したメモリ領域を対象にしていることに応じて、ロードオーダキュー104の代わりにページレベル追跡ロードオーダキュー110にエントリ208を(例えば、ロードストアユニット102によって)追加すること(206)と、を含み、この場合、エントリ208は、第1のロード命令204の対象のページアドレスを示す。
【0026】
図3の方法は、図3の方法が、第2のロード命令304が、確定したメモリ領域(例えば、スタックレジスタ106内のスタックポインタによって示されるプログラムスタック)を対象にしていると(例えば、ロードストアユニット102によって)判別すること(302)を含むという点で、図2の方法と異なる。図3の方法は、図3の方法が、第2のロード命令304が、エントリ208で特定されたページアドレスを対象にしていると判別すること(306)を含むという点で、図2の方法と異なる。例えば、ロードストアユニット102は、第2のロード命令304対象のページアドレスが、ページレベル追跡ロードオーダキュー110内のエントリ208に「ヒット」又は一致するかどうかを判別する。図3の方法は、図3の方法が、エントリ208のアクティビティカウンタを(例えば、ロードストアユニット102によって)更新すること(308)を含むという点で、図2の方法と異なる。
【0027】
例えば、エントリ208のアクティビティカウンタが「01」に設定されている場合、アクティビティカウンタは「11」に更新される。別の例として、エントリ208のアクティビティカウンタが「11」に設定されている場合、アクティビティカウンタは「11」のままである。したがって、第2のロード命令304のために、新しいエントリがページレベル追跡ロードオーダキュー110に追加される代わりに、アクティビティカウンタが更新される。これにより、確定したメモリ領域の同じページアドレスを対象にして投機的に実行される複数のロード命令が、ページレベル追跡ロードオーダキュー110の1つのエントリ208によって反映されることが可能になる。
【0028】
さらなる説明のために、図4は、本開示の実施形態による、ページレベル追跡ロードオーダキュー110を用いる投機的実行のための例示的な方法を説明するフローチャートを示しており、方法は、第1のロード命令204(例えば、投機的に実行されたロード命令)が、確定したメモリ領域を対象にしていると(例えば、ロードストアユニット102によって)判別すること(202)と、第1のロード命令204が、確定したメモリ領域を対象にしていることに応じて、ロードオーダキュー104の代わりにページレベル追跡ロードオーダキュー110にエントリ208を(例えば、ロードストアユニット102によって)追加すること(206)と、を含み、この場合、エントリ208は、第1のロード命令204の対象のページアドレスを示す。
【0029】
図4の方法は、図4の方法が、第2のロード命令404が、確定したメモリ領域(例えば、スタックレジスタ106内のスタックポインタによって示されるプログラムスタック)を対象にしないと(例えば、ロードストアユニット102によって)判別すること(402)を含むという点で、図2の方法と異なる。図4の方法は、図4の方法が、第2のロード命令404に基づいて、ロードオーダキュー104にエントリ408を追加すること(406)を含むという点で、図2の方法と異なる。言い換えれば、確定したメモリ領域を対象にしない投機的に実行されるロード命令により、ロードオーダキュー104にエントリが追加され、一方、確定したメモリ領域を対象にしている投機的に実行されるロード命令により、ページレベル追跡ロードオーダキュー110にエントリが追加又は更新される。
【0030】
さらなる説明のために、図5は、本開示の実施形態による、ページレベル追跡ロードオーダキュー110を用いる投機的実行のための例示的な方法を説明するフローチャートを示しており、方法は、第1のロード命令204(例えば、投機的に実行されたロード命令)が、確定したメモリ領域を対象にしていると(例えば、ロードストアユニット102によって)判別すること(202)と、第1のロード命令204が、確定したメモリ領域を対象にしていることに応じて、ロードオーダキュー104の代わりにページレベル追跡ロードオーダキュー110にエントリ208を追加すること(206)と、を含み、この場合、エントリ208は、第1のロード命令204の対象のページアドレスを示す。
【0031】
図5の方法は、図5の方法が、リオーダバッファ112の状態に基づいて、ページレベル追跡ロードオーダキュー110からエントリを削除することを(例えば、ロードストアユニット102によって)判別すること(502)を含むという点で、図2の方法と異なる。リオーダバッファ112は、プログラム順に「コミット」するために、投機的に実行される命令とその結果とをストアする。例えば、ロードストアユニット102は、リオーダバッファ112のバッファコミットメントサイクル毎に、ページレベル追跡ロードオーダキュー110内の各エントリのアクティビティカウンタをデクリメントする(例えば、シフトする)。バッファコミットメントサイクルとは、リオーダバッファ112が、リオーダバッファ112内のエントリ数に等しい数の命令をコミットすることである。例えば、リオーダバッファ112が100個のエントリを有すると仮定すると、100個の命令がコミットされる毎にバッファコミットサイクルが発生することになる。エントリのアクティビティカウンタが「00」又は別の確定状態に達すると、そのエントリは、ページレベル追跡ロードオーダキューから削除され得る。したがって、リオーダバッファ112の状態に基づいてエントリ208を判別すること(502)は、リオーダバッファ112の状態(例えば、バッファコミットメントサイクル)に基づいて、エントリ208のアクティビティカウンタをデクリメントすることと、アクティビティカウンタに基づいて、ページレベル追跡ロードオーダキュー110からエントリ208を削除することと、を含む。
【0032】
さらなる説明のために、図6は、本開示の実施形態による、ページレベル追跡ロードオーダキュー110を用いる投機的実行のための例示的な方法を説明するフローチャートを示しており、方法は、第1のロード命令204(例えば、投機的に実行されたロード命令)が、確定したメモリ領域を対象にしていると(例えば、ロードストアユニット102によって)判別すること(202)と、第1のロード命令204が、確定したメモリ領域を対象にしていることに応じて、ロードオーダキュー104の代わりにページレベル追跡ロードオーダキュー110にエントリ208を(例えば、ロードストアユニット102によって)追加すること(206)と、を含み、この場合、エントリ208は、第1のロード命令204の対象のページアドレスを示す。
【0033】
図6の方法は、図6の方法が、(例えば、別のプロセッサ又はコアによって実行される)第2のスレッドからストア命令対象を示すクエリ604を(例えば、コヒーレンシインタフェース105を介して)受信すること(602)を含むという点で、図2の方法と異なる。このクエリは、ストア命令対象のデータ(例えば、メモリアドレス)をストアする別の実行される命令又は投機的に実行される命令に対応する。図6の方法は、図6の方法が、ストア命令対象が、エントリ208で特定されたページアドレスを含むことに応じて、パイプラインフラッシュを開始すること(606)を含むという点で、図2の方法と異なる。例えば、ロードストアユニットは、ストア命令対象に含まれるページアドレスがエントリのページアドレスに一致するかどうかを判別することができる。したがって、順序違反が発生し、実行パイプラインがフラッシュされる。
【0034】
上記の説明を考慮すると、本開示の実施形態による、ページレベル追跡ロードオーダキューを用いる投機的実行の利点は、次のことであることを読者は認識するであろう。
・定義されたメモリ領域の同一ページを対象にしている複数のロードが単一のエントリによって表されるようにすることで、キューに入れられる投機的に実行されるロード命令の記憶効率(storage efficiency)を向上させることにより、コンピューティングシステムのパフォーマンスを向上させる。
・ロードオーダキューのより効率的なスペース使用を提供し、確定したメモリ領域を対象にしているロード命令によってロードオーダキューが満杯になる可能性を減らし、それによって投機的実行の停止を防ぐことにより、コンピューティングシステムのパフォーマンスを向上させる。
【0035】
本開示の例示的な実施形態は、主に、ページレベル追跡ロードオーダキューを用いる投機的実行のための完全に機能するコンピュータシステムに関連して説明される。一方、本開示は、任意の適切なデータ処理システムで使用するために、コンピュータ可読記憶媒体上に配置されたコンピュータプログラム製品にも具現化できることを、当業者である読者は認識するであろう。そのようなコンピュータ可読記憶媒体は、磁気媒体、光学媒体、又は、他の適切な媒体を含む、機械可読情報のための任意の記憶媒体であり得る。そのような媒体の例としては、ハードドライブ又はディスケット内の磁気ディスク、光学ドライブ用のコンパクトディスク、磁気テープ、及び、当業者が思いつくであろう他のものが挙げられる。当業者であれば、適切なプログラミング手段を有する任意のコンピュータシステムが、コンピュータプログラム製品に具現化された本開示の方法のステップを実行することができることを直ちに認識するであろう。当業者であれば、本明細書に記載されている例示的な実施形態の一部は、コンピュータハードウェア上にインストールされて実行されるソフトウェアに適応されているが、それにもかかわらず、ファームウェアとして又はハードウェアとして実装される代替実施形態が、本開示の範囲内に十分に含まれることも認識するであろう。
【0036】
本開示は、システム、方法、及び/又は、コンピュータプログラム製品であることが可能である。コンピュータプログラム製品は、本開示の態様をプロセッサに実行させるためのコンピュータ可読プログラム命令をその媒体上に有するコンピュータ可読記憶媒体(複数可)を含み得る。
【0037】
コンピュータ可読記憶媒体は、命令実行デバイスが使用するための命令を保持及び記憶することができる有形のデバイスであり得る。コンピュータ可読記憶媒体は、例えば、電子記憶装置、磁気記憶装置、光学式記憶装置、電磁記憶装置、半導体記憶装置、又は、これらの任意の適切な組み合わせとすることができるが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例を非網羅的に挙げると、以下のようなものがある。すなわち、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、消去可能プログラマブルリードオンリーメモリ(EPROM若しくはフラッシュメモリ)、スタティックランダムアクセスメモリ(SRAM)、ポータブルコンパクトディスクリードオンリメモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリスティック、フロッピー(登録商標)ディスク、命令が記録されたパンチカード若しくは溝内の隆起構造等の機械的に符号化されたデバイス、及び、上記の任意の適切な組み合わせである。本明細書で使用されるコンピュータ可読記憶媒体は、電波若しくは他の自由に伝播する電磁波、導波管若しくは他の伝送媒体を伝播する電磁波(例えば、光ファイバケーブルを通過する光パルス)、又は、電線を介して伝送される電気信号等のように、それ自体が一時的な信号であると解釈されるべきではない。
【0038】
本明細書に記載されているコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/プロセッシングデバイスに、又は、ネットワーク(例えば、インターネット、ローカルエリアネットワーク、ワイドエリアネットワーク及び/若しくはワイヤレスネットワーク)を介して外部のコンピュータ若しくは外部記憶装置にダウンロードすることができる。ネットワークは、銅製の伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ、及び/又は、エッジサーバを含み得る。各コンピューティング/処理デバイスのネットワークアダプタカード又はネットワークインタフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、そのコンピュータ可読プログラム命令を転送して、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体に保存する。
【0039】
本開示の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械語命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、又は、Smalltalk、C++等のオブジェクト指向プログラミング言語や、「C」プログラミング言語若しくは類似のプログラミング言語等の従来の手続き型プログラミング言語を含む、1つ以上のプログラミング言語の任意の組み合わせで記述されたソースコード若しくはオブジェクトコードの何れかであり得る。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアローンのソフトウェアパッケージとして実行すること、部分的にユーザのコンピュータ上で実行し、部分的にリモートコンピュータ上で実行すること、又は、完全にリモートコンピュータ若しくはサーバ上で実行することが可能である。後者のシナリオでは、リモートコンピュータは、ローカルエリアネットワーク(LAN)若しくはワイドエリアネットワーク(WAN)を含む、任意の種類のネットワークを介してユーザのコンピュータに接続することができ、又は、外部のコンピュータに(例えば、インターネットサービスプロバイダを用いるインターネット経由で)接続することができる。いくつかの実施形態では、例えば、プログラマブルロジック回路、フィールドプログラマブルゲートアレイ(FPGA)又はプログラマブルロジックアレイ(PLA)を含む電子回路は、本開示の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路をパーソナライズすることにより、コンピュータ可読プログラム命令を実行することができる。
【0040】
本開示の態様は、本開示の実施形態による方法、装置(システム)、コンピュータプログラム製品のフローチャート図及び/又はブロック図を参照して本明細書で説明される。フローチャート図及び/又はブロック図の各ブロック、フローチャート図及び/又はブロック図のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装できることが理解されよう。
【0041】
これらのコンピュータ可読プログラム命令は、汎用コンピュータ、特殊用途コンピュータ、又は、他のプログラム可能なデータ処理装置のプロセッサに提供されて、コンピュータ又は他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャート及び/又はブロック図の1つ以上のブロックで指定される機能/動作を実施するための手段を生成するように、機械を生成することができる。これらのコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体に保存することもでき、このコンピュータ可読記憶媒体は、その中に保存された命令を有するコンピュータ可読記憶媒体が、コンピュータ、プログラム可能なデータ処理装置、及び/又は、他のデバイスに、フローチャート及び/又はブロック図の1つ以上のブロックで指定される機能/動作の態様を実施する命令を含む製造品を含むような特定の方法で機能するように指示することができる。
【0042】
また、コンピュータ可読プログラム命令をコンピュータ、他のプログラム可能なデータ処理装置、又は、他のデバイスにロードすることで、一連の操作ステップをコンピュータ、他のプログラム可能なデータ処理装置、又は、他のデバイス上で実行し、コンピュータ、他のプログラム可能なデータ処理装置、又は、他のデバイスで実行される命令がフローチャート及び/又はブロック図の1つ以上のブロックで指定される機能/動作を実施するような、コンピュータ実施プロセスを生成することができる。
【0043】
図中のフローチャート及びブロック図は、本開示の様々な実施形態によるシステム、方法及びコンピュータプログラム製品の可能な実装のアーキテクチャ、機能及び動作を示している。この点に関して、フローチャート又はブロック図の各ブロックは、指定された論理機能(複数可)を実装するための1つ以上の実行可能な命令を含む、命令のモジュール、セグメント又は部分を表し得る。いくつかの代替実施態様では、ブロックに示されている機能が、図に示されている順序から外れて行われることがある。例えば、連続して示されている2つのブロックが、実際には、実質的に同時に実行されてもよいし、関係している機能に応じて、ブロックが逆の順序で実行されることがあってもよい。また、ブロック図及び/又はフローチャート図の各ブロック、ブロック図及び/又はフローチャート図中のブロックの組み合わせは、指定された機能若しくは動作を実行する、又は、特殊用途のハードウェアとコンピュータ命令との組み合わせを実行する、特殊用途のハードウェアベースシステムによって実施することができることにも留意されたい。
【0044】
以上の説明から、本開示の様々な実施形態において修正及び変更を行うことが理解されよう。本明細書における説明は、例示のみを目的とし、限定的な意味で解釈されるべきものではない。本開示の範囲は、以下の特許請求の範囲の文言によってのみ限定される。
図1
図2
図3
図4
図5
図6
【手続補正書】
【提出日】2022-04-22
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
ページレベル追跡ロードオーダキューを用いた投機的実行のためのロードストアユニットであって、
第1のロード命令が、確定したメモリ領域を対象にしていると判別することと、
前記第1のロード命令が、前記確定したメモリ領域を対象にしていることに応じて、エントリを、ロードオーダキューの代わりに前記ページレベル追跡ロードオーダキューに追加することであって、前記エントリは、前記第1のロード命令の対象のページアドレスを示す、ことと、
を含むステップを実行するように構成されている、
ロードストアユニット。
【請求項2】
前記ロードストアユニットは、
第2のロード命令が、前記確定したメモリ領域を対象にしていると判別することと、
前記第2のロード命令が、前記エントリで特定された前記ページアドレスを対象にしていると判別することと、
前記エントリのアクティビティカウンタを更新することと、
を含むステップを実行するように構成されている、
請求項のロードストアユニット。
【請求項3】
前記ロードストアユニットは、
第2のロード命令が、前記確定したメモリ領域を対象にしていないと判別することと、
前記第2のロード命令に基づいて、前記ロードオーダキューにエントリを追加することと、
を含むステップを実行するように構成されている、
請求項のロードストアユニット。
【請求項4】
前記ロードストアユニットは、リオーダバッファの状態に基づいて、前記ページレベル追跡ロードオーダキューから前記エントリを削除するのを決定することを含むステップを実行するように構成されている、
請求項のロードストアユニット。
【請求項5】
前記リオーダバッファの状態に基づいて、前記ページレベル追跡ロードオーダキューから前記エントリを削除するのを決定することは、
前記リオーダバッファの状態に基づいて、前記エントリのアクティビティカウンタをデクリメントすることと、
前記アクティビティカウンタに基づいて、前記ページレベル追跡ロードオーダキューから前記エントリを削除することと、を含む、
請求項のロードストアユニット。
【請求項6】
前記確定したメモリ領域がプログラムスタックを含み、前記ロード命令が、確定したメモリ領域を対象にしていると判別することは、前記第1のロード命令が、スタックポインタに対するメモリアドレスを対象にしていると判別することを含む、
請求項のロードストアユニット。
【請求項7】
前記第1のロード命令が第1のスレッドに関連付けられており、
前記ロードストアユニットは、
第2のスレッドからストア命令対象を示すクエリを受信することと、
前記ストア命令対象が、前記エントリで特定された前記ページアドレスを含むことに応じて、パイプラインフラッシュを開始することと、
を含むステップを実行するように構成されている、
請求項のロードストアユニット。
【請求項8】
ページレベル追跡ロードオーダキューを用いた投機的実行のためのプロセッサであって、
第1のロード命令が、確定したメモリ領域を対象にしていると判別することと、
前記第1のロード命令が、前記確定したメモリ領域を対象にしていることに応じて、エントリを、ロードオーダキューの代わりに前記ページレベル追跡ロードオーダキューに追加することであって、前記エントリは、前記第1のロード命令の対象のページアドレスを示す、ことと、
を含むステップを実行するように構成されたロードストアユニットを備える、
プロセッサ。
【請求項9】
前記プロセッサは、
第2のロード命令が、前記確定したメモリ領域を対象にしていると判別することと、
前記第2のロード命令が、前記エントリで特定された前記ページアドレスを対象にしていると判別することと、
前記エントリのアクティビティカウンタを更新することと、
を含むステップを実行するように構成されている、
請求項のプロセッサ。
【請求項10】
前記プロセッサは、
第2のロード命令が、前記確定したメモリ領域を対象にしていないと判別することと、
前記第2のロード命令に基づいて、前記ロードオーダキューにエントリを追加することと、
を含むステップを実行するように構成されている、
請求項のプロセッサ。
【請求項11】
前記プロセッサは、リオーダバッファの状態に基づいて、前記ページレベル追跡ロードオーダキューから前記エントリを削除するのを決定することを含むステップを実行するように構成されている、
請求項のプロセッサ。
【請求項12】
前記リオーダバッファの状態に基づいて、前記ページレベル追跡ロードオーダキューから前記エントリを削除するのを決定することは、
前記リオーダバッファの状態に基づいて、前記エントリのアクティビティカウンタをデクリメントすることと、
前記アクティビティカウンタに基づいて、前記ページレベル追跡ロードオーダキューから前記エントリを削除することと、を含む、
請求項11のプロセッサ。
【請求項13】
前記確定したメモリ領域がプログラムスタックを含み、前記ロード命令が、確定したメモリ領域を対象にしていると判別することは、前記第1のロード命令が、スタックポインタに対するメモリアドレスを対象にしていると判別することを含む、
請求項のプロセッサ。
【請求項14】
前記第1のロード命令が第1のスレッドに関連付けられており、
前記プロセッサは、
第2のスレッドからストア命令対象を示すクエリを受信することと、
前記ストア命令対象が、前記エントリで特定された前記ページアドレスを含むことに応じて、パイプラインフラッシュを開始することと、
を含むステップを実行するように構成されている、
請求項のプロセッサ。
【国際調査報告】