(57)【要約】  装置は、複数のソフトウェア・ワークロードからの命令を処理するための処理回路１８と、メモリ・システム３０、３２、３４に格納された、分岐予測状態データの複数のセット６０から選択された分岐予測状態データをキャッシュする分岐予測キャッシュ４０〜４２であって、分岐予測状態データの各セットは、前記複数のソフトウェア・ワークロードの１つに対応する分岐予測キャッシュと、所与のソフトウェア・ワークロードの分岐命令の結果を、前記所与のソフトウェア・ワークロードに対応する分岐予測状態データのセットからの、分岐予測キャッシュにキャッシュされた分岐予測状態データに基づいて予測する、分岐予測回路４とを備える。該装置は、分岐予測器の悪質なトレーニングで生じる分岐予測の誤りを不正利用する、投機のサイド・チャネル攻撃を軽減するのに有用である。
2021524621.tif 000002
【特許請求の範囲】
【請求項１】
複数のソフトウェア・ワークロードからの命令を処理するための処理回路と、
メモリ・システムに格納された分岐予測状態データの複数のセットから選択された分岐予測状態データをキャッシュするための分岐予測キャッシュであって、分岐予測状態データの各セットは、前記複数のソフトウェア・ワークロードの１つに対応する分岐予測キャッシュと、
所与のソフトウェア・ワークロードの分岐命令の結果を、前記所与のソフトウェア・ワークロードに対応する前記分岐予測状態データのセットからの、前記分岐予測キャッシュにキャッシュされた前記分岐予測状態データに基づいて予測する分岐予測回路と
を備える装置。
【請求項２】
前記処理回路が第１のソフトウェア・ワークロードの処理から第２のソフトウェア・ワークロードの処理に切り替わるのに応答して、前記分岐予測キャッシュは、前記第１のソフトウェア・ワークロードに対応する前記分岐予測状態データのセットのキャッシュされた分岐予測状態データが、前記第２のソフトウェア・ワークロードの分岐命令の結果を予測するのに使用されるのを防止するよう構成される、請求項１に記載の装置。
【請求項３】
前記分岐予測キャッシュは複数のエントリを有し、分岐予測状態データの対応する部分をキャッシュするための各エントリは、分岐予測状態データのどのセットから、前記分岐予測状態データの対応する部分が選択されるかについての、どのような指示とも無関係である、請求項１に記載の装置。
【請求項４】
前記分岐予測キャッシュは、前記分岐予測キャッシュのすべての有効なエントリを、所与のソフトウェア・ワークロードに対応する分岐予測状態データの同じセットからの分岐予測状態データに確実に関係付けるよう構成される、請求項１に記載の装置。
【請求項５】
前記処理回路が第１のソフトウェア・ワークロードの処理から第２のソフトウェア・ワークロードに切り替わるのに応答して、前記分岐予測キャッシュは、前記第２のソフトウェア・ワークロードに対応する前記分岐予測状態データのセットの一部を前記分岐予測キャッシュ内にフェッチすることを要求するため、前記メモリ・システムへの少なくとも１つの状態フェッチ要求をトリガするよう構成される、請求項１に記載の装置。
【請求項６】
前記分岐予測状態データのセットの前記一部には、前記第２のソフトウェア・ワークロードに対応する前記分岐予測状態データのセットの適切なサブセットが含まれる、請求項５に記載の装置。
【請求項７】
前記分岐予測キャッシュは、分岐予測が必要な所与のソフトウェア・ワークロードの命令のターゲット命令アドレスに対する前記分岐予測キャッシュでのミスに応答して、前記所与のソフトウェア・ワークロードに対応する前記分岐予測状態データのセットの対応する部分を、前記分岐予測キャッシュ内にフェッチすることを要求するため、前記メモリ・システムへの少なくとも１つの状態フェッチ要求をトリガする、請求項１に記載の装置。
【請求項８】
前記分岐予測キャッシュは、前記分岐予測キャッシュからの汚れた分岐予測状態データの削除に応答して、前記汚れた分岐予測状態データを前記メモリ・システムに書き戻すことを要求する、少なくとも１つの書戻し要求をトリガする、請求項１に記載の装置。
【請求項９】
前記分岐予測キャッシュは、所定のサイズのアドレス範囲に対応する粒度で、分岐予測状態情報のアイテムをキャッシュするよう構成され、それにより前記分岐予測回路は、前記所定のサイズの隣接するアドレス範囲内のアドレスに対して、分岐命令の前記結果の相異なる予測を行うことができ、且つ
前記装置は、前記分岐予測キャッシュと前記メモリ・システムとの間で、所与のサイズのユニットで分岐予測状態データを転送する状態転送回路を備え、各ユニットには、命令アドレスの少なくとも１つのブロックに対する分岐予測を行うための分岐予測状態データが含まれ、前記命令アドレスの少なくとも１つのブロックのそれぞれは、前記所定のサイズよりも大きいサイズの連続するアドレス範囲をカバーする、請求項１に記載の装置。
【請求項１０】
前記所与のソフトウェア・ワークロードの所与の命令のターゲット・アドレスに応答して、前記所与のソフトウェア・ワークロードに対応する前記分岐予測状態データのセットから対応する分岐予測状態データのアイテムを選択する選択回路
を備え、前記所与のソフトウェア・ワークロードに対応する前記分岐予測状態データのセットは、複数のサブ・テーブルを含み、
前記選択回路は、前記ターゲット・アドレスの第１の部分に基づいて前記複数のサブ・テーブルの１つを選択し、前記ターゲット・アドレスの第２の部分の関数に基づいて、前記選択されたサブ・テーブルから分岐予測状態データのアイテムを選択するよう構成される、請求項１に記載の装置。
【請求項１１】
分岐予測が将来必要になると予測されるアドレスに関係する分岐予測状態データを、前記分岐予測キャッシュ内にプリフェッチする分岐予測状態プリフェッチャを備える、請求項１に記載の装置。
【請求項１２】
前記分岐命令の前記結果は、前記分岐命令のターゲット・アドレスを含む、請求項１に記載の装置。
【請求項１３】
前記分岐命令の前記結果は、分岐が起きるか又は起きないかを含む、請求項１に記載の装置。
【請求項１４】
前記ソフトウェア・ワークロードの少なくとも１つについて、所与のソフトウェア・ワークロードに対する前記分岐予測状態データのセットは、前記所与のソフトウェア・ワークロードがアクセスできないメモリ範囲に格納される、請求項１に記載の装置。
【請求項１５】
各ソフトウェア・ワークロードは、
前記処理回路によって実行されるソフトウェア・プロセスと、
前記処理回路によって実行されるソフトウェア・プロセス群と、
ソフトウェア・プロセスの特定の部分と、
特定のアドレス範囲内の命令アドレスを有するソフトウェア・プロセスの命令と、
１つ又は複数のワークロード分割命令によって区切られたソフトウェア・プロセスの一部と、
同じプロセスに対応する前記処理回路によって実行される複数のスレッドの１つ、又は、前記複数のスレッドの中のスレッドのサブグループと
のうちの１つを含む、請求項１に記載の装置。
【請求項１６】
複数のソフトウェア・ワークロードからの命令を処理する手段と、
メモリ・システムに格納された分岐予測状態データの複数のセットから選択された分岐予測状態データをキャッシュする手段であって、分岐予測状態データの各セットは、前記複数のソフトウェア・ワークロードの１つに対応する手段と、
所与のソフトウェア・ワークロードの分岐命令の結果を、前記所与のソフトウェア・ワークロードに対応する前記分岐予測状態データのセットからの、分岐予測キャッシュにキャッシュされた分岐予測状態データに基づいて予測する手段と
を備える装置。
【請求項１７】
複数のソフトウェア・ワークロードからの命令を処理するステップと、
メモリ・システムに格納された分岐予測状態データの複数のセットから選択された分岐予測状態データを分岐予測キャッシュにキャッシュするステップであって、分岐予測状態データの各セットは、前記複数のソフトウェア・ワークロードの１つに対応するステップと、
所与のソフトウェア・ワークロードの分岐命令の結果を、前記所与のソフトウェア・ワークロードに対応する前記分岐予測状態データのセットからの、前記分岐予測キャッシュにキャッシュされた分岐予測状態データに基づいて予測するステップと
を含むデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技法は、データ処理の分野に関する。より詳細には、本技法は、分岐予測に関する。
【背景技術】
【０００２】
データ処理装置は、分岐命令が実際に実行される前に分岐命令の結果を予測するための、分岐予測回路を備えることができる。分岐命令が実際に実行される前に分岐結果を予測することにより、分岐命令の実行が完了する前に、分岐の後に続く命令のフェッチが開始され、投機的に実行され得るため、その結果、予測が正しい場合は、後続の命令が、分岐の結果が実際にわかってからしかフェッチされなかった場合よりも早く実行できるので、性能が無駄遣いされることはない。
【発明の概要】
【課題を解決するための手段】
【０００３】
少なくともいくつかの実例は、複数のソフトウェア・ワークロードからの命令を処理するための処理回路と、メモリ・システムに格納された、分岐予測状態データの複数のセットから選択された分岐予測状態データをキャッシュする分岐予測キャッシュであって、分岐予測状態データの各セットは、前記複数のソフトウェア・ワークロードの１つに対応する分岐予測キャッシュと、所与のソフトウェア・ワークロードの分岐命令の結果を、前記所与のソフトウェア・ワークロードに対応する分岐予測状態データのセットからの、分岐予測キャッシュにキャッシュされた分岐予測状態データに基づいて予測する、分岐予測回路とを備える装置を提供する。
【０００４】
少なくともいくつかの実例は、複数のソフトウェア・ワークロードからの命令を処理する手段と、メモリ・システムに格納された、分岐予測状態データの複数のセットから選択された分岐予測状態データをキャッシュする手段であって、分岐予測状態データの各セットは、前記複数のソフトウェア・ワークロードの１つに対応する手段と、所与のソフトウェア・ワークロードの分岐命令の結果を、前記所与のソフトウェア・ワークロードに対応する分岐予測状態データのセットからの、分岐予測キャッシュにキャッシュされた分岐予測状態データに基づいて予測する手段とを備える装置を提供する。
【０００５】
少なくともいくつかの実例は、複数のソフトウェア・ワークロードからの命令を処理するステップと、メモリ・システムに格納された、分岐予測状態データの複数のセットから選択された分岐予測状態データを分岐予測キャッシュにキャッシュするステップであって、分岐予測状態データの各セットは、前記複数のソフトウェア・ワークロードの１つに対応するステップと、所与のソフトウェア・ワークロードの分岐命令の結果を、前記所与のソフトウェア・ワークロードに対応する分岐予測状態データのセットからの、分岐予測キャッシュにキャッシュされた分岐予測状態データに基づいて予測するステップとを含む、データ処理方法を提供する。
【０００６】
本技法のさらなる態様、特徴、及び利点は、以下の添付図面と併せて読まれるべき実例の以下の説明から明らかとなろう。
【図面の簡単な説明】
【０００７】
【図１】分岐予測回路及び分岐予測キャッシュを備えるデータ処理装置の実例を模式的に示す図である。
【図２】分岐予測器を不正利用し、より高い特権のあるコードをだまして秘密情報を攻撃者に漏洩させることができる、可能性のあるセキュリティ攻撃を模式的に示す図である。
【図３】メモリ・システムのバックアップ記憶部からの、分岐予測状態データの一部をキャッシュするための、分岐予測キャッシュの実例を示す図である。
【図４】ワークロード間の切替え、及び対応して分岐予測状態データのセット間を切り替える実例を示す図である。
【図５Ａ】局所性を改善するための、キャッシュの構造の実例を示す図である。
【図５Ｂ】局所性を改善するための、キャッシュの構造の実例を示す図である。
【図６】分岐予測を行う方法を示す流れ図である。
【図７】処理するワークロードの切替えが検出されるのに応答して、分岐予測キャッシュを更新する方法を示す図である。
【発明を実施するための形態】
【０００８】
データ処理装置は、分岐命令の結果を予測するための分岐予測の仕組みを備えることができる。予測結果には、たとえば、分岐が起きるか否かが含まれ得るか、又は分岐命令の予測されるターゲット・アドレスが含まれる場合がある。特定の分岐が関数呼出しに関係するかどうか、又は特定の分岐が予測不可能な分岐先アドレス・パターンを持つことが予想され、それにより同じ分岐の実行の相異なるインスタンスが、生成されている相異なるターゲット・アドレスにつながる可能性があるかどうかなど、分岐の他のプロパティも予測され得る。従来、分岐予測の仕組みは、その予測の誤りがデータ処理装置で処理されるデータのセキュリティにとっては重要ではなく、単に達成される性能のレベルに影響を与えるだけの、性能を向上させる仕組みと見なされていた。というのは、分岐が誤って予測された場合、処理回路が一時的に誤った命令を実行する可能性があるが、実際の分岐結果が決定されて予測と比較されると、予測の誤りを検出でき、次いで誤って予測された分岐に基づいてフェッチされた後続の命令の処理パイプラインをフラッシュすることができ、そしてプロセッサのアーキテクチャの状態は、分岐が発生した時点に復元されて、正しくないことが判明した、後続の投機された命令のアーキテクチャ上の影響を取り消しできるからである。
【０００９】
しかし最近、分岐予測回路は、あるソフトウェア・ワークロードが他のソフトウェア・ワークロードに関係するデータにアクセスするのを制限するように、データ処理装置に提供され得るセキュリティ保護を出し抜くために、攻撃者が不正利用する可能性があるルートをもたらす場合があることが認識されてきた。というのは、一部の分岐予測器では、１つのソフトウェア・ワークロード内で見られる分岐履歴に基づいて、分岐予測器に割り当てられた分岐予測状態のエントリが、別のソフトウェア・ワークロードからアクセスされ、その異なるソフトウェア・ワークロードの分岐結果を予測するために使用され得る可能性があるからである。以前はこのような、１つのワークロードからの分岐予測状態を使用して別のワークロードの分岐結果を予測することは、あたかも第２のワークロードが第１のワークロードによって割り当てられた分岐予測器の間違ったエントリにヒットし、次いでそれによって生じるどのような予測の誤りも、後で識別され、実際の分岐結果が判明すると解決され得るものであるかのように、単なる性能の問題としか見なされてこなかった。そしてこれは、単に正しい分岐結果の処理を遅延させるだけであると予想され、セキュリティ上のリスクを引き起こすとは予想されていなかった。
【００１０】
しかし、誤って予測された分岐のために誤って投機的に実行された命令は、依然として、データ処理装置で使用されるキャッシュ又は別の非アーキテクチャ上の記憶構造体内のデータに影響を与える可能性があることが認識されてきた。これは、攻撃者はアクセスできないが、別のソフトウェア・ワークロードがアクセス可能な、潜在的に秘密性が高いデータに関する何らかの情報を、攻撃者が入手しようとして不正利用する場合があり、別のソフトウェア・ワークロードは、攻撃者にだまされて、秘密にアクセスし、秘密に関する何らかの情報を攻撃者に見えるようにする、キャッシュ割当ての変更を引き起こすよう設計された命令を実行させる可能性がある。攻撃者は、たとえば、分岐アクセスのパターンを使って分岐予測器をトレーニングする可能性があり、それにより、犠牲者（ｖｉｃｔｉｍ）ソフトウェア・ワークロードが後で同じエントリにアクセスすると、間違ったターゲット・アドレスからの命令を誤って実行するか、又は分岐が起きるか否かの間違った予測に従い、秘密情報への不適切なアクセスを引き起こすであろう。次いで、キャッシュのタイミングのサイド・チャネルを使用して、誤った投機の影響を調べ、秘密に関する情報を漏洩させることができる。
【００１１】
かかる攻撃に対処する１つのやり方は、対応するソフトウェア・ワークロードの識別子を分岐予測器のエントリにタグ付けし、それにより所与のソフトウェア・ワークロードが、対応するワークロード識別子でタグ付けされた分岐予測状態しか使用できないようにすることであり得る。ただし、特定のソフトウェア・ワークロードを識別するためにデータ処理システムで通常使用される、個々のプロセスを識別するプロセス識別子若しくはアドレス空間識別子、及び／又はその中で所与のプロセスが動作する仮想マシンを識別する仮想マシン識別子などの識別子は、比較的長くなる恐れがある。かかる識別子は、たとえば、３２ビット又は６４ビットものビット数を有する場合がある。分岐予測器の各エントリに、対応するソフトウェア・ワークロードの識別子（さらに悪い場合は、プロセスＩＤと仮想マシンＩＤとの組合せなどの、識別子のセット）がタグ付けされた場合、分岐予測器の各エントリのサイズが大幅に増加し得る。これは特に、分岐が起きるか否かを予測する分岐方向予測器では問題となる。というのは、かかる分岐方向予測器では、分岐予測状態の各アイテムには通常、数ビットしか含まれ得ないからである（たとえば、それによって分岐が起きるか起きないかが予測される、信頼度を追跡するための２ビットの信頼度カウンタ）。したがって、各エントリにタグを付けると、分岐予測器のオーバヘッドが大幅に増加することになり、回路面積に制約のあるマイクロ・アーキテクチャ設計では許容されない場合がある。タグ付けの別の問題は、ソフトウェア・ワークロードの分岐を適切に予測できるように、ソフトウェア・ワークロードごとに分岐予測状態のセットを維持することであり、これには、ワークロードごとの分岐予測状態のすべてのセットに適応するために、分岐予測回路に供給されるべき極めて多数のエントリが必要となることである（すべてのワークロード間で同じエントリを共有する分岐予測器と比較して）。したがって、実際には、ワークロードごとに一意のソフトウェア・ワークロード識別子でエントリにタグを付け、分岐予測器でのヒットを同じワークロードに対応するエントリのみに制限することは、マイクロ・アーキテクチャ設計の点から非現実的であり得る。
【００１２】
以下で論じる技法では、メモリ・システムに格納された分岐予測状態データの２つ以上のセットから選択された分岐予測状態データをキャッシュするために、分岐予測キャッシュが提供される。分岐予測状態データの各セットは、処理回路によって処理される複数のソフトウェア・ワークロードの１つに対応する。分岐予測回路は、所与のソフトウェア・ワークロードに対応する分岐予測状態データのセットからの、分岐予測キャッシュにキャッシュされた分岐予測状態データに基づいて、所与のソフトウェア・ワークロードの分岐命令の結果を予測する。
【００１３】
したがって、メモリ・システムに複数の分岐予測状態データのセットを格納することにより、分岐予測回路の局所的な、対応するサイズの分岐予測キャッシュをサポートするのに、マイクロ・アーキテクチャでは非現実的なほど大きい面積のオーバヘッドを必要とすることなく、それぞれがそれ自体の分岐予測状態のセットを有する多数の相異なるソフトウェア・ワークロードをサポートできる。すなわちメモリ・システムは、すべてのソフトウェア・ワークロードに対する完全な一連の分岐予測データセットを格納するバッキング・ストアとして効果的に機能し、一方この分岐予測状態データのサブセットが、分岐予測回路による即時アクセスのために分岐予測キャッシュにキャッシュされる。それにより、キャッシュ自体は、ワークロード間で分岐予測状態を共有する一般的な分岐予測構造体よりも大きな回路面積を予定しておく必要はない。
【００１４】
分岐予測状態データは、典型的には、メモリからは通常見えないようにされる、所与の処理パイプラインのマイクロ・アーキテクチャの一態様と見なされることになるので、この手法は直観に反するものであることがわかる。また、メモリ・システム内のバッキング・ストアから分岐予測状態データをフェッチすることに伴う遅延は、予測がまったく行われず、そうではなくてパイプラインが、後続の命令をフェッチする前に、実際の分岐命令の結果が実行時に使用可能になるのを待った場合に予想される遅延よりも長くなると予想されるであろう。したがって、メモリ・システムが分岐予測状態データを格納するための好適な場所と考えられることはなさそうである。しかし実際には、ソフトウェア・ワークロードの変更は比較的まれであり得る。そして新しいソフトウェア・ワークロードの開始時に分岐予測状態データをフェッチするためのウォーム・アップ遅延は、以前に１つのワークロードに対して行われた予測が、第２のワークロードに対する誤って予測された分岐に応答して徐々に適応されるので、いずれにせよ、ワークロード間で分岐予測器のエントリを共有する分岐予測器のウォーム・アップ遅延と同等になり得る。対照的に、メモリ・システムに格納された分岐予測状態データの個別のセットを使用することにより、１つのワークロードでの実際の分岐結果に基づく補正は、別のワークロードで使用される分岐予測状態を汚染しないため、両方のワークロードに対する予測をより正確に行うことができ、分岐予測状態データがキャッシュに取り込まれると、メモリ・システムからの分岐予測状態データのフェッチに関係する遅延の一部を軽減するのに役立つ。分岐予測状態データの個別のセットをメモリ・システムに格納するもう１つの利点は、マルチプロセッサ・システムで、所与のソフトウェア・ワークロードが１つのプロセッサから別のプロセッサに移されたときに、分岐予測状態データがメモリに格納されている場合であり、これは、分岐予測状態を移動させる専用の経路を確立する必要なしに、分岐予測状態が、１つのプロセッサから別のプロセッサに、やはり比較的簡単に移動できることを意味する。これにより、スケジューラが、プロセッサ間でソフトウェア・ワークロードを移すとき、予測性能の低下を回避することにより、プロセッサ・システム設計を簡素化し、性能を改善できる。したがって実際には、性能への影響は限定され得る。そして、メモリ・システム内で、相異なるソフトウェア・ワークロードに対する個別の分岐予測状態データのセットを維持することにより、１つのソフトウェア・ワークロードを操作する攻撃者が、秘密データに関する情報を攻撃者に見せるよう設計されている別のソフトウェア・ワークロードで不正な投機を引き起こすために、そのワークロードを使用してトレーニングした分岐予測状態データを、使用できなくする。
【００１５】
処理回路が第１のソフトウェア・ワークロードの処理から第２のソフトウェア・ワークロードの処理に切り替わるのに応答して、分岐予測キャッシュは、第１のソフトウェア・ワークロードに対応する分岐予測状態データのセットのキャッシュされた分岐予測状態データが、第２のソフトウェア・ワークロードの分岐命令の結果を予測するのに使用されるのを防止することができる。たとえば、相異なるソフトウェア・ワークロード間のコンテキスト切替え時に、分岐予測キャッシュは、第１のソフトウェア・ワークロードに関係するエントリを無効化することができる。無効化されたエントリのいずれかに、メモリ・システム内の対応する予測状態と比べて変更された更新済みの予測状態データが含まれている場合、かかる汚れた分岐予測状態データを、メモリ・システムに書き戻すことができる。書戻しは、第１のソフトウェア・ワークロードと第２のソフトウェア・ワークロードとの間のコンテキスト切替え時に実行できるか、又は、第２のソフトウェア・ワークロードに関係する新しい分岐予測状態データで、所与のキャッシュされたエントリを上書きすることが望まれるまで延期することができる。したがって、概ね、第１のソフトウェア・ワークロードに関係する分岐予測状態データを、第２のソフトウェア・ワークロードの分岐命令の結果を予測するために使用できないように、キャッシュ状態を更新することによって、上記で論じた種類のセキュリティ攻撃は回避される。
【００１６】
分岐予測キャッシュは、いくつかのエントリを有することができ、分岐予測状態データの対応する部分をキャッシュするための各エントリは、分岐予測状態データのどのセットから、分岐予測状態データの対応する部分が選択されるかについての、どのような指示とも無関係である。すなわち、分岐予測キャッシュの各エントリは、そのエントリの分岐予測状態データに対応する特定のソフトウェア・ワークロードのどのような識別子も含む必要はない。プロセス識別子又はソフトウェア・ワークロードに関係する他の識別子でエントリにタグ付けすることを回避することにより、かかるタグ付けに起因する、予想され得る面積上のオーバヘッドの大幅な増加が回避される。これは、分岐ターゲット・アドレス予測器と分岐方向予測器との両方に有利であり得るが、分岐予測状態データの各アイテムのサイズはより小さいことが多く、プロセス識別子でタグ付けすることは各エントリのサイズを不相応に増加させることになるので、特に分岐方向予測器に対して利点をもたらすことができる。
【００１７】
分岐予測キャッシュは、分岐予測キャッシュのすべての有効なエントリを、所与のソフトウェア・ワークロードに対応する分岐予測状態データの同じセットからの分岐予測状態データに確実に関係付けることができる。これにより、各エントリに、どのソフトウェア・ワークロードに所与のエントリが関係するかを区別するタグを含める必要がなくなる。１つのソフトウェア・ワークロードに関係するエントリが、別のソフトウェア・ワークロードに対する予測を行うのに使用されることは、そうではなくて、ソフトウェア・ワークロードの変更が発生したときに分岐予測キャッシュの内容を無効化することによって、確実に防止され得る。分岐予測キャッシュのルックアップは、命令アドレスに応じて行うことができるが、現在のワークロードのワークロード識別子とは無関係である。現在のワークロードの識別は、分岐予測のキャッシュ・ラインフィル時に考慮される場合があるが、各予測ルックアップ時は考慮されない。
【００１８】
分岐予測キャッシュのエントリが無効化される場合、これはメモリ内の対応する分岐予測状態データを無効化する必要があることを意味するものではないことに留意されたい。そうではなくて、メモリ内の分岐予測状態データは保持することができ、必要に応じて、分岐予測キャッシュから削除されたデータに基づいて更新され、その結果分岐予測状態データは、所与のソフトウェア・ワークロードを実行する１つのインスタンスを超えて保持され、同じソフトウェア・ワークロードが次回実行されるときに復元され得る。
【００１９】
処理回路が第１のソフトウェア・ワークロードの処理から第２のソフトウェア・ワークロードに切り替わるのに応答して、分岐予測キャッシュは、第２のソフトウェア・ワークロードに対応する分岐予測状態データのセットの一部を分岐予測キャッシュ内にフェッチすることを要求するため、メモリ・システムへの少なくとも１つの状態フェッチ要求をトリガすることができる。したがって、次に来るソフトウェア・ワークロードに関係する分岐予測状態データの新しいセットのロードは、第１のソフトウェア・ワークロードから第２のソフトウェア・ワークロードへのコンテキスト・スイッチによって自動的にトリガされ得る。
【００２０】
場合によっては、コンテキスト切替え時の、分岐予測キャッシュ内にフェッチされた分岐予測状態データのセットの一部には、第２のソフトウェア・ワークロードに関係する分岐予測状態データのセット全体が含まれ得る。この手法は、関係する分岐予測状態データが、コンテキストの切替えに続いて可能な限り早くフェッチされたことを意味するので、後続の分岐が発生したときのプロセッサ・パイプラインへの性能上の影響を低減することができる。
【００２１】
しかし他の場合では、第１のソフトウェア・ワークロードから第２のソフトウェア・ワークロードへの切り替えに応答してフェッチされた分岐予測状態データのセットの一部には、第２のソフトウェア・ワークロードに対応する分岐予測状態データの適切なサブセットが含まれ得る。すなわち、第２のソフトウェア・ワークロードに関係する分岐予測状態データのセットのすべてが、コンテキスト・スイッチに応答して分岐予測キャッシュにフェッチされ得るとは限らない。そうではなくて、最初により小さい部分をフェッチでき、次いで分岐予測状態データの残りの部分は、所与の分岐命令に必要な場合、要求に応じて、より小さい部分を分岐予測キャッシュ内にフェッチできる。この手法により、コンテキストの切替え時に、大量にメモリ・アクセス帯域幅を使い切ることを回避でき、その他の手法では、コンテキストの切替えが、次に来る第２のソフトウェア・ワークロードによって行われる実際のデータのメモリ・アクセスの性能に、影響を与える可能性がある。
【００２２】
分岐予測キャッシュは、分岐予測が必要な所与のソフトウェア・ワークロードの命令のターゲット命令アドレスに対する分岐予測キャッシュでのミスに応答して、所与のソフトウェア・ワークロードに対応する分岐予測状態データのセットの対応する部分を、分岐予測キャッシュ内にフェッチすることを要求するため、メモリ・システムへの少なくとも１つの状態フェッチ要求をトリガすることができる。したがって、分岐予測が必要なターゲット命令アドレスが検出された場合、次いで、分岐予測状態データの対応する部分がまだ分岐予測キャッシュ内になければ、そのフェッチがトリガされ得る。所与のソフトウェア・ワークロードの分岐予測状態のセットを、分岐予測キャッシュによって一時的にキャッシュされるがメモリ・システムのより低いレベルに書き戻すことができる、いくつかの部分に分割することにより、コンテキスト・スイッチによる遅延が短縮され、状態の全体的なサイズに制限を課すことがなくなる。
【００２３】
他の実施態様では、コンテキスト・スイッチ自体に応答してどのような状態フェッチ要求もトリガせず、分岐予測状態データの所与の部分を、その分岐予測状態データを必要とすることになるアドレスが検出された場合にのみ、分岐予測キャッシュ内にフェッチするように、すべての分岐予測データを要求に応じてフェッチすることが可能であり得る。
【００２４】
実際には、コンテキスト・スイッチに応答して分岐予測状態データの最初の部分がフェッチされ、次いで後続の部分が要求に応じて後でフェッチされるように、これら２つの手法間のバランスをとるのが最も効率的であり得る。
【００２５】
分岐予測状態データが分岐予測キャッシュから削除されるとき（コンテキスト切替え時で分岐予測状態データが無効化されているとき、又は要求に応じた分岐予測状態データのフェッチに基づいて、所与の分岐予測状態データが続いて上書きされるとき）、削除されるデータが汚れていた（メモリ内の対応する分岐予測状態データに比べて変更されていた）場合、分岐予測キャッシュは、少なくとも１つの書戻し要求をトリガして、汚れた分岐予測状態データがメモリ・システムに書き戻されることを要求することができる。分岐予測器は、かかる書戻しを通常、必要としないであろう。というのは、通常、分岐予測器は、メモリ・システムのバッキング・ストアのキャッシュとして機能するのではなく、処理パイプライン設計のマイクロ・アーキテクチャ内で分岐予測状態の完全な記録を保持することが予想されるからである。
【００２６】
典型的な分岐予測器は、通常、記憶部の配置構成を備えるよう設計されており、それによって所与のターゲット命令アドレスでの分岐結果を予測するための分岐予測器のエントリは、ターゲット命令アドレスに適用されるハッシュ・アルゴリズムに基づいて識別される。ここでハッシュは、隣り合うアドレスが分岐予測器の相異なるエントリに確実にマッピングされるように設計されている。すなわち、分岐予測器（分岐方向予測器と分岐ターゲット・アドレス予測器との両方を含む）は、典型的には、プログラム・コードの同じ範囲で発生する複数の分岐が、同じ分岐予測エントリへのアクセスを求めて競合するホットスポットをなくするために、ほとんど局所性がないように設計されている。
【００２７】
しかし発明者は、かかる典型的な分岐予測器のハッシュ方式が、上記で論じた分岐予測キャッシュに適用される場合、分岐予測キャッシュとメモリ・システムとの間の分岐予測状態データのアイテムの転送において非常に低い性能がもたらされる可能性があることを認識した。というのは、所与のソフトウェア・ワークロードがプログラム・コードの所与のセクションを処理するときに、従来の分岐予測マッピング方式では、近くの分岐のアドレスが、分岐予測状態データのアイテムをメモリ・システムから分岐予測キャッシュ内にロードするため、その後にいくつかの個別のフェッチ操作が必要となり得る、分岐予測状態データセットの非常に相異なるエントリにマッピングされることになるからである。したがって、メモリ・システムからの分岐予測状態データのサブセットをキャッシュする分岐予測キャッシュでは、従来の分岐予測ハッシュ方式と比較して、局所性が高まるアドレス・マッピング方式を提供することが有用であり得る。
【００２８】
分岐予測キャッシュは、所定のサイズのアドレス範囲に対応する粒度で、分岐予測状態情報のアイテムをキャッシュすることができる。これは、分岐予測回路が、所定のサイズの隣接するアドレス範囲内のアドレスに対して、分岐命令の結果の相異なる予測を行うことができ得ることを意味する。すなわち、所定のサイズは、同じサイズの隣のアドレス範囲から別個の予測を行うことができる最小アドレス範囲であり得る。
【００２９】
装置は、分岐予測キャッシュとメモリ・システムとの間で、所与のサイズのユニットで分岐予測状態データを転送する状態転送回路を備えることができ、ここで各ユニットには、命令アドレスの少なくとも１つのブロックに対する分岐予測を行うための分岐予測状態データが含まれ、かかる命令アドレスの各ブロックは、分岐予測キャッシュの粒度として使用される所定のサイズよりも大きいサイズの連続するアドレス範囲をカバーする。したがって、１回のデータ転送で分岐予測状態を分岐予測キャッシュに転送できるアドレス範囲は、それによって別個の予測が分岐予測キャッシュ内で表される粒度より大きくすることができる。これにより、プログラム・コードの所与のセクションに対する分岐予測結果を予測するために、分岐予測状態にロードする必要があるメモリ・アクセス数を減らすことができるので、メモリ・アクセスの性能を向上させることができる。
【００３０】
一実例では、装置は、所与のソフトウェア・ワークロードの所与の命令のターゲット・アドレスに応答して、所与のソフトウェア・ワークロードに対応する分岐予測状態データのセットから対応する分岐予測状態データのアイテムを選択する、選択回路を備えることができる。選択回路はたとえば、ターゲット・アドレスに応答して、どの分岐予測キャッシュのエントリをルックアップするかを選択するルックアップ回路であってもよく、又は分岐予測キャッシュのミスがある場合、若しくはソフトウェア・ワークロード間にコンテキストの切り替えがある場合に、そこから必要な分岐予測状態がフェッチされ得るメモリ・アドレスを生成する回路内に設けられてもよい（実際には、ルックアップ回路及びメモリ・アドレス生成回路が、なにがしかの部分を共有してもよい）。いくつかの実例では、選択回路は、ターゲット・アドレスに加えて、以前の分岐結果のパターンを示す分岐履歴情報（たとえば、最後に実行された、いくつかの分岐が行われなかったか／行われたかの結果）に基づいて、分岐予測状態データのアイテムを選択することもでき、これは、プログラムを通して起きた同じ分岐への相異なるルートに対して相異なる予測を生成できるので、より正確な予測を提供するのに役立つことができる。
【００３１】
所与のソフトウェア・ワークロードに対応する分岐予測状態データのセットは、いくつかのサブ・テーブルを含むことができ、選択回路は、ターゲット・アドレスの第１の部分に基づいてサブ・テーブルの１つを選択することができる。個々の予測を実現するための分岐予測状態データのアイテムは、ターゲット・アドレスの第２の部分の関数に基づいて、選択されたサブ・テーブルから選択され得る。各サブ・テーブルは、上記で論じたように、所定のサイズより大きいサイズの連続するアドレス範囲をカバーする、命令アドレスの少なくとも１つのブロックに対応する分岐予測状態データを提供することができる。したがって、サブ・テーブルを選択することにより、１回のデータ転送で分岐予測キャッシュに転送できる分岐予測状態データのユニットを選択でき、次いで選択したサブ・テーブルから、ターゲット・アドレスの残りの部分の関数（従来の分岐予測器で使用されるハッシュ関数と同様であるが、サブ・テーブル内の局所性を下げ、ホットスポットを減らすために、ターゲット・アドレスのより小さな部分に基づくハッシュ関数など）に基づいて、分岐予測状態データの個々のアイテムを選択できる。
【００３２】
言い換えると、サブ・テーブルを使用するこの手法では、各サブ・テーブルは、分岐予測キャッシュの個別のキャッシュのエントリとして機能することができるが、そのキャッシュのエントリ内に、所定のサイズの相異なるアドレス範囲に対する予測状態のいくつかの別個のアイテムが含まれ得る。各キャッシュのエントリを、アドレス空間のあるサブセットの別個のサブ・テーブルとして扱うことにより、局所性が高まり、分岐予測キャッシュのメモリ・アクセス性能が向上する。
【００３３】
所与のサブ・テーブルは、不連続な場所でアドレスの複数の相異なるブロックにマッピングされる場合があるが、各ブロックは、所定のサイズよりも大きいサイズの連続したアドレス範囲をカバーすることに留意されたい。サブ・テーブルを選択するために使用される選択関数は、プログラム・コードがそうした不連続ブロックの１つからの命令を実行していたときに、分岐予測器によって行われた予測が、その後に同じワークロードがそうした不連続ブロックの別のブロックに到達する場合には、もはや無関係となり得るので、その結果以前にコードの最初の範囲に対して行われた予測を、次の範囲に対する予測で上書きできるという予想の下で、アドレスの複数の不連続ブロック間で単一のサブ・テーブルを共有することができる。これにより、所与のソフトウェア・ワークロードのために多数のサブ・テーブルを設ける必要がなくなり、分岐予測状態データのセットを格納するためのメモリ容量のオーバヘッドを限定することができる。
【００３４】
サブ・テーブルを選択するために使用されるターゲット・アドレスの第１の部分は、サブ・テーブル内の分岐予測状態データの個々のアイテムを選択するために使用される第２の部分の少なくとも一部よりも重要な部分であり得る。場合によっては、第１の部分が、ターゲット・アドレスの最も重要な部分であり得る。しかし他の実例では、第１の部分は、ターゲット・アドレスの中間部分であってもよく、そのため、ターゲット・アドレスの第２の部分には、第１の部分より重要でない部分だけでなく、オプションで、第１の部分より重要な１つ又は複数のビットも含まれ得る。
【００３５】
分岐予測状態プリフェッチャは、分岐予測が将来必要になると予測されるアドレスに関係付けられた分岐予測状態データを、分岐予測キャッシュ内にプリフェッチするために提供され得る。分岐予測状態プリフェッチャは、データ・アクセスするアドレスに基づいてトレーニングされ、将来のデータのアドレス・アクセス・パターン、たとえば、アクセスされるアドレスが一定のオフセットのパターンで増加するストライド・パターンを予測する、ハードウェアのデータ・プリフェッチャと同様に動作できる。分岐予測状態プリフェッチャは、同様のやり方で分岐予測器に供給される命令アドレスに基づいてトレーニングでき、それにより、プログラム・コードが一連の命令をステップ実行している場合、分岐予測状態は、フェッチ工程が実際にそれらの命令に到達する前に、すぐに到達すると予測される命令に対する分岐予測状態データをプリフェッチするために、フェッチ工程が到達するプログラムの実行の現在のポイントよりも先を見ることができる。これは、現在の命令に対する、関係する分岐予測状態データの取得に伴う遅延を減らすことにより、性能向上に役立ち得る。
【００３６】
この適用例で論じる技法は、分岐命令の結果としての、分岐命令のターゲット・アドレスを予測する分岐ターゲット・バッファ（分岐ターゲット・アドレス予測器としても知られる）に適用できる。分岐ターゲット・アドレスは、分岐がプログラムの流れの向きを変える先のアドレスである。或いは本技法は、分岐命令の予測結果が、分岐が起こるか起こらないかの指標となる、分岐方向予測器に適用できる。上記で論じた技法は、これらの種類の分岐予測構造体のうちの１つにのみ、又は同じシステム内の両方に適用できることが理解されよう。
【００３７】
分岐予測状態データは、少なくとも一部のソフトウェア・ワークロードが、分岐予測状態データを格納する範囲にマッピングされたアドレスを指定する処理回路によって実行される、ロード／ストア操作を発行することによりアクセスできる、メモリ・システムのアドレス指定可能な範囲に格納できる。したがって、分岐予測状態データを、処理回路で実行される命令がすぐにアクセスできないマイクロ・アーキテクチャ上のデータ格納部にデータを格納するのではなく、処理回路によってアクセスされる通常のメモリのアドレス指定可能な範囲に格納できる。たとえば、オペレーティング・システムは、所与のプロセスに割り当てられたメモリの範囲内に、そのプロセスの分岐予測状態を格納するための、いくらかの特別な空間を割り当てることができる。
【００３８】
しかし、処理回路で実行される少なくともいくつかのソフトウェア・ワークロードでは、所与のソフトウェア・ワークロードに対する分岐予測状態データのセットは、その所与のソフトウェア・ワークロードがアクセスできないメモリの範囲に格納することができる。たとえば、分岐予測状態データへのアクセスを、分岐予測状態データが格納されている所与のソフトウェア・ワークロードよりも特権のあるプロセスに限定するために、対応する分岐予測状態データのセットを格納する範囲にメモリ保護属性を指定できる。たとえば、所与のプロセスに対する分岐予測状態データは、そのプロセスがアクセスできないが、そのプロセスを監視するオペレーティング・システムはアクセスでき得る。或いは、場合によっては、システムは、分岐予測状態データのセットが、プロセッサで実行しているどのソフトウェア・ワークロードもアクセスできないように実現されてもよく（ただし、分岐予測状態データのセットは、一般的にアドレス指定可能なメモリの範囲に割り当てられる）、それによって、メモリのアドレス指定可能な範囲へアクセスできるシステム要素だけが、分岐予測状態のフェッチ及び書戻しを制御する、分岐予測器に関係する要素であり得る。
【００３９】
分岐予測状態データが、処理回路によって実行される汎用ロード・ストア命令によって、少なくとも一部のソフトウェア・ワークロードから見ることができる場合、対応するメモリの範囲をそれらの命令に対して読み取り専用にして、攻撃者が、上記で論じた形態の攻撃を引き起こそうとして、メモリ・システムへ不正な分岐予測状態データを書き込みできるのを防ぐことができる。所与ソフトウェア・ワークロードに対する分岐予測状態データのセットを格納するメモリ範囲への書き込みが許可されるシステム要素は、たとえば、分岐予測キャッシュ又は分岐予測回路自体（又は分岐予測キャッシュからの分岐予測状態データの書戻しを制御する、任意の対応するロジック）だけであり得る。
【００４０】
各ソフトウェア・ワークロードは、処理回路によって実行されるソフトウェア・プロセス、処理回路によって実行されるソフトウェア・プロセス群、ソフトウェア・プロセスの特定の部分、特定のアドレス範囲内の命令アドレスを有するソフトウェア・プロセスの命令、１つ又は複数のワークロード分割命令によって区切られたソフトウェア・プロセスの一部、同じプロセスに対応する処理回路によって実行される複数のスレッドの１つ、又は、前記複数のスレッドの中のスレッドのサブグループのうちの１つを含むことができる。
【００４１】
したがって、処理回路で処理されるプロセス又はスレッドを、そのそれぞれが分岐予測状態データの対応するセットを有する様々なソフトウェア・ワークロードに正確にアサインし得る方法には、適応性がある。場合によっては、ソフトウェア・プロセス群が、上記で論じた形態の攻撃に関して互いにリスクをもたらさないと考えられる場合、ソフトウェア・プロセス群は、同じ分岐予測状態データのセットにマッピングすることができ、一方リスクをもたらすと考えられる他のソフトウェア・プロセス又はスレッドは、相異なる分岐予測状態データのセットを持つ別個のワークロードにアサインすることができる。場合によっては、ソフトウェア・プロセスの特定の部分を、同じソフトウェア・プロセス内であっても、分岐予測状態の相異なるセットにマッピングすることができる。たとえば、インターネット・ブラウザは、１つのタブが別のタブに影響を与えないように、相異なるブラウザ・タブを分割して、分割されたタブ自体の分岐予測状態データのセットを有することができる。同様に、単一のプロセスで使用される相異なるソフトウェア・ライブラリを、分岐予測状態の相異なるセットにマッピングできる。ソフトウェア・プロセスの相異なる部分が相異なるソフトウェア・ワークロードとして考えられる場合、特定のアドレス範囲で部分間の分割を行うことができ、それにより特定のアドレス範囲の命令アドレスを有するソフトウェア・プロセスの命令は、１つのソフトウェア・ワークロードと考えることができ、一方別のアドレス範囲の命令は、別の分岐予測状態データのセットを有する別のソフトウェア・ワークロードにマッピングできる。別のオプションでは、所与のソフトウェア・プロセスがワークロード間で分割されるポイントにマーク付けする、ワークロード分割命令を提供することができる。
【００４２】
図１は、いくつかの工程のパイプラインを具備する、パイプライン処理部を備えるデータ処理装置２の実例を模式的に示す。パイプラインは、分岐命令の結果を予測し、フェッチされるべき命令の一連のフェッチ・アドレスを生成する、分岐予測器４を備える。フェッチ工程６は、フェッチ・アドレスで識別された命令を、命令キャッシュ８からフェッチする。デコード工程１０は、フェッチされた命令をデコードして、パイプラインの後続のステージを制御するための制御情報を生成する。リネーミング工程１２は、レジスタのリネーミングを行い、命令によって識別されたアーキテクチャ上のレジスタ指定子を、ハードウェアで提供されるレジスタ１４を識別する物理レジスタ指定子にマッピングする。レジスタのリネーミングは、同じアーキテクチャ上のレジスタを指定する命令間でのハザードを、ハードウェアのレジスタ・ファイルの相異なる物理レジスタにアーキテクチャ上のレジスタをマッピングすることによって取り除くことができ、命令が、キャッシュ８からフェッチされたプログラムの順序とは異なる順序で実行できる可能性が高くなり得るので、順序が外れた実行をサポートするのに有用であり得る。これは、前の命令が、オペランドが利用可能になるのを待っている間に、後の命令を実行できるようにすることにより、性能を高めることができる。アーキテクチャ上のレジスタを別の物理レジスタにマッピングする機能により、分岐予測の誤りが発生した場合に、アーキテクチャ上の状態を容易にロール・バックすることもできる。発行工程１６は、命令を処理するために必要なオペランドがレジスタ１４で利用可能になるまで、実行を待つそれらの命令をキューに入れる。実行工程１８は、対応する処理操作を行うために命令を実行する。書戻し工程２０は、実行された命令の結果をレジスタ１４に書き戻す。
【００４３】
実行工程１８は、分岐命令が正しく予測されたかどうかを評価する分岐ユニット２１、算術又は論理演算を実行するＡＬＵ（ａｒｉｔｈｍｅｔｉｃ  ｌｏｇｉｃ  ｕｎｉｔ、算術論理ユニット）２２、浮動小数点オペランドを使用して演算を実行する浮動小数点ユニット２４、及びメモリ・システムからレジスタ１４にデータをロードするロード操作、又はレジスタ１４からメモリ・システムにデータをストアするためのストア操作を実行するロード／ストア・ユニット２６などの、いくつかの実行ユニットを備えることができる。この実例では、メモリ・システムは、レベル１の命令キャッシュ８、レベル１のデータ・キャッシュ３０、データと命令との間で共有されるレベル２のキャッシュ３２、及び主メモリ３４を備えるが、これは可能なメモリ階層のほんの一実例にすぎず、他の実施態様では、キャッシュのレベルをさらに増やすか又は別の配置構成を有することができることが理解されよう。メモリへのアクセスは、アドレス変換及び／又はメモリ保護を制御するメモリ管理ユニット（ＭＭＵ：ｍｅｍｏｒｙ  ｍａｎａｇｅｍｅｎｔ  ｕｎｉｔ）３５を使用して制御することができる。ロード／ストア・ユニット２６は、ＭＭＵ３５の変換ルックアサイド・バッファ３６を使用して、パイプラインによって生成された仮想アドレスを、メモリ・システム内の場所を識別する物理アドレスにマッピングすることができる。図１に示すパイプラインはほんの一実例にすぎず、他の実例では、様々なパイプライン工程又は実行ユニットのセットを備え得ることが理解されよう。たとえば、インオーダ・プロセッサには、リネーム工程１２がない場合がある。
【００４４】
分岐予測器４は、分岐命令の様々な結果を予測する構造体を備えることができる。たとえば、分岐予測器４は、条件分岐が起きるか起きないかを予測する分岐方向予測器を備えることができる。分岐方向予測器は、各エントリが、所与の命令アドレス又は命令アドレスのブロックに対して、信頼度カウンタに、比較的少ないビット（たとえば２又は３ビット）を提供できるので、比較的小さい構造体であってもよい。信頼度カウンタは、そうした予測の信頼度が増すように、「起こる」指示又は「起こらない」指示に向かって増減し、予測誤りが発生したときには、信頼度の以前の増加を逆方向に戻すように調整される。予測できる分岐結果の別の態様は、分岐のターゲット・アドレスであり得る。たとえば、ある分岐命令は、レジスタ１４に格納された値に基づいて間接的にターゲット・アドレスを計算し、プログラム・コード自体には確定的に知られていないアドレスに分岐できる。分岐ターゲット・バッファ（ＢＴＢ：ｂｒａｎｃｈ  ｔａｒｇｅｔ  ｂｕｆｆｅｒ）（分岐ターゲット・アドレス・キャッシュ（ＢＴＡＣ：ｂｒａｎｃｈ  ｔａｒｇｅｔ  ａｄｄｒｅｓｓ  ｃａｃｈｅ）としても知られる）は、分岐予測器４の一部であってもよく、それぞれが所与の命令のブロック内で発生する任意の分岐ターゲット・アドレスの予測を提供する、いくつかのエントリを有している。オプションで、ＢＴＢすなわちＢＴＡＣは、特定の種類の分岐予測など、分岐に関する他の情報も提供することができる（関数呼出し、関数戻り値など）。この場合も、ＢＴＢ／ＢＴＡＣによって行われる予測は、実行工程の分岐ユニット２１によって実行された分岐命令に対して決定された、実際の分岐結果３８に基づいて磨きをかける（ｒｅｆｉｎｅ）ことができる。分岐予測器４が備えることができる別の構造体は、たとえば、ＢＴＢ内にインデックスを生成するための追加の入力として使用できる、以前に実行された分岐の履歴に関する情報（たとえば、一連の、以前に起きた／起きなかった結果）を記録できる、分岐履歴バッファ（ＢＨＢ：ｂｒａｎｃｈ  ｈｉｓｔｏｒｙ  ｂｕｆｆｅｒ）であり得る。
【００４５】
図１に示す処理パイプラインは、いくつかの様々なソフトウェア・ワークロードの実行をサポートすることができる。ソフトウェア・ワークロードは、異なるプログラム・コードに従って実行する相異なるプロセスを含むことができるか、又は同じプロセスに対応する複数のスレッドを含むことができる。また、場合によっては、プロセス内の相異なる部分を、相異なるワークロードと見なすことができる。たとえば、プロセス内の特定のアドレス範囲を、個別のワークロードとしてマーク付けすることができる。
【００４６】
相異なるプロセスを同じパイプラインで実行する場合、通常、分岐予測器４はそれらのプロセス間で共有されている。相異なるプロセスは、同じ命令アドレスで異なる分岐動作をする可能性があるため、これは、所与の命令アドレスに対して分岐予測器構造体をルックアップすることにより、１つのプロセスに関係しない、なぜなら別のプロセスに基づいてトレーニングされている可能性がある、予測動作が提供される可能性があることを意味することができる。通常、１つのプロセスが、別のプロセスによってトレーニングされた分岐予測エントリにアクセスすることに起因する分岐予測の誤りは、セキュリティに影響を与えるのではなく、単に性能に影響を与える問題と見なされてきた。というのは、予測が正しくない場合、それは分岐が実際に分岐ユニット２１で実行されたときに検出され、分岐ユニットは次いで、パイプラインをトリガし、誤った予測に基づいて誤ってフェッチされた後続の命令をフラッシュすることができ、プロセッサの状態を、最後に正しく予測された命令によって得られた最後の正しい状態にまで戻すことができるからである。
【００４７】
しかし、予測誤りのアーキテクチャ上の影響は元に戻すことができるが、予測の誤りが、データ・キャッシュ３０又はＴＬＢ３６などのマイクロ・アーキテクチャ上の状態に、より長く続く影響を与える可能性がある。最近、攻撃者が分岐予測器４を不正利用して、攻撃者がアクセスしてはならなかった秘密情報へアクセスすることが可能であることが認識されてきた。メモリ管理ユニット３５は、特定の特権レベルで実行されるプロセスのみが、メモリの特定の範囲へのアクセスが許可されるように、特権スキームを適用することができる。たとえば図２に示すように、ある秘密データ５０は、攻撃者のプロセスはアクセス不可であり得るが（たとえば、攻撃者のプロセスは最低の特権レベルで実行されるので）、オペレーティング・システム又はハイパーバイザなどの、より高い特権レベルで動作するプロセスはアクセス可能であり得る。秘密データは、パスワード、個人の財務詳細など、秘密性が高いと考えられる任意のデータであり得る。攻撃は、分岐予測器４のトレーニングに基づいている可能性があり、その結果、プロセッサのより高い特権がある状態で実行される犠牲者コード内の分岐は、秘密５０に関係のない犠牲者コードの分岐における分岐予測が誤っていたため、より高い特権がある犠牲者コードが、実行することを意図していないのに誤って実行する、あるガジェット・コード５２に分岐する。ガジェット・コードは、秘密データ５０に基づいて計算されたメモリ・アドレスにアクセスするよう攻撃者が設計でき、それにより秘密データに依存するメモリ・アドレスに関係付けられたデータ（又はＴＬＢエントリなどの他の情報）が、データ処理システムのキャッシュ３０、３２、３６の１つにロードされる。
【００４８】
より具体的には、攻撃者は、エントリ５４が分岐予測器４の分岐ターゲット・バッファに確実に割り当てられ、それにより、分岐命令アドレス＃ｂにある命令が実行されると、ＢＴＢがガジェット・コード５２の場所に対応するターゲット・アドレス＃ｇの予測を返す、以前に実行された命令のパターンを有している可能性がある。分岐命令アドレス＃ｂが、攻撃者によって選択される可能性があり、その結果＃ｂは、犠牲者コード内の特定の分岐命令５６のアドレスに対応する（或いは、＃ｂは、犠牲者コードの非分岐命令のアドレスであり得る。というのは、分岐予測器４のいくつかの形態は、分岐の実際のターゲット・アドレスの予測に加えて、命令がそもそも分岐命令であるかどうかを効果的に予測することもできるため、非分岐命令が＃ｇへ分岐する分岐命令であると予測するように分岐予測器を誤ってトレーニングしても、同じ効果が得られるからである）。
【００４９】
したがって、犠牲者コードは、実行されると、アドレス＃ｂで命令５６に到達し、分岐予測器４がルックアップされると、＃ｇのターゲット・アドレスが返され、アドレス＃ｇでより高い特権のある犠牲者コードをガジェット・コード５２に切り替えさせることができる。プロセッサは、依然として犠牲者コードに関係付けられたより高い特権状態にあるので、攻撃者が提供したガジェット・コード５２はここで、攻撃者の特権がより低いコードはアクセスできないメモリの範囲へのアクセスを可能にし得る、犠牲者コードに提供されるのと同じアクセス権限を持って実行される。ガジェット・コードには、秘密データ５０をロードする第１のロード命令５８と、第１のロード命令５８によってロードされた秘密の関数として計算されるターゲット・アドレスからデータをロードする、第２のロード命令６０とが含まれ得る。攻撃者は、このアドレス計算関数を選択した可能性があり、その結果、秘密の値（又は秘密の選択されたビットの値）に応じて計算されたアドレスでは、図２の左側の部分に示すように、複数の値６２、６４の１つを取得することができる。この実例では、簡略にするために、計算されたアドレスの２つの可能性のある値６２及び６４を示しており、これはたとえば、計算されるアドレスが、秘密から抽出された単一のビットに依存する関数に基づくものであってもよい。秘密のより多くのビットに基づいて関数が計算される場合、計算されるアドレスでは、３つ以上の相異なる値を取得できることが理解されよう。したがって、秘密の値に応じて、相異なるアドレスに関係付けられた情報をメモリからロードすることができ、これによりエントリが、アドレス６２、６４の１つに対して、キャッシュ構造体３０、３２、３６に割り当てられ得る。
【００５０】
アドレス６２、６４の１つに対して新しいエントリを割り当てると、他のエントリがキャッシュ構造体３０、３２、３６の１つから削除されるという結果になる可能性もある。キャッシュ構造体は、所与のアドレスに対するエントリが、キャッシュ構造体内のどの場所にでも割り当てられるのではなく、限られた場所のセットの１つにしか割り当てられ得ないことを意味する、セットアソシアティブ方式で実現され得ることが多い。同じセット内にインデックスを付けるアドレス群は、前もって知ることができるか、又は、アドレスの相異なるパターンにアクセスするのにかかる時間を分析して、どのアドレスがキャッシュ・リソースについて競合し、アクセスによる遅延を増加させる傾向があるかを推定することによって、推測できる。したがって、攻撃者は、どのアドレスがキャッシュから削除されたかをキャッシュ・アクセス・タイミングから推測して、２番目のロード６０によってロードされた情報のための場所を空け、ひいては潜在的な候補アドレス６２、６４のどれが秘密に基づいて計算されたかを判断することができる可能性がある。すなわち攻撃者は、いくつかのアドレスへのキャッシュ・アクセス・タイミングを測定することで、秘密に関する何らかの情報を推測できる。この情報は、秘密を完全に識別するのには十分ではないかもしれないが、たとえば攻撃者は、秘密の様々な部分を使用して、様々なアドレス計算関数を使って攻撃を複数回繰り返すことにより、攻撃者がアクセスを許可されてはならない何らかの秘密性の高いデータを導き出すために、秘密に関するより多くの情報を徐々に継ぎ合わせることができる。
【００５１】
図２は、分岐予測器を使用して秘密情報を攻撃し、秘密情報をより低い特権コードが見られるようにする、可能性のあるやり方の単なる一実例を示している。この形態の攻撃は、セキュリティ・ニーズ及び信頼レベルが異なる多くの様々な実行コンテキストが、単一の分岐予測器状態のセットを共有する場合が多いという事実を不正利用して、攻撃者が別のプロセスの実行に影響を与え、別のプロセスの分岐パターンを監視できるようにする。攻撃者が、分岐予測状態を変更して多数の誤って予測される分岐を引き起こすことにより、他のプロセスの性能を低下させるためのやり方も提示する。
【００５２】
こうした種類の攻撃に対する１つの可能な軽減策は、コンテキストの切り替えが発生するたびに分岐予測器から分岐予測状態をフラッシュすることであり得る。しかしこの手法は、所与のプロセスが、別の実行スロットに戻るたびにその分岐予測状態をもう一度最初から導き出さなければならない可能性があり、性能に影響を与える多くのさらなる予測の誤りを引き起こし得るので、代償が大きい場合がある。別の手法は、（分岐方向予測器又はＢＴＢの）分岐予測状態の各アイテムにプロセス識別子をタグ付けして、それにより分岐予測状態が、現在実行中のプロセスと同じプロセスによって割り当てられた場合にのみ使用されるようにすることであり得る。しかし該手法もやはり、異なる分岐予測状態のセットを必要とする、それぞれ個別のソフトウェア・ワークロードを一意に識別するために、比較的多数のビットを有する識別子を必要とする可能性があるので、回路面積及び電力の点から代償が大きい場合がある。実際には、分岐予測状態のエントリは、比較的小さい可能性があり、特に分岐方向予測器については、個々の分岐予測のエントリが２ビットくらいの小ささであり得る。したがって、分岐予測器のすべてのエントリに追加のワークロード識別子を加えると、分岐予測構造体、及び現在のワークロード識別子を分岐予測エントリの識別子と比較する、対応する比較ロジックに必要な記憶容量が大幅に増加するという結果がもたらされ得る。またこの手法では、より大きな総数のエントリが分岐予測器に提供され、それにより同じマイクロ・アーキテクチャ上の構造体内の、様々なソフトウェア・ワークロードに対する別個の分岐予測状態の、複数のセットに適応することができる必要があろう。
【００５３】
以下で論じる手法では、すべての分岐予測状態を分岐予測器４自体に格納するのではなくて、個々のソフトウェア・ワークロードに対応する分岐予測器状態のセット６０が、分岐予測器４のマイクロ・アーキテクチャ内に設けられた、より小さな分岐予測キャッシュ構造体４０、４１、４２にバッキング・ストアを提供できる、メモリ・システム３０、３２、３４に格納され得る。分岐予測状態の各セット６０は、個々のプロセス、プロセス群、プロセス内の特定のアドレス範囲にあるコードの一部、所与のプロセス内の連続するワークロード分割命令間にあるコードの一部、又は同じプロセスに対応するいくつかのスレッドの個々のスレッドであり得る、個々のソフトウェア・ワークロードに対応することができる。ラインフィル及び書戻し制御回路４４は、分岐予測キャッシュ４０〜４２とメモリ・システム３０、３２、３４との間の分岐予測状態の転送を制御することができる。
【００５４】
図１では、簡略にするために、主メモリ内の分岐予測状態のセット６０は主メモリ３４内にのみ示しているが、このデータの一部をさらにキャッシュ３０、３２にも割当てできることが理解されよう。分岐予測状態のセット６０は、たとえば、オペレーティング・システム又はハイパーバイザなどの監視プロセスによって、対応するソフトウェア・ワークロードに割り当てられるメモリ範囲に格納することができる。場合によっては、分岐予測状態のセット６０は、対応するソフトウェア・ワークロード自体がアクセスできないメモリ範囲に割り当てられてもよく、それにより所与のワークフローは、それ自体の分岐予測データを見ることができない。分岐予測データセット６０を格納するメモリの範囲は、攻撃者が、所与のソフトウェア・ワークロードに対する分岐予測状態を破損できなくするために、分岐予測状態のセットへの書き込みが許可されるシステムの唯一の要素がラインフィル／書戻し制御回路４４となり得るように、ロード・ストア・ユニット２６内で実行される命令に対してのみ読み取られ得る。したがって、分岐予測状態（分岐方向予測状態ＢＰ、分岐履歴バッファ状態ＢＨＢ、及び分岐ターゲット・バッファ状態ＢＴＢのうちの１つ、２つ、又はすべてが含まれ得る）をメモリ・システム３０、３２、３４（ＲＡＭ内）に格納することによって、それぞれがそれ自体の分岐予測状態のセットを有する、多数のプロセス又はソフトウェア・ワークロードをサポートすることができる。場合によっては、様々なソフトウェア・ライブラリ又は様々なブラウザ・タブに、それ自体の分岐予測状態のセットを持たせてもよい。分岐予測キャッシュ構造体４０〜４２は、パイプラインが所与のソフトウェア・ワークロードからの命令を実行しているとき、予測を行うために、確実にそのワークロードに対応するセット６０からの分岐予測状態しか使用できないよう配置され得る。これにより、分岐予測状態の１つのセット６０に関係付けられた攻撃者のプロセスが、別の分岐予測状態のセットを用いて実行している別のプロセスに影響を与えることになるやり方で、分岐予測状態をトレーニングすることがもはや不可能になるので、図２に示す形態の攻撃を軽減する。図１は、ＢＤＰ、ＢＨＢ、及びＢＴＢのすべてが、主メモリのバッキング・ストアに格納される分岐予測状態のキャッシュとして機能する実例を示しているが、これは必須ではなく、他の実例では、１つ又は複数のこうした構造体からの状態（たとえばＢＨＢ）は、メモリに保存されるのではなく、ワークロードの切替え時に単に破棄されてもよく、一方他の形態の分岐予測状態は、依然としてメモリ３４に保存されてもよい。
【００５５】
図３は、分岐予測キャッシュ構造体４０〜４２の実例をより詳細に示す。簡略にするために、これらの構造体はすべて、以下で分岐予測キャッシュと呼ぶことにする。分岐予測キャッシュは、分岐が起きる／起きない、の結果を予測する情報をキャッシュする分岐方向予測キャッシュ４０、分岐履歴バッファに対応する分岐履歴情報の一部をキャッシュするＢＨＢキャッシュ４１、又は分岐ターゲット・アドレスの予測をキャッシュするＢＴＢキャッシュ４２のいずれかであり得ることが理解されよう。
【００５６】
分岐予測キャッシュ４０〜４２は、それぞれが対応する命令アドレスのブロックに対する予測を提供するいくつかのエントリ６４を備える。各エントリは、エントリが有効なデータを提供するかどうかを示す有効フラグ６６、エントリ６４によって提供される予測が、エントリが割り当てられた後に変更されているが、メモリ３４に格納された分岐予測状態の対応するセット６０にまだ書き戻されていないかどうかを示す汚れフラグ６８、どのエントリが特定のアドレスに関係するかを識別するために使用されるアドレス・タグ７０、及び対応するアドレスのブロックに対する予測された分岐結果を提供する予測状態７２を備えることができる。キャッシュの配置構成は、図３に示すものとは異なる可能性があり、各エントリは、図３に示していない他の形態の情報を備え得ることが理解されよう。
【００５７】
図３に示すように、分岐予測キャッシュ４０〜４２（又は一般に、分岐予測器４）は、ラインフィル／書戻し制御回路４４を介してフェッチ工程６、実行工程１８、及びメモリ・システム３０、３２、３４とのインタフェースを備えることができる。分岐予測キャッシュは、フェッチ工程６から提供されたターゲット命令アドレス７０に基づいてルックアップでき、そのターゲット命令アドレスに対応するエントリが分岐予測キャッシュ内にある場合、キャッシュは、対応する分岐結果の予測７２をフェッチ工程へ返し、予測７２は、命令キャッシュ８からの後続の命令のフェッチを制御するために使用される。
【００５８】
所与のターゲット命令アドレス７０がキャッシュ・ミスした（現在、その命令アドレスに対応する有効なエントリがない）場合、現在のソフトウェア・ワークロードに対応するセット６０からの、分岐予測状態の関係するアイテムを格納する、関係するメモリ・アドレスを計算し、次いで関係するエントリをキャッシュにフェッチするためにメモリ・システムに要求を発行する、エントリ選択回路４５を備えることができるラインフィル／書戻し制御回路４４に、ラインフィル要求７４が発行され得る。場合によっては、関係する分岐予測状態を分岐予測キャッシュ４０〜４２にロードすることを要求するメモリ・アクセス要求は、ロード・ストア・ユニット２６及び／又はＭＭＵ３５を経由することがある。或いは、ラインフィル／書戻し制御部４４は、メモリへの別個のインタフェースを備えることができる。分岐予測状態は、物理アドレス又は仮想アドレスにアサインすることができ、仮想アドレスにアサインされる場合、関係する分岐予測状態を格納する実際の物理アドレスを生成するために、ＴＬＢ３６を使用したアドレス変換が必要になる場合がある。
【００５９】
最終的に、ラインフィル要求に応答して、要求された分岐予測状態データを提供するメモリ・システムから、ラインフィル・フェッチの応答７６が返され、次いで該応答は、分岐予測キャッシュ４０〜４２の所与のエントリに割り当てられ得る。新しく割り当てられたエントリのための場所を空けるために、他の分岐予測状態データを削除する必要があり、削除されるエントリのデータが汚れフラグ６８で示される汚れたデータであった場合、書戻し要求７８がメモリ・システムに送信され得る。マルチプロセッサ・システムでは、複数のプロセッサが同じ分岐予測データのセットを共有する場合、いくつかの実例では、１つのプロセッサによってトリガされた分岐予測状態の書戻しが、他のプロセッサの分岐予測キャッシュ４０〜４２内に同じ分岐予測データをキャッシュすることができた他のプロセッサから確実に見ることができるようにする、コヒーレンシ方式が適用され得る。ただし、１つのプロセッサの分岐予測状態と、対応する分岐予測状態との間のコヒーレンシを保証することは、必須ではない。というのは実際には、分岐予測状態に一貫性がなくなった場合、そのペナルティは誤った処理の結果ではなく、単に予測の誤りだからであり、そのため他の実施態様では、回路面積及び複雑度を無駄遣いしないように、マルチプロセッサ・システムの相異なるプロセッサにキャッシュされた分岐予測状態についてコヒーレンシを保証しないことが好ましい場合がある。
【００６０】
命令が、分岐予測器４で行われた分岐予測に基づいて投機的にフェッチされ、デコードされ、発行され、且つ実行されると、最終的に実際の分岐結果３８は、実行工程１８から返され、分岐予測キャッシュ４０〜４２の関係するエントリで現在示している予測と比較され得る。分岐が誤って予測された場合は、予測を更新して、将来予測が正しくなる可能性を高めることができる。たとえば、異なる予測の信頼度が、以前の予測を上書きするのに十分なほど高くなった場合、信頼度カウンタを増減でき、そして予測結果を変更できる。実際の分岐結果３８が返されることによって予測が変更される場合、汚れフラグ６８をセットすることができ、それにより後で、この分岐予測状態の削除によって書戻し要求７８がトリガされ、メモリ・システム内の分岐予測状態のうち対応するものが更新されることになる。
【００６１】
処理がソフトウェア・ワークロード間で切り替わると、信号８０が、ワークロードの切替えを検出できるパイプラインの任意の要素によって、分岐予測器４に供給される。たとえばフェッチ工程６が、命令フェッチ・アドレスが相異なるソフトウェア・ワークロード間の境界をマーク付けするプログラム命令アドレスに達したことを認識できるか、又はデコード工程１０が、ワークロード分割命令が発生したのを検出し、分岐予測器にワークロードの切替えを通知できる。また、実行工程１８は、ワークロードの切替えが検出されたときにマーク付けして、これを分岐予測器４に知らせることができる。また場合によっては、ワークロードの切替えは、割込み又は例外によってトリガされてもよく、この場合、ワークロード切替信号８０は、割込コントローラから送信されてもよい。ワークロード切替信号８０の発信源にかかわらず、ワークロード切替信号８０に応答して、分岐予測キャッシュ４０〜４２は、各エントリの有効ビット６６をクリアすることにより、分岐予測キャッシュ内のすべてのエントリを無効化することができる。これにより、前に割り当てられたどのような分岐予測状態も、前のワークロードに基づいてトレーニングされていたときに、次に来るワークロードに対する予測を行うのに、確実に使用されなくなるであろう。エントリ６４のいずれかが、汚れフラグ６８によってマーク付けされた汚れた予測データを含んでいた場合、書戻し要求７８がラインフィル／書戻し制御回路４４によってトリガされ、汚れた状態を、メモリ・システムの分岐予測状態の対応するセットに書き戻させることができ、それにより、終了する（ｏｕｔｇｏｉｎｇ）ワークロードは、後で再度実行される場合、実際の分岐結果４８に基づいてトレーニングされた、以前に導き出された予測のいずれかから恩恵を受けることができる。
【００６２】
図４は、ワークロード間のコンテキスト・スイッチの実例を示す。最初にワークロード０が実行され、次いでワークロード・スイッチ（又はコンテキスト・スイッチ）８２が発生して、処理パイプラインをトリガしてワークロード１に切り替える。上記で論じたように、この時点で、分岐予測キャッシュ４０〜４２のすべてのエントリが無効になり、どの汚れた状態も、ワークロード０に関係する分岐予測データセットに書き戻される。次に来るワークロード１に関係する分岐予測状態をキャッシュに入力するために、ワークロード・スイッチ８２は、ラインフィル／書戻し制御回路４４もトリガし、ワークロード１に関係する分岐予測状態のセット６０の少なくとも最初の部分について、メモリ・システムにフェッチ要求を発行する。場合によっては、この時点で、ワークロード１に対する分岐予測状態のセット全体を要求できる。ただし、性能を向上させるためには、状態を、要求に応じてより小さい部分、たとえば一度に１キャッシュ・ラインをロードする方が、より効率的であり得る。したがって、分岐予測状態のセット６０は、分岐予測キャッシュ４０〜４２によって一時的にキャッシュされるいくつかの部分に分割され得るが、必要に応じて、より低いレベルのメモリ階層に書き戻され得る。これにより、コンテキスト切替えによる遅延が短縮され、状態の全体的なサイズに制限を課す必要がなくなる。
【００６３】
次に来るワークロードに対する分岐予測状態のセットのすべてがワークロードの切替えに応答してロードされるわけではない場合、キャッシュが、フェッチ工程６から提供されるターゲット・アドレス７０に対する有効なエントリを現在有していないと、後で分岐予測キャッシュ４０〜４２でのミス８４が検出され得る可能性がある。したがって、分岐予測キャッシュでのミスがある場合、もう一度ラインフィル要求７４がトリガされ、ワークロード１の分岐予測状態のセット６０の対応する部分が要求され得る。
【００６４】
別のオプションは、図１に示すように、分岐予測状態プリフェッチャ８６を提供することであり得る。分岐予測状態プリフェッチャは、分岐予測キャッシュ４０〜４２でルックアップされた一連の命令アドレスが供給され、連続したアドレス間に一定のオフセットを持つアドレスのストライド・パターンが検出されるかどうかを検出する。ストライド・パターンが検出された場合、プリフェッチャは、ラインフィル／書戻し制御回路４４をトリガし、予測されたアドレスのストライドの間隔で、現在の実行ポイントを超えて広がるアドレスに関係する分岐予測状態データについて、追加のラインフィル要求をメモリ・システムに発行できる。実際のアドレスのパターンがもはやストライド・パターンに従っていないことが検出された場合、かかるプリフェッチは、別のストライド・パターンが検出されるまで停止され得る。たとえば、命令を命令キャッシュ８にプリフェッチするために使用されるどのような既知のプリフェッチ技法もまた、分岐予測キャッシュ４０、４１、４２に適用される可能性がある。
【００６５】
分岐予測キャッシュ４０〜４２がコンテキスト切替え時に無効化され、その結果、次に来るソフトウェア・ワークロードが、別のソフトウェア・ワークロードの実行により得られた結果に基づいて入力されたエントリ６４にヒットする可能性はないので、これは、各エントリ６４にワークロード識別子をタグ付けする必要はなく、上記で論じた攻撃を依然として軽減しながらも、分岐予測キャッシュ４０〜４２を実現するための面積上のオーバヘッドを削減することを意味していることに留意されたい。
【００６６】
分岐予測キャッシュは、分岐予測状態をキャッシュすることができ、それにより、なにがしかの最小粒度のサイズの、隣り合うアドレスのブロックに対して、分岐命令結果の別個の予測を行うことができる。たとえば、最小粒度のサイズがたとえば１６バイトの場合、これは、１６バイトのブロック内のすべての命令で、そのブロックに対して常に同じ分岐結果が予測される可能性があるが、隣り合う１６バイトのブロックの命令では、前のブロックと比較して、異なる予測が行われる可能性があることを意味し得る。多くの場合、複数の分岐が同じブロック内に出現することは比較的まれであり得るので、なにがしかの最小粒度のサイズを定義することにより、分岐予測器のオーバヘッドを削減でき、かかる複数の分岐の場合を予測するための追加の構造体を提供できるか、或いはＢＴＢ内の予測状態７２は、１つのブロックに複数の分岐がある重要な場合（ａｃｃｏｕｎｔ  ｃａｓｅ）についての情報を含めるために拡張できる。
【００６７】
ただし、最小粒度のサイズの隣り合うブロックに対して別個の予測を行うことができるが、その最小粒度のサイズのアドレスの可能なすべてのブロックに対する完全に別々の分岐予測アイテムを、分岐予測セット６０内に維持できるだけの、十分な分岐予測状態のアイテムを提供することは、非常にコスト高になる可能性がある。その代わりに、最小粒度のサイズの相異なるアドレスのブロックは、分岐予測状態データの同じアイテムを共有でき、所与の命令アドレスから対応する分岐予測状態のアイテムへのマッピングは、アドレスに適用されるあるハッシュ関数に基づいて決定され、ハッシュ関数は、より大きいアドレスを、そのアドレスにアクセスする分岐予測状態の特定のアイテムのより小さい識別子にマッピングする。
【００６８】
典型的な分岐予測器では、かかるハッシュ関数は、局所性をできるだけ少なくするよう設計されることが多い。ハッシュ関数の局所性とは、アドレス空間の近くの範囲にあるアドレスが、分岐予測状態の同じアイテムにマッピングされがちであるという特性を指す。したがって、局所性をほとんどもたらさないハッシュ関数を使用すると、アドレス空間の非常に相異なる部分からのアドレスが同じ分岐予測状態を共有する可能性が高くなりがちであり、一方アドレス空間内の近くの範囲のアドレスは、分岐予測状態の相異なるアイテムにマッピングされがちであろう。これは、プログラム・コードの近くの範囲にある分岐が、同じ分岐予測エントリへのアクセスで競合するホットスポットをなくするために、一般的な分岐予測器にとって望ましい場合がある（ホットスポットは、競合するやり方で分岐予測器をトレーニングし、その結果どちらの範囲も実際の分岐予測結果のための適切な予測を受け取らないので、性能が低下するという結果になる可能性がある）。対照的に、アドレス空間でさらに離れている命令アドレスでの分岐は、パイプライン内で、互いに近くで実行される可能性がより低く、処理が所与のアドレスに達するときまでに、アドレス空間内で遠く離れている別のアドレスに対して行われた分岐結果の予測は、関係する可能性がより低くなる。したがって、標準の分岐予測のハッシュ方式は、局所性を減らし、アドレス空間の相異なる部分からのアドレスを予測状態の同じアイテムに、典型的には分岐予測構造体自体が使用する最小粒度の粒度のサイズと同じ粒度で、マッピングする傾向がある。
【００６９】
対照的に、図１に示す、ＲＡＭ３４がキャッシュされた予測構造体４０〜４２のバッキング・ストアとして使用される手法では、かかる従来の分岐予測ハッシュ方式は、不十分な性能しか提供できないであろう。ハッシュ方式に局所性がほとんどない場合、これは、処理パイプラインがプログラム命令のいくつかの隣接するブロックをステップ実行するときに、各ブロックが現在のソフトウェア・ワークロードに対応するセット６０内の分岐予測状態の相異なるアイテムにマッピングされる可能性があることを意味し、ラインフィル／書戻し制御回路４４によって多数のラインフィル・フェッチ要求が発行されるという結果をもたらし、コンテキスト切替えによる遅延、及び分岐予測状態の転送に必要なメモリ帯域幅を増加させ得る。したがって、標準のハッシュ方式は、分岐予測キャッシュ４０〜４２の性能を低下させるという結果をもたらし得る。
【００７０】
図５Ａ及び図５Ｂは、局所性を改善するように、分岐予測状態の適切なエントリの選択を生成するために使用される、分岐予測キャッシュ４０の再構成及びハッシュ・アルゴリズムのための手法を示す。図５Ａに示すように、所与のソフトウェア・ワークロードに対する分岐予測状態６０のセットは、１回のデータ転送でサブ・テーブル９０が分岐予測キャッシュ４０〜４２に転送できるユニットのサイズの、いくつかのサブ・テーブル９０に分割することができる。すなわち、各サブ・テーブル９０のサイズは、１つのキャッシュ・ラインと一致し得る。各サブ・テーブルは、いくつかの別々の予測状態のアイテムを含むことができ、予測状態の各アイテムは、最小粒度のサイズＳの、所与のアドレス範囲に対応する。したがって、サイズＳの各アドレス範囲に、サイズＳのアドレスの隣り合うブロックに対して行われた予測とは別に行われた、別個の予測があり得る。
【００７１】
図５Ａの左側のサイズに示すように、所与のアドレスに対して予測を行うよう適切なサブ・テーブル９０を選択するために適用されるハッシュ関数は、アドレスを、サイズＳより大きいサイズＴの、連続するアドレス範囲に対応するブロック内のサブ・テーブルにマッピングするものであり得る。したがって、この実例では、図５ＡでＢとマークされた連続するアドレス範囲内のすべてのアドレスは、それぞれ同じサブ・テーブル９０−Ｂにマッピングすることができる。図５Ａの上部に示すように、これは、たとえば、ターゲット・アドレスの第１の部分９４を使用して、アクセスされるべき特定のサブ・テーブル９０を選択し、次いでサブ・テーブル内の個々の予測エントリを選択するためのハッシュ関数９６を、アドレスの残りの（第２の）部分９８に適用することにより実現できる。この実例では、第１の部分９４はアドレスの中間部分にあり、それにより第２の部分９８は、第１の部分よりもあまり重要でないビット及び第１の部分よりも若干重要なビットを含んでいる。他の実例では、第１の部分９４はアドレスの上端にあってもよく、それにより、より重要でないビットのみがハッシュ関数９６に入力される。一部のアドレスビットは、サブ・テーブルの選択及びハッシュ関数９６のどちらにも使用できない（たとえば図５Ａに示すように、下部は無視され得る）。アドレスの第２の部分に適用されるハッシュ関数９６は、局所性をほとんどもたらさないよう設計された、標準的な分岐予測ハッシュ関数と同様の設計のものであり得る。しかし、このハッシュ関数から第１の部分９４を除外することにより、これは、かかる標準的なハッシュ関数と比較して局所性が増すことを意味する。これは、サイズＴの連続したアドレス範囲内にあるサイズＳのすべてのアドレスのブロックについて、そのサイズＴのアドレス範囲内の任意の分岐の分岐結果を予測するために必要なすべての関係する分岐予測状態を、１回のデータ転送で分岐予測キャッシュ４０〜４２に転送できることを意味する。これは、サイズＴの範囲内のアドレスに対する分岐結果を予測するために必要な、メモリへの個別のアクセス回数を減らすことにより、性能向上に役立つ。
【００７２】
いくつかの実例では、ターゲット・アドレスに加えて、ＢＨＢ４１に含まれる分岐履歴情報を、分岐予測状態へのインデックスを生成するために使用される、ハッシュ関数９６への追加入力として使用することができる。これは、（前の分岐の結果に応じて）プログラム内の同じ分岐命令への相異なるルートを区別するのに役立つことができ、より正確な予測を行うのに役立つことができる。
【００７３】
図５Ｂは、分岐予測状態が図５Ａに示すように配置されるときに使用するための、分岐予測キャッシュの代替の配置構成を示す。図５Ｂでは、やはり各エントリ６４は図３と同様に、有効ビット６６、汚れビット６８、及びアドレス・タグ７０を有する。ただし図５の予測フィールド７２は、図５Ａに示すように、ターゲット・アドレスの第１の部分９４に基づいて選択されたサブ・テーブル９０をキャッシュする。エントリ６４の１つについて示すように、各サブ・テーブルは、この場合、最小粒度のサイズＳの相異なるアドレスのブロックにそれぞれ対応する、予測状態のいくつかの個別のアイテム１００を含むことができる。したがって、この配置構成では、各エントリ６４は、サイズＴのアドレスのブロックに対応するが、サイズＳの個々のブロックに対する個別の予測を含み、ここでＴはＳよりも大きい。この場合、分岐予測キャッシュにアクセスするとき、どのエントリ６４にアクセスするかを選択するインデックス１０２は、図５Ａに示すのと同じやり方でターゲット・アドレスの第１の部分９４から得られ、次いでアドレスの第２の部分９８（及びオプションでＢＨＢ４１からの分岐履歴）がハッシュ関数９６に入力され、次いでハッシュ関数は、図５Ｂの下部に示すように、インデックス付きエントリ６４内の個々の予測アイテム１００を選択するために使用される。
【００７４】
したがって、図５Ａ及び図５Ｂでは、各キャッシュのエントリは、アドレス空間のあるサブセットのための別個のＢＰ／ＢＴＢとして機能する。たとえば、キャッシュの粒度が６４バイトのサイズに選択され、利用可能なＲＡＭ空間が１６ｋバイトである場合、２５６個の別個のＢＰ／ＢＴＢをＲＡＭに格納できる。ルックアップを実行するときの簡単な方式は、ソース・アドレスのビット１９：１２を使用して、どのＢＰ／ＢＴＢのルックアップを実行するかを決定し、次いで通常のやり方で、６４バイトのサブＢＴＢ／ＢＰ内で、ＢＰ／ＢＴＢのルックアップを実行することであろう。この特定の実例では、結果としてメガバイトごとにエイリアシングが生じることになり、これを軽減するためにハッシュが使用され得る。
【００７５】
図６は、所与のターゲット命令アドレスに対する予測のために、分岐予測器４をルックアップする方法を例示する流れ図を示す。ステップ１５０で、ターゲット命令アドレスが分岐予測器４に供給される。ステップ１５２で、分岐予測キャッシュ４０〜４２に関係するキャッシュ・ルックアップ回路は、ルックアップされたアドレスに対してヒットしたか又はミスしたかを判断する。キャッシュ構造体のインデックス付きエントリが、アドレス・タグ７０がターゲット命令アドレスの対応する部分と一致する有効なエントリを含む場合、ヒットが生じる。図６は、分岐予測キャッシュに関して一般的に説明しているが、分岐予測キャッシュは、方向予測キャッシュ４０又は分岐ターゲット・バッファ・キャッシュ４２のいずれかであり得ることが理解されよう。
【００７６】
分岐予測キャッシュ内でヒットする場合、ステップ１５４で、分岐命令の予測された結果が、ターゲット・アドレスに対してヒットする、一致するエントリに基づいて決定される。予測された結果はフェッチ工程６に戻すことができ、フェッチ工程は次いで、予測された分岐結果に基づいて後続の命令をフェッチすることができる。実行工程１８で、ターゲット命令アドレスに対応する命令の実際の結果がわかると、実際の結果を分岐予測器に戻すことができ、ステップ１５６で、分岐予測器は、実際の結果を示された予測状態と比較し、予測の信頼度レベル又は予測自体を変更する必要がある場合は予測状態を更新することができる。
【００７７】
ステップ１５２で、分岐予測キャッシュ４０〜４２でミスが検出された場合、ステップ１６０で、ラインフィル及び書戻し制御回路４４は、状態フェッチ要求（又はラインフィル要求）をトリガして、現在のワークロードに対応する予測状態データのセット６０の対応する部分を、関係する分岐予測キャッシュ４０〜４２にフェッチすることを要求する。
この時点で、エントリ選択回路４５は、図５Ａに示す手法を適用することにより関係する分岐予測状態のアドレスを生成し、適切なサブ・テーブルを選択し、次いでサブ・テーブルを、そのサブ・テーブルに対応するメモリ内の関連するアドレスにマッピングすることができる。たとえば、ラインフィル及び書戻し制御回路内のエントリ選択ロジック４５は、それぞれのワークロードに対する各サブ・テーブルのアドレスを指定するテーブルを備えることができる。ステップ１６２で、予測状態の対応する部分がラインフィル要求に応答して返されると、予測状態の対応する部分を格納するために、分岐予測キャッシュ４０〜４２内にエントリが割り当てられる。汚れデータがすでに含まれている犠牲者エントリが選択される場合、この汚れ予測状態は、メモリ・システムに書き戻される。終了するワークロードに関係する分岐予測キャッシュ４０〜４２内のすべてのエントリが、コンテキスト・スイッチに応答して書き戻されるシステムでは、分岐予測キャッシュでのミスによってトリガされたどの書戻しも、現在のワークロードに関係すると想定され得るため、この場合、分岐予測器で、コンテキスト・スイッチを超えてまで以前のワークロードのどのような識別も追跡する必要がないかもしれない。そうではなくて、その後の上書きが必要になるまで書戻しを延期することによりコンテキスト・スイッチのオーバヘッドを低減するシステムでは、分岐予測キャッシュは、以前に実行されたワークロードの追加の識別子を格納することができ、また各キャッシュのエントリ６４内に、汚れデータを含む無効なエントリが、現在のワークロード又は以前に実行されたワークロードに関係するかどうかをマーク付けするフラグを含めることができ、それにより書戻し時に、どの分岐予測状態のセットが汚れデータを書き戻される必要があるかを判断することができる。
【００７８】
ラインフィル要求がメモリ・システムによって処理されるのに時間がかかる場合があるので、ステップ１６４で、分岐予測器４は、ターゲット命令アドレスに対する予測結果７２として初期設定の分岐予測を返すことができる。初期設定の予測では、たとえば、使用可能な分岐予測状態がない場合、分岐は起きないと予測されるべきであり得る。初期設定の予測を行うことにより、関係する予測状態が返されるのを待っている間に後続の命令をフェッチし続けることができ、後続の命令の処理での遅延が低減される。初期設定の予測が正しくないことが判明した場合、他の分岐予測の誤りと同様に処理できる。ステップ１６６で、状態フェッチ要求に応答してメモリ・システム３０、３２、３４から分岐予測状態が返されると、分岐予測状態は、ステップ１６２で割り当てられた分岐予測キャッシュ４０〜４２のエントリに書き込まれる。実際の分岐結果３８が、この時点までにすでに利用可能であり、フェッチされた状態データによって示される現在の値と一致しない場合、フェッチされた状態データも、必要に応じて、上記のステップ１５６で説明したキャッシュの既存のエントリへの更新と同じやり方で、分岐結果に基づいて更新できる。
【００７９】
図７は、分岐予測器４でワークロードの切替えを処理する方法を示す流れ図を例示する。ステップ１７０で、ワークロード・スイッチ信号８０に基づいて、処理するワークロードの切替えが検出される。上記で論じたように、ワークロード・スイッチ信号は、たとえば、割込コントローラ、実行工程８０、フェッチ工程６、又はデコード工程１０によって提供され得る。ステップ１７２で、ワークロードの切替えに応答して、分岐予測キャッシュ４０〜４２は、各エントリ６４を無効としてマーク付けするために、有効フラグ６６をクリアすることによって、そのエントリのすべてを更新する。これにより、次に来るワークロードが前のワークロードによって割り当てられたエントリにヒットすることを防ぐ。ステップ１７４で、（汚れフラグ６８がセットされたエントリ内で示される）どの汚れ予測状態も、書戻し要求７８を発行することによってメモリに書き戻される。或いは、後続のラインフィル・フェッチ７６は、エントリの上書きが必要になるまで、書戻しを延期することができるが、この場合、どのエントリが次に来るワークロードに関係し、どのエントリが終了するワークロードに関係するかの、さらなら何らかの追跡が必要となり得る。この追跡は、各キャッシュのエントリ６４内で次に来るワークロードと終了するワークロードとを区別するのに、ただ１ビットのフラグで十分な可能性があるので、各エントリに完全なワークロード識別子をタグ付けするよりもさらに効率的であり得ることに留意されたい。すべてのエントリ間で共有される、終了するワークロードの識別子の個別の記憶部は、各キャッシュのエントリ６４で終了するワークロードを個々に識別することなしに、終了するワークロードを識別するのに十分であり得る。或いは、他のマイクロ・アーキテクチャの実施態様では、現在のワークロードの処理が開始されると、以前に実行されたワークロードからのどの残りの汚れたデータも考慮する必要がないように、コンテキスト・スイッチに応答して単にすべての書戻し要求を発行することにより、書戻しプロセスを簡略化する方が好ましい場合がある。
【００８０】
ステップ１７６で、ソフトウェア・ワークロードの切替えに応答して、ラインフィル／書戻し制御回路４４も、１つ又は複数の状態フェッチ要求７４を生成して、次に来る新しいワークロードに対する分岐予測状態のセット６０の少なくとも一部のフェッチを要求する。ワークロードの切替えに応答して要求される分岐予測状態のセットの一部は、分岐予測状態６０のセット全体の場合もあれば、より小さい部分の場合もあり、残りの部分は、必要に応じて要求があり次第フェッチされ、新しいワークロードの後続の処理で検出されるターゲット・アドレス７０に対する予測を生成する。
【００８１】
本出願では、「．．．するよう構成される」という用語は、装置の要素が、定義された操作を実行できる構成を備えることを意味するように使用される。これに関連して、「構成」とは、ハードウェア又はソフトウェアの相互接続の配置構成又は態様を意味する。たとえば、装置は、定義された操作を提供する専用のハードウェアを備えてもよく、又はプロセッサ若しくは他の処理デバイスを、機能を実行するようにプログラムしてもよい。「するよう構成される」は、定義された操作を提供するために、装置要素をいかなる形であれ変更する必要があることを示唆するものではない。
【００８２】
本発明の例示的な実施例を、添付図面を参照して本明細書で詳細に説明してきたが、本発明はそれらの正確な実施例に限定されるものではなく、当業者によってその中に、添付の特許請求の範囲によって定義される本発明の範囲及び精神から逸脱することなく、様々な変更及び修正を行うことができることを理解されたい。
【図１】
2021524621.tif 000003
【図２】
2021524621.tif 000004
【図３】
2021524621.tif 000005
【図４】
2021524621.tif 000006
【図５Ａ】
2021524621.tif 000007
【図５Ｂ】
2021524621.tif 000008
【図６】
2021524621.tif 000009
【図７】
2021524621.tif 000010
【国際調査報告】
2021524621.tif 000011
2021524621.tif 000012
2021524621.tif 000013