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

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

Info

Publication number
JP6205966B2
JP6205966B2 JP2013168910A JP2013168910A JP6205966B2 JP 6205966 B2 JP6205966 B2 JP 6205966B2 JP 2013168910 A JP2013168910 A JP 2013168910A JP 2013168910 A JP2013168910 A JP 2013168910A JP 6205966 B2 JP6205966 B2 JP 6205966B2
Authority
JP
Japan
Prior art keywords
branch
instruction
address
index
history
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.)
Active
Application number
JP2013168910A
Other languages
English (en)
Other versions
JP2015036934A (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
Priority to JP2013168910A priority Critical patent/JP6205966B2/ja
Priority to EP14177534.6A priority patent/EP2840484A2/en
Priority to US14/340,618 priority patent/US20150052339A1/en
Publication of JP2015036934A publication Critical patent/JP2015036934A/ja
Application granted granted Critical
Publication of JP6205966B2 publication Critical patent/JP6205966B2/ja
Active 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/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
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/321Program or instruction counter, e.g. incrementing
    • 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

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参照)。分岐予測機構は、過去に実行された分岐命令の情報(分岐命令アドレス、分岐先アドレス、分岐の成否、等)を分岐履歴として保持しておき、命令の読み出し(フェッチ)時に命令アドレスを用いて分岐履歴を検索することにより、分岐の成否及び分岐先アドレスを予測する。
演算処理装置は、命令のフェッチと並行して、分岐予測機構により、その命令が分岐命令であるか否かを判定し、命令が分岐命令であった場合に予測される分岐先アドレスが取得可能になる。したがって、演算処理装置がパイプライン処理を行っている場合に、現在の命令フェッチと並行して、予測される分岐先アドレスから次のステージでの命令フェッチを準備できる。そして、実際に得られた分岐先アドレスが予測された分岐先アドレスである場合には、演算処理装置は、パイプライン処理を継続して実行する。一方、実際に得られた分岐先アドレスが予測された分岐先アドレスでない場合には、演算処理装置は、投機的に実行していた命令のパイプライン処理をキャンセルして、正しい分岐先アドレスからの命令フェッチを行って処理を実行する。
図13を参照して、従来の分岐予測方式について説明する。分岐予測機構は、実行された分岐命令の命令アドレスの一部から、セットアソシアティブ方式の分岐履歴(BRHIS)のインデックスを決定する。そして、分岐予測機構は、分岐命令の命令アドレスの他の部分をタグにして、1つのウェイのインデックスに対応するブロックに、分岐先アドレスを登録する。このようにして分岐予測機構は、1つの分岐命令につき1つの分岐先アドレスを分岐履歴として保持する。図13においては、分岐履歴のウェイ1(131−1)に、分岐命令Aの分岐先アドレス(a)及びタグ等と、分岐命令Cの分岐先アドレス(c)及びタグ等とが保持されている。また、分岐履歴のウェイ2(131−2)に、分岐命令Bの分岐先アドレス(b)及びタグ等が保持されている。
分岐予測機構は、命令をフェッチするときに、命令フェッチアドレスFIARの一部から決定するインデックスindexによって分岐履歴131−1、131−2を検索する。フェッチされる命令が、過去に実行された分岐命令であり、その分岐先アドレスが分岐履歴に記憶されていれば、分岐予測機構は、分岐履歴における分岐先アドレスW1_PTIAR又はW2_PTIARを予測分岐先アドレスPTIARとして出力する。このとき、分岐予測機構は、ウェイ選択信号生成論理132及び選択部133により、インデックスindexに対応するブロック内のタグが命令フェッチアドレスFIARの他の部分に一致するウェイの内の分岐命令アドレスが最小のウェイからの分岐先アドレスを予測分岐先アドレスPTIARとして出力する。
ここで、分岐命令には、現在実行中の分岐命令の命令アドレスに分岐命令中で指定した即値を加減算することにより分岐先アドレスを生成する相対アドレス分岐と、レジスタの値を参照して分岐先アドレスを生成するレジスタ間接分岐とがある。ここで、即値とは、命令中の所定フィールドに格納した値をいう。相対アドレス分岐は、1つの命令アドレスに対して分岐先アドレスが一意に確定する。レジスタ間接分岐は、分岐命令の実行時点でのレジスタの値に応じて分岐先アドレスが決定するため、1つの命令アドレスの分岐命令に対して、生成され得る分岐先アドレスの値が複数存在する。
分岐先アドレスが変化し得るレジスタ間接分岐の分岐命令に対して分岐予測精度が高い分岐予測方式として、1つの分岐命令について複数の分岐先アドレスを分岐履歴として保持できるRehashable Branch Target Buffer(R−BTB)という技術が提案されている(例えば、非特許文献1参照)。
図14を参照して、R−BTBの分岐予測方式について説明する。R−BTBの分岐予測機構は、特許文献1の技術とは異なり、1つの命令アドレスの分岐命令に対して2つ以上の分岐先アドレスを格納し、格納した2つ以上の分岐先アドレスを分岐予測に用いることにより、分岐先アドレスが変化するレジスタ間接分岐に対しても高い精度で分岐予測が可能となる。分岐予測機構は、分岐命令の分岐先アドレスの予測ミスの回数、言い換えれば分岐先アドレスが変化した回数を分岐命令毎に数えている。CIBIB(Critical Indirect Branch Instruction Buffer)143は、予測ミスの回数がある閾値を超えた分岐命令の命令アドレスを格納するテーブルを有する。
分岐予測機構は、分岐命令の分岐先アドレスの予測ミスの回数がある閾値を超えていない場合、すなわち分岐命令の命令アドレスがCIBIB143に格納されていない場合には、選択部141により分岐命令の命令アドレスの一部を分岐履歴のインデックスに決定する。また、分岐予測機構は、分岐命令の分岐先アドレスの予測ミスの回数がある閾値を超えた場合、すなわち分岐命令の命令アドレスがCIBIB143に格納されている場合には、選択部141により分岐命令の命令アドレスの一部と分岐命令を含む複数の命令を実行することにより変動するある値とを排他的論理和演算回路142により演算した値から分岐履歴のインデックスを決定する。図14においては、複数の命令を実行することにより変動する値として、対象の分岐命令を実行する前までに実行された分岐命令の分岐先アドレスの一部を時系列に連結したレジスタTHR(Target History Register)の値を用いている(例えば、非特許文献2参照)。
このようにしてR−BTBの分岐予測方式では、1つの命令アドレスの分岐命令に対して、複数の分岐先アドレスを対応づけることが可能となる。例えば、図14においては、分岐履歴144に、分岐命令の命令アドレスの一部とレジスタTHRの値とを排他的論理和演算して得られた値をインデックスとして分岐命令Bの分岐先アドレス(b)がエントリB(1)として保持され、分岐命令の命令アドレスの一部とエントリB(1)登録時とは異なるレジスタTHRの値とを排他的論理和演算して得られた値をインデックスとして分岐命令Bの分岐先アドレス(c)がエントリB(1)とは異なるエントリB(2)として保持されている。
分岐予測時には、分岐予測機構は、分岐命令の命令アドレスがCIBIB143に格納されている場合には、命令フェッチアドレスFIARの一部とレジスタTHRの値とを排他的論理和演算した値をインデックスindexとして分岐履歴144を検索する。また、分岐予測機構は、分岐命令の命令アドレスがCIBIB143に格納されていない場合には、命令フェッチアドレスFIARの一部をインデックスindexとして分岐履歴144を検索する。分岐予測機構は、インデックスindexに対応するブロック内のタグが命令フェッチアドレスFIARの他の部分に一致したものの分岐先アドレスを予測分岐先アドレスPTIARとして出力する。
特開平6−89173号公報
T.Li, R.Bhargava, and L.K.John. Rehashable BTB:An Adaptive Branch Target Buffer to Improve the Target Predictability of Java Code. In HiPC-02, 2002. P.-Y.Chang, E.Hao, and Y.N.Patt. Target prediction for indirect jumps. In ISCA-24, 1997.
前述したR−BTBの分岐予測方式は、1つの分岐命令について複数の分岐先アドレスを分岐履歴として保持でき、分岐先アドレスが変化する分岐命令にも高い分岐予測精度を得ることが可能である。しかし、R−BTBの分岐予測方式は、CIBIB143のテーブルや、分岐命令毎に分岐先アドレスの予測ミスの回数を計数して保持する回路を設けるため、回路規模が増大する。また、R−BTBの分岐予測方式は、CIBIB143を検索して得られる結果を用いてインデックスを決定し分岐履歴の検索を行うので、分岐履歴の検索までに要する論理量が多く、演算処理装置の高周波数化には不向きである。
1つの側面では、本発明の目的は、演算処理装置の高周波数化が可能でかつ回路規模の増大を抑制し、分岐先アドレスが変化する分岐命令を含む分岐命令の分岐予測を行えるようにすることにある。
演算処理装置の一態様は、命令を実行する命令実行部と、分岐命令の命令アドレスの一部を第1のインデックスとし、命令アドレスの一部と分岐命令を含む複数の命令の実行履歴に応じた変動値との排他的論理和を第2のインデックスとして参照する分岐履歴で、さらに同一のインデックスに対して複数のウェイの分岐情報を記憶する分岐履歴を有する分岐履歴記憶部と、第1のインデックスと第2のインデックスを用いて分岐履歴から読み出した複数のウェイの分岐情報に基づいて分岐予測を行い、分岐予測の結果、分岐が成立すると予測した場合に、読み出した複数のウェイの中で分岐成立すると予測したウェイの分岐情報を選択し、分岐情報に含まれる予測分岐先アドレスを出力する分岐予測部と、ある分岐命令に対して、分岐予測により得られた予測分岐先アドレスと、分岐命令の演算を実行して得られた分岐先アドレスとが異なり、且つ、分岐命令の第1のインデックスに対応する分岐履歴のアドレス予測ミスを示す第1のフラグが“1”ではない場合、分岐命令の第1のインデックスに対応する分岐履歴の分岐情報のうち、分岐先アドレスを演算実行結果のアドレスへ更新し、さらに第1のフラグを“1”に設定し、分岐予測により得られた予測分岐先アドレスと分岐命令の演算を実行して得られた分岐先アドレスとが異なり、且つ、分岐命令の第1のインデックスに対応する分岐履歴の第1のフラグが“1”である場合、分岐命令の第2のインデックスに対応する分岐履歴の分岐情報のうち、分岐先アドレスを演算実行結果のアドレスへ更新し、第1のフラグを“1”に設定し、さらに第2のインデックスを用いて分岐情報が更新されたことを示す第2のフラグを“1”に設定する、分岐履歴更新部とを有する。
発明の一態様においては、複数の異なるインデックスを使用して1つの分岐命令に対応する分岐情報を分岐履歴に保持することができ、分岐先アドレスが変化する分岐命令についての分岐予測を行うことができる。また、複数の異なるインデックスを使用して分岐履歴から複数の分岐情報を並列に読み出すことが可能であり、また第1のフラグによって分岐先アドレスの変動頻度を管理するので、演算処理装置の高周波数化が可能でかつ回路規模の増大を抑制することができる。ただし、分岐履歴参照の並列度を上げたことで、分岐履歴を読み出した後で分岐情報を選択する必要が生じる。分岐履歴を複数のウェイで構成している場合にはさらに選択対象が増えるため、高周波数化は困難となる。そこで同一の分岐命令に対して、第1のインデックスにより登録するエントリとハッシュインデックスにより登録するエントリとを同一のウェイでしか構築できないように制限を加えることで、ウェイの選択対象を増やさずに分岐履歴から読み出した分岐情報のウェイ選択論理の論理量を軽減し、高周波数化に適した分岐予測部の構成が可能となる。
情報処理システムの構成例を示す図である。 本実施形態におけるプロセッサの構成例を示す図である。 本実施形態における分岐予測方式を説明するための図である。 本実施形態における分岐履歴のエントリの構成例を示す図である。 本実施形態における分岐予測部の構成例を示す図である。 本実施形態におけるウェイ選択信号生成部の構成例を示す図である。 本実施形態における分岐命令検出部の構成例を示す図である。 本実施形態における分岐先アドレス生成部の構成例を示す図である。 本実施形態における分岐情報選択部の構成例を示す図である。 本実施形態における分岐予測部の動作例を示すフローチャートである。 本実施形態における分岐予測部の動作例を示すフローチャートである。 本実施形態における分岐履歴更新部の構成例を示す図である。 本実施形態における分岐履歴更新部の動作例を示すフローチャートである。 従来の分岐予測方式を説明するための図である。 従来の分岐予測方式を説明するための図である。
以下、本発明の実施形態を図面に基づいて説明する。
図1は、演算処理装置としてのプロセッサを含む情報処理システムの構成例を示す図である。図1に示す情報処理システムは、例えば複数のプロセッサ11A、11B及びメモリ12A、12Bと、外部装置との入出力制御を行うインターコネクト制御部13とを有する。
図2は、本実施形態におけるプロセッサ11の構成例を示す図である。本実施形態におけるプロセッサ11は、例えば命令のアウトオブオーダー(out of order)実行やパイプライン処理の機能を有する。
命令フェッチステージでは、命令フェッチ制御部21、分岐予測部22、一次命令キャッシュメモリ23、命令バッファ24、及び二次キャッシュメモリ35等が動作する。命令フェッチ制御部21は、分岐予測部22からフェッチする命令の予測分岐先アドレス、分岐制御部30から分岐演算により確定した分岐先アドレス、プログラムカウンタ制御部33から次に命令完了する命令のアドレスであるプログラムカウンタ値等を受け取る。命令フェッチ制御部21は、受け取った予測分岐先アドレス、分岐先アドレス、プログラムカウンタ値、及び命令フェッチ制御部21内で作成した分岐しない場合にフェッチする命令の連続した次のアドレス等から、1つのアドレスを選択して次の命令フェッチアドレスを確定する。命令フェッチ制御部21は、確定した命令フェッチアドレスを一次命令キャッシュメモリ23に出力し、出力された確定後の命令フェッチアドレスに対応する命令コードをフェッチする。
一次命令キャッシュメモリ23は、二次キャッシュメモリ35の一部のデータを格納しているものであり、二次キャッシュメモリ35は、メモリコントローラ36を介してアクセス可能なメモリの一部のデータを格納しているものである。一次命令キャッシュメモリ23に該当するアドレスのデータが存在しない場合には二次キャッシュメモリ35からデータをフェッチし、二次キャッシュメモリ35に該当するデータが存在しない場合にはメモリからデータをフェッチする。本実施形態では、メモリはプロセッサ11の外部に配置しているため、外部にあるメモリとの入出力制御はメモリコントローラ36を介して行われる。一次命令キャッシュメモリ23や二次キャッシュメモリ35、メモリの該当するアドレスからフェッチされた命令コードは、命令バッファ24に格納される。
分岐予測部22は、命令フェッチ制御部21から出力された命令フェッチアドレスを受け取り、命令フェッチと並行して分岐予測を実行する。分岐予測部22は、受け取った命令フェッチアドレスを基に分岐予測を行い、分岐の成立又は不成立を示す分岐方向と予測分岐先アドレスとを命令フェッチ制御部21へ返す。命令フェッチ制御部21は、予測された分岐方向が成立であった場合には、次の命令フェッチアドレスとして分岐予測部22によって予測された分岐先アドレスを選択する。
命令発行ステージでは、命令デコーダ25及び命令発行制御部26が動作する。命令デコーダ25は、命令バッファ24から命令コードを受け取って命令の種別や必要な実行資源等を解析し、解析結果を命令発行制御部26や分岐制御部30、命令完了制御部32に出力する。
命令発行制御部26は、リザベーションステーション(reservation station)の構造を持つ。命令発行制御部26は、命令で参照するレジスタ等の依存関係を見て、依存関係のあるレジスタの更新状況や同じ実行資源を用いる命令の実行状況等から実行資源が命令を実行可能かどうかを判断する。命令発行制御部26は、実行資源が命令を実行可能であると判断した場合には、レジスタ番号やオペランドアドレス等の命令の実行に必要な情報を実行資源に対して出力する。また、命令発行制御部26は、実行可能な状態になるまで命令を格納しておくバッファの機能も有する。命令アドレスバッファ27は、命令フェッチ制御部21から出力された命令フェッチアドレスを格納する。
命令実行ステージでは、演算器28、一次データキャッシュメモリ29、及び分岐制御部30等の実行資源が動作する。演算器28は、レジスタ31や一次データキャッシュメモリ29からデータを受け取り、四則演算、論理演算、三角関数演算、及びアドレス計算等の命令に対応した演算を実行し、演算結果をレジスタ31や一次データキャッシュメモリ29に出力する。
一次データキャッシュメモリ29は、一次命令キャッシュメモリ23と同様に、二次キャッシュメモリ35の一部のデータを格納しているものである。一次データキャッシュメモリ29は、ロード命令によるメモリから演算器28やレジスタ31へのデータのロードや、ストア命令による演算器28やレジスタ31からメモリへのデータのストア等に用いられる。各実行資源は、命令実行の完了通知を命令完了制御部32へ出力する。
分岐制御部30は、リザベーションステーションの構造を持つ。分岐制御部30は、命令デコーダ25から分岐命令の種別、命令アドレスバッファ27から命令デコーダ25に同期した分岐命令アドレス、演算器28から分岐先アドレスや分岐条件となる演算の結果を受け取って、分岐命令毎にそれぞれの情報を格納する。分岐制御部30は、得られた演算結果が分岐条件を満たしていれば分岐成立、満たしていなければ分岐不成立の判断を行い、分岐方向を確定する。また、分岐制御部30は、演算結果と分岐予測時の分岐先アドレスと分岐方向が一致するかどうかの判断や、分岐命令の順序関係の制御も行う。分岐制御部30は、分岐リザベーションステーションのエントリ作成時に分岐予測時の分岐方向や分岐先アドレスを登録し、演算結果と予測との一致検証を実行した後、演算結果によりエントリの置き換えを行う。
分岐制御部30は、演算結果と予測とが一致した場合には命令完了制御部32へ分岐命令の完了通知を出力する。一方、演算結果と予測とが一致しなかった場合には分岐予測失敗を意味するので、分岐制御部30は、命令完了制御部32へ分岐命令の完了通知とともに後続命令のキャンセル及び再命令フェッチ要求を出力する。また、分岐制御部30は、分岐成立が確定した場合には完了通知を出力した分岐リザベーションステーションのエントリから演算結果の分岐先アドレスをプログラムカウンタ制御部33へ出力する。
命令完了ステージでは、命令完了制御部32、レジスタ31、プログラムカウンタ制御部33、及び分岐履歴更新部34が動作する。命令完了制御部32は、命令デコーダ25から受け取った命令の種別等を順にコミットスタックエントリに格納する。命令完了制御部32は、命令の各実行資源から受け取った完了通知を基に、コミットスタックエントリに格納された命令コード順に命令完了処理を行い、レジスタやプログラムカウンタ等の更新指示を出力する。レジスタ31は、命令完了制御部32からレジスタ更新指示を受け取ると、演算器28や一次データキャッシュメモリ29から受け取る演算結果のデータを基にレジスタの更新を実行する。
プログラムカウンタ制御部33は、命令完了制御部32から命令完了指示や命令完了した命令の種別、分岐制御部30から分岐先アドレスを受け取る。プログラムカウンタ制御部33は、命令完了制御部32から分岐命令の命令完了指示を受け取ると、分岐制御部30から受け取った分岐先アドレスをプログラムカウンタにセットする。また、プログラムカウンタ制御部33は、命令完了制御部32から分岐命令以外の命令の命令完了指示を受け取ると、命令完了した命令数に応じてプログラムカウンタの値を加算する。更新後のプログラムカウンタの値は、次に命令完了する命令のアドレスを示す。分岐履歴更新部34は、分岐制御部30から受け取る分岐演算の結果を基に、分岐予測の履歴更新データを作成して分岐予測部22に出力する。
図3は、本実施形態における分岐予測方式を説明するための図である。本実施形態における分岐予測方式は、分岐履歴(BRHIS)を複数のウェイで構成している。なお、図3においては、分岐履歴を2つのウェイ(41−1、41−2)で構成した例を示しているが、これに限定されるものではない。各ウェイは、例えば2ポートのマルチリードRAM(Random Access Memory)である。分岐履歴のウェイ1(41−1)及びウェイ2(41−2)には、図4に示す分岐情報が登録される。
図4は、本実施形態における分岐履歴のエントリの構成例を示す図である。本実施形態における分岐履歴は、1つのエントリ毎に、登録された分岐命令の命令アドレスPIAR<31:2>、分岐先アドレスPTIAR<31:0>、及びフラグV、HASHED、TGTUM、INDIRを含む分岐情報を記憶する。
フラグVは、登録された分岐情報が有効であるか否かを示すフラグである。本実施形態では、フラグVは、分岐情報が有効である場合に“1”とし、分岐情報が有効でない場合に“0”とする。フラグHASHEDは、分岐情報を登録したときに使用したインデックスが、ハッシュインデックスであるか否かを示すフラグである。本実施形態では、フラグHASHEDは、登録時に使用したインデックスがハッシュインデックスである場合に“1”とし、登録時に使用したインデックスが非ハッシュインデックスである場合に“0”とする。
ここで、非ハッシュインデックスは、分岐命令の命令アドレスの一部を使用したインデックスである。また、ハッシュインデックスは、分岐命令の命令アドレスの一部と分岐命令を含む複数の命令を実行することにより変動する変動値とを排他的論理和演算して得られた値を使用したインデックスである。本実施形態では、複数の命令を実行することにより変動する変動値として、レジスタTHR(Target History Register)が保持する、対象の分岐命令を実行する前までに実行された分岐命令の分岐先アドレスの一部を時系列に連結した値(部分分岐アドレス連結値)を用いる。
フラグTGTUMは、登録された分岐情報に係る分岐命令が過去に分岐先アドレスの予測ミスが検出されたことがあるか否かを示すフラグである。本実施形態では、フラグTGTUMは、その分岐命令が過去に分岐先アドレスの予測ミスが検出されている場合に“1”とし、過去に1回も分岐先アドレスの予測ミスが検出されていない場合に“0”とする。フラグINDIRは、登録された分岐情報に係る分岐命令がレジスタ間接分岐であるか否かを示すフラグである。本実施形態では、フラグINDIRは、その分岐命令がレジスタ間接分岐の分岐命令である場合に“1”とし、レジスタ間接分岐の分岐命令でない(相対アドレス分岐の分岐命令である)場合に“0”とする。
フラグV、HASHED、TGTUM、INDIRは、初期状態では“0”であるものとする。分岐履歴に分岐情報が記憶されていない分岐命令が実行されると、分岐履歴更新部34は、フラグVを“1”にセットするとともに、その分岐命令がレジスタ間接分岐の分岐命令であればフラグINDIRを“1”セットして、分岐命令の命令アドレスPIAR<31:2>及び分岐先アドレスPTIAR<31:0>を登録し、分岐予測部22が有する分岐履歴を更新する。このとき、更新する分岐履歴のインデックスには、非ハッシュインデックスを用いる。
その後、再び同じ命令アドレスのレジスタ間接分岐の分岐命令が実行され、分岐予測時にその分岐命令に係る分岐履歴のフラグVが“1”であった場合、レジスタ間接分岐の分岐命令の演算が完了し、分岐先アドレスの予測ミスが判明した場合には、分岐履歴更新部34は、フラグTGTUMを“1”にセットし、演算完了時の値で分岐先アドレスPTIAR<31:0>の更新を行う。このとき、更新する分岐履歴のインデックスには、非ハッシュインデックスを用いる。
さらに、再び同じ命令アドレスのレジスタ間接分岐の分岐命令が実行され、分岐予測時にその分岐命令に係る分岐履歴のフラグTGTUMが“1”であった場合、演算完了時に分岐先アドレスの予測ミスが判明した場合に、分岐履歴更新部34は、その分岐命令の分岐先アドレスが変化する頻度が高いと判断する。そして、分岐履歴更新部34は、非ハッシュインデックスを用いて分岐情報を登録したウェイと同じウェイに、ハッシュインデックスを用いて、分岐命令の命令アドレスPIAR<31:2>及び演算結果である分岐先アドレスPTIAR<31:0>を登録し分岐履歴を更新する。このとき、フラグV、HASHED、TGTUM、INDIRのすべてを“1”にセットする。例えば、図3に例示したように、非ハッシュインデックスを用いて登録した、分岐先アドレスが“c”である分岐命令Cの分岐情報が分岐履歴のウェイ1(41−1)に登録されている場合には、ハッシュインデックスを用いて登録する、分岐先アドレスが“d”である分岐命令Cの分岐情報は、分岐履歴のウェイ1(41−1)に登録する。
以後、同じ命令アドレスのレジスタ間接分岐の分岐命令が実行され、演算完了時に分岐先アドレスの予測ミスが判明した場合には、分岐履歴更新部34は、その分岐命令の分岐情報が登録されているウェイと同じウェイに、ハッシュインデックスを用いて分岐情報の登録を行う。分岐履歴更新部34は、分岐命令の命令アドレスPIAR<31:2>及び演算結果である分岐先アドレスPTIAR<31:0>を登録するとともに、フラグV、HASHED、TGTUM、INDIRのすべてを“1”にセットして分岐履歴を更新する。
また、分岐予測時には、分岐予測部22は、非ハッシュインデックスindex1及びハッシュインデックスindex2で、分岐履歴のウェイ1(41−1)及びウェイ2(41−2)をそれぞれ参照する。非ハッシュインデックスindex1は、命令フェッチアドレスFIARの一部をインデックスとするものである。また、ハッシュインデックスindex2は、命令フェッチアドレスFIARの一部とレジスタTHRの値とを排他的論理和演算回路(XOR回路)42でXOR演算して得られた値をインデックスとするものである。
したがって、分岐履歴のウェイ1(41−1)からは、非ハッシュインデックスindex1により検索された分岐先アドレスW1_PTIAR1及びハッシュインデックスindex2により検索された分岐先アドレスW1_PTIAR2が出力される。同様に、分岐履歴のウェイ2(41−2)からは、非ハッシュインデックスindex1により検索された分岐先アドレスW2_PTIAR1及びハッシュインデックスindex2により検索された分岐先アドレスW2_PTIAR2が出力される。
分岐予測部22は、ウェイ毎に、分岐先アドレス予測論理43が有する分岐先アドレス選択信号生成論理44及び分岐先アドレス選択論理45により、分岐履歴から出力された分岐先アドレスを選択する。非ハッシュインデックスから得られる分岐情報においてフラグTGTUM及びフラグINDIRがともに“1”であり、同じウェイのハッシュインデックスから得られる分岐情報のうち、フラグHASHEDが“1”で、かつ登録されている命令アドレスの一部が非ハッシュインデックスとハッシュインデックスとで同じである場合に、ハッシュインデックスから得られた分岐情報の分岐先アドレスを選択する。一方、前述した条件が全てそろわない場合には、非ハッシュインデックスから得られた分岐情報の分岐先アドレスを選択する。
また、分岐予測部22は、ウェイ選択信号生成論理46により、分岐履歴の分岐情報を参照して、フェッチする命令が分岐命令であるか否か、及びどのウェイから分岐先アドレスを取得するかを決定し、ウェイ選択信号を生成する。そして、分岐情報選択論理47により、ウェイ選択信号により指定されるウェイからの分岐先アドレスを選択し、予測分岐先アドレスPTIARとして出力する。ここで、本実施形態では、ある分岐命令の分岐情報は、非ハッシュインデックスを用いて登録されるウェイとハッシュインデックスを用いて登録されるウェイとを同じにしているので、ウェイ選択信号生成論理46によるウェイ選択信号の生成は、ハッシュインデックスから得られる分岐情報を用いずに非ハッシュインデックスから得られる分岐情報のみを用いて行うことが可能である。
図5は、本実施形態における分岐予測部22の構成例を示す図である。本実施形態では、命令フェッチは、命令キャッシュメモリ等から同時に8命令分のデータを読み出すものとする。また、分岐履歴は4つのウェイを有するものとし、命令フェッチアドレスFIAR<31:0>から得られる1つのインデックスに対して4ウェイ同時に分岐情報を読み出し、そこから有効なウェイを選択する。
最初の1サイクル(Aステージ)において、命令フェッチ制御部21が命令フェッチアドレスFIAR<31:0>を確定し、分岐予測部22は、確定した命令フェッチアドレスFIAR<31:0>を基に、インデックス生成論理により分岐履歴のインデックスを生成する。図5に示した例では、命令フェッチアドレスFIAR<31:0>の一部であるFIAR<14:5>による非ハッシュインデックス、及びFIAR<14:5>とレジスタPTHR<9:0>とをXOR演算回路59でXOR演算して得られるハッシュインデックスが生成される。レジスタPTHRは、分岐予測時に検出した分岐命令の分岐先アドレスの一部を時系列に連結した値である部分分岐アドレス連結値を格納しており、本実施形態では、部分分岐アドレス連結値として、レジスタ間接分岐の分岐命令の分岐先アドレスの内の任意の2ビットを抽出して時系列に連結した値を格納しているものとする。
次のサイクル(Tステージ)において、分岐予測部22は、Aステージで生成したインデックス(非ハッシュインデックス及びハッシュインデックス)を用いて分岐履歴(BRHIS)51を検索し、分岐情報を読み出す。
その次のサイクル(Mステージ)において、分岐予測部22は、分岐履歴51から読み出した4ウェイ、2ポートの合わせて8エントリの分岐情報を使用して、分岐予測論理部52で分岐予測を行う。分岐予測論理部52は、フェッチした命令に含まれる分岐命令が分岐するか否かの判定を行うとともに、分岐先アドレスの予測を行い予測分岐先アドレスPTIAR<31:0>を確定する。分岐予測論理部52は、ウェイ選択信号生成部53、分岐命令検出部54、分岐先アドレス生成部55、及び分岐情報選択部56を有する。
なお、図5において、iを添え字(i=1、2、3、4)として、Wi_N_PTIAR<31:0>は、分岐履歴51のウェイiから非ハッシュインデックスを用いて読み出された分岐先アドレスであり、Wi_N_TAGSは、分岐履歴51のウェイiから非ハッシュインデックスを用いて読み出された分岐命令の命令アドレス及び各フラグである。また、Wi_H_PTIAR<31:0>は、分岐履歴51のウェイiからハッシュインデックスを用いて読み出された分岐先アドレスであり、Wi_H_TAGSは、分岐履歴51のウェイiからハッシュインデックスを用いて読み出された分岐命令の命令アドレス及び各フラグである。
最後のサイクル(Bステージ)において、命令フェッチ制御部21は、分岐予測部22での分岐予測に基づき、次の命令フェッチアドレスNFIAR<31:0>を確定する。なお、パイプラインで動作するため、この命令のBステージは次の命令のAステージに相当する。分岐すると予測した場合には分岐予測部22が信号PTAKENを“1”として命令フェッチ制御部21に出力し、命令フェッチ制御部21は、分岐予測で得られた予測分岐先アドレスPTIAR<31:0>を次の命令フェッチアドレスNFIAR<31:0>として命令フェッチを継続する。また、分岐しないと予測した場合には分岐予測部22が信号PTAKENを“0”として命令フェッチ制御部21に出力し、命令フェッチ制御部21は、シーケンシャル方向に増分したアドレスSIAR<31:0>を次の命令フェッチアドレスNFIAR<31:0>として命令フェッチを継続する。アドレスSIAR<31:0>は、8命令分のデータサイズに相当する32バイト分の値を命令フェッチアドレスFIAR<31:0>に加算部57で加算して得られるアドレス値である。
分岐予測論理部52のウェイ選択信号生成部53、分岐命令検出部54、分岐先アドレス生成部55、及び分岐情報選択部56について説明する。
図6は、ウェイ選択信号生成部53の構成例を示す図である。ウェイ選択信号生成部53は、分岐履歴から得られる分岐情報のうち、どのウェイの分岐情報を選択するかを決める。ウェイ選択信号生成部53は、非ハッシュインデックスから得られる分岐情報を用いて選択するウェイを決定する。ここでは簡単のため、分岐履歴に有効な分岐命令のエントリが存在していることで、対応する分岐命令が分岐すると予測するものとして説明する。
ウェイ選択信号生成部53は、各ウェイで非ハッシュインデックスにより検索されたエントリから有効な分岐命令のエントリが存在したことを示す信号W1_HIT、W2_HIT、W3_HIT、W4_HITと、登録された分岐命令の命令アドレスの下位部分であるW1_N_PIAR<4:2>、W2_N_PIAR<4:2>、W3_N_PIAR<4:2>、W4_N_PIAR<4:2>とを受け取る。ここで、命令アドレスの下位部分PIAR<4:2>は、8命令を同時にフェッチしたときの分岐命令の8命令中の位置を示す。
ウェイ選択信号生成部53は、有効な分岐命令のエントリが存在した(信号HITが“1”である)ウェイのうち、命令アドレスの下位部分PIAR<4:2>が最も小さい値のもの、すなわち分岐命令のうちで命令の位置が先頭にあるものを選択する。例えば、ウェイ1の信号W1_HITが“1”であり、かつ比較部62での比較の結果、ウェイ1の命令アドレスの下位部分W1_N_PIAR<4:2>の値が他の有効なウェイに比べて最も値が小さいとする。このとき、ウェイ選択信号生成部53は、論理積演算回路(AND回路)61から出力する信号W1_SELを“1”として、分岐情報選択部56に出力する。
一方、ウェイ1の信号W1_HITが“0”であるか、ウェイ1の信号W1_HITが“1”であってもウェイ1の命令アドレスの下位部分W1_N_PIAR<4:2>の値が他の有効なウェイの値よりも大きい場合には、ウェイ選択信号生成部53は、他の有効なウェイのうちPIAR<4:2>の値が最も小さいウェイiの信号Wi_SELを“1”として分岐情報選択部56に出力する。
本実施形態では、ハッシュインデックスによる分岐履歴のエントリが、対応する分岐命令の非ハッシュインデックスによる分岐履歴のエントリと同じウェイに記憶される。したがって、ウェイ選択信号生成部53での処理結果は、非ハッシュインデックスにより検索された分岐履歴のエントリの分岐情報の選択、及びハッシュインデックスにより検索された分岐履歴のエントリの分岐情報の選択の双方に使用することができる。ウェイ選択信号生成部53は、非ハッシュインデックスを用いて得られる分岐情報を基に動作するため、従来とほぼ同様の論理で構成可能であり、ウェイ選択信号生成部53における回路規模の増加はほぼ0にすることが可能である。
ここで、信号W1_HIT、W2_HIT、W3_HIT、W4_HITの内の少なくとも1つが“1”である場合には、分岐予測論理部52は、分岐すると予測し信号PTAKENを“1”として命令フェッチ制御部21に出力する。また、信号W1_HIT、W2_HIT、W3_HIT、W4_HITのすべてが“0”である場合には、分岐予測論理部52は、命令フェッチする8命令の中に分岐命令が存在しないと判断し、分岐しないと予測し信号PTAKENを“0”として命令フェッチ制御部21に出力する。
図7は、分岐命令検出部54の構成例を示す図である。分岐命令検出部54は、ウェイ毎に構成し、そのウェイiに登録された分岐命令が有効なエントリであるか否かを示す信号Wi_HITを生成する。分岐命令検出部54は、非ハッシュインデックスから得られる分岐情報を用いて信号Wi_HITを生成する。
図7には、ウェイ1の分岐命令検出部54を一例として示している。ウェイ1の分岐命令検出部54は、分岐履歴から登録された分岐命令の命令アドレスであるW1_N_PIAR<31:15>と、読み出した分岐情報が有効であるか否かを示すフラグW1_N_Vと、分岐情報を登録したときに使用したインデックスがハッシュインデックスであるか否かを示すフラグW1_N_HASHEDとを受け取る。
ウェイ1の分岐命令検出部54は、比較器71及びAND回路72を有する。比較器71は、命令フェッチアドレスFIAR<31:15>と、登録された分岐命令の命令アドレスW1_N_PIAR<31:15>とを比較し、比較結果を出力する。AND回路72は、比較器71の出力、フラグW1_N_V、及び反転したフラグW1_N_HASHEDが入力され、その演算結果を信号W1_HITとして出力する。
すなわち、フラグW1_N_Vが“1”であり、かつフラグW1_N_HASHEDが“0”であって、登録された分岐命令の命令アドレスW1_N_PIAR<31:15>と命令フェッチアドレスFIAR<31:15>とが一致する場合には、ウェイ1の分岐命令検出部54は、信号W1_HITを“1”としてウェイ選択信号生成部53に出力する。一方、登録された分岐命令の命令アドレスW1_N_PIAR<31:15>と命令フェッチアドレスFIAR<31:15>とが一致しなかった場合には、ウェイ1の分岐命令検出部54は、信号W1_HITを“0”としてウェイ選択信号生成部53に出力する。また、フラグW1_N_HASHEDが“1”である場合、及びフラグW1_N_Vが“0”である場合には、ウェイ1の分岐命令検出部54は、信号W1_HITを“0”としてウェイ選択信号生成部53に出力する。
図8は、分岐先アドレス生成部55の構成例を示す図である。分岐先アドレス生成部55は、ウェイ毎に構成し、そのウェイWiにおける非ハッシュインデックスによって読み出した分岐先アドレスWi_N_PTIAR<31:0>又はハッシュインデックスによって読み出した分岐先アドレスWi_H_PTIAR<31:0>を選択する。
図8には、ウェイ1の分岐先アドレス生成部55を一例として示している。ウェイ1の分岐先アドレス生成部55は、分岐履歴から非ハッシュインデックスにより検索された分岐履歴のエントリの分岐命令の命令アドレスW1_N_PIAR<31:2>と、分岐命令が過去に分岐先アドレスの予測ミスを起こしたことがあるか否かを示すフラグW1_N_TGTUMと、分岐命令がレジスタ間接分岐であるか否かを示すフラグW1_N_INDIRとを受け取る。また、ウェイ1の分岐先アドレス生成部55は、ハッシュインデックスにより検索された分岐履歴のエントリの分岐命令の命令アドレスW1_H_PIAR<31:2>と、読み出した分岐情報が有効であるか否かを示すフラグW1_H_Vと分岐情報を登録したときに使用したインデックスがハッシュインデックスであるか否かを示すフラグW1_H_HASHEDとを受け取る。また、ウェイ1の分岐先アドレス生成部55は、選択する対象となる分岐先アドレスW1_N_PTIAR<31:0>、W1_H_PTIAR<31:0>を受け取る。
ウェイ1の分岐先アドレス生成部55は、比較器81、AND回路82、83、84、及び選択回路85を有する。比較器81は、分岐命令の命令アドレスW1_N_PIAR<31:2>とW1_H_PIAR<31:2>とを比較し、比較結果を出力する。AND回路82は、フラグW1_N_TGTUMとフラグW1_N_INDIRとが入力され、その演算結果を出力する。AND回路83は、フラグW1_H_VとフラグW1_H_HASHEDとが入力され、その演算結果を出力する。AND回路84は、比較器81、AND回路82、83の出力が入力され、その演算結果を信号H_SELとして出力する。選択回路85は、AND回路84から出力される信号H_SELに応じて、分岐先アドレスW1_N_PTIAR<31:0>、W1_H_PTIAR<31:0>の一方を選択しウェイ1の分岐先アドレスW1_PTIAR<31:0>として出力する。
分岐先アドレス生成部55は、分岐命令の命令アドレスW1_N_PIAR<31:2>とW1_H_PIAR<31:2>との一致検証を比較器81で行う。これにより、ハッシュインデックスによって読み出したエントリに対応する分岐命令が、非ハッシュインデックスによって読み出したエントリに対応する分岐命令と同一であるか否かを確認する。
命令アドレスが同一でない場合には、ハッシュインデックスによって読み出したエントリが命令フェッチする命令アドレスに対応するものではないので、信号H_SELが“0”となる。したがって、分岐先アドレス生成部55は、ウェイ1の予測分岐先アドレスとして非ハッシュインデックスの分岐先アドレスW1_N_PTIAR<31:0>を選択して出力する。
また、命令アドレスが同一であっても、フラグW1_N_TGTUMが“0”であれば、分岐命令の分岐先アドレスの変動頻度が少ないことを示すので、ハッシュインデックスのエントリは有効ではないと判定する。また、命令アドレスが同一であっても、フラグW1_N_INDIRが“0”であれば、分岐命令の分岐先アドレスは変動しないことを示すので、ハッシュインデックスのエントリは有効でないと判定する。また、命令アドレスが同一であってもフラグW1_H_Vが“0”であればハッシュインデックスのエントリは有効でないと判定する。また、命令アドレスが同一であってもフラグW1_H_HASHEDが“0”であれば、このエントリが非ハッシュインデックスを用いて登録されたエントリであるがインデックスが偶然に一致しただけであることを示すので、ハッシュインデックスのエントリは有効ではないと判定する。
ハッシュインデックスのエントリが有効でないと判定した場合、信号H_SELが“0”となり、分岐先アドレス生成部55は、ウェイ1の予測分岐先アドレスとして非ハッシュインデックスの分岐先アドレスW1_N_PTIAR<31:0>を選択して出力する。一方、命令アドレスが同一であって、かつハッシュインデックスのエントリが有効であると判定した場合、信号H_SELが“1”となり、分岐先アドレス生成部55は、ウェイ1の予測分岐先アドレスとしてハッシュインデックスの分岐先アドレスW1_H_PTIAR<31:0>を選択して出力する。
ここで、図8に示したように、分岐先アドレス生成部55は多ビットの一致論理と選択論理とで構成される。それに対して、図6に示したように、ウェイ選択信号生成部53は、多ビットの一致論理の結果から得られる信号Wi_HITを基にして構成されているため、分岐先アドレス生成部55と比較して論理量が多い。そのため、分岐先アドレス生成部55については、演算処理装置の高周波数化に対して影響を与えることはない。
図9は、分岐情報選択部56の構成例を示す図である。分岐情報選択部56は、ウェイ選択信号生成部53からの信号Wi_SEL及び分岐先アドレス生成部55からの分岐先アドレスWi_PTIAR<31:0>に基づいて予測分岐先アドレスPTIAR<31:0>を決定する。分岐情報選択部56は、AND回路91−1〜91−4、及び論理和演算回路(OR回路92)を有する。AND回路91−iには、ウェイiの信号Wi_SEL及び分岐先アドレスWi_PTIAR<31:0>が入力される。OR回路92は、AND回路91−1〜91−4の出力が入力され、予測分岐先アドレスPTIAR<31:0>を出力する。すなわち、分岐情報選択部56は、信号Wi_SELが“1”であるウェイiの分岐先アドレスWi_PTIAR<31:0>を、予測分岐先アドレスPTIAR<31:0>として出力する。
図10A及び図10Bは、本実施形態における分岐予測部22の動作例を示すフローチャートである。なお、以下の説明では、ウェイ1に係る動作を主に説明する。分岐予測部22は、命令フェッチ制御部21から出力された命令フェッチアドレスFIARを受け取ると分岐予測動作を開始する。まず、分岐予測論理部52の分岐命令検出部54が、非ハッシュインデックスを用いて分岐履歴から読み出した分岐情報における分岐命令の命令アドレスW1_N_PIAR<31:15>と命令フェッチアドレスFIARとが一致するか否かを判定する(S101)。
ステップS101での判定の結果、アドレスが一致する場合には、次に、分岐予測論理部52の分岐命令検出部54が、非ハッシュインデックスを用いて分岐履歴から読み出した分岐情報におけるフラグW1_N_Vが“1”であり、かつフラグW1_N_HASHEDが“0”であるかを判定する(S102)。その結果、フラグW1_N_Vが“1”であり、かつフラグW1_N_HASHEDが“0”である場合には、分岐予測論理部52の分岐命令検出部54は、分岐命令が分岐すると予測する(S103)。
続いて、分岐予測論理部52のウェイ選択信号生成部53は、他のウェイがヒットしている、すなわち分岐命令が分岐すると予測されたか否かを判定する(S104)。その結果、他のウェイがヒットしている場合には、分岐予測論理部52のウェイ選択信号生成部53は、ウェイ1の命令アドレスの下位部分W1_N_PIAR<4:2>の値がヒットした他のウェイと比較して最も小さいか否かを判定する(S105)。そして、他のウェイがヒットしていない、又はウェイ1の命令アドレスの下位部分W1_N_PIAR<4:2>の値がヒットした他のウェイと比較して最も小さい場合には、分岐予測論理部52のウェイ選択信号生成部53は、ウェイ1を選択する(S106)。
次に、分岐予測論理部52の分岐先アドレス生成部55は、非ハッシュインデックスによって読み出した分岐情報における分岐命令の命令アドレスW1_N_PIAR<31:2>と、ハッシュインデックスによって読み出した分岐情報における分岐命令の命令アドレスW1_H_PIAR<31:2>とが一致するか否かを判定する(S107)。ステップS107での判定の結果、分岐命令の命令アドレスが一致する場合には、分岐予測論理部52の分岐先アドレス生成部55は、ウェイ1のハッシュインデックスによって読み出した分岐情報が有効であるか否かを判定する(S108)。
ステップS108にてウェイ1のハッシュインデックスの分岐情報が有効であると判定すると、分岐予測論理部52の分岐先アドレス生成部55は、ウェイ1の予測分岐先アドレスとしてハッシュインデックスによって読み出した分岐情報における分岐先アドレスW1_H_PTIAR<31:0>を選択する(S109)。そして、分岐予測論理部52の分岐情報選択部56は、ウェイ1の予測分岐先アドレスとして選択された分岐先アドレスW1_H_PTIAR<31:0>を出力し、次の命令フェッチアドレスとして設定する(S110)。
また、ステップS107での判定の結果、分岐命令の命令アドレスが一致しない場合、又はステップS108での判定の結果、ウェイ1のハッシュインデックスの分岐情報が有効でない場合には、分岐予測論理部52の分岐先アドレス生成部55は、ウェイ1の予測分岐先アドレスとして非ハッシュインデックスによって読み出した分岐情報における分岐先アドレスW1_N_PTIAR<31:0>を選択する(S111)。そして、分岐予測論理部52の分岐情報選択部56は、ウェイ1の予測分岐先アドレスとして選択された分岐先アドレスW1_N_PTIAR<31:0>を出力し、次の命令フェッチアドレスとして設定する(S112)。
また、ステップS101での判定の結果、アドレスが一致しない場合、又はステップS102での判定の結果、フラグW1_N_Vが“1”であり、かつフラグW1_N_HASHEDが“0”である条件を満たさない場合には、分岐予測論理部52の分岐命令検出部54は、他のウェイがヒットしたか否かを判定する(S113)。その結果、他のウェイがヒットしている場合には、分岐予測論理部52の分岐命令検出部54は、分岐命令が分岐すると予測する(S114)。そして、分岐予測論理部52のウェイ選択信号生成部53は、ヒットした他のウェイの内から命令アドレスの下位部分Wi_N_PIAR<4:2>の値が最も小さいウェイを選択する(S115)。続いて、分岐予測論理部52の分岐先アドレス生成部55及び分岐情報選択部56は、選択された他のウェイから読み出した分岐情報における分岐先アドレスPTIAR<31:0>を出力し、次の命令フェッチアドレスとして設定する(S116)。
また、ステップS113での判定の結果、他のウェイがヒットしていない場合には、分岐予測論理部52の分岐命令検出部54は、分岐命令が分岐しないと予測する(S117)。そして、シーケンシャルに増加させて得られる、命令フェッチアドレスと連続したアドレス値を、次の命令フェッチアドレスとして設定する(S118)。
次に、本実施形態における分岐履歴更新部34について説明する。分岐履歴更新部34は、分岐演算の結果を基に動作し、分岐履歴に登録する分岐情報の生成、登録先のインデックスの決定、登録先のウェイの決定等を行う。図11は、分岐履歴更新部34の構成例を示す図である。分岐履歴更新部34は、AND回路111、112、113、選択回路114、115、及びXOR回路116を有する。分岐履歴更新部34に入力される各信号等は、分岐制御部30から供給される。
AND回路111は、分岐演算が完了したことを示す信号BRCOMPが入力されるとともに、分岐予測時に分岐命令に対応する有効なエントリが分岐履歴に存在したことを示す信号PHITが反転入力される。AND回路111は、演算結果を、分岐履歴への新規エントリの作成を指示する信号BRHIS_CREATEとして出力する。
AND回路112は、信号BRCOMP、信号PHIT、分岐先アドレスの予測ミスが検出されたことを示す信号BRTGTUM、及び分岐命令がレジスタ間接分岐であることを示す信号BRINDIRが入力される。AND回路112は、演算結果を、信号BRHIS_UPD_TGTUMとして出力する。信号BRHIS_UPD_TGTUMは、分岐命令に対応する分岐履歴のエントリの分岐情報におけるフラグTGTUMを“1”に更新する信号である。
AND回路113は、信号BRCOMP、信号PHIT、信号BRTGTUM、信号BRINDIR、及び分岐予測時に分岐命令に対応する分岐履歴のエントリから読み出した分岐情報におけるフラグTGTUMが“1”であったことを示す信号PTGTUMが入力される。AND回路113は、演算結果を、信号BRHIS_UPD_HASHEDとして出力する。信号BRHIS_UPD_HASHEDは、分岐履歴のエントリの分岐情報におけるフラグHASHEDを“1”にする信号である。
選択回路114は、信号PHITに応じて、分岐予測時に分岐命令に対応する分岐履歴エントリのウェイ番号を示すPWAY<1:0>又は分岐予測時に分岐命令に対応する分岐履歴のエントリがヒットしなかったときの更新ウェイを示すNO_HIT_WAY<1:0>を選択する。選択回路114は、選択したウェイを分岐履歴の更新ウェイを示すBRHIS_UPD_WAY<1:0>として出力する。
選択回路115は、AND回路113の出力に応じて、分岐命令の命令アドレスBRIAR<14:5>、又は分岐命令の命令アドレスBRIAR<14:5>とレジスタBTHR<9:0>とをXOR回路116でXOR演算して得られる値を選択する。選択回路115は、選択した値を分岐履歴の更新を行うインデックスを示すBRHIS_UPD_IDX<9:0>として出力する。レジスタBTHRは、分岐演算が完了した分岐命令の分岐先アドレスの一部を時系列に連結した値である部分分岐アドレス連結値を格納しており、本実施形態では部分分岐アドレス連結値として、レジスタ間接分岐の分岐命令の分岐先アドレスの内の任意の2ビットを抽出して時系列に連結した値を格納しているものとする。なお、分岐予測が成功している限り、同じ命令アドレスであり、かつその分岐命令を実行する前に実行された過去の分岐命令が同じである分岐命令に対して分岐予測時に参照するレジスタPTHRの値とパイプラインを経過して分岐演算が完了した時に参照するレジスタBTHRの値とは同一である。
図12は、分岐履歴更新部34の動作例を示すフローチャートである。分岐制御部30等による分岐演算が完了すると、分岐履歴更新部34は、分岐予測時に分岐命令に対応する有効なエントリが存在したか否か、すなわち信号PHITが“1”であるか否かを判定する(S201)。分岐予測時に対応する有効なエントリが存在した(信号PHITが“1”)場合には、分岐履歴更新部34は、分岐命令がレジスタ間接分岐であるか否か、及び分岐先アドレスの予測ミスが検出されたか否かを判定する(S202)。その結果、分岐命令がレジスタ間接分岐でない、又は分岐先アドレスの予測ミスが検出されていない場合には、分岐履歴更新部34は、分岐履歴を更新せずに終了する(S203)。
ステップS202での判定の結果、分岐命令がレジスタ間接分岐であり、かつ分岐先アドレスの予測ミスが検出された場合には、分岐履歴更新部34は、その分岐命令において過去にも分岐先アドレスの予測ミスが検出されているか否かを判定する(S204)。その結果、過去に分岐先アドレスの予測ミスが検出されている場合には、分岐履歴更新部34は、分岐命令の命令アドレスの一部とレジスタBTHRの値をXOR演算して得られる値をインデックスとして、対応するウェイの分岐情報を更新する。すなわち、分岐履歴更新部34は、PWAY<1:0>により指定されるウェイに、フラグV、TGTUM、HASHEDをともに“1”に更新し、分岐先アドレスPTIAR<31:0>を演算により得られた分岐先アドレスに更新する(S205)。
ステップS204での判定の結果、過去に分岐先アドレスの予測ミスが検出されていない場合には、分岐履歴更新部34は、分岐命令の命令アドレスの一部をインデックスとして、対応するウェイの分岐情報を更新する。すなわち、分岐履歴更新部34は、分岐履歴に登録されている分岐情報のフラグTGTUMを“1”に更新し、分岐先アドレスPTIAR<31:0>を演算により得られた分岐先アドレスに更新する(S206)。
また、ステップS201での判定の結果、分岐予測時に対応する有効なエントリが存在しない(信号PHITが“0”)場合には、分岐履歴更新部34は、分岐命令がレジスタ間接分岐であるか否かを判定する(S207)。その結果、分岐命令がレジスタ間接分岐である場合には、分岐履歴更新部34は、分岐命令の命令アドレスの一部をインデックスとして、分岐予測時に空きであった分岐履歴のウェイに分岐情報を登録する。すなわち、分岐履歴更新部34は、NO_HIT_WAY<1:0>により指定されるウェイに、フラグV、INDIRをともに“1”に設定し、分岐命令の命令アドレスPIAR<31:2>及び分岐先アドレスPTIAR<31:0>を登録する(S208)。また、分岐命令がレジスタ間接分岐でない場合には、分岐履歴更新部34は、分岐命令の命令アドレスの一部をインデックスとして、分岐予測時に空きであった分岐履歴のウェイに分岐情報を登録する。すなわち、分岐履歴更新部34は、NO_HIT_WAY<1:0>により指定されるウェイに、フラグVを“1”に設定し、分岐命令の命令アドレスPIAR<31:2>及び分岐先アドレスPTIAR<31:0>を登録する(S209)。
本実施形態によれば、分岐先アドレスの予測ミスの発生回数を計数する回路や予測ミスが多数発生する分岐命令の命令アドレスを格納するテーブル等を設けなくとも、分岐先アドレスが変化し得る分岐命令の分岐予測を行うことができ、回路規模の増大を抑制することができる。また、分岐予測の際に分岐履歴の検索までに要する論理量もわずかに増加するだけであり、演算処理装置の高周波数化が可能になる。また、分岐履歴から読み出した分岐情報の選択についても、ハッシュインデックスによって登録した分岐履歴のエントリのウェイを対応する分岐命令の非ハッシュインデックスによって登録する分岐履歴のエントリのウェイと同じにすることにより、ウェイ選択信号生成に係る論理を増加させずに実現することができ、演算処理装置の高周波数化が可能になる。
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
41 分岐履歴
42 排他的論理和演算回路(XOR回路)
43 分岐先アドレス予測論理
44 分岐先アドレス選択信号生成論理
45 分岐先アドレス選択論理
46 ウェイ選択信号生成論理
47 分岐情報選択論理
51 分岐履歴
52 分岐予測論理部
53 ウェイ選択信号生成部
54 分岐命令検出部
55 分岐先アドレス生成部
56 分岐情報選択部
58 選択回路
59 排他的論理和演算回路(XOR回路)

Claims (4)

  1. 命令を実行する命令実行部と、
    分岐命令の命令アドレスの一部を第1のインデックスとし、前記命令アドレスの一部と分岐命令を含む複数の命令の実行履歴に応じた変動値との排他的論理和を第2のインデックスとして参照する分岐履歴で、さらに同一のインデックスに対して複数のウェイの分岐情報を記憶する前記分岐履歴を有する分岐履歴記憶部と、
    前記第1のインデックスと前記第2のインデックスを用いて前記分岐履歴から読み出した複数のウェイの分岐情報に基づいて分岐予測を行い、分岐予測の結果、分岐が成立すると予測した場合に、読み出した前記複数のウェイの中で分岐成立すると予測したウェイの分岐情報を選択し、前記分岐情報に含まれる予測分岐先アドレスを出力する分岐予測部と、
    ある分岐命令に対して、前記分岐予測部が出力した予測分岐先アドレスと、前記命令実行部で分岐命令の演算を実行して得られた分岐先アドレスとが異なり、且つ、前記分岐命令の前記第1のインデックスに対応する分岐履歴の分岐情報に含まれるフラグであってアドレス予測ミスを示す第1のフラグが“1”ではない場合、前記分岐命令の前記第1のインデックスに対応する分岐履歴の分岐情報のうち、分岐先アドレスを演算実行結果のアドレスへ更新し、さらに前記第1のフラグを“1”に設定し、前記分岐予測部が出力した予測分岐先アドレスと前記命令実行部で分岐命令の演算を実行して得られた分岐先アドレスとが異なり、且つ、前記分岐命令の前記第1のインデックスに対応する前記分岐履歴の前記第1のフラグが“1”である場合、前記分岐命令の前記第2のインデックスに対応する分岐履歴の分岐情報のうち、分岐先アドレスを演算実行結果のアドレスへ更新し、前記第1のフラグを“1”に設定し、さらに分岐情報に含まれるフラグであって前記第2のインデックスを用いて分岐情報が更新されたことを示す第2のフラグを“1”に設定する、分岐履歴更新部とを有することを特徴とする演算処理装置。
  2. 前記分岐履歴において、
    複数のインデックスに登録された同一命令アドレスの分岐命令のウェイを同一に揃えることを特徴とする請求項1に記載の演算処理装置。
  3. 前記分岐予測部は、
    前記第1のインデックスを用いて前記分岐履歴を参照して得られた第1の分岐情報に含まれる前記第1のフラグと、前記第2のインデックスを用いて前記分岐履歴を参照して得られた第2の分岐情報に含まれる前記第2のフラグとを用いて、前記第1の分岐情報と前記第2の分岐情報との選択を行い、選択された分岐情報に含まれる前記予測分岐先アドレスを出力することを特徴とする請求項1又は2に記載の演算処理装置。
  4. 命令を実行する命令実行部と、分岐命令の命令アドレスの一部を第1のインデックスとし、前記命令アドレスの一部と分岐命令を含む複数の命令の実行履歴に応じた変動値との排他的論理和を第2のインデックスとして参照する分岐履歴で、さらに同一のインデックスに対して複数のウェイの分岐情報を記憶する前記分岐履歴を有する分岐履歴記憶部とを有する演算処理装置の制御方法において、
    前記演算処理装置が有する分岐予測部が、前記第1のインデックスと前記第2のインデックスを用いて前記分岐履歴から読み出した複数のウェイの分岐情報に基づいて分岐予測を行い、分岐予測の結果、分岐が成立すると予測した場合に、読み出した前記複数のウェイの中で分岐成立すると予測したウェイの分岐情報を選択し、前記分岐情報に含まれる予測分岐先アドレスを出力し、
    前記演算処理装置が有する分岐履歴更新部が、ある分岐命令に対して、前記分岐予測部が出力した予測分岐先アドレスと、前記命令実行部で分岐命令の演算を実行して得られた分岐先アドレスとが異なり、且つ、前記分岐命令の前記第1のインデックスに対応する分岐履歴の分岐情報に含まれるフラグであってアドレス予測ミスを示す第1のフラグが“1”ではない場合、前記分岐命令の前記第1のインデックスに対応する分岐履歴の分岐情報のうち、分岐先アドレスを演算実行結果のアドレスへ更新し、さらに前記第1のフラグを“1”に設定し、前記分岐予測部が出力した予測分岐先アドレスと前記命令実行部で分岐命令の演算を実行して得られた分岐先アドレスとが異なり、且つ、前記分岐命令の前記第1のインデックスに対応する前記分岐履歴の前記第1のフラグが“1”である場合、前記分岐命令の前記第2のインデックスに対応する分岐履歴の分岐情報のうち、分岐先アドレスを演算実行結果のアドレスへ更新し、前記第1のフラグを“1”に設定し、さらに分岐情報に含まれるフラグであって前記第2のインデックスを用いて分岐情報が更新されたことを示す第2のフラグを“1”に設定することを特徴とする演算処理装置の制御方法。
JP2013168910A 2013-08-15 2013-08-15 演算処理装置及び演算処理装置の制御方法 Active JP6205966B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2013168910A JP6205966B2 (ja) 2013-08-15 2013-08-15 演算処理装置及び演算処理装置の制御方法
EP14177534.6A EP2840484A2 (en) 2013-08-15 2014-07-17 Processor and control method of processor
US14/340,618 US20150052339A1 (en) 2013-08-15 2014-07-25 Processor and control method of processor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013168910A JP6205966B2 (ja) 2013-08-15 2013-08-15 演算処理装置及び演算処理装置の制御方法

Publications (2)

Publication Number Publication Date
JP2015036934A JP2015036934A (ja) 2015-02-23
JP6205966B2 true JP6205966B2 (ja) 2017-10-04

Family

ID=51224732

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013168910A Active JP6205966B2 (ja) 2013-08-15 2013-08-15 演算処理装置及び演算処理装置の制御方法

Country Status (3)

Country Link
US (1) US20150052339A1 (ja)
EP (1) EP2840484A2 (ja)
JP (1) JP6205966B2 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6354640B2 (ja) 2015-04-03 2018-07-11 コニカミノルタ株式会社 画像形成システム、携帯端末およびプログラム
US10423777B2 (en) * 2016-04-14 2019-09-24 Endgame, Inc. Preventing execution of malicious instructions based on address specified in a branch instruction
US20190004805A1 (en) * 2017-06-28 2019-01-03 Qualcomm Incorporated Multi-tagged branch prediction table
US11023300B2 (en) 2017-06-30 2021-06-01 Oracle International Corporation Governing access to third-party application programming interfaces
US10902152B2 (en) * 2017-06-30 2021-01-26 Oracle International Corporation Restricting plug-in application recipes
US10706180B2 (en) 2017-07-07 2020-07-07 Endgame, Inc. System and method for enabling a malware prevention module in response to a context switch within a certain process being executed by a processor
US10534609B2 (en) * 2017-08-18 2020-01-14 International Business Machines Corporation Code-specific affiliated register prediction
US11520561B1 (en) 2018-11-28 2022-12-06 Amazon Technologies, Inc. Neural network accelerator with compact instruct set

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3335379B2 (ja) 1992-09-09 2002-10-15 富士通株式会社 ブランチ・ヒストリーを持つ命令実行処理装置
EP1990713B1 (en) * 2006-02-28 2013-04-10 Fujitsu Ltd. Branch predicting device for computer

Also Published As

Publication number Publication date
EP2840484A2 (en) 2015-02-25
JP2015036934A (ja) 2015-02-23
US20150052339A1 (en) 2015-02-19

Similar Documents

Publication Publication Date Title
JP6205966B2 (ja) 演算処理装置及び演算処理装置の制御方法
US10185570B2 (en) Dynamic thread sharing in branch prediction structures
US20090172360A1 (en) Information processing apparatus equipped with branch prediction miss recovery mechanism
CN109643237B (zh) 分支目标缓冲器压缩
JP2003005956A (ja) 分岐予測装置、プロセッサ、及び分岐予測方法
KR101126001B1 (ko) 정보 처리 장치 및 분기 예측 방법
JPH0619707A (ja) 情報処理装置
US10642619B2 (en) Branch prediction using multi-way pattern history table (PHT) and global path vector (GPV)
CN109308191B (zh) 分支预测方法及装置
US9465615B2 (en) Method and apparatus for branch prediction
JP5494832B2 (ja) 演算処理装置および分岐予測方法
US10379858B2 (en) Method and apparatus for executing conditional instruction predicated on execution result of predicate instruction
US20140025932A1 (en) Processor, information processing device, and control method of processor
US9594564B2 (en) Arithmetic processing device and control method of arithmetic processing device
US10620962B2 (en) Appratus and method for using predicted result values
US20170277538A1 (en) Speculative multi-threading trace prediction
US11113066B2 (en) Predicting a branch instruction classified as simple or hard to predict based on a confidence counter in a branch type table
US11010170B2 (en) Arithmetic processing apparatus which replaces values for future branch prediction upon wrong branch prediction
US7428627B2 (en) Method and apparatus for predicting values in a processor having a plurality of prediction modes
US20090070569A1 (en) Branch prediction device,branch prediction method, and microprocessor
US11507377B2 (en) Arithmetic processing circuit and arithmetic processing method
CN117130666A (zh) 配置方法、分支预测器、指令识别器和电子设备

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160510

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20161026

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20161129

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170123

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170613

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170801

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: 20170808

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170821

R150 Certificate of patent or registration of utility model

Ref document number: 6205966

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150