JPWO2012132214A1 - プロセッサ及びその命令処理方法 - Google Patents

プロセッサ及びその命令処理方法 Download PDF

Info

Publication number
JPWO2012132214A1
JPWO2012132214A1 JP2013507100A JP2013507100A JPWO2012132214A1 JP WO2012132214 A1 JPWO2012132214 A1 JP WO2012132214A1 JP 2013507100 A JP2013507100 A JP 2013507100A JP 2013507100 A JP2013507100 A JP 2013507100A JP WO2012132214 A1 JPWO2012132214 A1 JP WO2012132214A1
Authority
JP
Japan
Prior art keywords
branch
instruction
fetch
information
unit
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.)
Granted
Application number
JP2013507100A
Other languages
English (en)
Other versions
JP5696210B2 (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.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics Corp
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 Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2013507100A priority Critical patent/JP5696210B2/ja
Publication of JPWO2012132214A1 publication Critical patent/JPWO2012132214A1/ja
Application granted granted Critical
Publication of JP5696210B2 publication Critical patent/JP5696210B2/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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3816Instruction alignment, e.g. cache line crossing

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)
  • Executing Machine-Instructions (AREA)

Abstract

命令実行速度を高速化することができるプロセッサ及びプロセッサの命令処理方法を提供する。プロセッサ1は、分岐命令の分岐先情報と、分岐命令がフェッチラインの境界上にあることを示す境界情報とが格納されたBTAC12と、BTAC12を参照し、分岐命令を含む可変長命令セットの分岐予測を行う分岐予測ユニット13と、分岐予測結果に基づき命令をフェッチするフェッチユニット14とを有する。分岐予測ユニット13は、BTAC12を参照し、分岐予測ユニット13にフェッチさせる命令に境界情報がある場合は、続く次のフェッチラインもフェッチさせた後で分岐先情報にしたがって分岐予測先をフェッチさせる。

Description

本発明は、一度に複数の命令を同時にフェッチ可能であり、可変長命令セットを有するプロセッサ及びその命令処理方法に関し、特に、可変長命令セットを有し、分岐予測を行うことが可能なプロセッサ及びその命令処理方法に関する。
マイクロプロセッサにおけるパイプライン処理による高速化手法では、命令を途切れなく(ハザードを発生させることなく)実行させることが重要となる。例えば条件分岐命令の場合、条件を満たして分岐が成立するか、不成立するかは実際にその命令を実行するまでわからないため、パイプラインの流れを止める必要がある。これは制御ハザードと呼ばれている。
分岐予測は、制御ハザードの影響を小さくするプロセッサの機能である。分岐予測で予測したほうの実行を投機的に開始し、予測した結果が正解であれば、そのまま実行を続け、不正解であれば条件分岐命令以降に実行した命令の結果をすべて破棄する。
一般的な分岐予測の技術では、一度実行し、結果が成立だった分岐命令を、ある記憶領域(分岐ターゲットアドレスキャッシュ(BTAC))に覚えておく。図12は、BTACの構成を示す図である。
図12に示すように、BTACに登録する情報は、実行した条件分岐命令のPC(Program Counter)(分岐元PC)(e1)、分岐先のPC(e2)、及び予測情報(e3)である。実行した条件分岐命令のPC(e1)は、分岐命令を実行する際に、以前にその分岐命令が実行されたかどうかを知るために登録する。分岐先のPCは分岐命令の分岐先の命令をあらかじめフェッチするために必要な情報である。予測情報は登録されている分岐命令が過去に成立したか、不成立だったかを元に、次回当該分岐命令が実行されるときにそれが成立か不成立かの予測を示す情報である。
図13は、BTACへの格納の動作を示すフローチャートである。図13に示すように、先ず、分岐命令の実行を行う(ステップS11)。次に、実行した分岐命令が成立したか、不成立だったかを確認する(ステップS12)。分岐命令が成立だった場合、BTACへの登録を開始する(ステップS13)。そして、予測情報(e3)に、成立を示す例えば"1"を登録する(ステップS14)。
従来の技術としては、例えば、特許文献1には、可変長命令セットにおいて、成立した分岐命令の最後の粒度(末尾)を示すインジケーションを分岐ターゲットアドレスキャッシュ(BTAC)に保存することが示されている。この技術により、BTAC空間を節約し、フラッシュをどこから開始するかを計算する必要性を取り除くことによって性能を改善することが可能である。
図14は、この特許文献1に記載のプロセッサを示す機能ブロック図である。図14に示すように、プロセッサ110は、命令ユニット112と、1つ又は複数の実行ユニット114とを含む。命令ユニット112は、命令側変換索引バッファ(ITLB)118によって管理されるメモリアドレス変換及び許可を用いて、命令キャッシュ(命令キャッシュ)116から命令をフェッチする。
実行ユニット114は、命令ユニット112によってディスパッチされた命令を実行する。実行ユニット114は、汎用レジスタ(GPR)120からの読出し及びGPR120への書込みを行い、主要変換索引バッファ(TLB)124によって管理されるメモリアドレス変換及び許可を用いて、データキャッシュ122からのデータにアクセスする。データキャッシュ122は、L2キャッシュ126と接続され、L2キャッシュ126は、バスインタフェースユニットを介して外部のメモリ128と接続さえる。
命令ユニット112は、パイプラインのフェッチステージ132及び復号ステージ136を含む。復号ステージ136は、検索した命令を復号する。命令ユニット112は更に、復号ステージ136によって復号された命令を格納するための命令キュー138と、キューにされた命令を適切な実行ユニット114へディスパッチするための命令割当ユニット140とを含む。
分岐予測ユニット(BPU)142は、条件付分岐命令の分岐予測をする。フェッチステージ132内の命令アドレスは、命令キャッシュ116からの命令のフェッチと並行して、分岐ターゲットアドレスキャッシュ(BTAC)144及び分岐履歴テーブル(BHT)146に提供される。BTAC144内でそのアドレスがヒットすれば、そのアドレスの分岐命令は以前成立したことを示し、BTAC144は、分岐命令の分岐先アドレスを提供する。BHT146は、分岐命令の分岐予測が成立したか否かの記録を保持する。BPU142は、BTAC144からのヒット/ミス情報と、BHT146からの分岐履歴情報とに基づき分岐予測を実施する。
図15は、命令ユニット112の分岐予測ユニット(BPU)142及びフェッチステージ132をより詳細に示す機能ブロック図である。フェッチステージ132は、様々なソースから命令アドレスを選択するキャッシュアクセスステアリングロジック148を含む。また、命令フェッチパイプラインは、フェッチ1ステージ150と、フェッチ2ステージ152と、フェッチ3ステージ154との3つのステージを有する。
フェッチ1ステージ150及びフェッチ2ステージ152は、命令キャッシュ116、BTAC144、及びBHT146へ同時にアクセスする。フェッチ1ステージ150内の命令アドレスは、アドレスに関連する命令が命令キャッシュ116内に存在するかを確かめる。また、分岐命令が命令アドレスに関連付けられているかをBTAC144内のヒット又はミスによって確かめるために、第1のキャッシュアクセスサイクル中、命令キャッシュ116及びBTAC144にアクセスする。続く第2のキャッシュアクセスサイクルで、命令アドレスはフェッチ2ステージ152へ移動し、もし命令アドレスがキャッシュ116内でヒットすれば、命令キャッシュ116からの命令が利用可能であり、もし命令アドレスがBTAC144内でヒットすれば、BTAC144からの分岐ターゲットアドレス(BTA)が利用可能となる。もし命令アドレスが命令キャッシ116内でミスすれば、命令アドレスは、L2キャッシュ126にアクセスするために、フェッチ3ステージ154へ進む。フェッチ3ステージ154でフェッチされた命令は復号ステージ136に渡される。
特表2010−501913号公報
ところで、固定長命令セットを処理するプロセッサの場合、フェッチラインの境界上に命令が存在することはないが、可変長命令セットではフェッチラインの境界上に分岐命令が存在する可能性がある。図16は、分岐命令がフェッチラインの境界上に存在する例を示す図である。フェッチラインの境界上に分岐命令が存在するとは、図16で示すように、最初のフェッチラインn(以降、前側フェッチラインという。)の最後尾に、ある分岐命令の下位側の一部が存在し、次のフェッチラインn+1(以降、後ろ側フェッチラインという。)の先頭位置に、ある分岐命令の残りの部分が存在することをいう。
この場合、前側のフェッチラインに合わせて分岐予測を行うと、即座に次フェッチで分岐先をフェッチしてしまうため、後ろ側に存在する分岐命令の一部を読み出すことができない。すなわち、前側をフェッチした段階では、命令のデコード前であるために、対象の分岐命令がフェッチラインの境界上に存在するかどうかが判明しない。したがって、次のフェッチを後ろ側のフェッチラインにするか分岐先フェッチラインにするかの判断ができない(図17参照)。これを回避するため、分岐命令がフェッチラインをまたぐ可能性のある場合には、常に、後続側のフェッチラインをフェッチする必要がある。したがって、従来技術においては、後ろ側のフェッチラインのフェッチを行うまで、分岐予測ができない。このため、分岐先をフェッチするのに1サイクルのペナルティが生まれるという問題点がある(図18参照)。
本発明に係るプロセッサは、分岐命令を含む可変長命令セットを実行するプロセッサであって、分岐命令の分岐先情報と、前記分岐命令がフェッチラインの境界上にあることを示す境界情報とが格納された分岐情報テーブルと、前記分岐情報テーブルを参照し、分岐命令を含む可変長命令セットの分岐予測を行う分岐予測ユニットと、前記分岐予測結果に基づき命令をフェッチするフェッチユニットとを有し、前記分岐予測ユニットは、前記分岐情報テーブルを参照し、前記フェッチユニットにフェッチさせる命令に前記境界情報がある場合は、続く次のフェッチラインもフェッチさせた後で前記分岐先情報にしたがって分岐予測先をフェッチさせるものである。
本発明に係るプロセッサの命令処理方法は、分岐命令を含む可変長命令セットを実行するプロセッサの命令処理方法であって、分岐命令の分岐先情報と、前記分岐命令がフェッチラインの境界上にあることを示す境界情報とが格納された分岐情報テーブルを参照し、分岐命令を含む可変長命令セットの分岐予測を行う分岐予測工程と、前記分岐予測結果に基づき命令をフェッチするフェッチ工程とを有し、前記分岐予測工程では、前記分岐情報テーブルを参照し、前記フェッチ工程にてフェッチさせる命令に前記境界情報がある場合は、続く次のフェッチラインもフェッチさせた後で前記分岐先情報にしたがって分岐予測先をフェッチさせるものである。
本発明においては、分岐命令がフェッチラインの境界上にあることを示す境界情報を有するため、分岐予測ユニットは、フェッチユニットにフェッチさせる命令に境界情報がある場合は、続く次のフェッチラインもフェッチさせた後で分岐先情報にしたがって分岐予測先をフェッチさせることができるため、前側のフェッチラインに分岐予測が紐づけされていても後ろ側フェッチラインを読み出すことができるため、分岐命令を正しくデコードすることができると共に、分岐予測を早いタイミングで実施することができる。
本発明によれば、命令実行速度を高速化することができるプロセッサ及びプロセッサの命令処理方法を提供することができる。
本発明の実施の形態1にかかるプロセッサを示す図である。 フェッチライン境界上に分岐命令が存在する場合を示す図である。 フェッチライン境界上に分岐命令が存在する場合を示す図である。 フェッチライン境界上に分岐命令が存在する場合を示す図である。 本発明の実施の形態1におけるBTAC12(分岐ターゲットアドレスキャッシュ)を示す図である。 本発明の実施の形態1におけるBTAC12への情報登録方法を示すフローチャートである。 本発明の実施の形態1にかかるプロセッサのサイクル1乃至n+1における命令フェッチから命令が実行されBTAC12に登録されるまでの動作を示す図である。 本発明の実施の形態1におけるBTAC12の登録例を示す図である。 予測情報の状態遷移の一例を示す図である。 BTAC12の登録があり、かつ分岐予測がヒットした場合の動作を示す図である。 BTAC12の登録があり、かつ分岐予測がミスした場合の動作を示す図である。 BTAC12に登録あり、かつQC情報を有する場合であって、分岐命令がフェッチライン上にある場合の動作を示す図である。 フェッチライン境界上に分岐命令が存在する場合であって、BTAC12の高速検索が可能な場合の動作を示す図である。 従来のBTACの構成を示す図である。 従来のBTACへの格納の動作を示すフローチャートである。 特許文献1に記載のプロセッサを示す機能ブロック図である。 特許文献1に記載の命令ユニットの分岐予測ユニット及びフェッチステージをより詳細に示す機能ブロック図である 分岐命令がフェッチラインの境界上に存在する例を示す図である。 従来技術の問題点を説明する図であって、分岐命令がフェッチラインの境界上に存在する場合であって、前側フェッチラインに分岐予測の紐付けがなされている場合を示す図である。 従来技術の問題点を説明する図であって、分岐命令がフェッチラインの境界上に存在する場合であって、後ろ側フェッチラインに分岐予測の紐付けがなされている場合を示す図である。
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。この実施の形態は、本発明を、条件付き分岐命令を含む可変長命令セットを処理するプロセッサに適用したものである。
本実施の形態においては、分岐命令がフェッチラインをまたぐことを示す情報(以下、QC情報又は境界情報ともいう。)をBTACに保存する(図3)。そして、このQC情報をもとに、前側フェッチラインをフェッチした後に、BTACの検索を開始し、分岐先取得の準備を行う。こののとき、QC情報があるため、後側フェッチラインをフェッチした後で分岐先アドレスをフェッチすることができる。したがって、BTACの検索を速めても、分岐命令を正しくデコードすることができ、1サイクルのペナルティを解消することができる。
図1は、本実施の形態にかかるプロセッサ1を示す図である。図1に示すように、実行ユニット11、BTAC12、分岐予測ユニット13、フェッチユニット14、命令メモリ15、命令キュー16及びデコード&ディスパッチユニット17を有する。BTAC12は、分岐命令の分岐先情報と、分岐命令がフェッチラインの境界上にあることを示す境界情報とが格納された分岐情報テーブルを有する。分岐予測ユニット13は、BTAC12を参照し、分岐命令を含む可変長命令セットの分岐予測を行う。フェッチユニット14は、分岐予測ユニット13の分岐予測結果に基づき命令をフェッチする。つまり、命令メモリ15に、読み出す命令のPCを渡す。
命令メモリ15は、フェッチユニット14によりフェッチされたPCの値をアドレスに換算し、当該アドレスの命令を読み出し命令キュー16に出力する。命令キュー16は、命令を一旦格納する。デコード&ディスパッチユニット17は、命令キュー16から出力された命令群をデコードし、例えばどの命令とどの命令とが並列処理できるか等を解釈して実行ユニット11に渡す。実行ユニット11は、命令を実行し、分岐予測実行結果をフェッチユニット14に通知する。さらに、実行ユニット11は、実行PCE1、実行先PCE2、実行結果E3及びフェッチライン境界情報E4をBTAC12に出力する。BTAC12は、実行ユニット11から出力されるこれらの情報に基づき、分岐情報テーブルを更新する。
ここで、本実施の形態にかかる分岐予測ユニット13は、BTAC12を参照し、フェッチユニット14にフェッチさせる命令に境界情報がある場合は、続く次のフェッチラインもフェッチさせた後で分岐先情報にしたがって分岐予測先をフェッチさせるものである。
先ず、分岐命令がフェッチライン境界上にある場合について説明する。図2は、フェッチライン境界上に分岐命令が存在する場合を示す図である。図2A、図2B及び図2Cにおいては、命令の最小単位を16ビットとしこれが4つで1つのフェッチラインを構成する場合について説明する。1つのフェッチラインが1回のフェッチでフェッチされる命令となる。すなわち、命令は、フェッチライン単位でフェッチされる。
図2Aは、フェッチラインF0とフェッチラインF1とにまたがって32ビットの分岐命令がある場合を示している。図2Bは、フェッチラインF0とフェッチラインF1とにまたがって48ビットの分岐命令がある場合を示している。図2Cも、フェッチラインF0とフェッチラインF1とにまたがって48ビットの分岐命令がある場合を示している。すなわち、いずれもフェッチラインF0、F1の境界上に分岐命令が存在する場合を示している。このような分岐命令がある場合、フェッチラインF0をフェッチするのみでは、分岐命令は正しくデコードできない。この場合は、必ずフェッチラインF1もフェッチしなければならない。
図3は、BTAC12(分岐情報テーブル)を示す図である。本実施の形態におけるBTAC12には、分岐元PC(e1)、分岐先PC(e2)、及び予測情報e3のみならず、QC情報e4が登録されている。分岐元PC(e1)は、実行ユニット11から送られる実行PCE1から得られる情報である。分岐命令が開始するアドレスを示す。分岐先PCe2は、実行先PCE2から得られる情報であり、実行結果E2が分岐命令が成功したことを示した場合、実行先PCE2は、分岐先PCe2として登録される。予測情報e3は、実行結果E3が成立したか否かを登録するもので、成立の可否のみ示す1ビットのデータとしてもよいし、後述するように、何回連続して成立するかを示すために多ビットの情報としてもよい。QC情報e4は、フェッチライン境界情報E4に基づき登録される。命令は、デコードしなければ、それが分岐命令であるか否かが判別できないため、実行ユニット11の結果E4から命令が分岐命令であって、かつフェッチライン境界に存在しているか否かを判別することができる。
次に、本実施の形態にかかるプロセッサ1のBTAC12への登録方法について説明する。図4は、BTAC12への情報登録方法を示すブローチャートである。また、図5は、プロセッサ1のサイクル1乃至n+1における命令フェッチから命令が実行されBTAC12に登録されるまでの動作を示す図である。図5では、フェッチライン0800、それに続くフェッチライン0808の2つのフェッチラインを処理する場合であって、分岐命令がフェッチライン0800に含まれる場合の動作を示す。
分岐命令を含んだフェッチライン0800のアドレスがフェッチユニット14より命令メモリ15に出力される。命令メモリ15から読み出された命令群は、一度命令キュー16に保存される。デコード&ディスパッチユニット17は、命令キュー16から命令を読み出しデコードを行う。デコード結果から更にディスパッチを行い、その結果を実行ユニット11へ渡す。
ここで、デコード&ディスパッチユニット17は、デコードした結果、命令がフェッチラインの境界上に存在していることが判明すれば、実行ユニットへその情報も併せて転送する。実行ユニット11では、デコード&ディスパッチユニット17から送られてきた情報を元に命令の実行を行う。実行ユニット11が分岐命令を実行し(ステップS1)、分岐が成立した場合(ステップS2:Yes)、その実行結果がBTAC12に送られ、そこに保存される(ステップS3〜S6)。
このとき分岐命令の実行PCと実行結果E3に基づき予測情報e3が登録され(ステップS4)、実行結果E3に基づき分岐先PCe3が登録される。これらと共に、デコード時に検出されデコード&ディスパッチユニット17から実行ユニット11に渡されたフェッチライン境界情報E4もBTAC12に送られ、このフェッチライン境界情報E4に基づき、QC情報e4もBTAC12へ登録される。つまり、分岐命令がフェッチライン境界をまたぐ場合(ステップS5:Yes)は、QC情報に1が格納される。
図5では、フェッチユニット14がサイクル1でアドレス0800をフェッチするとこのフェッチアドレス0800が分岐予測ユニット13、命令メモリ15及び実行ユニット11に通知される。これに基づき分岐予測ユニット13は、BTAC12においてフェッチアドレス0800の検索を実施する。ここでは、BTAC12にフェッチアドレス0800は登録されていないものとする。
したがって、分岐予測ユニット13は、分岐予測できず、フェッチユニット14に何も渡さない。フェッチユニット14は、したがってアドレス通り順次フェッチラインをフェッチする。サイクルnで実行ユニット11がフェッチライン0800の命令を実行している。実行の結果、分岐が発生するため、後続の命令は破棄される。この実行結果に基づき、図6に示すように、BTAC12にデータが登録される。ここでは、エントリ番号2に、分岐元PCとして0804が、分岐先PCとしてBが、予測情報として"10"が、QC情報として"0"が登録される。なお、分岐元PCは、分岐命令がどのフェッチラインにあるかではなく、フェッチラインのどの位置にあるか、までを示すPCの値が保存される。
次に、予測情報を図6のように2ビットで保存する場合の予測情報状態遷移について説明する。図7は、予測情報の状態遷移の一例を示す図である。図7に示すように、本実施の形態における予測状態には、4つの状態、Strongly Taken(11)、Weakly Taken(10)、Strongly Not-Taken(00)、Weakly Not-Taken(01)を有する。
Strongly Taken(11)のとき
実行した分岐命令が成立(Taken)すると、すなわち予測ヒットすると、Strongly Taken(11)状態をそのまま維持する。実行した分岐命令が不成立(Not Taken)であれば、すなわち予測ミスであれば、Weakly Taken(10)に遷移する。
Weakly Taken(10)のとき
実行した分岐命令が成立(Taken)すると(予測ヒット)、Strongly Taken(11)に遷移する。実行した分岐命令が不成立(Not Taken)である(予測ミス)、Strongly Not-Taken(00)に遷移する。
Weakly Not-Taken(01)のとき
実行した分岐命令が成立(Taken)すると(予測ヒット)、Strongly Taken(11)に遷移する。
実行した分岐命令が不成立(Not Taken)であると(予測ミス)、Strongly Not-Taken(00)に遷移する。
Strongly Not-Taken(00)のとき
実行した分岐命令が成立(Taken)すると(予測ヒット)、Weakly Not-Taken(01)に遷移する。実行した分岐命令が不成立(Not Taken)であれば(予測ミス)、Strongly Not-Taken(00)状態をそのまま維持する。
次に、本実施の形態にかかるプロセッサ1の動作について説明する。図8は、BTAC12の登録があり、かつ分岐予測がヒットした場合の動作を示す図である。ただし、分岐命令は、フェッチライン0800に存在し、フェッチライン境界上には存在しない場合を示す。
フェッチユニット14が命令をフェッチすると、このフェッチアドレスが分岐予測ユニット13にも入力される。分岐予測ユニット13は、フェッチユニット14がフェッチしたアドレスがBTAC12に登録されているかの検索要求をBTAC12に出力する。BTAC12からは、検索したアドレス0800に対応する分岐先情報と実行履歴、フェッチライン境界情報に命令が存在しているか否かを示すQC情報が検索結果として分岐予測ユニット13に返される。このとき、BTAC12に検索したアドレス0800が登録されており、且つそのアドレスの分岐命令が前回も成立していた場合、すなわち、予測情報がStrongly Taken(11)又はWeakly Taken(10)の場合、分岐予測ユニット13はフェッチユニット14に対して、予測分岐先アドレスである予測先PCを、予測結果として出力する。
ここでは、サイクル1でフェッチアドレス0800の検索要求があり、検索結果が返され、サイクル2で分岐予測ユニット13が分岐予測結果としてアドレスBを出力している例を示す。これに従い、フェッチユニット14は、サイクル3でアドレスBをフェッチする。その後、サイクルnになって、実行ユニット11がフェッチライン0800の分岐命令を実施する。本例では、分岐予測がヒットし、分岐先アドレスB以降の後続命令がサイクルn+1以降も続けて実行される例を示している。
分岐予測がなければ、分岐先のフェッチアドレスは分岐命令の実行結果を待つ必要があるが、分岐予測ユニット13が先読みすることで、分岐命令の実行結果を待たずに分岐先のフェッチアドレスをフェッチすることが可能となる。なお、図7に示す例において、予測結果が2回続けて不成立となり、予測情報がStrongly Not-taken(00)となった時点でエントリから削除するようにしてもよい。また、Weakly Taken(10)の場合に分岐予測を行わないこととしたり、Weakly Not-taken(01)の場合に分岐予測を行うようにしてもよい。
図9は、BTAC12の登録があり、かつ分岐予測がミスした場合の動作を示す図である。さらに、図8と同様に、分岐命令は、フェッチライン0800に存在し、フェッチライン境界上には存在しない場合を示す。
図9に示すように、サイクル1でBTAC12に検索要求がだされるとBTAC12から分岐先PC(e2)が送られBTAC12は、それを予測結果としてフェッチアドレスBをサイクル2で出力している。これにより、フェッチユニット14はサイクル3でアドレスBをフェッチしている。しかし、図9では、サイクルnで実行ユニット11がフェッチライン0800の分岐命令を実施すると、分岐予測通りに分岐命令が実施されなかった場合を示している。この場合、実行ユニット11は、サイクルn+1以降において分岐予測がミスした以降にフェッチユニット14がフェッチした命令を破棄する。以上の動作、すなわち、分岐命令がフェッチアドレス境界上にない場合は、従来の動作と同様である。
次に、図10は、BTAC12に登録あり、かつQC情報を有する場合であって、分岐命令がフェッチライン上にある場合の動作を示す図である。図10に示すように、サイクル1でアドレス0800の検索要求を分岐予測ユニット13がBTAC12に対して行うと、検索結果として登録あり、すなわち分岐先アドレスBが通知される。分岐予測ユニット13は、分岐予測結果としてサイクル2でアドレスBをフェッチユニット14に出力する。これにより、フェッチユニット14は、サイクル3でアドレスBをフェッチする。サイクルnで実行ユニット11が分岐命令を実施し、分岐予測がヒットすると、サイクルn+1以降もフェッチユニット14がフェッチした命令を実行することができる。
上述したように、ここで、もしBTAC12に登録がない場合には、デコード&ディスパッチユニット17でのデコード時に、フェッチライン境界上に分岐命令が存在することが判明し、更に実行ユニット11で分岐命令が成立したとき、BTAC12に、フェッチライン境界情報E4や実行結果E3等が送られ、BTAC12にそれらの情報が新たに登録され、又は予測情報が更新される。
次に、本実施の形態の効果について説明する。図17は、分岐命令がフェッチライン0800及び0808にわたって存在する場合であって、フェッチライン0800に分岐予測の紐付けがなされている場合を示す図である。サイクル1でフェッチアドレス0800をフェッチすると、分岐予測ユニット13がBTAC12の検索要求を出力する。BTAC12からは登録ありの検索結果が出力され、分岐予測ユニット13からフェッチユニット14に対して、サイクル1で分岐予測結果としてフェッチラインBを出力するものとする。
この場合、フェッチユニット14は、サイクル2でフェッチラインBをフェッチすることになる。すると、デコード&ディスパッチユニット17は、フェッチライン0800、フェッチラインBを順次デコードすることになるが、分岐命令は、フェッチライン0800及び0808にわたっているため、フェッチライン0808に存在する分岐命令の残りの部分を読み出していないこととなり、分岐命令を正しくデコードできない。
このような事態を避けるために、従来は、分岐命令に対する紐付けは、分岐命令の後ろ側のフェッチライン0808に対してなされている。図18は、フェッチライン0800、0808に分岐命令がわたって存在する場合であって、フェッチライン0808に存在する分岐命令に対して分岐予測の紐付けがなされている場合を示す図である。
この場合、フェッチライン0808をフェッチすると分岐予測ユニット13は、分岐予測ユニット13に対して検索要求を行う。検索結果が登録ありと返され、サイクル3において、分岐予測ユニット13が分岐予測結果としてフェッチユニット14にフェッチアドレスBを出力する。フェッチユニット14は、これを受けてサイクル4でフェッチアドレスBをフェッチする。すなわち、従来においては、QC情報を有さないため、フェッチライン0800で分岐予測ができないため、分岐予測のタイミングが1サイクル分遅れ、本実施の形態であれば、サイクル3でフェッチアドレスBをフェッチするのに対し、従来技術においては、サイクル3では続くフェッチアドレス0816をフェッチすることになり、分岐先のフェッチアドレスをフェッチできていない。図18に示す例では、フェッチアドレスBはサイクル4でフェッチされることになる。
これに対し、本実施の形態においては、前側フェッチラインをフェッチした段階で、BTAC12の検索が可能であるため、図18に示すように、従来で発生していた1サイクルのペナルティを解消することが可能である。また、フェッチライン境界上を示すQC情報を有することで、前側フェッチラインに分岐予測情報を紐付けしていても、フェッチライン境界上にあるか判断可能である。このため、図17に示すように後ろ側フェッチラインのフェッチを行わずに分岐予測先をフェッチしてしまい、命令の後半を読み出すことができない、という状況を回避することができる。
次に、本発明の実施の形態2について説明する。本実施の形態においては、BTAC12の検索要求に対する検索結果が同一サイクル内得られるものとする。また、フェッチライン境界上に分岐命令が存在している場合であっても、実施の形態1と同様、前側のフェッチラインをフェッチする場合に分岐予測を実施する場合について説明する。
本実施の形態にように、高速にBTAC12の検索が可能な場合、つまり分岐予測によりBTAC12の検索を開始し、同じサイクル内において、分岐予測ユニット13がBTAC12から全予測情報の応答を受け取ることが可能な場合には、可変長命令セットにおいてフェッチライン境界上に分岐命令が存在すると、図17に示したように、後ろ側のフェッチラインのフェッチを行わずに分岐予測先をフェッチしてしまうため、分岐命令を正しくデコードすることができない。本実施の形態においては、このような場合においても、フェッチライン境界情報(QC情報)を有することで、このような問題を回避することができる。
図11は、フェッチライン境界(フェッチライン0800とフェッチライン0808)上に分岐命令が存在する場合であって、BTAC12の高速検索が可能な場合の動作を示す図である。図11に示すように、サイクル1でフェッチライン0800がフェッチされると、分岐予測ユニット13はBTAC12にフェッチライン0800の検索を要求する。ここで、BTAC12から同一サイクル内に検索結果が分岐予測ユニット13に出力される。この場合、分岐予測ユニット13がフェッチユニット14に対し、分岐予測先アドレスとしてフェッチラインBを同一サイクル内、すなわちサイクル1で出力することができる。ただし、その場合は、フェッチユニット14が次のサイクル2で、フェッチライン0808をフェッチせずに、分岐先フェッチラインBをフェッチしてしまうことになる。
これに対し、本実施の形態においては、分岐予測ユニット13には、検索結果としてQC情報も入力されており、フェッチユニット14が次のサイクル2では、続くフェッチライン0808をフェッチする必要があることを判断することができる。したがって、分岐予測ユニット13は、例えば自身が有する一時バッファ内などにこのフェッチアドレスBを一時保存しておく。そして、サイクル2でこのフェッチアドレスBをフェッチユニット14に渡す。フェッチユニット14は、これにより、サイクル3でフェッチアドレスBをフェッチする。
通常、分岐予測ユニット13は、フェッチユニット14からフェッチアドレスが出力される各サイクル毎に、分岐予測をしようとする。これに対し、本実施の形態においては、BTAC12から検索結果としてQC情報が入力される。分岐予測ユニット13は、このQC情報が、分岐命令がフェッチライン境界上に存在することを示す場合、フェッチアドレスが入力されても分岐予測を一旦止め、所定のタイミングで分岐予測結果をフェッチラインユニット14に渡し、分岐予測を再開することができる。
本実施の形態においては、実施の形態1と同様にフェッチライン境界情報(QC情報)を保持する。このQC情報を保持しておくことで、次フェッチを、分岐予測先のフェッチラインか、分岐命令の後半部分が存在している後ろ側フェッチラインかのいずれかを選択することができ、分岐命令の前半部分に分岐予測が紐付けされている場合であっても、分岐命令の後半部分を読み飛ばすことなく、よって分岐命令を正しくデコードすることができる。
なお、本発明は上述した実施の形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
この出願は、2011年3月31日に出願された日本出願特願2011−078561を基礎とする優先権を主張し、その開示の全てをここに取り込む。
1 プロセッサ
11 実行ユニット
12 BTAC
13 分岐予測ユニット
14 フェッチユニット
15 命令メモリ
16 命令キュー
17 デコード&ディスパッチユニット
e1 分岐元PC
e2 分岐先PC
e3 予測情報
e4 QC情報
E1 実行PC
E2 実行先PC
E3 実行結果
E4 フェッチライン境界情報

Claims (6)

  1. 分岐命令を含む可変長命令セットを実行するプロセッサであって、
    分岐命令の分岐先情報と、前記分岐命令がフェッチラインの境界上にあることを示す境界情報とが格納された分岐情報テーブルと、
    前記分岐情報テーブルを参照し、分岐命令を含む可変長命令セットの分岐予測を行う分岐予測ユニットと、
    前記分岐予測結果に基づき命令をフェッチするフェッチユニットとを有し、
    前記分岐予測ユニットは、前記分岐情報テーブルを参照し、前記フェッチユニットにフェッチさせる命令に前記境界情報がある場合は、続く次のフェッチラインもフェッチさせた後で前記分岐先情報にしたがって分岐予測先をフェッチさせる、プロセッサ。
  2. 同一サイクルで前記キャッシュの検索及び前記分岐先情報の取得が可能な場合、前記分岐命令がフェッチライン境界上にある場合に当該分岐先情報を一時的に格納するバッファを更に有し、
    前記分岐予測ユニットは、前記分岐情報テーブルを参照し、前記フェッチユニットにフェッチさせる命令に前記境界情報がある場合は、前記フェッチユニットが続く次のフェッチラインをフェッチするまで前記分岐先情報を保持する、請求項1記載のプロセッサ。
  3. 前記分岐情報テーブルは、分岐命令の分岐元アドレス、分岐先アドレス、実際に分岐したか否かを示す予測情報、及び前記境界情報を有する、請求項1又は2記載のプロセッサ。
  4. 前記分岐命令は、所定の条件が成立したときのみ分離する条件付き分岐命令である、請求項1乃至3のいずれか1項記載のプロセッサ。
  5. 前記フェッチユニットによりフェッチされた命令を出力する命令メモリと、
    前記命令メモリから出力された命令群をデコードするデコードユニットと、
    デコードされた命令を実行する実行ユニットとを有し、
    前記分岐情報テーブルは、前記実行ユニットから出力される実行アドレス、実行結果、実行先アドレス及びフェッチライン境界情報の情報に基づき更新される、請求項3記載のプロセッサ。
  6. 分岐命令を含む可変長命令セットを実行するプロセッサの命令処理方法であって、
    分岐命令の分岐先情報と、前記分岐命令がフェッチラインの境界上にあることを示す境界情報とが格納された分岐情報テーブルを参照し、分岐命令を含む可変長命令セットの分岐予測を行う分岐予測工程と、
    前記分岐予測結果に基づき命令をフェッチするフェッチ工程とを有し、
    前記分岐予測工程では、前記分岐情報テーブルを参照し、前記フェッチ工程にてフェッチさせる命令に前記境界情報がある場合は、続く次のフェッチラインもフェッチさせた後で前記分岐先情報にしたがって分岐予測先をフェッチさせる、プロセッサの命令処理方法。
JP2013507100A 2011-03-31 2012-02-24 プロセッサ及びその命令処理方法 Expired - Fee Related JP5696210B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013507100A JP5696210B2 (ja) 2011-03-31 2012-02-24 プロセッサ及びその命令処理方法

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2011078561 2011-03-31
JP2011078561 2011-03-31
JP2013507100A JP5696210B2 (ja) 2011-03-31 2012-02-24 プロセッサ及びその命令処理方法
PCT/JP2012/001276 WO2012132214A1 (ja) 2011-03-31 2012-02-24 プロセッサ及びその命令処理方法

Publications (2)

Publication Number Publication Date
JPWO2012132214A1 true JPWO2012132214A1 (ja) 2014-07-24
JP5696210B2 JP5696210B2 (ja) 2015-04-08

Family

ID=46930010

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013507100A Expired - Fee Related JP5696210B2 (ja) 2011-03-31 2012-02-24 プロセッサ及びその命令処理方法

Country Status (4)

Country Link
US (1) US20140019722A1 (ja)
EP (1) EP2693333A4 (ja)
JP (1) JP5696210B2 (ja)
WO (1) WO2012132214A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9690587B2 (en) * 2014-04-08 2017-06-27 International Business Machines Corporation Variable updates of branch prediction states
CN112540795A (zh) 2019-09-23 2021-03-23 阿里巴巴集团控股有限公司 指令处理装置和指令处理方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5574871A (en) * 1994-01-04 1996-11-12 Intel Corporation Method and apparatus for implementing a set-associative branch target buffer
TW345637B (en) * 1994-02-04 1998-11-21 Motorola Inc Data processor with branch target address cache and method of operation a data processor has a BTAC storing a number of recently encountered fetch address-target address pairs.
TW357318B (en) * 1997-03-18 1999-05-01 Ind Tech Res Inst Branching forecast and reading device for unspecified command length extra-purity pipeline processor
US6647490B2 (en) * 1999-10-14 2003-11-11 Advanced Micro Devices, Inc. Training line predictor for branch targets
US7203824B2 (en) * 2001-07-03 2007-04-10 Ip-First, Llc Apparatus and method for handling BTAC branches that wrap across instruction cache lines
WO2004069860A2 (en) * 2003-02-03 2004-08-19 The Scripps Research Institute Isg15-conjugated proteins
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
US20060200655A1 (en) * 2005-03-04 2006-09-07 Smith Rodney W Forward looking branch target address caching
US7917731B2 (en) * 2006-08-02 2011-03-29 Qualcomm Incorporated Method and apparatus for prefetching non-sequential instruction addresses
US20080040576A1 (en) * 2006-08-09 2008-02-14 Brian Michael Stempel Associate Cached Branch Information with the Last Granularity of Branch instruction in Variable Length instruction Set

Also Published As

Publication number Publication date
EP2693333A4 (en) 2015-08-05
JP5696210B2 (ja) 2015-04-08
US20140019722A1 (en) 2014-01-16
WO2012132214A1 (ja) 2012-10-04
EP2693333A1 (en) 2014-02-05

Similar Documents

Publication Publication Date Title
US7437537B2 (en) Methods and apparatus for predicting unaligned memory access
US7278012B2 (en) Method and apparatus for efficiently accessing first and second branch history tables to predict branch instructions
JP3845043B2 (ja) 命令フェッチ制御装置
US7444501B2 (en) Methods and apparatus for recognizing a subroutine call
KR101081674B1 (ko) 워킹 글로벌 히스토리 레지스터를 이용하기 위한 시스템 및 방법
JP5815596B2 (ja) プロシージャリターンシーケンスを加速するための方法およびシステム
JP2009536770A (ja) ブロックに基づく分岐先アドレスキャッシュ
JP2010501913A (ja) 可変長命令セット内の分岐命令の最後の粒度(granularity)と関連付けられたキャッシュ分岐情報
US9710269B2 (en) Early conditional selection of an operand
US20050216713A1 (en) Instruction text controlled selectively stated branches for prediction via a branch target buffer
US20040225866A1 (en) Branch prediction in a data processing system
JP5696210B2 (ja) プロセッサ及びその命令処理方法
US7519799B2 (en) Apparatus having a micro-instruction queue, a micro-instruction pointer programmable logic array and a micro-operation read only memory and method for use thereof
US20080065870A1 (en) Information processing apparatus
US20090070569A1 (en) Branch prediction device,branch prediction method, and microprocessor
TW200409024A (en) Processor including branch prediction mechanism for far jump and far call instructions
JP4728877B2 (ja) マイクロプロセッサおよびパイプライン制御方法
US10318303B2 (en) Method and apparatus for augmentation and disambiguation of branch history in pipelined branch predictors
JP5093237B2 (ja) 命令処理装置
JP3765111B2 (ja) 分岐登録命令を有するプロセッサ
US7343481B2 (en) Branch prediction in a data processing system utilizing a cache of previous static predictions
KR20080000944A (ko) 파이프라인 구조를 갖는 프로세서 및 그 제어방법

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140722

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140912

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20141104

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141222

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150209

R150 Certificate of patent or registration of utility model

Ref document number: 5696210

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees