(57)【要約】分岐予測器は、命令の第１のブロックの中の第１の分岐の第１の結果を予測する。フェッチロジックは、第１の結果によって示された第１の経路に沿って推論的な実行のために命令をフェッチする。第１のブロックの剰余を表す情報は、第１の予測された結果が成立することに応えて格納される。第１の分岐命令が成立しないことに応えて、分岐予測器は剰余ブロックに基づいて再起動される。いくつかの場合、第１のブロックからの推論的な経路に沿った第２のブロックに対応するエントリは、分岐予測構造へのインデックスとして第１のブロックのアドレスを使用し、アクセスされる。第２のブロックの分岐命令の結果は、分岐条件付きロジックのインスタンスの対応する集合を使用し、同時に予測され、予測された結果は、予測ミスに応えて分岐予測器を再起動するために剰余ブロックと組み合わせて使用される。【選択図】図４
2021527248.tif 000002
【特許請求の範囲】
【請求項１】
分岐予測器で、命令の第１のブロックの第１の分岐命令の第１の結果を予測することと、
フェッチロジックに、前記第１の予測された結果によって示される第１の経路に沿って推論的な実行のために命令のフェッチを始めるように命令することと、
前記第１の予測された結果が成立することに応えて、前記第１のブロックの剰余を表す剰余ブロックを格納することと、
前記第１の分岐命令が成立しないことに応えて、前記剰余ブロックに基づいて前記分岐予測器を再起動することとを含む、方法。
【請求項２】
前記第１の分岐の前記第１の結果を予測することは、命令の前記第１のブロックの中の前記第１の分岐命令の前記第１の結果及び第２の分岐命令の第２の結果を同時に予測することを含む、請求項１に記載の方法。
【請求項３】
前記剰余ブロックを格納することは、前記第１の予測された結果が成立し、前記第１の経路が前記第２の分岐命令を含まないことに応えて、前記第２の予測された結果を示す情報を含む剰余ブロックを格納することを含む、請求項２に記載の方法。
【請求項４】
前記分岐予測器を再起動することは、前記第２の予測された結果を示す前記剰余ブロックの情報に基づいて前記分岐予測器を再起動することを含む、請求項２に記載の方法。
【請求項５】
前記分岐予測器を再起動することは、
前記第２の予測された結果が、前記第２の分岐命令が成立することを示すことに応えて前記第２の分岐命令のターゲットアドレス、
前記第２の予測された結果が、前記第２の分岐命令が成立せず、前記第１のブロックが少なくとも１つの第３の分岐命令を含むことを示すことに応えて前記第２の分岐命令に後続の命令のアドレス、及び
前記第２の予測された結果が、前記第２の分岐命令が成立せず、前記第１のブロックが前記少なくとも１つの第３の分岐命令を含まないことを示すことに応えて前記第１のブロックの境界
のうちの１つによって識別された第２のブロックで分岐予測を始めるために前記分岐予測器を再起動することを含む、請求項２に記載の方法。
【請求項６】
前記第１のブロックは、後続のメモリ境界の前に第２の分岐命令を含まず、前記剰余ブロックは、前記第１のブロックが、前記後続のメモリ境界の前に前記第２の分岐命令を含まないことを示す情報を含む、請求項１に記載の方法。
【請求項７】
前記分岐予測器を再起動することは、前記剰余ブロックに示された前記後続のメモリ境界で前記分岐予測器を再起動することを含む、請求項６に記載の方法。
【請求項８】
インデックスとして前記第１のブロックのアドレスを使用し、分岐予測構造内の情報にアクセスすることであって、前記情報は、前記第１のブロックからの推論的な経路に沿った第２のブロックの集合に対応するエントリの集合を含む、前記アクセスすること
をさらに含む、請求項１に記載の方法。
【請求項９】
命令の第１のブロックの中の第１の分岐命令の第１の結果を予測するように構成された分岐予測器と、
前記第１の予測された結果によって示された第１の経路に沿って推論的な実行のために命令をフェッチするためのフェッチロジックと、
前記第１の予測された結果が成立することに応えて、前記第１のブロックの剰余を表す情報を格納するための前記分岐予測器内の代替予測ストレージアレイと
を備え、
前記第１の分岐命令が成立しないことに応えて、前記分岐予測器は前記剰余を表す前記情報に基づいて再起動される、装置。
【請求項１０】
前記分岐予測器は、命令の前記第１のブロックの中の前記第１の分岐命令の前記第１の結果、及び第２の分岐命令の第２の結果を同時に予測するように構成される、請求項９に記載の装置。
【請求項１１】
前記代替予測ストレージアレイは、前記第１の予測された結果が成立し、前記第１の経路が前記第２の分岐命令を含まないことに応えて、前記第２の予測された結果を示す情報を含む剰余ブロックを格納するように構成される、請求項１０に記載の装置。
【請求項１２】
前記分岐予測器は、前記第２の予測された結果を示す前記剰余ブロック内の前記情報に基づいて再起動される、請求項１０に記載の装置。
【請求項１３】
前記分岐予測器は再起動されて、
前記第２の予測された結果が、前記第２の分岐命令が成立することを示すことに応えて前記第２の分岐命令のターゲットアドレス、
前記第２の予測された結果が、前記第２の分岐命令が成立せず、前記第１のブロックが少なくとも１つの第３の分岐命令を含むことを示すことに応えて前記第２の分岐命令に後続の命令のアドレス、及び
前記第２の予測された結果が、前記第２の分岐命令が成立せず、前記第１のブロックが前記少なくとも１つの第３の分岐命令を含まないことを示すことに応えて前記第１のブロックの境界
のうちの１つによって識別された第２のブロックで分岐予測を始める、請求項１０に記載の装置。
【請求項１４】
前記第１のブロックは、後続のメモリ境界まで第２の分岐命令を含まず、前記剰余ブロックは、前記第１のブロックが後続のメモリ境界まで前記第２の分岐命令を含まないことを示す情報を含む、請求項９に記載の装置。
【請求項１５】
前記分岐予測器は、前記剰余ブロックに示された前記後続のメモリ境界で再起動するように構成される、請求項１４に記載の装置。
【請求項１６】
前記第１のブロックからの推論的な経路に沿った第２のブロックの集合に対応するエントリの集合を格納するように構成された分岐予測構造であって、前記分岐予測器が、インデックスとして前記第１のブロックのアドレスを使用し、前記分岐予測構造にアクセスするように構成される、前記分岐予測構造をさらに備える、請求項９に記載の装置。
【請求項１７】
分岐予測器で、命令の第１のブロックの中の第１の分岐命令の第１の結果を予測することと、
前記分岐予測器内の代替予測ストレージアレイに、前記第１の結果が成立すると予測されるのか、それとも成立しないと予測されるのかに基づいて剰余ブロックを選択的に格納することであって、前記剰余ブロックは前記第１のブロックの剰余を示す、前記選択的に格納することと、
前記第１の分岐命令が成立すると予測され、前記第１の分岐命令の実際の結果が不成立であることに応えて、前記剰余ブロックに基づいて前記分岐予測器を再起動することとを含む、方法。
【請求項１８】
前記剰余ブロックを選択的に格納することは、前記第１のブロックの中の第２の分岐命令の第２の予測された結果を示す情報、及び前記第１のブロックが、後続のメモリ境界までいずれの分岐命令も含まないことを示す情報のうちの少なくとも１つを格納することを含む、請求項１７に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
処理ユニットは分岐予測を使用して、処理ユニットが分岐命令を評価する前に、処理ユニットが予測された分岐に沿って後続の命令を推論的に実行し始めることができるように分岐命令の結果を推測する。処理ユニットは、分岐予測構造の中の情報を使用して分岐命令の結果を予測する。例えば、処理ユニットは、ｉｆ−ｔｈｅｎ−ｅｌｓｅ文及びｃａｓｅ文などのソフトウェア構造体を実装する条件付き分岐命令の結果を予測できる。分岐予測構造の例は、任意の命令へプログラムフローをリダイレクトする間接分岐予測器、処理ユニットで実行中のサブルーチンの復帰アドレスを含む復帰アドレススタック、条件付き分岐の方向（成立または不成立）を予測する条件付き分岐予測器、及び分岐命令の場所、タイプ、及びターゲットアドレスを予測する情報を含む分岐ターゲットバッファを含む。
【０００２】
分岐予測構造のいくつかの実施態様は、予測アルゴリズムの一部として処理ユニット上で以前に実行していたまたは現在実行しているプロセスによって実行される分岐命令の結果の分岐履歴を使用する。例えば、分岐命令が、以前に９０％の確率で第１のアドレスに、及び１０％の確率で第２のアドレスにプログラムフローを向けていた場合、分岐予測構造内の対応するエントリは、分岐命令が第１のアドレスにプログラムフローを向けると予測し、それによってプロセスが、分岐命令の評価を待機することなく、第１のアドレスで始まる分岐に沿って命令を推論的に実行できるようにする。分岐命令の評価時に予測分岐が正しくないと判明すると、間違って予測された分岐に沿った推論的な実行は中断され、処理ユニットの状態は、分岐命令の状態にロールバックされて、正しい分岐に沿って実行を始める。より具体的には、分岐予測ユニットとフェッチユニットの両方ともロールバックされて、分岐の正しいターゲットから、または分岐が成立しなかった場合は分岐後のアドレスから処理する。
【０００３】
本開示は、添付図面を参照することによって、さらによく理解され得、その数多くの特徴及び優位点は当業者に明らかにされ得る。異なる図面における同じ参照記号の使用は、類似項目または同一項目を示す。
【図面の簡単な説明】
【０００４】
【図１】いくつかの実施形態による処理システムのブロック図である。
【図２】いくつかの実施形態によるプロセッサコアを含む処理システムの一部分のブロック図である。
【図３】いくつかの実施形態による、予測ブロック、及び予測ブロックの分岐命令の考えられる異なる結果に対応するブロックの集合のブロック図である。
【図４】いくつかの実施形態による分岐ターゲットバッファ及び分岐予測構造を含む処理システムの一部分のブロック図である。
【図５】いくつかの実施形態によって、分岐予測回復の待ち時間を短縮するために、格納されている予測情報を使用し、分岐予測ミスから回復する方法の流れ図である。
【図６】いくつかの実施形態によって、「前方予測」分岐予測を実装する処理システムの一部分のブロック図である。
【図７】いくつかの実施形態によって「前方予測」分岐予測のための分岐予測回復の待ち時間を短縮するために、格納されている予測情報を使用し、分岐予測ミスから回復する方法の第１の部分の流れ図である。
【図８】いくつかの実施形態によって、「前方予測」分岐予測のための分岐予測回復の待ち時間を短縮するために、格納されている予測情報を使用し、分岐予測ミスから回復する方法の第２の部分の流れ図である。
【発明を実施するための形態】
【０００５】
処理ユニットのいくつかの実施形態は、複数の命令を同時に実行する。例えば、処理ユニットは、１サイクルあたり４〜８の命令を実行できるであろう。したがって、分岐予測器は、分岐命令を含む（本明細書では予測ブロックと呼ぶ）命令ブロック内で複数の分岐命令の結果を同時に予測する。予測ブロックは、以前の分岐命令の境界アドレスまたはターゲットアドレスなどの開始アドレスで始まる。予測ブロックは、後続の境界アドレス（例えば、６４バイトキャッシュライン境界に対応するアドレス）または予測ブロックの第１の成立した分岐命令のアドレスなどの終了アドレスで終了する。分岐予測器が２つの分岐命令の結果を同時の予測するように構成される場合、分岐予測器は、２つの分岐のアドレス、２つの分岐のタイプ、成立した分岐のターゲットアドレス、及び任意の追加の分岐命令が予測ブロックにあるかどうかの表示を格納する（分岐ターゲットバッファ、ＢＴＢなどの）予測構造へのインデックスとして予測ブロックのアドレスを使用する。
【０００６】
分岐予測器は、フェッチロジックに、２つの分岐命令の結果によって予測された経路に沿って命令をフェッチするように命令する。例えば、第１の分岐命令が成立しなかった場合、分岐予測器は、フェッチロジックに、プログラムフローが第２の分岐命令に連続して進むように、第２の分岐命令を含む経路に沿って命令をフェッチするように命令する。分岐予測器は、次いで、フェッチロジックに、第２の分岐命令の予測された結果に基づいて後続の命令をフェッチするように命令する。しかしながら、分岐予測器が、第１の分岐命令が成立すると予測する場合、プログラムは第２の分岐命令に流れず、第２の分岐命令のために生成された予測情報は破棄される。分岐予測器が第１の分岐命令の結果を誤って予測する場合があり、これによって処理ユニットは、分岐命令での状態にロールバックし、次いで第２の分岐命令を含む順次経路に沿って命令を実行する。しかしながら、分岐予測器はもはや第２の分岐予測情報を利用できず、分岐予測器は、第２の分岐命令の予測された結果を再計算しなければならない。第２の分岐命令の予測された結果を再計算すると、分岐予測パイプラインの待ち時間が増加する。
【０００７】
「前方予測」技術では、第１のブロックのアドレスは、分岐予測構造及び分岐予測器ストレージ内の情報にアクセスするためのインデックスとして使用される。情報は、第１のブロックの分岐命令のターゲットである潜在的な後続のブロックの集合に対応するエントリの集合を含む。エントリの１つの部分集合は、分岐予測器が第１のブロックの分岐命令の結果を予測することに応えて集合から選択される。予測された結果は、第２のブロックの分岐命令の分岐予測情報を含むエントリの部分集合に対応する分岐命令を含む第２のブロックを示す。分岐予測器は、エントリの部分集合の情報を使用して、第１のブロックの結果が正しく予測されたかどうかの判断の前に、第２のブロックの分岐命令の結果を予測する。第２のブロックの予測されたアドレスは、第２のブロックの分岐命令の１つの結果として予測されたアドレスで、第３のブロックの分岐命令の結果を予測するために使用される情報へのインデックスとして使用される。第１のブロックのターゲットの分岐結果またはターゲットが誤って予測されると、処理ユニットは第１のブロックの誤って予測された命令の最後での状態にロールバックされ、正しい経路に沿って実行を始める。正しくない予測が、分岐命令が「不成立」であり、実際の分岐結果は「成立」であった場合、正しい経路は、第１のブロックの分岐命令のターゲットである潜在的な後続のブロックの集合の別の１つで始まる。正しくない予測が、分岐命令が「成立」であり、実際の分岐結果は「不成立」であった場合、第２のブロックに移動する前に、第１のブロックの残りの部分が予測され、フェッチされる。したがって、第１のブロックの初期の分岐予測が正しくない場合、処理ユニットは、正しい経路に基づいて分岐予測器をロールバックし、第２のブロックの予測された結果を再計算する必要があり、これにより分岐予測器の待ち時間は増加する。
【０００８】
図１〜９は、第１の分岐命令の第１の結果及び第２の分岐命令の第２の結果を同時に予測することによって分岐予測の待ち時間を短縮するための技術を開示する。分岐予測器は、フェッチロジックに、第１の結果によって示された経路に沿って推論的な実行のために命令のフェッチを始めるように命令する。また、分岐予測器は、本明細書では剰余ブロック予測とも呼ぶ第２の予測された結果も格納する。第２の分岐命令がない場合、剰余ブロック予測は、後続のメモリ境界まで剰余ブロックに追加の分岐がないことを示す情報を格納する。第１の分岐命令の第１の結果の予測ミスに応えて、フェッチユニットは、第１の分岐の正しいターゲットで再起動され、分岐予測器は、格納されていた第２の予測された結果のターゲットに基づいて再起動され、これにより第２の分岐を再予測する必要がないことによって時間が節約される。剰余ブロック予測は、分岐予測パイプラインの後段に投入されるため、それは、通常の仕組みに従って分岐予測をフェッチし、復号し、確認する際に使用するためのプロセッサロジックの残りに伝達できる。さらに、剰余ブロックは、元の分岐予測を実行するために使用されるパイプラインフローの副産物として生成され、格納される。したがって、分岐予測パイプラインは、一次フローと同時に、または予測ミスに応えてのどちらかで、分岐予測器がパイプラインを下る余分な流れを開始する必要なしにロールバックされ、再起動される。
【０００９】
いくつかの実施形態では、第１の及び第２の分岐命令は、第１の及び第２の分岐命令を同時に処理する分岐予測器のインスタンスによって処理される予測ブロック内にある。第２の予測された結果を含む剰余ブロックは、第１の結果が、第２の分岐命令を含まない「成立した」経路に沿った予測を示すことに応えて、格納される。予測ミスに応えて、分岐予測器は、３つのアドレス、つまり（１）第２の結果が、分岐が成立したことを示す場合、第２の分岐命令のターゲットアドレス、（２）第３の分岐命令が予測ブロック内にある場合、予測ブロックの第２の分岐命令に後続の命令のアドレス、及び（３）追加の分岐命令が予測ブロック内にない場合、後続のメモリ境界の１つで分岐予測を始める。分岐予測器のいくつかの実施形態は、第３の分岐命令が予測ブロック内にあるかどうかを示す情報を格納する。フェッチユニットは、この場合、第１の分岐の順次アドレスである、第１の分岐の正しいターゲットで再起動される。
【００１０】
いくつかの実施形態では、分岐予測器は、分岐予測構造及び分岐予測器ストレージ内の情報にアクセスするためのインデックスとして第１のブロックのアドレスを使用する。情報は、潜在的に第１のブロックの分岐命令のターゲットである第２のブロックの集合、または第１のブロックのすべての分岐が、成立しないと予測される場合、第１のブロックに続くブロックに対応するエントリの集合を含む。分岐予測器は、第１のブロックの分岐命令の結果が第２のブロックの１つとなると予測し、処理ユニットは、予測された第２のブロックの命令の実行を始める。しかしながら、予測された第２のブロックの結果だけを予測する分岐予測器条件付きロジックの単一のコピーの代わりに、分岐予測器条件付きロジックの複数のコピーがインスタンス化されて、予測された第２のブロック及び集合の代替の第２のブロック内の分岐命令の結果を同時に予測する。第１のブロックの潜在的な結果ごとに、１つの代替の第２のブロックが存在する。いくつかの実施形態では、各ブロックは最大で２つまでの分岐を保持し、第１のブロックの３つの考えられる予測された結果、つまり（１）第１の分岐成立、（２）第１の分岐不成立、及び第２の分岐成立、または（３）第１と第２の両方の分岐不成立がある。３つの考えられる第２のブロックは、３つの予測された結果に対応する。
【００１１】
第１のブロックのための予測が行われると、３つの考えられる第２のブロックの１つが、予測された第２のブロックとして選ばれ、他の２つは代替予測と見なされる。分岐予測構造のための条件付きロジックの複数のインスタンスは、第１のブロックの予測の決定前に、（予測された、及び代替の）第２のブロックの分岐命令の結果を予測するために、第２のブロックの集合に対応するエントリの集合からの分岐予測情報を使用する。予測された第２のブロックを示す第１のブロックの分岐命令の予測された結果に応えて、予測された第２のブロックのアドレスは、第３のブロックのための分岐予測器ストレージ内の分岐予測構造へのインデックスとして使用される。また、分岐予測器は、第２のブロックのための代替予測も格納する。第１のブロックの結果の予測ミスが実行ユニットによって発見されることに応えて、フェッチユニットは第１のブロックの正しいターゲットで再起動され、分岐予測器は、格納されている代替の第２のブロックの予測された結果のターゲットに基づいて再起動され、これにより、剰余の第１のブロック予測及び第２のブロック予測を予測し直す必要がないことによって時間が節約される。剰余の第１のブロック予測（該当する場合）及び第２のブロック予測は分岐予測パイプラインの後段に注入されるため、それらは、通常の仕組みに従って分岐予測をフェッチする、復号する、及び確認する際に使用するためのプロセッサロジックの残りに伝達できる。第１のブロックは、それが成立したと予測されたが、成立しなかったと実行時に判断された場合、剰余ブロック予測を有する。
【００１２】
図１は、いくつかの実施形態による処理システム１００のブロック図である。処理システム１００は、メモリ１０５、またはダイナミックランダムアクセスメモリ（ＤＲＡＭ）などの非一時的コンピュータ可読媒体を使用し、実装される他のストレージ構成要素を含む、またはそれらにアクセスできる。しかしながら、いくつかの場合、メモリ１０５は、スタティックランダムアクセスメモリ（ＳＲＡＭ）、不揮発性ＲＡＭなどを含む他のタイプのメモリを使用し、実装される。メモリ１０５は、それが処理システム１００で実装された処理ユニットにとって外部で実装されるので、外部メモリと呼ばれる。また、処理システム１００は、メモリ１０５などの処理システム１００の中に実装されたエンティティ間の通信をサポートするためにバス１１０も含む。処理システム１００のいくつかの実施態様は、明確にするために図１に図示しない他のバス、ブリッジ、スイッチ、ルータなどを含む。
【００１３】
処理システム１００は、ディスプレイ１２０上での提示のために画像をレンダリングするグラフィックスプロセッシングユニット（ＧＰＵ）１１５を含む。例えば、ＧＰＵ１１５はオブジェクトをレンダリングして、ディスプレイ１２０に提供されるピクセル値を生成し、ディスプレイ１２０はピクセル値を使用して、レンダリングしたオブジェクトを表す画像を表示する。ＧＰＵ１１５は、命令を同時にまたは並行して実行する複数のプロセッサコア１２１、１２２、１２３（本明細書では集合的に「プロセッサコア１２１〜１２３」と呼ぶ）を実装する。ＧＰＵ１１５で実装されるプロセッサコア１２１〜１２３の数は、設計の選択の問題である。ＧＰＵ１１５のいくつかの実施形態は、汎用コンピューティングのために使用される。ＧＰＵ１１５は、メモリ１０５に格納されたプログラムコード１２５などの命令を実行し、ＧＰＵ１１５は、実行した命令の結果などの情報をメモリ１０５に格納する。
【００１４】
また、処理システム１００は、バス１１０に接続される中央演算処理装置（ＣＰＵ）１３０も含むため、バス１１０を介してＧＰＵ１１５及びメモリ１０５と通信する。ＣＰＵ１３０は、命令を同時にまたは並行して実行する複数のプロセッサコア１３１、１３２、１３３（本明細書では集合的に「プロセッサコア１３１〜１３３」と呼ぶ）を実装する。ＣＰＵ１３０に実装されるプロセッサコア１３１〜１３３の数は、設計の選択の問題である。プロセッサコア１３１〜１３３は、メモリ１０５に格納されたプログラムコード１３５などの命令を実行し、ＣＰＵ１３０は、実行した命令の結果などの情報をメモリ１０５に格納する。また、ＣＰＵ１３０は、ＧＰＵ１１５に描画コールを発行することによって図形処理を開始できる。ＣＰＵ１３０のいくつかの実施形態は、同時にまたは並列で命令を実行する（明確にするために図１では図示しない）複数のプロセッサコアを実装する。
【００１５】
入出力（Ｉ／Ｏ）エンジン１４５は、ディスプレイ１２０、及びキーボード、マウス、プリンタ、外部ディスクなどの処理システム１００の他の要素と関連する入力または出力の動作を処理する。Ｉ／Ｏエンジン１４５は、Ｉ／Ｏエンジン１４５がメモリ１０５、ＧＰＵ１１５、またはＣＰＵ１３０と通信できるようにバス１１０に結合される。図示する実施形態では、Ｉ／Ｏエンジン１４５は、コンパクトディスク（ＣＤ）、デジタルビデオディスク（ＤＶＤ）などの非一時的コンピュータ可読媒体を使用し、実装される外部ストレージ構成要素１５０に格納された情報を読み取る。また、Ｉ／Ｏエンジン１４５は、ＧＰＵ１１５またはＣＰＵ１３０による処理の結果などの情報を外部ストレージ構成要素１５０に書き込むこともできる。
【００１６】
図２は、いくつかの実施形態によるプロセッサコア２０５を含む処理システムの一部分２００のブロック図である。プロセッサコア２０５は、図１に示すプロセッサコア１２１〜１２３、１３１〜１３３のいくつかの実施形態を実装するために使用される。また、処理システムの一部分２００は、図１に示すメモリ１０５のいくつかの実施形態を実装するために使用されるメモリ２１０も含む。プロセッサコア２００は、条件付き分岐予測器ストレージ及び条件付き分岐予測ロジックを含む分岐予測ユニット２１５を含む。以下に詳細に説明するように、条件付き分岐予測器ストレージは、メモリ２１０内の場所のアドレスを格納し、条件付き分岐予測ロジックは、分岐命令の結果を予測する。また、メモリ２１０に格納された情報の一部のコピーは、キャッシュ２２０にも格納される。例えば、頻繁にアクセスされる命令は、キャッシュ２２０のキャッシュラインまたはキャッシュブロックに格納される。
【００１７】
フェッチユニット２２５は、分岐予測ユニット２１５から受け取ったアドレスに基づいて、メモリ２１０またはキャッシュ２２０から命令などの情報をフェッチする。フェッチユニット２２５は、キャッシュ２２０またはメモリ２１０から命令を表すバイトを読み取り、復号ユニット２３０に命令を送信する。復号ユニット２３０は、命令バイトを調べ、命令の機能を決定する。復号ユニット２３０は、プロセッサコア２０５によって実行される一連の演算を生成するために命令を変換する（つまり、復号する）。これらの演算は、スケジューラ２３５に書き込まれる。スケジューラ２３５は、演算のためのソース値がいつ準備できるのかを決定し、演算を実行するために、本明細書では集合的に「実行ユニット２３１〜２３３」と呼ぶ１つ以上の実行ユニット２３１、２３２、２３３にソース値を送信する。結果は、レジスタファイル２４０に書き戻される。
【００１８】
分岐予測ユニット２１５のいくつかの実施形態は、現在のプロセスまたはプロセッサコア２０５で以前に実行されたプロセスによって以前に実行されたことがある分岐命令と関連するエントリを含む。分岐予測ユニット２１５の各エントリに格納された分岐予測情報は、分岐命令がプログラムフローを命令のアドレスに向ける可能性を示す。分岐予測ユニット２１５のエントリは、対応する分岐命令のアドレスに基づいてアクセスされる。例えば、分岐命令の物理アドレス、仮想アドレス、またはキャッシュラインアドレスを表すビット（またはその部分集合）の値は、分岐予測ユニット２１５へのインデックスとして使用される。別の例の場合、ビット（またはその部分集合）のハッシュ値は、分岐予測ユニット２１５へのインデックスとして使用される。分岐予測構造の例は、間接分岐予測器、復帰アドレススタック、分岐ターゲットバッファ、条件付き分岐予測器、分岐履歴、または分岐予測情報を格納するために使用される任意の他の予測器構造を含む。
【００１９】
スケジューラ２３５は、プロセッサコア２０５による命令の実行を予定する。スケジューラ２３５のいくつかの実施形態は、プログラムフローを、分岐命令によって示されるメモリ２１０（または関連キャッシュ２２０）内のアドレスにある命令にリダイレクトする分岐命令に続いて命令の推論的な実行を行う。分岐命令は、条件が真であるのか、それとも偽であるのかに応じてプログラムフローをアドレスにリダイレクトする条件付き分岐命令を含む。例えば、条件付き分岐命令は、ｉｆ−ｔｈｅｎ−ｅｌｓｅ文またはｃａｓｅ文などのソフトウェア構造体を実装するために使用される。また、分岐命令は、プログラムフローを、命令によって示されるアドレスにつねにリダイレクトする無条件分岐命令も含む。例えば、ＪＭＰ命令は、命令によって示されるアドレスにつねにジャンプする。いくつかの場合、ターゲットアドレスはレジスタまたはメモリ場所で提供されるため、分岐が実行されるたびにターゲットは異なる場合がある。そのような分岐を間接分岐と呼ぶ。
【００２０】
スケジューラ２３５のいくつかの実施形態は、返された分岐予測情報を使用して、分岐命令の宛先アドレスを予測する。プロセッサコア２０５は、次いで宛先アドレスにある命令、及びプログラムフローの予測された分岐に沿った後続の命令を推論的に実行できる。予測された分岐が、分岐命令評価時に正しくないと判明すると、間違って予測された分岐に沿った推論的な実行は中断され、プロセッサコア２０５の状態は、分岐命令の状態にロールバックされて、正しい分岐に沿って実行を始める。
【００２１】
分岐予測ユニット２１５の条件付き予測ロジックは、予測ブロック内の分岐命令の結果を同時に予測する。いくつかの実施形態では、分岐予測ユニット２１５は、命令の第１のブロックの中の第１の及び第２の分岐の第１の及び第２の結果を同時に予測する。フェッチユニット２２５は、第１の結果によって示された第１の経路に沿って推論的な実行のために命令をフェッチする。分岐予測ユニット２１５が、第１の分岐命令が成立すると予測すると、その場合プログラムフローは第２の分岐命令に遭遇せず、第２の分岐命令のための予測された結果は通常破棄される。しかしながら、図示の実施形態では、第２の結果は第１の結果が成立することに応えて、分岐予測ユニット２１５の代替予測ストレージアレイに格納される。分岐予測ユニット２１５による予測ミス、すなわち分岐予測ユニット２１５が、第１の分岐命令が成立するであろうと予測したが、実際の結果は、第１の分岐命令が成立しなかったとなったことに応えて、分岐予測ユニット２１５は、格納されていた第２の予測された結果に基づいて再起動される。いくつかの実施形態では、分岐予測ユニット２１５の条件付き分岐ロジックは、条件付き分岐予測器ストレージへのインデックスとして第１のブロックのアドレスを使用し、第１の分岐命令または第２の分岐命令からの推論的な経路に沿った第２のブロックに対応する条件付き分岐予測器ストレージのエントリにアクセスする。分岐予測ユニット２１５は、次いで条件付き分岐予測ロジックのインスタンスの対応する集合を使用し、第２のブロックの集合の分岐命令の結果を同時に予測する。第２のブロックの代替予測は、分岐予測ユニット２１５の代替予測ストレージアレイに格納され、以下に詳細に説明するように、予測ミスに応えて分岐予測ユニット２１５を再起動するために使用される。
【００２２】
図３は、いくつかの実施形態による、予測ブロック３００、及び予測ブロック３００の分岐命令の異なる考えられる結果に対応するブロック３０５、３１０、３１５の集合のブロック図である。予測ブロック３００は、分岐命令３２０、３２５及び命令３３０、３３５を含む。予測ブロック３００のいくつかの実施形態は、追加の分岐命令（明確にするために、図３では図示せず）を含む。ブロック３０５、３１０、３１５は、それぞれ命令３４０、３４５、３５０、３５５、３６０、３６５を含む。ブロック３０５は、分岐命令３２０のターゲットである第１のアドレスによって識別され、ブロック３１０は、分岐命令３２５のターゲットである第２のアドレスによって識別され、ブロック３１５は、分岐命令３２５の後続の第３のアドレスによって識別される。図示の実施形態では、第３のアドレスは、命令３６０などのブロック３００、３１５間のキャッシュライン境界などの境界での後続の命令用である。他の実施形態では、第３のアドレスは、命令３３５などのブロック３００の後続の命令用である。
【００２３】
図２に示す分岐予測ユニット２１５などの分岐予測構造は、予測ブロック内の複数の分岐命令の結果を同時に予測する。図示の実施形態では、分岐予測構造は、分岐命令３２０及び分岐命令３２５の結果を同時に予測する。分岐命令３２０の考えられる結果は「成立」であり、その場合、プログラムフローは、ブロック３０５の命令３４０のターゲットアドレスに分岐する、または「不成立」であり、その場合プログラムフローは、予測ブロック３００の命令３３０に連続して続行する。分岐命令３２５の考えられる結果は、「成立」であり、その場合プログラムフローはブロック３１０の命令３５０のターゲットアドレスに分岐する、または「不成立」であり、その場合、プログラムフローは予測ブロック３００の命令３３５に連続して続行する。
【００２４】
分岐３２５の予測された結果は、例えば、図２に示す分岐予測ユニット２１５に実装されるアレイなどの代替予測ストレージアレイに格納される。分岐予測構造のいくつかの実施形態は、分岐命令３２０の予測された結果が成立であることに応えて予測された結果を格納する。その場合、推論的な実行は、ブロック３０５の命令３４０に分岐し、プログラムフローは分岐命令３２５に遭遇しない。しかしながら、予測された結果が誤って予測される場合、命令のフェッチは誤って予測された分岐命令３２０にロールバックされ、分岐予測器は、分岐命令３２５の格納されていた予測された結果を使用し、再起動される。したがって、分岐予測器は分岐命令３２５の結果を予測し直すことを必要とされないため、予測ミスから回復するために必要とされる遅延時間は短縮される。
【００２５】
ブロック３０５、３１０、３１５の命令３４０、３４５、３５０、３５５、３６０、３６５は、１つ以上の分岐命令を含む場合がある。いくつかの実施形態では、条件付き予測ロジックの複数のインスタンスは、ブロック３０５、３１０、３１５の分岐命令の結果を同時に予測するために使用される。例えば、ブロック３００のアドレスは、ブロック３０５、３１０、３１５の予測情報などの条件付き分岐予測器ストレージ内の情報にアクセスするために使用できる。条件付き予測ロジックの複数のインスタンスは、アクセスした情報を使用して、ブロック３０５、３１０、３１５の分岐命令の結果を予測する。以下で詳細に説明するように、推論的な実行は、ブロック３０５、３１０、３１５の予測された１つを含む経路に沿って進み、他のブロック３０５、３１０、３１５の分岐命令の予測された結果は格納される。以下に詳細に説明するように、分岐命令３２０、３２５の１つ以上の予測ミスに応えて、条件付き予測ロジックを再起動するために、格納されていた結果が使用される。
【００２６】
図４は、いくつかの実施形態による、分岐ターゲットバッファ及び条件付き分岐予測器を含む、分岐予測ユニット２１５の一部分のブロック図である。アドレス４０５は、命令のブロックの開始アドレスを示す。分岐ターゲットバッファのエントリは、エントリと関連付けられたブロックの開始アドレスでインデックスを付けられる。図示の実施形態では、ブロックの分岐命令の分岐予測情報を含む分岐ターゲットバッファのエントリ４１５に対するインデックス４１０は、アドレス４０５に等しい値を含む。したがって、インデックス４１０は、分岐ターゲットバッファのエントリ４１５にアクセスするために使用される。例えば、図３に示すブロック３００のアドレスは、ブロック３００の分岐３２０、３２５に対応する分岐ターゲットバッファのエントリへのインデックスとして使用される。
【００２７】
エントリ４１５は、２つの分岐命令の分岐予測情報を含む。例えば、エントリ４１５は、アドレス４０５に対する第１の分岐命令の場所を示すオフセット４２０と、アドレス４０５に対する第２の分岐命令の場所を示すオフセット４２５とを含む。また、エントリは、第１の及び第２の分岐命令のタイプ４３０、４４０、ならびに第１の及び第２の分岐命令のターゲットアドレス４３５、４４５を識別する情報も含む。第１の分岐命令が成立する場合、プログラムフローは第１の分岐命令からターゲットアドレス４３５に分岐する。それ以外の場合、プログラムフローは、それが第２の分岐命令に到達するまでブロックの命令で連続して続行する。第２の分岐命令が成立する場合、プログラムフローは第２の分岐命令からターゲットアドレス４４５に分岐し、そうではない場合、プログラムフローはブロックの命令で連続して続行する。オーバフローインジケータ４５０は、次の順次境界の前に追加の分岐命令があるかどうかを示す。いくつかの実施形態では、順次境界は、命令キャッシュライン境界と一致する。いくつかの実施形態では、順次境界は、命令キャッシュライン境界と一致する。他の実施形態では、順次境界は他のアラインされたアドレスで設定される。図４に示すエントリ４１５は、分岐ターゲットバッファの中のエントリの一例である。エントリ４１５のいくつかの実施形態は、異なる方法で編成または構造化される異なる分岐予測情報を含む。
【００２８】
分岐予測構造は、条件付き分岐予測器ストレージ４６０と、条件付き予測ロジック４６５とを含む。条件付き分岐予測器ストレージ４６０は、分岐命令の結果を予測するために使用される情報を格納する。インデックス４１０は、アドレス４０５によって示されたブロックと関連する格納されている情報にアクセスするために条件付き分岐予測器ストレージ４６０に提供される。いくつかの実施形態では、分岐履歴情報４５５などの追加の情報は、条件付き分岐予測器ストレージ４６０に提供される。アドレス４０５で始まるブロックと関連するアクセスされた情報は、エントリ４１５からブロックの分岐情報の分岐予測情報も受け取る条件付き予測ロジック４６５に提供される。条件付き予測ロジック４６５は、エントリ４１５及び条件付き分岐予測器ストレージ４６０からアクセスされた情報を使用して、ブロックの分岐命令の結果を予測する。図示の実施形態では、条件付き予測ロジック４６５は、第１の分岐命令は成立せず、第２の分岐命令は成立すると予測する。したがって、条件付き予測ロジック４６５は、第１のブロックの終わりが第２の分岐命令の場所（ＯＦＦＳＥＴ＿２）にあり、第２の分岐命令のターゲットアドレスがＴ＿ＡＤＤＲ＿２であると予測する。
【００２９】
また、分岐予測器ストレージ４６０のいくつかの実施形態は、１つ以上の分岐が「成立」する場合に剰余ブロックの分岐予測情報を格納するために使用される代替予測ストレージアレイ４６２を含む。分岐予測情報は、（もしあれば）剰余ブロックの分岐、分岐の予測された条件付き結果、分岐の予測されたターゲット、及び剰余ブロックの終わりの場所を記述する情報、または同情報の類似する表示を含む。代替予測ストレージアレイ４６２の各予測ブロックと関連する分岐予測情報は、対応する予測ブロック番号に基づいてインデックスを付けられる。代替予測ストレージアレイ４６２に格納された分岐予測情報は、本明細書に説明するように、予測ミスの場合に分岐予測器を再起動するために使用される。
【００３０】
図５は、いくつかの実施形態によって分岐予測構造を再起動するために格納されていた予測情報を使用し、分岐予測ミスから回復する方法５００の流れ図である。方法５００は、図１に示す処理システム１００及び図２に示す処理システムの一部分２００のいくつかの実施形態で実装される。
【００３１】
ブロック５０５で、分岐予測器は、予測ブロックと呼ぶ第１のブロックの中の第１の及び第２の分岐の結果を同時に予測する。また、予測ブロックは、昇順で割り当てられる予測ブロック番号を割り当てられ、格納されている予測ブロックの最大数を超えると、ゼロにラップする。方法５００は、次いで決定ブロック５１０に流れる。
【００３２】
決定ブロック５１０で、分岐予測器は、第１の分岐命令が成立すると予測されるのか、それとも第２の分岐命令が成立されると予測されるのかを判断する。例えば、プログラムフローは、第１の分岐命令または第２の分岐命令のターゲットアドレスに分岐すると予測される。そうである場合、方法５００は、ブロック５１５に流れ、剰余ブロック予測が保持される。例えば、第１の分岐命令が成立すると予測される場合、分岐予測器が第１の分岐命令の結果を正しく予測した場合に、たとえプログラムフローが第２の分岐命令に遭遇しなくても、剰余ブロックは、第２の分岐命令の予測された結果を含む。剰余ブロックの分岐予測情報は、代替予測ストレージアレイに書き込まれる。方法５００は次いでブロック５２０に流れる。第１の分岐命令も、第２の分岐命令も成立すると予測されない場合、方法５００はブロック５２０に直接的に流れる。
【００３３】
ブロック５２０で、フェッチユニットは、分岐予測器によって予測された経路に沿って推論的な実行のために命令のフェッチを始めるように命令される。
【００３４】
決定ブロック５２５で、処理システムは、第１のブロックの中の第１の及び第２の分岐命令の結果が誤って予測されたかどうかを判断する。誤って予測されておらず、分岐予測器が、第１の及び第２の分岐命令の結果を正しく予測していた場合、方法５００はブロック５３０に流れ、分岐予測器による第１のブロックの処理が行われる。第１のブロックの中の第１の及び第２の分岐命令の結果のうちの少なくとも１つが誤って予測された場合、方法５００は決定ブロック５３５に流れる。
【００３５】
決定ブロック５３５で、処理システムは、誤って予測された分岐が実際に成立したかどうかを判断する。例えば、分岐予測器は、分岐命令の１つが成立しないであろうと予測し、実際の結果は、分岐命令が成立し、プログラムフローは分岐命令のターゲットアドレスに分岐するとなった。実際に成立しなかった場合、分岐予測器は、結果は、分岐が成立するとなるであろうと予測し、実際の結果は、分岐が成立しないとなる。方法５００は、次いでブロック５４０に流れる。実際に成立した場合には、分岐予測器は、結果は、分岐が成立しなかったとなるであろうと予測し、実際の結果は、分岐は成立するとなる。方法５００は、次いでブロック５４５に流れる。
【００３６】
ブロック５４０で、プログラムフローは、誤って予測された分岐命令にロールバックされる。例えば、分岐予測器が、第１の分岐命令は成立するであろうと予測し、実際の結果は、第１の分岐命令が成立しないとなる場合、プログラムフローは、第１の分岐命令にロールバックされ、フェッチユニットは、予測ブロックの第１の分岐命令に続く次の命令で命令のフェッチを始める。（ブロック５１５からの）格納されていた剰余ブロックは、誤って予測された分岐の予測ブロック番号を使用し、代替予測ストレージアレイの中から読み出される。分岐予測器は、格納されていた第２の予測された結果のターゲットに基づいて再起動され、これにより、第２の分岐を予測し直す必要がないことによって時間が節約される。剰余ブロック予測は、分岐予測パイプラインの後段に注入されるため、それは通常の仕組みに従って分岐予測をフェッチする、復号する、及び確認する際に使用するためのプロセッサロジックの残りに伝達できる。その結果として、分岐予測器は、第２の分岐命令が成立すると予測される場合、第２の分岐命令のターゲットアドレスでのブロックである次のブロック、または第２の分岐命令が成立しないと予測される場合、第２の分岐命令に後続のブロックで予測を始める。第２の分岐命令に後続であるブロックは、（予測ブロックが２つ以上の分岐命令を含む場合）予測ブロックの追加の分岐命令を含むブロック、または予測ブロックに追加の分岐命令がない場合、予測ブロックに続く次のブロック境界で始まるブロックを含む。
【００３７】
ブロック５４５で、プログラムフローは、誤って予測された分岐命令にロールバックされ、分岐予測と命令フェッチの両方とも、誤って予測された分岐命令の実際のターゲットで始まる。例えば、分岐予測器が、第１の分岐命令が成立しないであろうと予測し、第１の分岐命令の実際の結果が成立する場合、プログラムフローは第１の分岐命令にロールバックされ、フェッチユニットは、第１の分岐命令のターゲットアドレスで命令のフェッチを始める。また、分岐予測器は、ターゲットアドレスで始まるブロックで命令の結果の予測を始める。
【００３８】
図６は、いくつかの実施形態によって、「前方予測」分岐予測を実装する処理システムの部分６００のブロック図である。処理システムの部分６００は、図１に示す処理システム１００及び図２に示す処理システムの部分２００のいくつかの実施形態を実装するために使用される。処理システムの部分６００は、分岐ターゲットバッファメモリ６１０へのインデックス６０５として以前のブロックアドレスを使用し、「前方予測」分岐予測を実行して、以前のブロック内の分岐命令の予測された結果と関連するブロックの分岐予測情報にアクセスする。例示の実施形態では、部分６００は、ブロックごとに２つの分岐命令の結果を同時に予測する。しかしながら、部分６００のいくつかの実施形態は、ブロックごとにより多くの分岐命令の結果を同時に予測する。
【００３９】
インデックス６０５は、以前のブロックの２つの分岐命令の結果と関連付けられる３つのブロックのための分岐ターゲットバッファメモリ６１０内のエントリにアクセスするために使用される。例えば、第１のブロックの３つの考えられる予測された結果、つまり（１）第１の分岐成立、（２）第１の分岐不成立、及び第２の分岐成立、または（３）第１と第２の分岐両方とも不成立がある。３つの考えられる結果は、インデックス６０５と関連する３つのブロックに対応する。例えば、ブロック３０５は、第１の分岐が図３に示すブロック３００の分岐命令３２０で成立することに対応する。ブロック３１０は、図３に示すブロック３００で第１の分岐が分岐命令３２０で成立せず、第２の分岐が分岐命令３２５で成立することに対応する。ブロック３１５は、第１と第２の両方の分岐が、図３に示すブロック３００の分岐命令３２０、３２５で成立しないことに対応する。
【００４０】
分岐ターゲットバッファメモリ６１０のいくつかの実施形態は、分岐ターゲットバッファエントリへのアソシアティブアクセスを実装する。例えば、分岐ターゲットバッファが、４方向セットアソシアティブである場合、次いで４つのエントリがインデックス６０５に基づいて分岐ターゲットバッファメモリ６１０の中から読み出される。分岐ターゲットバッファヒットロジック６１５の複数のインスタンスは、以前のブロックの分岐命令の結果と関連するブロックのタグを、分岐ターゲットバッファメモリ６１０の中から読み出されるエントリのタグに比較するために使用される。分岐ターゲットバッファヒットロジック６１５の各インスタンスは、ブロックの１つのタグを別々に比較して、予測された次の（第２の）ブロック及び２つの代替の次の（第２の）ブロックを識別する。第２のブロックは、条件付き予測ロジック６２０の対応するインスタンスに提供される。
【００４１】
部分６００は、分岐命令の結果を予測するために使用される情報を格納する条件付き分岐予測器ストレージ６２５を含む。インデックス６０５は、インデックス６０５に含まれる以前のブロックのアドレスによって示された第２のブロックと関連する格納されている情報にアクセスするために、条件付き分岐予測器ストレージ６２５に提供される。いくつかの実施形態では、分岐履歴情報６３０などの追加の情報は、条件付き分岐予測器ストレージ６２５に提供される。第２のブロックの集合と関連するアクセスした情報は、分岐ターゲットバッファヒットロジック６１５の複数のインスタンスから対応する第２のブロックの分岐命令の分岐予測情報も受け取る、条件付き予測ロジック６２０の複数のインスタンスに提供される。条件付き予測ロジック６２０のインスタンスは、分岐ターゲットバッファヒットロジック６１５及び条件付き分岐予測器ストレージ６２５の対応するインスタンスから受け取った情報を使用して、第２のブロックの分岐命令の結果６３５を予測する。本明細書に説明するように、結果６３５は、ブロックのそれぞれの分岐命令が成立すると予測されるのか、それとも成立しないと予測されるのか、第２のブロックの終了アドレス、及び分岐が命令成立すると予測される場合にはターゲットアドレスなどの後続の命令のアドレスを示す。
【００４２】
分岐予測器ストレージ６２５のいくつかの実施形態は、予測されたブロック及び代替ブロックの剰余ブロックの分岐予測情報を格納するために使用される代替予測ストレージアレイ６２７を含む。分岐予測情報は、（もしあれば）剰余ブロックの分岐、分岐の予測された条件付き結果、分岐の予測されたターゲット、及び剰余ブロックの終わりの場所を記述する情報、または同情報の類似する表示を含む。類似した情報は、代替ブロックのために格納される。例えば、代替予測ストレージアレイ６２７は、分岐（複数可）、分岐（複数可）の予測された条件付き結果（複数可）、分岐（複数可）のターゲット（複数可）、及びブロックの終わりの場所を記述するために使用される情報、または同情報の類似した表示を格納できる。さらに、代替の第２のブロック予測に対応する第１のブロックの結果を示すための表示も格納される。代替予測ストレージアレイ６２７の分岐予測情報は、対応する予測ブロック番号に基づいてインデックスを付けられる。代替予測ストレージアレイ６２７に格納された分岐予測情報は、以下に説明するように、予測ミスの場合に分岐予測器を再起動するために使用される。
【００４３】
図７は、いくつかの実施形態によって「前方予測」分岐予測中の分岐予測ミスに応えてプログラムフロー及び分岐予測器をロールバックする方法の第１の部分７００の流れ図である。方法の第１の部分７００は、図１に示す処理システム１００及び図２に示す処理システムの部分２００のいくつかの実施形態で実装される。
【００４４】
ブロック７０５で、分岐予測器は、第１のブロックの中の第１の及び第２の分岐の結果を同時に予測する。本明細書で説明するように、第１のブロックの中の第１の及び第２の分岐の結果の異なる組み合わせは、異なる宛先第２のブロックに対応する。分岐予測器は、第１の及び第２の分岐の予測された結果に基づいて、「予測された」第２のブロックとして第２のブロックの１つを識別する。他の結果に対応する第２のブロックは、「代替」の第２のブロックとして識別される。方法の部分７００は、次いで決定ブロック７１０に流れる。
【００４５】
決定ブロック７１０で、分岐予測器は、第１の分岐命令が成立すると予測されるのか、それとも第２の分岐命令が成立すると予測されるのかを判断する。例えば、プログラムフローは、第１の分岐命令または第２の分岐命令のターゲットアドレスに分岐すると予測される。そうである場合、方法の部分７００はブロック７１５に流れ、剰余ブロック予測が保持される。例えば、第１の分岐命令が成立すると予測される場合、分岐予測器が第１の分岐命令の結果を正しく予測した場合にたとえプログラムフローが第２の分岐命令に遭遇しなくても、剰余ブロックは、第２の分岐命令の予測された結果を含む。剰余ブロックについての情報は、その予測ブロック番号に対応する代替予測ストレージアレイの中のエントリにその情報を書き込むことによって保持される。方法の部分７００は、次いでブロック７２０に流れる。第１の分岐命令も第２の分岐命令も成立すると予測されない場合、方法の部分７００はブロック７２０に直接的に流れる。
【００４６】
ブロック７２０で、条件付き予測ロジックの複数のインスタンスは、予測された第２のブロック及び代替の第２のブロックのそれぞれの中の第１の及び第２の分岐命令の結果を予測するために使用される。いくつかの実施形態では、条件付き予測ロジックの第１のインスタンスは、予測された第２のブロックの中の第１の及び第２の分岐命令の結果を予測し、第２のインスタンスは、代替の第２のブロックの１つの第１の及び第２の分岐命令の結果を予測し、第３のインスタンスは、代替の第２のブロックのうちの別の１つの第１の及び第２の分岐命令の結果を予測する。しかしながら、他の実施形態では、第２のブロックのいくつかまたはすべては、より多くのまたはより少ない分岐命令を含む。
【００４７】
ブロック７２５で、代替の第２のブロックの分岐命令の結果の予測は、第１の予測ブロックの予測ブロック番号に対応する代替予測ストレージアレイのエントリに情報を書き込むことによって保持される。格納される情報は、分岐（複数可）、分岐（複数可）の予測された条件付き結果（複数可）、分岐のターゲット（複数可）、及び分岐の終わりの場所を記述するために使用される情報、または同情報の類似した表示である。さらに、代替の第２のブロック予測に対応する第１のブロックの結果を示すための表示も格納される。
【００４８】
ブロック７３０で、フェッチユニットは、分岐予測器によって予測された経路に沿って推論的な実行のために命令のフェッチを始めるように命令される。図示の実施形態では、フェッチユニットは、予測された第２のブロックを含む経路に沿って命令のフェッチを始める。
【００４９】
決定ブロック７３０で、処理システムは、第１のブロックの中の第１の及び第２の分岐命令の結果が誤って予測されたかどうかを判断する。誤って予測されず、分岐予測器が第１の及び第２の分岐命令の結果を正しく予測していた場合、方法の部分７００はブロック７４０に流れ、分岐予測器による第１のブロックの処理が行われる。第１のブロックの中の第１の及び第２の分岐命令の結果のうちの少なくとも１つが誤って予測された場合、方法の部分７００はノード１に流れる。
【００５０】
図８は、いくつかの実施形態によって「前方予測」予測中の分岐予測ミスに応えて、プログラムフローをロールバックし、分岐予測器を再起動する方法の第２の部分８００の流れ図である。方法の第２の部分８００は、図１に示す処理システム１００及び図２に示す処理システムの部分２００のいくつかの実施形態で実装される。方法の第２の部分８００は、図７に示すノード１に相当するノード１で始まる。
【００５１】
ブロック８０５で、プログラムフローは、第１のブロックの第１の分岐命令または第２の分岐命令のどちらかである場合がある、誤って予測された分岐命令にロールバックされる。
【００５２】
決定ブロック８１０で、処理システムは、誤って予測された分岐が実際に成立したかどうかを判断する。例えば、分岐予測器は、第１のブロックの分岐命令の１つが成立しないであろうと予測し、実際の結果は、分岐命令が成立し、プログラムフローは分岐命令のターゲットアドレスに分岐したということであった。そうではなく、分岐予測器が、結果は、分岐が成立したとなるであろうと予測し、実際の結果は、分岐が成立しないとなる場合、方法の部分８００はブロック８１５に流れる。
【００５３】
ブロック８１５で、（図７のブロック７１５からの）第１のブロックのために格納されていた剰余ブロックは、誤って予測された分岐の予測ブロック番号を使用し、代替予測ストレージアレイの中から読み出される。剰余ブロック予測は、分岐予測パイプラインの後段に注入されるため、それは通常の仕組みに従って分岐予測をフェッチする、復号する、及び確認する際に使用するためのプロセッサロジックの残りに伝達できる。その結果として、分岐予測器は、例えば、第２の分岐命令が成立すると予測される場合は第２の分岐命令のターゲットアドレスにあるブロック、または第２の分岐命令が成立しないと予測される場合は第２の分岐命令に後続のブロックなどの代替の第２のブロックの１つである次のブロックで予測を始める。第２の分岐命令に後続のブロックは、（第１のブロックが２つ以上の分岐命令を含む場合は）第１のブロックの追加の分岐命令を含むブロック、または第１のブロックに追加の分岐命令がない場合は第１のブロックに続く次のブロック境界で始まるブロックを含む。
【００５４】
（決定ブロック８１０で判断されたように）誤って予測された分岐が実際に成立し、分岐予測器が、結果は、分岐は成立しないとなるであろうと予測し、実際の結果は、分岐は成立するとなる場合、方法の部分８００はブロック８２０に流れる。
【００５５】
ブロック８２０で、第１のブロックから実際に成立する分岐に対応する代替の第２のブロックの分岐命令の結果の予測は、分岐予測パイプラインの後段に（ただし、該当する場合は剰余予測が注入された後のみに）注入されるため、それは通常の仕組みに従って分岐予測をフェッチする、復号する、及び確認する際に使用するためのプロセッサロジックの残りに伝達できる。したがって、分岐予測器は、分岐予測ミスに応えて第２のブロックの予測を繰り返す必要がない。
【００５６】
ブロック８２５で、分岐予測器は、代替の第２のブロックに続くブロックの分岐命令の結果の予測を始める。分岐予測器のいくつかの実施形態は、（分岐命令が成立すると予測される場合）代替の第２のブロックの分岐命令のターゲットアドレス、（代替の第２のブロックに追加の分岐命令がなく、分岐命令が成立しないと予測される場合）代替の第２のブロックの後続の分岐命令のアドレス、または（代替の第２のブロックに追加の分岐命令がなく、分岐命令が成立しないと予測される場合）順に代替の第２のブロックに続くブロックの後続の分岐命令のアドレスに対応するブロックの分岐命令の結果の予測を始める。
【００５７】
図７及び図８に示す方法の例示の実施形態を実装する処理システムは、代替の第２のブロックのすべての予測された結果を格納する。他の実施形態では、すべてに満たない予測された結果が格納される。例えば、処理システムは、単一の代替の第２のブロックの予測された結果を格納できる。ストレージのために選ばれる代替の第２のブロックは、代替の第２のブロックがプログラムフローの実際の経路上になる可能性、信頼基準に基づいて、またはすべての場合に第１の代替の第２のブロックを選択するなどの任意の選択基準を使用し、選択される。そのような実施形態での予測ミスの回復で、代替予測ストレージアレイの中の第２のブロックのための代替予測が見つからない場合、分岐予測器は、第２のブロックのターゲットの代わりに第１のブロックのターゲットで再起動される。
【００５８】
本明細書に開示するように、方法は、分岐予測器で、命令の第１のブロックの第１の分岐命令の第１の結果を予測することと、フェッチロジックに、第１の予測された結果によって示された第１の経路に沿って推論的な実行のために命令のフェッチを始めるように命令することと、第１の予測された結果が成立することに応えて、第１のブロックの剰余を表す剰余ブロックを格納することと、第１の分岐命令が成立しないことに応えて、剰余ブロックに基づいて分岐予測器を再起動することとを含む。一態様では、第１の分岐の第１の結果を予測することは、命令の第１のブロックの中の第１の分岐命令の第１の結果及び第２の分岐命令の第２の結果を同時に予測することを含む。別の態様では、剰余ブロックを格納することは、第１の予測された結果が成立し、第１の経路が第２の分岐命令を含まないことに応えて、第２の予測された結果を示す情報を含む剰余ブロックを格納することを含む。さらに別の態様では、分岐予測器を再起動することは、第２の予測された結果を示す剰余ブロックの情報に基づいて、分岐予測器を再起動することを含む。
【００５９】
別の態様では、分岐予測器を再起動することは、分岐予測器を再起動して、第２の予測された結果が、第２の分岐命令が成立することを示すことに応えて第２の分岐命令のターゲットアドレス、第２の予測された結果が、第２の分岐命令が成立せず、第１のブロックが少なくとも１つの第３の分岐命令を含むことを示すことに応えて第２の分岐命令に後続の命令のアドレス、及び第２の予測された結果が、第２の分岐命令が成立せず、第１のブロックが少なくとも１つの第３の分岐命令を含まないことを示すことに応えて第１のブロックの境界のうちの１つによって識別された第２のブロックでの分岐予測を始めることを含む。さらに別の態様では、第１のブロックは、後続のメモリ境界の前に第２の分岐命令を含まず、剰余ブロックは、第１のブロックが、後続のメモリ境界の前に第２の分岐命令を含まないことを示す情報を含む。さらに別の態様では、分岐予測器を再起動することは、剰余ブロックに示された後続のメモリ境界で分岐予測器を再起動することを含む。別の態様では、インデックスとして第１のブロックのアドレスを使用し、分岐予測構造内の情報にアクセスすること、情報は、第１のブロックからの推論的な経路に沿った第２のブロックの集合に対応するエントリの集合を含む。
【００６０】
本明細書に開示するように、装置は、命令の第１のブロックの中の第１の分岐命令の第１の結果を予測するように構成された分岐予測器と、第１の予測された結果によって示された第１の経路に沿って推論的な実行のために命令をフェッチするためのフェッチロジックと、第１の予測された結果が成立することに応えて、第１のブロックの剰余を表す情報を格納するための分岐予測器内の代替予測ストレージアレイとを含み、第１の分岐命令が成立しないことに応えて、分岐予測器は、剰余を表す情報に基づいて再起動される。一態様では、分岐予測器は、命令の第１のブロックの中の第１の分岐命令の第１の結果及び第２の分岐命令の第２の結果を同時に予測するように構成される。別の態様では、代替予測ストレージアレイは、第１の予測された結果が成立し、第１の経路が第２の分岐命令を含まないことに応えて、第２の予測された結果を示す情報を含む剰余ブロックを格納するように構成される。さらに別の態様では、分岐予測器は、第２の予測された結果を示す剰余ブロックの情報に基づいて再起動される。
【００６１】
別の態様では、分岐予測器は再起動されて、第２の予測された結果が、第２の分岐命令が成立することを示すことに応えて第２の分岐命令のターゲットアドレス、第２の予測された結果が、第２の分岐命令が成立せず、第１のブロックが少なくとも１つの第３の分岐命令を含むことを示すことに応えて第２の分岐命令に後続の命令のアドレス、及び第２の予測された結果が、第２の分岐命令が成立せず、第１のブロックが少なくとも１つの第３の分岐命令を含まないことを示すことに応えて第１のブロックの境界のうちの１つによって識別された第２のブロックで分岐予測を始める。別の態様では、第１のブロックは、後続のメモリ境界まで第２の分岐命令を含まず、剰余ブロックは、第１のブロックが後続のメモリ境界まで第２の分岐命令を含まないことを示す情報を含む。さらに別の態様では、分岐予測器は、剰余ブロックで示された後続のメモリ境界で再起動するように構成される。さらに別の態様では、装置は、第１のブロックからの推論的な経路に沿った第２のブロックの集合に対応するエントリの集合を格納するように構成された分岐予測構造を含み、分岐予測器は、インデックスとして第１のブロックのアドレスを使用し、分岐予測構造にアクセスするように構成される。
【００６２】
本明細書に開示するように、方法は、分岐予測器で、命令の第１のブロックの中の第１の分岐命令の第１の結果を予測することと、分岐予測器内の代替予測ストレージアレイに、第１の結果が成立すると予測されるのか、それとも成立しないと予測されるのかに基づいて剰余ブロックを選択的に格納することであって、剰余ブロックが第１のブロックの剰余を示す、選択的に格納することと、第１の分岐命令が成立すると予測され、第１の分岐命令の実際の結果が不成立であることに応えて、剰余ブロックに基づいて分岐予測器を再起動することとを含む。一態様では、剰余ブロックを選択的に格納することは、第１のブロックの第２の分岐命令の第２の予測された結果を示す情報、及び第１のブロックが、後続のメモリ境界までいずれの分岐命令も含まないことを示す情報のうちの少なくとも１つを格納することを含む。
【００６３】
いくつかの実施形態では、上述した装置及び技術は、図１〜８に関して上述した処理システムなどの（集積回路パッケージまたはマイクロチップとも呼ぶ）１つ以上の集積回路（ＩＣ）デバイスを含むシステムで実装される。電子設計自動化（ＥＤＡ）及びコンピュータ支援設計（ＣＡＤ）のソフトウェアツールは、これらのＩＣデバイスの設計及び製作で使用され得る。これらの設計ツールは、通常、１つ以上のソフトウェアプログラムとして表される。１つ以上のソフトウェアプログラムは、１つ以上のＩＣデバイスの回路を表すコードを操作して、回路を製作するように製造システムを設計または適合させるためのプロセスの少なくとも一部分を実行するために、コンピュータシステムを操作するためのコンピュータシステムによって実行可能なコードを含む。このコードは、命令、データ、または命令及びデータの組み合わせを含み得る。設計ツールまたは製作ツールを表すソフトウェア命令は、通常、コンピューティングシステムがアクセス可能なコンピュータ可読記憶媒体に格納される。同様に、ＩＣデバイスの設計または製作の１つ以上の段階を表すコードは、同じコンピュータ可読記憶媒体または異なるコンピュータ可読記憶媒体に格納され、そこからアクセスされ得る。
【００６４】
コンピュータ可読記憶媒体は、コンピュータシステムに命令及び／またはデータを提供するために使用中にコンピュータシステムがアクセス可能な任意の非一時的記憶媒体または非一時的記憶媒体の組み合わせを含んでよい。そのような記憶媒体は、光媒体（例えば、コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）、ブルーレイディスク）、磁気媒体（例えば、フロッピーディスク、磁気テープ、もしくは磁気ハードドライブ）、揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）もしくはキャッシュ）、不揮発性メモリ（例えば、読み取り専用メモリ（ＲＯＭ）もしくはフラッシュメモリ）、または微小電気機械システム（ＭＥＭＳ）ベースの記憶媒体を含む場合があるが、これに限定されるものではない。コンピュータ可読記憶媒体は、コンピューティングシステム（例えば磁気ハードドライブ）に固定して取り付けられる、コンピューティングシステム（例えば光学ディスクもしくはユニバーサルシリアルバス（ＵＳＢ）ベースのフラッシュメモリ）に着脱可能に取り付けられる、または有線もしくは無線ネットワーク（例えばネットワークアクセス可能ストレージ（ＮＡＳ））を介してコンピュータシステムに接続されるコンピューティングシステム（例えば、システムＲＡＭもしくはＲＯＭ）に組み込まれてよい。
【００６５】
いくつかの実施形態では、上述の技術の特定の態様は、ソフトウェアを実行する処理システムの１つ以上のプロセッサによって実装されてよい。ソフトウェアは、非一時的コンピュータ可読記憶媒体上に格納またはそれ以外の場合有形で具現される、実行可能命令の１つ以上のセットを含む。ソフトウェアは、１つ以上のプロセッサによる実行時に、１つ以上のプロセッサを操作して上述の技術の１つ以上の態様を実行する命令及び特定のデータを含む場合がある。非一時的コンピュータ可読記憶媒体は、例えば磁気もしくは光ディスク記憶デバイス、フラッシュメモリ、キャッシュ、ランダムアクセスメモリ（ＲＡＭ）などのソリッドステートストレージデバイス、または他の１つもしくは複数の不揮発性メモリデバイスなどを含む場合がある。非一時的コンピュータ可読記憶媒体に格納された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、または１つ以上のプロセッサによって解釈される、もしくはそれ以外の場合実行可能な他の命令形式であってよい。
【００６６】
一般的説明で上述した活動または要素のすべてが必須ではないこと、特定の活動またはデバイスの一部は必要とされない場合があること、及び説明したものに加えて１つ以上の追加の活動が実行され得る、または要素が含まれ得ることに留意されたい。さらに、活動を示す順序は、必ずしも活動を実行する順序ではない。また、概念は、具体的な実施形態に関して説明されている。しかしながら、当業者は、以下の特許請求の範囲に記載される本開示の範囲から逸脱することなく、多様な修正及び変更を行うことができることを理解する。したがって、本明細書及び図は、限定的な意味ではなく、例示的な意味で考えられるべきであり、すべてのそのような修正は、本開示の範囲内に含まれることが意図されている。
【００６７】
利点、他の優位点、及び問題の解決策は、具体的な実施形態に関して上述されている。しかしながら、利点、優位点、問題の解決策、及び任意の利点、優位点、もしくは解決策を生じさせるまたはより顕著にするいずれの特徴（複数可）も、いずれかまたはすべての請求項の重大な特徴、必須特徴、または本質的特徴として解釈されるべきではない。さらに、開示した主題は、本明細書の教示の利益を有する当業者にとって明らかな、異なっているが同等な方法で修正及び実践され得るため、上記に開示した特定の実施形態は例示に過ぎない。以下の特許請求の範囲に説明される以外、示されている本明細書の構成または設計の詳細に対して何の限定も意図されていない。したがって、上記に開示した特定の実施形態が改変または修正され得、そのようなすべての変形は開示する主題の範囲内にあると見なされることは明らかである。その結果、本明細書に求められる保護は、以下の特許請求の範囲内に説明する通りである。
【図１】
2021527248.tif 000003
【図２】
2021527248.tif 000004
【図３】
2021527248.tif 000005
【図４】
2021527248.tif 000006
【図５】
2021527248.tif 000007
【図６】
2021527248.tif 000008
【図７】
2021527248.tif 000009
【図８】
2021527248.tif 000010
【手続補正書】
【提出日】令和3年3月22日(2021.3.22)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
分岐予測器で、命令の第１のブロックの第１の分岐命令の第１の結果を予測することと、
フェッチロジックに、前記予測された第１の結果によって示される第１の経路に沿って推論的な実行のために命令のフェッチを始めるように命令することと、
前記予測された第１の結果が成立することに応えて、前記第１のブロックの剰余を表す剰余ブロックを格納することと、
前記第１の分岐命令が成立しないことに応えて、前記剰余ブロックに基づいて前記分岐予測器を再起動することとを含む、方法。
【請求項２】
前記第１の分岐の前記第１の結果を予測することは、命令の前記第１のブロックの中の前記第１の分岐命令の前記第１の結果及び第２の分岐命令の第２の結果を同時に予測することを含む、請求項１に記載の方法。
【請求項３】
前記剰余ブロックを格納することは、前記予測された第１の結果が成立し、前記第１の経路が前記第２の分岐命令を含まないことに応えて、前記予測された第２の結果を示す情報を含む剰余ブロックを格納することを含む、請求項２に記載の方法。
【請求項４】
前記分岐予測器を再起動することは、前記予測された第２の結果を示す前記剰余ブロックの情報に基づいて前記分岐予測器を再起動することを含む、請求項２に記載の方法。
【請求項５】
前記分岐予測器を再起動することは、
前記予測された第２の結果が、前記第２の分岐命令が成立することを示すことに応えて前記第２の分岐命令のターゲットアドレス、
前記予測された第２の結果が、前記第２の分岐命令が成立せず、前記第１のブロックが少なくとも１つの第３の分岐命令を含むことを示すことに応えて前記第２の分岐命令に後続の命令のアドレス、及び
前記予測された第２の結果が、前記第２の分岐命令が成立せず、前記第１のブロックが前記少なくとも１つの第３の分岐命令を含まないことを示すことに応えて前記第１のブロックの境界
のうちの１つによって識別された第２のブロックで分岐予測を始めるために前記分岐予測器を再起動することを含む、請求項２に記載の方法。
【請求項６】
前記第１のブロックは、後続のメモリ境界の前に第２の分岐命令を含まず、前記剰余ブロックは、前記第１のブロックが、前記後続のメモリ境界の前に前記第２の分岐命令を含まないことを示す情報を含み、
前記分岐予測器を再起動することは、前記剰余ブロックに示された前記後続のメモリ境界で前記分岐予測器を再起動することを含む、請求項１に記載の方法。
【請求項７】
インデックスとして前記第１のブロックのアドレスを使用し、分岐予測構造内の情報にアクセスすることであって、前記情報は、前記第１のブロックからの推論的な経路に沿った第２のブロックの集合に対応するエントリの集合を含む、前記アクセスすることをさらに含む、請求項１に記載の方法。
【請求項８】
命令の第１のブロックの中の第１の分岐命令の第１の結果を予測するように構成された分岐予測器と、
前記予測された第１の結果によって示された第１の経路に沿って推論的な実行のために命令をフェッチするためのフェッチロジックと、
前記予測された第１の結果が成立することに応えて、前記第１のブロックの剰余を表す情報を格納するための前記分岐予測器内の代替予測ストレージアレイと
を備え、
前記第１の分岐命令が成立しないことに応えて、前記分岐予測器は前記剰余を表す前記情報に基づいて再起動される、装置。
【請求項９】
前記分岐予測器は、命令の前記第１のブロックの中の前記第１の分岐命令の前記第１の結果、及び第２の分岐命令の第２の結果を同時に予測するように構成される、請求項８に記載の装置。
【請求項１０】
前記代替予測ストレージアレイは、前記予測された第１の結果が成立し、前記第１の経路が前記第２の分岐命令を含まないことに応えて、前記予測された第２の結果を示す情報を含む剰余ブロックを格納するように構成される、請求項９に記載の装置。
【請求項１１】
前記分岐予測器は、前記予測された第２の結果を示す前記剰余ブロックの前記情報に基づいて再起動される、請求項９に記載の装置。
【請求項１２】
前記分岐予測器は再起動されて、
前記予測された第２の結果が、前記第２の分岐命令が成立することを示すことに応えて前記第２の分岐命令のターゲットアドレス、
前記予測された第２の結果が、前記第２の分岐命令が成立せず、前記第１のブロックが少なくとも１つの第３の分岐命令を含むことを示すことに応えて前記第２の分岐命令に後続の命令のアドレス、及び
前記予測された第２の結果が、前記第２の分岐命令が成立せず、前記第１のブロックが前記少なくとも１つの第３の分岐命令を含まないことを示すことに応えて前記第１のブロックの境界
のうちの１つによって識別された第２のブロックで分岐予測を始めることを含む、請求項９に記載の装置。
【請求項１３】
前記第１のブロックは、後続のメモリ境界まで第２の分岐命令を含まず、前記剰余ブロックは、前記第１のブロックが後続のメモリ境界まで前記第２の分岐命令を含まないことを示す情報を含む、請求項８に記載の装置。
【請求項１４】
前記分岐予測器は、前記剰余ブロックに示された前記後続のメモリ境界で再起動するように構成される、請求項１３に記載の装置。
【請求項１５】
前記第１のブロックからの推論的な経路に沿った第２のブロックの集合に対応するエントリの集合を格納するように構成された分岐予測構造であって、前記分岐予測器が、インデックスとして前記第１のブロックのアドレスを使用し、前記分岐予測構造にアクセスするように構成される、前記分岐予測構造をさらに備える、請求項８に記載の装置。
【請求項１６】
分岐予測器で、命令の第１のブロックの中の第１の分岐命令の第１の結果を予測することと、
前記分岐予測器内の代替予測ストレージアレイに、前記第１の結果が成立すると予測されるのか、それとも成立しないと予測されるのかに基づいて剰余ブロックを選択的に格納することであって、前記剰余ブロックは前記第１のブロックの剰余を示す、前記選択的に格納することと、
前記第１の分岐命令が成立すると予測され、前記第１の分岐命令の実際の結果が不成立であることに応えて、前記剰余ブロックに基づいて前記分岐予測器を再起動することとを含む、方法。
【請求項１７】
前記剰余ブロックを選択的に格納することは、前記第１のブロックの中の第２の分岐命令の予測された第２の結果を示す情報、及び前記第１のブロックが、後続のメモリ境界までいずれの分岐命令も含まないことを示す情報のうちの少なくとも１つを格納することを含む、請求項１６に記載の方法。
【国際調査報告】
2021527248.tif 000011
2021527248.tif 000012