(57)【特許請求の範囲】
【請求項１】
同時マルチスレッドを実施し、分岐履歴テーブルおよびカウント・キャッシュを有する分岐処理論理を含むプロセッサにおいて、類似した下位アドレスを共有する第１のスレッドおよび第２のスレッドを有する同時マルチスレッド環境での分岐予測を向上させる方法であって、
前記第１のスレッドおよび前記第２のスレッドがコードを共有する場合、前記分岐履歴テーブルおよび前記カウント・キャッシュを統一アレイとして更新するステップと、
前記第１のスレッドおよび前記第２のスレッドが同一コードを共有しない場合、前記分岐履歴テーブルおよび前記カウント・キャッシュの隣接する第１の半分を前記第１のスレッドに、前記分岐履歴テーブルおよび前記カウント・キャッシュの隣接する第２の半分を前記第２のスレッドに論理的に割り振るステップと、
を含む方法。
【請求項２】
前記アレイにスレッド識別子としてインデックスの最上位ビットを割り当てるステップであって、前記第１のスレッドおよび前記第２のスレッドのみを含む同時マルチスレッドの場合、前記第１のスレッドが１という識別子を割り当てられ、前記第２のスレッドが０という識別子を割り当てられるステップと、
前記分岐履歴テーブルおよび前記カウント・キャッシュを更新する前記スレッドに割り当てられた前記識別子を有する前記インデックスを参照するように、前記第１のスレッドおよび前記第２のスレッド中の各下位予測アドレスの最上位ビットをタグづけするステップと、
をさらに含む、請求項１に記載の方法。
【請求項３】
１つ下位のビットを有するインデックスを使用して、前記分岐履歴テーブルおよび前記カウント・キャッシュを更新する前記スレッドに論理的に割り振られた前記分岐履歴テーブルおよび前記カウント・キャッシュの対応する半分を更新するステップをさらに含む、請求項２に記載の方法。
【請求項４】
前記第１のスレッドおよび前記第２のスレッド中のどのスレッドが現在実行されているかに対応して、前記分岐履歴テーブルおよび前記カウント・キャッシュの半分に受け取った予測アドレスを割り振るステップをさらに含む、請求項２に記載の方法。
【請求項５】
事前に設定された回数のクロック周期が経過したときを判定するステップと、
前記所定の回数のクロック周期が終了したとき、前記第１のスレッドおよび前記第２のスレッド両方が同一コードを実行しているか評価するステップと、
前記所定の回数の周期が経過した後でのみ、前記モードを統一から分割に、また、分割から統一に切り換えるステップと、
をさらに含む、請求項１に記載の方法。
【請求項６】
前記評価するステップが、セグメント・ルックアサイド・バッファ中の共有ページ・ビットを検査するステップを含む、請求項５に記載の方法。
【請求項７】
前記評価するステップが、
設定された間隔における、有効アドレス・ディレクトリ中の更新回数を追跡するステップと、
前記更新回数を事前に設定された閾値と比較するステップと、
前記設定された間隔における前記更新回数が前記閾値を超えると、異なるモードへの切換えを開始するステップと、
を含む、請求項５に記載の方法。
【請求項８】
前記評価するステップが、
現在の動作モードの予測レートを追跡するステップと、
前記予測レートが事前に設定された誤り閾値を超えると、前記モードの切換えを開始するステップとを含む、請求項５に記載の方法。
【請求項９】
前記追跡するステップが、
事前に設定された回数の予測分岐を超える予測ミスの数を追跡するステップと、
前記予測ミスの数が事前に設定された閾値未満でない場合、予測分岐の前記事前に設定される回数を最大数まで増加させるステップと、
前記予測ミスの数が前記増加させるステップの後の前記事前に設定された閾値未満の場合、予測分岐の前記事前に設定される設定回数を減少させるステップとを含む、請求項８に記載の方法。
【請求項１０】
同時マルチスレッドを実施し、分岐履歴テーブルおよび１つのカウント・キャッシュを有する分岐処理論理を含むプロセッサにおいて、同様の下位アドレスを共有する第１のスレッドおよび第２のスレッドを有する同時マルチスレッド環境での分岐予測を向上させるシステムであって、
前記第１のスレッドおよび前記第２のスレッドがコードを共有する場合、前記分岐履歴テーブルおよび前記カウント・キャッシュを統一アレイとして更新する手段と、
前記第１のスレッドおよび前記第２のスレッドが同一コードを共有しない場合、前記分岐履歴テーブルおよび前記カウント・キャッシュの隣接する第１の半分を前記第１のスレッドに、前記分岐履歴テーブルおよび前記カウント・キャッシュの隣接する第２の半分を前記第２のスレッドに論理的に割り振る手段と、
を備えるシステム。
【請求項１１】
前記アレイにスレッド識別子としてインデックスの最上位ビットを割り当てるステップであって、前記第１のスレッドおよび前記第２のスレッドのみを含む同時マルチスレッドの場合、前記第１のスレッドが１という識別子を割り当てられ、前記第２のスレッドが０という識別子を割り当てられる手段と、
前記分岐履歴テーブルおよび前記カウント・キャッシュを更新する前記スレッドに割り当てられた前記識別子を有する前記インデックスを参照するように、前記第１のスレッドおよび前記第２のスレッド中の各下位予測アドレスの最上位ビットをタグづけする手段と、
をさらに備える、請求項１０に記載のシステム。
【請求項１２】
１つ下位のビットを有するインデックスを使用して、前記分岐履歴テーブルおよび前記カウント・キャッシュを更新する前記スレッドに論理的に割り振られた前記分岐履歴テーブルおよび前記カウント・キャッシュの対応する半分を更新する手段とをさらに備える、請求項１１に記載のシステム。
【請求項１３】
前記第１のスレッドおよび前記第２のスレッド中のどのスレッドが現在実行されているかに対応して、前記分岐履歴テーブルおよび前記カウント・キャッシュの半分に受け取った予測アドレスを割り振る手段とをさらに備える、請求項１１に記載のシステム。
【請求項１４】
事前に設定された回数のクロック周期が経過したときを判定する手段と、
前記所定の回数のクロック周期が終了したとき、前記第１のスレッドおよび前記第２のスレッド両方が同一コードを実行しているか評価する手段と、
前記所定の回数の周期が経過した後でのみ、前記モードを統一から分割に、また、分割から統一に切り換える手段とをさらに備える、請求項１０に記載のシステム。
【請求項１５】
前記評価する手段が、セグメント・ルックアサイド・バッファ中の共有ページ・ビットを検査する手段を備える、請求項１４に記載のシステム。
【請求項１６】
前記評価する手段が、
設定された間隔における、有効アドレス・ディレクトリ中の更新回数を追跡する手段と、
前記更新回数を事前に設定された閾値と比較する手段と、
前記設定された間隔における前記更新回数が前記閾値を超えると、異なるモードへの切換えを開始する手段とを備える、請求項１４に記載のシステム。
【請求項１７】
前記評価する手段が、
現在の動作モードの予測レートを追跡する手段と、
前記予測レートが事前に設定された誤り閾値を超えると、前記モードの切換えを開始する手段とを備える、請求項１０に記載のシステム。
【請求項１８】
前記追跡する手段が、
事前に設定された回数の予測分岐を超える予測ミスの数を追跡する手段と、
前記予測ミスの数が事前に設定された閾値未満でない場合、予測分岐の前記事前に設定される回数を最大数まで増加させる手段と、
前記予測ミスの数が前記増加させる手段の後の前記事前に設定された閾値未満の場合、予測分岐の前記事前に設定される設定回数を減少させる手段とを備える、請求項１７に記載のシステム。
【請求項１９】
第１のスレッドおよび第２のスレッドを有する同時マルチスレッド処理環境において、スレッド特有の分岐予測を提供するデータ・プロセッシング・システムであって、
分岐予測機構のために生成された予測アドレスおよび目標アドレスをそれぞれ追跡する、分岐履歴テーブルおよびカウント・キャッシュを含む同時マルチスレッドプロセッサと、
前記プロセッサに結合されるとともに、前記同時マルチスレッドプロセッサによって前記第１および第２のスレッド用のコードが取り出されるメモリと、
前記メモリを前記プロセッサに結合する手段と、
前記同時マルチスレッドプロセッサ内で、より正確な予測を達成するために前記第１および第２のスレッドの予測および目標を分離した区分において別個に追跡する、２つの論理的に分離した区分に前記分岐履歴テーブルおよび前記カウント・キャッシュのインデックスされたアレイを動的に分割する手段と、
を備えるシステム。
【請求項２０】
前記プロセッサが、
前記第１のスレッドおよび前記第２のスレッドがコードを共有する場合、前記分岐履歴テーブルおよび前記カウント・キャッシュを統一アレイとして更新する手段と、
前記第１のスレッドおよび前記第２のスレッドが同一コードを共有しない場合、前記分岐履歴テーブルおよび前記カウント・キャッシュの隣接する第１の半分を前記第１のスレッドに、前記分岐履歴テーブルおよび前記カウント・キャッシュの隣接する第２の半分を前記第２のスレッドに論理的に割り振る手段とを備える、請求項１９に記載のデータ・プロセッシング・システム。
【請求項２１】
前記アレイにスレッド識別子としてインデックスの最上位ビットを割り当てるステップであって、前記第１のスレッドおよび前記第２のスレッドのみを含む同時マルチスレッドの場合、前記第１のスレッドが１という識別子を割り当てられ、前記第２のスレッドが０という識別子を割り当てられる手段と、
前記分岐履歴テーブルおよび前記カウント・キャッシュを更新する前記スレッドに割り当てられた前記識別子を有する前記インデックスを参照するように、前記第１のスレッドおよび前記第２のスレッド中の各下位予測アドレスの最上位ビットをタグづけする手段とをさらに備える、請求項２０に記載のデータ・プロセッシング・システム。
【請求項２２】
１つ下位のビットを有するインデックスを使用して、前記分岐履歴テーブルおよび前記カウント・キャッシュを更新する前記スレッドに論理的に割り振られた前記分岐履歴テーブルおよび前記カウント・キャッシュの対応する半分を更新する手段とをさらに備える、請求項２１に記載のデータ・プロセッシング・システム。
【請求項２３】
前記第１のスレッドおよび前記第２のスレッド中のどのスレッドが現在実行されているかに対応して、前記分岐履歴テーブルおよび前記カウント・キャッシュの半分に受け取った予測アドレスを割り振る手段とをさらに備える、請求項２１に記載のデータ・プロセッシング・システム。
【請求項２４】
事前に設定された回数のクロック周期が経過したときを判定する手段と、
前記所定の回数のクロック周期が終了したとき、前記第１のスレッドおよび前記第２のスレッド両方が同一コードを実行しているか評価する手段と、
前記所定の回数の周期が経過した後でのみ、前記モードを統一から分割に、また、分割から統一に切り換える手段とをさらに備える、請求項２０に記載のデータ・プロセッシング・システム。
【請求項２５】
前記評価する手段が、セグメント・ルックアサイド・バッファ中の共有ページ・ビットを検査する手段を備える、請求項２４に記載のデータ・プロセッシング・システム。
【請求項２６】
前記評価する手段が、
設定された間隔における、有効アドレス・ディレクトリ中の更新回数を追跡する手段と、
前記更新回数を事前に設定された閾値と比較する手段と、
前記設定された間隔における前記更新回数が前記閾値を超えると、異なるモードへの切換えを開始する手段とを備える、請求項２４に記載のデータ・プロセッシング・システム。
【請求項２７】
前記評価する手段が、
現在の動作モードの予測レートを追跡する手段と、
前記予測レートが事前に設定された誤り閾値を超えると、前記モードの切換えを開始する手段とを備える、請求項２０に記載のデータ・プロセッシング・システム。
【請求項２８】
前記追跡する手段が、
事前に設定された回数の予測分岐を超える予測ミスの数を追跡する手段と、
前記予測ミスの数が事前に設定された閾値未満でない場合、予測分岐の前記事前に設定される回数を最大数まで増加させる手段と、
前記予測ミスの数が前記増加させる手段の後の前記事前に設定された閾値未満の場合、予測分岐の前記事前に設定される回数を減少させる手段とを備える、請求項２７に記載のデータ・プロセッシング・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ・プロセッシングに関し、詳細には、データ・プロセッシング・システムにおける分岐予測に関する。より詳細には、本発明は、データ・プロセッシング・システムの分岐予測機構内部での同時マルチスレッド動作を効率的に処理する方法およびシステムに関する。
【背景技術】
【０００２】
プロセッシング・システム内部での分岐予測は、当該技術分野においてよく知られている。プロセッシング・ユニットでの実行のためにキャッシュまたはメモリから命令が最初に取り出されると、プロセッシング・ユニット内部の予測機構が、取り出された命令グループ中の分岐命令によって採用されるであろう経路（ｐａｔｈ）を予測する。命令はアドレス操作（ａｄｄｒｅｓｓ  ｏｐｅｒａｔｉｏｎ）であり、経路は目標アドレス（ｔａｒｇｅｔ  ａｄｄｒｅｓｓ）と呼ばれるアドレスによって識別される。実際に命令が実行されると、予測が正しかったかどうかの検査が行われる。
【０００３】
プロセッサ内部の特定のハードウェアおよび／または論理構造は、分岐方向予測に続いて経路が正しく予測されていたかどうかの分析を実行する。現在のシステムには、取り出された分岐用の予測子（ｐｒｅｄｉｃｔｏｒ）を格納する３つの分岐履歴テーブル（ｂｒａｎｃｈ  ｈｉｓｔｏｒｙ  ｔａｂｌｅ、ＢＨＴ）と、取り出された分岐命令の一部のための予測された目標アドレスを格納するカウント・キャッシュとを含む、分岐予測論理を利用するものがある。「ローカル予測子」と呼ばれる１つのＢＨＴは、部分的な分岐アドレスによってインデックス（索引付け）される。予測方向は、ローカル予測子中のアドレスに関連づけられる。他の２つのＢＨＴ、「グローバル予測子」および「セレクタ」は、部分的な分岐アドレスと実行の最近の経路とのハッシュによってインデックスされる。カウント・キャッシュは、ある特定のタイプの分岐命令用に使用される目標アドレスであって、分岐命令アドレスに関連づけることによって分岐命令自体の中の情報から直接計算することができない目標アドレスのために使用される。
【０００４】
アプリケーション命令のプロセッサによる実行方法およびその後の分岐予測の信頼性に影響を与えるデータ処理における改良の１つとして、同時マルチスレッド（ｓｉｍｕｌｔａｎｅｏｕｓ  ｍｕｌｔｉ−ｔｈｒｅａｄｉｎｇ、ＳＭＴ）の実装が存在する。ＳＭＴを使用すると、プロセッサ上で実行中のプログラム・アプリケーションが１つまたは複数のスレッドとして実行される。それぞれのスレッドは、命令ストリームを含んでいる。複数のスレッドの情報は、任意の時点において、マシンの様々な部分に存在することができる。例えば、実行中の２つのスレッドがあるとき、両スレッドは、ＯＳには２つの別個のプロセッサとして見える。２つのスレッドはそれぞれ、プログラムがアクセスおよび／または変更を行うことができる標準的に構築されたすべてのレジスタのスレッド独自のコピーを有する（または、有するようにＯＳには見える）。
【０００５】
システム上でのアプリケーションの処理を全体として高速にするために、また、プロセッサ資源のより効率的な使用を保証するために、しばしば同じアプリケーションの複数のコピーが同時に実行される。このような実行が行われると、それぞれのコピーは、独自のスレッドの組を提供し、それぞれのスレッドは、メモリ・サブシステム内部の類似のプログラム／命令アドレスを共有することになる。（ＢＨＴおよびカウント・キャッシュに書き込まれる）分岐予測情報も同一であり、マージすることができる。しかし、プロセッサ上で実行中の複数のスレッドが異なるアプリケーションに属し、メモリ・サブシステム内部の異なるプログラム／命令アドレスを有することもしばしば生じる。しかし、ＢＨＴおよびカウント・キャッシュ内部に格納された命令の部分的なアドレスは、ＢＨＴおよびカウント・キャッシュでの何らかの重複と分岐予測に伴う正確さの問題の結果として、類似（ｓｉｍｉｌａｒ）したものとなり得る。
【０００６】
プロセッサのレベルでは、処理中に使用されるアドレスは一般に、有効アドレス（ｅｆｆｅｃｔｉｖｅ  ａｄｄｒｅｓｓ）である。こうした有効アドレスはそれぞれ、物理メモリ空間内部の特定の実アドレス（ｒｅａｌ  ａｄｄｒｅｓｓ）にマッピングされる。命令は、最初にメモリから取り出されると、有効アドレスを割り当てられる。通常の実行では、ある特定のアドレスで、各アプリケーションごとに、有効アドレスの下位ビットの割当てを最初に行い、プロセッサ内部の動作に必要な有効アドレスの数が大きくなり過ぎないようにする。有効アドレスの下位ビットは従って、それぞれのスレッドごとに使用され、かつ再度使用され、異なる物理アドレスを有する異なるアプリケーションのスレッドは、有効アドレスの同じ下位ビットを割り当てられることも多い。例えば、コンパイラは、ロードを始めるときに（同じまたは別のプログラムの）別のスレッドが同じ有効アドレスに割り当てられたかどうかに関わらず、常に同じ有効アドレスでプログラムを開始することができる。従って、マルチスレッド環境では、プロセッサ資源を使用する異なるアプリケーションにある異なるスレッドは、同じ有効アドレス（ＥＡ）を共有することができるが、異なる実アドレス（ＲＡ）にマッピングされるので、スレッドは、必然的に全く異なる目標（ｔａｒｇｅｔ）および方向予測（ｄｉｒｅｃｔｉｏｎ  ｐｒｅｄｉｃｔｉｏｎ）を提供し、ウェイ予測（ｗａｙ  ｐｒｅｄｉｃｔｉｏｎ）を完了させるときに同じやり方で処理されるべきではない。
【０００７】
一般に、ＢＨＴおよびカウント・キャッシュにインデックスするのに使用される命令アドレスの一部は下位ビットであり、この下位ビットは、単一のアプリケーションの各命令（またはスーパースカラ・マシン内の一群の命令）ごとに一義的になる傾向がある。各ＢＨＴは、予測子を格納するために、１ビットまたは２ビット幅の１アレイ分のレジスタを提供し、カウント・キャッシュは、１アレイ分のレジスタに、命令アドレスの幅をもたせる。アレイにインデックスするのに使われる下位命令アドレス・ビットの数をｘと仮定すると、アレイごとの可能なレジスタ・アドレス・エントリは、すべての可能なアドレスを調整するために２ｘとなる。カウント・キャッシュにインデックスするのに使われる下位命令ビットの数は、ＢＨＴにインデックスするのに使われるビットの数と同じである必要はない。
【０００８】
ＳＭＴモードでは、２つのスレッドが３つのＢＨＴおよびカウント・キャッシュを共用する。両スレッドが同一コード、すなわち同じアプリケーションのスレッドを実行しているときは、両スレッドが共通のＢＨＴおよび共通のカウント・キャッシュを共用するという利点があり、両スレッドがＢＨＴおよびカウント・キャッシュのエントリを共有できることが重要である。しかし、それぞれスレッドが異なるコードを実行している場合にスレッドが共通ＢＨＴおよび共通カウント・キャッシュを共用する現在のシステムでは、ＢＨＴおよびカウント・キャッシュ内部に置くことができるアドレスの重複のために、不適切な予測がされる場合がある。マルチ・アプリケーション環境では、このようなキャッシュ・ラインの共用によって、分岐予測機構の内部で、ある程度の量のスラッシングが引き起こされてしまう。現在、異なるプログラムコードのスレッド同士の間での有効アドレスの共有のために、ＢＨＴおよびカウント・キャッシュ内部からの予測が不適切とならないことをウェイ分岐予測論理によって確実に保証できる実装は存在しない。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
従って、異なるプログラムコード用のＳＭＴ動作によって引き起こされる不適切な予測を実質的に排除する方法、処理システム、および分岐予測機構を提供することが望ましい。異なるアプリケーションのスレッドが下位有効アドレス・ビットを共有するが異なる実アドレスにマッピングされる際に正しいウェイ予測を可能にする方法、処理システムおよび分岐予測機構が、改良として望まれる。さらに、ハードウェアまたは論理コストを実質的に上げることなく（すなわち、現在のハードウェアを重複しないやり方で共用することによって）、ＳＭＴプロセッサ内の各スレッドに、他のスレッドにはアクセス不可能な、それ自体の専用ＢＨＴおよびカウント・キャッシュ空間の保護を提供することが有益であろう。
【課題を解決するための手段】
【００１０】
同じ部分有効アドレス（ｐａｒｔｉａｌ  ｅｆｆｅｃｔｉｖｅ  ａｄｄｒｅｓｓ）でそのいくつかをタグづけすることができる複数のスレッドを実行しているプロセッサ上のマルチスレッド動作中に、スレッド特有の分岐予測を可能にする方法、処理システム、および分岐予測機構が開示される。分岐予測は、一般的に両スレッド中のすべてのエントリを共有する統一モード（ｕｎｉｆｉｅｄ  ｍｏｄｅ）で動作する分岐履歴テーブル（ＢＨＴ）およびカウント・キャッシュを使用して実現される。別個のＢＨＴおよびカウント・キャッシュの使用がより良好な結果を分岐予測にもたらすことを示すある特定の条件を監視する機能を提供するように、分岐予測論理が改良される。
【００１１】
分岐予測論理は、監視された条件の発生に応答して、ＢＨＴおよびカウント・キャッシュを論理的に分割し、分割によってアドレス空間の半分が第１のスレッドに割り振られ、次の半分が第２のスレッドに割り振られる。第１のスレッドに属する予測生成アドレスは、次にそのスレッドに割り振られるアレイの半分に向けられ、第２のスレッドに属す予測生成アドレスは、第２のスレッドに割り振られるアレイの次の半分に向けられる。アレイを分割するために、アレイ中の最上位ビットは、第１および第２のスレッドのアドレスを一義的に識別するのに使用される。
【００１２】
本発明の上述のおよび追加の目的、特徴、ならびに利点は、以下の詳細に書かれた説明において明らかになるであろう。
【００１３】
本発明それ自体ならびに本発明の好ましい使用の態様、追加の目的、および利点は、説明のための実施形態の以下の詳細な説明を参照し、あわせて添付の図面を読むことによって最もよく理解されるだろう。
【発明を実施するための最良の形態】
【００１４】
本発明は、異なるアプリケーションのスレッドが同時マルチスレッド（ＳＭＴ）プロセッサ上で実行されているときに、より正確な予測を提供するための分岐予測論理を可能にする方法およびシステムを提供する。本発明は、システム上で実行中の２つのスレッドが異なるアプリケーションのものであるとともに別個のＢＨＴおよびカウント・キャッシュを有することで利益を受けるときを判定する論理を提供し、その判定に応答して、この論理は、各スレッドの予測アドレスを分離させる分割モードにおいて、ＢＨＴおよびカウント・キャッシュ両方を論理的に再構成する。
【００１５】
本発明は、両スレッドが異なるプログラムコードのものであるときのＳＭＴ動作中の分岐予測機構のＢＨＴおよびカウント・キャッシュ中の冗長性および衝突の問題を解決する。具体的には、本発明は、メモリ・サブシステム中の異なる実アドレスに必然的にマッピングされる、両スレッド用の有効アドレスの共有下位ビットの問題に対処する。冗長性を回避し、ＢＨＴおよびカウント・キャッシュの衝突を防止するために、本発明は、「分割ＢＨＴ」モードおよび「分割カウント・キャッシュ」モードを提供する。分割モードは、コードが共用されるか、または現在の方法が作用しているか示すある特定の条件の周期的な評価に応じて、動的に動作可能にされまたは動作不可能にされる。
【００１６】
ここで図面、具体的には図１を参照すると、本発明の特徴を有利に実装することができるデータ・プロセッシング・システムの主要な構成要素のブロック図が示されている。データ・プロセッシング・システム１０１は、相互接続（またはシステム・バス）１１１を介して互いに結合される、プロセッシング・ユニット１０３、入出力（Ｉ／Ｏ）装置１２１およびメモリ１１３を含む。
【００１７】
プロセッシング・ユニット１０３は、アプリケーション（およびＯＳ）のプログラム命令を実行するのに使用される複数のレジスタおよび実行ユニット（図示せず）を有するＳＭＴプロセッサ１０５を含む。実行ユニットに加えて、プロセッサ１０５は、搭載命令キャッシュ（Ｉ−キャッシュ）１０７およびデータ・キャッシュ（Ｄ−キャッシュ）１０８を含む。こうしたＩ−キャッシュ１０７およびＤ−キャッシュ１０８は、プロセッサ１０５のレジスタおよび実行ユニットと統合してパッケージ化されるとともにメモリ１１３から取り出された命令およびデータをそれぞれ含むので「搭載（ｏｎ−ｂｏａｒｄ）」と呼ばれる。
【００１８】
メモリ１１３には、オペレーティング・システム（ＯＳ）１１５ならびに第１および第２のアプリケーション１１７（ａｐｐ１およびａｐｐ２）を含むソフトウェア・プログラムコードが格納される。各アプリケーション１１７のプログラム命令は、プロセッサ１０５によってスレッドとして実行され、アプリケーションの処理／タスクを完了する。アプリケーションを実行するために、特定のアプリケーションの命令の一部は、メモリから取り出され、プロセッサ１０５から要求されるまでＩ−キャッシュ１０７に格納される。
【００１９】
本発明によると、プロセッサ１０５は、同時マルチスレッド・プロセッサとして動作し、実行のために第１および第２のアプリケーション１１７両方のスレッドをスケジュールする。スレッドがスケジュールされると、プロセッサは、そのスレッドの命令に対する要求を発行し、ついで命令は、Ｉ−キャッシュ１０７（またはＬ２キャッシュ１０９、メモリ１１３）から取り出され、処理するために実行ユニットに送られる。
【００２０】
ここで図２を参照すると、分岐予測において使用されるＳＭＴプロセッサ１０５の内部構成要素を示している。理解の容易するために、主要な構成要素を、互いとの特定の接続性ではなく、その機能・目的によって説明する。プロセッサ構成要素の他の構成も可能であり、従って図示した特定の接続性を、本発明に対する限定とみなすべきでないことが当業者には理解されよう。
【００２１】
図２およびアプリケーションの残りの部分を、プロセッサ１０５上で同時に実行中の２つのスレッド、すなわちスレッド０（Ｔｈ０）およびスレッド１（Ｔｈ１）を参照して説明する。スレッド０用の新しい各命令アドレスが、命令取出しアドレス・レジスタ（ＩＦＡＲ）０  ２０２Ａに配置される。同様に、スレッド１用の新しい各命令アドレスが、ＩＦＡＲ１  ２０２Ｂに配置される。本実施形態では、命令アドレスは、８個の命令からなるグループ（またはキャッシュ・ライン）を指定する。マルチプレクサ（ＭＵＸ）２０３は、「取出しセレクタ」によって制御されて、１周期ごとに「Ｔｈ０  ＩＦＡＲ０  ２０２Ａ」および「Ｔｈ１  ＩＦＡＲ１  ２０２Ｂ」を交互に選択する。
【００２２】
命令アドレス（または部分アドレス（ｐａｒｔｉａｌ  ａｄｄｒｅｓｓ））は、有効アドレス−実アドレス変換テーブル（ＥＲＡＴ２０６）、命令キャッシュのディレクトリ（Ｉ−Ｄｉｒ２０８）、Ｌ１命令キャッシュ（Ｉ−キャッシュ１０７）ならびに分岐予測論理２０４に進む。分岐予測論理２０４は、ＢＨＴ３００およびカウント・キャッシュ３１６を含んでいる。
【００２３】
キャッシュ／ＥＲＡＴヒット／ミス論理２１０は、要求された命令が現在、Ｌ１命令キャッシュ１０７または先取りバッファ２１４にあるか判定する。ない場合、「キャッシュ・ミス」が生成され、命令がＬ２キャッシュから（「Ｌ２から」で示す矢印によって示される）、事前復号化レジスタ２１６に届くまで、遅延が生じる。
【００２４】
要求された命令がＬ１Ｉ−キャッシュ１０７にある場合、命令のグループは、どの分岐に対しても走査され、目標アドレスは、とられると予測されていたそうした分岐に対して計算される（または予測される）。予測アドレスのこうした走査および計算は、分岐目標計算器２２０で完了される。予測は、命令が分岐であるか知られる前に命令それぞれに対して完了される。目標アドレスは、命令が取り出される時点で目標アドレスを計算する可能性が低い、ある特定のタイプの分岐命令に対して推測される。
【００２５】
８個の命令のいくつかが分岐であることを検出した後で、そうした分岐に関する情報が分岐情報キュー（ＢＩＱ）２２４に書き込まれる。分岐が誤って予測されていた場合、情報はＢＩＱ２２４から取り出されて、分岐予測論理２０４およびＢＩＱ２２４の状態を、分岐が正しく予測されていた場合になるはずの状態に復元する。誤って予測された分岐に続いて行われたどの命令も破棄される。誤って予測された分岐に続く分岐に関する、ＢＩＱ２２４中のどの情報も、同様に破棄される。プロセッサ１０５は多くの追加機能ブロックを備えるが、こうしたブロックは、予測に適さず、従って本明細書では図示せず、かつ説明しない。
【００２６】
データ・プロセッシング・システム１０１およびプロセッサ１０５の上記の実例および説明は、例示の目的のために過ぎず、本発明に対する限定は意図していない。上述した図面に示した構成要素とともに使用できるであろう他の構成要素が存在することが、当業者にはさらに理解されよう。
【００２７】
ここで図３および図４を参照すると、図２の分岐予測論理２０４の内部構成要素を示してある。本発明の特徴は、主として分岐予測論理２０４にある。分岐予測論理２０４は、（図３に示す）３つの分岐履歴テーブル（ＢＨＴ）を含み、このテーブルは、（説明のための実施形態において）ＩＦＡＲからの命令アドレスのビット４８：５８を方向予測に関連づける。ＢＨＴには、ローカルＢＨＴ３１０、グローバルＢＨＴ３１２、およびセレクタＢＨＴ３１４がある。
【００２８】
図４で示されるように、分岐予測論理２０４はまた、ある特定のタイプの分岐用の命令アドレスに目標アドレスを関連づけるカウント・キャッシュ３１６を含む。カウント・キャッシュ３１６は、目標が別個に計算されるとともにカウント・レジスタと呼ばれる特殊なレジスタに移される、あるクラスの分岐のために使用される。しばしば、こうした計算は、目標アドレスが必要とされるときに行われていない。分岐はそれ自体を繰り返す傾向があるので、カウント・キャッシュ３１６は、以前見られた分岐アドレスにアドレスを関連づけることによって、目標アドレスを記憶するのに使用される。ＢＨＴ３１０、３１２、３１４は、新しい方向を反映するように更新され、カウント・キャッシュ３１６が使われて誤った目標を予測していた場合、カウント・キャッシュ３１６は、分岐アドレスを新しい目標アドレスに関連づけるように更新される。
【００２９】
図３は、部分命令アドレス３０２、最近の実行の経路３０４および活動中のスレッド３０８の入力を受け取る、標準（統一）モードおよび分割ＢＨＴモードでのＢＨＴ３１０、３１２、３１４を示す。ハッシュ３０６は、アドレス３０２および最近の実行の経路３０４から生成される。本発明は、ＳＭＴ処理用に分割ＢＨＴモードを採り入れる。分割ＢＨＴモードでは、ＢＨＴへのインデックスの最上位ビット（すなわち、下位アドレス）がスレッド識別子（ＩＤ）で置き換えられ、そうすることによって、図３に示すように、Ｔｈ０の分岐がＢＨＴの下位半分を専有し、ＴＨ１の分岐がＢＨＴ３１０、３１２、３１４の上位半分を専有するようになる。ＢＨＴ３１０、３１２、３１４の特定の半分（上位または下位）の割当ては、別の実施形態では逆にすることができ、本発明の機能は、各スレッドに割り当てられる特定の実装に依存しない。こうした実装は、２つより多いスレッドを処理するようにプロセッサが拡張された場合は、インデックスの複数の上位ビットを置き換えまたは付加するように拡張することもできる。
【００３０】
同様に、図４で示されるように、カウント・キャッシュ３１６は、標準または分割モードのいずれかで存在することができる。カウント・キャッシュ３１６が分割カウント・キャッシュ・モードで操作されるとき、図５（後で説明する）に示すようにカウント・キャッシュへのインデックスの最上位ビットがスレッドＩＤで置き換えられ、そうすることによって、Ｔｈ０の分岐がカウント・キャッシュ３１６の下位半分を専有し、ＴＨ１の分岐がカウント・キャッシュ３１６の上位半分を専有するようになる。分割モードのとき、最上位ビットは（２つのスレッドの例では）スレッドＩＤビットとして割り当てられるので、１つ下位のビットが、分岐アドレスを識別するのに使用される。
【００３１】
図５は、統一モードで動作している分岐予測論理の、アレイ３２０の「ビット」の割振りの内部ビューを提供する。アレイ３２０は、ＢＨＴ３１０、３１２、３１４およびカウント・キャッシュ３１６のどれを表すこともできる。アレイ３２０は、０または１いずれかの最上位ビットをそれぞれが有する下位アドレス３２１によってインデックスされる。Ｔｈ０の予測３２４は、アレイ３２０への入力として働く。こうした入力は、下位ビット・アドレス全体によってインデックスされ、アレイ３２０中のどのレジスタも専有することができる。従って、例えば、Ｔｈ０の予測、Ｐａ、Ｐｂ、およびＰｃは、アレイ３２０の最下行および最上行の近くで、下位アドレスによってインデックスされたレジスタを専有する。下位アドレスはＴｈ０およびＴｈ１両方によって共有することができるので、統一モードで操作されるときに統一アレイ（ｕｎｉｆｉｅｄ  ａｒｒａｙ）３２０中に何らかの重複が起こり得る。
【００３２】
図５とは対照的に、図６は、分割モード（すなわち、分割ＢＨＴおよび分割カウント・キャッシュ）で動作しているときのアレイ３２０の内部「ビット」ビューを提供する。図を見るとわかるように、アレイ３２０の最上行方向の下位アドレスの最上位ビット（すなわち、１）は、Ｔｈ１の予測に対するＩＤを示すのに使用され、アレイ３２０の最下行方向の下位アドレスの最上位ビット（０）は、Ｔｈ０の予測に対するＩＤを示すのに使用される。従って、すべてのＴｈ０の予測３２２がアレイ３２０の下位半分に配置され、すべてのＴｈ１の予測３２４がアレイ３２０の上位半分に配置される。各スレッドは取出しセレクタによって交互にスケジュールされるので、分岐予測論理は、所与のときにどのスレッドがスケジュールされるか、また、生成されている分岐アドレスおよび目標アドレスがどのスレッドに属すか認識している。アドレス情報は従って、そのスレッドに割り当てられたＢＨＴ３１０、３１２、３１４およびカウント・キャッシュ３１６の特定の部分／半分に向けられる。
【００３３】
ここで図７および８を参照すると、一実施形態による、標準（統一）ＢＨＴおよび標準（統一）カウント・キャッシュ・モードと、分割ＢＨＴおよび分割カウント・キャッシュ・モードとの間でＢＨＴおよびカウント・キャッシュの構成を分岐制御論理が切り換えるための２つの処理を示してある。図７の処理は、ブロック４０１で始まり、ここで、ＢＨＴおよびカウント・キャッシュが標準モード（すなわち、分割モードではない）を実行しており、進行中の分岐予測がＢＨＴおよびカウント・キャッシュ中のエントリを更新している。ブロック４０３Ａに示すように、事前に設定された周期回数が経過したか、第１の検査が行われる。事前に設定される周期回数は、モードの切換えがＢＨＴおよびカウント・キャッシュ中で起こると常に起こり得るどのスラッシングも実質的に減少させるように、予め決定され／計算される。事前に設定された周期回数が経過すると、ブロック４０５Ａに示すように、両スレッドが同一コードを実行しているか、判定が行われる。両スレッドが同一コードを実行している場合、分岐予測ならびにＢＨＴおよびカウント・キャッシュへの更新は、統一モードで通常通りに進む。
【００３４】
しかし、各スレッドが異なるコードを実行している（すなわち、監視されている条件が起きた）場合は、ブロック４０７に示すように、分岐制御論理は、ＢＨＴおよびカウント・キャッシュを分割モードで実行する。ついで、ブロック４０３Ｂに示すように、事前に設定された周期回数が経過したかどうか、検査が行われる。事前に設定された周期回数が経過していると、ブロック４０５Ｂに示すように、両スレッドが同一コードを実行しているか、次の判定が行われ、スレッドが同一コードを実行している場合、ＢＨＴおよびカウント・キャッシュ用の動作モードは、切り換えられて統一モードに戻る。
【００３５】
注目すべきことに、両スレッドが同一コードを実行しているかどうかの判定は、モード間の切換えを生じさせ、１つまたは複数の方法を使用して完了され、予め設定された特定の条件の監視を含み、その条件が発生すると、異なる（または類似の）コードが実行されているという信号が分岐予測論理に送られる。
【００３６】
一実施形態では、予め設定された条件は、所与の間隔（例えば、事前に設定された周期回数）における有効アドレス・ディレクトリ（ＥＡ  Ｄｉｒ）の更新回数の追跡を含む。その間隔における更新回数はついで、事前に設定された閾値と比較される。更新回数が閾値を超えると、頻繁な交換は非共有コードのためであると仮定され、分割モードが実行される。
【００３７】
本実施形態を用いると、ハイパーバイザ状態にある共有コードが期待されるので、問題状態のＥＡ  Ｄｉｒ更新のみが考慮される。問題状態のＥＡ  Ｄｉｒ更新は、アプリケーションがその間で割り当てられなければならない限られた範囲のアドレスを有する、プロセッサ上で実行中のプログラム・アプリケーションから生じる更新を含む。制御論理は、ＥＡ  Ｄｉｒ更新を調べて、命令が非共有コードを示して頻繁に交換されているか見る。ハイパーバイザ状態にある共有コードが期待され、ハイパーバイザ・モードを用いて、実行ＯＳはどのアドレス上でも（すなわち、制限も範囲もなく）実行することが許可される。比較に続いて、閾値を超えたかどうかに応じて、分割ＢＨＴおよび分割カウント・キャッシュ・モードが動作可能にされまたは動作不能にされる。
【００３８】
別の実施形態では、ソフトウェア通知が生成される。セグメント・ルックアサイド（look-aside）・バッファ（ＳＬＢ）中の共有ページ・ビットが監視される。ビットがセットされているとき、そのページはスレッド間で共有されており、統一モードが実行される。ＳＬＢは、仮想アドレスを実アドレスにマッピングし、（ビットのセットを介した）共有キャッシュ指示を含むより高レベルのキャッシュへのディレクトリとして動作する。
【００３９】
図８は、様々なイベントおよび条件をリアルタイムで追跡する性能モニタの使用を含む、第３の実施形態の処理を示す。性能モニタは、（ｉ）正しい方向、誤った目標、（ｉｉ）正しい目標、誤った方向、などの予測を含む、予測の正確さ（正確対不正確）を追跡する。具体的には、図８に示すように、性能モニタは、Ｐ回の予測分岐ごとに予測ミスのカウントを閾値Ｍと比較するのに使用される。こうすることにより、除算する必要なく、予測ミス・レートがもたらされる。性能モニタから生成されたフィードバックは、分割モードまたは統一モードのどちらが最も良いか判定するのに使用される。すなわち、予測ミス・レートが閾値Ｍを超える場合、モードは切り換えられる。やはり注目すべきことに、こうした実装は、上述の実施形態のいずれとも組み合わせることができ、モード切換えを行う追加条件として使用することができる。
【００４０】
ここで図８に戻ると、ブロック４１１に示すように、ＢＨＴおよびカウント・キャッシュは、標準／統一モードで実行される。ついで、ブロック４１３Ａで、分岐の設定回数Ｐが予測されていたか判定が行われる。分岐の設定回数が予測されていた場合、ブロック４１５Ａで、Ｐ回の予測分岐のうち少なくともある特定のＭ個が誤って予測されていたか、次の判定が行われる。このように、Ｍ個以上の予測が間違っていた場合、予測は明らかに不良であり、ＢＨＴおよびカウント・キャッシュはついで、ブロック４１７に示すように分割モードで実行される。ついで、ブロック４１３Ｂで、事前に設定された分岐数が、モード切換え以降予測されていたか次の判定が行われる。事前に設定された分岐数が予測されていた場合、ブロック４１５Ｂで、少なくともＭ個の予測が誤っていたか検査が行われる。事前に設定された予測回数のうちＭ個以上の予測が間違っていた場合、ＢＨＴおよびカウント・キャッシュは、切り換えられて統一モードに戻される。
【００４１】
パラメータＰおよびＭを使用することにより、ＢＨＴおよびカウント・キャッシュ用にいつモードを切り換えるか判定する際に、動的な調整がある程度可能になる。こうした調整は、任意選択であり、破線ブロック４１２Ａ、４１２Ｂおよび４１６として示してある。モードを切り換えた後で、予測ミス・レートが次のＰ回の分岐後に改善しない場合、モードは再度切り換えられる。ただし、ＰおよびＭ両方の値が、事前に設定されたおおよその最大値ＰｍａｘおよびＭｍａｘまで増加される（ブロック４１６）。また、ある時点でレートが実際に改善する場合、ＰおよびＭ両方が、それぞれ元の値、ＰｍｉｎおよびＭｍｉｎにリセットされる（ブロック４１２Ａおよび４１２Ｂ）。いずれの方法もうまく働かないと思われる場合は、ＰおよびＭの値を調整することによって、モード切換えの間隔が長くされる。こうして間隔を長くすることにより、モードを切り換えるときに被るペナルティが減少する。モード切換え処理の結果、予測ミス・レートが低下し始めると、間隔は、元の（より短い）長さに戻される。
【００４２】
統一モードのＢＨＴ３１０、３１２、３１４およびカウント・キャッシュ３１６に書き込まれる予測アドレスの一部は、分割モードではもはや使用可能でなく、かつ正しくないので、統一モードから分割モードへの（または分割モードから統一モードへの）切換えは、最悪の場合、分岐／目標アドレスの最大半分が不正確なものとなり得ることを意味する。分岐が行われないことが非常に頻繁にあるので、モード切換えに続く不正確な予測子へマッピングされるＢＨＴアドレスの実際の部分は、２５％未満になるはずである。ただし、テーブル中の情報は頻繁に更新され、従って不正確な情報は持続しない。動作モードの間の切換えが起こる頻度が下がると、モード切換えによる予測ミスは新しいモードによって達成される利得を損なわないようになる。説明のための実施形態では、周期的な監視および切換えは、スラッシングを回避するために約５０，０００周期ごとにのみ行われ、ついで、適合される動作モードは、予め設定された特定の条件の発生に基づく。
【００４３】
本発明を好ましい実施形態を参照して具体的に示し説明したが、本発明の精神および範囲から逸脱することなく形体および細部における様々な変更を本発明に加えることができることが当業者には理解されよう。例えば、２つのスレッドをスケジュールするＳＭＴプロセッサを用いる実施形態によって本発明を説明したが、本発明は、３つ以上のスレッドを同時にスケジュールするように適合されたＳＭＴプロセッサでも実施可能である。
【００４４】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００４５】
（１）同時マルチスレッドを実施し、分岐履歴テーブルおよびカウント・キャッシュを有する分岐処理論理を含むプロセッサにおいて、類似した下位アドレスを共有する第１のスレッドおよび第２のスレッドを有する同時マルチスレッド環境での分岐予測を向上させる方法であって、
前記第１のスレッドおよび前記第２のスレッドがコードを共有する場合、前記分岐履歴テーブルおよび前記カウント・キャッシュを統一アレイとして更新するステップと、
前記第１のスレッドおよび前記第２のスレッドが同一コードを共有しない場合、前記分岐履歴テーブルおよび前記カウント・キャッシュの隣接する第１の半分を前記第１のスレッドに、前記分岐履歴テーブルおよび前記カウント・キャッシュの隣接する第２の半分を前記第２のスレッドに論理的に割り振るステップと、
を含む方法。
（２）前記アレイにスレッド識別子としてインデックスの最上位ビットを割り当てるステップであって、前記第１のスレッドおよび前記第２のスレッドのみを含む同時マルチスレッドの場合、前記第１のスレッドが１という識別子を割り当てられ、前記第２のスレッドが０という識別子を割り当てられるステップと、
前記分岐履歴テーブルおよび前記カウント・キャッシュを更新する前記スレッドに割り当てられた前記識別子を有する前記インデックスを参照するように、前記第１のスレッドおよび前記第２のスレッド中の各下位予測アドレスの最上位ビットをタグづけするステップと、
をさらに含む、上記（１）に記載の方法。
（３）１つ下位のビットを有するインデックスを使用して、前記分岐履歴テーブルおよび前記カウント・キャッシュを更新する前記スレッドに論理的に割り振られた前記分岐履歴テーブルおよび前記カウント・キャッシュの対応する半分を更新するステップをさらに含む、上記（２）に記載の方法。
（４）前記第１のスレッドおよび前記第２のスレッド中のどのスレッドが現在実行されているかに対応して、前記分岐履歴テーブルおよび前記カウント・キャッシュの半分に受け取った予測アドレスを割り振るステップをさらに含む、上記（２）に記載の方法。
（５）事前に設定された回数のクロック周期が経過したときを判定するステップと、
前記所定の回数のクロック周期が終了したとき、前記第１のスレッドおよび前記第２のスレッド両方が同一コードを実行しているか評価するステップと、
前記所定の回数の周期が経過した後でのみ、前記モードを統一から分割に、また、分割から統一に切り換えるステップと、
をさらに含む、上記（１）に記載の方法。
（６）前記評価するステップが、セグメント・ルックアサイド・バッファ中の共有ページ・ビットを検査するステップを含む、上記（５）に記載の方法。
（７）前記評価するステップが、
設定された間隔における、有効アドレス・ディレクトリ中の更新回数を追跡するステップと、
前記更新回数を事前に設定された閾値と比較するステップと、
前記設定された間隔における前記更新回数が前記閾値を超えると、異なるモードへの切換えを開始するステップと、
を含む、上記（５）に記載の方法。
（８）前記評価するステップが、
現在の動作モードの予測レートを追跡するステップと、
前記予測レートが事前に設定された誤り閾値を超えると、前記モードの切換えを開始するステップとを含む、上記（５）に記載の方法。
（９）前記追跡するステップが、
事前に設定された回数の予測分岐を超える予測ミスの数を追跡するステップと、
前記予測ミスの数が事前に設定された閾値未満でない場合、予測分岐の前記事前に設定される回数を最大数まで増加させるステップと、
前記予測ミスの数が前記増加させるステップの後の前記事前に設定された閾値未満の場合、予測分岐の前記事前に設定される設定回数を減少させるステップとを含む、上記（８）に記載の方法。
（１０）同時マルチスレッドを実施し、分岐履歴テーブルおよび１つのカウント・キャッシュを有する分岐処理論理を含むプロセッサにおいて、同様の下位アドレスを共有する第１のスレッドおよび第２のスレッドを有する同時マルチスレッド環境での分岐予測を向上させるシステムであって、
前記第１のスレッドおよび前記第２のスレッドがコードを共有する場合、前記分岐履歴テーブルおよび前記カウント・キャッシュを統一アレイとして更新する手段と、
前記第１のスレッドおよび前記第２のスレッドが同一コードを共有しない場合、前記分岐履歴テーブルおよび前記カウント・キャッシュの隣接する第１の半分を前記第１のスレッドに、前記分岐履歴テーブルおよび前記カウント・キャッシュの隣接する第２の半分を前記第２のスレッドに論理的に割り振る手段と、
を備えるシステム。
（１１）前記アレイにスレッド識別子としてインデックスの最上位ビットを割り当てるステップであって、前記第１のスレッドおよび前記第２のスレッドのみを含む同時マルチスレッドの場合、前記第１のスレッドが１という識別子を割り当てられ、前記第２のスレッドが０という識別子を割り当てられる手段と、
前記分岐履歴テーブルおよび前記カウント・キャッシュを更新する前記スレッドに割り当てられた前記識別子を有する前記インデックスを参照するように、前記第１のスレッドおよび前記第２のスレッド中の各下位予測アドレスの最上位ビットをタグづけする手段と、
をさらに備える、上記（１０）に記載のシステム。
（１２）１つ下位のビットを有するインデックスを使用して、前記分岐履歴テーブルおよび前記カウント・キャッシュを更新する前記スレッドに論理的に割り振られた前記分岐履歴テーブルおよび前記カウント・キャッシュの対応する半分を更新する手段とをさらに備える、上記（１１）に記載のシステム。
（１３）前記第１のスレッドおよび前記第２のスレッド中のどのスレッドが現在実行されているかに対応して、前記分岐履歴テーブルおよび前記カウント・キャッシュの半分に受け取った予測アドレスを割り振る手段とをさらに備える、上記（１１）に記載のシステム。
（１４）事前に設定された回数のクロック周期が経過したときを判定する手段と、
前記所定の回数のクロック周期が終了したとき、前記第１のスレッドおよび前記第２のスレッド両方が同一コードを実行しているか評価する手段と、
前記所定の回数の周期が経過した後でのみ、前記モードを統一から分割に、また、分割から統一に切り換える手段とをさらに備える、上記（１０）に記載のシステム。
（１５）前記評価する手段が、セグメント・ルックアサイド・バッファ中の共有ページ・ビットを検査する手段を備える、上記（１４）に記載のシステム。
（１６）前記評価する手段が、
設定された間隔における、有効アドレス・ディレクトリ中の更新回数を追跡する手段と、
前記更新回数を事前に設定された閾値と比較する手段と、
前記設定された間隔における前記更新回数が前記閾値を超えると、異なるモードへの切換えを開始する手段とを備える、上記（１４）に記載のシステム。
（１７）前記評価する手段が、
現在の動作モードの予測レートを追跡する手段と、
前記予測レートが事前に設定された誤り閾値を超えると、前記モードの切換えを開始する手段とを備える、上記（１０）に記載のシステム。
（１８）前記追跡する手段が、
事前に設定された回数の予測分岐を超える予測ミスの数を追跡する手段と、
前記予測ミスの数が事前に設定された閾値未満でない場合、予測分岐の前記事前に設定される回数を最大数まで増加させる手段と、
前記予測ミスの数が前記増加させる手段の後の前記事前に設定された閾値未満の場合、予測分岐の前記事前に設定される設定回数を減少させる手段とを備える、上記（１７）に記載のシステム。
（１９）第１のスレッドおよび第２のスレッドを有する同時マルチスレッド処理環境において、スレッド特有の分岐予測を提供するデータ・プロセッシング・システムであって、
分岐予測機構のために生成された予測アドレスおよび目標アドレスをそれぞれ追跡する、分岐履歴テーブルおよびカウント・キャッシュを含む同時マルチスレッドプロセッサと、
前記プロセッサに結合されるとともに、前記同時マルチスレッドプロセッサによって前記第１および第２のスレッド用のコードが取り出されるメモリと、
前記メモリを前記プロセッサに結合する手段と、
前記同時マルチスレッドプロセッサ内で、より正確な予測を達成するために前記第１および第２のスレッドの予測および目標を分離した区分において別個に追跡する、２つの論理的に分離した区分に前記分岐履歴テーブルおよび前記カウント・キャッシュのインデックスされたアレイを動的に分割する手段と、
を備えるシステム。
（２０）前記プロセッサが、
前記第１のスレッドおよび前記第２のスレッドがコードを共有する場合、前記分岐履歴テーブルおよび前記カウント・キャッシュを統一アレイとして更新する手段と、
前記第１のスレッドおよび前記第２のスレッドが同一コードを共有しない場合、前記分岐履歴テーブルおよび前記カウント・キャッシュの隣接する第１の半分を前記第１のスレッドに、前記分岐履歴テーブルおよび前記カウント・キャッシュの隣接する第２の半分を前記第２のスレッドに論理的に割り振る手段とを備える、上記（１９）に記載のデータ・プロセッシング・システム。
（２１）前記アレイにスレッド識別子としてインデックスの最上位ビットを割り当てるステップであって、前記第１のスレッドおよび前記第２のスレッドのみを含む同時マルチスレッドの場合、前記第１のスレッドが１という識別子を割り当てられ、前記第２のスレッドが０という識別子を割り当てられる手段と、
前記分岐履歴テーブルおよび前記カウント・キャッシュを更新する前記スレッドに割り当てられた前記識別子を有する前記インデックスを参照するように、前記第１のスレッドおよび前記第２のスレッド中の各下位予測アドレスの最上位ビットをタグづけする手段とをさらに備える、上記（２０）に記載のデータ・プロセッシング・システム。
（２２）１つ下位のビットを有するインデックスを使用して、前記分岐履歴テーブルおよび前記カウント・キャッシュを更新する前記スレッドに論理的に割り振られた前記分岐履歴テーブルおよび前記カウント・キャッシュの対応する半分を更新する手段とをさらに備える、上記（２１）に記載のデータ・プロセッシング・システム。
（２３）前記第１のスレッドおよび前記第２のスレッド中のどのスレッドが現在実行されているかに対応して、前記分岐履歴テーブルおよび前記カウント・キャッシュの半分に受け取った予測アドレスを割り振る手段とをさらに備える、上記（２１）に記載のデータ・プロセッシング・システム。
（２４）事前に設定された回数のクロック周期が経過したときを判定する手段と、
前記所定の回数のクロック周期が終了したとき、前記第１のスレッドおよび前記第２のスレッド両方が同一コードを実行しているか評価する手段と、
前記所定の回数の周期が経過した後でのみ、前記モードを統一から分割に、また、分割から統一に切り換える手段とをさらに備える、上記（２０）に記載のデータ・プロセッシング・システム。
（２５）前記評価する手段が、セグメント・ルックアサイド・バッファ中の共有ページ・ビットを検査する手段を備える、上記（２４）に記載のデータ・プロセッシング・システム。
（２６）前記評価する手段が、
設定された間隔における、有効アドレス・ディレクトリ中の更新回数を追跡する手段と、
前記更新回数を事前に設定された閾値と比較する手段と、
前記設定された間隔における前記更新回数が前記閾値を超えると、異なるモードへの切換えを開始する手段とを備える、上記（２４）に記載のデータ・プロセッシング・システム。
（２７）前記評価する手段が、
現在の動作モードの予測レートを追跡する手段と、
前記予測レートが事前に設定された誤り閾値を超えると、前記モードの切換えを開始する手段とを備える、上記（２０）に記載のデータ・プロセッシング・システム。
（２８）前記追跡する手段が、
事前に設定された回数の予測分岐を超える予測ミスの数を追跡する手段と、
前記予測ミスの数が事前に設定された閾値未満でない場合、予測分岐の前記事前に設定される回数を最大数まで増加させる手段と、
前記予測ミスの数が前記増加させる手段の後の前記事前に設定された閾値未満の場合、予測分岐の前記事前に設定される回数を減少させる手段とを備える、上記（２７）に記載のデータ・プロセッシング・システム。
【図面の簡単な説明】
【００４６】
【図１】本発明の特徴を有利に実装することができるデータ・プロセッシング・システムを示すブロック図である。
【図２】予測アレイのモード切換えおよび本発明の他の特徴が提供される、図１のデータ・プロセッシング・システムのプロセッサ内部の分岐予測サブシステムを示すブロック図である。
【図３】本発明の一実施形態による、要求されたときにＳＭＴを調整するための分割モードおよび統一モードでの、図２の分岐予測論理のＢＨＴを示すブロック図である。
【図４】本発明の一実施形態による、要求されたときにＳＭＴを調整するための分割モードおよび統一モードでの、図２の分岐予測論理のカウント・キャッシュを示すブロック図である。
【図５】本発明の一実施形態による、統一モードでのＢＨＴおよびカウント・キャッシュ内部の１つのアレイを示すブロック図である。
【図６】本発明の一実施形態による、分割モードでのＢＨＴおよびカウント・キャッシュ内部の１つのアレイを示すブロック図である。
【図７】本発明による、ＳＭＴ実行中にＢＨＴおよびカウント・キャッシュを操作するためのモードの選択に関わる処理を示す論理フロー図である。
【図８】本発明による、ＳＭＴ実行中にＢＨＴおよびカウント・キャッシュを操作するためのモードの選択に関わる処理を示す論理フロー図である。
【符号の説明】
【００４７】
１０１  データ・プロセッシング・システム
１０３  プロセッシング・ユニット
１０５  ＳＭＴプロセッサ、プロセッサ
１０７  命令キャッシュ、Ｉ−キャッシュ、Ｌ１命令キャッシュ、Ｌ１Ｉ−キャッシュ
１０８  データ・キャッシュ、Ｄ−キャッシュ
１０９  Ｌ２キャッシュ
１１３  メモリ
１１５  オペレーティング・システム（ＯＳ）
１１７  第１および第２のアプリケーション、アプリケーション
１２１  入出力（Ｉ／Ｏ）装置
１１１  相互接続、システム・バス
２０２Ａ  命令取出しアドレス・レジスタ（ＩＦＡＲ）０、Ｔｈ０ＩＦＡＲ０
２０２Ｂ  ＩＦＡＲ１、Ｔｈ１ＩＦＡＲ１
２０３  マルチプレクサ（ＭＵＸ）
２０４  分岐予測論理
２０６  有効アドレス−実アドレス変換テーブル（ＥＲＡＴ）
２０８  命令キャッシュのディレクトリ（Ｉ−Ｄｉｒ）
２１０  キャッシュ／ＥＲＡＴヒット／ミス論理
２１４  先取りバッファ
２１６  事前復号化レジスタ
２２０  分岐目標計算器
２２４  分岐情報キュー（ＢＩＱ）
３００  ＢＨＴ
３０２  部分命令アドレス、アドレス
３０４  最近の実行の経路
３０６  ハッシュ
３０８  活動中のスレッド
３１０  ローカルＢＨＴ、ＢＨＴ
３１２  グローバルＢＨＴ、ＢＨＴ
３１４  セレクタＢＨＴ、ＢＨＴ
３１６  カウント・キャッシュ
３２０  アレイ、統一アレイ
３２１  下位アドレス
【図１】
0003716415.tif 000002
【図２】
0003716415.tif 000003
【図３】
0003716415.tif 000004
【図４】
0003716415.tif 000005
【図５】
0003716415.tif 000006
【図６】
0003716415.tif 000007
【図７】
0003716415.tif 000008
【図８】
0003716415.tif 000009