IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

<>
  • 特開-演算処理装置および演算処理方法 図1
  • 特開-演算処理装置および演算処理方法 図2
  • 特開-演算処理装置および演算処理方法 図3
  • 特開-演算処理装置および演算処理方法 図4
  • 特開-演算処理装置および演算処理方法 図5
  • 特開-演算処理装置および演算処理方法 図6
  • 特開-演算処理装置および演算処理方法 図7
  • 特開-演算処理装置および演算処理方法 図8
  • 特開-演算処理装置および演算処理方法 図9
  • 特開-演算処理装置および演算処理方法 図10
  • 特開-演算処理装置および演算処理方法 図11
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024055031
(43)【公開日】2024-04-18
(54)【発明の名称】演算処理装置および演算処理方法
(51)【国際特許分類】
   G06F 9/38 20180101AFI20240411BHJP
【FI】
G06F9/38 330F
【審査請求】未請求
【請求項の数】6
【出願形態】OL
(21)【出願番号】P 2022161603
(22)【出願日】2022-10-06
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100107515
【弁理士】
【氏名又は名称】廣田 浩一
(72)【発明者】
【氏名】岡崎 亮平
【テーマコード(参考)】
5B013
【Fターム(参考)】
5B013BB02
5B013BB12
(57)【要約】
【課題】条件分岐命令の予測精度を低下させることなく命令再フェッチ要求をアウトオブオーダで出力する。
【解決手段】分岐予測部は、各条件分岐命令の連続する成立回数の予測値と各条件分岐命令の現在の成立回数と各条件分岐命令の残りの成立回数の予測値とを保持する予測保持部を有する。分岐命令発行スケジューラは、完了待ちの分岐命令を保持する分岐命令完了キューの先頭以外に保持された条件分岐命令の分岐予測ミスを判定した場合、命令再フェッチ要求を出力し、分岐予測ミスを判定した位置から先頭までの間に保持された条件分岐命令に対応してリペア要求を分岐予測部に出力する。分岐予測部は、上記命令再フェッチ要求に基づいて、残りの成立回数の予測値を、連続する成立回数の予測値と現在の成立回数との差に設定し、さらに、リペア要求に対応する条件分岐命令の数を残りの成立回数の予測値から減じる。
【選択図】図1
【特許請求の範囲】
【請求項1】
命令をパイプライン処理により実行する演算処理装置であって、
各条件分岐命令の連続する成立回数の予測値と、各条件分岐命令の現在の成立回数と、各条件分岐命令の残りの成立回数の予測値とを含む予測情報を保持する予測保持部を有し、前記予測値に基づいて各条件分岐命令の連続する成立回数を予測する分岐予測部と、
前記分岐予測部による予測結果または命令再フェッチ要求に含まれるアドレスに基づいて次の命令のフェッチアドレスを生成するアドレス生成部と、
前記フェッチアドレスに基づいてフェッチされた分岐命令を順次保持する分岐命令完了キューを有し、前記分岐命令完了キューに保持された分岐命令をインオーダで完了させ、条件分岐命令の実行結果に基づいて前記分岐予測部による分岐予測ミスを判定した場合に前記命令再フェッチ要求を出力し、前記分岐命令完了キューの先頭以外に保持された条件分岐命令の分岐予測ミスを判定した場合、前記分岐命令完了キューにおいて分岐予測ミスを判定した位置から前記先頭までの間に保持された条件分岐命令に対応してリペア要求を前記分岐予測部に出力する分岐命令発行スケジューラと、を有し、
前記分岐予測部は、前記分岐命令完了キューの先頭以外からの前記命令再フェッチ要求に基づいて前記残りの成立回数の予測値を前記連続する成立回数の予測値と前記現在の成立回数との差に設定し、さらに、前記リペア要求に対応する条件分岐命令の数を前記残りの成立回数の予測値から減じる
演算処理装置。
【請求項2】
前記分岐命令発行スケジューラは、分岐予測ミスを判定した複数の条件分岐命令が前記分岐命令完了キューに存在する場合、前記分岐命令完了キューの先頭に最も近くの分岐予測ミスを判定した条件分岐命令の前記命令再フェッチ要求を出力し、前記分岐予測ミスを判定した条件分岐命令より前記分岐命令完了キューの後ろに保持された分岐命令を無効にする
請求項1に記載の演算処理装置。
【請求項3】
前記分岐命令発行スケジューラは、前記リペア要求を前記分岐予測部に出力後、前記リペア要求に基づいて前記残りの成立回数の予測値が更新される間、前記アドレス生成部による前記フェッチアドレスの生成を抑止させる
請求項1または請求項2に記載の演算処理装置。
【請求項4】
前記予測保持部は、さらに、各条件分岐命令の連続する不成立回数の予測値と、各条件分岐命令の現在の不成立回数と、各条件分岐命令の残りの不成立回数の予測値とを保持することで、各条件分岐命令の連続する不成立回数を予測可能であり、
前記分岐予測部は、前記分岐命令完了キューの前記先頭以外からの前記命令再フェッチ要求に基づいて前記残りの不成立回数の予測値を前記連続する不成立回数の予測値と前記現在の不成立回数との差に設定し、さらに、前記リペア要求に対応する条件分岐命令の数を前記残りの不成立回数の予測値から減じる
請求項1または請求項2に記載の演算処理装置。
【請求項5】
前記分岐予測部は、前記リペア要求を受けたときに前記残りの成立回数の予測値が"0"でない場合、前記残りの成立回数の予測値を減じ、前記リペア要求を受けたときに前記残りの成立回数の予測値が"0"の場合、前記連続する成立回数の予測値を前記残りの成立回数の予測値に設定する
請求項1または請求項2に記載の演算処理装置。
【請求項6】
分岐予測部とアドレス生成部と分岐命令発行スケジューラとを有し、命令をパイプライン処理により実行する演算処理装置の演算処理方法であって、
前記分岐予測部は、各条件分岐命令の連続する成立回数の予測値と、各条件分岐命令の現在の成立回数と、各条件分岐命令の残りの成立回数の予測値とを含む予測情報を保持する予測保持部を有し、前記予測値に基づいて各条件分岐命令の連続する成立回数を予測し、
前記アドレス生成部は、前記分岐予測部による予測結果または命令再フェッチ要求に含まれるアドレスに基づいて次の命令のフェッチアドレスを生成し、
前記分岐命令発行スケジューラは、前記フェッチアドレスに基づいてフェッチされた分岐命令を順次保持する分岐命令完了キューを有し、前記分岐命令完了キューに保持された分岐命令をインオーダで完了させ、条件分岐命令の実行結果に基づいて前記分岐予測部による分岐予測ミスを判定した場合に前記命令再フェッチ要求を出力し、前記分岐命令完了キューの先頭以外に保持された条件分岐命令の分岐予測ミスを判定した場合、前記分岐命令完了キューにおいて分岐予測ミスを判定した位置から前記先頭までの間に保持された条件分岐命令に対応してリペア要求を前記分岐予測部に出力し、
前記分岐予測部は、前記分岐命令完了キューの先頭以外からの前記命令再フェッチ要求に基づいて前記残りの成立回数の予測値を前記連続する成立回数の予測値と前記現在の成立回数との差に設定し、さらに、前記リペア要求に対応する条件分岐命令の数を前記残りの成立回数の予測値から減じる
演算処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、演算処理装置および演算処理方法に関する。
【背景技術】
【0002】
CPU等の演算処理装置は、命令を分割して実行するパイプラインを有し、命令を並列に実行可能にすることで、処理性能を向上している。さらに、この種の演算処理装置に、条件分岐命令の分岐の有無を予測する分岐予測機構が設けられる場合、処理性能はさらに向上される。
【0003】
例えば、アドレスが同じ条件分岐命令毎に、分岐が連続して成立する回数と分岐が連続して不成立する回数とをパターンとして記憶し、条件分岐命令が成立するか不成立であるかを予測する分岐予測手法が知られている(例えば、特許文献1、2参照)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2015-036888号公報
【特許文献2】国際公開第2008/029450号
【発明の概要】
【発明が解決しようとする課題】
【0005】
例えば、分岐命令用のリザベーションステーションは、分岐命令の処理をインオーダで実施し、分岐命令の情報を保持するキューの先頭から分岐命令の完了報告を順次実施する。例えば、分岐命令用のリザベーションステーションは、条件分岐命令の実行結果により分岐予測ミスを判定した場合、判定した条件分岐命令がキューの先頭になるまで待った後、分岐予測ミスに対応して命令再フェッチ要求を出力する。
【0006】
このように、命令再フェッチ要求をインオーダで出力する場合、分岐予測ミスを判定した条件分岐命令がキューの先頭になるまで命令再フェッチ要求に対するフェッチ処理を実施できない。この場合、命令再フェッチ要求に対するフェッチ処理を実施する命令フェッチパイプラインの処理時間を隠すことができず、演算処理装置の処理性能は低下する。
【0007】
予測ミスが確定した条件分岐命令がキューの先頭になるまで待たずに命令再フェッチ要求をアウトオブオーダで出力できる場合、命令再フェッチ要求に対するフェッチ処理を実施する命令フェッチパイプラインの処理時間を隠すことができる。しかしながら、条件分岐命令の予測精度を低下させることなく命令再フェッチ要求をアウトオブオーダで出力する手法が提案されていない。
【0008】
1つの側面では、本発明は、条件分岐命令の予測精度を低下させることなく命令再フェッチ要求をアウトオブオーダで出力することを目的とする。
【課題を解決するための手段】
【0009】
一つの観点によれば演算処理装置は、命令をパイプライン処理により実行する演算処理装置であって、各条件分岐命令の連続する成立回数の予測値と、各条件分岐命令の現在の成立回数と、各条件分岐命令の残りの成立回数の予測値とを含む予測情報を保持する予測保持部を有し、前記予測値に基づいて各条件分岐命令の連続する成立回数を予測する分岐予測部と、前記分岐予測部による予測結果または命令再フェッチ要求に含まれるアドレスに基づいて次の命令のフェッチアドレスを生成するアドレス生成部と、前記フェッチアドレスに基づいてフェッチされた分岐命令を順次保持する分岐命令完了キューを有し、前記分岐命令完了キューに保持された分岐命令をインオーダで完了させ、条件分岐命令の実行結果に基づいて前記分岐予測部による分岐予測ミスを判定した場合に前記命令再フェッチ要求を出力し、前記分岐命令完了キューの先頭以外に保持された条件分岐命令の分岐予測ミスを判定した場合、前記分岐命令完了キューにおいて分岐予測ミスを判定した位置から前記先頭までの間に保持された条件分岐命令に対応してリペア要求を前記分岐予測部に出力する分岐命令発行スケジューラと、を有し、前記分岐予測部は、前記分岐命令完了キューの先頭以外からの前記命令再フェッチ要求に基づいて前記残りの成立回数の予測値を前記連続する成立回数の予測値と前記現在の成立回数との差に設定し、さらに、前記リペア要求に対応する条件分岐命令の数を前記残りの成立回数の予測値から減じる。
【発明の効果】
【0010】
条件分岐命令の予測精度を低下させることなく命令再フェッチ要求をアウトオブオーダで出力することができる。
【図面の簡単な説明】
【0011】
図1】一実施形態における演算処理装置の一例を示すブロック図である。
図2図1の演算処理装置において分岐命令の実行時の動作の一例を示す説明図である。
図3図1の分岐命令発行スケジューラがインオーダまたはアウトオブオーダで命令再フェッチ要求を出力する例を示す説明図である。
図4】条件分岐命令を含む命令ループの例と、命令ループが処理される際の分岐命令発行スケジューラの動作の例とを示す説明図である。
図5】別の実施形態における演算処理装置の一例を示すブロック図である。
図6図5のRSBRの一例を示すブロック図である。
図7図5の分岐予測機構の一例を示すブロック図である。
図8図7のLPTの現在カウント値の更新動作の一例を示す説明図である。
図9図7のRSBR、LPT部および命令フェッチアドレス生成部の動作の一例を示すフロー図である。
図10図9の続きを示すフロー図である。
図11図1の演算処理装置または図5の演算処理装置を含む情報処理システムの一例を示すブロック図である。
【発明を実施するための形態】
【0012】
以下、図面を参照して、実施形態が説明される。以下では、信号が伝達される信号線には、信号名と同じ符号が使用される。特に限定されないが、以下で説明する演算処理装置は、スーパースカラ方式のプロセッサであり、パイプライン処理により命令を並列に実施する。なお、以下で説明する演算処理装置は、スカラー方式のプロセッサでもよい。
【0013】
図1は、一実施形態における演算処理装置の一例を示す。図1に示す演算処理装置100は、アドレス生成部1、メモリ2、分岐命令発行スケジューラ3および分岐予測部5を有する。
【0014】
演算処理装置100は、命令を保持する命令バッファ部、命令をデコードする命令デコード部、演算命令の出力をスケジューリングする演算命令発行スケジューラ、演算命令を実行する演算器およびオペランドデータを保持するレジスタファイル等を有してもよい。
【0015】
アドレス生成部1は、プログラムカウンタPCの値または分岐予測部5から出力されるアドレスをメモリ2に出力し、メモリ2から命令をフェッチする。メモリ2からフェッチされた命令は、分岐命令発行スケジューラ3、分岐予測部5および図示しない演算命令発行スケジューラ等に供給される。例えば、アドレス生成部1は、分岐命令発行スケジューラ130から通知される命令再フェッチ要求(再命令フェッチアドレスを含む)に基づいて分岐予測ミスを検出する。この場合、アドレス生成部1は、再命令フェッチアドレスを使用して命令をフェッチする。アドレス生成部1は、各種のエラーの発生により、命令の実行をキャンセルするためにパイプラインをクリアする場合、プログラムカウンタPCの値を使用して命令をフェッチする。
【0016】
分岐命令発行スケジューラ3は、FIFO(First-In First-Out)タイプの分岐命令完了キュー4を有する。分岐命令完了キュー4は、アドレス生成部1がフェッチした分岐命令(条件分岐命令または無条件分岐命令)の情報を保持する複数のエントリを有する。分岐命令完了キュー4において、図示しない出力ポインタで示されるエントリは、TOQ(Top Of Queue)とも称される。
【0017】
分岐命令完了キュー4には、TOQのエントリから図示しない入力ポインタで示されるエントリまで、未完了の分岐命令の情報がプログラムの記述順に保持される。処理が完了した分岐命令の情報は、TOQになるまで待たされた後、TOQから取り出される。すなわち、分岐命令発行スケジューラ3による分岐命令の完了処理はインオーダで行われる。以下では、分岐命令完了キュー4に保持される分岐命令の情報は、単に分岐命令とも称される。
【0018】
分岐命令発行スケジューラ3は、TOQに保持している分岐命令の成立(taken)または不成立(not-taken)が、演算結果等により確定した場合、分岐予測部5に完了報告を出力する。分岐命令発行スケジューラ3は、完了していない条件分岐命令の分岐予測ミスの発生を検出した場合、アドレス生成部1および分岐予測部5に命令再フェッチ要求を出力する。命令再フェッチ要求は、TOQにある条件分岐命令に対応して出力されるだけでなく、TOQ以外にある条件分岐命令に対応しても出力される。
【0019】
分岐命令発行スケジューラ3は、命令再フェッチ要求を出力したエントリより後ろのエントリ(TOQと反対側のエントリ)に保持された分岐命令を無効にする。分岐命令発行スケジューラ3は、TOQ以外のエントリから命令再フェッチ要求を出力する場合、TOQから分岐予測ミスを検出したエントリまでの間に保持された条件分岐命令に対応してリペア要求を分岐予測部5に出力する。
【0020】
分岐予測部5は、予測保持部6を有する。分岐予測部5は、予測保持部6に保持された情報を使用して、アドレス生成部1が生成したアドレスに基づいて、条件分岐命令による分岐が成立するか否かを予測し、分岐の成立を予測した場合、分岐先を示すアドレスをアドレス生成部1に出力する。
【0021】
予測保持部6は、1つの条件分岐命令の情報をそれぞれ保持する複数のエントリを有する。各エントリは、条件分岐命令の連続する成立回数の予測値と、条件分岐命令の現在の成立回数と、条件分岐命令の残りの成立回数の予測値とを含む予測情報を保持する。そして、分岐予測部5は、予測保持部6を使用して、条件分岐命令の連続する成立回数と、成立から不成立への切り替わりとを予測する。
【0022】
なお、予測保持部6には、条件分岐命令のアドレスの一部のみが保持され、残りのアドレスは、予測保持部6のエントリを識別するインデックスとして使用されてもよい。また、連続する不成立回数を予測する場合、予測保持部6には、現在の成立回数、連続する成立回数の予測値および残りの成立回数の予測値の代わりに、現在の不成立回数、連続する不成立回数の予測値および残りの不成立回数の予測値が保持される。
【0023】
現在の成立回数は、条件分岐命令が不成立になった後に連続した成立回数を示し、分岐命令発行スケジューラ3からの条件分岐命令の成立の完了報告毎にインクリメントされる。現在の成立回数は、条件分岐命令の完了報告が不成立であるときに"0"にリセットされる。なお、条件分岐命令の連続する不成立回数と、不成立から成立への切り替わりとを予測する場合、現在の不成立回数は、条件分岐命令の不成立の完了報告毎にインクリメントされ、条件分岐命令の完了報告が成立であるときに"0"にリセットされる。
【0024】
連続する成立回数の予測値は、条件分岐命令による分岐が連続して成立する残りの回数の予測値を示す。例えば、連続する成立回数の予測値が"30"の場合、分岐予測部5は、残りの成立回数の予測値が"0"から"29"の場合、次の条件分岐命令が成立すると予測する。分岐予測部5は、残りの成立回数の予測値が"30"の場合、次の条件分岐命令が不成立すると予測する。
【0025】
分岐予測部5は、分岐予測を開始する前に、条件分岐命令毎の完了報告に基づいて、条件分岐命令が不成立になるまでの連続する成立回数(例えば、ループ回数)を取得する。分岐予測部5は、例えば、連続成立回数が2回連続して同じになった場合、連続成立回数を連続する成立回数の予測値に設定し、連続する成立回数の予測値を設定した条件分岐命令の分岐予測を開始する。
【0026】
なお、連続する不成立回数を予測する場合に連続する成立回数の予測値の代わりに使用される連続する不成立回数の予測値は、条件分岐命令による分岐が連続して不成立する残りの回数の予測値を示す。例えば、連続する不成立回数の予測値が"30"の場合、分岐予測部5は、残りの不成立回数の予測値が"0"から"29"の場合、次の条件分岐命令が不成立すると予測する。分岐予測部5は、残りの不成立回数の予測値が"30"の場合、次の条件分岐命令が成立すると予測する。
【0027】
残りの成立回数の予測値は、条件分岐命令のフェッチ時、命令再フェッチ要求の発生時、またはリペア要求の発生時に更新される。分岐予測部5は、条件分岐命令のフェッチアドレスの受信に基づいて、対応するエントリにおける残りの成立回数の予測値が"0"でない場合、残りの成立回数の予測値をデクリメントする。分岐予測部5は、条件分岐命令のフェッチアドレスの受信に基づいて、対応するエントリにおける残りの成立回数の予測値が"0"の場合、連続する成立回数の予測値を残りの成立回数の予測値に設定する。そして、分岐予測部5は、命令フェッチ時に更新される連続する成立回数の予測値を使用して条件分岐命令の成立または不成立を予測する。
【0028】
分岐予測部5は、分岐命令完了キュー4のTOQ以外に保持された条件分岐命令に対する命令再フェッチ要求を受けた場合、命令ループ内で未完了の条件分岐命令を保持するエントリの連続する成立回数の予測値から現在の成立回数を減じた値を残りの成立回数の予測値に設定する。命令ループについては、図4で説明される。さらに、分岐予測部5は、分岐命令発行スケジューラ3からのリペア要求に応じて、命令ループ内の未完了の条件分岐命令毎に残りの成立回数の予測値をデクリメントする。なお、分岐予測部5は、リペア要求の処理において、命令ループ内の未完了の条件分岐命令の残りの成立回数の予測値が"0"の場合、連続する成立回数の予測値を残りの成立回数の予測値に設定する。
【0029】
これにより、命令再フェッチ要求がTOQ以外のエントリからアウトオブオーダで出力される場合にも、未完了の条件分岐命令の残りの成立回数の予測値を適切な値に更新することができる。したがって、分岐予測ミスが発生した条件分岐命令のTOQ以外での命令再フェッチ後に、命令ループ内にある条件分岐命令の残りの成立回数の予測値の予測精度が低下することを抑制することができる。TOQ以外のエントリに対応して命令再フェッチ要求が出力される場合の残りの成立回数の予測値の更新の例は、図3および図4で説明される。
【0030】
なお、分岐予測部5は、連続する不成立回数を予測する場合で、TOQ以外に保持された条件分岐命令に対する命令再フェッチ要求を受けた場合、未完了の条件分岐命令について、連続する不成立回数の予測値から現在の不成立回数を減じた値を残りの不成立回数の予測値に設定する。但し、分岐予測部5は、未完了の条件分岐命令の残りの不成立回数の予測値が"0"の場合、連続する不成立回数の予測値を残りの不成立回数の予測値に設定する。
【0031】
図2は、図1の演算処理装置100において分岐命令の実行時の動作の一例を示す。分岐命令発行スケジューラ3は、分岐命令の完了処理において、分岐命令完了キュー4のエントリのいずれかに保持された分岐命令の処理が確定した場合、分岐命令を保持するエントリがTOQになるまで待ち、分岐命令の完了処理を実施する。図2に示す例では、分岐命令完了キュー4のTOQに保持された分岐命令の処理が確定する前に、分岐命令完了キュー4の2番目のエントリに保持された条件分岐命令の分岐予測ミスが検出される。
【0032】
図2の上側では、分岐命令発行スケジューラ3は、分岐命令完了キュー4のエントリのいずれかに保持された分岐命令の分岐予測ミスを検出した場合、分岐命令を保持するエントリがTOQになるまで待つことなく、命令再フェッチ要求を出力する。そして、分岐命令を保持するエントリがTOQになったときに分岐命令の完了処理を実施する。
【0033】
これにより、分岐予測ミスした条件分岐命令を保持するエントリがTOQになるまで待つことなく命令再フェッチ要求に対する命令フェッチを実施し、フェッチした命令をデコードすることができる。この結果、命令再フェッチ要求に対する命令フェッチパイプラインの処理を隠すことができ、パイプラインの処理効率を向上することができる。
【0034】
演算処理装置100は、分岐予測ミスが確定した場合、正しいアドレスでの条件分岐命令の命令再フェッチ要求を分岐命令発行スケジューラ3からアドレス生成部1に出力し、分岐予測ミスに対応して実施したパイプラインのステージをクリアする。
【0035】
図2の下側のかぎ括弧内は、命令の再フェッチをプログラム内の命令の記述順にしたがってインオーダで実施する他の演算処理装置の動作を示す。例えば、他の演算処理装置は、分岐予測ミスが確定した場合、分岐予測ミスした条件分岐命令を保持するエントリがTOQになった後に命令再フェッチ要求を出力する。
【0036】
この場合、命令再フェッチ要求に対する命令フェッチのタイミングは、図2の上側に示すタイミングより遅れ、分岐予測ミスが確定してから命令再フェッチ要求を出力するまでの待ち時間分の性能低下が発生する。
【0037】
図3は、図1の分岐命令発行スケジューラ3がインオーダまたはアウトオブオーダで命令再フェッチ要求を出力する例を示す。インオーダとは、命令再フェッチ要求が分岐命令完了キュー4のTOQに保持された条件分岐命令に対応して出力されることを示す。アウトオブオーダとは、命令再フェッチ要求が分岐命令完了キュー4のTOQ以外のエントリに保持された条件分岐命令に対応して出力されることを示す。斜線で示すエントリは、命令再フェッチ要求を出力する条件分岐命令を保持していることを示す。網掛けで示すエントリは、完了待ちの条件分岐命令を保持していることを示す。
【0038】
TOQに保持された条件分岐命令の命令再フェッチ要求が出力される図3(A)では、命令再フェッチ要求の対象の条件分岐命令より前の条件分岐命令は、予測保持部6に反映済みである。これにより、残りの成立回数の予測値を適切に更新することができ、予測精度を低下を抑制することができる。
【0039】
一方、TOQ以外に保持された条件分岐命令の命令再フェッチ要求が出力される図3(B)では、命令再フェッチ要求の対象の条件分岐命令より前(TOQ側)のエントリの少なくともいずれかは、完了待ちの条件分岐命令を保持している場合がある。そして、完了待ちの条件分岐命令に対応する予測保持部6の情報は更新されていない。
【0040】
そこで、上述したように、命令発行スケジューラ3は、完了待ちの条件分岐命令に対応するリペア要求を出力し、分岐予測部5は、リペア要求に基づいて、完了待ちの条件分岐命令に対応する予測保持部6の残りの成立回数の予測値を更新する。
【0041】
なお、図3(A)および図3(B)において、命令再フェッチ要求の対象の条件分岐命令を保持するエントリより後(TOQと反対側)のエントリが保持する分岐命令は無効にされる。
【0042】
図4は、条件分岐命令を含む命令ループの例と、命令ループが処理される際の分岐命令発行スケジューラ3の動作の例とを示す。図4では、命令列に示す条件分岐命令A、Bのみが実行されるとする。
【0043】
また、図4では、条件分岐命令Bは、予測保持部6のエントリに登録されていないか、条件分岐命令Bに対応する予測保持部6のエントリが有効でないとする。ここで、条件分岐命令Bが一度も完了していない場合、条件分岐命令Bは、予測保持部6に登録されていない。また、条件分岐命令Bの連続成立回数が複数回繰り返されていない場合、予測保持部6に保持されている条件分岐命令Bの情報は有効でない。
【0044】
図4に示す命令列は、条件分岐命令Aによる命令ループを有し、条件分岐命令Aによる命令ループ中にフォワード方向の所定数の命令をスキップするかどうかを判定する条件分岐命令Bを有する。このような命令ループ内の命令列を処理するとき、分岐命令発行スケジューラ3の分岐命令完了キュー4には、条件分岐命令A、Bが交互に保持される。
【0045】
条件分岐命令B(5)において、分岐予測部5による不成立の予測に対して、条件分岐命令B(5)の実行結果は成立であり、分岐予測ミスが発生する。命令再フェッチ要求が出力される直前で完了した条件分岐命令Aにおいて、完了ベースでの残りの成立回数は10回であるとする。ここで、完了ベースでの残りの成立回数は、連続する成立回数の予測値と現在の成立回数との差で示される。
【0046】
命令再フェッチ要求が出力される時点で、条件分岐命令A(2)の完了ベースでの残りの成立回数は9回であり、条件分岐命令A(4)の完了ベースでの残りの成立回数は8回である。完了ベースでの残りの成立回数は、通常、フェッチベースで更新される残りの成立回数の予測値よりも大きい。
【0047】
上述したように、アドレス生成部が命令再フェッチ要求に基づいて、条件分岐命令B(5)の飛び先から命令再フェッチを始める時点で、条件分岐命令Aの完了ベースでの残りの成立回数は10回である。しかしながら、TOQと条件分岐命令B(5)を保持するエントリとの間には条件分岐命令A(2)と条件分岐命令A(4)との未完了のエントリが存在している。このため、条件分岐命令Aの分岐予測精度を下げないために、条件分岐命令Bの命令再フェッチ要求に基づく予測保持部6の更新時に、条件分岐命令Aの残りの成立回数の予測値は8回にされることが好ましい。
【0048】
条件分岐命令A(2)および条件分岐命令A(4)無視して残りの成立回数の予測値を10回にする場合、残りの成立回数の予測値は、本来更新すべき回数より2回多くなる。この場合、分岐予測部5は、不成立と予測すべきところ成立と予測するため、分岐予測ミスが発生する。
【0049】
分岐予測ミスの頻度を下げ、予測精度の低下を抑制するために、分岐命令発行スケジューラ3は、TOQ以外のエントリで分岐予測ミスが発生し、命令再フェッチ要求を出力する場合、リペア要求を分岐予測部5に出力し、残りの成立回数の予測値を修正させる。例えば、リペア要求は、TOBと、命令再フェッチ要求の対象の条件分岐命令を保持するエントリとの間のエントリに保持される未完了の条件分岐命令毎に、条件分岐命令を識別可能に出力される。
【0050】
分岐予測部5は、リペア要求に対応する条件分岐命令の情報を保持する予測保持部6のエントリが有効な場合、残りの成立回数の予測値を更新する。これにより、TOQ以外のエントリに保持される条件分岐命令の命令再フェッチ要求が出力される場合にも、分岐予測部5による分岐予測精度の低下を抑制することができる。
【0051】
なお、TOBと、命令再フェッチ要求の対象の条件分岐命令を保持するエントリとの間に、アドレスが異なる複数の条件分岐命令が存在する場合がある。この場合、分岐命令発行スケジューラ3は、アドレスが異なる条件分岐命令毎に、条件分岐命令の数に対応するリペア要求を出力する。
【0052】
以上、この実施形態では、命令再フェッチ要求がTOQ以外のエントリからアウトオブオーダで出力される場合にも、未完了の条件分岐命令の残りの成立回数の予測値を適切な値に更新することができる。したがって、分岐予測ミスが発生した条件分岐命令のTOQ以外での命令再フェッチ後に、命令ループ内にある条件分岐命令の残りの成立回数の予測値の予測精度が低下することを抑制することができる。この結果、パイプラインの処理効率を向上することができ、演算処理装置100の処理性能を向上することができる。
【0053】
演算処理装置100の処理性能の向上により、演算処理装置100が搭載されるサーバ等のシステムの処理性能を向上することができ、科学技術計算、ディープラーニングまたは各種シミュレーション等に掛かる時間を短縮することができる。
【0054】
分岐命令完了キュー4において分岐予測ミスした条件分岐命令を保持するエントリがTOQになるまでの待つことなく命令再フェッチ要求に対する命令フェッチを実施し、フェッチした命令をデコードすることができる。この結果、命令再フェッチ要求に対する命令フェッチパイプライン処理を隠すことができ、パイプラインの処理効率を向上することができる。
【0055】
分岐予測部5は、分岐命令発行スケジューラ3からのリペア要求に対応する未完了の条件分岐命令に対応するエントリの残りの成立回数の予測値をデクリメントし、または、連続する成立回数の予測値に設定する。これにより、命令再フェッチ要求がTOQ以外のエントリからアウトオブオーダで出力される場合にも、未完了の条件分岐命令の残りの成立回数の予測値を適切な値に更新することができる。したがって、分岐予測ミスが発生した条件分岐命令の命令再フェッチ後に、条件分岐命令の残りの成立回数の予測値の予測精度が低下することを抑制することができる。
【0056】
予測保持部6には、現在の成立回数、連続する成立回数の予測値および残りの成立回数の予測値の代わりに、現在の不成立回数、過去の不成立回数および残りの不成立回数の予測値が保持可能である。これにより、予測保持部6を、条件分岐命令の連続する成立回数の予測だけでなく、条件分岐命令の連続する不成立回数の予測にも使用することができる。
【0057】
図5は、別の実施形態における演算処理装置の一例を示す。図1から図4で説明した要素と同一または同様の要素および機能については、詳細な説明は省略される。
【0058】
図5に示す演算処理装置102は、命令フェッチアドレス生成部10、分岐予測機構12、1次命令キャッシュ14、2次キャッシュ16、命令バッファ部18、命令デコード部20およびレジスタリネーミング部22を有する。命令フェッチアドレス生成部10は、命令のフェッチアドレスを生成するアドレス生成部の一例である。
【0059】
また、演算処理装置102は、リザベーションステーションRS、コミット制御部34およびプログラムカウンタ36を有する。以下では、コミット制御部34は、CSE(Commit Stack Entry)34とも称される。リザベーションステーションRSは、RSA(Reservation Station for Address generation)24、RSE(Reservation Station for Execution)26、RSF(Reservation Station for Floating point)28およびRSBR(Reservation Station for BRanch)30を有する。以下では、RSA24、RSE26、RSF28、RSBR30を区別なく示す場合、リザベーションステーションRSとも称される。
【0060】
さらに、演算処理装置102は、オペランドアドレス生成部38、1次データキャッシュ40、演算器42、44、固定小数点更新バッファ46、浮動小数点更新バッファ48、固定小数点レジスタ50および浮動小数点レジスタ52を有する。以下では、固定小数点更新バッファ46および浮動小数点更新バッファ48は、更新バッファ46、48とも称される。固定小数点レジスタ50および浮動小数点レジスタ52は、レジスタ50、52とも称される。
【0061】
命令フェッチアドレス生成部10は、プログラムカウンタ36の値または分岐予測機構12による予測結果またはRSBR30からの命令再フェッチ要求に含まれるアドレスに基づいて次の命令のフェッチアドレスを生成する。命令フェッチアドレス生成部10は、生成した次の命令のフェッチアドレスを1次命令キャッシュ14に出力し、1次命令キャッシュ14から命令をフェッチする。
【0062】
分岐予測機構12は、LPT(Local Pattern Table)125を有する。分岐予測機構12は、命令フェッチアドレス生成部10が生成したアドレスに基づいて、LPT125を使用して、条件分岐命令による分岐が実施されるか否かを予測する。分岐予測機構12は、分岐を予測した場合(成立)、分岐先アドレス(ターゲットアドレス)を命令フェッチアドレス生成部10に出力する。分岐予測機構12の例は、図7で説明される。
【0063】
1次命令キャッシュ14は、命令フェッチアドレス生成部10からのアドレスで示される領域から命令を取り出し、取り出した命令を命令バッファ部18に出力する。1次命令キャッシュ14が保持する命令として、演算器42、44を使用して演算を実行する演算命令、メモリアクセス命令または分岐命令を含む。1次命令キャッシュ14は、アドレスで示される領域の命令を保持していない場合、2次キャッシュ16にアクセス要求を出力し、2次キャッシュ16から命令を取り出す。
【0064】
2次キャッシュ16は、アクセス要求に含まれるアドレスで示される領域から命令を取り出し、取り出した命令を1次命令キャッシュ14に出力する。2次キャッシュ16は、アドレスで示される領域の命令を保持していない場合、メインメモリ210にアクセス要求を出力し、メインメモリ210から命令を取り出す。例えば、メインメモリ210は、演算処理装置102を含む半導体チップとは別の半導体チップに含まれる。なお、2次キャッシュは、命令だけでなくデータを保持してもよい。
【0065】
命令バッファ部18は、1次命令キャッシュ14から出力される複数の命令を並列に保持し、保持した命令を命令デコード部20に並列に出力する。例えば、命令バッファ部18は、4つの命令を命令デコード部20に並列に出力する。なお、1次命令キャッシュ14から命令バッファ部18に並列に出力される命令の数は、4つより多い。
【0066】
命令デコード部20は、命令バッファ部18から出力される複数の命令を並列にデコードする複数のデコードスロットを有する。特に限定されないが、デコードスロットの数は4つである。各デコードスロットは、各命令を実行する演算器42、44等に対応するリザベーションステーションRS(RSA24、RSE26、RSF28またはRSBR30)を決定する。各デコードスロットは、命令の出力先のリザベーションステーションRSを示す情報等を命令に付加し、情報を付加した命令をレジスタリネーミング部22に出力する。
【0067】
また、命令デコード部20は、演算処理装置102で実行するプログラム中の記述の順番にしたがって、命令に命令識別子(IID:Instruction Identification)を割り振り、割り振った命令識別子を、デコードした命令(デコード結果)とともにCSE34に出力する。なお、命令バッファ部18および命令デコード部20は、プログラム中の記述の順番を入れ替えることなく複数の命令を並列に処理する(インオーダ)。
【0068】
レジスタリネーミング部22は、アウトオブオーダ実行を可能にするために、命令の実行時に、命令オペランドで指定されるレジスタ50(または52)の代わりに使用する更新バッファ46(または48)のエントリを割り当てる。レジスタリネーミング部22は、割り当てた更新バッファ46(または48)のエントリを示す情報とともに、命令デコード部20から出力される命令を、命令を実行するリザベーションステーションRSに出力する。なお、命令デコード部20から出力される命令は、命令をどのリザベーションステーションRSに出力するかを示す情報を含む。
【0069】
例えば、命令デコード部20がデコードした命令がメモリアクセス命令(ロード命令またはストア命令)である場合、命令はRSA24に出力される。命令デコード部20がデコードした命令が固定小数点数の演算命令である場合、命令はRSE26に出力される。命令デコード部20がデコードした命令が浮動小数点数の演算命令である場合、命令はRSF28に出力される。命令デコード部20がデコードした命令が分岐命令である場合、命令はRSBR30に出力される。
【0070】
RSA24は、命令デコード部20から順次受けるメモリアクセス命令を保持し、保持したメモリアクセス命令を実行可能な順にオペランドアドレス生成部38に出力する(アウトオブオーダ)。オペランドアドレス生成部38は、リザベーションステーションRSAから受けるメモリアクセス命令に基づいてアドレスを生成し、生成したアドレスを1次データキャッシュ40に出力する。なお、図5では、演算処理装置102は、複数のオペランドアドレス生成部38を有するが、オペランドアドレス生成部38の数は1個でもよい。
【0071】
1次データキャッシュ40は、例えば、ロード命令が実行される場合、オペランドアドレス生成部38からのアドレスで示される領域に保持されたデータを取り出し、取り出したデータを更新バッファ46または更新バッファ48に出力する。1次データキャッシュ40は、1次命令キャッシュ14と同様に、アドレスで示される領域のデータを保持していない場合、2次キャッシュ16にアクセス要求を出力し、2次キャッシュ16からデータを取り出す。
【0072】
RSE26は、命令デコード部20から順次受ける固定小数点数の演算命令を保持し、保持した演算命令を実行可能な順に演算器42に出力する(アウトオブオーダ)。RSF28は、命令デコード部20から順次受ける浮動小数点数の演算命令を保持し、保持した演算命令を実行可能な順に演算器44に出力する(アウトオブオーダ)。
【0073】
RSBR30は、命令デコード部20から順次受ける分岐命令を、分岐の成立または不成立が確定し、完了報告を出力するまで保持する。RSBR30は、分岐命令の完了処理をインオーダで行い、完了信号をCSE34に通知し、CSE34に分岐命令をコミットさせる。RSBR30は、分岐予測ミスが確定した場合、命令再フェッチ要求を命令フェッチアドレス生成部10および分岐予測機構12に出力する。RSBR30の例は、図6に示される。
【0074】
CSE34は、レジスタリネーミング部22を介して受信する命令を、プログラムに記述された順番通りに貯めておくキューと、命令の完了処理を実施する完了処理部とを有する。完了処理部は、各リザベーションステーションRSで実施された命令の完了報告とキューの情報とに基づいて、プログラムで記述された順にしたがって命令の完了処理をインオーダで実施する。完了処理部は、完了処理において、CSE34のキューに貯められた完了報告待ちの命令の中から完了報告に対応する命令をコミット(終了)し、資源を更新する。
【0075】
プログラムカウンタ36は、コミット制御部34からの指示に基づいて、命令の格納先を示すメモリアドレスを更新し、更新したメモリアドレスをプログラムカウンタPCとして命令フェッチアドレス生成部10に出力する。
【0076】
演算器42は、固定小数点数用の演算器である。演算処理装置102は、命令デコード部20により並列にデコードされた固定小数点数の演算命令を並列に実行するために、複数の演算器42を有してもよい。演算器42は、演算に使用するデータを更新バッファ46またはレジスタ50から取得し、演算結果を更新バッファ46に格納する。
【0077】
演算器44は、浮動小数点数用の演算器である。例えば、演算処理装置102は、命令デコード部20により並列にデコードされた浮動小数点数の演算命令を並列に実行するために、複数の演算器44を有してもよい。演算器44は、演算に使用するデータを更新バッファ48またはレジスタ52から取得し、演算結果を更新バッファ48に格納する。なお、演算器44は、積和演算、整数演算、論理演算等を実行する演算器を含んでもよい。
【0078】
更新バッファ46は、演算器42で実行する演算に使用するデータを保持する複数のエントリと、エントリとレジスタ50内のレジスタとの対応付けを管理する管理部とを有する。更新バッファ48は、演算器44で実行する演算に使用するデータを保持する複数のエントリと、エントリとレジスタ52内のレジスタとの対応付けを管理する管理部とを有する。
【0079】
レジスタ50は、演算器42で実行する演算に使用するデータと演算器42による演算の実行結果とを保持する複数のエントリを有する。レジスタ52は、演算器44で実行する演算に使用するデータと演算器44による演算の実行結果とを保持する複数のエントリを有する。
【0080】
例えば、レジスタ50は、64ビット構成の32個の固定小数点レジスタを含み、レジスタ52は、512ビット構成の32個の浮動小数点レジスタを含む。なお、レジスタ50、52の各レジスタの個数とビット構成は、上記以外でもよい。また、浮動小数点数用のレジスタ52のレジスタのビット構成は、可変にされてもよい。
【0081】
なお、図5に示す演算処理装置102の回路要素は、図示しないフリップフロップにより複数のステージに分割され、演算処理装置102は、命令をパイプライン処理により実行する。例えば、パイプラインのステージとして、デコードステージ、デコードトランスファステージ、プライオリティステージ、プライオリティトランスファステージ、バッファステージ、実行ステージおよびライトバックステージがある。
【0082】
デコードステージでは、命令デコード部20による命令のデコードが実施される。デコードトランスファステージでは、命令デコード部20によりデコードされた命令がRSE26、RSF28等に出力される。プライオリティステージでは、例えば、RSE26により、演算器42に出力する命令が決定される。
【0083】
プライオリティトランスファステージでは、例えば、RSE26から演算器42に命令が出力される。バッファステージでは、演算に使用するオペランドが更新バッファ46、48またはレジスタ50、52等から読み出される。実行ステージでは、演算器42または演算器44により演算が実行される。ライトバックステージでは、演算器42または演算器44による演算の結果が更新バッファ46または更新バッファ48に格納される。
【0084】
図6は、図5のRSBR30の一例を示す。RSBR30は、FIFOタイプの分岐命令完了キュー301、分岐制御部302、リペアポインタ303およびリペアエンドポインタ304を有する。分岐命令完了キュー301は、バリッドフラグVLD、分岐予測機構12が予測した分岐の予測結果(成立/不成立)、予測アドレス、予測結果フラグ、プログラムカウンタPCおよび条件分岐命令フラグを各々保持する複数のエントリを有する。分岐命令完了キュー301は、出力ポインタOUTPと入力ポインタINPを使用して分岐制御部302により管理される。
【0085】
分岐命令完了キュー301には、デコードされてから処理が完了するまでの分岐命令の情報がプログラムの記述順に、入力ポインタINPから出力ポインタOUTPまでの範囲のエントリに保持される。有効なエントリのバリッドフラグVLDはセットされる。処理が完了した分岐命令の情報は、出力ポインタOUTPで示されるエントリのみから取り出される。すなわち、RSBR30の分岐命令の完了処理はインオーダで行われる。出力ポインタOUTPで示されるエントリに保持される分岐命令は、処理が完了していない先頭の分岐命令である。以下では、出力ポインタOUTPで示されるエントリは、TOQとも称される。
【0086】
予測結果の領域には、分岐予測機構12が分岐の成立を予測した場合(プログラムカウンタPCで示されるアドレスが飛び先に変更される場合)、成立を示す情報が保持される。予測結果の領域には、分岐予測機構12が分岐の不成立を予測した場合(プログラムカウンタPCで示されるアドレスがインクリメントされる場合)、不成立を示す情報が保持される。
【0087】
予測アドレスの領域には、分岐予測機構12が予測した飛び先のアドレスが保持される。予測結果フラグの領域には、分岐予測機構12の予測結果が正しかったか誤っていたかを示す情報が保持される。プログラムカウンタPCの領域には、条件分岐命令の格納先のアドレスがプログラムカウンタPCとして保持される。条件分岐命令フラグの領域には、条件分岐命令を保持する場合に、例えば"1"がセットされる。
【0088】
分岐制御部302は、完了報告を、分岐命令完了キュー301に保持されたプログラムカウンタPCおよび条件分岐命令フラグとともに分岐予測機構12に出力する。分岐予測機構12は、RSBR30からの完了報告、プログラムカウンタPCおよび条件分岐命令フラグに基づいてLPT125を更新する。
【0089】
この実施形態では、分岐制御部302は、分岐命令の完了処理をインオーダで行うが、分岐予測ミスに伴う命令再フェッチ要求をアウトオブオーダで実施可能である。すなわち、分岐制御部302は、命令再フェッチ要求の対象の条件分岐命令を保持するエントリがTOQになるのを待つことなく、命令再フェッチ要求を出力することができる。これにより、演算処理装置102の処理性能を向上することができる。
【0090】
分岐制御部302は、分岐予測機構12による予測結果と条件分岐命令の実行結果との比較を分岐命令完了キュー301のエントリ毎に行い、予測が正しかったか否かの判定を行う。例えば、分岐制御部302は、演算器から受け取るARM命令セットの条件コードフラグNZCVを確定する命令の演算結果または間接分岐命令のターゲットアドレスに基づいて条件分岐命令の実行結果を判定し、ターゲットアドレスを確定させる。
【0091】
分岐制御部302は、例えば、分岐予測機構12の予測が誤りであった場合に予測結果フラグに"1"を設定し、分岐予測機構12の予測が正しかった場合に予測結果フラグに"0"を設定する。
【0092】
分岐制御部302は、分岐予測機構12による条件分岐命令の分岐予測が外れたことを検出した場合、正しいアドレスに対応する命令再フェッチ要求を命令フェッチアドレス生成部10と分岐予測機構12とに出力する。分岐予測機構12は、命令再フェッチ要求に基づいてLPT125を更新する。
【0093】
分岐制御部302は、命令再フェッチ要求の対象の条件分岐命令を保持しているエントリよりも入力ポインタINP側のエントリのバリッドフラグVLDをクリアし、さらに新規のエントリの生成を抑止する。分岐制御部302は、分岐予測が外れた条件分岐命令により誤ったパスを実施したパイプラインをクリアさせる指示を、クリア対象のパイプラインに出力する。
【0094】
分岐制御部302は、TOQ以外に保持された条件分岐命令の命令再フェッチ要求の出力に基づいて、再命令フェッチ要求の対象の条件分岐命令を保持するエントリの番号をリペアエンドポインタ304として記憶し、リペアトリガをセットする。リペアポインタ303は、TOQの識別番号から再命令フェッチ要求の対象の条件分岐命令を保持するエントリの識別番号まで順次更新される。
【0095】
リペアトリガは、命令フェッチアドレス生成部10に通知される。セット状態のリペアトリガは、LPT125がリペア処理中であることを示す。命令フェッチアドレス生成部10は、リペアトリガがセットされている間、命令再フェッチ要求に基づく命令再フェッチを抑止する。これにより、分岐予測ミスが発生した条件分岐命令の再フェッチがリペア処理の完了前に開始されて、LPT125のエントリが更新されることを抑止することができ、LPT125の誤動作を抑止することができる。
【0096】
分岐制御部302は、TOQからリペアエンドポインタで示されるエントリまでリペアポインタ303を順次更新する。分岐制御部302は、リペアポインタ303がリペアエンドポインタ304と一致するまで、分岐命令完了キュー301のリペアポインタ303で示されるエントリに保持されている条件分岐命令フラグとプログラムカウンタPCとを順次読み出す。
【0097】
分岐制御部302は、条件分岐命令フラグとプログラムカウンタPCとを読み出す毎に、分岐予測機構12のLPT部123にリペア要求として出力する。LPT部123は、リペア要求に含まれるプログラムカウンタPCの条件分岐命令を保持するエントリがある場合、そのエントリの現在カウント値CURR-CNTをデクリメントし、または現在カウント値CURR-CNTをループ回数LP-NUMに設定する。
【0098】
現在カウント値CURR-CNTおよびループ回数LP-NUMは、図1の残りの成立回数の予測値および連続する成立回数の予測値にそれぞれ対応する。現在カウント値CURR-CNTおよびループ回数LP-NUMについては、図7で説明される。
【0099】
これにより、命令再フェッチ要求がTOQ以外のエントリから出力される場合にも、TOQからリペアエンドポインタ304までのエントリに保持された条件分岐命令に対応する現在カウント値CURR-CNTを本来の値に修正することができる。ここで、本来の値とは、命令再フェッチ要求がTOQから出力される場合に更新される値である。
【0100】
なお、TOQに保持された条件分岐命令の命令再フェッチ要求が出力される場合、以下で説明するリペア処理は実施されないため、リペアトリガはリセット状態に保持される。命令フェッチアドレス生成部10は、リペアトリガがリセット状態の場合、命令再フェッチ要求に基づいて命令を再フェッチするアドレスを出力する。
【0101】
なお、分岐制御部302は、分岐命令完了キュー301のエントリに保持された条件分岐命令の命令再フェッチ要求を出力することを判定したとき、TOQにさらに近いエントリに命令再フェッチ要求を出力するエントリがあるか否かを探索する。分岐制御部302は、命令再フェッチ要求を出力する複数のエントリがある場合、TOQに最も近いエントリから命令再フェッチ要求を出力することを決定する。
【0102】
図7は、図5の分岐予測機構12の一例を示す。分岐予測機構12は、bimodal予測器122およびLPT部123を含む分岐予測部121と、分岐命令情報保持部126と、分岐判定部127とを有する。LPT部123は、LPT制御部124およびLPT125を有する。LPT125は、予測保持部の一例である。
【0103】
LPT部123は、特定のプログラムカウンタPCの条件分岐命令の連続の成立回数または不成立回数のパターンを予測するための機構である。例えば、LPT部123は、成立の分岐で回るループであれば、そのループに含まれる成立回数を記憶し、成立でループを回るか、不成立でループから抜けるかを予測する。LPT部123は、不成立の分岐で回るループであれば、そのループに含まれる不成立回数を記憶し、不成立でループを回るか、成立でループから抜けるかを予測する。以下では、特に断らない限り、連続する成立のパターンを予測する例が説明される。しかしながら、LPT部64は、連続する不成立のパターンの予測にも適用可能である。
【0104】
LPT制御部124は、RSBR30から受ける分岐命令の完了報告、リペア要求および命令再フェッチ要求と、命令フェッチアドレス生成部10から受ける命令フェッチアドレスとに基づいて、LPT125の内容を更新する。
【0105】
LPT制御部124は、更新したLPT125の内容に基づいて、命令フェッチアドレスで示される条件分岐命令の分岐予測を行い、条件分岐命令の予測結果(ヒット、成立/不成立)を分岐判定部127に出力する。ヒットは、分岐予測が有効な場合にセットされ、分岐予測が無効な場合にリセットされる。
【0106】
LPT制御部124は、条件分岐命令の分岐が成立する場合(プログラムカウンタPCが飛び先に変更される場合)、ヒットとともに成立を示す情報を出力する。LPT制御部124は、条件分岐命令の分岐が成立しない場合(プログラムカウンタPCが"1"インクリメントされる場合)、ヒットとともに不成立を示す情報を出力する。
【0107】
LPT125は、各々が1つの条件分岐命令に対応する複数のエントリを有する。複数のエントリには、プログラムカウンタPCの下位ビットがインデックスとして割り当てられ、各エントリは、プログラムカウンタPCの下位ビットにより識別される。図7では、簡単化のため、4つのエントリのみが示されるが、下位ビットのビット数に応じた数のエントリが設けられる。
【0108】
LPT125の各エントリは、バリッドフラグVLD、タグTAG、コンフィデンスCONF、完了カウント値CMPT-CNT、ループ回数LP-NUMおよび現在カウント値CURR-CNTを保持する領域を有する。完了カウント値CMPT-CNTは、条件分岐命令の現在の成立回数の一例である。ループ回数LP-NUMは、条件分岐命令の連続する成立回数の予測値の一例である。現在カウント値CURR-CNTは、条件分岐命令の残りの成立回数の予測値の一例である。
【0109】
バリッドフラグVLDは、エントリが有効である場合にセットされ、エントリが無効である場合にリセットされる。以下では、バリッドフラグVLDがセットされたエントリは、有効なエントリとも称され、バリッドフラグVLDがリセットされたエントリは、無効なエントリとも称される。タグTAGは、条件分岐命令のプログラムカウンタPCの上位ビットを示す。そして、タグTAGとLPT125のインデックスとにより、各条件分岐命令が識別される。
【0110】
コンフィデンスCONFは、分岐予測の確度の指標を示す数値である。コンフィデンスCONFが所定の確度(しきい値)以上のエントリは、分岐予測に使用される。コンフィデンスCONFが所定の確度未満のエントリおよび無効なエントリは、分岐予測に使用されない。コンフィデンスCONFの更新については、後述する。
【0111】
完了カウント値CMPT-CNTは、条件分岐命令が連続して成立される場合に、条件分岐命令の成立の完了報告毎にインクリメントされる。なお、連続する不成立回数を予測する場合、完了カウント値CMPT-CNTは、条件分岐命令が連続して不成立される場合に、条件分岐命令の不成立の完了報告毎にインクリメントされる。図示を省略するが、LPT125の各エントリは、例えば、連続する成立回数をカウントする場合にセットされ、連続する不成立回数をカウントする場合にリセットされる用途フラグを有する。そして、LPT部123は、用途フラグがセットされたエントリを使用して連続する成立回数を予測し、用途フラグがリセットされたエントリを使用して連続する不成立回数を予測する。
【0112】
ループ回数LP-NUMは、連続する成立回数を予測値を示し、条件分岐命令の完了報告に基づいて更新される。例えば、ループ回数LP-NUMが"5"の場合、LPT制御部124は、完了カウント値CMPT-CNTが"1"から"4"の場合、次の条件分岐命令が成立すると予測する。LPT制御部124は、完了カウント値CMPT-CNTが"5"の場合、次の条件分岐命令が不成立すると予測する。
【0113】
なお、連続する不成立回数を予測する場合、有効なエントリのループ回数LP-NUMは、連続する不成立回数を予測値を示す。例えば、ループ回数LP-NUMが"5"の場合、LPT制御部124は、完了カウント値CMPT-CNTが"1"から"4"の場合、次の条件分岐命令が不成立すると予測する。LPT制御部124は、完了カウント値CMPT-CNTが"5"の場合、次の条件分岐命令が成立すると予測する。
【0114】
現在カウント値CURR-CNTは、条件分岐命令のフェッチ時、命令再フェッチ要求の発生時、またはリペア要求の発生時に更新される。現在カウント値CURR-CNTの更新処理の例は、図8で説明される。現在カウント値CURR-CNTは、残りの成立回数の予測値を示す。なお、連続する不成立回数を予測する場合、現在カウント値CURR-CNTは、残りの不成立回数の予測値を示す。
【0115】
LPT部123は、RSBR30から分岐命令の完了報告を、条件分岐命令を識別するプログラムカウンタPCとともに受けた場合、プログラムカウンタPCと一致するエントリを探索する。例えば、LPT部123は、プログラムカウンタPCの下位ビットをインデックスとして、プログラムカウンタPCの上位ビットを各エントリのタグTAGと比較する。
【0116】
LPT制御部124は、プログラムカウンタPCと一致するエントリを検出した場合、エントリの更新処理を実施する。LPT制御部124は、プログラムカウンタPCが一致するエントリがない場合、対応する条件分岐命令のエントリが存在しないと判断し、エントリを作成する。LPT制御部124は、インバリッド状態のエントリがある場合、または、置換可能なエントリがある場合、完了報告に含まれるプログラムカウンタPCに基づいてエントリを作成する。なお、LPT制御部124は、コンフィデンスCONFの値がしきい値より低いエントリに、完了報告を受けた条件分岐命令の情報を上書きすることでエントリを作成しもよい。
【0117】
LPT制御部124は、エントリを作成した場合、作成対象の条件分岐命令のプログラムカウンタPCの上位ビットを作成したエントリのタグTAGに上書きし、完了カウント値CMPT-CNTを"1"に設定する。
【0118】
LPT制御部124は、RSBR30から成立の完了報告を受けた条件分岐命令のエントリがある場合、そのエントリの完了カウント値CMPT-CNTを"1"インクリメントする。LPT制御部124は、RSBR30から不成立の完了報告を受けた条件分岐命令のエントリがある場合、そのエントリの完了カウント値CMPT-CNTをループ回数LP-NUMにコピーし、完了カウント値CMPT-CNTを"0"にクリアする。これにより、LPT部123は、ループ回数LP-NUMを使用して、連続する成立回数を予測可能になる。
【0119】
LPT制御部124は、RSBR30からの不成立の完了報告に基づいて、完了カウント値CMPT-CNTとループ回数LP-NUMとを比較する。LPT制御部124は、カウント値CMPT-CNTがループ回数LP-NUMと同じ場合、同じパターンのループが繰り返し発生したと判定し、コンフィデンスCONFを"1"インクリメントする。そして、LPT部123は、コンフィデンスCONFが所定のしきい値以上(例えば"2")になったエントリを、置換対象から外して条件分岐命令の分岐予測に使用する。
【0120】
なお、連続する不成立回数を予測する場合、LPT制御部124は、RSBR30から不成立の完了報告を受けた条件分岐命令のエントリがある場合、そのエントリの完了カウント値CMPT-CNTを"1"インクリメントする。LPT制御部124は、RSBR30から成立の完了報告を受けた条件分岐命令のエントリがある場合、そのエントリの完了カウント値CMPT-CNTをループ回数LP-NUMにコピーし、完了カウント値CMPT-CNTを"0"にクリアする。
【0121】
これにより、LPT部123は、ループ回数LP-NUMを使用して、連続する不成立回数を予測可能になる。また、LPT制御部124は、RSBR30からの成立の完了報告時に、カウント値CMPT-CNTがループ回数LP-NUMと同じ場合、同じパターンのループが繰り返し発生したと判定し、コンフィデンスCONFを"1"インクリメントする。
【0122】
例えば、bimodal予測器122は、2ビットの飽和カウンタをインデックス毎に有する。bimodal予測器122は、条件分岐命令の成立を示す完了報告を受けた場合、飽和カウンタを"1"インクリメントし、条件分岐命令の不成立を示す完了報告を受けた場合、飽和カウンタを"1"デクリメントする。bimodal予測器122は、命令フェッチアドレス生成部10から受ける命令フェッチアドレスの下位ビットをインデックスとして、予測に使用する飽和カウンタを選択する。
【0123】
そして、bimodal予測器122は、選択した飽和カウンタの上位ビットが"1"の場合、成立を予測し、選択した飽和カウンタの上位ビットが"0"の場合、不成立を予測する。bimodal予測器122は、予測結果(成立/不成立)を分岐判定部127に出力する。なお、bimodal予測器122の代わりに、bimodal予測器122よりも予測精度の高いpiecewise予測器またはTAGE(TAgged GEometric history length predictor)予測器等が設けられてもよい。
【0124】
分岐命令情報保持部126は、ターゲットアドレス、分岐命令フラグおよびタグTAGを各々保持する複数のエントリを有し、過去に完了した分岐命令の情報を保持する。分岐命令情報保持部126は、RSBR30から分岐命令の完了報告に基づいて更新され、命令フェッチアドレス生成部10からの命令フェッチアドレスに基づいて探索される。
【0125】
ターゲットアドレスは、分岐命令の分岐先の命令フェッチアドレスを示す。分岐命令フラグは、条件分岐命令であるか無条件分岐命令であるかを示す。タグTAGは、分岐命令のプログラムカウンタPCの上位ビットを示す。
【0126】
分岐命令情報保持部126は、条件分岐命令の成立を示す完了報告に含まれるプログラムカウンタPCに対応するエントリが存在しない場合、完了報告を受けた分岐命令をエントリのいずれかに登録する。また、分岐命令情報保持部126は、エントリに保持されたターゲットアドレスが間違っている場合、または分岐命令フラグが間違っている場合、正しい情報をエントリに上書きする。
【0127】
分岐命令情報保持部126は、命令フェッチアドレス生成部10からの命令フェッチアドレスに基づいて、エントリを探索する。分岐命令情報保持部126は、命令フェッチアドレスの下位ビットをインデックスとして、命令フェッチアドレスの上位ビットをタグTAGとして保持しているエントリがある場合、ヒットを判定する。そして、分岐命令情報保持部126は、ヒット/ミスの情報hitと分岐命令フラグとを分岐判定部127に出力し、命令フェッチアドレス生成部10にターゲットアドレスを出力する。
【0128】
分岐判定部127は、LPT部123からの予測結果と、bimodal予測器122からの予測結果と、分岐命令情報保持部126からの情報とに基づいて、分岐予測機構12として最終的に判定した分岐予測結果を命令フェッチアドレス生成部10に出力する。分岐命令情報保持部126からの情報は、hit、分岐命令フラグを含む。例えば、分岐判定部127は、分岐命令情報保持部126から情報hitと非条件分岐命令を示す分岐命令フラグを受けた場合、条件分岐命令の分岐の成立を示す分岐予測結果を命令フェッチアドレス生成部10に出力する。
【0129】
分岐判定部127は、分岐命令情報保持部126から情報hitと条件分岐命令を示す分岐命令フラグを受けた場合、まず、LPT部123からの予測結果を参照する。そして、分岐判定部127は、LPT部123からの予測結果がヒット、成立を示す場合、条件分岐命令の成立を示す分岐予測結果を命令フェッチアドレス生成部10に出力する。分岐判定部127は、LPT部123からの予測結果がヒット、不成立を示す場合、条件分岐命令の不成立を示す分岐予測結果を命令フェッチアドレス生成部10に出力する。
【0130】
分岐判定部127は、分岐命令情報保持部126から情報hitと条件分岐命令を示す分岐命令フラグを受け、LPT部123からの予測結果がヒットでない場合(ミス)、bimodal予測器122からの予測結果を採用する。そして、分岐判定部127は、bimodal予測器122からの条件分岐命令の成立または不成立を示す分岐予測結果を命令フェッチアドレス生成部10に出力する。
【0131】
分岐判定部127は、分岐命令情報保持部126から情報hitを受けない場合(ミス)、分岐命令または条件分岐命令の不成立を判定し、不成立を示す情報を命令フェッチアドレス生成部10に出力する。分岐判定部127は、分岐命令情報保持部126から情報hitと無条件分岐命令を示す分岐命令フラグを受けた場合、成立を示す分岐予測結果を命令フェッチアドレス生成部10に出力する。
【0132】
命令フェッチアドレス生成部10は、分岐判定部127から成立を示す分岐予測結果を受けた場合、分岐命令情報保持部126から受けるターゲットアドレスを次の命令フェッチアドレスとする。命令フェッチアドレス生成部10は、分岐判定部127から不成立を示す分岐予測結果を受けた場合、現在のプログラムカウンタPCを更新することで生成されるアドレスを次の命令フェッチアドレスとする。プログラムカウンタPCの更新量は、1回にフェッチする命令数に依存する。例えば、命令フェッチアドレス生成部10は、1回に4つの命令をフェッチする場合、プログラムカウンタPCを"4"進める。
【0133】
図8は、図7のLPT125の現在カウント値CURR-CNTの更新動作の一例を示す。上述したように、現在カウント値CURR-CNTは、条件分岐命令のフェッチ時、命令再フェッチ要求の発生時、またはリペア要求の発生時に更新される。
【0134】
(A1)において、LPT部123は、命令フェッチされた条件分岐命令がLPT125のエントリのいずれかにヒットした場合で、現在カウント値CURR-CNTが"0"でない場合、現在カウント値CURR-CNTを"1"デクリメントする。例えば、ループ回数LP-NUMが5回の場合、LPT部123は、条件分岐命令の成立の予測が1回目から4回目のいずれかの場合、ループ回数LP-NUMをデクリメントする。これにより、LPT125による分岐予測を継続することができる。
【0135】
(A2)において、LPT部123は、リペア要求に含まれるプログラムカウンタPCに対応する条件分岐命令がLPT125のエントリのいずれかにヒットした場合で、現在カウント値CURR-CNTが"0"でない場合、現在カウント値CURR-CNTを"1"デクリメントする。リペア要求がLPT125のエントリにヒットした場合、TOQから命令再フェッチ要求を出力したエントリまでの間に、現在カウント値CURR-CNTのデクリメントが必要な条件分岐命令が存在していることを示す。このため、(A2)の判定に基づいて現在カウント値CURR-CNTをデクリメントすることで、条件分岐命令の再フェッチ後に、残りの成立回数の予測値の予測精度が低下することを抑制することができる。
【0136】
(B1)において、LPT部123は、RSBR30のTOQから命令再フェッチ要求の対象の条件分岐命令がLPT125のエントリのいずれにもヒットしない場合、対象の条件分岐命令の命令ループ内に存在する条件分岐命令の現在カウント値CURR-CNTを以下のように更新する。LPT部123は、ループ回数LP-NUMから完了カウント値CMPT-CNTを減じた値を現在カウント値CURR-CNTに設定する。
【0137】
(B2)において、LPT部123は、RSBR30のTOQ以外から命令再フェッチ要求があった場合、ループ回数LP-NUMから完了カウント値CMPT-CNTを減じた値を現在カウント値CURR-CNTに設定する。これにより、TOQ以外のエントリから命令再フェッチ要求がアウトオブオーダで出力された場合にも、TOQから命令再フェッチ要求が出力されたときと同様に、現在カウント値CURR-CNTを更新することができる。
【0138】
(C1)において、LPT部123は、RSBR30からの成立を示す命令再フェッチ要求がLPT125のエントリのいずれかにヒットした場合、ループ回数LP-NUMから完了カウント値CMPT-CNTを減じた値を現在カウント値CURR-CNTに設定する。さらに、LPT部123は、現在カウント値CURR-CNTから"1"を減じる。
【0139】
例えば、(C1)の判定において、ループ回数LP-NUMが5回で、完了カウント値CMPT-CNTが0回のとき、LPT部123は、命令ループから抜ける不成立を予測する。しかしながら、実際には成立であり、予測が外れた場合、LPT部123は、5回繰り返す条件分岐命令の命令ループの初回が成立したと判断する。この場合、残りの成立回数の予測値は4回になるため、"ループ回数LP-NUM"-"完了カウント値CMPT-CNT"-"1"である"4"を現在カウント値CURR-CNTに設定する。これにより、LPT部123は、LPT125を使用して成立の残り回数を予測する通常の動作と同様に、現在カウント値CURR-CNTを条件分岐命令の成立が1回発生した後の予測値にすることができる。
【0140】
また、(C1)の判定において、LPT125においてコンフィデンスCONFがしきい値より低いエントリに保持されている条件分岐命令は、LPT部123ではなく、bimodal予測器122により分岐予測が実施される。この状態で、LPT125に保持された情報では条件分岐命令の成立が予測され、bimodal予測器122が不成立を予測し、bimodal予測器122の予測が外れたとする。このとき、RSBR30は、成立時のプログラムカウンタPCによる命令再フェッチ要求(成立)を出力する。
【0141】
例えば、ループ回数LP-NUMが5回で、完了カウント値CMPT-CNTが3回のとき、現在カウント値CURR-CNTにかかわらず、完了ベースでの残り分岐回数(成立)は2回である。この状態で(C1)の命令再フェッチ要求(成立)が出力された場合、LPT部123は、"ループ回数LP-NUM"-"完了カウント値CMPT-CNT"-"1"である"1"を現在カウント値CURR-CNTに設定する。これにより、LPT部123は、LPT125を使用して成立の残り回数を予測する通常の動作と同様に、現在カウント値CURR-CNTを条件分岐命令の成立が3回続いた後の予測値にすることができる。
【0142】
(D1)において、LPT部123は、命令フェッチされた条件分岐命令がLPT125のエントリのいずれかにヒットした場合で、現在カウント値CURR-CNTが"0"の場合、ループ回数LP-NUMを現在カウント値CURR-CNTに設定する。例えば、(D1)の判定において、ループ回数LP-NUMが5回で、条件分岐命令の成立の予測が5回連続でヒットし、現在カウント値CURR-CNTが"0"になった場合、LPT部123は、ループ回数LP-NUMを5回に戻す。これにより、LPT125による分岐予測を継続することができる。
【0143】
(D2)において、LPT部123は、リペア要求に含まれるプログラムカウンタPCに対応する条件分岐命令がLPT125のエントリのいずれかにヒットした場合で、現在カウント値CURR-CNTが"0"の場合、ループ回数LP-NUMを現在カウント値CURR-CNTに設定する。(D2)の判定において、上記の(A2)と同様に、リペア要求がLPT125のエントリにヒットした場合、TOQから命令再フェッチ要求を出力したエントリまでの間に、現在カウント値CURR-CNTのデクリメントが必要な条件分岐命令が存在していることを示す。このため、(D2)の判定に基づいてループ回数LP-NUMを現在カウント値CURR-CNTに設定することで、条件分岐命令の再フェッチ後に、残りの成立回数の予測値の予測精度が低下することを抑制することができる。
【0144】
(D3)において、LPT部123は、RSBR30からの不成立を示す命令再フェッチ要求がLPT125のエントリのいずれかにヒットした場合、ループ回数LP-NUMを現在カウント値CURR-CNTに設定する。
【0145】
例えば、(D3)の判定において、ループ回数LP-NUMが5回で、完了カウント値CMPT-CNTが3回のとき、現在カウント値CURR-CNTにかかわらず、完了ベースでの残り分岐回数(成立)は2回である。この状態で条件分岐命令の成立が予測されるときに分岐予測が外れた場合(実際は不成立)、LPT部123は、命令ループが新たに開始されると判断し、ループ回数LP-NUMを5回に戻す。これにより、LPT125による分岐予測を再開することができる。
【0146】
また、(D3)の判定において、LPT部123が、コンフィデンスCONFが低いエントリに成立/不成立の情報を収集しているときに、bimodal予測器122が成立を予測しているとする。そして、bimodal予測器122の予測が外れ、命令再フェッチ要求を出力されたとする。例えば、ループ回数LP-NUMが5回で、完了カウント値CMPT-CNTが0回のとき、現在カウント値CURR-CNTにかかわらず、完了ベースでの残り分岐回数(成立)は5回である。このため、LPT部123は、命令ループが新たに開始されると判断し、ループ回数LP-NUMを5回に戻す。これは、LPT125のエントリを使用した(D1)での分岐予測の動作と同じである。
【0147】
図9および図10は、図7のRSBR30、LPT部123および命令フェッチアドレス生成部10の動作の一例を示す。すなわち、図9および図10は、演算処理装置102の演算処理方法の一例を示す。図9および図10に示す動作は、繰り返し実施される。
【0148】
なお、RSBR30、LPT部123および命令フェッチアドレス生成部10は、図1に示した分岐命令発行スケジューラ3、分岐予測部5およびアドレス生成部1に対応している。また、完了カウント値CMPT-CNT、ループ回数LP-NUMおよび現在カウント値CURR-CNTは、それぞれ図1から図4に示す実施形態で説明した現在の成立回数、連続する成立回数の予測値および残りの成立回数の予測値に対応している。
【0149】
このため、図1から図4で説明した動作は、図5の演算処理装置102の動作にも適用可能である。例えば、図3において分岐命令発行スケジューラ3が出力する命令再フェッチ要求の説明は、RSBR30の説明にも適用可能である。図4において命令ループが処理される際の分岐命令発行スケジューラの動作は、RSBR30の動作にも適用可能である。
【0150】
RSBR30は、分岐命令完了キュー301の全てのエントリにそれぞれ保持された条件分岐命令の分岐予測ミスが発生しているかを判定している。RSBR30は、分岐予測ミスの発生を判定したエントリの予測結果フラグを、分岐予測ミスの発生を示す"1"にセットする。RSBR30は、分岐予測ミスが判定していない場合、分岐命令の通常の完了処理を続ける。
【0151】
まず、ステップS10において、RSBR30は、分岐命令完了キュー301に分岐予測ミスしたエントリ(予測結果フラグがセット状態)があるかどうかの判定を繰り返す。RSBR30は、分岐予測ミスしたエントリがある場合、ステップS12を実施する。ステップS12において、RSBR30は、分岐予測ミスがTOQで発生している場合、ステップS14を実施し、分岐予測ミスがTOQ以外のエントリで発生している場合、ステップS18を実施する。
【0152】
ステップS14において、RSBR30は、TOQ以外の全てのエントリに保持された情報を無効にし、TOQに保持された条件分岐命令の命令再フェッチ要求を出力する。次に、ステップS16において、LPT部123は、RSBR30から出力された命令再フェッチ要求LPT部に基づいて、図8に示したアルゴリズムにしたがってLPTの現在カウント値CURR-CNTを更新する。命令フェッチアドレス生成部10は、RSBR30から出力された命令再フェッチ要求に基づいて命令フェッチを再開する。ステップS16の動作後、ステップS10が実施される。
【0153】
ステップS18において、RSBR30は、予測結果フラグがセットされた分岐命令完了キュー301のエントリを探索し、TOQに最も近い分岐予測ミスが発生したエントリを確定する。RSBR30は、確定したエントリによりも後ろのエントリに保持された情報を無効にし、確定したエントリに保持された条件分岐命令の命令再フェッチ要求を出力する。
【0154】
次に、ステップS20において、RSBR30は、命令フェッチアドレス生成部10による条件分岐命令の再フェッチを抑止するリペアトリガをセットする。また、RSBR30は、ステップS18で確定したエントリの番号をリペアエンドポインタ304にセットし、出力ポインタOUTPの値をリペアポインタ303にセットする。リペアエンドポインタ304およびリペアポインタ303は、図10に示す動作で使用される。
【0155】
次に、ステップS22において、LPT部123は、RSBR30から出力された命令再フェッチ要求LPT部に基づいて、図8に示したアルゴリズムにしたがって、LPTの現在カウント値CURR-CNTを更新する。この場合、図8の"TOQ以外から命令再フェッチ要求があった"に該当するため、LPT部123は、ループ回数LP-NUMから完了カウント値CMPT-CNTを引いた値を現在カウント値CURR-CNTに設定する。命令フェッチアドレス生成部10は、命令再フェッチ要求を受けるが、リペアトリガをセットされているため命令フェッチを再開せず、リペアトリガがリセットされるのを待つ。
【0156】
次に、図10のステップS24において、RSBR30は、リペアポインタで示されるエントリに保持された条件分岐命令フラグとプログラムカウンタPCをLPT部123に出力し、リペアポインタ303をインクリメントする。
【0157】
次に、ステップS26において、LPT部123は、RSBR30から出力された命令再フェッチ要求LPT部に基づいて、図8に示したアルゴリズムにしたがってLPTの現在カウント値CURR-CNTを更新する。
【0158】
次に、ステップS28において、RSBR30は、リペアポインタ303がリペアエンドポインタ304を超えた場合、リペア対象のエントリに対応する現在カウント値CURR-CNTの更新が完了したと判断し、ステップS30を実施する。一方、RSBR30は、リペアポインタ303がリペアエンドポインタ304を超えていない場合、リペア対象のエントリに対応する現在カウント値CURR-CNTの更新を継続するため、動作をステップS24に戻す。
【0159】
ステップS30において、RSBR30は、リペア対象のエントリに対応する現在カウント値CURR-CNTの更新処理が完了したため、リペアトリガをリセットする。次に、ステップS32において、命令フェッチアドレス生成部10は、リペアトリガのリセットに基づいて、命令再フェッチ要求に対応する命令フェッチを再開する。この後、動作は、図9のステップS10に戻る。
【0160】
以上、この実施形態においても上述した実施形態と同様の効果を得ることができる。例えば、命令再フェッチ要求がTOQ以外のエントリからアウトオブオーダで出力される場合にも、未完了の条件分岐命令の残りの成立回数の予測値である現在カウント値CURR-CNTを適切な値に更新することができる。したがって、命令ループ内にある条件分岐命令の残りの成立回数の予測値の予測精度が低下することを抑制することができる。この結果、パイプラインの処理効率を向上することができ、演算処理装置102の処理性能を向上することがきる。
【0161】
さらに、この実施形態では、リペアトリガのセット中に命令再フェッチを抑止することで、命令の再フェッチがリペア処理の完了前に開始されてLPT125のエントリが更新されることを抑止することができ、LPT125の誤動作を抑止することができる。
【0162】
図11は、図1の演算処理装置100または図5の演算処理装置102を含む情報処理システムの一例を示す。図11では、情報処理システムに演算処理装置100が搭載される例が示される。
【0163】
例えば、図11に示す情報処理システムは、サーバ200である。サーバ200は、複数の演算処理装置100、複数のメインメモリ210およびインターコネクト制御部220を有する。例えば、演算処理装置100は、中央演算処理装置(CPU;Central Processing Unit)等のプロセッサであり、インターコネクト制御部220に接続される。各メインメモリ210は、対応する演算処理装置100に接続される。インターコネクト制御部220は、ハードディスク装置または通信装置等の外部装置に接続され、外部装置に対して入出力制御を実施する。
【0164】
以上の実施形態に関し、さらに以下の付記を開示する。
(付記1)
命令をパイプライン処理により実行する演算処理装置であって、
各条件分岐命令の連続する成立回数の予測値と、各条件分岐命令の現在の成立回数と、各条件分岐命令の残りの成立回数の予測値とを含む予測情報を保持する予測保持部を有し、前記予測値に基づいて各条件分岐命令の連続する成立回数を予測する分岐予測部と、
前記分岐予測部による予測結果または命令再フェッチ要求に含まれるアドレスに基づいて次の命令のフェッチアドレスを生成するアドレス生成部と、
前記フェッチアドレスに基づいてフェッチされた分岐命令を順次保持する分岐命令完了キューを有し、前記分岐命令完了キューに保持された分岐命令をインオーダで完了させ、条件分岐命令の実行結果に基づいて前記分岐予測部による分岐予測ミスを判定した場合に前記命令再フェッチ要求を出力し、前記分岐命令完了キューの先頭以外に保持された条件分岐命令の分岐予測ミスを判定した場合、前記分岐命令完了キューにおいて分岐予測ミスを判定した位置から前記先頭までの間に保持された条件分岐命令に対応してリペア要求を前記分岐予測部に出力する分岐命令発行スケジューラと、を有し、
前記分岐予測部は、前記分岐命令完了キューの先頭以外からの前記命令再フェッチ要求に基づいて前記残りの成立回数の予測値を前記連続する成立回数の予測値と前記現在の成立回数との差に設定し、さらに、前記リペア要求に対応する条件分岐命令の数を前記残りの成立回数の予測値から減じる
演算処理装置。
(付記2)
前記分岐命令発行スケジューラは、分岐予測ミスを判定した複数の条件分岐命令が前記分岐命令完了キューに存在する場合、前記分岐命令完了キューの先頭に最も近くの分岐予測ミスを判定した条件分岐命令の前記命令再フェッチ要求を出力し、前記分岐予測ミスを判定した条件分岐命令より前記分岐命令完了キューの後ろに保持された分岐命令を無効にする
付記1に記載の演算処理装置。
(付記3)
前記分岐命令発行スケジューラは、前記リペア要求を前記分岐予測部に出力後、前記リペア要求に基づいて前記残りの成立回数の予測値が更新される間、前記アドレス生成部による前記フェッチアドレスの生成を抑止させる
付記1または付記2に記載の演算処理装置。
(付記4)
前記予測保持部は、さらに、各条件分岐命令の連続する不成立回数の予測値と、各条件分岐命令の現在の不成立回数と、各条件分岐命令の残りの不成立回数の予測値とを保持することで、各条件分岐命令の連続する不成立回数を予測可能であり、
前記分岐予測部は、前記分岐命令完了キューの前記先頭以外からの前記命令再フェッチ要求に基づいて前記残りの不成立回数の予測値を前記連続する不成立回数の予測値と前記現在の不成立回数との差に設定し、さらに、前記リペア要求に対応する条件分岐命令の数を前記残りの不成立回数の予測値から減じる
付記1または付記2に記載の演算処理装置。
(付記5)
前記分岐予測部は、前記リペア要求を受けたときに前記残りの成立回数の予測値が"0"でない場合、前記残りの成立回数の予測値を減じ、前記リペア要求を受けたときに前記残りの成立回数の予測値が"0"の場合、前記連続する成立回数の予測値を前記残りの成立回数の予測値に設定する
付記1または付記2に記載の演算処理装置。
(付記6)
前記分岐予測部は、前記アドレス生成部が生成したフェッチアドレスにより命令がフェッチされたときに前記残りの成立回数の予測値が"0"でない場合、前記残りの成立回数の予測値をデクリメントし、前記アドレス生成部が生成したフェッチアドレスにより命令がフェッチされたときに前記残りの成立回数の予測値が"0"の場合、前記連続する成立回数の予測値を前記残りの成立回数の予測値に設定する
付記1または付記2に記載の演算処理装置。
(付記7)
前記分岐予測部は、前記分岐命令完了キューの先頭に保持された条件分岐命令に対応して出力された前記命令再フェッチ要求に対応する条件分岐命令の予測情報を保持していない場合、前記連続する成立回数の予測値から前記分岐の成立回数を減じた値を残りの成立回数の予測値に設定する
付記1または付記2に記載の演算処理装置。
(付記8)
前記分岐予測部は、分岐の不成立の分岐予測ミスによる命令再フェッチ要求が前記分岐命令完了キューの先頭に保持された条件分岐命令に対して出力され、出力された条件分岐命令の予測情報を前記予測保持部が保持している場合、前記連続する成立回数の予測値から前記現在の成立回数を減じた値からさらに"1"を減じた値を前記残りの成立回数の予測値に設定する
付記1または付記2に記載の演算処理装置。
(付記9)
分岐予測部とアドレス生成部と分岐命令発行スケジューラとを有し、命令をパイプライン処理により実行する演算処理装置の演算処理方法であって、
前記分岐予測部は、各条件分岐命令の連続する成立回数の予測値と、各条件分岐命令の現在の成立回数と、各条件分岐命令の残りの成立回数の予測値とを含む予測情報を保持する予測保持部を有し、前記予測値に基づいて各条件分岐命令の連続する成立回数を予測し、
前記アドレス生成部は、前記分岐予測部による予測結果または命令再フェッチ要求に含まれるアドレスに基づいて次の命令のフェッチアドレスを生成し、
前記分岐命令発行スケジューラは、前記フェッチアドレスに基づいてフェッチされた分岐命令を順次保持する分岐命令完了キューを有し、前記分岐命令完了キューに保持された分岐命令をインオーダで完了させ、条件分岐命令の実行結果に基づいて前記分岐予測部による分岐予測ミスを判定した場合に前記命令再フェッチ要求を出力し、前記分岐命令完了キューの先頭以外に保持された条件分岐命令の分岐予測ミスを判定した場合、前記分岐命令完了キューにおいて分岐予測ミスを判定した位置から前記先頭までの間に保持された条件分岐命令に対応してリペア要求を前記分岐予測部に出力し、
前記分岐予測部は、前記分岐命令完了キューの先頭以外からの前記命令再フェッチ要求に基づいて前記残りの成立回数の予測値を前記連続する成立回数の予測値と前記現在の成立回数との差に設定し、さらに、前記リペア要求に対応する条件分岐命令の数を前記残りの成立回数の予測値から減じる
演算処理方法。
【0165】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【0166】
1 アドレス生成部
2 メモリ
3 分岐命令発行スケジューラ
4 分岐命令完了キュー
5 分岐予測部
6 予測保持部
10 命令フェッチアドレス生成部
12 分岐予測機構
121 分岐予測部
122 bimodal予測器
123 LPT部
124 LPT制御部
125 LPT
126 分岐命令情報保持部
127 分岐判定部
14 1次命令キャッシュ
16 2次キャッシュ
18 命令バッファ部
20 命令デコード部
22 レジスタリネーミング部
30 RSBR
301 分岐命令完了キュー
302 分岐制御部
303 リペアポインタ
304 リペアエンドポインタ
34 コミット制御部
36 プログラムカウンタ
38 オペランドアドレス生成部
40 1次データキャッシュ
42、44 演算器
46 固定小数点更新バッファ
48 浮動小数点更新バッファ
50 固定小数点レジスタ
52 浮動小数点レジスタ
100、102 演算処理装置
CMPT-CNT 完了カウント値
CONF コンフィデンス
CURR-CNT 現在カウント値
LP-NUM ループ回数
RS リザベーションステーション
TAG タグ
VLD バリッドフラグ
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11