JP5136405B2 - 演算処理装置及び演算処理装置の制御方法 - Google Patents

演算処理装置及び演算処理装置の制御方法 Download PDF

Info

Publication number
JP5136405B2
JP5136405B2 JP2008502592A JP2008502592A JP5136405B2 JP 5136405 B2 JP5136405 B2 JP 5136405B2 JP 2008502592 A JP2008502592 A JP 2008502592A JP 2008502592 A JP2008502592 A JP 2008502592A JP 5136405 B2 JP5136405 B2 JP 5136405B2
Authority
JP
Japan
Prior art keywords
branch
address
instruction
unit
bit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2008502592A
Other languages
English (en)
Other versions
JPWO2007099605A1 (ja
Inventor
恵美 横井
昌樹 鵜飼
崇志 鈴木
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JPWO2007099605A1 publication Critical patent/JPWO2007099605A1/ja
Application granted granted Critical
Publication of JP5136405B2 publication Critical patent/JP5136405B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/323Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/324Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address using program counter relative addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Description

本発明は、情報処理装置、特に命令処理装置に関する。
情報処理装置の分岐予測機構は、過去に実行された命令のメモリ上での記憶アドレス(以下、命令アドレスという)を基に分岐命令の実行履歴を管理することによって、次に分岐命令が実行される場合の分岐先を予測していた(例えば、下記特許文献1参照)。
その場合、分岐予測機構は、過去に記憶元から命令を取得(命令をフェッチするという)された分岐命令の命令アドレス(分岐元アドレス)の一部のビット部分からセットアソアシアティブ方式の記憶装置のセットを決定する。そして、分岐予測機構は、分岐元アドレスのさらに他のビット部分をタグにして、当該セット内の1つのウェイに分岐先アドレスを記憶しておく。
そして、分岐予測機構は、命令のフェッチ段階で命令アドレスを利用して、上記記憶装置を検索する。そして、過去に実行済みの分岐命令で、その分岐先アドレスが記憶装置に記憶されている場合には、分岐予測機構は、該当するセット内のタグの内容が一致するウェイから分岐先アドレスを入手できる。すなわち、命令のフェッチと並行して、その命令が分岐命令であるか否か(分岐元の命令アドレスの部分をタグにして分岐先アドレスが記憶されているか否か)を判定することができた。
すなわち、この技術では、情報処理装置は、現在のフェッチ中の命令のアドレスを取得することにより、命令のフェッチと並行して、その命令が分岐命令であるか否かを判定し、命令が分岐命令であった場合に予測される分岐先アドレスを入手できる。したがって、情報処理装置がパイプライン処理を行っている場合であっても、現在の命令フェッチと並行して、事前に予測される分岐先から次のステージでの命令フェッチを準備することができる。
そして、現在フェッチ中の命令から得られた分岐先が予測された分岐先であった場合には、パイプライン処理を止めることなく各ステージを並列動作できる。一方、現在フェッチ中の命令から得られた分岐先が予測された分岐先でなかった場合には、正しい分岐先から命令フェッチを再開することになる。現在フェッチ中の分岐命令の命令アドレスに対応して上記記憶手段に分岐先が記憶されていなかった場合(分岐予測がヒットしなかったが分岐命令が実行された場合)も、分岐予測を利用できず、フェッチ後の分岐命令をデコードして得られた分岐先アドレスから命令フェッチを再開することになる。
ところで、従来、情報処理装置において、命令が格納される空間は、32ビットアドレス空間であった。しかし、処理されるデータ量の増加に対応して、アドレス空間を64ビットに拡張したものも存在する。そのような情報処理装置では、データ空間のみならず命令空間も64ビット化された。
しかし、実際のプログラムのサイズは4GBよりもかなり小さく(最も大きいプログラムでも数百MB程度である)、64ビット分の完全なアドレスすべてを投機的な実行処理部に記憶または処理させるのは、ハードウェア資源の無駄といえる。
したがって命令セットアーキテクチャで定義されたやむを得ない部分だけを64ビット化することが効率的である。そこで、分岐予測により投機的に命令フェッチを制御する制御部などは極力下位32ビットのアドレスだけを用いて、従来と同様の命令フェッチ等の制御を行ってきた。
具体的な方法としては、予め上位32ビットのアドレスを固定しておき、その固定された上位32ビットと下位32ビットの4Gバイト空間とを用いて命令フェッチを行う。そして、4Gバイト空間を越えれば、上位32ビットを再定義する、というものが考えられる。
つまり、プログラムカウンタの上位32ビットは通常固定しておく。そして、上位32ビットを変更するような、分岐命令や例外、割り込みなどでプログラムカウンタの上位32ビットを変える事象が発生したときには、上位32ビットを改めて求める。この場合、その上位32ビットを変更しようとする命令(事象)の完了をもって投機処理中の命令フェッチ/命令実行パイプラインを一旦完全にクリアすることになる。
そのため、プログラムカウンタの上位32ビットを新しい値に書き換えたのちに、その新しいアドレスでもって命令フェッチより再開する。すなわち、上位32ビットが変更される事象があるときには投機実行の恩恵を全く受けることができない。これでもプログラムサイズが小さい以上問題はないはずであった。ところが、実際のOSは、割り付けるべきプログラムサイズが小さい場合でも、64ビットの命令アドレスの上位32ビットを複数個所利用する制御をするようになった。
この場合には、64ビットの仮想メモリ空間に、プログラムが散在することもありえないことではない。そうすると、個々のプログラムが小さい場合でも、分岐命令によって32ビットの4Gバイトアドレスを越える分岐が頻繁に発生することもありえる。
特開2004−38398号公報
従来の方法では、32ビットの4Gバイトアドレスを越える度に、上位32ビットを再定義するまでの期間は投機命令フェッチを失敗するということになる。例えば、4Gバイトを越えた分岐命令があったとして、たとえ下位32ビットが正しく分岐予測機構により予測されたとしても、上位32ビットは古いままであるために、予測を誤ることになる。
投機命令フェッチを失敗するということは、結果として一切の投機実行が失敗するということであり、その損失は計り知れない。これを改善し、より高い性能を求めるためには、すべてにおいて64ビットアドレスを完全に使用して分岐予測等を行うことが考えられる。しかし、前述の通り、コストやクロックサイクルを考慮すると、これは現実解ではない。本発明の目的は、このような従来の問題点を解決することにある。
本発明は前記課題を解決するために、以下の手段を採用した。すなわち、本発明は、少なくとも命令の記憶元から命令を取得する取得段階と前記命令を処理する実行段階とを含む実行サイクルを繰り返す、そのようなコンピュータの前記取得段階で命令を取得する取得部と、前記取得部が取得する命令の記憶元である命令アドレスを決定するアドレス制御部と、前記コンピュータによって次の命令実行段階で処理される命令が分岐命令であるか否かを過去に処理された命令の履歴情報にしたがって予測する分岐命令予測部と、前記取得された命令の少なくとも1つを前記実行段階で処理する実行部と、を備え、前記アドレス制御部は、前記命令アドレスに含まれる所定の上位ビット部分と下位ビット部分のうち、前記上位ビット部分を圧縮した上位アドレス情報を生成する符号化部と、前記上位アドレス情報から上位ビット部分を復元する復元部とを有し、前記分岐命令予測部は、前記処理された分岐命令の分岐先アドレスに対応する上位アドレス情報と下位ビット部分とを、前記分岐命令の記憶元の命令アドレスに対応する上位アドレス情報と下位ビット部分から決定される複数の格納先のいずれかに前記履歴情報として記憶する履歴記憶部を有する処理装置である。
本発明によれば、処理された分岐命令の分岐先アドレスに対応する上位アドレス情報と下位ビット部分とが、分岐命令の記憶元の命令アドレスに対応する上位アドレス情報と下位ビット部分から決定される複数の格納先のいずれかに履歴情報として記憶される。この場合、上位アドレス情報は、上位ビット部分を圧縮した情報である。したがって、命令アドレス長が拡張され、アドレス空間が増加した場合であっても、圧縮された上位アドレス情報と下位ビット部分によって効率的に分岐先アドレスに対応する情報を管理できる。なお、ここで、命令を処理するとは、命令にしたがった所定の処理を実行することをいい、例えば、条件付き分岐命令の場合には、条件の判定と判定結果に基づく分岐先への分岐または分岐しない処理を含む。
前記符号化部は、前記上位ビット部分を複数のアドレス範囲ごとに区分し、区分された第1のアドレス範囲を識別する第1の上位アドレス情報と前記第1のアドレス範囲以外のアドレス範囲を識別する第2の上位アドレス情報とを生成し、前記アドレス制御部は、前記分岐命令の分岐先アドレスが、前記第1の上位アドレス情報で識別される前記第1のアドレス範囲に分岐する分岐命令である場合に、前記復元部を通じて前記第1のアドレス範囲に対応する上位ビット部分を生成し、前記分岐命令が前記第2の上位アドレス情報で識別されるアドレス範囲に分岐する分岐命令である場合に前記分岐命令の種類に応じて上位ビット部分を復元するようにしてもよい。
本発明によれば、上位ビット部分が複数のアドレス範囲ごとに区分されている。そして、分岐先アドレスが第1の上位アドレス情報で識別される前記第1のアドレス範囲である場合には、その第1のアドレス範囲に対応する上位ビット部分が生成される。一方、分岐先アドレスが前記第2の上位アドレス情報で識別されるアドレス範囲である場合には、分岐命令の種類に応じて上位ビット部分が復元される。このため、例えば、特定のアドレス範囲への分岐命令が頻発する場合には、そのアドレス範囲を第1の上位アドレス情報で識別するように構成することで、効果的に、そのアドレス範囲に対応する上位ビット部分を生成することができる。
前記アドレス制御部は、前記分岐命令が前記第2の上位アドレス情報で識別されるアドレス範囲に分岐する分岐命令である場合に、分岐命令の種類を識別する信号を前記実行部から受信する分岐種別情報受信部と、前記分岐命令が前記下位ビット部分の範囲を限界として分岐元アドレスから相対分岐する相対分岐命令である場合に、前記実行部における前記分岐命令の処理において前記下位ビット部分の範囲から正方向または負方向に桁あふれが発生したことを示す桁あふれ情報を受信する桁あふれ情報受信部と、前記桁あふれが発生した場合に、分岐元アドレスの上位ビット部分への加減算によって分岐先アドレスの上位ビット部分を取得する算術部とを有するものでもよい。
本発明によれば、分岐命令が前記第2の上位アドレス情報で識別されるアドレス範囲に分岐する分岐命令である場合で、かつ、分岐命令が前記下位ビット部分の範囲を限界として分岐元アドレスから相対分岐する相対分岐命令である場合に、分岐元アドレスの上位ビット部分への加減算によって分岐先アドレスの上位ビット部分を取得することができる。すなわち、下位ビット部分の範囲から正方向または負方向への桁あふれを検知し、その桁あふれ分を上位ビット部分に加減算すればよい。
前記アドレス制御部は、分岐種別情報受信部が前記相対分岐命令でない場合に、分岐命令の分岐先を算出した演算部から分岐先アドレスの上位ビット部分を取得する上位ビット取得部を有するものでもよい。
本発明によれば、分岐命令が前記第2の上位アドレス情報で識別されるアドレス範囲に分岐する分岐命令である場合で、分岐命令が上記の相対分岐命令でない場合には、もはやあふれ分を上位ビット部分への加減算によっては上位ビット部分を取得できない。この場合には、分岐先を算出した演算部から分岐先アドレスの上位ビット部分を取得することができる。
アドレス空間が拡張された場合に、その拡張されたアドレス空間で使用される上位ビットに偏りがある場合には、効率的に分岐予測を実現できる。
64ビットのアドレス空間に割り付けられるプロセスのイメージを示す図である。 上位32ビット定義コードの定義を示す図である。 本発明の実施形態に係る処理装置のシステム構成図である。 分岐履歴記憶装置のセットを構成する各ウェイの構成を説明するための図である。 処理装置の詳細構成を示す図である。 上位ビットデコーダの回路構成を示す図である。 上位ビットエンコーダの構成を示す図である。 上位ビットエンコーダの処理シーケンスを示す図である。 上位ビットデコーダの処理シーケンスを示す図である。 分岐先復元処理を示す図である。 PC相対分岐命令の分岐先復元処理を示す図である。
符号の説明
100 分岐予測装置
122A プログラムカウンタ制御装置
123 命令フェッチ制御ユニット
126 分岐リザベーションステーション
130 分岐履歴記憶装置
150A、150B 上位ビットデコーダ
153A、15B 上位ビットエンコーダ
167 演算器
168 相対アドレス演算器
以下、図面を参照して本発明を実施するための最良の形態(以下、実施形態という)に係る処理装置について説明する。以下の実施形態の構成は例示であり、本発明は実施形態の構成に限定されない。
《発明の骨子》
64ビットアドレス空間は、データ空間の64ビット拡張の都合に合わせて行われたものであるため、現状では空間内で実際に命令列が配置されるアドレスには偏りがある。そこで、これらの偏りを利用して、上位32ビットを擬似的に少数のビットで表現する。つまり、頻出の上位アドレスを見込んでおき、少数ビットを用いたコードで頻出する上位アドレスを表現する。
その少数ビットを下位32ビットに加えてアドレスとして取り扱い、分岐予測などを行うようにすれば、従来の装置に少しの拡張を加えるだけで、プログラムの64ビットアドレス空間への割り付け(以下、このようなOSによるプロセスのアドレス空間への割り付けを64ビットアドレスモードという)に対応することができるようになる。すなわち、例えば、OSが64ビットのアドレス空間を利用する制御を行ったとしても、参照されるアドレスの偏りを利用し、効率的な分岐予測ができる。
頻出の上位アドレスは、OSの仕様から予測して固定的に決定してもよいし、またアドレスの頻度カウンタなどを設けて動的に設定することも考えられる。
近年のOSでは、図1のような64ビットアドレス空間が定義されている(例えば、参考文献「solarisインターナルカーネル構造のすべて」(ピアソン・エデュケーション)p.138参照)。
図1は、64ビットのアドレス空間に割り付けられるプロセスのイメージを示す図である。図1で、斜線部分は、いずれのプロセスも使用できないアドレスの領域を示している。図1のように、一般的なOSの制御では、アドレス空間(仮想ドレレス空間)は、カーネルとユーザプロセスとで、別々に用意されている。
例えば、OSのアドレス空間は、カーネルモードのアドレス空間で、0000000:00000001から0000000:FFFFFFFFの範囲である(ここで、0、1、F等は16進数である。以下同様である。ここで、32ビットごとに:(コロン)で区切って示している)。また、0000001:00000000以降の領域は、ヒープ領域およびキャッシュ領域である。
また、ユーザの空間のうち、実行形式が格納されるテキストの空間は、00000001:0000000から開始する。また、FFFFFFFF:7FFFC000からFFFFFFFF:7F7F000までは、スタックの領域が設けられる。さらに、FFFFFFFF:7F7F000から、アドレスが小さくなる方向にラリブラリが格納される。
この図から以下のことが理解される。
(1)OSカーネルの領域は、上位32ビットが0x00000000である。
(2)テキスト(実行形式のプログラム)の領域は、上位32ビットが0x00000001である。
(3)ライブラリが上位32ビットが0xFFFFFFFFから始まり、順番に下がっていく。
一般的なアプリケーションで使用されるライブラリの数はせいぜい10程度までであり、かつライブラリ単体のサイズは小さいのであるプログラムで使用されるライブラリをすべて合わせても普通は上位32ビットの変化しない範囲で収まる。
よって、頻出する上位32ビットのアドレスは、以下の3種類であると考えられる。
0x00000000(16進数で、0が8個)
0x00000001(16進数で、0が7個と1が1個)
0xFFFFFFFF(16進数で、Fが8個)
そこで、上位の32ビットアドレスに代えて、これら3種類の上位アドレスと「それ以外の上位アドレス」とをそれぞれ識別するコードを導入する。分岐予測装置には、これまでの下位32ビットアドレスとともに該コードを登録する。予測された分岐先アドレスの命令フェッチ時には該コードから元の上位32ビットアドレスを生成し、使用する。該コードが頻出する3種類ではなく「それ以外の上位アドレス」であった場合は、上位ビットは不明だから上位ビットを正しく計算するところからやり直せばよい。こうすることでこれまでは「4G越え=投機フェッチ失敗」であったのが、少なくとも上記3種類の上位アドレスについては、従来の32ビット範囲内と同じように投機フェッチ成功の可能性が出てくる。
ほとんどの命令が上記3種類のアドレスに含まれること、かつ、それら3つの領域の行き来はそれなりに多くそれ以外に行くことがほとんどないことを考えれば、64ビットアドレスモードにおいて、性能は飛躍的に向上することが見込まれる。また、従来の32ビットアプリケーションで性能が損なわれることもない。
図2に、コード(以下、上位32ビット定義コードという)の定義を示す。図2のように、上位32ビットアドレスが”0x00000000”の場合、上位32ビット定義コードを00(b)(ビットデータであることを(b)で示す。以下、同様)とする。また、上位32ビットアドレスが”0x00000001”の場合、上位32ビット定義コードを01(b)とする。また、上位32ビットアドレスが”0xFFFFFFFF”の場合、上位32ビット定義コードを11(b)とする。さらに、上位32ビットアドレスが”上記以外の場合に、上位32ビット定義コードを10(b)とする。
このようにして、本処理装置は、分岐予測処理を下位32ビットアドレス+2ビットの上位32ビット定義コードで処理する。本処理装置では、32ビットを越える分岐命令が発生しなければ、合計34ビットの擬似的なアドレスで分岐予測を実行する。
さらに、上記上位32ビット定義コードが00(b)、01(b)または11(b)の場合には、上位32ビットがそれぞれ0x00000000、0x00000001および0xFFFFFFFFに固定されたものとなる。したがって、この場合の分岐予測は、従来の32ビットの範囲での分岐予測の手法がそのまま適用され、いわば34ビットアドレスでの分岐予測が実施される。
一方、上位32ビット定義コードが10(b)の場合には、分岐先が32ビットアドレスの範囲を越え、かつ、上位32ビットが上記3種類のいずれでもないものであることを意味する。その場合には、上位32ビットアドレスは、不明になる。そこで、分岐予測による上位32ビット定義コードが10となったときに現在のPCの上位32ビットをそのまま使うと仮定した動作、つまり32ビット予測そのものをする。
このようにして、本処理装置は、上記3つの領域それぞれの範囲内(上位32ビットアドレスが上位32ビット定義コード00(b)、01(b)、11(b)によって規定されるアドレスの範囲)、および、上記3つの領域相互間の分岐については、従来の32ビットでの分岐予測手段を34ビットアドレス(上位32ビット定義コード+下位32ビットアドレス)に変換して適用することができる。
一方、上記3つの領域を越える領域、すなわち、上位32ビット定義コード10(b)で規定される上位32ビットの範囲への分岐が発生した場合には、従来の技術を適用して上位32ビットを正確に求め直す必要が発生する。
しかしながら、プログラム領域(OS域、テキスト領域、およびライブラリ領域のそれぞれ)が32ビットアドレスの範囲(4GB)を越えて使用されることはまれであるので、大半の処理において、34ビットの範囲で分岐予測を実行できる。
図3は、本処理装置のシステム構成図である。本処理装置は、例えば、主記憶装置121に格納された命令を読み出して実行する、いわゆるプログラム内蔵方式のコンピュータである。
図3のように、この処理装置は、命令を実行する演算ユニット120と、演算ユニット120で実行される命令および演算ユニット120が処理するデータ等を格納する主記憶装置121と、演算ユニット120が実行すべき命令の主記憶装置121上のアドレスを指定するプログラムカウンタ122とを有している。このようなプログラムカウンタ122の制御に基づく処理装置の制御は周知である。
図3では、さらに具体的に、プログラムカウンタ122の生成するアドレスに基づいて命令のフェッチを制御する命令フェッチ制御ユニット123と、命令キャッシュ102を管理し命令フェッチ制御ユニット123からの命令フェッチ要求にしたがって命令をフェッチする命令キャッシュ制御ユニット124と、命令キャッシュ102からフェッチされた命令を保持する命令バッファ125と、命令バッファ125の命令をデコードするデコーダ103と、デコードされた命令の実行タイミングを制御するリザベーションステーション(分岐命令の実行を制御する分岐リザベーションステーション126およびレジスタ演算命令、アドレス演算命令の実行を制御するその他リザベーションステーション127)と、命令の実行完了を監視する命令完了管理ユニット128と、演算ユニット120で実行される命令のオペランドを高速に演算ユニット120に供給するオペランドキャッシュ129と、主記憶装置121とオペランドキャッシュ129との間でデータの授受を管理するデータキャッシュ制御ユニット131とを有している。
このうち、分岐予測装置100は、分岐命令の分岐履歴を記憶する分岐履歴記憶装置130を有している(図5参照)。分岐履歴記憶装置130は、4ウェイセットアソアシアティブ方式の記憶装置である。
図4は、分岐履歴記憶装置130のセットを構成する各ウェイの構成を説明するための図である。分岐履歴記憶装置130は、SRAM等の比較的高速にアクセス可能な記憶装置である。4ウェイの分岐履歴記憶装置130は、1つのセット内に4つのウェイに対応するエントリを有する。図4に示すように、各エントリは、タグ部TGとデータ部DTを含む。タグ部TGは、命令アドレス(の一部)TG1、バリッドフラグV、リプレースフラグR、および、その他のフラグTG2からなる。データ部DTは、所定データとしての分岐先アドレスDT1からなる。
1つのセットは、アドレス生成ユニット101から出力される命令アドレスの一部(例えば<15:5>)によって決定される。本実施形態では4ウェイなので、セットの決定により4つのエントリが指定されることになる。さらに、その4つのエントリのうち、命令アドレスの他の一部によって1つのエントリが決定される。
本処理装置では、この1つのエントリを決定するために、命令アドレスTG1には、上位32ビット定義コード<1:0>と命令アドレスの一部(例えば<31:16>)が格納されている。例えば、登録時に、命令アドレスの一部<15:5>を使ってセットが決定され、残りの部分がセット内のいずれかのエントリ(4つのウェイに対応する4つのエントリのいずれか)のタグ部(命令アドレスTG1を含む)にデータとして格納されるようになっている。なお、命令アドレス<31:16>との記載は、命令アドレスTG1が命令アドレス(例えば32ビット)の一部31ビット目から16ビット目であることを意味する。
したがって、本処理装置では、1つのセット内の4つのエントリを検索するときに使用するタグとして、上位32ビット定義コード(00(b)、01(b)、11(b),および10(b)のいずれか1つ)と下位32ビットアドレスの一部<31:16>が使用される。
バリッドフラグは、エントリの有効又は無効を示すフラグである。例えば、バリッドフラグが”1”であればそのバリッドフラグを含むエントリが有効であること、バリッドフラグが”0”であればそのバリッドフラグを含むエントリが無効であることを示す。エントリが有効とは、ウェイに登録されたデータである分岐先アドレスが抹消されていないという意味である。バリッドフラグは、置換対象のウェイを選択するためにも用いられる。
リプレースフラグは、置換対象のウェイを選択するために用いられるフラグである。分岐先アドレスには、キャッシュメモリ102(または主記憶装置)からフェッチされた分岐命令の分岐先アドレスが格納される。本実施形態では、リプレースフラグおよびバリッドフラグの処理については、詳細を省略する。
以下、本処理装置の制御手順を説明する。まず、プログラムカウンタ122からの命令アドレス(命令が格納された主記憶装置121上のアドレス)が命令フェッチ制御ユニット123に送出される。
命令フェッチユニット123は、命令キャッシュ制御ユニット124にその命令アドレスの命令取得を指示するとともに、分岐予測装置100に対して、分岐予測を指示する。すると命令キャッシュ102での命令取得処理と並行して、分岐予測装置100での分岐履歴記憶装置130の検索がなされる。
そして、分岐予測装置100は、現在の命令アドレスで分岐命令がヒットした場合には、その分岐先アドレスを命令フェッチ制御ユニット123に送出する。
命令フェッチ制御ユニット123は、分岐予測装置100でヒットした分岐命令の分岐先アドレスによって、さらに、次の命令取得を命令キャッシュ制御ユニット124に指示する(このような処理は、通常、パイプラインのステージを形成する)。なお、分岐予測がヒットしなかった場合には、分岐しない次の命令アドレスを命令フェッチ制御ユニット123の内部に含まれるアドレス加算器184で生成し、次の命令取得を命令キャッシュ制御ユニット124に指示する。
フェッチされ、デコードされた命令は、それが分岐命令でなかった場合には、その他リザベーションステーション127によってオペランドの処理等に基づいて、実行の待ち合わせを受ける。そして、オペランドが揃った時点で、各命令が演算ユニット120で実行される。
一方、分岐命令については、分岐リザベーションステーション126によって命令の待ち合わせがなされる。そして、分岐命令の分岐実行によって分岐先アドレスが確定したときに、完了報告が分岐リザベーションステーション126から、命令完了管理ユニット128および分岐予測装置100に送出される。
このとき、分岐リザベーションステーション126は分岐予測が正しかったか否かを判定する。すなわち、(a1)その命令アドレスにて分岐予測装置100によって分岐予測がヒットし(分岐履歴記憶装置130に分岐先アドレスが格納されていた)、(a2)フェッチされた分岐命令がその分岐先アドレスに分岐した場合に、分岐予測が正しかったことが分かる。あるいは、(b1)その命令アドレスにて分岐予測装置100がヒットせず、(b2)フェッチされた命令が分岐命令ではなかったかもしくは分岐命令であっても分岐しなかった場合に、分岐予測が正しかったことがわかる。
この場合、すでにキャッシュ制御ユニット124に依頼済みの命令フェッチは、そのまま続行されることになる。
また、分岐予測が正しくなかった場合には、すでに、キャッシュ制御ユニット124に依頼済みの命令フェッチおよびその後に続く一連の処理はは、処理が中断されることになる。同時に分岐リザベーションステーション126からは、正しい分岐先からの再命令フェッチを行うよう、命令フェッチ制御ユニット123に指示が出される。
分岐予測装置100は、セレクタ132を介して実行された分岐命令をウェイに格納する。
なお、分岐命令は、命令の実行によって分岐先に分岐する場合と、分岐せずに次のアドレスにプログラムカウンタが移動する場合がある。そこで、本実施形態では、命令を実行することを“命令を処理する”と呼ぶ。すなわち、命令を処理するとは、命令にしたがった所定の処理を実行することをいい、例えば、条件付き分岐命令の場合には、条件の判定と判定結果に基づく分岐先への分岐または分岐しない処理を含む。
《実施例》
図5から図11に図面に基づいて本発明の一実施例に係る処理装置を説明する。図5は、実施例に係る処理装置の詳細構成を示す図である。図5では、本処理装置のうち、特に、プログラムカウンタ制御装置122A(本発明のアドレス制御部に相当)、命令フェッチ制御ユニット123(本発明の取得部に相当)、分岐リザベーションステーション126、分岐予測装置100(本発明の分岐予測部に相当)、および演算器(相対アドレス演算器168、演算器167、本発明の実行部に相当)が明示されている。以下、本処理装置の各部の構成要素を説明する。
(プログラムカウンタ制御装置122A)
プログラムカウンタ制御装置122Aは、プログラムカウンタの現在値PC152(または分岐命令の実行結果)に基づいてプログラムカウンタの次の値NPC151の算出を制御する。
図5では、プログラムカウンタの現在値PC152は、上位32ビットPC<63:32>と、下位32ビットPC<31:0>とに分けて示されている。ただし、PC152というときは、プログラムカウンタの現在値そのもの(全部のビット)をいうこととする。
同様に、プログラムカウンタの次の値NPC151は、上位32ビットNPC<63:32>と、下位32ビットNPC<31:0>とに分けて示されている。ただし、NPC152というときは、プログラムカウンタの次の値そのもの(全部のビット)をいうこととする。
図5のように、分岐命令が処理され、分岐先アドレスが確定した場合、分岐リザベーションステーション126からプログラムカウンタ制御装置122Aへ、上位32ビット定義コード、分岐先アドレスの桁あふれ情報、および下位32ビットアドレスが送出される。ここで、分岐先アドレスの桁あふれ情報(以下、単に桁あふれ情報という)とは、PC相対分岐命令が分岐した場合に、分岐先までの相対アドレスが下位32ビットの範囲を超えるか否かを示す情報である。
以下、この桁あふれ情報について説明する。本処理装置では、分岐命令は、PC相対アドレス分岐命令と、レジスタ間接分岐命令とに分類することができる。
PC相対アドレス分岐命令とは、現在のプログラムカウンタの値に対する相対分岐アドレスをオペランドとする分岐命令である。PC相対アドレス分岐命令の分岐先は、現在のプログラムカウンタの値に相対分岐アドレスが加算されたアドレスとなる。本実施形態の場合、オペランドである相対分岐アドレスは、最大32ビットで記述できる範囲である。このため、PC相対アドレス分岐命令が分岐したときの分岐先の上位32ビットは、最大で+1(正方向に桁あふれした状態)、最小で−1(負方向に桁あふれした状態)となる。
本実施形態では、分岐リザベーションステーション126は、正方向に桁あふれした状態を示すビット(+1ビット)、負方向に桁あふれした状態を示すビット(−1ビット)をプログラムカウンタ制御装置122Aに通知する。この信号を受信するプログラムカウンタ制御装置122Aが本発明の桁あふれ情報受信部に相当する。
さらに、PC相対分岐命令が実行された場合には、その実行を示す信号が相対アドレス演算器168からプログラムカウンタ制御装置122Aに通知される(ライン191)。この信号を受信するプログラムカウンタ制御装置122Aが本発明の分岐種別情報受信部に相当する。
一方、レジスタ間接分岐命令とは、レジスタの番号をオペランドとして指定し、指定したレジスタに格納されたアドレスを分岐先アドレスとする分岐命令である。レジスタ間接分岐命令は、レジスタのビット幅、すなわち、64ビットの範囲で分岐先アドレスを指定できる。
図5のように、プログラムカウンタ制御装置122Aは、上位ビットデコーダ150Aを有している。上位ビットデコーダ150Aは、上位32ビット定義コードを本来の上位32ビットアドレスに戻す機能を有する(上位ビットデコーダ150Bも同様である)。
上位ビット定義コードは、分岐リザベーションステーション126から入力される。これは、分岐リザベーションステーション126において、最終的に次の分岐先が確定するためである。すなわち、分岐リザベーションステーション126に示されているバッファTGT−PC171には、命令がデコードされ、分岐が確定した分岐先アドレスの上位32ビット定義コードと、下位32ビットアドレスが格納されている。上位ビットデコーダ150Aには、この確定した分岐先アドレスの上位32ビット定義コードが入力される。
本実施形態のデコーダ150Aは、常時、この上位2ビット定義コードを上位32ビットアドレスに変換している。さらに、プログラムカウンタの次の値NPC151には、命令完了管理ユニット128(図3参照)から分岐命令の実行完了が確認されたとの通知を受け取ったとき、確定した分岐先アドレスの上位32ビットが設定される。
したがって、分岐命令が発生しても、分岐先アドレスの上位32ビット定義コードが00(b),01(b)、または11(b)の場合には、プログラムカウンタ制御装置122Aは、そのまま上位ビットデコーダ150Aによって上位32ビット定義コードから上位32ビットアドレスを生成する。上位32ビットが上位32ビット定義コードから一意に確定可能だからである。。
また、下位32ビットアドレスについては、プログラムカウンタ制御装置122Aは、分岐リザベーションステーション126から確定した分岐先アドレスの下位32ビットTGT_PC<31:0>を受け取り、プログラムカウンタの次の値の下位32ビットNPC<31:0>に設定する。このようにして、分岐命令が発生しても、分岐先アドレス上位32ビットが上位32ビット定義コードで一意に確定可能な場合、プログラムカウンタは、上位32ビット定義コードからアドレスを復元することで、正しい分岐先アドレスを設定されることになる。
一方、上位32ビット定義コードが10(b)(その他)の場合には、プログラムカウンタ制御装置122Aは、分岐命令による分岐先が上位32ビット定義コードで一意に定義されたアドレスの範囲を超えたと仮に判定する(この判定を実行するプログラムカウンタ制御装置122Aが本発明の判定部に相当する)。この場合分岐先アドレスは上位32ビット定義コードで復元不可能である。本実施形態では、分岐命令の種類に応じて、分岐先アドレスを復元する方法を選択する。
以下で、上位32ビット定義コードから分岐先アドレス上位32ビットが生成不可能な場合の分岐先アドレス生成方法を記述する。
まず、分岐命令がPC相対分岐命令であった場合には、ライン191を通じて相対分岐演算器168からその旨の信号(例えばHI信号)がプログラムカウンタ制御装置122Aに通知される。その場合、プログラムカウンタ制御装置122Aは、分岐リザベーションステーション126から、桁あふれ情報を読み取る。そして、桁あふれ情報を元にプログラムカウンタの現在値PC152の上位32ビットに変更を加え、分岐先アドレスの上位32ビットを生成する。
図11にPC相対分岐命令の分岐先復元処理の流れを示す。
桁あふれ情報が+1であった場合には(S192)、プログラムカウンタ制御装置122Aは、プログラムカウンタの現在値の上位32ビットPC<63:32>を加減算器154を通して1加算した値を分岐先アドレスの上位32ビットとする(S193)。また、桁あふれ情報が−1であった場合には(S194)、プログラムカウンタ制御装置122Aは、プログラムカウンタの現在値の上位32ビットPC<63:32>を加減算器を通して1減算した値を分岐先アドレスの上位32ビットとする(S195)。また、桁あふれ情報が+1および−1のいずれでもない場合には、プログラムカウンタ制御装置122Aは、プログラムカウンタの現在値の上位32ビットPC<63:32>をそのまま分岐先アドレスの上位32ビットとする(S196)。この処理を実行する加減算器155が本発明の算術部に相当する。
一方、分岐先アドレスの下位32ビットには、分岐リザベーションステーション126から送出された値TGT_PC<31:0>をそのまま設定する。
次に、分岐命令がレジスタ間接分岐命令であった場合には、ライン191を通じて相対分岐演算器168からその旨の信号(例えばLO信号)がプログラムカウンタ制御装置122Aに通知される。その場合には、プログラムカウンタ制御装置122Aは、プログラムカウンタの現在値PC上位32ビット<63:32>からは、分岐先アドレス上位32ビットを特定できない。
この場合には、プログラムカウンタ制御装置122Aには、演算器167から、レジスタ間接分岐命令の分岐先アドレスが入力される。ここで、演算器167は、レジスタ間接分岐命令の分岐先アドレスを計算する演算器である。そして、プログラムカウンタ制御装置122Aは、レジスタ間接分岐命令の分岐先アドレスを計算した演算器167の出力から、そのまま上位32ビットアドレスを読み取り、分岐先アドレス上位32ビットとする。
一方、分岐先アドレス下位32ビットには、分岐リザベーションステーション126から送出された値TGT_PC<31:0>をそのまま設定する。
プログラムカウンタ制御装置122Aは、上記方法により設定した分岐アドレスから選択回路155により1つを選択し、選択した分岐先アドレスをプログラムカウンタの次の値NPC151に設定する。
図10に分岐先アドレス復元処理の流れを示す。上位32ビット定義コードが00(b)、01(b)、または11(b)の場合(S20)、上位32ビットは分岐リザベーションステーション126から入力された上位32ビット定義コードを上位ビットデコーダ150Aによって復元された値をプログラムカウンタの次の値NPC151の上位32ビットに設定する(S18)。上位32ビット定義コードが10(b)かつ、分岐命令がPC相対分岐命令である旨の信号が通知された場合(S21)、上位32ビットはプログラムカウンタの現在値PCの上位32ビットを加減算器154を通して加減算した値をプログラムカウンタの次の値NPC151の上位32ビットに設定する(S19)。上位32ビット定義コードが10(b)かつ、分岐命令がレジスタ間接分岐命令である旨の信号が通知された場合、レジスタ間接分岐命令の分岐先アドレスを計算した演算器167から入力された値をプログラムカウンタの次の値NPC151の上位32ビットに設定する(S22)。
プログラムカウンタの次の値NPC151の下位32ビットは分岐命令が実行される場合常に、分岐リザベーションステーション126から入力されたTGT_PC<31:0>が設定される。
なお、分岐命令が実行されない場合には、プログラムカウンタ制御装置122Aは、プログラムカウンタの次の値NPC151<63:0>を、同時に完了した命令数分(各命令長の合計)だけ進める。例えば、4命令同時完了でかつ一命令の長さが各々すべて4バイトであれば、4バイト×4命令=16バイトである。
(命令フェッチ制御ユニット)
命令フェッチ制御ユニット123は、アドレスの上位32ビットを上位32ビット定義コードに変換する上位ビットエンコーダ153A(本発明の符号化部に相当)と、上位ビットエンコーダ153Aの出力と分岐リザベーションステーション126からの上位32ビット定義コードとを選択する選択回路161と、選択回路161からの信号を保持するバッファIARX162と、フェッチ中の命令アドレスが入力されるアドレス加算器184と、アドレス加算器184の出力を保持するバッファSEQ163と、分岐予測装置100において予測された次の分岐先アドレスを格納するバッファTIAR164と、バッファIARX162、バッファSEQ163およびバッファTIAR164等に保持された複数の命令アドレスデータ(上位32ビット定義コードおよび下位32ビットアドレス)のいずれかを選択する選択回路165と、選択回路165によって選択された命令アドレスデータを保持する命令フェッチアドレス保持回路166と、命令フェッチのために上位32ビット定義コードから上位32ビットアドレスを生成する上位ビットデコーダ150Bと、を有している。
図5のように、プログラムカウンタの現在値PC152の上位32ビットPC<63:32>が上位ビットエンコーダ153Aにて、上位32ビット定義コードにエンコードされる。エンコードされた上位32ビット定義コードは、選択回路161によって選択され、バッファIARX162に設定される。バッファIARX162は、プログラムカウンタからのフェッチ要求によって命令フェッチを実行する場合に使用するバッファである。
プログラムカウンタからのフェッチ要求があった場合には、選択回路165は、バッファIARX162から出力される命令アドレスデータ(上位32ビット定義コードおよび下位32ビットアドレス)を選択し、その上位32ビット定義コードを上位ビットデコーダ150B、および分岐予測装置100に送出する。また、その場合に、選択回路165は、バッファIARX162から出力される下位32ビットアドレスを命令フェッチアドレス保持回路166、および分岐予測装置100に送出する。
上位ビットデコーダ150Bは、上位32ビット定義コードを上位32ビットアドレスに変換する。この上位32ビットアドレスは、分岐予測装置100内を通過した下位32ビットアドレス(分岐予測装置100内に、IF−EAG<31:0>で明示された線)に付加され、64ビットの命令アドレスIF−EAG<63:0>として命令フェッチに使用される(矢印190)。
また、この命令アドレスの下位32ビットIF−EAG<31:0>は、アドレス加算器184に入力され、アドレスが1単位インクリメントされてバッファSEQ163に格納される。ここで1単位とは、1回のフェッチにおいてメモリ(主記憶装置121または命令キャッシュ102)から取得される命令数分だけ主記憶装置121上のアドレスを進める数である。例えば、32バイト8命令を1フェッチステージでフェッチする場合には、1単位は32バイトである。また、現在の上位32ビット定義コードは、そのままバッファSEQ163の上位32ビット定義コードとして設定される。
したがって、分岐命令が実行されなかったことを条件に、選択回路165は、バッファSEQ163から出力される命令アドレスデータ(上位32ビット定義コードおよび下位32ビットアドレス)を選択する。選択されたバッファSEQ163からの命令アドレスデータは、上記バッファIARX162からの命令アドレスデータと同様に処理される。
また、分岐予測装置において、現在フェッチ中の命令アドレスにおいて分岐命令がヒットし、その分岐先アドレスへの分岐が予測される場合に、分岐予測装置100から分岐先の命令アドレスデータ(上位32ビット定義コードおよび下位32ビットアドレス)が、バッファTIAR164に送出される。
この場合、分岐予測装置100が分岐予測を送出したことを条件に、選択回路165は、バッファTIAR164から出力される命令アドレスデータを選択する。バッファTIAR164からの命令アドレスデータは、上記バッファIARX162からの命令アドレスデータと同様に処理される。
(演算器)
演算器167は、命令フェッチ制御ユニット123の制御によってフェッチされた命令がレジスタ間接分岐命令であった場合に、その分岐先アドレスを計算する。計算された分岐先アドレスは、分岐リザベーションステーション126に送出される。このうち、上位32ビットアドレスは、上位ビットエンコーダ153Bによって上位32ビット定義コードに変換される。なお、演算器167によって計算された分岐先アドレスの上位32ビットは、選択回路169を介してプログラムカウンタ制御装置122Aに送出される。
相対アドレス演算器168は、命令フェッチ制御ユニット123の制御によってフェッチされた命令が相対アドレス分岐命令であった場合に、分岐命令の命令アドレスに相当するアドレスを保持する命令フェッチアドレス保持回路166の下位32ビットPC<31:0>を基準にして相対アドレス分だけ変位したアドレスを計算する。計算された分岐先アドレスは、選択回路169を通じて分岐リザベーションステーション126に送出される。
また、相対アドレス演算器168は、プログラムカウンタ値(現在の命令フェッチアドレス)から上記相対アドレスだけ変位したアドレスを計算するときの桁あふれの発生(正方向の桁あふれ:+1、負方向の桁あふれ:−1)を検知する。検知された桁あふれは、桁あふれ情報(+1、−1)として、分岐リザベーションステーション126を通じて、プログラムカウンタ制御装置122Aに通知される。
さらに、相対アドレス演算器168には、命令フェッチアドレス保持回路166から現在の上位32ビット定義コードが入力されている。上記桁あふれが検知されない場合には、命令フェッチアドレス保持回路166から入力された上位32ビット定義コードがそのままバッファ171に設定される。また、上記桁あふれが検知された場合には、命令フェッチアドレス保持回路166から入力された上位32ビット定義コードから分岐先アドレスの上位32ビット定義コードを算出する。正方向の桁あふれが発生した場合は、上位32ビット定義コードは正の方向に移行し、00(b)−>01(b)、01(b)−>10(b)、10(b)−>10(b)、11(b)−>00(b)となる。このとき、01(b)、10(b)は共に10(b)へと移行する。負方向の桁あふれが発生した場合は、上位32ビット定義コードは負の方向に移行し、00(b)−>11(b)、01(b)−>00(b)、10(b)−>10(b)、11(b)−>10(b)へと移行する。このとき、11(b)、10(b)は共に10(b)へと移行する。
選択回路169は、分岐命令が相対アドレス分岐命令か、レジスタ間接分岐命令かに応じて、相対アドレス演算器168または演算器167のいずれのアドレス計算の結果を選択する。
(分岐リザベーションステーション)
分岐リザベーションステーション126は、選択回路169、バッファ170および、バッファ171を有する。分岐リザベーションステーション126は、相対アドレス演算器168または演算器167において算出された分岐先アドレスをバッファ170、171に保持するとともに、分岐実行のタイミングを調整する。
バッファ170には、命令フェッチアドレス保持回路166から供給される現在のフェッチ中の命令アドレスデータ(フェッチされる命令が分岐命令の場合には、分岐元アドレス)が格納される。この分岐先アドレスデータは、上位32ビット定義コードと、下位32ビットアドレスを含む。
また、バッファ171には、選択回路169によって選択された分岐先アドレスデータ(演算器167によって計算されたアドレスまたは相対アドレス演算器168によって計算されたアドレス)が格納される。この分岐先アドレスデータは、上位32ビット定義コードと、下位32ビットアドレスを含む。
分岐命令(レジスタ間接分岐命令またはPC相対分岐命令)が演算器167または相対アドレス演算器168で処理され、分岐先アドレスが確定すると、分岐元アドレスが、バッファ170から分岐予測装置100に送出される。また、このとき、分岐先アドレスがバッファ171から分岐予測装置100に送出される。
(分岐予測装置)
分岐予測装置100は、分岐リザベーションステーション126において分岐実行が確定された分岐命令(PC相対分岐命令、または、レジスタ間接分岐命令)の分岐先アドレスを分岐履歴として格納する。分岐予測装置装置100は、分岐履歴記憶装置130(本発明の履歴記憶部に相当)と、マッチ回路180と、選択回路183とを含む。なお、分岐予測装置装置100は、単に分岐実行が確定された分岐命令を格納する他、複数回の分岐履歴(いわゆるグローバルヒストリ)に基づいて、次回分岐が予測される分岐命令の分岐先アドレスを格納するようにしてもよい。
分岐履歴記憶装置130は、セットアソシアティブ方式の記憶装置である。分岐履歴記憶装置130のセットは、分岐命令の分岐元アドレスの一部(例えば、<15:5>(第15ビット目から第5ビット目まで))によって指定される。
セット内のウェイは、タグ部130Aに格納されたタグによって決定される。タグ部130Aには、分岐元アドレスの上位32ビット定義コードおよび下位32ビットアドレスの一部(例えば、<31:16>(第31ビット目から第16ビット目まで)が格納される。
一方、そのタグ部に対応するデータ部130Bには、分岐先アドレスの上位32ビット定義コードおよび下位32ビットアドレスが格納される。
また、分岐予測装置100は、分岐履歴記憶装置130の読み出しにおいては、選択回路165を通じて現在フェッチ中の命令アドレス(分岐元アドレス)を取得する。そして、分岐予測装置100は、その命令アドレスによって、該当するセットを決定し、さらにセット内のタグ部130Aを検索する。そして、分岐予測装置100は、タグ部130Aに格納された上位32ビット定義コードおよび下位アドレスの一部(例えば、<31:16>)が、選択回路165から取得されたものと一致するか否かをマッチ回路180によって確認する。
マッチ回路180の一方の入力には、FF182を通じて、上位32ビット定義コードおよび下位アドレスの一部(例えば、<31:16>)が、入力されている。マッチ回路180の他方の入力には、タグ部130Aに記憶されていたタグ(過去において次回分岐すると予測された分岐命令の分岐元の上位32ビット定義コードおよび下位アドレスの一部<31:16>)が入力される。
したがって、現在フェッチ中の命令アドレスに対応する上位32ビット定義コードおよび下位アドレスの一部<31:16>がタグ部130Aの内容と一致した場合に、分岐予測がヒットすることになる。
分岐予測がヒットしたことがマッチ回路で検知されると、そのヒットを示した信号が選択回路183に送出される。選択回路183は、タグ部130Aのヒットしたエントリに対応するデータ部130Bから分岐先の命令アドレスデータ(上位32ビット定義コードおよび下位32ビットアドレス)を命令フェッチ制御ユニットのバッファTIAR164に送出する。これによって、分岐予測に基づいて次の命令フェッチが実行されることになる。
(上位ビットデコーダ)
図6に、上位ビットデコーダ150A(および150B)の回路構成を示す。上位ビットデコーダ150A(および150B)は、それぞれ、上位32ビット定義コードが00(b)、01(b)、および11(b)の場合の上位32ビットアドレスを復元する。
上位ビットデコーダ150A、150Bは、セレクタ300と、4つのANDゲートと、インバータの組合せで構成することができる。なお、図6では、インバータは、ANDゲートの入力端子側の丸印で示されている。ここでは、このような入力側にインバータが組み込まれたものについても、ANDゲートと呼ぶことにする。
それぞれのANDゲートには、上位32ビット定義コード(図6では、HIGH_32BIT_CODE<1>および<0>で表示)が入力される。”11”のラベルが付されたANDは、上位32ビット定義コード<1:0>=11(b)の場合に、HI出力となる。
同様に、”10”のラベルが付されたANDは、上位32ビット定義コード<1:0>=10(b)の場合に、HI出力となる。また、’01’のラベルが付されたANDは、上位32ビット定義コード<1:0>=01(b)の場合に、HI出力となる。また、”00”のラベルが付されたANDは、上位32ビット定義コード<1:0>=00(b)の場合に、HI出力となる。
一方、セレクタ300は、それぞれのANDゲートがオンになると、対応する箇所の入力信号を出力する。セレクタ300の入力側には、3つの固定のデータのレジスタ(0xFFFFFFFF、0x00000001、および0x00000000)と、上位32ビットアドレスそのもの(ADDRESS_IN<63:32>)を格納したレジスタが接続される。
すなわち、”11”のラベルが付されたANDがオンになることによって、上位32ビットすべてが1のビットパターン(0xFFFFFFFF)が出力される。また、”01”のラベルが付されたANDがオンになることによって、上位32ビットのうち最下位ビットが1で、残りのビットが0のビットパターン(0x00000001)が出力される。また、”00”のラベルが付されたANDがオンになることによって、上位32ビットすべてが0のビットパターン(0x00000000)が出力される。また、”10”のラベルが付されたANDがオンになることによって、上位32ビットアドレスそのものが出力される。
(上位ビットエンコーダ)
図7に、上位ビットエンコーダ153A(153B)の構成を示す。上位ビットエンコーダは、上位32ビットアドレス(図7に、ADDRESS_IN<63:32>と表示)が入力され、上位32ビット定義コード(図7に、HIGH_32BITCODE<1:0>と表示)を出力する。
図7のように、上位ビットエンコーダ153A(153B)は、ビットパターン32ビットのビットパターン”111...11”(全ビット1、すなわち、0xFFFFFFFF)、”000...01”(最下位ビットが1、残りがすべて0、すなわち、0x00000001)、”000...00”(全ビット0、すなわち、0x00000000)に、入力データがマッチするか否かを判定する3つのマッチ回路と、入力データとマッチしたマッチ回路の出力に応じて、”11”、”10”、”01”、または”00”の2ビットを出力するセレクタ301とを有している。
(処理シーケンス)
図8から図11のフローチャートにより、上述の構成要素によって実行される処理シーケンスを説明する。ここでは、処理シーケンスをフローチャートで示すが、この処理シーケンスは、基本的には、ハードウェアの論理回路で実現される。
図8は、上位ビットエンコーダの処理シーケンスを示す。上位ビットエンコーダは、上位32ビットアドレスが0xFFFFFFFF、0x00000001、または0x00000000のいずかにマッチするか否かを判定する(S1、S3、S5)。
上位32ビットアドレスが0xFFFFFFFFにマッチする場合、上位ビットエンコーダは、2ビット11(b)を出力する(S2)。
また、上位32ビットアドレスが0x00000001にマッチする場合、上位ビットエンコーダは、2ビット01(b)を出力する(S4)。
また、上位32ビットアドレスが0x00000000にマッチする場合、上位ビットエンコーダは、2ビット00(b)を出力する(S6)。
そして、上位32ビットアドレスが0xFFFFFFFF、0x00000001、または0x00000000のいずかにもマッチしない場合、上位ビットエンコーダは、2ビット10(b)を出力する。
図9に上位ビットデコーダの処理シーケンスを示す。上位ビットデコーダは、上位32ビット定義コード(2ビット)が11(b)、01(b)、または00(b)のいずかにマッチするか否かを判定する(S11、S13、S15)。
上位32ビット定義コードが、11(b)である場合、上位ビットデコーダは、1...11(全ビット1、すなわち、0xFFFFFFFF)を出力する(S12)。
上位32ビット定義コードが、01(b)である場合、上位ビットデコーダは、0...01(最下位ビット以外0、すなわち、0x00000001)を出力する(S14)。
上位32ビット定義コードが、00(b)である場合、上位ビットデコーダは、0...00(全ビット0、すなわち、0x00000000)を出力する(S16)。
上位32ビット定義コードが、以上のいずれでもない場合、上位32ビット定義コードは、10(b)となる。この場合、上位ビットデコーダは、入力された32ビットアドレス、本実施形態ではプログラムカウンタの現在値PC152の上位32ビットを出力する(S17)。
以上述べたように、本実施形態の処理装置によれば、64ビットアドレス空間のうち、上位32ビットアドレスを2ビットの上位32ビット定義コード00(b)、01(b)、11(b)、および01(b)のコードで分類する。そして、上位32ビット定義コードと下位32ビットアドレスの組合せによって、分岐命令の履歴を記憶し、分岐予測を実行する。
したがって、64ビットアドレス空間に、カーネル、ユーザプロセスの実行形式、および、スタック/ライブラリを分散配置するOSの制御に対して、上位32ビットアドレスの使用に偏りがある場合、効率的に分岐予測を実現できる。
すなわち、上位32ビット定義コードのうち、00(b)、01(b)、11(b)を頻繁するアドレスの範囲に割り付け、10(b)をまれにしか発生しないアドレスの範囲に割り付ける。このような上位32ビット定義コードの定義により、分岐先アドレスが、下位32ビットの範囲で収まる場合は、もちろん、分岐先の上位32ビットが00(b)、01(b)、11(b)で分類されるアドレス空間相互で分岐が発生する場合にも、正しい分岐予測結果を得ることができる。したがって、分岐先の上位32ビットが10(b)(その他の場合)を除外して、分岐履歴を有効に使用することができる。
また、PC相対分岐の場合に、プログラムカウンタの現在の値PC152から分岐先アドレスを復元することにより、相対アドレス演算器168の演算結果が確定する前に桁あふれが検知された段階で、分岐先アドレスを算出できる。

Claims (4)

  1. 記憶装置に接続される演算処理装置において、
    前記記憶装置から分岐命令を含む命令を命令アドレスに基づいて取得する取得部と、
    前記取得部が取得した命令を実行する実行部と、
    前記取得部が取得した分岐命令の分岐先アドレスに含まれる所定の上位ビット部分を、複数に区分されたアドレス範囲のいずれかに対応するアドレス範囲識別情報に符号化するとともに、前記実行部が実行した分岐命令の分岐先アドレスが前記複数のアドレス範囲のいずれかに分岐する分岐命令である場合、前記アドレス範囲識別情報と実行された前記分岐命令の種類とに基づいて前記上位ビット部分を復元する制御部と、
    前記実行部が実行した分岐命令の分岐先アドレスに対応するアドレス範囲識別情報と前記分岐先アドレスから前記上位ビット部分を除いた下位ビット部分の一部とを含む履歴情報を、前記下位ビット部分から決定される複数の格納先のいずれかに記憶する履歴記憶部と、
    前記制御部が復元した前記上位ビット部分を含む命令アドレスに基づいて、前記取得部が次に取得する命令の命令アドレスを算出する算出部と、
    前記実行部が過去に実行した命令に対応する履歴情報に基づいて、前記取得部が次に取得する命令の分岐予測を行う分岐命令予測部を有することを特徴とする演算処理装置。
  2. 前記制御部は、前記上位ビット部分を複数のアドレス範囲ごとに区分し、区分された第1のアドレス範囲を識別する第1のアドレス範囲識別情報と前記第1のアドレス範囲以外のアドレス範囲を識別する第2のアドレス範囲識別情報とを生成する手段と、
    記分岐命令の分岐先アドレスが、前記第1のアドレス範囲識別情報で識別される前記第1のアドレス範囲に分岐する分岐命令である場合に、前記第1のアドレス範囲に対応する上位ビット部分を生成する手段と、
    前記分岐命令が前記第2のアドレス範囲識別情報で識別されるアドレス範囲に分岐する分岐命令である場合に、分岐命令の種類を識別する信号を前記実行部から受信する分岐種別情報受信部と、
    前記分岐命令が前記下位ビット部分の範囲を限界として分岐元アドレスから相対分岐する相対分岐命令である場合に、前記実行部における前記分岐命令の処理において前記下位ビット部分の範囲から正方向または負方向に桁あふれが発生したことを示す桁あふれ情報
    を受信する桁あふれ情報受信部と、
    前記桁あふれが発生した場合に、分岐元アドレスの上位ビット部分への加減算によって分岐先アドレスの上位ビット部分を取得する算術部と、を有する請求項1に記載の演算処理装置。
  3. 記制御部は、分岐種別情報受信部が前記相対分岐命令でない場合に、分岐命令の分岐先を算出した前記実行部から分岐先アドレスの上位ビット部分を取得する上位ビット取得部を有する請求項に記載の演算処理装置。
  4. 記憶装置に接続される演算処理装置の制御方法において、
    前記演算処理装置が有する取得部が、前記記憶装置から命令アドレスに基づいて分岐命令を含む命令を取得し、
    前記演算処理装置が有する制御部が、前記取得部が取得した分岐命令の分岐先アドレスに含まれる所定の上位ビット部分を、複数に区分されたアドレス範囲のいずれかに対応するアドレス範囲識別情報に符号化し、
    前記演算処理装置が有する実行部が、前記取得部が取得した命令を実行し、
    前記制御部が、前記実行部が実行した分岐命令の分岐先アドレスが前記複数のアドレス範囲のいずれかに分岐する分岐命令である場合、前記アドレス範囲識別情報と実行された前記分岐命令の種類とに基づいて前記上位ビット部分を復元し、
    前記演算処理装置が有する履歴記憶部が、前記実行部が実行した分岐命令の分岐先アドレスに対応するアドレス範囲識別情報と前記分岐先アドレスから前記上位ビット部分を除いた下位ビット部分の一部とを含む履歴情報を、前記下位ビット部分から決定される複数の格納先のいずれかに記憶し、
    前記演算処理装置が有する算出部が、前記制御部が復元した前記上位ビット部分を含む命令アドレスに基づいて、前記取得部が次に取得する命令の命令アドレスを算出し、
    前記演算処理装置が有する前記分岐命令予測部が、前記実行部が過去に実行した命令に対応する履歴情報に基づいて、前記取得部が次に取得する命令の分岐予測を行うことを特徴とする演算処理装置の制御方法。
JP2008502592A 2006-02-28 2006-02-28 演算処理装置及び演算処理装置の制御方法 Expired - Fee Related JP5136405B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2006/303770 WO2007099605A1 (ja) 2006-02-28 2006-02-28 圧縮したアドレス情報により分岐予測する処理装置

Publications (2)

Publication Number Publication Date
JPWO2007099605A1 JPWO2007099605A1 (ja) 2009-07-16
JP5136405B2 true JP5136405B2 (ja) 2013-02-06

Family

ID=38458729

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008502592A Expired - Fee Related JP5136405B2 (ja) 2006-02-28 2006-02-28 演算処理装置及び演算処理装置の制御方法

Country Status (5)

Country Link
US (1) US7949862B2 (ja)
EP (1) EP1990714B1 (ja)
JP (1) JP5136405B2 (ja)
DE (1) DE602006013515D1 (ja)
WO (1) WO2007099605A1 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008165589A (ja) * 2006-12-28 2008-07-17 Fujitsu Ltd 情報処理装置
JP5678687B2 (ja) * 2011-01-26 2015-03-04 富士通株式会社 処理装置
US8898426B2 (en) 2012-06-11 2014-11-25 International Business Machines Corporation Target buffer address region tracking
JP6179093B2 (ja) * 2012-12-03 2017-08-16 富士通株式会社 演算処理装置、演算処理方法
US10061580B2 (en) * 2016-02-25 2018-08-28 International Business Machines Corporation Implementing a received add program counter immediate shift (ADDPCIS) instruction using a micro-coded or cracked sequence
US10277247B1 (en) * 2018-04-11 2019-04-30 Bae Systems Information And Electronic Systems Integration Inc. Stateful compression scheme for efficient packing of kinematic data
JP7152376B2 (ja) * 2019-09-27 2022-10-12 日本電気株式会社 分岐予測回路、プロセッサおよび分岐予測方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07210383A (ja) * 1994-01-04 1995-08-11 Intel Corp 分岐命令予測機構及び予測方法
JPH0863356A (ja) * 1994-06-14 1996-03-08 Mitsubishi Electric Corp 分岐予測装置
JPH08234980A (ja) * 1995-02-27 1996-09-13 Mitsubishi Electric Corp 分岐先バッファを用いた分岐予測システム
JPH09311787A (ja) * 1996-05-23 1997-12-02 Toshiba Corp データ処理装置
JP2004038298A (ja) * 2002-06-28 2004-02-05 Fujitsu Ltd セットアソシアティブ方式の記憶装置及びキャッシュメモリ装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB9521980D0 (en) * 1995-10-26 1996-01-03 Sgs Thomson Microelectronics Branch target buffer
US5701448A (en) * 1995-12-15 1997-12-23 Cyrix Corporation Detecting segment limit violations for branch target when the branch unit does not supply the linear address
US5938761A (en) * 1997-11-24 1999-08-17 Sun Microsystems Method and apparatus for branch target prediction
US6622241B1 (en) * 2000-02-18 2003-09-16 Hewlett-Packard Development Company, L.P. Method and apparatus for reducing branch prediction table pollution
JP3800533B2 (ja) * 2002-06-28 2006-07-26 富士通株式会社 プログラムカウンタ制御方法及びプロセッサ
JP3737784B2 (ja) 2002-07-01 2006-01-25 コナミ株式会社 3次元画像処理プログラム、3次元画像処理方法及びビデオゲーム装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07210383A (ja) * 1994-01-04 1995-08-11 Intel Corp 分岐命令予測機構及び予測方法
JPH0863356A (ja) * 1994-06-14 1996-03-08 Mitsubishi Electric Corp 分岐予測装置
JPH08234980A (ja) * 1995-02-27 1996-09-13 Mitsubishi Electric Corp 分岐先バッファを用いた分岐予測システム
JPH09311787A (ja) * 1996-05-23 1997-12-02 Toshiba Corp データ処理装置
JP2004038298A (ja) * 2002-06-28 2004-02-05 Fujitsu Ltd セットアソシアティブ方式の記憶装置及びキャッシュメモリ装置

Also Published As

Publication number Publication date
WO2007099605A1 (ja) 2007-09-07
US7949862B2 (en) 2011-05-24
US20080313446A1 (en) 2008-12-18
DE602006013515D1 (de) 2010-05-20
EP1990714A4 (en) 2009-04-29
EP1990714B1 (en) 2010-04-07
EP1990714A1 (en) 2008-11-12
JPWO2007099605A1 (ja) 2009-07-16

Similar Documents

Publication Publication Date Title
JP5313279B2 (ja) 非アラインドメモリアクセス予測
JP5136405B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP5889986B2 (ja) 実行された命令の結果を選択的にコミットするためのシステムおよび方法
JP2744890B2 (ja) ブランチ予測式データ処理装置および動作方法
US5805877A (en) Data processor with branch target address cache and method of operation
US5530825A (en) Data processor with branch target address cache and method of operation
JP3397081B2 (ja) 複数の分岐予測方式のうちの選択された1つを使用して条件分岐命令を推測的に実行するためのプロセッサ、データ処理システム及び方法
JP2008530714A5 (ja)
US8417923B2 (en) Data processing apparatus having trace and prediction logic
JP2009048633A (ja) 分岐先アドレス・キャッシュを備えたプロセッサおよびデータを処理する方法
CN110806900B (zh) 一种访存指令处理方法及处理器
JP2019526873A (ja) 分岐ターゲットバッファの圧縮
TW201732566A (zh) 從亂序處理器中的不良儲存-至-負載轉發復原的方法與設備
US7877578B2 (en) Processing apparatus for storing branch history information in predecode instruction cache
US7000226B2 (en) Exception masking in binary translation
US20140025932A1 (en) Processor, information processing device, and control method of processor
US20160196156A1 (en) Simulation apparatus, simulation method, and computer product
US7003651B2 (en) Program counter (PC) relative addressing mode with fast displacement
US20040230782A1 (en) Method and system for processing loop branch instructions
US6754813B1 (en) Apparatus and method of processing information for suppression of branch prediction
JP3723019B2 (ja) サブルーチンリターン相当の命令の分岐予測を行う装置および方法
US20110083030A1 (en) Cache memory control device, cache memory device, processor, and controlling method for storage device
US6865665B2 (en) Processor pipeline cache miss apparatus and method for operation
EP0666538A2 (en) Data processor with branch target address cache and method of operation
EP1235139A2 (en) System and method for supporting precise exceptions in a data processor having a clustered architecture

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120124

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120326

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20121016

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121029

R150 Certificate of patent or registration of utility model

Ref document number: 5136405

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151122

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees