(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-25
(45)【発行日】2024-07-03
(54)【発明の名称】分岐予測器
(51)【国際特許分類】
G06F 9/38 20180101AFI20240626BHJP
G06F 9/30 20180101ALI20240626BHJP
G06F 9/32 20180101ALI20240626BHJP
【FI】
G06F9/38 330D
G06F9/30 350A
G06F9/32 320E
G06F9/38 380B
【外国語出願】
(21)【出願番号】P 2019211983
(22)【出願日】2019-11-25
【審査請求日】2022-11-18
(32)【優先日】2019-01-18
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】マシュー リー ウィンロー
【審査官】漆原 孝治
(56)【参考文献】
【文献】特開平06-075769(JP,A)
【文献】特開平06-124206(JP,A)
【文献】山名 早人,投機的実行の現状とUnlimited Speculative Execution Schemeの提案,情報処理学会研究報告,日本,社団法人情報処理学会,1994年07月23日,第94巻,第66号,pp.105-112
【文献】SUGATeCH,分岐予測とパイプラインの関係はいかなるものか?,C MAGAZINE,日本,ソフトバンククリエイティブ株式会社,2006年01月01日,第18巻,第1号,pp.98-102
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
G06F 9/30
G06F 9/32
(57)【特許請求の範囲】
【請求項1】
命令に応答してデータ処理を実施するための処理回路と、
所与の分岐命令について分岐する及び分岐しないのうちの1つとして、前記所与の分岐命令の少なくとも1つのプロパティに基づいてインデックス付けされる分岐予測状態情報に基づいて分岐結果を予測するための分岐予測器と
を備える装置であって
、
動作の静的分岐予測モードにおいて、前記分岐予測器は、前記処理回路によって前記静的分岐予測モードにある間実行される分岐命令の実際の分岐結果とは独立してセットされる前記分岐予測状態情報の静的値に基づいて前記分岐結果を予測するように構成され、
前記分岐予測状態情報の前記静的値はプログラム可能であ
り、
動作のプロファイリングモードにおいて、前記分岐予測器は前記プロファイリングモードの間実行される分岐命令の実際の分岐結果に基づいて前記分岐予測状態情報を訓練するように構成される、
装置。
【請求項2】
前記処理回路は、前記処理回路によって実行される分岐予測状態プログラミング命令に応答して、前記分岐予測状態情報の少なくともサブセットをプログラムするように構成される、請求項1に記載の装置。
【請求項3】
前記分岐予測状態プログラミング命令は、
システムレジスタ更新命令と、
ターゲットアドレスとして前記分岐予測状態情報の前記少なくともサブセットを格納するレジスタにマッピングされるアドレスを指定するストア命令と
のうちの1つを含む、請求項2に記載の装置。
【請求項4】
命令に応答してデータ処理を実施するための処理回路と、
所与の分岐命令について分岐する及び分岐しないのうちの1つとして、前記所与の分岐命令の少なくとも1つのプロパティに基づいてインデックス付けされる分岐予測状態情報に基づいて分岐結果を予測するための分岐予測器と
を備える装置であって、
動作の静的分岐予測モードにおいて、前記分岐予測器は、前記処理回路によって前記静的分岐予測モードにある間実行される分岐命令の実際の分岐結果とは独立してセットされる前記分岐予測状態情報の静的値に基づいて前記分岐結果を予測するように構成され、
前記分岐予測状態情報の前記静的値はプログラム可能であり、
前記処理回路は、前記処理回路によって実行される分岐予測状態プログラミング命令に応答して、前記分岐予測状態情報の少なくともサブセットをプログラムするように構成され、
前記処理回路は、複数の特権レベルのうちの1つにおいて命令を実行するように構成され、また前記処理回路は、前記分岐予測状態プログラミング命令がしきい値特権レベルよりも低いレベルの特権レベルで実行されると例外をトリガするように構成される
、
装置。
【請求項5】
前記分岐予測状態情報は前記所与の分岐命令の前記少なくとも1つのプロパティに基づいてインデックス付けされる飽和カウンタのセットを含む、請求項
1に記載の装置。
【請求項6】
前記処理回路は、前記処理回路によって実行される分岐予測状態抽出命令に応答して、前記プロファイリングモードの間訓練される前記分岐予測状態情報の少なくともサブセットの現在の値を抽出するように構成される、請求項
1に記載の装置。
【請求項7】
前記分岐予測状態抽出命令は、
システムレジスタ読み出し命令と、
ターゲットアドレスとして前記分岐予測状態情報の前記少なくともサブセットを格納するレジスタにマッピングされるアドレスを指定するロード命令と
のうちの1つを含む、請求項
6に記載の装置。
【請求項8】
前記処理回路は、複数の特権レベルのうちの1つにおいて命令を実行するように構成され、また前記処理回路は、前記分岐予測状態抽出命令がしきい値特権レベルよりも低いレベルの特権レベルで実行されると例外をトリガするように構成される、請求項
6に記載の装置。
【請求項9】
前記所与の分岐命令の前記少なくとも1つのプロパティは、前記所与の分岐命令が前方分岐か後方分岐かの指標を含む、請求項1に記載の装置。
【請求項10】
前記所与の分岐命令の前記少なくとも1つのプロパティは、前記所与の分岐命令についての分岐オフセットのサイズを示す情報を含む、請求項1に記載の装置。
【請求項11】
前記少なくとも1つのプロパティは、前記所与の分岐命令の命令アドレスとは独立している、請求項1に記載の装置。
【請求項12】
所与の分岐命令について分岐する及び分岐しないのうちの1つとして、前記所与の分岐命令の少なくとも1つのプロパティに基づいてインデックス付けされる分岐予測状態情報に基づいて分岐結果を予測するステップ
を含む、データ処理装置のための分岐予測方法であって
、
動作のプロファイリングモードにおいて、前記分岐予測状態情報は前記プロファイリングモードの間実行される分岐命令の実際の分岐結果に基づいて訓練され、
動作の静的分岐予測モードにおいて、前記分岐結果は、前記静的分岐予測モードにある間実行される分岐命令の実際の分岐結果とは独立してセットされる前記分岐予測状態情報の静的値に基づいて予測され、
前記分岐予測状態情報の前記静的値はプログラム可能である、
方法。
【請求項13】
前記分岐予測器は、所与の分岐命令について分岐する及び分岐しないのうちの1つとして、前記所与の分岐命令の前記少なくとも1つのプロパティに基づいてインデックス付けされる分岐予測状態情報のオペコードインデックス付けテーブルに基づいて分岐結果を予測するように構成され
、前記少なくとも1つのプロパティは前記所与の分岐命令のオペコードから導出した情報を含む、請求項1記載の装置。
【請求項14】
前記少なくとも1つのプロパティは、前記所与の分岐命令の命令アドレスとは独立している、請求項
13記載の装置。
【請求項15】
前記少なくとも1つのプロパティは、前記所与の分岐命令が前方分岐か後方分岐かの指標も含む、請求項
13に記載の装置。
【請求項16】
前記分岐予測器は、分岐予測状態情報の複数のテーブルに基づいて前記分岐結果を予測するように構成され、前記複数のテーブルは前記オペコードインデックス付けテーブル、並びに前記所与の分岐命令の命令アドレス、及び以前に実行された分岐についての以前の分岐結果の履歴のうちの少なくとも1つから導出される情報に基づいてインデックス付けされる少なくとも1つのさらなるテーブルを含む、請求項
13に記載の装置。
【請求項17】
前記分岐予測器は動的分岐予測モードの間実行される分岐命令の実際の分岐結果に基づいて前記オペコードインデックス付けテーブルを訓練するように構成される、請求項
13に記載の装置。
【請求項18】
前記分岐予測器は静的分岐予測モードの間実行される分岐命令の実際の分岐結果とは独立してセットされる前記オペコードインデックス付けテーブルの静的値に基づいて前記分岐結果を予測するように構成される、請求項
13に記載の装置。
【発明の詳細な説明】
【技術分野】
【0001】
本技法はデータ処理の分野に関する。より詳細には、分岐予測に関する。
【背景技術】
【0002】
データ処理装置は分岐命令の結果を、それらが実際に実行される前に予測するための分岐予測器を有することができる。分岐命令が実際に実行される前に分岐結果を予測することによって、その分岐に続く後続の命令がフェッチされ始め、分岐命令の実行が完了する前に投機的に実行され得る。予測が正しい場合、単に分岐の結果が実際に分かってからフェッチされ、デコードされ、そして実行される場合よりも後続の命令をより早期に実行できるため、パフォーマンスを節約することができる。
【発明の概要】
【課題を解決するための手段】
【0003】
少なくともいくつかの実例は、命令に応答してデータ処理を実施するための処理回路と、所与の分岐命令について分岐する及び分岐しないのうちの1つとして、所与の分岐命令の少なくとも1つのプロパティに基づいてインデックス付けされる分岐予測状態情報に基づいて分岐結果を予測するための分岐予測器とを備える装置であって、動作の静的分岐予測モードにおいて、分岐予測器は、処理回路によって静的分岐予測モードにある間実行される分岐命令の実際の分岐結果とは独立してセットされる分岐予測状態情報の静的値に基づいて分岐結果を予測するように構成され、分岐予測状態情報の前記静的値はプログラム可能である、装置を提供する。
【0004】
少なくともいくつかの実例は、データ処理装置のための分岐予測方法であって、所与の分岐命令について分岐する及び分岐しないのうちの1つとして、所与の分岐命令の少なくとも1つのプロパティに基づいてインデックス付けされる分岐予測状態情報に基づいて分岐結果を予測するステップを含み、動作の静的分岐予測モードにおいて、分岐結果は、静的分岐予測モードにある間実行される分岐命令の実際の分岐結果とは独立してセットされる分岐予測状態情報の静的値に基づいて予測され、分岐予測状態情報の前記静的値はプログラム可能である、方法を提供する。
【0005】
少なくともいくつかの実例は、命令に応答してデータ処理を実施するための処理回路と、所与の分岐命令について分岐する及び分岐しないのうちの1つとして、所与の分岐命令の少なくとも1つのプロパティに基づいてインデックス付けされる分岐予測状態情報のオペコードインデックス付けテーブルに基づいて分岐結果を予測するための分岐予測器とを備える装置であって、前記少なくとも1つのプロパティは所与の分岐命令のオペコードから導出した情報を含む、装置を提供する。
【0006】
本技法のさらなる態様、特徴及び利点は、添付の図面と併せて読まれる実例の以下の説明から明らかとなろう。
【図面の簡単な説明】
【0007】
【
図1】分岐予測器を有するデータ処理システムの実例を概略的に示す図である。
【
図2】プログラム可能な分岐予測状態情報の第1の実例を示す図である。
【
図3】プログラム可能な分岐予測状態情報の第2の実例を示す図である。
【
図4】分岐予測状態情報を訓練するためのプロファイリングモードを概略的に示す図である。
【
図5】分岐予測状態情報に基づいて予測がなされるが、分岐予測状態情報が実行される分岐命令の実際の分岐結果に応答して更新されない静的分岐予測モードを概略的に示す図である。
【
図6】予測テーブルのうちの1つとして分岐命令のオペコードに基づいてインデックス付けされるテーブルを使用するパーセプトロン分岐予測器の実例を示す図である。
【
図7】予測テーブルのうちの1つとして分岐命令のオペコードに基づいてテーブルインデックスを使用するTAGE分岐予測器の実例を示す図である。
【発明を実施するための形態】
【0008】
装置は、命令に応答してデータ処理を実施するための処理回路と、所与の分岐命令について分岐する及び分岐しないのうちの1つとして、一般的な分岐命令の少なくとも1つのプロパティに基づいてインデックス付けされる分岐予測状態情報に基づいて分岐結果を予測するための分岐予測器とを有することができる。分岐する/分岐しないの結果は、分岐予測器によって予測される分岐の唯一のプロパティでなくてもよい。例えば、分岐予測器はまた分岐命令の分岐ターゲットアドレスなどの他の態様、又は分岐タイプなどの他のプロパティを予測することもできる。しかしながら、分岐の、分岐する又は分岐しないの結果の予測は、分岐後の次の命令がその分岐に順次続く命令(結果が分岐しない、の場合実行される)であるべきか、又は分岐のターゲットアドレスにある命令(結果が分岐する、の場合実行される)であるべきかどうか判断することについて有用であり得る。
【0009】
分岐予測のための一手法は、いくつかの固定規則を使用して所与の分岐命令についての予測を決定する静的分岐予測を使用することである。静的分岐予測は、あらゆる動的なランタイム履歴又は分岐が実行されるコンテキストについてのコンテキスト情報を使用することなく(例えば、分岐の前に実行される以前の命令から導出されるコンテキスト情報)、分岐命令それ自身のプロパティ及び/又は予め定められた状態に基づいてなされる予測であってよい。例えば、静的分岐予測についての単純なスキームは、すべての分岐が分岐しないと予測されるようなものであってもよい。静的分岐予測についての規則の別の実例は、分岐命令それ自身のアドレスに対する分岐ターゲットアドレスを決定するための正のアドレスオフセットを有する前方分岐は分岐しないと予測されるが、一方で負の分岐オフセットを有する後方分岐は分岐すると予測されることであってもよい。この規則は、後方分岐がしばしば、分岐がループが完了するまで一定の回数取られ、次いでいったんそのように後方分岐が分岐しないよりは分岐する見込みが高くなると分岐しないことがあるループ内で使用されるという事実を利用している。しかしながら、そのような静的予測関数に伴う問題は、静的分岐予測についての規則が柔軟性に欠け、すべての分岐に適用されることであり、また静的分岐予測規則によって定義される振る舞いにしたがわない著しい数の分岐があり得ることである。したがって、静的予測関数は多くの分岐にあまり当てはまらないことがあり、そのため比較的低いパフォーマンスを提供することがある。
【0010】
したがって、たいていの近代的なプロセッサにおいて、分岐予測器は動的分岐予測手法を使用しており、動的分岐予測手法では分岐予測は、実行される分岐命令の実際の分岐結果に基づいて訓練されているいくつかの分岐予測状態情報に基づいてなされる。このやり方において、分岐予測状態情報は処理回路によって実際に見られる分岐の振る舞いを反映するよう絶えず更新されることができ、分岐予測器が、所与の分岐が次回見られる際、結果を正しく予測できるような機会を増やす。したがって、分岐予測器が実行される分岐命令の実際の分岐結果から学習する動的分岐予測モードを使用することは、パフォーマンスを改善するために有用であり得る。
【0011】
しかしながら、適用例のいくつかの現場について、所与の数のソフトウェアがその実行レイテンシに一定の決定論的な束縛を伴って実行することが重要であり得る。例えば、自動車内のステアリング、又は制動システムを制御することなど、安全性が致命的である適用例のために設計されたプロセッサにおいて、その処理回路で実行する際コードの振る舞いが決定論的であることは致命的となり得、それによって処理は可能な最高のパフォーマンスを有する必要はないが、処理はレイテンシに関して一定の決定論的なリミット内で完了するよう保証されるべきである。動的分岐予測の使用はパフォーマンスにおいて多くの理解しがたいジッタをもたらすことがあり、これは命令についてなされる分岐予測における違いによって引き起こされる命令の同一シーケンスの実行の異なるインスタンスに関連付けられる変動するレイテンシのため非決定論的である。一連の分岐命令が分岐予測器によって誤って予測される場合、これは分岐が正しく予測される他の場合に比べてパフォーマンスを非常に悪化させ得る。したがって、動的分岐予測は適用例のいくつかの現場についてはあまり好ましくないことがある。
【0012】
以下で議論する技法において、分岐予測器は動作の静的分岐予測モードを有し、そのモードでは分岐結果は、処理回路によって静的分岐予測モードにある間実行される分岐命令の実際の分岐結果とは独立してセットされる分岐予測状態情報の静的値に基づいて予測される。分岐予測状態情報の静的値はプログラム可能である。したがって、動作の静的分岐予測モードにおいては、所与の分岐のセットについてなされる分岐予測が静的に固定されるためパフォーマンスは決定論的であり、また実行される分岐命令の実際の結果に基づく分岐予測状態情報の訓練がないが、それにもかかわらず、静的値はプログラム可能であり、それによって分岐予測状態情報を様々なソフトウェア作業負荷に適合することが可能であり、それによって所与のソフトウェア作業負荷のために分岐予測状態情報の静的値を設定することによってパフォーマンスを改善し、その作業負荷について期待される分岐振る舞いを反映することができる。したがって、プログラム可能な静的分岐予測機能を提供することによって、動的分岐予測又は非プログラム可能な静的分岐予測のいずれかによって提供され得るよりも、これはパフォーマンスと決定論との間により良好なバランスを提供することができる。
【0013】
分岐予測状態情報の静的値のプログラミングは様々なやり方で実施することができる。いくつかの実例において、分岐予測状態情報の静的値のプログラミングは、処理回路によって実行される特定の命令に応答して実施されてもよい。
【0014】
例えば、処理回路は、処理回路によって実行される分岐予測状態プログラミング命令に応答して、分岐予測状態情報の少なくともサブセットをプログラムすることができる。例えば、分岐予測状態プログラミング命令は、分岐予測状態情報のサブセットを含むシステムレジスタにセットされるデータを指定するシステムレジスタ更新命令であってもよい。別の実例は、分岐予測状態プログラミング命令がターゲットアドレスとして分岐予測状態情報の少なくともサブセットを格納するレジスタにマッピングされるアドレスを指定するストア命令である場合であり得る。この第2の実例において、分岐予測状態情報は事実上予測テーブルにマッピングされるメモリに格納され得る。分岐予測状態の静的値のテーブル全体を1つの命令でプログラムするのは本質的ではない。例えば、いくつかの場合、分岐予測状態情報は複数のレジスタにわたって格納することができ、別個の分岐予測状態プログラミング命令はそれぞれのレジスタを個々にプログラムするよう要求され得る。
【0015】
処理回路は複数の特権レベルのうちの1つにおいて命令の実行をサポートすることができる。いくつかの実例において、処理回路は分岐予測状態プログラミング命令が一定のしきい値特権レベルより低い特権を与えられた特権レベルで実行されるよう試行されると、例外をトリガできる。例えば、これは特権を与えられたソフトウェアだけが分岐予測状態情報を更新できることを保証するために有用であり得る。例えば、プログラム可能な静的分岐予測状態情報を更新することは、オペレーティングシステムのソフトウェア又はオペレーティングシステムより高い特権レベルで実行しているソフトウェアに限定することができる。これはオペレーティングシステムが、アプリケーション間でスイッチする際、その入来アプリケーションについて分岐予測状態の適当なセットでプログラムできるようにするために有用であり得、それによってそのアプリケーションの実行の間使用される静的分岐予測規則のセットは、そのアプリケーションの期待される振る舞いにおいて、分岐予測状態の同一のセットがすべてのアプリケーションに使用される場合よりも、より具体的にターゲットとされ得る。
【0016】
いくつかの実装形態において、処理装置は分岐予測状態情報をセットするために、実際の分岐実行から学習する機能を有していなくてもよい。例えば、実際の分岐結果に応答して分岐予測状態情報を更新するための回路がなくてもよい。代わりに、そのようなシステムにおいて、静的分岐予測状態情報へセットするためのプログラム可能な値のセットは、メモリ又はいくつかの予め設定された記憶場所に記憶することができ、それによって所与のアプリケーションへスイッチングする際オペレーティングシステム又はそのアプリケーションを管理する他のソフトウェアは分岐予測器のために使用される値のセットを予め設定された記憶場所から読み出すことができ、次いでそれらをシステムが静的分岐予測モードにある時使用するために分岐予測状態の静的値として機能するようにプログラム可能な状態情報に書き込むことができる。例えば、所与のアプリケーションのために使用される分岐予測状態値のセットはリテラル値としてアプリケーション自身のプログラムコード内に含められることができるか、又は関連付けられているプログラムコードがデバイスにインストールされている場合はメモリの所与の領域に記憶されていてもよい(例えば、関連付けられているアプリケーションのソフトウェアイメージの一部として)。
【0017】
所与のアプリケーションについての分岐予測状態情報の静的値のセットが前もって固定されている場合では、静的値は、デバイスが上で議論したような制動制御のような所望の適用例についての現場で使用されるとプログラムコードを実行するための実際のプロセッサの実装形態についての学習に基づいているのではなく、ソフトウェアを開発する際例えば開発者によって使用されるリモートデバイス上でコードプロファイリングを実施することによって学習されていることができる。したがって、所与のアプリケーション状態についての分岐予測状態の適当なセットの学習は、静的分岐予測モードをサポートする分岐予測器を有する実際の装置で実施されるのではなく、開発フェーズの間にオフラインで行われていることができる。
【0018】
しかしながら、別の手法において、静的分岐予測モードに加えて、分岐予測器はまた動作のプロファイリングモードをサポートすることができ、プロファイリングモードでは分岐予測器は分岐予測状態情報をそのプロファイリングモードにある間に実行される分岐命令の実際の分岐結果に基づいて訓練することができる。したがって、プロファイリングモードの間、分岐予測器は分岐予測状態情報を訓練するために実際の分岐結果から学習することができ、それによって類似の命令が将来的に再度実行される際に正しい予測を提供する可能性がより高くなる。装置が実際に現場で動作可能な場合、システムはその後静的分岐予測モードへとスイッチすることができ、この時点で静的分岐予測モードによって与えられる決定論は、静的分岐予測モードの間分岐予測状態情報のさらなる訓練がないため、デバイスが一定の安全圏内に留まることを保証するために有益であり得る。したがって、プロファイリングモードの提供により、デバイス自身に所与のタスク又は適用例のための分岐予測状態の好ましいセットを集めさせることができる。
【0019】
プロファイリングモードと静的分岐予測モードとの間のスイッチングは様々なやり方で制御することができる。いくつかの実装形態において、モードを変更するために専用のモードエントリ又はモード退出命令を使用することができる。代替的に、モードを変更するために、システムレジスタ内のモード指標を更新するシステムレジスタ更新命令が使用され得る。したがって、例えば、所与の安全用途における使用のため所与の処理デバイスを設定する人物はコードをデバイスにインストールすること、それぞれの用途について適当な分岐予測状態情報を集めるためにデバイスが工場内にある初期の間プロファイリングモードでそのコードを実行すること、次いでデバイスが現場での使用のためにリリースされるよりも前に、モードを静的分岐予測モードにスイッチすることができる。
【0020】
プロファイリングモードが与えられる実例において、所与の分岐命令の少なくとも1つのプロパティに基づいてインデックス付けされる飽和カウンタのセットを含むことは分岐予測状態情報について有用であり得る。一定の数のビットを有する飽和カウンタを与えることによって、プロファイリングモードにおいて分岐予測状態情報の訓練を助けることができ、所与の分岐命令又は所与の分岐タイプについての1つの結果の発生の単一のインスタンスは、同一の分岐又は分岐タイプについて反対の結果のインスタンスの以前の実行を瞬時にオーバライドすることはないように、これはいくらかのヒステリシスを与えることができる。
【0021】
例えば、プロファイリングモードにおいて、解決された分岐命令について実際の分岐結果を決定することに応じて、分岐予測器は解決された分岐命令の少なくとも1つのプロパティに基づいて飽和カウンタのうちの1つを選択し、実際の分岐結果が分岐する及び分岐しないのうちの一方である場合選択された飽和カウンタをインクリメントするか、又は実際の分岐結果が分岐する及び分岐しないのうちの他方である場合選択された飽和カウンタをデクリメントすることができる。次いで、静的分岐予測モードにおいて、分岐予測器は選択された飽和カウンタとしきい値との比較に基づいて分岐結果を予測することができる。
【0022】
プロファイリングモードをサポートするシステムにおいて、処理回路はまた、実行されると処理回路をトリガしてプロファイリングモードの間訓練された分岐予測状態情報の少なくともサブセットの現在値を抽出させる分岐予測状態抽出命令をサポートすることができる。これによってプロファイリングモードの間所与のアプリケーションについて学習される状態が抽出できるようになり、次いで潜在的にメモリに保存され、それによって、後々対応するアプリケーションが再度実行される際、分岐予測状態情報へとプログラムされ戻されることができる。例えば、分岐予測状態抽出命令は指定されたシステムレジスタから分岐予測状態を読み出すシステムレジスタ読み出し命令であることができ、又はターゲットアドレスとして分岐予測状態情報の少なくともサブセットを格納するレジスタにマッピングされるアドレスを指定するロード命令であることができる。第2の実例は、メモリにマッピングされた構造が分岐予測状態情報のために使用される場合、有用であり得る。どのタイプの分岐予測状態抽出命令が使用されるかに関わらず、分岐予測状態抽出命令は分岐予測状態を直接メモリに転送できるか、又は後続のストア命令が次いで抽出された分岐予測状態をメモリに保存できる汎用レジスタに抽出された状態を転送できるかのいずれかであり、それによって後に必要であれば再度読み出されることができる。
【0023】
分岐予測状態プログラミング命令に関しては、分岐予測状態抽出命令の実行は一定のしきい値特権レベル又はそれより高い特権レベルに制限することができる。したがって、しきい値特権レベルより低い特権を与えられた状態での分岐予測状態抽出命令の実行は例外を伝達させ得る。
【0024】
静的分岐予測モードの間、分岐予測状態情報は所与の分岐命令の少なくとも1つのプロパティに基づいてインデックス付けされる。ここで用語「インデックス付けされる」とは、所与の分岐命令についての予測を行うために使用する分岐予測状態の項目の選択を指している。したがって、分岐予測状態の特定の項目が所与の分岐命令の少なくとも1つのプロパティに基づいて選択される。分岐の様々なプロパティが分岐予測状態へインデックス付けするために使用され得る。
【0025】
一実例において、所与の分岐命令の少なくとも1つのプロパティは所与の分岐命令のオペコードから導出した情報を含むことができる。オペコードは実行される特定のタイプの命令を特定する命令エンコードの一部である。いくつかのシステムは複数の様々な分岐タイプをサポートすることができる。例えば、様々な分岐命令タイプは、
・ 分岐の結果が条件ステータスレジスタに記憶される条件コードに依存するが、分岐自身は分岐する又は分岐しないかどうかの判断について、2つのオペランド同士の比較をトリガしない、分岐命令を含むことができる。いくつかの実例において、そのような条件付きの分岐命令は単一の「分岐タイプ」とみなされ得る。他の実例において、異なる試験条件を有する条件付き分岐命令は異なる分岐タイプとみなされ得る(試験条件は、分岐が分岐されるようにするための条件コードによって満足される条件である)。例えば、branch-if-equal(B.EQ)条件付き分岐命令は条件コードが「等しい」条件を示す場合に分岐することができ、一方でbranch-if-not-equal(B.NE)条件付き分岐命令は条件コードが「等しくない」条件を示す場合分岐が分岐できるようにトリガすることができる。したがって、いくつかの実例において、B.NE及びB.EQ分岐命令は異なる分岐タイプとして取り扱うことができる。より一般的に、異なる試験条件を指定する条件付き分岐命令はサブセットに分割することができ、試験条件の第1のサブセットを指定する条件付き分岐は、試験条件の第2のサブセットを指定する条件付き分岐への異なる「分岐タイプ」として取り扱われる。
・ 分岐を取るかどうかを判断するための比較も実施する、比較及び分岐命令
・ 比較がデフォルトでは指定されたオペランドと値0との比較である、比較及びbranch if zero(CBZ)命令
・ 条件付き分岐演算を実行することに加えて、分岐が分岐する場合、分岐の後次の順次の命令のアドレスが関数のリターンアドレスとして機能するためにリンクレジスタに書き込まれ、関数のリターンアドレスは分岐先の関数の処理が完了すると実行の対象となるものである、リンク命令を伴う分岐。
・ 条件付き分岐演算に加えて、命令セットの変更をやはりトリガし、それによって分岐が分岐する場合分岐に続いて実行される命令は、分岐に先立って使用されている命令セットとは異なる命令セットにしたがってデコードされる、分岐及び変更命令セット命令。
【0026】
これらは、異なるオペコードによって識別され得る潜在的な分岐タイプのいくつかの実例に過ぎず、いくつかのシステムはまたこれらの分岐タイプの様々な組み合わせをサポートすることができることを了解されたい。発明者は所与の分岐について分岐オペコードと最も可能性のある分岐振る舞いとの間に相関関係があり得ることを見出している。例えば、いくつかの分岐オペコードについて、分岐は通常分岐オフセットが正である場合には分岐し、負のオフセットでは分岐しないが、一方で他のオペコードについては反対の振る舞いが見られてもよい。他のオペコードはそれらのオフセットが正か負かどうかに関わらず通常分岐しなくてもよい。したがって分岐予測状態にインデックス付けする際のオペコードを考えると、これは異なる分岐予測振る舞いを、最も可能性のある振る舞いにマッチングさせるために異なる分岐オペコードタイプについて選択させることによってパフォーマンスを改善することができる。これはパフォーマンスを改善するために有用であり得るが、またオペコードを分岐予測状態へのインデックス付けの一部として考えると、これは多くの動的分岐予測器で使用されるような分岐命令アドレスによってインデックス付けされる分岐予測テーブルよりも単純な分岐予測状態テーブルを維持させることができ、命令アドレスなどの他のプロパティを考慮しなくても、オペコードに基づくインデックス付けにより、いくつかの作業負荷について妥当なレベルのパフォーマンスをさらに与えることができる。
【0027】
考えられ得る別のプロパティは所与の分岐命令が前方分岐(正の分岐オフセットを有する)か、又は後方分岐(負の分岐オフセットを有する)かの指標であることができる。例えば、一実装形態において、分岐予測テーブルは1ビットの指標のセット又はNビットの飽和カウンタ(ここでNは2以上)を含むことができ、ここで予測に使用するための特定のビット又はカウンタは、オペコードの少なくとも一部と命令が前方分岐か又は後方分岐かの指標との組み合わせに基づいて選択される。これによって、それぞれのオペコードについて別個に、正のオフセットを伴うそのオペコードの分岐が分岐する又は分岐しないと予測されるかどうかの設定、またそのオペコードを有する負のオフセットを伴う分岐が分岐する又は分岐しないと予測されるかどうかの設定を可能にするであろう。そのような静的予測関数は、いくつかの自動車ベンチマークにおいて、予測状態の多くのさらなるビットを使用し得るいくつかのより複雑な予測器を凌ぐことが分かっている。
【0028】
分岐予測状態へインデックス付けするために使用され得る分岐プロパティの別の態様は所与の分岐命令についての分岐オフセットのサイズであることができる。例えば、分岐オフセットのサイズが一定のしきい値よりも大きいか又は小さいか、の指標がインデックスの一部として与えられ得る。
【0029】
いくつかの実装形態において、分岐予測状態情報へのインデックス付けについてベースとして使用される所与の分岐の少なくとも1つのプロパティは、所与の分岐命令への命令アドレスとは独立していてもよい。アドレスによってインデックス付けされていない分岐予測状態テーブルは比較的珍しいことであり得、なぜならたいていの動的分岐予測器は命令アドレスを考慮するであろうし、また静的分岐予測器では同一のグローバルな静的予測規則がすべての分岐に適用されるため、たいていの静的分岐予測器は分岐予測状態テーブルを全く有していないであろうからである。分岐の命令アドレスを無視することが潜在的に分岐予測のパフォーマンスの低下につながることが考えられるであろう。しかしながら、安全性が致命的となる、又は決定論が最重要な基準であるリアルタイムな適用例について、これは許容され得、また上で議論したようにインデックス付けが命令アドレス以外のプロパティに基づいている静的分岐予測モードについてのプログラム可能な状態テーブルの使用は、既知のレイテンシ限界で妥当なレベルのパフォーマンスを与えるのに十分であり得る。例えば、テーブルが少なくともオペコードに基づいてインデックス付けされ、また命令アドレスとは独立している場合、これは格納される分岐予測状態の合計ビット数の観点で非常に低いコストで妥当なパフォーマンスを与えることが分かっている。
【0030】
したがって所与の分岐命令について、所与の分岐命令の少なくとも1つのプロパティに基づいてインデックス付けされ、所与の分岐命令のオペコードから導出される情報を含むオペコードインデックス付けテーブルに基づいて分岐するか又は分岐しないかの結果を予測する分岐予測器は、非常に低いコストで妥当なレベルの予測パフォーマンスを与えるやり方として、様々な分岐予測器にわたって有用であり得る。したがってそのようなオペコードインデックス付けテーブルは静的分岐予測モードをサポートしない分岐予測器においてやはり使用され得るが、デバイスが動作可能となれば実際の分岐結果に基づいて分岐予測状態が訓練され続ける動的分岐予測モードを使用することができる。
【0031】
特に、オペコードインデックス付けテーブルが命令アドレスとは独立しているプロパティに基づいてインデックス付けされる場合、これは非常に少ないオーバヘッドを与えることができる。例えば、一実装形態において、発明者は約160ビットの分岐予測状態を使用する、オペコードと分岐オフセットが正か負かとの組み合わせに基づいてインデックス付けされる小さい予測器は、いくつかの自動車ベンチマークに関して約3500ビットを使用するより複雑な予測器を凌ぐことができることを見出している。
【0032】
いくつかの実装形態において、オペコードインデックス付けテーブルは予測される分岐結果を決定するために使用される分岐予測状態だけであり得る。しかしながら、他の場合においてこれは分岐予測を導出するために使用される分岐予測状態情報の複数のテーブルのうちの1つとして含められ得る。
【0033】
例えば、いくつかの場合において、オペコードインデックス付けテーブルは、所与の分岐の命令アドレス及び以前に実行された分岐についての以前の分岐結果の履歴のうちの少なくとも1つから導出される情報に基づいてインデックス付けされる他の分岐予測テーブルとともにより複雑な予測器の一部として使用され得る。例えば、上で議論したオペコードインデックス付けテーブルは、パーセプトロン又はTAGE予測器などのより大きい予測器の構成要素であることができる。オペコードインデックス付けされたテーブルの提供は、例えば、命令アドレスに基づくメインの予測が十分な信頼度を与えないようないくつかの分岐の場合においてフォールバックとして作用することについて、より大きいパーセプトロン又はTAGE予測器の正確さを向上させるための助けとなり得る。
【0034】
図1はデータ処理システム2の実例を概略的に示す図である。システムは、命令キャッシュ6又はメモリシステムからプログラム命令をフェッチするためのフェッチ工程4、フェッチされた命令をデコードするためのデコード工程8、命令によって要求されるオペランドが利用可能かどうかをチェックし、オペランドが利用可能となれば実行のための命令を発行する発行工程10、レジスタ14から読み出されたオペランドについてデータ処理を実施するための命令を実行し、処理結果を生成するための実行工程12、実行工程12によって生成された処理結果をレジスタ14に書き戻すライトバック工程16、を含む複数のパイプライン工程を含む処理パイプラインを含む。実行工程は複数の実行ユニットを含み、この実例において、算術又は論理演算を実施するための算術/論理ユニット(ALU:arithmetic/logic unit)18、浮動小数点の数を伴う演算を実施するための浮動小数点ユニット20、及びメモリシステムからのデータをレジスタ14にロードするためのロード命令、又はレジスタ14からのデータをメモリシステムに格納するためのストア命令などのメモリアクセス動作を扱うためのロード/ストアユニット22を含む。この実例において、メモリシステムは命令キャッシュ6、レベル1データキャッシュ24、データ及び命令のために使用される共有されるレベル2キャッシュ26、並びにメインメモリ28を含む。これは可能なメモリヒエラルキーの一実例に過ぎず、キャッシュ又はメモリの他の配置が与えられ得ることを了解されたい。やはり、
図1に示されるパイプライン工程の特定の配置は一実例に過ぎず、アウトオブオーダのプロセッサにおけるレジスタリネーム工程など、他のパイプライン工程が与えられ得る。
【0035】
装置2はパイプラインによって実行される分岐命令の結果を予測するための分岐予測器30を有している。予測は分岐予測状態記憶装置32に格納される分岐予測状態情報に基づいている。分岐予測器30によってなされる予測に基づいて、フェッチ工程4はパイプラインによる実行のための命令をフェッチし、それによって分岐に続いて実行される必要があると予測される命令が、分岐の結果が実際に分かる前にフェッチされる。分岐の複数のプロパティが分岐予測器によって予測され得、例えば、分岐方向(分岐する、又は分岐しない)及び分岐ターゲットアドレス(分岐が分岐すると予測された場合に分岐の後次に実行されることになる命令のアドレス)などである。分岐ターゲットアドレスの予測のために、あらゆる既知の技法を使用することができる。以下の実例は分岐方向の予測に焦点をあてる。
【0036】
図2は分岐予測状態記憶装置32によって記憶され得る分岐予測状態の第1の実例を示す。この実例において、分岐予測状態は1ビットの指標34のセットを含むオペコードインデックス付け分岐予測テーブルであり、分岐命令のオペコード35と分岐命令が前方分岐か後方分岐かの指標38との関数として導出されたインデックス値に基づいてインデックス付けされる。例えば、前方分岐か後方分岐かの指標38はその分岐についての分岐オフセットの最上位ビットとして選択され得、0であれば正の分岐オフセットを有する前方分岐を示し、1であれば負の分岐オフセットを有する後方分岐を示す。オペコードと前方/後方分岐指標38とを組み合わせてインデックスとすることによって、これは事実上分岐予測状態テーブル32が、分岐が分岐するか、又は分岐しないかについての予測の2次元テーブルとして作用することを意味しており、以下のとおりである:
【表1】
例えば、ビット1は分岐するという予測を表すことができ、ビット0は分岐しないという予測を表すことができ、又はその逆も可である。
【0037】
このテーブルは分岐の命令アドレスとは独立してインデックス付けられ、それによって所与の分岐オペコードを有するすべての前方分岐は、プログラム中どこに出現するかに関わらず自身についてなされた同一の分岐する又は分岐しないの予測を有することができることに留意されたい。同様に、所与の分岐オペコードのすべての後方分岐は同一の予測を有することができる。事実上、この分岐予測テーブルは、従来的に前方分岐は分岐しない、後方分岐は分岐すると扱う静的分岐予測スキームの拡張であるが、この規則をオペコードごとにプログラム可能とし、それによって正の分岐オフセット又は負の分岐オフセットが分岐する又は分岐しないと予測されるかどうかが、それぞれのオペコードについて別個に設定され得る。すなわちテーブルのこの実例はオペコードごとに2ビットを含んでおり、1つのビットは静的予測がオペコードの正のオフセットについて行われるかどうかを判断し、もう1つのビットは静的予測がオペコードの負のオフセットについて行われるかどうかを判断する。
【0038】
以下で議論するように、これらのビットの値34はプログラム可能であり得、プロファイリングモードにおいて、又はそれぞれのビット34の値をコードプロファイリングに基づいてセットするための専用の命令によって、のいずれかである。
【0039】
図3は
図2におけるものと同一のインデックス関数を使用するが、今度は分岐予測状態のそれぞれの項目がNビットの飽和カウンタ36である、代替的なオペコードインデックス付けテーブルを示しており、ここでNは2以上である。この手法は以下で議論するようにプロファイリングモードをサポートするために有用であり得る。この手法では、分岐予測器30がオペコード35及び前方/後方分岐指標38に基づく分岐予測状態36の項目のうちの1つにインデックス付けする際、カウンタが何らかのしきい値(例えば、0)以上であれば分岐は分岐すると予測され得、カウンタがそのしきい値未満であれば分岐は分岐しないと予測され得る。
【0040】
図4はプロファイリングモードで動作する分岐予測器30の実例を概略的に示す。プロファイリングモードにおいて、分岐予測器30は、実行される分岐命令について実行工程12によって与えられる実際の分岐結果39の指標に基づいて分岐予測状態記憶装置32に記憶される状態を訓練する(
図1参照)。例えば、実行工程12において分岐命令が分岐すると判断されると、分岐予測器30は飽和カウンタ36のうちの対応する1つをインクリメントして、その分岐について再度分岐すると予測される可能性を増やすことができる。カウンタがその最大の正の値に達すると飽和し、分岐がもう一度分岐するとして解決されても再度インクリメントされない。もう一方で、実行される分岐が、分岐しないと判断されると、対応するカウンタはデクリメントされ、やはりカウンタの最も負の値で飽和する。このやり方で、所与のアプリケーションについてプログラムコードが実行される際、分岐予測状態が実際の分岐結果に基づいて訓練される。
図4に示されるように、カウンタ36の訓練された値は所与のアプリケーションをある期間実行させた後抽出し、メモリシステムに保存することができ、それによってそれらは同一のアプリケーションが再度実行される時、分岐予測状態記憶装置32にプログラムされ得る。これはそれぞれのアプリケーションについて別個になされてもよく、例えば、
図4は実際の解決する分岐結果に基づいて訓練することによって導出された分岐予測状態のセットをそれぞれ有する2つのアプリケーションA及びBを示しており、それぞれのアプリケーションについての分岐予測状態はメモリに保存される。例えば、分岐予測状態記憶装置32から分岐予測状態を抽出するために使用される命令は、システムレジスタを読み込むための命令であることができ、又は分岐予測状態記憶装置32に対応するレジスタのセットをマッピングされたメモリからデータをロードするためのロード命令であることができる。
【0041】
対照的に、
図5は実行される分岐の実際の結果39に基づく分岐予測状態記憶装置内の分岐状態の更新がない、静的分岐予測モードの実例を示す。この手法では、一度静的分岐予測モードになると、分岐予測状態記憶装置32内の値が固定される。これは、プロファイリングモードをサポートしていない
図2の実例のいずれかに基づくことができ、この場合静的に設定された分岐予測状態の固定された値は、所与のソフトウェアを開発する開発者によってコードプロファイリングによって早期に決定され得る。代替的に、静的値は
図3の実例におけるカウンタ36の値であることができ、
図4で示されるようなプロファイリングモードの使用によって取得されたものである。静的分岐予測モードの間、所与のアプリケーションが実行し始めると、オペレーティングシステム又はそのアプリケーションのスケジューリングを管理する別の管理プロセスは、分岐予測状態記憶装置32を、その特定のアプリケーションについて以前に導出された適当な分岐予測状態値のセットでプログラムすることができる。したがって、アプリケーションAからアプリケーションBへのスイッチングの際、オペレーティングシステム又は他のスーパーバイザソフトウェアは分岐予測状態記憶装置を再プログラムすることができ、新しいアプリケーションBについて以前にセットされた静的値にロードする。スイッチングしてアプリケーションAに戻る際、やはり分岐予測状態記憶装置32は
図5で示されるように再度、再プログラムされ得る。しかしながら、一度プログラム値がセットされてしまうと、静的分岐予測モードの間、そのアプリケーションの実行される分岐について実行工程12によって決定される実際の分岐結果39に基づく、その分岐予測状態のさらなる更新は行われない。これは、所与のソフトウェアを実行する際、安全性が致命的となる、又は決定論的な応答レイテンシが重要であるリアルタイムなアプリケーションについて、非常に有用であり得る。
【0042】
したがって、要約すると、決定論的な振る舞いを保持しながらも最良のパフォーマンスを与えるために、コードプロファイリングに基づいてプログラムされ得る静的な分岐予測器が提供される。コードプロファイリングは、ソフトウェア/システム開発の間デバイス自身によって実施されることができ、現場における通常運転の間はロックされている。さらには、いくつかの実例において、静的予測関数はタスクごとにチューニングすることができる。
【0043】
決定論に気を遣う市場においては、動的分岐予測は決定論とは反対にパフォーマンスにおいて多くの理解しがたいジッタを招くため、静的分岐予測が採用され得る。静的予測の問題は、非常に低い予測精度を提供することであり、これはパフォーマンスが低いことを意味している。静的予測は通常柔軟性に欠け、従来的には前方分岐(正のオフセット)を分岐しない、後方分岐(負のオフセット)を分岐すると扱う。その静的予測関数は「予測(オフセット)=オフセット<0? 分岐する:分岐しない」である。これは単一の変数を使用する:分岐ターゲットオフセット。
【0044】
対照的に、上の
図2及び
図3の実例において、静的予測を行うために使用される複数の変数が拡大され、予測機能はハードウェアにおいてプログラム可能とされる。例えば、典型的な命令セットアーキテクチャにおいて、条件付き分岐オペコードは比較的少なくてよく、そのオフセットの符号と分岐の典型的な分岐することとの関連性は様々なオペコードごとに異なっていてよいことが観察され得る。いくつかのオペコードは通常正のオフセットで分岐し、負のオフセットで分岐しないが、その一方で他のオペコードは反対の振る舞いを示す。いくつかのオペコードは自身のオフセットに関わらず、通常分岐する又は分岐しない。したがって、上の静的予測関数は多くの分岐タイプにあまり当てはまらない。オペコード並びにオフセットを考慮するために静的予測を拡大することによって、より良好なパフォーマンスを達成することができる。
【0045】
一実例において、これはオペコードごとに2ビットを使用してプログラム可能となり、1つのビットは静的予測がオペコードの正のオフセットについて分岐するかどうかを判断し、もう1つのビットは静的予測が負のオフセットについて分岐するかどうかを判断する。これらのビットについて最良の値を決定するため、コードをプロファイルすることができる。プログラム可能な予測テーブルは事実上オペコードタイプ及びオフセットが正か負かを示すビットによってインデックス付けされた2次元配列である。テーブルは予測が分岐するか又は分岐しないかを示すビットを格納する:ビット予測_テーブル[オペコード][ビット]。
【0046】
静的予測関数は
予測(オフセット、オペコード、予測_テーブル[][])=予測_テーブル[オペコード][オフセット<0]
となる。
【0047】
予測テーブルが固定されていれば、これは決定論的な静的予測である。
【0048】
さらなる拡張は、予測テーブルにおいてオペコードごとに2ビット使用する代わりに、
図3で示されるようにオペコードごとに2つのNビットの飽和カウンタが使用され得ることであってもよい。1つのカウンタは正のオフセットを扱い、もう1つのカウンタは負のオフセットを扱う。これらのカウンタは特権を与えられたソフトウェアによってプログラム可能なレジスタに格納され、追加的なプログラム可能なレジスタはシステムがプロファイリングモードにあるか、又は決定論的なモードにあるかどうかを制御する。次に予測テーブルを以下のように定義する:ビット[N-1:0]予測_テーブル[オペコード][ビット]。
【0049】
決定論的であることが必要とされるシステムソフトウェアに書き込む際、開発者はプロファイリングモードでソフトウェアを実行する。このモードにおいて、プロセッサは以下のアルゴリズムにしたがって予測テーブルのそれぞれのカウンタを、自動的にインクリメント及びデクリメントする。
1.リセットにおいて、すべてのカウンタはゼロである。
2.分岐が分岐すると分かると、プロセッサハードウェアによって、そのオペコード及びオフセット符号についてのカウンタ(すなわち、予測_テーブル[オペコード][オフセット<0])をインクリメントする(飽和させる)。
3.分岐が分岐しないと解決されると、プロセッサハードウェアによって、そのオペコード及びオフセット符号についてのカウンタをデクリメントする(飽和させる)。
4.予測が行われる際、予測は必要とされるオペコード及びオフセットについてインデックス付けされたカウンタが、しきい値を上回っているかどうか、又はしきい値を下回っているかどうかに基づいている(例えば、しきい値がゼロである場合、予測はインデックス付けされたカウンタの最上位ビットに基づくことができる)。
【0050】
プロファイリングモードにおいて、プログラムの実行の間カウンタは変化するため、予測器はもはや静的ではない。しかしながらプログラムの終了において、カウンタが十分に広い場合であれば、カウンタはそのプログラムについて分岐の平均的な振る舞いを近似する値に達している。開発者は、決定論的モードにおいて現場でソフトウェアを実行する際、最良の固定値を決定して使用するために、これらの予測_テーブル[][]の値を読み返すことができる。様々なアプリケーションが様々な典型的な分岐振る舞いを見せることがあるため、これはアプリケーションごとに繰り返すことができる。
【0051】
タスクごとに静的予測関数についての好ましいパラメータを取得するためのメカニズムを有しているため、システムはデバイスが現場で実行される際タスクごとに静的予測器を好ましい分岐状態に自動的にプログラムすることができる。これは所与のアプリケーション(プロファイリングモードにおいて実行することによって決定されるような)について好ましい予測テーブルの値をソフトウェアにエンコードすることによって達成され得、イメージの開始においてリテラルプールを使用すること、又は何らかの他のやり方でそれをソースコードにエンコードすることによってなされ得る。
【0052】
次にオペレーティングシステムを決定論的な(静的分岐予測)モードで実行するようにプログラムすることができる。決定論的なモードにおいて、プロセッサは予測_テーブル[][]カウンタを自動的にインクリメント/デクリメントしない。特権を与えられたソフトウェアだけが明示的な書き込みによって予測テーブルを修正することができる。しかしながら、決定論的なモードにおいて、静的予測関数は最後の定義と同一である。決定論的なモードにおいて、新しいタスクを開始するとOSは予測_テーブル[][]にタスクイメージから取得されるようなタスクについて最適な値で書き込むことができる。このように、それぞれ個々のタスクについての静的予測関数は、そのタスクについて最適な値であると決定されているパラメータを使用する。
【0053】
これはずっと高度な柔軟性、及び画一的な静的予測関数よりずっと良好なパフォーマンスを提供する。
【0054】
プロファイリングモードで実行する際、予測器は事実上非常に軽量の動的予測器であることに留意されたい。やはり動的予測のコンテキストで使用され得る適用例がある。説明したような予測器は非常に小さく、例えば、4ビットのカウンタを使用する一実例において160ビットしか使用しない。事実上動的予測器として使用される際、いくつかの自動車のベンチマークについて、これは多くのさらなるビットを使用するずっと複雑な予測器を実際に凌ぐことができる。したがって、この動的予測器を、精度を高めるためにより大きな予測器の構成要素として使用することも可能である。
【0055】
したがって、
図2又は
図3の実例で示されるオペコードインデックス付けテーブル32は、動的分岐予測を使用するより大きな予測器の一部として使用されることもできる。
図6はオペコードインデックス付けテーブルがパーセプトロン予測器50内に与えられる複数の予測テーブル60のうちの1つである、実例を示す。パーセプトロン予測器において、テーブル60、32のそれぞれは予測される分岐のいくつかのプロパティ又は実行されるプログラムの振る舞いに基づいてインデックス付けされる。例えば、
図6において、テーブルT0は予測される現在の命令の命令アドレスを示すプログラムカウンタに基づいてインデックス付けされ、テーブルT1及びT2は、プログラムカウンタと、極めて最近のX分岐(ここでXは何らかの整数)の分岐する/分岐しないの結果を追跡するグローバル履歴レジスタ(GHR:global history register)の個々の部分GHR0、GHR1との組み合わせに基づいてインデックス付けされる。ここで、グローバル履歴レジスタはプログラム内で極めて最近に見られた分岐の分岐する又は分岐しないの結果を追跡し、ここでそれらの分岐はあらゆる命令アドレスにおける分岐であり、現在のプログラムカウンタに関連付けられる分岐を実行する極めて最近のXインスタンスではない。予測テーブルT0からT2はパーセプトロンのためにテーブルがどのように定義され得るかの一実例に過ぎないことを了解されたい。オペコードインデックス付けテーブル32は他の予測テーブルT0からT2とともに、第4の予測テーブルT3として与えられる。テーブルのそれぞれは対応するプロパティ(プログラムカウンタ、プログラムカウンタと組み合わされるGHR0、プログラムカウンタと組み合わされるGHR1、又は前方/後方分岐指標38と組み合わされるオペコード35)に基づいてインデックス付けされる信頼度値のセットを与える。これらの信頼度値は、動的分岐予測モードでコードを処理する間実行工程12で実行される解決された分岐の結果から分かる。所与のインデックスについてそれぞれのテーブルによって出力された信頼度値62は、現在の分岐についての全体的な予測信頼度を与えるために、加算回路64によってともに加算される。現在の分岐についての予測信頼度は次いでしきい値と比較することができ、しきい値よりも大きい場合、分岐は分岐すると予測され得、しきい値よりも小さい場合、分岐は分岐しないと予測され得る。したがって、オペコードインデックス付けテーブル32はより大きなパーセプトロン予測器の構成要素の一部として、その精度を高めるために、使用することができる。
【0056】
図7はTAGE分岐予測器の第2の実例を示しており、
図2又は
図3のオペコードインデックス付けテーブル32がフォールバック予測テーブルとして使用されており、複数のTAGE予測テーブル70によってなされる予測を補足している。この実例において、TAGE分岐予測器は、上で議論した予測される分岐の命令アドレスを示すプログラムカウンタとグローバル履歴レジスタ(GHR)の部分との関数として導出されるインデックスに基づいて選択される予測信頼度を与える予測テーブル70のセットを使用する。TAGEテーブル70のそれぞれはGHRからのより長い履歴情報を連続的に使用し、例えば、テーブルT0はプログラムカウンタと履歴の第1の部分GHR0(最も最近の分岐履歴に対応する部分)との組み合わせに基づいてテーブルにインデックス付けする。テーブルT1はプログラムカウンタ、履歴部分GHR0、及びGHR0より最近ではない分岐に対応するグローバル履歴レジスタのさらなる部分GHR1の組み合わせに基づいてインデックス付けされ、テーブルT2はテーブル1について使用されたGHR0及びGHR1に加えてグローバル履歴レジスタの追加的な部分GHR2を考慮したさらに長い履歴に基づいてインデックス付けされる。TAGE予測器は個々のTAGEテーブルによってなされる予測同士の間で選択を行うセレクタ72を有しており、それによって、グローバル履歴レジスタからの履歴の最長シーケンスについてどのテーブルがヒットを生成しても、その予測結果をTAGEテーブルからの全体的な予測として有する。例えば、ヒットを生成した唯一のテーブルがT0である場合、T0によってなされる予測がセレクタ72によって選択される。しかしながら、テーブルT1がヒットを生成する場合、その予測がテーブルT0の予測よりも優先されて選択されるが、それはより長い長さの分岐履歴を有しているとみなされるためより正確な可能性があるからである。したがって、TAGE手法は予測精度の向上とヒット率の向上のトレードオフを可能にするが、時にどのTAGEテーブルもヒットを生成することができないことがあり、この場合、フォールバックテーブル32によってなされるフォールバック予測が使用され得る。上述のオペコードインデックス付けテーブル32はTAGEテーブルが十分な信頼度を生成しない場合に使用され得るフォールバック予測を与える比較的低コストのやり方であり得る。
【0057】
もちろん
図6及び
図7の予測器はただのいくつかの実例に過ぎず、一般的にあらゆる分岐予測器30は分岐予測器の構成要素としてオペコードインデックス付けテーブル32を含むことができる。いくつかの場合において、そのような分岐予測器は、テーブル32のオペコードの予測状態が分岐命令を実行する結果に基づいて訓練され続けられる動的予測モードを使用することができる。しかしながら、他の実例において、
図5に示されるように予測器は決定論を与えるために静的分岐予測モードを使用することができ、それによってオペコードインデックス付けテーブルの値がプログラミングによって一度固定されると、決定論的な応答時間を確保するために実際の分岐結果に基づくその予測状態の後続の更新はない。
【0058】
本出願において、語句「するように構成される」は、装置の要素が定義される動作を実行することができる構成を有することを意味するために使用される。このコンテキストにおいて、「構成」はハードウェア又はソフトウェアの内部接続の、配置又はやり方を意味する。例えば、装置は定義される動作を提供する専用のハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスは機能を実施するためにプログラムされてもよい。「するように構成される」は、定義される動作を提供するために装置要素がいかなるやり方でも変更される必要があることを含意するものではない。
【0059】
本発明の図示的な実施例を本明細書において添付の図面を参照して詳細に説明してきたが、本発明はこれらの正確な実施例に限定されず、当業者により添付の特許請求の範囲によって定義されるような本発明の範囲及び精神を逸脱することなく、その様々な変形及び修正がそこになされ得ることを理解されたい。