JP2022094507A - 演算処理回路及び演算処理方法 - Google Patents

演算処理回路及び演算処理方法 Download PDF

Info

Publication number
JP2022094507A
JP2022094507A JP2020207435A JP2020207435A JP2022094507A JP 2022094507 A JP2022094507 A JP 2022094507A JP 2020207435 A JP2020207435 A JP 2020207435A JP 2020207435 A JP2020207435 A JP 2020207435A JP 2022094507 A JP2022094507 A JP 2022094507A
Authority
JP
Japan
Prior art keywords
address
fetch
branch
instruction
fetch address
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.)
Pending
Application number
JP2020207435A
Other languages
English (en)
Inventor
亮平 岡崎
Ryohei Okazaki
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 JP2020207435A priority Critical patent/JP2022094507A/ja
Priority to US17/449,957 priority patent/US11507377B2/en
Publication of JP2022094507A publication Critical patent/JP2022094507A/ja
Pending legal-status Critical Current

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, look ahead
    • G06F9/3802Instruction prefetching
    • 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, 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Advance Control (AREA)

Abstract

【課題】短いレイテンシで分岐予測可能な演算処理装置を提供する。【解決手段】演算処理回路は、1つのフェッチラインに複数の命令が含まれるようにフェッチアドレスを順次生成する命令フェッチアドレス生成器と、1つのフェッチライン内でビット値が変化する命令アドレスビットを少なくとも1ビット含むようにフェッチアドレスから抽出されたビット列をインデックスとした複数のインデックスの各々に対して、1個の分岐先アドレスとフェッチアドレスの上位側のビット列である1個の第1のタグとを格納するアドレステーブルと、フェッチアドレスに応じてアドレステーブルから読み出された第1のタグと上位タグ格納部に格納されている第2のタグとが、フェッチアドレスの対応部分に一致する場合に、フェッチアドレスに応じてアドレステーブルから読み出された分岐先アドレスを命令フェッチアドレス生成器に供給する分岐方向判定部とを含む。【選択図】図2

Description

本願開示は、演算処理回路及び演算処理方法に関する。
プロセッサの高速化技術のひとつである分岐予測技術では、実行される分岐命令に対して、分岐命令の分岐が成立する(TAKEN)又は成立しない(NOT_TAKEN)のいずれかを示す分岐方向と、分岐命令のターゲットアドレス(分岐先アドレス)とを予測する。分岐命令の処理によって実際に分岐したか否かが判定される前に、予測に応じて、先行して投機的に後続命令の処理を進めていくことが可能となる。
分岐予測が失敗した場合、先行して投機的に実行されていた後続命令の処理を全て破棄し、正しい後続命令について処理を実行し直さなければならないため、プロセッサの処理性能が低下する。分岐予測の精度を高めてプロセッサ処理性能の低下を避けるためには、計算量の多い複雑な分岐予測演算を実行することになるため、分岐予測を完了するまでにレイテンシ1よりも長いレイテンシが必要になってしまう。
しかしながら分岐予測のレイテンシが長いと、命令フェッチの進行に間隙が空いてしまい、十分なスループットを維持できないという問題がある。例えば、分岐予測のレイテンシが3サイクルであるとする。第1の命令をフェッチした後、シーケンシャル方向の命令フェッチ(一定のアドレス増分での命令フェッチ)がその後の各サイクルにおいて実行されつつ、第1の命令に対する分岐予測演算が実行される。この第1の命令に対する分岐予測の結果が得られるのは、第3の命令をフェッチした後(即ち3サイクル経過後)である。分岐予測の結果が分岐成立を示す場合、シーケンシャル方向にフェッチしていた第2の命令及び第3の命令はキャンセルされ、分岐予測の結果が示すターゲットアドレスに対する命令フェッチが新たに実行される。この場合、分岐予測のレイテンシの長さに応じてスループットが低下してしまう。
特開2018-063684号公報 特開平05-143334号公報 特表2017-509995号公報
以上を鑑みると、短いレイテンシで分岐予測可能な演算処理装置が望まれる。
演算処理回路は、1つのフェッチラインに複数の命令が含まれるようにフェッチアドレスを順次生成する命令フェッチアドレス生成器と、前記1つのフェッチライン内でビット値が変化する命令アドレスビットを少なくとも1ビット含むように前記フェッチアドレスから抽出されたビット列をインデックスとした複数のインデックスの各々に対して、1個の分岐先アドレスと、前記ビット列よりも前記フェッチアドレスの上位側のビット列である1個の第1のタグと、を格納するアドレステーブルと、前記フェッチアドレスを構成する複数個のビットのうち前記第1のタグよりも上位側のビット列である1個の第2のタグを格納する上位タグ格納部と、前記フェッチアドレスに応じて前記アドレステーブルから読み出された前記第1のタグと前記上位タグ格納部に格納されている前記第2のタグとが、前記フェッチアドレスの対応部分に一致する場合に、前記フェッチアドレスに応じて前記アドレステーブルから読み出された前記分岐先アドレスを前記命令フェッチアドレス生成器に供給する分岐方向判定部とを含む。
少なくとも1つの実施例によれば、短いレイテンシで分岐予測可能な演算処理装置が提供される。
プロセッサの構成の一例を示す図である。 分岐予測機構の第1実施例の構成の一例を示す図である。 図2に示す分岐予測機構及び命令フェッチアドレス生成器の動作を示すフローチャートである。 フェッチラインの構成の一例を示す図である。 第2実施例に用いられる分岐予測器の構成の一例を示す図である。 分岐予測機構の第2実施例の構成の一例を示す図である。 分岐予測機構の第2実施例における命令フェッチの一例を示す図である。 分岐予測機構の第2実施例における命令フェッチの一例を示す図である。 第1予測器におけるエントリ更新処理の一例を示すフローチャートである。 分岐予測機構を備えたプロセッサを用いたシステム構成の一例を示す図である。
分岐予測機構においては、通常、複数ウェイの各々に対してターゲットアドレスを格納したテーブルと、分岐方向を予測するテーブルとを備え、それぞれのテーブルをフェッチアドレスの一部(インデックス)により参照することで予測を行うことが多い。しかしながら、複数ウェイを有するテーブルを用いて予測を行うためには、インデックスにより各ウェイを並列に引き、それぞれのウェイがヒットか否かを調べ、複数のウェイがヒットである場合には1つのウェイを選択する、という各動作を実行する必要がある。これらの動作を実行するためには論理回路の論理段数が多くなり、長いレイテンシがかかってしまう。またレイテンシを短くしようとすると、高い動作クロック周波数を維持することが困難になる。
ウェイの数が多いことが論理段数の増加に繋がるので、ウェイの個数を1個のみにすれば、分岐予測演算に必要な論理段数の観点からはレイテンシ1での高速な分岐予測を実装することが可能である。しかしながら単純にウェイの個数を1個のみにしてしまったのでは、以下のようなテーブル格納エントリの衝突という問題が生じる。
一般に、1つのフェッチアドレスにより読み出される1つのフェッチラインには複数(例えば8個)の命令が含まれており、これら複数の命令に対して纏めて分岐予測が実行される。例えば1つのフェッチラインに4バイト長の命令が8個含まれており、この8個の命令のうちで2個の命令が分岐命令である場合を考える。フェッチアドレスが0x1000であるとすると、対応フェッチラインに含まれる第1の命令乃至第8の命令の格納アドレスは、0x1000、0x1004、0x1008、0x100C、0x1010、0x1014、0x1018、及び0x101Cである。
複数ウェイを用いる分岐予測機構では、通常、フェッチアドレスがシーケンシャル方向に所定固定量ずつ増加する毎に、1ずつ増加するインデックスを用いる。具体的には、上記の例であれば、下位5ビット(bit0~bit4)より上に位置する例えばbit5~bit8(以降bit[8:5]と表記する)をインデックスとして用いる。フェッチアドレス0x1000に対するインデックスbit[8:5]は"0000"であり、シーケンシャル方向における次のフェッチアドレス0x1100に対するインデックスbit[8:5]は"0001"である。
上述の例のように、フェッチアドレス0x1000に対応するフェッチラインに2個の分岐命令が含まれている場合であっても、テーブルに複数のウェイが設けられていれば、2個の分岐命令がそれぞれ異なるウェイに対応してテーブルに格納されることになる。従って、インデックス"0000"における複数のウェイを並列に参照することにより、2個の分岐命令のそれぞれに対して分岐予測結果を得ることができる。
このような場合において、ウェイの個数を1個のみにしてしまうと、テーブル内でインデックス"0000"に対するエントリは1個のみとなる。従って、対応フェッチラインに含まれる2個の分岐命令のうちで、一方の命令はテーブル格納することができず、この命令についてレイテンシ1で予測を実行することはできない。以下に説明する本発明の実施例では上記の問題を解決するために、フェッチアドレスの一部を分岐予測に用いるインデックスとして用いる際に、1つのフェッチラインに対して少なくとも2つのインデックスが割り当てられるようにする。
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。以下の各図において、同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。
図1は、プロセッサの構成の一例を示す図である。図1及び以下の同様の図において、各ボックスで示される各回路又は機能ブロックと他の回路又は機能ブロックとの境界は、基本的には機能的な境界を示すものであり、物理的な位置の分離、電気的な信号の分離、制御論理的な分離等に対応するとは限らない。各回路又は機能ブロックは、他のブロックと物理的にある程度分離された1つのハードウェアモジュールであってもよいし、或いは他のブロックと物理的に一体となったハードウェアモジュール中の1つの機能を示したものであってもよい。
図1に示すプロセッサは、分岐予測機構10、命令フェッチアドレス生成器11、命令バッファ12、命令デコーダ13、及びレジスタリネーミング14を含む。プロセッサは更に、RSA(Reservation Station for Address generate)15、RSE(Reservation Station for Execute)16、RSF(Reservation Station for Floating)17、及びRSBR(Reservation Station for Branch)18を含む。プロセッサは更に、CSE(Commit Stack Entry)19、オペランドアドレス生成器20、演算器21、演算器22、及びネクストプログラムカウンタ(PC)23を含む。プロセッサは更に、固定小数点更新バッファ26、浮動小数点更新バッファ27、固定小数点レジスタ28、及び浮動小数点レジスタ29を含む。プロセッサは更に、2次命令キャッシュ102、1次命令キャッシュ103、及び1次データキャッシュ104を含んでよい。これらのキャッシュのうちの幾つかはプロセッサの外部に設けられていてもよい。2次命令キャッシュ102はメインメモリ101に接続されている。
命令フェッチアドレス生成器11は、命令フェッチアドレスを格納するプログラムカウンタを内蔵し、当該プログラムカウンタの格納値を一定値ずつ増加させることにより、命令フェッチアドレスを順次生成する。1つのフェッチアドレスにより読み出される1つのフェッチラインには複数(例えば8個)の命令が含まれてよい。1つのフェッチラインに含まれる命令数は特に限定されるものではない。
分岐予測機構10は、命令フェッチアドレス生成器11から出力された命令フェッチアドレスを受け取り、命令フェッチと並行して分岐予測を実行する。分岐予測機構10は、受け取った命令フェッチアドレスを基に分岐予測を行い、分岐成立又は分岐不成立を示す分岐方向と分岐先アドレス(ターゲットアドレス)とを命令フェッチアドレス生成器11に返す。予測された分岐方向が分岐成立であった場合、命令フェッチアドレス生成器11は次の命令フェッチアドレスとして分岐予測機構10によって予測された分岐先アドレスを選択する。分岐予測機構10の構成及び動作については後ほど説明する。
命令フェッチアドレス生成器11は、命令フェッチアドレスと命令フェッチリクエストとを1次命令キャッシュ103に発行する。これに応じて、1次命令キャッシュ103から命令フェッチアドレスに対応するフェッチラインの命令が読み出され、読み出された命令が命令バッファ12に格納される。
命令バッファ12は、プログラムの命令順通り即ちインオーダーで格納した命令を命令デコーダ13に供給する。命令デコーダ13は、プログラムの命令順通り即ちインオーダーで命令のデコード処理を行い、インオーダーで命令を発行する。レジスタリネーミング14は、命令に示されるレジスタと物理的なレジスタとの対応関係を動的に切り替えることにより、命令の並列実効性を高める。この命令発行処理及びレジスタリネーミング処理を介して、キュー構造のストレージであるRSA15、RSE16、RSF17、又はRSBR18に、各命令を示すエントリが、デコードした命令の種類に従って作成される。
RSA15は、主記憶オペランドアドレスを生成してロード命令やストア命令を実行するために、作成されたエントリをプログラムの命令順に拘束されず即ちアウトオブオーダーで制御するリザベーションステーションである。RSA15による制御に基づいて、オペランドアドレス生成器20がアクセス先のアドレスを生成し、1次データキャッシュ104の当該アドレスに対してロード命令やストア命令が実行される。ロード命令により読み出されたデータは、固定小数点更新バッファ26又は浮動小数点更新バッファ27の指定されたレジスタに格納される。
RSE16は、指定されたレジスタのデータに対して指定された固定小数点演算を実行するために、作成されたエントリをアウトオブオーダーで制御するリザベーションステーションである。RSE16は、実行対象の命令が参照するレジスタの依存性をチェックし、依存性のあるレジスタの更新状況や演算器21のうちの同じ実行資源を用いる命令の実行状況等から、実行資源である演算器21が命令を実行可能かどうかを判断する。実行可能であるなら、RSE16は、受け取った命令の順序によらずにアウトオブオーダーで各演算器21に対してレジスタ番号やオペランドアドレス等の命令実行に必要な情報を出力する。RSE16による制御に基づいて、演算器21が、固定小数点更新バッファ26及び固定小数点レジスタ28の指定されたレジスタのデータに対して指定された固定小数点演算を実行し、固定小数点更新バッファ26の指定されたレジスタに演算結果を格納する。
RSF17は、指定されたレジスタのデータに対して指定された浮動小数点演算を実行するために、作成されたエントリをアウトオブオーダーで制御するリザベーションステーションである。RSF17は、上記説明したRSE16と同様の動作により、アウトオブオーダーで各演算器22に対してレジスタ番号やオペランドアドレス等の命令実行に必要な情報を出力する。RSF17による制御に基づいて、演算器22が、浮動小数点更新バッファ27及び浮動小数点レジスタ29の指定されたレジスタのデータに対して指定された浮動小数点演算を実行し、浮動小数点更新バッファ27の指定されたレジスタに演算結果を格納する。
RSBR18は、分岐命令を実行するためのリザベーションステーションである。RSBR18は、命令デコーダ13から分岐命令の種別を受け取ると共に、命令アドレスバッファから分岐命令アドレスを受け取り、分岐命令毎にそれぞれの信号を格納する。その後、RSBR18は、演算器21から分岐先アドレスや分岐条件となる演算の結果を受け取り、得られた演算結果が分岐条件を満たしていれば分岐成立、満たしていなければ分岐不成立の判断を行い、分岐方向を確定する。
またRSBR18では、上記演算結果が示す実際の分岐アドレス及び分岐方向と分岐予測時の分岐アドレス及び分岐方向とが一致するか否かの判断や、分岐命令の順序関係の制御も行う。RSBR18は、エントリ作成時に分岐予測時の分岐方向や分岐先アドレスを登録し、演算結果と予測との一致検証を実行後、演算結果によりエントリの置き換えを行う。具体的には、RSBR18は、命令デコーダ13から分岐命令の種別を受け取ると共に、分岐命令アドレスを受け取り、分岐命令毎にそれぞれの信号を格納する。
RSBR18は、実際の分岐命令の実行結果と分岐予測結果とが一致した場合、CSE19へ分岐命令の完了報告を出力すると共に、分岐予測機構10に完了した分岐命令の情報を供給する。RSBR18は、実際の分岐命令の実行結果と分岐予測結果とが一致しなかった場合、CSE19へ分岐命令の完了報告と共に後続命令のキャンセル要求を出力する。RSBR18は、実際の分岐命令の実行結果と分岐予測結果とが一致しなかった場合は更に、命令フェッチアドレス生成器11へ再命令フェッチ要求と再命令フェッチのアドレスとを出力し、更に、分岐予測機構10に完了した分岐命令の情報を供給する。
命令デコーダ13は更に、全てのデコードされた命令に命令識別子を割り振り、命令識別子を命令の順番通りにCSE19に送る。CSE19は、デコードされた命令の命令識別子を命令の実行順番通りに蓄積するキュー構造のストレージと、キューの情報と各処理パイプからの演算完了報告とに基づいてコミット処理を行う完了処理回路とに分けられる。デコーダで解読された命令の命令識別子はCSE19のキューに蓄えられ、処理パイプからの完了報告を待つ。各リザベーションステーションがアウトオブオーダーで実行した命令についての完了報告をCSE19に送ると、CSE19の完了処理回路が、キューに蓄えられた完了待ちの命令の中から完了報告に対応する命令をインオーダーで開放し、完了を確定させる。
CSE19から開放され完了が確定する命令については、対応する資源の更新を行なう。ロード命令や演算命令等の場合には、固定小数点更新バッファ26や浮動小数点更新バッファ27のデータを、固定小数点レジスタ28や浮動小数点レジスタ29に転送し、命令実行結果をソフトウェアからアクセス可能なレジスタに反映させる。また同時に、ネクストプログラムカウンタ23の値を、実行完了して開放される命令の次の命令のアドレスを指し示すように適切な増分だけ変化させる。なおネクストプログラムカウンタ23は、割り込み発生時等の特殊な場合に用いられるプログラムカウンタであり、プログラムの通常の進行中に用いられることはない。
図2は、分岐予測機構10の第1実施例の構成の一例を示す図である。図2に示す分岐予測機構10は、アドレステーブル31、上位タグ格納部32、及び分岐方向判定部33を含む。
図2に示される命令フェッチアドレス生成器11は、図1に示される命令フェッチアドレス生成器11であり、1つのフェッチラインに複数の命令が含まれるようにフェッチアドレスを順次生成する。命令フェッチアドレス生成器11がシーケンシャル方向に順次生成するフェッチアドレスにおいて、あるフェッチアドレスとその直後のフェッチアドレスとの差は所定の一定値(例えば32バイト)である。この場合1つのフェッチラインの長さは、当該差に等しい長さ(例えば32バイト)である。例えば32バイト長である1つのフェッチラインには、例えば4バイト長の命令が8個含まれてよい。以下の説明においては、フェッチラインの長さが32バイトであり、4バイト長の命令が8個含まれる場合を例として用いるが、この例の構成は限定を意図するものではない。
アドレステーブル31は、1つのフェッチライン内でビット値が変化する命令アドレスビットを少なくとも1ビット含むようにフェッチアドレスから抽出されたビット列をインデックスとした複数のインデックスの各々に対して、エントリを格納する。各インデックスに対するエントリは、1個の分岐先アドレスと、インデックスのビット列よりもフェッチアドレスの上位側のビット列である1個の第1のタグと、エントリが有効か否かを示すフラグを含む。
アドレステーブル31のインデックスは、フェッチラインが32バイト長である場合、例えばフェッチアドレスの下位3ビット(bit0~bit2)より上に位置する例えばbit[6:3](bit3~bit6)である。アドレステーブル31に格納される第1のタグは、インデックスよりも上位側のビット列であり、例えばbit[10:7](bit7~bit10)である。
アドレステーブル31は、命令フェッチアドレス生成器11が生成するフェッチアドレスに応じたエントリを出力する。具体的には、命令フェッチアドレス生成器11からフェッチアドレスのbit[6:3]がアドレステーブル31に供給されると、アドレステーブル31は、当該インデックスに対応した1個のターゲットアドレスと1個の第1のタグと1個のフラグとを出力する。出力された1個のターゲットアドレスと1個の第1のタグと1個のフラグとは、分岐方向判定部33に供給される。
上位タグ格納部32は、フェッチアドレスを構成する複数個のビットのうち上記第1のタグよりも上位側のビット列である1個の第2のタグを格納する。この例では、第1のタグbit[10:7]よりも上位側のビットとして、例えばbit[15:11]が第2のタグであってよい。第2のタグbit[15:11]はアドレスビットが16ビットの場合であり、例えばアドレスビットが32ビットであれば、第2のタグはbit[31:11]であってよい。
命令フェッチアドレス生成器11からフェッチアドレスのbit[15:11]が上位タグ格納部32に供給されると、上位タグ格納部32は、格納されている第2のタグと供給されたbit[15:11]とを比較し、比較結果を示す信号を出力してよい。比較結果を示す信号は分岐方向判定部33に供給される。代替的に、上位タグ格納部32は第2のタグを分岐方向判定部33に供給し、分岐方向判定部33が、命令フェッチアドレス生成器11から供給されたフェッチアドレスのbit[15:11]と上位タグ格納部32から供給された第2のタグとを比較してもよい。
分岐方向判定部33は、命令フェッチアドレス生成器11から第1のタグに対応するフェッチアドレスの部分(bit[10:7])を命令フェッチアドレス生成器11から受け取る。分岐方向判定部33は、フェッチアドレスに応じてアドレステーブル31から読み出された第1のタグと上位タグ格納部32に格納されている第2のタグとが、前記フェッチアドレスのそれぞれ対応する部分に一致するか否かを判定する。分岐方向判定部33は、判定結果が一致を示す場合に、フェッチアドレスに応じてアドレステーブル31から読み出されたターゲットアドレスを命令フェッチアドレス生成器11に供給する。即ち、分岐予測機構10は、分岐予測演算の結果として分岐成立を予測し、ターゲットアドレスを命令フェッチアドレス生成器11に供給する。
分岐方向判定部33は、上記判定結果が一致を示している場合であっても、フェッチアドレスに応じてアドレステーブル31から読み出されたフラグが無効を示す場合、ターゲットアドレスを命令フェッチアドレス生成器11に供給しない。当該フラグは、アドレステーブル31のエントリが有効であるか無効であるかを示す例えば1ビットのデータであり、当該フラグが無効を示す場合には、アドレステーブル31に格納されるエントリを分岐予測に用いることは適切でない。
なお、例えば図1に示すRSBR18から供給される完了した分岐命令の情報に基づいて、実際の分岐命令の実行結果と分岐予測結果とが一致しなかった場合に、アドレステーブル31のエントリが更新されてよい。例えば分岐不成立と予測されたフェッチラインに対してRSBR18からの情報が分岐成立を示す場合等に、アドレステーブル31の対応するインデックスにおけるエントリ(ターゲットアドレス等)が新たに登録されてよい。また例えば分岐成立と予測されたフェッチラインに対してRSBR18からの情報が分岐不成立を示す場合等に、アドレステーブル31の対応するインデックスにおけるフラグがリセット(無効状態に設定)されてよい。
また上位タグ格納部32には、格納される第2のタグに関して有効度を示す飽和カウンタが設けられている。例えばRSBR18からの完了分岐命令の情報によれば実際に分岐成立した命令が第2のタグに対応する命令アドレスのものである場合には、飽和カウンタを+1してよい。この際、飽和カウンタ値が既に上限値である場合には、値が+1されることはなく上限値に維持される。また例えばRSBR18からの完了分岐命令の情報によれば実際に分岐成立した命令が第2のタグに対応しない命令アドレスのものである場合には、飽和カウンタを-1してよい。また例えばRSBR18からの完了分岐命令の情報によれば実際に分岐成立した命令が第2のタグに対応しない命令アドレスのものであり且つ飽和カウンタ値が下限値に等しい場合には、完了分岐命令の命令アドレスにより第2のタグを更新してよい。この更新作業と共に、有効度を示す飽和カウンタを上限値に設定し、アドレステーブル31の全フラグをリセットしてよい。
上記のように構成された分岐予測機構10においては、アドレステーブル31のウェイ数を1個とすることにより、複数のウェイがヒットした場合にウェイを選択する処理が不要になる。従って分岐予測演算において実行される処理の論理段数を削減することができ、高速な分岐予測演算が可能になる。
また分岐予測機構10においては、アドレステーブル31のインデックスが例えば4ビットであることにより、アドレステーブル31のエントリ数が16個となる。エントリ数が16個程度と少ない数とすることにより、アドレステーブル31からインデックスに応じたエントリを読み出す論理演算処理を、少ない論理段数で実現することが可能となる。このようにして、アドレステーブル31からの高速読み出しを実現することができる。
また分岐予測機構10においては、タグとして用いるべきビット列の上位側の一部は、上位タグ格納部32に第2のタグとして格納し、分岐予測機構10全体で1つだけ保持している。このような構成とせずに、アドレステーブル31に格納されるタグのビット数が多い構成にすると、アドレステーブル31から読み出されたタグに対して分岐方向判定部33が照合判定をするために必要な処理回路の論理段数が多くなってしまう。図2に示す分岐予測機構10が想定するような命令列は、アドレス空間が比較的狭い範囲の命令列であり、上位ビットの変動は少ない。従って、タグとして用いるべきビット列の上位側の一部は、上位タグ格納部32に第2のタグとして格納し、分岐予測機構10全体で1つだけ保持することにすれば十分である。このようにすれば、アドレステーブル31からインデックスに対応するエントリを読み出す動作と同時に、上位タグ格納部32に格納される第2のタグを照合する動作を並行して実行することが可能になり、タグの照合にかかる時間が短くなる。
分岐予測機構10を上述のような構成とすることにより、分岐予測演算にかかる時間を短くして、分岐予測演算を1レイテンシ内に完了させることができる。このことは具体的には以下の動作を意味する。まず命令フェッチアドレス生成器11は所定のクロック信号に同期してフェッチアドレスを順次生成している。分岐方向判定部33がクロック信号の第1のクロックサイクルで生成した第1のフェッチアドレスに応じて分岐成立を予測し、第1の分岐先アドレスを命令フェッチアドレス生成器11に供給したとする。この場合、命令フェッチアドレス生成器11は、クロック信号の第1のクロックサイクルに続く第2のクロックサイクルにおいて、上記第1の分岐先アドレスをフェッチアドレスとして生成する。即ち、命令フェッチアドレス生成器11は、第1のクロックサイクルで生成したフェッチアドレスに対する分岐予測結果に基づいて、直後に続く第2のクロックにおいてフェッチアドレスを生成することができる。
分岐予測演算を1レイテンシ内に完了させることにより、分岐予測演算結果が分岐を示す場合に、フェッチされた命令をキャンセルする必要がなくなり、効率的なフェッチ動作を実現することができる。即ち、分岐予測結果に影響しない高いスループットを維持することができる。
図3は、図2に示す分岐予測機構10及び命令フェッチアドレス生成器11の動作を示すフローチャートである。なお図3及び以降の図において、フローチャートに記載された各ステップの実行順序は一例にすぎず、本願の意図する技術範囲が、記載された実行順番に限定されるものではない。例えば、Aステップの次にBステップが実行されるように本願に説明されていたとしても、Aステップの次にBステップを実行することが可能なだけでなく、Bステップの次にAステップを実行することが、物理的且つ論理的に可能である場合がある。この場合、どちらの順番でステップを実行しても、当該フローチャートの処理に影響する全ての結果が同一であるならば、本願に開示の技術の目的のためには、Bステップの次にAステップが実行されてもよいことは自明である。Aステップの次にBステップが実行されるように本願に説明されていたとしても、上記のような自明な場合を本願の意図する技術範囲から除外することを意図するものではなく、そのような自明な場合は、当然に本願の意図する技術範囲内に属する。
ステップS1において、命令フェッチアドレス生成器11がフェッチアドレスを分岐予測機構10に通知する。具体的には、フェッチアドレスのbit[6:3]がアドレステーブル31に供給され、フェッチアドレスのbit[10:7]が分岐方向判定部33に供給され、フェッチアドレスのbit[15:11]が上位タグ格納部32に供給される。
ステップS2において分岐予測機構10が予測成立を示す場合(YES)、ステップS3において、命令フェッチアドレス生成器11は分岐予測機構10から供給されたターゲットアドレスで次の命令フェッチを実行する。ステップS2において分岐予測機構10が予測成立を示さない場合(NO)、命令フェッチアドレス生成器11は、ターゲットアドレスを受け取ることなく、ステップS3においてシーケンシャル方向の次の命令アドレスで命令フェッチを実行する。
図4は、フェッチラインの構成の一例を示す図である。図4を用いて、図2に示されるアドレステーブル31におけるエントリ登録を説明する
図4において、32バイト長である1つのフェッチラインに、各々が4バイト長である8個の命令i1乃至i8が含まれている。このフェッチラインをフェッチするためのフェッチアドレスは0x1000である。このときフェッチラインに含まれる命令i1乃至i8の格納アドレスはそれぞれ、0x1000、0x1004、0x1008、0x100C、0x1010、0x1014、0x1018、及び0x101Cである。
図4に示される例では、この8個の命令i1乃至i8のうちで、2個の命令i5及びi8が分岐命令である。図4において矢印J1で示されるように命令i5の分岐先は命令i8のアドレスであり、矢印J2で示されるように命令i8の分岐先は命令i1のアドレスである。
命令フェッチアドレス生成器11は、フェッチアドレス0x1000で図4に示されるフェッチラインをフェッチすると共に、フェッチアドレス0x1000を分岐予測機構10に供給して分岐予測演算を実行させる。分岐予測機構10では、フェッチアドレス0x1000に応答して、命令i1乃至i8のうちでシーケンシャル方向に並ぶ順番で最初の分岐命令である命令i5に対する分岐予測を行うことが期待される。フェッチアドレス0x1000のインデックス部分であるbit[6:3]は"0000"であるので、アドレステーブル31におけるインデックス"0000"の位置に命令i5に対するエントリが格納されることになる。例えば、図1に示すRSBR18から供給される完了した分岐命令i5の情報に基づいて、アドレステーブル31に命令i5に関するエントリが作成されてよい。
なお命令i5のアドレス0x1010のbit[6:3]は"0010"である。しかしながらフェッチアドレス0x1000に応答して命令i5に対する分岐予測を行うことが期待されるので、上述のように、インデックス"0000"の位置に命令i5に対するエントリが格納されることになる。
命令i8に対する分岐予測演算が実行されるのは、命令i5に対する分岐予測結果が分岐成立を示し命令フェッチアドレス生成器11が命令i8のアドレスに等しいターゲットアドレスで命令フェッチをしたときである。命令i8のアドレス0x101Cのインデックス部分であるbit[6:3]は"0011"であるので、アドレステーブル31におけるインデックス"0011"の位置に命令i5に対するエントリが格納されることになる。例えば、図1に示すRSBR18から供給される完了した分岐命令i8の情報に基づいて、アドレステーブル31に命令i8に関するエントリが作成されてよい。
図2に示されるアドレステーブル31においては、各インデックスに対して1つのタグしか設けられておらず、ウェイ数が1となっている。このようにウェイ数が1であるにも関わらず、アドレステーブル31には、1つのフェッチラインに含まれる2個又はそれ以上の個数の命令に対してエントリを登録することができる。これは、1つのフェッチライン内でビット値が変化する命令アドレスビットを少なくとも1ビット含むように選択されたビット列をインデックスとして用いているためである。
例えば、命令アドレスのbit[5:2]をインデックスとして用いてもよい。この場合、1つのフェッチラインに含まれる8個の命令の各々が格納される命令アドレスは、そのbit[5:2]のビットパターンが互いに異なる。従って、理論的には1つのフェッチラインに含まれる8個の命令全てについて、アドレステーブル31にエントリを登録することができる。
但し連続する2つの命令が両方共に分岐命令である頻度は低いので、連続する2つの命令を両方ともアドレステーブル31に登録することに対する必要性は低い。従って、上述の例のようにインデックスとしては、命令アドレスのbit[6:3]を用いれば十分である。即ち、1つのフェッチラインに含まれる複数の命令のうちで連続する2つの命令の命令アドレス間で変化するビットより1つ上のビットが、インデックスの最下位ビットであってよい。このようなインデックス構成とすることにより、より広い命令アドレス範囲をアドレステーブル31でカバーできることになり、効率的な分岐予測が可能になる。
図5は、第2実施例に用いられる分岐予測器の構成の一例を示す図である。第2実施例においては、図2に示す第1実施例の分岐予測機構10(以降第1予測器と呼ぶ場合がある)に加え、更に、図5に示される第2予測器110を用いる。
第2予測器110は、分岐予測機構10よりも複雑な分岐予測演算を実行し、分岐予測機構10よりも長いレイテンシでの分岐予測演算を行う。第2予測器110は例えば、レイテンシ3(動作クロックの3サイクルをかけて)の分岐予測を実行する。第2予測器110の構成は特に限定されないが、図5に示す例では、アドレステーブル41、バイモーダル予測部42、予測生成部43、フリップフロップ44、フリップフロップ45、及びフリップフロップ46を含む。
図5に示される命令フェッチアドレス生成器11は、図1に示される命令フェッチアドレス生成器11であり、前述のように、1つのフェッチラインに複数の命令が含まれるようにフェッチアドレスを順次生成する。第1の実施例と同様に、以下の説明においては、フェッチラインの長さが32バイトであり、4バイト長の命令が8個含まれる場合を例として用いるが、この例の構成は限定を意図するものではない。
アドレステーブル41は、フェッチアドレスを構成する複数個のビットのうち、アドレステーブル31のインデックスと比較して上位側にあり且つより長いビット列をインデックスとした複数のインデックスの各々に対して複数個のタグを有する。ここで「比較して上位側にあるビット列」とは、アドレステーブル41のインデックスであるビット列の最下位ビットがアドレステーブル31のインデックスの最下位ビットよりも上位側にあることを意味する。
命令フェッチアドレス生成器11から、例えばフェッチアドレスのうちのbit[13:5]が、フリップフロップ44を介してアドレステーブル41に供給される。アドレステーブル41には、このフェッチアドレスのbit[13:5]に対応する各々が9ビット幅である512個のインデックスにそれぞれ対応して512個のエントリが格納されており、1つのエントリには例えば8個のタグが対応付けられていてよい。即ち、アドレステーブル41は8ウェイで512エントリの構成であってよい。
各タグは、アドレステーブル41のインデックスのビット列よりもフェッチアドレス上位側のビット列である。この例では、インデックスであるbit[13:5]よりも上位側のビットとして、例えばbit[31:14]がタグであってよい。一つ一つのタグに対応して、1個の分岐先アドレスと、当該分岐先アドレスが有効か否かを示すフラグとが、アドレステーブル41に格納されている。
アドレステーブル41は、命令フェッチアドレス生成器11が生成するフェッチアドレスに応じた分岐先アドレス及びフラグを出力する。具体的には、フェッチアドレスのbit[13:5]がアドレステーブル41にインデックスとして供給されると、アドレステーブル41は、当該インデックスに対応した8個のタグと、8個のターゲットアドレスと、8個のフラグとを出力する。アドレステーブル41から出力された8個のタグと、8個のターゲットアドレスと、8個のフラグとは、フリップフロップ46に格納される。
バイモーダル予測部42は、フェッチアドレスのbit[13:5]に対応する各々が9ビット幅である512個のインデックスにそれぞれ対応して512個の飽和カウンタが設けられていてよい。バイモーダル予測部42は、命令フェッチアドレス生成器11が生成するフェッチアドレスに応じた飽和カウンタ値を出力する。具体的には、フェッチアドレスのbit[13:5]がバイモーダル予測部42にインデックスとして供給されると、バイモーダル予測部42は、当該インデックスに対応した1個の飽和カウンタ値を出力する。アドレステーブル41から出力された1個の飽和カウント値はフリップフロップ45に格納される。
飽和カウンタは例えば2ビットのカウンタである。飽和カウンタの値として「00」が強い分岐不成立、「01」が弱い分岐不成立、「10」が弱い分岐成立、「11」が強い分岐成立を意味する。飽和カウンタ値が「00」又は「01」のときには分岐不成立と判定し、飽和カウンタ値が「10」又は「11」のときには分岐成立と判定する。飽和カウンタ値は、対応する分岐命令の実際の演算結果が分岐成立であれば+1され、対応する分岐命令の実際の演算結果が分岐不成立であれば-1される。但し上限値「11」以上に値は増大せず、下限値「00」以下に値は減少しない。このバイモーダル予測部42では、過去に分岐成立が連続した場合には今回も分岐が成立する可能性が高く、過去に分岐不成立が連続した場合には今回も分岐が不成立である可能性が高いという事実を分岐予測の原理として用いている。
以下に、図5に示す第2予測器110の動作を、動作クロックのサイクル毎に説明する。まず動作クロックの第1サイクルにおいて命令フェッチアドレス生成器11からのフェッチアドレスがフリップフロップ44に格納される。第2サイクルにおいて、アドレステーブル41から読み出されたデータをフリップフロップ44に格納すると共に、バイモーダル予測部42から読み出された飽和カウンタ値をフリップフロップ45に格納する。第3サイクルにおいて、予測生成部43が、フリップフロップ45に格納された飽和カウンタ値とフリップフロップ46に格納されたデータとに基づいて分岐予測を行う。
具体的には、予測生成部43は、フリップフロップ46から供給された8個のタグのうちで対応フラグが有効を示すタグとフェッチアドレスの対応部分とを照合し、一致(即ちヒット)するか否かを判定する。予測生成部43は、対応する飽和カウンタ値が分岐成立を示す場合に、タグが一致したウェイに対応するターゲットアドレスを命令フェッチアドレス生成器11に供給する。即ち、第2予測器110は、分岐予測演算の結果として分岐成立を予測し、ターゲットアドレスを命令フェッチアドレス生成器11に供給する。飽和カウンタ値が分岐不成立を示す場合、又は、タグの一致するウェイが存在しない場合には、第2予測器110は分岐不成立を予測する。タグが一致したウェイが複数個存在する場合には、一致ウェイに対応する複数の命令アドレスのうちでフェッチアドレスからシーケンシャル方向に進んだときに最初に現れる命令アドレスに対応するウェイを選択する。
図6は、分岐予測機構の第2実施例の構成の一例を示す図である。分岐予測機構の第2実施例では、図6に示すように図2に示す第1予測器10と図5に示す第2予測器110とを用い、第2予測器110の分岐予測結果により第1予測器10による分岐予測結果を修正することで、より精度の高い分岐予測を行う。
動作クロックの第1サイクルで命令フェッチアドレス生成器11からフェッチアドレスが第1予測器10と第2予測器110とに供給されると、命令フェッチアドレス生成器11がレイテンシ1で予測結果を生成する。この第1予測器10が生成した予測結果は、セレクタ54を介して命令フェッチアドレス生成器11に供給される。これにより、命令フェッチアドレス生成器11は、第1予測器10による予測結果をレイテンシ1で受け取り、次のフェッチアドレス生成に用いることができる。なおセレクタ54は、予測結果比較部51から受け取る選択制御信号が例えば値0の場合に第2予測器110による予測結果を選択し、選択制御信号が例えば値1の場合に第1予測器10による予測結果を選択する。選択制御信号は、通常、第1予測器10による予測結果を選択する値(例えば1)に設定されている。
動作クロックの第2サイクルで、第1予測器10の予測結果を示すデータはフリップフロップ52に格納される。更に動作クロックの第3サイクルで、第1予測器10の予測結果を示すデータはフリップフロップ53に格納されると共に予測結果比較部51に供給される。またこの第3サイクルにおいて、第2予測器110がレイテンシ3で予測結果を生成し、この予測結果が予測結果比較部51に供給される。予測結果比較部51は、第1予測器10による予測結果と第2予測器110による予測結果とを比較し、両者が一致する場合にはセレクタ54に供給する選択制御信号の値を1に設定する。両者が一致しない場合には、予測結果比較部51は、セレクタ54に供給する選択制御信号の値を0に設定する。
従って、第1予測器10による予測結果と第2予測器110による予測結果とが一致する場合には、第1予測器10による予測結果は追認されたことになり、第1予測器10による予測結果に基づいて発行されたフェッチアドレスはそのまま維持される。一方、第1予測器10による予測結果と第2予測器110による予測結果とが一致しない場合には、第1予測器10による予測結果は否定されたことになる。このとき第1予測器10による予測結果に基づいて既に発行されたフェッチアドレスはキャンセルされ、第2予測器110による予測結果に基づいて改めてフェッチアドレスが発行される。
このように図6に示される第2実施例では、第1予測器10による第1の分岐予測に応じて命令フェッチアドレス生成器11がフェッチアドレスを生成した後に第2予測器110による第2の分岐予測が得られる。第2の分岐予測が第1の分岐予測と異なる場合に、命令フェッチアドレス生成器11は第2の分岐予測に基づいてフェッチアドレスを生成し直す。この構成により、第1予測器10により短いレイテンシ(例えばレイテンシ1)での効率的な命令フェッチを可能にすると共に、第2予測器110による長いレイテンシ(例えばレイテンシ3)での信頼性の高い分岐予測を実現することができる。即ち、第1予測器10が正しく分岐予測する場面では効率的な命令フェッチを実現することができると共に、第1予測器10が正しく分岐予測できない場面では効率は落ちるが第2予測器110による信頼性のある分岐予測を実現することができる。
例えば第1予測器10が第1サイクル乃至第3サイクルで分岐不成立を予測し、第2予測器110も第1サイクル乃至第3サイクルで分岐不成立を予測したとする。この場合、命令フェッチアドレス生成器11は、第2サイクル及び第3サイクルでシーケンシャル方向のフェッチアドレスを生成する。第3サイクルにおいて、第3サイクルのフェッチアドレスに関する予測結果が第1予測器10から命令フェッチアドレス生成器11に通知される。その結果、命令フェッチアドレス生成器11は、第4サイクルでもシーケンシャル方向のフェッチアドレスを生成する。
また例えば第1予測器10が第1サイクル乃至第3サイクルで分岐不成立を予測し、第2予測器110が第1サイクル、第2サイクル、及び第3サイクルでそれぞれ分岐不成立、分岐不成立、及び分岐成立を予測したとする。この場合、命令フェッチアドレス生成器11は、第2サイクル及び第3サイクルでシーケンシャル方向のフェッチアドレスを生成する。第3サイクルにおいて、第1サイクルのフェッチアドレスに関する予測結果が第2予測器110から命令フェッチアドレス生成器11に通知される。その結果、第1予測器10による予測結果が第2予測器110による予測結果で訂正されることになり、命令フェッチアドレス生成器11は、第4サイクルにおいてターゲットアドレスをフェッチアドレスとして生成する。
また例えば第1サイクル、第2サイクル、及び第3サイクルで第1予測器10がそれぞれ分岐成立、分岐不成立、及び分岐不成立を予測し、第2予測器110がそれぞれ分岐不成立、分岐不成立、及び分岐成立を予測したとする。即ち、第1サイクルでのフェッチアドレスに対する分岐予測が、第1予測器10及び第2予測器110の両方共に分岐成立であったとする。この場合の命令フェッチシーケンスが図7に一例として示される。
図7は、分岐予測機構の第2実施例における命令フェッチの一例を示す図である。図7において、各フェッチアドレスに対する分岐予測動作がパイプラインとして実行される様子が示されており、パイプラインの各ステージにおける動作は以下の通りである。
A:命令フェッチアドレスを決定し分岐予測機構に供給
T:アドレステーブルからデータを取り出し予測対象命令用の演算実行
M:分岐予測
B:分岐予測結果転送
R:後続する予測対象命令用の演算実行
なお上記各ステージは、レイテンシ3である分岐予測機構の動作に対応しており、第2実施例の例における第2予測器110が、上記のパイプラインに相当する分岐演算を実行してよい。
動作クロックの第1サイクルC1において、フェッチアドレスi1が発行され命令フェッチが実行されると共に、フェッチアドレスi1に対する分岐予測が開始される。フェッチアドレスi1に対する6個のステージA乃至Rの演算はそれぞれ対応する6個のサイクルで順次実行される。図7に示される例では、第1予測器10により第1サイクルC1において分岐成立の予測結果が得られる場合を想定しており、分岐先のターゲットアドレスはi251である。第2サイクルC2において、フェッチアドレスi251が発行され命令フェッチが実行されると共に、フェッチアドレスi251に対する分岐予測が開始される。
更に第3サイクルC3において、シーケンシャル方向でフェッチアドレスi251に後続するフェッチアドレスi252が発行され命令フェッチが実行されると共に、フェッチアドレスi252に対する分岐予測が開始される。この第3サイクルC3において、第1サイクルのフェッチアドレスi1に対する分岐予測結果がステージM(図7においてハッチングされたステージ)において得られる。
この例では、第2予測器110が第3サイクルにおいて分岐成立を予測する場合を想定しているので、第1サイクルにおいて第1予測器10が予測した分岐成立が追認されることになる。従って、既に発行された第2サイクルC2のフェッチアドレスi251及び第3サイクルC3のフェッチアドレスi252はそのまま維持される。更に、次の第4サイクルC4において、シーケンシャル方向でフェッチアドレスi252に後続するフェッチアドレスi253が発行され命令フェッチが実行される。
図8は、分岐予測機構の第2実施例における命令フェッチの別の一例を示す図である。図8には、第1サイクル、第2サイクル、及び第3サイクルで第1予測器10がそれぞれ分岐成立、分岐不成立、及び分岐不成立を予測し、第2予測器110がそれぞれ分岐不成立、分岐不成立、及び分岐不成立を予測した場合が示されている。即ち、第1サイクルでのフェッチアドレスに対する分岐予測について、第1予測器10による予測結果が分岐成立であり、第2予測器110による予測結果が分岐不成立であった場合である。
動作クロックの第1サイクルC1において、フェッチアドレスi1が発行され命令フェッチが実行されると共に、フェッチアドレスi1に対する分岐予測が開始される。図8に示される例では、第1予測器10により第1サイクルC1において分岐成立の予測結果が得られる場合を想定しており、分岐先のターゲットアドレスはi251である。第2サイクルC2において、フェッチアドレスi251が発行され命令フェッチが実行されると共に、フェッチアドレスi251に対する分岐予測が開始される。
更に第3サイクルC3において、シーケンシャル方向でフェッチアドレスi251に後続するフェッチアドレスi252が発行され命令フェッチが実行されると共に、フェッチアドレスi252に対する分岐予測が開始される。この第3サイクルC3において、第1サイクルのフェッチアドレスi1に対する分岐予測結果がステージMにおいて得られる。
この例では、第2予測器110が第3サイクルにおいて分岐不成立を予測する場合を想定しているので、第1サイクルにおいて第1予測器10が予測した分岐成立が否定されることになる。従って、既に発行された第2サイクルC2のフェッチアドレスi251及び第3サイクルC3のフェッチアドレスi252はキャンセルされ、先読みで実行されていた命令実行シーケンスは取り消される。次の第4サイクルC4においては、シーケンシャル方向で第1サイクルC1のフェッチアドレスi1に後続するフェッチアドレスi2が発行され命令フェッチが実行される。
図9は、第1予測器におけるエントリ更新処理の一例を示すフローチャートである。第1実施例において分岐予測機構として第1予測器10のみが用いられる場合には、前述のようにアドレステーブル31のエントリ登録及びリセット並びに上位タグ格納部32の更新は、RSBR18からの情報に基づいて行われてよい。第2実施例においては第1予測器10と第2予測器110とが用いられているので、第2予測器110による予測結果に基づいて第1予測器10の登録、更新、及びリセットを行ってよい。
第2予測器110による予測が分岐成立を示す状況が発生すると(ステップS11)、ステップS12の処理が実行される。ステップS12において、第1予測器10は、第2予測器110により分岐成立と予測された命令アドレスの上位部分と上位タグ(上位タグ格納部32に格納される第2のタグ)とが一致するか否かを判定する。両者が一致する場合、処理はステップS13に進む。
ステップS13において、第1予測器10は、分岐成立と予測された命令に関するエントリを、アドレステーブル31において対応フェッチアドレスが指し示すインデックス位置に作成する。具体的には、第1予測器10は、当該インデックス位置において対応フェッチアドレスのbit[10:7]を第1のタグとして格納し、予測されたターゲットアドレスを格納し、フラグを有効に設定する。第1予測器10は更に、上位タグ格納部32の有効度(飽和カウンタ値)を+1する。
ステップS12において上位タグが一致しないと判定された場合、処理はステップS14に進む。S14において、第1予測器10は、上位タグ格納部32が保持する有効度(飽和カウンタ値)は0であるか否かを判定する。なおこの例において飽和カウンタは2ビットであり、上限値が3(=11)であり、下限値が0(=00)である。有効度が0である場合、処理はステップS15に進む。
ステップS15において、第1予測器10は、対応フェッチアドレスの上位ビット(例えばbit[15:11])を上位タグ格納部32に第2のタグとして格納することにより、上位タグを更新する。第1予測器10は更に、アドレステーブル31の全フラグをリセットすると共に、分岐成立と予測された命令に関するエントリを、アドレステーブル31において対応フェッチアドレスが指し示すインデックス位置に作成する。具体的には、第1予測器10は、当該インデックス位置において対応フェッチアドレスのbit[10:7]を第1のタグとして格納し、予測されたターゲットアドレスを格納し、フラグを有効に設定する。第1予測器10は更に、上位タグ格納部32の有効度(飽和カウンタ値)を上限値3(=11)に変更する。
ステップS14において有効度が0でないと判定された場合、処理はステップS16に進む。ステップS16において、第1予測器10は、新たなエントリを作成することなく、上位タグ格納部32に格納される有効度(飽和カウンタ値)を-1する。
図10は、分岐予測機構を備えたプロセッサを用いたシステム構成の一例を示す図である。図10に示されるシステムは、メモリ61、CPU(Central Processing Unit)62、メモリ63、CPU64、及びインターコネクト制御部65を含む。CPU62及び64は、例えば図1に示すようなプロセッサ構成を有し、上記説明した第1実施例又は第2実施例による分岐予測機構を内蔵する。インターコネクト制御部65は、外部装置との入出力制御を行う。図10に示されるような複数のプロセッサとメモリとを含む例えはサーバ装置等のシステムにおいて、上記説明した分岐予測機構を用いることができる。
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
10 分岐予測機構
11 命令フェッチアドレス生成器
12 命令バッファ
13 命令デコーダ
14 レジスタリネーミング
15 RSA
16 RSE
17 RSF
18 RSBR
19 CSE
20 オペランドアドレス生成器
21 演算器
22 演算器
23 ネクストプログラムカウンタ
26 固定小数点更新バッファ
27 浮動小数点更新バッファ
28 固定小数点レジスタ
29 浮動小数点レジスタ
101 メインメモリ
102 2次命令キャッシュ
103 1次命令キャッシュ
104 1次データキャッシュ
31 アドレステーブル
32 上位タグ格納部
33 分岐方向判定部
41 アドレステーブル
42 バイモーダル予測部
43 予測生成部
51 予測結果比較部
54 セレクタ

Claims (6)

  1. 1つのフェッチラインに複数の命令が含まれるようにフェッチアドレスを順次生成する命令フェッチアドレス生成器と、
    前記1つのフェッチライン内でビット値が変化する命令アドレスビットを少なくとも1ビット含むように前記フェッチアドレスから抽出されたビット列をインデックスとした複数のインデックスの各々に対して、1個の分岐先アドレスと、前記ビット列よりも前記フェッチアドレスの上位側のビット列である1個の第1のタグと、を格納するアドレステーブルと、
    前記フェッチアドレスを構成する複数個のビットのうち前記第1のタグよりも上位側のビット列である1個の第2のタグを格納する上位タグ格納部と、
    前記フェッチアドレスに応じて前記アドレステーブルから読み出された前記第1のタグと前記上位タグ格納部に格納されている前記第2のタグとが、前記フェッチアドレスの対応部分に一致する場合に、前記フェッチアドレスに応じて前記アドレステーブルから読み出された前記分岐先アドレスを前記命令フェッチアドレス生成器に供給する分岐方向判定部と、
    を含む演算処理回路。
  2. 前記命令フェッチアドレス生成器は所定のクロック信号に同期して前記フェッチアドレスを順次生成し、前記分岐方向判定部が前記クロック信号の第1のクロックサイクルで生成した第1のフェッチアドレスに応じて第1の分岐先アドレスを前記命令フェッチアドレス生成器に供給した場合、前記命令フェッチアドレス生成器は前記第1のクロックサイクルに続く第2のクロックサイクルにおいて前記第1の分岐先アドレスをフェッチアドレスとして生成する請求項1記載の演算処理回路。
  3. 前記1つのフェッチラインに含まれる前記複数の命令のうちで連続する2つの命令の命令アドレス間で変化するビットより1つ上のビットが、前記インデックスの最下位ビットである請求項1又は2記載の演算処理回路。
  4. 前記インデックスは4ビットである請求項1乃至3いずれか一項記載の演算処理回路。
  5. 前記フェッチアドレスを構成する前記複数個のビットのうち前記インデックスと比較して上位側にあり且つより長いビット列をインデックスとした複数のインデックスの各々に対して複数個のタグを有するアドレステーブルに基づいて分岐予測を行う予測器を更に含み、前記分岐方向判定部による第1の分岐予測に応じて前記命令フェッチアドレス生成器がフェッチアドレスを生成した後に前記予測器による第2の分岐予測が得られ、前記第2の分岐予測が前記第1の分岐予測と異なる場合に、前記命令フェッチアドレス生成器は前記第2の分岐予測に基づいてフェッチアドレスを生成し直す請求項1乃至4いずれか一項記載の演算処理回路。
  6. 1つのフェッチラインに複数の命令が含まれるようにフェッチアドレスを順次生成し、
    前記1つのフェッチライン内でビット値が変化する命令アドレスビットを少なくとも1ビット含むように前記フェッチアドレスから抽出されたビット列をインデックスとした複数のインデックスの各々に対して、1個の分岐先アドレスと、前記ビット列よりも前記フェッチアドレスの上位側のビット列である1個の第1のタグと、を格納するアドレステーブルから、前記フェッチアドレスに応じて前記第1のタグと前記分岐先アドレスとを読み出し、
    前記フェッチアドレスを構成する複数個のビットのうち前記第1のタグよりも上位側のビット列である1個の第2のタグと、前記フェッチアドレスに応じて前記アドレステーブルから読み出された前記第1のタグとが、前記フェッチアドレスのそれぞれの対応部分に一致する場合に、前記フェッチアドレスに応じて前記アドレステーブルから読み出された前記分岐先アドレスを前記フェッチアドレスとして用いる
    各段階を実行する演算処理方法。
JP2020207435A 2020-12-15 2020-12-15 演算処理回路及び演算処理方法 Pending JP2022094507A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2020207435A JP2022094507A (ja) 2020-12-15 2020-12-15 演算処理回路及び演算処理方法
US17/449,957 US11507377B2 (en) 2020-12-15 2021-10-05 Arithmetic processing circuit and arithmetic processing method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2020207435A JP2022094507A (ja) 2020-12-15 2020-12-15 演算処理回路及び演算処理方法

Publications (1)

Publication Number Publication Date
JP2022094507A true JP2022094507A (ja) 2022-06-27

Family

ID=81942479

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020207435A Pending JP2022094507A (ja) 2020-12-15 2020-12-15 演算処理回路及び演算処理方法

Country Status (2)

Country Link
US (1) US11507377B2 (ja)
JP (1) JP2022094507A (ja)

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05143334A (ja) 1991-07-03 1993-06-11 Oki Electric Ind Co Ltd 分岐予測テーブル方式
US6256709B1 (en) * 1997-06-26 2001-07-03 Sun Microsystems, Inc. Method for storing data in two-way set associative odd and even banks of a cache memory
US7831817B2 (en) * 2003-04-15 2010-11-09 Arm Limited Two-level branch prediction apparatus
US7328332B2 (en) * 2004-08-30 2008-02-05 Texas Instruments Incorporated Branch prediction and other processor improvements using FIFO for bypassing certain processor pipeline stages
US7426631B2 (en) * 2005-02-02 2008-09-16 International Business Machines Corporation Methods and systems for storing branch information in an address table of a processor
US9086886B2 (en) * 2010-06-23 2015-07-21 International Business Machines Corporation Method and apparatus to limit millicode routine end branch prediction
WO2012103367A2 (en) * 2011-01-27 2012-08-02 Soft Machines, Inc. Guest to native block address mappings and management of native code storage
US9563430B2 (en) * 2014-03-19 2017-02-07 International Business Machines Corporation Dynamic thread sharing in branch prediction structures
US9582285B2 (en) 2014-03-24 2017-02-28 Qualcomm Incorporated Speculative history forwarding in overriding branch predictors, and related circuits, methods, and computer-readable media
CN106406823B (zh) * 2016-10-10 2019-07-05 上海兆芯集成电路有限公司 分支预测器和用于操作分支预测器的方法

Also Published As

Publication number Publication date
US20220188118A1 (en) 2022-06-16
US11507377B2 (en) 2022-11-22

Similar Documents

Publication Publication Date Title
US8930679B2 (en) Out-of-order execution microprocessor with reduced store collision load replay by making an issuing of a load instruction dependent upon a dependee instruction of a store instruction
JP3547482B2 (ja) 情報処理装置
US5655096A (en) Method and apparatus for dynamic scheduling of instructions to ensure sequentially coherent data in a processor employing out-of-order execution
US9430235B2 (en) Predicting and avoiding operand-store-compare hazards in out-of-order microprocessors
US5682492A (en) Computer processor with distributed pipeline control that allows functional units to complete operations out of order while maintaining precise interrupts
JP3678443B2 (ja) スーパーパイプライン式スーパースカラーマイクロプロセッサ用の書き込みバッファ
US20030182536A1 (en) Instruction issuing device and instruction issuing method
EP1329804B1 (en) Mechanism for processing speculative LL and SC instructions in a pipelined processor
US8707014B2 (en) Arithmetic processing unit and control method for cache hit check instruction execution
US8468325B2 (en) Predicting and avoiding operand-store-compare hazards in out-of-order microprocessors
KR100431975B1 (ko) 분기에의한중단이없는파이프라인방식의마이크로프로세서를위한다중명령디스패치시스템
US7765387B2 (en) Program counter control method and processor thereof for controlling simultaneous execution of a plurality of instructions including branch instructions using a branch prediction mechanism and a delay instruction for branching
US11080063B2 (en) Processing device and method of controlling processing device
US6754813B1 (en) Apparatus and method of processing information for suppression of branch prediction
US7603545B2 (en) Instruction control method and processor to process instructions by out-of-order processing using delay instructions for branching
WO1990010267A1 (en) Distributed pipeline control for a computer
JP2022094507A (ja) 演算処理回路及び演算処理方法
JP7409208B2 (ja) 演算処理装置
JP7077862B2 (ja) 演算処理装置及び演算処理装置の制御方法
US11210101B2 (en) Arithmetic processing device and control method implemented by arithmetic processing device
US11314505B2 (en) Arithmetic processing device
CN117270971B (zh) 加载队列控制方法、装置及处理器
US20240118900A1 (en) Arithmetic processing device and arithmetic processing method

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230804