(57)【要約】【課題】プログラム可能な静的分岐予測機能を提供することによって、パフォーマンスと決定論との間により良好なバランスを提供すること。【解決手段】装置は、命令に応答してデータ処理を実施するための処理回路と、所与の分岐命令について分岐する及び分岐しないのうちの１つとして、所与の分岐命令の少なくとも１つのプロパティに基づいてインデックス付けされる分岐予測状態情報に基づいて分岐結果を予測するための分岐予測器とを備える。動作の静的分岐予測モードにおいて、分岐予測器は処理回路によって静的分岐予測モードにある間実行される分岐命令の実際の分岐結果とは独立してセットされる分岐予測状態情報の静的値に基づいて分岐結果を予測する。分岐予測状態情報の静的値はプログラム可能である。【選択図】図５
2020119504.tif 000002
【特許請求の範囲】
【請求項１】
命令に応答してデータ処理を実施するための処理回路と、
所与の分岐命令について分岐する及び分岐しないのうちの１つとして、前記所与の分岐命令の少なくとも１つのプロパティに基づいてインデックス付けされる分岐予測状態情報に基づいて分岐結果を予測するための分岐予測器と
を備える装置であって、
動作の静的分岐予測モードにおいて、前記分岐予測器は、前記処理回路によって前記静的分岐予測モードにある間実行される分岐命令の実際の分岐結果とは独立してセットされる前記分岐予測状態情報の静的値に基づいて前記分岐結果を予測するように構成され、
前記分岐予測状態情報の前記静的値はプログラム可能である、
装置。
【請求項２】
前記処理回路は、前記処理回路によって実行される分岐予測状態プログラミング命令に応答して、前記分岐予測状態情報の少なくともサブセットをプログラムするように構成される、請求項１に記載の装置。
【請求項３】
前記分岐予測状態プログラミング命令は、
システムレジスタ更新命令と、
ターゲットアドレスとして前記分岐予測状態情報の前記少なくともサブセットを格納するレジスタにマッピングされるアドレスを指定するストア命令と
のうちの１つを含む、請求項２に記載の装置。
【請求項４】
前記処理回路は、複数の特権レベルのうちの１つにおいて命令を実行するように構成され、また前記処理回路は、前記分岐予測状態プログラミング命令がしきい値特権レベルよりも低いレベルの特権レベルで実行されると例外をトリガするように構成される、請求項２に記載の装置。
【請求項５】
動作のプロファイリングモードにおいて、前記分岐予測器は前記プロファイリングモードの間実行される分岐命令の実際の分岐結果に基づいて前記分岐予測状態情報を訓練するように構成される、請求項１に記載の装置。
【請求項６】
前記分岐予測状態情報は前記所与の分岐命令の前記少なくとも１つのプロパティに基づいてインデックス付けされる飽和カウンタのセットを含む、請求項５に記載の装置。
【請求項７】
前記処理回路は、前記処理回路によって実行される分岐予測状態抽出命令に応答して、前記プロファイリングモードの間訓練される前記分岐予測状態情報の少なくともサブセットの現在の値を抽出するように構成される、請求項５に記載の装置。
【請求項８】
前記分岐予測状態抽出命令は、
システムレジスタ読み出し命令と、
ターゲットアドレスとして前記分岐予測状態情報の前記少なくともサブセットを格納するレジスタにマッピングされるアドレスを指定するロード命令と
のうちの１つを含む、請求項７に記載の装置。
【請求項９】
前記処理回路は、複数の特権レベルのうちの１つにおいて命令を実行するように構成され、また前記処理回路は、前記分岐予測状態抽出命令がしきい値特権レベルよりも低いレベルの特権レベルで実行されると例外をトリガするように構成される、請求項７に記載の装置。
【請求項１０】
前記所与の分岐命令の前記少なくとも１つのプロパティは前記所与の分岐命令のオペコードから導出した情報を含む、請求項１に記載の装置。
【請求項１１】
前記所与の分岐命令の前記少なくとも１つのプロパティは、前記所与の分岐命令が前方分岐か後方分岐かの指標を含む、請求項１に記載の装置。
【請求項１２】
前記所与の分岐命令の前記少なくとも１つのプロパティは、前記所与の分岐命令についての分岐オフセットのサイズを示す情報を含む、請求項１に記載の装置。
【請求項１３】
前記少なくとも１つのプロパティは、前記所与の分岐命令の命令アドレスとは独立している、請求項１に記載の装置。
【請求項１４】
所与の分岐命令について分岐する及び分岐しないのうちの１つとして、前記所与の分岐命令の少なくとも１つのプロパティに基づいてインデックス付けされる分岐予測状態情報に基づいて分岐結果を予測するステップ
を含む、データ処理装置のための分岐予測方法であって、
動作の静的分岐予測モードにおいて、前記分岐結果は、前記静的分岐予測モードにある間実行される分岐命令の実際の分岐結果とは独立してセットされる前記分岐予測状態情報の静的値に基づいて予測され、
前記分岐予測状態情報の前記静的値はプログラム可能である、
方法。
【請求項１５】
命令に応答してデータ処理を実施するための処理回路と、
所与の分岐命令について分岐する及び分岐しないのうちの１つとして、前記所与の分岐命令の少なくとも１つのプロパティに基づいてインデックス付けされる分岐予測状態情報のオペコードインデックス付けテーブルに基づいて分岐結果を予測するための分岐予測器と
を備える装置であって、
前記少なくとも１つのプロパティは前記所与の分岐命令のオペコードから導出した情報を含む、装置。
【請求項１６】
前記少なくとも１つのプロパティは、前記所与の分岐命令の命令アドレスとは独立している、請求項１５記載の装置。
【請求項１７】
前記少なくとも１つのプロパティは、前記所与の分岐命令が前方分岐か後方分岐かの指標も含む、請求項１５に記載の装置。
【請求項１８】
前記分岐予測器は、分岐予測状態情報の複数のテーブルに基づいて前記分岐結果を予測するように構成され、前記複数のテーブルは前記オペコードインデックス付けテーブル、並びに前記所与の分岐命令の命令アドレス、及び以前に実行された分岐についての以前の分岐結果の履歴のうちの少なくとも１つから導出される情報に基づいてインデックス付けされる少なくとも１つのさらなるテーブルを含む、請求項１５に記載の装置。
【請求項１９】
前記分岐予測器は動的分岐予測モードの間実行される分岐命令の実際の分岐結果に基づいて前記オペコードインデックス付けテーブルを訓練するように構成される、請求項１５に記載の装置。
【請求項２０】
前記分岐予測器は静的分岐予測モードの間実行される分岐命令の実際の分岐結果とは独立してセットされる前記オペコードインデックス付けテーブルの静的値に基づいて前記分岐結果を予測するように構成される、請求項１６に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本技法はデータ処理の分野に関する。より詳細には、分岐予測に関する。
【背景技術】
【０００２】
データ処理装置は分岐命令の結果を、それらが実際に実行される前に予測するための分岐予測器を有することができる。分岐命令が実際に実行される前に分岐結果を予測することによって、その分岐に続く後続の命令がフェッチされ始め、分岐命令の実行が完了する前に投機的に実行され得る。予測が正しい場合、単に分岐の結果が実際に分かってからフェッチされ、デコードされ、そして実行される場合よりも後続の命令をより早期に実行できるため、パフォーマンスを節約することができる。
【発明の概要】
【課題を解決するための手段】
【０００３】
少なくともいくつかの実例は、命令に応答してデータ処理を実施するための処理回路と、所与の分岐命令について分岐する及び分岐しないのうちの１つとして、所与の分岐命令の少なくとも１つのプロパティに基づいてインデックス付けされる分岐予測状態情報に基づいて分岐結果を予測するための分岐予測器とを備える装置であって、動作の静的分岐予測モードにおいて、分岐予測器は、処理回路によって静的分岐予測モードにある間実行される分岐命令の実際の分岐結果とは独立してセットされる分岐予測状態情報の静的値に基づいて分岐結果を予測するように構成され、分岐予測状態情報の前記静的値はプログラム可能である、装置を提供する。
【０００４】
少なくともいくつかの実例は、データ処理装置のための分岐予測方法であって、所与の分岐命令について分岐する及び分岐しないのうちの１つとして、所与の分岐命令の少なくとも１つのプロパティに基づいてインデックス付けされる分岐予測状態情報に基づいて分岐結果を予測するステップを含み、動作の静的分岐予測モードにおいて、分岐結果は、静的分岐予測モードにある間実行される分岐命令の実際の分岐結果とは独立してセットされる分岐予測状態情報の静的値に基づいて予測され、分岐予測状態情報の前記静的値はプログラム可能である、方法を提供する。
【０００５】
少なくともいくつかの実例は、命令に応答してデータ処理を実施するための処理回路と、所与の分岐命令について分岐する及び分岐しないのうちの１つとして、所与の分岐命令の少なくとも１つのプロパティに基づいてインデックス付けされる分岐予測状態情報のオペコードインデックス付けテーブルに基づいて分岐結果を予測するための分岐予測器とを備える装置であって、前記少なくとも１つのプロパティは所与の分岐命令のオペコードから導出した情報を含む、装置を提供する。
【０００６】
本技法のさらなる態様、特徴及び利点は、添付の図面と併せて読まれる実例の以下の説明から明らかとなろう。
【図面の簡単な説明】
【０００７】
【図１】分岐予測器を有するデータ処理システムの実例を概略的に示す図である。
【図２】プログラム可能な分岐予測状態情報の第１の実例を示す図である。
【図３】プログラム可能な分岐予測状態情報の第２の実例を示す図である。
【図４】分岐予測状態情報を訓練するためのプロファイリングモードを概略的に示す図である。
【図５】分岐予測状態情報に基づいて予測がなされるが、分岐予測状態情報が実行される分岐命令の実際の分岐結果に応答して更新されない静的分岐予測モードを概略的に示す図である。
【図６】予測テーブルのうちの１つとして分岐命令のオペコードに基づいてインデックス付けされるテーブルを使用するパーセプトロン分岐予測器の実例を示す図である。
【図７】予測テーブルのうちの１つとして分岐命令のオペコードに基づいてテーブルインデックスを使用するＴＡＧＥ分岐予測器の実例を示す図である。
【発明を実施するための形態】
【０００８】
装置は、命令に応答してデータ処理を実施するための処理回路と、所与の分岐命令について分岐する及び分岐しないのうちの１つとして、一般的な分岐命令の少なくとも１つのプロパティに基づいてインデックス付けされる分岐予測状態情報に基づいて分岐結果を予測するための分岐予測器とを有することができる。分岐する／分岐しないの結果は、分岐予測器によって予測される分岐の唯一のプロパティでなくてもよい。例えば、分岐予測器はまた分岐命令の分岐ターゲットアドレスなどの他の態様、又は分岐タイプなどの他のプロパティを予測することもできる。しかしながら、分岐の、分岐する又は分岐しないの結果の予測は、分岐後の次の命令がその分岐に順次続く命令（結果が分岐しない、の場合実行される）であるべきか、又は分岐のターゲットアドレスにある命令（結果が分岐する、の場合実行される）であるべきかどうか判断することについて有用であり得る。
【０００９】
分岐予測のための一手法は、いくつかの固定規則を使用して所与の分岐命令についての予測を決定する静的分岐予測を使用することである。静的分岐予測は、あらゆる動的なランタイム履歴又は分岐が実行されるコンテキストについてのコンテキスト情報を使用することなく（例えば、分岐の前に実行される以前の命令から導出されるコンテキスト情報）、分岐命令それ自身のプロパティ及び／又は予め定められた状態に基づいてなされる予測であってよい。例えば、静的分岐予測についての単純なスキームは、すべての分岐が分岐しないと予測されるようなものであってもよい。静的分岐予測についての規則の別の実例は、分岐命令それ自身のアドレスに対する分岐ターゲットアドレスを決定するための正のアドレスオフセットを有する前方分岐は分岐しないと予測されるが、一方で負の分岐オフセットを有する後方分岐は分岐すると予測されることであってもよい。この規則は、後方分岐がしばしば、分岐がループが完了するまで一定の回数取られ、次いでいったんそのように後方分岐が分岐しないよりは分岐する見込みが高くなると分岐しないことがあるループ内で使用されるという事実を利用している。しかしながら、そのような静的予測関数に伴う問題は、静的分岐予測についての規則が柔軟性に欠け、すべての分岐に適用されることであり、また静的分岐予測規則によって定義される振る舞いにしたがわない著しい数の分岐があり得ることである。したがって、静的予測関数は多くの分岐にあまり当てはまらないことがあり、そのため比較的低いパフォーマンスを提供することがある。
【００１０】
したがって、たいていの近代的なプロセッサにおいて、分岐予測器は動的分岐予測手法を使用しており、動的分岐予測手法では分岐予測は、実行される分岐命令の実際の分岐結果に基づいて訓練されているいくつかの分岐予測状態情報に基づいてなされる。このやり方において、分岐予測状態情報は処理回路によって実際に見られる分岐の振る舞いを反映するよう絶えず更新されることができ、分岐予測器が、所与の分岐が次回見られる際、結果を正しく予測できるような機会を増やす。したがって、分岐予測器が実行される分岐命令の実際の分岐結果から学習する動的分岐予測モードを使用することは、パフォーマンスを改善するために有用であり得る。
【００１１】
しかしながら、適用例のいくつかの現場について、所与の数のソフトウェアがその実行レイテンシに一定の決定論的な束縛を伴って実行することが重要であり得る。例えば、自動車内のステアリング、又は制動システムを制御することなど、安全性が致命的である適用例のために設計されたプロセッサにおいて、その処理回路で実行する際コードの振る舞いが決定論的であることは致命的となり得、それによって処理は可能な最高のパフォーマンスを有する必要はないが、処理はレイテンシに関して一定の決定論的なリミット内で完了するよう保証されるべきである。動的分岐予測の使用はパフォーマンスにおいて多くの理解しがたいジッタをもたらすことがあり、これは命令についてなされる分岐予測における違いによって引き起こされる命令の同一シーケンスの実行の異なるインスタンスに関連付けられる変動するレイテンシのため非決定論的である。一連の分岐命令が分岐予測器によって誤って予測される場合、これは分岐が正しく予測される他の場合に比べてパフォーマンスを非常に悪化させ得る。したがって、動的分岐予測は適用例のいくつかの現場についてはあまり好ましくないことがある。
【００１２】
以下で議論する技法において、分岐予測器は動作の静的分岐予測モードを有し、そのモードでは分岐結果は、処理回路によって静的分岐予測モードにある間実行される分岐命令の実際の分岐結果とは独立してセットされる分岐予測状態情報の静的値に基づいて予測される。分岐予測状態情報の静的値はプログラム可能である。したがって、動作の静的分岐予測モードにおいては、所与の分岐のセットについてなされる分岐予測が静的に固定されるためパフォーマンスは決定論的であり、また実行される分岐命令の実際の結果に基づく分岐予測状態情報の訓練がないが、それにもかかわらず、静的値はプログラム可能であり、それによって分岐予測状態情報を様々なソフトウェア作業負荷に適合することが可能であり、それによって所与のソフトウェア作業負荷のために分岐予測状態情報の静的値を設定することによってパフォーマンスを改善し、その作業負荷について期待される分岐振る舞いを反映することができる。したがって、プログラム可能な静的分岐予測機能を提供することによって、動的分岐予測又は非プログラム可能な静的分岐予測のいずれかによって提供され得るよりも、これはパフォーマンスと決定論との間により良好なバランスを提供することができる。
【００１３】
分岐予測状態情報の静的値のプログラミングは様々なやり方で実施することができる。いくつかの実例において、分岐予測状態情報の静的値のプログラミングは、処理回路によって実行される特定の命令に応答して実施されてもよい。
【００１４】
例えば、処理回路は、処理回路によって実行される分岐予測状態プログラミング命令に応答して、分岐予測状態情報の少なくともサブセットをプログラムすることができる。例えば、分岐予測状態プログラミング命令は、分岐予測状態情報のサブセットを含むシステムレジスタにセットされるデータを指定するシステムレジスタ更新命令であってもよい。別の実例は、分岐予測状態プログラミング命令がターゲットアドレスとして分岐予測状態情報の少なくともサブセットを格納するレジスタにマッピングされるアドレスを指定するストア命令である場合であり得る。この第２の実例において、分岐予測状態情報は事実上予測テーブルにマッピングされるメモリに格納され得る。分岐予測状態の静的値のテーブル全体を１つの命令でプログラムするのは本質的ではない。例えば、いくつかの場合、分岐予測状態情報は複数のレジスタにわたって格納することができ、別個の分岐予測状態プログラミング命令はそれぞれのレジスタを個々にプログラムするよう要求され得る。
【００１５】
処理回路は複数の特権レベルのうちの１つにおいて命令の実行をサポートすることができる。いくつかの実例において、処理回路は分岐予測状態プログラミング命令が一定のしきい値特権レベルより低い特権を与えられた特権レベルで実行されるよう試行されると、例外をトリガできる。例えば、これは特権を与えられたソフトウェアだけが分岐予測状態情報を更新できることを保証するために有用であり得る。例えば、プログラム可能な静的分岐予測状態情報を更新することは、オペレーティングシステムのソフトウェア又はオペレーティングシステムより高い特権レベルで実行しているソフトウェアに限定することができる。これはオペレーティングシステムが、アプリケーション間でスイッチする際、その入来アプリケーションについて分岐予測状態の適当なセットでプログラムできるようにするために有用であり得、それによってそのアプリケーションの実行の間使用される静的分岐予測規則のセットは、そのアプリケーションの期待される振る舞いにおいて、分岐予測状態の同一のセットがすべてのアプリケーションに使用される場合よりも、より具体的にターゲットとされ得る。
【００１６】
いくつかの実装形態において、処理装置は分岐予測状態情報をセットするために、実際の分岐実行から学習する機能を有していなくてもよい。例えば、実際の分岐結果に応答して分岐予測状態情報を更新するための回路がなくてもよい。代わりに、そのようなシステムにおいて、静的分岐予測状態情報へセットするためのプログラム可能な値のセットは、メモリ又はいくつかの予め設定された記憶場所に記憶することができ、それによって所与のアプリケーションへスイッチングする際オペレーティングシステム又はそのアプリケーションを管理する他のソフトウェアは分岐予測器のために使用される値のセットを予め設定された記憶場所から読み出すことができ、次いでそれらをシステムが静的分岐予測モードにある時使用するために分岐予測状態の静的値として機能するようにプログラム可能な状態情報に書き込むことができる。例えば、所与のアプリケーションのために使用される分岐予測状態値のセットはリテラル値としてアプリケーション自身のプログラムコード内に含められることができるか、又は関連付けられているプログラムコードがデバイスにインストールされている場合はメモリの所与の領域に記憶されていてもよい（例えば、関連付けられているアプリケーションのソフトウェアイメージの一部として）。
【００１７】
所与のアプリケーションについての分岐予測状態情報の静的値のセットが前もって固定されている場合では、静的値は、デバイスが上で議論したような制動制御のような所望の適用例についての現場で使用されるとプログラムコードを実行するための実際のプロセッサの実装形態についての学習に基づいているのではなく、ソフトウェアを開発する際例えば開発者によって使用されるリモートデバイス上でコードプロファイリングを実施することによって学習されていることができる。したがって、所与のアプリケーション状態についての分岐予測状態の適当なセットの学習は、静的分岐予測モードをサポートする分岐予測器を有する実際の装置で実施されるのではなく、開発フェーズの間にオフラインで行われていることができる。
【００１８】
しかしながら、別の手法において、静的分岐予測モードに加えて、分岐予測器はまた動作のプロファイリングモードをサポートすることができ、プロファイリングモードでは分岐予測器は分岐予測状態情報をそのプロファイリングモードにある間に実行される分岐命令の実際の分岐結果に基づいて訓練することができる。したがって、プロファイリングモードの間、分岐予測器は分岐予測状態情報を訓練するために実際の分岐結果から学習することができ、それによって類似の命令が将来的に再度実行される際に正しい予測を提供する可能性がより高くなる。装置が実際に現場で動作可能な場合、システムはその後静的分岐予測モードへとスイッチすることができ、この時点で静的分岐予測モードによって与えられる決定論は、静的分岐予測モードの間分岐予測状態情報のさらなる訓練がないため、デバイスが一定の安全圏内に留まることを保証するために有益であり得る。したがって、プロファイリングモードの提供により、デバイス自身に所与のタスク又は適用例のための分岐予測状態の好ましいセットを集めさせることができる。
【００１９】
プロファイリングモードと静的分岐予測モードとの間のスイッチングは様々なやり方で制御することができる。いくつかの実装形態において、モードを変更するために専用のモードエントリ又はモード退出命令を使用することができる。代替的に、モードを変更するために、システムレジスタ内のモード指標を更新するシステムレジスタ更新命令が使用され得る。したがって、例えば、所与の安全用途における使用のため所与の処理デバイスを設定する人物はコードをデバイスにインストールすること、それぞれの用途について適当な分岐予測状態情報を集めるためにデバイスが工場内にある初期の間プロファイリングモードでそのコードを実行すること、次いでデバイスが現場での使用のためにリリースされるよりも前に、モードを静的分岐予測モードにスイッチすることができる。
【００２０】
プロファイリングモードが与えられる実例において、所与の分岐命令の少なくとも１つのプロパティに基づいてインデックス付けされる飽和カウンタのセットを含むことは分岐予測状態情報について有用であり得る。一定の数のビットを有する飽和カウンタを与えることによって、プロファイリングモードにおいて分岐予測状態情報の訓練を助けることができ、所与の分岐命令又は所与の分岐タイプについての１つの結果の発生の単一のインスタンスは、同一の分岐又は分岐タイプについて反対の結果のインスタンスの以前の実行を瞬時にオーバライドすることはないように、これはいくらかのヒステリシスを与えることができる。
【００２１】
例えば、プロファイリングモードにおいて、解決された分岐命令について実際の分岐結果を決定することに応じて、分岐予測器は解決された分岐命令の少なくとも１つのプロパティに基づいて飽和カウンタのうちの１つを選択し、実際の分岐結果が分岐する及び分岐しないのうちの一方である場合選択された飽和カウンタをインクリメントするか、又は実際の分岐結果が分岐する及び分岐しないのうちの他方である場合選択された飽和カウンタをデクリメントすることができる。次いで、静的分岐予測モードにおいて、分岐予測器は選択された飽和カウンタとしきい値との比較に基づいて分岐結果を予測することができる。
【００２２】
プロファイリングモードをサポートするシステムにおいて、処理回路はまた、実行されると処理回路をトリガしてプロファイリングモードの間訓練された分岐予測状態情報の少なくともサブセットの現在値を抽出させる分岐予測状態抽出命令をサポートすることができる。これによってプロファイリングモードの間所与のアプリケーションについて学習される状態が抽出できるようになり、次いで潜在的にメモリに保存され、それによって、後々対応するアプリケーションが再度実行される際、分岐予測状態情報へとプログラムされ戻されることができる。例えば、分岐予測状態抽出命令は指定されたシステムレジスタから分岐予測状態を読み出すシステムレジスタ読み出し命令であることができ、又はターゲットアドレスとして分岐予測状態情報の少なくともサブセットを格納するレジスタにマッピングされるアドレスを指定するロード命令であることができる。第２の実例は、メモリにマッピングされた構造が分岐予測状態情報のために使用される場合、有用であり得る。どのタイプの分岐予測状態抽出命令が使用されるかに関わらず、分岐予測状態抽出命令は分岐予測状態を直接メモリに転送できるか、又は後続のストア命令が次いで抽出された分岐予測状態をメモリに保存できる汎用レジスタに抽出された状態を転送できるかのいずれかであり、それによって後に必要であれば再度読み出されることができる。
【００２３】
分岐予測状態プログラミング命令に関しては、分岐予測状態抽出命令の実行は一定のしきい値特権レベル又はそれより高い特権レベルに制限することができる。したがって、しきい値特権レベルより低い特権を与えられた状態での分岐予測状態抽出命令の実行は例外を伝達させ得る。
【００２４】
静的分岐予測モードの間、分岐予測状態情報は所与の分岐命令の少なくとも１つのプロパティに基づいてインデックス付けされる。ここで用語「インデックス付けされる」とは、所与の分岐命令についての予測を行うために使用する分岐予測状態の項目の選択を指している。したがって、分岐予測状態の特定の項目が所与の分岐命令の少なくとも１つのプロパティに基づいて選択される。分岐の様々なプロパティが分岐予測状態へインデックス付けするために使用され得る。
【００２５】
一実例において、所与の分岐命令の少なくとも１つのプロパティは所与の分岐命令のオペコードから導出した情報を含むことができる。オペコードは実行される特定のタイプの命令を特定する命令エンコードの一部である。いくつかのシステムは複数の様々な分岐タイプをサポートすることができる。例えば、様々な分岐命令タイプは、
・  分岐の結果が条件ステータスレジスタに記憶される条件コードに依存するが、分岐自身は分岐する又は分岐しないかどうかの判断について、２つのオペランド同士の比較をトリガしない、分岐命令を含むことができる。いくつかの実例において、そのような条件付きの分岐命令は単一の「分岐タイプ」とみなされ得る。他の実例において、異なる試験条件を有する条件付き分岐命令は異なる分岐タイプとみなされ得る（試験条件は、分岐が分岐されるようにするための条件コードによって満足される条件である）。例えば、ｂｒａｎｃｈ−ｉｆ−ｅｑｕａｌ（Ｂ．ＥＱ）条件付き分岐命令は条件コードが「等しい」条件を示す場合に分岐することができ、一方でｂｒａｎｃｈ−ｉｆ−ｎｏｔ−ｅｑｕａｌ（Ｂ．ＮＥ）条件付き分岐命令は条件コードが「等しくない」条件を示す場合分岐が分岐できるようにトリガすることができる。したがって、いくつかの実例において、Ｂ．ＮＥ及びＢ．ＥＱ分岐命令は異なる分岐タイプとして取り扱うことができる。より一般的に、異なる試験条件を指定する条件付き分岐命令はサブセットに分割することができ、試験条件の第１のサブセットを指定する条件付き分岐は、試験条件の第２のサブセットを指定する条件付き分岐への異なる「分岐タイプ」として取り扱われる。
・  分岐を取るかどうかを判断するための比較も実施する、比較及び分岐命令
・  比較がデフォルトでは指定されたオペランドと値０との比較である、比較及びｂｒａｎｃｈ  ｉｆ  ｚｅｒｏ（ＣＢＺ）命令
・  条件付き分岐演算を実行することに加えて、分岐が分岐する場合、分岐の後次の順次の命令のアドレスが関数のリターンアドレスとして機能するためにリンクレジスタに書き込まれ、関数のリターンアドレスは分岐先の関数の処理が完了すると実行の対象となるものである、リンク命令を伴う分岐。
・  条件付き分岐演算に加えて、命令セットの変更をやはりトリガし、それによって分岐が分岐する場合分岐に続いて実行される命令は、分岐に先立って使用されている命令セットとは異なる命令セットにしたがってデコードされる、分岐及び変更命令セット命令。
【００２６】
これらは、異なるオペコードによって識別され得る潜在的な分岐タイプのいくつかの実例に過ぎず、いくつかのシステムはまたこれらの分岐タイプの様々な組み合わせをサポートすることができることを了解されたい。発明者は所与の分岐について分岐オペコードと最も可能性のある分岐振る舞いとの間に相関関係があり得ることを見出している。例えば、いくつかの分岐オペコードについて、分岐は通常分岐オフセットが正である場合には分岐し、負のオフセットでは分岐しないが、一方で他のオペコードについては反対の振る舞いが見られてもよい。他のオペコードはそれらのオフセットが正か負かどうかに関わらず通常分岐しなくてもよい。したがって分岐予測状態にインデックス付けする際のオペコードを考えると、これは異なる分岐予測振る舞いを、最も可能性のある振る舞いにマッチングさせるために異なる分岐オペコードタイプについて選択させることによってパフォーマンスを改善することができる。これはパフォーマンスを改善するために有用であり得るが、またオペコードを分岐予測状態へのインデックス付けの一部として考えると、これは多くの動的分岐予測器で使用されるような分岐命令アドレスによってインデックス付けされる分岐予測テーブルよりも単純な分岐予測状態テーブルを維持させることができ、命令アドレスなどの他のプロパティを考慮しなくても、オペコードに基づくインデックス付けにより、いくつかの作業負荷について妥当なレベルのパフォーマンスをさらに与えることができる。
【００２７】
考えられ得る別のプロパティは所与の分岐命令が前方分岐（正の分岐オフセットを有する）か、又は後方分岐（負の分岐オフセットを有する）かの指標であることができる。例えば、一実装形態において、分岐予測テーブルは１ビットの指標のセット又はＮビットの飽和カウンタ（ここでＮは２以上）を含むことができ、ここで予測に使用するための特定のビット又はカウンタは、オペコードの少なくとも一部と命令が前方分岐か又は後方分岐かの指標との組み合わせに基づいて選択される。これによって、それぞれのオペコードについて別個に、正のオフセットを伴うそのオペコードの分岐が分岐する又は分岐しないと予測されるかどうかの設定、またそのオペコードを有する負のオフセットを伴う分岐が分岐する又は分岐しないと予測されるかどうかの設定を可能にするであろう。そのような静的予測関数は、いくつかの自動車ベンチマークにおいて、予測状態の多くのさらなるビットを使用し得るいくつかのより複雑な予測器を凌ぐことが分かっている。
【００２８】
分岐予測状態へインデックス付けするために使用され得る分岐プロパティの別の態様は所与の分岐命令についての分岐オフセットのサイズであることができる。例えば、分岐オフセットのサイズが一定のしきい値よりも大きいか又は小さいか、の指標がインデックスの一部として与えられ得る。
【００２９】
いくつかの実装形態において、分岐予測状態情報へのインデックス付けについてベースとして使用される所与の分岐の少なくとも１つのプロパティは、所与の分岐命令への命令アドレスとは独立していてもよい。アドレスによってインデックス付けされていない分岐予測状態テーブルは比較的珍しいことであり得、なぜならたいていの動的分岐予測器は命令アドレスを考慮するであろうし、また静的分岐予測器では同一のグローバルな静的予測規則がすべての分岐に適用されるため、たいていの静的分岐予測器は分岐予測状態テーブルを全く有していないであろうからである。分岐の命令アドレスを無視することが潜在的に分岐予測のパフォーマンスの低下につながることが考えられるであろう。しかしながら、安全性が致命的となる、又は決定論が最重要な基準であるリアルタイムな適用例について、これは許容され得、また上で議論したようにインデックス付けが命令アドレス以外のプロパティに基づいている静的分岐予測モードについてのプログラム可能な状態テーブルの使用は、既知のレイテンシ限界で妥当なレベルのパフォーマンスを与えるのに十分であり得る。例えば、テーブルが少なくともオペコードに基づいてインデックス付けされ、また命令アドレスとは独立している場合、これは格納される分岐予測状態の合計ビット数の観点で非常に低いコストで妥当なパフォーマンスを与えることが分かっている。
【００３０】
したがって所与の分岐命令について、所与の分岐命令の少なくとも１つのプロパティに基づいてインデックス付けされ、所与の分岐命令のオペコードから導出される情報を含むオペコードインデックス付けテーブルに基づいて分岐するか又は分岐しないかの結果を予測する分岐予測器は、非常に低いコストで妥当なレベルの予測パフォーマンスを与えるやり方として、様々な分岐予測器にわたって有用であり得る。したがってそのようなオペコードインデックス付けテーブルは静的分岐予測モードをサポートしない分岐予測器においてやはり使用され得るが、デバイスが動作可能となれば実際の分岐結果に基づいて分岐予測状態が訓練され続ける動的分岐予測モードを使用することができる。
【００３１】
特に、オペコードインデックス付けテーブルが命令アドレスとは独立しているプロパティに基づいてインデックス付けされる場合、これは非常に少ないオーバヘッドを与えることができる。例えば、一実装形態において、発明者は約１６０ビットの分岐予測状態を使用する、オペコードと分岐オフセットが正か負かとの組み合わせに基づいてインデックス付けされる小さい予測器は、いくつかの自動車ベンチマークに関して約３５００ビットを使用するより複雑な予測器を凌ぐことができることを見出している。
【００３２】
いくつかの実装形態において、オペコードインデックス付けテーブルは予測される分岐結果を決定するために使用される分岐予測状態だけであり得る。しかしながら、他の場合においてこれは分岐予測を導出するために使用される分岐予測状態情報の複数のテーブルのうちの１つとして含められ得る。
【００３３】
例えば、いくつかの場合において、オペコードインデックス付けテーブルは、所与の分岐の命令アドレス及び以前に実行された分岐についての以前の分岐結果の履歴のうちの少なくとも１つから導出される情報に基づいてインデックス付けされる他の分岐予測テーブルとともにより複雑な予測器の一部として使用され得る。例えば、上で議論したオペコードインデックス付けテーブルは、パーセプトロン又はＴＡＧＥ予測器などのより大きい予測器の構成要素であることができる。オペコードインデックス付けされたテーブルの提供は、例えば、命令アドレスに基づくメインの予測が十分な信頼度を与えないようないくつかの分岐の場合においてフォールバックとして作用することについて、より大きいパーセプトロン又はＴＡＧＥ予測器の正確さを向上させるための助けとなり得る。
【００３４】
図１はデータ処理システム２の実例を概略的に示す図である。システムは、命令キャッシュ６又はメモリシステムからプログラム命令をフェッチするためのフェッチ工程４、フェッチされた命令をデコードするためのデコード工程８、命令によって要求されるオペランドが利用可能かどうかをチェックし、オペランドが利用可能となれば実行のための命令を発行する発行工程１０、レジスタ１４から読み出されたオペランドについてデータ処理を実施するための命令を実行し、処理結果を生成するための実行工程１２、実行工程１２によって生成された処理結果をレジスタ１４に書き戻すライトバック工程１６、を含む複数のパイプライン工程を含む処理パイプラインを含む。実行工程は複数の実行ユニットを含み、この実例において、算術又は論理演算を実施するための算術／論理ユニット（ＡＬＵ：ａｒｉｔｈｍｅｔｉｃ／ｌｏｇｉｃ  ｕｎｉｔ）１８、浮動小数点の数を伴う演算を実施するための浮動小数点ユニット２０、及びメモリシステムからのデータをレジスタ１４にロードするためのロード命令、又はレジスタ１４からのデータをメモリシステムに格納するためのストア命令などのメモリアクセス動作を扱うためのロード／ストアユニット２２を含む。この実例において、メモリシステムは命令キャッシュ６、レベル１データキャッシュ２４、データ及び命令のために使用される共有されるレベル２キャッシュ２６、並びにメインメモリ２８を含む。これは可能なメモリヒエラルキーの一実例に過ぎず、キャッシュ又はメモリの他の配置が与えられ得ることを了解されたい。やはり、図１に示されるパイプライン工程の特定の配置は一実例に過ぎず、アウトオブオーダのプロセッサにおけるレジスタリネーム工程など、他のパイプライン工程が与えられ得る。
【００３５】
装置２はパイプラインによって実行される分岐命令の結果を予測するための分岐予測器３０を有している。予測は分岐予測状態記憶装置３２に格納される分岐予測状態情報に基づいている。分岐予測器３０によってなされる予測に基づいて、フェッチ工程４はパイプラインによる実行のための命令をフェッチし、それによって分岐に続いて実行される必要があると予測される命令が、分岐の結果が実際に分かる前にフェッチされる。分岐の複数のプロパティが分岐予測器によって予測され得、例えば、分岐方向（分岐する、又は分岐しない）及び分岐ターゲットアドレス（分岐が分岐すると予測された場合に分岐の後次に実行されることになる命令のアドレス）などである。分岐ターゲットアドレスの予測のために、あらゆる既知の技法を使用することができる。以下の実例は分岐方向の予測に焦点をあてる。
【００３６】
図２は分岐予測状態記憶装置３２によって記憶され得る分岐予測状態の第１の実例を示す。この実例において、分岐予測状態は１ビットの指標３４のセットを含むオペコードインデックス付け分岐予測テーブルであり、分岐命令のオペコード３５と分岐命令が前方分岐か後方分岐かの指標３８との関数として導出されたインデックス値に基づいてインデックス付けされる。例えば、前方分岐か後方分岐かの指標３８はその分岐についての分岐オフセットの最上位ビットとして選択され得、０であれば正の分岐オフセットを有する前方分岐を示し、１であれば負の分岐オフセットを有する後方分岐を示す。オペコードと前方／後方分岐指標３８とを組み合わせてインデックスとすることによって、これは事実上分岐予測状態テーブル３２が、分岐が分岐するか、又は分岐しないかについての予測の２次元テーブルとして作用することを意味しており、以下のとおりである：
【表１】
2020119504.tif 000003
例えば、ビット１は分岐するという予測を表すことができ、ビット０は分岐しないという予測を表すことができ、又はその逆も可である。
【００３７】
このテーブルは分岐の命令アドレスとは独立してインデックス付けられ、それによって所与の分岐オペコードを有するすべての前方分岐は、プログラム中どこに出現するかに関わらず自身についてなされた同一の分岐する又は分岐しないの予測を有することができることに留意されたい。同様に、所与の分岐オペコードのすべての後方分岐は同一の予測を有することができる。事実上、この分岐予測テーブルは、従来的に前方分岐は分岐しない、後方分岐は分岐すると扱う静的分岐予測スキームの拡張であるが、この規則をオペコードごとにプログラム可能とし、それによって正の分岐オフセット又は負の分岐オフセットが分岐する又は分岐しないと予測されるかどうかが、それぞれのオペコードについて別個に設定され得る。すなわちテーブルのこの実例はオペコードごとに２ビットを含んでおり、１つのビットは静的予測がオペコードの正のオフセットについて行われるかどうかを判断し、もう１つのビットは静的予測がオペコードの負のオフセットについて行われるかどうかを判断する。
【００３８】
以下で議論するように、これらのビットの値３４はプログラム可能であり得、プロファイリングモードにおいて、又はそれぞれのビット３４の値をコードプロファイリングに基づいてセットするための専用の命令によって、のいずれかである。
【００３９】
図３は図２におけるものと同一のインデックス関数を使用するが、今度は分岐予測状態のそれぞれの項目がＮビットの飽和カウンタ３６である、代替的なオペコードインデックス付けテーブルを示しており、ここでＮは２以上である。この手法は以下で議論するようにプロファイリングモードをサポートするために有用であり得る。この手法では、分岐予測器３０がオペコード３５及び前方／後方分岐指標３８に基づく分岐予測状態３６の項目のうちの１つにインデックス付けする際、カウンタが何らかのしきい値（例えば、０）以上であれば分岐は分岐すると予測され得、カウンタがそのしきい値未満であれば分岐は分岐しないと予測され得る。
【００４０】
図４はプロファイリングモードで動作する分岐予測器３０の実例を概略的に示す。プロファイリングモードにおいて、分岐予測器３０は、実行される分岐命令について実行工程１２によって与えられる実際の分岐結果３９の指標に基づいて分岐予測状態記憶装置３２に記憶される状態を訓練する（図１参照）。例えば、実行工程１２において分岐命令が分岐すると判断されると、分岐予測器３０は飽和カウンタ３６のうちの対応する１つをインクリメントして、その分岐について再度分岐すると予測される可能性を増やすことができる。カウンタがその最大の正の値に達すると飽和し、分岐がもう一度分岐するとして解決されても再度インクリメントされない。もう一方で、実行される分岐が、分岐しないと判断されると、対応するカウンタはデクリメントされ、やはりカウンタの最も負の値で飽和する。このやり方で、所与のアプリケーションについてプログラムコードが実行される際、分岐予測状態が実際の分岐結果に基づいて訓練される。図４に示されるように、カウンタ３６の訓練された値は所与のアプリケーションをある期間実行させた後抽出し、メモリシステムに保存することができ、それによってそれらは同一のアプリケーションが再度実行される時、分岐予測状態記憶装置３２にプログラムされ得る。これはそれぞれのアプリケーションについて別個になされてもよく、例えば、図４は実際の解決する分岐結果に基づいて訓練することによって導出された分岐予測状態のセットをそれぞれ有する２つのアプリケーションＡ及びＢを示しており、それぞれのアプリケーションについての分岐予測状態はメモリに保存される。例えば、分岐予測状態記憶装置３２から分岐予測状態を抽出するために使用される命令は、システムレジスタを読み込むための命令であることができ、又は分岐予測状態記憶装置３２に対応するレジスタのセットをマッピングされたメモリからデータをロードするためのロード命令であることができる。
【００４１】
対照的に、図５は実行される分岐の実際の結果３９に基づく分岐予測状態記憶装置内の分岐状態の更新がない、静的分岐予測モードの実例を示す。この手法では、一度静的分岐予測モードになると、分岐予測状態記憶装置３２内の値が固定される。これは、プロファイリングモードをサポートしていない図２の実例のいずれかに基づくことができ、この場合静的に設定された分岐予測状態の固定された値は、所与のソフトウェアを開発する開発者によってコードプロファイリングによって早期に決定され得る。代替的に、静的値は図３の実例におけるカウンタ３６の値であることができ、図４で示されるようなプロファイリングモードの使用によって取得されたものである。静的分岐予測モードの間、所与のアプリケーションが実行し始めると、オペレーティングシステム又はそのアプリケーションのスケジューリングを管理する別の管理プロセスは、分岐予測状態記憶装置３２を、その特定のアプリケーションについて以前に導出された適当な分岐予測状態値のセットでプログラムすることができる。したがって、アプリケーションＡからアプリケーションＢへのスイッチングの際、オペレーティングシステム又は他のスーパーバイザソフトウェアは分岐予測状態記憶装置を再プログラムすることができ、新しいアプリケーションＢについて以前にセットされた静的値にロードする。スイッチングしてアプリケーションＡに戻る際、やはり分岐予測状態記憶装置３２は図５で示されるように再度、再プログラムされ得る。しかしながら、一度プログラム値がセットされてしまうと、静的分岐予測モードの間、そのアプリケーションの実行される分岐について実行工程１２によって決定される実際の分岐結果３９に基づく、その分岐予測状態のさらなる更新は行われない。これは、所与のソフトウェアを実行する際、安全性が致命的となる、又は決定論的な応答レイテンシが重要であるリアルタイムなアプリケーションについて、非常に有用であり得る。
【００４２】
したがって、要約すると、決定論的な振る舞いを保持しながらも最良のパフォーマンスを与えるために、コードプロファイリングに基づいてプログラムされ得る静的な分岐予測器が提供される。コードプロファイリングは、ソフトウェア／システム開発の間デバイス自身によって実施されることができ、現場における通常運転の間はロックされている。さらには、いくつかの実例において、静的予測関数はタスクごとにチューニングすることができる。
【００４３】
決定論に気を遣う市場においては、動的分岐予測は決定論とは反対にパフォーマンスにおいて多くの理解しがたいジッタを招くため、静的分岐予測が採用され得る。静的予測の問題は、非常に低い予測精度を提供することであり、これはパフォーマンスが低いことを意味している。静的予測は通常柔軟性に欠け、従来的には前方分岐（正のオフセット）を分岐しない、後方分岐（負のオフセット）を分岐すると扱う。その静的予測関数は「予測（オフセット）＝オフセット＜０？  分岐する：分岐しない」である。これは単一の変数を使用する：分岐ターゲットオフセット。
【００４４】
対照的に、上の図２及び図３の実例において、静的予測を行うために使用される複数の変数が拡大され、予測機能はハードウェアにおいてプログラム可能とされる。例えば、典型的な命令セットアーキテクチャにおいて、条件付き分岐オペコードは比較的少なくてよく、そのオフセットの符号と分岐の典型的な分岐することとの関連性は様々なオペコードごとに異なっていてよいことが観察され得る。いくつかのオペコードは通常正のオフセットで分岐し、負のオフセットで分岐しないが、その一方で他のオペコードは反対の振る舞いを示す。いくつかのオペコードは自身のオフセットに関わらず、通常分岐する又は分岐しない。したがって、上の静的予測関数は多くの分岐タイプにあまり当てはまらない。オペコード並びにオフセットを考慮するために静的予測を拡大することによって、より良好なパフォーマンスを達成することができる。
【００４５】
一実例において、これはオペコードごとに２ビットを使用してプログラム可能となり、１つのビットは静的予測がオペコードの正のオフセットについて分岐するかどうかを判断し、もう１つのビットは静的予測が負のオフセットについて分岐するかどうかを判断する。これらのビットについて最良の値を決定するため、コードをプロファイルすることができる。プログラム可能な予測テーブルは事実上オペコードタイプ及びオフセットが正か負かを示すビットによってインデックス付けされた２次元配列である。テーブルは予測が分岐するか又は分岐しないかを示すビットを格納する：ビット予測＿テーブル［オペコード］［ビット］。
【００４６】
静的予測関数は
予測（オフセット、オペコード、予測＿テーブル［］［］）＝予測＿テーブル［オペコード］［オフセット＜０］
となる。
【００４７】
予測テーブルが固定されていれば、これは決定論的な静的予測である。
【００４８】
さらなる拡張は、予測テーブルにおいてオペコードごとに２ビット使用する代わりに、図３で示されるようにオペコードごとに２つのＮビットの飽和カウンタが使用され得ることであってもよい。１つのカウンタは正のオフセットを扱い、もう１つのカウンタは負のオフセットを扱う。これらのカウンタは特権を与えられたソフトウェアによってプログラム可能なレジスタに格納され、追加的なプログラム可能なレジスタはシステムがプロファイリングモードにあるか、又は決定論的なモードにあるかどうかを制御する。次に予測テーブルを以下のように定義する：ビット［Ｎ−１：０］予測＿テーブル［オペコード］［ビット］。
【００４９】
決定論的であることが必要とされるシステムソフトウェアに書き込む際、開発者はプロファイリングモードでソフトウェアを実行する。このモードにおいて、プロセッサは以下のアルゴリズムにしたがって予測テーブルのそれぞれのカウンタを、自動的にインクリメント及びデクリメントする。
１．リセットにおいて、すべてのカウンタはゼロである。
２．分岐が分岐すると分かると、プロセッサハードウェアによって、そのオペコード及びオフセット符号についてのカウンタ（すなわち、予測＿テーブル［オペコード］［オフセット＜０］）をインクリメントする（飽和させる）。
３．分岐が分岐しないと解決されると、プロセッサハードウェアによって、そのオペコード及びオフセット符号についてのカウンタをデクリメントする（飽和させる）。
４．予測が行われる際、予測は必要とされるオペコード及びオフセットについてインデックス付けされたカウンタが、しきい値を上回っているかどうか、又はしきい値を下回っているかどうかに基づいている（例えば、しきい値がゼロである場合、予測はインデックス付けされたカウンタの最上位ビットに基づくことができる）。
【００５０】
プロファイリングモードにおいて、プログラムの実行の間カウンタは変化するため、予測器はもはや静的ではない。しかしながらプログラムの終了において、カウンタが十分に広い場合であれば、カウンタはそのプログラムについて分岐の平均的な振る舞いを近似する値に達している。開発者は、決定論的モードにおいて現場でソフトウェアを実行する際、最良の固定値を決定して使用するために、これらの予測＿テーブル［］［］の値を読み返すことができる。様々なアプリケーションが様々な典型的な分岐振る舞いを見せることがあるため、これはアプリケーションごとに繰り返すことができる。
【００５１】
タスクごとに静的予測関数についての好ましいパラメータを取得するためのメカニズムを有しているため、システムはデバイスが現場で実行される際タスクごとに静的予測器を好ましい分岐状態に自動的にプログラムすることができる。これは所与のアプリケーション（プロファイリングモードにおいて実行することによって決定されるような）について好ましい予測テーブルの値をソフトウェアにエンコードすることによって達成され得、イメージの開始においてリテラルプールを使用すること、又は何らかの他のやり方でそれをソースコードにエンコードすることによってなされ得る。
【００５２】
次にオペレーティングシステムを決定論的な（静的分岐予測）モードで実行するようにプログラムすることができる。決定論的なモードにおいて、プロセッサは予測＿テーブル［］［］カウンタを自動的にインクリメント／デクリメントしない。特権を与えられたソフトウェアだけが明示的な書き込みによって予測テーブルを修正することができる。しかしながら、決定論的なモードにおいて、静的予測関数は最後の定義と同一である。決定論的なモードにおいて、新しいタスクを開始するとＯＳは予測＿テーブル［］［］にタスクイメージから取得されるようなタスクについて最適な値で書き込むことができる。このように、それぞれ個々のタスクについての静的予測関数は、そのタスクについて最適な値であると決定されているパラメータを使用する。
【００５３】
これはずっと高度な柔軟性、及び画一的な静的予測関数よりずっと良好なパフォーマンスを提供する。
【００５４】
プロファイリングモードで実行する際、予測器は事実上非常に軽量の動的予測器であることに留意されたい。やはり動的予測のコンテキストで使用され得る適用例がある。説明したような予測器は非常に小さく、例えば、４ビットのカウンタを使用する一実例において１６０ビットしか使用しない。事実上動的予測器として使用される際、いくつかの自動車のベンチマークについて、これは多くのさらなるビットを使用するずっと複雑な予測器を実際に凌ぐことができる。したがって、この動的予測器を、精度を高めるためにより大きな予測器の構成要素として使用することも可能である。
【００５５】
したがって、図２又は図３の実例で示されるオペコードインデックス付けテーブル３２は、動的分岐予測を使用するより大きな予測器の一部として使用されることもできる。図６はオペコードインデックス付けテーブルがパーセプトロン予測器５０内に与えられる複数の予測テーブル６０のうちの１つである、実例を示す。パーセプトロン予測器において、テーブル６０、３２のそれぞれは予測される分岐のいくつかのプロパティ又は実行されるプログラムの振る舞いに基づいてインデックス付けされる。例えば、図６において、テーブルＴ０は予測される現在の命令の命令アドレスを示すプログラムカウンタに基づいてインデックス付けされ、テーブルＴ１及びＴ２は、プログラムカウンタと、極めて最近のＸ分岐（ここでＸは何らかの整数）の分岐する／分岐しないの結果を追跡するグローバル履歴レジスタ（ＧＨＲ：ｇｌｏｂａｌ  ｈｉｓｔｏｒｙ  ｒｅｇｉｓｔｅｒ）の個々の部分ＧＨＲ０、ＧＨＲ１との組み合わせに基づいてインデックス付けされる。ここで、グローバル履歴レジスタはプログラム内で極めて最近に見られた分岐の分岐する又は分岐しないの結果を追跡し、ここでそれらの分岐はあらゆる命令アドレスにおける分岐であり、現在のプログラムカウンタに関連付けられる分岐を実行する極めて最近のＸインスタンスではない。予測テーブルＴ０からＴ２はパーセプトロンのためにテーブルがどのように定義され得るかの一実例に過ぎないことを了解されたい。オペコードインデックス付けテーブル３２は他の予測テーブルＴ０からＴ２とともに、第４の予測テーブルＴ３として与えられる。テーブルのそれぞれは対応するプロパティ（プログラムカウンタ、プログラムカウンタと組み合わされるＧＨＲ０、プログラムカウンタと組み合わされるＧＨＲ１、又は前方／後方分岐指標３８と組み合わされるオペコード３５）に基づいてインデックス付けされる信頼度値のセットを与える。これらの信頼度値は、動的分岐予測モードでコードを処理する間実行工程１２で実行される解決された分岐の結果から分かる。所与のインデックスについてそれぞれのテーブルによって出力された信頼度値６２は、現在の分岐についての全体的な予測信頼度を与えるために、加算回路６４によってともに加算される。現在の分岐についての予測信頼度は次いでしきい値と比較することができ、しきい値よりも大きい場合、分岐は分岐すると予測され得、しきい値よりも小さい場合、分岐は分岐しないと予測され得る。したがって、オペコードインデックス付けテーブル３２はより大きなパーセプトロン予測器の構成要素の一部として、その精度を高めるために、使用することができる。
【００５６】
図７はＴＡＧＥ分岐予測器の第２の実例を示しており、図２又は図３のオペコードインデックス付けテーブル３２がフォールバック予測テーブルとして使用されており、複数のＴＡＧＥ予測テーブル７０によってなされる予測を補足している。この実例において、ＴＡＧＥ分岐予測器は、上で議論した予測される分岐の命令アドレスを示すプログラムカウンタとグローバル履歴レジスタ（ＧＨＲ）の部分との関数として導出されるインデックスに基づいて選択される予測信頼度を与える予測テーブル７０のセットを使用する。ＴＡＧＥテーブル７０のそれぞれはＧＨＲからのより長い履歴情報を連続的に使用し、例えば、テーブルＴ０はプログラムカウンタと履歴の第１の部分ＧＨＲ０（最も最近の分岐履歴に対応する部分）との組み合わせに基づいてテーブルにインデックス付けする。テーブルＴ１はプログラムカウンタ、履歴部分ＧＨＲ０、及びＧＨＲ０より最近ではない分岐に対応するグローバル履歴レジスタのさらなる部分ＧＨＲ１の組み合わせに基づいてインデックス付けされ、テーブルＴ２はテーブル１について使用されたＧＨＲ０及びＧＨＲ１に加えてグローバル履歴レジスタの追加的な部分ＧＨＲ２を考慮したさらに長い履歴に基づいてインデックス付けされる。ＴＡＧＥ予測器は個々のＴＡＧＥテーブルによってなされる予測同士の間で選択を行うセレクタ７２を有しており、それによって、グローバル履歴レジスタからの履歴の最長シーケンスについてどのテーブルがヒットを生成しても、その予測結果をＴＡＧＥテーブルからの全体的な予測として有する。例えば、ヒットを生成した唯一のテーブルがＴ０である場合、Ｔ０によってなされる予測がセレクタ７２によって選択される。しかしながら、テーブルＴ１がヒットを生成する場合、その予測がテーブルＴ０の予測よりも優先されて選択されるが、それはより長い長さの分岐履歴を有しているとみなされるためより正確な可能性があるからである。したがって、ＴＡＧＥ手法は予測精度の向上とヒット率の向上のトレードオフを可能にするが、時にどのＴＡＧＥテーブルもヒットを生成することができないことがあり、この場合、フォールバックテーブル３２によってなされるフォールバック予測が使用され得る。上述のオペコードインデックス付けテーブル３２はＴＡＧＥテーブルが十分な信頼度を生成しない場合に使用され得るフォールバック予測を与える比較的低コストのやり方であり得る。
【００５７】
もちろん図６及び図７の予測器はただのいくつかの実例に過ぎず、一般的にあらゆる分岐予測器３０は分岐予測器の構成要素としてオペコードインデックス付けテーブル３２を含むことができる。いくつかの場合において、そのような分岐予測器は、テーブル３２のオペコードの予測状態が分岐命令を実行する結果に基づいて訓練され続けられる動的予測モードを使用することができる。しかしながら、他の実例において、図５に示されるように予測器は決定論を与えるために静的分岐予測モードを使用することができ、それによってオペコードインデックス付けテーブルの値がプログラミングによって一度固定されると、決定論的な応答時間を確保するために実際の分岐結果に基づくその予測状態の後続の更新はない。
【００５８】
本出願において、語句「するように構成される」は、装置の要素が定義される動作を実行することができる構成を有することを意味するために使用される。このコンテキストにおいて、「構成」はハードウェア又はソフトウェアの内部接続の、配置又はやり方を意味する。例えば、装置は定義される動作を提供する専用のハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスは機能を実施するためにプログラムされてもよい。「するように構成される」は、定義される動作を提供するために装置要素がいかなるやり方でも変更される必要があることを含意するものではない。
【００５９】
本発明の図示的な実施例を本明細書において添付の図面を参照して詳細に説明してきたが、本発明はこれらの正確な実施例に限定されず、当業者により添付の特許請求の範囲によって定義されるような本発明の範囲及び精神を逸脱することなく、その様々な変形及び修正がそこになされ得ることを理解されたい。
【図１】
2020119504.tif 000004
【図２】
2020119504.tif 000005
【図３】
2020119504.tif 000006
【図４】
2020119504.tif 000007
【図５】
2020119504.tif 000008
【図６】
2020119504.tif 000009
【図７】
2020119504.tif 000010
【外国語明細書】
2020119504000001.pdf