(57)【特許請求の範囲】
【請求項１】
主要分岐予測器と補助分岐予測器とを備える処理システムにおいて補助分岐予測を管理するための方法であって、
前記主要分岐予測器の予測ミスされたターゲット・アドレスに対応する主要分岐予測器予測ミス・インジケータを受け取ることに基づいて、前記補助分岐予測器の合同クラスを突き止めることと、
前記合同クラスの１つまたは複数の他のエントリに対して最も有用でないレベルに設定された補助有用性レベルを有するエントリを、前記合同クラス中で識別することと、
前記予測ミスされたターゲット・アドレスに対応する補助データを前記エントリにインストールすることと、
前記補助データをインストールすることに基づいて前記エントリの前記補助有用性レベルを初期値にリセットすることと、
その後、前記補助データが前記エントリにインストールされた後で前記エントリに対して前記主要分岐予測器予測ミス・インジケータがセットされたと決定し、かつ、前記補助分岐予測器が前記補助データを使用して分岐を正しく予測したかまたは前記エントリの前記補助有用性レベルが訓練しきい値未満であるかのいずれかであると決定したときに、前記エントリの前記補助有用性レベルを増加させることと、
前記合同クラスのすべてのエントリの前記補助有用性レベルが低減しきい値よりも高いと決定することに基づいて、前記合同クラスのすべてのエントリについて等しく前記補助有用性レベルを低減することと、
前記合同クラスの２つのエントリの前記補助有用性レベルが最大値に達したと決定することに基づいて、前記合同クラスのすべてのエントリについて等しく前記補助有用性レベルを低減することと、
を含む方法。
【請求項２】
前記主要分岐予測器と前記補助分岐予測器とを検索アドレスに基づいて並列に検索して分岐予測を行うことと、
前記補助分岐予測器のマッチするエントリの前記補助有用性レベルが有用性しきい値よりも高いと決定することに基づいて、前記補助分岐予測器からの、前記検索アドレスに対応する補助予測器分岐ターゲットを選択することと、
前記補助分岐予測器の前記マッチするエントリの前記補助有用性レベルが前記有用性しきい値未満であると決定することに基づいて、前記主要分岐予測器からの、前記検索アドレスに対応する主要予測器分岐ターゲットを選択することと、
をさらに含む、請求項１に記載の方法。
【請求項３】
前記エントリを前記合同クラス中で識別することがさらに、
前記合同クラス中の複数のエントリの各々が上書きされないよう保護されているか保護されていないかを識別する、前記エントリの各々の保護制限をチェックすることと、
前記合同クラス中の保護されていないエントリのうち、最も有用でないレベルに設定された前記補助有用性レベルを有するエントリを前記合同クラス中で識別することと、
を含む、請求項１に記載の方法。
【請求項４】
前記補助データのインストール時に前記エントリの前記保護制限を０でない値に初期化することと、
前記エントリの前記補助有用性レベルが保護しきい値を超えると決定することに基づいて、前記エントリの前記保護制限を前記０でない値にリセットすることと、
前記エントリの前記保護制限中に０の値を有することに基づいて、前記エントリを保護されていないものとして識別することと、
前記エントリの前記保護制限中に前記０でない値を有することに基づいて、前記エントリを保護されているものとして識別することと、
保護されている最も有用でないエントリのインストールを防止することに基づいて、前記保護されている最も有用でないエントリの前記保護制限をデクリメントすることと、
をさらに含む、請求項３に記載の方法。
【請求項５】
前記エントリを前記合同クラス中で識別することがさらに、
無効なエントリがあるかどうか前記合同クラスをチェックすることと、
前記無効なエントリを前記合同クラス中で突き止めることに基づいて、前記無効なエントリを更新に向けたエントリとして識別し、前記エントリの有効性を有効に設定することと、
無効なエントリが前記合同クラス中にないと決定することに基づいて、前記合同クラスの１つまたは複数の他のエントリに対して最も有用でないレベルに設定された前記補助有用性レベルを有する前記エントリを、前記合同クラス中で識別することと、
を含む、請求項３に記載の方法。
【請求項６】
前記補助分岐予測器への最近成功した複数のインストールのレコードを先行インストール・キューに記憶することと、
前記先行インストール・キュー中でマッチするレコードを突き止めることに基づいて、前記補助分岐予測器への新たなインストールを防止することと、
キュー・リフレッシュ期間の経過後に前記先行インストール・キューを無効化することと、
をさらに含む、請求項１に記載の方法。
【請求項７】
前記主要分岐予測器の参照元エントリが無効化されたと決定することに基づいて前記補助分岐予測器中の参照先エントリを無効化することであって、前記主要分岐予測器の前記参照元エントリが前記補助分岐予測器中の前記参照先エントリに対応するものである、前記無効化することと、
前記補助分岐予測器中の前記参照先エントリを無効化することに基づいて、前記先行インストール・キュー中の前記参照先エントリのレコードを無効化するかまたは前記先行インストール・キューを完全に無効化することと、
をさらに含む、請求項６に記載の方法。
【請求項８】
補助分岐予測を管理するための処理システムであって、
複数の主要分岐予測構造を含む主要分岐予測器と、
複数の合同クラスを含む補助分岐予測器であって、前記合同クラスの各々が複数のエントリを含む、前記補助分岐予測器と、
補助インストールおよび更新コントローラとを備え、前記補助インストールおよび更新コントローラが、
前記主要分岐予測器の予測ミスされたターゲット・アドレスに対応する主要分岐予測器予測ミス・インジケータを受け取ることに基づいて、前記補助分岐予測器の合同クラスを突き止めることと、
前記合同クラスの１つまたは複数の他のエントリに対して最も有用でないレベルに設定された補助有用性レベルを有するエントリを、前記合同クラス中で識別することと、
前記予測ミスされたターゲット・アドレスに対応する補助データを前記エントリにインストールすることと、
前記補助データをインストールすることに基づいて前記エントリの前記補助有用性レベルを初期値にリセットすることと、
その後、前記補助データが前記エントリにインストールされた後で前記エントリに対して前記主要分岐予測器予測ミス・インジケータがセットされたと決定し、かつ、前記補助分岐予測器が前記補助データを使用して分岐を正しく予測したかまたは前記エントリの前記補助有用性レベルが訓練しきい値未満であるかのいずれかであると決定したときに、前記エントリの前記補助有用性レベルを増加させることと、
前記合同クラスのすべてのエントリの前記補助有用性レベルが低減しきい値よりも高いと決定することに基づいて、前記合同クラスのすべてのエントリについて等しく前記補助有用性レベルを低減することと、
前記合同クラスの２つのエントリの前記補助有用性レベルが最大値に達したと決定することに基づいて、前記合同クラスのすべてのエントリについて等しく前記補助有用性レベルを低減することと、
を実施するように動作可能である、処理システム。
【請求項９】
前記主要分岐予測器を検索アドレスに基づいて検索して分岐予測を行う、主要検索およびヒット・コントローラと、
前記主要検索およびビット・コントローラと並列に前記補助分岐予測器を検索する、補助検索およびヒット・コントローラと、
ターゲット・アドレス・セレクタとをさらに備え、前記ターゲット・アドレス・セレクタが、
前記補助分岐予測器のマッチするエントリの前記補助有用性レベルが有用性しきい値よりも高いと決定することに基づいて、前記補助分岐予測器からの、前記検索アドレスに対応する補助予測器分岐ターゲットを選択することと、
前記補助分岐予測器の前記マッチするエントリの前記補助有用性レベルが前記有用性しきい値未満であると決定することに基づいて、前記主要分岐予測器からの、前記検索アドレスに対応する主要予測器分岐ターゲットを選択することと、
を実施するように動作可能である、請求項８に記載の処理システム。
【請求項１０】
前記エントリを前記合同クラス中で識別することがさらに、
前記合同クラス中の複数のエントリの各々が上書きされないよう保護されているか保護されていないかを識別する、前記エントリの各々の保護制限をチェックすることと、
前記合同クラス中の保護されていないエントリのうち、最も有用でないレベルに設定された前記補助有用性レベルを有するエントリを前記合同クラス中で識別することと、
を含む、請求項８に記載の処理システム。
【請求項１１】
前記補助インストールおよび更新コントローラがさらに、
前記補助データのインストール時に前記エントリの前記保護制限を０でない値に初期化することと、
前記エントリの前記補助有用性レベルが保護しきい値を超えると決定することに基づいて、前記エントリの前記保護制限を前記０でない値にリセットすることと、
前記エントリの前記保護制限中に０の値を有することに基づいて、前記エントリを保護されていないものとして識別することと、
前記エントリの前記保護制限中に前記０でない値を有することに基づいて、前記エントリを保護されているものとして識別することと、
保護されている最も有用でないエントリのインストールを防止することに基づいて、前記保護されている最も有用でないエントリの前記保護制限をデクリメントすることと、
を実施するように動作可能である、請求項１０に記載の処理システム。
【請求項１２】
前記エントリを前記合同クラス中で識別することがさらに、
無効なエントリがあるかどうか前記合同クラスをチェックすることと、
無効なエントリを前記合同クラス中で突き止めることに基づいて、前記無効なエントリを更新に向けたエントリとして識別し、前記エントリの有効性を有効に設定することと、
無効なエントリが前記合同クラス中にないと決定することに基づいて、前記合同クラスの１つまたは複数の他のエントリに対して最も有用でないレベルに設定された前記補助有用性レベルを有する前記エントリを、前記合同クラス中で識別することと、
を含む、請求項１０に記載の処理システム。
【請求項１３】
先行インストール・キューをさらに備え、前記補助インストールおよび更新コントローラがさらに、
前記補助分岐予測器への最近成功した複数のインストールのレコードを前記先行インストール・キューに記憶することと、
前記先行インストール・キュー中でマッチするレコードを突き止めることに基づいて、前記補助分岐予測器への新たなインストールを防止することと、
キュー・リフレッシュ期間の経過後に前記先行インストール・キューを無効化することと、
を実施するように動作可能である、請求項８に記載の処理システム。
【請求項１４】
前記補助インストールおよび更新コントローラがさらに、
前記主要分岐予測器の参照元エントリが無効化されたと決定することに基づいて前記補助分岐予測器中の参照先エントリを無効化することであって、前記主要分岐予測器の前記参照元エントリが前記補助分岐予測器中の前記参照先エントリに対応するものである、前記無効化することと、
前記補助分岐予測器中の前記参照先エントリを無効化することに基づいて、前記先行インストール・キュー中の前記参照先エントリのレコードを無効化するかまたは前記先行インストール・キューを完全に無効化することと、
を実施するように動作可能である、請求項１３に記載の処理システム。
【請求項１５】
プロセッサに、
主要分岐予測器の予測ミスされたターゲット・アドレスに対応する主要分岐予測器予測ミス・インジケータを受け取ることに基づいて、補助分岐予測器の合同クラスを突き止めることと、
前記合同クラスの１つまたは複数の他のエントリに対して最も有用でないレベルに設定された補助有用性レベルを有するエントリを、前記合同クラス中で識別することと、
前記予測ミスされたターゲット・アドレスに対応する補助データを前記エントリにインストールすることと、
前記補助データをインストールすることに基づいて前記エントリの前記補助有用性レベルを初期値にリセットすることと、
その後、前記補助データが前記エントリにインストールされた後で前記エントリに対して前記主要分岐予測器予測ミス・インジケータがセットされたと決定し、かつ、前記補助分岐予測器が前記補助データを使用して分岐を正しく予測したかまたは前記エントリの前記補助有用性レベルが訓練しきい値未満であるかのいずれかであると決定したときに、前記エントリの前記補助有用性レベルを増加させることと、
前記合同クラスのすべてのエントリの前記補助有用性レベルが低減しきい値よりも高いと決定することに基づいて、前記合同クラスのすべてのエントリについて等しく前記補助有用性レベルを低減することと、
前記合同クラスの２つのエントリの前記補助有用性レベルが最大値に達したと決定することに基づいて、前記合同クラスのすべてのエントリについて等しく前記補助有用性レベルを低減することと、
を行わせる、コンピュータ・プログラム。
【請求項１６】
前記プロセッサに、
前記主要分岐予測器と前記補助分岐予測器とを検索アドレスに基づいて並列に検索して分岐予測を行うことと、
前記補助分岐予測器のマッチするエントリの前記補助有用性レベルが有用性しきい値よりも高いと決定することに基づいて、前記補助分岐予測器からの、前記検索アドレスに対応する補助予測器分岐ターゲットを選択することと、
前記補助分岐予測器の前記マッチするエントリの前記補助有用性レベルが前記有用性しきい値未満であると決定することに基づいて、前記主要分岐予測器からの、前記検索アドレスに対応する主要予測器分岐ターゲットを選択することと、
を行わせる、請求項１５に記載のコンピュータ・プログラム。
【請求項１７】
前記エントリを前記合同クラス中で識別することがさらに、
前記合同クラス中の複数のエントリの各々が上書きされないよう保護されているか保護されていないかを識別する、前記エントリの各々の保護制限をチェックすることと、
前記合同クラス中の保護されていないエントリのうち、最も有用でないレベルに設定された前記補助有用性レベルを有するエントリを前記合同クラス中で識別することと、
を含む、請求項１５に記載のコンピュータ・プログラム。
【請求項１８】
前記プロセッサに、
前記補助データのインストール時に前記エントリの前記保護制限を０でない値に初期化することと、
前記エントリの前記補助有用性レベルが保護しきい値を超えると決定することに基づいて、前記エントリの前記保護制限を前記０でない値にリセットすることと、
前記エントリの前記保護制限中に０の値を有することに基づいて、前記エントリを保護されていないものとして識別することと、
前記エントリの前記保護制限中に前記０でない値を有することに基づいて、前記エントリを保護されているものとして識別することと、
保護されている最も有用でないエントリのインストールを防止することに基づいて、前記保護されている最も有用でないエントリの前記保護制限をデクリメントすることと、
を行わせる、請求項１７に記載のコンピュータ・プログラム。
【請求項１９】
前記エントリを前記合同クラス中で識別することがさらに、
無効なエントリがあるかどうか前記合同クラスをチェックすることと、
前記無効なエントリを前記合同クラス中で突き止めることに基づいて、前記無効なエントリを更新に向けたエントリとして識別し、前記エントリの有効性を有効に設定することと、
無効なエントリが前記合同クラス中にないと決定することに基づいて、前記合同クラスの１つまたは複数の他のエントリに対して最も有用でないレベルに設定された前記補助有用性レベルを有する前記エントリを、前記合同クラス中で識別することと、
を含む、請求項１７に記載のコンピュータ・プログラム。
【請求項２０】
前記プロセッサに、
前記補助分岐予測器への最近成功した複数のインストールのレコードを先行インストール・キューに記憶することと、
前記先行インストール・キュー中でマッチするレコードを突き止めることに基づいて、前記補助分岐予測器への新たなインストールを防止することと、
キュー・リフレッシュ期間の経過後に前記先行インストール・キューを無効化することと、
を行わせる、請求項１５に記載のコンピュータ・プログラム。
【請求項２１】
前記プロセッサに、
前記主要分岐予測器の参照元エントリが無効化されたと決定することに基づいて前記補助分岐予測器中の参照先エントリを無効化することであって、前記主要分岐予測器の前記参照元エントリが前記補助分岐予測器中の前記参照先エントリに対応するものである、前記無効化することと、
前記補助分岐予測器中の前記参照先エントリを無効化することに基づいて、前記先行インストール・キュー中の前記参照先エントリのレコードを無効化するかまたは前記先行インストール・キューを完全に無効化することと、
を行わせる、請求項２０に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピュータ処理システムに関し、より詳細には、処理システムにおける有用性追跡を用いた補助分岐予測に関する。
【背景技術】
【０００２】
コンピュータ・プロセッサ中の命令パイプラインは、いくつかのパイプライン段を使用して命令を処理することによって命令実行スループットを改善し、複数の段は、命令ストリームの、異なる命令に対して並列に作用することができる。命令ストリーム中の条件付き分岐命令は、パイプラインの命令フェッチ段で次の命令をフェッチする前にパイプライン中の実行段で条件付き分岐命令が解決されるまでプロセッサが待機する場合、パイプライン・ストールという結果になることがある。分岐予測器が、条件付き分岐が行われることになるか否かを推測しようと試みることができる。分岐予測器は分岐ターゲット予測を含むこともでき、分岐ターゲット予測は、命令自体をデコードし実行することによって分岐ターゲットが計算される前に、行われる条件付きまたは無条件分岐のターゲットを推測しようと試みる。分岐ターゲットは、オフセットに基づくか、またはレジスタを介した間接的参照に基づくか、あるいはその両方に基づく、計算されたアドレスとすることができる。分岐が予測ミスされた（mispredict）場合、スループット・ペナルティを被る。
【０００３】
分岐ターゲット・バッファ（ＢＴＢ）を使用して、行われると予測された分岐命令のターゲットを分岐命令のアドレスに基づいて予測することができる。分岐命令のターゲットを予測することで、分岐ターゲット・アドレスの計算のためにパイプラインの実行段に分岐命令が達するのを待機しないことによってパイプライン・ストールを防止することができる。分岐ターゲット予測を実施することによって、分岐命令と、行われると予測された分岐命令のターゲットとの間で複数のバブル／空のサイクルを有する代わりに、分岐のターゲット命令デコードを同じサイクルで、または分岐命令の後のサイクルで、実施することができる。ＢＴＢに含まれるかまたは別個に実装される場合のある他の分岐予測コンポーネントは、分岐履歴テーブルおよびパターン履歴テーブルを含む。分岐履歴テーブルは、分岐の方向（分岐と非分岐）を、分岐アドレスの関数として予測することができる。パターン履歴テーブルは、予測されるべき所与の分岐に至る遭遇される分岐のパターンの関数として、分岐の方向予測を補佐することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
補助分岐予測を管理するための方法、補助分岐予測を管理するための処理システム、およびコンピュータ・プログラムを提供する。
【課題を解決するための手段】
【０００５】
一実施形態によれば、主要分岐予測器（primary branch predictor）と補助分岐予測器（auxiliary branch predictor）とを備える処理システムにおいて補助分岐予測を管理するための方法が提供される。この方法は、主要分岐予測器の予測ミスされたターゲット・アドレスに対応する主要分岐予測器予測ミス・インジケータを受け取ることに基づいて、補助分岐予測器の合同クラス（congruence class）を突き止めることを含む。合同クラスの１つまたは複数の他のエントリに対して最も有用でないレベルに設定された補助有用性レベルを有するエントリが、合同クラス中で識別される。予測ミスされたターゲット・アドレスに対応する補助データが、エントリにインストールされる。補助データをインストールすることに基づいて、エントリの補助有用性レベルは初期値にリセットされる。
【０００６】
別の実施形態によれば、補助分岐予測を管理するための処理システムが、主要分岐予測器と、補助分岐予測器と、補助インストールおよび更新コントローラとを備える。主要分岐予測器は、複数の主要分岐予測構造を含む。補助分岐予測器は、複数の合同クラスを含み、合同クラスの各々は、複数のエントリを有する。補助インストールおよび更新コントローラは、主要分岐予測器の予測ミスされたターゲット・アドレスに対応する主要分岐予測器予測ミス・インジケータを受け取ることに基づいて、補助分岐予測器の合同クラスを突き止めるように動作する。合同クラスの１つまたは複数の他のエントリに対して最も有用でないレベルに設定された補助有用性レベルを有するエントリが、合同クラス中で識別される。予測ミスされたターゲット・アドレスに対応する補助データが、エントリにインストールされる。補助データをインストールすることに基づいて、エントリの補助有用性レベルは初期値にリセットされる。
【０００７】
さらに他の実施形態によれば、コンピュータ・プログラム製品が提供される。このコンピュータ・プログラム製品は、プログラム命令が組み入れられたコンピュータ可読記憶媒体を含む。プログラム命令は、主要分岐予測器と補助分岐予測器とを備えるプロセッサによって実行可能であり、それにより、主要分岐予測器の予測ミスされたターゲット・アドレスに対応する主要分岐予測器予測ミス・インジケータを受け取ることに基づいて補助分岐予測器の合同クラスを突き止めることを、プロセッサに行わせる。合同クラスの１つまたは複数の他のエントリに対して最も有用でないレベルに設定された補助有用性レベルを有するエントリが、合同クラス中で識別される。予測ミスされたターゲット・アドレスに対応する補助データが、エントリにインストールされる。補助データをインストールすることに基づいて、エントリの補助有用性レベルは初期値にリセットされる。
【図面の簡単な説明】
【０００８】
【図１】一実施形態による処理システムのブロック図である。
【図２】一実施形態による分岐予測器を描く図である。
【図３】一実施形態による補助分岐予測器を描く図である。
【図４】一実施形態による、処理システムにおける補助分岐予測を管理するためのプロセス・フロー図である。
【図５】一実施形態による、補助分岐予測器についての補助有用性レベル管理のプロセス・フロー図である。
【図６】一実施形態による、補助分岐予測器についての保護制限管理のプロセス・フロー図である。
【図７】一実施形態による、ターゲット・アドレス選択に関するプロセス・フロー図である。
【図８】一実施形態によるコンピューティング・システムの図である。
【発明を実施するための形態】
【０００９】
実施形態は、有用性追跡を用いた補助分岐予測を提供する。補助分岐予測器を、非常に正確な分岐予測器の比較的小さいテーブル（すなわちエントリ数の点からみて）として実装することができる。補助分岐予測器にエントリをインストールすることを管理して、どの分岐が性能を最適化するかを有用性追跡に基づいて追跡することができる。多くの作業負荷においては、分岐命令アドレスの小さいサブセットが、予測ミスされる分岐結果のうちの大きいパーセンテージを占める。実施形態は、頻繁に主要分岐予測器によって予測ミスされ補助分岐予測器によって正しく予測される分岐を動的に識別し、これらの分岐を補助分岐予測器中で保持する。残りの分岐は、より小さい他の主要分岐予測器エントリを用いて効果的に予測することができる。
【００１０】
図１は、一実施形態による処理システム１００のブロック図を描く。処理システム１００は、メモリ１０２、命令キャッシュ１０４、命令フェッチ・ユニット１０８、分岐予測器１１８、および処理パイプライン１０６を備える。処理システム１００は、コンピュータ・プロセッサ内に備わるか、またはそうでない場合はコンピュータ・システム内で分散されるものとすることができる。メモリ１０２には命令およびデータが記憶されてよく、命令キャッシュ１０４は、メモリ１０２中の命令にアクセスし、これらの命令を、フェッチされるように記憶することができる。メモリ１０２は、キャッシュ・メモリなど、任意のタイプの揮発性または不揮発性メモリを含むことができる。メモリ１０２および命令キャッシュ１０４は、複数のキャッシュ・レベルを含むことができる。データ・キャッシュ（図示せず）が処理システム１００に備わってもよい。
【００１１】
図１では、命令フェッチ・ユニット１０８および処理パイプライン１０６の単純化された例が描かれている。処理システム１００はさらに、複数の処理パイプライン１０６および命令フェッチ・ユニット１０８を備えることもできる。処理パイプライン１０６は、デコード・ユニット１１０、発行ユニット１１２、実行段１１４、およびライトバック・ロジック１１６を含む。命令フェッチ・ユニット１０８の全体または分岐予測器１１８もまた、処理パイプライン１０６の一部であってもよい。処理パイプライン１０６は、エラー・チェックおよび対処ロジックや、処理パイプライン１０６を通る１つまたは複数の並列パスや、当技術分野で知られている他の機構など、他の機構を備えることもできる。図１では、処理システム１００を通る順方向パスが描かれているが、他のフィードバック・パスおよびシグナリング・パスが処理システム１００の要素間に含まれてもよい。
【００１２】
命令フェッチ・ユニット１０８は、デコード・ユニット１１０によってさらに処理されるように、命令を命令キャッシュ１０４からフェッチする。例示的な一実施形態では、命令フェッチ・ユニット１０８は、分岐予測器１１８を備える。別法として、分岐予測器１１８は、命令フェッチ・ユニット１０８とは別個に位置してもよい。命令フェッチ・ユニット１０８はまた、他の分岐予測ロジック（図示せず）を備えることもできる。分岐予測器１１８は、有用性追跡を用いた補助分岐予測を実装するための処理回路の例である。
【００１３】
デコード・ユニット１１０は、命令をデコードし、デコードされた命令、命令の一部、または他のデコードされたデータを発行ユニット１１２に渡す。発行ユニット１１２は、命令または他のデータを分析し、分析に基づいて、デコードされた命令、命令の一部、または他のデータを実行段１１４中の１つまたは複数の実行ユニットに送信する。実行段１１４は、命令を実行する。実行段１１４は、固定小数点実行ユニット、浮動小数点実行ユニット、ロード／記憶実行ユニット、およびベクトル実行ユニットなど、複数の実行ユニットを備える場合がある。ライトバック・ロジック１１６は、命令実行の結果を宛先リソース１２０に書き戻す。宛先リソース１２０は、レジスタ、キャッシュ・メモリ、他のメモリ、他のデバイスと通信するためのＩ／Ｏ回路、他の処理回路、または、実行された命令もしくはデータのための任意の他のタイプの宛先を含めた、任意のタイプのリソースとすることができる。
【００１４】
図２は、図１の分岐予測器１１８の例をより詳細に描く。図２の例示的な分岐予測器１１８は、１つまたは複数の主要分岐予測器２０２と、補助分岐予測器２０４とを備える。主要分岐予測器２０２は、分岐ターゲット・バッファ（ＢＴＢ）２０６、分岐履歴テーブル（ＢＨＴ）２０８、および１つまたは複数のパターン履歴テーブル（ＰＨＴ）２１０など、主要分岐予測構造の任意の組合せを備えることができる。ＢＴＢ２０６は、連想型に設定されてよく、ＢＴＢエントリの複数のセット（列）を含むことができ、各ＢＴＢエントリは、例えば、分岐アドレス・タグおよび予測されるターゲット・アドレスを含む。ＢＨＴ２０８は、分岐が行われると予測されるかそれとも行われないと予測されるかを示す分岐履歴情報を保持する。ＢＨＴ２０８はまた、ＢＨＴ方向予測についての予測強度インジケータ（例えば、強い非分岐、弱い非分岐、弱い分岐、および強い分岐）を含むこともできる。ＢＨＴ２０８は、命令アドレスに基づいて索引付けされてよい。各ＰＨＴ２１０は、ＰＨＴ方向予測についての予測強度インジケータと、分岐予測パターンに関連するタグとを保持することができる。各ＰＨＴ２１０の深度（エントリ数）は、図１の処理システム１００によって処理された命令中で観察された、観察された繰り返し発生する分岐パターンまたはシーケンスに基づいて、調整されてよい。各ＰＨＴ２１０へは、別個に管理および調整される索引に基づいてアクセスすることができる。各ＰＨＴ２１０の索引付けは、命令アドレスのパス履歴および機能、大域的な方向履歴ベクトル、または大域的な辿られたパス履歴ベクトル、あるいはその組合せに基づくことができる。
【００１５】
図２の分岐予測器１１８はまた、主要分岐予測器２０２中のエントリのインストールおよび更新を制御する、主要インストールおよび更新コントローラ２１２を備える。主要分岐予測器２０２に対して、主要インストールおよび更新コントローラ２１２の単一のインスタンスが描かれているが、主要インストールおよび更新コントローラ２１２は、１つまたは複数の特定の分岐予測器タイプをサポートするために、すなわちＢＴＢ２０６、ＢＨＴ２０８、および１つまたは複数のＰＨＴ２１０を別々に管理するために、細分されてもよいことが理解されるであろう。分岐予測器１１８はさらに、主要検索およびヒット・コントローラ２１４を備え、この主要検索およびヒット・コントローラ２１４は、例えば検索アドレス２１８または対応する索引付け方式あるいはその両方に基づいて、主要分岐予測器２０２の主要分岐予測構造を並列に検索して主要予測器ターゲット・アドレス２１６を決定することができる。
【００１６】
同様に、分岐予測器１１８は、補助分岐予測器２０４中のエントリをインストールおよび更新するように動作可能な、補助インストールおよび更新コントローラ２２０を備えることができる。補助インストールおよび更新コントローラ２２０は、先行インストール・キュー（previous install queue）２２２を使用して、インストールを管理し、補助分岐予測器２０４中のエントリの重複を回避することができる。補助検索およびヒット・コントローラ２２４が、例えば主要検索およびヒット・コントローラ２１４を介して提供された検索アドレス２１８または対応する索引付け方式あるいはその両方に基づいて、補助分岐予測器２０４を検索して補助予測器ターゲット・アドレス２２６を決定することができる。主要分岐予測器２０２と補助分岐予測器２０４とは、並列に検索されてよく、この結果、主要予測器ターゲット・アドレス２１６および補助予測器ターゲット・アドレス２２６として、相互と異なる場合のある予測が得られる。補助分岐予測器２０４は、各エントリと共に、補助有用性レベル２２８を記憶することができる。補助検索およびヒット・コントローラ２２４が補助分岐予測器２０４中でヒットを突き止めると、補助予測器ターゲット・アドレス２２６に対応する補助有用性レベル２２８が提供される。ターゲット・アドレス・セレクタ２３０が、補助有用性レベル２２８を使用して、分岐予測器１１８の結果であるターゲット・アドレス２３２として主要予測器ターゲット・アドレス２１６を選択するかそれとも補助予測器ターゲット・アドレス２２６を選択するかを決定することができる。
【００１７】
ターゲット・アドレス２３２は、命令をプリフェッチするために図１の命令フェッチ・ユニット１０８によって使用することができる。後で、図１の処理パイプライン１０６中で、ターゲット・アドレス２３２がアドレス予測ミスまたは方向予測ミス（分岐／非分岐）あるいはその両方として予測ミスされたと決定された場合、分岐予測器１１８は、予測ミスされた分岐２３４のインジケータを受け取る。分岐予測器１１８は、分岐の方向を予測することができ、分岐すると予測された場合は、分岐が進むターゲット・アドレス２３２を予測することができる。分岐しないと予測された場合は、次の順次的な命令アドレスが、フェッチして実行すべき次の命令であり、この命令アドレスもまた本明細書においてターゲット・アドレスと呼ばれることがある。ターゲット・アドレス・セレクタ２３０、または分岐予測器１１８の他のロジックは、予測ミスされた分岐２３４が主要分岐予測器２０２によって予測されたかそれとも補助分岐予測器２０４によって予測されたかを決定することができる。誤った方向予測は、結果的に誤ったターゲット・アドレス予測となるので、実施形態では、予測ミスされたターゲット・アドレスに対応する予測ミス・インジケータは、ターゲット・アドレス予測ミスまたは方向予測ミスあるいはその両方を示す。補助分岐予測器２０４の実施形態は、方向予測またはターゲット・アドレス予測あるいはその両方に使用されることが可能である。
【００１８】
主要分岐予測器予測ミス・インジケータ２３６が、主要インストールおよび更新コントローラ２１２と補助インストールおよび更新コントローラ２２０との両方に提供されてよい。主要分岐予測器予測ミス・インジケータ２３６は、主要分岐予測器２０２の内容を更新するために、主要インストールおよび更新コントローラ２１２によって使用されてよい。補助分岐予測器予測ミス・インジケータ２３８が、補助インストールおよび更新コントローラ２２０に提供されてよい。本明細書でさらに後述されるように、主要分岐予測器予測ミス・インジケータ２３６と補助分岐予測器予測ミス・インジケータ２３８との両方を使用して、補助分岐予測器２０４の内容が更新されてよい。さらに、ＢＴＢ２０６中のＢＴＢエントリの無効化など、主要分岐予測器２０２の内容の変更が、主要インストールおよび更新コントローラ２１２から補助インストールおよび更新コントローラ２２０に伝達されてよく、それにより、例えば、補助分岐予測器２０４中の参照先エントリ、または先行インストール・キュー２２２の一部（例えばレコード）もしくはすべてが無効化されてよい。
【００１９】
主要インストールおよび更新コントローラ２１２は、主要分岐予測器予測ミス・インジケータ２３６を使用して、主要分岐予測器２０２に対するインストールおよび更新をトリガすることができるが、主要分岐予測器２０２は、パス履歴や、分岐／非分岐インジケータなど、他のイベントに基づいて、インストールされるかまたは更新されるかあるいはその両方が行われてもよい。主要インストールおよび更新コントローラ２１２はまた、例えば、前に記憶されたチェックポイントへの復元の一部として、テストとして、または他の目的で、主要分岐予測器２０２のうちの１つまたは複数のプリロードをサポートすることもできる。同様に、補助インストールおよび更新コントローラ２２０は、主要分岐予測器予測ミス・インジケータ２３６および補助分岐予測器予測ミス・インジケータ２３８を使用して、パス履歴や、分岐／非分岐インジケータなど、他のイベントに基づいて、補助分岐予測器２０４に対するインストールおよび更新をトリガすることができる。補助インストールおよび更新コントローラ２２０はまた、例えば、前に記憶されたチェックポイントへの復元の一部として、テストとして、または他の目的で、補助分岐予測器２０４のプリロードをサポートすることもできる。
【００２０】
補助分岐予測器２０４は、命令アドレス（例えば検索アドレス２１８）または大域的分岐／パス履歴（例えば各ＰＨＴ２１０を索引付けするのに使用されるような）あるいはその両方によって索引付けされた、連想型に設定されたタグ付きテーブルとして構造化されてよい。図３に、補助分岐予測器２０４の例示的な構造が、より詳細に描かれる。補助分岐予測器２０４は、複数の合同クラス３０２を含むことができる。補助インストールおよび更新コントローラ２２０、または補助検索およびヒット・コントローラ２２４、あるいはその両方は、合同クラス３０２のうちの特定の合同クラス３０４を突き止める（すなわち検索アドレス・ビットのサブセットを合同クラス３０４の索引付けされた位置とマッチさせることに基づいて）ように、索引付けすることができる。合同クラス３０４を含めた各合同クラス３０２は、複数のエントリ３０６Ａ〜Ｄを有する。図３の例では、合同クラス３０４は、エントリ３０６Ａ、３０６Ｂ、３０６Ｃ、および３０６Ｄを含む。各エントリ３０６は、補助タグ３０８および補助データ３１０を含むことができる。補助タグ３０８は、合同クラス３０４の位置との組合せで、索引付けされた／アドレス指定された特定の位置にマッピングすることになるビットの一部を含む。
【００２１】
一例として、図１の命令フェッチ・ユニット１０８によってフェッチされた命令のアドレスが、図２の検索アドレス２１８の初期値として使用されて、分岐予測器１１８がアクセスされ、分岐ターゲット・アドレスが予測される。補助分岐予測を探るときは、補助分岐予測器２０４が読み取られ、検索アドレス２１８の一部とマッチする補助タグ３０８を有するエントリ３０６を補助分岐予測器２０４が含む場合は、補助分岐予測器２０４は補助予測器ターゲット・アドレス２２６を提供することができる。補助分岐予測器２０４は、補助検索およびヒット・コントローラ２２４に入力を提供して、マッチまたは「ヒット」が突き止められるかどうかを決定する。マッチが見つかった場合は、補助検索およびヒット・コントローラ２２４は、補助予測器ターゲット・アドレス２２６を、同じエントリ３０６からの補助有用性レベル２２８の関連する値と共に出力する。補助分岐予測器２０４に記憶されている補助予測器ターゲット・アドレス２２６は、アドレス・ビットのサブセットのみを含むものとすることができ、このサブセットは、補助検索およびヒット・コントローラ２２４またはターゲット・アドレス・セレクタ２３０あるいはその両方によって、追加のアドレス・ビットを含むように拡張されてよい。
【００２２】
各補助予測器エントリ３０６はまた、パーセプトロン（すなわち機械学習）予測器、局所的履歴テーブル、または複雑な状態機械など、１つまたは複数の非常に正確な分岐予測器を、補助予測器状態データ３１２中に含むことができる。複雑な予測アルゴリズムをサポートするには、１エントリ３０６当たり大量のデータが必要であろう。したがって、補助分岐予測器２０４は通常、ＢＴＢ２０６中のエントリの数と比較してずっと少ない総エントリを含み、これらのエントリは、当技術分野で知られている単純な分岐アドレス・タグおよびターゲット・フォーマットを使用することができる。図３の例では、各エントリ３０６中の補助データ３１０は、保護制限３１４を含み、また有効性３１６を含むこともできる。
【００２３】
一実施形態では、補助インストールおよび更新コントローラ２２０は、主要分岐予測器２０２による予測ミスがあったとき、エントリ３０６を補助分岐予測器２０４にインストールしようと試みる。合同クラス３０４内で、補助インストールおよび更新コントローラ２２０は、置換ポリシーに従って置換すべき既存エントリ３０６が合同クラス３０４中にあればどのエントリ３０６を置換するかを決定する。合同クラス３０４中のすべての既存エントリ３０６Ａ〜Ｄを置換から保護する方が性能にとってよりよい可能性が高いと置換ポリシーによって決定した場合は、試みられたインストールは成功しないことがある。
【００２４】
一実施形態では、インストールしようとするとき、補助インストールおよび更新コントローラ２２０の置換ポリシーは、有効性３１６によって示されるように無効なエントリが合同クラス３０４中にある場合は、無効なエントリを置換することになる。ない場合は、補助インストールおよび更新コントローラ２２０は、最も有用でないエントリ（すなわち、合同クラス３０４のエントリ３０６Ａ〜Ｄのうちで最低の補助有用性レベル２２８を有するもの）が保護されていない（例えば、０の保護制限３１４を有する）場合に、この最も有用でないエントリを置換する。エントリ３０６のインストール時、補助有用性レベル２２８は、低い初期値に（例えば１に）設定されてよい。エントリ３０６の補助有用性レベル２２８は、主要分岐予測器２０２が誤っていた（例えば、主要分岐予測器予測ミス・インジケータ２３６がセットされる）とき、および補助分岐予測器２０４からの予測が正しかった（例えば、補助分岐予測器予測ミス・インジケータ２３８がクリアである）かまたは補助分岐予測器２０４のエントリ３０６が十分に訓練されていない（例えば、補助有用性レベル２２８が訓練しきい値未満である）かのいずれかのときは、常に増加してよい。補助有用性レベル２２８がインクリメントされて、同じ合同クラス３０４中のすべてのエントリ３０６Ａ〜Ｄが低減しきい値よりも高い補助有用性レベルを有するようになると、合同クラス３０４中のすべてのエントリ３０６Ａ〜Ｄの補助有用性レベル２２８が低減されるものとすることができる（例えば、合同クラス３０４中のエントリ３０６Ａ〜Ｄ中で補助有用性レベル２２８を２で割る）。これにより、合同クラス３０４中の補助有用性レベル２２８がエントリ３０６Ａ〜３０６Ｄの相対的な有用性を正確に表し、すべてが最大値で飽和しないことが保証される。同様に、合同クラス３０４中の２つのエントリ３０６が最大値に達したときに合同クラス３０４中のエントリ３０６Ａ〜Ｄ中の補助有用性レベル２２８を２で割ることを使用して、エントリ３０６Ａ〜３０６Ｄの相対的な有用性を維持することもできる。
【００２５】
保護制限３１４を使用して、新たにインストールされたエントリ３０６が、補助予測器状態データ３１２に関連する予測器が訓練されて補助有用性レベル２２８が決定される前に置換されるのを防ぐことができる。保護制限３１４はまた、有用であることが最近わかったエントリ３０６が置換されるのも防ぐ。保護制限３１４は、補助分岐予測器２０４のエントリ３０６へのインストール時に、０でない値に初期化されてよい。補助有用性レベル２２８を保護しきい値よりも高くインクリメントすると、保護制限３１４は、０でない値に再初期化されてよい。この２つの場合の初期化値は、０でない同じ値である必要は必ずしもない。新しいエントリを補助分岐予測器２０４にインストールしようとするとき、最も有用でないエントリ（例えば、最低の補助有用性レベル２２８を有するエントリ３０６Ａ〜３０６Ｄ）が０の保護制限３１４を有する場合は、インストールは継続することが許される。最も有用でないエントリの保護制限３１４が０でない場合は、保護制限３１４が低減され、新しいインストールは防止される。
【００２６】
補助有用性レベル２２８が置換ポリシーに影響を及ぼすことに加えて、補助有用性レベル２２８はまた、補助分岐予測器２０４からの予測が使用されるか否かにも影響を及ぼすことができる。例えば、５ビットの補助有用性レベル２２８を用いる場合、値が０と７の間であれば、補助予測器ターゲット・アドレス２２６は使用されないものとすることができるが、補助状態データ３１２に関連する予測器は訓練されることが可能である。補助有用性レベル２２８の値が８と３１の間であれば、主要予測器ターゲット・アドレス２１６が選択されるのではなく、補助予測器ターゲット・アドレス２２６がターゲット・アドレス２３２としてターゲット・アドレス・セレクタ２３０によって使用に向けて選択されるものとすることができる。この例を続けるが、合同クラス３０４中のすべてのエントリ３０６Ａ〜Ｄが、１６〜３１の範囲の補助有用性レベル２２８を有する（または有することになる）と、値はすべて半分に低減されるものとすることができる（例えば、シフト演算を使用して２で割る）。合同クラス３０４中の２つのエントリが、３１の補助有用性レベル２２８値を有する（または有することになる）と、合同クラス３０４中のすべてのエントリ３０６Ａ〜Ｄ中の補助有用性レベル２２８は半分に低減されるものとすることができる（例えば、シフト演算を使用して２で割る）。
【００２７】
補助分岐予測器２０４についての更新ポリシーは、補助予測器の選択に依存する。例えば、パーセプトロン予測器の場合、ポリシーは、補助有用性レベル２２８中の値が低いせいで補助データ３１０が予測の実施に使用されなかった場合であっても、補助分岐予測器２０４とのマッチが発生したときは常にエントリ３０６を更新すること、とすることができる。パーセプトロン予測器では、パーセプトロンの予測が分岐結果とマッチしなかった場合、またはパーセプトロン予測が分岐結果とマッチしたが予測の大きさ（すなわち予測強度）が信頼度しきい値未満であった場合は、更新が行われることが可能である。
【００２８】
図４は、一実施形態による、処理システムにおける補助分岐予測を管理するための高レベルのプロセス・フロー図を描く。図４のプロセス４００は、図２の補助インストールおよび更新コントローラ２２０、または図１および２の分岐予測器１１８の他の要素、あるいはその両方によって実施できる方法である。説明しやすくするために、プロセス４００は、図１および２の処理システム１００の分岐予測器１１８に関して、またさらに図３に関して述べる。
【００２９】
ブロック４０２で、補助インストールおよび更新コントローラ２２０は、主要分岐予測器２０２の予測ミスされたターゲット・アドレスに対応する主要分岐予測器予測ミス・インジケータ２３６を受け取ることに基づいて、補助分岐予測器２０４の合同クラス３０４を突き止める。ターゲット・アドレス・セレクタ２３０は、予測ミスされた分岐２３４が主要分岐予測器２０２から生じたかそれとも補助分岐予測器２０４から生じたかを識別する助けとするために、ターゲット・アドレス２３２として主要予測器ターゲット・アドレス２１６が選択されたかそれとも補助予測器ターゲット・アドレス２２６が選択されたかを追跡することができる。例えば、主要予測器ターゲット・アドレス２１６がターゲット・アドレス２３２として使用された場合に、実際のアドレスの解決時に処理パイプライン１０６が予測ミスの発生を決定したときは、処理パイプライン１０６は、予測ミスされた分岐２３４の指標を生成することができる。主要予測器ターゲット・アドレス２１６に関連する予測ミスされた分岐２３４の指標が受け取られると、ターゲット・アドレス・セレクタ２３０は、主要分岐予測器予測ミス・インジケータ２３６をセットすることができる。主要分岐予測器予測ミス・インジケータ２３６または他の信号あるいはその両方を使用して、主要分岐予測器２０２が分岐予測の実施において正しかったことまたは正しくなかったことを示すことができる。同様に、補助分岐予測器予測ミス・インジケータ２３８または他の信号あるいはその両方を使用して、補助分岐予測器２０４が分岐予測の実施において正しかったことまたは正しくなかったことを示すことができる。
【００３０】
ブロック４０４で、補助インストールおよび更新コントローラ２２０は、合同クラス３０４の１つまたは複数の他のエントリ３０６に対して最も有用でないレベルに設定された補助有用性レベル２２８を有するエントリ３０６を、合同クラス３０４中で識別する。例えば、合同クラス３０４中でエントリ３０６Ｂが０の補助有用性レベル２２８を有し、合同クラス３０４中のエントリ３０６Ａ、３０６Ｃ、および３０６Ｄが０よりも大きい補助有用性レベル２２８を有していた場合は、エントリ３０６Ｂが、最も有用でないレベルに設定されているものとして識別されることになる。
【００３１】
補助インストールおよび更新コントローラ２２０はまた、エントリ３０６を選択するために、合同クラス３０４のエントリ３０６Ａ〜Ｄの保護制限３１４または有効性３１６あるいはその両方を調べることができる。補助インストールおよび更新コントローラ２２０は、合同クラス３０４中の各エントリ３０６Ａ〜Ｄの保護制限３１４をチェックすることができるが、この保護制限３１４は、各エントリ３０６Ａ〜Ｄが上書きされないよう保護されているか保護されていないかを識別する。補助インストールおよび更新コントローラ２２０は、合同クラス３０４中の保護されていないエントリ３０６Ａ〜Ｄのうち、最も有用でないレベルに設定された補助有用性レベル２２８を有するエントリ３０６を、合同クラス３０４中で識別することができる。有効性３１６が含まれるときは、補助インストールおよび更新コントローラ２２０は、無効なエントリがあるかどうか合同クラス３０４をチェックすることができ、無効なエントリを合同クラス３０４中で突き止めることに基づいて、この無効なエントリが、更新に向けたエントリ３０６として選択される。無効なエントリが合同クラス３０４中に存在しないと決定されることに基づいて、合同クラス３０４中の、最も有用でないレベルに設定された補助有用性レベル２２８を有するエントリ３０６が選択される。
【００３２】
ブロック４０６で、補助インストールおよび更新コントローラ２２０は、予測ミスされたターゲット・アドレスに対応する補助データ３１０をエントリ３０６にインストールする。例えば、予測ミスされたターゲット・アドレスの一部が、エントリ３０６における補助予測器ターゲット・アドレス２２６に書き込まれてよく、合同クラス３０４は、予測ミスされた分岐２３４のアドレスによって索引付けされてよい。補助分岐予測器２０４中での重複を避けるために、補助分岐予測器２０４への最近成功した複数のインストールのレコードが、先行インストール・キュー２２２に記憶されてよい。先行インストール・キュー２２２中でマッチするレコードを突き止めることに基づいて、補助分岐予測器２０４への新たなインストールが防止されるものとすることができる。先行インストール・キュー２２２は、キュー・リフレッシュ期間の経過後に無効化されてよい。
【００３３】
ブロック４０８で、補助インストールおよび更新コントローラ２２０は、補助データ３１０をインストールすることに基づいて、エントリ３０６の補助有用性レベル２２８を初期値にリセットする。一例として、さらに反復が行われることでエントリ３０６の補助有用性レベル２２８が確認されインクリメントされるまで、補助有用性レベル２２８は、低い有用性を示すために値０または１に設定されてよい。インストール時、エントリ３０６の有効性３１６が有効に設定されてよい。
【００３４】
補助分岐予測器２０４が、ＢＴＢ２０６など主要分岐予測器２０２のうちの１つのサブセットとして構成される実施形態では、補助タグ３０８はＢＴＢタグにリンクされてよい。例えば、ＢＴＢ２０６中の合同クラス内の列が、補助分岐予測器２０４中の補助タグ３０８として記憶されてよい。ＢＴＢ２０６中でＢＴＢエントリが上書きされたとき、主要インストールおよび更新コントローラ２１２は、「オーファン（ｏｒｐｈａｎ）」補助エントリを避けるために、このＢＴＢエントリを参照するエントリ３０６を無効化するよう補助インストールおよび更新コントローラ２２０をトリガすることができる。これは「オーファン無効化」と呼ばれる。オーファン無効化時、補助インストールおよび更新コントローラ２２０はまた、先行インストール・キュー２２２の、影響を受けるレコード、または先行インストール・キュー２２２全体も無効化することができる。したがって、補助インストールおよび更新コントローラ２２０は、主要分岐予測器２０２の参照元エントリが無効化されたと決定することに基づいて、補助分岐予測器２０４中の参照先エントリを無効化することができ、ここで、主要分岐予測器２０２中の参照元エントリは、補助分岐予測器２０４中の参照先エントリに対応する。補助分岐予測器２０４中の参照先エントリを無効化することに基づいて、先行インストール・キュー２２２中の参照先エントリのレコードを無効化すること、または先行インストール・キュー２２２を完全に無効化することが実施されてよい。
【００３５】
図５は、図２の補助分岐予測器２０４についての補助有用性レベル管理のプロセス・フロー図である。図５のプロセス５００は、図２の補助インストールおよび更新コントローラ２２０、または図１および２の分岐予測器１１８の他の要素、あるいはその両方によって実施できる方法である。説明しやすくするために、プロセス５００は、図１および２の処理システム１００の分岐予測器１１８に関して、またさらに図３に関して述べる。
【００３６】
ブロック５０２で、その後、補助データ３１０がエントリ３０６にインストールされた後でエントリ３０６に対して主要分岐予測器予測ミス・インジケータ２３６がセットされたと決定したとき、および補助分岐予測器２０４が補助データ３１０を使用して分岐を正しく予測したかまたはエントリ３０６の補助有用性レベル２２８が訓練しきい値未満であるかのいずれかであると決定したとき、補助インストールおよび更新コントローラ２２０は、合同クラス３０４中のエントリ３０６の補助有用性レベル２２８を増加させることができる。主要分岐予測器２０２のうちの１つによる予測ミス、および補助分岐予測器２０４による正しい予測は、特定の予測について補助分岐予測器２０４が主要分岐予測器２０２よりも有用である可能性が高いことを示す。訓練しきい値は、現在の予測が正しくなかった場合でも補助分岐予測器２０４が学習を継続するために、さらに反復が行われることを可能にする。
【００３７】
ブロック５０４で、補助インストールおよび更新コントローラ２２０は、合同クラス３０４のすべてのエントリ３０６Ａ〜Ｄの補助有用性レベル２２８が低減しきい値よりも高いと決定することに基づいて、合同クラス３０４のすべてのエントリ３０６Ａ〜Ｄについて等しく補助有用性レベル２２８を低減する。
【００３８】
ブロック５０６で、補助インストールおよび更新コントローラ２２０は、合同クラス３０４の２つのエントリ３０６の補助有用性レベル２２８が最大値に達したと決定することに基づいて、合同クラス３０４のすべてのエントリ３０６Ａ〜Ｄについて等しく補助有用性レベル２２８を低減する。
【００３９】
図６は、図２の補助分岐予測器２０４についての保護制限管理のプロセス・フロー図である。図６のプロセス６００は、図２の補助インストールおよび更新コントローラ２２０、または図１および２の分岐予測器１１８の他の要素、あるいはその両方によって実施できる方法である。説明しやすくするために、プロセス６００は、図１および２の処理システム１００の分岐予測器１１８に関して、またさらに図３に関して述べる。
【００４０】
ブロック６０２で、補助インストールおよび更新コントローラ２２０は、補助データ３１０のインストール時に、エントリ３０６の保護制限３１４を０でない値に初期化する。
【００４１】
ブロック６０４で、補助インストールおよび更新コントローラ２２０は、エントリ３０６の補助有用性レベル２２８が保護しきい値を超えると決定することに基づいて、エントリ３０６の保護制限３１４を０でない値にリセットする。
【００４２】
ブロック６０６で、補助インストールおよび更新コントローラ２２０は、エントリ３０６の保護制限３１４中に０の値を有することに基づいて、エントリ３０６を保護されていないものとして識別する。
【００４３】
ブロック６０８で、補助インストールおよび更新コントローラ２２０は、エントリ３０６の保護制限３１４中に０でない値を有することに基づいて、エントリ３０６を保護されているものとして識別する。
【００４４】
ブロック６１０で、補助インストールおよび更新コントローラ２２０は、保護されている最も有用でないエントリのインストールを防止することに基づいて、保護されている最も有用でないエントリの保護制限３１４をデクリメントする。
【００４５】
図７は、ターゲット・アドレス選択に関するプロセス・フロー図である。図７のプロセス７００は、図１および２の分岐予測器１１８によって実施できる方法である。説明しやすくするために、プロセス７００は、図１および２の処理システム１００の分岐予測器１１８に関して、またさらに図３に関して述べる。
【００４６】
ブロック７０２で、主要分岐予測器２０２と補助分岐予測器２０４とが検索アドレス２１８に基づいて並列に検索されて、分岐予測が行われる。主要検索およびヒット・コントローラ２１４が、主要分岐予測器２０２の主要分岐予測構造を検索することができ、補助検索およびヒット・コントローラ２２４が、補助分岐予測器２０４を検索する。得られた主要予測器ターゲット・アドレス２１６の値が、主要検索およびヒット・コントローラ２１４からターゲット・アドレス・セレクタ２３０に提供される。得られた補助予測器ターゲット・アドレス２２６および補助有用性レベル２２８の値が、ターゲット・アドレス・セレクタ２３０に提供されるものとすることができる。
【００４７】
ブロック７０４で、ターゲット・アドレス・セレクタ２３０は、補助分岐予測器２０４のマッチするエントリ３０６の補助有用性レベル２２８が有用性しきい値よりも高いと決定することに基づいて、補助分岐予測器２０４からの、検索アドレス２１８に対応する補助予測器分岐ターゲット２２６を選択する。
【００４８】
ブロック７０６で、ターゲット・アドレス・セレクタ２３０は、補助分岐予測器２０４のマッチするエントリ３０６の補助有用性レベル２２８が有用性しきい値未満であると決定することに基づいて、主要分岐予測器２０２からの、検索アドレス２１８に対応する主要予測器分岐ターゲット２１６を選択する。
【００４９】
図８は、プロセッサ８０５における有用性追跡を用いた補助分岐予測のためのシステム８００のブロック図を描く。本明細書に記載の方法は、ハードウェア、ソフトウェア（例えばファームウェア）、またはこれらの組合せにおいて実装されることが可能である。例示的な一実施形態では、本明細書に記載の方法は、パーソナル・コンピュータ、ワークステーション、ミニコンピュータ、またはメインフレーム・コンピュータなどのコンピュータのマイクロプロセッサの一部としてのハードウェアにおいて実装される。したがって、システム８００は、図８に示されるようなコンピュータ８０１を備える。
【００５０】
例示的な一実施形態では、図８に示されるようなハードウェア・アーキテクチャに関して、コンピュータ８０１は、図１の処理パイプライン１０６と分岐予測器１１８とを含む処理回路であるプロセッサ８０５を備える。コンピュータ８０１はさらに、メモリ・コントローラ８１５に結合されたメモリ８１０と、ローカル入出力コントローラ８３５を介して通信可能に結合された１つまたは複数の入力または出力あるいはその両方の（Ｉ／Ｏ）デバイス８４０、８４５（または周辺装置）とを備える。入出力コントローラ８３５は、例えば、次のものに限定されないが、当技術分野で知られているような１つまたは複数のバスまたは他の有線もしくはワイヤレス接続とすることができる。入出力コントローラ８３５は、コントローラ、バッファ（キャッシュ）、ドライバ、リピータ、および受信機など、通信を可能にするための追加の要素を有する場合もあるが、簡単にするためにこれらは省略されている。さらに、ローカル・インタフェースは、前述のコンポーネント間での適切な通信を可能にするために、アドレス接続、制御接続、またはデータ接続、あるいはその組合せを含む場合もある。
【００５１】
プロセッサ８０５は、ソフトウェア、特にキャッシュ・ストレージなどのストレージ８２０またはメモリ８１０に記憶されたソフトウェアを実行するための、ハードウェア・デバイスである。プロセッサ８０５は、任意のカスタムメイドもしくは市販のプロセッサ、中央処理装置（ＣＰＵ）、コンピュータ８０１に関連するいくつかのプロセッサのうちの補助プロセッサ、半導体ベースのマイクロプロセッサ（マイクロチップもしくはチップ・セットの形の）、マクロプロセッサ、または一般に、命令を実行するための任意のデバイスとすることができる。
【００５２】
メモリ８１０は、揮発性メモリ要素（例えば、ランダム・アクセス・メモリ（ＤＲＡＭ、ＳＲＡＭ、ＳＤＲＡＭなどのＲＡＭ）および不揮発性メモリ要素（例えば、ＲＯＭ、消去可能プログラム可能な読取専用メモリ（ＥＰＲＯＭ）、電気的に消去可能プログラム可能な読取専用メモリ（ＥＥＰＲＯＭ）、プログラム可能な読取専用メモリ（ＰＲＯＭ）、テープ、コンパクト・ディスク読取専用メモリ（ＣＤ−ＲＯＭ）、ディスク、ディスケット、カートリッジ、カセット、またはその他など）のうちの、任意の１つまたは組合せを含むことができる。さらに、メモリ８１０は、電子的な、磁気的な、光学的な、または他の、あるいはその組合せのタイプの記憶媒体を組み込む場合もある。メモリ８１０は分散アーキテクチャを有することができ、その場合、様々なコンポーネントは、相互からリモートに位置するが、プロセッサ８０５によってアクセスできることに留意されたい。
【００５３】
メモリ８１０中の命令は、１つまたは複数の別々のプログラムを含む場合があり、各プログラムは、論理機能を実装するための実行可能命令の順序付きリストを含む。図８の例では、メモリ８１０中の命令は、適切なオペレーティング・システム（ＯＳ）８１１を含む。オペレーティング・システム８１１は本質的に、他のコンピュータ・プログラムの実行を制御し、スケジューリング、入出力制御、ファイルおよびデータ管理、メモリ管理、ならびに、通信制御および関係するサービスを提供する。
【００５４】
例示的な一実施形態では、従来型のキーボード８５０およびマウス８５５を入出力コントローラ８３５に結合することができる。Ｉ／Ｏデバイス８４０、８４５など、他の入力デバイスおよび出力デバイスは、例えば、次のものに限定されないが、プリンタ、スキャナ、マイクロフォンなどを含む場合がある。最後に、Ｉ／Ｏデバイス８４０、８４５はさらに、入力と出力の両方を伝達するデバイス、例えば、次のものに限定されないが、ネットワーク・インタフェース・カード（ＮＩＣ）または変調器／復調器（他のファイル、デバイス、システム、もしくはネットワークにアクセスするための）、無線周波数（ＲＦ）または他の送受信機、電話インタフェース、ブリッジ、ルータなどを含む場合もある。システム８００はさらに、ディスプレイ８３０に結合されたディスプレイ・コントローラ８２５を備えることができる。例示的な一実施形態では、システム８００はさらに、ネットワーク８６５に結合するためのネットワーク・インタフェース８６０を備えることができる。ネットワーク８６５は、ブロードバンド接続を介してコンピュータ８０１と任意の外部サーバやクライアントなどとの間で通信するための、ＩＰベースのネットワークとすることができる。ネットワーク８６５は、コンピュータ８０１と外部システムとの間でデータを送受信する。例示的な一実施形態では、ネットワーク８６５は、サービス・プロバイダによって監督されるマネージドＩＰネットワークとすることができる。ネットワーク８６５は、例えば、ＷｉＦｉやＷｉＭａｘなどのワイヤレス・プロトコルおよび技術を使用して、ワイヤレス方式で実装されてよい。ネットワーク８６５はまた、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、メトロポリタン・エリア・ネットワーク、インターネット・ネットワーク、または他の類似のタイプのネットワーク環境など、パケット交換ネットワークとすることもできる。ネットワーク８６５は、固定ワイヤレス・ネットワーク、ワイヤレス・ローカル・エリア・ネットワーク（ＬＡＮ）、ワイヤレス・ワイド・エリア・ネットワーク（ＷＡＮ）、パーソナル・エリア・ネットワーク（ＰＡＮ）、バーチャル・プライベート・ネットワーク（ＶＰＮ）、イントラネット、または他の適切なネットワーク・システムとすることができ、信号を送受信するための機器を備える。
【００５５】
コンピュータ８０１がＰＣ、ワークステーション、インテリジェント・デバイスなどである場合、メモリ８１０中の命令はさらに、ＢＩＯＳ（ｂａｓｉｃ  ｉｎｐｕｔ  ｏｕｔｐｕｔ  ｓｙｓｔｅｍ）を含むことができる（簡単にするために省略されている）。ＢＩＯＳは、起動時にハードウェアを初期化およびテストし、ＯＳ８１１を立ち上げ、ハードウェア・デバイス間のデータの転送をサポートする、本質的なソフトウェア・ルーチンのセットである。コンピュータ８０１がアクティブ化されたときにＢＩＯＳを実行できるように、ＢＩＯＳはＲＯＭに記憶される。
【００５６】
コンピュータ８０１が動作中のとき、プロセッサ８０５は、メモリ８１０内に記憶された命令をフェッチして実行すること、メモリ８１０との間でデータを伝達すること、および命令に従ってコンピュータ８０１の動作を全体的に制御することを行うように構成される。
【００５７】
例示的な一実施形態では、図２の分岐予測器１１８がハードウェアにおいて実装される場合、図４〜７のプロセス４００〜７００など本明細書に記載の方法は、当技術分野でそれぞれよく知られている次の技術のいずれかまたは組合せを用いて実装されることが可能である。すなわち、データ信号に対してロジック機能を実装するためのロジック・ゲートを有するディスクリート・ロジック回路、適切な組合せロジック・ゲートを有する特定用途向け集積回路（ＡＳＩＣ）、プログラマブル・ゲート・アレイ（ＰＧＡ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）などである。
【００５８】
技術的効果および利点は、補助分岐予測器の複雑さの増した予測からの利益を最も得る小さい分岐サブセットに対して補助分岐予測器中で分岐予測器エントリを割り振ることによって、向上した分岐予測精度を効率的な方式で達成することを含む。有用性追跡が、主要分岐予測器結果と補助分岐予測器結果との間での効率的な選択を可能にする。保護制限が、機械学習アルゴリズムを使用する補助分岐予測器のための訓練期間を可能にする。
【００５９】
図中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、装置、方法、およびコンピュータ・プログラム製品の可能な実装形態の、アーキテクチャ、機能、および動作を示すことに留意されたい。これに関して、フローチャートまたはブロック図中の各ブロックは、モジュール、セグメント、またはコードの一部を表す場合があり、これは、指定される論理機能を実装するための少なくとも１つの実行可能命令を含む。また、いくつかの代替実装形態では、ブロック中で示される機能は、図中で示される順序とは異なる順序で生じる場合があることにも留意されたい。例えば、関係する機能に応じて、連続して示される２つのブロックが実際にはほぼ同時に実行される場合もあり、またはこれらのブロックが逆の順序で実行されることもある。また、ブロック図またはフローチャート説明あるいはその両方の各ブロック、および、ブロック図またはフローチャート説明あるいはその両方の中のブロックの組合せは、指定される機能もしくは行為を実施する専用ハードウェアベースのシステムによって、または、専用ハードウェアとコンピュータ命令との組合せによって、実装できることにも気付くであろう。
【００６０】
本発明は、システム、方法、またはコンピュータ・プログラム製品、あるいはその組合せとすることができる。コンピュータ・プログラム製品は、本発明の態様をプロセッサに遂行させるためのコンピュータ可読プログラム命令を有するコンピュータ可読記憶媒体（１つまたは複数）を含むことができる。
【００６１】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用される命令を保持および記憶できる有形デバイスとすることができる。コンピュータ可読記憶媒体は、例えば、次のものに限定されないが、電子記憶デバイス、磁気記憶デバイス、光学記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、またはこれらの任意の適切な組合せとすることができる。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）、消去可能プログラム可能な読取専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク読取専用メモリ（ＣＤ−ＲＯＭ）、ディジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピー（Ｒ）・ディスク、機械的にエンコードされるデバイス（命令が記録される、パンチカード、または溝の中の隆起構造など）、およびこれらの任意の適切な組合せを含む。本明細書におけるコンピュータ可読記憶媒体は、電波もしくは他の自由伝搬する電磁波、導波管もしくは他の伝送媒体を介して伝搬する電磁波（例えば、光ファイバ・ケーブルの中を通る光パルス）、またはワイヤを介して伝送される電気信号など、一時的な信号自体であると解釈されるべきではない。
【００６２】
本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング／処理デバイスにダウンロードされてよく、あるいは、ネットワーク（例えば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくはワイヤレス・ネットワーク、またはその組合せ）を介して外部コンピュータまたは外部記憶デバイスにダウンロードされてよい。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組合せを含むことができる。各コンピューティング／処理デバイス中の、ネットワーク・アダプタ・カードまたはネットワーク・インタフェースが、コンピュータ可読プログラム命令をネットワークから受け取り、これらのコンピュータ可読プログラム命令を、それぞれのコンピューティング／処理デバイス内のコンピュータ可読記憶媒体に記憶されるように転送する。
【００６３】
本発明の動作を遂行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ）命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データであってよく、または、Ｓｍａｌｌｔａｌｋ（R）やＣ＋＋などのオブジェクト指向プログラミング言語、および、「Ｃ」プログラミング言語や類似のプログラミング言語などの従来の手続き型プログラミング言語を含めた、１つもしくは複数のプログラミング言語の任意の組合せで書かれた、ソース・コードとオブジェクト・コードとのいずれかであってよい。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行されるか、スタンドアロン・ソフトウェア・パッケージとして部分的にユーザのコンピュータ上で実行されるか、部分的にユーザのコンピュータ上で実行され部分的にリモート・コンピュータ上で実行されるか、または完全にリモート・コンピュータもしくはサーバ上で実行される場合がある。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）もしくはワイド・エリア・ネットワーク（ＷＡＮ）を含めた任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよく、または、接続は、外部コンピュータに対して（例えば、インターネット・サービス・プロバイダを使用してインターネット経由で）行われてもよい。いくつかの実施形態では、例えばプログラマブル・ロジック回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、またはプログラマブル・ロジック・アレイ（ＰＬＡ）を含む電子回路が、本発明の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路を個人化することによって、コンピュータ可読プログラム命令を実行することができる。
【００６４】
本明細書では、本発明の態様が、本発明の実施形態による方法、装置（システム）、およびコンピュータ・プログラム製品の、フローチャート説明またはブロック図あるいはその両方に関して記述されている。フローチャート説明またはブロック図あるいはその両方の各ブロック、および、フローチャート説明またはブロック図あるいはその両方の中のブロックの組合せを、コンピュータ可読プログラム命令によって実装できることは理解されるであろう。
【００６５】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロック中で指定される機能／行為を実装する手段を生み出すように、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令はまた、命令が記憶されたコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロック中で指定される機能／行為の態様を実装する命令を含む製造品を構成するように、コンピュータ可読記憶媒体に記憶されるものであってもよく、このコンピュータ可読記憶媒体は、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組合せに、特定の方式で機能するよう指令することができる。
【００６６】
コンピュータ可読プログラム命令はまた、コンピュータ、他のプログラム可能な装置、または他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロック中で指定される機能／行為を実装するように、コンピュータ、他のプログラム可能なデータ処理装置、または他のデバイスにロードされて、コンピュータ、他のプログラム可能な装置、または他のデバイス上で一連の動作ステップを実施し、コンピュータ実装プロセスを作り出すものであってもよい。
【００６７】
図中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装形態の、アーキテクチャ、機能、および動作を示す。これに関して、フローチャートまたはブロック図中の各ブロックは、モジュール、セグメント、または命令の一部を表す場合があり、これは、指定される論理機能を実装するための少なくとも１つの実行可能命令を含む。いくつかの代替実装形態では、ブロック中で示される機能は、図中で示される順序とは異なる順序で生じる場合がある。例えば、関係する機能に応じて、連続して示される２つのブロックが実際にはほぼ同時に実行される場合もあり、またはこれらのブロックが逆の順序で実行されることもある。また、ブロック図またはフローチャート説明あるいはその両方の各ブロック、および、ブロック図またはフローチャート説明あるいはその両方の中のブロックの組合せは、指定される機能もしくは行為を実施するかまたは専用ハードウェアとコンピュータ命令とを組み合わせて遂行する、専用ハードウェアベースのシステムによって、実装できることにも気付くであろう。
【００６８】
本開示は、例証および記述の目的で提示したものであり、網羅的または限定的なものとはしない。多くの変更および変形が、当業者には明らかであろう。実施形態は、原理および実際の応用を説明するために、かつ他の当業者が本開示を理解できるようにするために、選ばれ記述されたものである。
【００６９】
本明細書では、本発明の例証的な実施形態について添付図面に関して述べたが、本発明の実施形態はこれらの厳密な実施形態に限定されないこと、ならびに、本開示の範囲または思想を逸脱することなく当業者によって様々な他の変形および変更が加えられてもよいことを理解されたい。
【図１】
0006731048.tif 000002
【図２】
0006731048.tif 000003
【図３】
0006731048.tif 000004
【図４】
0006731048.tif 000005
【図５】
0006731048.tif 000006
【図６】
0006731048.tif 000007
【図７】
0006731048.tif 000008
【図８】
0006731048.tif 000009