(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-02-01
(45)【発行日】2024-02-09
(54)【発明の名称】分岐信頼スロットル
(51)【国際特許分類】
G06F 9/38 20180101AFI20240202BHJP
【FI】
G06F9/38 330B
(21)【出願番号】P 2021510422
(86)(22)【出願日】2019-08-26
(86)【国際出願番号】 US2019048120
(87)【国際公開番号】W WO2020046804
(87)【国際公開日】2020-03-05
【審査請求日】2022-08-24
(32)【優先日】2018-08-29
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】トーマス クロウクール
【審査官】坂庭 剛史
(56)【参考文献】
【文献】特開2009-140502(JP,A)
【文献】米国特許出願公開第2017/0249149(US,A1)
【文献】米国特許出願公開第2013/0205118(US,A1)
【文献】特表2008-538251(JP,A)
【文献】特開2010-152843(JP,A)
【文献】特開2013-069129(JP,A)
【文献】米国特許出願公開第2006/0161762(US,A1)
【文献】米国特許出願公開第2015/0301832(US,A1)
【文献】米国特許出願公開第2012/0124345(US,A1)
【文献】米国特許出願公開第2016/0062768(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
(57)【特許請求の範囲】
【請求項1】
プロセッサ[100]であって、
1つ以上の分岐ターゲットバッファ(BTB)テーブル[110]を含む分岐予測器[108]と、
スロットルユニット[124]及び不確実性アキュムレータ[130]を含む分岐予測パイプライン[122]と、を備え、
前記プロセッサは、前記分岐予測器によって生成された複数の分岐予測の各々に対して不確実性値[132]を割り当てるように構成されており、
前記不確実性アキュムレータは、前記複数の分岐予測の各々の不確実性値を、前記不確実性アキュムレータに関連する累積不確実性カウンタ[134]に加算するように構成されており、
前記スロットルユニットは、前記累積不確実性カウンタに基づいて、前記分岐予測パイプラインの動作をスロットリング
し、前記累積不確実性カウンタが複数の不確実性閾値の各々を超える毎に第1の実行スレッドの予測レートを低下させるように構成されている、
プロセッサ。
【請求項2】
前記複数の分岐予測の各々の不確実性値は、前記複数の分岐予測の各々が前記
分岐予測パイプラインからリタイア又はフラッシュされた場合に、前記累積不確実性カウンタから減算される、
請求項1のプロセッサ。
【請求項3】
前記スロットルユニットは、前記累積不確実性カウンタが
各不確実性閾値を超え
る毎に、
前記第1の実行スレッド
に対してより厳しいスロットリングを実施する、
請求項1又は2のプロセッサ。
【請求項4】
前記スロットルユニットは、前記プロセッサがシングルスレッドモードである場合に、前記累積不確実性カウンタが1つ以上の不確実性閾値を超えたことに基づいて、1つ以上のサイクルの予測をスキップするように前記分岐予測器に指示するように構成されている、
請求項1~3の何れかのプロセッサ。
【請求項5】
前記スロットルユニットは、前記プロセッサがマルチスレッドモードである場合に、前記累積不確実性カウンタが1つ以上の不確実性閾値を超えたことに基づいて、1つ以上のサイクルの間、処理帯域幅を第2の実行スレッドに割り当てるように前記分岐予測器に指示するように構成されている、
請求項1~4の何れかのプロセッサ。
【請求項6】
前記スロットルユニットは、前記累積不確実性カウンタが
1つ以上の不確実性閾値を下回ったことに応じて
、処理帯域幅を前記第2の実行スレッドから前記第1の実行スレッドに戻すように前記分岐予測器に指示するように構成されている、
請求項
5のプロセッサ。
【請求項7】
前記分岐予測器によって生成された前記複数の分岐予測の各々に信頼度を割り当てるように構成された条件付き予測器[128]を備え、前記プロセッサは、前記信頼度に少なくとも部分的に基づいて、前記複数の分岐予測の各々に前記不確実性値を割り当てるように構成されている、
請求項1~6の何れかのプロセッサ。
【請求項8】
分岐予測器[108]によって生成された分岐予測に不確実性値[132]を割り当てることと、
前記分岐予測の不確実性値を、前記分岐予測器に関連する累積不確実性カウンタ[134]に加算することと、
前記累積不確実性カウンタが複数の不確実性閾値の各々を超える毎に第1の実行スレッドの予測レートを低下させることによって、前記分岐予測器の動作をスロットリングすることと、を含む、
方法。
【請求項9】
前記分岐予測の不確実性値を加算することは、
前記分岐予測器の分岐予測パイプライン[122]のバックエンドにおいて前記累積不確実性カウンタをインクリメントすることを含む、
請求項8の方法。
【請求項10】
前記分岐予測が前記
分岐予測パイプラインからリタイア又はフラッシュされた場合に、前記累積不確実性カウンタから前記分岐予測の不確実性値を減算することを含む、
請求項
9の方法。
【請求項11】
前記分岐予測器の動作をスロットリングすることは、
前記累積不確実性カウンタが
各不確実性閾値を超え
る毎に、
前記第1の実行スレッド
に対してより厳しいスロットリングを実施することを含む、
請求項8~10の何れかの方法。
【請求項12】
前記累積不確実性カウンタが前記
複数の不確実性閾値のうち第1の不確実性閾値を超えたことに基づいて、第1のサイクル数の間、第1の実行スレッドの分岐予測をスキップすることを含む、
請求項8~11の方法。
【請求項13】
前記累積不確実性カウンタが前記第1の不確実性閾値よりも大きい第2の不確実性閾値を超えたことに基づいて、前記第1のサイクル数よりも大きい第2のサイクル数の間、前記第1の実行スレッドの分岐予測をスキップすることを含む、
請求項12の方法。
【請求項14】
前記分岐予測器がマルチスレッドモードで動作している場合に、前記第1のサイクル数に関連する処理帯域幅を第2の実行スレッドに割り当てることを含む、
請求項12又は13の方法。
【請求項15】
前記分岐予測に信頼度を割り当てることと、
前記信頼度に少なくとも部分的に基づいて、前記分岐予測に前記不確実性値を割り当てることと、を含む、
請求項8~14の何れかの方法。
【請求項16】
分岐予測パイプライン[122]の不確実性アキュムレータ[130]において、
複数の実行スレッドのうち第1の実行スレッドの累積不確実性カウンタ[134]を不確実性値[132]によってインクリメントすることと、
前記累積不確実性カウンタが1つ以上の不確実性閾値を超えているという判別に少なくとも部分的に基づいて、
前記累積不確実性カウンタが前記1つ以上の不確実性閾値を超える毎に処理帯域幅を前記第1の実行スレッドから第2の実行スレッドに割り当てることによって、前記複数の実行スレッド間を調停することと、を含む、
方法。
【請求項17】
前記累積不確実性カウンタが第1の不確実性閾値を超えたことに基づいて、第1のサイクル数の間、処理帯域幅を前記第1の実行スレッドから第2の実行スレッドに割り当てることを含む、
請求項16の方法。
【請求項18】
前記累積不確実性カウンタが前記第1の不確実性閾値よりも大きい第2の不確実性閾値を超えたことに基づいて、前記第1のサイクル数よりも大きい第2のサイクル数の間、処理帯域幅を前記第1の実行スレッドから前記第2の実行スレッドに割り当てることを含む、
請求項
17の方法。
【請求項19】
前記累積不確実性カウンタが前記第1の不確実性閾値を下回ったことに基づいて、前記第1のサイクル数の間、処理帯域幅を前記第2の実行スレッドから前記第1の実行スレッドに割り当てることを含む、
請求項
17の方法。
【請求項20】
前記分岐予測パイプラインによって生成された分岐予測に信頼度を割り当てることと、
前記信頼度に少なくとも部分的に基づいて、前記分岐予測に前記不確実性値を割り当てることと、を含む、
請求項16~19の何れかの方法。
【発明の詳細な説明】
【背景技術】
【0001】
処理ユニットは、分岐予測を使用して分岐命令の結果を予測することによって、分岐命令を評価する前に、予測した分岐に続く命令を投機的に実行し始めることができるようにする。処理ユニットは、分岐命令の結果を予測するために、例えば、プログラムのフローを任意の命令にリダイレクトする間接分岐予測器、処理ユニットで実行されているサブルーチンの復帰アドレスを含む復帰アドレススタック、条件分岐の方向(分岐成立又は分岐不成立)を予測する条件分岐予測器、分岐命令の場所、型及びターゲットアドレスを予測する情報を含む分岐ターゲットバッファ等の分岐予測構造の情報を使用する。
【0002】
分岐予測構造のいくつかの実装では、処理ユニットで以前に実行された又は現在実行されているプロセスによって実行された分岐命令の結果の分岐履歴を使用するものがある。例えば、以前に分岐命令が、プログラムフローを第1のアドレスに90%の割合で向け、第2のアドレスに10%の割合で向けた場合、分岐予測構造の対応するエントリは、分岐命令がプログラムフローを第1のアドレスに向けることを予測し、これにより、プロセスが、分岐命令の評価を待つことなく、第1のアドレスで開始する分岐に従って投機的に命令を実行できるようになる。分岐命令が評価されたときに予測された分岐が誤っていた場合、誤って予測された分岐に従う投機的実行が中断され、処理ユニットの状態が分岐命令時の状態にロールバックされて、正しい分岐に従い実行が開始される。より詳細には、分岐予測ユニット及びフェッチユニットの両方が、正しい分岐ターゲットから、又は、分岐が行われなかった場合には分岐後のアドレスから処理されるようにロールバックされる。
【0003】
本開示は、添付図面を参照することによって、より良好に理解することができ、その多くの特徴及び利点が当業者に明らかになる。異なる図面において同じ符号を使用する場合には、類似又は同一の要素を示す。
【図面の簡単な説明】
【0004】
【
図1】いくつかの実施形態による、プロセッサのブロック図である。
【
図2】いくつかの実施形態による、シングルスレッドモードにおける予測パイプラインスロットリングの図である。
【
図3】いくつかの実施形態による、マルチスレッドモードにおける予測パイプラインスロットリングの図である。
【
図4】いくつかの実施形態による、分岐予測パイプラインをスロットリングする方法のフロー図である。
【発明を実施するための形態】
【0005】
フェッチすべき命令のシーケンスを分岐予測器が誤って予測した場合、投機的実行は、プロセッサによる無駄な作業になる。このような無駄な作業は、予測された分岐に続く命令を処理するために、電力を浪費する。また、誤った分岐予測は、パイプライン及びリソースが共有されたマルチスレッドモードでコアが動作している場合に、処理帯域幅も浪費する。
【0006】
様々な分岐予測パイプラインでは、予測パイプラインのフロントエンドにある分岐予測器が、サイクル毎に、命令がフェッチされるアドレスを予測する。行われた予測が正しいかどうかは、多くのサイクルで不明である。予測が正しい限り、予測パイプラインをフルに保つことは計算上効率的である。しかし、予測が誤って行われた場合には、予測パイプラインをフラッシュする必要があり、これにより、フラッシュに関連するパフォーマンスの低下が発生する。誤った予測をしたことによるもう1つのペナルティは、誤ったパスに従った命令を実行する際にリソースが浪費されるだけでなく、誤って予測されたパスが、他のスレッドが使用していた可能性のあるリソースを消費するために、同じシステムで実行されている他のスレッドがペナルティを課せられることである。例えば、シングルスレッドモードでは、リダイレクトに起因する無駄な作業に対処する現在のソリューションがない。マルチスレッドモードでは、コンピューティングリソースの競合する共有は、各スレッドが正しいパスで命令を実行しており、異なるスレッドからの潜在的な予測ミスを考慮していないことを前提とした公平性基準に基づいている。
【0007】
電力を節約して無駄な作業の量を減らすとともに、マルチスレッドの性能を向上させるために、
図1~
図4では、分岐信頼スロットリング(branch confidence throttling)を実行するためのシステム及び方法を説明する。一実施形態では、プロセッサは、1つ以上の分岐ターゲットバッファ(BTB)テーブルを有する分岐予測器と、スロットルユニット及び不確実性アキュムレータ(uncertainty accumulator)を含む分岐予測パイプラインと、を含む。プロセッサは、分岐予測器によって生成された複数の分岐予測の各々に不確実性値(uncertainty value)を割り当てる。不確実性アキュムレータは、複数の分岐予測の各々の不確実性値を、不確実性アキュムレータに関連する累積不確実性カウンタに加算する。スロットルユニットは、累積不確実性カウンタに基づいて分岐予測パイプラインの動作をスロットリングし、正しいパスにある可能性が低いスレッドを遅くする。そうすることによって、フラッシュされる可能性がある命令を実行しないことにより、節電する。
【0008】
図1は、いくつかの実施形態による、分岐信頼スロットリングを実施するプロセッサ100のブロック図である。プロセッサ100は、メモリ102と、命令キャッシュ104と、命令フェッチユニット106と、分岐予測器108と、1つ以上の分岐ターゲットバッファ(BTB)テーブル110と、処理パイプライン112と、を含む。様々な実施形態では、この処理システムは、コンピュータプロセッサ内に含まれるか、コンピュータシステム内に分散されている。メモリ102は、命令及びデータを記憶するためのキャッシュメモリ等の任意のタイプの揮発性又は不揮発性メモリを含む。命令キャッシュ104は、メモリ102からの命令にアクセスし、フェッチすべき命令を記憶する。様々な実施形態では、メモリ102及び命令キャッシュ104は、複数のキャッシュレベルを含む。さらに、プロセッサ100は、データキャッシュ(図示省略)を含む。
【0009】
図1には、説明を容易にするために、命令フェッチユニット106及び処理パイプライン112の簡単な例が示されている。命令フェッチユニット106の分岐予測器108は、1つ以上のBTBテーブル(一般に、BTバッファ及びBTBとも呼ばれる)110に記憶又は提供される分岐ターゲットアドレスを生成する。分岐予測器108は、少なくとも部分的に、プロセッサ(例えば、
図1のプロセッサ100)の命令フェッチユニット106内に実装される。BTBテーブル110は、
図1の分岐予測器108の内部に示されているが、BTBテーブル110は、命令フェッチユニット106又は分岐予測器108の特定の要素に近接してプロセッサ100内に配置されてもよいし、配置されなくてもよい。いくつかの実施形態では、プロセッサ100は、複数の命令フェッチユニット106及び処理パイプライン112をさらに含む。処理パイプライン112は、デコードユニット114と、発行ユニット116と、実行ステージ118と、ライトバックユニット120と、を含む。
【0010】
様々な実施形態では、命令フェッチユニット106全体及び/又は分岐予測器108は、処理パイプライン112の一部である。処理パイプライン112は、エラーチェックロジック及びエラー処理ロジック、処理パイプライン112を通る1つ以上の並列パス、並びに、当技術分野で知られている他の機能等の機能を含むことができる。処理システム112を通る順方向パスが
図1に示されているが、プロセッサ100の要素間には、他のフィードバックパス及び信号パスが含まれてもよい。
【0011】
命令フェッチユニット106は、デコードユニット114によるさらなる処理のために、命令キャッシュ104から命令をフェッチする。一実施形態では、命令フェッチユニット106は、分岐予測器108と、他の分岐予測ロジック(図示省略)と、を含む。或いは、他の実施形態では、分岐予測器108は、命令フェッチユニット106とは別々に配置されている。分岐予測器108は、以下に詳細に説明するように、分岐信頼スロットリングを実施する処理回路の一例である。
【0012】
デコードユニット114は、命令をデコードし、デコードした命令、命令の一部、又は、デコードした他のデータを発行ユニット116に渡す。発行ユニット116は、命令又は他のデータを解析し、解析に基づいて、デコードした命令、命令の一部、又は、他のデータを1つ以上の実行ユニット118に送信する。1つ以上の実行ユニット118は、命令を実行するための固定小数点実行ユニット、浮動小数点実行ユニット、ロード/ストア実行ユニット、ベクトル実行ユニット等の実行ユニットを含む。ライトバックユニット120は、命令の実行結果を宛先リソース(図示省略)に書き戻す。宛先リソースは、レジスタ、キャッシュメモリ、他のメモリ、他のデバイスと通信するためのI/O回路、他の処理回路、又は、実行された命令若しくはデータのための他の任意のタイプの宛先を含む任意のタイプのリソースであり得る。
【0013】
分岐予測器108は、命令アドレスを、BTBテーブル110に記憶されている以前に実行された命令アドレスと比較することによって予測を実行する分岐予測パイプライン122を含む。このタイプのアーキテクチャでは、多くの命令が「処理中(in flight)」であり得る(すなわち、同時に、実行の様々なステージにあり得る)。分岐予測パイプライン122の動作を、
図2及び
図3に関して、以下により詳細に示す。分岐予測パイプライン122内の各ステージは、一般に順番に行われる。高性能を実現するために、分岐予測パイプライン122には、1サイクル毎に1つの新しい命令が入り、パイプライン内の各命令は、新しいステージに移る。各ステージは、入力を受けて出力を生成し、その出力は、ステージに関連する出力バッファに記憶される。通常、1つのステージの出力バッファは、次のステージの入力バッファである。このような構成は、全てのステージが並行して動作することを可能にし、そのため、次の命令がパイプラインに入る前に、各命令が分岐予測パイプライン122全体を通過しなければならなかった場合に比べて高いスループットをもたらす。分岐予測パイプライン122が遅延又はクリアされる必要がある場合、パイプライン内の各命令の処理においてレイテンシが生じる。
【0014】
予測が成功すると、プロセッサ100は、ターゲットアドレスを取得するためのステップの実行をスキップすることができるので、予測は、通常、処理時間を節約する。プロセッサ100は、BTBテーブル110において次の実行ステップのためのアドレスを検索することによって、時間を節約する。例えば、いくつかの実施形態では、BTB110は、分岐方向(例えば、分岐成立、分岐不成立)を予測するために、分岐アドレス、ターゲットアドレス及び履歴データを記憶する。予測に使用するBTBエントリ(例えば、分岐アドレスが次の検索アドレスと等しいエントリ、検索アドレスに最も近いエントリ)を識別するために、分岐アドレス情報が記憶される。ターゲットアドレスは、予測された成立分岐(predicted taken branch)のターゲットに対する命令フェッチを開始するために使用される。分岐成立/分岐不成立の履歴データを用いて、分岐の以前の結果に基づいて、分岐の方向が、分岐成立又は分岐不成立の何れかに予測される。他の実施形態では、方向予測情報は、BTB110と並行してアクセスされる追加の(例えば、階層的な)構造から得ることができる。
【0015】
分岐予測パイプライン122は、スロットルユニット124と、複数の予測パイプラインステージBP0~BP3(例えば、BP0 136、BP1 138、BP2 140、BP3 142)と、BTBルックアップ126と、条件付き予測器128と、不確実性アキュムレータ130と、を含む。
図1の分岐予測パイプライン122等のパイプライン方式に関して、省電力のために読み出しが抑制されない限り、BTBテーブル110の1つ以上が予測フロー毎に読み出される。いくつかの実施形態によれば、第1のBTB読み出しは、BP0と指定された第1のステージで開始される。後続のステージは、分岐予測パイプライン122のステージとしてBP1、BP2等と指定される。
図1及び他の図では、明確な例を提供するとともに、図に示す本発明の実施形態(複数可)を不必要に不明瞭にすることを避けるために、図示したパイプラインが簡略化されていることが理解されよう。例えば、図示したパイプラインステージは、複数の実際のパイプラインステージを表してもよいし、2つ以上の図示したパイプラインステージを同時に実行できる場合には、特定の実施形態において、これらを同じパイプラインステージに組み合わせてもよい。特定のパイプラインステージの機能は、特定のスレッドの特定の部分に関して説明することができるが、パイプラインは、実際には、1つ以上のスレッドの多くの部分で同時にそのような機能を実行するように動作することも理解されよう。
【0016】
一実施形態では、スロットリングメカニズム(例えば、スロットルユニット124)が、分岐予測パイプライン122のフロントエンドに実装される(すなわち、スロットルユニット124は、分岐予測パイプライン122の先頭に配置される)。様々な実施形態では、スロットルユニット124は、リソース可用性に基づいて予測フローを開始し、プロセッサ100で実行されている複数の独立したプロセス又は実行スレッド間を調停する。図示するように、BTBルックアップ126及び条件付き予測器128ステージは、分岐予測パイプライン122の複数のサイクルに亘る(すなわち、予測パイプラインステージBP0~BP3に亘る)。
【0017】
条件付き予測器128は、分岐予測器108によって生成された各分岐予測に対して、投機ストリームの先頭で行われた現在の予測がフラッシュされない確率に関連する信頼度を割り当てる。ここでは、分岐予測器によって生成された複数の分岐予測の各々に対して信頼度を割り当てる条件付き予測器128との関連で説明しているが、当業者であれば、本開示の範囲から逸脱することなく、様々な他の予測器を使用できることを認識するであろう。例えば、他の実施形態では、間接予測器(図示省略)又は復帰アドレス予測器(図示省略)が、不確実性値を提供する。
【0018】
一実施形態では、条件付き予測器128は、予測信頼性の等級付けを実行し、各分岐予測を、高信頼性予測、中信頼性予測又は低信頼性予測として分類する。例えば、タグ付き幾何学的長さ(TAGE)の予測器の場合、高信頼性予測は、TAGEテーブルからの強いバイモーダル(strong bimodal)カウンタ又は飽和型3ビットカウンタ(saturated 3-bit counter)で行われた予測を含み、一般に、1%未満の誤予測率を有する。中信頼性予測は、TAGEテーブルからのほぼ飽和型の3ビットカウンタ(nearly saturated 3-bit counter)で行われた予測を含み、一般に、8~12%の範囲の誤予測率を有する。低信頼性予測は、TAGEテーブルからの弱いバイモーダル(weak bimodal)カウンタ又は弱い/ほぼ弱い3ビットカウンタ(weak/nearly-weak 3-bit counter)で行われた予測を含み、一般に、30%を超える誤予測率を有する。さらに、以下により詳細に説明するように、分岐予測器108によって生成された分岐予測毎に、プロセッサ100は、各予測に不確実性値を割り当てる。
【0019】
他の実施形態では、当業者によって理解されるように、分岐タイプ、分岐を予測するのに使用されるBTBエントリの経過期間(age)、予測に含まれる条件付き予測器若しくは間接予測器からの予測の「強さ」、又は、アンダーフローする復帰アドレススタックで復帰を予測する等の特別な条件等のように、各予測の特定の情報から信頼度を導出することを含む、様々な信頼性等級付けシステムが使用され得る。様々な実施形態では、プロセッサ100は、条件付き予測器128によって割り当てられた上記の信頼度と、予測された動的分岐の数と、に少なくとも部分的に基づいて、各分岐予測に不確実性値132を割り当てる。例えば、一実施形態では、各分岐予測は、プロセッサ100によって、予測信頼性の等級付けに基づいて、0~10の範囲の不確実性値が割り当てられる。例えば、高信頼性予測には不確実性値0が割り当てられ、中信頼性予測には1~4の範囲の不確実性値が割り当てられ、低信頼性予測には5~10の範囲の不確実性値が割り当てられる。
【0020】
不確実性アキュムレータ130は、分岐予測パイプライン122のバックエンドに配置されている(すなわち、不確実性アキュムレータ130は、分岐予測パイプライン122の後尾に配置される)。不確実性アキュムレータ130は、各予測に割り当てられた不確実性値132を、不確実性アキュムレータ130に関連する累積不確実性カウンタ134に加算する。すなわち、不確実性アキュムレータ130は、分岐予測パイプライン122のバックエンドでインクリメントされる。さらに、各予測に割り当てられた不確実性値は、対応する分岐予測が分岐予測パイプライン122からリタイア又はフラッシュされる場合に、累積不確実性カウンタ134から減算される。すなわち、累積不確実性カウンタ134は、プロセッサ100において分岐予測が処理されなくなった場合に、デクリメントされる。したがって、分岐予測パイプライン122の様々なステージは、各予測に不確実性値を割り当てることと、不確実性アキュムレータ130のステージで新たな予測の不確実性値を加算し、リタイア又はフラッシュされた予測の不確実性値を減算することによって、処理中の全ての予測の不確実性値を累積することと、を含む。このようにして、不確実性アキュムレータ130は、処理中のもの(すなわち、予測されているがまだリタイアされていない命令)を提示する。
【0021】
スロットルユニット124は、累積不確実性カウンタ134が1つ以上の不確実性閾値を超えるかどうかに基づいて、分岐予測パイプライン122の動作をスロットリングし、分岐予測器108が正しいパス上にあるという信頼性に基づいて、性能/電力のトレードオフを行う。すなわち、処理中の分岐予測の累積不確実性が複数の閾値のセットと比較され、累積不確実性が各種閾値を超えると、一段と厳しいスロットリングが実施される。
【0022】
一実施形態では、スロットルユニット124は、累積不確実性カウンタ134が1つ以上の不確実性閾値を超えることに基づいて、第1の実行スレッドの予測レートを減少させる。例えば、プロセッサ100がシングルスレッドモードであり、累積不確実性カウンタ134が1つ以上の不確実性閾値を超える場合、スロットルユニット124は、分岐予測器108に対して、将来の1つ以上のサイクルの予測をスキップするように指示する。別の実施形態では、プロセッサ100がマルチスレッドモードであり、累積不確実性カウンタ134が1つ以上の不確実性閾値を超える場合、スロットルユニット124は、分岐予測器108に対して、将来の1つ以上のサイクルについて、第1の実行スレッドから分岐予測を生成するのに使用されるであろうサイクルを第2の実行スレッドに割り当てることによって、処理帯域幅を割り当てるように指示する。
【0023】
スロットリングは、別の実行スレッドに譲渡するか、別の実行スレッドがその譲渡を利用できない場合(例えば、プロセッサ100がシングルスレッドモードで動作している場合)にバブルサイクルを生成するという方法で、実行スレッドが、予測を発行するための全ての基準を満たしていたであろうサイクルにおいて予測を発行しないようにする。例えば、シングルスレッドモードでは、スロットリングによって省電力化が可能になり、マルチスレッドモードでは、スロットリングによって他の実行スレッドに譲ることで、省電力化及び性能向上の両方が可能になる。各予測に不確実性値を割り当て、閾値と、関連する予測レートと、を選択することによって、スロットリングは、スロットリングされる実行スレッドの性能への影響を最小限に抑えながら、無駄な作業を減らす。無駄な作業の削減は、省電力及び/又はマルチスレッドの性能の向上につながる。
【0024】
図2は、いくつかの実施形態による、シングルスレッドモードにおける予測パイプラインスロットリングの図である。プロット200は、第1の実行スレッド(つまり、この例ではスレッドA)に関連する累積不確実性カウンタの値を、分岐予測動作中の(サイクル単位で測定された)時間の関数として示す。プロット202は、分岐予測パイプライン(
図1の分岐予測パイプライン122等)に入る新たな予測を、分岐予測動作中の時間(サイクルで測定される)の関数として示す。プロット200,202の横軸は、左から右に増加する時間(サイクル単位)を示す。プロット200の縦軸は、累積不確実性カウンタの値(任意の単位)を示す。
【0025】
プロット200に示すように、サイクル1における新たな予測204及びサイクル2における新たな予測206の各々は、累積不確実性カウンタを増加させる。ただし、累積不確実性カウンタの値は、第1の不確実性閾値T1未満である。したがって、分岐予測パイプラインの動作は、1サイクル毎に1つの新たな予測が分岐予測パイプライン122に入り、既にパイプラインに入っている各命令が新たなステージに移る、という通常の動作と同様に進行する。
【0026】
サイクル3では、分岐予測パイプライン122に入る新たな予測208に関連する不確実性値が、累積不確実性カウンタに加算される。新たな予測208に関連する不確実性値を加算した後に、累積不確実性カウンタの値は、第1の不確実性閾値T1を超えて増加する。したがって、分岐予測パイプライン122のスロットルユニット124は、次の実行サイクル(すなわち、サイクル4)において、第1のスロットリングレベルで分岐予測パイプライン動作のスロットリングを開始する。
図2の例では、スロットルユニット124が動作するパイプラインの前部において不確実性アキュムレータ130が累積不確実性を表すように、各予測が1サイクルで行われることを仮定している。
【0027】
サイクル4において、スロットルユニット124は、新たな予測を発行しないことによって、分岐予測パイプライン122にストールを挿入する。サイクル5において、新たな予測210が分岐予測パイプライン122に入る。このように、スロットルユニット124は、累積不確実性カウンタが第1の不確実性閾値T1を超えて増加した場合に、1サイクル毎ではなく1サイクルおきに新たな予測を生成することによって、分岐予測パイプラインの動作をスロットリングする。プロット200に示すように、サイクル5における新たな予測210は、(例えば、別の中信頼性予測又は低信頼性予測であることに起因して)累積不確実性カウンタを増加させる。ただし、累積不確実性カウンタの値は、第2の不確実性閾値T2より小さいが、第1の不確実性閾値T1より大きい。したがって、分岐予測パイプラインの動作は、1サイクルおきに1つの新たな予測が分岐予測パイプライン122に入り、既にパイプラインに入っている各命令が1サイクル毎に新たなステージに移る、という第1のスロットリングレベルで進行する。
【0028】
サイクル6において、スロットルユニット124は、新たな予測を発行しないことによって、分岐予測パイプライン122にストールを挿入する。サイクル7において、新たな予測212が分岐予測パイプライン122に入る。サイクル7では、分岐予測パイプライン122に入る新たな予測212に関連する不確実性値が、累積不確実性カウンタに加算される。ただし、新たな予測212に関連する不確実性値を加算した後に、累積不確実性カウンタの値は、第2の不確実性閾値T2を超えて増加する。したがって、分岐予測パイプライン122のスロットルユニット124は、次の実行サイクル(すなわち、サイクル8)において、第2のスロットリングレベルで分岐予測パイプライン動作のスロットリングを開始する。
【0029】
サイクル8,9において、スロットルユニット124は、サイクル8の間にもサイクル9の間にも新たな予測を発行しないことによって、分岐予測パイプライン122にストールを挿入する。新たな予測214は、サイクル10まで分岐予測パイプライン122に入らない。このように、スロットルユニット124は、累積不確実性カウンタが第2の不確実性閾値T2を超えて増加した場合に、3サイクル毎に新たな予測を生成することによって、分岐予測パイプラインの動作をスロットリングする。スロットリングは、ここでは、2サイクル毎(例えば、第1のスロットリングレベル)及び3サイクル毎(例えば、第2のスロットリングレベル)に新たな予測を発行するという状況で説明されているが、当業者は、新たな命令が分岐予測パイプライン122に導入される速度を低減し、所定の実行スレッドのための電力及び計算リソースの量を低減する任意の方法が、本開示の範囲から逸脱することなく利用され得ることを認識するであろう。
【0030】
例えば、
図3は、いくつかの実施形態による、マルチスレッドモードにおける予測パイプラインスロットリングの図である。
図3に示すように、予測をスキップするのではなく、処理帯域幅が、実行サイクルをより有効に利用できる他の実行スレッド(例えば、予測が正しいパス上にあるという、より高い信頼度を有する他の実行スレッド)に割り当てられる。
【0031】
プロット300は、第1の実行スレッド(つまり、この例ではスレッドA)に関連する累積不確実性カウンタの値を、分岐予測動作中の(サイクル単位で測定された)時間の関数として示す。プロット302は、分岐予測パイプライン(
図1の分岐予測パイプライン122等)に入る新たな予測を、分岐予測動作中の(サイクルで測定される)時間の関数として示す。プロット300,302の横軸は、左から右に増加する時間(サイクル単位)を示す。プロット300の縦軸は、累積不確実性カウンタの値(任意の単位)を示す。
【0032】
プロット300に示すように、サイクル1における新たな予測304及びサイクル2における新たな予測306の各々は、累積不確実性カウンタを増加させる。ただし、累積不確実性カウンタの値は、第1の不確実性閾値T1未満である。したがって、分岐予測パイプラインの動作は、通常通りに進行する。具体的には、分岐予測パイプライン122のサイクル毎に、フェッチは、第1のスレッド(例えば、スレッドA)の1つの新たな予測と、第2のスレッド(例えば、スレッドB)の1つの新たな予測と、を交互に繰り返し(ABABABで表されている)、既にパイプラインに入っている各命令は、新しいステージに移る。
【0033】
サイクル3では、分岐予測パイプライン122に入る新たな予測308に関連する不確実性値が、累積不確実性カウンタに加算される。新たな予測308に関連する不確実性値を加算した後に、累積不確実性カウンタの値は、第1の不確実性閾値T1を超えて増加する。したがって、分岐予測パイプライン122のスロットルユニット124は、次の実行サイクル(すなわち、サイクル4)において、実行スレッドAに対する分岐予測パイプライン動作のスロットリングを第1のスロットリングレベルで開始する。例えば、スレッドAとスレッドBとを交互に切り替えるのではなく、スロットルユニット124は、より頻繁に処理を行うためにスレッドBを選択し、例えば、スレッドBは、ABBABBで表されるように、分岐予測パイプラインサイクルの3分の2で選択され得る。
【0034】
サイクル4及びサイクル5において、スロットルユニット124は、新たな予測を発行しないことによって、実行スレッドAに関連する予測をスロットリングする。代わりに、スロットルユニット124は、新たな分岐予測を生成するためのサイクルをスレッドBに割り当てるように分岐予測器108に指示し、スレッドBについて新たな予測310,312を生成する。サイクル6において、スレッドAの分岐予測パイプライン122に新たな予測314が入る。このように、スロットルユニット124は、スレッドAの累積不確実性カウンタが第1の不確実性閾値T1を超えて増加した場合に、1サイクルおきではなく3サイクル毎に新たな予測を生成することによって、分岐予測パイプラインの動作をスロットリングする。プロット300に示すように、サイクル6における新たな予測314は、(例えば、別の中信頼性予測又は低信頼性予測であることに起因して)累積不確実性カウンタを増加させる。ただし、累積不確実性カウンタの値は、第2の不確実性閾値T2より小さく、第1の不確実性閾値T1より大きい。したがって、分岐予測パイプラインの動作は、3サイクル毎にスレッドAについての1つの新たな予測が分岐予測パイプライン122に入り、既にパイプラインに入っている各命令が1サイクル毎に新しいステージに移る、という第1のスロットリングレベルで進行する。
【0035】
スレッドBについての新たな予測316,318は、サイクル7,8で分岐予測パイプライン122に入る。サイクル9において、スレッドAについての新たな予測320が分岐予測パイプライン122に入る。サイクル9において、分岐予測パイプライン122に入る新たな予測320に関連する不確実性値が、累積不確実性カウンタに加算される。ただし、新たな予測320に関連する不確実性値を加算した後に、累積不確実性カウンタの値は、第2の不確実性閾値T2を超えて増加する。したがって、分岐予測パイプライン122のスロットルユニット124は、次の実行サイクル(すなわち、サイクル8)において、第2のスロットリングレベルで分岐予測パイプライン動作のスロットリングを開始する。例えば、第2のスロットリングレベルでは、スロットルユニット124は、より頻繁に処理するためにスレッドBを選択する。例えば、スレッドBは、ABBBABBBで表されるように、分岐予測パイプラインサイクルの75%で選択され得る。
【0036】
サイクル10,11,12において、スロットルユニット124は、新たな予測を発行しないことによって、実行スレッドAに関連する予測をスロットリングする。代わりに、スロットルユニット124は、処理帯域幅を実行スレッドBに割り当てるように分岐予測器108に指示し、サイクル10,11,12において、スレッドBについての新たな予測322,324,326を生成する。スレッドAについての新たな予測は、サイクル13(図示省略)まで分岐予測パイプライン122に入らない。このように、スロットルユニット124は、累積不確実性カウンタが第2の不確実性閾値T2を超えて増加した場合に、4サイクル毎にスレッドAについての新たな予測を生成することによって、分岐予測パイプラインのスレッドAに対する動作をスロットリングする。スロットリングは、ここでは、3サイクル毎(例えば、第1のスロットリングレベル)及び4サイクル毎(例えば、第2のスロットリングレベル)に新たな予測を発行するという状況で説明しているが、当業者は、新たな命令が分岐予測パイプライン122に導入される速度を低減し、所定の実行スレッドのための電力及び計算リソースの量を低減する任意の方法が、本開示の範囲から逸脱することなく利用され得ることを認識するであろう。他の実施形態では、スロットリングは、新たな予測を発行する間に異なるサイクル数を含むことができる。ただし、一般的に、累積された不確実性が増加するにつれて、スロットリングの量が増加する。
【0037】
図4は、いくつかの実施形態による、分岐予測パイプラインをスロットリングする方法400を説明するブロック図である。方法400は、
図1に示す分岐予測パイプライン122及びプロセッサ100のいくつかの実施形態で実施される。
【0038】
ブロック402において、分岐予測器108は、実行スレッドに対する分岐予測を生成する。ブロック404で、条件付き予測器128は、分岐予測器108によって生成された分岐予測に信頼度を割り当てる。いくつかの実施形態では、条件付き予測器128は、分岐予測器108によって生成された各分岐予測に、投機ストリームの先頭で行われた現在の予測がフラッシュされない確率に関連する信頼度を割り当てる。一実施形態では、条件付き予測器128は、予測信頼性の等級付けを実行し、各分岐予測を、高信頼性予測、中信頼性予測又は低信頼性予測として分類する。
【0039】
ブロック406において、プロセッサ100は、分岐予測器108によって生成された分岐予測に不確実性値を割り当てる。いくつかの実施形態では、プロセッサ100は、ブロック404で条件付き予測器128によって割り当てられた信頼度と、予測された動的分岐の数と、に少なくとも部分的に基づいて、各分岐予測に不確実性値を割り当てる。
【0040】
ブロック408において、不確実性アキュムレータ130は、ブロック406からの分岐予測の不確実性値を、分岐予測器108に関連する累積不確実性カウンタに加算する。いくつかの実施形態では、プロセッサ100で実行される異なる実行スレッドの各々は、別個の累積不確実性カウンタに関連付けられている。不確実性アキュムレータ130は、分岐予測パイプライン122のバックエンドでインクリメントされる。さらに、分岐予測に割り当てられた不確実性値は、対応する分岐予測が分岐予測パイプライン122からリタイア又はフラッシュされる場合に、累積不確実性カウンタから減算される。すなわち、累積不確実性カウンタは、プロセッサ100において分岐予測が処理されなくなった場合にデクリメントされる。様々な実施形態において、不確実性値は、以下のように、処理中の全ての予測されたブロックについてスレッド固有のカウンタに蓄積され、予測時に不確実性値が加算され、リタイア時に不確実性値が減算され、リダイレクト時に不確実性カウンタがリセットされる。
【0041】
したがって、分岐予測パイプライン122の様々なステージは、各予測に不確実性値を割り当てることと、不確実性アキュムレータ130のステージで新たな予測の不確実性値を加算することによって、処理中の全ての予測に亘って不確実性値を累積することと、リタイア又はフラッシュされた予測の不確実性値を減算することと、を含む。累積不確実性カウンタは、プロセッサ100が正しいパスに従って予測しているかどうかに関する信頼性の尺度を提供する。
【0042】
ブロック410で、新たな予測のサイクルが開始され、スロットルユニット124は、累積不確実性カウンタが第1の不確実性閾値を超えるかどうかを判別する。累積不確実性カウンタが第1の不確実性閾値を超えないとスロットルユニット124が判別した場合、方法400は、新たな予測サイクルのためにブロック402に戻る。しかしながら、累積不確実性カウンタが第1の不確実性閾値を超えているとスロットルユニット124が判別した場合、方法400はブロック412に進む。
【0043】
ブロック412で、スロットルユニット124は、分岐予測パイプライン122の動作をスロットリングする方法を決定するために、プロセッサ100がシングルスレッドモードで動作しているか、マルチスレッドモードで動作しているかを判別する。プロセッサ100がシングルスレッドモードで動作しているとスロットルユニット124が判別した場合、方法400はブロック414に進む。ブロック414において、スロットルユニット124は、累積不確実性カウンタが第2の不確実性閾値を超えているかどうかを判別する。累積不確実性カウンタが(ブロック410からの)第1の不確実性閾値を超えているが、第2の不確実性閾値を超えていないとスロットルユニット124が判別した場合、スロットルユニット124は、
図2に関連して上述したように、ブロック416において、第1のサイクル数の間、分岐予測をスキップする。累積不確実性カウンタが(ブロック410からの)第1の不確実性閾値を超えており、第2の不確実性閾値も超えているとスロットルユニット124が判別した場合、スロットルユニット124は、
図2に関連して上述したように、ブロック418において、第1のサイクル数より大きい第2のサイクル数の間、分岐予測をスキップする。
【0044】
ブロック412において、プロセッサ100がマルチスレッドモードで動作しているとスロットルユニット124が判別した場合、方法400はブロック420に進む。ブロック420において、スロットルユニット124は、累積不確実性カウンタが第2の不確実性閾値を超えているかどうかを判別する。累積不確実性カウンタが(ブロック410からの)第1の不確実性閾値を超えているが、第2の不確実性閾値を超えていないとスロットルユニット124が判別した場合、スロットルユニット124は、
図3に関連して上述したように、第1の分岐予測サイクル数を異なる実行スレッドに割り当てる(ブロック422)。累積不確実性カウンタが(ブロック410からの)第1の不確実性閾値を超えており、第2の不確実性閾値も超えているとスロットルユニット124が判別した場合、スロットルユニット124は、
図3に関連して上述したように、第1のサイクル数より大きい第2の分岐予測サイクル数を異なる実行スレッドに割り当てる(ブロック424)。
【0045】
図示するように、ブロック416,418,422,424の各々は、後続の新たな予測サイクルのためにブロック402に戻る。累積不確実性カウンタが様々な不確実性閾値を超えて増加するとスロットリングが発生するが、累積不確実性カウンタが不確実性閾値を下回ると、分岐予測は以前の予測レートに戻る。上述したように、複数の分岐予測の各々の不確実性値は、複数の分岐予測の各々が分岐予測パイプラインからリタイア又はフラッシュされる場合に、累積不確実性カウンタから減算される。累積不確実性カウンタは、命令がリタイアされると減少を開始する。命令がリタイアすると、リダイレクトが表示されずに当該命令がリタイアした場合に、行われた予測が正しかったことを意味する。その場合、予測が既に実行されていないため、累積不確実性カウンタから減算される。
【0046】
このように、シングルスレッドモードでは、累積不確実性カウンタが第2の不確実性閾値を下回ると、スロットルユニット124は、より少ない予測をスキップするように分岐予測器108に指示する。同様に、シングルスレッドモードでは、累積不確実性カウンタが第1の不確実性閾値を下回ると、スロットルユニット124は、スロットリングを中止し、サイクル毎に新たな予測を生成することに戻るように分岐予測器108に指示する。マルチスレッドモードでは、累積不確実性カウンタが第2の不確実性閾値を下回ると、スロットルユニット124は、より少ない処理帯域幅を第2の実行スレッドに割り当て、処理帯域幅を第1の実行スレッドに戻すように分岐予測器108に指示する。同様に、マルチスレッドモードでは、累積不確実性カウンタが第1の不確実性閾値を下回ると、処理帯域幅が第1の実行スレッドに戻され、第1の実行スレッドは、1サイクルおきに新たな予測の生成を再開する。
【0047】
このように、本明細書で説明した分岐信頼スロットリングは、正しいパス上にある可能性が低いスレッドの速度を低下させ、これにより、フラッシュされる可能性のある命令を実行しないことによって電力を節約する。プロセッサは、(例えば、マルチスレッドモードでは)CPUコア内で同じハードウェアを共有する別のスレッドに電力及び計算リソースを提供するか、(例えば、シングルスレッドモードでは)サイクル内で新たな予測を生成しないことによって、電力を節約することができる。所定のCPUコア内のスレッドによって生成された電力リソースは、複数のCPUコアに亘って電力を動的に割り当てることができるICパッケージ内の他のCPUコアのスレッドによって利用することができる。このようにして、分岐信頼スロットリングは、コンピューティングリソースをより効率的に使用することができる。
【0048】
本明細書に開示されるように、いくつかの実施形態では、プロセッサは、1つ以上の分岐ターゲットバッファ(BTB)テーブルを含む分岐予測器と、スロットルユニット及び不確実性アキュムレータを含む分岐予測パイプラインと、を含み、プロセッサは、分岐予測器によって生成された複数の分岐予測の各々に対して不確実性値を割り当てるように構成されており、不確実性アキュムレータは、複数の分岐予測の各々の不確実性値を、不確実性アキュムレータに関連する累積不確実性カウンタに加算するように構成されており、スロットルユニットは、累積不確実性カウンタに基づいて、分岐予測パイプラインの動作をスロットリングするように構成されている。一態様では、複数の分岐予測の各々の不確実性値は、複数の分岐予測の各々がプロセッサパイプラインからリタイア又はフラッシュされる場合に、累積不確実性カウンタから減算される。別の態様では、スロットルユニットは、累積不確実性カウンタが1つ以上の不確実性閾値を超えたことに基づいて、第1の実行スレッドの予測レートを低下させるように構成されている。
【0049】
一態様では、スロットルユニットは、プロセッサがシングルスレッドモードである場合に、累積不確実性カウンタが1つ以上の不確実性閾値を超えたことに基づいて、1つ以上のサイクルの予測をスキップするように分岐予測器に指示するように構成されている。別の態様では、スロットルユニットは、プロセッサがマルチスレッドモードである場合に、累積不確実性カウンタが1つ以上の不確実性閾値を超えたことに基づいて、1つ以上のサイクルの間、処理帯域幅を第2の実行スレッドに割り当てるように分岐予測器に指示するように構成されている。さらに別の態様では、スロットルユニットは、累積不確実性カウンタが第1の不確実性閾値を下回ったことに応じて、第1のサイクル数の間、処理帯域幅を第2の実行スレッドから第1の実行スレッドに戻すように分岐予測器に指示するように構成されている。さらに別の態様では、プロセッサは、分岐予測器によって生成された複数の分岐予測の各々に信頼度を割り当てるように構成された条件付き予測器を含み、プロセッサは、信頼度に少なくとも部分的に基づいて、複数の分岐予測の各々に不確実性値を割り当てるように構成されている。
【0050】
本明細書に開示されるように、いくつかの実施形態では、方法は、分岐予測器によって生成された分岐予測に不確実性値を割り当てることと、分岐予測の不確実性値を、分岐予測器に関連する累積不確実性カウンタに加算することと、累積不確実性カウンタが1つ以上の不確実性閾値を超えたことに基づいて、分岐予測器の動作をスロットリングすることと、を含む。一態様では、分岐予測の不確実性値を加算することは、分岐予測器の分岐予測パイプラインのバックエンドにおいて累積不確実性カウンタをインクリメントすることを含む。別の態様では、方法は、分岐予測がプロセッサパイプラインからリタイア又はフラッシュされた場合に、累積不確実性カウンタから分岐予測の不確実性値を減算することを含む。
【0051】
一態様では、分岐予測器の動作をスロットリングすることは、累積不確実性カウンタが1つ以上の不確実性閾値を超えたことに基づいて、第1の実行スレッドの予測レートを低下させることを含む。別の態様では、方法は、累積不確実性カウンタが1つ以上の不確実性閾値のうち第1の不確実性閾値を超えたことに基づいて、第1のサイクル数の間、第1の実行スレッドの分岐予測をスキップすることを含む。さらに別の態様では、方法は、累積不確実性カウンタが第1の不確実性閾値よりも大きい第2の不確実性閾値を超えたことに基づいて、第1のサイクル数よりも大きい第2のサイクル数の間、第1の実行スレッドの分岐予測をスキップすることを含む。
【0052】
一態様では、方法は、分岐予測器がマルチスレッドモードで動作している場合に、第1のサイクル数に関連する処理帯域幅を第2の実行スレッドに割り当てることを含む。別の態様では、方法は、分岐予測に信頼度を割り当てることと、信頼度に少なくとも部分的に基づいて、分岐予測に不確実性値を割り当てることと、を含む。
【0053】
本明細書に開示されるように、いくつかの実施形態では、方法は、分岐予測パイプラインの不確実性アキュムレータにおいて、第1の実行スレッドの累積不確実性カウンタを不確実性値によってインクリメントすることと、累積不確実性カウンタが1つ以上の不確実性閾値を超えているという判別に少なくとも部分的に基づいて、複数の実行スレッド間を調停することと、を含む。一態様では、方法は、累積不確実性カウンタが第1の不確実性閾値を超えたことに基づいて、第1のサイクル数の間、処理帯域幅を第1の実行スレッドから第2の実行スレッドに割り当てることを含む。
【0054】
別の態様では、方法は、累積不確実性カウンタが第1の不確実性閾値よりも大きい第2の不確実性閾値を超えたことに基づいて、第1のサイクル数よりも大きい第2のサイクル数の間、処理帯域幅を第1の実行スレッドから第2の実行スレッドに割り当てることを含む。さらに別の態様では、方法は、累積不確実性カウンタが第1の不確実性閾値を下回ったことに基づいて、第1のサイクル数の処理帯域幅を第2の実行スレッドから第1の実行スレッドに割り当てることを含む。さらに別の態様では、方法は、分岐予測パイプラインによって生成された分岐予測に信頼度を割り当てることと、信頼度に少なくとも部分的に基づいて、分岐予測に不確実性値を割り当てることと、を含む。
【0055】
いくつかの実施形態では、上記の装置及び技術は、
図1~
図4を参照して上述したシステム、プロセッサ及びBTBテーブル等の1つ以上の集積回路(IC)デバイス(集積回路パッケージ又はマイクロチップとも呼ばれる)を含むシステムに実装される。これらのICデバイスの設計及び製造には、電子設計自動化(EDA)及びコンピュータ支援設計(CAD)ソフトウェアツールが使用される。これらの設計ツールは、通常、1つ以上のソフトウェアプログラムとして表される。1つ以上のソフトウェアプログラムは、回路を製造するための製造システムを設計又は適合するための処理の少なくとも一部を実行するように1つ以上のICデバイスの回路を表すコードで動作するようにコンピュータシステムを操作する、コンピュータシステムによって実行可能なコードを含む。このコードは、命令、データ、又は、命令及びデータの組み合わせを含むことができる。設計ツール又は製造ツールを表すソフトウェア命令は、通常、コンピューティングシステムがアクセス可能なコンピュータ可読記憶媒体に記憶される。同様に、ICデバイスの設計又は製造の1つ以上のフェーズを表すコードは、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体に記憶されてもよいし、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体からアクセスされてもよい。
【0056】
コンピュータ可読記憶媒体は、命令及び/又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の非一時的な記憶媒体又は非一時的な記憶媒体の組み合わせを含む。かかる記憶媒体には、限定されないが、光媒体(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ブルーレイ(登録商標)ディスク)、磁気媒体(例えば、フロッピー(登録商標)ディスク、磁気テープ、磁気ハードドライブ)、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)若しくはキャッシュ)、不揮発性メモリ(例えば、読取専用メモリ(ROM)若しくはフラッシュメモリ)、又は、微小電気機械システム(MEMS)ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体は、コンピュータシステムに内蔵されてもよいし(例えば、システムRAM又はROM)、コンピュータシステムに固定的に取り付けられてもよいし(例えば、磁気ハードドライブ)、コンピュータシステムに着脱可能に取り付けられてもよいし(例えば、光学ディスク又はユニバーサルシリアルバス(USB)ベースのフラッシュメモリ)、有線又は無線のネットワークを介してコンピュータシステムに接続されてもよい(例えば、ネットワークアクセス可能なストレージ(NAS))。
【0057】
いくつかの実施形態では、上記の技術のいくつかの態様は、ソフトウェアを実行する処理システムの1つ以上のプロセッサによって実装されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体上で有形に具現化された実行可能命令の1つ以上のセットを含む。ソフトウェアは、1つ以上のプロセッサによって実行されると、上記の技術の1つ以上の態様を実行するように1つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶デバイス、例えばフラッシュメモリ、キャッシュ、ランダムアクセスメモリ(RAM)等のソリッドステート記憶デバイス、又は、他の1つ以上の不揮発性メモリデバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈若しくは実行可能な他の命令フォーマットであってもよい。
【0058】
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、1つ以上のさらなるアクティビティが実行される場合があり、1つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
【0059】
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。