(57)【要約】【課題】６４ビットアドレス中の上位アドレスに対して、上位アドレスより少数のビットを用いて上位アドレスを表現し、情報処理を実現する。【解決手段】本演算処理装置は、取得部と、対応関係記憶部と、符号化部と、復号化部と、分岐予測部とを備える。取得部は、命令を取得する取得段階と命令を実行する実行段階とを含む命令処理を繰り返す演算処理装置の取得段階で命令の記憶元である命令アドレスから命令を取得する。対応関係記憶部は、命令処理がなされた命令の命令アドレスの上位ビット部分と命令アドレスの上位ビット部分を符号化する上位アドレス情報との対応関係を登録する。符号化部は、命令アドレスに含まれる上位ビット部分を対応関係に基づいて上位アドレス情報に符号化する。復号化部は、対応関係と上位アドレス情報から上位ビット部分を復元する。【選択図】図６
2014109953.tif 000002
【特許請求の範囲】
【請求項１】
命令を取得する取得段階と前記命令を実行する実行段階とを含む命令処理を繰り返す演算処理装置の前記取得段階で命令の記憶元である命令アドレスから命令を取得する取得部と、
命令処理がなされた命令の命令アドレスの上位ビット部分と前記命令アドレスの上位ビット部分を符号化する上位アドレス情報との対応関係を登録する対応関係記憶部と、
命令アドレスに含まれる上位ビット部分を前記対応関係に基づいて上位アドレス情報に符号化する符号化部と、
前記対応関係と上位アドレス情報から上位ビット部分を復元する復号化部と、を備える演算処理装置。
【請求項２】
前記命令処理がなされる命令が分岐命令である場合に、前記分岐命令の分岐先アドレスまたは分岐命令の命令アドレスの少なくとも一方についての対応関係が前記対応関係記憶部に登録されておらず、かつ、前記分岐命令が前記上位アドレスを変更する範囲の分岐先に分岐するときに、前記分岐命令に対する分岐予測をキャンセルするとともに、前記分岐命令の分岐先アドレスについての対応関係が前記対応関係記憶部に登録されておらず、かつ、前記分岐命令が前記上位アドレスを変更する範囲の分岐先に分岐するときには、前記対応関係を更新する切替判定部をさらに備える請求項１に記載の演算処理装置。
【請求項３】
前記符号化部は、前記対応関係が登録されていない命令アドレスの上位ビット部分に対しては、未登録を示す符号を生成する請求項１または２に記載の演算処理装置。
【請求項４】
前記取得部が取得する命令の命令アドレスを指示するプログラムカウンタをさらに備え、
前記復号化部は、前記対応関係が登録されていない上位アドレス情報に対しては、前記プログラムカウンタの指示する命令アドレスから前記上位ビット部分を復号する請求項１から３のいずれか１項に記載の演算処理装置。
【請求項５】
前記対応関係記憶部は、前記対応関係を複数のスレッドの間で共用して記憶し、
第１のスレッドにおいて前記対応関係を更新したときに、第２のスレッドにおいて命令処理を前記取得段階からやり直すまでの間、前記符号化部に対して前記上位アドレスの対応関係が登録されていないときの処理を実行させ、前記復号化部に対して前記上位アドレス情報の対応関係が登録されていないときの処理を実行させる上位アドレス変換無効化指示部をさらに備える請求項１から４のいずれ１項に記載の演算処理装置。
【請求項６】
命令を取得する取得段階と前記命令を実行する実行段階とを含む命令処理を繰り返す演算処理装置の前記取得段階で命令の記憶元である命令アドレスから命令を取得する取得ステップと、
命令処理がなされた命令の命令アドレスの上位ビット部分と前記命令アドレスの上位ビット部分を符号化する上位アドレス情報との対応関係を対応関係記憶部に登録するステップと、
命令アドレスに含まれる上位ビット部分を前記対応関係に基づいて上位アドレス情報に符号化する符号化ステップと、
前記対応関係と上位アドレス情報から上位ビット部分を復元する復号化ステップと、
命令処理がなされた分岐命令の分岐先アドレスに対応する上位アドレス情報と下位ビット部分とを記憶した履歴情報にしたがって、前記取得部が取得する命令が分岐命令であるか否かを予測する分岐予測ステップと、
を実行する演算処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理方法に関する。
【背景技術】
【０００２】
情報処理装置の分岐予測機構は、過去に実行された命令のメモリ上での記憶アドレスを基に分岐命令の実行履歴を管理する。そして、分岐予測機構は、分岐命令の実行履歴を管理することによって、次に分岐命令が実行される場合の分岐先を予測していた。以下、命令のメモリ上での記憶アドレスを命令アドレスという。
【０００３】
分岐先の予測において、分岐予測機構は、過去にメモリ上の記憶元から命令を取得した分岐命令の命令アドレスの一部のビット部分からセットアソアシアティブ方式の記憶装置のセットを決定する。以下、”メモリから命令を取得すること”を”命令フェッチ”という。また、分岐命令の命令アドレスを分岐元アドレスという。そして、分岐予測機構は、分岐元アドレスのさらに他のビット部分をタグにして、上記一部のビット部分から決定されたセット内の１つのウェイに分岐先アドレスを記憶しておく。
【０００４】
そして、分岐予測機構は、命令のフェッチ段階で命令アドレスを利用して、上記記憶装置を検索する。そして、過去に実行済みの分岐命令の分岐先アドレスが記憶装置に記憶されている場合には、分岐予測機構は、該当するセット内のタグの内容が一致するウェイから分岐先アドレスを入手できる。すなわち、分岐予測機構は、命令のフェッチと並行して、フェッチされる命令が分岐命令であるか否か、つまり、分岐元の命令アドレスの部分をタグにして分岐先アドレスが記憶されているか否かを判定することができた。
【０００５】
すなわち、以上の技術では、情報処理装置は、現在のフェッチ中の命令のアドレスを取得することにより、命令のフェッチと並行して、フェッチされる命令が分岐命令であるか否かを判定する。そして、情報処理装置は、命令が分岐命令であった場合に予測される分岐先アドレスを入手できる。したがって、情報処理装置がパイプライン処理を行っている場合であっても、情報処理装置は、現在の命令フェッチと並行して、事前に予測される分岐先から次のステージでの命令フェッチを準備することができる。
【０００６】
そして、情報処理装置は、現在フェッチ中の命令から得られた分岐先が予測された分岐先であった場合には、パイプライン処理を止めることなく各ステージを並列動作できる。一方、現在フェッチ中の命令から得られた分岐先が予測された分岐先でなかった場合には、情報処理装置は、正しい分岐先から命令フェッチを再開することになる。また、現在フェッチ中の分岐命令の命令アドレスに対応して上記記憶手段に分岐先が記憶されていなかった場合、つまり、分岐予測がヒットしなかったが分岐命令が実行された場合も、情報処理装置は、分岐予測を利用できない。この場合、情報処理装置は、フェッチ後の分岐命令をデコードして得られた分岐先アドレスから命令フェッチを再開することになる。
【０００７】
ところで、従来、情報処理装置において、命令が格納される空間は、３２ビットアドレス空間であった。しかし、処理されるデータ量の増加に対応して、仮想アドレス空間を６４ビットに拡張したものも存在する。そのような情報処理装置では、データ空間のみならず命令空間も６４ビット化された。
【０００８】
しかし、実際のプログラムのサイズは３２ビットのアドレスで管理可能な限界の４ＧＢよりもかなり小さい。プログラムのサイズは、比較的大きなものであっても、例えば、数百ＭＢ程度である。したがって、６４ビット分のアドレスを投機的な実行処理部である分
岐予測装置に処理させるのは、ハードウェア資源の無駄といえる。
【０００９】
例えば、命令セットアーキテクチャで定義されたやむを得ない部分だけを６４ビット化することが効率的である。そこで、情報処理装置は、分岐予測により投機的に命令フェッチを制御する制御部などは極力下位３２ビットのアドレスだけを用いて、従来と同様の命令フェッチ等の制御を行ってきた。
【００１０】
具体的な方法では、情報処理装置は、予め上位３２ビットのアドレスを固定しておき、その固定された上位３２ビットと下位３２ビットの４Ｇバイト空間とを用いて命令フェッチを行う。そして、例えば、分岐命令の分岐先アドレスが４Ｇバイト空間を越えれば、情報処理装置は、上位３２ビットを再定義する、という方法が考えられる。
【００１１】
つまり、情報処理装置は、プログラムカウンタの上位３２ビットを通常固定しておく。そして、上位３２ビットを変更するような命令、例えば、分岐命令、例外等が発生したとき、情報処理装置は、上位３２ビットを改めて求める。なお、割り込みの発生でプログラムカウンタの上位３２ビットを変える事象が発生したときも、情報処理装置は、同様の処理を行う。この場合、その上位３２ビットを変更しようとする命令、あるいは事象等の完了をもって、情報処理装置は、命令フェッチと命令実行とを含むパイプラインを一旦完全にクリアすることになる。
【００１２】
そのため、プログラムカウンタの上位３２ビットを新しい値に書き換えた後に、書き換えられた新しいアドレスでもって、情報処理装置の処理は、命令フェッチより再開する。したがって、上位３２ビットが変更される命令、事象があるときには、情報処理装置は、投機実行の恩恵を受けることができない。投機実行の恩恵を受けることができなくても、プログラムサイズが小さい以上問題はないはずであった。なぜなら、上位３２ビットが変更される命令、事象の発生頻度が情報処理装置の性能に影響を与える程度まで高くないと予測できるからである。
【００１３】
ところが、実際のＯＳとしては、割り付けるべきプログラムサイズが小さい場合でも、６４ビットの命令アドレスの上位３２ビットを利用して制御するものも提供されている。割り付けるプログラムサイズが小さい場合でも、上位３２ビットを利用するＯＳを搭載した情報処理装置では、６４ビットの仮想メモリ空間に、プログラムが散在することもありえないことではない。そうすると、個々のプログラムが小さい場合でも、分岐命令によって３２ビットの４Ｇバイトアドレスを越える分岐が上記予想よりも多く発生することもありえる。
【００１４】
但し、６４ビットアドレス空間は、データ空間の６４ビット拡張の都合に合わせて行われたものであるため、アドレス空間内で実際に命令列が配置されるアドレスには偏りがある。そこで、これらの偏りを利用して、上位３２ビットを擬似的に少数のビットで表現することが考えられる。つまり、頻出の上位アドレスのパターンを見込んでおき、固定の少数ビットを用いたコードで頻出する上位アドレスを表現すればよい。ここで、少数ビットとは、上位アドレスのビット数より少ないビットをいう。実際に命令列が配置されるアドレスには偏りがある場合には、上位アドレスが変化する頻度は低いと想定される。そのため、事前に固定した複数の上位アドレスに対して、これらの上位アドレスをそれぞれ表現する固定の少数ビットのコードを定めたとしても、上位アドレスの変更を伴う分岐命令の実行回数は、少ないと予想できる。したがって、情報処理装置は、下位３２ビットと、特定の複数の上位アドレスを表現する固定の少数ビットのコードを用いて、効率的な分岐予測ができる。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】特開平６−０８９１７３号公報
【特許文献２】国際公開第２００７／０９９６０５号
【特許文献３】特開昭６３−１４７２４３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１６】
従来の技術では、情報処理装置は、頻出する上位アドレスを少数ビットのコードで表現する。情報処理装置は、命令列が配置されるアドレスには偏りがあることを前提としている。したがって、そのような前提が満たされない場合には、従来の技術では、効率的な処理が困難となる。例えば、ＯＳによって割り付けられたプログラムが６４ビットの仮想メモリ空間に散在する場合には、頻出する上位アドレスを少数ビットのコードで表現することが困難となる。開示の１つの実施形態は、６４ビットアドレス中の上位アドレスに対して、上位アドレスより少数のビットを用いて上位アドレスを表現し、情報処理を実現することを目的とする。
【課題を解決するための手段】
【００１７】
そこで、実施の形態の一側面は、演算処理装置によって例示される。本演算処理装置は、取得部と、対応関係記憶部と、符号化部と、復号化部と、分岐予測部とを備える。取得部は、命令を取得する取得段階と命令を実行する実行段階とを含む命令処理を繰り返す演算処理装置の取得段階で命令の記憶元である命令アドレスから命令を取得する。対応関係記憶部は、命令処理がなされた命令の命令アドレスの上位ビット部分と命令アドレスの上位ビット部分を符号化する上位アドレス情報との対応関係を登録する。符号化部は、命令アドレスに含まれる上位ビット部分を対応関係に基づいて上位アドレス情報に符号化する。復号化部は、対応関係と上位アドレス情報から上位ビット部分を復元する。
【発明の効果】
【００１８】
本演算処理装置によれば、６４ビットアドレス中の上位ビット部分である上位アドレスに対して、上位アドレスより少数のビットを用いて上位アドレスを表現し、情報処理を実現することができる。
【図面の簡単な説明】
【００１９】
【図１】比較例の上位アドレステーブルの構成例である。
【図２】分岐命令実行の流れを例示する図である。
【図３】上位アドレステーブル更新を命令実行中に行った場合の問題点を例示する図である。
【図４】一実施例に係るシステム構成を例示する図である。
【図５】一実施例に係るプロセッサの構成を例示する図である。
【図６】アドレス情報の流れを例示する図である。
【図７】上位アドレステーブル更新動作の流れを例示する図である。
【図８】ＳＭＴ方式での上位アドレステーブル更新に伴う他スレッド無効化制御がない場合の問題点を例示する図である。
【図９】ＳＭＴ方式での上位アドレステーブル更新に伴う問題点の解決方法を例示する図である。
【図１０】Ｈ３２エンコーダの構成図である。
【図１１】Ｈ３２デコーダの構成図である。
【図１２】上位アドレス切替判定部の構成図である。
【発明を実施するための形態】
【００２０】
以下、図面を参照して、一実施形態に係る情報処理装置について説明する。以下の実施
形態の構成は例示であり、本装置は実施形態の構成には限定されない。
＜比較例＞
図１から図３を参照して、比較例に係る情報処理装置を説明する。比較例に係る情報処理装置は、例えば、６４ビットの仮想アドレス空間を有する。ここでは、６４ビットのアドレスのうち、上位３２ビットを上位アドレスと呼び、下位３２ビットを下位アドレスと呼ぶ。
【００２１】
さらに、比較例の情報処理装置は、３２ビットの上位アドレスを３２ビットよりも少ない少数ビットにコード化する。さらに、比較例の情報処理装置は情報処理装置内に、上位アドレステーブルを有する。上位アドレステーブルは、情報処理装置が処理した上位アドレスと少数ビットとの対応関係を記憶するテーブルである。上位アドレステーブルは、３２ビットよりも少ない少数ビット、例えば、３ビットのコードで識別されるエントリを有する。比較例の情報処理装置は、新たな上位アドレスを処理するたびに、新たな上位アドレスを上位ドレステーブルに登録する。ここで、新たな上位アドレスとは、上位アドレステーブルに登録されていない上位アドレスの意味である。
【００２２】
比較例の情報処理装置は、上位アドレスを上位アドレステーブルに登録すると、上位アドレス３２ビットに代えて、その上位アドレスが登録された上位アドレステーブルのエントリに対応する少数ビットのコードを用いて、上位アドレスを記述する。すなわち、比較例の情報処理装置は、プログラム走行中に動的に上位アドレステーブルに、上位アドレスを登録することで、上位アドレスを少数ビットのコードとの対応関係を更新する。例えば、上位アドレステーブルに空きがない状態で、比較例の情報処理装置がさらに、未登録の上位アドレスを登録する場合、情報処理装置は、既存の上位アドレスが登録済みのエントリに未登録の上位アドレスを上書きする。したがって、比較例の情報処理装置は、プログラム走行中に動的にコード化する上位アドレスを切り替え可能である。
【００２３】
図１に、従来の固定コードによって上位アドレスをコード化する方法と、比較例の情報処理装置における非固定コードによって動的に上位アドレスをコード化する方法を対比する。図１の固定コード化の方法では、情報処理装置は、参照頻度の高いと予測される固定の上位アドレスを、上位アドレスより少ないビット数でコード化する。
【００２４】
図１の例では、例えば、上位アドレス０ｘ００００００００の領域は、６４ビットアドレス空間中のカーネル領域、および３２ビットユーザのテキスト領域として例示される。
【００２５】
また、例えば、上位アドレス０ｘ０００００００１の領域は、６４ビットアドレス空間中の６４ビットユーザのテキスト領域として例示され、さらにテキスト領域に続く領域はユーザのデータ領域として例示される。ユーザのデータ領域は、プログラム毎に確保する領域が変動することがありうる。
【００２６】
また、例えば、上位アドレス０ｘＦＦＦＦＦＦＦＦの領域は、６４ビットアドレス空間中のシステムライブラリ領域として例示される。
【００２７】
なお、６４ビットユーザーのデータ領域に続く領域は、ユーザのライブラリ領域として例示される。ユーザのライブラリ領域の開始位置はデータ領域の大きさに依存するため、図中ではユーザのライブラリ領域の開始位置を０ｘ？？？？？？？？：？？？？？？？？としている。ここで、”：”（コロン）の左側は上位アドレスを示す、コロンの右側は下位アドレスを示す。また、”？”は、任意の１６進数の値を示す。
【００２８】
従来は、上位アドレス０ｘ００００００００、０ｘ０００００００１、および０ｘＦＦＦＦＦＦＦＦに対して、固定的にコードをそれぞれ”００”、”０１”、”１１”で割り
当て、固定的にコード化していた。したがって、例えば、開始位置が変動するユーザのライブラリ領域などは、効率的に分岐予測できていなかった。固定的なコードをどの上位アドレスに割り当てればよいかの判断が困難であるからである。
【００２９】
そこで、比較例の情報処理装置は、非固定的にコード化する。図１の非固定コード化の方法では、情報処理装置は、上位アドレステーブルとして、３ビットのコードに対応する７個のエントリを用意する。そして、情報処理装置は、プログラム走行中に、上位アドレステーブルに登録されていない上位アドレスを認識すると、認識した上位アドレスを上位アドレステーブルに登録する。そして、情報処理装置は、上位アドレスが登録されたエントリに対応するコードを登録された上位アドレスに割り当てる。
【００３０】
例えば、図１の例では、上位アドレス０ｘ００００００００に対して、コード”０００”が割り当てられている。また、例えば、上位アドレス０ｘＦＦＦＦＦＦＦＦに対して、コード”００１”が割り当てられている。
【００３１】
つまり、図１に例示した上位アドレステーブルの場合には、情報処理装置は、例えば、上位アドレス０ｘ００００００００の代わりにコード”０００”を用いる。また、情報処理装置は、上位アドレス０ｘＦＦＦＦＦＦＦＦに代えてコード”００１”を用いる。
【００３２】
このようにして、情報処理装置は、上位アドレステーブルに登録された上位アドレスに対しては、３２ビットの上位アドレスを用いる代わりに３ビットのコードを用いることが可能となる。また、上位アドレステーブルに登録されていない上位アドレスは、一括して、例えば、コード”１００”にコード化される。
【００３３】
さらに、上位アドレステーブルのすべてのエントリ、例えば、図１の場合には７個のエントリに上位アドレスが登録された後、情報処理装置が、さらに、新たな上位アドレスを認識した場合には、順次、上位アドレスが登録済みのエントリを上書きして、既登録の上位アドレスを削除し、新たな上位アドレスを登録する。そして、情報法処理装置は、図１の上位アドレステーブルを用いて、７個の上位アドレスをそれぞれ７個のコード、つまり、３ビットのデータに対応づけてコード化する。以上のようにして、情報処理装置は、上位アドレステーブルに登録する上位アドレスをプログラム走行中に動的に切り替えて、上位アドレスをコード化して、上位アドレスに対応するコードと、下位アドレスを用いて、分岐予測等の処理を実行する。
【００３４】
しかしながら、プログラム走行中に動的に上位アドレスに対するコードを切り替えると、以下の問題が生じる。例えば、分岐予測が成功したか失敗したかは算出した分岐先アドレスが分岐予測時と一致したかどうかにより判断する。以下、本比較例では、分岐先アドレスとは下位アドレスと上位アドレスのコードとを組み合わせたものとする。
【００３５】
図２および図３は、分岐命令実行の流れを例示する図である。図２は、命令フェッチから命令の実行に至る実行フローと、分岐予測部の分岐予測フローと、分岐制御部による演算結果と分岐予測との一致検証のフローを例示する。
【００３６】
図２中の命令実行フローでは、情報処理装置は、例えば、命令キャッシュから命令をフェッチして命令バッファに登録する（Ｓ１）。次に情報処理装置は、命令バッファに登録された命令をデコードし、演算器に分岐先アドレス演算依頼を発行する（Ｓ２）。そして、情報処理装置は、演算器での演算の結果得られた分岐先アドレスを分岐制御部に転送する。分岐制御部に転送される分岐先アドレスは、６４ビット（上位アドレス［６３：３２］＋下位アドレス［３１：０］）である。情報処理装置の分岐制御部は、上位アドレステーブルを参照して、上位アドレスをエンコードし、上位アドレスコードＨ３２ＣＯＤＥ［
２：０］を生成する。そして、情報処理装置は、上位アドレスコードＨ３２ＣＯＤＥ［２：０］と、下位アドレス［３１：０］とを組み合わせて（Ｈ３２ＣＯＤＥ［２：０］＋下位アドレス［３１：０］）、演算結果の分岐先アドレスを生成する。
【００３７】
一方、情報処理装置の分岐予測フローでは、情報処理装置は、分岐履歴から予測分岐先アドレスを取得する（Ｓ５）。予測分岐先は、例えば、上位アドレスコードと、下位アドレスとを組み合わせて、Ｈ３２ＣＯＤＥ［２：０］＋下位アドレス［３１：０］のように記述できる。そして、情報処理装置は、分岐履歴から取得した予測分岐先アドレスを分岐制御部に転送する（Ｓ６）。
【００３８】
情報処理装置の分岐制御部は、命令実行フローから得られた演算結果の分岐先アドレスと、分岐予測フローから得られた予測分岐先アドレスを比較する（Ｓ７）。そして、演算結果の分岐先アドレスと予測分岐先アドレスが一致していた場合、情報処理装置は、分岐予測成功と判断する。そこで、情報処理装置は、投機実行していた後続命令の処理をそのまま続行する（Ｓ８）。
【００３９】
一方、Ｓ７の判定で、演算結果の分岐先アドレスと予測分岐先アドレスが一致していない場合、情報処理装置は、分岐予測失敗と判断する。そこで、情報処理装置は、投機実行していた後続命令の処理をキャンセルする（Ｓ９）。そして、情報処理装置は、正しい分岐先アドレス、つまり演算結果の分岐先アドレスに基づき、命令フェッチから処理を実行する。分岐予測失敗の場合の正しい分岐先アドレスからの命令フェッチを再命令フェッチとも呼ぶ。
【００４０】
図３は、図２において、分岐予測のステージから分岐先算出のステージの間に上位アドレスのコードが更新された場合の結果を例示する図である。図３が例示する処理は、図２と同様である。ただし、図３は、処理フロー中に一点鎖線ＬＡが例示され、一点鎖線ＬＡ以前と以降とで上位アドレステーブルの内容が更新されている。
【００４１】
例えば、情報処理装置がある分岐命令に対してパイプラインで命令を処理した場合に、分岐予測のステージで上位アドレス’0xaaaaaaaa’のコードとして、上位アドレステーブルにコード’000’が登録されていたと仮定する。さらに、情報処理装置の分岐予測のス
テージから分岐先算出のステージの間に上位アドレスのコードが更新されたと仮定する。例えば、上位アドレス’0xnnnnnnnn’のコードとして、上位アドレステーブルにコード’000’が登録されたとする。
【００４２】
以上の仮定が成り立つ場合、分岐予測時に分岐予測アドレスの上位アドレス’0xaaaaaaaa’はコード’000’ にエンコードされる。しかし、分岐先算出結果の上位アドレスが’0xnnnnnnnn’であった場合も、上位アドレスのコードは’000’にエンコードされる。
【００４３】
このように、上位アドレスのコードが同一であっても、分岐予測時のアドレスと分岐先算出結果のアドレスとで上位アドレスが異なる。すなわち、上位アドレスに基づいて判定すれば分岐先アドレスの不一致により分岐予測は失敗である。したがって、情報処理装置は、上位アドレスのコードを用いない処理では、分岐予測により投機的に処理していた命令をキャンセルして、算出した分岐先アドレスに基づいて命令フェッチを再開することになる。
【００４４】
しかし、図３で例示される処理の場合、分岐予測のアドレスの上位アドレスのコードと分岐先算出結果のアドレスの上位アドレスのコードは共に’000’である。このため、情
報処理装置は、分岐先アドレスの不一致を検出することはできない。このように、上位アドレスに対するコードが更新されて分岐予測時の上位アドレスが消去されていると、情報
処理装置は、そもそもコード化された元の上位アドレスを復号化できない。このため、情報処理装置が上位アドレスの不一致を検出するのは困難となってしまう。
【００４５】
上位アドレスの不一致が検出できない場合、情報処理装置は、分岐予測失敗の判断ができない。その結果、情報処理装置において、本来キャンセルされるべき投機実行の命令をキャンセルできずに処理がそのまま進行する。したがって、情報処理装置が実行するプログラムの処理にしたがった命令とは異なる命令が実行されることになり、例えば、レジスタやメモリの値を壊してしまう可能性が生じる。
【００４６】
さらに、比較例の処理をマルチスレッドプロセッサに適用した場合には、以下の問題が生じる。ここで、マルチスレッドプロセッサは、例えば、単一のプロセッサ内にレジスタを多重化することにより、複数のプログラムが演算装置等の資源を共有できるようにしたプロセッサをいう。マルチスレッドプロセッサ上で並列にプログラムを動作させる場合、頻出する上位アドレスのビットパターンは類似していると予測される。このため、スレッド間で上位アドレスのパターンを共有することができれば、さらに効率的な分岐予測が可能となると考えられる。
【００４７】
しかし、マルチスレッドプロセッサで上位アドレスのコードをスレッド間で共有し、かつ動的に切り替える場合を考えると、その切り替えタイミングはスレッドごとに独立であることも考えられる。その結果、シングルスレッドよりも上位アドレスの不一致を検出するのはさらに困難となると考えられる。
【実施例】
【００４８】
本実施形態では、情報処理装置は、符号化部と、復号化部とを有する。符号化部は、上位アドレスとコードとの対応関係を上位アドレステーブルに持ち、上位アドレステーブルに基づいて上位アドレスから少数ビットのコードへの符号化を行う。以下、本実施形態では、上位アドレステーブルによって、上位アドレスから符号化されるコードを上位アドレス情報ともいう。復号化部は、同テーブルに基づいて少数ビットの上位アドレス情報から上位アドレスへの復号化を行う。
【００４９】
さらに、情報処理装置は、分岐予測部と、命令フェッチ制御部と、分岐制御部と、を備える。分岐予測部は、少数ビットの上位アドレス情報と下位アドレスとをアドレスとして登録する。命令フェッチ制御部は、復号化部により分岐予測部から得られる上位アドレス情報を復号化した上位アドレスと、分岐予測装置から得られる下位アドレスとを合わせて命令アドレスを生成する。そして、命令フェッチ制御部は、その命令アドレスに基づいて命令フェッチを行う。分岐制御部は、フェッチした命令コードから分岐命令をデコードし、分岐先アドレスを算出して分岐予測時との分岐先アドレスの一致検証を行う。そして、分岐制御部は、分岐予測が成功したか失敗したかを判断する。
【００５０】
本実施形態では、情報処理装置は、上記の上位アドレスを登録した上位アドレステーブルを更新するとともに、コード化する上位アドレスとコードつまり上位アドレス情報との対応関係をプログラム実行中に動的に切り替える。比較例で説明したように、分岐命令の実行途中に、上位アドレステーブルが更新されると、分岐予測時と分岐先アドレス算出時との間の上位アドレスの不一致を検出するのが困難となる。このため、本実施形態では、情報処理装置は、上位アドレステーブル更新のタイミング、すなわち、コード化する上位アドレスとコードとの対応関係の切り替えタイミングを制限する。つまり、本実施形態の情報処理装置は、上位アドレステーブル更新のタイミングを制限することで、分岐予測時と分岐先アドレスの算出時とで上位アドレスと上位アドレスがコード化されたコードとの一致を保証する。
【００５１】
＜上位アドレスとコードとの対応関係保証の検討＞
本実施形態では、まず、分岐先の上位アドレスが復号化不可能となるケースについて検討する。分岐先の上位アドレスについて検討するために、ここでは、情報処理装置が分岐命令を実行する場合を想定する。
【００５２】
例えば、分岐先の上位アドレスが上位アドレステーブルに登録されていた場合、情報処理装置は、上位アドレステーブルを参照して、コードから分岐先の上位アドレスを算出可能である。また、上位アドレスが変化しないアドレスが分岐先である場合には、情報処理装置は、実行中の命令アドレスを示すプログラムカウンタを参照することで上位アドレスの算出が可能である。
【００５３】
したがって、分岐先の上位アドレスが算出不可能となるケースは、分岐先の上位アドレスが上位アドレステーブルに登録されていない上位アドレスで、かつ、分岐先の上位アドレスが実行中の命令アドレスと異なる場合である。
【００５４】
本実施形態では、情報処理装置は、上位アドレステーブルに登録されていない上位アドレスに対しては登録されている上位アドレスに割り当てたコードとは別のコード（例えば
‘x’）を割り当てる。そして、情報処理装置は、分岐先アドレス算出時の上位アドレス情報のコードが ‘x’であり、かつ分岐先の上位アドレスがプログラムカウンタと異なる場合、分岐先アドレスが不一致であると判断する。つまり、分岐先の上位アドレスが上位アドレステーブル未登録であって、かつ、演算器によって算出された分岐先の上位アドレスと分岐元の命令アドレス（プログラムカウンタ値）の上位アドレスとが不一致（４ＧＢを越える分岐発生）であるとき、情報処理装置は、分岐先アドレスが予測分岐先アドレスと不一致であると判定する。
【００５５】
そして、情報処理装置は、投機命令実行をキャンセルし、演算器で算出した分岐先アドレスでプログラムカウンタを更新するように制御する。プログラムカウンタが更新されれば、情報処理装置は、更新されたプログラムカウンタ値から上位アドレスを算出可能となる。そこで、情報処理装置は、更新されたプログラムカウンタから上位アドレスを生成し、生成した上位アドレスを含む正しいアドレスに基づいて命令フェッチを再開できる。
【００５６】
また本実施形態では、分岐予測時と分岐先アドレスの算出時とでコードに対応する上位アドレスが一致することを保証可能なタイミングで上位アドレステーブルの更新を行う。そこで、本実施形態では、情報処理装置は、分岐予測失敗による投機命令実行キャンセルの機会を利用する。投機命令実行キャンセルはそれまでの命令実行をすべてキャンセルして、パイプラインの最初のステージである命令フェッチから処理が再開される処理である。そこで、情報処理装置は、上位アドレステーブルの更新を分岐予測失敗による投機命令実行キャンセルのタイミングで行う。
【００５７】
情報処理装置は、例えば、前記のように分岐先の上位アドレスが上位アドレステーブルに登録されていない分岐命令の実行を完了すると、投機命令実行をキャンセルする。投機命令実行キャンセルのタイミングで、情報処理装置は、上位アドレステーブルに実行完了した命令の分岐先の上位アドレスを登録し、上位アドレステーブルを更新する。投機命令実行キャンセル後は分岐先アドレスの命令フェッチから処理が再開されるため、情報処理装置は、後続の命令を実行するときの分岐予測時と分岐先アドレス算出時とにおいて、コード化する上位アドレスとコードとの対応関係が同一であることを保証できる。なお、投機命令実行キャンセルは、例えば、分岐先の上位アドレスが上位アドレステーブルに登録されていない場合の他、下位アドレスの不一致、つまり、通常の分岐予測失敗の場合や例外を検出した場合、割り込みが発生した場合などにも行われる。
【００５８】
単一のスレッドで命令処理を行う場合は上記のタイミングで上位アドレステーブルを更新するという制御によって、情報処理装置は、プログラムの実行中に動的に上位アドレステーブルを更新する場合も、コード化する上位アドレスとコードとの対応関係の保証が可能である。しかし、マルチスレッド、特に同時マルチスレッディング(SMT:Simultaneous Multi−Threading)方式をとるプロセッサで、かつ前記のコード化する上位アドレスのパ
ターンをスレッド間で共有する構成を持つプロセッサの場合、処理が複雑となる。同時マルチスレッディングとは、単一のＣＰＵ（Central Processing Unit）で、複数のスレッ
ドを同時並行して実行する技術、処理等をいう。
【００５９】
ＳＭＴ方式では、投機命令実行キャンセルのタイミングはスレッドごとに依存性なく生じうる。そのため、前記のようにあるスレッド’a’の投機実行キャンセルのタイミング
でコード化する上位アドレスとコードとの対応関係の切り替えを実行すると、上記対応関係の切り替えタイミングが別のスレッド’b’における分岐命令実行中にあたる可能性が
ある。この場合、情報処理装置は、別のスレッド’b’の分岐予測時と分岐先アドレス算
出時とのコード化パターンの一致を保証できない。
【００６０】
そこで本実施形態では、情報処理装置は、複数スレッド動作時にあるスレッドにより上位アドレステーブルが更新されたときの別のスレッドの動作を保証する。あるスレッド’a’の分岐命令により上位アドレステーブルが更新されたとき、別スレッドが命令実行中
であったと想定する。このような場合、情報処理装置は、別スレッド’b’の分岐命令に
対して、分岐先の上位アドレスが上位アドレステーブルに登録されているかどうかにかかわらず 上位アドレスを‘x’に符号化する。ここで、‘x’は、上位アドレステーブルに
登録されていない上位アドレスに対応するコードである。
【００６１】
情報処理装置は、上位アドレス情報のコードが ‘x’で、かつ分岐先の上位アドレスが変化する場合は、前記の制御により、分岐予測時と分岐先アドレス算出時とにおいて分岐先アドレスが不一致であると判断する。このため、情報処理装置は、スレッド’b’にお
いて分岐先アドレスの不一致を検出する。分岐先アドレスの不一致が検出されるとスレッド’b’の投機命令実行がキャンセルされ、命令フェッチが再開される。このため、スレ
ッド’b’においても、投機命令実行のキャンセル以降の分岐予測時と分岐先アドレス算
出時とにおいて、コード化する上位アドレスとコードとの対応関係が一致することが保証可能となる。情報処理装置は、スレッド’b’において命令フェッチが再開されたときに
スレッド’a’により更新された上位アドレステーブルによって分岐予測を行う。したが
って、情報処理装置は、プログラム実行中の動的な上位アドレスとコードとの対応関係をスレッド間で共有し、効率的な分岐予測をすることができる。
【００６２】
このように、本実施形態の情報処理装置は、プログラム実行中に動的にコード化される上位アドレスとコードとの対応関係を切り替えることにより生じる問題を解消する。本情報処理装置は、６４ビットのアドレス空間のうち頻出する上位３２ビットのアドレスを少数ビットで表現し、さらに少数ビットへの変換方法をプログラム動作中に切り替えることを可能する。したがって、本情報処理装置により、少ないハードウェア資源によるより効率的な分岐予測が実現可能となる。
【００６３】
＜ハードウェア構成＞
図４に、一実施例に係る情報処理装置のシステム構成を例示する。図１は、本実施例を適用したプロセッサを含むサーバ等のシステムを例示する。図１の情報処理装置は、複数のプロセッサ（ＣＰＵ）１−１、１−２と、メモリ３−１、３−２と、外部装置との入出力制御を行うインターコネクト制御部５等を有する。ここで、プロセッサ１−１、１−２等を総称して、単にプロセッサ１と呼ぶ。なお、図１の情報処理装置において、プロセッサ数が１に限定される訳ではない。
【００６４】
図５に、プロセッサ１の構成を例示する。また、図６に、命令フェッチに用いられるアドレス情報の流れを例示する。本実施例では、アウトオブオーダー実行およびパイプライン機能を有する汎用プロセッサを想定する。なお、プログラムに書かれた通りに逐次実行することを、イン・オーダー実行という。一方、アウトオブオーダー実行は、プロセッサがプログラムに書かれた実行順とは異なる実行順、例えば、先に実行可能な命令をプログラムに書かれた実行順よりも先に実行することで、複数命令の同時実行の可能性を広げる技術である。
【００６５】
図５には、命令フェッチ、命令発行、命令実行、命令完了のステージが例示されている。図５は、各ステージと、それぞれのステージで動作する構成要素との関係を例示する。例えば、命令フェッチステージでは命令フェッチ制御部１１、命令バッファ１２、分岐予測部２０、（一次）命令キャッシュ２４、二次キャッシュ２５などが動作する。
【００６６】
命令フェッチ制御部１１は分岐予測部２０から、フェッチする命令の予測分岐先アドレスを取得する。また、命令フェッチ制御部１１は分岐制御部２２から分岐演算により確定した分岐先アドレスを取得する。さらに、命令フェッチ制御部１１は、プログラムカウンタ制御部１９から次に命令完了する命令のアドレスであるプログラムカウンタ値などを取得する。命令フェッチ制御部１１は、取得部の一例である。
【００６７】
さらに、命令フェッチ制御部１１は、命令フェッチ制御部１１内で分岐しない場合の連続して命令をフェッチするための次のアドレスを生成する。命令フェッチ制御部１１は、以上のようにして取得した予測分岐先アドレス、プログラムカウンタ値、生成した次のアドレスなどから選択して次の命令フェッチアドレスを確定する。
【００６８】
命令フェッチ制御部１１は、確定した命令フェッチアドレスを命令キャッシュ２４に出力し、出力した命令フェッチアドレスから命令コードをフェッチする。命令キャッシュ２４は一次キャッシュであり、二次キャッシュ２５の一部のデータを格納する。また、二次キャッシュ２５は、例えばメモリ３−１（図４参照）等の一部のデータを格納している。一次キャッシュである命令キャッシュ２４に該当するアドレスのデータが存在しない場合は二次キャッシュ２５からデータが命令キャッシュ２４に取得される。また、二次キャッシュ２５に該当するデータが存在しない場合はメモリ３−１等からデータが二次キャッシュ２５に取得される。
【００６９】
本実施例ではメモリ３−１等はプロセッサ１の外部に配置されている。このため、外部にあるメモリ３−１等とプロセッサ１との入出力制御はメモリコントローラ２６を介して行われる。命令キャッシュ２４や二次キャッシュ２５、メモリ３−１等の該当するアドレスからフェッチされた命令コードは、命令バッファ１２に格納される。
【００７０】
分岐予測部２０は命令フェッチと並行して分岐予測を実行する。分岐予測部２０は命令フェッチ制御部１１から出力された命令フェッチアドレスを受け取る。そして、分岐予測部２０は受け取った命令フェッチアドレスを基に分岐予測を行い、分岐の成立または不成立を示す分岐方向と分岐先アドレスとを命令フェッチ制御部１１へ返す。命令フェッチ制御部１１は予測された分岐方向が成立であった場合に次の命令フェッチアドレスとして予測された分岐先アドレスを選択する。以降予測された分岐先アドレスによって投機的な命令の実行が進行する。
【００７１】
図５の命令発行ステージでは、命令デコーダ１３、命令発行制御部１４が動作する。命令デコーダ１３は命令バッファ１２から命令コードを受け取り、命令の種別や必要な実行資源などを解析する。そして、命令デコーダ１３は解析結果を命令発行制御部１４、分岐
制御部２２、命令完了制御部１８に出力する。
【００７２】
命令発行制御部１４は、リザベーションステーションの構造を有する。リザベーションステーションは、例えば、命令で参照するレジスタなどの依存性を見て、依存性のあるレジスタの更新状況や同じ実行資源を用いる命令の実行状況などから実行資源が命令を実行可能かどうか、を判断する。そして、リザベーションステーションは、実行可能なら各実行資源に対してレジスタ番号やオペランドアドレスなど命令実行に必要な情報を出力する。また、命令発行制御部１４は、実行可能となるまで命令を格納しておくバッファの役割も担う。命令アドレスバッファ２１は命令フェッチ制御部から出力された命令フェッチアドレスを格納する。
【００７３】
命令実行ステージでは演算器１５、（一次）オペランドキャッシュ１６、分岐制御部２２などの実行資源が動作する。演算器１５は、プログラムの実行にしたがってレジスタ１７やオペランドキャッシュ１６からデータを受け取り、四則演算や論理演算、三角関数演算、アドレス計算など命令に対応した演算を実行する。そして、演算器１５は、演算結果をレジスタ１７やオペランドキャッシュ１６に出力する。オペランドキャッシュ１６は命令キャッシュ２４と同様、二次キャッシュ２５の一部のデータを格納している。オペランドキャッシュ１６は、ロード命令によってメモリ３−１等から演算器１５、レジスタ１７へのデータのロードを実行する。また、オペランドキャッシュ１６は、ストア命令によって演算器１５、レジスタ１７からメモリ３−１等へのデータのストアを実行する。各実行資源は、命令実行の完了通知（COMPLETE）を命令完了制御部１８へ出力する。
【００７４】
分岐制御部２２はリザベーションステーションの構造を有する。なお、分岐制御部２２内のリザベーションステーションを分岐リザベーションステーション２２Ａという（図６参照）。分岐制御部２２（分岐リザベーションステーション２２Ａ）は、命令デコーダ１３から分岐命令の種別、命令アドレスバッファ２１から命令デコーダ１３に同期した分岐命令アドレス、演算器１５から分岐先アドレスや分岐条件となる演算の結果等の信号を受け取る。そして、分岐リザベーションステーション２２Ａは、分岐命令ごとにそれぞれの信号を格納する。分岐制御部２２は得られた演算結果が分岐条件を満たしていれば分岐成立、満たしていなければ分岐不成立と判断し、分岐方向を確定する。また、分岐制御部２２は分岐リザベーションステーション２２Ａによって演算結果と分岐予測時の予測分岐先とにおいて、分岐アドレスと分岐方向が一致するかどうかを判断する。さらに、分岐制御部２２は分岐命令の順序関係の制御も行う。
【００７５】
分岐リザベーションステーション２２Ａはエントリに分岐予測時の分岐方向や分岐先アドレスを登録する。そして、分岐リザベーションステーション２２Ａは演算結果と予測との一致検証を実行後、演算結果によりエントリの置き換えを行う。演算結果と予測とが一致した場合は、分岐リザベーションステーション２２Ａは命令完了制御部１８へ分岐命令のCOMPLETEを出力する。演算結果と予測とが一致しなかった場合には分岐リザベーションステーション２２Ａは命令完了制御部１８へ分岐命令のCOMPLETEと共に後続命令のキャンセル（以下、本実施例では、その他の要因による投機実行命令キャンセル要求）および再命令フェッチ要求を出力する。演算結果と予測とが一致しなかったことは、分岐予測失敗を意味するからである。また、分岐リザベーションステーション２２Ａは分岐成立が確定した場合には、COMPLETEをした分岐リザベーションステーション２２Ａのエントリから演算結果の分岐先アドレスをプログラムカウンタ制御部１９へ出力する。
【００７６】
命令完了ステージでは、命令完了制御部１８、レジスタ１７、プログラムカウンタ制御部１９、分岐履歴更新部２３が動作する。命令完了制御部１８は、命令デコーダ１３から受け取った命令の種別などを順にコミットスタックエントリに格納する。命令完了制御部１８は各命令実行資源から受け取ったCOMPLETE信号を基に、コミットスタックエントリに
格納された命令コード順に命令完了(COMMIT)処理を行う。例えば、命令完了制御部１８はレジスタ１７へのレジスタ更新指示、プログラムカウンタ制御部１９へのプログラムカウンタの更新指示を出力する。
【００７７】
レジスタ１７は命令完了制御部１８からレジスタ更新指示を受け取ると、演算器１５やオペランドキャッシュ１６から受け取る演算結果のデータを基にレジスタ値の更新を実行する。
【００７８】
プログラムカウンタ制御部１９は命令完了制御部１８から命令のCOMMIT信号やCOMMITした命令の種別、分岐制御部２２から分岐先アドレスを受け取る。プログラムカウンタ制御部１９は命令完了制御部１８から分岐命令のCOMMIT信号を受け取ると分岐制御部２２から受け取った分岐先アドレスをプログラムカウンタにセットする。また、プログラムカウンタ制御部１９は分岐命令以外の命令のCOMMIT信号を受け取ると、COMMITした命令数に応じてプログラムカウンタ値を加算する。更新後のプログラムカウンタ値は、次にCOMMITする命令のアドレスを示す。
【００７９】
分岐履歴更新部２３は、分岐制御部２２から受け取る分岐演算の結果を基に、分岐予測部２０の履歴更新データを作成し、分岐予測部２０に出力し、分岐予測部２０の履歴を更新する。
【００８０】
本実施例では、図６に示すように、命令アドレスは６４ビットである。また、本実施例では、プロセッサ１は、命令アドレス６４ビットのうち上位３２ビットを３ビットの信号(以下、H32CODEと呼ぶ)にコード化する。ただし、上位３２ビットをH32CODEにコード化するビット数が３ビットに限定される訳ではない。図６では、H32CODEと下位アドレス３２
ビットの組みは、［２：０］［３１：０］によって例示されている。また、コード化しない６４ビットアドレスは、［６３：０］によって例示されている。したがって、例えば、分岐予測部２０の分岐履歴には、H32CODEと下位アドレス３２ビットの組みである［２：
０］［３１：０］が格納される。
【００８１】
そして、プロセッサ１は、命令アドレスの上位３２ビットをコード化したH32CODEと、
下位３２ビットとを合わせて命令実行パイプラインを伝播させる。ここで、命令実行パイプラインは、例えば、命令フェッチ制御部１１、命令アドレスバッファ１２、分岐リザベーションステーション２２Ａ、プログラムカウンタ１９Ａ、分岐履歴更新部２３、分岐予測部２０などを含む。そして、プロセッサ１は、命令アドレスの上位３２ビットを用いる構成要素において、伝播したH32CODEをデコードして上位アドレスへの変換を行う。
【００８２】
本実施例では、上記のH32CODEのエンコーダ(以下、H32エンコーダ７)およびH32CODEの
デコーダ（以下、H32デコーダ８）は、共通の上位アドレステーブルを参照してH32CODEの変換を実行する。上位アドレステーブルとはH32CODEと上位アドレスとの対応関係を記憶
した表であり、エントリごとにH32CODEと32ビットのアドレスとを有している。ここで、
プロセッサ１は、上位アドレステーブルとして、ひとつのテーブルをすべてのH32デコー
ダ８やH32エンコーダ７で共用するもの（構成例１）としてもよい。また、プロセッサ１
は、小規模なテーブルをH32デコーダ８やH32エンコーダ７の各々で持ち、すべてのテーブルの更新タイミングを同期させるもの（構成例２）としてもよい。本実施例では、プロセッサ１は構成例２を採用する。
【００８３】
また、プロセッサ１がＳＭＴ方式を採用する場合、上位アドレステーブルはスレッドごとに個別のテーブルを持たせて制御する構成も考えられる。ただし、本実施例ではより実装面積が少なく効率的な構成として上位アドレステーブルをスレッド間で共用するものとする。
【００８４】
図１０に、H32エンコーダ７の構成を例示する。H32エンコーダ７は上位アドレスを入力とし、H32エンコーダ７内の上位アドレステーブル７１に登録された各エントリの32ビッ
トのアドレスと入力された上位アドレスとの比較を行う。そして、H32エンコーダ７は一
致したエントリに登録されているコード（H32CODE）をエンコード結果として出力する。H32エンコーダ７は符号化部の一例である。また、上位アドレステーブル７１は、対応関係記憶部の一例である。
【００８５】
図１０の例では、H32エンコーダ７は、上位アドレステーブル７１と、上位アドレステ
ーブル７１の各エントリにそれぞれ接続されて、上位アドレステーブル７１に登録されたコード（H32CODE）を選択して出力する選択回路を有している。選択回路は、例えば、コ
ンパレータ７２と、２入力のＡＮＤゲート７３とを有する。コンパレータ７２は、上位アドレステーブル７１の対応するエントリに登録された上位アドレスと、H32エンコーダ７
に入力された上位アドレスとを比較する。比較の結果、上位アドレステーブル７１の対応するエントリに登録された上位アドレスと、H32エンコーダ７に入力された上位アドレス
とが一致すると、コンパレータ７２は、真（オン、’１’）信号をＡＮＤゲート７３の一方の入力端子に送出する。したがって、コンパレータ７２は、上位アドレステーブル７１の対応するエントリに登録された上位アドレスを参照信号として用いる。
【００８６】
ＡＮＤゲート７３の他方の入力端子には、コンパレータ７２によって比較された上位アドレステーブル７１の対応するエントリに登録されたコード（H32CODE）の値（ビットパ
ターン）が入力される。上述のように、コード（H32CODE）は、３２ビットの上位アドレ
スを少数のビット数、この例では、３ビットでコード化するためのコードである。したがって、コンパレータ７２から真（オン）信号の入力を受けたＡＮＤゲート７３は、他方の入力端子から入力される上位アドレステーブル７１の対応するエントリに登録されたコード（H32CODE）を出力する。また、コンパレータ７２から偽（オフ）信号の入力を受けた
ＡＮＤゲート７３は遮断となる。したがって、ＡＮＤゲート７３は他方の入力端子から入力される上位アドレステーブル７１の対応するエントリに登録されたコード（H32CODE）
を出力しない。つまり、図１０では、概念的にＡＮＤゲート７３が例示されているが、より具体的には、選択回路は、コンパレータ７２によってオン・オフされるスイッチを含むようにすればよい。
【００８７】
一方、複数入力のＡＮＤゲート７４は、すべてのコンパレータ７２での比較結果が偽（オフ、’０’）であったときに、コード（H32CODE）”１００”を出力する。コード（H32CODE）”１００”は、H32エンコーダ７に入力された上位アドレスが上位アドレステーブ
ル７１に登録されていなかったことを示す信号である。また、複数の入力のＯＲゲート７５は、複数のＡＮＤゲート７３および複数入力のＡＮＤゲート７４の出力のいずれかをセレクタ７６に出力する。
【００８８】
セレクタ７６は、上位アドレス無効化信号がオンかオフかによって、選択する信号を切り替える。ここで、上位アドレス無効化信号は、図６および図１２の上位アドレス切替判定部が生成する信号である。上位アドレス無効化信号は、プロセッサ１がＳＭＴ方式の場合に、他のスレッドにおいて上位アドレステーブル７１が更新されたことの影響を回避するための信号である。
【００８９】
図１０では、上位アドレス無効化信号がオフの場合、セレクタ７６は、ＯＲゲート７５の出力を選択して出力する。この場合には、選択回路による選択結果にしたがって、上位アドレステーブルに登録されたコード（H32CODE）または、コード”１００”を出力する
。一方、上位アドレス無効化信号がオンの場合、セレクタ７６は、選択回路の処理結果によらず、コード”１００”を出力する。
【００９０】
例えば、図１０のケースでは、入力データ’0xaaaaaaaa’に一致するアドレスが登録されているエントリのコード（H32CODE）は’000’であるため、H32エンコーダ７は、’000’を出力する。また、入力された上位アドレスに一致するエントリがない、あるいは上位アドレス変換無効化信号が’1’であった場合は、H32エンコーダ７は、比較結果が不一致であったことを示す特殊なコード’１００’をエンコード結果として出力する。
【００９１】
図１１に、H32デコーダ８の構成を例示する。H32デコーダ８はコード（H32CODE）を入
力とし、H32デコーダ８内の上位アドレステーブルに登録された各エントリのコード（H32CODE）と入力されたコード（H32CODE）との比較を行い、一致したエントリに登録されて
いる３２ビットの上位アドレスをデコード結果として出力する。
【００９２】
図１１の例では、H32デコーダ８は、上位アドレステーブル８１と、上位アドレステー
ブル８１の各エントリにそれぞれ接続されて、上位アドレステーブル８１に登録された上位アドレスを選択して出力する選択回路を有している。H32デコーダ８は、復号化部の一
例である。また、上位アドレステーブル８１は、対応関係記憶部の一例である。
【００９３】
選択回路は、例えば、コンパレータ８２と、２入力のＡＮＤゲート８３とを有する。コンパレータ８２は、上位アドレステーブル８１の対応するエントリに登録されたコード（H32CODE）と、H32デコーダ８に入力されたコード（H32CODE）とを比較する。比較の結果
、上位アドレステーブル８１の対応するエントリに登録されたコード（H32CODE）と、H32デコーダ８に入力されたコード（H32CODE）とが一致すると、コンパレータ８２は、真（
オン、’１’）信号をＡＮＤゲート８３の一方の入力端子に送出する。したがって、コンパレータ８２は、上位アドレステーブル８１の対応するエントリに登録されたコード（H32CODE）を参照信号として用いる。
【００９４】
ＡＮＤゲート８３の他方の入力端子には、コンパレータ８２によって比較された上位アドレステーブル８１の対応するエントリに登録された上位アドレスの値（ビットパターン）が入力される。したがって、コンパレータ８２から真（オン）信号の入力を受けたＡＮＤゲート８３は、他方の入力端子から入力される上位アドレステーブル８１の対応するエントリに登録された上位アドレスを出力する。つまり、コード（H32CODE）がデコードさ
れて上位アドレスに変換される。また、コンパレータ８２から偽（オフ、’０’）信号の入力を受けたＡＮＤゲート８３は遮断となる。この場合、ＡＮＤゲート８３は他方の入力端子から入力される上位アドレステーブル８１の対応するエントリに登録された上位アドレスを出力しない。したがって、図１１においても、図１０と同様、概念的にＡＮＤゲート８３が例示されているが、より具体的には、選択回路は、コンパレータ８２によってオン・オフされるスイッチを含むようにすればよい。
【００９５】
一方、複数入力のＡＮＤゲート８４は、すべてのコンパレータ８２での比較結果が偽（オフ）であったときに、プログラムカウンタ値の上位３２ビットを出力する。また、複数の入力のＯＲゲート８５は、複数のＡＮＤゲート８３および複数入力のＡＮＤゲート８４の出力のいずれかをセレクタ８６に出力する。
【００９６】
セレクタ８６は、上位アドレス無効化信号がオンかオフかによって、選択する信号を切り替える。すなわち、上位アドレス無効化信号がオフの場合、セレクタ８６は、ＯＲゲート８５の出力を選択して出力する。この場合には、選択回路による選択結果にしたがって、上位アドレステーブルに登録された上位アドレスまたは、プログラムカウンタ値の上位３２ビットを出力する。一方、上位アドレス無効化信号がオンの場合、セレクタ８６は、選択回路の処理結果によらず、プログラムカウンタ値の上位３２ビットを出力する。
【００９７】
例えば図１１のケースでは、入力データ’000’に一致するコード（H32CODE）が登録されているエントリの32ビットアドレスは’0xaaaaaaaa’であるため、H32デコーダ８は、
コード（H32CODE）’０００’に対するデコード結果として、’0xaaaaaaaa’を出力する
。また、入力されたコード（H32CODE）に一致するエントリがない、あるいは上位アドレ
ス変換無効化信号が’1’であった場合は、H32デコーダ８は、比較結果が不一致であったとし、現在実行処理中の命令アドレスであるプログラムカウンタ１９Ａの上位アドレスをデコード結果として出力する。
【００９８】
図６では、複数のH32デコーダ８を区別するため、符号８−１、８−２を用いる。また
、複数のH32エンコーダ７を区別するため、符号７−１、７−２を用いる。例えば、命令
フェッチ制御部１１はH32デコーダ８−１を有しており、前述のように分岐予測部２０、
分岐制御部２２、プログラムカウンタ制御部１９から受け取ったH32CODEおよび前回命令
フェッチに使用したH32CODEから次に命令フェッチに使用するH32CODEを選択し、H32デコ
ーダ８−１により上位アドレスへの変換を行う。命令フェッチ制御部１１は変換後のアドレスを、フェッチアドレスの上位アドレスとして命令フェッチを実行する。上位アドレステーブル８１に、H32CODEと一致するエントリがなかった場合は、H32デコーダ８−１は、その時点で実行中である命令アドレスを示すプログラムカウンタの上位ビットを出力する。したがって、命令フェッチ制御部１１はプログラムカウンタの上位ビットを命令フェッチアドレスの上位アドレスとして命令フェッチを実行する。このように、上位アドレステーブル８１にH32CODEと一致するエントリがなかった場合、命令フェッチアドレスが誤っ
ている可能性がある。しかし、実行中の命令アドレスの上位アドレスを命令フェッチアドレスに用いることで、キャッシュの書き潰しを抑制することが可能となる。プログラムの実行においては、特定のアドレスの近傍が繰り返して実行される場合もあるからである。なお、命令フェッチ制御部１１において、H32デコーダ８−１がH32CODEを上位アドレスに変換できない場合とは、例えば、分岐予測部２０に記憶された分岐履歴のH32CODEが、分
岐予測時点で更新されている場合が想定される。分岐予測部２０に記憶された分岐履歴のH32CODEが、分岐予測時点で更新されている場合には、分岐予測が成功する可能性は低く
なるが、情報処理装置は、分岐予測が外れたことを認識可能である。
【００９９】
また、図６のように、分岐制御部２２はH32エンコーダ７−１を有しており、演算器１
５から得られる分岐アドレス演算結果の上位アドレスをH32エンコーダ７−１によりH32CODEへ変換する。分岐制御部２２は、分岐リザベーションステーション２２Ａには分岐先アドレスとして、変換後のH32CODEを登録する。また、分岐制御部２２は分岐予測時の分岐
先アドレスが正しかったか、演算結果との一致検証を行う。分岐先アドレスの上位アドレスについては検算結果をH32エンコーダ７−１により変換したH32CODEと分岐予測時のH32CODEとの比較により、分岐先アドレスのチェックを行う。さらに、分岐制御部２２は上位
アドレス切替判定部２２Ｂを有し、分岐先の上位アドレスが変化するか否かの判定を行う。
【０１００】
図１２に、上位アドレス切替判定部２２Ｂの構成を例示する。上位アドレス切替判定部２２Ｂは、切替判定部の一例である。上位アドレス切替判定部２２ＢはCOMMITする前の分岐先アドレスの上位アドレスを保持する分岐先上位アドレスバッファ２２Ｂ６、上位アドレステーブル更新指示信号生成論理、上位アドレス不一致による投機実行命令キャンセル要求生成論理、および上位アドレス変換無効化信号保持回路２２Ｂ４を有する。
【０１０１】
分岐先上位アドレスバッファ２２Ｂ６は、例えば、演算器１５によって演算された分岐先アドレスの上位３２ビットを保持する。分岐先上位アドレスバッファ２２Ｂ６は、上位アドレステーブル８１、７１等を更新するための上位アドレスを保持する。上位アドレステーブル８１、７１が更新されるのは、例えば、分岐先の上位アドレスが分岐元の上位アドレスから変化し、かつ分岐先の上位アドレスが、上位アドレステーブル８１、７１に登
録されていない新たな上位アドレスであった場合が想定される。この場合、新たな上位アドレスは、演算器１５で算出されている。
【０１０２】
上位アドレステーブル更新指示信号生成論理が真（オン、’１’）を出力すると、分岐先上位アドレスバッファ２２Ｂ６が保持する分岐先アドレスの上位３２ビットは、H32CODEと対応づけて、H32デコーダ８の上位アドレステーブル８１、およびH32エンコーダ７の
上位アドレステーブル７１に登録される。ただし、図では、H32デコーダ８の上位アドレ
ステーブル８１への登録経路が例示されている。
【０１０３】
図１２を例にして、上位アドレス切替判定部２２Ｂの上位アドレステーブル更新指示信号生成論理を説明する。上位アドレス切替判定部２２Ｂは、現在のプログラムカウンタ値の上位３２ビットを保持するプログラムカウンタバッファ（以下、ＰＣＵバッファ２２Ｂ７）、分岐元アドレスの上位３２ビットに対応するH32CODEを保持する分岐元アドレスバ
ッファ（以下、分岐元コードバッファ２２Ｂ８）、分岐先アドレスの上位３２ビットに対応するH32CODEを保持する分岐先アドレスコードバッファ（以下、分岐先コードバッファ
２２Ｂ９）を有する。ここで、分岐元アドレスとは、例えば、プログラムカウンタ値である。また、分岐先アドレスとは、例えば、演算器１５で算出された分岐先アドレスである。
【０１０４】
なお、図１２では、分岐先上位アドレスバッファ２２Ｂ６、ＰＣＵバッファ２２Ｂ７、分岐元コードバッファ２２Ｂ８、分岐先コードバッファ２２Ｂ９にスレッドの番号（th0
）が記載されている。また、上位アドレス変換無効化信号およびその他の要因による投機実行命令キャンセル要求にも、スレッドの番号（th0）が記載されている。スレッドの番
号（th0）は、当該スレッドを意味する。
【０１０５】
一方、図１２には、上位アドレス更新指示信号（th1）も記載されている。上位アドレ
ス更新指示信号（th1）は、他のスレッドからの信号を意味する。すなわち、図１２は、
ＳＭＴ方式のプロセッサ１に対応するため、各種レジスタが多重化されている。したがって、ＳＭＴ方式を採用しない場合には、上位アドレス切替判定部２２Ｂは、分岐先上位アドレスバッファ２２Ｂ６、ＰＣＵバッファ２２Ｂ７、分岐元コードバッファ２２Ｂ８、分岐先コードバッファ２２Ｂ９をスレッドの番号（th0等）で多重化しなくてもよい。また
、ＳＭＴ方式を採用しない場合には、上位アドレス切替判定部２２Ｂには、上位アドレス変換無効化信号保持回路２２Ｂ４を設けなくてもよい。
【０１０６】
上位アドレス切替判定部２２Ｂは、プログラムカウンタ１９Ａから現在のプログラムカウンタ値の上位３２ビットを取得し、ＰＣＵバッファ２２Ｂ７に保持すればよい。また、上位アドレス切替判定部２２Ｂは、プログラムカウンタ１９ＡのH32エンコーダ７−２か
ら分岐元のH32CODEを取得し、演算器１５で算出されエンコーダ７−１でエンコードされ
た分岐先アドレスのH32H32CODEを取得する。上位アドレス切替判定部２２Ｂは、分岐元のH32CODEと分岐先のH32CODEをそれぞれ分岐元コードバッファ２２Ｂ８と分岐先コードバッファ２２Ｂ９に保持すればよい。そして、上位アドレス切替判定部２２Ｂは、コンパレータ２２ＢＡにより、分岐先上位アドレスバッファ２２Ｂ６が保持する分岐先アドレスの上位３２ビットと、ＰＣＵバッファ２２Ｂ７が保持するプログラムカウンタ値の上位３２ビットが一致するか否かを判定し、不一致の場合に、真（オン、’１’）をＡＮＤゲート２２Ｂ２およびＡＮＤゲート２２ＢＤの１つの入力端子に出力する。
【０１０７】
また、上位アドレス切替判定部２２Ｂは、コンパレータ２２ＢＢ、２２ＢＣによって、分岐元コードバッファ２２Ｂ８、分岐先コードバッファ２２Ｂ９が保持する分岐元アドレスの上位３２ビットのH32CODEおよび分岐先アドレスの上位３２ビットのH32CODEの少なくとも一方が値’１００’であるか否かを判定する。上位アドレス切替判定部２２Ｂは、判
定結果をＯＲゲート２２Ｂ１によってＯＲ演算し、ＡＮＤゲート２２Ｂ２の１つの入力端子に出力する。
【０１０８】
さらに、ＡＮＤゲート２２Ｂ１の１つの入力端子には、命令完了制御部１８からの分岐命令COMMIT信号が入力される。したがって、ＡＮＤゲート２２Ｂ２は、
（１）分岐先上位アドレスバッファ２２Ｂ６の分岐先上位アドレスとプログラムカウンタ値の上位３２ビットが不一致である；
（２）分岐命令の命令アドレスの上位アドレスのH32CODEと分岐先アドレスの上位アドレ
スのH32CODEの少なくとも１つが’１００’である；
（３）分岐命令COMMIT信号が発せられたこと；
を条件に投機実行命令キャンセル信号を生成し、プロセッサ１の各部、例えば、命令フェッチ制御部１１，命令キャッシュ２４、分岐予測部２０、命令完了制御部１８、プログラムカウンタ制御部１９、分岐制御部２２等に出力する。以上の構成によって、分岐命令の分岐先が上位アドレステーブル８１（および７１）に未登録であって、４ＧＢを越える分岐命令が実行されたことが認識できる。したがって、上位アドレス切替判定部２２Bは、
４ＧＢを越える分岐を行う分岐命令について、分岐予測の失敗を認識できる。
【０１０９】
また、上位アドレス切替判定部２２Bは、分岐先コードバッファ２２Ｂ９が保持するH32CODEの値が‘１００’であるか否かの判定結果をＡＮＤゲート２２ＢＤの１つの入力端子に出力する。さらに、ＡＮＤゲート２２ＢＤの１つの入力端子には、命令完了制御部１８からの分岐命令COMMIT信号が入力される。ＡＮＤゲート２２ＢＤは、コンパレータ２２ＢＡ、２２ＢＣからの出力と分岐命令COMMIT信号とをＡＮＤ演算して分岐先上位アドレス不一致信号を生成し、ＡＮＤゲート２２Ｂ５の１つの入力端子に出力する。
【０１１０】
ＡＮＤゲート２２Ｂ５は、ＡＮＤゲート２２Ｂ２からの分岐先上位アドレス不一致信号と、上位アドレス変換無効化信号保持回路２２Ｂ４からの上位アドレス変換無効化信号の反転値（否定論理）とをＡＮＤ演算し、上位アドレス更新要求指示信号を生成する。上位アドレス更新要求指示信号によって、分岐先上位アドレスバッファ２２Ｂ６に保持されていた分岐先アドレスの上位アドレスが上位アドレステーブル８１、７１の空きエントリに登録される。また、上位アドレステーブル８１、７１の空きエントリがない場合、古いエントリから順次上書きされる。したがって、上位アドレス更新要求指示信号によって、プロセッサ１内のH32データ８の上位アドレステーブル８１、およびH32エンコーダ７の上位アドレステーブル７が更新される。なお、ＳＭＴ方式のプロセッサ１においては、上位アドレス更新要求指示信号は、例えば、スレッドごとに多重化されてレジスタに保持され、他のスレッドに通知される。
【０１１１】
上位アドレス変換無効化信号保持回路２２Ｂ４は、例えば、ラッチである。上位アドレス変換無効化信号保持回路２２Ｂ４のセット端子には、他のスレッド（th1）に対応する
上位アドレス切替判定部２２Ｂからの上位アドレス更新指示信号（th1）によってセット
される。上位アドレス変換無効化信号保持回路２２Ｂ４は、上位アドレス変換無効化指示部の一例である。
【０１１２】
また、上位アドレス変換無効化信号保持回路２２Ｂ４は、例えば、投機実行命令キャンセル要求またはその他の要因による投機実行命令キャンセル要求をＯＲ演算するＯＲゲート２２Ｂ３からの出力信号によってリセットされる。ここで、その他の要因による投機実行命令キャンセル要求とは、例えば、上記で説明した上位アドレス切替判定部２２Ｂの上位アドレステーブル更新指示信号生成論理以外の論理による投機実行命令キャンセル要求である。その他の要因による投機実行命令キャンセル要求は、例えば、図６で説明したように、分岐リザベーションステーション２２Ａにおいて、分岐予測部２０での分岐予測の結果と、演算器１５での分岐命令の実行結果とが一致しなかった場合に、分岐リザベーシ
ョンステーション２２Ａから発せられる。
【０１１３】
上述のように、上位アドレステーブル更新指示信号生成は、ＡＮＤゲート２２Ｂ５によって、上記の分岐先上位アドレスの不一致検出信号（ＡＮＤゲート２２ＢDの出力）と、
上位アドレス変換無効化信号の負極性論理とのＡＮＤで構成する。この構成によって、上位アドレス変換無効化信号が真（オン、‘１’）の場合に、ＡＮＤゲート２２Ｂ５は、偽（オフ、‘０’）となり、上記の分岐先上位アドレスの不一致が検出されても、上位アドレステーブルは更新されない。上位アドレス変換無効化信号が真（オン、‘１’）の場合、H32エンコーダ７は、上位アドレステーブル７１と、H32CODEとの比較の結果に拘わらず、'１００'を出力する。したがって、すでに上位アドレスが上位アドレステーブル７１に登録されているにも拘わらず、ＡＮＤゲート２２ＢＤは、再度上位アドレスを上位アドレステーブル７１に登録するための更新指示信号を発行しようと動作する。そこで、ＡＮＤゲート２２Ｂ５は、上位アドレステーブル更新指示信号が真（オン、‘１’）の場合に、上位アドレステーブル更新指示信号を発行しないように阻止する。
【０１１４】
なお、上位アドレス切替判定部２２Ｂの分岐先上位アドレスバッファ２２Ｂ６はCOMMITする前の分岐命令のうち最も古い命令の分岐先アドレスの上位アドレス32ビットを保持している。分岐制御部２２は、分岐先アドレスの下位アドレス32ビットやH32CODEと共に分
岐先アドレスの上位アドレス32ビットをプログラムカウンタ制御部１９へ出力する。
【０１１５】
さらに、図６のように、上位アドレス変換無効化信号は、プロセッサ１内のそれぞれのＨ３２エンコーダ７およびＨ３２デコーダ８に伝達される。さらに、図６のように、プログラムカウンタ制御部１９はH32デコーダ８−２とH32エンコーダ７−２を有しており、分岐命令の実行が完了したときには分岐制御部２２から分岐先アドレスのH32CODEを受け取
る。そして、プログラムカウンタ制御部１９は分岐制御部２２から受け取った分岐先アドレスのH32CODEをH32デコーダ８−２によりデコードしてプログラムカウンタ１９Ａに次の命令アドレスとして上位アドレスの登録を行う。ただし、上位アドレステーブル８１に一致するエントリがない場合には、本実施例では、H32CODEは、'１００'となっている。こ
の場合に、プログラムカウンタ制御部１９は、H32デコーダ８−２の出力ではなく、分岐
先上位アドレスバッファ２２Ｂ６からの出力をセレクタ１９Ｂで選択して、プログラムカウンタ１９Ａの更新を行う（図６参照）。プログラムカウンタ制御部１９が次に実行する命令の正しい命令アドレスを取得するためである。
【０１１６】
また、プログラムカウンタ制御部１９は、プログラムカウンタ値の上位アドレスの値をH32エンコーダ７でH32CODEに変換し、命令フェッチ制御部１１の命令フェッチアドレス選択論理へ転送する。
【０１１７】
上位アドレステーブル７１、８１等の更新は、前述した上位アドレス切替判定部２２Ｂにより制御する。プロセッサ内の複数の上位アドレステーブル７１、８１は、同じタイミングで更新される。以下、１つのH32デコーダ８の上位アドレステーブル８１の更新例を
説明する。
【０１１８】
＜上位アドレステーブル更新手順＞
上位アドレステーブル８１のエントリの更新順はいろいろな構成が考えられるが、本実施例の上位アドレス切替判定部２２Ｂは、簡単のため、最も古いエントリを順に書き潰していく構成としている。上位アドレステーブル８１の更新では、前述した通り分岐予測時と分岐先アドレスの算出時とで上位アドレステーブルが一致するように実行される。このため、上述のように、本実施例のプロセッサ１は、分岐予測アドレスと、実際に分岐した分岐先との不一致を検出する。そして、不一致を検出した場合、プロセッサ１は、正しいアドレスから再命令フェッチを行うとともに、分岐先の上位アドレスが上位アドレスコー
ドに未登録の値へ変化する場合には上位アドレステーブル８１を更新する。以上のような本実施例におけるプロセッサ１のハードウェア構成を基にした上位アドレス更新処理を以下に説明する。
【０１１９】
図７に、上位アドレステーブル更新動作の手順を例示する。図７の処理は、Ｓ４Ａの処理以外の処理は、比較例として示した図２、図３の処理と同様である。なお、図７のＳ４Ａの処理では、上位アドレステーブルに上位アドレスが未登録のとき、上位アドレスは未登録を示すコード’１００’にエンコードされる。
【０１２０】
下位アドレス32ビットとH32CODEによって、予測分岐先と、演算器１５で算出された分
岐先との不一致は、分岐リザベーションステーション２２Ａのエントリに格納された分岐先と演算結果による分岐先との比較により検出可能である。命令フェッチ制御部１１は、分岐先アドレス不一致として分岐命令がCOMMITとなるタイミングで再命令フェッチ要求を行う。なお、再命令フェッチは、投機実行された命令のキャンセル後に行われる命令フェッチである点を除いて、通常の命令フェッチと同様の処理である。また同じタイミングにて、上位アドレス切替判定部２２Ｂは、上位アドレステーブルの更新を実行する。
【０１２１】
以上のように、投機実行命令キャンセル要求によって後続の投機実行命令はすべてキャンセルされ、変更後の上位アドレステーブルを参照して分岐予測や命令フェッチが再開される。このため、正しいアドレスによる命令フェッチを保証できる。ただし、以上の処理は、H32CODEが特殊コード’１００’以外の場合の処理である。
【０１２２】
しかし、演算器で算出された分岐命令の分岐先アドレスのH32CODEの値が上位アドレス
テーブルにエントリがないことを示す特殊コード’１００’であった場合、プロセッサ１は、H32CODEが一致しても上位アドレスが一致しているかは保証できない。すなわち、プ
ロセッサ１は、投機実行している後続の分岐先命令が正しいかの保証をできない。分岐命令の命令アドレス（プログラムカウンタ値）のH32CODEの値が上位アドレステーブルにエ
ントリがないことを示す特殊コード’１００’であった場合も同様である。分岐先アドレスのH32CODEの値が‘１００’以外であった場合、プロセッサ１は分岐予測が外れない間
は投機実行命令を継続する。そのため、上位アドレスが変化する分岐命令が連続する場合、分岐命令の命令アドレスのH32CODEの値が‘１００’であっても分岐命令の命令アドレ
スの上位アドレスがプログラムカウンタ１９Aの上位アドレスがと必ずしも一致しない場
合があるからである。
【０１２３】
そこで、プロセッサ１は、分岐命令の命令アドレスのH32CODEが'１００'であるか、分
岐命令の分岐先アドレスのH32CODEが'１００'であるかの条件の成立を確認する（図１２
のＯＲゲート２２Ｂ１）。そして、プロセッサ１は、さらに分岐先上位アドレスバッファ２２Ｂ６とプログラムカウンタ１９Ａとの比較を行い、H32CODE＝’１００’とのＡＮＤ
条件をとる。上位アドレステーブルにエントリが存在せず、かつ分岐先アドレスの上位アドレスがプログラムカウンタの上位アドレスと不一致であると、分岐予測時の分岐先の上位アドレスは正しいことが保証されない。このため、上位アドレス切替判定部２２Ｂは、分岐先アドレス不一致として分岐命令がCOMMITとなるタイミングで投機実行命令キャンセル要求を発行し、さらに、上位アドレステーブルの更新を実行する。また、プログラムカウンタ制御部１１は、再命令フェッチ要求を命令キャッシュ２４に出力する。ここで、上位アドレス切替判定部２２Ｂによって上位アドレステーブルにエントリが存在せず、かつ上位アドレスの不一致を検出したら必ず再命令フェッチとなって後続の投機命令実行はキャンセルされるため、分岐先上位アドレスバッファ２２Ｂ６はCOMMITする前の分岐命令のうち最も古い分岐命令の分岐先上位アドレスを１命令分保持すれば十分である。なお、図８、図９で例示するように、プロセッサ１がＳＭＴ方式の場合には、分岐先上位アドレスバッファ２２Ｂ６はCOMMITする前の分岐命令のうち最も古い分岐命令の分岐先上位アドレ
スを１命令分スレッドごとに保持すればよい。
【０１２４】
図８に、ＳＭＴ方式での上位アドレステーブル更新に伴う他スレッド無効化制御がない場合の問題点を例示する。図８の処理は、図７の場合と同様である。ただし、図８では、一点鎖線ＬＣの上側と下側とで、他のスレッド（th1）での処理によって、現在のスレッ
ド(th0)の上位アドレステーブルが更新されたことを前提としている。また、図９に、Ｓ
ＭＴ方式での上位アドレステーブル更新に伴う問題点の解決方法を例示する。図９の処理は、Ｓ４Ｂの処理を除いて、図８と同様である。
【０１２５】
ＳＭＴで上位アドレステーブルをスレッド間で共用する場合においても、図７と同様、プロセッサ１の上位アドレス切替判定部２２Ｂは、演算結果の分岐先アドレスと分岐予測された分岐先アドレスとにおいて、上位アドレスの不一致を検出する処理を実行する。しかしながら、仮にスレッド（th1）が命令実行中にスレッド（th0）の要因で上位アドレステーブルを更新した場合、現在のスレッド（th1）において、分岐予測時と演算後とにお
いて、参照する上位アドレステーブルが異なっている。このため、分岐予測時と演算後とにおいて、分岐先の上位アドレスが異なっていても、それぞれの上位アドレスに対応するH32CODEが同一となる可能性がある（図８のＳ７）。
【０１２６】
この場合、上位アドレス切替判定部２２Ｂは、分岐先アドレスの不一致が検出できない。このため、誤った予測による後続の投機実行命令のキャンセルができない。その結果、本来の分岐先アドレス以外のアドレスに分岐した後の処理が続行されるという問題が生じる。そこで、上位アドレス更新後に他のスレッドが上位アドレステーブルを参照しないように、上位アドレス切替判定部２２Ｂは、上位アドレステーブル８１、７１等を更新するための上位アドレステーブル更新指示信号を他のスレッドにも通知する。そして、上位アドレス切替判定部２２Ｂは、他のスレッドから通知された上位アドレステーブル更新指示信号により、上位アドレス変換無効化信号保持回路２２Ｂ４をセットし、上位アドレス変換無効化信号を生成する（図１２）。H32エンコーダ７は、上位アドレス変換無効化信号
が’1’であったらH32CODEを強制的に’１００’に変換する。この変換によって、上位アドレス切替判定部２２Ｂの上位アドレステーブル更新指示信号生成論理は、分岐先アドレスの不一致を検出し、投機実行命令キャンセル要求を発することが可能となる（図１２）。したがって、プロセッサ１は、誤った予測による後続の投機実行命令のキャンセルが可能となる（図９のＳ７−ＳＡ）。一旦命令フェッチから処理を再開すれば、そのスレッドについても正しいアドレスでの命令フェッチが保証可能である。
【０１２７】
上述のように、上位アドレス変換無効化信号保持回路２２Ｂ４は他スレッドによる上位アドレステーブル更新指示信号により’1’にセットし、自スレッドの投機実行命令キャ
ンセル要求信号により’0’にリセットする1ビットのラッチによって構成することができる。さらに、図１１のように、H32デコーダ８は、上位アドレス変換無効化信号が’1’である場合は常に分岐先アドレスの不一致を検出する。このため、上位アドレス変換無効化信号保持回路２２Ｂ４によって、他スレッドで上位アドレステーブル８１、７１等が更新された場合の分岐予測部２０で予測された分岐先アドレスと、演算器１５で演算された分岐先との不一致が検出できない状態を回避できる。
【０１２８】
以上述べたように、本実施例では、上位アドレステーブル７１、８１を動的に置き換える構成について示した。しかし、特に頻出するパターンについては固定的にコードを割り当てて動的な上位アドレスパターンと固定的な上位アドレスパターンを混在させることで場合によってはより効率的となる分岐予測を実現することも可能である。
【０１２９】
また本実施例では、H32CODEを3ビットの信号で実現したが、将来的にプログラムのサイズが拡大して64ビットアドレス空間へのデータや命令の割付量が増えたとしても、H32COD
Eのビット数を拡張することで同時期にコード化可能なアドレスのパターンを増やして少
ない変更で効率的な分岐予測性能を維持することが可能である。また、本実施例ではスレッド数を２の場合に絞って記述してあるが、スレッド間で上位アドレステーブルを共有する構成のため、将来的にスレッド数を増やしても制御をほとんど変更することなく同様の構成を実現可能である。ただし、当然、スレッド数が１のプロセッサにも、本実施形態の構成は、適用可能である。その場合には、すでに述べたように、図１２の上位アドレス変換無効化信号保持回路２２Ｂ４は不要となる。
【０１３０】
以上の構成を実現することで、プロセッサ１は、上位アドレステーブル７１、８１に、プログラム実行中に動的に命令アドレスの上位アドレスと、上位アドレスをコード化するH32CODEとの対応関係を記憶し、上位アドレスをH32CODEに変換し、効率的に、分岐予測部２０等の処理を実現できる。
【０１３１】
さらに、プロセッサ１は、プログラム実行中に動的に上位アドレステーブル７１、８１を更新することにより生じる問題を解決できる。すなわち、上位アドレステーブルの更新タイミングを投機実行キャンセル要求が発生したタイミングに制限することで、分岐予測時の分岐先アドレスと、演算結果の分岐先アドレスとの不一致を検出できる。
【０１３２】
また、プロセッサ１は、上位アドレステーブル７１に未登録の上位アドレスを１つのコード、例えば、’１００’にコード化することで、未登録の上位アドレスを統一的に処理できる。さらに、プロセッサ１は、上位アドレステーブル８１に未登録のH32CODEをプロ
グラムカウンタ値の上位アドレスにデコードすることで、例えば、命令キャッシュ２４のエントリの書き潰しを抑制することが可能となる。
【０１３３】
また、プロセッサ１がＳＭＴ方式を採用する場合には、上位アドレス更新指示信号を他のスレッドを実行中の上位アドレス切替判定部２２Ｂに通知することで、１つのスレッドでの上位アドレステーブル７１、８２の更新による他のスレッドへの影響を抑止できる。＜その他＞
本実施形態は、以下の態様（以下、付記という）を含む。各付記は、他の付記の構成と組み合わせてもよい。
（付記１）
命令を取得する取得段階と前記命令を実行する実行段階とを含む命令処理を繰り返す演算処理装置の前記取得段階で命令の記憶元である命令アドレスから命令を取得する取得部と、
命令処理がなされた命令の命令アドレスの上位ビット部分と前記命令アドレスの上位ビット部分を符号化する上位アドレス情報との対応関係を登録する対応関係記憶部と、
命令アドレスに含まれる上位ビット部分を前記対応関係に基づいて上位アドレス情報に符号化する符号化部と、
前記対応関係と上位アドレス情報から上位ビット部分を復元する復号化部と、
を備える演算処理装置。
（付記２）
前記命令処理がなされる命令が分岐命令である場合に、前記分岐命令の分岐先アドレスまたは分岐命令の命令アドレスの少なくとも一方についての対応関係が前記対応関係記憶部に登録されておらず、かつ、前記分岐命令が前記上位アドレスを変更する範囲の分岐先に分岐するときに、前記分岐命令に対する分岐予測をキャンセルするとともに、前記分岐命令の分岐先アドレスについての対応関係が前記対応関係記憶部に登録されておらず、かつ、前記分岐命令が前記上位アドレスを変更する範囲の分岐先に分岐するときには、前記対応関係を更新する切替判定部をさらに備える付記１に記載の演算処理装置。
（付記３）
前記符号化部は、前記対応関係が登録されていない命令アドレスの上位ビット部分に対
しては、未登録を示す符号を生成する付記１または２に記載の演算処理装置。
（付記４）
前記取得部が取得する命令の命令アドレスを指示するプログラムカウンタをさらに備え、
前記復号化部は、前記対応関係が登録されていない上位アドレス情報に対しては、前記プログラムカウンタの指示する命令アドレスから前記上位ビット部分を復号する付記１から３のいずれか１項に記載の演算処理装置。
（付記５）
前記対応関係記憶部は前記対応関係を複数のスレッドの間で共用して記憶し、
第１のスレッドにおいて前記対応関係を更新したときに、第２のスレッドにおいて命令処理を前記取得段階からやり直すまでの間、前記符号化部に対して前記上位アドレスの対応関係が登録されていないときの処理を実行させ、前記復号化部に対して前記上位アドレス情報の対応関係が登録されていないときの処理を実行させる上位アドレス変換無効化指示部をさらに備える付記１から４のいずれ１項に記載の演算処理装置。
（付記６）
命令を取得する取得段階と前記命令を実行する実行段階とを含む命令処理を繰り返す演算処理装置の前記取得段階で命令の記憶元である命令アドレスから命令を取得する取得ステップと、
命令処理がなされた命令の命令アドレスの上位ビット部分と前記命令アドレスの上位ビット部分を符号化する上位アドレス情報との対応関係を対応関係記憶部に登録するステップと、
命令アドレスに含まれる上位ビット部分を前記対応関係に基づいて上位アドレス情報に符号化する符号化ステップと、
前記対応関係と上位アドレス情報から上位ビット部分を復元する復号化ステップと、を実行する演算処理方法。
（付記７）
前記命令処理がなされる命令が分岐命令である場合に、前記分岐命令の分岐先アドレスまたは分岐命令の命令アドレスの少なくとも一方についての対応関係が前記対応関係記憶部に登録されておらず、かつ、前記分岐命令が前記上位アドレスを変更する範囲の分岐先に分岐するときに、前記分岐命令に対する分岐予測をキャンセルするとともに、前記分岐命令の分岐先アドレスについての対応関係が前記対応関係記憶部に登録されておらず、かつ、前記分岐命令が前記上位アドレスを変更する範囲の分岐先に分岐するときには、前記対応関係を更新する切替判定ステップをさらに実行する付記６に記載の演算処理方法。
（付記８）
前記符号化ステップでは、前記対応関係が登録されていない命令アドレスの上位ビット部分に対しては、未登録を示す符号が生成される付記６または７に記載の演算処理方法。（付記９）
前記復号化ステップでは、前記対応関係が登録されていない上位アドレス情報に対しては、プログラムカウンタの指示する命令アドレスから前記上位ビット部分が復号される付記６から８のいずれか１項に記載の演算処理方法。
（付記１０）
前記対応関係記憶部は、前記対応関係を複数のスレッドの間で共用して記憶し、
第１のスレッドにおいて前記対応関係を更新したときに、第２のスレッドにおいて命令処理を前記取得段階からやり直すまでの間、前記符号化部に対して前記上位アドレスの対応関係が登録されていないときの処理を実行させ、前記復号化部に対して前記上位アドレス情報の対応関係が登録されていないときの処理を実行させる上位アドレス変換無効化指示ステップをさらに実行する付記６から９のいずれか１項に記載の演算処理方法。
【符号の説明】
【０１３４】
１  プロセッサ
３  メモリ
５  インターコネクト制御部
７  H32エンコーダ
８  H32デコーダ
１１  命令フェッチ制御部
１２  命令バッファ
１３  命令デコーダ
１４  命令発行制御部
１５  演算器
１６  オペランドキャッシュ
１７  レジスタ
１８  命令完了制御部
１９  プログラムカウンタ制御部
２０  分岐予測部
２１  命令アドレスバッファ
２２  分岐制御部
２２Ａ  分岐リザベーションステーション
２２Ｂ  上位アドレス判定部
２３  分岐履歴更新部
２４  命令キャッシュ
２５  二次キャッシュ
７１、８１  上位アドレステーブル
【図１】
2014109953.tif 000003
【図２】
2014109953.tif 000004
【図３】
2014109953.tif 000005
【図４】
2014109953.tif 000006
【図５】
2014109953.tif 000007
【図６】
2014109953.tif 000008
【図７】
2014109953.tif 000009
【図８】
2014109953.tif 000010
【図９】
2014109953.tif 000011
【図１０】
2014109953.tif 000012
【図１１】
2014109953.tif 000013
【図１２】
2014109953.tif 000014