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

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

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

特許7513527予測ミス回復の待ち時間を短縮するための偶発的な分岐予測の格納
<>
  • 特許-予測ミス回復の待ち時間を短縮するための偶発的な分岐予測の格納 図1
  • 特許-予測ミス回復の待ち時間を短縮するための偶発的な分岐予測の格納 図2
  • 特許-予測ミス回復の待ち時間を短縮するための偶発的な分岐予測の格納 図3
  • 特許-予測ミス回復の待ち時間を短縮するための偶発的な分岐予測の格納 図4
  • 特許-予測ミス回復の待ち時間を短縮するための偶発的な分岐予測の格納 図5
  • 特許-予測ミス回復の待ち時間を短縮するための偶発的な分岐予測の格納 図6
  • 特許-予測ミス回復の待ち時間を短縮するための偶発的な分岐予測の格納 図7
  • 特許-予測ミス回復の待ち時間を短縮するための偶発的な分岐予測の格納 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-07-01
(45)【発行日】2024-07-09
(54)【発明の名称】予測ミス回復の待ち時間を短縮するための偶発的な分岐予測の格納
(51)【国際特許分類】
   G06F 9/38 20180101AFI20240702BHJP
   G06F 9/32 20180101ALI20240702BHJP
【FI】
G06F9/38 330A
G06F9/32 320F
【請求項の数】 17
(21)【出願番号】P 2020567762
(86)(22)【出願日】2019-05-22
(65)【公表番号】
(43)【公表日】2021-10-11
(86)【国際出願番号】 US2019033511
(87)【国際公開番号】W WO2019236294
(87)【国際公開日】2019-12-12
【審査請求日】2022-05-11
(31)【優先権主張番号】15/997,344
(32)【優先日】2018-06-04
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【弁理士】
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【弁理士】
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【弁理士】
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】マリウス エバース
(72)【発明者】
【氏名】ダグラス ウィリアムス
(72)【発明者】
【氏名】アショク ティー. ベンカタチャー
(72)【発明者】
【氏名】サドハーセン カライセルバン
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許出願公開第2005/0050309(US,A1)
【文献】米国特許出願公開第2013/0198490(US,A1)
【文献】米国特許出願公開第2017/0262287(US,A1)
【文献】米国特許出願公開第2008/0209190(US,A1)
【文献】米国特許第06976156(US,B1)
【文献】特表2016-534429(JP,A)
【文献】特開2017-027451(JP,A)
【文献】特表2018-537771(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
G06F 9/32
(57)【特許請求の範囲】
【請求項1】
分岐予測器で、第1の令ブロックの第1の分岐命令の第1の結果と、前記第1の令ブロックのうち前記第1の分岐命令の後の1つ以上の命令を含む剰余ブロック内の少なくとも第2の分岐命令に対する第2の結果と、を予測することであって、前記第1の結果は、前記第1の分岐命令が成立するか否かを示し、前記第2の結果は、前記第2の分岐命令が成立するか否かを示す、ことと、
前記分岐予測器が、フェッチロジックに、前記予測された第1の結果によって示される第1の経路に沿う投機的な実行のために命令のフェッチを始めるように命令することと、
前記分岐予測器が、予測された第2の結果を格納することと、
前記分岐予測器が、前記第1の分岐命令が成立しないことに応じて、前記予測された第2の結果に基づいて前記分岐予測器を再起動することとを含む、方法。
【請求項2】
前記第1の分岐命令の前記第1の結果を予測することは、前記第1の令ブロックの中の前記第1の分岐命令の前記第1の結果及び前記第2の結果を同時に予測することであって、予測された第2の結果は、前記第1の令ブロックの前記第2の分岐命令に対するものである、ことを含む、請求項1に記載の方法。
【請求項3】
前記予測された第2の結果を格納することは、少なくとも前記第1の経路が前記第2の分岐命令を含まないことに応じて、前記予測された第2の結果を示す情報を含む、前記剰余ブロックに関する情報を格納することを含む、請求項2に記載の方法。
【請求項4】
前記予測された第2の結果を格納することは、前記予測された第2の結果を前記分岐予測器の代替予測ストレージアレイに記憶することを含む、請求項1に記載の方法。
【請求項5】
前記分岐予測器を再起動することは、
前記予測された第2の結果が、前記第2の分岐命令が成立することを示すことに応じて前記第2の分岐命令のターゲットアドレス、
前記予測された第2の結果が、前記第2の分岐命令が成立せず、前記第1の命令ブロックが少なくとも1つの第3の分岐命令を含むことを示すことに応じて前記第2の分岐命令に後続の命令のアドレス、及び
前記予測された第2の結果が、前記第2の分岐命令が成立せず、前記第1の命令ブロックが前記少なくとも1つの第3の分岐命令を含まないことを示すことに応じて前記第1のブロックの境界
のうちの1つによって識別された第2のブロックで分岐予測を始めるために前記分岐予測器を再起動することを含む、請求項2に記載の方法。
【請求項6】
前記第1の命令ブロックは、後続のメモリ境界の前に前記第2の分岐命令を含まず、前記剰余ブロックは、前記第1の命令ブロックが、前記後続のメモリ境界の前に前記第2の分岐命令を含まないことを示す情報を含み、
前記分岐予測器を再起動することは、前記剰余ブロックに示された前記後続のメモリ境界で前記分岐予測器を再起動することを含む、請求項1に記載の方法。
【請求項7】
インデックスとして前記第1の命令ブロックのアドレスを使用し、分岐予測構造内の情報にアクセスすることであって、前記情報は、前記第1の命令ブロックからの投機的な経路に沿った第2のブロックの集合に対応するエントリの集合を含む、前記アクセスすることをさらに含む、請求項1に記載の方法。
【請求項8】
1の命令ブロックの第1の分岐命令の第1の結果と、前記第1の令ブロックのうち前記第1の分岐命令の後の1つ以上の命令を含む剰余ブロック内の少なくとも第2の分岐命令に対する第2の結果と、を予測するように構成された分岐予測器であって、前記第1の結果は、前記第1の分岐命令が成立するか否かを示し、前記第2の結果は、前記第2の分岐命令が成立するか否かを示す、分岐予測器と、
前記予測された第1の結果によって示された第1の経路に沿って投機的な実行のために命令をフェッチするためのフェッチロジックと、
前記予測された第1の結果が成立することに応じて、予測された第2の結果を格納するための前記分岐予測器内の代替予測ストレージアレイと
を備え、
前記第1の分岐命令が成立しないことに応じて、前記分岐予測器は、前記予測された第2の結果に基づいて再起動される、装置。
【請求項9】
前記分岐予測器は、前記第1の令ブロックの中の前記第1の分岐命令の前記第1の結果及び前記第2の結果を同時に予測するように構成されており、前記予測された第2の結果は、前記第1の令ブロックの前記第2の分岐命令に対するものである、請求項8に記載の装置。
【請求項10】
前記代替予測ストレージアレイは、少なくとも前記第1の経路が前記第2の分岐命令を含まないことに応じて、前記予測された第2の結果を格納するように構成される、請求項9に記載の装置。
【請求項11】
前記分岐予測器は、前記予測された第2の結果に基づいて再起動される、請求項9に記載の装置。
【請求項12】
前記分岐予測器は再起動されて、
前記予測された第2の結果が、前記第2の分岐命令が成立することを示すことに応じて前記第2の分岐命令のターゲットアドレス、
前記予測された第2の結果が、前記第2の分岐命令が成立せず、前記第1の命令ブロックが少なくとも1つの第3の分岐命令を含むことを示すことに応じて前記第2の分岐命令に後続の命令のアドレス、及び
前記予測された第2の結果が、前記第2の分岐命令が成立せず、前記第1の命令ブロックが前記少なくとも1つの第3の分岐命令を含まないことを示すことに応じて前記第1のブロックの境界
のうちの1つによって識別された第2のブロックで分岐予測を始めることを含む、請求項9に記載の装置。
【請求項13】
前記第1の命令ブロックは、後続のメモリ境界まで前記第2の分岐命令を含まず、前記剰余ブロックは、前記第1の命令ブロックが後続のメモリ境界まで前記第2の分岐命令を含まないことを示す情報を含む、請求項9に記載の装置。
【請求項14】
前記分岐予測器は、前記剰余ブロックに示された前記後続のメモリ境界で再起動するように構成される、請求項13に記載の装置。
【請求項15】
前記第1の命令ブロックからの投機的な経路に沿った第2のブロックの集合に対応するエントリの集合を格納するように構成された分岐予測構造であって、前記分岐予測器が、インデックスとして前記第1の命令ブロックのアドレスを使用し、前記分岐予測構造にアクセスするように構成される、前記分岐予測構造をさらに備える、請求項8に記載の装置。
【請求項16】
分岐予測器で、第1の命令ブロックの第1の分岐命令の第1の結果と、前記第1の令ブロックのうち前記第1の分岐命令の後の1つ以上の命令を含む剰余ブロック内の少なくとも第2の分岐命令に対する第2の結果と、を予測することであって、前記第1の結果は、前記第1の分岐命令が成立するか否かを示し、前記第2の結果は、前記第2の分岐命令が成立するか否かを示す、ことと、
予測された第1の結果が成立したことに応じて、前記分岐予測器内の代替予測ストレージアレイに、予測された第2の結果を格納することであって、前記剰余ブロックは前記第1の命令ブロックの剰余を示す、前記格納することと、
前記第1の分岐命令が成立すると予測され、前記第1の分岐命令の実際の結果が不成立であることに応じて、前記予測された第2の結果に基づいて前記分岐予測器を再起動することとを含む、方法。
【請求項17】
前記予測された第2の結果を格納することは、前記予測された第2の結果を示す情報、又は、前記第1の命令ブロックが、後続のメモリ境界までいずれの分岐命令も含まないことを示す情報のうちの少なくとも1つを格納することを含む、請求項16に記載の方法。
【発明の詳細な説明】
【背景技術】
【0001】
処理ユニットは分岐予測を使用して、処理ユニットが分岐命令を評価する前に、処理ユニットが予測された分岐に沿って後続の命令を推論的に実行し始めることができるように分岐命令の結果を推測する。処理ユニットは、分岐予測構造の中の情報を使用して分岐命令の結果を予測する。例えば、処理ユニットは、if-then-else文及びcase文などのソフトウェア構造体を実装する条件付き分岐命令の結果を予測できる。分岐予測構造の例は、任意の命令へプログラムフローをリダイレクトする間接分岐予測器、処理ユニットで実行中のサブルーチンの復帰アドレスを含む復帰アドレススタック、条件付き分岐の方向(成立または不成立)を予測する条件付き分岐予測器、及び分岐命令の場所、タイプ、及びターゲットアドレスを予測する情報を含む分岐ターゲットバッファを含む。
【0002】
分岐予測構造のいくつかの実施態様は、予測アルゴリズムの一部として処理ユニット上で以前に実行していたまたは現在実行しているプロセスによって実行される分岐命令の結果の分岐履歴を使用する。例えば、分岐命令が、以前に90%の確率で第1のアドレスに、及び10%の確率で第2のアドレスにプログラムフローを向けていた場合、分岐予測構造内の対応するエントリは、分岐命令が第1のアドレスにプログラムフローを向けると予測し、それによってプロセスが、分岐命令の評価を待機することなく、第1のアドレスで始まる分岐に沿って命令を推論的に実行できるようにする。分岐命令の評価時に予測分岐が正しくないと判明すると、間違って予測された分岐に沿った推論的な実行は中断され、処理ユニットの状態は、分岐命令の状態にロールバックされて、正しい分岐に沿って実行を始める。より具体的には、分岐予測ユニットとフェッチユニットの両方ともロールバックされて、分岐の正しいターゲットから、または分岐が成立しなかった場合は分岐後のアドレスから処理する。
【0003】
本開示は、添付図面を参照することによって、さらによく理解され得、その数多くの特徴及び優位点は当業者に明らかにされ得る。異なる図面における同じ参照記号の使用は、類似項目または同一項目を示す。
【図面の簡単な説明】
【0004】
図1】いくつかの実施形態による処理システムのブロック図である。
図2】いくつかの実施形態によるプロセッサコアを含む処理システムの一部分のブロック図である。
図3】いくつかの実施形態による、予測ブロック、及び予測ブロックの分岐命令の考えられる異なる結果に対応するブロックの集合のブロック図である。
図4】いくつかの実施形態による分岐ターゲットバッファ及び分岐予測構造を含む処理システムの一部分のブロック図である。
図5】いくつかの実施形態によって、分岐予測回復の待ち時間を短縮するために、格納されている予測情報を使用し、分岐予測ミスから回復する方法の流れ図である。
図6】いくつかの実施形態によって、「前方予測」分岐予測を実装する処理システムの一部分のブロック図である。
図7】いくつかの実施形態によって「前方予測」分岐予測のための分岐予測回復の待ち時間を短縮するために、格納されている予測情報を使用し、分岐予測ミスから回復する方法の第1の部分の流れ図である。
図8】いくつかの実施形態によって、「前方予測」分岐予測のための分岐予測回復の待ち時間を短縮するために、格納されている予測情報を使用し、分岐予測ミスから回復する方法の第2の部分の流れ図である。
【発明を実施するための形態】
【0005】
処理ユニットのいくつかの実施形態は、複数の命令を同時に実行する。例えば、処理ユニットは、1サイクルあたり4~8の命令を実行できるであろう。したがって、分岐予測器は、分岐命令を含む(本明細書では予測ブロックと呼ぶ)命令ブロック内で複数の分岐命令の結果を同時に予測する。予測ブロックは、以前の分岐命令の境界アドレスまたはターゲットアドレスなどの開始アドレスで始まる。予測ブロックは、後続の境界アドレス(例えば、64バイトキャッシュライン境界に対応するアドレス)または予測ブロックの第1の成立した分岐命令のアドレスなどの終了アドレスで終了する。分岐予測器が2つの分岐命令の結果を同時の予測するように構成される場合、分岐予測器は、2つの分岐のアドレス、2つの分岐のタイプ、成立した分岐のターゲットアドレス、及び任意の追加の分岐命令が予測ブロックにあるかどうかの表示を格納する(分岐ターゲットバッファ、BTBなどの)予測構造へのインデックスとして予測ブロックのアドレスを使用する。
【0006】
分岐予測器は、フェッチロジックに、2つの分岐命令の結果によって予測された経路に沿って命令をフェッチするように命令する。例えば、第1の分岐命令が成立しなかった場合、分岐予測器は、フェッチロジックに、プログラムフローが第2の分岐命令に連続して進むように、第2の分岐命令を含む経路に沿って命令をフェッチするように命令する。分岐予測器は、次いで、フェッチロジックに、第2の分岐命令の予測された結果に基づいて後続の命令をフェッチするように命令する。しかしながら、分岐予測器が、第1の分岐命令が成立すると予測する場合、プログラムは第2の分岐命令に流れず、第2の分岐命令のために生成された予測情報は破棄される。分岐予測器が第1の分岐命令の結果を誤って予測する場合があり、これによって処理ユニットは、分岐命令での状態にロールバックし、次いで第2の分岐命令を含む順次経路に沿って命令を実行する。しかしながら、分岐予測器はもはや第2の分岐予測情報を利用できず、分岐予測器は、第2の分岐命令の予測された結果を再計算しなければならない。第2の分岐命令の予測された結果を再計算すると、分岐予測パイプラインの待ち時間が増加する。
【0007】
「前方予測」技術では、第1のブロックのアドレスは、分岐予測構造及び分岐予測器ストレージ内の情報にアクセスするためのインデックスとして使用される。情報は、第1のブロックの分岐命令のターゲットである潜在的な後続のブロックの集合に対応するエントリの集合を含む。エントリの1つの部分集合は、分岐予測器が第1のブロックの分岐命令の結果を予測することに応えて集合から選択される。予測された結果は、第2のブロックの分岐命令の分岐予測情報を含むエントリの部分集合に対応する分岐命令を含む第2のブロックを示す。分岐予測器は、エントリの部分集合の情報を使用して、第1のブロックの結果が正しく予測されたかどうかの判断の前に、第2のブロックの分岐命令の結果を予測する。第2のブロックの予測されたアドレスは、第2のブロックの分岐命令の1つの結果として予測されたアドレスで、第3のブロックの分岐命令の結果を予測するために使用される情報へのインデックスとして使用される。第1のブロックのターゲットの分岐結果またはターゲットが誤って予測されると、処理ユニットは第1のブロックの誤って予測された命令の最後での状態にロールバックされ、正しい経路に沿って実行を始める。正しくない予測が、分岐命令が「不成立」であり、実際の分岐結果は「成立」であった場合、正しい経路は、第1のブロックの分岐命令のターゲットである潜在的な後続のブロックの集合の別の1つで始まる。正しくない予測が、分岐命令が「成立」であり、実際の分岐結果は「不成立」であった場合、第2のブロックに移動する前に、第1のブロックの残りの部分が予測され、フェッチされる。したがって、第1のブロックの初期の分岐予測が正しくない場合、処理ユニットは、正しい経路に基づいて分岐予測器をロールバックし、第2のブロックの予測された結果を再計算する必要があり、これにより分岐予測器の待ち時間は増加する。
【0008】
図1~9は、第1の分岐命令の第1の結果及び第2の分岐命令の第2の結果を同時に予測することによって分岐予測の待ち時間を短縮するための技術を開示する。分岐予測器は、フェッチロジックに、第1の結果によって示された経路に沿って推論的な実行のために命令のフェッチを始めるように命令する。また、分岐予測器は、本明細書では剰余ブロック予測とも呼ぶ第2の予測された結果も格納する。第2の分岐命令がない場合、剰余ブロック予測は、後続のメモリ境界まで剰余ブロックに追加の分岐がないことを示す情報を格納する。第1の分岐命令の第1の結果の予測ミスに応えて、フェッチユニットは、第1の分岐の正しいターゲットで再起動され、分岐予測器は、格納されていた第2の予測された結果のターゲットに基づいて再起動され、これにより第2の分岐を再予測する必要がないことによって時間が節約される。剰余ブロック予測は、分岐予測パイプラインの後段に投入されるため、それは、通常の仕組みに従って分岐予測をフェッチし、復号し、確認する際に使用するためのプロセッサロジックの残りに伝達できる。さらに、剰余ブロックは、元の分岐予測を実行するために使用されるパイプラインフローの副産物として生成され、格納される。したがって、分岐予測パイプラインは、一次フローと同時に、または予測ミスに応えてのどちらかで、分岐予測器がパイプラインを下る余分な流れを開始する必要なしにロールバックされ、再起動される。
【0009】
いくつかの実施形態では、第1の及び第2の分岐命令は、第1の及び第2の分岐命令を同時に処理する分岐予測器のインスタンスによって処理される予測ブロック内にある。第2の予測された結果を含む剰余ブロックは、第1の結果が、第2の分岐命令を含まない「成立した」経路に沿った予測を示すことに応えて、格納される。予測ミスに応えて、分岐予測器は、3つのアドレス、つまり(1)第2の結果が、分岐が成立したことを示す場合、第2の分岐命令のターゲットアドレス、(2)第3の分岐命令が予測ブロック内にある場合、予測ブロックの第2の分岐命令に後続の命令のアドレス、及び(3)追加の分岐命令が予測ブロック内にない場合、後続のメモリ境界の1つで分岐予測を始める。分岐予測器のいくつかの実施形態は、第3の分岐命令が予測ブロック内にあるかどうかを示す情報を格納する。フェッチユニットは、この場合、第1の分岐の順次アドレスである、第1の分岐の正しいターゲットで再起動される。
【0010】
いくつかの実施形態では、分岐予測器は、分岐予測構造及び分岐予測器ストレージ内の情報にアクセスするためのインデックスとして第1のブロックのアドレスを使用する。情報は、潜在的に第1のブロックの分岐命令のターゲットである第2のブロックの集合、または第1のブロックのすべての分岐が、成立しないと予測される場合、第1のブロックに続くブロックに対応するエントリの集合を含む。分岐予測器は、第1のブロックの分岐命令の結果が第2のブロックの1つとなると予測し、処理ユニットは、予測された第2のブロックの命令の実行を始める。しかしながら、予測された第2のブロックの結果だけを予測する分岐予測器条件付きロジックの単一のコピーの代わりに、分岐予測器条件付きロジックの複数のコピーがインスタンス化されて、予測された第2のブロック及び集合の代替の第2のブロック内の分岐命令の結果を同時に予測する。第1のブロックの潜在的な結果ごとに、1つの代替の第2のブロックが存在する。いくつかの実施形態では、各ブロックは最大で2つまでの分岐を保持し、第1のブロックの3つの考えられる予測された結果、つまり(1)第1の分岐成立、(2)第1の分岐不成立、及び第2の分岐成立、または(3)第1と第2の両方の分岐不成立がある。3つの考えられる第2のブロックは、3つの予測された結果に対応する。
【0011】
第1のブロックのための予測が行われると、3つの考えられる第2のブロックの1つが、予測された第2のブロックとして選ばれ、他の2つは代替予測と見なされる。分岐予測構造のための条件付きロジックの複数のインスタンスは、第1のブロックの予測の決定前に、(予測された、及び代替の)第2のブロックの分岐命令の結果を予測するために、第2のブロックの集合に対応するエントリの集合からの分岐予測情報を使用する。予測された第2のブロックを示す第1のブロックの分岐命令の予測された結果に応えて、予測された第2のブロックのアドレスは、第3のブロックのための分岐予測器ストレージ内の分岐予測構造へのインデックスとして使用される。また、分岐予測器は、第2のブロックのための代替予測も格納する。第1のブロックの結果の予測ミスが実行ユニットによって発見されることに応えて、フェッチユニットは第1のブロックの正しいターゲットで再起動され、分岐予測器は、格納されている代替の第2のブロックの予測された結果のターゲットに基づいて再起動され、これにより、剰余の第1のブロック予測及び第2のブロック予測を予測し直す必要がないことによって時間が節約される。剰余の第1のブロック予測(該当する場合)及び第2のブロック予測は分岐予測パイプラインの後段に注入されるため、それらは、通常の仕組みに従って分岐予測をフェッチする、復号する、及び確認する際に使用するためのプロセッサロジックの残りに伝達できる。第1のブロックは、それが成立したと予測されたが、成立しなかったと実行時に判断された場合、剰余ブロック予測を有する。
【0012】
図1は、いくつかの実施形態による処理システム100のブロック図である。処理システム100は、メモリ105、またはダイナミックランダムアクセスメモリ(DRAM)などの非一時的コンピュータ可読媒体を使用し、実装される他のストレージ構成要素を含む、またはそれらにアクセスできる。しかしながら、いくつかの場合、メモリ105は、スタティックランダムアクセスメモリ(SRAM)、不揮発性RAMなどを含む他のタイプのメモリを使用し、実装される。メモリ105は、それが処理システム100で実装された処理ユニットにとって外部で実装されるので、外部メモリと呼ばれる。また、処理システム100は、メモリ105などの処理システム100の中に実装されたエンティティ間の通信をサポートするためにバス110も含む。処理システム100のいくつかの実施態様は、明確にするために図1に図示しない他のバス、ブリッジ、スイッチ、ルータなどを含む。
【0013】
処理システム100は、ディスプレイ120上での提示のために画像をレンダリングするグラフィックスプロセッシングユニット(GPU)115を含む。例えば、GPU115はオブジェクトをレンダリングして、ディスプレイ120に提供されるピクセル値を生成し、ディスプレイ120はピクセル値を使用して、レンダリングしたオブジェクトを表す画像を表示する。GPU115は、命令を同時にまたは並行して実行する複数のプロセッサコア121、122、123(本明細書では集合的に「プロセッサコア121~123」と呼ぶ)を実装する。GPU115で実装されるプロセッサコア121~123の数は、設計の選択の問題である。GPU115のいくつかの実施形態は、汎用コンピューティングのために使用される。GPU115は、メモリ105に格納されたプログラムコード125などの命令を実行し、GPU115は、実行した命令の結果などの情報をメモリ105に格納する。
【0014】
また、処理システム100は、バス110に接続される中央演算処理装置(CPU)130も含むため、バス110を介してGPU115及びメモリ105と通信する。CPU130は、命令を同時にまたは並行して実行する複数のプロセッサコア131、132、133(本明細書では集合的に「プロセッサコア131~133」と呼ぶ)を実装する。CPU130に実装されるプロセッサコア131~133の数は、設計の選択の問題である。プロセッサコア131~133は、メモリ105に格納されたプログラムコード135などの命令を実行し、CPU130は、実行した命令の結果などの情報をメモリ105に格納する。また、CPU130は、GPU115に描画コールを発行することによって図形処理を開始できる。CPU130のいくつかの実施形態は、同時にまたは並列で命令を実行する(明確にするために図1では図示しない)複数のプロセッサコアを実装する。
【0015】
入出力(I/O)エンジン145は、ディスプレイ120、及びキーボード、マウス、プリンタ、外部ディスクなどの処理システム100の他の要素と関連する入力または出力の動作を処理する。I/Oエンジン145は、I/Oエンジン145がメモリ105、GPU115、またはCPU130と通信できるようにバス110に結合される。図示する実施形態では、I/Oエンジン145は、コンパクトディスク(CD)、デジタルビデオディスク(DVD)などの非一時的コンピュータ可読媒体を使用し、実装される外部ストレージ構成要素150に格納された情報を読み取る。また、I/Oエンジン145は、GPU115またはCPU130による処理の結果などの情報を外部ストレージ構成要素150に書き込むこともできる。
【0016】
図2は、いくつかの実施形態によるプロセッサコア205を含む処理システムの一部分200のブロック図である。プロセッサコア205は、図1に示すプロセッサコア121~123、131~133のいくつかの実施形態を実装するために使用される。また、処理システムの一部分200は、図1に示すメモリ105のいくつかの実施形態を実装するために使用されるメモリ210も含む。プロセッサコア200は、条件付き分岐予測器ストレージ及び条件付き分岐予測ロジックを含む分岐予測ユニット215を含む。以下に詳細に説明するように、条件付き分岐予測器ストレージは、メモリ210内の場所のアドレスを格納し、条件付き分岐予測ロジックは、分岐命令の結果を予測する。また、メモリ210に格納された情報の一部のコピーは、キャッシュ220にも格納される。例えば、頻繁にアクセスされる命令は、キャッシュ220のキャッシュラインまたはキャッシュブロックに格納される。
【0017】
フェッチユニット225は、分岐予測ユニット215から受け取ったアドレスに基づいて、メモリ210またはキャッシュ220から命令などの情報をフェッチする。フェッチユニット225は、キャッシュ220またはメモリ210から命令を表すバイトを読み取り、復号ユニット230に命令を送信する。復号ユニット230は、命令バイトを調べ、命令の機能を決定する。復号ユニット230は、プロセッサコア205によって実行される一連の演算を生成するために命令を変換する(つまり、復号する)。これらの演算は、スケジューラ235に書き込まれる。スケジューラ235は、演算のためのソース値がいつ準備できるのかを決定し、演算を実行するために、本明細書では集合的に「実行ユニット231~233」と呼ぶ1つ以上の実行ユニット231、232、233にソース値を送信する。結果は、レジスタファイル240に書き戻される。
【0018】
分岐予測ユニット215のいくつかの実施形態は、現在のプロセスまたはプロセッサコア205で以前に実行されたプロセスによって以前に実行されたことがある分岐命令と関連するエントリを含む。分岐予測ユニット215の各エントリに格納された分岐予測情報は、分岐命令がプログラムフローを命令のアドレスに向ける可能性を示す。分岐予測ユニット215のエントリは、対応する分岐命令のアドレスに基づいてアクセスされる。例えば、分岐命令の物理アドレス、仮想アドレス、またはキャッシュラインアドレスを表すビット(またはその部分集合)の値は、分岐予測ユニット215へのインデックスとして使用される。別の例の場合、ビット(またはその部分集合)のハッシュ値は、分岐予測ユニット215へのインデックスとして使用される。分岐予測構造の例は、間接分岐予測器、復帰アドレススタック、分岐ターゲットバッファ、条件付き分岐予測器、分岐履歴、または分岐予測情報を格納するために使用される任意の他の予測器構造を含む。
【0019】
スケジューラ235は、プロセッサコア205による命令の実行を予定する。スケジューラ235のいくつかの実施形態は、プログラムフローを、分岐命令によって示されるメモリ210(または関連キャッシュ220)内のアドレスにある命令にリダイレクトする分岐命令に続いて命令の推論的な実行を行う。分岐命令は、条件が真であるのか、それとも偽であるのかに応じてプログラムフローをアドレスにリダイレクトする条件付き分岐命令を含む。例えば、条件付き分岐命令は、if-then-else文またはcase文などのソフトウェア構造体を実装するために使用される。また、分岐命令は、プログラムフローを、命令によって示されるアドレスにつねにリダイレクトする無条件分岐命令も含む。例えば、JMP命令は、命令によって示されるアドレスにつねにジャンプする。いくつかの場合、ターゲットアドレスはレジスタまたはメモリ場所で提供されるため、分岐が実行されるたびにターゲットは異なる場合がある。そのような分岐を間接分岐と呼ぶ。
【0020】
スケジューラ235のいくつかの実施形態は、返された分岐予測情報を使用して、分岐命令の宛先アドレスを予測する。プロセッサコア205は、次いで宛先アドレスにある命令、及びプログラムフローの予測された分岐に沿った後続の命令を推論的に実行できる。予測された分岐が、分岐命令評価時に正しくないと判明すると、間違って予測された分岐に沿った推論的な実行は中断され、プロセッサコア205の状態は、分岐命令の状態にロールバックされて、正しい分岐に沿って実行を始める。
【0021】
分岐予測ユニット215の条件付き予測ロジックは、予測ブロック内の分岐命令の結果を同時に予測する。いくつかの実施形態では、分岐予測ユニット215は、命令の第1のブロックの中の第1の及び第2の分岐の第1の及び第2の結果を同時に予測する。フェッチユニット225は、第1の結果によって示された第1の経路に沿って推論的な実行のために命令をフェッチする。分岐予測ユニット215が、第1の分岐命令が成立すると予測すると、その場合プログラムフローは第2の分岐命令に遭遇せず、第2の分岐命令のための予測された結果は通常破棄される。しかしながら、図示の実施形態では、第2の結果は第1の結果が成立することに応えて、分岐予測ユニット215の代替予測ストレージアレイに格納される。分岐予測ユニット215による予測ミス、すなわち分岐予測ユニット215が、第1の分岐命令が成立するであろうと予測したが、実際の結果は、第1の分岐命令が成立しなかったとなったことに応えて、分岐予測ユニット215は、格納されていた第2の予測された結果に基づいて再起動される。いくつかの実施形態では、分岐予測ユニット215の条件付き分岐ロジックは、条件付き分岐予測器ストレージへのインデックスとして第1のブロックのアドレスを使用し、第1の分岐命令または第2の分岐命令からの推論的な経路に沿った第2のブロックに対応する条件付き分岐予測器ストレージのエントリにアクセスする。分岐予測ユニット215は、次いで条件付き分岐予測ロジックのインスタンスの対応する集合を使用し、第2のブロックの集合の分岐命令の結果を同時に予測する。第2のブロックの代替予測は、分岐予測ユニット215の代替予測ストレージアレイに格納され、以下に詳細に説明するように、予測ミスに応えて分岐予測ユニット215を再起動するために使用される。
【0022】
図3は、いくつかの実施形態による、予測ブロック300、及び予測ブロック300の分岐命令の異なる考えられる結果に対応するブロック305、310、315の集合のブロック図である。予測ブロック300は、分岐命令320、325及び命令330、335を含む。予測ブロック300のいくつかの実施形態は、追加の分岐命令(明確にするために、図3では図示せず)を含む。ブロック305、310、315は、それぞれ命令340、345、350、355、360、365を含む。ブロック305は、分岐命令320のターゲットである第1のアドレスによって識別され、ブロック310は、分岐命令325のターゲットである第2のアドレスによって識別され、ブロック315は、分岐命令325の後続の第3のアドレスによって識別される。図示の実施形態では、第3のアドレスは、命令360などのブロック300、315間のキャッシュライン境界などの境界での後続の命令用である。他の実施形態では、第3のアドレスは、命令335などのブロック300の後続の命令用である。
【0023】
図2に示す分岐予測ユニット215などの分岐予測構造は、予測ブロック内の複数の分岐命令の結果を同時に予測する。図示の実施形態では、分岐予測構造は、分岐命令320及び分岐命令325の結果を同時に予測する。分岐命令320の考えられる結果は「成立」であり、その場合、プログラムフローは、ブロック305の命令340のターゲットアドレスに分岐する、または「不成立」であり、その場合プログラムフローは、予測ブロック300の命令330に連続して続行する。分岐命令325の考えられる結果は、「成立」であり、その場合プログラムフローはブロック310の命令350のターゲットアドレスに分岐する、または「不成立」であり、その場合、プログラムフローは予測ブロック300の命令335に連続して続行する。
【0024】
分岐325の予測された結果は、例えば、図2に示す分岐予測ユニット215に実装されるアレイなどの代替予測ストレージアレイに格納される。分岐予測構造のいくつかの実施形態は、分岐命令320の予測された結果が成立であることに応えて予測された結果を格納する。その場合、推論的な実行は、ブロック305の命令340に分岐し、プログラムフローは分岐命令325に遭遇しない。しかしながら、予測された結果が誤って予測される場合、命令のフェッチは誤って予測された分岐命令320にロールバックされ、分岐予測器は、分岐命令325の格納されていた予測された結果を使用し、再起動される。したがって、分岐予測器は分岐命令325の結果を予測し直すことを必要とされないため、予測ミスから回復するために必要とされる遅延時間は短縮される。
【0025】
ブロック305、310、315の命令340、345、350、355、360、365は、1つ以上の分岐命令を含む場合がある。いくつかの実施形態では、条件付き予測ロジックの複数のインスタンスは、ブロック305、310、315の分岐命令の結果を同時に予測するために使用される。例えば、ブロック300のアドレスは、ブロック305、310、315の予測情報などの条件付き分岐予測器ストレージ内の情報にアクセスするために使用できる。条件付き予測ロジックの複数のインスタンスは、アクセスした情報を使用して、ブロック305、310、315の分岐命令の結果を予測する。以下で詳細に説明するように、推論的な実行は、ブロック305、310、315の予測された1つを含む経路に沿って進み、他のブロック305、310、315の分岐命令の予測された結果は格納される。以下に詳細に説明するように、分岐命令320、325の1つ以上の予測ミスに応えて、条件付き予測ロジックを再起動するために、格納されていた結果が使用される。
【0026】
図4は、いくつかの実施形態による、分岐ターゲットバッファ及び条件付き分岐予測器を含む、分岐予測ユニット215の一部分のブロック図である。アドレス405は、命令のブロックの開始アドレスを示す。分岐ターゲットバッファのエントリは、エントリと関連付けられたブロックの開始アドレスでインデックスを付けられる。図示の実施形態では、ブロックの分岐命令の分岐予測情報を含む分岐ターゲットバッファのエントリ415に対するインデックス410は、アドレス405に等しい値を含む。したがって、インデックス410は、分岐ターゲットバッファのエントリ415にアクセスするために使用される。例えば、図3に示すブロック300のアドレスは、ブロック300の分岐320、325に対応する分岐ターゲットバッファのエントリへのインデックスとして使用される。
【0027】
エントリ415は、2つの分岐命令の分岐予測情報を含む。例えば、エントリ415は、アドレス405に対する第1の分岐命令の場所を示すオフセット420と、アドレス405に対する第2の分岐命令の場所を示すオフセット425とを含む。また、エントリは、第1の及び第2の分岐命令のタイプ430、440、ならびに第1の及び第2の分岐命令のターゲットアドレス435、445を識別する情報も含む。第1の分岐命令が成立する場合、プログラムフローは第1の分岐命令からターゲットアドレス435に分岐する。それ以外の場合、プログラムフローは、それが第2の分岐命令に到達するまでブロックの命令で連続して続行する。第2の分岐命令が成立する場合、プログラムフローは第2の分岐命令からターゲットアドレス445に分岐し、そうではない場合、プログラムフローはブロックの命令で連続して続行する。オーバフローインジケータ450は、次の順次境界の前に追加の分岐命令があるかどうかを示す。いくつかの実施形態では、順次境界は、命令キャッシュライン境界と一致する。いくつかの実施形態では、順次境界は、命令キャッシュライン境界と一致する。他の実施形態では、順次境界は他のアラインされたアドレスで設定される。図4に示すエントリ415は、分岐ターゲットバッファの中のエントリの一例である。エントリ415のいくつかの実施形態は、異なる方法で編成または構造化される異なる分岐予測情報を含む。
【0028】
分岐予測構造は、条件付き分岐予測器ストレージ460と、条件付き予測ロジック465とを含む。条件付き分岐予測器ストレージ460は、分岐命令の結果を予測するために使用される情報を格納する。インデックス410は、アドレス405によって示されたブロックと関連する格納されている情報にアクセスするために条件付き分岐予測器ストレージ460に提供される。いくつかの実施形態では、分岐履歴情報455などの追加の情報は、条件付き分岐予測器ストレージ460に提供される。アドレス405で始まるブロックと関連するアクセスされた情報は、エントリ415からブロックの分岐情報の分岐予測情報も受け取る条件付き予測ロジック465に提供される。条件付き予測ロジック465は、エントリ415及び条件付き分岐予測器ストレージ460からアクセスされた情報を使用して、ブロックの分岐命令の結果を予測する。図示の実施形態では、条件付き予測ロジック465は、第1の分岐命令は成立せず、第2の分岐命令は成立すると予測する。したがって、条件付き予測ロジック465は、第1のブロックの終わりが第2の分岐命令の場所(OFFSET_2)にあり、第2の分岐命令のターゲットアドレスがT_ADDR_2であると予測する。
【0029】
また、分岐予測器ストレージ460のいくつかの実施形態は、1つ以上の分岐が「成立」する場合に剰余ブロックの分岐予測情報を格納するために使用される代替予測ストレージアレイ462を含む。分岐予測情報は、(もしあれば)剰余ブロックの分岐、分岐の予測された条件付き結果、分岐の予測されたターゲット、及び剰余ブロックの終わりの場所を記述する情報、または同情報の類似する表示を含む。代替予測ストレージアレイ462の各予測ブロックと関連する分岐予測情報は、対応する予測ブロック番号に基づいてインデックスを付けられる。代替予測ストレージアレイ462に格納された分岐予測情報は、本明細書に説明するように、予測ミスの場合に分岐予測器を再起動するために使用される。
【0030】
図5は、いくつかの実施形態によって分岐予測構造を再起動するために格納されていた予測情報を使用し、分岐予測ミスから回復する方法500の流れ図である。方法500は、図1に示す処理システム100及び図2に示す処理システムの一部分200のいくつかの実施形態で実装される。
【0031】
ブロック505で、分岐予測器は、予測ブロックと呼ぶ第1のブロックの中の第1の及び第2の分岐の結果を同時に予測する。また、予測ブロックは、昇順で割り当てられる予測ブロック番号を割り当てられ、格納されている予測ブロックの最大数を超えると、ゼロにラップする。方法500は、次いで決定ブロック510に流れる。
【0032】
決定ブロック510で、分岐予測器は、第1の分岐命令が成立すると予測されるのか、それとも第2の分岐命令が成立されると予測されるのかを判断する。例えば、プログラムフローは、第1の分岐命令または第2の分岐命令のターゲットアドレスに分岐すると予測される。そうである場合、方法500は、ブロック515に流れ、剰余ブロック予測が保持される。例えば、第1の分岐命令が成立すると予測される場合、分岐予測器が第1の分岐命令の結果を正しく予測した場合に、たとえプログラムフローが第2の分岐命令に遭遇しなくても、剰余ブロックは、第2の分岐命令の予測された結果を含む。剰余ブロックの分岐予測情報は、代替予測ストレージアレイに書き込まれる。方法500は次いでブロック520に流れる。第1の分岐命令も、第2の分岐命令も成立すると予測されない場合、方法500はブロック520に直接的に流れる。
【0033】
ブロック520で、フェッチユニットは、分岐予測器によって予測された経路に沿って推論的な実行のために命令のフェッチを始めるように命令される。
【0034】
決定ブロック525で、処理システムは、第1のブロックの中の第1の及び第2の分岐命令の結果が誤って予測されたかどうかを判断する。誤って予測されておらず、分岐予測器が、第1の及び第2の分岐命令の結果を正しく予測していた場合、方法500はブロック530に流れ、分岐予測器による第1のブロックの処理が行われる。第1のブロックの中の第1の及び第2の分岐命令の結果のうちの少なくとも1つが誤って予測された場合、方法500は決定ブロック535に流れる。
【0035】
決定ブロック535で、処理システムは、誤って予測された分岐が実際に成立したかどうかを判断する。例えば、分岐予測器は、分岐命令の1つが成立しないであろうと予測し、実際の結果は、分岐命令が成立し、プログラムフローは分岐命令のターゲットアドレスに分岐するとなった。実際に成立しなかった場合、分岐予測器は、結果は、分岐が成立するとなるであろうと予測し、実際の結果は、分岐が成立しないとなる。方法500は、次いでブロック540に流れる。実際に成立した場合には、分岐予測器は、結果は、分岐が成立しなかったとなるであろうと予測し、実際の結果は、分岐は成立するとなる。方法500は、次いでブロック545に流れる。
【0036】
ブロック540で、プログラムフローは、誤って予測された分岐命令にロールバックされる。例えば、分岐予測器が、第1の分岐命令は成立するであろうと予測し、実際の結果は、第1の分岐命令が成立しないとなる場合、プログラムフローは、第1の分岐命令にロールバックされ、フェッチユニットは、予測ブロックの第1の分岐命令に続く次の命令で命令のフェッチを始める。(ブロック515からの)格納されていた剰余ブロックは、誤って予測された分岐の予測ブロック番号を使用し、代替予測ストレージアレイの中から読み出される。分岐予測器は、格納されていた第2の予測された結果のターゲットに基づいて再起動され、これにより、第2の分岐を予測し直す必要がないことによって時間が節約される。剰余ブロック予測は、分岐予測パイプラインの後段に注入されるため、それは通常の仕組みに従って分岐予測をフェッチする、復号する、及び確認する際に使用するためのプロセッサロジックの残りに伝達できる。その結果として、分岐予測器は、第2の分岐命令が成立すると予測される場合、第2の分岐命令のターゲットアドレスでのブロックである次のブロック、または第2の分岐命令が成立しないと予測される場合、第2の分岐命令に後続のブロックで予測を始める。第2の分岐命令に後続であるブロックは、(予測ブロックが2つ以上の分岐命令を含む場合)予測ブロックの追加の分岐命令を含むブロック、または予測ブロックに追加の分岐命令がない場合、予測ブロックに続く次のブロック境界で始まるブロックを含む。
【0037】
ブロック545で、プログラムフローは、誤って予測された分岐命令にロールバックされ、分岐予測と命令フェッチの両方とも、誤って予測された分岐命令の実際のターゲットで始まる。例えば、分岐予測器が、第1の分岐命令が成立しないであろうと予測し、第1の分岐命令の実際の結果が成立する場合、プログラムフローは第1の分岐命令にロールバックされ、フェッチユニットは、第1の分岐命令のターゲットアドレスで命令のフェッチを始める。また、分岐予測器は、ターゲットアドレスで始まるブロックで命令の結果の予測を始める。
【0038】
図6は、いくつかの実施形態によって、「前方予測」分岐予測を実装する処理システムの部分600のブロック図である。処理システムの部分600は、図1に示す処理システム100及び図2に示す処理システムの部分200のいくつかの実施形態を実装するために使用される。処理システムの部分600は、分岐ターゲットバッファメモリ610へのインデックス605として以前のブロックアドレスを使用し、「前方予測」分岐予測を実行して、以前のブロック内の分岐命令の予測された結果と関連するブロックの分岐予測情報にアクセスする。例示の実施形態では、部分600は、ブロックごとに2つの分岐命令の結果を同時に予測する。しかしながら、部分600のいくつかの実施形態は、ブロックごとにより多くの分岐命令の結果を同時に予測する。
【0039】
インデックス605は、以前のブロックの2つの分岐命令の結果と関連付けられる3つのブロックのための分岐ターゲットバッファメモリ610内のエントリにアクセスするために使用される。例えば、第1のブロックの3つの考えられる予測された結果、つまり(1)第1の分岐成立、(2)第1の分岐不成立、及び第2の分岐成立、または(3)第1と第2の分岐両方とも不成立がある。3つの考えられる結果は、インデックス605と関連する3つのブロックに対応する。例えば、ブロック305は、第1の分岐が図3に示すブロック300の分岐命令320で成立することに対応する。ブロック310は、図3に示すブロック300で第1の分岐が分岐命令320で成立せず、第2の分岐が分岐命令325で成立することに対応する。ブロック315は、第1と第2の両方の分岐が、図3に示すブロック300の分岐命令320、325で成立しないことに対応する。
【0040】
分岐ターゲットバッファメモリ610のいくつかの実施形態は、分岐ターゲットバッファエントリへのアソシアティブアクセスを実装する。例えば、分岐ターゲットバッファが、4方向セットアソシアティブである場合、次いで4つのエントリがインデックス605に基づいて分岐ターゲットバッファメモリ610の中から読み出される。分岐ターゲットバッファヒットロジック615の複数のインスタンスは、以前のブロックの分岐命令の結果と関連するブロックのタグを、分岐ターゲットバッファメモリ610の中から読み出されるエントリのタグに比較するために使用される。分岐ターゲットバッファヒットロジック615の各インスタンスは、ブロックの1つのタグを別々に比較して、予測された次の(第2の)ブロック及び2つの代替の次の(第2の)ブロックを識別する。第2のブロックは、条件付き予測ロジック620の対応するインスタンスに提供される。
【0041】
部分600は、分岐命令の結果を予測するために使用される情報を格納する条件付き分岐予測器ストレージ625を含む。インデックス605は、インデックス605に含まれる以前のブロックのアドレスによって示された第2のブロックと関連する格納されている情報にアクセスするために、条件付き分岐予測器ストレージ625に提供される。いくつかの実施形態では、分岐履歴情報630などの追加の情報は、条件付き分岐予測器ストレージ625に提供される。第2のブロックの集合と関連するアクセスした情報は、分岐ターゲットバッファヒットロジック615の複数のインスタンスから対応する第2のブロックの分岐命令の分岐予測情報も受け取る、条件付き予測ロジック620の複数のインスタンスに提供される。条件付き予測ロジック620のインスタンスは、分岐ターゲットバッファヒットロジック615及び条件付き分岐予測器ストレージ625の対応するインスタンスから受け取った情報を使用して、第2のブロックの分岐命令の結果635を予測する。本明細書に説明するように、結果635は、ブロックのそれぞれの分岐命令が成立すると予測されるのか、それとも成立しないと予測されるのか、第2のブロックの終了アドレス、及び分岐が命令成立すると予測される場合にはターゲットアドレスなどの後続の命令のアドレスを示す。
【0042】
分岐予測器ストレージ625のいくつかの実施形態は、予測されたブロック及び代替ブロックの剰余ブロックの分岐予測情報を格納するために使用される代替予測ストレージアレイ627を含む。分岐予測情報は、(もしあれば)剰余ブロックの分岐、分岐の予測された条件付き結果、分岐の予測されたターゲット、及び剰余ブロックの終わりの場所を記述する情報、または同情報の類似する表示を含む。類似した情報は、代替ブロックのために格納される。例えば、代替予測ストレージアレイ627は、分岐(複数可)、分岐(複数可)の予測された条件付き結果(複数可)、分岐(複数可)のターゲット(複数可)、及びブロックの終わりの場所を記述するために使用される情報、または同情報の類似した表示を格納できる。さらに、代替の第2のブロック予測に対応する第1のブロックの結果を示すための表示も格納される。代替予測ストレージアレイ627の分岐予測情報は、対応する予測ブロック番号に基づいてインデックスを付けられる。代替予測ストレージアレイ627に格納された分岐予測情報は、以下に説明するように、予測ミスの場合に分岐予測器を再起動するために使用される。
【0043】
図7は、いくつかの実施形態によって「前方予測」分岐予測中の分岐予測ミスに応えてプログラムフロー及び分岐予測器をロールバックする方法の第1の部分700の流れ図である。方法の第1の部分700は、図1に示す処理システム100及び図2に示す処理システムの部分200のいくつかの実施形態で実装される。
【0044】
ブロック705で、分岐予測器は、第1のブロックの中の第1の及び第2の分岐の結果を同時に予測する。本明細書で説明するように、第1のブロックの中の第1の及び第2の分岐の結果の異なる組み合わせは、異なる宛先第2のブロックに対応する。分岐予測器は、第1の及び第2の分岐の予測された結果に基づいて、「予測された」第2のブロックとして第2のブロックの1つを識別する。他の結果に対応する第2のブロックは、「代替」の第2のブロックとして識別される。方法の部分700は、次いで決定ブロック710に流れる。
【0045】
決定ブロック710で、分岐予測器は、第1の分岐命令が成立すると予測されるのか、それとも第2の分岐命令が成立すると予測されるのかを判断する。例えば、プログラムフローは、第1の分岐命令または第2の分岐命令のターゲットアドレスに分岐すると予測される。そうである場合、方法の部分700はブロック715に流れ、剰余ブロック予測が保持される。例えば、第1の分岐命令が成立すると予測される場合、分岐予測器が第1の分岐命令の結果を正しく予測した場合にたとえプログラムフローが第2の分岐命令に遭遇しなくても、剰余ブロックは、第2の分岐命令の予測された結果を含む。剰余ブロックについての情報は、その予測ブロック番号に対応する代替予測ストレージアレイの中のエントリにその情報を書き込むことによって保持される。方法の部分700は、次いでブロック720に流れる。第1の分岐命令も第2の分岐命令も成立すると予測されない場合、方法の部分700はブロック720に直接的に流れる。
【0046】
ブロック720で、条件付き予測ロジックの複数のインスタンスは、予測された第2のブロック及び代替の第2のブロックのそれぞれの中の第1の及び第2の分岐命令の結果を予測するために使用される。いくつかの実施形態では、条件付き予測ロジックの第1のインスタンスは、予測された第2のブロックの中の第1の及び第2の分岐命令の結果を予測し、第2のインスタンスは、代替の第2のブロックの1つの第1の及び第2の分岐命令の結果を予測し、第3のインスタンスは、代替の第2のブロックのうちの別の1つの第1の及び第2の分岐命令の結果を予測する。しかしながら、他の実施形態では、第2のブロックのいくつかまたはすべては、より多くのまたはより少ない分岐命令を含む。
【0047】
ブロック725で、代替の第2のブロックの分岐命令の結果の予測は、第1の予測ブロックの予測ブロック番号に対応する代替予測ストレージアレイのエントリに情報を書き込むことによって保持される。格納される情報は、分岐(複数可)、分岐(複数可)の予測された条件付き結果(複数可)、分岐のターゲット(複数可)、及び分岐の終わりの場所を記述するために使用される情報、または同情報の類似した表示である。さらに、代替の第2のブロック予測に対応する第1のブロックの結果を示すための表示も格納される。
【0048】
ブロック730で、フェッチユニットは、分岐予測器によって予測された経路に沿って推論的な実行のために命令のフェッチを始めるように命令される。図示の実施形態では、フェッチユニットは、予測された第2のブロックを含む経路に沿って命令のフェッチを始める。
【0049】
決定ブロック730で、処理システムは、第1のブロックの中の第1の及び第2の分岐命令の結果が誤って予測されたかどうかを判断する。誤って予測されず、分岐予測器が第1の及び第2の分岐命令の結果を正しく予測していた場合、方法の部分700はブロック740に流れ、分岐予測器による第1のブロックの処理が行われる。第1のブロックの中の第1の及び第2の分岐命令の結果のうちの少なくとも1つが誤って予測された場合、方法の部分700はノード1に流れる。
【0050】
図8は、いくつかの実施形態によって「前方予測」予測中の分岐予測ミスに応えて、プログラムフローをロールバックし、分岐予測器を再起動する方法の第2の部分800の流れ図である。方法の第2の部分800は、図1に示す処理システム100及び図2に示す処理システムの部分200のいくつかの実施形態で実装される。方法の第2の部分800は、図7に示すノード1に相当するノード1で始まる。
【0051】
ブロック805で、プログラムフローは、第1のブロックの第1の分岐命令または第2の分岐命令のどちらかである場合がある、誤って予測された分岐命令にロールバックされる。
【0052】
決定ブロック810で、処理システムは、誤って予測された分岐が実際に成立したかどうかを判断する。例えば、分岐予測器は、第1のブロックの分岐命令の1つが成立しないであろうと予測し、実際の結果は、分岐命令が成立し、プログラムフローは分岐命令のターゲットアドレスに分岐したということであった。そうではなく、分岐予測器が、結果は、分岐が成立したとなるであろうと予測し、実際の結果は、分岐が成立しないとなる場合、方法の部分800はブロック815に流れる。
【0053】
ブロック815で、(図7のブロック715からの)第1のブロックのために格納されていた剰余ブロックは、誤って予測された分岐の予測ブロック番号を使用し、代替予測ストレージアレイの中から読み出される。剰余ブロック予測は、分岐予測パイプラインの後段に注入されるため、それは通常の仕組みに従って分岐予測をフェッチする、復号する、及び確認する際に使用するためのプロセッサロジックの残りに伝達できる。その結果として、分岐予測器は、例えば、第2の分岐命令が成立すると予測される場合は第2の分岐命令のターゲットアドレスにあるブロック、または第2の分岐命令が成立しないと予測される場合は第2の分岐命令に後続のブロックなどの代替の第2のブロックの1つである次のブロックで予測を始める。第2の分岐命令に後続のブロックは、(第1のブロックが2つ以上の分岐命令を含む場合は)第1のブロックの追加の分岐命令を含むブロック、または第1のブロックに追加の分岐命令がない場合は第1のブロックに続く次のブロック境界で始まるブロックを含む。
【0054】
(決定ブロック810で判断されたように)誤って予測された分岐が実際に成立し、分岐予測器が、結果は、分岐は成立しないとなるであろうと予測し、実際の結果は、分岐は成立するとなる場合、方法の部分800はブロック820に流れる。
【0055】
ブロック820で、第1のブロックから実際に成立する分岐に対応する代替の第2のブロックの分岐命令の結果の予測は、分岐予測パイプラインの後段に(ただし、該当する場合は剰余予測が注入された後のみに)注入されるため、それは通常の仕組みに従って分岐予測をフェッチする、復号する、及び確認する際に使用するためのプロセッサロジックの残りに伝達できる。したがって、分岐予測器は、分岐予測ミスに応えて第2のブロックの予測を繰り返す必要がない。
【0056】
ブロック825で、分岐予測器は、代替の第2のブロックに続くブロックの分岐命令の結果の予測を始める。分岐予測器のいくつかの実施形態は、(分岐命令が成立すると予測される場合)代替の第2のブロックの分岐命令のターゲットアドレス、(代替の第2のブロックに追加の分岐命令がなく、分岐命令が成立しないと予測される場合)代替の第2のブロックの後続の分岐命令のアドレス、または(代替の第2のブロックに追加の分岐命令がなく、分岐命令が成立しないと予測される場合)順に代替の第2のブロックに続くブロックの後続の分岐命令のアドレスに対応するブロックの分岐命令の結果の予測を始める。
【0057】
図7及び図8に示す方法の例示の実施形態を実装する処理システムは、代替の第2のブロックのすべての予測された結果を格納する。他の実施形態では、すべてに満たない予測された結果が格納される。例えば、処理システムは、単一の代替の第2のブロックの予測された結果を格納できる。ストレージのために選ばれる代替の第2のブロックは、代替の第2のブロックがプログラムフローの実際の経路上になる可能性、信頼基準に基づいて、またはすべての場合に第1の代替の第2のブロックを選択するなどの任意の選択基準を使用し、選択される。そのような実施形態での予測ミスの回復で、代替予測ストレージアレイの中の第2のブロックのための代替予測が見つからない場合、分岐予測器は、第2のブロックのターゲットの代わりに第1のブロックのターゲットで再起動される。
【0058】
本明細書に開示するように、方法は、分岐予測器で、命令の第1のブロックの第1の分岐命令の第1の結果を予測することと、フェッチロジックに、第1の予測された結果によって示された第1の経路に沿って推論的な実行のために命令のフェッチを始めるように命令することと、第1の予測された結果が成立することに応えて、第1のブロックの剰余を表す剰余ブロックを格納することと、第1の分岐命令が成立しないことに応えて、剰余ブロックに基づいて分岐予測器を再起動することとを含む。一態様では、第1の分岐の第1の結果を予測することは、命令の第1のブロックの中の第1の分岐命令の第1の結果及び第2の分岐命令の第2の結果を同時に予測することを含む。別の態様では、剰余ブロックを格納することは、第1の予測された結果が成立し、第1の経路が第2の分岐命令を含まないことに応えて、第2の予測された結果を示す情報を含む剰余ブロックを格納することを含む。さらに別の態様では、分岐予測器を再起動することは、第2の予測された結果を示す剰余ブロックの情報に基づいて、分岐予測器を再起動することを含む。
【0059】
別の態様では、分岐予測器を再起動することは、分岐予測器を再起動して、第2の予測された結果が、第2の分岐命令が成立することを示すことに応えて第2の分岐命令のターゲットアドレス、第2の予測された結果が、第2の分岐命令が成立せず、第1のブロックが少なくとも1つの第3の分岐命令を含むことを示すことに応えて第2の分岐命令に後続の命令のアドレス、及び第2の予測された結果が、第2の分岐命令が成立せず、第1のブロックが少なくとも1つの第3の分岐命令を含まないことを示すことに応えて第1のブロックの境界のうちの1つによって識別された第2のブロックでの分岐予測を始めることを含む。さらに別の態様では、第1のブロックは、後続のメモリ境界の前に第2の分岐命令を含まず、剰余ブロックは、第1のブロックが、後続のメモリ境界の前に第2の分岐命令を含まないことを示す情報を含む。さらに別の態様では、分岐予測器を再起動することは、剰余ブロックに示された後続のメモリ境界で分岐予測器を再起動することを含む。別の態様では、インデックスとして第1のブロックのアドレスを使用し、分岐予測構造内の情報にアクセスすること、情報は、第1のブロックからの推論的な経路に沿った第2のブロックの集合に対応するエントリの集合を含む。
【0060】
本明細書に開示するように、装置は、命令の第1のブロックの中の第1の分岐命令の第1の結果を予測するように構成された分岐予測器と、第1の予測された結果によって示された第1の経路に沿って推論的な実行のために命令をフェッチするためのフェッチロジックと、第1の予測された結果が成立することに応えて、第1のブロックの剰余を表す情報を格納するための分岐予測器内の代替予測ストレージアレイとを含み、第1の分岐命令が成立しないことに応えて、分岐予測器は、剰余を表す情報に基づいて再起動される。一態様では、分岐予測器は、命令の第1のブロックの中の第1の分岐命令の第1の結果及び第2の分岐命令の第2の結果を同時に予測するように構成される。別の態様では、代替予測ストレージアレイは、第1の予測された結果が成立し、第1の経路が第2の分岐命令を含まないことに応えて、第2の予測された結果を示す情報を含む剰余ブロックを格納するように構成される。さらに別の態様では、分岐予測器は、第2の予測された結果を示す剰余ブロックの情報に基づいて再起動される。
【0061】
別の態様では、分岐予測器は再起動されて、第2の予測された結果が、第2の分岐命令が成立することを示すことに応えて第2の分岐命令のターゲットアドレス、第2の予測された結果が、第2の分岐命令が成立せず、第1のブロックが少なくとも1つの第3の分岐命令を含むことを示すことに応えて第2の分岐命令に後続の命令のアドレス、及び第2の予測された結果が、第2の分岐命令が成立せず、第1のブロックが少なくとも1つの第3の分岐命令を含まないことを示すことに応えて第1のブロックの境界のうちの1つによって識別された第2のブロックで分岐予測を始める。別の態様では、第1のブロックは、後続のメモリ境界まで第2の分岐命令を含まず、剰余ブロックは、第1のブロックが後続のメモリ境界まで第2の分岐命令を含まないことを示す情報を含む。さらに別の態様では、分岐予測器は、剰余ブロックで示された後続のメモリ境界で再起動するように構成される。さらに別の態様では、装置は、第1のブロックからの推論的な経路に沿った第2のブロックの集合に対応するエントリの集合を格納するように構成された分岐予測構造を含み、分岐予測器は、インデックスとして第1のブロックのアドレスを使用し、分岐予測構造にアクセスするように構成される。
【0062】
本明細書に開示するように、方法は、分岐予測器で、命令の第1のブロックの中の第1の分岐命令の第1の結果を予測することと、分岐予測器内の代替予測ストレージアレイに、第1の結果が成立すると予測されるのか、それとも成立しないと予測されるのかに基づいて剰余ブロックを選択的に格納することであって、剰余ブロックが第1のブロックの剰余を示す、選択的に格納することと、第1の分岐命令が成立すると予測され、第1の分岐命令の実際の結果が不成立であることに応えて、剰余ブロックに基づいて分岐予測器を再起動することとを含む。一態様では、剰余ブロックを選択的に格納することは、第1のブロックの第2の分岐命令の第2の予測された結果を示す情報、及び第1のブロックが、後続のメモリ境界までいずれの分岐命令も含まないことを示す情報のうちの少なくとも1つを格納することを含む。
【0063】
いくつかの実施形態では、上述した装置及び技術は、図1~8に関して上述した処理システムなどの(集積回路パッケージまたはマイクロチップとも呼ぶ)1つ以上の集積回路(IC)デバイスを含むシステムで実装される。電子設計自動化(EDA)及びコンピュータ支援設計(CAD)のソフトウェアツールは、これらのICデバイスの設計及び製作で使用され得る。これらの設計ツールは、通常、1つ以上のソフトウェアプログラムとして表される。1つ以上のソフトウェアプログラムは、1つ以上のICデバイスの回路を表すコードを操作して、回路を製作するように製造システムを設計または適合させるためのプロセスの少なくとも一部分を実行するために、コンピュータシステムを操作するためのコンピュータシステムによって実行可能なコードを含む。このコードは、命令、データ、または命令及びデータの組み合わせを含み得る。設計ツールまたは製作ツールを表すソフトウェア命令は、通常、コンピューティングシステムがアクセス可能なコンピュータ可読記憶媒体に格納される。同様に、ICデバイスの設計または製作の1つ以上の段階を表すコードは、同じコンピュータ可読記憶媒体または異なるコンピュータ可読記憶媒体に格納され、そこからアクセスされ得る。
【0064】
コンピュータ可読記憶媒体は、コンピュータシステムに命令及び/またはデータを提供するために使用中にコンピュータシステムがアクセス可能な任意の非一時的記憶媒体または非一時的記憶媒体の組み合わせを含んでよい。そのような記憶媒体は、光媒体(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ブルーレイディスク)、磁気媒体(例えば、フロッピーディスク、磁気テープ、もしくは磁気ハードドライブ)、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)もしくはキャッシュ)、不揮発性メモリ(例えば、読み取り専用メモリ(ROM)もしくはフラッシュメモリ)、または微小電気機械システム(MEMS)ベースの記憶媒体を含む場合があるが、これに限定されるものではない。コンピュータ可読記憶媒体は、コンピューティングシステム(例えば磁気ハードドライブ)に固定して取り付けられる、コンピューティングシステム(例えば光学ディスクもしくはユニバーサルシリアルバス(USB)ベースのフラッシュメモリ)に着脱可能に取り付けられる、または有線もしくは無線ネットワーク(例えばネットワークアクセス可能ストレージ(NAS))を介してコンピュータシステムに接続されるコンピューティングシステム(例えば、システムRAMもしくはROM)に組み込まれてよい。
【0065】
いくつかの実施形態では、上述の技術の特定の態様は、ソフトウェアを実行する処理システムの1つ以上のプロセッサによって実装されてよい。ソフトウェアは、非一時的コンピュータ可読記憶媒体上に格納またはそれ以外の場合有形で具現される、実行可能命令の1つ以上のセットを含む。ソフトウェアは、1つ以上のプロセッサによる実行時に、1つ以上のプロセッサを操作して上述の技術の1つ以上の態様を実行する命令及び特定のデータを含む場合がある。非一時的コンピュータ可読記憶媒体は、例えば磁気もしくは光ディスク記憶デバイス、フラッシュメモリ、キャッシュ、ランダムアクセスメモリ(RAM)などのソリッドステートストレージデバイス、または他の1つもしくは複数の不揮発性メモリデバイスなどを含む場合がある。非一時的コンピュータ可読記憶媒体に格納された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、または1つ以上のプロセッサによって解釈される、もしくはそれ以外の場合実行可能な他の命令形式であってよい。
【0066】
一般的説明で上述した活動または要素のすべてが必須ではないこと、特定の活動またはデバイスの一部は必要とされない場合があること、及び説明したものに加えて1つ以上の追加の活動が実行され得る、または要素が含まれ得ることに留意されたい。さらに、活動を示す順序は、必ずしも活動を実行する順序ではない。また、概念は、具体的な実施形態に関して説明されている。しかしながら、当業者は、以下の特許請求の範囲に記載される本開示の範囲から逸脱することなく、多様な修正及び変更を行うことができることを理解する。したがって、本明細書及び図は、限定的な意味ではなく、例示的な意味で考えられるべきであり、すべてのそのような修正は、本開示の範囲内に含まれることが意図されている。
【0067】
利点、他の優位点、及び問題の解決策は、具体的な実施形態に関して上述されている。しかしながら、利点、優位点、問題の解決策、及び任意の利点、優位点、もしくは解決策を生じさせるまたはより顕著にするいずれの特徴(複数可)も、いずれかまたはすべての請求項の重大な特徴、必須特徴、または本質的特徴として解釈されるべきではない。さらに、開示した主題は、本明細書の教示の利益を有する当業者にとって明らかな、異なっているが同等な方法で修正及び実践され得るため、上記に開示した特定の実施形態は例示に過ぎない。以下の特許請求の範囲に説明される以外、示されている本明細書の構成または設計の詳細に対して何の限定も意図されていない。したがって、上記に開示した特定の実施形態が改変または修正され得、そのようなすべての変形は開示する主題の範囲内にあると見なされることは明らかである。その結果、本明細書に求められる保護は、以下の特許請求の範囲内に説明する通りである。
図1
図2
図3
図4
図5
図6
図7
図8