JP2008299795A - 分岐予測制御装置及びその方法 - Google Patents

分岐予測制御装置及びその方法 Download PDF

Info

Publication number
JP2008299795A
JP2008299795A JP2007148161A JP2007148161A JP2008299795A JP 2008299795 A JP2008299795 A JP 2008299795A JP 2007148161 A JP2007148161 A JP 2007148161A JP 2007148161 A JP2007148161 A JP 2007148161A JP 2008299795 A JP2008299795 A JP 2008299795A
Authority
JP
Japan
Prior art keywords
instruction
address
return
return address
branch prediction
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
JP2007148161A
Other languages
English (en)
Inventor
Tomoo Inoue
智夫 井上
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.)
NEC Electronics Corp
Original Assignee
NEC 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 NEC Electronics Corp filed Critical NEC Electronics Corp
Priority to JP2007148161A priority Critical patent/JP2008299795A/ja
Priority to US12/155,361 priority patent/US8250349B2/en
Publication of JP2008299795A publication Critical patent/JP2008299795A/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 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
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • 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/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables

Landscapes

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

Abstract

【課題】リターンアドレススタックのみで精度良く分岐予測を行う機構を提供する。
【解決手段】パイプライン処理する情報処理装置100において、投機的に実行されている命令の検証に用いられる分岐予測アドレスの生成を行う分岐予測制御装置110であって、予測リターンアドレスを格納する第1のリターンアドレス格納手段113と、コール命令の実行結果に応じて生成されるリターンアドレスを格納する第2のリターンアドレス格納手段117と、格納された予測リターンアドレスを分岐予測アドレスとして送出し、送出した分岐予測アドレスを格納する分岐予測アドレス格納手段114とを有し、分岐予測アドレスと分岐命令あるいはリターン命令の実行後に生成されるリターンアドレスとが異なる場合に第2のリターンアドレス格納手段に格納117されている内容を第1のリターンアドレス格納手段113にコピーする分岐予測制御装置である。
【選択図】図1

Description

本発明は、マイクロプロセッサの分岐予測に係る制御装置及びその方法に関する。
パイプライン処理を行うマイクロプロセッサは、いくつもの命令を流れ作業的に同時に実行する。しかし、命令の処理中に分岐命令が生じると、分岐命令が完了するまで、分岐するか否かが不明のためパイプラインが停止する。処理の完了を待っていたのでは、その間に多くの命令を読み出し、発行する機会を失うことになる。そこで、分岐命令によって分岐するか否かを予測し、後続の命令をフェッチしてパイプラインに流し込むのが分岐予測である。予測が成功すれば、パイプラインの停止は無く命令が続行できる。予測が失敗すれば、正しい分岐方向のアドレスから命令フェッチを行い、実行処理を再開しなければならない。この分岐予測の失敗を分岐予測ミスと言う。分岐予測ミスが起きるとパイプラインは停止し、正しい分岐方向の命令をフェッチして、命令はパイプラインに流し込まれ実行される。この実行されるまでの期間を分岐予測ミスペナルティと言う。命令をフェッチしてから命令実行されるまでのパイプラインのステージ数が多いマイクロプロセッサは、分岐予測が失敗すると分岐予測ミスペナルティが増大し、かなりの性能低下をまねく。このため、分岐予測については、予測の精度が非常に重要となっている。
また、分岐予測の効果を増大させるために、投機実行を行うマイクロプロセッサもある。この場合の投機実行とは、分岐予測に従って、分岐予測先の命令を予め実行しておくことである。即ち、分岐予測の成功/失敗がわかる以前に分岐命令以降の命令を実行する機能である。
従来の分岐予測に係る技術が、特許文献1に開示されている。特許文献1は、マイクロプロセッサにおけるサブルーチンコール/リターン命令等の命令列を高速に実行するための命令フェッチ制御装置である。図10は、特許文献1に係る命令フェッチ制御装置を示したブロック図である。特許文献1は、リターン命令の分岐予測のために、リターンアドレススタック301とブランチヒストリ302を持つ構成になっている。
リターンアドレススタック(Return Address Stuck:以下、RASと称す)301は、サブルーチンのリターンアドレスをスタックするレジスタである。RAS301は、コール命令の完了時にリターンアドレスをプッシュ処理する。即ち、コール命令によって、指定アドレスに実行位置を移動した後、リターンアドレス、或いは次の命令のアドレス情報をRAS301に格納し、スタックポインタを操作する。また、RAS301は、リターン命令の完了時に、リターンアドレスをポップ処理する。即ち、リターン命令によってRAS301から取り出したリターンアドレス、或いは次の命令のアドレスに実行位置を移動した後、スタックポインタを操作する。
ブランチヒストリ302は、過去の分岐予測の履歴情報が格納されたテーブルである。RAS301のプッシュ処理、或いはポップ処理により、スタックポインタ値が変化する。その値によって分岐予測アドレスが、RAS301から読み出されるか、又はブランチヒストリ302から読み出されるかが選択される。
図10に示す命令フェッチ制御装置300では、命令がフェッチされると、命令アドレス作成部304から出力されるアドレスによって、命令キャッシュ305及びブランチヒストリ302から命令コードを読み出す。命令コードがリターン命令であることを選択制御部306が認識すると、スタックポインタを参照し、予測分岐先アドレスをRAS301から読み出すか、ブランチヒストリ302から読み出すかの選択信号を出力する。そして、選択された予測分岐先アドレスで後続の命令フェッチを実行する。スタックポインタは、完了した命令がコール命令であった場合プッシュ処理され、リターン命令であった場合ポップ処理される。このように、特許文献1は、RAS301とブランチヒストリ302を有すことで、リターン命令の分岐予測を行っている。なお、分岐予測ミスが生じ、再命令フェッチが生じた場合、スタックポインタは最小値に戻され、始めから処理を再開する。
しかし、特許文献1では、RAS301のポインタ制御は、サブルーチンコール/リターン命令が完了した時に行われる。そのため、予測分岐先アドレスで後続の命令フェッチ実行時と、リターン命令が時間的に近接している場合、RAS301のみで分岐予測を行うと、分岐予測ミスが多発する。例えば、コール命令の予測分岐先アドレスの先読み等(命令の投機フェッチ時)により、コール命令完了前にリターン命令が発生した場合、リターンアドレスがRAS301に格納されていないため、分岐予測ミスが多発する。従って、従来技術では、リターンアドレスで対応できないリターン命令は、ブランチヒストリ302を併用することで分岐予測の精度を高めている。
上述した問題を解決するため、特許文献2が開示されている。特許文献2では、コール命令が実行されるまでリターンアドレスを格納する第1のRASと、コール命令が実行された後にリターンアドレスを格納する第2のRASを備えることに特徴を有している。コール命令が実行されるまでは第1のRASを用い、コール命令が実行された後は、第2のRASを用いてリターン先を予測できるようにした。この時、ブランチヒストリが検出した情報に従い、出力選択回路がどのアドレスを選択するか決定する。
特開2000−172507号公報 特開2006−40173号公報
しかしながら、発明者は従来技術には以下の課題があることを見出した。従来技術では、ブランチヒストリを用いてサブルーチンコール/リターン命令の存在を予測している。ブランチヒストリは、容量が大きければ分岐予測の効果が上がるが、回路規模が大きくなると非常に高価なものとなる。従って、精度の良い分岐予測を行うためには、高価なブランチヒストリを使用する必要が生じる。加えて、ブランチヒストリは過去の履歴を学習する期間が必要となるという問題が生じる。
本発明の第1の態様は、投機的に生成された命令をパイプライン処理する情報処理装置において、投機的な命令の生成に用いられる予測リターンアドレスの生成と、投機的に実行されている命令の整合性の検証に用いられる分岐予測アドレスの生成を行う分岐予測制御装置であって、前記情報処理装置において生成されたコール命令に基づき前記予測リターンアドレスを生成する予測リターンアドレス生成手段と、前記予測リターンアドレスを格納する第1のリターンアドレス格納手段と、前記コール命令の実行結果に応じて生成されるリターンアドレスを格納する第2のリターンアドレス格納手段と、前記予測リターンアドレスを格納し、当該予測リターンアドレスを分岐予測アドレスとして送出し、送出した分岐予測アドレスを格納する分岐予測アドレス格納手段とを有し、前記分岐予測アドレスと分岐命令あるいはリターン命令の実行後に生成されるリターンアドレスとが異なる場合に前記第2のリターンアドレス格納手段に格納されている内容を前記第1のリターンアドレス格納手段にコピーする分岐予測制御装置である。
また、本発明の第2の態様は、パイプライン処理を行う情報処理装置において、分岐予測を行う分岐予測方法であって、コール命令フェッチ時において、コール命令に対応し、投機的に予測されたリターンアドレスを格納し、コール命令実行時において、コール命令に対応するリターンアドレスを格納し、投機的に予測したリターンアドレスと、前記リターンアドレスとが一致するか否かを判定し、一致した場合、前記予測リターンアドレスを用いて後続の分岐予測を行い、不一致の場合、前記リターンアドレスを前記予測リターンアドレスの格納手段にコピーし、コピーされたリターンアドレスを用いて後続のリターン命令の分岐予測を行う分岐予測方法である。
以上のような構成により、ブランチヒストリ等の高価なリソースを使用せず、リターンアドレススタックのみで精度良くサブルーチンコールからのリターン命令によるリターンアドレスを分岐予測する機構を提供することができる。
以下に、本発明の好ましい実施の形態を説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、説明の明確化のため、必要に応じて重複説明は省略されている。
発明の実施の形態1.
図面を参照し、第1の実施形態に係る分岐予測制御機構及びその方法について説明する。図1は、第1の実施形態に係る情報処理装置100の構成を示すブロック図である。ここでは、マイクロプロセッサ等の情報処理装置100に形成された分岐予測制御機構について例を示したものである。図1には、第1の実施形態に関連する部分が示されている。
第1の実施形態においては、命令フェッチのパイプライン処理が行われる場合の分岐予測制御機構について、例示的に示す。情報処理装置100は、記憶装置に格納されたデータに基づき処理を実行する。第1の実施形態に係る情報処理装置100は、内部の命令キャッシュ102に予め命令セットを有している。そして、プログラムに応じてアドレス生成回路101がアドレスを生成し、アドレス生成回路101は、命令キャッシュ102にアドレスを転送し、命令キャッシュ102から読み出した命令セットを情報処理装置100内の命令バッファ104に転送する。この動作は、全ての命令において共通の動作である。命令キャッシュ102から、命令セットを読み出すことを命令フェッチと呼ぶ。また、命令は、命令キャッシュ102から読み出されるとデコーダ103でデコードされ、デコーダ103は、その結果をアドレス生成回路101に転送し、後続の命令フェッチのためのアドレスを生成する。例えば、あるサブルーチンを実行する場合、コール命令をフェッチすることにより、サブルーチが実行される。サブルーチンの実行が完了した場合、リターン命令により、メインルーチンに処理が戻る。
パイプラインとは、ハードウェアの処理を並列化して性能を向上させるための一般的な手法である。パイプラインの考え方について、自動車の製造ラインや電子部品工場等で行われる流れ作業を用いて簡単に説明する。各工程が1単位時間係るN工程からなる処理を終了するためには、通常N時間必要となる。これをN人の人が流れ作業によって各工程を分担することにすると、1単位時間に1つの製品が完成する。従って、処理速度はN倍に改善される。これがパイプラインの原理である。
即ち、1つの製品の完成を情報処理装置での命令フェッチに例えた場合、命令フェッチを実行するために必要な工程をオーバーラップさせることにより、命令フェッチのスループットを向上させることができる。ここで、上述した工程各々をパイプラインのステージという。命令フェッチは、命令フェッチステージIF、命令デコードステージID、命令発行ステージIS、レジスタフェッチステージRF、実行ステージEX、ライトバックステージWB、及び命令完了ステージCO等の各ステージによって構成されている。各ステージの処理内容については、後述する。
また、あるステージの処理が手間取り、1単位時間以内に終わらない場合、パイプライン処理に乱れが生じ、処理性能が低下する。このように、パイプラインステージでの処理を単位時間内に終わらせることを阻害する要因をハザードという。分岐命令は、ハザードを引き起こす要因の一つとなりうる。
パイプライン処理を行う情報処理装置は、いくつもの命令を流れ作業的に命令フェッチし、実行する。命令フェッチ時に分岐命令があると後続の命令を分岐先からフェッチしてくるのか、すぐ後のアドレスからフェッチしてくるのかは、分岐命令を実行しないとわからないときがある。その場合、分岐方向が分岐命令の実行により確定するまで命令フェッチを停止してしまうと命令実行が途切れ処理効率が低下する。これを防ぐため、命令が分岐するか否かを予測し、命令フェッチを続けパイプラインに命令を流し込むのが分岐予測である。更に、分岐予測に従って、分岐予測先の命令をあらかじめ実行しておくことを投機実行という。
図1に示す情報処理装置100は、アドレス生成回路101、命令キャッシュ102、デコーダ103、命令バッファ104、命令発行ユニット105、レジスタ106、実行ユニット107、命令完了ユニット108、分岐実行ユニット109、分岐予測制御回路110を有している。
第1の実施形態に係る情報処理装置100は、例えばマイクロプロセッサ等のCPUである。また、情報処理装置100は、バス等のインターフェースを介して、記憶装置に格納されているデータや命令を読み出して実行する。
情報処理装置100は、パイプラインで情報を処理するユニットである。第1の実施形態に係る分岐予測制御回路110は、従来技術のようにリターン命令のリターン先をブランチヒストリに設けず、投機フェッチRAS113と、実行後RAS117だけによって、精度良く分岐予測の正誤判定を行うことに特徴を有している。投機フェッチRAS113は、投機予測したアドレスを格納するリターンアドレススタックである。また、実行後RAS110は、命令フェッチが実行されたアドレスを格納するリターンアドレススタックである。これら情報処理装置100の各構成要素について以下に説明する。
アドレス生成回路101は、記憶装置から読み出した命令コードが納められた命令キャッシュ102上のアドレス(命令アドレス、図中のAddress)を生成する。つまり、アドレス生成回路101は、プログラムに基づき命令アドレスを命令キャッシュ102に出力する。
命令キャッシュ102には、予め準備された命令セットが命令コード(図中のInstCode)として格納される。命令キャッシュ102は、アドレス生成回路101からの命令アドレスに応じた命令コードをデコーダ103、或いは命令バッファ104に出力する。
デコーダ103では、命令キャッシュ102から入力された命令コードを複号化する。即ち、命令コードがコール命令フェッチであるか、リターン命令フェッチであるかを判定する。この判定結果は、アドレス生成回路101及び分岐予測制御回路110に出力される。
命令バッファ104は、格納された命令コードを命令ディスパッチ信号InstDsptとして出力する。命令発行ユニット105は、命令ディスパッチ信号を受信し、分岐実行ユニット109及び実行ユニット107に対して命令を発行(図中のInstIs)する。また、命令発行ユニット105は、レジスタ106に発行した命令のインデックス情報(図中のIndex)を出力する。インデックス情報とは、レジスタ106に格納されているデータのうち出力されるデータが格納されているレジスタの番号を示す情報である。
レジスタ106は、情報処理装置100で行われる演算処理の結果の記憶装置である。レジスタ106は、命令発行ユニット105からのインデックス情報と関連づけて、実行ユニット107が出力する演算データ(図中のExeData)及び分岐実行ユニット109が出力するリンクアドレス(図中のLnkAdr)を記憶する。また、記憶されたデータは、出力データ(図中のDATA)として、実行ユニット107、あるいは分岐実行ユニット109に送信される。
実行ユニット107は、命令発行ユニット105によって発行された命令に基づいて演算処理を行う。演算によって生成されたデータは、レジスタ106に格納される。なお、実行ユニット107が演算する命令は、例えば論理演算、INT演算、FP演算、SIMD演算、ロード/ストアなどである。また、実行ユニット107は、演算処理が完了すると、演算完了信号(図中のExeComp)を命令完了ユニット108に出力する。命令完了ユニット108は、演算完了信号あるいは分岐実行ユニット109が出力する分岐処理終了信号(図中のBrhExeComp)に基づき、実行中の命令の処理が完了したことを認識する。
分岐実行ユニット109は、命令発行ユニット105によって発行された命令がコール命令であった場合に、コール命令を実行することで得られるリンクアドレスを生成する。このリンクアドレスは、レジスタ106と実行後RAS117に格納される。また、命令発行ユニット105によって発行された命令がリターン命令であった場合に、投機的にフェッチされた分岐予測リターンアドレスが正しいものであったか否かを判断する。このとき、分岐実行ユニット109は、分岐予測制御回路110から出力される分岐予測リターンアドレス(図中のBrhPrdAdr)と、レジスタ106から読み出したリンクアドレスとを比較する。そして、比較の結果、分岐予測リターンアドレスとリンクアドレスとが異なるものである場合、アドレス生成回路101、キュウポインタ115、投機スタックポインタ112に予測ミス信号(図中のMis)を送信する。さらに、分岐実行ユニット109は、正しい分岐先を示すリターンアドレスをミスアドレス(図中のMisAdr)として、アドレス生成回路101に送信する。また、命令の実行後に分岐実行ユニット109は、命令完了ユニット108に命令の実行が完了したことを通知する分岐処理終了信号(図中のBrhExeComp)を出力する。ここで、分岐予測リターンアドレスとは、分岐予測制御回路110が予測し、投機的にフェッチされている分岐先の命令アドレスである。
分岐予測制御回路110は、予測リターンアドレス生成回路111、投機スタックポインタ112、投機フェッチRAS113、分岐予測アドレスバッファ114、キュウポインタ115、実行後スタックポインタ116、実行後RAS117を有している。
予測リターンアドレス生成回路111は、予測リターンアドレス生成手段の一例であって、コール命令がフェッチされた場合、アドレス生成回路101から出力される命令アドレスに基づきリターンアドレスを投機的に予測する。そして、予測リターンアドレス生成回路111は、予測リターンアドレス(図中のPrdRtnAdr)を生成する。なお、予測リターンアドレスは、投機フェッチRAS113にスタックされる。
投機スタックポインタ112は、第1のスタックポインタの一例であって、投機フェッチRAS113におけるデータの格納場所を示すポインタを有している。そして、デコーダ103が出力するコール命令フェッチ信号(図中のCalFth)に基づきポインタの値をプッシュ処理する。プッシュ処理後のポインタの値に基づき投機フェッチRAS113に予測リターンアドレスがスタックされる。一方、命令コードがリターン命令フェッチである場合、投機スタックポインタ112は、デコーダ103が出力するリターン命令フェッチ信号(図中のRtnFth)に基づきポインタの値をポップ処理する。このポップ処理に基づき、投機フェッチRAS113は、格納されている予測リターンアドレスを出力する。出力された予測リターンアドレスは、アドレス生成回路101に送られる。アドレス生成回路101は、この予測リターンアドレスに基づいて後続の命令を投機的にフェッチする。また、予測リターンアドレスは、分岐予測アドレスバッファ114にも格納される。
投機フェッチRAS113は、第1のリターンアドレス格納手段の一例であって、コール命令フェッチ時において、投機的に予測されたコール命令に対応するリターンアドレスを格納するものであり、第1の実施形態において特徴的な装置である。投機フェッチRAS113は、先に入力したデータが後に出力されるスタック構造となっている。また、投機フェッチRAS113は、投機スタックポインタ112によって、データの入出力が管理される。
例えば、投機フェッチRAS113は、コール命令フェッチ時には、予測リターンアドレスが格納される。この時、投機スタックポインタ112をプッシュ処理する。即ち、投機スタックポインタ112のスタックポインタを"1"進める。また、投機フェッチRAS113は、リターン命令フェッチ時には、格納されている予測リターンアドレスをアドレス生成回路101及び分岐予測アドレスバッファ114に出力する。この時、投機スタックポインタ112をポップ処理する。即ち、投機スタックポインタ112のスタックポインタを"1"戻す。このように、投機スタックポインタ112は、投機フェッチRAS113に格納される予測リターンアドレスの指定や、読み出しを管理している。
投機スタックポインタ112は、コール命令フェッチ時に+1、リターン命令フェッチ時に−1される。例えば、ライトポインタとリードポインタの両方を管理するスタックポインタについて示した場合、スタックポインタとライトポインタ及びリードポインタとの関係は、スタックポインタ=ライトポインタ、及びスタックポインタ−1=リードポインタとなる。即ち、投機フェッチRAS113から、読み出される予測リターンアドレスは、スタックポインタ−1のスタックから出力される。
図2を用いて、投機フェッチRAS113について詳述する。図2は、第1の実施形態に係る投機フェッチRAS113の基本的な構成と理想的な更新を例示的に示した図である。図2には、例えばMIPS系命令セットによって示されるプログラムの一例が左部分に示される。
図2のプログラムは、Startから始まるメインルーチンと、function1〜3のサブルーチンが示されている。つまり、メインルーチンからサブルーチンを呼び出して何らかの命令を処理し、サブルーチンからメインルーチンに戻る動作が示されている。これは、分岐命令を実行していることと同じである。MIPS系命令セットでは、JAL命令がコール命令であり、JR r31命令がリターン命令である。
図2の右上部分には、基本的な投機フェッチRAS113構造が示されている。図2に示される投機フェッチRAS113は、例示的に8エントリのスタック構成となっており、プログラムの進行による状態の推移を示しているが、エントリ数は8に限る必要はない。
図2に示すプログラムでは、始めに、(a)のコール命令(JAL命令)によって、(b)のサブルーチン(function1)がコールされる。そして、サブルーチン(b)の処理が完了した後に戻るリターンアドレス(LinkA1)を投機的に予測し、投機フェッチRAS113に格納する。即ち、(1)のプッシュ処理が行われる。同時に、スタックポインタのライトポインタ(WrP)を"1"とし、リードポインタ(RdP)を"0"とする。
次に、(1)にて投機的に予測したリターンアドレスがヒットしていた場合、(c)のリターン命令(JR r31命令)によって、リターンアドレス(LinkA1)に戻る。即ち、(2)のポップ処理が行われる。同時に、スタックポインタのライトポインタは、"0"とし、リードポインタは、"−1"となる。
図2では、スタックポインタは、ライトポインタとリードポインタと分かれて管理する例が示されている。各々の初期値は、ライトポインタ=0、リードポインタ=−1である。プッシュ処理が行われると、ライトポインタ及びリードポインタが1進む。一方、ポップ処理が行われると、ライトポインタ及びリードポインタが1戻る。なお、スタックポインタは、ライトポインタ及びリードポインタに分かれず、両方管理することも可能である。
図2のプログラムに戻り、同様に、(e)のコール命令(JAL命令)によって、(f)のサブルーチン(function2)がコールされる。そして、サブルーチン(f)の処理が完了した後に戻るリターンアドレス(LinkA2)を投機的に予測し、投機フェッチRAS104に格納する。即ち、(3)のプッシュ処理が行われる。同時に、スタックポインタのライトポインタを"1"とし、リードポインタを"0"とする。
次に、(3)にて投機的に予測したリターンアドレスがヒットしていた場合、(g)のリターン命令(JR r31命令)によって、リターンアドレス(LinkA2)に戻る。即ち、(4)のポップ処理が行われる。同時に、スタックポインタのライトポインタは、"0"とし、リードポインタは、"−1"となる。以降、(5)及び(6)の処理についても、上述した処理と同様であるため、説明を省略する。
なお、投機フェッチRAS113は、図2に示した予測リターンアドレスのスタックエントリへの格納順に限らず、図3に示すスタックエントリへの格納順とすることも可能である。図2に示した投機フェッチRAS113は、1エントリのみにリターンアドレスの情報をスタックしていた。図3は、(1)、(2)、及び(3)のプッシュ処理が行われ、それに対応するリターンアドレス(LinkA1、LinkA2、及びLinkA3)が投機フェッチRAS113にスタックされる。ここでは、プッシュ処理によって投機フェッチRAS113に格納されるリターンアドレスが複数となり、スタックが深くなる構成となる。そして、(4)、(5)、及び(6)のポップ処理によって、各々のリターンアドレスに戻る。
図2及び図3に示されるように、基本的な投機フェッチRAS113は、投機的コール命令をフェッチした時に計算した予測リターンアドレスをプッシュ処理によって書き込み、投機的にリターン命令をフェッチした時にポップ処理によって読み出される。これらの処理は、特許文献1で示したRASと異なり、命令が完了する前に行われる。
図1に戻り、分岐予測制御装置100の構成要素について引き続き説明する。分岐予測アドレスバッファ114は、分岐予測アドレス格納手段の一例であって、投機フェッチRAS113を用いて予測したリターンアドレスを格納する。分岐予測アドレスバッファ114に格納された予測リターンアドレスは、リターン命令実行時に読み出される。予測リターンアドレスは、実際に実行されるリターンアドレスと比較し、分岐予測が当たっているかを判断するために使用する。投機フェッチRAS113には、予測されたリターンアドレスの候補が格納されているが、分岐予測アドレスバッファ114には、予測に使用されたアドレスを格納する。つまり、リターン命令フェッチ時に読み出された予測リターンアドレスが格納されている。
また、分岐予測アドレスバッファ114は、スタック構造と異なり、先に入力したデータが先に出力されるキュウ(待ち行列)構造となっている。そして、分岐予測アドレスバッファ114は、キュウポインタ115によって、入出力されるデータが管理される。キュウポインタ115は、例えばライトポインタWrP及びリードポインタRdPを有している。ライトポインタWrP及びリードポインタRdPは、初期値を"0"とし、最大値を"キュウの数−1"とするポインタである。ライトポインタWrPは、リターン命令フェッチ時に+1される。また、分岐予測がミスとなった場合、ライトポインタWrPの値は、その時点におけるリードポインタRdPに"1"を加えた値となる。一方、リードポインタRdPは、リターン命令実行時に+1される。
実行後RAS117は、第2のリターンアドレス格納手段の一例であって、コール命令実行時において、リターン命令に対応するリターンアドレスを格納する。つまり、実行後RAS117は、投機的に予測したリターンアドレスではなく、コール命令を実行することで得られる正しいリターンアドレスを格納する格納手段である。実行後RAS117は、投機フェッチRAS113と同様に、先に入力したデータが後に出力されるスタック構造となっており、図2及び図3で示した投機フェッチRAS113の構造と同様である。実行後RAS117は、実行後スタックポインタ116によって、データの入出力が管理される。実行後スタックポインタ116は、第2のスタックポインタの一例である。
例えば、コール命令が発行され、命令が実行された場合、実行後RAS117には、分岐実行ユニット109にて計算された正しいリターンアドレスが格納される。この時、実行後スタックポインタ116は、分岐実行ユニット109が出力するコール命令完了信号(図中のCalInstComp)に基づきポインタの値をプッシュ処理する。即ち、実行後スタックポインタ111のスタックポインタを"1"進める。また、リターン命令が発行され、命令が実行された場合、実行後スタックポインタ116は、分岐実行ユニット109が出力するリターン命令実行信号(図中のRtnInstExe)に基づきポインタの値をポップ処理する。即ち、実行後スタックポインタ116のスタックポインタを"1"戻す。このように、実行後スタックポインタ116は、実行後RAS117に格納されるリターンアドレスの指定や、読み出しを管理している。
実行後スタックポインタ116は、コール命令実行時に+1、リターン命令時に−1される。なお、スタックポインタは、ライトポインタとリードポインタと分けて管理することも可能であり、一方、ライトポインタ及びリードポインタに分かれずに管理することも可能である。また、実行後スタックポインタ116は、完了スタックポインタ(CP:以降、コミットポインタと称す)も有している。コミットポインタは、コール命令完了時に+1、リターン命令完了時に−1される。コミットポインタについては、後に詳述する。
次に、第1の実施形態に係る情報処理装置100の処理動作について具体的に説明する。図4は、第1の実施形態に係る情報処理装置100の処理動作を命令ステージ毎に分割して示した図である。また、例示的にコール/リターン命令のパイプラインステージを分割して説明している。各ステージは、IF(命令フェッチステージ)、ID(命令デコードステージ)、IS(命令発行ステージ)、RF(レジスタフェッチステージ)、EX(実行ステージ)、WB(ライトバックステージ)、及びCO(命令完了ステージ)に分かれている。
IFステージは、命令キャッシュ102から命令コードを読み出すステージである。IDステージは、命令コードをデコーダ103にてデコードするステージである。ISステージは、読み出した命令コードに従って、命令を発行するステージである。RFステージは、処理に用いる情報が格納されるレジスタ106からデータを読み出すステージである。EXステージは、レジスタ106から出力されたデータを命令コードに従って、命令を実行するステージであり、コール命令の場合は、リターン先のアドレスを計算し、リターン命令の場合は、分岐先のリターンアドレスを確定するステージである。WBステージは、EXで計算した結果をレジスタ106、或いは実行後RAS117に格納するステージである。COステージは、命令が完了したことを示すステージである。以下に、各ステージで行われる動作について説明する。
まず、コール命令をフェッチし、実行される場合の動作について説明する。この場合、まずアドレス生成回路101が命令アドレスを生成する(a)。続いて、IFステージにて、命令キャッシュ102は、命令アドレスに応じて命令コードを出力する。また、予測リターンアドレス生成回路111は、命令アドレスに基づいて予測リターンアドレスを生成する(d)。
IDステージでは、命令キャッシュ102からフェッチされた命令コードが選択される(b)。選択された命令コードは、命令バッファ104へ出力される。また、命令キャッシュ102からフェッチされた命令コードは、デコーダ103に送信される(c)。デコーダ103は、命令コードをデコードし、その結果をアドレス生成回路101に送信する。命令デコード結果がコール命令であれば、さらに、投機スタックポインタ112とキュウポインタ115の値をプッシュ処理する。なお、アドレス生成回路101に送信されたコール命令のデコード結果は、アドレス生成回路101で次の命令アドレスとしてコール先アドレスを生成する情報となる。
ISステージでは、命令バッファ104にフェッチされた命令コードが格納され、命令バッファ104に格納されていた命令コードは、命令ディスパッチ信号とともに命令発行ユニット105に出力される。命令発行ユニット105は、命令ディスパッチ信号に基づいてインデックス情報の出力(g)と命令の発行(h)、(l)とを行う。また、投機フェッチRAS113は、IDステージにてコール命令のデコード結果を受け投機スタックポインタ112で行われたプッシュ処理に基づき予測リターンアドレスを記憶する。
RFステージでは、レジスタ106がインデックス情報で指定されたアドレスに格納されているデータを出力する(i)、(n)。EXステージでは、実行ユニット107が、レジスタ106から送信されるデータを命令発行ユニット105が発行した命令に基づき処理する。そして、その処理結果は、演算データとしてレジスタ106に送信される(j)。また、実行ユニット107は、命令の実行が完了すると命令完了信号を完了ユニットに送信する(k)。一方、分岐実行ユニット109は、命令発行ユニット105が発行したコール命令に基づきリンクアドレスを生成する(q)。このリンクアドレスは、コール命令を実行することで得られるリターンアドレスである。そして、このリンクアドレスは、実行後RAS117とレジスタ106に送信される。このとき、分岐実行ユニット109は、実行後スタックポインタ116にプッシュ処理を行う。
WBステージでは、レジスタ106が、実行ユニット107から送信された演算データと分岐ユニットから送信されたリンクアドレスとを記憶する。また、実行後RAS117は、実行後スタックポインタ116のポインタ値に基づき分岐実行ユニット109から送信されたリンクアドレスを記憶する。そして、COステージでは、分岐実行ユニット109が実行後スタックポインタ116のコミットポインタに対しプッシュ処理を行う。
上記手順によって、コール命令がフェッチされ、投機的にリターン命令後の命令をフェッチするための予測リターンアドレスとコール命令実行後のリターンアドレスとがそれぞれ投機フェッチRAS113と実行後RAS117とにそれぞれ記憶される。
続いて、リターン命令がフェッチされ、実行される場合の動作について説明する。この場合、まずアドレス生成回路101が命令アドレスを生成する(a)。続いて、IFステージにて、命令キャッシュ102は、命令アドレスに応じて命令コードを出力する。
IDステージでは、命令キャッシュ102からフェッチされた命令コードが選択される(b)。選択された命令コードは、命令バッファ104へ出力される。また、命令キャッシュ102からフェッチされた命令コードは、デコーダ103に送信される(c)。デコーダ103は、命令コードをデコードし、その結果をアドレス生成回路101に送信する。命令デコード結果がリターン命令の場合、投機スタックポインタ112の値をポップ処理する。なお、アドレス生成回路101に送信されたリターン命令のデコード結果は、アドレス生成回路101で次の命令アドレスとしてリターン先アドレスを生成する情報となる。すなわち、投機フェッチRAS113から送出される予測リターン先アドレスをアドレス生成回路101は選択し、後続の命令アドレスとして生成する。
ISステージでは、命令バッファ104にフェッチされた命令コードが格納され、命令バッファ104に格納されていた命令コードは、命令ディスパッチ信号とともに命令発行ユニット105に出力される。命令発行ユニット105は、命令ディスパッチ信号に基づいてインデックス情報の出力(g)と命令の発行(h)、(l)とを行う。また、投機フェッチRAS113は、IDステージにてリターン命令のデコード結果を受け予測リターンアドレスを予測アドレスとしてアドレス生成回路101に送信する(e)。アドレス生成回路101は、この予測アドレスを後続命令のアドレスとして命令キャッシュ102へ生成する。投機スタックポインタ112は、予測リターンアドレスの送信後にポップ処理がおこなわれる。また、分岐予測アドレスバッファ114は、デコーダ103がリターン命令のデコード結果を受け、投機フェッチRAS113から送出される予測リターンアドレスをISステージで格納する。このとき、キュウポインタ115は、処理される。キュウポインタ115に基づき、分岐予測アドレスバッファ114は、分岐予測アドレスとして分岐実行ユニット109に送信する(m)。
RFステージでは、レジスタ106がインデックス情報で指定されたレジスタ番号に格納さているデータを出力する(i)、(n)。EXステージでは、実行ユニット107が、レジスタ106から送信されるデータを命令発行ユニット105が発行した命令に基づき処理する。そして、その処理結果は、演算データとしてレジスタ106に送信される(j)。また、実行ユニット107は、命令の実行が完了すると命令完了信号を完了ユニットに送信する(k)。一方、分岐実行ユニット109は、命令発行ユニット105が発行したリターン命令に基づきレジスタに格納されたコール命令実行時に生成したリンクアドレスを読み出す。そして、このリンクアドレスと分岐予測アドレスバッファ114が出力する分岐予測アドレスとを比較する。ここで、比較結果が正しければ、分岐実行ユニット109は、実行後スタックポインタ116に対してポップ処理を行う。一般的に、コール命令の後にその他の分岐命令がない場合、リターン命令実行時の戻り先は、コール命令に従って予測した分岐先と同じになる。
WBステージでは、レジスタ106が、実行ユニット107から送信された演算データと分岐ユニットから送信されたリンクアドレスとを記憶する。また、実行後RAS117は、実行後スタックポインタ116のポインタ値に基づき分岐実行ユニット109から送信されたリンクアドレスを記憶する。そして、COステージでは、分岐実行ユニット109が実行後スタックポインタ116のコミットポインタに対しポップ処理を行う。
上記手順によって、リターン命令がフェッチされた場合の処理が行われる。しかしながら、コール命令とリターン命令との間に条件分岐命令などの命令が存在する場合がある。このような場合、投機的にフェッチされる命令が実際に分岐する分岐先の命令と異なる場合がある。このような分岐が発生する場合、投機フェッチRAS113の情報が乱れる。ここでは、このような場合の動作について説明する。ここで、条件分岐命令とは、例えばそれ以前の演算結果が所定の条件を満たしている場合に新たな分岐先に処理を移行する命令である。この条件分岐命令では、条件を満たして新たな分岐先に処理が移行する場合をTakenと称し、条件を満たさず現在のルーチンに沿って処理を進める場合をNot Takenと称する。
この場合、まず、アドレス生成回路101が命令アドレスを生成する(a)。続いて、IFステージにて、命令キャッシュ102は、命令アドレスに応じて命令コードを出力する。
IDステージでは、命令コードが選択される(b)。また、命令コードは、デコーダ103に送信される(c)。デコーダ103は、命令コードをデコードし、条件分岐命令である場合、その結果をアドレス生成回路101に送信する。本説明では、ここで送信されるデコード結果に基づきアドレス生成回路101は、フェッチされた条件分岐命令がTaken予測の場合に分岐先予測アドレスを生成する。以降の図4の説明では、条件分岐命令は、Taken予測されたことを仮定とする。
ISステージでは、命令バッファ104が、ISステージで選択された命令に基づき、命令ディスパッチ信号を命令発行ユニット105に出力する。命令発行ユニット105は、命令ディスパッチ信号に基づいてインデックス情報の出力(g)と命令の発行(h)、(l)とを行う。
RFステージでは、レジスタ106がインデックス情報で指定されたレジスタ番号に格納さているデータを出力する(i)、(n)。EXステージでは、実行ユニット107が、レジスタ106から送信されるデータを命令発行ユニット105が発行した命令に基づき処理する。そして、その処理結果は、演算データとしてレジスタ106に送信される(j)。また、実行ユニット107は、命令の実行が完了すると命令完了信号を完了ユニットに送信する(k)。一方、分岐実行ユニット109は、命令発行ユニット105が発行した条件分岐命令に基づきレジスタに格納された演算結果を読み出す(n)。そして、この演算結果が分岐命令の条件と一致しているかを判断する。ここで、判断の結果がTakenであった場合は、条件分岐命令フェッチ時にTaken予測をしているのでそのままその後の処理を続行する。一方、判断の結果がNot Takenであった場合、分岐予測ミスとなり分岐予測ミス信号及びミスアドレスがアドレス生成回路101に送信される(o)、(r)。アドレス生成回路101は、このミスアドレスに基づいて正しい分岐方向の命令アドレスを生成する。
WBステージでは、EXステージにおいて分岐条件がTakenであった場合、投機的に実行され演算されたデータはレジスタ106に演算データとして格納する。一方、EXステージにおいて分岐条件がNot Takenであった場合、分岐予測ミスが生じているので、実行後RAS117に蓄積されている正しい分岐アドレスを投機フェッチRAS113にコピーする(s)。これによって、投機フェッチRAS113に記憶されている情報は正しいものに修正される。なお、分岐予測アドレスバッファ114のキュウポインタ115は、分岐予測がミスしている場合、ポインタを初期状態に戻す。
そして、COステージでは、EXステージにおいて分岐条件がTakenであった場合、そのまま続く処理を中断することなく実行する。一方、EXステージにおいて分岐条件がNot Takenであった場合、それまで投機的に実行されていた命令の処理を破棄するように各ブロックに命令する。これによって、投機的に実行されていた命令の処理は中断される。
このように、実行後RAS117は、分岐予測が外れた場合に、実行後RAS117に記憶されている内容を投機フェッチRAS113にコピーする。従って、投機フェッチRAS113の乱れを実行後RAS117の内容をコピーすることにより、修正が可能である。従来技術のRASのように、分岐予測ミスが起きた場合、投機フェッチRASをクリアする等して初期状態に戻し、処理の初めから再開する必要がなくなる。従って、処理の効率化が図られる。
次に、図5〜図7を用いて、上述した動作時における投機フェッチRASと実行後RASの状態について詳細に説明する。図5は、基本的なサブルーチンコール/リターン命令のパイプライン動作であり、分岐予測が正常に完了した場合を示した図である。
図5は、上部にコール/リターン命令の流れが示されている。つまり、(1)の「JAL」(コール命令)と(5)の「JR r31」(リターン命令)との間に、投機的に実行される3つのサブルーチン命令(2)〜(4)が示されている。最終行には、「サブルーチンリターン予測先の命令」が実行され、リターン予測がヒットしていることから正常に終了している状態が示されている。下部には、第1の実施形態に係る「投機フェッチRAS」と「実行後RAS117」が例示され、上部の命令の進行状況に応じて変化する格納状態が示されている。なお、「投機フェッチRAS」と「実行後RAS」は、図1に示す投機フェッチRAS113と実行後RAS117と同じものである。
各命令は、IFステージからCOステージまで、前述した7段階のステージを有し、横軸方向に時系列的に示されている。なお、1段階が1クロックとなるように示されている。図5では、パイプラインの基本動作に従い、各命令は、1クロック毎にオーバーラップして進むように示されている。但し、コール命令からサブルーチン、或いはサブルーチンからリターン命令へジャンプする場合は、通常1クロック程度のストール(バブルと称す)が必要のため、2クロックの遅れが生じる。
始めに、(1)の「JAL」(コール命令)が開始される。パイプライン動作の場合、(1)の「JAL」命令の完了(COステージ)を待たずに、次々とサブルーチンが投機的に実行される。(2)の「サブルーチンの先頭命令」は、バブルによるストールが発生するため、2クロック遅れてIFステージが開始するが、(3)の「次のサブルーチン内の命令」は、(2)のIFステージから1クロック遅れて開始される。同様に、(4)の「次のサブルーチン内の命令」も、(3)のIFステージから1クロック遅れて開始される。サブルーチン内の命令が全て開始されると、(5)において、「JR r31」(リターン命令)が開始される。更に、1クロック後に(6)の「サブルーチンリターン予測先の命令」を開始する。
ここで、サブルーチンリターン先の予測リターンアドレスは、(1)のIDステージにおいて、「投機フェッチRAS」にプッシュ処理(a)されている。即ち、図4にて説明したように、コール命令フェッチ時は、アドレス生成回路101で生成された予測リターンアドレスが投機フェッチRAS113に格納されるためである。ここで、コール命令がフェッチされ、投機フェッチRAS113に予測リターンアドレスが格納された時、投機スタックポインタ112は、予測リターンアドレスが格納されたエントリを有効なエントリとして指定する。
更に、(1)のEXステージでは、「JAL」命令が実行され、本来のリターンアドレスが「実行後RAS」にプッシュ処理(b)される。即ち、図4にて説明したように、コール命令が実行されると、分岐実行ユニット109で計算された本来のリターンアドレスが実行後RAS117に格納されるためである。ここで、コール命令が実行され、実行後RAS117にリターンアドレスが格納された時、実行後スタックポインタ116は、リターンアドレスが格納されたエントリを有効なエントリとして指定する。
一方、(1)の開始と共に、(2)〜(4)のサブルーチン、及び(5)「JR r31」(リターン命令)が次々に投機的に実行される。最後に、(6)のIFステージでは、「投機フェッチRAS」にスタックされている予測リターンアドレスがポップ処理(c)され、そのアドレスに投機的にリターンする。即ち、図4にて説明したように、リターン命令フェッチ時は、投機スタックポインタ112が示す投機フェッチRAS113から予測リターンアドレスを読み出し、アドレス生成回路101に送り後続の命令フェッチアドレスとするためである。ここで、投機スタックポインタ112は、リターン命令がフェッチされた時、指定されたエントリに格納されている予測リターンの読み出しを管理している。
その後、(5)のEXステージでは、「実行後RAS」にスタックされている本来のリターンアドレスをポップ処理(e)し、(6)のIFステージにてポップ処理(c)された予測リターンアドレスと一致しているかを判定する。即ち、図4にて説明したように、リターン命令が実行されると、分岐実行ユニット109は、実行後スタックポインタ116が示す実行後RAS117から正しいリターンアドレスを読み出し、予測リターンアドレスが一致しているか否か判定する。ここで、実行後スタックポインタ116は、リターン命令が実行された時、指定されたエントリに格納されているリターンアドレスの読み出しを管理している。
図5は、分岐予測が正常に完了した場合を示しているため、本来のリターンアドレスと予測リターンアドレスは一致する。従って、分岐予測は正しく、正常終了する。
以上に示すように、投機フェッチRAS113は、コール命令フェッチ時に、予測リターンアドレスを格納する。従って、特許文献1のように実行完了を待って次の命令に進む必要がない。その結果、投機予測が当たっている限り、直後にリターン命令がフェッチされても分岐先を正しく予測することが可能となる。
なお、「実行後RAS」には、スタックポインタに加え、完了スタックポインタ(CP:以降、コミットポインタと称す)が示されている。コミットポインタは、命令が完了した時点(COステージ)における「実行後RAS」の格納状態を管理するものである。例えば、コール命令フェッチ時において、EXステージにて「実行後RAS」に本来のリターンアドレスがプッシュ処理(b)された場合、スタックポインタは1進むが、コミットポインタは変化しない。コミットポインタは、COステージになった時点でプッシュ処理(d)され、1進む。また、リターン命令フェッチ時において、EXステージにて本来のリターンアドレスがポップ処理(e)読み出された場合、スタックポインタは1戻るが、コミットポインタは変化しない。コミットポインタは、COステージになった時点でポップ処理(f)され、1戻る。即ち、コミットポインタは、コール命令が完了した時、実行後RAS110に格納されたリターンアドレスを有効なエントリとして指定する機能を有する。
次に、図6を用いて説明する。図6は、基本的なサブルーチンコール/リターン命令のパイプライン動作であり、分岐予測にミスがあった場合を示した図である。図6も、図5と同様に、上部にサブルーチンコール/リターン命令の流れが示され、下部に上記命令の進行状況に応じて変化する「投機フェッチRAS」と「実行後RAS」の格納状態が示されている。
(1)の「JAL」命令に続いて、投機的に実行されるサブルーチン内の命令が(2)、(3)に示されている。図6では、(3)において更に条件分岐が命令されたため、(4)〜(8)の分岐予測先の命令が次々に投機的に実行される。但し、図6では、分岐予測にミスがあった場合について示されている。即ち、(3)のEXステージにおいて、条件分岐の予測判断にミスがあることが判明した場合が示されている。従って、(3)のCOステージまでに投機的に実行された(4)〜(8)の分岐予測先の命令は無効となるが、(9)において、分岐予測ミスがリカバーされる。その後、最終行において、「サブルーチンリターン予測先の命令」が実行され、リターン予測がヒットしていることから、終了している状態が示されている。
上述した処理の流れと、「投機フェッチRAS」及び「実行後RAS」の格納状態の関係について具体的に説明する。(1)の「JAL」命令の開始に伴い、(2)、(3)のサブルーチンが次々に投機的に実行される。(3)では、更に条件分岐が命令フェッチされ、Not Taken予測されているため、(4)〜(8)が1クロック遅れて次々に投機的に実行される。ここで、(1)のIDステージにおいて、「投機フェッチRAS」に予測リターンアドレスがプッシュ処理(a)される。更に、(1)のEXステージでは、本来のリターンアドレスが「実行後RAS」にプッシュ処理(b)される。(3)のEXステージでは、条件分岐命令実行され予測判断がミスしたことが判明する。従って、(3)がCOステージとなるまでに投機的に実行された(4)〜(8)の命令が無効化される。
ここで、第1の実施形態では、「実行後RAS」に格納されている本来のリターンアドレスを、「投機フェッチRAS」にコピーする処理が行われる(d)。図6では、「投機フェッチRAS」と「実行後RAS」の格納状態が同じであるため、コピーによる変化がないように見える。
その後、(9)にて、条件分岐の分岐予測ミスのリカバーが行われる。分岐実行ユニットは、分岐予測ミス信号とともにミスアドレスをアドレス生成回路101に送出し、分岐予測ミスしたリカバーアドレスを生成する。
その後、(10)の「JR r31」命令のEXステージでは、「実行後RAS」からポップ処理(f)した本来のリターンアドレスと、(11)のIFステージにてポップ処理(e)された予測リターンアドレスとを比較し、一致していることによって終了する。
以上に示すように、図6では、分岐予測ミスによって処理時間にペナルティが含まれる。しかし、「実行後RAS」の内容を「投機フェッチRAS」にコピーすることにより、初期状態からではなく、途中からリカバーすることが可能となる。
次に、図7を用いて説明する。図7は、図6と同様に、基本的なコール/リターン命令のパイプライン動作であり、条件分岐の分岐予測にミスがあった場合を示した図である。但し、図7は、図6と異なり、分岐予測ミスの判明前に分岐予測先でJAL命令がフェッチされ、「投機フェッチRAS」内容が上書きされた場合を示した図である。図7においても、図5と同様に、上部にコール/リターン命令の流れが示され、下部に上記命令の進行状況に応じて変化する「投機フェッチRAS」と「実行後RAS」の格納状態が示されている。
(1)の「JAL」命令の開始に伴い、投機的に実行されるサブルーチン内の命令が(2)に示されている。図7では、(2)において更に条件分岐が行なわれるが、条件分岐はNot Taken予測を行なっており、実行時にTakenと判断し、分岐予測ミスが生じた場合が示されている。但し、(2)のEXステージまでは、条件分岐の予測判断にミスがあることが判明しないため、(3)以降の命令が投機的に実行される。
図7では、(3)において分岐予測先の命令が「JR r31」命令であるため、予測リターン先にリターンする。更に、(4)の「リターン予測先の命令がJAL」命令であるため、IFステージにてコール命令がフェッチされる。この時、(1)のIDステージにて「投機フェッチRAS」にプッシュ処理(a)された予測リターンアドレス(Addr0)がポップ処理(b)される。
その後、(4)の「JAL」命令のIDステージにて、予測リターンアドレス(Addr1)が「投機フェッチRAS」にプッシュ処理(c)され、上書きされる。なお、「実行後RAS」には、(1)のEXステージで計算された本来のリターンアドレスがプッシュ処理(d)されている。
その後、(2)のEXステージにおいて、条件分岐の予測判断がミスしたことが判明する。従って、(2)がCOステージとなるまでに投機的に実行された(3)、(4)の命令が無効化される。
ここで、第1の実施形態では、「実行後RAS」に格納されている本来のリターンアドレス(Addr0)を、「投機フェッチRAS」にコピー(f)する処理が行われる。従って、「投機フェッチRAS」の予測リターンアドレスは、Addr1からAddr0に変更される。その後、(5)のリカバー以降の処理は、図6の(9)以降の処理と同様であるため、説明を省略する。
図7でも、図6と同様に分岐予測ミスによって処理時間にペナルティが含まれる。しかし、「実行後RAS」の内容を「投機フェッチRAS」にコピーすることにより、初期状態からではなく途中からリカバーすることが可能となる。図7は、条件分岐ミスが判明する前に、次の命令の予測リターンアドレスが「投機フェッチRAS」に上書きされた。しかしながら、その場合も「実行後RAS」を設けることにより、正しいリターンアドレスを復帰させることが可能となる。
以上のように、第1の実施形態によれば、ブランチヒストリを使用せず、RASのみで精度良くリターン命令の分岐予測ができる。つまり、コール命令とリターン命令が時間的に近接していても、投機フェッチRASに予測リターンアドレスが格納されているため、精度良くリターン命令の分岐予測が実行できる。なお、コール/リターン命令の予測時に、ブランチヒストリを使用しないことから、高価なリソースを用いる必要もなく、ブランチヒストリの学習期間も必要なくなる。
また、従来、分岐予測ミスにより再命令フェッチが生じた場合、RASの内容が乱れるのは、完了しているコール命令から導出されているリターンアドレスがある場合でもスタックポインタを強制的に初期値に戻すためである。しかしながら、第1の実施形態では、実行後RASの内容を投機フェッチRASにコピーすることにより、乱れた投機フェッチRASを修正し、精度良くリターン命令の分岐予測を実行することができる。
発明の実施の形態2.
次に、本発明の実施の形態2について説明する。本実施形態においても、マイクロプロセッサ等の情報処理装置に形成された分岐予測制御機構について例を示したものであることは、実施の形態1と同様である。分岐予測制御機構の構成要素や動作等、実施の形態1と同様のものは、説明を省略する。図8は、第2の実施形態に係る分岐予測制御機構が備えられる情報処理装置の構成を示すブロック図である。図を参照し、第2の実施形態に係る分岐予測制御機構及びその方法について説明する。
図8に示す分岐予測制御装置210には、予測リターンアドレス生成回路111、投機スタックポインタ112、投機フェッチRAS113、分岐予測アドレスバッファ214、キュウポインタ215、実行後スタックポインタ116、実行後RAS117を有している。
第2の実施形態に係る分岐予測制御装置210も、第1の実施形態と同様、マイクロプロセッサ等の情報処理装置のCPUの内部に構築され、CPUによって制御されている。また、バス等のインターフェースを介して、記憶装置に格納されているデータや命令を内部に取り込んでいることについても第1の実施形態と同様である。
第2の実施形態に係る分岐予測制御装置210は、分岐予測アドレスバッファ214のキュウに識別子を備えることに特徴を有している。つまり、分岐予測アドレスバッファ214のキュウに格納された予測リターンアドレスが命令実行されたか否かを識別するフラグが備えられている。その他の構成要素の機能、動作については、第1の実施形態と同様であるため、説明を省略する。
近年、プロセッサにおける処理内容の複雑化に伴い、命令の処理中に実行ユニット107で実行ハザードやソフトエラー等が生じ、命令再発行が要求される頻度が増加している。その場合、既に処理した分岐予測を再度実施することになり、処理効率が悪くなるという問題が生じている。例えば、第1の実施形態に係る実行後RAS117によって、既に命令実行されたリターンアドレスを識別し、その後の命令から実行を再開する方法も考えられる。しかしながら、命令の完了前に再度、命令再発行が要求された場合、実行後RAS117に同じリターンアドレスが格納されることになり、内容が乱されてしまう。第2の実施形態では、分岐予測アドレスバッファ214にフラグを設けることにより、実行後RAS117の内容を乱さずに既に実行された命令を識別することが可能となる。
第2の実施形態に係る分岐予測アドレスバッファ214は、先に入力したデータが先に出力されるキュウ(待ち行列)構造となっている。そして、キュウポインタ215によって、データの入出力が管理されることについては、分岐予測アドレスバッファ114と同様である。また、格納した予測リターンアドレスを、リターン命令実行時に読み出し、実際に実行されるリターンアドレスと比較し、分岐予測が当たっているかを判断するために使用することについても、第1の実施形態と同様である。
しかし、命令再発行が行われた場合のポインタの動作が第1の実施形態とは異なるため、第2の実施形態に係るキュウポインタ215について詳細に説明する。まず、キュウポインタ215は、ライトポインタWrP、リードポインタRdP、完了ポインタCmを有している。各ポインタは、初期値が"0"であり、最大値が"キュウの数−1"であり、最大値を超えた場合は"0"に戻る。リードポインタWrPは、コール命令フェッチ時及びリターン命令フェッチ時に"+1"される。また、分岐予測ミス時にリードポインタRdPに"1"を加えた値となる。リードポインタRdPは、コール命令実行時及びリターン命令実行時に"+1"される。また、命令再発行時に完了ポインタCmの値と同じになる。完了ポインタCmは、分岐命令完了時に"+1"される。
第2の実施形態では、予測リターンアドレスが格納される分岐予測アドレスバッファ214の各々のキュウに、フラグが付加されている。フラグは、コール命令フェッチ時にライトポインタWrPが示すアドレスのフラグをクリアする。また、リターン命令フェッチ時にリードポインタRdPが示すアドレスのフラグをクリアする。また、このフラグは、コール/リターン命令の実行時にセットされる。これによって、命令再発行要求時に一度実行されたコール命令であるか否かを判断する。そして、分岐予測アドレスバッファ214は、リードポインタRdPが示すアドレスのキュウに格納されたデータを分岐予測アドレスとして出力する。このとき、フラグがセットされた状態であれば、プッシュ/ポップイネーブル信号(図中のPush/Pop)を無効状態にする。
このプッシュ/ポップイネーブル信号の出力によって、実行後RASのポップ/プッシュ処理が制御される。プッシュ/ポップイネーブル信号が出力されない場合は、コール/リターン命令が実行されたとしても、リターンアドレスは実行後RASにポップ/プッシュ処理されない。第2の実施形態では、命令再発行が要求され、分岐予測アドレスバッファ214のキュウにフラグがセットされている場合、実行後RAS117のスタックポインタが更新されないように、ポップ/プッシュ処理のイネーブル信号を無効状態にする。従って、命令再発行が要求された場合、実行後RAS117ではなく、分岐予測アドレスバッファ214のフラグによって、実行される命令を識別する構成となっている。このように、分岐予測アドレスバッファ214は、命令再発行が要求された時、命令が完了するまで、実行されたことを示すフラグを備えたリターンアドレスが実行後RAS117へ格納されることを抑制している。
なお、キュウポインタ215は、命令再発行が要求された時、コール/リターン命令が完了しているポインタに戻す処理が行われる。即ち、キュウポインタ215は、コール/リターン命令の完了を管理する。また、キュウポインタ215は、コール/リターン命令の分岐命令完了通知(図中のBrhInstComp)が命令完了ユニット108より通知されたことも管理する。即ち、キュウポインタ215は、分岐予測アドレスバッファ214に格納されるリターンアドレスを実行させた否かを管理している。
次に、図8を用いて、第1の実施形態に係る分岐予測制御装置の処理動作について具体的に説明する。始めに、アドレス生成回路101では、命令コードが格納されているアドレスを生成し、命令キャッシュ102に出力する。デコーダ103は、命令コードをデコードし、コール命令であると認識すると、アドレス生成回路101にコール命令をフェッチしたことを出力する。アドレス生成回路101は、コール命令フェッチ時において、投機的に予測されたリターンアドレスを生成する。
命令キャッシュ102では、アドレス生成回路101から入力されたアドレスに従って命令コードが選択され、命令バッファ104に読み出される。その後、選択された命令コードに対応する分岐命令が実行される。
一方、命令キャッシュ102にて読み出された命令コードをデコーダ103にてデコードし、分岐予測を開始する。デコードした結果、命令コードがコール命令フェッチの場合、投機スタックポインタ112のスタックポインタをプッシュ処理する。そして、予測リターンアドレス生成回路111にて生成された予測リターンアドレスを、投機フェッチRAS113にスタックする。同時に、予測リターンアドレスは、分岐予測アドレスバッファ214にも格納され、キュウに付加されたフラグは、クリアされる。
デコードした結果、リターン命令フェッチの場合、投機スタックポインタ112のスタックポインタをポップ処理する。そして、投機スタックポインタ112が示す投機フェッチRAS113から予測リターンアドレスを読み出す。読み出された予測リターンアドレスは、後続の命令フェッチアドレスとするため、アドレス生成回路101に送られる。
第2の実施形態では、コール/リターン命令がフェッチされた場合、分岐予測アドレスバッファ214に予測リターンアドレスを格納し、格納されたキュウのフラグをクリアする。即ち、この予測リターンアドレスは、実行されていないことを示している。コール命令フェッチ時の分岐予測アドレスバッファ214に格納されるアドレスは、コール命令実行時には使用しないので任意の値でよい。コール命令実行時に分岐予測アドレスバッファ214で参照するのは、キュウのフラグだけである。
次に、命令キャッシュ102から命令バッファ104を経由した命令コードが、コール命令である場合、命令発行ユニット105から実行ユニット107及び分岐実行ユニット109に命令が発行される。そして、分岐実行ユニット109で計算されたリンクアドレスは、実行後RAS117に送信され、実行後スタックポインタ116の値で示されるスタックに格納される。このリンクアドレスは、レジスタ106にも送信され、格納される。なお、実行後スタックポインタ116は、分岐予測アドレスバッファ214のフラグがクリア状態であれば、ポップ/プッシュ処理のイネーブル信号が有効状態となり、実行後スタックポインタ116のスタックポインタがプッシュ処理される。一方、ポップ/プッシュ処理のイネーブル信号が無効状態である場合は、プッシュ処理は行われない。そして、命令実行後に、分岐予測アドレスバッファ214のコール命令に対応するリターンアドレスを格納していたキュウに付加されているフラグをセットする。その後、分岐実行ユニット109及び実行ユニット107から命令完了ユニット108に命令が完了したことを通知する。更に、命令完了部108は、キュウポインタ215にコール命令が実行されたことを通知する。これによって、キュウポインタ215はプッシュ処理される。
また、命令キャッシュ102から命令バッファ104を経由した命令コードが、リターン命令である場合、分岐実行ユニット109は、正しいリターンアドレスと予測リターンアドレスが一致しているか否か判定する。即ち、レジスタ106に格納されているリターンアドレスと、分岐予測アドレスバッファ214から送出される予測リターンアドレスとを比較する。
一致している場合、分岐予測は正しい。そして、分岐予測アドレスバッファ214のフラグがクリア状態であれば、ポップ/プッシュ処理のイネーブル信号と共に、実行後RAS117の実行後スタックポインタ116をポップ処理する。
一致していない場合、分岐予測ミスとなる。そして、分岐実行ユニット109は、正しいリターンアドレスをアドレス生成回路101に送る。そして、分岐予測アドレスバッファ214のフラグがクリア状態であることを確認し、実行後RAS117のスタックポインタをポップ処理する。その後、このアドレスで命令の再フェッチを行う。命令実行後は、分岐実行ユニット109から命令完了ユニット108に命令が実行されたことを通知する。ここで、分岐予測アドレスバッファ214の予測したリターンアドレスが格納されていたキュウに付加されたフラグは、リターン命令の実行後にセットされる。なお、分岐予測アドレスバッファ214のキュウポインタ215は、分岐予測結果にかかわらず1つ増加させる。更に、命令完了ユニット108は、実行ハザードやソフトエラーが生じていなければキュウポインタ215にリターン命令が実行完了したことを通知する。
なお、分岐予測ミスが生じた場合について更に説明する。分岐予測ミスが生じると、各部にその通知を行い処理する。具体的には、投機スタックポインタ112のスタックポインタの開始位置を再設定する。即ち、投機フェッチRAS113は、分岐予測ミスが生じると実行後RAS117のリターンアドレスを全てコピーする。そして、投機スタックポインタ112のスタックポインタを実行後スタックポインタ116と合わせる。この処理により、分岐予測ミスで生じた投機フェッチRAS113の乱れを修正することが可能となる。分岐予測アドレスバッファ214のキュウポインタ215は、開始位置を初期状態に戻す。命令発行ユニット105には、正しい分岐先命令から発行を再開するため、命令バッファ104にあるポインタを巻き戻す。アドレス生成回路101では、分岐実行ユニット109から送られた正しいリターンアドレスに従って、正しい分岐先からの命令フェッチを再開する。
例えば、実行ユニット107で実行ハザードやソフトエラーが生じた場合、エラー情報が命令完了ユニット108に通知される。回復が可能であれば、命令完了ユニット108は、命令発行ユニット105に命令再発行を要求する。命令再発行要求が通知されると、分岐予測アドレスバッファ214のキュウポインタ215は、コール/リターン命令が完了しているポインタに戻される。また、分岐実行ユニット109でコール/リターン命令が再実行された場合、分岐予測アドレスバッファ214のフラグがセットされているので、ポップ/プッシュ処理のイネーブル信号は無効状態であり、実行後スタックポインタ116は、更新されない。
上述したように、第2の実施形態では、コール/リターン命令が実行された時点で、分岐予測アドレスバッファ214のフラグがセットされる。従って、命令実行後は、フラグがセットされているため、実行後RAS117へのイネーブル信号が無効状態となる。即ち、命令が実行されてから命令が完了するまで、実行後RAS117へのリターンアドレスの書き込みが抑制される構成となっている。
次に、図9を用いて、第2の実施形態における投機フェッチRASと実行後RASの状態について詳細に説明する。なお、説明の簡単化のため、図8も併用する。図9は、基本的なコール/リターン命令のパイプライン動作であり、命令再発行が要求された場合を示した図である。
図9は、上部にコール/リターン命令の流れが示されている。下部には、「投機フェッチRAS」、「実行後RAS」、及び「再発行による書き込み抑止をしない実行後RAS」について例示され、上部の命令の進行状況に応じて変化する格納状態が示されている。なお、「投機フェッチRAS」、「実行後RAS」については、第2の実施形態に係る処理が行われる。「再発行による書き込み抑止をしない実行後RAS」については、説明を判りやすくするため、第2の実施形態の処理を用いない場合のRASを示している。
始めに、(1)の「JAL」(コール命令)が開始される。パイプライン動作の場合、(1)の「JAL」命令の完了(COステージ)を待たずに、(2)以降の命令が次々に投機的に実行される。図9では、(1)の「JAL」命令の完了(COステージ)前に、実行ハザード或いはソフトエラー等が発生し、命令再発行が要求された場合について示されている。更に、(1)の命令再発行の命令完了前に、再々命令発行が要求されている。
ここで、(1)の「JAL」命令に対応する予測リターンアドレスは、(1)のIDステージにおいて、「投機フェッチRAS」にプッシュ処理(a)される。(3)、(4)の「JAL」命令に対応する予測リターンアドレスについても、各々のIDステージ(b、c)において、「投機フェッチRAS」に格納される。
「実行後RAS」には、(1)のEXステージにおいてJAL命令が実行された後、本来のリターンアドレスがプッシュ処理(d)される。この時、図8に示す分岐予測アドレスバッファ214のリターンアドレスを格納していたキュウのフラグをセットし、キュウポインタ215を1つ増加させる。従って、図9に示すように、(1)において命令再発行が要求され、EXステージが再度実行された場合でも、命令が完了するまで(h)、実行後RASへのポップ/プッシュ処理イネーブル信号は無効状態となる。
一方、「再発行による書き込み抑止をしない実行後RAS」の場合、(1)のEXステージにおいて「JAL」命令が実行された後、「実行後RAS」と同様に、本来のリターンアドレスがプッシュ処理(e)される。しかしながら、「再発行による書き込み抑止をしない実行後RAS」を用いる場合、分岐予測アドレスバッファ214からの書き込み抑止(ポップ/プッシュ処理イネーブル信号)が発生しない。従って、(1)において命令再発行が要求された場合、EXステージにおいてリターンアドレスがプッシュ処理(f)される。即ち、(e)にてプッシュ処理されたリターンアドレスと同じリターンアドレスが再度プッシュ処理されることになる。
更に、(1)において命令再発行が再度要求され、EXステージが再々度実行された場合、「再発行による書き込み抑止をしない実行後RAS」に、リターンアドレスがプッシュ処理される(g)。即ち、(e)、(f)にてプッシュ処理されたリターンアドレスと同じリターンアドレスが再々度プッシュ処理され、完了時に乱れた実行後RASとなる。例えば、図9のパイプライン動作に分岐予測ミスが発生し、乱れた実行後RAS(「再発行による書き込み抑止をしない実行後RAS」)の内容を「投機フェッチRAS」にコピーした場合、「投機フェッチRAS」の内容も乱されることになる。
以上のように、第2の実施形態は、分岐予測アドレスバッファ214の各エントリに、一度実行したことを示すフラグを付加する。従って、一度実行したコール/リターン命令は、実行ハザードやソフトエラーによる再発行命令が要求されても、実行後RAS117のポップ/プッシュ処理を抑制する。従って、命令再発行要求時に実行後RASが再実行によって乱されず、RASのみで精度の良いリターン命令の分岐予測が可能となる。
なお、本発明は上記に示す実施形態に限定されるものではない。本発明の範囲において、上記実施形態の各要素を、当業者であれば容易に考えうる内容に変更、追加、変換することが可能である。
第1の実施形態に係る分岐予測制御機構を有す情報処理装置のブロック図である。 第1の実施形態に係る投機フェッチRASの構成と更新方法を示した図である。 第1の実施形態に係る投機フェッチRASの構成と更新方法を示した図である。 第1の実施形態に係る分岐予測制御装置の処理動作を示した図である。 第1の実施形態に係る基本的なコール/リターン命令のパイプライン動作を示した図である。 第1の実施形態に係る基本的なコール/リターン命令のパイプライン動作を示した図である。 第1の実施形態に係る基本的なコール/リターン命令のパイプライン動作を示した図である。 第2の実施形態に係る分岐予測制御機構を有す情報処理装置のブロック図である。 第2の実施形態に係る基本的なコール/リターン命令のパイプライン動作を示した図である。 特許文献1に係る分岐予測制御機構のブロック図である。
符号の説明
100 情報処理装置、
101 アドレス生成回路、 102 命令キャッシュ、
103 デコーダ、 104 命令バッファ、
105 命令発行ユニット、 106 レジスタ、
107 実行ユニット、 108 命令完了ユニット
109 分岐実行ユニット
110 分岐予測制御装置、 111 予測リターンアドレス生成回路、
112 投機スタックポインタ、 113 投機フェッチRAS
114 分岐予測アドレスバッファ、 115 キュウポインタ
116 実行後スタックポインタ、 117 実行後RAS
200 情報処理装置、 210 分岐予測制御装置、
214 分岐予測アドレスバッファ、 215 キュウポインタ
300 命令フェッチ制御装置
301 リターンアドレススタック、 302 ブランチヒストリ、
303 命令アドレスレジスタ、 304 命令アドレス作成部、
305 命令キャッシュ、 306 選択制御部

Claims (11)

  1. 投機的に生成された命令をパイプライン処理する情報処理装置において、投機的な命令の生成に用いられる予測リターンアドレスの生成と、投機的に実行されている命令の整合性の検証に用いられる分岐予測アドレスの生成を行う分岐予測制御装置であって、
    前記情報処理装置において生成されたコール命令に基づき前記予測リターンアドレスを生成する予測リターンアドレス生成手段と、
    前記予測リターンアドレスを格納する第1のリターンアドレス格納手段と、
    前記コール命令の実行結果に応じて生成されるリターンアドレスを格納する第2のリターンアドレス格納手段と、
    前記予測リターンアドレスを格納し、当該予測リターンアドレスを分岐予測アドレスとして送出し、送出した分岐予測アドレスを格納する分岐予測アドレス格納手段とを有し、
    前記分岐予測アドレスと分岐命令あるいはリターン命令の実行後に生成されるリターンアドレスとが異なる場合に前記第2のリターンアドレス格納手段に格納されている内容を前記第1のリターンアドレス格納手段にコピーする分岐予測制御装置。
  2. 前記分岐予測アドレス格納手段は、
    送出する分岐予測アドレスに対応するリターン命令が実行されたことを示す識別子を有することを特徴とする請求項1に記載の分岐予測制御装置。
  3. 前記分岐予測アドレス格納手段は、
    当該分岐予測アドレス格納手段が送出する分岐予測アドレスに対応するリターン命令が再発行することを示す再発行信号を受信した場合に、前記識別子に基づき前記第2のリターンアドレス格納手段に前記リターンアドレスを格納するか否かを制御することを特徴とする請求項1又は2に記載の分岐予測制御装置。
  4. 前記情報処理装置は、前記分岐予測アドレスと分岐命令あるいはリターン命令の実行後に生成されるリターンアドレスとが異なる場合、前記第1のリターンアドレス格納手段にコピーされたリターンアドレスを用いて後続の分岐予測を行う請求項1に記載の分岐予測制御装置。
  5. 前記第1のリターンアドレス格納手段に格納する予測リターンアドレスの指定、及び読み出しを管理する第1のスタックポインタと、
    前記第2のリターンアドレス格納手段に格納するリターンアドレスの指定、及び読み出しを管理する第2のスタックポインタと、
    前記予測アドレス格納手段に格納する予測リターンアドレスの指定、及び読み出しを管理するキュウポインタとを有する請求項1に記載の分岐予測制御装置。
  6. 前記第1のスタックポインタは、
    コール命令がフェッチされ、前記第1のリターンアドレス格納手段に予測リターンアドレスが格納された場合、前記予測リターンアドレスが格納されたエントリを有効なエントリとして指定し、
    リターン命令がフェッチされた時、指定されたエントリに格納されている予測リターンアドレスの読み出しを管理する請求項5に記載の分岐予測制御装置。
  7. 前記第2のスタックポインタは、
    コール命令が実行され、前記第2のリターンアドレス格納手段にリターンアドレスが格納された時、前記リターンアドレスが格納されたエントリを有効なエントリとして指定し、
    リターン命令が実行された時、指定されたエントリに格納されているリターンアドレスの読み出しを管理する請求項5に記載の分岐予測制御装置。
  8. 前記キュウポインタは、
    コール命令が実行され、前記分岐予測アドレス格納手段にリターンアドレスが格納された時、前記予測リターンアドレスが格納されたエントリを有効なエントリとして指定し、
    リターン命令が実行された時、指定されたエントリに格納されている予測リターンアドレスを予測アドレスとして送出することを管理する請求項5に記載の分岐予測制御装置。
  9. 前記キュウポインタは、コール及びリターン命令の実行及び完了を管理することを特徴とする請求項5に記載の分岐予測制御装置。
  10. パイプライン処理を行う情報処理装置において、分岐予測を行う分岐予測方法であって、
    コール命令フェッチ時において、コール命令に対応し、投機的に予測されたリターンアドレスを格納し、
    コール命令実行時において、コール命令に対応するリターンアドレスを格納し、
    投機的に予測したリターンアドレスと、前記リターンアドレスとが一致するか否かを判定し、
    一致した場合、前記予測リターンアドレスを用いて後続の分岐予測を行い、
    不一致の場合、前記リターンアドレスを前記予測リターンアドレスの格納手段にコピーし、コピーされたリターンアドレスを用いて後続の分岐予測を行う分岐予測方法。
  11. 前記予測リターンアドレスが実行されたことを識別し、
    命令再発行が要求された時、識別したリターンアドレスに基づいて、命令を再開することを特徴とする請求項10に記載の分岐予測方法。
JP2007148161A 2007-06-04 2007-06-04 分岐予測制御装置及びその方法 Pending JP2008299795A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2007148161A JP2008299795A (ja) 2007-06-04 2007-06-04 分岐予測制御装置及びその方法
US12/155,361 US8250349B2 (en) 2007-06-04 2008-06-03 Branch prediction control device having return address stack and method of branch prediction

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007148161A JP2008299795A (ja) 2007-06-04 2007-06-04 分岐予測制御装置及びその方法

Publications (1)

Publication Number Publication Date
JP2008299795A true JP2008299795A (ja) 2008-12-11

Family

ID=40089597

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007148161A Pending JP2008299795A (ja) 2007-06-04 2007-06-04 分岐予測制御装置及びその方法

Country Status (2)

Country Link
US (1) US8250349B2 (ja)
JP (1) JP2008299795A (ja)

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012103209A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
WO2012103253A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
WO2012103245A2 (en) 2011-01-27 2012-08-02 Soft Machines Inc. Guest instruction block with near branching and far branching sequence construction to native instruction block
WO2012103367A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest to native block address mappings and management of native code storage
US10338928B2 (en) * 2011-05-20 2019-07-02 Oracle International Corporation Utilizing a stack head register with a call return stack for each instruction fetch
US9354886B2 (en) * 2011-11-28 2016-05-31 Apple Inc. Maintaining the integrity of an execution return address stack
US9395994B2 (en) 2011-12-30 2016-07-19 Intel Corporation Embedded branch prediction unit
WO2013160724A1 (en) * 2012-04-23 2013-10-31 Freescale Semiconductor, Inc. Data processing system and method for operating a data processing system
US9317293B2 (en) 2012-11-28 2016-04-19 Qualcomm Incorporated Establishing a branch target instruction cache (BTIC) entry for subroutine returns to reduce execution pipeline bubbles, and related systems, methods, and computer-readable media
EP2972798B1 (en) 2013-03-15 2020-06-17 Intel Corporation Method and apparatus for guest return address stack emulation supporting speculation
WO2014151652A1 (en) 2013-03-15 2014-09-25 Soft Machines Inc Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor
US9361112B2 (en) * 2013-04-18 2016-06-07 Arm Limited Return address prediction
US9405544B2 (en) 2013-05-14 2016-08-02 Apple Inc. Next fetch predictor return address stack
US9015835B2 (en) * 2013-06-23 2015-04-21 Intel Corporation Systems and methods for procedure return address verification
CN104731718A (zh) * 2013-12-24 2015-06-24 上海芯豪微电子有限公司 一种缓存系统和方法
US10048963B2 (en) 2016-05-23 2018-08-14 International Business Machines Corporation Executing system call vectored instructions in a multi-slice processor
US10747539B1 (en) 2016-11-14 2020-08-18 Apple Inc. Scan-on-fill next fetch target prediction
US10713050B2 (en) 2017-09-19 2020-07-14 International Business Machines Corporation Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions
US10705973B2 (en) 2017-09-19 2020-07-07 International Business Machines Corporation Initializing a data structure for use in predicting table of contents pointer values
US11061575B2 (en) 2017-09-19 2021-07-13 International Business Machines Corporation Read-only table of contents register
US10896030B2 (en) 2017-09-19 2021-01-19 International Business Machines Corporation Code generation relating to providing table of contents pointer values
US10884929B2 (en) 2017-09-19 2021-01-05 International Business Machines Corporation Set table of contents (TOC) register instruction
US10725918B2 (en) 2017-09-19 2020-07-28 International Business Machines Corporation Table of contents cache entry having a pointer for a range of addresses
US10620955B2 (en) * 2017-09-19 2020-04-14 International Business Machines Corporation Predicting a table of contents pointer value responsive to branching to a subroutine
US11301253B2 (en) * 2018-08-10 2022-04-12 Arm Limited Branch prediction structure indexed based on return address popped from a call-return stack
CN117539543B (zh) * 2024-01-10 2024-05-14 北京中科昊芯科技有限公司 一种更新返回地址栈中数据的装置及应用产品

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63147230A (ja) * 1986-12-10 1988-06-20 Nec Corp 命令の先取りを行なうデ−タ処理装置
US5822576A (en) * 1997-03-26 1998-10-13 International Business Machines Corporation Branch history table with branch pattern field
US5964868A (en) * 1996-05-15 1999-10-12 Intel Corporation Method and apparatus for implementing a speculative return stack buffer
JP2000172507A (ja) * 1998-12-10 2000-06-23 Fujitsu Ltd 命令フェッチ制御装置
JP2006040173A (ja) * 2004-07-29 2006-02-09 Fujitsu Ltd 分岐予測装置および分岐予測方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6151671A (en) * 1998-02-20 2000-11-21 Intel Corporation System and method of maintaining and utilizing multiple return stack buffers
US6253315B1 (en) * 1998-08-06 2001-06-26 Intel Corporation Return address predictor that uses branch instructions to track a last valid return address
US6886093B2 (en) * 2001-05-04 2005-04-26 Ip-First, Llc Speculative hybrid branch direction predictor
US6877085B2 (en) * 2001-11-30 2005-04-05 Broadcom Corporation Mechanism for processing speclative LL and SC instructions in a pipelined processor
US6898699B2 (en) * 2001-12-21 2005-05-24 Intel Corporation Return address stack including speculative return address buffer with back pointers
US7237098B2 (en) * 2003-09-08 2007-06-26 Ip-First, Llc Apparatus and method for selectively overriding return stack prediction in response to detection of non-standard return sequence

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63147230A (ja) * 1986-12-10 1988-06-20 Nec Corp 命令の先取りを行なうデ−タ処理装置
US5964868A (en) * 1996-05-15 1999-10-12 Intel Corporation Method and apparatus for implementing a speculative return stack buffer
US5822576A (en) * 1997-03-26 1998-10-13 International Business Machines Corporation Branch history table with branch pattern field
JP2000172507A (ja) * 1998-12-10 2000-06-23 Fujitsu Ltd 命令フェッチ制御装置
JP2006040173A (ja) * 2004-07-29 2006-02-09 Fujitsu Ltd 分岐予測装置および分岐予測方法

Also Published As

Publication number Publication date
US8250349B2 (en) 2012-08-21
US20080301420A1 (en) 2008-12-04

Similar Documents

Publication Publication Date Title
JP2008299795A (ja) 分岐予測制御装置及びその方法
JP5917616B2 (ja) 事前通知技術を用いる、プログラムのシーケンシャルフローを変更するための方法および装置
JP5889986B2 (ja) 実行された命令の結果を選択的にコミットするためのシステムおよび方法
JP4856100B2 (ja) 非アラインドメモリアクセス予測
WO2008029450A1 (fr) Dispositif de traitement d'informations comprenant un mécanisme de correction d'erreur de prédiction d'embranchement
US6301655B1 (en) Exception processing in asynchronous processor
JP2004145903A (ja) スーパースケーラマイクロプロセサ
JP2008530714A5 (ja)
US8683179B2 (en) Method and apparatus for performing store-to-load forwarding from an interlocking store using an enhanced load/store unit in a processor
US7093111B2 (en) Recovery of global history vector in the event of a non-branch flush
JP2005309762A (ja) スレッド切替制御装置。
JP5154763B2 (ja) 複数の命令セットデータ処理システム内の条件付分岐命令エンコーディング
JP3800533B2 (ja) プログラムカウンタ制御方法及びプロセッサ
JP3839755B2 (ja) 命令制御方法及びプロセッサ
JP3683439B2 (ja) 分岐予測を抑止する情報処理装置および方法
US20100100709A1 (en) Instruction control apparatus and instruction control method
JP7409208B2 (ja) 演算処理装置
WO2004068337A1 (ja) 情報処理装置
JP2004038338A (ja) 分岐予測機構を有する情報処理装置
JP2001100994A (ja) モードを変更する分岐命令を制御する命令処理装置および方法
JP3852782B2 (ja) 分岐予測機構を持つ命令制御装置及びその制御方法
JP5093237B2 (ja) 命令処理装置
CN111124499A (zh) 一种兼容多指令系统的处理器及其运行方法
JP3971780B2 (ja) 命令制御方法
JP2007317083A (ja) マイクロプロセッサおよびパイプライン制御方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100512

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120130

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120207

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20120605