(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-04
(45)【発行日】2024-01-15
(54)【発明の名称】複数のソフトウェア・ワークロードのための分岐予測キャッシュ
(51)【国際特許分類】
G06F 9/38 20180101AFI20240105BHJP
G06F 12/0875 20160101ALI20240105BHJP
G06F 12/0842 20160101ALI20240105BHJP
G06F 21/60 20130101ALI20240105BHJP
【FI】
G06F9/38 330A
G06F9/38 380B
G06F12/0875 100
G06F12/0842
G06F21/60
(21)【出願番号】P 2020564474
(86)(22)【出願日】2019-05-09
(86)【国際出願番号】 GB2019051273
(87)【国際公開番号】W WO2019224518
(87)【国際公開日】2019-11-28
【審査請求日】2022-05-02
(32)【優先日】2018-05-24
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】リード、アラステア デイビッド
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許出願公開第2017/0153895(US,A1)
【文献】米国特許第06427192(US,B1)
【文献】米国特許第05838962(US,A)
【文献】米国特許第05327547(US,A)
【文献】米国特許第06108775(US,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
G06F 12/0875
G06F 12/0842
G06F 21/60
(57)【特許請求の範囲】
【請求項1】
複数のソフトウェア・ワークロードからの命令を処理するための処理回路と、
メモリ・システムに格納された分岐予測状態データの複数のセットから選択された分岐予測状態データをキャッシュするための分岐予測キャッシュであって、分岐予測状態データの各セットは、前記複数のソフトウェア・ワークロードの1つに対応する分岐予測キャッシュと、
所与のソフトウェア・ワークロードの分岐命令の結果を、前記所与のソフトウェア・ワークロードに対応する前記分岐予測状態データのセットからの、前記分岐予測キャッシュにキャッシュされた前記分岐予測状態データに基づいて予測する分岐予測回路と
、
前記所与のソフトウェア・ワークロードの所与の命令のターゲット・アドレスに応答して、前記所与のソフトウェア・ワークロードに対応する前記分岐予測状態データのセットから個々の予測を提供するための分岐予測状態データの対応するアイテムを選択する選択回路であって、前記所与のソフトウェア・ワークロードに対応する前記分岐予測状態データのセットは、複数のサブ・テーブルを含み、前記メモリ・システムから前記分岐予測キャッシュへの前記分岐予測状態データの転送は、サブ・テーブルの単位で行われる、前記選択回路と、
を備え
、
前記選択回路は、前記ターゲット・アドレスの第1の部分に基づいて前記複数のサブ・テーブルの1つを選択し、前記ターゲット・アドレスの第2の部分の関数に基づいて、前記選択された前記サブ・テーブルから分岐予測状態データの前記アイテムを選択するよう構成される、装置。
【請求項2】
前記処理回路が第1のソフトウェア・ワークロードの処理から第2のソフトウェア・ワークロードの処理に切り替わるのに応答して、前記分岐予測キャッシュは、前記第1のソフトウェア・ワークロードに対応する前記分岐予測状態データのセットのキャッシュされた分岐予測状態データが、
前記第1のソフトウェア・ワークロードに関係するエントリを無効化するよう構成される、請求項1に記載の装置。
【請求項3】
前記分岐予測キャッシュは複数のエントリを有し、分岐予測状態データの対応する部分をキャッシュするための各エントリは、分岐予測状態データのどのセットから、前記分岐予測状態データの対応する部分が選択されるかについての、どのような指示とも無関係である、請求項1に記載の装置。
【請求項4】
前記分岐予測キャッシュは、前記分岐予測キャッシュのすべての有効なエントリを、所与のソフトウェア・ワークロードに対応する分岐予測状態データの同じセットからの分岐予測状態データに確実に関係付けるよう構成される、請求項1に記載の装置。
【請求項5】
前記処理回路が第1のソフトウェア・ワークロードの処理から第2のソフトウェア・ワークロードに切り替わるのに応答して、前記分岐予測キャッシュは、前記第2のソフトウェア・ワークロードに対応する前記分岐予測状態データのセットの一部を前記分岐予測キャッシュ内にフェッチすることを要求するため、前記メモリ・システムへの少なくとも1つの状態フェッチ要求をトリガするよう構成される、請求項1に記載の装置。
【請求項6】
前記分岐予測状態データのセットの前記一部には、前記第2のソフトウェア・ワークロードに対応する前記分岐予測状態データのセットの適切なサブセットが含まれる、請求項5に記載の装置。
【請求項7】
前記分岐予測キャッシュは、分岐予測が必要な所与のソフトウェア・ワークロードの命令のターゲット命令アドレスに対する前記分岐予測キャッシュでのミスに応答して、前記所与のソフトウェア・ワークロードに対応する前記分岐予測状態データのセットの対応する部分を、前記分岐予測キャッシュ内にフェッチすることを要求するため、前記メモリ・システムへの少なくとも1つの状態フェッチ要求をトリガする、請求項1に記載の装置。
【請求項8】
前記分岐予測キャッシュは、前記分岐予測キャッシュからの汚れた分岐予測状態データの削除に応答して、前記汚れた分岐予測状態データを前記メモリ・システムに書き戻すことを要求する、少なくとも1つの書戻し要求をトリガする、請求項1に記載の装置。
【請求項9】
前記分岐予測キャッシュは、所定のサイズのアドレス範囲に対応する粒度で、分岐予測状態情報のアイテムをキャッシュするよう構成され、それにより前記分岐予測回路は、前記所定のサイズの隣接するアドレス範囲内のアドレスに対して、分岐命令の前記結果の相異なる予測を行うことができ、且つ
前記装置は、前記分岐予測キャッシュと前記メモリ・システムとの間で、所与のサイズのユニットで分岐予測状態データを転送する状態転送回路を備え、各ユニットには、命令アドレスの少なくとも1つのブロックに対する分岐予測を行うための分岐予測状態データが含まれ、前記命令アドレスの少なくとも1つのブロックのそれぞれは、前記所定のサイズよりも大きいサイズの連続するアドレス範囲をカバーする、請求項1に記載の装置。
【請求項10】
分岐予測が将来必要になると予測されるアドレスに関係する分岐予測状態データを、前記分岐予測キャッシュ内にプリフェッチする分岐予測状態プリフェッチャを備える、請求項1に記載の装置。
【請求項11】
前記分岐命令の前記結果は、前記分岐命令のターゲット・アドレスを含む、請求項1に記載の装置。
【請求項12】
前記分岐命令の前記結果は、分岐が起きるか又は起きないかを含む、請求項1に記載の装置。
【請求項13】
前記ソフトウェア・ワークロードの少なくとも1つについて、所与のソフトウェア・ワークロードに対する前記分岐予測状態データのセットは、前記所与のソフトウェア・ワークロードがアクセスできないメモリ範囲に格納される、請求項1に記載の装置。
【請求項14】
各ソフトウェア・ワークロードは、
前記処理回路によって実行されるソフトウェア・プロセスと、
前記処理回路によって実行されるソフトウェア・プロセス群と、
ソフトウェア・プロセスの特定の部分と、
特定のアドレス範囲内の命令アドレスを有するソフトウェア・プロセスの命令と、
1つ又は複数のワークロード分割命令によって区切られたソフトウェア・プロセスの一部と、
同じプロセスに対応する前記処理回路によって実行される複数のスレッドの1つ、又は、前記複数のスレッドの中のスレッドのサブグループと
のうちの1つを含む、請求項1に記載の装置。
【請求項15】
複数のソフトウェア・ワークロードからの命令を処理する手段と、
メモリ・システムに格納された分岐予測状態データの複数のセットから選択された分岐予測状態データをキャッシュする手段であって、分岐予測状態データの各セットは、前記複数のソフトウェア・ワークロードの1つに対応する手段と、
所与のソフトウェア・ワークロードの分岐命令の結果を、前記所与のソフトウェア・ワークロードに対応する前記分岐予測状態データのセットからの、分岐予測キャッシュにキャッシュされた分岐予測状態データに基づいて予測する手段と
、
前記所与のソフトウェア・ワークロードの所与の命令のターゲット・アドレスに応答して、前記所与のソフトウェア・ワークロードに対応する前記分岐予測状態データのセットから個々の予測を提供するための分岐予測状態データの対応するアイテムを選択する手段と、
を備え
、
前記所与のソフトウェア・ワークロードに対応する前記分岐予測状態データのセットは、複数のサブ・テーブルを含み、前記メモリ・システムから前記分岐予測キャッシュへの前記分岐予測状態データの転送は、サブ・テーブルの単位で行われ、
前記選択する手段は、前記ターゲット・アドレスの第1の部分に基づいて前記複数のサブ・テーブルの1つを選択し、前記ターゲット・アドレスの第2の部分の関数に基づいて、前記選択されたサブ・テーブルから分岐予測状態データの前記アイテムを選択するよう構成される、装置。
【請求項16】
複数のソフトウェア・ワークロードからの命令を処理するステップと、
メモリ・システムに格納された分岐予測状態データの複数のセットから選択された分岐予測状態データを分岐予測キャッシュにキャッシュするステップであって、分岐予測状態データの各セットは、前記複数のソフトウェア・ワークロードの1つに対応するステップと、
所与のソフトウェア・ワークロードの分岐命令の結果を、前記所与のソフトウェア・ワークロードに対応する前記分岐予測状態データのセットからの、前記分岐予測キャッシュにキャッシュされた分岐予測状態データに基づいて予測するステップと
、
前記所与のソフトウェア・ワークロードの所与の命令のターゲット・アドレスに応答して、前記所与のソフトウェア・ワークロードに対応する前記分岐予測状態データのセットから個々の予測を提供するための分岐予測状態データの対応するアイテムを選択するステップと、
を含
み、
前記所与のソフトウェア・ワークロードに対応する前記分岐予測状態データのセットは、複数のサブ・テーブルを含み、前記メモリ・システムから前記分岐予測キャッシュへの前記分岐予測状態データの転送は、サブ・テーブルの単位で行われ、
前記選択するステップは、前記ターゲット・アドレスの第1の部分に基づいて前記複数のサブ・テーブルの1つを選択し、前記ターゲット・アドレスの第2の部分の関数に基づいて、前記選択されたサブ・テーブルから分岐予測状態データの前記アイテムを選択するよう構成される、データ処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本技法は、データ処理の分野に関する。より詳細には、本技法は、分岐予測に関する。
【背景技術】
【0002】
データ処理装置は、分岐命令が実際に実行される前に分岐命令の結果を予測するための、分岐予測回路を備えることができる。分岐命令が実際に実行される前に分岐結果を予測することにより、分岐命令の実行が完了する前に、分岐の後に続く命令のフェッチが開始され、投機的に実行され得るため、その結果、予測が正しい場合は、後続の命令が、分岐の結果が実際にわかってからしかフェッチされなかった場合よりも早く実行できるので、性能が無駄遣いされることはない。
【発明の概要】
【課題を解決するための手段】
【0003】
少なくともいくつかの実例は、複数のソフトウェア・ワークロードからの命令を処理するための処理回路と、メモリ・システムに格納された、分岐予測状態データの複数のセットから選択された分岐予測状態データをキャッシュする分岐予測キャッシュであって、分岐予測状態データの各セットは、前記複数のソフトウェア・ワークロードの1つに対応する分岐予測キャッシュと、所与のソフトウェア・ワークロードの分岐命令の結果を、前記所与のソフトウェア・ワークロードに対応する分岐予測状態データのセットからの、分岐予測キャッシュにキャッシュされた分岐予測状態データに基づいて予測する、分岐予測回路とを備える装置を提供する。
【0004】
少なくともいくつかの実例は、複数のソフトウェア・ワークロードからの命令を処理する手段と、メモリ・システムに格納された、分岐予測状態データの複数のセットから選択された分岐予測状態データをキャッシュする手段であって、分岐予測状態データの各セットは、前記複数のソフトウェア・ワークロードの1つに対応する手段と、所与のソフトウェア・ワークロードの分岐命令の結果を、前記所与のソフトウェア・ワークロードに対応する分岐予測状態データのセットからの、分岐予測キャッシュにキャッシュされた分岐予測状態データに基づいて予測する手段とを備える装置を提供する。
【0005】
少なくともいくつかの実例は、複数のソフトウェア・ワークロードからの命令を処理するステップと、メモリ・システムに格納された、分岐予測状態データの複数のセットから選択された分岐予測状態データを分岐予測キャッシュにキャッシュするステップであって、分岐予測状態データの各セットは、前記複数のソフトウェア・ワークロードの1つに対応するステップと、所与のソフトウェア・ワークロードの分岐命令の結果を、前記所与のソフトウェア・ワークロードに対応する分岐予測状態データのセットからの、分岐予測キャッシュにキャッシュされた分岐予測状態データに基づいて予測するステップとを含む、データ処理方法を提供する。
【0006】
本技法のさらなる態様、特徴、及び利点は、以下の添付図面と併せて読まれるべき実例の以下の説明から明らかとなろう。
【図面の簡単な説明】
【0007】
【
図1】分岐予測回路及び分岐予測キャッシュを備えるデータ処理装置の実例を模式的に示す図である。
【
図2】分岐予測器を不正利用し、より高い特権のあるコードをだまして秘密情報を攻撃者に漏洩させることができる、可能性のあるセキュリティ攻撃を模式的に示す図である。
【
図3】メモリ・システムのバックアップ記憶部からの、分岐予測状態データの一部をキャッシュするための、分岐予測キャッシュの実例を示す図である。
【
図4】ワークロード間の切替え、及び対応して分岐予測状態データのセット間を切り替える実例を示す図である。
【
図5A】局所性を改善するための、キャッシュの構造の実例を示す図である。
【
図5B】局所性を改善するための、キャッシュの構造の実例を示す図である。
【
図7】処理するワークロードの切替えが検出されるのに応答して、分岐予測キャッシュを更新する方法を示す図である。
【発明を実施するための形態】
【0008】
データ処理装置は、分岐命令の結果を予測するための分岐予測の仕組みを備えることができる。予測結果には、たとえば、分岐が起きるか否かが含まれ得るか、又は分岐命令の予測されるターゲット・アドレスが含まれる場合がある。特定の分岐が関数呼出しに関係するかどうか、又は特定の分岐が予測不可能な分岐先アドレス・パターンを持つことが予想され、それにより同じ分岐の実行の相異なるインスタンスが、生成されている相異なるターゲット・アドレスにつながる可能性があるかどうかなど、分岐の他のプロパティも予測され得る。従来、分岐予測の仕組みは、その予測の誤りがデータ処理装置で処理されるデータのセキュリティにとっては重要ではなく、単に達成される性能のレベルに影響を与えるだけの、性能を向上させる仕組みと見なされていた。というのは、分岐が誤って予測された場合、処理回路が一時的に誤った命令を実行する可能性があるが、実際の分岐結果が決定されて予測と比較されると、予測の誤りを検出でき、次いで誤って予測された分岐に基づいてフェッチされた後続の命令の処理パイプラインをフラッシュすることができ、そしてプロセッサのアーキテクチャの状態は、分岐が発生した時点に復元されて、正しくないことが判明した、後続の投機された命令のアーキテクチャ上の影響を取り消しできるからである。
【0009】
しかし最近、分岐予測回路は、あるソフトウェア・ワークロードが他のソフトウェア・ワークロードに関係するデータにアクセスするのを制限するように、データ処理装置に提供され得るセキュリティ保護を出し抜くために、攻撃者が不正利用する可能性があるルートをもたらす場合があることが認識されてきた。というのは、一部の分岐予測器では、1つのソフトウェア・ワークロード内で見られる分岐履歴に基づいて、分岐予測器に割り当てられた分岐予測状態のエントリが、別のソフトウェア・ワークロードからアクセスされ、その異なるソフトウェア・ワークロードの分岐結果を予測するために使用され得る可能性があるからである。以前はこのような、1つのワークロードからの分岐予測状態を使用して別のワークロードの分岐結果を予測することは、あたかも第2のワークロードが第1のワークロードによって割り当てられた分岐予測器の間違ったエントリにヒットし、次いでそれによって生じるどのような予測の誤りも、後で識別され、実際の分岐結果が判明すると解決され得るものであるかのように、単なる性能の問題としか見なされてこなかった。そしてこれは、単に正しい分岐結果の処理を遅延させるだけであると予想され、セキュリティ上のリスクを引き起こすとは予想されていなかった。
【0010】
しかし、誤って予測された分岐のために誤って投機的に実行された命令は、依然として、データ処理装置で使用されるキャッシュ又は別の非アーキテクチャ上の記憶構造体内のデータに影響を与える可能性があることが認識されてきた。これは、攻撃者はアクセスできないが、別のソフトウェア・ワークロードがアクセス可能な、潜在的に秘密性が高いデータに関する何らかの情報を、攻撃者が入手しようとして不正利用する場合があり、別のソフトウェア・ワークロードは、攻撃者にだまされて、秘密にアクセスし、秘密に関する何らかの情報を攻撃者に見えるようにする、キャッシュ割当ての変更を引き起こすよう設計された命令を実行させる可能性がある。攻撃者は、たとえば、分岐アクセスのパターンを使って分岐予測器をトレーニングする可能性があり、それにより、犠牲者(victim)ソフトウェア・ワークロードが後で同じエントリにアクセスすると、間違ったターゲット・アドレスからの命令を誤って実行するか、又は分岐が起きるか否かの間違った予測に従い、秘密情報への不適切なアクセスを引き起こすであろう。次いで、キャッシュのタイミングのサイド・チャネルを使用して、誤った投機の影響を調べ、秘密に関する情報を漏洩させることができる。
【0011】
かかる攻撃に対処する1つのやり方は、対応するソフトウェア・ワークロードの識別子を分岐予測器のエントリにタグ付けし、それにより所与のソフトウェア・ワークロードが、対応するワークロード識別子でタグ付けされた分岐予測状態しか使用できないようにすることであり得る。ただし、特定のソフトウェア・ワークロードを識別するためにデータ処理システムで通常使用される、個々のプロセスを識別するプロセス識別子若しくはアドレス空間識別子、及び/又はその中で所与のプロセスが動作する仮想マシンを識別する仮想マシン識別子などの識別子は、比較的長くなる恐れがある。かかる識別子は、たとえば、32ビット又は64ビットものビット数を有する場合がある。分岐予測器の各エントリに、対応するソフトウェア・ワークロードの識別子(さらに悪い場合は、プロセスIDと仮想マシンIDとの組合せなどの、識別子のセット)がタグ付けされた場合、分岐予測器の各エントリのサイズが大幅に増加し得る。これは特に、分岐が起きるか否かを予測する分岐方向予測器では問題となる。というのは、かかる分岐方向予測器では、分岐予測状態の各アイテムには通常、数ビットしか含まれ得ないからである(たとえば、それによって分岐が起きるか起きないかが予測される、信頼度を追跡するための2ビットの信頼度カウンタ)。したがって、各エントリにタグを付けると、分岐予測器のオーバヘッドが大幅に増加することになり、回路面積に制約のあるマイクロ・アーキテクチャ設計では許容されない場合がある。タグ付けの別の問題は、ソフトウェア・ワークロードの分岐を適切に予測できるように、ソフトウェア・ワークロードごとに分岐予測状態のセットを維持することであり、これには、ワークロードごとの分岐予測状態のすべてのセットに適応するために、分岐予測回路に供給されるべき極めて多数のエントリが必要となることである(すべてのワークロード間で同じエントリを共有する分岐予測器と比較して)。したがって、実際には、ワークロードごとに一意のソフトウェア・ワークロード識別子でエントリにタグを付け、分岐予測器でのヒットを同じワークロードに対応するエントリのみに制限することは、マイクロ・アーキテクチャ設計の点から非現実的であり得る。
【0012】
以下で論じる技法では、メモリ・システムに格納された分岐予測状態データの2つ以上のセットから選択された分岐予測状態データをキャッシュするために、分岐予測キャッシュが提供される。分岐予測状態データの各セットは、処理回路によって処理される複数のソフトウェア・ワークロードの1つに対応する。分岐予測回路は、所与のソフトウェア・ワークロードに対応する分岐予測状態データのセットからの、分岐予測キャッシュにキャッシュされた分岐予測状態データに基づいて、所与のソフトウェア・ワークロードの分岐命令の結果を予測する。
【0013】
したがって、メモリ・システムに複数の分岐予測状態データのセットを格納することにより、分岐予測回路の局所的な、対応するサイズの分岐予測キャッシュをサポートするのに、マイクロ・アーキテクチャでは非現実的なほど大きい面積のオーバヘッドを必要とすることなく、それぞれがそれ自体の分岐予測状態のセットを有する多数の相異なるソフトウェア・ワークロードをサポートできる。すなわちメモリ・システムは、すべてのソフトウェア・ワークロードに対する完全な一連の分岐予測データセットを格納するバッキング・ストアとして効果的に機能し、一方この分岐予測状態データのサブセットが、分岐予測回路による即時アクセスのために分岐予測キャッシュにキャッシュされる。それにより、キャッシュ自体は、ワークロード間で分岐予測状態を共有する一般的な分岐予測構造体よりも大きな回路面積を予定しておく必要はない。
【0014】
分岐予測状態データは、典型的には、メモリからは通常見えないようにされる、所与の処理パイプラインのマイクロ・アーキテクチャの一態様と見なされることになるので、この手法は直観に反するものであることがわかる。また、メモリ・システム内のバッキング・ストアから分岐予測状態データをフェッチすることに伴う遅延は、予測がまったく行われず、そうではなくてパイプラインが、後続の命令をフェッチする前に、実際の分岐命令の結果が実行時に使用可能になるのを待った場合に予想される遅延よりも長くなると予想されるであろう。したがって、メモリ・システムが分岐予測状態データを格納するための好適な場所と考えられることはなさそうである。しかし実際には、ソフトウェア・ワークロードの変更は比較的まれであり得る。そして新しいソフトウェア・ワークロードの開始時に分岐予測状態データをフェッチするためのウォーム・アップ遅延は、以前に1つのワークロードに対して行われた予測が、第2のワークロードに対する誤って予測された分岐に応答して徐々に適応されるので、いずれにせよ、ワークロード間で分岐予測器のエントリを共有する分岐予測器のウォーム・アップ遅延と同等になり得る。対照的に、メモリ・システムに格納された分岐予測状態データの個別のセットを使用することにより、1つのワークロードでの実際の分岐結果に基づく補正は、別のワークロードで使用される分岐予測状態を汚染しないため、両方のワークロードに対する予測をより正確に行うことができ、分岐予測状態データがキャッシュに取り込まれると、メモリ・システムからの分岐予測状態データのフェッチに関係する遅延の一部を軽減するのに役立つ。分岐予測状態データの個別のセットをメモリ・システムに格納するもう1つの利点は、マルチプロセッサ・システムで、所与のソフトウェア・ワークロードが1つのプロセッサから別のプロセッサに移されたときに、分岐予測状態データがメモリに格納されている場合であり、これは、分岐予測状態を移動させる専用の経路を確立する必要なしに、分岐予測状態が、1つのプロセッサから別のプロセッサに、やはり比較的簡単に移動できることを意味する。これにより、スケジューラが、プロセッサ間でソフトウェア・ワークロードを移すとき、予測性能の低下を回避することにより、プロセッサ・システム設計を簡素化し、性能を改善できる。したがって実際には、性能への影響は限定され得る。そして、メモリ・システム内で、相異なるソフトウェア・ワークロードに対する個別の分岐予測状態データのセットを維持することにより、1つのソフトウェア・ワークロードを操作する攻撃者が、秘密データに関する情報を攻撃者に見せるよう設計されている別のソフトウェア・ワークロードで不正な投機を引き起こすために、そのワークロードを使用してトレーニングした分岐予測状態データを、使用できなくする。
【0015】
処理回路が第1のソフトウェア・ワークロードの処理から第2のソフトウェア・ワークロードの処理に切り替わるのに応答して、分岐予測キャッシュは、第1のソフトウェア・ワークロードに対応する分岐予測状態データのセットのキャッシュされた分岐予測状態データが、第2のソフトウェア・ワークロードの分岐命令の結果を予測するのに使用されるのを防止することができる。たとえば、相異なるソフトウェア・ワークロード間のコンテキスト切替え時に、分岐予測キャッシュは、第1のソフトウェア・ワークロードに関係するエントリを無効化することができる。無効化されたエントリのいずれかに、メモリ・システム内の対応する予測状態と比べて変更された更新済みの予測状態データが含まれている場合、かかる汚れた分岐予測状態データを、メモリ・システムに書き戻すことができる。書戻しは、第1のソフトウェア・ワークロードと第2のソフトウェア・ワークロードとの間のコンテキスト切替え時に実行できるか、又は、第2のソフトウェア・ワークロードに関係する新しい分岐予測状態データで、所与のキャッシュされたエントリを上書きすることが望まれるまで延期することができる。したがって、概ね、第1のソフトウェア・ワークロードに関係する分岐予測状態データを、第2のソフトウェア・ワークロードの分岐命令の結果を予測するために使用できないように、キャッシュ状態を更新することによって、上記で論じた種類のセキュリティ攻撃は回避される。
【0016】
分岐予測キャッシュは、いくつかのエントリを有することができ、分岐予測状態データの対応する部分をキャッシュするための各エントリは、分岐予測状態データのどのセットから、分岐予測状態データの対応する部分が選択されるかについての、どのような指示とも無関係である。すなわち、分岐予測キャッシュの各エントリは、そのエントリの分岐予測状態データに対応する特定のソフトウェア・ワークロードのどのような識別子も含む必要はない。プロセス識別子又はソフトウェア・ワークロードに関係する他の識別子でエントリにタグ付けすることを回避することにより、かかるタグ付けに起因する、予想され得る面積上のオーバヘッドの大幅な増加が回避される。これは、分岐ターゲット・アドレス予測器と分岐方向予測器との両方に有利であり得るが、分岐予測状態データの各アイテムのサイズはより小さいことが多く、プロセス識別子でタグ付けすることは各エントリのサイズを不相応に増加させることになるので、特に分岐方向予測器に対して利点をもたらすことができる。
【0017】
分岐予測キャッシュは、分岐予測キャッシュのすべての有効なエントリを、所与のソフトウェア・ワークロードに対応する分岐予測状態データの同じセットからの分岐予測状態データに確実に関係付けることができる。これにより、各エントリに、どのソフトウェア・ワークロードに所与のエントリが関係するかを区別するタグを含める必要がなくなる。1つのソフトウェア・ワークロードに関係するエントリが、別のソフトウェア・ワークロードに対する予測を行うのに使用されることは、そうではなくて、ソフトウェア・ワークロードの変更が発生したときに分岐予測キャッシュの内容を無効化することによって、確実に防止され得る。分岐予測キャッシュのルックアップは、命令アドレスに応じて行うことができるが、現在のワークロードのワークロード識別子とは無関係である。現在のワークロードの識別は、分岐予測のキャッシュ・ラインフィル時に考慮される場合があるが、各予測ルックアップ時は考慮されない。
【0018】
分岐予測キャッシュのエントリが無効化される場合、これはメモリ内の対応する分岐予測状態データを無効化する必要があることを意味するものではないことに留意されたい。そうではなくて、メモリ内の分岐予測状態データは保持することができ、必要に応じて、分岐予測キャッシュから削除されたデータに基づいて更新され、その結果分岐予測状態データは、所与のソフトウェア・ワークロードを実行する1つのインスタンスを超えて保持され、同じソフトウェア・ワークロードが次回実行されるときに復元され得る。
【0019】
処理回路が第1のソフトウェア・ワークロードの処理から第2のソフトウェア・ワークロードに切り替わるのに応答して、分岐予測キャッシュは、第2のソフトウェア・ワークロードに対応する分岐予測状態データのセットの一部を分岐予測キャッシュ内にフェッチすることを要求するため、メモリ・システムへの少なくとも1つの状態フェッチ要求をトリガすることができる。したがって、次に来るソフトウェア・ワークロードに関係する分岐予測状態データの新しいセットのロードは、第1のソフトウェア・ワークロードから第2のソフトウェア・ワークロードへのコンテキスト・スイッチによって自動的にトリガされ得る。
【0020】
場合によっては、コンテキスト切替え時の、分岐予測キャッシュ内にフェッチされた分岐予測状態データのセットの一部には、第2のソフトウェア・ワークロードに関係する分岐予測状態データのセット全体が含まれ得る。この手法は、関係する分岐予測状態データが、コンテキストの切替えに続いて可能な限り早くフェッチされたことを意味するので、後続の分岐が発生したときのプロセッサ・パイプラインへの性能上の影響を低減することができる。
【0021】
しかし他の場合では、第1のソフトウェア・ワークロードから第2のソフトウェア・ワークロードへの切り替えに応答してフェッチされた分岐予測状態データのセットの一部には、第2のソフトウェア・ワークロードに対応する分岐予測状態データの適切なサブセットが含まれ得る。すなわち、第2のソフトウェア・ワークロードに関係する分岐予測状態データのセットのすべてが、コンテキスト・スイッチに応答して分岐予測キャッシュにフェッチされ得るとは限らない。そうではなくて、最初により小さい部分をフェッチでき、次いで分岐予測状態データの残りの部分は、所与の分岐命令に必要な場合、要求に応じて、より小さい部分を分岐予測キャッシュ内にフェッチできる。この手法により、コンテキストの切替え時に、大量にメモリ・アクセス帯域幅を使い切ることを回避でき、その他の手法では、コンテキストの切替えが、次に来る第2のソフトウェア・ワークロードによって行われる実際のデータのメモリ・アクセスの性能に、影響を与える可能性がある。
【0022】
分岐予測キャッシュは、分岐予測が必要な所与のソフトウェア・ワークロードの命令のターゲット命令アドレスに対する分岐予測キャッシュでのミスに応答して、所与のソフトウェア・ワークロードに対応する分岐予測状態データのセットの対応する部分を、分岐予測キャッシュ内にフェッチすることを要求するため、メモリ・システムへの少なくとも1つの状態フェッチ要求をトリガすることができる。したがって、分岐予測が必要なターゲット命令アドレスが検出された場合、次いで、分岐予測状態データの対応する部分がまだ分岐予測キャッシュ内になければ、そのフェッチがトリガされ得る。所与のソフトウェア・ワークロードの分岐予測状態のセットを、分岐予測キャッシュによって一時的にキャッシュされるがメモリ・システムのより低いレベルに書き戻すことができる、いくつかの部分に分割することにより、コンテキスト・スイッチによる遅延が短縮され、状態の全体的なサイズに制限を課すことがなくなる。
【0023】
他の実施態様では、コンテキスト・スイッチ自体に応答してどのような状態フェッチ要求もトリガせず、分岐予測状態データの所与の部分を、その分岐予測状態データを必要とすることになるアドレスが検出された場合にのみ、分岐予測キャッシュ内にフェッチするように、すべての分岐予測データを要求に応じてフェッチすることが可能であり得る。
【0024】
実際には、コンテキスト・スイッチに応答して分岐予測状態データの最初の部分がフェッチされ、次いで後続の部分が要求に応じて後でフェッチされるように、これら2つの手法間のバランスをとるのが最も効率的であり得る。
【0025】
分岐予測状態データが分岐予測キャッシュから削除されるとき(コンテキスト切替え時で分岐予測状態データが無効化されているとき、又は要求に応じた分岐予測状態データのフェッチに基づいて、所与の分岐予測状態データが続いて上書きされるとき)、削除されるデータが汚れていた(メモリ内の対応する分岐予測状態データに比べて変更されていた)場合、分岐予測キャッシュは、少なくとも1つの書戻し要求をトリガして、汚れた分岐予測状態データがメモリ・システムに書き戻されることを要求することができる。分岐予測器は、かかる書戻しを通常、必要としないであろう。というのは、通常、分岐予測器は、メモリ・システムのバッキング・ストアのキャッシュとして機能するのではなく、処理パイプライン設計のマイクロ・アーキテクチャ内で分岐予測状態の完全な記録を保持することが予想されるからである。
【0026】
典型的な分岐予測器は、通常、記憶部の配置構成を備えるよう設計されており、それによって所与のターゲット命令アドレスでの分岐結果を予測するための分岐予測器のエントリは、ターゲット命令アドレスに適用されるハッシュ・アルゴリズムに基づいて識別される。ここでハッシュは、隣り合うアドレスが分岐予測器の相異なるエントリに確実にマッピングされるように設計されている。すなわち、分岐予測器(分岐方向予測器と分岐ターゲット・アドレス予測器との両方を含む)は、典型的には、プログラム・コードの同じ範囲で発生する複数の分岐が、同じ分岐予測エントリへのアクセスを求めて競合するホットスポットをなくするために、ほとんど局所性がないように設計されている。
【0027】
しかし発明者は、かかる典型的な分岐予測器のハッシュ方式が、上記で論じた分岐予測キャッシュに適用される場合、分岐予測キャッシュとメモリ・システムとの間の分岐予測状態データのアイテムの転送において非常に低い性能がもたらされる可能性があることを認識した。というのは、所与のソフトウェア・ワークロードがプログラム・コードの所与のセクションを処理するときに、従来の分岐予測マッピング方式では、近くの分岐のアドレスが、分岐予測状態データのアイテムをメモリ・システムから分岐予測キャッシュ内にロードするため、その後にいくつかの個別のフェッチ操作が必要となり得る、分岐予測状態データセットの非常に相異なるエントリにマッピングされることになるからである。したがって、メモリ・システムからの分岐予測状態データのサブセットをキャッシュする分岐予測キャッシュでは、従来の分岐予測ハッシュ方式と比較して、局所性が高まるアドレス・マッピング方式を提供することが有用であり得る。
【0028】
分岐予測キャッシュは、所定のサイズのアドレス範囲に対応する粒度で、分岐予測状態情報のアイテムをキャッシュすることができる。これは、分岐予測回路が、所定のサイズの隣接するアドレス範囲内のアドレスに対して、分岐命令の結果の相異なる予測を行うことができ得ることを意味する。すなわち、所定のサイズは、同じサイズの隣のアドレス範囲から別個の予測を行うことができる最小アドレス範囲であり得る。
【0029】
装置は、分岐予測キャッシュとメモリ・システムとの間で、所与のサイズのユニットで分岐予測状態データを転送する状態転送回路を備えることができ、ここで各ユニットには、命令アドレスの少なくとも1つのブロックに対する分岐予測を行うための分岐予測状態データが含まれ、かかる命令アドレスの各ブロックは、分岐予測キャッシュの粒度として使用される所定のサイズよりも大きいサイズの連続するアドレス範囲をカバーする。したがって、1回のデータ転送で分岐予測状態を分岐予測キャッシュに転送できるアドレス範囲は、それによって別個の予測が分岐予測キャッシュ内で表される粒度より大きくすることができる。これにより、プログラム・コードの所与のセクションに対する分岐予測結果を予測するために、分岐予測状態にロードする必要があるメモリ・アクセス数を減らすことができるので、メモリ・アクセスの性能を向上させることができる。
【0030】
一実例では、装置は、所与のソフトウェア・ワークロードの所与の命令のターゲット・アドレスに応答して、所与のソフトウェア・ワークロードに対応する分岐予測状態データのセットから対応する分岐予測状態データのアイテムを選択する、選択回路を備えることができる。選択回路はたとえば、ターゲット・アドレスに応答して、どの分岐予測キャッシュのエントリをルックアップするかを選択するルックアップ回路であってもよく、又は分岐予測キャッシュのミスがある場合、若しくはソフトウェア・ワークロード間にコンテキストの切り替えがある場合に、そこから必要な分岐予測状態がフェッチされ得るメモリ・アドレスを生成する回路内に設けられてもよい(実際には、ルックアップ回路及びメモリ・アドレス生成回路が、なにがしかの部分を共有してもよい)。いくつかの実例では、選択回路は、ターゲット・アドレスに加えて、以前の分岐結果のパターンを示す分岐履歴情報(たとえば、最後に実行された、いくつかの分岐が行われなかったか/行われたかの結果)に基づいて、分岐予測状態データのアイテムを選択することもでき、これは、プログラムを通して起きた同じ分岐への相異なるルートに対して相異なる予測を生成できるので、より正確な予測を提供するのに役立つことができる。
【0031】
所与のソフトウェア・ワークロードに対応する分岐予測状態データのセットは、いくつかのサブ・テーブルを含むことができ、選択回路は、ターゲット・アドレスの第1の部分に基づいてサブ・テーブルの1つを選択することができる。個々の予測を実現するための分岐予測状態データのアイテムは、ターゲット・アドレスの第2の部分の関数に基づいて、選択されたサブ・テーブルから選択され得る。各サブ・テーブルは、上記で論じたように、所定のサイズより大きいサイズの連続するアドレス範囲をカバーする、命令アドレスの少なくとも1つのブロックに対応する分岐予測状態データを提供することができる。したがって、サブ・テーブルを選択することにより、1回のデータ転送で分岐予測キャッシュに転送できる分岐予測状態データのユニットを選択でき、次いで選択したサブ・テーブルから、ターゲット・アドレスの残りの部分の関数(従来の分岐予測器で使用されるハッシュ関数と同様であるが、サブ・テーブル内の局所性を下げ、ホットスポットを減らすために、ターゲット・アドレスのより小さな部分に基づくハッシュ関数など)に基づいて、分岐予測状態データの個々のアイテムを選択できる。
【0032】
言い換えると、サブ・テーブルを使用するこの手法では、各サブ・テーブルは、分岐予測キャッシュの個別のキャッシュのエントリとして機能することができるが、そのキャッシュのエントリ内に、所定のサイズの相異なるアドレス範囲に対する予測状態のいくつかの別個のアイテムが含まれ得る。各キャッシュのエントリを、アドレス空間のあるサブセットの別個のサブ・テーブルとして扱うことにより、局所性が高まり、分岐予測キャッシュのメモリ・アクセス性能が向上する。
【0033】
所与のサブ・テーブルは、不連続な場所でアドレスの複数の相異なるブロックにマッピングされる場合があるが、各ブロックは、所定のサイズよりも大きいサイズの連続したアドレス範囲をカバーすることに留意されたい。サブ・テーブルを選択するために使用される選択関数は、プログラム・コードがそうした不連続ブロックの1つからの命令を実行していたときに、分岐予測器によって行われた予測が、その後に同じワークロードがそうした不連続ブロックの別のブロックに到達する場合には、もはや無関係となり得るので、その結果以前にコードの最初の範囲に対して行われた予測を、次の範囲に対する予測で上書きできるという予想の下で、アドレスの複数の不連続ブロック間で単一のサブ・テーブルを共有することができる。これにより、所与のソフトウェア・ワークロードのために多数のサブ・テーブルを設ける必要がなくなり、分岐予測状態データのセットを格納するためのメモリ容量のオーバヘッドを限定することができる。
【0034】
サブ・テーブルを選択するために使用されるターゲット・アドレスの第1の部分は、サブ・テーブル内の分岐予測状態データの個々のアイテムを選択するために使用される第2の部分の少なくとも一部よりも重要な部分であり得る。場合によっては、第1の部分が、ターゲット・アドレスの最も重要な部分であり得る。しかし他の実例では、第1の部分は、ターゲット・アドレスの中間部分であってもよく、そのため、ターゲット・アドレスの第2の部分には、第1の部分より重要でない部分だけでなく、オプションで、第1の部分より重要な1つ又は複数のビットも含まれ得る。
【0035】
分岐予測状態プリフェッチャは、分岐予測が将来必要になると予測されるアドレスに関係付けられた分岐予測状態データを、分岐予測キャッシュ内にプリフェッチするために提供され得る。分岐予測状態プリフェッチャは、データ・アクセスするアドレスに基づいてトレーニングされ、将来のデータのアドレス・アクセス・パターン、たとえば、アクセスされるアドレスが一定のオフセットのパターンで増加するストライド・パターンを予測する、ハードウェアのデータ・プリフェッチャと同様に動作できる。分岐予測状態プリフェッチャは、同様のやり方で分岐予測器に供給される命令アドレスに基づいてトレーニングでき、それにより、プログラム・コードが一連の命令をステップ実行している場合、分岐予測状態は、フェッチ工程が実際にそれらの命令に到達する前に、すぐに到達すると予測される命令に対する分岐予測状態データをプリフェッチするために、フェッチ工程が到達するプログラムの実行の現在のポイントよりも先を見ることができる。これは、現在の命令に対する、関係する分岐予測状態データの取得に伴う遅延を減らすことにより、性能向上に役立ち得る。
【0036】
この適用例で論じる技法は、分岐命令の結果としての、分岐命令のターゲット・アドレスを予測する分岐ターゲット・バッファ(分岐ターゲット・アドレス予測器としても知られる)に適用できる。分岐ターゲット・アドレスは、分岐がプログラムの流れの向きを変える先のアドレスである。或いは本技法は、分岐命令の予測結果が、分岐が起こるか起こらないかの指標となる、分岐方向予測器に適用できる。上記で論じた技法は、これらの種類の分岐予測構造体のうちの1つにのみ、又は同じシステム内の両方に適用できることが理解されよう。
【0037】
分岐予測状態データは、少なくとも一部のソフトウェア・ワークロードが、分岐予測状態データを格納する範囲にマッピングされたアドレスを指定する処理回路によって実行される、ロード/ストア操作を発行することによりアクセスできる、メモリ・システムのアドレス指定可能な範囲に格納できる。したがって、分岐予測状態データを、処理回路で実行される命令がすぐにアクセスできないマイクロ・アーキテクチャ上のデータ格納部にデータを格納するのではなく、処理回路によってアクセスされる通常のメモリのアドレス指定可能な範囲に格納できる。たとえば、オペレーティング・システムは、所与のプロセスに割り当てられたメモリの範囲内に、そのプロセスの分岐予測状態を格納するための、いくらかの特別な空間を割り当てることができる。
【0038】
しかし、処理回路で実行される少なくともいくつかのソフトウェア・ワークロードでは、所与のソフトウェア・ワークロードに対する分岐予測状態データのセットは、その所与のソフトウェア・ワークロードがアクセスできないメモリの範囲に格納することができる。たとえば、分岐予測状態データへのアクセスを、分岐予測状態データが格納されている所与のソフトウェア・ワークロードよりも特権のあるプロセスに限定するために、対応する分岐予測状態データのセットを格納する範囲にメモリ保護属性を指定できる。たとえば、所与のプロセスに対する分岐予測状態データは、そのプロセスがアクセスできないが、そのプロセスを監視するオペレーティング・システムはアクセスでき得る。或いは、場合によっては、システムは、分岐予測状態データのセットが、プロセッサで実行しているどのソフトウェア・ワークロードもアクセスできないように実現されてもよく(ただし、分岐予測状態データのセットは、一般的にアドレス指定可能なメモリの範囲に割り当てられる)、それによって、メモリのアドレス指定可能な範囲へアクセスできるシステム要素だけが、分岐予測状態のフェッチ及び書戻しを制御する、分岐予測器に関係する要素であり得る。
【0039】
分岐予測状態データが、処理回路によって実行される汎用ロード・ストア命令によって、少なくとも一部のソフトウェア・ワークロードから見ることができる場合、対応するメモリの範囲をそれらの命令に対して読み取り専用にして、攻撃者が、上記で論じた形態の攻撃を引き起こそうとして、メモリ・システムへ不正な分岐予測状態データを書き込みできるのを防ぐことができる。所与ソフトウェア・ワークロードに対する分岐予測状態データのセットを格納するメモリ範囲への書き込みが許可されるシステム要素は、たとえば、分岐予測キャッシュ又は分岐予測回路自体(又は分岐予測キャッシュからの分岐予測状態データの書戻しを制御する、任意の対応するロジック)だけであり得る。
【0040】
各ソフトウェア・ワークロードは、処理回路によって実行されるソフトウェア・プロセス、処理回路によって実行されるソフトウェア・プロセス群、ソフトウェア・プロセスの特定の部分、特定のアドレス範囲内の命令アドレスを有するソフトウェア・プロセスの命令、1つ又は複数のワークロード分割命令によって区切られたソフトウェア・プロセスの一部、同じプロセスに対応する処理回路によって実行される複数のスレッドの1つ、又は、前記複数のスレッドの中のスレッドのサブグループのうちの1つを含むことができる。
【0041】
したがって、処理回路で処理されるプロセス又はスレッドを、そのそれぞれが分岐予測状態データの対応するセットを有する様々なソフトウェア・ワークロードに正確にアサインし得る方法には、適応性がある。場合によっては、ソフトウェア・プロセス群が、上記で論じた形態の攻撃に関して互いにリスクをもたらさないと考えられる場合、ソフトウェア・プロセス群は、同じ分岐予測状態データのセットにマッピングすることができ、一方リスクをもたらすと考えられる他のソフトウェア・プロセス又はスレッドは、相異なる分岐予測状態データのセットを持つ別個のワークロードにアサインすることができる。場合によっては、ソフトウェア・プロセスの特定の部分を、同じソフトウェア・プロセス内であっても、分岐予測状態の相異なるセットにマッピングすることができる。たとえば、インターネット・ブラウザは、1つのタブが別のタブに影響を与えないように、相異なるブラウザ・タブを分割して、分割されたタブ自体の分岐予測状態データのセットを有することができる。同様に、単一のプロセスで使用される相異なるソフトウェア・ライブラリを、分岐予測状態の相異なるセットにマッピングできる。ソフトウェア・プロセスの相異なる部分が相異なるソフトウェア・ワークロードとして考えられる場合、特定のアドレス範囲で部分間の分割を行うことができ、それにより特定のアドレス範囲の命令アドレスを有するソフトウェア・プロセスの命令は、1つのソフトウェア・ワークロードと考えることができ、一方別のアドレス範囲の命令は、別の分岐予測状態データのセットを有する別のソフトウェア・ワークロードにマッピングできる。別のオプションでは、所与のソフトウェア・プロセスがワークロード間で分割されるポイントにマーク付けする、ワークロード分割命令を提供することができる。
【0042】
図1は、いくつかの工程のパイプラインを具備する、パイプライン処理部を備えるデータ処理装置2の実例を模式的に示す。パイプラインは、分岐命令の結果を予測し、フェッチされるべき命令の一連のフェッチ・アドレスを生成する、分岐予測器4を備える。フェッチ工程6は、フェッチ・アドレスで識別された命令を、命令キャッシュ8からフェッチする。デコード工程10は、フェッチされた命令をデコードして、パイプラインの後続のステージを制御するための制御情報を生成する。リネーミング工程12は、レジスタのリネーミングを行い、命令によって識別されたアーキテクチャ上のレジスタ指定子を、ハードウェアで提供されるレジスタ14を識別する物理レジスタ指定子にマッピングする。レジスタのリネーミングは、同じアーキテクチャ上のレジスタを指定する命令間でのハザードを、ハードウェアのレジスタ・ファイルの相異なる物理レジスタにアーキテクチャ上のレジスタをマッピングすることによって取り除くことができ、命令が、キャッシュ8からフェッチされたプログラムの順序とは異なる順序で実行できる可能性が高くなり得るので、順序が外れた実行をサポートするのに有用であり得る。これは、前の命令が、オペランドが利用可能になるのを待っている間に、後の命令を実行できるようにすることにより、性能を高めることができる。アーキテクチャ上のレジスタを別の物理レジスタにマッピングする機能により、分岐予測の誤りが発生した場合に、アーキテクチャ上の状態を容易にロール・バックすることもできる。発行工程16は、命令を処理するために必要なオペランドがレジスタ14で利用可能になるまで、実行を待つそれらの命令をキューに入れる。実行工程18は、対応する処理操作を行うために命令を実行する。書戻し工程20は、実行された命令の結果をレジスタ14に書き戻す。
【0043】
実行工程18は、分岐命令が正しく予測されたかどうかを評価する分岐ユニット21、算術又は論理演算を実行するALU(arithmetic logic unit、算術論理ユニット)22、浮動小数点オペランドを使用して演算を実行する浮動小数点ユニット24、及びメモリ・システムからレジスタ14にデータをロードするロード操作、又はレジスタ14からメモリ・システムにデータをストアするためのストア操作を実行するロード/ストア・ユニット26などの、いくつかの実行ユニットを備えることができる。この実例では、メモリ・システムは、レベル1の命令キャッシュ8、レベル1のデータ・キャッシュ30、データと命令との間で共有されるレベル2のキャッシュ32、及び主メモリ34を備えるが、これは可能なメモリ階層のほんの一実例にすぎず、他の実施態様では、キャッシュのレベルをさらに増やすか又は別の配置構成を有することができることが理解されよう。メモリへのアクセスは、アドレス変換及び/又はメモリ保護を制御するメモリ管理ユニット(MMU:memory management unit)35を使用して制御することができる。ロード/ストア・ユニット26は、MMU35の変換ルックアサイド・バッファ36を使用して、パイプラインによって生成された仮想アドレスを、メモリ・システム内の場所を識別する物理アドレスにマッピングすることができる。
図1に示すパイプラインはほんの一実例にすぎず、他の実例では、様々なパイプライン工程又は実行ユニットのセットを備え得ることが理解されよう。たとえば、インオーダ・プロセッサには、リネーム工程12がない場合がある。
【0044】
分岐予測器4は、分岐命令の様々な結果を予測する構造体を備えることができる。たとえば、分岐予測器4は、条件分岐が起きるか起きないかを予測する分岐方向予測器を備えることができる。分岐方向予測器は、各エントリが、所与の命令アドレス又は命令アドレスのブロックに対して、信頼度カウンタに、比較的少ないビット(たとえば2又は3ビット)を提供できるので、比較的小さい構造体であってもよい。信頼度カウンタは、そうした予測の信頼度が増すように、「起こる」指示又は「起こらない」指示に向かって増減し、予測誤りが発生したときには、信頼度の以前の増加を逆方向に戻すように調整される。予測できる分岐結果の別の態様は、分岐のターゲット・アドレスであり得る。たとえば、ある分岐命令は、レジスタ14に格納された値に基づいて間接的にターゲット・アドレスを計算し、プログラム・コード自体には確定的に知られていないアドレスに分岐できる。分岐ターゲット・バッファ(BTB:branch target buffer)(分岐ターゲット・アドレス・キャッシュ(BTAC:branch target address cache)としても知られる)は、分岐予測器4の一部であってもよく、それぞれが所与の命令のブロック内で発生する任意の分岐ターゲット・アドレスの予測を提供する、いくつかのエントリを有している。オプションで、BTBすなわちBTACは、特定の種類の分岐予測など、分岐に関する他の情報も提供することができる(関数呼出し、関数戻り値など)。この場合も、BTB/BTACによって行われる予測は、実行工程の分岐ユニット21によって実行された分岐命令に対して決定された、実際の分岐結果38に基づいて磨きをかける(refine)ことができる。分岐予測器4が備えることができる別の構造体は、たとえば、BTB内にインデックスを生成するための追加の入力として使用できる、以前に実行された分岐の履歴に関する情報(たとえば、一連の、以前に起きた/起きなかった結果)を記録できる、分岐履歴バッファ(BHB:branch history buffer)であり得る。
【0045】
図1に示す処理パイプラインは、いくつかの様々なソフトウェア・ワークロードの実行をサポートすることができる。ソフトウェア・ワークロードは、異なるプログラム・コードに従って実行する相異なるプロセスを含むことができるか、又は同じプロセスに対応する複数のスレッドを含むことができる。また、場合によっては、プロセス内の相異なる部分を、相異なるワークロードと見なすことができる。たとえば、プロセス内の特定のアドレス範囲を、個別のワークロードとしてマーク付けすることができる。
【0046】
相異なるプロセスを同じパイプラインで実行する場合、通常、分岐予測器4はそれらのプロセス間で共有されている。相異なるプロセスは、同じ命令アドレスで異なる分岐動作をする可能性があるため、これは、所与の命令アドレスに対して分岐予測器構造体をルックアップすることにより、1つのプロセスに関係しない、なぜなら別のプロセスに基づいてトレーニングされている可能性がある、予測動作が提供される可能性があることを意味することができる。通常、1つのプロセスが、別のプロセスによってトレーニングされた分岐予測エントリにアクセスすることに起因する分岐予測の誤りは、セキュリティに影響を与えるのではなく、単に性能に影響を与える問題と見なされてきた。というのは、予測が正しくない場合、それは分岐が実際に分岐ユニット21で実行されたときに検出され、分岐ユニットは次いで、パイプラインをトリガし、誤った予測に基づいて誤ってフェッチされた後続の命令をフラッシュすることができ、プロセッサの状態を、最後に正しく予測された命令によって得られた最後の正しい状態にまで戻すことができるからである。
【0047】
しかし、予測誤りのアーキテクチャ上の影響は元に戻すことができるが、予測の誤りが、データ・キャッシュ30又はTLB36などのマイクロ・アーキテクチャ上の状態に、より長く続く影響を与える可能性がある。最近、攻撃者が分岐予測器4を不正利用して、攻撃者がアクセスしてはならなかった秘密情報へアクセスすることが可能であることが認識されてきた。メモリ管理ユニット35は、特定の特権レベルで実行されるプロセスのみが、メモリの特定の範囲へのアクセスが許可されるように、特権スキームを適用することができる。たとえば
図2に示すように、ある秘密データ50は、攻撃者のプロセスはアクセス不可であり得るが(たとえば、攻撃者のプロセスは最低の特権レベルで実行されるので)、オペレーティング・システム又はハイパーバイザなどの、より高い特権レベルで動作するプロセスはアクセス可能であり得る。秘密データは、パスワード、個人の財務詳細など、秘密性が高いと考えられる任意のデータであり得る。攻撃は、分岐予測器4のトレーニングに基づいている可能性があり、その結果、プロセッサのより高い特権がある状態で実行される犠牲者コード内の分岐は、秘密50に関係のない犠牲者コードの分岐における分岐予測が誤っていたため、より高い特権がある犠牲者コードが、実行することを意図していないのに誤って実行する、あるガジェット・コード52に分岐する。ガジェット・コードは、秘密データ50に基づいて計算されたメモリ・アドレスにアクセスするよう攻撃者が設計でき、それにより秘密データに依存するメモリ・アドレスに関係付けられたデータ(又はTLBエントリなどの他の情報)が、データ処理システムのキャッシュ30、32、36の1つにロードされる。
【0048】
より具体的には、攻撃者は、エントリ54が分岐予測器4の分岐ターゲット・バッファに確実に割り当てられ、それにより、分岐命令アドレス#bにある命令が実行されると、BTBがガジェット・コード52の場所に対応するターゲット・アドレス#gの予測を返す、以前に実行された命令のパターンを有している可能性がある。分岐命令アドレス#bが、攻撃者によって選択される可能性があり、その結果#bは、犠牲者コード内の特定の分岐命令56のアドレスに対応する(或いは、#bは、犠牲者コードの非分岐命令のアドレスであり得る。というのは、分岐予測器4のいくつかの形態は、分岐の実際のターゲット・アドレスの予測に加えて、命令がそもそも分岐命令であるかどうかを効果的に予測することもできるため、非分岐命令が#gへ分岐する分岐命令であると予測するように分岐予測器を誤ってトレーニングしても、同じ効果が得られるからである)。
【0049】
したがって、犠牲者コードは、実行されると、アドレス#bで命令56に到達し、分岐予測器4がルックアップされると、#gのターゲット・アドレスが返され、アドレス#gでより高い特権のある犠牲者コードをガジェット・コード52に切り替えさせることができる。プロセッサは、依然として犠牲者コードに関係付けられたより高い特権状態にあるので、攻撃者が提供したガジェット・コード52はここで、攻撃者の特権がより低いコードはアクセスできないメモリの範囲へのアクセスを可能にし得る、犠牲者コードに提供されるのと同じアクセス権限を持って実行される。ガジェット・コードには、秘密データ50をロードする第1のロード命令58と、第1のロード命令58によってロードされた秘密の関数として計算されるターゲット・アドレスからデータをロードする、第2のロード命令60とが含まれ得る。攻撃者は、このアドレス計算関数を選択した可能性があり、その結果、秘密の値(又は秘密の選択されたビットの値)に応じて計算されたアドレスでは、
図2の左側の部分に示すように、複数の値62、64の1つを取得することができる。この実例では、簡略にするために、計算されたアドレスの2つの可能性のある値62及び64を示しており、これはたとえば、計算されるアドレスが、秘密から抽出された単一のビットに依存する関数に基づくものであってもよい。秘密のより多くのビットに基づいて関数が計算される場合、計算されるアドレスでは、3つ以上の相異なる値を取得できることが理解されよう。したがって、秘密の値に応じて、相異なるアドレスに関係付けられた情報をメモリからロードすることができ、これによりエントリが、アドレス62、64の1つに対して、キャッシュ構造体30、32、36に割り当てられ得る。
【0050】
アドレス62、64の1つに対して新しいエントリを割り当てると、他のエントリがキャッシュ構造体30、32、36の1つから削除されるという結果になる可能性もある。キャッシュ構造体は、所与のアドレスに対するエントリが、キャッシュ構造体内のどの場所にでも割り当てられるのではなく、限られた場所のセットの1つにしか割り当てられ得ないことを意味する、セットアソシアティブ方式で実現され得ることが多い。同じセット内にインデックスを付けるアドレス群は、前もって知ることができるか、又は、アドレスの相異なるパターンにアクセスするのにかかる時間を分析して、どのアドレスがキャッシュ・リソースについて競合し、アクセスによる遅延を増加させる傾向があるかを推定することによって、推測できる。したがって、攻撃者は、どのアドレスがキャッシュから削除されたかをキャッシュ・アクセス・タイミングから推測して、2番目のロード60によってロードされた情報のための場所を空け、ひいては潜在的な候補アドレス62、64のどれが秘密に基づいて計算されたかを判断することができる可能性がある。すなわち攻撃者は、いくつかのアドレスへのキャッシュ・アクセス・タイミングを測定することで、秘密に関する何らかの情報を推測できる。この情報は、秘密を完全に識別するのには十分ではないかもしれないが、たとえば攻撃者は、秘密の様々な部分を使用して、様々なアドレス計算関数を使って攻撃を複数回繰り返すことにより、攻撃者がアクセスを許可されてはならない何らかの秘密性の高いデータを導き出すために、秘密に関するより多くの情報を徐々に継ぎ合わせることができる。
【0051】
図2は、分岐予測器を使用して秘密情報を攻撃し、秘密情報をより低い特権コードが見られるようにする、可能性のあるやり方の単なる一実例を示している。この形態の攻撃は、セキュリティ・ニーズ及び信頼レベルが異なる多くの様々な実行コンテキストが、単一の分岐予測器状態のセットを共有する場合が多いという事実を不正利用して、攻撃者が別のプロセスの実行に影響を与え、別のプロセスの分岐パターンを監視できるようにする。攻撃者が、分岐予測状態を変更して多数の誤って予測される分岐を引き起こすことにより、他のプロセスの性能を低下させるためのやり方も提示する。
【0052】
こうした種類の攻撃に対する1つの可能な軽減策は、コンテキストの切り替えが発生するたびに分岐予測器から分岐予測状態をフラッシュすることであり得る。しかしこの手法は、所与のプロセスが、別の実行スロットに戻るたびにその分岐予測状態をもう一度最初から導き出さなければならない可能性があり、性能に影響を与える多くのさらなる予測の誤りを引き起こし得るので、代償が大きい場合がある。別の手法は、(分岐方向予測器又はBTBの)分岐予測状態の各アイテムにプロセス識別子をタグ付けして、それにより分岐予測状態が、現在実行中のプロセスと同じプロセスによって割り当てられた場合にのみ使用されるようにすることであり得る。しかし該手法もやはり、異なる分岐予測状態のセットを必要とする、それぞれ個別のソフトウェア・ワークロードを一意に識別するために、比較的多数のビットを有する識別子を必要とする可能性があるので、回路面積及び電力の点から代償が大きい場合がある。実際には、分岐予測状態のエントリは、比較的小さい可能性があり、特に分岐方向予測器については、個々の分岐予測のエントリが2ビットくらいの小ささであり得る。したがって、分岐予測器のすべてのエントリに追加のワークロード識別子を加えると、分岐予測構造体、及び現在のワークロード識別子を分岐予測エントリの識別子と比較する、対応する比較ロジックに必要な記憶容量が大幅に増加するという結果がもたらされ得る。またこの手法では、より大きな総数のエントリが分岐予測器に提供され、それにより同じマイクロ・アーキテクチャ上の構造体内の、様々なソフトウェア・ワークロードに対する別個の分岐予測状態の、複数のセットに適応することができる必要があろう。
【0053】
以下で論じる手法では、すべての分岐予測状態を分岐予測器4自体に格納するのではなくて、個々のソフトウェア・ワークロードに対応する分岐予測器状態のセット60が、分岐予測器4のマイクロ・アーキテクチャ内に設けられた、より小さな分岐予測キャッシュ構造体40、41、42にバッキング・ストアを提供できる、メモリ・システム30、32、34に格納され得る。分岐予測状態の各セット60は、個々のプロセス、プロセス群、プロセス内の特定のアドレス範囲にあるコードの一部、所与のプロセス内の連続するワークロード分割命令間にあるコードの一部、又は同じプロセスに対応するいくつかのスレッドの個々のスレッドであり得る、個々のソフトウェア・ワークロードに対応することができる。ラインフィル及び書戻し制御回路44は、分岐予測キャッシュ40~42とメモリ・システム30、32、34との間の分岐予測状態の転送を制御することができる。
【0054】
図1では、簡略にするために、主メモリ内の分岐予測状態のセット60は主メモリ34内にのみ示しているが、このデータの一部をさらにキャッシュ30、32にも割当てできることが理解されよう。分岐予測状態のセット60は、たとえば、オペレーティング・システム又はハイパーバイザなどの監視プロセスによって、対応するソフトウェア・ワークロードに割り当てられるメモリ範囲に格納することができる。場合によっては、分岐予測状態のセット60は、対応するソフトウェア・ワークロード自体がアクセスできないメモリ範囲に割り当てられてもよく、それにより所与のワークフローは、それ自体の分岐予測データを見ることができない。分岐予測データセット60を格納するメモリの範囲は、攻撃者が、所与のソフトウェア・ワークロードに対する分岐予測状態を破損できなくするために、分岐予測状態のセットへの書き込みが許可されるシステムの唯一の要素がラインフィル/書戻し制御回路44となり得るように、ロード・ストア・ユニット26内で実行される命令に対してのみ読み取られ得る。したがって、分岐予測状態(分岐方向予測状態BP、分岐履歴バッファ状態BHB、及び分岐ターゲット・バッファ状態BTBのうちの1つ、2つ、又はすべてが含まれ得る)をメモリ・システム30、32、34(RAM内)に格納することによって、それぞれがそれ自体の分岐予測状態のセットを有する、多数のプロセス又はソフトウェア・ワークロードをサポートすることができる。場合によっては、様々なソフトウェア・ライブラリ又は様々なブラウザ・タブに、それ自体の分岐予測状態のセットを持たせてもよい。分岐予測キャッシュ構造体40~42は、パイプラインが所与のソフトウェア・ワークロードからの命令を実行しているとき、予測を行うために、確実にそのワークロードに対応するセット60からの分岐予測状態しか使用できないよう配置され得る。これにより、分岐予測状態の1つのセット60に関係付けられた攻撃者のプロセスが、別の分岐予測状態のセットを用いて実行している別のプロセスに影響を与えることになるやり方で、分岐予測状態をトレーニングすることがもはや不可能になるので、
図2に示す形態の攻撃を軽減する。
図1は、BDP、BHB、及びBTBのすべてが、主メモリのバッキング・ストアに格納される分岐予測状態のキャッシュとして機能する実例を示しているが、これは必須ではなく、他の実例では、1つ又は複数のこうした構造体からの状態(たとえばBHB)は、メモリに保存されるのではなく、ワークロードの切替え時に単に破棄されてもよく、一方他の形態の分岐予測状態は、依然としてメモリ34に保存されてもよい。
【0055】
図3は、分岐予測キャッシュ構造体40~42の実例をより詳細に示す。簡略にするために、これらの構造体はすべて、以下で分岐予測キャッシュと呼ぶことにする。分岐予測キャッシュは、分岐が起きる/起きない、の結果を予測する情報をキャッシュする分岐方向予測キャッシュ40、分岐履歴バッファに対応する分岐履歴情報の一部をキャッシュするBHBキャッシュ41、又は分岐ターゲット・アドレスの予測をキャッシュするBTBキャッシュ42のいずれかであり得ることが理解されよう。
【0056】
分岐予測キャッシュ40~42は、それぞれが対応する命令アドレスのブロックに対する予測を提供するいくつかのエントリ64を備える。各エントリは、エントリが有効なデータを提供するかどうかを示す有効フラグ66、エントリ64によって提供される予測が、エントリが割り当てられた後に変更されているが、メモリ34に格納された分岐予測状態の対応するセット60にまだ書き戻されていないかどうかを示す汚れフラグ68、どのエントリが特定のアドレスに関係するかを識別するために使用されるアドレス・タグ70、及び対応するアドレスのブロックに対する予測された分岐結果を提供する予測状態72を備えることができる。キャッシュの配置構成は、
図3に示すものとは異なる可能性があり、各エントリは、
図3に示していない他の形態の情報を備え得ることが理解されよう。
【0057】
図3に示すように、分岐予測キャッシュ40~42(又は一般に、分岐予測器4)は、ラインフィル/書戻し制御回路44を介してフェッチ工程6、実行工程18、及びメモリ・システム30、32、34とのインタフェースを備えることができる。分岐予測キャッシュは、フェッチ工程6から提供されたターゲット命令アドレス70に基づいてルックアップでき、そのターゲット命令アドレスに対応するエントリが分岐予測キャッシュ内にある場合、キャッシュは、対応する分岐結果の予測72をフェッチ工程へ返し、予測72は、命令キャッシュ8からの後続の命令のフェッチを制御するために使用される。
【0058】
所与のターゲット命令アドレス70がキャッシュ・ミスした(現在、その命令アドレスに対応する有効なエントリがない)場合、現在のソフトウェア・ワークロードに対応するセット60からの、分岐予測状態の関係するアイテムを格納する、関係するメモリ・アドレスを計算し、次いで関係するエントリをキャッシュにフェッチするためにメモリ・システムに要求を発行する、エントリ選択回路45を備えることができるラインフィル/書戻し制御回路44に、ラインフィル要求74が発行され得る。場合によっては、関係する分岐予測状態を分岐予測キャッシュ40~42にロードすることを要求するメモリ・アクセス要求は、ロード・ストア・ユニット26及び/又はMMU35を経由することがある。或いは、ラインフィル/書戻し制御部44は、メモリへの別個のインタフェースを備えることができる。分岐予測状態は、物理アドレス又は仮想アドレスにアサインすることができ、仮想アドレスにアサインされる場合、関係する分岐予測状態を格納する実際の物理アドレスを生成するために、TLB36を使用したアドレス変換が必要になる場合がある。
【0059】
最終的に、ラインフィル要求に応答して、要求された分岐予測状態データを提供するメモリ・システムから、ラインフィル・フェッチの応答76が返され、次いで該応答は、分岐予測キャッシュ40~42の所与のエントリに割り当てられ得る。新しく割り当てられたエントリのための場所を空けるために、他の分岐予測状態データを削除する必要があり、削除されるエントリのデータが汚れフラグ68で示される汚れたデータであった場合、書戻し要求78がメモリ・システムに送信され得る。マルチプロセッサ・システムでは、複数のプロセッサが同じ分岐予測データのセットを共有する場合、いくつかの実例では、1つのプロセッサによってトリガされた分岐予測状態の書戻しが、他のプロセッサの分岐予測キャッシュ40~42内に同じ分岐予測データをキャッシュすることができた他のプロセッサから確実に見ることができるようにする、コヒーレンシ方式が適用され得る。ただし、1つのプロセッサの分岐予測状態と、対応する分岐予測状態との間のコヒーレンシを保証することは、必須ではない。というのは実際には、分岐予測状態に一貫性がなくなった場合、そのペナルティは誤った処理の結果ではなく、単に予測の誤りだからであり、そのため他の実施態様では、回路面積及び複雑度を無駄遣いしないように、マルチプロセッサ・システムの相異なるプロセッサにキャッシュされた分岐予測状態についてコヒーレンシを保証しないことが好ましい場合がある。
【0060】
命令が、分岐予測器4で行われた分岐予測に基づいて投機的にフェッチされ、デコードされ、発行され、且つ実行されると、最終的に実際の分岐結果38は、実行工程18から返され、分岐予測キャッシュ40~42の関係するエントリで現在示している予測と比較され得る。分岐が誤って予測された場合は、予測を更新して、将来予測が正しくなる可能性を高めることができる。たとえば、異なる予測の信頼度が、以前の予測を上書きするのに十分なほど高くなった場合、信頼度カウンタを増減でき、そして予測結果を変更できる。実際の分岐結果38が返されることによって予測が変更される場合、汚れフラグ68をセットすることができ、それにより後で、この分岐予測状態の削除によって書戻し要求78がトリガされ、メモリ・システム内の分岐予測状態のうち対応するものが更新されることになる。
【0061】
処理がソフトウェア・ワークロード間で切り替わると、信号80が、ワークロードの切替えを検出できるパイプラインの任意の要素によって、分岐予測器4に供給される。たとえばフェッチ工程6が、命令フェッチ・アドレスが相異なるソフトウェア・ワークロード間の境界をマーク付けするプログラム命令アドレスに達したことを認識できるか、又はデコード工程10が、ワークロード分割命令が発生したのを検出し、分岐予測器にワークロードの切替えを通知できる。また、実行工程18は、ワークロードの切替えが検出されたときにマーク付けして、これを分岐予測器4に知らせることができる。また場合によっては、ワークロードの切替えは、割込み又は例外によってトリガされてもよく、この場合、ワークロード切替信号80は、割込コントローラから送信されてもよい。ワークロード切替信号80の発信源にかかわらず、ワークロード切替信号80に応答して、分岐予測キャッシュ40~42は、各エントリの有効ビット66をクリアすることにより、分岐予測キャッシュ内のすべてのエントリを無効化することができる。これにより、前に割り当てられたどのような分岐予測状態も、前のワークロードに基づいてトレーニングされていたときに、次に来るワークロードに対する予測を行うのに、確実に使用されなくなるであろう。エントリ64のいずれかが、汚れフラグ68によってマーク付けされた汚れた予測データを含んでいた場合、書戻し要求78がラインフィル/書戻し制御回路44によってトリガされ、汚れた状態を、メモリ・システムの分岐予測状態の対応するセットに書き戻させることができ、それにより、終了する(outgoing)ワークロードは、後で再度実行される場合、実際の分岐結果48に基づいてトレーニングされた、以前に導き出された予測のいずれかから恩恵を受けることができる。
【0062】
図4は、ワークロード間のコンテキスト・スイッチの実例を示す。最初にワークロード0が実行され、次いでワークロード・スイッチ(又はコンテキスト・スイッチ)82が発生して、処理パイプラインをトリガしてワークロード1に切り替える。上記で論じたように、この時点で、分岐予測キャッシュ40~42のすべてのエントリが無効になり、どの汚れた状態も、ワークロード0に関係する分岐予測データセットに書き戻される。次に来るワークロード1に関係する分岐予測状態をキャッシュに入力するために、ワークロード・スイッチ82は、ラインフィル/書戻し制御回路44もトリガし、ワークロード1に関係する分岐予測状態のセット60の少なくとも最初の部分について、メモリ・システムにフェッチ要求を発行する。場合によっては、この時点で、ワークロード1に対する分岐予測状態のセット全体を要求できる。ただし、性能を向上させるためには、状態を、要求に応じてより小さい部分、たとえば一度に1キャッシュ・ラインをロードする方が、より効率的であり得る。したがって、分岐予測状態のセット60は、分岐予測キャッシュ40~42によって一時的にキャッシュされるいくつかの部分に分割され得るが、必要に応じて、より低いレベルのメモリ階層に書き戻され得る。これにより、コンテキスト切替えによる遅延が短縮され、状態の全体的なサイズに制限を課す必要がなくなる。
【0063】
次に来るワークロードに対する分岐予測状態のセットのすべてがワークロードの切替えに応答してロードされるわけではない場合、キャッシュが、フェッチ工程6から提供されるターゲット・アドレス70に対する有効なエントリを現在有していないと、後で分岐予測キャッシュ40~42でのミス84が検出され得る可能性がある。したがって、分岐予測キャッシュでのミスがある場合、もう一度ラインフィル要求74がトリガされ、ワークロード1の分岐予測状態のセット60の対応する部分が要求され得る。
【0064】
別のオプションは、
図1に示すように、分岐予測状態プリフェッチャ86を提供することであり得る。分岐予測状態プリフェッチャは、分岐予測キャッシュ40~42でルックアップされた一連の命令アドレスが供給され、連続したアドレス間に一定のオフセットを持つアドレスのストライド・パターンが検出されるかどうかを検出する。ストライド・パターンが検出された場合、プリフェッチャは、ラインフィル/書戻し制御回路44をトリガし、予測されたアドレスのストライドの間隔で、現在の実行ポイントを超えて広がるアドレスに関係する分岐予測状態データについて、追加のラインフィル要求をメモリ・システムに発行できる。実際のアドレスのパターンがもはやストライド・パターンに従っていないことが検出された場合、かかるプリフェッチは、別のストライド・パターンが検出されるまで停止され得る。たとえば、命令を命令キャッシュ8にプリフェッチするために使用されるどのような既知のプリフェッチ技法もまた、分岐予測キャッシュ40、41、42に適用される可能性がある。
【0065】
分岐予測キャッシュ40~42がコンテキスト切替え時に無効化され、その結果、次に来るソフトウェア・ワークロードが、別のソフトウェア・ワークロードの実行により得られた結果に基づいて入力されたエントリ64にヒットする可能性はないので、これは、各エントリ64にワークロード識別子をタグ付けする必要はなく、上記で論じた攻撃を依然として軽減しながらも、分岐予測キャッシュ40~42を実現するための面積上のオーバヘッドを削減することを意味していることに留意されたい。
【0066】
分岐予測キャッシュは、分岐予測状態をキャッシュすることができ、それにより、なにがしかの最小粒度のサイズの、隣り合うアドレスのブロックに対して、分岐命令結果の別個の予測を行うことができる。たとえば、最小粒度のサイズがたとえば16バイトの場合、これは、16バイトのブロック内のすべての命令で、そのブロックに対して常に同じ分岐結果が予測される可能性があるが、隣り合う16バイトのブロックの命令では、前のブロックと比較して、異なる予測が行われる可能性があることを意味し得る。多くの場合、複数の分岐が同じブロック内に出現することは比較的まれであり得るので、なにがしかの最小粒度のサイズを定義することにより、分岐予測器のオーバヘッドを削減でき、かかる複数の分岐の場合を予測するための追加の構造体を提供できるか、或いはBTB内の予測状態72は、1つのブロックに複数の分岐がある重要な場合(account case)についての情報を含めるために拡張できる。
【0067】
ただし、最小粒度のサイズの隣り合うブロックに対して別個の予測を行うことができるが、その最小粒度のサイズのアドレスの可能なすべてのブロックに対する完全に別々の分岐予測アイテムを、分岐予測セット60内に維持できるだけの、十分な分岐予測状態のアイテムを提供することは、非常にコスト高になる可能性がある。その代わりに、最小粒度のサイズの相異なるアドレスのブロックは、分岐予測状態データの同じアイテムを共有でき、所与の命令アドレスから対応する分岐予測状態のアイテムへのマッピングは、アドレスに適用されるあるハッシュ関数に基づいて決定され、ハッシュ関数は、より大きいアドレスを、そのアドレスにアクセスする分岐予測状態の特定のアイテムのより小さい識別子にマッピングする。
【0068】
典型的な分岐予測器では、かかるハッシュ関数は、局所性をできるだけ少なくするよう設計されることが多い。ハッシュ関数の局所性とは、アドレス空間の近くの範囲にあるアドレスが、分岐予測状態の同じアイテムにマッピングされがちであるという特性を指す。したがって、局所性をほとんどもたらさないハッシュ関数を使用すると、アドレス空間の非常に相異なる部分からのアドレスが同じ分岐予測状態を共有する可能性が高くなりがちであり、一方アドレス空間内の近くの範囲のアドレスは、分岐予測状態の相異なるアイテムにマッピングされがちであろう。これは、プログラム・コードの近くの範囲にある分岐が、同じ分岐予測エントリへのアクセスで競合するホットスポットをなくするために、一般的な分岐予測器にとって望ましい場合がある(ホットスポットは、競合するやり方で分岐予測器をトレーニングし、その結果どちらの範囲も実際の分岐予測結果のための適切な予測を受け取らないので、性能が低下するという結果になる可能性がある)。対照的に、アドレス空間でさらに離れている命令アドレスでの分岐は、パイプライン内で、互いに近くで実行される可能性がより低く、処理が所与のアドレスに達するときまでに、アドレス空間内で遠く離れている別のアドレスに対して行われた分岐結果の予測は、関係する可能性がより低くなる。したがって、標準の分岐予測のハッシュ方式は、局所性を減らし、アドレス空間の相異なる部分からのアドレスを予測状態の同じアイテムに、典型的には分岐予測構造体自体が使用する最小粒度の粒度のサイズと同じ粒度で、マッピングする傾向がある。
【0069】
対照的に、
図1に示す、RAM34がキャッシュされた予測構造体40~42のバッキング・ストアとして使用される手法では、かかる従来の分岐予測ハッシュ方式は、不十分な性能しか提供できないであろう。ハッシュ方式に局所性がほとんどない場合、これは、処理パイプラインがプログラム命令のいくつかの隣接するブロックをステップ実行するときに、各ブロックが現在のソフトウェア・ワークロードに対応するセット60内の分岐予測状態の相異なるアイテムにマッピングされる可能性があることを意味し、ラインフィル/書戻し制御回路44によって多数のラインフィル・フェッチ要求が発行されるという結果をもたらし、コンテキスト切替えによる遅延、及び分岐予測状態の転送に必要なメモリ帯域幅を増加させ得る。したがって、標準のハッシュ方式は、分岐予測キャッシュ40~42の性能を低下させるという結果をもたらし得る。
【0070】
図5A及び
図5Bは、局所性を改善するように、分岐予測状態の適切なエントリの選択を生成するために使用される、分岐予測キャッシュ40の再構成及びハッシュ・アルゴリズムのための手法を示す。
図5Aに示すように、所与のソフトウェア・ワークロードに対する分岐予測状態60のセットは、1回のデータ転送でサブ・テーブル90が分岐予測キャッシュ40~42に転送できるユニットのサイズの、いくつかのサブ・テーブル90に分割することができる。すなわち、各サブ・テーブル90のサイズは、1つのキャッシュ・ラインと一致し得る。各サブ・テーブルは、いくつかの別々の予測状態のアイテムを含むことができ、予測状態の各アイテムは、最小粒度のサイズSの、所与のアドレス範囲に対応する。したがって、サイズSの各アドレス範囲に、サイズSのアドレスの隣り合うブロックに対して行われた予測とは別に行われた、別個の予測があり得る。
【0071】
図5Aの左側のサイズに示すように、所与のアドレスに対して予測を行うよう適切なサブ・テーブル90を選択するために適用されるハッシュ関数は、アドレスを、サイズSより大きいサイズTの、連続するアドレス範囲に対応するブロック内のサブ・テーブルにマッピングするものであり得る。したがって、この実例では、
図5AでBとマークされた連続するアドレス範囲内のすべてのアドレスは、それぞれ同じサブ・テーブル90-Bにマッピングすることができる。
図5Aの上部に示すように、これは、たとえば、ターゲット・アドレスの第1の部分94を使用して、アクセスされるべき特定のサブ・テーブル90を選択し、次いでサブ・テーブル内の個々の予測エントリを選択するためのハッシュ関数96を、アドレスの残りの(第2の)部分98に適用することにより実現できる。この実例では、第1の部分94はアドレスの中間部分にあり、それにより第2の部分98は、第1の部分よりもあまり重要でないビット及び第1の部分よりも若干重要なビットを含んでいる。他の実例では、第1の部分94はアドレスの上端にあってもよく、それにより、より重要でないビットのみがハッシュ関数96に入力される。一部のアドレスビットは、サブ・テーブルの選択及びハッシュ関数96のどちらにも使用できない(たとえば
図5Aに示すように、下部は無視され得る)。アドレスの第2の部分に適用されるハッシュ関数96は、局所性をほとんどもたらさないよう設計された、標準的な分岐予測ハッシュ関数と同様の設計のものであり得る。しかし、このハッシュ関数から第1の部分94を除外することにより、これは、かかる標準的なハッシュ関数と比較して局所性が増すことを意味する。これは、サイズTの連続したアドレス範囲内にあるサイズSのすべてのアドレスのブロックについて、そのサイズTのアドレス範囲内の任意の分岐の分岐結果を予測するために必要なすべての関係する分岐予測状態を、1回のデータ転送で分岐予測キャッシュ40~42に転送できることを意味する。これは、サイズTの範囲内のアドレスに対する分岐結果を予測するために必要な、メモリへの個別のアクセス回数を減らすことにより、性能向上に役立つ。
【0072】
いくつかの実例では、ターゲット・アドレスに加えて、BHB41に含まれる分岐履歴情報を、分岐予測状態へのインデックスを生成するために使用される、ハッシュ関数96への追加入力として使用することができる。これは、(前の分岐の結果に応じて)プログラム内の同じ分岐命令への相異なるルートを区別するのに役立つことができ、より正確な予測を行うのに役立つことができる。
【0073】
図5Bは、分岐予測状態が
図5Aに示すように配置されるときに使用するための、分岐予測キャッシュの代替の配置構成を示す。
図5Bでは、やはり各エントリ64は
図3と同様に、有効ビット66、汚れビット68、及びアドレス・タグ70を有する。ただし
図5の予測フィールド72は、
図5Aに示すように、ターゲット・アドレスの第1の部分94に基づいて選択されたサブ・テーブル90をキャッシュする。エントリ64の1つについて示すように、各サブ・テーブルは、この場合、最小粒度のサイズSの相異なるアドレスのブロックにそれぞれ対応する、予測状態のいくつかの個別のアイテム100を含むことができる。したがって、この配置構成では、各エントリ64は、サイズTのアドレスのブロックに対応するが、サイズSの個々のブロックに対する個別の予測を含み、ここでTはSよりも大きい。この場合、分岐予測キャッシュにアクセスするとき、どのエントリ64にアクセスするかを選択するインデックス102は、
図5Aに示すのと同じやり方でターゲット・アドレスの第1の部分94から得られ、次いでアドレスの第2の部分98(及びオプションでBHB41からの分岐履歴)がハッシュ関数96に入力され、次いでハッシュ関数は、
図5Bの下部に示すように、インデックス付きエントリ64内の個々の予測アイテム100を選択するために使用される。
【0074】
したがって、
図5A及び
図5Bでは、各キャッシュのエントリは、アドレス空間のあるサブセットのための別個のBP/BTBとして機能する。たとえば、キャッシュの粒度が64バイトのサイズに選択され、利用可能なRAM空間が16kバイトである場合、256個の別個のBP/BTBをRAMに格納できる。ルックアップを実行するときの簡単な方式は、ソース・アドレスのビット19:12を使用して、どのBP/BTBのルックアップを実行するかを決定し、次いで通常のやり方で、64バイトのサブBTB/BP内で、BP/BTBのルックアップを実行することであろう。この特定の実例では、結果としてメガバイトごとにエイリアシングが生じることになり、これを軽減するためにハッシュが使用され得る。
【0075】
図6は、所与のターゲット命令アドレスに対する予測のために、分岐予測器4をルックアップする方法を例示する流れ図を示す。ステップ150で、ターゲット命令アドレスが分岐予測器4に供給される。ステップ152で、分岐予測キャッシュ40~42に関係するキャッシュ・ルックアップ回路は、ルックアップされたアドレスに対してヒットしたか又はミスしたかを判断する。キャッシュ構造体のインデックス付きエントリが、アドレス・タグ70がターゲット命令アドレスの対応する部分と一致する有効なエントリを含む場合、ヒットが生じる。
図6は、分岐予測キャッシュに関して一般的に説明しているが、分岐予測キャッシュは、方向予測キャッシュ40又は分岐ターゲット・バッファ・キャッシュ42のいずれかであり得ることが理解されよう。
【0076】
分岐予測キャッシュ内でヒットする場合、ステップ154で、分岐命令の予測された結果が、ターゲット・アドレスに対してヒットする、一致するエントリに基づいて決定される。予測された結果はフェッチ工程6に戻すことができ、フェッチ工程は次いで、予測された分岐結果に基づいて後続の命令をフェッチすることができる。実行工程18で、ターゲット命令アドレスに対応する命令の実際の結果がわかると、実際の結果を分岐予測器に戻すことができ、ステップ156で、分岐予測器は、実際の結果を示された予測状態と比較し、予測の信頼度レベル又は予測自体を変更する必要がある場合は予測状態を更新することができる。
【0077】
ステップ152で、分岐予測キャッシュ40~42でミスが検出された場合、ステップ160で、ラインフィル及び書戻し制御回路44は、状態フェッチ要求(又はラインフィル要求)をトリガして、現在のワークロードに対応する予測状態データのセット60の対応する部分を、関係する分岐予測キャッシュ40~42にフェッチすることを要求する。
この時点で、エントリ選択回路45は、
図5Aに示す手法を適用することにより関係する分岐予測状態のアドレスを生成し、適切なサブ・テーブルを選択し、次いでサブ・テーブルを、そのサブ・テーブルに対応するメモリ内の関連するアドレスにマッピングすることができる。たとえば、ラインフィル及び書戻し制御回路内のエントリ選択ロジック45は、それぞれのワークロードに対する各サブ・テーブルのアドレスを指定するテーブルを備えることができる。ステップ162で、予測状態の対応する部分がラインフィル要求に応答して返されると、予測状態の対応する部分を格納するために、分岐予測キャッシュ40~42内にエントリが割り当てられる。汚れデータがすでに含まれている犠牲者エントリが選択される場合、この汚れ予測状態は、メモリ・システムに書き戻される。終了するワークロードに関係する分岐予測キャッシュ40~42内のすべてのエントリが、コンテキスト・スイッチに応答して書き戻されるシステムでは、分岐予測キャッシュでのミスによってトリガされたどの書戻しも、現在のワークロードに関係すると想定され得るため、この場合、分岐予測器で、コンテキスト・スイッチを超えてまで以前のワークロードのどのような識別も追跡する必要がないかもしれない。そうではなくて、その後の上書きが必要になるまで書戻しを延期することによりコンテキスト・スイッチのオーバヘッドを低減するシステムでは、分岐予測キャッシュは、以前に実行されたワークロードの追加の識別子を格納することができ、また各キャッシュのエントリ64内に、汚れデータを含む無効なエントリが、現在のワークロード又は以前に実行されたワークロードに関係するかどうかをマーク付けするフラグを含めることができ、それにより書戻し時に、どの分岐予測状態のセットが汚れデータを書き戻される必要があるかを判断することができる。
【0078】
ラインフィル要求がメモリ・システムによって処理されるのに時間がかかる場合があるので、ステップ164で、分岐予測器4は、ターゲット命令アドレスに対する予測結果72として初期設定の分岐予測を返すことができる。初期設定の予測では、たとえば、使用可能な分岐予測状態がない場合、分岐は起きないと予測されるべきであり得る。初期設定の予測を行うことにより、関係する予測状態が返されるのを待っている間に後続の命令をフェッチし続けることができ、後続の命令の処理での遅延が低減される。初期設定の予測が正しくないことが判明した場合、他の分岐予測の誤りと同様に処理できる。ステップ166で、状態フェッチ要求に応答してメモリ・システム30、32、34から分岐予測状態が返されると、分岐予測状態は、ステップ162で割り当てられた分岐予測キャッシュ40~42のエントリに書き込まれる。実際の分岐結果38が、この時点までにすでに利用可能であり、フェッチされた状態データによって示される現在の値と一致しない場合、フェッチされた状態データも、必要に応じて、上記のステップ156で説明したキャッシュの既存のエントリへの更新と同じやり方で、分岐結果に基づいて更新できる。
【0079】
図7は、分岐予測器4でワークロードの切替えを処理する方法を示す流れ図を例示する。ステップ170で、ワークロード・スイッチ信号80に基づいて、処理するワークロードの切替えが検出される。上記で論じたように、ワークロード・スイッチ信号は、たとえば、割込コントローラ、実行工程80、フェッチ工程6、又はデコード工程10によって提供され得る。ステップ172で、ワークロードの切替えに応答して、分岐予測キャッシュ40~42は、各エントリ64を無効としてマーク付けするために、有効フラグ66をクリアすることによって、そのエントリのすべてを更新する。これにより、次に来るワークロードが前のワークロードによって割り当てられたエントリにヒットすることを防ぐ。ステップ174で、(汚れフラグ68がセットされたエントリ内で示される)どの汚れ予測状態も、書戻し要求78を発行することによってメモリに書き戻される。或いは、後続のラインフィル・フェッチ76は、エントリの上書きが必要になるまで、書戻しを延期することができるが、この場合、どのエントリが次に来るワークロードに関係し、どのエントリが終了するワークロードに関係するかの、さらなら何らかの追跡が必要となり得る。この追跡は、各キャッシュのエントリ64内で次に来るワークロードと終了するワークロードとを区別するのに、ただ1ビットのフラグで十分な可能性があるので、各エントリに完全なワークロード識別子をタグ付けするよりもさらに効率的であり得ることに留意されたい。すべてのエントリ間で共有される、終了するワークロードの識別子の個別の記憶部は、各キャッシュのエントリ64で終了するワークロードを個々に識別することなしに、終了するワークロードを識別するのに十分であり得る。或いは、他のマイクロ・アーキテクチャの実施態様では、現在のワークロードの処理が開始されると、以前に実行されたワークロードからのどの残りの汚れたデータも考慮する必要がないように、コンテキスト・スイッチに応答して単にすべての書戻し要求を発行することにより、書戻しプロセスを簡略化する方が好ましい場合がある。
【0080】
ステップ176で、ソフトウェア・ワークロードの切替えに応答して、ラインフィル/書戻し制御回路44も、1つ又は複数の状態フェッチ要求74を生成して、次に来る新しいワークロードに対する分岐予測状態のセット60の少なくとも一部のフェッチを要求する。ワークロードの切替えに応答して要求される分岐予測状態のセットの一部は、分岐予測状態60のセット全体の場合もあれば、より小さい部分の場合もあり、残りの部分は、必要に応じて要求があり次第フェッチされ、新しいワークロードの後続の処理で検出されるターゲット・アドレス70に対する予測を生成する。
【0081】
本出願では、「...するよう構成される」という用語は、装置の要素が、定義された操作を実行できる構成を備えることを意味するように使用される。これに関連して、「構成」とは、ハードウェア又はソフトウェアの相互接続の配置構成又は態様を意味する。たとえば、装置は、定義された操作を提供する専用のハードウェアを備えてもよく、又はプロセッサ若しくは他の処理デバイスを、機能を実行するようにプログラムしてもよい。「するよう構成される」は、定義された操作を提供するために、装置要素をいかなる形であれ変更する必要があることを示唆するものではない。
【0082】
本発明の例示的な実施例を、添付図面を参照して本明細書で詳細に説明してきたが、本発明はそれらの正確な実施例に限定されるものではなく、当業者によってその中に、添付の特許請求の範囲によって定義される本発明の範囲及び精神から逸脱することなく、様々な変更及び修正を行うことができることを理解されたい。