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

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

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

特許7523361命令をフェッチ及び復号するオペレーションキャッシュ及び命令キャッシュに対する低レイテンシ同期
<>
  • 特許-命令をフェッチ及び復号するオペレーションキャッシュ及び命令キャッシュに対する低レイテンシ同期 図1
  • 特許-命令をフェッチ及び復号するオペレーションキャッシュ及び命令キャッシュに対する低レイテンシ同期 図2
  • 特許-命令をフェッチ及び復号するオペレーションキャッシュ及び命令キャッシュに対する低レイテンシ同期 図3
  • 特許-命令をフェッチ及び復号するオペレーションキャッシュ及び命令キャッシュに対する低レイテンシ同期 図4A
  • 特許-命令をフェッチ及び復号するオペレーションキャッシュ及び命令キャッシュに対する低レイテンシ同期 図4B
  • 特許-命令をフェッチ及び復号するオペレーションキャッシュ及び命令キャッシュに対する低レイテンシ同期 図4C
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-07-18
(45)【発行日】2024-07-26
(54)【発明の名称】命令をフェッチ及び復号するオペレーションキャッシュ及び命令キャッシュに対する低レイテンシ同期
(51)【国際特許分類】
   G06F 9/30 20180101AFI20240719BHJP
   G06F 12/0875 20160101ALI20240719BHJP
【FI】
G06F9/30 310B
G06F12/0875 110
【請求項の数】 18
(21)【出願番号】P 2020570478
(86)(22)【出願日】2019-05-15
(65)【公表番号】
(43)【公表日】2021-10-14
(86)【国際出願番号】 US2019032540
(87)【国際公開番号】W WO2019245677
(87)【国際公開日】2019-12-26
【審査請求日】2022-05-10
(31)【優先権主張番号】16/014,715
(32)【優先日】2018-06-21
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【弁理士】
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【弁理士】
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【弁理士】
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】マリウス エバース
(72)【発明者】
【氏名】ダーナラジ バプラオ タバレ
(72)【発明者】
【氏名】アショク ティルパシー ベンカタチャー
(72)【発明者】
【氏名】アルナーチャラム アンナマライ
(72)【発明者】
【氏名】ドナルド エー. プライアー
(72)【発明者】
【氏名】ダグラス アール. ウィリアムス
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許出願公開第2006/0053245(US,A1)
【文献】米国特許出願公開第2015/0347308(US,A1)
【文献】米国特許第08433850(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30
G06F 12/0875
(57)【特許請求の範囲】
【請求項1】
プログラム順序において復号されたマイクロオペレーションを記憶したオペレーションキューへの出力、及び命令実行パイプラインの残りによる後続の実行のための復号されたマイクロオペレーションに、第1の予測されたアドレスブロックの命令アドレスを変換する方法であって、
前記第1の予測されたアドレスブロックに関連付けられたインデックスをオペレーションキャッシュタグアレイに提供して、第1のオペレーションキャッシュタグアレイエントリに関連付けられた第1のタグと、第2のオペレーションキャッシュタグアレイエントリに関連付けられた第2のタグと、を取得することと、
第1のコンピュータクロックサイクルにおいて、前記第1のタグ及び前記第2のタグの両方が、前記第1の予測されたアドレスブロックから導出されたタグと一致し、前記第1のオペレーションキャッシュタグアレイエントリに関連付けられた終了アドレスが、前記第2のオペレーションキャッシュタグアレイエントリに関連付けられた開始アドレスと一致することを判別することと、
前記第1のコンピュータクロックサイクルにおいて、復号されたマイクロオペレーションがオペレーションキャッシュパスのオペレーションキャッシュデータアレイに記憶されている命令のセットを、前記第1のオペレーションキャッシュタグアレイエントリ及び前記第2のオペレーションキャッシュタグアレイエントリの両方に関連付けられたアドレスの命令として識別することと、
前記命令のセットに対する第1のオペレーションキャッシュキューエントリをオペレーションキャッシュキューに記憶することであって、前記第1のオペレーションキャッシュキューエントリは、処理されるために命令キャッシュパスから信号を受信することを待機するかどうかを示すインジケーションを含む、前記記憶することと、
前記オペレーションキャッシュから、前記第1のオペレーションキャッシュキューエントリに対応する復号されたマイクロオペレーションを取得することと、
処理されるために前記命令キャッシュパスから前記信号を受信することを待機するかどうかを示す、前記第1のオペレーションキャッシュキューエントリの前記インジケーションに基づいた時間において、前記第1のオペレーションキャッシュキューエントリに対応する前記復号されたマイクロオペレーションを前記オペレーションキューに出力することと、を備えた、方法。
【請求項2】
前記インジケーションは、前記命令キャッシュパスからの前のマイクロオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトであることを待機する必要性を示し、
前記復号されたマイクロオペレーションを前記オペレーションキューに出力することは、前記第1のオペレーションキャッシュキューに対応する前記復号されたマイクロオペレーションを前記オペレーションキューに出力する前に、前記命令キャッシュパスからの前記前のマイクロオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトであるまで待機することを含む、請求項1に記載の方法。
【請求項3】
前記インジケーションは、前記命令キャッシュパスからの前のマイクロオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトであることを待機する必要性を示さず、
前記復号されたマイクロオペレーションを前記オペレーションキューに出力することは、前記命令キャッシュパスからの前のマイクロオペレーションを待機することなく、前記第1のオペレーションキャッシュキューエントリに対応する前記復号されたマイクロオペレーションを出力することを含む、請求項1に記載の方法。
【請求項4】
2の予測されたアドレスブロックが、それに対して復号されたマイクロオペレーションが前記オペレーションキャッシュに記憶されていない少なくとも1つの命令を含むと識別することと、
命令キャッシュキューエントリを命令キャッシュキューに記憶することと、
前記オペレーションキャッシュからの前のオペレーションが前記オペレーションキャッシュに書き込まれ、または前記オペレーションキャッシュに書き込まれるのにインフライトであることを待機するかどうかを示すインジケーションに従って、命令バイトバッファ内の前記命令キャッシュキューエントリに対する命令バイトを取得することと、
前記オペレーションキャッシュパスからの前記前のオペレーションを待機するかどうかを示す前記インジケーションに基づいた時間において、前記命令バイトバッファエントリに対応する復号されたマイクロオペレーションを取得するよう、前記命令バイトを復号することと、
記憶するために、前記命令バイトバッファエントリに対応する前記復号されたマイクロオペレーションを前記オペレーションキューに出力することと、
によって、前記オペレーションキューへの出力、及び前記命令実行パイプラインの残りによる後続の実行のための復号されたマイクロオペレーションに、前記第2の予測されたアドレスブロックの命令アドレスを変換することを更に備えた、請求項1に記載の方法。
【請求項5】
前記オペレーションキャッシュパスからの前記前のオペレーションを待機するかどうかを示す前記インジケーションは、前記オペレーションキャッシュパスからの前記前のオペレーションを待機する必要性を示し、
前記命令バイトを復号することは、前記オペレーションキャッシュパスからの前記前のオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトになった後に、前記命令バイトを復号することを含む、請求項4に記載の方法。
【請求項6】
前記オペレーションキャッシュパスからの前記前のオペレーションを待機するかどうかを示す前記インジケーションは、前記オペレーションキャッシュパスからの前記前のオペレーションを待機する必要性がないことを示し、
前記命令バイトを復号することは、前記オペレーションキャッシュパスからの前記前のオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトであることを待機することなく、前記命令バイトを復号することを含む、請求項4に記載の方法。
【請求項7】
前記第1の予測されたアドレスブロックは、それに対して復号されたマイクロオペレーションがオペレーションキャッシュに記憶された少なくとも1つの命令、及びそれに対して復号されたオペレーションが前記オペレーションキャッシュに記憶されていない少なくとも1つの命令を含む、請求項1に記載の方法。
【請求項8】
前記オペレーションキューに記憶された前記マイクロオペレーションを実行することを更に備えた、請求項1に記載の方法。
【請求項9】
プログラム順序において復号されたマイクロオペレーションを記憶したオペレーションキューへの出力、及び命令実行パイプラインの残りによる後続の実行のための復号されたマイクロオペレーションに、第1の予測されたアドレスブロックの命令アドレスを変換する命令フェッチ及び復号ユニットであって、
前記第1の予測されたアドレスブロックに関連付けられたインデックスをオペレーションキャッシュタグアレイに提供して、第1のオペレーションキャッシュタグアレイエントリに関連付けられた第1のタグと、第2のオペレーションキャッシュタグアレイエントリに関連付けられた第2のタグと、を取得することと、
第1のコンピュータクロックサイクルにおいて、前記第1のタグ及び前記第2のタグの両方が、前記第1の予測されたアドレスブロックから導出されたタグと一致し、前記第1のオペレーションキャッシュタグアレイエントリに関連付けられた終了アドレスが、前記第2のオペレーションキャッシュタグアレイエントリに関連付けられた開始アドレスと一致することを判別することと、
前記第1のコンピュータクロックサイクルにおいて、復号されたマイクロオペレーションがオペレーションキャッシュパスのオペレーションキャッシュデータアレイに記憶されている命令のセットを、前記第1のオペレーションキャッシュタグアレイエントリ及び前記第2のオペレーションキャッシュタグアレイエントリの両方に関連付けられたアドレスの命令として識別することと、
を行うように構成された共有フェッチロジックと、
前記命令のセットに対する第1のオペレーションキャッシュキューエントリを記憶するように構成されたオペレーションキャッシュキューであって、前記第1のオペレーションキャッシュキューエントリは、処理されるために命令キャッシュパスから信号を受信することを待機するかどうかを示すインジケーションを含む、前記オペレーションキャッシュキューと、
前記オペレーションキャッシュから前記第1のオペレーションキャッシュキューエントリに対応する復号されたマイクロオペレーションを取得し、処理されるために前記命令キャッシュパスから前記信号を受信することを待機するかどうかを示す、前記第1のオペレーションキャッシュキューエントリの前記インジケーションに基づいた時間において、前記第1のオペレーションキャッシュキューエントリに対応する前記復号されたマイクロオペレーションを前記オペレーションキューに出力するように構成されたオペレーションキャッシュデータ読み出しロジックと、を備えた、命令フェッチ及び復号ユニット。
【請求項10】
前記インジケーションは、前記命令キャッシュパスからの前のマイクロオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトであることを待機する必要性を示し、
前記復号されたマイクロオペレーションを前記オペレーションキューに出力することは、前記第1のオペレーションキャッシュキューに対応する前記復号されたマイクロオペレーションを前記オペレーションキューに出力する前に、前記命令キャッシュパスからの前記前のマイクロオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトであるまで待機することを含む、請求項9に記載の命令フェッチ及び復号ユニット。
【請求項11】
前記インジケーションは、前記命令キャッシュパスからの前のマイクロオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトであることを待機する必要性を示さず、
前記復号されたマイクロオペレーションを前記オペレーションキューに出力することは、前記命令キャッシュパスからの前のマイクロオペレーションを待機することなく、前記第1のオペレーションキャッシュキューエントリに対応する前記復号されたマイクロオペレーションを出力することを含む、請求項9に記載の命令フェッチ及び復号ユニット。
【請求項12】
前記共有フェッチロジック及び前記命令キャッシュパスは、
2の予測されたアドレスブロックが、それに対して復号されたマイクロオペレーションが前記オペレーションキャッシュに記憶されていない少なくとも1つの命令を含むと識別することと、
命令キャッシュキューエントリを命令キャッシュキューに記憶することと、
前記オペレーションキャッシュからの前のオペレーションが前記オペレーションキャッシュに書き込まれ、または前記オペレーションキャッシュに書き込まれるのにインフライトであることを待機するかどうかを示すインジケーションに従って、命令バイトバッファ内の前記命令キャッシュキューエントリに対する命令バイトを取得することと、
前記オペレーションキャッシュパスからの前記前のオペレーションを待機するかどうかを示す前記インジケーションに基づいた時間において、前記命令バイトバッファエントリに対応する復号されたマイクロオペレーションを取得するよう、前記命令バイトを復号することと、
記憶するために、前記命令バイトバッファエントリに対応する前記復号されたマイクロオペレーションを前記オペレーションキューに出力することと、
によって、前記オペレーションキューへの出力、及び前記命令実行パイプラインの残りによる後続の実行のための復号されたマイクロオペレーションに、前記第2の予測されたアドレスブロックの命令アドレスを変換するように構成されている、請求項9に記載の命令フェッチ及び復号ユニット。
【請求項13】
前記オペレーションキャッシュパスからの前記前のオペレーションを待機するかどうかを示す前記インジケーションは、前記オペレーションキャッシュパスからの前記前のオペレーションを待機する必要性を示し、
前記命令バイトを復号することは、前記オペレーションキャッシュパスからの前記前のオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトになった後に、前記命令バイトを復号することを含む、請求項12に記載の命令フェッチ及び復号ユニット。
【請求項14】
前記オペレーションキャッシュパスからの前記前のオペレーションを待機するかどうかを示す前記インジケーションは、前記オペレーションキャッシュパスからの前記前のオペレーションを待機する必要性がないことを示し、
前記命令バイトを復号することは、前記オペレーションキャッシュパスからの前記前のオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトであることを待機することなく、前記命令バイトを復号することを含む、請求項12に記載の命令フェッチ及び復号ユニット。
【請求項15】
前記第1の予測されたアドレスブロックは、それに対して復号されたマイクロオペレーションがオペレーションキャッシュに記憶された少なくとも1つの命令、及びそれに対して復号されたオペレーションが前記オペレーションキャッシュに記憶されていない少なくとも1つの命令を含む、請求項9に記載の命令フェッチ及び復号ユニット。
【請求項16】
プログラム順序において復号されたマイクロオペレーションを記憶したオペレーションキューへの出力、及び命令実行パイプラインの残りによる後続の実行のための復号されたマイクロオペレーションに、第1の予測されたアドレスブロックの命令アドレスを変換する命令フェッチ及び復号ユニットを備え、
前記命令フェッチ及び復号ユニットは、
前記第1の予測されたアドレスブロックに関連付けられたインデックスをオペレーションキャッシュタグアレイに提供して、第1のオペレーションキャッシュタグアレイエントリに関連付けられた第1のタグと、第2のオペレーションキャッシュタグアレイエントリに関連付けられた第2のタグと、を取得することと、
第1のコンピュータクロックサイクルにおいて、前記第1のタグ及び前記第2のタグの両方が、前記第1の予測されたアドレスブロックから導出されたタグと一致し、前記第1のオペレーションキャッシュタグアレイエントリに関連付けられた終了アドレスが、前記第2のオペレーションキャッシュタグアレイエントリに関連付けられた開始アドレスと一致することを判別することと、
前記第1のコンピュータクロックサイクルにおいて、復号されたマイクロオペレーションがオペレーションキャッシュパスのオペレーションキャッシュデータアレイに記憶されている命令のセットを、前記第1のオペレーションキャッシュタグアレイエントリ及び前記第2のオペレーションキャッシュタグアレイエントリの両方に関連付けられたアドレスの命令として識別することと、
を行うように構成された共有フェッチロジックと、
前記命令のセットに対する第1のオペレーションキャッシュキューエントリを記憶するように構成されたオペレーションキャッシュキューであって、前記第1のオペレーションキャッシュキューエントリは、処理されるために命令キャッシュパスから信号を受信することを待機するかどうかを示すインジケーションを含む、前記オペレーションキャッシュキューと、
前記オペレーションキャッシュから、前記第1のオペレーションキャッシュキューエントリに対応する復号されたマイクロオペレーションを取得し、処理されるために前記命令キャッシュパスから前記信号を受信することを待機するかどうかを示す、前記第1のオペレーションキャッシュキューエントリの前記インジケーションに基づいた時間において、前記第1のオペレーションキャッシュキューエントリに対応する前記復号されたマイクロオペレーションを前記オペレーションキューに出力するように構成されたオペレーションキャッシュデータ読み出しロジックと、を含む、プロセッサ。
【請求項17】
前記インジケーションは、前記命令キャッシュパスからの前のマイクロオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトであることを待機する必要性を示し、
前記復号されたマイクロオペレーションを前記オペレーションキューに出力することは、前記第1のオペレーションキャッシュキューに対応する前記復号されたマイクロオペレーションを前記オペレーションキューに出力する前に、前記命令キャッシュパスからの前記前のマイクロオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトであるまで待機することを含む、請求項16に記載のプロセッサ。
【請求項18】
前記インジケーションは、前記命令キャッシュパスからの前のマイクロオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトであることを待機する必要性を示さず、
前記復号されたマイクロオペレーションを前記オペレーションキューに出力することは、前記命令キャッシュパスからの前のマイクロオペレーションを待機することなく、前記第1のオペレーションキャッシュキューエントリに対応する前記復号されたマイクロオペレーションを出力することを含む、請求項16に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、その内容が本明細書における参照によって以下に組み込まれる、2018年6月21日に出願された米国特許出願第16/014,715号の利益を主張する。
【背景技術】
【0002】
マイクロプロセッサ命令実行パイプラインは、命令をフェッチし、実行のためにマイクロオペレーションに命令を復号する。命令フェッチ及び復号は、非常に多くの電力を消費し、また、性能のボトルネックとなることがある。命令フェッチ及び復号への改善が常に行われている。
【発明の概要】
【0003】
添付図面を例として併用して、以下の説明からより詳細な理解を得ることができる。
【図面の簡単な説明】
【0004】
図1】1つ以上の開示される特徴を実装することができる、実施例のデバイスのブロック図である。
図2】実施例に従った、図1のプロセッサの命令実行パイプラインのブロック図である。
図3】実施例に従った、図2の命令実行パイプラインの命令フェッチ及び復号ユニットの構成要素を示すブロック図である。
図4A】実施例に従った、命令フェッチ及び復号ユニットの共有フェッチロジックのオペレーションの方法のフローチャートである。
図4B】実施例に従った、オペレーションキャッシュからキャッシュされ復号されたマイクロオペレーションをフェッチするオペレーションキャッシュキューのエントリを処理する方法のフローチャートである。
図4C】実施例に従った、命令バイトバッファに記憶された命令バイトをフェッチ及び復号する方法のフローチャートである。
【発明を実施するための形態】
【0005】
命令フェッチ及び復号ユニットは、前に復号された命令を記憶したオペレーションキャッシュ、及び復号されていない命令バイトを記憶した命令キャッシュを含む。命令フェッチ及び復号ユニットは、分岐予測子によって予測された、予測されたアドレスブロックに対応する命令をフェッチする。命令フェッチ及び復号ユニットは、フェッチ制御ブロックを含み、フェッチ制御ブロックは、予測されたアドレスブロックがオペレーションキャッシュパスまたは命令キャッシュパスからフェッチされるべきであるかどうか、及びそれらのキャッシュ内のどのエントリが関連する命令を保持するかを判定する。オペレーションキャッシュパスは、命令がオペレーションキャッシュ内で利用可能であるときに使用される。オペレーションキャッシュパスは、オペレーションキャッシュから復号されたマイクロオペレーションを取り出す。命令キャッシュパスは、命令キャッシュから命令バイトを取り出し、それらの命令バイトをマイクロオペレーションに復号する。
【0006】
フェッチ制御ロジックは、予測されたアドレスブロックに対するヒットを検出するよう、オペレーションキャッシュのタグアレイを検査する。本明細書で他に説明されるフェッチ制御ロジックの特別な特徴に起因して、予測されたアドレスブロックをフェッチするために1つよりも多いオペレーションキャッシュエントリが必要とされるケースでは、単一のサイクルにおいて複数のヒットが検出可能である。それに対してオペレーションキャッシュ内でヒットが発見されない命令について、命令キャッシュパスは、命令キャッシュ及びより高いレベルのキャッシュから命令バイトをフェッチし、それらの命令を復号する。
【0007】
フェッチ制御ロジックは、オペレーションキャッシュキューエントリを生成する。それらのエントリは、エントリの命令アドレスよりも前の命令が、命令キャッシュパスによってサービスされることになるかを示し、よって、オペレーションキャッシュパスが、そのオペレーションキャッシュキューエントリに対して復号されたマイクロオペレーションを出力する前に、前の命令に対して復号されたオペレーションを出力するよう、命令キャッシュパスを待機する必要があるかどうかを示す。フェッチ制御ロジックはまた、命令キャッシュパスに対して命令キャッシュキューエントリを生成し、命令キャッシュパスは、命令バイトバッファエントリの命令に対応する復号されたマイクロオペレーションが、それら自体が出力される前に、前の命令に対してマイクロオペレーションを出力するよう、オペレーションキャッシュパスを待機する必要があるかどうかを示す。よって、両方のパスは、いずれかの特定の復号されたオペレーションに対しても、そのようなオペレーションが、出力されることになる反対のパスからの復号されたオペレーションを待機する必要があるかどうかを知る。この同期機構は、他のパスを待機する必要があることに起因してワークがストールする必要があるまで、そのワークがいずれかのパスにおいて進行することを可能にする。複数のオペレーションキャッシュを検出する能力の組み合わせは、予測されたアドレスブロックに対して単一のサイクルにおいてヒットし、同期機構は、最小レイテンシを有する異なるパスの間の切り替えを可能にする。
【0008】
図1は、本開示の態様が実装される、実施例のデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲーミングデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、またはタブレットコンピュータを含む。デバイス100は、プロセッサ102、メモリ104、記憶装置106、1つ以上の入力デバイス108、及び1つ以上の出力デバイス110を含む。デバイス100は、入力ドライバ112及び出力ドライバ114を含む。デバイス100が図1には示されない追加の構成要素を含んでもよいことが理解されよう。
【0009】
プロセッサ102は、既知であるように、マイクロプロセッサ、マイクロコントローラ、または他のデバイスなど、ソフトウェアを実行することが可能なコンピューティングデバイスである。メモリ104は、プロセッサ102による使用のための命令及びデータを記憶する。実施例では、メモリ104は、プロセッサ102と同一のダイ上に位置する。別の実施例では、メモリ104は、プロセッサ102とは異なるダイ上に位置する。メモリ104は、ランダムアクセスメモリ(RAM)、動的RAM、またはキャッシュなどの揮発性メモリを含む。いくつかの実施例では、メモリ104は、不揮発性メモリを含む。
【0010】
記憶装置106は、ハードディスクドライブ、ソリッドステートドライブ、光学ディスク、またはフラッシュドライブなどの固定のまたは着脱可能の記憶装置を含む。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、生体スキャナ、ネットワーク接続(例えば、無線IEEE802信号の送信及び/または受信のための無線ローカルエリアネットワークカード)、及び/または他の入力デバイスを含む。出力デバイス110は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上のライト、アンテナ、ネットワーク接続(例えば、無線IEEE802信号の送信及び受信のための無線ローカルエリアネットワークカード)、及び/または他の出力デバイスを含む。
【0011】
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信することを可能にする。様々な実施例では、デバイス100は、1つまたは1つよりも多い入力ドライバ112を含む(1つのみが示されるが)。入力ドライバ112は、カスタム、固定機能ハードウェア、プログラム可能ハードウェア、プロセッサ(プロセッサ102など)上で実行するソフトウェア、またはいずれかのそれらの組み合わせとして具体化される。様々な実施例では、入力ドライバ112は、プロセッサ102及び入力デバイス108の両方に結合された、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)ポートなどのポートに挿入された拡張カードを含む。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信することを可能にする。様々な実施例では、デバイス100は、1つまたは1つよりも多い出力ドライバ114を含む(1つのみが示されるが)。出力ドライバ114は、カスタム、固定機能ハードウェア、プログラム可能ハードウェア、プロセッサ(プロセッサ102など)上で実行するソフトウェア、またはいずれかのそれらの組み合わせとして具体化される。様々な実施例では、出力ドライバ114は、プロセッサ102及び入力デバイス108の両方に結合された、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)ポートなどのポートに挿入された拡張カードを含む。
【0012】
図2は、実施例に従った、図1のプロセッサ102内に含まれる、命令実行パイプライン200のブロック図である。命令実行パイプライン200は、メモリにデータを出力すること、及びレジスタファイル218内のレジスタなど、命令実行パイプライン200内の要素の状態を修正すること、などの命令をメモリから取り出し、命令を実行する。
【0013】
命令実行パイプライン200は、命令キャッシュを介してシステムメモリ(メモリ104など)から命令をフェッチし、フェッチされた命令を復号する命令フェッチ及び復号ユニット202を含む。フェッチされた命令を復号することは、命令実行パイプライン200による実行のために、フェッチされた命令をマイクロオペレーション(単に「オペレーション」とも)に変換する。用語「命令」は、プロセッサ102に対して命令セットアーキテクチャにおいて指定されたタスクを指す。命令は、ソフトウェアによる実行に対して指定されてもよい。マイクロオペレーションは、一般的にソフトウェアによって直接使用可能でないサブタスクである。代わりに、マイクロオペレーションは、ソフトウェアによって要求された命令を実行するために、プロセッサ102によって実際に実行される個々のタスクである。よって、命令を復号することは、機能的ユニット216、ロード/記憶ユニット214、及び命令実行パイプライン200の他の部分に適用されることになる制御信号を識別することを含む。ある命令を復号することは、命令ごとに複数のマイクロオペレーションをもたらし、その他の命令を復号することは、命令ごとに1つのマイクロオペレーションをもたらす。
【0014】
実行パイプライン200はまた、マイクロオペレーションを処理する演算を実行する機能的ユニット216、マイクロオペレーションによって指定されるようにデータキャッシュ220を介してシステムメモリからデータをロードし、またはシステムメモリにデータを記憶するロード/記憶ユニット214、並びにマイクロオペレーションに対して機能するデータを記憶したレジスタを含むレジスタファイル218を含む。
【0015】
並び替えバッファ210は、現在インフライトである命令を追跡し、インフライトの間に順序が正しくない実行を許可するにも関わらず、命令の順序が正しい除却を保証する。「インフライト」命令は、並び替えバッファ210によって受信されたが、まだ「除却」されておらず、すなわち、プロセッサのアーキテクチャ状態にコミットされた結果(例えば、アーキテクチャレジスタに書き込まれた結果)をまだ有さない命令を指す。命令の全てのマイクロオペレーションが実行されたとき、命令は、除却されると考えられる。予約ステーション212は、インフライトマイクロオペレーションを維持し、マイクロオペレーションに対してオペランドを追跡する。全てのオペランドが特定のマイクロオペレーションの実行に対して準備ができているとき、予約ステーション212は、実行するために、機能的ユニット216またはロード/記憶ユニット214にマイクロオペレーションを送信する。
【0016】
命令実行パイプライン200の様々な要素は、共通データバス222を介して通信する。例えば、機能的ユニット216及びロード/記憶ユニット214は、共通データバス222に結果を書き込み、結果は、従属する命令/マイクロオペレーションの実行のために予約ステーション212に、及び実行を終了したインフライト命令の最終的な処理結果として並び替えバッファ210に書き込まれてもよい。
【0017】
いくつかの技術では、命令フェッチ及び復号ユニット202は、前に復号された命令に対応するマイクロオペレーションを記憶したオペレーションキャッシュを含む。オペレーションの間、命令フェッチ及び復号ユニット202は、それらの命令に対して復号オペレーションを実行する代わりに、復号されたマイクロオペレーションがオペレーションキャッシュに記憶されているかどうかを判定するようオペレーションキャッシュをチェックし、そのような発見されたマイクロオペレーションを出力する。復号命令が相対的に電力を必要とし、高レイテンシであることを理由に、オペレーションキャッシュを使用することは、電力消費を削減すること、及び処理スループットを改善することを支援する。
【0018】
オペレーションキャッシュによる1つの問題は、復号されたマイクロオペレーションがオペレーションキャッシュに存在するときにオペレーションキャッシュを使用することと、復号されたマイクロオペレーションがオペレーションキャッシュに存在しないときに復号ユニットにおいてそれらの命令を復号することとの間で切り替える必要があることに起因して生じる。様々な理由により、それらのいくつかは、本明細書における他で説明され、いくつかの実施態様では、オペレーションキャッシュからフェッチすることと、命令キャッシュから復号することとの間の切り替えは、いくつかの循環ペナルティを引き起こすことがある。この理由により、オペレーションキャッシュから復号されたマイクロオペレーションをフェッチすることと、復号されたマイクロオペレーションをオペレーションキャッシュ内に有していない命令に対してマイクロオペレーションを生成する命令を復号することとの間で切り替えることと関連付けられたレイテンシを削減する技術が提供される。図2は、それらの技術が適用されるプロセッサパイプライン200の一実施例を示し、当業者は、本開示の教示が他のパイプラインアーキテクチャにも適用されることを理解するであろう。
【0019】
図3は、実施例に従った、命令フェッチ及び復号ユニット202の構成要素を示すブロック図である。命令フェッチ及び復号ユニット202は、分岐予測子302、予測キュー304、共有フェッチロジック305、オペレーションキャッシュパス301、命令キャッシュパス303、及びオペレーションキュー328を含む。共有フェッチロジック305は、オペレーションキャッシュタグルックアップ回路310、オペレーションキャッシュタグアレイ306、命令キャッシュタグルックアップ回路312、命令キャッシュタグアレイ308、及びフェッチ制御回路313を含む。オペレーションキャッシュパス301は、オペレーションキャッシュキュー314、オペレーションキャッシュデータ読み出し回路320、及びオペレーションキャッシュデータアレイ322を含む。命令キャッシュパス303は、命令キャッシュキュー315、命令キャッシュデータ読み出し回路316、より高いレベルのキャッシュ(複数可)及びシステムメモリに通信可能に結合された命令キャッシュデータアレイ318、命令バイトバッファ324、並びにデコーダ326を含む。本明細書で使用されるように、用語「オペレーションキャッシュ」は、オペレーションキャッシュタグルックアップ回路310、オペレーションキャッシュタグアレイ306、オペレーションキャッシュデータ読み出し回路320、及びオペレーションキャッシュデータアレイ322の組み合わせを指す。本明細書で使用されるように、用語「命令キャッシュ」は、命令キャッシュタグルックアップ回路312、命令キャッシュタグアレイ308、命令キャッシュデータ読み出し回路316、及び命令キャッシュデータアレイ318の組み合わせを指す。
【0020】
オペレーションキャッシュ及び命令キャッシュなどのいずれかのキャッシュは、タグアレイを含み、タグアレイは、特定のタグ及びインデックスがキャッシュ内で、及びキャッシュに対してデータを記憶したデータアレイ内でヒットするかどうかの判定を可能にする。よって、オペレーションキャッシュは、オペレーションキャッシュタグアレイ306及びオペレーションキャッシュデータアレイ322を含み、命令キャッシュは、命令キャッシュタグアレイ308及び命令キャッシュデータアレイ318を含む。様々な実施例では、図3に示されるユニットのいずれかまたは全ては、固定機能ハードウェアとして実装される(すなわち、固定機能回路として)。
【0021】
分岐予測子302は、命令フェッチ及び復号ユニット202の残りによる消費のために予測されたアドレスを生成する。既知の技術を通じて、分岐予測子302は、予測された命令アドレスのシーケンスとして指定されるように、命令実行パイプライン200において実行しているソフトウェアが実行することになる命令のシーケンスを識別することを試みる。この命令シーケンスの識別は、様々な実行状態情報(現在の命令ポインタアドレス、並びに様々な実施例では、特定の分岐が取られるか否かの履歴を示すデータ、及び/または他のデータを含む分岐予測履歴など)を使用する分岐予測を含む。分岐予測子302は、分岐予測子302及び命令実行パイプライン200の他の部分が、予測誤りされた分岐パスからの命令に対してオペレーションを無効にすることと共に、分岐予測子302が命令アドレスを正確な分岐パスに変更することなど、予測誤りを修正するアクションを実行するケースでは、予測誤りすることがある。多種多様な分岐予測技術が存在し、様々な実施例では、分岐予測子302は、予測された命令アドレスのシーケンスを識別するいずれかの技術的に実現可能な分岐予測技術を使用する。
【0022】
予測キュー304は、分岐予測子302からの予測されたアドレスを記憶する。予測キュー304は、分岐予測子302と命令フェッチ及び復号ユニット202の残りとの間の分離キューとしての役割を果たし、分岐予測子302のオペレーションのタイミングが命令フェッチ及び復号ユニット202の残りのオペレーションのタイミングに依存しないことを可能にする。分岐予測子302によって出力され、予測キュー304に記憶された予測されたアドレスのフォーマットは、範囲によって定義された命令アドレスのグループである、予測されたアドレスブロックの形式にある。
【0023】
共有フェッチロジック305は、予測されたアドレスブロックに対応するアドレスが、オペレーションキャッシュに記憶されている対応する変換に起因して、オペレーションキャッシュパス301によってサービス可能であると判定されるかどうかに基づいて、予測されたアドレスブロックに対して動作し、そのような予測されたアドレスブロックからオペレーションキャッシュパス301、命令キャッシュパス303、またはその両方にアドレスを送信する。より詳細には、共有フェッチロジック305は、特定の予測されたアドレスブロックのいずれかのアドレスがオペレーションキャッシュに記憶されているかどうかを判定するようオペレーションキャッシュタグアレイ306を精査するオペレーションキャッシュタグルックアップ310を含む。特定の予測されたアドレスブロックに対して、このルックアップに基づいて、フェッチ制御回路313は、オペレーションキャッシュパス301及び/または命令キャッシュパス303によってサービスするためのオペレーションキャッシュキューエントリまたは命令キャッシュキューエントリのいずれかまたは両方を生成する。少なくとも1つのオペレーションキャッシュキューエントリが特定の予測されたアドレスブロックに対して生成される場合、オペレーションキャッシュパス301は、そのオペレーションキャッシュキューエントリをサービスし、命令実行パイプライン200の残りによって処理するために、オペレーションキャッシュからキャッシュされ復号されたオペレーションを取り出し、オペレーションキュー328にそのようなキャッシュされ復号されたオペレーションを転送する。オペレーションキャッシュパス301によって完全にサービス可能でない予測されたアドレスブロックに対して(すなわち、それに対して、予測されたアドレスブロックのアドレスの全てではないがいくつかが、オペレーションキャッシュに記憶された対応する復号された命令を有し、または予測されたアドレスブロックのアドレスのいずれもが、オペレーションキャッシュに記憶された対応する復号された命令を有していない)、命令キャッシュパス303は、命令キャッシュから命令バイトをフェッチし、次いで、それらの命令バイトを復号することによって、その予測されたアドレスブロックを部分的または完全にサービスする。オペレーションキャッシュキューエントリ及び命令キャッシュキューエントリは、特定の予測されたアドレスブロックに対してオペレーションキャッシュパス301及び/または命令キャッシュパス303によって実行されるようワークを反映する。
【0024】
共有フェッチロジック305によって出力されたキャッシュキューエントリは、オペレーションキャッシュパス301及び命令キャッシュパス303が、サービスされることになるアドレスの相対的順序に関して整合することを可能にするインジケーションを含む。より詳細には、相対的プログラム順序に従うこの整合は、オペレーションキャッシュパス301及び命令キャッシュパス303の各々に進むキャッシュキューエントリに対し、反対のパス(すなわち、オペレーションキャッシュパス301に対する命令キャッシュパス303または命令キャッシュパス303に対するオペレーションキャッシュパス301)が特定のキャッシュキューエントリに対して命令アドレスの直前に命令に対して復号されたマイクロオペレーションを取得することになるかどうかのインジケーションを含めることによって促進される。そのようなインジケーションが存在する場合、オペレーションキャッシュパス301または命令キャッシュパス303は、「待機」インジケーションが存在する命令アドレスをサービスする前に、そのような直前の命令アドレスをサービスするよう、反対のパスを待機する。このようにして待機することによって、復号されたマイクロオペレーションは、プログラム順序においてオペレーションキュー328に出力される。オペレーションキュー328は、命令フェッチ及び復号ユニット202に対するエンドポイントまたは最終段階としての役割を果たす。より詳細には、オペレーションキュー328は、命令実行パイプライン200の残りによってサービスするために、オペレーションキャッシュパス301及び命令キャッシュパス303のプログラム順序出力を記憶する。オペレーションキュー328はまた、命令実行パイプライン200の後続の段階のオペレーションタイミングから命令フェッチ及び復号ユニット202のオペレーションタイミングを分離する分離バッファとしての役割を果たす。
【0025】
ここで、共有フェッチロジック305、オペレーションキャッシュパス301、及び命令キャッシュパス303のオペレーションは、例示され、追加の詳細を含むそれらのパスの個々の構成要素に関して、図4A図4Cをも参照して、より詳細に説明される。特に、図4Aは、共有フェッチロジック305のオペレーションを示し、図4Bは、オペレーションキャッシュパス301のオペレーションを示し、図4Cは、命令キャッシュパス303のオペレーションを示す。
【0026】
図4Aは、実施例に従った、共有フェッチロジック305のオペレーションの方法400のフローチャートである。図1図3のコンテキストにおいて説明されたが、当業者は、いずれかの技術的に実現可能な順序において図4Aのステップを実行するいずれかのシステムが本開示の範囲内に収まることを理解するであろう。
【0027】
方法400は、オペレーションキャッシュタグルックアップ310及び命令キャッシュタグルックアップ312が予測キュー304から予測されたアドレスブロックを取り出す、ステップ402において開始する。ステップ404において、オペレーションキャッシュタグルックアップ回路310及び命令キャッシュタグルックアップ回路312は、オペレーションキャッシュが予測されたアドレスブロックの全てに対し、予測されたアドレスブロックの一部に対し、または予測されたアドレスブロックのいずれでもないものに対して、キャッシュされ復号されたオペレーションを記憶するかどうかを判定するために、予測されたアドレスブロックを消費する。それを行うためのいずれかの技術的に実現可能な技術が可能であるが、予測されたアドレスブロックをルックアップするための詳細なルックアップオペレーションの実施例がここで提供される。
【0028】
この実施例に従って、オペレーションキャッシュタグルックアップ回路は、オペレーションキャッシュ内の予測されたアドレスブロックに対してヒットがいずれかヒットが存在するかどうかを判定するよう、予測されたアドレスブロックを表すアドレスを、オペレーションキャッシュタグアレイ306に適用する。オペレーションキャッシュは、各々のインデックスが特定のセットと関連付けられ、各々のタグが1つ以上の方式と関連付けられた、セットアソシアティブキャッシュである。タグは、アドレスの上位ビット(アドレスのビット[47:12]など)に対応し、インデックスは、アドレスの次に下位のビットであるビット(アドレスのビット[11:6]など)に対応する。タグが部分タグであることが可能であり、部分タグは、いくつかの技術(ハッシングなど)を通じて短縮された完全タグのバージョンである。本開示の全体を通じて、用語「タグ」は、適切である「部分タグ」によって置き換えられてもよい。
【0029】
オペレーションキャッシュタグルックアップ310は、次に続くように、予測されたアドレスブロックを表すアドレスを、オペレーションキャッシュタグアレイ306に適用する。オペレーションキャッシュタグルックアップ310は、そのインデックスによって識別されたセット内にあるタグを出力する、予測されたアドレスブロックから導出されたインデックスを、オペレーションキャッシュタグアレイ306に適用する。予測されたアドレスブロックから導出されたタグが読み取られたタグのうちの1つ以上に一致する場合にヒットが発生する。
【0030】
インデックス及びタグの組み合わせに対する各々のヒットは、予測されたアドレスブロック内の1つ以上の命令に対して変換されたマイクロオペレーションを記憶することができるオペレーションキャッシュ内にエントリが存在することを示す。オペレーションキャッシュが命令キャッシュラインを完全にカバーしないことがある1つ以上の個々の命令に対応するエントリを記憶することを理由に、単にタグ及びインデックスに加えて、予測されたアドレスブロックに対応するアドレスの範囲内の全ての命令からのどの特定の命令が特定のヒットに対応するかを示す情報が必要とされる。この識別情報は、開始オフセット値として、オペレーションキャッシュタグアレイ306の各々のエントリに記憶される。より詳細には、典型的な命令キャッシュは、キャッシュラインの粒度で命令を記憶する。言い換えると、キャッシュヒットは、インデックス及びタグによって表されるアドレスの部分と合致する特定の量のデータがキャッシュに記憶されることを示す。しかしながら、オペレーションキャッシュは、キャッシュラインよりも小さいアドレス範囲をカバーする1つ以上の個々の命令に対してエントリ(復号されたマイクロオペレーション)を記憶する。よって、オペレーションキャッシュ内の特定の命令に対するヒットは、アドレスの上位ビット(例えば、ビット[47:6])を表す、インデックス及びタグの一致と共に、バイトレベルまで下方に合致するアドレスの下位ビット(例えば、[5:0])を表す開始オフセットへの一致を必要とする(いくつかの命令セットアーキテクチャに対して、2または4バイトの粒度においてのみ命令が存在することがあり、したがって、オフセットのビット[0]または[1:0]を排除することができる)。
【0031】
上記説明されたように、開始オフセット情報は、オペレーションキャッシュタグアレイ306内の全てのエントリに記憶される。オペレーションキャッシュに記憶されたキャッシュされ復号されたマイクロオペレーションによってカバーされる命令アドレスの範囲を識別するために、オペレーションキャッシュエントリがサイズにおいて可変であることがあるので、オペレーションキャッシュタグアレイ306内の各々のエントリは、そのエントリに対応する命令の終了オフセットを示す情報を記憶する。この終了オフセットは、エントリに対応する最後の命令の後の次の命令のアドレスオフセットとして記憶される。次の命令オフセットを示す情報の目的は、その次の命令がオペレーションキャッシュに記憶されたマイクロオペレーションを復号していた場合、次のオペレーションキャッシュエントリに対するヒット状態が同一のサイクルにおいてルックアップされることを可能にすることである。第1のエントリの終了オフセットを、同一のインデックスにおいて一致するタグを有する他のタグアレイエントリの開始オフセットと比較することによって、第2のエントリが存在するかどうかが識別される。同様に、第2のエントリの終了オフセットは、第3のエントリが存在するかどうかを発見するよう、同一のインデックスにおいて一致するタグを有する他のタグアレイエントリの開始オフセットと比較される。
【0032】
つまり、オフセット情報は、オペレーションキャッシュエントリヒットによってカバーされる予測されたアドレスブロック内の特定のアドレス範囲の識別を可能にし(インデックスが適用されるときのタグへの一致を介して)、オペレーションキャッシュタグルックアップ310が、そのエントリによってカバーされない次の命令のアドレスを識別することを可能にする。インデックスがオペレーションキャッシュタグアレイ306に適用されるとき、複数のエントリが読み取られる。各々のエントリは、タグ、開始オフセット、及び終了オフセット(次の命令オフセットとも称される)を含む。オペレーションキャッシュエントリのタグ及び開始オフセット並びに予測されたアドレスブロックのタグ及び開始オフセットの両方の間の一致は、第1のエントリに対するオペレーションキャッシュヒットをシグナルする。第1のエントリの終了オフセットは、第2のエントリを識別するよう、予測されたアドレスブロックのタグとも一致した他のエントリの開始オフセットと比較される。第2のエントリの終了オフセットは、本明細書における他で説明されるように、単一のサイクルにおける複数のエントリに対する順次的なヒット検出を共につなぐために使用される。識別されたエントリの各々に対して、終了オフセットは、予測されたアドレスブロックの終了オフセットと比較される。予測されたアドレスブロックの終了オフセットが一致し、または上回るとき、そのブロックが完全にカバーされており、更なるつながれたエントリは、その予測されたアドレスブロックの処理に対して無視される。
【0033】
ステップ406において、オペレーションキャッシュタグルックアップ回路310は、オペレーションキャッシュタグアレイ306内で少なくとも1つのヒットが存在するかどうかを判定する。少なくとも1つのヒットが存在し、少なくとも1つのヒットが完全な予測されたアドレスブロックに対して全ての命令をカバーする場合、方法400は、ステップ408に進む。少なくとも1つのヒットが存在し、予測されたアドレスブロックに対していくつかの命令をカバーするが、全ての命令をカバーしない場合、方法400は、ステップ410に進む。オペレーションキャッシュタグアレイ306内にヒットが存在しない場合、方法400は、ステップ414に進む。
【0034】
ステップ408において、フェッチ制御回路313は、予測されたアドレスブロックに対するヒットに関する情報によりオペレーションキャッシュキューエントリを生成し、オペレーションキャッシュに書き込む。オペレーションキャッシュキューエントリは、各々のヒットに対するオペレーションキャッシュ内のインデックス及び方式を示す情報、並びにこのオペレーションキャッシュキューエントリに対するアドレスをサービスすることがパス変更を必要とするかどうかに関するインジケーションを含む。セット(インデックスに対応する)及び方式がオペレーションキャッシュ内で一意なエントリを識別することを理由に、「方式」が記憶される。方式は、タグ及びオフセットの各々の組み合わせに対して一意であり、インデックスによって識別されたセット内で単一のエントリを一意に識別する。パス変更は、このオペレーションキャッシュキューエントリによってサービスされる命令の直前の命令が命令キャッシュパス303によってサービスされるときに発生する。よって、インジケーションは、前の予測されたアドレスブロックが命令キャッシュパス303によってサービスされる場合に設定される(または、より詳細には、前の予測されたアドレスブロックの最後の命令が命令キャッシュパス303によってサービスされる場合)。オペレーションキャッシュキューエントリは、図4Bに関して説明されるように、オペレーションキャッシュパス301によってサービスされる。
【0035】
ステップ406に再度目を向けると、オペレーションキャッシュ内のヒットが、予測されたアドレスブロックの全てではないがいくつかがオペレーションキャッシュによってカバーされることを示す場合、方法400は、ステップ410に進む。ステップ410において、フェッチ制御回路313は、オペレーションキャッシュパス301に対してオペレーションキャッシュキューエントリを生成し、それらのオペレーションキャッシュキューエントリをオペレーションキャッシュキュー314に書き込む。オペレーションキャッシュキュー314は、共有フェッチロジック305が予測されたアドレスブロックを処理し、オペレーションキャッシュキューエントリを作成するタイミングを、オペレーションキャッシュデータ読み出し回路320がオペレーションキャッシュキューエントリを消費し、オペレーションキャッシュデータアレイ322を読み出し、プログラム順序において、復号されたオペレーションをオペレーションキュー328に出力するタイミングから分離する、分離バッファとしての役割を果たす。それらのオペレーションキャッシュキューエントリは、各々のヒットに対するオペレーションキャッシュ内のインデックス及び方式、並びに直前の命令からのパス変更が存在するかどうかを示すパス変更インジケーションを含む。より詳細には、パス変更インジケーションは、特定のキャッシュキューエントリによってサービスされる命令アドレスの直前の命令が命令キャッシュパス303によってサービスされることになるかどうかを示す。また、ステップ412において、フェッチ制御回路313は、命令キャッシュキュー315への記憶のための命令キャッシュキューエントリを生成する。命令キャッシュキューエントリは、ヒットが発生する命令キャッシュのインデックス及び方式、命令キャッシュからフェッチする開始オフセット及び終了オフセット、並びに最初のそのようなエントリに対してパス変更が発生することのインジケーションを含む。命令キャッシュキューに書き込まれた開始オフセットは、この予測されたアドレスブロックに対してヒットした最後のオペレーションキャッシュエントリの終了オフセットである。命令キャッシュキューに書き込まれた終了オフセットは、予測されたアドレスブロックの終了オフセットである。同一の予測されたアドレスブロックの命令である前の命令がオペレーションキャッシュパス301によってサービスされることを理由に、パス変更インジケーションは、この命令キャッシュキューエントリに対して設定される。
【0036】
ステップ406に目を向け戻すと、オペレーションキャッシュ内で予測されたアドレスブロックに対するヒットが存在しない場合、方法400は、ステップ414に進む。ステップ414において、フェッチ制御回路313は、命令キャッシュキュー315への記憶のための命令キャッシュキューエントリを生成する。命令キャッシュキューエントリは、ヒットが発生する命令キャッシュのインデックス及び方式、命令キャッシュからフェッチする開始オフセット及び終了オフセット、並びに最初のそのようなエントリに対してパス変更が発生するかどうかのインジケーションを含む。命令キャッシュキューに書き込まれた開始オフセットは、予測されたアドレスブロックの開始オフセットである。命令キャッシュキューに書き込まれた終了オフセットは、予測されたアドレスブロックの終了オフセットである。このインジケーションは、最初のエントリの命令の直前の命令がオペレーションキャッシュパス301によってサービスされることになる場合に設定される。
【0037】
ステップ412または414のいずれかの後、方法400は、ステップ416に進む。ステップ416において、命令キャッシュデータ読み出し回路316は、命令キャッシュキューの命令キャッシュキューエントリに基づいて、命令キャッシュデータアレイ318を読み出す。特に、命令キャッシュデータ読み出し回路316は、特定の命令キャッシュキューエントリに対してインデックス及び方式によって指定されたエントリにアクセスし、命令キャッシュから命令バイトを取得する。命令バイトがより上位レベルのキャッシュまたはシステムメモリからフェッチされる必要があるケースでは、いくつかの命令が命令キャッシュまたはオペレーションキャッシュに記憶されない可能性がある。命令キャッシュパス303は、そのような状況でもサービスする。ステップ418において、命令キャッシュデータ読み出し回路316は、デコーダ326によって復号されたマイクロオペレーションに復号するために、命令キャッシュから読み出された命令バイトを命令バイトバッファ324に書き込む。
【0038】
実施態様では、判定及びルックアップステップ(ステップ404及びステップ406)は、オペレーションキャッシュキューエントリ及び命令キャッシュキューエントリを生成するステップ(ステップ408、410、412、及び414)に関していくつかのサイクルにわたって、及びパイプライン方式において行われる(よって、少なくとも部分的に時間において重なる)。タグアレイの検査及びキャッシュキューエントリの生成が少なくとも部分的に時間が重なるパイプライン方式において実行されるそのようなオペレーションの実施例がここでは提供される。
【0039】
この実施例に従って、それに対してヒットがオペレーションキャッシュ内で発生するいずれかの特定の予測されたアドレスブロックに対して、オペレーションキャッシュタグルックアップ回路310は、それに対してヒットが発生する最低命令アドレスオフセットとして使用する第1のオフセットを識別する。いずれかの特定のサイクルでは、この第1のオフセットを識別することは、現在のサイクルが、オペレーションキャッシュタグルックアップ310が現在の予測されたアドレスブロックを検査している第1のサイクルであるかどうかを含む、いくつかの因子に依存する。より詳細には、オペレーションキャッシュタグルックアップ310は、単一のサイクルにおいてオペレーションキャッシュタグアレイ306内の複数のヒットを識別することが可能である。しかしながら、オペレーションキャッシュタグルックアップ310が1つのサイクルにおいて検査することができるヒットの数に制限がある。オペレーションキャッシュタグルックアップ310が数秒の間または秒よりも長いサイクルの間に特定の予測されたアドレスブロックを検査している場合、そのサイクルの間に使用する第1のオフセットは、前のサイクルの最後のヒットによって指定された終了オフセットによって指定される(言い換えると、前のサイクルの最後のヒットは、このサイクルを使用する第1のオフセットをもたらす)。そうでなければ(すなわち、現在のサイクルが、予測されたアドレスブロックがオペレーションキャッシュタグルックアップ310によって検査されている第1のサイクルである場合)、オペレーションキャッシュタグアレイ306から使用する第1のオフセットを識別する異なる技術が使用される。
【0040】
より詳細には、現在のサイクルが、オペレーションキャッシュタグルックアップ310が現在の予測されたアドレスブロックを検査している第1のサイクルである場合、以下の1つが当てはまる。
・それに対してオペレーションキャッシュ内のヒットが存在する次の命令が、前に予測されたアドレスブロックに対して次の予測されたアドレスブロックに属することを示したその予測されたアドレスブロックに対してオペレーションキャッシュ内のヒットが存在した(すなわち、オペレーションキャッシュタグアレイ306内のエントリは、エントリが順次的な予測されたアドレスブロックに及ぶことのインジケーションを含む。この「及ぶこと」のインジケーションが設定されるとき、終了オフセットは、順次的な予測されたアドレスブロックにおけるオフセットを指す)、
・前の予測されたアドレスブロックの最後の命令が、命令キャッシュパス303によってサービスされた(すなわち、復号されたオペレーションがその最後の命令に対してオペレーションキャッシュに記憶されていない)、または
・現在の予測されたアドレスブロックが、取られた分岐のターゲットを表す。
【0041】
オペレーションキャッシュエントリが順次的な予測されたアドレスブロックに及ぶことを示した、前の予測されたアドレスブロック内にオペレーションキャッシュエントリヒットが存在したケースでは、そのエントリからの終了オフセットは、現在の予測されたアドレスブロックに対して第1のオフセットをもたらす。
【0042】
前の予測されたアドレスブロックの最後の命令が命令キャッシュパス303によってサービスされたケースでは、使用される第1のオフセットは、予測されたアドレスブロックの開始オフセットである。実施態様では、オペレーションキャッシュタグは、このケースに対してルックアップされず、命令キャッシュパス303が使用される。しかしながら、「及ぶ」オペレーションキャッシュエントリを可能にしない他の実施態様は、ヒットのケースにおいて、オペレーションキャッシュタグヒットをルックアップし、オペレーションキャッシュパス301を使用することを選択することができる。
【0043】
現在の予測されたアドレスブロックが取られた分岐のターゲットを表すケースでは、使用される第1のオフセットは、予測されたアドレスブロックの開始オフセットである。
【0044】
インデックスがオペレーションキャッシュタグアレイ306に適用されるとき、複数のエントリが読み取られ、オペレーションキャッシュタグルックアップ310において使用される。各々のエントリは、タグ、開始オフセット、及び終了オフセット(次の命令オフセットとも称される)を含む。オペレーションキャッシュエントリのタグ及び開始オフセット、並びに予測されたアドレスブロックのタグ及び単に説明された第1のオフセットの両方の間の一致は、第1のエントリに対するオペレーションキャッシュヒットをシグナルする。第1のエントリの終了オフセットは、第2のエントリを識別するよう、予測されたアドレスブロックのタグとも一致した他のエントリの開始オフセットと比較される。第2のエントリの終了オフセットは更に、本明細書における他で説明されるように、単一のサイクルにおける複数のエントリに対する順次的なヒット検出を共につなぐために使用される。単一のサイクルの間に順次的なオペレーションキャッシュエントリの最大数に到達すること、または最も直近に検査されたオペレーションキャッシュタグアレイエントリが、次のオフセットが予測されたアドレスブロックの終了オフセットを上回ることを示すこと、のうちの1つ以上が発生するまで、オペレーションキャッシュタグルックアップ310は、同一のサイクルにおいてこのオペレーションを繰り返す。
【0045】
オペレーションキャッシュは、複数のヒットが単一のサイクルにおいて発生することを可能にするいくつかの特性を有する。より詳細には、単一の予測されたアドレスブロック内の全てのヒットが同一のセット内に収まることの事実と組み合わせて、オペレーションキャッシュがセットアソシアティブであるという事実は、複数のヒットが単一のサイクルにおいて発生することを可能にする。この特性に起因して、現在の予測されたアドレスブロックから導出されたインデックスがオペレーションキャッシュタグアレイ306に適用されるとき、予測されたアドレスブロックに属する全てのエントリは、同一のセット内で発見される。インデックスがオペレーションキャッシュタグアレイ306に適用されることに応答して、オペレーションキャッシュタグアレイ306の全てのエントリが読み取られる(セットアソシアティブキャッシュの性質に起因して)。よって、オペレーションキャッシュタグルックアップ310は、上記説明された第1のエントリオフセットに基づいて、第1のエントリを取得することが可能である。次いで、オペレーションキャッシュタグルックアップ310は、既に読み取られたエントリの1つのオフセットに一致する第1のエントリの次の命令アドレスを使用することによって次のエントリを取得し、1つのサイクルにおいて順序付けることができるエントリの数に到達するまで、または読み出す更なる順次的なエントリが存在しなくなるまで(例えば、オペレーションキャッシュが、オペレーションキャッシュ内でヒットする命令の後の次の命令に対して復号されたマイクロオペレーションを記憶しない)のいずれかで、オペレーションキャッシュタグアレイ306のエントリがこのサイクルを既に読み取ったその方式において順序付けることを継続することが可能である。
【0046】
つまり、いずれかの特定の予測されたアドレスブロックに対する全てのエントリが単一のセット内に収まることの事実は、インデックスがオペレーションキャッシュタグアレイ306に適用されるとき、その予測されたアドレスブロックに一致する全てのエントリに対するオフセット及び次の命令アドレスが読み取られることを意味する。この事実は、クロックサイクル期間内にオペレーションキャッシュタグアレイ306の複数のエントリを通じてつなぐために、単純な順次的なロジックが使用されることを可能にする。単一の予測されたアドレスブロックに対するエントリが複数のセットにおいて発見される場合、インデックスがオペレーションキャッシュタグアレイ306に複数回適用される必要があり、より長い時間を要することを理由に、複数のエントリを通じてつなぐことは、困難または不可能である。よって、オペレーションキャッシュタグアレイ306の複数のエントリを通じて読み出すことは、オペレーションキャッシュパス301のオペレーション速度を改善し、オペレーションキャッシュ内の複数のヒットについての情報が単一のサイクルにおいてオペレーションキャッシュキュー314に書き込まれることを可能にすることによって、オペレーションキャッシュキューエントリの簡潔さをも改善する。
【0047】
いずれかの特定の予測されたアドレスブロックに対する全てのエントリがオペレーションキャッシュの同一のセット内に収まることを保証するために、いずれかの技術的に実現可能な方式が使用されてもよいが、ここでは、1つの特定の技術が説明される。この技術に従って、分岐予測子は、アドレスが64バイトの合致したブロックなどの特定の合致したブロックサイズ内にあるように、全ての予測されたアドレスブロックを形成する。予測されたアドレスブロックは、合致した境界上で開始または終了する必要がないが、それらは、合致した境界にわたることが許容されない。この制約を本質的に観察しない分岐予測子302の実施態様を使用する場合、処理するための共有フェッチロジック305に対する複数のブロックに合致境界を及ばせるいずれかの予測されたアドレスブロックを分裂させるよう、分岐予測子302と共有フェッチロジック305との間に追加の組み合わせロジックが挿入されてもよい。この合致は、予測されたアドレスブロック内の全ての適法の開始オフセットがより下位のビット内でのみ異なることを意味する。オペレーションキャッシュタグアレイ306内のタグをルックアップするために使用されるインデックス(セットを定義する)は、それらの最下位ビットのいずれも有さない。それらの最下位ビットのいずれも有さないことによって、インデックスは、単一の予測されたアドレスブロック内の異なるアドレスに対して変化することができず、よって、その予測されたアドレスブロックを満たす必要があるいずれかの特定のオペレーションキャッシュエントリに対してセットが同一である必要がある。
【0048】
シーケンス内の次の命令オフセットを使用して、オペレーションキャッシュタグアレイ306から複数のエントリを読み出す正に説明されたオペレーションは、本明細書で「オペレーションキャッシュタグアレイ306からの順次的なタグ読み出し」または同様の表現を介して称されてもよい。
【0049】
オペレーションキャッシュタグアレイ306からの順次的なタグ読み出しが現在のサイクルの間に完了したとオペレーションキャッシュタグルックアップ310が判定すると、オペレーションキャッシュタグルックアップ310は、オペレーションキャッシュキュー314への記憶のためのオペレーションキャッシュキューエントリを生成する。マイクロオペレーションをオペレーションキャッシュデータアレイ322から後に読み取ることができるように、オペレーションキャッシュキューエントリは、現在のサイクルの間にオペレーションキャッシュタグアレイ306によって示された各々のヒットに対するオペレーションキャッシュ内のインデックス及び方式を示す情報を含む。加えて、各々のオペレーションキャッシュキューエントリは、オペレーションキャッシュキューエントリによって表される第1のヒットの直前の命令が命令キャッシュパス303によってサービスされることになるかどうか(すなわち、オペレーションキャッシュ内のキャッシュされたマイクロオペレーションの対応するセットが存在しないことに起因して)のインジケーションを含む。このインジケーションは、本明細書における他でより詳細に説明されるように、プログラム順序において(すなわち、実行されているソフトウェアに対して実行される命令のシーケンスによって示された順序)、マイクロオペレーションをオペレーションキュー328に記憶することを支援する。
【0050】
フェッチ制御ロジック313は、特定のオペレーションキャッシュキューエントリが、第1のヒットの直前の命令が、次に続くように、命令キャッシュパス303によってサービスされることになるかどうかのインジケーションを含むかどうかを判定する。特定の予測されたアドレスブロックがオペレーションキャッシュタグルックアップ310によって検査された第2のサイクルまたは後のサイクルにオペレーションキャッシュキューエントリが対応する場合、オペレーションキャッシュキューエントリの直前の命令は、その命令が単一の予測されたアドレスブロックに対するマルチサイクル読み出しの一部ではないことを理由に、命令キャッシュパス303によってサービスされない。よって、前のサイクルにおいて、オペレーションキャッシュタグルックアップ310は、オペレーションキャッシュが直前の命令に対して復号されたマイクロオペレーションを記憶すると判定している。
【0051】
特定の予測されたアドレスブロックがオペレーションキャッシュタグルックアップ310によって検査された第1のサイクルにオペレーションキャッシュキューエントリが対応する場合、前の予測されたアドレスブロックがオペレーションキャッシュによって完全にカバーされていたかどうかの判定が行われる。前の予測されたアドレスブロックがオペレーションキャッシュによって完全にカバーされていたケースでは(方法400の決定ブロック406からである「はい、完全PABをカバーする」としても示される)、オペレーションキャッシュキューエントリの直前の命令は、命令キャッシュパス303によってサービスされない。前の予測されたアドレスブロックがオペレーションキャッシュによって完全にカバーされていなかった場合、オペレーションキャッシュキューエントリの直前の命令は、命令キャッシュパス303によってサービスされない。
【0052】
ここで共有フェッチロジック305の命令キャッシュサイドに目を向けると、命令キャッシュタグルックアップ回路312は、次に続くように、予測キューエントリを消費及び処理する。命令キャッシュタグルックアップ312は、予測されたアドレスブロックを検査し、予測されたアドレスブロックのインデックスを取得し、ヒットを識別するようそのインデックスを命令キャッシュタグアレイ308に適用する。命令キャッシュタグルックアップ312は、ヒットを表す情報をフェッチ制御回路313に提供する。いくつかの実施態様では、予測されたアドレスブロックのサイズが、命令キャッシュタグルックアップ312が1つのサイクルにおいてルックアップすることができるアドレス数よりも多いことが可能である。この状況では、命令キャッシュタグルックアップ312は、プログラム順序において、予測されたアドレスブロックの異なるアドレス範囲部分を通じて順序付け、それらのアドレス範囲部分の各々に対してヒットを識別する。それらのヒットに基づいて、フェッチ制御回路313は、命令キャッシュキュー315への記憶のための命令キャッシュキューエントリを生成する。それらの命令キャッシュキューエントリは、インデックス及び方式情報など、命令キャッシュ内のヒットを示す情報と共に、パス変更が特定の命令キャッシュキューエントリに対して発生するかどうかを示す情報を含む。オペレーションキャッシュパス301を取ることと、命令キャッシュパス303を取ることとの間での選択が命令キャッシュヒット状態とは独立しているので、当業者は、本明細書で説明される技術に直接関連しない様々なトレードオフに基づいて、命令キャッシュタグルックアップが共有フェッチロジック305または命令キャッシュパス303のいずれかにおいて行われてもよいことが分かるであろう。
【0053】
図4Bは、実施例に従った、オペレーションキャッシュからキャッシュされ復号されたマイクロオペレーションをフェッチするよう、オペレーションキャッシュキュー314のエントリを処理する方法430のフローチャートである。図1図3のコンテキストにおいて説明されるが、当業者は、いずれかの技術的に実現可能な順序において図4Bのステップを実行するいずれかのシステムが本開示の範囲内に収まることを理解するであろう。
【0054】
ステップ432において、オペレーションキャッシュデータ読み出し回路320は、オペレーションキャッシュキュー314がエンプティであるかどうかを判定する。エンプティである場合、方法430は、ステップ432を再度実行する。エンプティでない場合、方法430は、ステップ434に進む。ステップ434において、オペレーションキャッシュデータ読み出し回路320は、「先頭」(または「次の」)キャッシュキューエントリに対するパス変更インジケーションが設定されているかどうかを判定する。パス変更インジケーションが設定されている場合(消去されていない)、オペレーションキャッシュキューエントリは、処理される前に命令パスを待機する必要があり、よって、方法430は、ステップ436に進む。パス変更インジケーションが設定されていない場合(消去されている)、待機が行われず、方法430は、ステップ438に進む。ステップ436において、オペレーションキャッシュデータ読み出し回路320は、オペレーションキャッシュキューエントリによって表されるオペレーションよりも前の全てのマイクロオペレーションがオペレーションキューに書き込まれるかどうか、または復号され、オペレーションキュー328に書き込まれる処理において現在インフライトであるかどうかを判定する。オペレーションキャッシュキューエントリによって表されるオペレーションよりも前の全てのマイクロオペレーションがオペレーションキュー328に書き込まれ、または復号され、オペレーションキュー328に書き込まれる処理において現在インフライトである場合、方法430は、ステップ438に進み、オペレーションキャッシュキューエントリによって表されるオペレーションよりも前の全てのマイクロオペレーションがオペレーションキュー328に書き込まれず、または復号され、オペレーションキュー328に書き込まれる処理において現在インフライトでない場合、方法は、ステップ436に戻る。
【0055】
ステップ438において、オペレーションキャッシュデータ読み出し回路320は、オペレーションキャッシュキューエントリのコンテンツに基づいて、キャッシュされ復号されたマイクロオペレーションを取得するよう、オペレーションキャッシュデータアレイ322を読み出す。ステップ440において、オペレーションキャッシュデータ読み出し回路320は、プログラム順序において、読み取られたマイクロオペレーションをオペレーションキュー328に書き込む。
【0056】
ステップ438及び440の詳細な実施例がここで提供される。この実施例に従って、オペレーションキャッシュデータ読み出し回路320は、オペレーションキャッシュキューエントリからインデックス及びタグを取得し、オペレーションキャッシュキューエントリに対して復号されたマイクロオペレーションを取得するよう、そのインデックス及びタグをオペレーションキャッシュデータアレイ322に適用する。オペレーションキャッシュキューエントリが複数のヒットに対してデータを記憶することが可能であることを理由に、オペレーションキャッシュデータ読み出し回路320は、そのエントリによって表されるヒットの回数に応じて、オペレーションキャッシュキューエントリごとに1回以上、上記ルックアップを実行する。いくつかの実施態様では、オペレーションキャッシュデータ読み出し回路320は、単一のサイクルにおいて同一のオペレーションキャッシュキュー314のエントリから複数回のルックアップを実行し、他の実施態様では、オペレーションキャッシュデータ読み出し回路320は、サイクルごとに1回のルックアップを実行する。
【0057】
図4Cは、実施例に従った、命令バイトバッファ324に記憶された命令バイトをフェッチ及び復号する方法460のフローチャートである。図1~3のコンテキストにおいて説明されるが、当業者は、いずれかの技術的に実現可能な順序において図4Cのステップを実行するいずれかのシステムが本開示の範囲内に収まることを理解するであろう。
【0058】
ステップ462において、命令バイトバッファ324は、命令バイトバッファ324がエンプティであるかどうかを判定する。命令バイトバッファがエンプティである場合、方法460は、ステップ462に戻り、命令バイトバッファがエンプティでない場合、方法460は、ステップ464に進む。ステップ464において、命令バイトバッファ324は、命令バイトバッファ324内の「先頭」(または「次の」)エントリに対するパス変更インジケーションが消去されるかどうか(パス変更がそのエントリに対して必要とされないことを示す)を判定する。インジケーションが消去されていない場合(すなわち、インジケーションが設定される)、方法460は、ステップ466に進み、インジケーションが消去されている場合(すなわち、インジケーションが設定されていない)、方法460は、ステップ468に進む。
【0059】
ステップ466において、命令バイトバッファ324は、オペレーションキャッシュパス301によってサービスされる、プログラム順序において次のエントリの前の命令に対する全てのマイクロオペレーションが、オペレーションキュー328に書き込まれるかどうか、またはオペレーションキュー328に書き込まれているのにインフライトであるかどうかをチェックする。オペレーションキャッシュパス301によってサービスされる、プログラム順序において次のエントリの前の命令に対する全てのマイクロオペレーションが、オペレーションキュー328に書き込まれ、またはオペレーションキュー328に書き込まれているのにインフライトである場合、方法460は、ステップ468に進み、オペレーションキャッシュパス301によってサービスされる、プログラム順序において次のエントリの前の命令に対する全てのマイクロオペレーションが、オペレーションキュー328に書き込まれず、またはオペレーションキュー328に書き込まれているのにインフライトでない場合、方法460は、ステップ466に戻る。
【0060】
ステップ468において、命令バイトバッファ324は、先頭エントリを読み出し、復号するためにデコーダ326にそのエントリの命令バイトを送信する。ステップ470において、デコーダ326は、復号されたマイクロオペレーションを生成するよう、既知の技術に従って命令バイトを復号する。ステップ472において、デコーダ326は、プログラム順序において、復号されたマイクロオペレーションをオペレーションキュー328に書き込む。
【0061】
オペレーションキュー328は、命令実行パイプライン200の他の後続の段階がそれらの復号されたマイクロオペレーションを消費することが可能であるように、復号されたマイクロオペレーションを並び替えバッファ210及び/またはそれらの段階に提供する。命令実行パイプライン200の残りは、それからマイクロオペレーションが導出される命令によって表されるソフトウェアを稼働させるよう、既知の技術に従って、それらのマイクロオペレーションを消費及び実行する。一般的に知られているように、そのようなソフトウェアは、いずれかの技術的に実現可能な結果を生じさせることが可能であり、結果データをメモリに書き込むこと、入力/出力デバイスと相互作用すること、及び必要に応じて他のオペレーションを実行することなど、いずれかの技術的に実現可能なオペレーションを実行することが可能である。
【0062】
復号されると、命令キャッシュは、いずれかの技術的に実現可能な置き換えポリシに基づいて、オペレーションキャッシュを更新するために復号されたオペレーションを使用する。それらの更新の目的は、プログラム実行の状態に対してオペレーションキャッシュを最新に維持することである(例えば、最新に復号されたオペレーションが後のプログラムフローにおける命令を復号する際の使用のためにオペレーションキャッシュにおいて利用可能であることを確実にするため)。
【0063】
命令フェッチ及び復号ユニット202は、パイプライン化されたユニットであり、それは、1つの段階(例えば、分岐予測子)におけるワークが異なる段階(例えば、オペレーションキャッシュタグルックアップ310)におけるワークと同一のサイクルにおいて特定の命令アドレスに対して実行されることが可能であることを意味することが理解されるべきである。また、オペレーションキャッシュパス301及び命令キャッシュパス303が、プログラム順序において復号されたマイクロオペレーションを出力するよう同期されるが、同一のサイクルにおいて同一の、または異なる予測されたアドレスブロックに対してワークを実行することが可能である、独立した、並列したユニットであることが理解されるべきである。
【0064】
上述したことに対する1つの変形は、命令キャッシュキュー315を使用する代わりに、命令キャッシュパス303が、命令バイトをどのアドレス範囲から取得するかを判定するよう、予測ブロックを直接読み出すことができることである。これを促進するために、フェッチ制御回路313は、どのアドレスをフェッチするかを示す情報を予測キュー304に、そのキューに対する先頭エントリとして書き込むことができ、命令キャッシュデータ読み出し回路316は、予測キュー304内の先頭エントリに基づいて、使用する次のアドレスを識別することができる。
【0065】
本明細書で説明される技術は、オペレーションキャッシュから復号されたオペレーションをフェッチすることと、復号ユニットを使用して命令をフェッチ及び復号することとの間で切り替える際の低レイテンシの、オペレーションキャッシュを有する命令フェッチ及び復号ユニットにもたらす。この低レイテンシは、反対のパスからの出力を待機する必要があることに起因してワークが停止されるまで、そのワークがオペレーションキャッシュパス及び命令キャッシュパスの両方を通じてフローすることを可能にする同期機構を通じて達成される。オペレーションキャッシュパス301(すなわち、オペレーションキャッシュキュー314)及び命令キャッシュパス303(すなわち、命令バイトバッファ324)内の分離バッファの存在は、ワークが2つのパスの間の同期を理由に進行するよう消去されるまで、そのワークが保持されることを可能にする。単一のサイクルにおいて複数のヒットの検出を可能にする特別に構成されたオペレーションキャッシュタグアレイなどの他の改善は、例えば、エントリが予測キュー304から消費される速度を改善することによって帯域幅を改善し、オペレーションキャッシュデータアレイ322から単一のサイクルにおいて複数のエントリを読み出す実装を有する能力を可能にする。より詳細には、オペレーションキャッシュパス301及び命令キャッシュパス303の両方が現在のエントリを読み出した後(例えば、オペレーションキャッシュタグルックアップ310及び命令キャッシュタグルックアップ312を介して)、予測キュー304が次のエントリに進行することを理由に、サイクルごとの複数の命令がオペレーションキャッシュタグルックアップ310によってサービスされることを可能にすることは、予測キューエントリが消費される割合を加速化する。
【0066】
プログラム順序において復号されたマイクロオペレーションを記憶したオペレーションキューへの出力、及び命令実行パイプラインの残りによる後続の実行のための復号されたマイクロオペレーションに、第1の予測されたアドレスブロックの命令アドレスを変換する方法が提供される。方法は、第1の予測されたアドレスブロックが、それに対して復号されたマイクロオペレーションがオペレーションキャッシュパスのオペレーションキャッシュに記憶された少なくとも1つの命令を含むと識別することと、第1のオペレーションキャッシュキューエントリをオペレーションキャッシュキューに記憶することであって、第1のオペレーションキャッシュキューエントリは、進行するための命令キャッシュパスから信号を受信することを待機するかどうかを示すインジケーションを含む、記憶することと、オペレーションキャッシュから、第1のオペレーションキャッシュキューエントリに対応する復号されたマイクロオペレーションを取得することと、進行するための命令キャッシュパスから信号を受信することを待機するかどうかを示す、第1のオペレーションキャッシュキューエントリのインジケーションに基づいた時間において、第1のオペレーションキャッシュキューエントリに対応する復号されたマイクロオペレーションをオペレーションキューに出力することと、を含む。
【0067】
命令フェッチ及び復号ユニットは、プログラム順序において復号されたマイクロオペレーションを記憶したオペレーションキューへの出力、及び命令実行パイプラインの残りによる後続の実行のための復号されたマイクロオペレーションに、第1の予測されたアドレスブロックの命令アドレスを変換する。命令フェッチ及び復号ユニットは、第1の予測されたアドレスブロックが、それに対して復号されたマイクロオペレーションがオペレーションキャッシュパスのオペレーションキャッシュに記憶された少なくとも1つの命令を含むと識別するように構成された共有フェッチロジックと、第1のオペレーションキャッシュキューエントリを記憶したオペレーションキャッシュキューであって、第1のオペレーションキャッシュキューエントリは、進行するための命令キャッシュパスから信号を受信することを待機するかどうかを示すインジケーションを含む、オペレーションキャッシュキューと、オペレーションキャッシュから第1のオペレーションキャッシュキューエントリに対応する復号されたマイクロオペレーションを取得し、進行するための命令キャッシュパスから信号を受信することを待機するかどうかを示す、第1のオペレーションキャッシュキューエントリのインジケーションに基づいた時間において、第1のオペレーションキャッシュキューエントリに対応する復号されたマイクロオペレーションをオペレーションキューに出力するオペレーションキャッシュデータ読み出しロジックと、を含む。
【0068】
プロセッサは、プログラム順序において復号されたマイクロオペレーションを記憶したオペレーションキューへの出力、及び命令実行パイプラインの残りによる後続の実行のための復号されたマイクロオペレーションに、第1の予測されたアドレスブロックの命令アドレスを変換する命令フェッチ及び復号ユニットを含む。命令フェッチ及び復号ユニットは、第1の予測されたアドレスブロックが、それに対して復号されたマイクロオペレーションがオペレーションキャッシュパスのオペレーションキャッシュに記憶された少なくとも1つの命令を含むと識別する共有フェッチロジックと、第1のオペレーションキャッシュキューエントリを記憶したオペレーションキャッシュキューであって、第1のオペレーションキャッシュキューエントリは、進行するための命令キャッシュパスからの信号を受信することを待機するかどうかを示すインジケーションを含む、オペレーションキャッシュキューと、オペレーションキャッシュから、第1のオペレーションキャッシュキューエントリに対応する復号されたマイクロオペレーションを取得し、進行するための命令キャッシュパスから信号を受信することを待機するかどうかを示す、第1のオペレーションキャッシュキューエントリのインジケーションに基づいた時間において、第1のオペレーションキャッシュキューエントリに対応する復号されたマイクロオペレーションをオペレーションキューに出力するオペレーションキャッシュデータ読み出しロジックと、を含む。
【0069】
本明細書における開示に基づいて、多くの変形が可能であることが理解されるべきである。特徴及び要素が特定の組み合わせにおいて上記説明されたが、各々の特徴または要素は、他の特徴及び要素なしに単独で、または他の特徴及び要素との様々な組み合わせで、もしくは他の特徴及び要素なしの様々な組み合わせで使用されてもよい。
【0070】
提供される方法は、汎用コンピュータ、プロセッサ、またはプロセッサコアにおいて実装されてもよい。適切なプロセッサは、例として、汎用プロセッサ、特殊目的プロセッサ、従来型プロセッサ、デジタルシグナルプロセッサ(DSP)、複数のマイクロプロセッサ、DSPコアと関連した1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、いずれかの他のタイプの集積回路(IC)、及び/または状態機械を含む。そのようなプロセッサは、ネットリストを含む(そのような命令は、コンピュータ可読媒体に記憶されることが可能である)、処理されたハードウェア記述言語(HDL)命令及び他の中間データの結果を使用して製造工程を構成することによって製造されてもよい。そのような処理の結果は、上記開示の特徴を実装するプロセッサを製造する半導体製造工程において使用されるマスクワークであってもよい。
【0071】
本明細書で提供される方法またはフローチャートは、汎用コンピュータまたはプロセッサによる実行のために非一時的コンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア、またはファームウェアにおいて実装されてもよい。非一時的コンピュータ可読記憶媒体の例は、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及び着脱可能ディスクなどの磁気媒体、磁気光学媒体、並びにCD-ROMディスク及びデジタル多用途ディスク(DVD)などの光学媒体を含む。
図1
図2
図3
図4A
図4B
図4C