(57)【要約】処理システムは、１つ以上の分岐ターゲットバッファテーブル［１１０］を含む分岐予測器［１０８］を有するプロセッサ［１００］を備える。プロセッサは、スロットルユニット［１２４］及び不確実性アキュムレータ［１３０］を含む分岐予測パイプライン［１２２］を備える。プロセッサは、分岐予測器によって生成された複数の分岐予測の各々に不確実性値［１３２］を割り当て、複数の分岐予測の各々の不確実性値を、不確実性アキュムレータに関連する累積不確実性カウンタ［１３４］に加算する。分岐予測パイプラインのスロットルユニットは、累積不確実性カウンタに基づいて、分岐予測パイプラインの動作をスロットリングする。【選択図】図１
2021536611.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサ［１００］であって、
１つ以上の分岐ターゲットバッファ（ＢＴＢ）テーブル［１１０］を含む分岐予測器［１０８］と、
スロットルユニット［１２４］及び不確実性アキュムレータ［１３０］を含む分岐予測パイプライン［１２２］と、を備え、
前記プロセッサは、前記分岐予測器によって生成された複数の分岐予測の各々に対して不確実性値［１３２］を割り当てるように構成されており、
前記不確実性アキュムレータは、前記複数の分岐予測の各々の不確実性値を、前記不確実性アキュムレータに関連する累積不確実性カウンタ［１３４］に加算するように構成されており、
前記スロットルユニットは、前記累積不確実性カウンタに基づいて、前記分岐予測パイプラインの動作をスロットリングするように構成されている、
プロセッサ。
【請求項２】
前記複数の分岐予測の各々の不確実性値は、前記複数の分岐予測の各々が前記プロセッサパイプラインからリタイア又はフラッシュされた場合に、前記累積不確実性カウンタから減算される、
請求項１のプロセッサ。
【請求項３】
前記スロットルユニットは、前記累積不確実性カウンタが１つ以上の不確実性閾値を超えたことに基づいて、第１の実行スレッドの予測レートを低下させるように構成されている、
請求項１又は２のプロセッサ。
【請求項４】
前記スロットルユニットは、前記プロセッサがシングルスレッドモードである場合に、前記累積不確実性カウンタが１つ以上の不確実性閾値を超えたことに基づいて、１つ以上のサイクルの予測をスキップするように前記分岐予測器に指示するように構成されている、
請求項１〜３の何れかのプロセッサ。
【請求項５】
前記スロットルユニットは、前記プロセッサがマルチスレッドモードである場合に、前記累積不確実性カウンタが１つ以上の不確実性閾値を超えたことに基づいて、１つ以上のサイクルの間、処理帯域幅を第２の実行スレッドに割り当てるように前記分岐予測器に指示するように構成されている、
請求項１〜４の何れかのプロセッサ。
【請求項６】
前記スロットルユニットは、前記累積不確実性カウンタが第１の不確実性閾値を下回ったことに応じて、第１のサイクル数の間、処理帯域幅を前記第２の実行スレッドから前記第１の実行スレッドに戻すように前記分岐予測器に指示するように構成されている、
請求項１〜５の何れかのプロセッサ。
【請求項７】
前記分岐予測器によって生成された前記複数の分岐予測の各々に信頼度を割り当てるように構成された条件付き予測器［１２８］を備え、前記プロセッサは、前記信頼度に少なくとも部分的に基づいて、前記複数の分岐予測の各々に前記不確実性値を割り当てるように構成されている、
請求項１〜６の何れかのプロセッサ。
【請求項８】
分岐予測器［１０８］によって生成された分岐予測に不確実性値［１３２］を割り当てることと、
前記分岐予測の不確実性値を、前記分岐予測器に関連する累積不確実性カウンタ［１３４］に加算することと、
前記累積不確実性カウンタが１つ以上の不確実性閾値を超えたことに基づいて、前記分岐予測器の動作をスロットリングすることと、を含む、
方法。
【請求項９】
前記分岐予測の不確実性値を加算することは、
前記分岐予測器の分岐予測パイプライン［１２２］のバックエンドにおいて前記累積不確実性カウンタをインクリメントすることを含む、
請求項８の方法。
【請求項１０】
前記分岐予測が前記プロセッサパイプラインからリタイア又はフラッシュされた場合に、前記累積不確実性カウンタから前記分岐予測の不確実性値を減算することを含む、
請求項８又は９の方法。
【請求項１１】
前記分岐予測器の動作をスロットリングすることは、
前記累積不確実性カウンタが前記１つ以上の不確実性閾値を超えたことに基づいて、第１の実行スレッドの予測レートを低下させることを含む、
請求項８〜１０の何れかの方法。
【請求項１２】
前記累積不確実性カウンタが前記１つ以上の不確実性閾値のうち第１の不確実性閾値を超えたことに基づいて、第１のサイクル数の間、第１の実行スレッドの分岐予測をスキップすることを含む、
請求項８〜１１の方法。
【請求項１３】
前記累積不確実性カウンタが前記第１の不確実性閾値よりも大きい第２の不確実性閾値を超えたことに基づいて、前記第１のサイクル数よりも大きい第２のサイクル数の間、前記第１の実行スレッドの分岐予測をスキップすることを含む、
請求項１２の方法。
【請求項１４】
前記分岐予測器がマルチスレッドモードで動作している場合に、前記第１のサイクル数に関連する処理帯域幅を第２の実行スレッドに割り当てることを含む、
請求項１２又は１３の方法。
【請求項１５】
前記分岐予測に信頼度を割り当てることと、
前記信頼度に少なくとも部分的に基づいて、前記分岐予測に前記不確実性値を割り当てることと、を含む、
請求項８〜１４の何れかの方法。
【請求項１６】
分岐予測パイプライン［１２２］の不確実性アキュムレータ［１３０］において、第１の実行スレッドの累積不確実性カウンタ［１３４］を不確実性値［１３２］によってインクリメントすることと、
前記累積不確実性カウンタが１つ以上の不確実性閾値を超えているという判別に少なくとも部分的に基づいて、複数の実行スレッド間を調停することと、を含む、
方法。
【請求項１７】
前記累積不確実性カウンタが第１の不確実性閾値を超えたことに基づいて、第１のサイクル数の間、処理帯域幅を前記第１の実行スレッドから第２の実行スレッドに割り当てることを含む、
請求項１６の方法。
【請求項１８】
前記累積不確実性カウンタが前記第１の不確実性閾値よりも大きい第２の不確実性閾値を超えたことに基づいて、前記第１のサイクル数よりも大きい第２のサイクル数の間、処理帯域幅を前記第１の実行スレッドから前記第２の実行スレッドに割り当てることを含む、
請求項１６又は１７の方法。
【請求項１９】
前記累積不確実性カウンタが前記第１の不確実性閾値を下回ったことに基づいて、前記第１のサイクル数の間、処理帯域幅を前記第２の実行スレッドから前記第１の実行スレッドに割り当てることを含む、
請求項１６又は１７の方法。
【請求項２０】
前記分岐予測パイプラインによって生成された分岐予測に信頼度を割り当てることと、
前記信頼度に少なくとも部分的に基づいて、前記分岐予測に前記不確実性値を割り当てることと、を含む、
請求項１６〜１９の何れかの方法。
【発明の詳細な説明】
【背景技術】
【０００１】
処理ユニットは、分岐予測を使用して分岐命令の結果を予測することによって、分岐命令を評価する前に、予測した分岐に続く命令を投機的に実行し始めることができるようにする。処理ユニットは、分岐命令の結果を予測するために、例えば、プログラムのフローを任意の命令にリダイレクトする間接分岐予測器、処理ユニットで実行されているサブルーチンの復帰アドレスを含む復帰アドレススタック、条件分岐の方向（分岐成立又は分岐不成立）を予測する条件分岐予測器、分岐命令の場所、型及びターゲットアドレスを予測する情報を含む分岐ターゲットバッファ等の分岐予測構造の情報を使用する。
【０００２】
分岐予測構造のいくつかの実装では、処理ユニットで以前に実行された又は現在実行されているプロセスによって実行された分岐命令の結果の分岐履歴を使用するものがある。例えば、以前に分岐命令が、プログラムフローを第１のアドレスに９０％の割合で向け、第２のアドレスに１０％の割合で向けた場合、分岐予測構造の対応するエントリは、分岐命令がプログラムフローを第１のアドレスに向けることを予測し、これにより、プロセスが、分岐命令の評価を待つことなく、第１のアドレスで開始する分岐に従って投機的に命令を実行できるようになる。分岐命令が評価されたときに予測された分岐が誤っていた場合、誤って予測された分岐に従う投機的実行が中断され、処理ユニットの状態が分岐命令時の状態にロールバックされて、正しい分岐に従い実行が開始される。より詳細には、分岐予測ユニット及びフェッチユニットの両方が、正しい分岐ターゲットから、又は、分岐が行われなかった場合には分岐後のアドレスから処理されるようにロールバックされる。
【０００３】
本開示は、添付図面を参照することによって、より良好に理解することができ、その多くの特徴及び利点が当業者に明らかになる。異なる図面において同じ符号を使用する場合には、類似又は同一の要素を示す。
【図面の簡単な説明】
【０００４】
【図１】いくつかの実施形態による、プロセッサのブロック図である。
【図２】いくつかの実施形態による、シングルスレッドモードにおける予測パイプラインスロットリングの図である。
【図３】いくつかの実施形態による、マルチスレッドモードにおける予測パイプラインスロットリングの図である。
【図４】いくつかの実施形態による、分岐予測パイプラインをスロットリングする方法のフロー図である。
【発明を実施するための形態】
【０００５】
フェッチすべき命令のシーケンスを分岐予測器が誤って予測した場合、投機的実行は、プロセッサによる無駄な作業になる。このような無駄な作業は、予測された分岐に続く命令を処理するために、電力を浪費する。また、誤った分岐予測は、パイプライン及びリソースが共有されたマルチスレッドモードでコアが動作している場合に、処理帯域幅も浪費する。
【０００６】
様々な分岐予測パイプラインでは、予測パイプラインのフロントエンドにある分岐予測器が、サイクル毎に、命令がフェッチされるアドレスを予測する。行われた予測が正しいかどうかは、多くのサイクルで不明である。予測が正しい限り、予測パイプラインをフルに保つことは計算上効率的である。しかし、予測が誤って行われた場合には、予測パイプラインをフラッシュする必要があり、これにより、フラッシュに関連するパフォーマンスの低下が発生する。誤った予測をしたことによるもう１つのペナルティは、誤ったパスに従った命令を実行する際にリソースが浪費されるだけでなく、誤って予測されたパスが、他のスレッドが使用していた可能性のあるリソースを消費するために、同じシステムで実行されている他のスレッドがペナルティを課せられることである。例えば、シングルスレッドモードでは、リダイレクトに起因する無駄な作業に対処する現在のソリューションがない。マルチスレッドモードでは、コンピューティングリソースの競合する共有は、各スレッドが正しいパスで命令を実行しており、異なるスレッドからの潜在的な予測ミスを考慮していないことを前提とした公平性基準に基づいている。
【０００７】
電力を節約して無駄な作業の量を減らすとともに、マルチスレッドの性能を向上させるために、図１〜図４では、分岐信頼スロットリング（branch confidence throttling）を実行するためのシステム及び方法を説明する。一実施形態では、プロセッサは、１つ以上の分岐ターゲットバッファ（ＢＴＢ）テーブルを有する分岐予測器と、スロットルユニット及び不確実性アキュムレータ（uncertainty accumulator）を含む分岐予測パイプラインと、を含む。プロセッサは、分岐予測器によって生成された複数の分岐予測の各々に不確実性値（uncertainty value）を割り当てる。不確実性アキュムレータは、複数の分岐予測の各々の不確実性値を、不確実性アキュムレータに関連する累積不確実性カウンタに加算する。スロットルユニットは、累積不確実性カウンタに基づいて分岐予測パイプラインの動作をスロットリングし、正しいパスにある可能性が低いスレッドを遅くする。そうすることによって、フラッシュされる可能性がある命令を実行しないことにより、節電する。
【０００８】
図１は、いくつかの実施形態による、分岐信頼スロットリングを実施するプロセッサ１００のブロック図である。プロセッサ１００は、メモリ１０２と、命令キャッシュ１０４と、命令フェッチユニット１０６と、分岐予測器１０８と、１つ以上の分岐ターゲットバッファ（ＢＴＢ）テーブル１１０と、処理パイプライン１１２と、を含む。様々な実施形態では、この処理システムは、コンピュータプロセッサ内に含まれるか、コンピュータシステム内に分散されている。メモリ１０２は、命令及びデータを記憶するためのキャッシュメモリ等の任意のタイプの揮発性又は不揮発性メモリを含む。命令キャッシュ１０４は、メモリ１０２からの命令にアクセスし、フェッチすべき命令を記憶する。様々な実施形態では、メモリ１０２及び命令キャッシュ１０４は、複数のキャッシュレベルを含む。さらに、プロセッサ１００は、データキャッシュ（図示省略）を含む。
【０００９】
図１には、説明を容易にするために、命令フェッチユニット１０６及び処理パイプライン１１２の簡単な例が示されている。命令フェッチユニット１０６の分岐予測器１０８は、１つ以上のＢＴＢテーブル（一般に、ＢＴバッファ及びＢＴＢとも呼ばれる）１１０に記憶又は提供される分岐ターゲットアドレスを生成する。分岐予測器１０８は、少なくとも部分的に、プロセッサ（例えば、図１のプロセッサ１００）の命令フェッチユニット１０６内に実装される。ＢＴＢテーブル１１０は、図１の分岐予測器１０８の内部に示されているが、ＢＴＢテーブル１１０は、命令フェッチユニット１０６又は分岐予測器１０８の特定の要素に近接してプロセッサ１００内に配置されてもよいし、配置されなくてもよい。いくつかの実施形態では、プロセッサ１００は、複数の命令フェッチユニット１０６及び処理パイプライン１１２をさらに含む。処理パイプライン１１２は、デコードユニット１１４と、発行ユニット１１６と、実行ステージ１１８と、ライトバックユニット１２０と、を含む。
【００１０】
様々な実施形態では、命令フェッチユニット１０６全体及び／又は分岐予測器１０８は、処理パイプライン１１２の一部である。処理パイプライン１１２は、エラーチェックロジック及びエラー処理ロジック、処理パイプライン１１２を通る１つ以上の並列パス、並びに、当技術分野で知られている他の機能等の機能を含むことができる。処理システム１１２を通る順方向パスが図１に示されているが、プロセッサ１００の要素間には、他のフィードバックパス及び信号パスが含まれてもよい。
【００１１】
命令フェッチユニット１０６は、デコードユニット１１４によるさらなる処理のために、命令キャッシュ１０４から命令をフェッチする。一実施形態では、命令フェッチユニット１０６は、分岐予測器１０８と、他の分岐予測ロジック（図示省略）と、を含む。或いは、他の実施形態では、分岐予測器１０８は、命令フェッチユニット１０６とは別々に配置されている。分岐予測器１０８は、以下に詳細に説明するように、分岐信頼スロットリングを実施する処理回路の一例である。
【００１２】
デコードユニット１１４は、命令をデコードし、デコードした命令、命令の一部、又は、デコードした他のデータを発行ユニット１１６に渡す。発行ユニット１１６は、命令又は他のデータを解析し、解析に基づいて、デコードした命令、命令の一部、又は、他のデータを１つ以上の実行ユニット１１８に送信する。１つ以上の実行ユニット１１８は、命令を実行するための固定小数点実行ユニット、浮動小数点実行ユニット、ロード／ストア実行ユニット、ベクトル実行ユニット等の実行ユニットを含む。ライトバックユニット１２０は、命令の実行結果を宛先リソース（図示省略）に書き戻す。宛先リソースは、レジスタ、キャッシュメモリ、他のメモリ、他のデバイスと通信するためのＩ／Ｏ回路、他の処理回路、又は、実行された命令若しくはデータのための他の任意のタイプの宛先を含む任意のタイプのリソースであり得る。
【００１３】
分岐予測器１０８は、命令アドレスを、ＢＴＢテーブル１１０に記憶されている以前に実行された命令アドレスと比較することによって予測を実行する分岐予測パイプライン１２２を含む。このタイプのアーキテクチャでは、多くの命令が「処理中（in flight）」であり得る（すなわち、同時に、実行の様々なステージにあり得る）。分岐予測パイプライン１２２の動作を、図２及び図３に関して、以下により詳細に示す。分岐予測パイプライン１２２内の各ステージは、一般に順番に行われる。高性能を実現するために、分岐予測パイプライン１２２には、１サイクル毎に１つの新しい命令が入り、パイプライン内の各命令は、新しいステージに移る。各ステージは、入力を受けて出力を生成し、その出力は、ステージに関連する出力バッファに記憶される。通常、１つのステージの出力バッファは、次のステージの入力バッファである。このような構成は、全てのステージが並行して動作することを可能にし、そのため、次の命令がパイプラインに入る前に、各命令が分岐予測パイプライン１２２全体を通過しなければならなかった場合に比べて高いスループットをもたらす。分岐予測パイプライン１２２が遅延又はクリアされる必要がある場合、パイプライン内の各命令の処理においてレイテンシが生じる。
【００１４】
予測が成功すると、プロセッサ１００は、ターゲットアドレスを取得するためのステップの実行をスキップすることができるので、予測は、通常、処理時間を節約する。プロセッサ１００は、ＢＴＢテーブル１１０において次の実行ステップのためのアドレスを検索することによって、時間を節約する。例えば、いくつかの実施形態では、ＢＴＢ１１０は、分岐方向（例えば、分岐成立、分岐不成立）を予測するために、分岐アドレス、ターゲットアドレス及び履歴データを記憶する。予測に使用するＢＴＢエントリ（例えば、分岐アドレスが次の検索アドレスと等しいエントリ、検索アドレスに最も近いエントリ）を識別するために、分岐アドレス情報が記憶される。ターゲットアドレスは、予測された成立分岐（predicted taken branch）のターゲットに対する命令フェッチを開始するために使用される。分岐成立／分岐不成立の履歴データを用いて、分岐の以前の結果に基づいて、分岐の方向が、分岐成立又は分岐不成立の何れかに予測される。他の実施形態では、方向予測情報は、ＢＴＢ１１０と並行してアクセスされる追加の（例えば、階層的な）構造から得ることができる。
【００１５】
分岐予測パイプライン１２２は、スロットルユニット１２４と、複数の予測パイプラインステージＢＰ０〜ＢＰ３（例えば、ＢＰ０  １３６、ＢＰ１  １３８、ＢＰ２  １４０、ＢＰ３  １４２）と、ＢＴＢルックアップ１２６と、条件付き予測器１２８と、不確実性アキュムレータ１３０と、を含む。図１の分岐予測パイプライン１２２等のパイプライン方式に関して、省電力のために読み出しが抑制されない限り、ＢＴＢテーブル１１０の１つ以上が予測フロー毎に読み出される。いくつかの実施形態によれば、第１のＢＴＢ読み出しは、ＢＰ０と指定された第１のステージで開始される。後続のステージは、分岐予測パイプライン１２２のステージとしてＢＰ１、ＢＰ２等と指定される。図１及び他の図では、明確な例を提供するとともに、図に示す本発明の実施形態（複数可）を不必要に不明瞭にすることを避けるために、図示したパイプラインが簡略化されていることが理解されよう。例えば、図示したパイプラインステージは、複数の実際のパイプラインステージを表してもよいし、２つ以上の図示したパイプラインステージを同時に実行できる場合には、特定の実施形態において、これらを同じパイプラインステージに組み合わせてもよい。特定のパイプラインステージの機能は、特定のスレッドの特定の部分に関して説明することができるが、パイプラインは、実際には、１つ以上のスレッドの多くの部分で同時にそのような機能を実行するように動作することも理解されよう。
【００１６】
一実施形態では、スロットリングメカニズム（例えば、スロットルユニット１２４）が、分岐予測パイプライン１２２のフロントエンドに実装される（すなわち、スロットルユニット１２４は、分岐予測パイプライン１２２の先頭に配置される）。様々な実施形態では、スロットルユニット１２４は、リソース可用性に基づいて予測フローを開始し、プロセッサ１００で実行されている複数の独立したプロセス又は実行スレッド間を調停する。図示するように、ＢＴＢルックアップ１２６及び条件付き予測器１２８ステージは、分岐予測パイプライン１２２の複数のサイクルに亘る（すなわち、予測パイプラインステージＢＰ０〜ＢＰ３に亘る）。
【００１７】
条件付き予測器１２８は、分岐予測器１０８によって生成された各分岐予測に対して、投機ストリームの先頭で行われた現在の予測がフラッシュされない確率に関連する信頼度を割り当てる。ここでは、分岐予測器によって生成された複数の分岐予測の各々に対して信頼度を割り当てる条件付き予測器１２８との関連で説明しているが、当業者であれば、本開示の範囲から逸脱することなく、様々な他の予測器を使用できることを認識するであろう。例えば、他の実施形態では、間接予測器（図示省略）又は復帰アドレス予測器（図示省略）が、不確実性値を提供する。
【００１８】
一実施形態では、条件付き予測器１２８は、予測信頼性の等級付けを実行し、各分岐予測を、高信頼性予測、中信頼性予測又は低信頼性予測として分類する。例えば、タグ付き幾何学的長さ（ＴＡＧＥ）の予測器の場合、高信頼性予測は、ＴＡＧＥテーブルからの強いバイモーダル（strong bimodal）カウンタ又は飽和型３ビットカウンタ（saturated 3-bit counter）で行われた予測を含み、一般に、１％未満の誤予測率を有する。中信頼性予測は、ＴＡＧＥテーブルからのほぼ飽和型の３ビットカウンタ（nearly saturated 3-bit counter）で行われた予測を含み、一般に、８〜１２％の範囲の誤予測率を有する。低信頼性予測は、ＴＡＧＥテーブルからの弱いバイモーダル（weak bimodal）カウンタ又は弱い／ほぼ弱い３ビットカウンタ（weak/nearly-weak 3-bit counter）で行われた予測を含み、一般に、３０％を超える誤予測率を有する。さらに、以下により詳細に説明するように、分岐予測器１０８によって生成された分岐予測毎に、プロセッサ１００は、各予測に不確実性値を割り当てる。
【００１９】
他の実施形態では、当業者によって理解されるように、分岐タイプ、分岐を予測するのに使用されるＢＴＢエントリの経過期間（age）、予測に含まれる条件付き予測器若しくは間接予測器からの予測の「強さ」、又は、アンダーフローする復帰アドレススタックで復帰を予測する等の特別な条件等のように、各予測の特定の情報から信頼度を導出することを含む、様々な信頼性等級付けシステムが使用され得る。様々な実施形態では、プロセッサ１００は、条件付き予測器１２８によって割り当てられた上記の信頼度と、予測された動的分岐の数と、に少なくとも部分的に基づいて、各分岐予測に不確実性値１３２を割り当てる。例えば、一実施形態では、各分岐予測は、プロセッサ１００によって、予測信頼性の等級付けに基づいて、０〜１０の範囲の不確実性値が割り当てられる。例えば、高信頼性予測には不確実性値０が割り当てられ、中信頼性予測には１〜４の範囲の不確実性値が割り当てられ、低信頼性予測には５〜１０の範囲の不確実性値が割り当てられる。
【００２０】
不確実性アキュムレータ１３０は、分岐予測パイプライン１２２のバックエンドに配置されている（すなわち、不確実性アキュムレータ１３０は、分岐予測パイプライン１２２の後尾に配置される）。不確実性アキュムレータ１３０は、各予測に割り当てられた不確実性値１３２を、不確実性アキュムレータ１３０に関連する累積不確実性カウンタ１３４に加算する。すなわち、不確実性アキュムレータ１３０は、分岐予測パイプライン１２２のバックエンドでインクリメントされる。さらに、各予測に割り当てられた不確実性値は、対応する分岐予測が分岐予測パイプライン１２２からリタイア又はフラッシュされる場合に、累積不確実性カウンタ１３４から減算される。すなわち、累積不確実性カウンタ１３４は、プロセッサ１００において分岐予測が処理されなくなった場合に、デクリメントされる。したがって、分岐予測パイプライン１２２の様々なステージは、各予測に不確実性値を割り当てることと、不確実性アキュムレータ１３０のステージで新たな予測の不確実性値を加算し、リタイア又はフラッシュされた予測の不確実性値を減算することによって、処理中の全ての予測の不確実性値を累積することと、を含む。このようにして、不確実性アキュムレータ１３０は、処理中のもの（すなわち、予測されているがまだリタイアされていない命令）を提示する。
【００２１】
スロットルユニット１２４は、累積不確実性カウンタ１３４が１つ以上の不確実性閾値を超えるかどうかに基づいて、分岐予測パイプライン１２２の動作をスロットリングし、分岐予測器１０８が正しいパス上にあるという信頼性に基づいて、性能／電力のトレードオフを行う。すなわち、処理中の分岐予測の累積不確実性が複数の閾値のセットと比較され、累積不確実性が各種閾値を超えると、一段と厳しいスロットリングが実施される。
【００２２】
一実施形態では、スロットルユニット１２４は、累積不確実性カウンタ１３４が１つ以上の不確実性閾値を超えることに基づいて、第１の実行スレッドの予測レートを減少させる。例えば、プロセッサ１００がシングルスレッドモードであり、累積不確実性カウンタ１３４が１つ以上の不確実性閾値を超える場合、スロットルユニット１２４は、分岐予測器１０８に対して、将来の１つ以上のサイクルの予測をスキップするように指示する。別の実施形態では、プロセッサ１００がマルチスレッドモードであり、累積不確実性カウンタ１３４が１つ以上の不確実性閾値を超える場合、スロットルユニット１２４は、分岐予測器１０８に対して、将来の１つ以上のサイクルについて、第１の実行スレッドから分岐予測を生成するのに使用されるであろうサイクルを第２の実行スレッドに割り当てることによって、処理帯域幅を割り当てるように指示する。
【００２３】
スロットリングは、別の実行スレッドに譲渡するか、別の実行スレッドがその譲渡を利用できない場合（例えば、プロセッサ１００がシングルスレッドモードで動作している場合）にバブルサイクルを生成するという方法で、実行スレッドが、予測を発行するための全ての基準を満たしていたであろうサイクルにおいて予測を発行しないようにする。例えば、シングルスレッドモードでは、スロットリングによって省電力化が可能になり、マルチスレッドモードでは、スロットリングによって他の実行スレッドに譲ることで、省電力化及び性能向上の両方が可能になる。各予測に不確実性値を割り当て、閾値と、関連する予測レートと、を選択することによって、スロットリングは、スロットリングされる実行スレッドの性能への影響を最小限に抑えながら、無駄な作業を減らす。無駄な作業の削減は、省電力及び／又はマルチスレッドの性能の向上につながる。
【００２４】
図２は、いくつかの実施形態による、シングルスレッドモードにおける予測パイプラインスロットリングの図である。プロット２００は、第１の実行スレッド（つまり、この例ではスレッドＡ）に関連する累積不確実性カウンタの値を、分岐予測動作中の（サイクル単位で測定された）時間の関数として示す。プロット２０２は、分岐予測パイプライン（図１の分岐予測パイプライン１２２等）に入る新たな予測を、分岐予測動作中の時間（サイクルで測定される）の関数として示す。プロット２００，２０２の横軸は、左から右に増加する時間（サイクル単位）を示す。プロット２００の縦軸は、累積不確実性カウンタの値（任意の単位）を示す。
【００２５】
プロット２００に示すように、サイクル１における新たな予測２０４及びサイクル２における新たな予測２０６の各々は、累積不確実性カウンタを増加させる。ただし、累積不確実性カウンタの値は、第１の不確実性閾値Ｔ１未満である。したがって、分岐予測パイプラインの動作は、１サイクル毎に１つの新たな予測が分岐予測パイプライン１２２に入り、既にパイプラインに入っている各命令が新たなステージに移る、という通常の動作と同様に進行する。
【００２６】
サイクル３では、分岐予測パイプライン１２２に入る新たな予測２０８に関連する不確実性値が、累積不確実性カウンタに加算される。新たな予測２０８に関連する不確実性値を加算した後に、累積不確実性カウンタの値は、第１の不確実性閾値Ｔ１を超えて増加する。したがって、分岐予測パイプライン１２２のスロットルユニット１２４は、次の実行サイクル（すなわち、サイクル４）において、第１のスロットリングレベルで分岐予測パイプライン動作のスロットリングを開始する。図２の例では、スロットルユニット１２４が動作するパイプラインの前部において不確実性アキュムレータ１３０が累積不確実性を表すように、各予測が１サイクルで行われることを仮定している。
【００２７】
サイクル４において、スロットルユニット１２４は、新たな予測を発行しないことによって、分岐予測パイプライン１２２にストールを挿入する。サイクル５において、新たな予測２１０が分岐予測パイプライン１２２に入る。このように、スロットルユニット１２４は、累積不確実性カウンタが第１の不確実性閾値Ｔ１を超えて増加した場合に、１サイクル毎ではなく１サイクルおきに新たな予測を生成することによって、分岐予測パイプラインの動作をスロットリングする。プロット２００に示すように、サイクル５における新たな予測２１０は、（例えば、別の中信頼性予測又は低信頼性予測であることに起因して）累積不確実性カウンタを増加させる。ただし、累積不確実性カウンタの値は、第２の不確実性閾値Ｔ２より小さいが、第１の不確実性閾値Ｔ１より大きい。したがって、分岐予測パイプラインの動作は、１サイクルおきに１つの新たな予測が分岐予測パイプライン１２２に入り、既にパイプラインに入っている各命令が１サイクル毎に新たなステージに移る、という第１のスロットリングレベルで進行する。
【００２８】
サイクル６において、スロットルユニット１２４は、新たな予測を発行しないことによって、分岐予測パイプライン１２２にストールを挿入する。サイクル７において、新たな予測２１２が分岐予測パイプライン１２２に入る。サイクル７では、分岐予測パイプライン１２２に入る新たな予測２１２に関連する不確実性値が、累積不確実性カウンタに加算される。ただし、新たな予測２１２に関連する不確実性値を加算した後に、累積不確実性カウンタの値は、第２の不確実性閾値Ｔ２を超えて増加する。したがって、分岐予測パイプライン１２２のスロットルユニット１２４は、次の実行サイクル（すなわち、サイクル８）において、第２のスロットリングレベルで分岐予測パイプライン動作のスロットリングを開始する。
【００２９】
サイクル８，９において、スロットルユニット１２４は、サイクル８の間にもサイクル９の間にも新たな予測を発行しないことによって、分岐予測パイプライン１２２にストールを挿入する。新たな予測２１４は、サイクル１０まで分岐予測パイプライン１２２に入らない。このように、スロットルユニット１２４は、累積不確実性カウンタが第２の不確実性閾値Ｔ２を超えて増加した場合に、３サイクル毎に新たな予測を生成することによって、分岐予測パイプラインの動作をスロットリングする。スロットリングは、ここでは、２サイクル毎（例えば、第１のスロットリングレベル）及び３サイクル毎（例えば、第２のスロットリングレベル）に新たな予測を発行するという状況で説明されているが、当業者は、新たな命令が分岐予測パイプライン１２２に導入される速度を低減し、所定の実行スレッドのための電力及び計算リソースの量を低減する任意の方法が、本開示の範囲から逸脱することなく利用され得ることを認識するであろう。
【００３０】
例えば、図３は、いくつかの実施形態による、マルチスレッドモードにおける予測パイプラインスロットリングの図である。図３に示すように、予測をスキップするのではなく、処理帯域幅が、実行サイクルをより有効に利用できる他の実行スレッド（例えば、予測が正しいパス上にあるという、より高い信頼度を有する他の実行スレッド）に割り当てられる。
【００３１】
プロット３００は、第１の実行スレッド（つまり、この例ではスレッドＡ）に関連する累積不確実性カウンタの値を、分岐予測動作中の（サイクル単位で測定された）時間の関数として示す。プロット３０２は、分岐予測パイプライン（図１の分岐予測パイプライン１２２等）に入る新たな予測を、分岐予測動作中の（サイクルで測定される）時間の関数として示す。プロット３００，３０２の横軸は、左から右に増加する時間（サイクル単位）を示す。プロット３００の縦軸は、累積不確実性カウンタの値（任意の単位）を示す。
【００３２】
プロット３００に示すように、サイクル１における新たな予測３０４及びサイクル２における新たな予測３０６の各々は、累積不確実性カウンタを増加させる。ただし、累積不確実性カウンタの値は、第１の不確実性閾値Ｔ１未満である。したがって、分岐予測パイプラインの動作は、通常通りに進行する。具体的には、分岐予測パイプライン１２２のサイクル毎に、フェッチは、第１のスレッド（例えば、スレッドＡ）の１つの新たな予測と、第２のスレッド（例えば、スレッドＢ）の１つの新たな予測と、を交互に繰り返し（ＡＢＡＢＡＢで表されている）、既にパイプラインに入っている各命令は、新しいステージに移る。
【００３３】
サイクル３では、分岐予測パイプライン１２２に入る新たな予測３０８に関連する不確実性値が、累積不確実性カウンタに加算される。新たな予測３０８に関連する不確実性値を加算した後に、累積不確実性カウンタの値は、第１の不確実性閾値Ｔ１を超えて増加する。したがって、分岐予測パイプライン１２２のスロットルユニット１２４は、次の実行サイクル（すなわち、サイクル４）において、実行スレッドＡに対する分岐予測パイプライン動作のスロットリングを第１のスロットリングレベルで開始する。例えば、スレッドＡとスレッドＢとを交互に切り替えるのではなく、スロットルユニット１２４は、より頻繁に処理を行うためにスレッドＢを選択し、例えば、スレッドＢは、ＡＢＢＡＢＢで表されるように、分岐予測パイプラインサイクルの３分の２で選択され得る。
【００３４】
サイクル４及びサイクル５において、スロットルユニット１２４は、新たな予測を発行しないことによって、実行スレッドＡに関連する予測をスロットリングする。代わりに、スロットルユニット１２４は、新たな分岐予測を生成するためのサイクルをスレッドＢに割り当てるように分岐予測器１０８に指示し、スレッドＢについて新たな予測３１０，３１２を生成する。サイクル６において、スレッドＡの分岐予測パイプライン１２２に新たな予測３１４が入る。このように、スロットルユニット１２４は、スレッドＡの累積不確実性カウンタが第１の不確実性閾値Ｔ１を超えて増加した場合に、１サイクルおきではなく３サイクル毎に新たな予測を生成することによって、分岐予測パイプラインの動作をスロットリングする。プロット３００に示すように、サイクル６における新たな予測３１４は、（例えば、別の中信頼性予測又は低信頼性予測であることに起因して）累積不確実性カウンタを増加させる。ただし、累積不確実性カウンタの値は、第２の不確実性閾値Ｔ２より小さく、第１の不確実性閾値Ｔ１より大きい。したがって、分岐予測パイプラインの動作は、３サイクル毎にスレッドＡについての１つの新たな予測が分岐予測パイプライン１２２に入り、既にパイプラインに入っている各命令が１サイクル毎に新しいステージに移る、という第１のスロットリングレベルで進行する。
【００３５】
スレッドＢについての新たな予測３１６，３１８は、サイクル７，８で分岐予測パイプライン１２２に入る。サイクル９において、スレッドＡについての新たな予測３２０が分岐予測パイプライン１２２に入る。サイクル９において、分岐予測パイプライン１２２に入る新たな予測３２０に関連する不確実性値が、累積不確実性カウンタに加算される。ただし、新たな予測３２０に関連する不確実性値を加算した後に、累積不確実性カウンタの値は、第２の不確実性閾値Ｔ２を超えて増加する。したがって、分岐予測パイプライン１２２のスロットルユニット１２４は、次の実行サイクル（すなわち、サイクル８）において、第２のスロットリングレベルで分岐予測パイプライン動作のスロットリングを開始する。例えば、第２のスロットリングレベルでは、スロットルユニット１２４は、より頻繁に処理するためにスレッドＢを選択する。例えば、スレッドＢは、ＡＢＢＢＡＢＢＢで表されるように、分岐予測パイプラインサイクルの７５％で選択され得る。
【００３６】
サイクル１０，１１，１２において、スロットルユニット１２４は、新たな予測を発行しないことによって、実行スレッドＡに関連する予測をスロットリングする。代わりに、スロットルユニット１２４は、処理帯域幅を実行スレッドＢに割り当てるように分岐予測器１０８に指示し、サイクル１０，１１，１２において、スレッドＢについての新たな予測３２２，３２４，３２６を生成する。スレッドＡについての新たな予測は、サイクル１３（図示省略）まで分岐予測パイプライン１２２に入らない。このように、スロットルユニット１２４は、累積不確実性カウンタが第２の不確実性閾値Ｔ２を超えて増加した場合に、４サイクル毎にスレッドＡについての新たな予測を生成することによって、分岐予測パイプラインのスレッドＡに対する動作をスロットリングする。スロットリングは、ここでは、３サイクル毎（例えば、第１のスロットリングレベル）及び４サイクル毎（例えば、第２のスロットリングレベル）に新たな予測を発行するという状況で説明しているが、当業者は、新たな命令が分岐予測パイプライン１２２に導入される速度を低減し、所定の実行スレッドのための電力及び計算リソースの量を低減する任意の方法が、本開示の範囲から逸脱することなく利用され得ることを認識するであろう。他の実施形態では、スロットリングは、新たな予測を発行する間に異なるサイクル数を含むことができる。ただし、一般的に、累積された不確実性が増加するにつれて、スロットリングの量が増加する。
【００３７】
図４は、いくつかの実施形態による、分岐予測パイプラインをスロットリングする方法４００を説明するブロック図である。方法４００は、図１に示す分岐予測パイプライン１２２及びプロセッサ１００のいくつかの実施形態で実施される。
【００３８】
ブロック４０２において、分岐予測器１０８は、実行スレッドに対する分岐予測を生成する。ブロック４０４で、条件付き予測器１２８は、分岐予測器１０８によって生成された分岐予測に信頼度を割り当てる。いくつかの実施形態では、条件付き予測器１２８は、分岐予測器１０８によって生成された各分岐予測に、投機ストリームの先頭で行われた現在の予測がフラッシュされない確率に関連する信頼度を割り当てる。一実施形態では、条件付き予測器１２８は、予測信頼性の等級付けを実行し、各分岐予測を、高信頼性予測、中信頼性予測又は低信頼性予測として分類する。
【００３９】
ブロック４０６において、プロセッサ１００は、分岐予測器１０８によって生成された分岐予測に不確実性値を割り当てる。いくつかの実施形態では、プロセッサ１００は、ブロック４０４で条件付き予測器１２８によって割り当てられた信頼度と、予測された動的分岐の数と、に少なくとも部分的に基づいて、各分岐予測に不確実性値を割り当てる。
【００４０】
ブロック４０８において、不確実性アキュムレータ１３０は、ブロック４０６からの分岐予測の不確実性値を、分岐予測器１０８に関連する累積不確実性カウンタに加算する。いくつかの実施形態では、プロセッサ１００で実行される異なる実行スレッドの各々は、別個の累積不確実性カウンタに関連付けられている。不確実性アキュムレータ１３０は、分岐予測パイプライン１２２のバックエンドでインクリメントされる。さらに、分岐予測に割り当てられた不確実性値は、対応する分岐予測が分岐予測パイプライン１２２からリタイア又はフラッシュされる場合に、累積不確実性カウンタから減算される。すなわち、累積不確実性カウンタは、プロセッサ１００において分岐予測が処理されなくなった場合にデクリメントされる。様々な実施形態において、不確実性値は、以下のように、処理中の全ての予測されたブロックについてスレッド固有のカウンタに蓄積され、予測時に不確実性値が加算され、リタイア時に不確実性値が減算され、リダイレクト時に不確実性カウンタがリセットされる。
【００４１】
したがって、分岐予測パイプライン１２２の様々なステージは、各予測に不確実性値を割り当てることと、不確実性アキュムレータ１３０のステージで新たな予測の不確実性値を加算することによって、処理中の全ての予測に亘って不確実性値を累積することと、リタイア又はフラッシュされた予測の不確実性値を減算することと、を含む。累積不確実性カウンタは、プロセッサ１００が正しいパスに従って予測しているかどうかに関する信頼性の尺度を提供する。
【００４２】
ブロック４１０で、新たな予測のサイクルが開始され、スロットルユニット１２４は、累積不確実性カウンタが第１の不確実性閾値を超えるかどうかを判別する。累積不確実性カウンタが第１の不確実性閾値を超えないとスロットルユニット１２４が判別した場合、方法４００は、新たな予測サイクルのためにブロック４０２に戻る。しかしながら、累積不確実性カウンタが第１の不確実性閾値を超えているとスロットルユニット１２４が判別した場合、方法４００はブロック４１２に進む。
【００４３】
ブロック４１２で、スロットルユニット１２４は、分岐予測パイプライン１２２の動作をスロットリングする方法を決定するために、プロセッサ１００がシングルスレッドモードで動作しているか、マルチスレッドモードで動作しているかを判別する。プロセッサ１００がシングルスレッドモードで動作しているとスロットルユニット１２４が判別した場合、方法４００はブロック４１４に進む。ブロック４１４において、スロットルユニット１２４は、累積不確実性カウンタが第２の不確実性閾値を超えているかどうかを判別する。累積不確実性カウンタが（ブロック４１０からの）第１の不確実性閾値を超えているが、第２の不確実性閾値を超えていないとスロットルユニット１２４が判別した場合、スロットルユニット１２４は、図２に関連して上述したように、ブロック４１６において、第１のサイクル数の間、分岐予測をスキップする。累積不確実性カウンタが（ブロック４１０からの）第１の不確実性閾値を超えており、第２の不確実性閾値も超えているとスロットルユニット１２４が判別した場合、スロットルユニット１２４は、図２に関連して上述したように、ブロック４１８において、第１のサイクル数より大きい第２のサイクル数の間、分岐予測をスキップする。
【００４４】
ブロック４１２において、プロセッサ１００がマルチスレッドモードで動作しているとスロットルユニット１２４が判別した場合、方法４００はブロック４２０に進む。ブロック４２０において、スロットルユニット１２４は、累積不確実性カウンタが第２の不確実性閾値を超えているかどうかを判別する。累積不確実性カウンタが（ブロック４１０からの）第１の不確実性閾値を超えているが、第２の不確実性閾値を超えていないとスロットルユニット１２４が判別した場合、スロットルユニット１２４は、図３に関連して上述したように、第１の分岐予測サイクル数を異なる実行スレッドに割り当てる（ブロック４２２）。累積不確実性カウンタが（ブロック４１０からの）第１の不確実性閾値を超えており、第２の不確実性閾値も超えているとスロットルユニット１２４が判別した場合、スロットルユニット１２４は、図３に関連して上述したように、第１のサイクル数より大きい第２の分岐予測サイクル数を異なる実行スレッドに割り当てる（ブロック４２４）。
【００４５】
図示するように、ブロック４１６，４１８，４２２，４２４の各々は、後続の新たな予測サイクルのためにブロック４０２に戻る。累積不確実性カウンタが様々な不確実性閾値を超えて増加するとスロットリングが発生するが、累積不確実性カウンタが不確実性閾値を下回ると、分岐予測は以前の予測レートに戻る。上述したように、複数の分岐予測の各々の不確実性値は、複数の分岐予測の各々が分岐予測パイプラインからリタイア又はフラッシュされる場合に、累積不確実性カウンタから減算される。累積不確実性カウンタは、命令がリタイアされると減少を開始する。命令がリタイアすると、リダイレクトが表示されずに当該命令がリタイアした場合に、行われた予測が正しかったことを意味する。その場合、予測が既に実行されていないため、累積不確実性カウンタから減算される。
【００４６】
このように、シングルスレッドモードでは、累積不確実性カウンタが第２の不確実性閾値を下回ると、スロットルユニット１２４は、より少ない予測をスキップするように分岐予測器１０８に指示する。同様に、シングルスレッドモードでは、累積不確実性カウンタが第１の不確実性閾値を下回ると、スロットルユニット１２４は、スロットリングを中止し、サイクル毎に新たな予測を生成することに戻るように分岐予測器１０８に指示する。マルチスレッドモードでは、累積不確実性カウンタが第２の不確実性閾値を下回ると、スロットルユニット１２４は、より少ない処理帯域幅を第２の実行スレッドに割り当て、処理帯域幅を第１の実行スレッドに戻すように分岐予測器１０８に指示する。同様に、マルチスレッドモードでは、累積不確実性カウンタが第１の不確実性閾値を下回ると、処理帯域幅が第１の実行スレッドに戻され、第１の実行スレッドは、１サイクルおきに新たな予測の生成を再開する。
【００４７】
このように、本明細書で説明した分岐信頼スロットリングは、正しいパス上にある可能性が低いスレッドの速度を低下させ、これにより、フラッシュされる可能性のある命令を実行しないことによって電力を節約する。プロセッサは、（例えば、マルチスレッドモードでは）ＣＰＵコア内で同じハードウェアを共有する別のスレッドに電力及び計算リソースを提供するか、（例えば、シングルスレッドモードでは）サイクル内で新たな予測を生成しないことによって、電力を節約することができる。所定のＣＰＵコア内のスレッドによって生成された電力リソースは、複数のＣＰＵコアに亘って電力を動的に割り当てることができるＩＣパッケージ内の他のＣＰＵコアのスレッドによって利用することができる。このようにして、分岐信頼スロットリングは、コンピューティングリソースをより効率的に使用することができる。
【００４８】
本明細書に開示されるように、いくつかの実施形態では、プロセッサは、１つ以上の分岐ターゲットバッファ（ＢＴＢ）テーブルを含む分岐予測器と、スロットルユニット及び不確実性アキュムレータを含む分岐予測パイプラインと、を含み、プロセッサは、分岐予測器によって生成された複数の分岐予測の各々に対して不確実性値を割り当てるように構成されており、不確実性アキュムレータは、複数の分岐予測の各々の不確実性値を、不確実性アキュムレータに関連する累積不確実性カウンタに加算するように構成されており、スロットルユニットは、累積不確実性カウンタに基づいて、分岐予測パイプラインの動作をスロットリングするように構成されている。一態様では、複数の分岐予測の各々の不確実性値は、複数の分岐予測の各々がプロセッサパイプラインからリタイア又はフラッシュされる場合に、累積不確実性カウンタから減算される。別の態様では、スロットルユニットは、累積不確実性カウンタが１つ以上の不確実性閾値を超えたことに基づいて、第１の実行スレッドの予測レートを低下させるように構成されている。
【００４９】
一態様では、スロットルユニットは、プロセッサがシングルスレッドモードである場合に、累積不確実性カウンタが１つ以上の不確実性閾値を超えたことに基づいて、１つ以上のサイクルの予測をスキップするように分岐予測器に指示するように構成されている。別の態様では、スロットルユニットは、プロセッサがマルチスレッドモードである場合に、累積不確実性カウンタが１つ以上の不確実性閾値を超えたことに基づいて、１つ以上のサイクルの間、処理帯域幅を第２の実行スレッドに割り当てるように分岐予測器に指示するように構成されている。さらに別の態様では、スロットルユニットは、累積不確実性カウンタが第１の不確実性閾値を下回ったことに応じて、第１のサイクル数の間、処理帯域幅を第２の実行スレッドから第１の実行スレッドに戻すように分岐予測器に指示するように構成されている。さらに別の態様では、プロセッサは、分岐予測器によって生成された複数の分岐予測の各々に信頼度を割り当てるように構成された条件付き予測器を含み、プロセッサは、信頼度に少なくとも部分的に基づいて、複数の分岐予測の各々に不確実性値を割り当てるように構成されている。
【００５０】
本明細書に開示されるように、いくつかの実施形態では、方法は、分岐予測器によって生成された分岐予測に不確実性値を割り当てることと、分岐予測の不確実性値を、分岐予測器に関連する累積不確実性カウンタに加算することと、累積不確実性カウンタが１つ以上の不確実性閾値を超えたことに基づいて、分岐予測器の動作をスロットリングすることと、を含む。一態様では、分岐予測の不確実性値を加算することは、分岐予測器の分岐予測パイプラインのバックエンドにおいて累積不確実性カウンタをインクリメントすることを含む。別の態様では、方法は、分岐予測がプロセッサパイプラインからリタイア又はフラッシュされた場合に、累積不確実性カウンタから分岐予測の不確実性値を減算することを含む。
【００５１】
一態様では、分岐予測器の動作をスロットリングすることは、累積不確実性カウンタが１つ以上の不確実性閾値を超えたことに基づいて、第１の実行スレッドの予測レートを低下させることを含む。別の態様では、方法は、累積不確実性カウンタが１つ以上の不確実性閾値のうち第１の不確実性閾値を超えたことに基づいて、第１のサイクル数の間、第１の実行スレッドの分岐予測をスキップすることを含む。さらに別の態様では、方法は、累積不確実性カウンタが第１の不確実性閾値よりも大きい第２の不確実性閾値を超えたことに基づいて、第１のサイクル数よりも大きい第２のサイクル数の間、第１の実行スレッドの分岐予測をスキップすることを含む。
【００５２】
一態様では、方法は、分岐予測器がマルチスレッドモードで動作している場合に、第１のサイクル数に関連する処理帯域幅を第２の実行スレッドに割り当てることを含む。別の態様では、方法は、分岐予測に信頼度を割り当てることと、信頼度に少なくとも部分的に基づいて、分岐予測に不確実性値を割り当てることと、を含む。
【００５３】
本明細書に開示されるように、いくつかの実施形態では、方法は、分岐予測パイプラインの不確実性アキュムレータにおいて、第１の実行スレッドの累積不確実性カウンタを不確実性値によってインクリメントすることと、累積不確実性カウンタが１つ以上の不確実性閾値を超えているという判別に少なくとも部分的に基づいて、複数の実行スレッド間を調停することと、を含む。一態様では、方法は、累積不確実性カウンタが第１の不確実性閾値を超えたことに基づいて、第１のサイクル数の間、処理帯域幅を第１の実行スレッドから第２の実行スレッドに割り当てることを含む。
【００５４】
別の態様では、方法は、累積不確実性カウンタが第１の不確実性閾値よりも大きい第２の不確実性閾値を超えたことに基づいて、第１のサイクル数よりも大きい第２のサイクル数の間、処理帯域幅を第１の実行スレッドから第２の実行スレッドに割り当てることを含む。さらに別の態様では、方法は、累積不確実性カウンタが第１の不確実性閾値を下回ったことに基づいて、第１のサイクル数の処理帯域幅を第２の実行スレッドから第１の実行スレッドに割り当てることを含む。さらに別の態様では、方法は、分岐予測パイプラインによって生成された分岐予測に信頼度を割り当てることと、信頼度に少なくとも部分的に基づいて、分岐予測に不確実性値を割り当てることと、を含む。
【００５５】
いくつかの実施形態では、上記の装置及び技術は、図１〜図４を参照して上述したシステム、プロセッサ及びＢＴＢテーブル等の１つ以上の集積回路（ＩＣ）デバイス（集積回路パッケージ又はマイクロチップとも呼ばれる）を含むシステムに実装される。これらのＩＣデバイスの設計及び製造には、電子設計自動化（ＥＤＡ）及びコンピュータ支援設計（ＣＡＤ）ソフトウェアツールが使用される。これらの設計ツールは、通常、１つ以上のソフトウェアプログラムとして表される。１つ以上のソフトウェアプログラムは、回路を製造するための製造システムを設計又は適合するための処理の少なくとも一部を実行するように１つ以上のＩＣデバイスの回路を表すコードで動作するようにコンピュータシステムを操作する、コンピュータシステムによって実行可能なコードを含む。このコードは、命令、データ、又は、命令及びデータの組み合わせを含むことができる。設計ツール又は製造ツールを表すソフトウェア命令は、通常、コンピューティングシステムがアクセス可能なコンピュータ可読記憶媒体に記憶される。同様に、ＩＣデバイスの設計又は製造の１つ以上のフェーズを表すコードは、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体に記憶されてもよいし、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体からアクセスされてもよい。
【００５６】
コンピュータ可読記憶媒体は、命令及び／又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の非一時的な記憶媒体又は非一時的な記憶媒体の組み合わせを含む。かかる記憶媒体には、限定されないが、光媒体（例えば、コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）、ブルーレイ（登録商標）ディスク）、磁気媒体（例えば、フロッピー（登録商標）ディスク、磁気テープ、磁気ハードドライブ）、揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）若しくはキャッシュ）、不揮発性メモリ（例えば、読取専用メモリ（ＲＯＭ）若しくはフラッシュメモリ）、又は、微小電気機械システム（ＭＥＭＳ）ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体は、コンピュータシステムに内蔵されてもよいし（例えば、システムＲＡＭ又はＲＯＭ）、コンピュータシステムに固定的に取り付けられてもよいし（例えば、磁気ハードドライブ）、コンピュータシステムに着脱可能に取り付けられてもよいし（例えば、光学ディスク又はユニバーサルシリアルバス（ＵＳＢ）ベースのフラッシュメモリ）、有線又は無線のネットワークを介してコンピュータシステムに接続されてもよい（例えば、ネットワークアクセス可能なストレージ（ＮＡＳ））。
【００５７】
いくつかの実施形態では、上記の技術のいくつかの態様は、ソフトウェアを実行する処理システムの１つ以上のプロセッサによって実装されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体上で有形に具現化された実行可能命令の１つ以上のセットを含む。ソフトウェアは、１つ以上のプロセッサによって実行されると、上記の技術の１つ以上の態様を実行するように１つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶デバイス、例えばフラッシュメモリ、キャッシュ、ランダムアクセスメモリ（ＲＡＭ）等のソリッドステート記憶デバイス、又は、他の１つ以上の不揮発性メモリデバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、１つ以上のプロセッサによって解釈若しくは実行可能な他の命令フォーマットであってもよい。
【００５８】
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、１つ以上のさらなるアクティビティが実行される場合があり、１つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
【００５９】
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。
【図１】
2021536611.tif 000003
【図２】
2021536611.tif 000004
【図３】
2021536611.tif 000005
【図４】
2021536611.tif 000006
【国際調査報告】
2021536611.tif 000007
2021536611.tif 000008