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

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

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-08-29
(54)【発明の名称】メタデータ予測器
(51)【国際特許分類】
   G06F 9/38 20180101AFI20240822BHJP
【FI】
G06F9/38 330A
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024507895
(86)(22)【出願日】2022-08-15
(85)【翻訳文提出日】2024-02-07
(86)【国際出願番号】 EP2022072767
(87)【国際公開番号】W WO2023020997
(87)【国際公開日】2023-02-23
(31)【優先権主張番号】17/406,513
(32)【優先日】2021-08-19
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【弁理士】
【氏名又は名称】片岡 忠彦
(72)【発明者】
【氏名】マレイ、エドワード、トーマス
(72)【発明者】
【氏名】コルラ、アダム、ベンジャミン
(72)【発明者】
【氏名】プラスキー、ブライアン、ロバート
(72)【発明者】
【氏名】ボナンノー、ジェームズ
(72)【発明者】
【氏名】ディトマソ、ドミニク
【テーマコード(参考)】
5B013
【Fターム(参考)】
5B013AA05
5B013BB01
5B013BB17
(57)【要約】
メタデータ予測器のための実施形態。インデックス・パイプラインは、インデックス・バッファ内にインデックスを生成し、インデックスは、メモリ・デバイスを読み出すために使用される。予測キャッシュには、メモリ・デバイスから読み取られた命令のメタデータがポピュレートされる。予測パイプラインは、予測キャッシュからの命令のメタデータを使用して予測を生成し、命令のメタデータを予測キャッシュにポピュレートすることは、予測パイプラインの動作と非同期的に実施される。
【特許請求の範囲】
【請求項1】
コンピュータ実行方法であって、
インデックス・バッファ内にインデックスを生成するためにインデックス・パイプラインを動作させることであって、前記インデックスがメモリ・デバイスを読み出すために使用される、前記動作させることと、
命令のメタデータを予測キャッシュにポピュレートすることであって、前記命令のメタデータが、前記メモリ・デバイスから読み取られる、前記ポピュレートすることと、
前記予測キャッシュからの前記命令の前記メタデータを使用して予測を生成するように予測パイプラインを動作させることであって、前記命令の前記メタデータを前記予測キャッシュに前記ポピュレートすることが、前記予測パイプラインの前記動作と非同期的に実施される、前記動作させることと
を含む、コンピュータ実行方法。
【請求項2】
前記命令の前記メタデータを前記予測キャッシュに前記ポピュレートすることが、前記予測パイプラインの前記動作と非同期的に実施されることが、前記予測パイプラインのプロセスとは独立して、前記予測キャッシュについての前記メタデータを読み出すために前記メモリ・デバイスに絶えずインデックスを付けることを含む、請求項1に記載のコンピュータ実行方法。
【請求項3】
前記インデックス・バッファが、前記予測キャッシュからの前記メタデータを使用して前記予測を生成することを当てにせず、前記予測を生成する前に、前記予測キャッシュについての前記メタデータを有する前記メモリ・デバイスを読み出すように構成される、請求項1に記載のコンピュータ実行方法。
【請求項4】
前記予測パイプラインが、前記予測キャッシュからの前記命令の前記メタデータのラインを出力するように構成される、請求項1に記載のコンピュータ実行方法。
【請求項5】
前記予測パイプラインが、前記メモリ・デバイスにアクセスし直す必要なく、前記予測キャッシュからの前記命令の前記メタデータのラインを絶えず再使用するように構成される、請求項1に記載のコンピュータ実行方法。
【請求項6】
前の予測が、前記メタデータのラインに対して予測されたことに応答して、前記予測パイプラインが、新しい予測を生成するために、前記予測キャッシュから出力された前記命令の前記メタデータの前記ラインを絶えず再使用するように構成される、請求項1に記載のコンピュータ実行方法。
【請求項7】
前記予測が、順不同の命令実行パイプラインに送られ、前記順不同の命令実行パイプラインが、前記インデックス・パイプラインおよび前記予測パイプラインと並列に動作する、請求項1に記載のコンピュータ実行方法。
【請求項8】
システムであって、
コンピュータ可読命令を有するメモリと、
前記コンピュータ可読命令を実行するための1つまたは複数のプロセッサであって、前記コンピュータ可読命令が、
インデックス・バッファ内にインデックスを生成するためにインデックス・パイプラインを動作させることであって、前記インデックスがメモリ・デバイスを読み出すために使用される、前記動作させること、
前記メモリ・デバイスからの命令のメタデータを予測キャッシュにポピュレートすること、および
前記予測キャッシュからの前記命令の前記メタデータを使用して予測を生成するように予測パイプラインを動作させることであって、前記命令の前記メタデータを前記予測キャッシュに前記ポピュレートすることが、前記予測パイプラインの前記動作と非同期的に実施される、前記動作させること
を含むプロセスを実施するように前記1つまたは複数のプロセッサを制御する、前記プロセッサと
を備える、システム。
【請求項9】
前記命令の前記メタデータを前記予測キャッシュに前記ポピュレートすることが、前記予測パイプラインの前記動作と非同期的に実施されることが、前記予測パイプラインのプロセスとは独立して、前記予測キャッシュについての前記メタデータを読み出すために前記メモリ・デバイスに絶えずインデックスを付けることを含む、請求項8に記載のシステム。
【請求項10】
前記インデックス・バッファが、前記予測キャッシュからの前記メタデータを使用して前記予測を生成することを当てにせず、前記予測を生成する前に、前記予測キャッシュについての前記メタデータを有する前記メモリ・デバイスを読み出すように構成される、請求項8に記載のシステム。
【請求項11】
前記予測パイプラインが、前記予測キャッシュからの前記命令の前記メタデータのラインを出力するように構成される、請求項8に記載のシステム。
【請求項12】
前記予測パイプラインが、前記メモリ・デバイスにアクセスし直す必要なく、前記予測キャッシュからの前記命令の前記メタデータのラインを絶えず再使用するように構成される、請求項8に記載のシステム。
【請求項13】
前の予測が、前記メタデータのラインに対して予測されたことに応答して、前記予測パイプラインが、新しい予測を生成するために、前記予測キャッシュから出力された前記命令の前記メタデータの前記ラインを絶えず再使用するように構成される、請求項8に記載のシステム。
【請求項14】
前記予測が、順不同の命令実行パイプラインに送られ、前記順不同の命令実行パイプラインが、前記インデックス・パイプラインおよび前記予測パイプラインと並列に動作する、請求項8に記載のシステム。
【請求項15】
プログラム命令を具体化したコンピュータ可読ストレージ媒体を備えるコンピュータ・プログラム製品であって、前記プログラム命令が、
インデックス・バッファ内にインデックスを生成するためにインデックス・パイプラインを動作させることであって、前記インデックスがメモリ・デバイスを読み出すために使用される、前記動作させることと、
前記メモリ・デバイスからの命令のメタデータを予測キャッシュにポピュレートすることと、
前記予測キャッシュからの前記命令の前記メタデータを使用して予測を生成するように予測パイプラインを動作させることであって、前記命令の前記メタデータを前記予測キャッシュに前記ポピュレートすることが、前記予測パイプラインの前記動作と非同期的に実施される、前記動作させることと
を含むプロセスを1つまたは複数のプロセッサに実施させるように前記1つまたは複数のプロセッサによって実行可能な、コンピュータ・プログラム製品。
【請求項16】
前記命令の前記メタデータを前記予測キャッシュに前記ポピュレートすることが、前記予測パイプラインの前記動作と非同期的に実施されることが、前記予測パイプラインのプロセスとは独立して、前記予測キャッシュについての前記メタデータを読み出すために前記メモリ・デバイスに絶えずインデックスを付けることを含む、請求項15に記載のコンピュータ・プログラム製品。
【請求項17】
前記インデックス・バッファが、前記予測キャッシュからの前記メタデータを使用して前記予測を生成することを当てにせず、前記予測を生成する前に、前記予測キャッシュについての前記メタデータを有する前記メモリ・デバイスを読み出すように構成される、請求項15に記載のコンピュータ・プログラム製品。
【請求項18】
前記予測パイプラインが、前記予測キャッシュからの前記命令の前記メタデータのラインを出力するように構成される、請求項15に記載のコンピュータ・プログラム製品。
【請求項19】
前記予測パイプラインが、前記メモリ・デバイスにアクセスし直す必要なく、前記予測キャッシュからの前記命令の前記メタデータのラインを絶えず再使用するように構成される、請求項15に記載のコンピュータ・プログラム製品。
【請求項20】
前の予測が、前記メタデータのラインに対して予測されたことに応答して、前記予測パイプラインが、新しい予測を生成するために、前記予測キャッシュから出力された前記命令の前記メタデータの前記ラインを絶えず再使用するように構成される、請求項15に記載のコンピュータ・プログラム製品。
【請求項21】
コンピュータ実行方法であって、
リセット・アドレスを使用してインデックス・アクセラレータに問い合わせることと、
前記問い合わせに応答して、インデックス・ラインが前記インデックス・アクセラレータ内に存在すると決定することと、
前記インデックス・アクセラレータ内の前記インデックス・ラインへのシーケンシャル・ラインを決定することと、
インデックス・バッファに前記シーケンシャル・ラインを入れることと
を含む、コンピュータ実行方法。
【請求項22】
前記インデックス・アクセラレータが、前記インデックス・ラインに基づいて、1つまたは複数の他のシーケンシャル・ラインを決定するように構成され、
前記インデックス・アクセラレータが、予測パイプラインによって必要とされる前記シーケンシャル・ラインおよび前記1つまたは複数の他のシーケンシャル・ラインの前に、前記シーケンシャル・ラインおよび前記1つまたは複数の他のシーケンシャル・ラインを前記インデックス・バッファに入れるように構成される、
請求項21に記載のコンピュータ実行方法。
【請求項23】
前記インデックス・ラインが、所与のエントリ命令アドレスに対する分岐の出口ターゲット命令アドレスを含む、請求項21に記載のコンピュータ実行方法。
【請求項24】
コンピュータ実行方法であって、
メタデータを使用して主予測および補助予測を生成することと、
前記主予測と前記補助予測とが異なると決定することと、
前記主予測と前記補助予測とが異なることに応答して、前記補助予測を選択することと、
所定の時間にわたって予測パイプラインの長さを延長することと、
前記補助予測を命令実行パイプラインに送ることと
を含む、コンピュータ実行方法。
【請求項25】
前記補助予測が、前記主予測より長い処理時間を必要とする、請求項24に記載のコンピュータ実行方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は一般に、コンピュータ・システムに関し、より詳細には、メタデータ予測器用に構成および配置されたコンピュータ実行方法、コンピュータ・システム、およびコンピュータ・プログラム製品に関する。
【背景技術】
【0002】
パイプライン・マイクロプロセッサには、特定のタスクを実施する複数のステージに分割された経路、チャネル、またはパイプラインがある。特定のタスクのそれぞれは、プログラム化命令によって指図される全動作の一部である。ソフトウェア・アプリケーション・プログラムのプログラム化命令またはマクロ命令のそれぞれは、マイクロプロセッサによって順番に実行される。プログラム化命令がパイプラインの第1のステージに入ると、特定のタスクが遂行される。命令は、次いで、その後のタスクの遂行のために、その後のステージに渡される。最後のタスクの完了後、命令は実行を完了し、パイプラインを出る。パイプライン・マイクロプロセッサによるプログラム化命令の実行は、組立ラインでの品物の製造に類似している。任意の組立ラインの明らかな態様のうちの1つは、任意の所与の時点の中で、連続的な組立ステージにおけるラインに複数の品物があることである。パイプライン・マイクロプロセッサについても同じである。パイプライン・クロック信号の任意のサイクル中、様々なステージに複数の命令が存在し、命令のそれぞれは、連続的な完了レベルにある。したがって、マイクロプロセッサは、同じ回路による複数の命令の重複実行を可能にしている。回路は通常、複数のステージに分割され、各ステージは、1つの命令の特定の部分を一度に処理し、部分的な結果を次のステージに渡す。
【発明の概要】
【0003】
本発明の実施形態は、メタデータ予測器用のコンピュータ実行方法を対象とする。コンピュータ実行方法の非限定的例は、インデックス・バッファ内にインデックスを生成するためにインデックス・パイプラインを動作させることであって、インデックスがメモリ・デバイスを読み出すために使用される、動作させることと、メモリ・デバイスから読み取られた命令のメタデータを予測キャッシュにポピュレートすることとを含む。コンピュータ実行方法は、予測キャッシュからの命令のメタデータを使用して予測を生成するように予測パイプラインを動作させることであって、命令のメタデータを予測キャッシュにポピュレートすることが、予測パイプラインの動作と非同期的に実施される、動作させることを含む。
【0004】
コンピュータ実行方法の非限定的例は、リセット・アドレスを使用してインデックス・アクセラレータに問い合わせることと、問い合わせに応答して、インデックス・ラインがインデックス・アクセラレータ内に存在すると決定することとを含む。コンピュータ実行方法は、インデックス・アクセラレータ内のインデックス・ラインへのシーケンシャル・ラインを決定することと、インデックス・バッファにシーケンシャル・ラインを入れることとを含む。
【0005】
コンピュータ実行方法の非限定的例は、メタデータを使用して主予測および補助予測を生成することと、主予測と補助予測とが異なると決定することと、主予測と補助予測とが異なることに応答して、補助予測を選択することとを含む。コンピュータ実行方法は、所定の時間にわたって予測パイプラインの長さを延長することと、補助予測を命令実行パイプラインに送ることとを含む。
【0006】
本発明の他の実施形態は、コンピュータ・システムおよびコンピュータ・プログラム製品で上述の方法の特徴を実施する。
【0007】
本発明の技術を通じて、追加の技術的特徴および利益が実現される。本発明の実施形態および態様が本明細書で詳細に説明され、特許請求される主題の一部とみなされる。より良く理解するために、詳細な説明および図面を参照する。
【0008】
本明細書に記載の排他的権利の詳細は、本明細書の結論における特許請求の範囲において具体的に指摘され、明確に特許請求される。本発明の実施形態の前述および他の特徴および利点は、添付の図面と併用して行われる以下の詳細な説明から明らかである。
【図面の簡単な説明】
【0009】
図1】本発明の1つまたは複数の実施形態と併用して使用するためのコンピュータ・システムの例のブロック図である。
図2】本発明の1つまたは複数の実施形態による、プロセッサにおけるメタデータ予測器のブロック図である。
図3】本発明の1つまたは複数の実施形態による、メタデータ予測キャッシュを有するメタデータ予測器のブロック図である。
図4】本発明の1つまたは複数の実施形態による、親ベース・デザインにおけるメタデータ予測キャッシュを有するメタデータ予測器のブロック図である。
図5】本発明の1つまたは複数の実施形態による、メタデータ予測器プロセスのブロック図である。
図6】本発明の1つまたは複数の実施形態による、メタデータ予測器キャッシュの例のブロック図である。
図7】本発明の1つまたは複数の実施形態による、パイプラインの実例のブロック図である。
図8】本発明の1つまたは複数の実施形態による、メタデータ予測器キャッシュの例のブロック図である。
図9】本発明の1つまたは複数の実施形態による、パイプラインの実例のブロック図である。
図10】本発明の1つまたは複数の実施形態による、メタデータ予測器を使用するためのコンピュータ実行方法のフローチャートである。
図11】本発明の1つまたは複数の実施形態による、ライン・インデックス・アクセラレータに書き込むためのアクセラレータ・フローのフローチャートである。
図12】本発明の1つまたは複数の実施形態による、ライン・インデックス・アクセラレータを読み取るためのアクセラレータ・フローのフローチャートである。
図13】本発明の1つまたは複数の実施形態による、ライン・インデックス・アクセラレータのレイテンシ・アクセラレータ・エントリの例のブロック図である。
図14】本発明の1つまたは複数の実施形態による、ペイロード・マッチングを実施するためのアクセラレータ・フローのフローチャートである。
図15】本発明の1つまたは複数の実施形態による、アクセラレータの例のブロック図である。
図16】本発明の1つまたは複数の実施形態による、アクセラレータの例のブロック図である。
図17】本発明の1つまたは複数の実施形態による、ライン・オフセットのないライン・インデックス・アクセラレータを含むパイプラインの実例のブロック図である。
図18】本発明の1つまたは複数の実施形態による、ライン・オフセットのあるライン・インデックス・アクセラレータを含むパイプラインの実例のブロック図である。
図19】本発明の1つまたは複数の実施形態による、ライン・オフセットのあるライン・インデックス・アクセラレータを含むパイプラインの実例のブロック図である。
図20】本発明の1つまたは複数の実施形態による、ライン・オフセットおよびイントラライン分岐のあるライン・インデックス・アクセラレータを含むパイプラインの実例のブロック図である。
図21】本発明の1つまたは複数の実施形態による、ライン・インデックス・アクセラレータを使用してメタデータ予測器のライン・インデックス・バッファ用のインデックスを決定するためのコンピュータ実行方法のフローチャートである。
図22】本発明の1つまたは複数の実施形態による、主予測器および補助予測器を含む予測ロジックのブロック図である。
図23】本発明の1つまたは複数の実施形態による、いつ補助予測器を使用するべきか、または予測パイプラインを延長するべきか、あるいはその両方を決定するための可変長メタデータ予測パイプライン・フローのフローチャートである。
図24】本発明の1つまたは複数の実施形態による、下流の混雑を描写したパイプラインの実例のブロック図である。
図25】本発明の1つまたは複数の実施形態による、補助予測器が主予測器とは異なる予測を行ったことを描写したパイプラインの実例のブロック図である。
図26】本発明の1つまたは複数の実施形態による、補助予測器が主予測器と同じ予測を行ったことを描写したパイプラインの実例のブロック図である。
図27】本発明の1つまたは複数の実施形態による、可変長メタデータ予測パイプラインを使用するためのコンピュータ実行方法のフローチャートである。
図28】本発明の1つまたは複数の実施形態による、メタデータ予測器をデザイン/レイアウトすることになるシステムのブロック図である。
図29】本発明の1つまたは複数の実施形態による、図28の集積回路を製作する方法のプロセス・フローである。
図30】本発明の1つまたは複数の実施形態による、クラウド・コンピューティング環境の図である。
図31】本発明の1つまたは複数の実施形態による、抽象化モデル層の図である。
【発明を実施するための形態】
【0010】
本発明の1つまたは複数の実施形態は、メタデータ予測器キャッシュをメタデータ予測器に設置するように配置および構成されたコンピュータ実行方法、コンピュータ・システム、およびコンピュータ・プログラム製品を提供する。1つまたは複数の実施形態は、低レイテンシ分岐予測を確保し、これにより、フェッチの不正確さおよび下流の分岐ペナルティを最小化するために、予測メタデータのキャッシングおよび再使用を実施することによってプロセッサ性能を改善する。さらに、1つまたは複数の実施形態は、メタデータ予測器ライン・インデックス・アクセラレータに予測キャッシュを設置するように構成および配置される。アクセラレータは、ライン・インデックス・バッファ(LIB:line index buffer)をポピュレートするように構成され、メタデータ・バッファ(例えば、分岐ターゲット・バッファ(BTB:branch target buffer)または他のバッファ)が予測パイプラインより先にアクセスされることを可能にし、これにより、予測レイテンシを最小化する。さらに、1つまたは複数の実施形態は、メタデータ予測器内に可変長メタデータ予測パイプラインを設置するように構成および配置される。
【0011】
メタデータ予測器は、メタデータを使用して、マイクロプロセッサで命令またはデータあるいはその両方についての情報を予測するシステムである。ロード命令がストア命令に依存することは、メタデータ予測器で予測可能な情報のタイプの例である。ライン・プリフェッチ予測器は、別の例である。分岐予測は、メタデータ予測のさらに別のタイプであり、パイプライン型高周波数マイクロプロセッサの性能に不可欠な構成要素である。分岐予測は、分岐命令の指示(例えば、行われる対行われない)およびターゲット・アドレスを予測するために使用される。これは、分岐の結論が決定されるのを待つ必要なく、分岐の予測経路に沿って処理を続けることを可能にするので有益である。分岐が誤って予測された場合のみ、ペナルティを受ける。
【0012】
分岐ターゲット・バッファ(BTB)は、分岐およびターゲット・アドレス情報を含むメタデータを格納する構造である。BTBは、まもなく起こる分岐を見つけるための命令フェッチと並列かつ独立してサーチされることが可能であり、この場合、BTBは、非同期分岐予測と呼ばれる先取り分岐予測のために利用される。追加として、BTBは、命令のフェッチと同時に、またはその後、あるいはその両方でアクセスされ、同期分岐予測と呼ばれる、遭遇した各分岐命令についての予測を行うための命令境界を決定するために使用されることが可能である。どちらの場合でも、BTBの性能利益は、BTBから提供される予測の正確度と、BTBにアクセスするのに必要なレイテンシとの関数である。
【0013】
メタデータ予測キャッシュは、メタデータ予測器出力をキャプチャし、予測を繰り返し行うために同じコード・セクションにとどまりながら、メタデータ予測器出力を再使用することができる。メタデータ予測器は、親ベース・デザインによる可変ライン・サイズを有するように編成可能である。メタデータ予測器のマルチレベル階層が可能である。これは、マルチレベル命令またはデータ・キャッシュ階層に類似している。2レベル階層のうちの第1のレベルは、より大きく遅くなるはずの第2のレベルより、アクセスが小さく速くなるはずである。メタデータ予測器階層のデザインは、命令またはデータ・キャッシュ階層のデザインより柔軟である。これは、メタデータが、他のキャッシュと違ってプロセッサの適切な機能に対して、存在することおよび正確であることが必要ないからである。
【0014】
様々な用語が本明細書で利用され得る。
【0015】
LIBは、ライン・インデックス・バッファである。LOBは、ライン出力バッファである。BTBは、分岐ターゲット・バッファである。ILは、イントラライン分岐であり、ターゲットが命令テキスト(itext)の同じライン内にある分岐である。DGTは、動的に推測される行われる分岐(dynamically guessed taken branch)を指す。出口分岐は、ラインXから他のいくつかのラインへのフローを行う分岐を指す。エントリ・ポイントは、メタデータ予測器が、出口分岐を見つけた後、サーチを始める命令アドレス(IA:instruction address)であり、したがって、事実上、出口分岐のターゲット命令アドレスである。行われる分岐オフセットは、エントリ・ポイントと出口分岐との間のラインの数である。SKOOTは、スキップ・オーバー・オフセットを表し、分岐を含まないのでサーチされる必要がないラインの数を示す。
【0016】
ここで図1に移ると、本発明の1つまたは複数の実施形態によるコンピュータ・システム100が全体的に示されている。コンピュータ・システム100は、本明細書に記載のような、様々な通信技術を利用した、任意の数のコンピューティング・デバイスおよびネットワーク、ならびにその組合せを備える、または採用する、あるいはその両方の、電子的なコンピュータ・フレームワークであることが可能である。コンピュータ・システム100は、容易に拡大縮小可能であること、拡張可能であること、およびモジュール方式であることが可能であり、異なるサービスに変更すること、または他とは無関係のいくつかの特徴を再構成することができる。コンピュータ・システム100は、例えば、サーバ、デスクトップ・コンピュータ、ラップトップ・コンピュータ、タブレット・コンピュータ、またはスマートフォンでもよい。一部の例では、コンピュータ・システム100は、クラウド・コンピューティング・ノードでもよい。コンピュータ・システム100は、コンピュータ・システムによって実行される、プログラム・モジュールなど、コンピュータ・システム実行可能命令の一般的な文脈で説明されてもよい。一般に、プログラム・モジュールは、特定のタスクを実施するか、特定の抽象データ型を実行する、ルーチン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造などを含んでもよい。コンピュータ・システム100は、通信ネットワークを通じてリンクされたリモート処理デバイスによってタスクが実施される分散型クラウド・コンピューティング環境で実践されてもよい。分散型クラウド・コンピューティング環境では、プログラム・モジュールは、メモリ・ストレージ・デバイスを含むローカルおよびリモート両方のコンピュータ・システム・ストレージ媒体に置かれてもよい。
【0017】
図1に示されているように、コンピュータ・システム100には、1つまたは複数の中央処理ユニット(CPU:central processing unit)101a、101b、101c等(まとめてまたは全体的にプロセッサ101と呼ばれる)がある。プロセッサ101は、シングルコア・プロセッサ、マルチコア・プロセッサ、コンピューティング・クラスタ、または任意の数の他の構成であることが可能である。プロセッサ101は、処理回路とも呼ばれ、システム・バス102を介してシステム・メモリ103および様々な他の構成要素に連結される。システム・メモリ103は、リード・オンリ・メモリ(ROM:read only memory)104およびランダム・アクセス・メモリ(RAM:random access memory)105を含むことができる。ROM104は、システム・バス102に連結され、コンピュータ・システム100の特定の基本機能を制御する、基本入出力システム(BIOS)、または、ユニファイド・エクステンシブル・ファームウェア・インターフェース(UEFI)のようなその後続種を有してもよい。RAMは、プロセッサ101による使用のためにシステム・バス102に連結されたリード・ライト・メモリである。システム・メモリ103は、動作中に前記命令の動作のための一時的なメモリ空間を提供する。システム・メモリ103は、ランダム・アクセス・メモリ(RAM)、リード・オンリ・メモリ、フラッシュ・メモリ、または任意の他の適切なメモリ・システムを含むことができる。
【0018】
コンピュータ・システム100は、システム・バス102に連結された入出力(I/O)アダプタ106および通信アダプタ107を備える。I/Oアダプタ106は、ハードディスク108、または任意の他の類似の構成要素、あるいはその両方と通信するスモール・コンピュータ・システム・インターフェース(SCSI)アダプタでもよい。I/Oアダプタ106およびハードディスク108は、本明細書ではまとめて、マス・ストレージ110と呼ばれる。
【0019】
コンピュータ・システム100で実行するためのソフトウェア111は、マス・ストレージ110に格納されてもよい。マス・ストレージ110は、プロセッサ101によって可読の有形ストレージ媒体の例であり、ソフトウェア111は、様々な図を参照しながら本明細書で後述されるように、コンピュータ・システム100を動作させるためのプロセッサ101による実行用の命令として格納される。コンピュータ・プログラム製品の例、およびこのような命令の実行は、本明細書でより詳細に論じられる。通信アダプタ107は、システム・バス102をネットワーク112と相互接続し、ネットワーク112は外部ネットワークでもよく、コンピュータ・システム100が他のこのようなシステムと通信することを可能にする。1つの実施形態では、システム・メモリ103およびマス・ストレージ110の一部が、オペレーティング・システムをまとめて格納し、オペレーティング・システムは、図1に示されている様々な構成要素の機能を協調させるための任意の適切なオペレーティング・システムでもよい。
【0020】
追加の入出力デバイスが、ディスプレイ・アダプタ115およびインターフェース・アダプタ116を介してシステム・バス102に接続されているように示されている。1つの実施形態では、アダプタ106、107、115、および116は、中間のバス・ブリッジ(図示せず)を介してシステム・バス102に接続された1つまたは複数のI/Oバスに接続されてもよい。ディスプレイ119(例えば、スクリーンまたはディスプレイ・モニタ)は、ディスプレイ・アダプタ115によってシステム・バス102に接続され、ディスプレイ・アダプタ115は、グラフィックス負荷の大きなアプリケーションの性能を改善するためのグラフィックス・コントローラ、およびビデオ・コントローラを含んでもよい。キーボード121、マウス122、スピーカ123等は、インターフェース・アダプタ116を介してシステム・バス102に相互接続可能であり、インターフェース・アダプタ116は、例えば、複数のデバイス・アダプタを単一の集積回路に統合したスーパーI/Oチップを含んでもよい。ハードディスク・コントローラ、ネットワーク・アダプタ、およびグラフィックス・アダプタなどの周辺デバイスを接続するのに適切なI/Oバスは、典型的には、ペリフェラル・コンポーネント・インターコネクト(PCI)、およびペリフェラル・コンポーネント・インターコネクト・エクスプレス(PCIe)などの、共通プロトコルを含む。したがって、図1に構成されたように、コンピュータ・システム100は、プロセッサ101の形の処理能力と、システム・メモリ103およびマス・ストレージ110を含むストレージ能力と、キーボード121およびマウス122などの入力手段と、スピーカ123およびディスプレイ119を含む出力能力とを含む。
【0021】
一部の実施形態では、通信アダプタ107は、特にインターネット・スモール・コンピュータ・システム・インターフェースなどの、任意の適切なインターフェースまたはプロトコルを使用してデータを伝送することができる。ネットワーク112は、特にセルラー・ネットワーク、無線ネットワーク、ワイド・エリア・ネットワーク(WAN)、ローカル・エリア・ネットワーク(LAN)、またはインターネットでもよい。外部コンピューティング・デバイスが、ネットワーク112を通じてコンピュータ・システム100に接続してもよい。一部の例では、外部コンピューティング・デバイスは、外部ウェブサーバまたはクラウド・コンピューティング・ノードでもよい。
【0022】
図1のブロック図は、コンピュータ・システム100が、図1に示されている構成要素の全てを含むべきであることを指示することを意図するものではないことを理解されたい。むしろ、コンピュータ・システム100は、図1に例示されていない任意の適切なより少ないまたは追加の構成要素(例えば、追加のメモリ構成要素、組み込み型コントローラ、モジュール、追加のネットワーク・インターフェース等)を含むことができる。さらに、コンピュータ・システム100に関する本明細書に記載の実施形態は、任意の適切なロジックで実行されてもよく、本明細書で呼ばれるようなロジックは、様々な実施形態における、任意の適切なハードウェア(例えば、特にプロセッサ、組み込み型コントローラ、もしくは特定用途向け集積回路)、ソフトウェア(例えば、特にアプリケーション)、ファームウェア、または、ハードウェア、ソフトウェア、およびファームウェアの任意の適切な組合せを含むことができる。
【0023】
図2は、本発明の1つまたは複数の実施形態による、プロセッサ101のメタデータ予測器200のブロック図である。プロセッサ101は、図1のコンピュータ・システム100で論じられたプロセッサ101のいずれかを表したものでもよい。メタデータ予測器200は、命令実行パイプライン250の外側にあり、命令実行パイプライン250とは非同期に実行される。命令実行パイプライン250は、順不同のパイプラインであることが可能であり、当業者によって理解されるように、プロセッサ・コアの一部として動作するためのモジュール/ブロックを含む。メタデータ予測器200は、命令実行パイプライン250と通信する(例えば、命令実行パイプライン250からデータを送る、および受け取る)ように構成される。命令実行パイプライン250は、任意の命令パイプラインであることが可能である。プロセッサ・コアを備えるいくつかのユニットの命令実行パイプライン250の例では、分岐予測ロジックには、命令フェッチおよび分岐予測ユニット(IFB:instruction fetch and branch prediction unit)における命令フェッチおよび分岐予測の責任がある。IFBは、コアのナビゲータであり、両方のスレッドのための全てのパイプライン・リスタート・ポイントを調停する。さらに、IFBは、命令キャッシュおよびマージ(ICM)ユニットを誘導し、レベル1命令キャッシュから命令テキストをフェッチすることを担当し、正しい投機的コード経路であると考えるものに対する命令テキストだけが命令デコードおよびディスパッチ・ユニット(IDU)に配信されることを確保しようとすることを担当する。パイプラインは、次いで、順不同の実行パイプラインを維持する命令シーケンス・ユニット(ISU)に送り出す。固定小数点ユニット(FXU)、ベクトルおよび浮動小数点ユニット(VFU)、ロード-ストア・ユニット(LSU)等において命令を実行するために、命令発行待ち行列が使用される。トランスレータ・ユニット(XU)によってアドレス変換が実施され、回復ユニット(RU)によってチェックポインティングが管理される。命令が分岐であるとデコードされると、この分岐の動的予測情報は、IDUが正常に適用されたはずであるという任意の命令テキスト・ベースの静的推測を破棄する。
【0024】
メタデータ予測器200は、ライン・インデックス・アクセラレータ202、ライン・インデックス・バッファ(LIB)204、分岐ターゲット・バッファ(BTB1)206、ライン出力バッファ(LOB)208、アクセラレータ・ロジック222、LIBロジック224、LOBロジック228、および予測ロジック230を含む様々なハードウェア構成要素を含み、ハードウェア構成要素は、キャッシュ、組合せロジック、メモリ等を含む。簡潔さのために示されていないが、1つまたは複数の実施形態では、メタデータ予測器200は、BTB1より大きいBTB2を含んでもよく、メタデータをBTB1に供給することができる。さらに、メタデータ予測器200の様々なハードウェア構成要素は、専用ハードウェア(例えば、組み込み型コントローラ、配線された回路等のような、アプリケーション固有ハードウェア、特定用途向け集積回路(ASIC))のような、またはこれらのいくつかの組合せもしくは複数の組合せのような、あるいはその両方のようなハードウェア・モジュールと共に、マイクロコントローラで実行される(コンピュータ実行可能命令のような)ファームウェアを含む。例では、本明細書に記載のモジュールは、ハードウェアとプログラミングとの組合せであることが可能である。プログラミングは、有形メモリに格納されたプロセッサ実行可能命令であることが可能であり、ハードウェアは、これらの命令を実行するための処理回路を含むことができる。代替または追加として、モジュールは、本明細書に記載の技術を実施するための、1つまたは複数の集積回路、特定用途向け集積回路(ASIC)、特定用途向け特殊プロセッサ(ASSP:Application Specific Special Processor)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、または、専用ハードウェアの前述の例の任意の組合せなどの、専用ハードウェアを含むことができる。さらに、メタデータ予測器200のモジュールは、本明細書で論じられるように機能させるための様々なデジタル論理回路を含むことができる。
【0025】
図3は、本発明の1つまたは複数の実施形態による、予測キャッシュを有するメタデータ予測器200のブロック図である。図4は、本発明の1つまたは複数の実施形態による、予測キャッシュ親ベース・デザインによるメタデータ予測器200のブロック図である。BTB1 206は、例えば4つの四半部といった、使用のために四半部に分けられることが可能である。より具体的には、BTB1 206はメモリ構造であるが、BTB1 206は、図4の親ベース・デザインの複数のセクションとして動作される。図4では、BTB1 206は、親0および1に対するBTB1 206_0およびBTB1 206_1としてそれぞれ利用されるBTB1 206を描写した2つの四半部で表されている。同様に、各四半部は、図4の親ベース・デザインのLOB208_0およびLOB208_1として描写された独自のLOB208を有する。マルチプレクサ402_0および402_1は、選択の所定の様式に基づいて、予測ロジック230へのメタデータの適切なラインを設けるために利用されてもよい。
【0026】
BTB1 206は、ライン毎に読み出され、出力は、LOB208(LOB208_0および208_1を含む)などの予測キャッシュに書き込まれ、このライン内にとどまりながら再使用されることになる。インデックス・パイプライン(例えば、図5に描写されたインデックス・パイプライン552)は、BTB1 206を読み取り、出力をLOB208に送るように構成される。予測パイプライン(例えば、図5に描写された予測パイプライン554)は、BTB1 206(BTB1 206_0およびBTB1 206_1を含む)からのBTBデータと、LOB208(LOB208_0および208_1を含む)からのLOBデータとを使用して、プロセッサ101の予測ロジック230を介して予測するように構成される。メタデータ予測器200では、インデックス・パイプライン552および予測パイプライン554は、命令実行パイプライン250と非同期的に動作することに加えて、連結解除され、互いに独立して動作する。
【0027】
分岐予測レイテンシは、いずれかのプロセッサにとって性能問題の原因である可能性があり、下流のパイプラインは、命令あたりのサイクル(CPI:cycle per instruction)を低く維持するために、可能な限り素早く命令テキストを正確にフェッチしなければならない。正確な分岐予測は、このようなフェッチを可能にする。しかし、予測が利用できない場合、プロセッサは、先に進み、誤分岐ペナルティの危険を犯して間違った命令テキストをフェッチするか、新しい分岐予測が利用可能になるのを待ち、したがって、CPIを増大させる可能性がある。1つまたは複数の実施形態によれば、LIB204およびLOB208へのバッファリング、ならびにLOB208内の予測メタデータの再使用は、低レイテンシ分岐予測を可能にし、これにより、命令フェッチを命令実行の前に置いておき、節電利益をもたらす。インデックス・パイプライン552と予測パイプライン54との連結解除によって、インデックス・パイプライン552は、予測パイプライン554の前になることができ、これにより、他の予測レイテンシ誘導イベント(例えば、リード/ライト衝突等)を隠すことができる。さらに、予測パイプライン554が予測を可能な限り素早く生成できるようにするために、インデックス・パイプライン552は、予測パイプライン554の前に読み取られることになる。
【0028】
インデックス・パイプライン552および予測パイプライン554の詳細をさらに例示するために、図5は、1つまたは複数の実施形態による、メタデータ予測器200用のメタデータ予測キャッシュ・プロセス500を描写している。メタデータ予測キャッシュ・プロセス500は、本明細書で論じられた他の図と共に、図1図2図3、および図4のプロセッサ101によって実行されるコンピュータ実行プロセスである。図5に示されているメタデータ予測キャッシュ・プロセス500の説明は、適切であれば、図1図2図3、および図4を参照しながら行われる。
【0029】
インデックス・パイプライン552のブロック502において、メタデータ予測器200は、LIB204をポピュレートするように構成される。LIB204には、命令実行パイプライン250または予測ロジック230あるいはその両方からのリセット命令アドレスがポピュレートされることが可能である。追加として、LIB204は、アクセラレータ命令アドレスでポピュレートされることが可能である。アクセラレータ命令アドレスは、ライン・インデックス・アクセラレータ202からLIB204に送られることが可能である。ライン・インデックス・アクセラレータ202については、本明細書でさらに論じられる。LIB204は、先入れ先出しバッファ(FIFO:first in first out)でも、別のタイプのバッファでもよい。リセット命令は、LIB204内にインデックスまたはインデックス・ラインあるいはその両方を入れるために使用され、インデックス・ラインは、BTB1 206をサーチすること、またはBTB1 206に問い合わせること、あるいはその両方のために格納され、最終的に利用される。LIB204内のインデックスまたはインデックス・ラインあるいはその両方は、BTB1 206にアクセスするためにLIB204によって使用される命令アドレス・ビットのサブセットを指す。1つまたは複数の実施形態では、BTB1 206内の各エントリは、128バイト(B)ラインを表してもよく、LIB204内のインデックス/インデックス・ラインは、BTB1のサイズに基づいて、命令アドレス・ビット(48:56)などの、命令アドレス・ビットのサブセット(例えば、128Bラインのサブセット)を使用することができ、命令アドレス・ビット(48:56)は、BTB1 206を読み取るために利用される命令アドレスの命令アドレス・ビット48~56を指す。1つまたは複数の実施形態では、LIB204内のインデックス/インデックス・ラインは、命令アドレス・ビットの任意の所定のサブセットであり、128Bが例として例示される。したがって、LIB204のインデックス・ラインは、BTB1 206に問い合わせるために利用される。さらに、誤分岐など、命令実行パイプライン250の命令実行パイプライン・イベントは、インデックス・パイプライン552、予測パイプライン554、およびライン・インデックス・アクセラレータ202をリスタートさせることができる。
【0030】
ブロック504において、(例えば、LIBロジック224を使用する)メタデータ予測器200は、LIB204を読み出すように構成され、これにより、命令アドレスを有するインデックスがLIB204から読み出される。LIB204は、命令アドレスのインデックスを一度に読み出してもよい。
【0031】
ブロック506において、(例えば、LIBロジック224を使用する)メタデータ予測器200は、受け取った命令アドレスが有効であるか否かをチェックするように構成される。(例えば、LIBロジック224を使用する)メタデータ予測器200は、実際の命令アドレスがLIB204から読み出されたかどうか、または出力が空であるかどうかをチェックするように構成される。各命令アドレスは、ライン(例えば、キャッシュ・ライン)におけるエントリとして、またはエントリのグループ/ブロックとして、あるいはその両方として、(例えば、連続的に)一度に1つ読み出されてもよい。(「NO」)命令アドレスが空の場合、フローは、ブロック504に戻り、(例えば、LIBロジック224を使用する)メタデータ予測器200は、インデックスがポピュレートされているはずのLIB204を読み取るように構成される。「YES」命令アドレスが有効である(すなわち、存在する)場合、フローは、ブロック508に進む。また、「YES」命令アドレスが有効である(すなわち、存在する)場合、(例えば、LIBロジック224を使用する)メタデータ予測器200は、ブロック510において、これがLIB204の最後のエントリであるかどうかチェックするように構成される。ブロック510は、このエントリがLIB内の最後のインデックスであるかどうかチェックする。このエントリがLIB内の最後のエントリでない(「NO」)場合、(例えば、LIBロジック224を使用する)メタデータ予測器200は、ブロック504に戻ることによって、LIB内の次のエントリを読み出すように構成される。(「YES」)このエントリがLIB204内の最後のエントリである場合、(例えば、LIBロジック224を使用する)メタデータ予測器200は、ブロック512においてLIB204の最後尾にポピュレートするために、現在のライン(例えば、ラインX)の後の、次の連続したラインに進むことによって、ラインX+1を生成するように構成され、フローは、ブロック504に戻る。メタデータ予測器200は、ラインX+1をLIBの最後尾に書き込み、「有効な」経路上のラインXの処理を終えると、メタデータ予測器200は、ラインX+1を処理することになる。例えば、ラインX+1は、ラインXの後の命令テキストの次の連続した128Bラインを指す。1つまたは複数の実施形態では、ブロック510は、アクセラレータがもはやどこに行くべきかわからず、したがって、LIBが、BTB1にアクセスするためのインデックスを使い果たしていても、予測を移動させ続けることが認識できる。このようなケースでは、インデックス・パイプライン552は、次のシーケンシャル・ラインを生成し、これを使用してBTB1をサーチするように構成される。
【0032】
ブロック508において、メタデータ予測器200は、BTB1 206へのアクセスおよび問い合わせを行うために、LIB204からインデックスのリストを送ることによって、BTB1 206にインデックスを付けるように構成される。インデックスの各インデックスは、BTB1 206を読み出すために利用される。インデックスは、BTB1内のエントリにアクセスするために使用されるアドレス・ビットのサブセット(すなわち、同じインデックスを共有する複数のアドレス)である。タグは、BTB1から取り出されたものが、探しているアドレスにマッチすることを検証するために使用される。図示されていないが、該当する場合、データを保持するために、インデックス・パイプライン552および予測パイプライン554において様々な待ち行列を利用することができる。分岐ターゲット・バッファとして、BTB1 206は、分岐すると推測された(または分岐すると決められた、あるいはその両方)、および分岐しないと推測された分岐を、そのターゲットと共に含み、追跡する。BTB1 206は、分岐詳細についてのメタデータを含む大きいアレイまたはキャッシュあるいはその両方である。BTB1 206は、サーチに備えて、命令アドレス・ビットをタグとして保持する。
【0033】
ブロック514において、メタデータ予測器200は、BTB1 206内にヒットがないかチェックするように構成される。(例えば)BTB1内のタグは、インデックスにおける現在のサーチ・タグと比較される。これらがマッチすると、BTB1から読み取られたメタデータのラインは、予測パイプライン554への入力として使用されることになる。BTB1内のタグが現在のサーチ・タグにマッチしない場合、ラインは、予測用に使用されない。1つまたは複数の実施形態では、ヒットがあるか否かは、フローに影響を及ぼさず、メタデータ予測器200は、ヒットに関わらずメタデータをLOBに書き込むことができる。したがって、ブロック514からのフローは、実装形態に基づいて修正されてもよく、1つの実装形態は、このメタデータを予測用に使用できないので、このメタデータを削除することを選んでもよい。
【0034】
予測パイプライン554のブロック520において、(例えば、LOBロジック228を使用する)メタデータ予測器200は、BTB1 206からのデータをLOB208にポピュレートするように構成される。LIB204およびLOB208は、サイズおよび容量がBTB1 206より小さいことに留意されたい。LOB208には、BTB1 206のキャッシュ・ヒットからデータがポピュレートされる。BTB1 206と全く同じように、LOB208は、ロケーション、方向、およびターゲットを含む分岐およびターゲット・アドレス情報を格納する。BTB1およびLOBは分岐予測に利用可能であるが、どのような目的であっても、任意のメタデータと共に利用可能であることを理解されたい。
【0035】
ブロック522において、(例えば、LOBロジック228を使用する)メタデータ予測器200は、LOB208内のライン(例えば、キャッシュ・ライン)を読み出すように構成される。例えば、LIB204からのインデックス/インデックス・ラインが、BTB1 206からのメタデータのラインを読み取るために使用される。1つまたは複数の実施形態では、LOB208の出力は、LIB204からのインデックスによって、サーチされた命令テキストの128Bラインに関連付けられた分岐予測メタデータのラインである。
【0036】
ブロック524において、(例えば、LOBロジック228を使用する)メタデータ予測器200は、LOB208のラインに対して何かが読み出された(例えば、読み出された命令アドレスについてのメタデータのラインであった)かどうかをチェックするように構成される。キャッシュ・ラインについてのデータが読み出されなかった(「NO」)(すなわち、空)場合、フローは、ブロック522に戻る。「YES」データ(例えば、命令アドレスについてのメタデータのライン)が読み出された場合、(例えば、LOBロジック228を使用する)メタデータ予測器200は、予測を生成し、ブロック526において、予測(例えば、ターゲット・アドレス)を下流に送るように構成される。例えば、予測ターゲット・アドレスは、処理のために、命令実行パイプライン250の命令キャッシュおよびマージャ(ICM)ユニット、ならびに、命令デコードおよびディスパッチ・ユニット(IDU)に送られる。追加として、ブロック528において、(例えば、LOBロジック228を使用する)メタデータ予測器200は、メタデータのラインにおける予測ターゲット・アドレスがイントララインであるかどうかをチェックするように構成される。予測ターゲット・アドレスがイントララインのとき、これは、予測ターゲット・アドレスが、LOB208から読み出された命令テキストについてのメタデータの同じ/現在のライン内にあることを意味する。「YES」予測ターゲット・アドレスが、LOB208から読み出された現在のライン内にある場合、ブロック530において、(例えば、LOBロジック228を使用する)メタデータ予測器200は、エントリ命令アドレスをアップデートし、別のラインがLOB208から読み取られる必要なく、別の予測を生成するために使用されることになるアップデートされたエントリ命令アドレス(同じラインの次のターゲット・アドレス)を出力するように構成され、フローは、ブロック530に戻る。エントリ命令アドレスのアップデートは、予測のためにどの分岐が次に考慮されるかを指す。128Bラインを使用する例を続けると、このラインの第1のサーチが、この128Bラインのバイト20におけるものであったと想定する。これは、バイト0から19に分岐がある場合、処理がこの命令テキストを超えて既に分岐されているので、メタデータ予測器200は、これらの分岐に関心がないことを意味する。イントラライン分岐は、(例えば、小さいループの場合)メタデータ予測器200をバイト20にすぐに戻すが、場合によっては、処理を異なるバイトにすることもある。イントラライン分岐のターゲットが、処理をバイト20ではなく、バイト10にすることだった場合、メタデータ予測器200が最後の予測を行っていなかったとしても、メタデータ予測器200は、バイト10から19におけるいずれか分岐を考慮しなければならないはずである。したがって、実質的に、サーチ開始位置は、イントラライン・ターゲットに基づいて移動される。ブロック526、528、および530は、アップデートされた命令アドレス(すなわち、アップデートされたターゲット・アドレス)を有する現在のラインを使用して新しい予測を生成する予測パイプライン554におけるループ550の実行を続けることができ、これにより、別の/その後のライン(またはエントリ)を読み出す必要がないことにより、メタデータ予測器200を速くする。
【0037】
予測ターゲット・アドレスがイントララインでない(「NO」)場合、(例えば、LOBロジック228を使用する)メタデータ予測器200は、ブロック532において、読み取りポインタをインクリメントするように構成され、フローは、ブロック522に戻る。これにより、LOB208が、次のラインを読み出す。1つまたは複数の実施形態では、LOBは、LIBのように、FIFOのように実行可能であり、その一方で、他の実装形態が可能である。したがって、イントラライン分岐がないと、メタデータ予測器200が決定した場合、これは、メタデータ予測器200がこのLOBエントリで実施され、FIFO内の次のエントリにインクリメント可能であることを意味する。
【0038】
図6は、1つまたは複数の実施形態による、メタデータ予測器キャッシュの例のブロック図である。図6は、ラインX、ラインY、およびラインZである3つのコード・ラインを例示しており、これらのラインのそれぞれは、動的に推測される行われる(DGT:dynamically guessed taken)分岐を含む。これらの分岐についての情報は、BTB1 206に収集されている。言い換えれば、ラインX、Y、およびZ(X、Y、およびZについてのメタデータのライン)は、LOB208(すなわち、予測キャッシュ)に格納される。LIB204からのインデックスを使用して、(例えば、LOBロジック228を使用する)メタデータ予測器200は、イベント602においてLOB208のコードのラインX上の命令アドレスをサーチし、イベント604における、LOB208内のコードのラインYに分岐するコードのラインX上の動的に行われる分岐を(例えば、予測ロジック230を使用して)予測する。コードのラインY上のターゲット命令アドレスに分岐した後、(例えば、LOBロジック228を使用する)メタデータ予測器200は、イベント606においてコードのラインY上の命令アドレスをサーチし、イベント608における、LOB208内のコードのラインZに分岐するコードのラインY上の動的に行われる分岐を(例えば、予測ロジック230を使用して)予測する。コードのラインZ上のターゲット命令アドレスに分岐した後、(例えば、LOBロジック228を使用する)メタデータ予測器200は、イベント610においてLOB208のコードのラインZ上の命令アドレスをサーチし、プロセスは続く。
【0039】
図7は、1つまたは複数の実施形態による、インデックス・パイプライン552および予測パイプライン554を含む一般的なパイプラインの実例のブロック図である。図5のフローを再び参照すると、(例えば、点模様で描写された)オレンジ色の全てが、点線の左側のプロセスを指し、緑色の全てが、点線の右側のプロセスを指す。(オレンジ色の)各B0は、エントリがLIBから読み取られること、および、BTB1にインデックスを付けるためにエントリが使用されることを示している。(例えば、右肩上がりの斜線で描写された、緑色の)各B2は、エントリがLOBから読み取られたものであること、およびエントリが予測を生成するためのものであることを示している。
【0040】
図8は、1つまたは複数の実施形態による、メタデータ予測器キャッシュの例のブロック図である。図8は、ラインX、ラインY、およびラインZであり、動的に推測され行われる(DGT)分岐を含む、3つのコード・ラインを例示している。これらの分岐についての情報は、BTB1 202に収集される。図8は、イントララインのケースの例である。LIB204からのインデックスを使用して、(例えば、LOBロジック228を使用する)メタデータ予測器200は、イベント802においてコードのラインXの命令アドレスを最初にサーチするように構成され、このサーチが、イベント804において動的に推測される行われる分岐(DGT)をもたらし、この分岐が、メタデータ予測器200を、コードのラインX(すなわち、イントラライン)における別の命令アドレスに至らせる。予測パイプライン554において、(例えば、LOBロジック228を使用する)メタデータ予測器200は、イベント804におけるイントラライン分岐を認識し、(例えば、LOBロジック228を使用する)メタデータ予測器200は、ラインXのメタデータをフェッチし直すためにBTB1 206に戻るのではなく、イベント806において、新しいスタート命令(X’)を使用して、LOB208(例えば、予測器キャッシュ)からのラインXのメタデータを再使用することを決定し、再使用することができる。イベント806において、(例えば、LOBロジック228を使用する)メタデータ予測器200は、メタデータを有するコードの同じラインX上のターゲット命令アドレス(X’)をサーチする。LOB208からメタデータをフェッチし直さずに、LOB208から以前に読み出されたコードのラインXのメタデータを再使用するこのプロセスは、全てがコードの同じラインX上にある動的に推測される行われる分岐に分岐する数多くの命令アドレスのための(図5に描写された)ループ550として続くことができる。これにより、分岐予測が速くなる。ある時点で、イベント808における動的に推測される行われる分岐(X’)が、例えばコードのラインY上にあるなど、コードのラインX上にないターゲット命令アドレスに分岐するので、ループ550は、終了のための条件を満たす。コードのラインY上のターゲット命令アドレスに分岐した後、(例えば、LOBロジック228を使用する)メタデータ予測器200は、イベント810においてコードのラインY上のターゲット命令アドレス(Y)をサーチし、イベント812における、LOB208内のコードのラインZに分岐するコードのラインY上の動的に行われる分岐を(例えば、予測ロジック230を使用して)予測する。コードのラインZ上のターゲット命令アドレスに分岐した後、(例えば、LOBロジック228を使用する)メタデータ予測器200は、イベント814においてLOB208のコードのラインZ上の命令アドレス(Z)をサーチし、プロセスは続く。
【0041】
図9は、1つまたは複数の実施形態による、インデックス・パイプライン552および予測パイプライン554を含む一般的なパイプラインの実例のブロック図である。イベント604における分岐。特に、図9は、メタデータ予測器200が、LOB208の1回の読み取りから2つの分岐を予測したイントララインの例を例示している。図7と同様に、2つの独立したインデックスおよび予測パイプラインがある。しかし、図9は、イントラライン分岐を例示している。インデックス・パイプライン552の挙動は変わらないが、予測パイプライン554は、インデックス・パイプラインを介した追加のBTB1へのアクセスなく、追加の予測を生成することができる。
【0042】
図10は、本発明の1つまたは複数の実施形態による、メタデータ予測器200を使用してBTB1 208にインデックスを付け、LOB208をポピュレートし、予測を生成するための、コンピュータ実行方法1000のフローチャートである。コンピュータ実行プロセス1000は、図1のコンピュータ・システム100を使用して実施されてもよい。図1のプロセッサ101は、本明細書で論じられる任意の他のプロセッサと共に、本明細書で論じられたプロセッサ101の機能を含むこと、または実行すること、あるいはその両方が可能である。プロセッサ101の機能は、図31に描写されたハードウェアおよびソフトウェア層60のハードウェア構成要素において使用または実行あるいはその両方が可能である。
【0043】
コンピュータ実行方法1000のブロック1002において、メタデータ予測器200は、インデックスがメモリ・デバイス(例えば、BTB1)を読み出すために使用されるインデックス・バッファ(例えば、LIB204)内にインデックスを生成するために、(例えば、LIBロジック224を使用する)インデックス・パイプライン552を動作させるように構成される。ブロック1004において、メタデータ予測器200は、メモリ・デバイス(例えば、BTB1)からの命令のメタデータを予測キャッシュ(例えば、LOB208)にポピュレートするように構成される。ブロック1006において、メタデータ予測器200は、予測キャッシュ(例えば、LOB208)からの命令のメタデータを使用して予測を生成するために、予測パイプライン554を動作させるように構成され、命令のメタデータを予測キャッシュにポピュレートすることが、予測パイプラインの動作と非同期的に実施される。
【0044】
命令のメタデータを予測キャッシュにポピュレートすることが、予測パイプラインの動作と非同期的に実施されることは、予測パイプラインのプロセスとは独立して、予測キャッシュについてのメタデータを読み出すためのメモリ・デバイス(例えば、BTB1 206)に絶えずインデックスを付けることを含む。例えば、(例えば、LIBロジック224を使用する)メタデータ予測器200は、図5のインデックス・パイプライン552のブロック504、506、508、510、512を実行し、その結果、図5の予測パイプライン554のブロック522、524、526、528、530、532の実行を何も誘発することなく、およびこれとは無関係に、BTB1 206からのメタデータをLOB208にポピュレートする(または、メタデータをLOB208に格納する)ように構成される。
【0045】
インデックス・バッファ(例えば、LIB204)は、予測キャッシュ(例えば、LOB208)からのメタデータを使用して、(例えば、予測ロジック230によって)予測を生成することを当てにせず、予測を生成する前に、予測キャッシュについてのメタデータでメモリ・デバイス(例えば、BTB1 206)を読み出すように構成される。例えば、(例えば、LIBロジック224を使用する)メタデータ予測器200は、図5のインデックス・パイプライン552のブロック504、506、508、510、512を実行するように構成され、インデックス・パイプライン552は、図5の予測パイプライン554のブロック526において予測ロジック230を介して予測結果を生成することを当てにせず、予測結果を生成する前に、BTB1 206からのメタデータをLOB208に読み出す。予測パイプライン554は、予測キャッシュ(例えば、LOB208)から命令のメタデータのラインを出力するように構成される。例えば、(例えば、LOBロジック228を使用する)メタデータ予測器200は、予測パイプライン554におけるさらなる処理のために、LOB208からメタデータのラインを読み出すように構成される。
【0046】
予測パイプライン554は、メモリ・デバイス(例えば、BTB1)にアクセスし直す必要なく、予測キャッシュからの命令のメタデータのラインを絶えず再使用するように構成される。例えば、プロセッサ101のメタデータ予測器200は、動的に推測される行われる分岐がイントララインである(すなわち、LOB208から以前に読み取られたメタデータの同じライン上にある)とき、LOB208にアクセスし直す(LOB208を読み出す)必要なく、予測パイプライン554のブロック526、528、530を含むループ550を実行するように構成される。
【0047】
予測パイプライン554は、前の予測が、メタデータの(同じ)ラインに対して予測されたことに応答して、新しい予測を生成するために、予測キャッシュから出力された命令のメタデータのラインを絶えず再使用するように構成される。例えば、プロセッサ101のメタデータ予測器200は、動的に推測される行われる分岐についての前の予測がイントララインであること(すなわち、LOB208から以前に読み取られたメタデータの同じライン上にあること)に応答して、ブロック526において予測ロジック230を使用して新しい予測を生成するために、LOB208から出力された命令のメタデータのラインを絶えず再使用するために、予測パイプライン554のブロック526、528、530を含むループ550を実行するように構成される。
【0048】
予測は、順不同の命令実行パイプライン250に提供され、順不同の命令実行パイプライン250は、インデックス・パイプライン552および予測パイプライン554と並列に動作する。
【0049】
本明細書で論じられるように、LIB204にインデックスが付けられることが可能である。追加として、メタデータ予測器200のライン・インデックス・アクセラレータ202は、LIB204をさらにポピュレートするために利用されることが可能であり、BTB1が予測パイプライン554より先にアクセスされることを可能にし、これにより、予測レイテンシを最小化させる。1つまたは複数の実施形態では、実装形態の例は、BTB1内のエントリの数が512であるはずなので、命令アドレスのビット48:56を使用して、BTB1にアクセスしてもよい。例は、128Bライン(すなわち、128Bに対応する57:63=7ビット)上で実装形態の例が動作するので、ビット56において停止可能である。
【0050】
1つまたは複数の実施形態によれば、ライン・インデックス・アクセラレータ202は、所与のエントリ・ポイント(すなわち、エントリ命令アドレス)のための、次の出口分岐ターゲット(すなわち、出口ターゲット命令アドレス)のレコードを含む。ライン・インデックス・アクセラレータ202におけるレコードは、ライン出口分岐と、連続してアクセスされるラインとの両方の指示を含む。例えば、ライン・インデックス・アクセラレータ202内部の配列は、ライン出口分岐およびシーケンシャル・ライン使用についての情報を含むことができる。ライン・インデックス・アクセラレータ202は、シーケンシャル・ライン・インデックスにアクセスする必要がある場合に、シーケンシャル・ライン・インデックスを生成するシーケンシャル・ライン・オフセット・エンジンを含むことができる。ライン・インデックス・アクセラレータ202は、この情報を使用して、(BTB1 206にインデックスを付けるために使用される)LIB204をポピュレートし、これにより、予測パイプライン554の前にBTB1 206を読み取ることができる。BTB1 206が読み取られると、残りの出口分岐のターゲット・アドレス(すなわち、分岐のための出口点におけるターゲット命令アドレスの残り)が、初期ターゲット比較メカニズムを介して決定されてもよい。このターゲット比較メカニズムは、ペイロード・マッチング・メカニズムと呼ばれてもよい。
【0051】
メタデータ予測器200のライン・インデックス・アクセラレータ202の詳細を例示するために、図11は、1つまたは複数の実施形態による、ライン・インデックス・アクセラレータ202に書き込むためのアクセラレータ・フロー1100のフローチャートである。ライン・インデックス・アクセラレータ202は、アクセラレータ・フロー1100、および、図12で後述されるアクセラレータ・フロー1200を実施するためのアクセラレータ・ロジック222を含むこと、または利用すること、あるいはその両方が可能である。
【0052】
アクセラレータ・フロー1100のブロック1102において、ライン・インデックス・アクセラレータ202は、成功した予測を受け取るように構成される。成功した予測は、予測パイプライン554から、または命令実行パイプライン250から、あるいはその両方から、出力として受け取られることが可能である。成功した予測は、行われても行われなくてもよい分岐を有する命令アドレスについてのものであることが可能である。ブロック1104において、ライン・インデックス・アクセラレータ202は、分岐が行われたか行われなかったかをチェックするように構成される。(「No」)分岐が行われなかった場合、ライン・インデックス・アクセラレータ202は、ブロック1106において、オフセットをインクリメントするように構成され、フローは、ブロック1102に戻る。ライン・インデックス・アクセラレータ202には何も書き込まれない。オフセットをインクリメントすることは、ライン・インデックス・アクセラレータが、行われた分岐を見つけなかったので、ライン・インデックス・アクセラレータに格納する用意できた次のメタデータのラインを処理することを指す。「Yes」分岐が行われた場合、ライン・インデックス・アクセラレータ202は、ブロック1108において、行われた分岐がイントララインであったかどうかチェックするように構成される。本明細書で言及されたように、イントララインは、ターゲット・アドレスが、サーチされる命令アドレスと同じメタデータのライン上にあることを指す(すなわち、エントリ命令アドレスとターゲット・アドレスとが、メタデータの同じライン上にある)。「Yes」行われた分岐のターゲット・アドレスがイントララインである場合、ライン・インデックス・アクセラレータ202は、ブロック1102に戻るように構成され、ライン・インデックス・アクセラレータ202には何も書き込まれない。一方で、(「No」)行われた分岐のターゲット・アドレスがイントララインではない場合、ライン・インデックス・アクセラレータ202は、ブロック1110において、行われた分岐のターゲット・アドレスが正確であるかどうかチェックするように構成される。「Yes」ターゲット・アドレスが正確な場合、フローは、ブロック1102に進み、ライン・インデックス・アクセラレータ202には何も書き込まれない。言い換えれば、ターゲット・アドレスに必要な次のラインは、既にインデックス・パイプライン552および予測パイプライン554内にある。(「No」)行われた分岐のターゲット・アドレスが正確でない場合、ライン・インデックス・アクセラレータ202は、ブロック1112において、ライン・インデックス・アクセラレータ202をリスタートさせ、ブロック1114において、ライン・インデックス・アクセラレータ202をアップデートするように構成される。さらに、リスタート・イベントは、アクセラレータ、インデックス、および予測パイプラインを含む全てのパイプラインをリスタートさせる。ライン・インデックス・アクセラレータ202をアップデートすることは、行われる分岐のために正しいターゲット・アドレスが利用可能になるように、行われる分岐の正しいターゲット・アドレスを追加することを含むことができる。また、ライン・インデックス・アクセラレータ202をアップデートすることは、ヒットを判定するために使用される、分岐オフセットおよび任意のタグ情報をアップデートすることを含むことができる。
【0053】
図12は、1つまたは複数の実施形態による、ライン・インデックス・アクセラレータ202をLIB204に読み出すためのアクセラレータ・フロー1200のフローチャートである。ライン・インデックス・アクセラレータ202は、アクセラレータ・フロー1200を実施するための、アクセラレータ・ロジック222を含むこと、または利用すること、あるいはその両方が可能である。アクセラレータ・フロー1200のブロック1202において、ライン・インデックス・アクセラレータ202は、リセット・イベントを受け取るように構成され、リセット・イベントは、リセット・アドレスとしての命令アドレスを有する。リセット・イベントの例は、誤分岐であることが可能である。ブロック1204において、ライン・インデックス・アクセラレータ202は、リセット・アドレスを使用して、ライン・インデックス・アクセラレータ202にインデックスを付ける(例えば、ライン・インデックス・アクセラレータ202に問い合わせる)ように構成される。ブロック1206において、ライン・インデックス・アクセラレータ202は、リセット・アドレスがライン・インデックス・アクセラレータ202内のヒットであるかどうかチェックするように構成される。(「No」)命令アドレス(すなわち、リセット・アドレス)からのヒットがない場合、ライン・インデックス・アクセラレータ202は、ブロック1208において、ライン・インデックス・アクセラレータ202をシャットダウンし、次のリセット・アドレスから待つように構成される。「Yes」命令アドレス(すなわち、リセット・アドレス)からのヒットがある場合、ライン・インデックス・アクセラレータ202は、ブロック1210において、ライン・インデックス・アクセラレータ202から読み出されたラインが、シーケンシャル・ラインを必要とするかどうかチェックするように構成される。(「No」)ライン・インデックス・アクセラレータ202から読み出されたラインが、シーケンシャル・ラインを必要としない場合、ライン・インデックス・アクセラレータ202は、ブロック1214において、読み出されたライン(すなわち、ターゲット・ライン)を多重化するように構成され、その結果、ブロック1216において、ラインがLIB204に書き込まれる。さらに、読み出されたライン(すなわち、ターゲット・ライン)が、次の出口分岐のために、ライン・インデックス・アクセラレータ202に問い合わせる/インデックスを付けるために使用されるように、フローは、ブロック1204に戻る。
【0054】
「Yes」ライン・インデックス・アクセラレータ202から読み出されたラインが、シーケンシャル・ラインを必要とする場合、ライン・インデックス・アクセラレータ202は、ブロック1212において、シーケンシャル・ラインを出力するためにライン・オフセットを実施するように構成される。ブロック1214において、ライン・インデックス・アクセラレータ202は、LIB204へのシーケンシャル・ラインを多重化し、ブロック1216において、シーケンシャル・ラインをLIB204に書き込むように構成される。例えば、ライン・インデックス・アクセラレータ202から読み出されたラインがラインXの場合、ライン・インデックス・アクセラレータ202は、ライン・オフセットを実施してラインX+1を取得するように構成され、ラインX+1は、BTB1 206内にラインX+1がないかサーチするのに必要な命令アドレス・ビットのサブセットに対応し、したがって、ライン・インデックス・アクセラレータ202は、LIB204内のラインXの直後にラインX+1を格納する。ライン・オフセットを実施することは、BTB1 206内のシーケンシャル・ラインについてのメタデータの対応するラインに問い合わせるためのインデックスとして使用されるシーケンシャル・ライン(例えば、ラインX+1)を作り出すために、所定の数のビットを前のライン(例えば、ラインX)に追加することを指す。BTB1 206内のメタデータの各ラインが、既知のフォーマットである(例えば、メタデータのラインが128Bである)ので、オフセットは、次のライン(すなわち、シーケンシャル・ライン)に移動するための固定量である。シーケンシャル・ライン(例えば、シーケンシャル・ラインX+1)は、ブロック1210にフィードバックされ、ライン・インデックス・アクセラレータ202は、別のシーケンシャル・ラインが必要であるかどうかチェックするように構成され、必要な場合、例えばシーケンシャル・ラインX+2など、次のシーケンシャル・ラインを生成するために、ブロック1212において、ライン・オフセットが追加される。このループは、1つまたは複数の実施形態では、3回続けることが可能であり、シーケンシャル・ラインX+1、X+2、X+3になり、これらのそれぞれが、LIB204に書き込まれる。1つまたは複数の実施形態では、シーケンシャル・ラインX+1、X+2、X+3は、LIB204に連続的に書き込まれることが可能である。1つまたは複数の実施形態では、シーケンシャル・ラインX+1、X+2、X+3は全て、例えばLIB204と平行に、同時に書き込まれることが可能である。
【0055】
図13は、1つまたは複数の実施形態による、ライン・インデックス・アクセラレータ202のレイテンシ・アクセラレータ・エントリの例のブロック図である。アクセラレータ・エントリの例には、LIB204に何が書き込まれる(格納される)か、およびライン・インデックス・アクセラレータ202のサーチをどのように続けるかを決定するために使用される第1の部分1350がある。ライン・インデックス・アクセラレータ202がもはやシーケンシャル・ラインの生成を必要としなくなると、次のサーチのエントリ・ポイントになる出口分岐のターゲットは、新しいラインを読み取るためにライン・インデックス・アクセラレータ202にフィードバックされる。アクセラレータ・エントリの例の第1の部分1350は、出口分岐ターゲット・フィールド1302を、例えば命令アドレス・ビット48:62として、オフセット・フィールド1304をビット0:1として、およびSKOOTフィールド1306をビット0:1として含む。
【0056】
アクセラレータ・エントリの例の第2の部分1352は、ライン・インデックス・アクセラレータ202内のヒット検出用に使用される。第2の部分1352は、例えば命令アドレス・ビット48:53としてのエントリ・ポイント・フィールド1308、命令アドレス0:1としてのグローバル経路ベクトル(GPV)フィールド1310、およびトランザクション・レジスタ(TID)フィールド1312を含む。
【0057】
図14は、1つまたは複数の実施形態による、ペイロード・マッチングを実施するためのアクセラレータ・フロー1400のフローチャートである。ライン・インデックス・アクセラレータ202は、アクセラレータ・フロー1400を実施するための、アクセラレータ・ロジック222を含むこと、または利用すること、あるいはその両方が可能である。ペイロード・マッチングは、ヒット検出に必要な命令アドレス・ビットを見つけるために、BTB1データをアクセラレータ・データと組み合わせる。アクセラレータ・フロー1400のブロック1402、1404において、ライン・インデックス・アクセラレータ202は、メタデータのラインのための命令アドレス・ビットである中身を使用してLIB204にポピュレートし、出力を「OR」演算する("OR")ように構成される。1つまたは複数の実施形態では、ライン・インデックス・アクセラレータ202は、BTB1からの出力を多重化(mux)することができる。LIB204は、独自に動作する。BTB1にインデックスを付けるためにまだ使用されたことがない有効なエントリをLIB204が含む場合、LIB204は、インデックスを付けるために、これらをBTB1に送ることになり、BTB1が読み取られると、その中身は、ペイロード・マッチングのために、次のLIBエントリと併用して使用されることになる。例えば、ペイロード・マッチングは、2つのLIBエントリのIA(48:62)を使用する(2つのLIBエントリは、この例では、Y(32:47)を見つけるためのX(48:62)およびY(48:62)であり、Y(32:47)は、次のサーチに必要になる)。ライン・インデックス・アクセラレータ202は、次のサーチ中にBTB1に問い合わせるためにY(32:47)を必要としないが、例えば、本明細書で論じられたブロック514において、ライン・インデックス・アクセラレータ202には、ヒット検出のためにY(32:47)が必要になる。タグは、現在のサーチ・ラインのビットY(32:47)である。BTB1は、読み出された128Bラインのビット32:47(例えば、これは、BTB1(32:47)と呼ばれることもある)を含む。ヒットがあるか判定するために、Y(32:47)およびBTB1(32:47)は、マッチしなければならず、マッチしない場合、読み取られたものは、異なるラインのためのものである。ペイロード・マッチングは、次のサーチのためのY(32:47)を見つけるために、現在のサーチXのターゲット・アドレスの全てを見る。BTB1 206は、親ベース・デザインで動作可能であり、BTB1 206は、4つの四半部BTB1 206_0、BTB1 206_1、BTB1 206_2、BTB1 206_3(全体的にBTB1 206と呼ばれる)に分けられるか、これらにおいて動作される。インデックスを付けられた後(例えば、サーチされた後)、それぞれのBTB1 206_0、BTB1 206_1、BTB1 206_2、BTB1 206_3は、その出力を行う。1つまたは複数の実施形態では、それぞれのBTB1 206_0、BTB1 206_1、BTB1 206_2、BTB1 206_3は、6つまでの分岐のためのターゲット命令アドレス・ビット(32:62)を出力することができる。
【0058】
図15は、1つまたは複数の実施形態による、アクセラレータの例のブロック図である。図15は、ライン・インデックス・アクセラレータ202内の(分岐を伴う)ラインX、ラインY、およびラインZである3つのコードのラインを例示している。これらの分岐についての情報(すなわち、メタデータ)は、BTB1 202内に収集されたものである。インデックス・パイプライン552において、ライン・インデックス・アクセラレータ202は、ラインX用のエントリ命令アドレス(X)を用いてインデックスを付けられる(例えば、問い合わされる)ように構成され、ライン・インデックス・アクセラレータ202は、ラインY用のエントリ命令アドレス(Y)へのポインタを見つける。したがって、ライン・インデックス・アクセラレータ202は、ラインY用のエントリ命令アドレス(Y)をLIB204に書き込むように構成される。また、ラインX用のエントリ命令アドレス(X)には、ラインX上の出口分岐がある。
【0059】
ライン・インデックス・アクセラレータ202は、ラインY用のエントリ命令アドレス(Y)を用いてインデックスを付けられるように構成され、ライン・インデックス・アクセラレータ202は、ラインZ用のエントリ命令アドレス(Z)へのポインタを見つける。したがって、ライン・インデックス・アクセラレータ202は、ラインZ用のエントリ命令アドレス(Z)をLIB204に書き込むように構成される。ラインY用のエントリ命令アドレス(Y)には、ラインY上の出口分岐がある。さらに、ライン・インデックス・アクセラレータ202は、ラインZ用のエントリ命令アドレス(Z)を用いてインデックスを付けられるように構成され、プロセスは続く。
【0060】
図16は、1つまたは複数の実施形態による、アクセラレータの例のブロック図である。図16は、ライン・インデックス・アクセラレータ202内の4つのコードのラインを例示しており、シーケンシャル・ラインの使用が描写されている。これらの分岐についての情報(例えば、メタデータ)は、BTB1 202内に収集されたものである。インデックス・パイプライン552において、ライン・インデックス・アクセラレータ202は、ラインX用のエントリ命令アドレス(X)を用いてインデックスを付けられるように構成され、ライン・インデックス・アクセラレータ202は、ラインY用のエントリ命令アドレス(Y)へのポインタを見つける。ラインY上のエントリ命令アドレス(Y)へのポインタを見つけるために、ライン・インデックス・アクセラレータ202は、(例えば、図12のブロック1210で論じられたように)シーケンシャル・ラインを必要とすることをラインX用のエントリ命令アドレス(X)が指示することを決定するように構成される。ライン・インデックス・アクセラレータ202は、シーケンシャル・ラインX+1を生成し、(例えば、図12のブロック1212、1214、1216で論じられたように)シーケンシャル・ラインX+1をLIB204に書き込むように構成される。ブロック1210、1212、1214、1216のループは3回続けてもよく、シーケンシャル・ラインX+1、X+2、X+3になる。しかし、シーケンシャル・ラインX+1だけが、図16に描写されている。シーケンシャル・ラインX+1は、ラインX(すなわち、次の連続したライン)の後にあり、ラインYの前にあることに留意されたい。同じことが、ラインX+1およびX+2についても当てはまる。別のケースでは、ライン・インデックス・アクセラレータ202は、シーケンシャル・ラインX+1、X+2、X+3のそれぞれをLIB204に書き込むはずである。図16の例に戻ると、その後、ライン・インデックス・アクセラレータ202は、エントリ命令アドレス(Y)をLIB204に書き込む。
【0061】
ライン・インデックス・アクセラレータ202は、(例えば、図12のブロック1210からブロック1204に戻るフローとして描写された)ラインY用のエントリ命令アドレス(Y)を用いてインデックスを付けられるように構成され、ライン・インデックス・アクセラレータ202は、ラインZ用のエントリ命令アドレス(Z)へのポインタを見つける。したがって、ライン・インデックス・アクセラレータ202は、エントリ命令アドレス(Z)をLIB204に書き込むように構成される。さらに、ライン・インデックス・アクセラレータ202は、ラインZ用のエントリ命令アドレス(Z)を用いてインデックスを付けられるように構成され、プロセスは続く。
【0062】
図17は、1つまたは複数の実施形態による、ライン・オフセットのないライン・インデックス・アクセラレータを含むパイプラインの実例のブロック図である。この例では、ライン・インデックス・アクセラレータ202は、ポピュレートされている。図17は、図7および図9で上述されたパイプライン図に類似しているが、ここでは、ライン・インデックス・アクセラレータ202は、混ぜ合わされた状態で追加されている(例えば、左肩上がりの斜線として描写された黄色のブロック)。リセットされると、インデックス・パイプラインおよびアクセラレータ・パイプライン両方が、リセット・アドレスを使用し始める。サイクル1において、アクセラレータがまだパイプラインの1つのパスを完了していないので、インデックス・パイプラインは、(例えば、図5のブロック512として描写された)ラインX+1を、LIBに書き込む。サイクル4において、ライン・インデックス・アクセラレータ202は、これが、ラインX+1ではなく、代わりにラインYを必要としていることを知り、したがって、ラインX+1用のインデックス・パイプラインはキャンセルされ、ラインX+1用のLIBエントリがラインYと取り替えられ、ラインY用のB0が始められる。X+1サーチは、ライン・インデックス・アクセラレータ202からの新しい情報でキャンセルされたので、これは、予測の配信においてバブルを作り出す(サイクル6にB4がない)。
【0063】
図18は、1つまたは複数の実施形態による、ライン・オフセットのあるライン・インデックス・アクセラレータを含むパイプラインの実例のブロック図である。この例では、ライン・インデックス・アクセラレータ202は、ポピュレートされている。図18は、図17に類似しているが、ここでは、図18は、シーケンシャル・ラインを混ぜ合わされた状態で追加している。1つの例のケースでは、ライン・インデックス・アクセラレータ202が、ラインX+1を望んでいることを知ったとしても、ライン・インデックス・アクセラレータ202は、既にスタートしたX+1インデックス・パイプライン(サイクル2でスタートしたもの)を盲目的にキャンセルし、別のものを2サイクル後でトリガして、図17にあった同じ予測配信バブルを生じる。
【0064】
図19は、1つまたは複数の実施形態による、ライン・オフセットのあるライン・インデックス・アクセラレータを含むパイプラインの実例のブロック図である。この例では、ライン・インデックス・アクセラレータ202は、ポピュレートされている。図19は、固定された、または、図18の例に追加された、あるいはその両方の効率を表している。したがって、X+1ラインが自動で起こるはずなので、アクセラレータ・パイプラインを実施するライン・インデックス・アクセラレータ202は、リセット・サーチがLIB用のX+1ラインを生成する必要がないことを認識するように構成される。したがって、ライン・インデックス・アクセラレータ202は、LIBが書き込むX+1を生成するのではなく、ラインYをLIBの最後尾に書き込む。別のケースでは、2つのシーケンシャル・ラインが必要であったことを初期のアクセラレータ・サーチが知っており、ライン・インデックス・アクセラレータ202が、X+2およびYをLIBに書き込んだはずであることが想定されている。この潜在的な問題を解決することによって、X+1のインデックス・パイプライン・サーチはキャンセルされず、予測バブルは発生しない。
【0065】
図20は、1つまたは複数の実施形態による、ライン・オフセットおよびイントラライン分岐のあるライン・インデックス・アクセラレータを含むパイプラインの実例のブロック図である。この例では、ライン・インデックス・アクセラレータ202は、ポピュレートされている。図18と同様に、図20は、ここでは、ラインXが2回アクセスされるように、イントラライン分岐を混ぜ合わされた状態で追加している。ラインXにはイントラライン分岐があるので、図18の潜在的問題によって作り出された予測バブルは隠されている。存在するX+1の潜在的問題の解決に関わらず、予測バブルは、図17から依然として存在していてもよい。しかし、イントラライン分岐の存在が、このバブルを隠すはずである。
【0066】
図21は、本発明の1つまたは複数の実施形態による、BTB1 206をLOB208に読み出すためにインデックスが必要になる前に、ライン・インデックス・アクセラレータ202を使用して、メタデータ予測器200のLIB204用のインデックスを決定するための、コンピュータ実行方法2100のフローチャートである。コンピュータ実行方法2100は、図1のコンピュータ・システム100を使用して実施されてもよい。図1のプロセッサ101は、本明細書で論じられる任意の他のプロセッサと共に、本明細書で論じられたメタデータ予測器200の機能を含むこと、または実行すること、あるいはその両方が可能である。本明細書で言及されたように、プロセッサ101の機能は、図31に描写されたハードウェアおよびソフトウェア層60のハードウェア構成要素において使用されること、または実行されること、あるいはその両方が可能である。
【0067】
コンピュータ実行方法2100のブロック2102において、メタデータ予測器200は、リセット・アドレスを使用してインデックス・アクセラレータ(例えば、ライン・インデックス・アクセラレータ202)に問い合わせるように構成される。ブロック2104において、メタデータ予測器200は、問い合わせに応答して、インデックス・ライン(例えば、ラインX)がインデックス・アクセラレータ(例えば、ライン・インデックス・アクセラレータ202)内に存在すると決定するように構成される。ブロック2106において、メタデータ予測器200は、インデックス・ラインがインデックス・アクセラレータ内にシーケンシャル・ラインを有するかチェックしたことに応答して、インデックス・アクセラレータ(例えば、ライン・インデックス・アクセラレータ202)内のインデックス・ラインへのシーケンシャル・ラインを決定するように構成される。例えば、図12のブロック1210に描写されたように、ライン・インデックス・アクセラレータ202は、ライン・インデックス・アクセラレータ202がインデックス・ライン(例えば、ラインX)への、例えばシーケンシャル・ラインX+1といった、シーケンシャル・ラインを含むかチェックするように構成される。ブロック2108において、メタデータ予測器200は、インデックス・バッファにシーケンシャル・ラインを入れる(書き込む)ように構成される。
【0068】
インデックス・アクセラレータは、インデックス・ライン(例えば、ラインX)に基づいて、1つまたは複数の他のシーケンシャル・ライン(例えば、シーケンシャル・ラインX+2、X+3)を決定するように構成される。インデックス・アクセラレータ(例えば、ライン・インデックス・アクセラレータ202)は、予測パイプライン(例えば、予測パイプライン554または命令実行パイプライン250あるいはその両方)によって必要とされるシーケンシャル・ラインおよび1つまたは複数の他のシーケンシャル・ラインの前に、シーケンシャル・ラインおよび1つまたは複数の他のシーケンシャル・ラインをインデックス・バッファに入れるように構成される。インデックス・ラインは、所与のエントリ命令アドレスに対する分岐の出口ターゲット命令アドレスを含む。1つまたは複数の実施形態では、インデックス・ラインは、出口分岐命令アドレスおよび出口分岐のターゲット命令アドレスを考慮するように形成されたハッシュを含んでもよい。
【0069】
1つまたは複数の実施形態によるライン・インデックス・アクセラレータを有するプロセッサを使用することによる、多くの技術的利益および技術的ソリューションがある。ライン・インデックス・アクセラレータは、予測パイプラインの前にインデックス・パイプラインを維持し、これは、予測を生成するためにLOBからの出力が必要になる前に、LIBが、BTB1をLOBに読み出すためのインデックスを有し使用することを意味する。例えば、ライン・インデックス・アクセラレータは、1つまたは複数の実施形態で準備されると、予測レイテンシを4サイクルから2サイクルに低減させる。また、インデックス・アクセラレータによってインデックスがLIBに予め提供された結果として、インデックス・パイプラインが先に読み取ることができるので、ライン・インデックス・アクセラレータは、インデックス・パイプラインにおける遅延が予測レイテンシに及ぼす影響を小さくする。さらなる技術的利益およびソリューションとして、ライン・インデックス・アクセラレータは、行われるイントラライン分岐および全ての行われない分岐を無視する。どのBTB1のインデックスがサーチされる必要があるかを決定しようとするとき、行われない分岐は、どれも関係がない。したがって、これにより、予測パイプラインは、インデックス・パイプラインに影響を及ぼすことなくメタデータ予測キャッシュ(例えば、LOB)を活用することができ、これにより、レイテンシ・アクセラレータの容量を実質的に大きくする。ライン・インデックス・アクセラレータを使用する1つまたは複数の実施形態は、セット・アソシエーティビティを可能にし、したがって、複数の有益な出口分岐が、同じインデックスにおいて保存可能になる。追加の技術的利益およびソリューションとして、1つまたは複数の実施形態は、ペイロード・マッチング中に、残りの命令アドレス・ビットを見つけるためのBTB1の読み取りの実施を活用することによって、コードを通じて分岐予測をトラバースすることが必要な(例えば、ライン・インデックス・アクセラレータに格納されることになる)アドレス・ビットの数を限定する。これは、スモール・ライン・インデックス・アクセラレータおよびLIB配列の使用を可能にする。
【0070】
1つまたは複数の実施形態によれば、プロセッサ101のメタデータ予測器200は、本明細書でさらに論じられるような、可変長メタデータ予測パイプラインを含んでもよい。例えば、可変長メタデータ予測パイプラインは、予測パイプライン554に含まれてもよく、可変性は、予測パイプライン554において予測を出力するための時間を戦略的に遅延させることに基づく。1つまたは複数の実施形態では、予測パイプライン554の予測ロジック230は、当業者によって理解されるような他のデジタル論理回路(図示せず)と共に、図22に描写されているような、主予測器2202および補助予測器2204(例えば、補助予測器1、2、3)を含むことができる。1つまたは複数の実施形態は、必要に応じて予測パイプライン554の長さ(レイテンシ)を動的に増大させることによって、より遅くより高い精度の補助予測器、および外部遅延を、予測パイプライン554に組み込むように構成される。主予測器2202は、補助予測器2204の精度を有していなくてもよいが、より速い予測を行う典型的なメタデータ予測器であることが可能である。1つまたは複数の実施形態では、主予測器2202は、依存関係予測器、ロード/ストア依存関係予測器、分岐履歴テーブル予測器、行われる分岐もしくは行われない分岐の予測器、他のメタデータ予測器、または同じものの組合せ、あるいはその組合せを含むことができる。補助予測器2204は、仮想化された重みを有するパーセプトロン分岐予測器、有益性追跡を備えた補助分岐予測器、他のメタデータ予測器、または同じものの組合せ、あるいはその組合せを含むことができる。
【0071】
ほとんどの分岐は、BTB情報から直接的に予測可能であり、可能な限り低いレイテンシ分岐予測を生ずる。一部の分岐は、より複雑であり、より高い精度の補助予測器からの助けを必要とする。しばしば、これらの補助予測器は、予測を生成するのにより多くの時間をかける、または、(シリコン面積の制限により)予測パイプラインに物理的に近くない、あるいはその両方である。これらのあまり頻繁に使用されない補助予測器を受け入れるために全ての予測を遅延させることは、浪費的なものになるはずである。したがって、1つまたは複数の実施形態は、主予測器2202によって実施される、より速く簡単な(主)予測を遅延させることなく、必要に応じて、補助予測器2204によるこれらのより遅い(補助)予測が予測パイプライン554に組み込まれることを可能にする、動的な可変長の予測パイプラインを実行する。
【0072】
メタデータ予測器200の可変長メタデータ予測パイプラインのさらなる詳細を例示するために、図23は、1つまたは複数の実施形態による、(主予測器2202が使用されるときでも)いつ補助予測器2204を使用するべきか、またはいつ予測パイプラインを延長するべきか、あるいはその両方を決定するための、可変長メタデータ予測パイプライン・フロー2300のフローチャートである。メタデータ予測器200において、本明細書で論じられる可変長メタデータ予測パイプライン・フロー2300を実施するために、主予測器2202、補助予測器2204、およびロジックを含む予測ロジック230が利用可能である。
【0073】
可変長メタデータ予測パイプライン・フロー2300のブロック2302において、メタデータ予測器200は、LOB208からメタデータのラインを読み出すように構成される。例えば、LIB204は、インデックス/インデックス・ラインを用いてBTB1 206に問い合わせるように構成され、BTB1 206の出力は、LOB208をポピュレートする。LOB208は、LOB208が利用可能になると同時に、メタデータを独自に処理する。ブロック2304において、メタデータ予測器200は、出力されたメタデータのラインが有効であるかどうかチェックするように構成される。例えば、何かがLOB208から実際に読み出されたかチェックする。(「No」)メタデータのラインが実際に読み出されなかった場合、フローは、2302に戻る。「Yes」メタデータのラインが有効な場合、メタデータ予測器200は、ブロック2306において、予測器ロジック230の主予測器2202を使用して予測を生成することと、ブロック2308において、予測器ロジック230の補助予測器2204(例えば、補助予測器1、2、3)を使用して補助予測を生成することとを同時に行うように構成される。ブロック2310において、メタデータ予測器200は、主予測器2202からの主予測を、補助予測器2204(例えば、補助予測器1、2、3)からの補助予測と多重化するように構成される。補助予測は、補助予測と主予測とが異なるときに選択可能である。
【0074】
ブロック2312において、メタデータ予測器200は、主予測器2202からの主予測が補助予測器2204からの補助予測と異なるかどうかチェックするように構成される。(「No」)予測が同じ場合、フローは、ブロック2316に進む。「Yes」主予測と補助予測とが異なる場合(例えば、指示で行われた、対、指示で行われなかったの場合)、メタデータ予測器200は、ブロック2320において、補助予測が「AND」ロジックに渡されるべきであることを指示するために、ビット(例えば、0または1)の選択をマルチプレクサに提供するように構成される。そうでない場合、例えば、ブロック2312からの選択器信号がない場合、マルチプレクサは主予測を渡す。さらに、「Yes」主予測と補助予測とが異なる場合、メタデータ予測器200は、ブロック2314において、補助予測が完了したか、または用意できているか、あるいはその両方であるかチェックするように構成される。補助予測が完了したか/用意できているかチェックすることは、補助予測からの情報全てが利用可能であると確認することを含む。補助予測は、補助予測が主予測とは異なると決定するのに十分な情報を含んでいたが、補助予測は、適切な指示またはターゲット情報あるいはその両方が予測パイプライン554に送られ、処理されるのをまだ待っていてもよい。実装形態の例では、メタデータ予測器200は、主予測が正しいことと、マルチプレクサ2310に既に選択させているので補助予測器2204が必要ではなくなることとを想定するように構成されてもよい。補助予測が異なることをメタデータ予測器200が知ると、メタデータ予測器200は、正しい多重化の選択を生成するための一部のその後のサイクルまで待ち、(補助予測器2204からの新しいターゲット/指示情報を使用して)予測をブロードキャストできるように構成される。「Yes」補助予測が用意できている場合、「AND」ロジックに知らされてもよい。(「No」)補助予測が完了していない/用意できていない場合、メタデータ予測器200は、ブロック2316において、予測パイプライン554の長さまたはレイテンシが延長されるべきかどうかチェックするように構成される。場合によっては、予測パイプライン554の長さまたはレイテンシは、補助予測が用意できるまで延長されてもよいが、ブロック2312またはブロック2302あるいはその両方に戻る。追加として、命令実行パイプライン250が、ブロック2318から新しい予測を受け取る用意ができていないという信号または指示あるいはその両方をメタデータ予測器200が受け取った場合、メタデータ予測器200は、命令実行パイプライン250までの、新しい予測(すなわち、補助予測、またはことによると主予測、あるいはその両方)の下流へのブロードキャストを遅延させることによって、予測パイプライン554の時間(すなわち、レイテンシ)を延長するように構成される。1つまたは複数の実施形態では、メタデータ予測器200は、パイプラインを延長するために、フローをルートし直してブロック2312に戻すことができ、これにより、時間(すなわち、レイテンシ)を延長し、その後、新しい予測が、命令実行パイプライン250まで下流にブロードキャストされる。1つまたは複数の実施形態では、メタデータ予測器200は、パイプラインを延長するために、フローをルートし直してブロック2302に戻すことができ(ルートし直すことが、ここでは示されている)、これにより、時間(すなわち、レイテンシ)を延長し、その後、新しい予測が、命令実行パイプライン250まで下流にブロードキャストされる。1つまたは複数の実施形態では、メタデータ予測器200は、パイプラインを延長するために、(例えば、1つまたは複数のラッチまたは他のデジタル・ロジック構成要素あるいはその両方を使用して)所定の数のクロック・サイクルにわたって新しい予測を保持するように「AND」ロジックに命令することができ、これにより、時間(すなわち、レイテンシ)を延長し、その後、新しい予測が、命令実行パイプライン250まで下流にブロードキャストされる。1つまたは複数の実施形態では、メタデータ予測器200は、パイプラインを延長するために、所定の数のクロック・サイクルにわたってカウントするようにカウンタ(図示せず)に命令することができ、これにより、時間(すなわち、レイテンシ)を延長し、その後、新しい予測が、命令実行パイプライン250まで下流にブロードキャストされる。メタデータ予測器200は、ブロック2316において、延長する必要がないかチェックし続けるように構成される。
【0075】
(「No」)命令実行パイプライン250が、ブロック2318から新しい予測を受け取る用意ができていないという信号もしくは指示またはその両方(例えば、ビット)の受け取りをメタデータ予測器200が停止すると、および/あるいは、補助予測が用意できると、メタデータ予測器200は、ブロック2320、2322において、命令実行パイプライン250まで新しい予測(例えば、補助予測)を、ロジックを介して下流に渡すことを「AND」ロジックに行わせるように構成される。
【0076】
図24は、1つまたは複数の実施形態による、下流の混雑を描写したパイプラインの実例のブロック図である。この例は、命令実行パイプライン250の一部であるか、または命令実行パイプライン250に連結されているか、あるいはその両方でもよい下流のロジックが、予測ロジック230からの予測(例えば、主予測または補助予測あるいはその両方)の用意ができていないことを例示している。したがって、メタデータ予測器200の予測ロジック230は、ブロック2316に描写されたように、予測パイプライン554を延長するように構成され、(新しい)予測をスタートさせたメタデータのラインが、LOB208内にまだ存在していることに留意されたい。用意できていることを命令実行パイプライン250が指示すると、メタデータ予測器200は、(新しい)予測をスタートさせたメタデータの同じラインの出力を繰り返すためにLOBポインタを移動させることができ、その結果、新しい予測が命令実行パイプライン250にすぐに渡され(すなわち、遅延または延長あるいはその両方がない状態で渡され)、これにより、可変長(例えば、時間)メタデータ予測パイプラインを用意する。
【0077】
図25は、1つまたは複数の実施形態による、補助予測器2204が主予測器2202とは異なる予測を有することを描写した、パイプラインの実例のブロック図である。予測LYにおける第1の試行において、異なる補助予測があるとき、メタデータ予測器200は、主予測を、使用するべきものであるはずと想定して、選ぶ。しかし、サイクル6において、メタデータ予測器200が予測をブロードキャストしようとしているとき、メタデータ予測器200は、補助予測器が異なる情報を有していることを知る。その結果、メタデータ予測器200は、主予測のブロードキャストをキャンセルし、新しい補助予測を選択する(例えば、多重度を下げる)。1つの実装形態の例では、これは実際には、はるばるB2まで戻り(これは、「b2」がb4の下の丸括弧に現れる理由である)、メタデータ予測器200がここで、補助予測を認識しているので、予測を生成し直す。2サイクル後のB6において、新しい予測がレポート可能になり、フローは、次のLOBエントリに移動可能である。
【0078】
図26は、1つまたは複数の実施形態による、補助予測器2204が主予測器2202と同じ予測を有することを描写したパイプラインの実例のブロック図である。この例は、延長または遅延あるいはその両方がない状態で予測パイプライン554が動作でき、これにより、延長もしくは遅延またはその両方が発生したときの複雑な分岐、および/あるいは、延長もしくは遅延またはその両方が発生したときの単純な分岐に対処するために、予測パイプライン554の可変性をもたらすことを例示している。したがって、予測パイプライン554は、例えば、補助予測と主予測とが同じとき、2クロック・サイクル緩まない/遅延しない。
【0079】
図27は、本発明の1つまたは複数の実施形態による、可変長メタデータ予測パイプラインを使用するためのコンピュータ実行方法2700のフローチャートである。コンピュータ実行方法2700は、図1のコンピュータ・システム100を使用して実施されてもよい。図1のプロセッサ101は、本明細書で論じられる任意の他のプロセッサと共に、本明細書で論じられたメタデータ予測器200の機能を含むこと、または実行すること、あるいはその両方が可能である。プロセッサ101の機能は、図31に描写されたハードウェアおよびソフトウェア層60のハードウェア構成要素において使用されること、または実行されること、あるいはその両方が可能である。
【0080】
コンピュータ実行方法2700のブロック2702において、メタデータ予測器200は、(LOB208からの)メタデータのラインを使用して、主予測を(例えば、主予測器2202を介して)、および補助予測を(例えば、補助予測器2204を介して)生成するように構成される。ブロック2704において、メタデータ予測器200は、主予測と補助予測とが異なると決定するように構成される。ブロック2706において、メタデータ予測器200は、主予測と補助予測とが異なることに応答して、補助予測の使用を選択または決定するように構成される。ブロック2708において、メタデータ予測器200は、所定の時間(例えば、所定の数のクロック・サイクル)にわたって予測パイプライン554の長さを延長するように構成される。ブロック2710において、メタデータ予測器200は、所定の時間にわたって延長したことに応答して、補助予測を命令実行パイプライン250に提供するように構成される。補助予測は、主予測より長い処理時間(例えば、より多くのクロック・サイクル)を必要とする。
【0081】
1つまたは複数の実施形態による、可変長メタデータ予測パイプラインを有するプロセッサを使用することによってもたらされる多くの技術的利益および技術的ソリューションがある。本明細書で論じられるように、基本的な予測の短いレイテンシを犠牲にすることなく、より遅くより精密な予測が予測パイプラインに組み込まれることが可能である。下流の命令フェッチに影響を及ぼす前に、より遅い予測が適用される。技術的利益およびソリューションによって、補助予測器は、面積を節約するために、集積回路チップ上に予測パイプラインから物理的に離れて存在することが可能である。例えば、下流のロジックがより多くの予測情報を受け入れることができないときの事例を、可変長メタデータ予測パイプラインは考慮することができる。可変長メタデータ予測パイプラインは、メタデータ予測器キャッシュ(例えば、LOB)およびイントラライン分岐の再使用と併用して使用可能である。さらに、可変長メタデータ予測パイプラインは、親ベースのシステムに組み込み可能である。
【0082】
図28は、本発明の実施形態による、メタデータ予測器200用のシステム2800のブロック図である。システム2800は、最終的に集積回路2820に製作されるデザイン2830(メタデータ予測器200を含む)を生成するために使用される処理回路2810を含む。集積回路2820の製作に含まれるステップは、よく知られており、本明細書に簡潔に記載されている。ルーティング計画の最適化を容易にするために、本発明の実施形態によるメタデータ予測器200に部分的に基づいて物理レイアウト2840が最終決定されると、最終決定された物理レイアウト2840は、ファウンドリに送られる。最終決定された物理レイアウトに基づいて集積回路の層毎にマスクが生成される。次いで、ウエハは、マスク順のシーケンスで加工される。処理は、フォトリソグラフィおよびエッチングを含む。これは、図29を参照しながらさらに論じられる。
【0083】
図29は、本発明の例示的実施形態による、集積回路を製作する方法のプロセス・フローである。メタデータ予測器200に部分的に基づく物理的なデザイン・データが取得されると、集積回路120は、図29を参照しながら全体的に説明される既知のプロセスに従って製作可能である。一般に、最終的なデザインの複数のコピーを有するウエハは、各ダイが、集積回路2820の1つのコピーであるように、製作およびカットされる(すなわち、さいの目に切られる)。ブロック2910において、プロセスは、最終決定された物理レイアウトに基づいてリソグラフィ用のマスクを製作することを含む。ブロック2920において、ウエハを製作することは、マスクを使用して、フォトリソグラフィおよびエッチングを実施することを含む。ウエハがさいの目に切られると、ブロック2930において、欠陥のあるダイを全て取り除くために、各ダイの検査および分類が実施される。
【0084】
本開示は、クラウド・コンピューティングについての詳細な説明を含むが、本明細書で列挙される教示の実装形態は、クラウド・コンピューティング環境に限定されないことを理解されたい。むしろ、本発明の実施形態は、現在知られているか、後で開発される、他の任意のタイプのコンピューティング環境と併用して実施される能力がある。
【0085】
クラウド・コンピューティングは、最低限の管理努力またはサービスの提供者との対話で素早く提供および解放可能な、構成可能なコンピューティング・リソース(例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、およびサービス)の共用プールへの便利なオンデマンドのネットワーク・アクセスを可能にするためのサービス配信のモデルである。このクラウド・モデルは、少なくとも5つの特性、少なくとも3つのサービス・モデル、および少なくとも4つの展開モデルを含んでもよい。
【0086】
特性は以下の通りである。
オンデマンド・セルフサービス:クラウド利用者は、サービスの提供者との人間対話を必要とせず、必要に応じて自動的に、サーバ時間およびネットワーク・ストレージなどのコンピューティング能力を一方的に提供可能である。
ブロード・ネットワーク・アクセス:能力は、ネットワークを介して利用可能であり、異種混合のシンまたはシック・クライアント・プラットフォーム(例えば、モバイル・フォン、ラップトップ、およびPDA)による使用を促進する標準メカニズムを通じてアクセスされる。
リソース・プーリング:提供者のコンピューティング・リソースは、マルチ・テナント・モデルを使用して複数の利用者をサーブするためにプールされ、種々の物理および仮想リソースが、要求に応じて動的に割り当てられ、再割当てされる。利用者には一般に、提供されるリソースの正確な位置についての制御権も知識もなく、抽象化のより高いレベル(例えば、国、州、またはデータセンタ)の位置を指定し得るという点で、位置独立の意味がある。
迅速な弾力性:能力は、素早くスケール・アウトするために迅速かつ伸縮自在に、場合によっては自動的に提供され、素早くスケール・インするために迅速に解放可能である。利用者にとって、提供のために利用可能な能力は無制限のように見えることが多く、いつでも任意の量で購入可能である。
測定されるサービス:クラウド・システムは、サービスのタイプに適した何らかの抽象化レベル(例えば、ストレージ、処理、帯域幅、および有効なユーザ・アカウント)で計量能力を活用することによって、リソース使用量を自動的に制御し、最適化する。リソース使用率は、監視、制御、レポートされることが可能であり、利用されるサービスの提供者と利用者双方に透明性をもたらす。
【0087】
サービス・モデルは以下の通りである。
サービスとしてのソフトウェア(SaaS):利用者に提供される能力は、クラウド・インフラストラクチャ上で動く提供者のアプリケーションを使用することである。アプリケーションは、ウェブ・ブラウザ(例えば、ウェブ・ベースのeメール)などの、シン・クライアント・インターフェースを通じて様々なクライアント・デバイスからアクセス可能である。利用者は、ネットワーク、サーバ、オペレーティング・システム、ストレージ、または、ことによると個々のアプリケーション能力を含む、基礎をなすクラウド・インフラストラクチャの管理も制御も行わないが、限定的なユーザ固有アプリケーション構成設定を例外とする可能性がある。
サービスとしてのプラットフォーム(PaaS):利用者に提供される能力は、提供者によってサポートされるプログラミング言語およびツールを使用して制作された利用者制作または獲得アプリケーションを、クラウド・インフラストラクチャ上に配置することである。利用者は、ネットワーク、サーバ、オペレーティング・システム、またはストレージを含む、基礎をなすクラウド・インフラストラクチャの管理も制御も行わないが、配置されたアプリケーション、および場合によっては、アプリケーション・ホスティング環境構成に対する制御を行う。
サービスとしてのインフラストラクチャ(IaaS):利用者に提供される能力は、処理、ストレージ、ネットワーク、ならびに、オペレーティング・システムおよびアプリケーションを含み得る任意のソフトウェアを利用者が展開して動かすことができる他の基本的なコンピューティング・リソースを提供することである。利用者は、基礎をなすクラウド・インフラストラクチャの管理も制御も行わないが、オペレーティング・システム、ストレージ、展開されたアプリケーションに対する制御、および場合によっては、選択されたネットワーキング構成要素(例えば、ホスト・ファイアウォール)の限定的な制御を行う。
【0088】
展開モデルは以下の通りである。
プライベート・クラウド:クラウド・インフラストラクチャは、組織のためにだけ運用される。クラウド・インフラストラクチャは、この組織または第三者によって管理されてもよく、オンプレミスまたはオフプレミスで存在することができる。
コミュニティ・クラウド:クラウド・インフラストラクチャは、いくつかの組織によって共有され、懸念(例えば、ミッション、セキュリティ要件、ポリシ、およびコンプライアンス考慮)を共有してきた固有のコミュニティをサポートする。クラウド・インフラストラクチャは、組織または第三者によって管理され、オンプレミスまたはオフプレミスで存在することができる。
パブリック・クラウド:クラウド・インフラストラクチャは、一般大衆または大規模業界団体に対して利用可能にされ、クラウド・サービスを売る組織によって所有される。
ハイブリッド・クラウド:クラウド・インフラストラクチャは、一意のエンティティのままであるが、データおよびアプリケーション移植を可能にする標準または独自の技術(例えば、クラウド間の負荷分散のためのクラウド・バースティング)によって一緒に結びつけられた2つ以上のクラウド(プライベート、コミュニティ、またはパブリック)の合成物である。
【0089】
クラウド・コンピューティング環境は、ステートレス性、低結合性、モジュール性、およびセマンティック相互運用性に焦点を置いたサービス指向のものである。クラウド・コンピューティングの中心には、相互接続ノードのネットワークを含むインフラストラクチャがある。
【0090】
ここで図30を参照すると、例示的なクラウド・コンピューティング環境50が描写されている。図示のように、クラウド・コンピューティング環境50は、例えば、パーソナル・デジタル・アシスタント(PDA)もしくはセルラー電話54A、デスクトップ・コンピュータ54B、ラップトップ・コンピュータ54C、または自動車コンピュータ・システム54N、あるいはその組合せなど、クラウド利用者によって使用されるローカル・コンピューティング・デバイスが通信し得る、1つまたは複数のクラウド・コンピューティング・ノード10を含む。ノード10は、互いに通信してもよい。ノード10は、本明細書で上述したようなプライベート、コミュニティ、パブリック、またはハイブリッド・クラウド、あるいはその組合せなど、1つまたは複数のネットワークにおいて、物理的または仮想的にグループ化されてもよい(図示せず)。これにより、クラウド・コンピューティング環境50は、クラウド利用者がローカル・コンピューティング・デバイス上でリソースを維持する必要のない、サービスとしてのインフラストラクチャ、プラットフォーム、またはソフトウェア、あるいはその組合せを提供することができる。図30に示されているコンピューティング・デバイス54A~Nのタイプは、例示にすぎないことが意図され、コンピューティング・ノード10およびクラウド・コンピューティング環境50は、(例えば、ウェブ・ブラウザを使用して)任意のタイプのネットワークまたはネットワーク・アドレス可能接続あるいはその両方を介して、任意のタイプのコンピュータ化デバイスと通信可能であることが理解される。
【0091】
ここで図31を参照すると、クラウド・コンピューティング環境50(図30)によって提供される機能抽象化層のセットが示されている。図31に示されている構成要素、層、および機能は、例示にすぎないことが意図され、本発明の実施形態は、これらに限定されないことを予め理解されたい。描写されたように、以下の層および対応する機能が提供される。
【0092】
ハードウェアおよびソフトウェア層60は、ハードウェアおよびソフトウェア構成要素を含む。ハードウェア構成要素の例は、メインフレーム61、RISC(縮小命令セット・コンピュータ)アーキテクチャ・ベースのサーバ62、サーバ63、ブレード・サーバ64、ストレージ・デバイス65、ならびにネットワークおよびネットワーキング構成要素66を含む。一部の実施形態では、ソフトウェア構成要素は、ネットワーク・アプリケーション・サーバ・ソフトウェア67、およびデータベース・ソフトウェア68を含む。
【0093】
仮想化層70は、仮想サーバ71、仮想ストレージ72、仮想プライベート・ネットワークを含む仮想ネットワーク73、仮想アプリケーションおよびオペレーティング・システム74、ならびに仮想クライアント75という、仮想エンティティの例が提供され得る抽象化層を提供する。
【0094】
1つの例では、管理層80は、後述の機能を提供してもよい。リソース・プロビジョニング81は、クラウド・コンピューティング環境内でタスクを実施するために利用されるコンピューティング・リソースおよび他のリソースの動的な調達を行う。計量および価格設定82は、クラウド・コンピューティング環境内でリソースが利用されるときのコスト追跡、および、これらのリソースの利用量に対する請求またはインボイスを行う。1つの例では、これらのリソースは、アプリケーション・ソフトウェア・ライセンスを含んでもよい。セキュリティは、クラウド利用者およびタスクの本人確認、ならびに、データおよび他のリソースの保護を行う。ユーザ・ポータル83は、利用者およびシステム・アドミニストレータに、クラウド・コンピューティング環境へのアクセスを提供する。サービス・レベル管理84は、要求されるサービス・レベルが満たされるように、クラウド・コンピューティング・リソースの配分および管理を行う。サービス・レベル・アグリーメント(SLA)計画および実行85は、SLAに応じて、将来の要件が予想されるクラウド・コンピューティング・リソースの事前配置および調達を行う。
【0095】
ワークロード層90は、クラウド・コンピューティング環境が利用され得る機能の例を提供する。この層から提供され得るワークロードおよび機能の例は、マッピングおよびナビゲーション91、ソフトウェア開発およびライフサイクル管理92、仮想クラスルーム教育配信93、データ分析処理94、トランザクション処理95、ならびに、ワークロードおよび機能96を含む。
【0096】
本発明の様々な実施形態は、関連する図面を参照しながら本明細書で説明される。本発明の代替実施形態は、本発明の範囲から逸脱することなく考案されることが可能である。以下の説明および図面において、要素の間の様々な接続および位置関係(例えば、上、下、隣、等)が説明される。これらの接続または位置関係あるいはその両方は、別途指定のない限り、直接的または間接的であることが可能であり、本発明は、この点に関して、限定することを意図するものではない。したがって、エンティティの連結は、直接的または間接的連結を指すことができ、エンティティ間の位置関係は、直接的または間接的位置関係であることが可能である。その上、本明細書に記載の様々なタスクおよびプロセスのステップは、本明細書で詳細に記載されていない追加のステップまたは機能を有する、より包括的な手順またはプロセスに組み込まれることが可能である。
【0097】
本明細書に記載の方法のうちの1つまたは複数は、データ信号に基づいて論理機能を実行するための論理ゲートを有する個別の論理回路、適切な組合せ論理ゲートを有する特定用途向け集積回路(ASIC)、プログラム可能ゲート・アレイ(PGA)、フィールド・プログラマブル・ゲート・アレイ(FPGA)等、当技術分野でそれぞれよく知られている任意の技術または技術の組合せで、実行可能である。
【0098】
簡潔さのために、本発明の態様の実施および使用に関係のある従来の技術は、本明細書で詳細に説明されることもされないこともある。特に、本明細書に記載の様々な技術的特徴を実施するためのコンピューティング・システムおよび特定のコンピュータ・プログラムの様々な態様が、よく知られている。したがって、簡潔さのために、多くの従来の実装形態の詳細は、本明細書では簡潔に言及されるだけであるか、あるいは、よく知られたシステムもしくはプロセスまたはその両方の詳細を提供することなく全面的に省略される。
【0099】
一部の実施形態では、様々な機能または行為は、所与のロケーションで、または、1つもしくは複数の装置もしくはシステムの動作と共に、あるいはその両方で、実施可能である。一部の実施形態では、所与の機能または行為の一部は、第1のデバイスまたはロケーションにおいて実施可能であり、残りの機能または行為は、1つまたは複数の追加のデバイスまたはロケーションにおいて実施可能である。
【0100】
本明細書で使用される専門用語は、特定の実施形態を説明するためのものにすぎず、限定することを意図するものではない。本明細書で使用されるように、単数形「a」、「an」、および「the」は、別途文脈が明白に指示しない限り、複数形も同様に含むことを意図している。用語「備える(comprises)」または「備える(comprising)」あるいはその両方は、本明細書で使用されるとき、述べられた特徴、整数、ステップ、動作、要素、または構成要素、あるいはその組合せの存在を指定するが、1つまたは複数の他の特徴、整数、ステップ、動作、要素構成要素、またはそのグループ、あるいはその組合せの存在または追加を排除しないことがさらに理解されよう。
【0101】
下記の特許請求の範囲における全ての手段またはステップおよび機能要素の対応する構造、材料、行為、および同等物は、具体的に特許請求されるような他の請求要素と組み合わせて機能を実施するためのいずれかの構造、材料、または行為を含むことを意図している。本開示は、例示および説明のために提示されてきたが、網羅的であること、または開示の形式に限定されることを意図するものではない。本開示の範囲および思想から逸脱しない多くの変更形態および変形形態が当業者には明らかであろう。実施形態は、本開示の原理および実用的な用途を最も良く説明するために、および、想定される特定の使用に適するような様々な修正を伴う様々な実施形態についての開示を、他の当業者が理解できるようにするために、選ばれ、記載された。
【0102】
本明細書で描写された図は例示である。本開示の思想から逸脱しない、記載された図またはステップ(もしくは動作)に対する多くの変形形態が存在する可能性がある。例えば、アクションは、異なる順序で実施可能であるか、またはアクションは、追加、削除、もしくは修正可能である。また、用語「連結される」は、2つの要素間の信号経路を有することを表し、介在要素/接続が間にない要素間の直接接続を示唆していない。これらの変形形態の全ては、本開示の一部であるとみなされる。
【0103】
以下の定義および省略形は、特許請求の範囲および本明細書の解釈のために使用されることになる。本明細書で使用されるように、用語「備える(comprises)」、「備える(comprising)」、「含む(includes)」、「含む(including)」、「有する(has)」、「有する(having)」、「収める(contains)」、もしくは「収める(containing)」、またはこれらの他の任意の変形形態は、非排他的な包含を含めることを意図している。例えば、要素のリストを含む構造、混合、プロセス、方法、項目、または装置は、必ずしもこれらの要素にだけ限定されるのではなく、明確に列挙されていない、またはこのような構成物、混合、プロセス、方法、項目、もしくは装置に内在しない他の要素を含むことができる。
【0104】
追加として、用語「例示的」は、「例、事例、または例示として機能すること」を意味するために本明細書で使用される。「例示的」として本明細書で説明される任意の実施形態またはデザインは、他の実施形態またはデザインより好ましいまたは有利なものとして必ずしも解釈されるべきではない。用語「少なくとも1つ」および「1つまたは複数」は、1以上の任意の整数、すなわち1、2、3、4等を含むものと理解されている。用語「複数」は、2以上の任意の整数、すなわち2、3、4、5等を含むものと理解されている。用語「接続」は、間接的「接続」および直接的「接続」両方を含むことができる。
【0105】
用語「約(about)」、「実質的に(substantially)」、「およそ(approximately)」、およびこれらの変形形態は、本出願を提出したときに利用可能な機器に基づく特定の量の測定値に関連付けられたある程度の誤差を含むことを意図している。例えば、「約(about)」は、±8%もしくは5%の範囲、または所与の値の2%を含むことができる。
【0106】
本発明は、統合の任意の可能な技術的詳細レベルにおけるシステム、方法、またはコンピュータ・プログラム製品、あるいはその組合せでもよい。コンピュータ・プログラム製品は、本発明の態様をプロセッサに実行させるためのコンピュータ可読プログラム命令を有するコンピュータ可読ストレージ媒体(または複数の媒体)を含んでもよい。
【0107】
コンピュータ可読ストレージ媒体は、命令実行デバイスによる使用のための命令を保持および格納可能な有形デバイスであることが可能である。コンピュータ可読ストレージ媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁気ストレージ・デバイス、半導体ストレージ・デバイス、または前述の任意の適切な組合せでもよいがこれらに限定されない。コンピュータ可読ストレージ媒体のより具体的な例の完全に網羅されていないリストは、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ(RAM)、リード・オンリ・メモリ(ROM)、消去可能プログラマブル・リード・オンリ・メモリ(EPROMまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク・リード・オンリ・メモリ(CD-ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリ・スティック、フロッピー(R)・ディスク、命令を記録したパンチ・カードまたは溝内隆起構造などの機械的にエンコードされたデバイス、および前述の任意の適切な組合せを含む。本明細書で使用されるようなコンピュータ可読ストレージ媒体は、電波もしくは他の自由に伝搬する電磁波、導波路もしくは他の伝送媒体を通じて伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、またはワイヤを通じて伝送される電気信号など、本質的に一時的な信号であると解釈されるべきではない。
【0108】
本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング/処理デバイスに、あるいは、例えば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくはワイヤレス・ネットワーク、またはその組合せといったネットワークを介して外部コンピュータまたは外部ストレージ・デバイスに、ダウンロード可能である。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組合せを備えてもよい。各コンピューティング/処理デバイスのネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、コンピュータ可読プログラム命令をネットワークから受け取り、それぞれのコンピューティング/処理デバイス内のコンピュータ可読ストレージ媒体に格納するためにコンピュータ可読プログラム命令を転送する。
【0109】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、インストラクション・セット・アーキテクチャ(ISA)命令、機械語命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路用の構成データ、または、Smalltalk(R)、C++、もしくは同様のものなどのオブジェクト指向プログラミング言語、および「C」プログラミング言語もしくは類似のプログラミング言語などの手続き型プログラミング言語を含む1つもしくは複数のプログラミング言語の任意の組合せで書かれたソース・コードもしくはオブジェクト・コードでもよい。コンピュータ可読プログラム命令は、全面的にユーザのコンピュータ上で、または、部分的にユーザのコンピュータ上で、スタンド・アロンのソフトウェア・パッケージとして、あるいは、部分的にユーザのコンピュータ上かつ部分的にリモート・コンピュータ上で、または全面的にリモート・コンピュータもしくはサーバ上で実行してもよい。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む任意のタイプのネットワークを通じてユーザのコンピュータに接続されてもよく、または接続は、(例えば、インターネット・サービス・プロバイダを使用してインターネットを通じて)外部コンピュータに対して行われてもよい。一部の実施形態では、プログラム可能論理回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA)を含む電子回路は、本発明の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路を個別化することによって、コンピュータ可読プログラム命令を実行してもよい。
【0110】
本発明の態様は、本発明の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照しながら本明細書で説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方におけるブロックの組合せは、コンピュータ可読プログラム命令によって実行可能であることが理解されよう。
【0111】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行する命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックで指定された機能/行為を実行するための手段を作り出すべく、機械を生み出すために汎用コンピュータ、専用コンピュータ、または他のプログラム可能データ処理装置のプロセッサに提供されてもよい。これらのコンピュータ可読プログラム命令はまた、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックで指定された機能/行為の態様を実行する命令を含む製品を、命令を格納したコンピュータ可読ストレージ媒体が備えるべく、コンピュータ可読ストレージ媒体に格納されてもよく、コンピュータ、プログラム可能データ処理装置、または他のデバイス、あるいはその組合せに特定の様式で機能するように指図可能である。
【0112】
コンピュータ可読プログラム命令はまた、コンピュータ、他のプログラム可能装置、または他のデバイス上で実行する命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックで指定された機能/行為を実行するべく、コンピュータ実行処理を生み出すために、コンピュータ、他のプログラム可能装置、または他のデバイスで一連の動作ステップを実施するために、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードされてもよい。
【0113】
図中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、機能、および動作を示す。この点に関して、フローチャートまたはブロック図の中の各ブロックは、指定の論理機能を実施するための1つまたは複数の実行可能命令を含む、命令のモジュール、セグメント、または一部を表してもよい。一部の代替実装形態では、ブロックに記された機能は、図に記された順序とは無関係に行われてもよい。例えば、連続して示された2つのブロックは、実際には、実質的に同時に実行されてもよく、またはブロックは、ときには、含まれる機能に応じて逆の順序で実行されてもよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、および、ブロック図またはフローチャート図あるいはその両方におけるブロックの組合せは、指定の機能もしくは行為を行うか、または、専用ハードウェアとコンピュータ命令との組合せを実行する、専用ハードウェア・ベースのシステムによって実行可能であることにも留意されたい。
【0114】
本発明の様々な実施形態の説明は、例示のために提示されてきたが、網羅的であること、または、開示された実施形態に限定されることを意図するものではない。説明された実施形態の範囲および思想から逸脱することなく、多くの変更形態および変形形態が当業者には明らかであろう。本明細書で使用される専門用語は、実施形態の原理、実用的用途、もしくは市場で見つかる技術に対する技術的改善を最もよく説明するように、または、本明細書に記載の実施形態を他の当業者が理解できるように、選ばれた。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28
図29
図30
図31
【手続補正書】
【提出日】2024-07-30
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
コンピュータ実行方法であって、
インデックス・バッファ内にインデックスを生成するためにインデックス・パイプラインを動作させることであって、前記インデックスがメモリ・デバイスを読み出すために使用される、前記動作させることと、
命令のメタデータを予測キャッシュにポピュレートすることであって、前記命令のメタデータが、前記メモリ・デバイスから読み取られる、前記ポピュレートすることと、
前記予測キャッシュからの前記命令の前記メタデータを使用して予測を生成するように予測パイプラインを動作させることであって、前記命令の前記メタデータを前記予測キャッシュに前記ポピュレートすることが、前記予測パイプラインの前記動作と非同期的に実施される、前記動作させることと
を含む、コンピュータ実行方法。
【請求項2】
前記命令の前記メタデータを前記予測キャッシュに前記ポピュレートすることが、前記予測パイプラインの前記動作と非同期的に実施されることが、前記予測パイプラインのプロセスとは独立して、前記予測キャッシュについての前記メタデータを読み出すために前記メモリ・デバイスに絶えずインデックスを付けることを含む、請求項1に記載のコンピュータ実行方法。
【請求項3】
前記インデックス・バッファが、前記予測キャッシュからの前記メタデータを使用して前記予測を生成することを当てにせず、前記予測を生成する前に、前記予測キャッシュについての前記メタデータを有する前記メモリ・デバイスを読み出すように構成される、請求項1に記載のコンピュータ実行方法。
【請求項4】
前記予測パイプラインが、前記予測キャッシュからの前記命令の前記メタデータのラインを出力するように構成される、請求項1に記載のコンピュータ実行方法。
【請求項5】
前記予測パイプラインが、前記メモリ・デバイスにアクセスし直す必要なく、前記予測キャッシュからの前記命令の前記メタデータのラインを絶えず再使用するように構成される、請求項1に記載のコンピュータ実行方法。
【請求項6】
前の予測が、前記メタデータのラインに対して予測されたことに応答して、前記予測パイプラインが、新しい予測を生成するために、前記予測キャッシュから出力された前記命令の前記メタデータの前記ラインを絶えず再使用するように構成される、請求項1に記載のコンピュータ実行方法。
【請求項7】
前記予測が、順不同の命令実行パイプラインに送られ、前記順不同の命令実行パイプラインが、前記インデックス・パイプラインおよび前記予測パイプラインと並列に動作する、請求項1に記載のコンピュータ実行方法。
【請求項8】
システムであって、
コンピュータ可読命令を有するメモリと、
前記コンピュータ可読命令を実行するための1つまたは複数のプロセッサであって、前記コンピュータ可読命令が、
インデックス・バッファ内にインデックスを生成するためにインデックス・パイプラインを動作させることであって、前記インデックスがメモリ・デバイスを読み出すために使用される、前記動作させること、
前記メモリ・デバイスからの命令のメタデータを予測キャッシュにポピュレートすること、および
前記予測キャッシュからの前記命令の前記メタデータを使用して予測を生成するように予測パイプラインを動作させることであって、前記命令の前記メタデータを前記予測キャッシュに前記ポピュレートすることが、前記予測パイプラインの前記動作と非同期的に実施される、前記動作させること
を含むプロセスを実施するように前記1つまたは複数のプロセッサを制御する、前記プロセッサと
を備える、システム。
【請求項9】
前記命令の前記メタデータを前記予測キャッシュに前記ポピュレートすることが、前記予測パイプラインの前記動作と非同期的に実施されることが、前記予測パイプラインのプロセスとは独立して、前記予測キャッシュについての前記メタデータを読み出すために前記メモリ・デバイスに絶えずインデックスを付けることを含む、請求項8に記載のシステム。
【請求項10】
前記インデックス・バッファが、前記予測キャッシュからの前記メタデータを使用して前記予測を生成することを当てにせず、前記予測を生成する前に、前記予測キャッシュについての前記メタデータを有する前記メモリ・デバイスを読み出すように構成される、請求項8に記載のシステム。
【請求項11】
前記予測パイプラインが、前記予測キャッシュからの前記命令の前記メタデータのラインを出力するように構成される、請求項8に記載のシステム。
【請求項12】
前記予測パイプラインが、前記メモリ・デバイスにアクセスし直す必要なく、前記予測キャッシュからの前記命令の前記メタデータのラインを絶えず再使用するように構成される、請求項8に記載のシステム。
【請求項13】
前の予測が、前記メタデータのラインに対して予測されたことに応答して、前記予測パイプラインが、新しい予測を生成するために、前記予測キャッシュから出力された前記命令の前記メタデータの前記ラインを絶えず再使用するように構成される、請求項8に記載のシステム。
【請求項14】
前記予測が、順不同の命令実行パイプラインに送られ、前記順不同の命令実行パイプラインが、前記インデックス・パイプラインおよび前記予測パイプラインと並列に動作する、請求項8に記載のシステム。
【請求項15】
プログラム命令を具体化したコンピュータ可読ストレージ媒体を備えるコンピュータ・プログラムであって、コンピュータに、
インデックス・バッファ内にインデックスを生成するためにインデックス・パイプラインを動作させることであって、前記インデックスがメモリ・デバイスを読み出すために使用される、前記動作させることと、
前記メモリ・デバイスからの命令のメタデータを予測キャッシュにポピュレートすることと、
前記予測キャッシュからの前記命令の前記メタデータを使用して予測を生成するように予測パイプラインを動作させることであって、前記命令の前記メタデータを前記予測キャッシュに前記ポピュレートすることが、前記予測パイプラインの前記動作と非同期的に実施される、前記動作させる、コンピュータ・プログラム。
【請求項16】
前記命令の前記メタデータを前記予測キャッシュに前記ポピュレートすることが、前記予測パイプラインの前記動作と非同期的に実施されることが、前記予測パイプラインのプロセスとは独立して、前記予測キャッシュについての前記メタデータを読み出すために前記メモリ・デバイスに絶えずインデックスを付けることを含む、請求項15に記載のコンピュータ・プログラム。
【請求項17】
前記インデックス・バッファが、前記予測キャッシュからの前記メタデータを使用して前記予測を生成することを当てにせず、前記予測を生成する前に、前記予測キャッシュについての前記メタデータを有する前記メモリ・デバイスを読み出すように構成される、請求項15に記載のコンピュータ・プログラム。
【請求項18】
前記予測パイプラインが、前記予測キャッシュからの前記命令の前記メタデータのラインを出力するように構成される、請求項15に記載のコンピュータ・プログラム。
【請求項19】
前記予測パイプラインが、前記メモリ・デバイスにアクセスし直す必要なく、前記予測キャッシュからの前記命令の前記メタデータのラインを絶えず再使用するように構成される、請求項15に記載のコンピュータ・プログラム。
【請求項20】
前の予測が、前記メタデータのラインに対して予測されたことに応答して、前記予測パイプラインが、新しい予測を生成するために、前記予測キャッシュから出力された前記命令の前記メタデータの前記ラインを絶えず再使用するように構成される、請求項15に記載のコンピュータ・プログラム。
【請求項21】
コンピュータ実行方法であって、
リセット・アドレスを使用してインデックス・アクセラレータに問い合わせることと、
前記問い合わせに応答して、インデックス・ラインが前記インデックス・アクセラレータ内に存在すると決定することと、
前記インデックス・アクセラレータ内の前記インデックス・ラインへのシーケンシャル・ラインを決定することと、
インデックス・バッファに前記シーケンシャル・ラインを入れることと
を含む、コンピュータ実行方法。
【請求項22】
前記インデックス・アクセラレータが、前記インデックス・ラインに基づいて、1つまたは複数の他のシーケンシャル・ラインを決定するように構成され、
前記インデックス・アクセラレータが、予測パイプラインによって必要とされる前記シーケンシャル・ラインおよび前記1つまたは複数の他のシーケンシャル・ラインの前に、前記シーケンシャル・ラインおよび前記1つまたは複数の他のシーケンシャル・ラインを前記インデックス・バッファに入れるように構成される、
請求項21に記載のコンピュータ実行方法。
【請求項23】
前記インデックス・ラインが、所与のエントリ命令アドレスに対する分岐の出口ターゲット命令アドレスを含む、請求項21に記載のコンピュータ実行方法。
【請求項24】
コンピュータ実行方法であって、
メタデータを使用して主予測および補助予測を生成することと、
前記主予測と前記補助予測とが異なると決定することと、
前記主予測と前記補助予測とが異なることに応答して、前記補助予測を選択することと、
所定の時間にわたって予測パイプラインの長さを延長することと、
前記補助予測を命令実行パイプラインに送ることと
を含む、コンピュータ実行方法。
【請求項25】
前記補助予測が、前記主予測より長い処理時間を必要とする、請求項24に記載のコンピュータ実行方法。
【国際調査報告】