JP3765111B2 - 分岐登録命令を有するプロセッサ - Google Patents
分岐登録命令を有するプロセッサ Download PDFInfo
- Publication number
- JP3765111B2 JP3765111B2 JP22000995A JP22000995A JP3765111B2 JP 3765111 B2 JP3765111 B2 JP 3765111B2 JP 22000995 A JP22000995 A JP 22000995A JP 22000995 A JP22000995 A JP 22000995A JP 3765111 B2 JP3765111 B2 JP 3765111B2
- Authority
- JP
- Japan
- Prior art keywords
- branch
- instruction
- address
- registration
- buffer
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Advance Control (AREA)
Description
【産業上の利用分野】
本発明はプロセッサ等のデータ処理装置にかかり,分岐処理の高速化に適する分岐登録命令を有するプロセッサに関する。
【0002】
【従来の技術】
図1は高速化されない条件分岐を含む命令処理パイプラインである。命令アドレス生成(A),命令フェッチ(F),命令デコード(D),実行(E)の各ステージから成る。Aステージでは,分岐先の場合は分岐命令のEステージで生成された分岐先アドレスを,他の場合は直前のAステージで生成した命令アドレスにその命令アドレスでフェッチする命令の長さを加算した値を選択して命令アドレスとする。尚,図1のように分岐命令のEステージでの分岐先アドレス計算及び分岐先のAステージでの分岐先アドレス選択の同時実行が可能なのは,分岐先以外のAステージも加算及び選択であり,処理に要する時間が同じ1サイクルであるからである。Fステージでは,Aステージで生成された命令アドレスの命令をフェッチする。Dステージでは,Fステージでフェッチした命令をデコードする。Eステージでは,Dステージからのデコード情報に基づいて命令を実行する。
【0003】
条件分岐処理は,分岐元命令アドレス確定,分岐先命令アドレス生成,及び分岐/非分岐判定をすることである。尚,分岐元命令アドレスは分岐命令アドレスである場合が多い。しかし,分岐命令の後に遅延分岐スロットがある場合もあり,一般には分岐元命令アドレスは分岐命令アドレスとは限らない。図1のように,高速化されない条件分岐においては,分岐元命令アドレスは分岐命令のDステージで確定し,分岐先命令アドレスは分岐命令のEステージで生成する。そして,分岐判定は分岐命令に先立つ分岐条件確定命令のEステージで確定する分岐条件に基づいて分岐命令のEステージで行う。
【0004】
一般的なプログラムでは分岐命令は5命令に1命令程度といわれている。したがって,分岐1命令を含む5命令の実行に要するサイクル数は,分岐処理性能を精度は高くないが容易に測れる指標として有効である。命令実行サイクルをEステージ開始から次の命令のEステージ開始までのサイクル数と定義すると,このプロセッサは分岐1命令を含む5命令の実行に7サイクルかかっている。
【0005】
図2は5命令並列実行可能なプロセッサにおける高速化されない条件分岐を含む命令処理パイプラインである。パイプラインの構成及び各ステージの動作は図1と同じである。分岐1命令を含む5命令の実行に3サイクルかかっている。命令実行スロットを5倍にして並列性のあるプログラムを実行しても性能は2.3倍にしかならない。尚,分岐条件確定命令と分岐命令のEステージの同時実行は可能であるとした。
【0006】
一方,図1及び図2の例において,分岐命令を高速化して分岐処理時間を0サイクルにすると,分岐1命令を含む5命令の実行がそれぞれ4及び1サイクルで済むようになり,性能が1.75及び3倍に向上する。特に,命令実行スロットの多いプロセッサにおける分岐高速化効果は大きい。尚,分岐処理時間は分岐元命令のEステージ終了から分岐先命令のEステージ開始までのサイクル数と定義する。
【0007】
従来の分岐高速化方式には以下のような方式がある。分岐方式のみの比較を行うために,各プロセッサの実際の命令実行並列度とは関係なく,スカラプロセッサと5命令並列実行可能なプロセッサに各分岐高速化方式を適用した場合の分岐1命令を含む5命令の実行サイクル数を比較する。尚,1つの分岐処理を複数の命令で行うプロセッサでは,1分岐処理と4命令の実行サイクル数を使用する。
【0008】
図3は「IEEE Micro, vol.13, no.5 ('93/10), pp54-68」記載の「PowerPC 601」の分岐高速化方式をスカラプロセッサに適用した場合である。「PowerPC 601」は分岐命令を以下のように先行実行して高速化している。まず,Fステージで1度に8命令フェッチして命令キューにバッファリングする。図3では6命令目以降は実行しないので省略した。そして,分岐命令が命令キューの先頭から4命令までに入ると,他の命令とは非同期にDステージでデコード及び実行を1サイクルで処理する。図3の例では先頭の命令をデコードすると分岐命令が4命令目になるので実行される。分岐命令実行時にはまだ分岐条件確定命令のEステージを実行していないため,分岐判定は予測である。「PowerPC 601」は分岐先アドレスが分岐元アドレスより小さい場合はループである可能性が高いのでテイクン予測し,大きい場合はノットテイクン予測する。本方式により分岐1命令を含む5命令が4サイクルで実行される。尚,本方式を適用すると分岐命令を非同期に実行するための実行スロットが必要となり厳密にはスカラプロセッサではなくなる。
【0009】
図4は「PowerPC 601」の分岐高速化方式を5命令並列実行可能なプロセッサに適用した場合である。分岐命令は命令キューに入れば先頭から4命令までに入らなくても実行可能とすると,分岐1命令を含む5命令が2サイクルで実行される。
【0010】
図5は「日経エレクトロニクスno.607(1994.5.9)p.10」記載の「PowerPC 604」及び「日経エレクトロニクスno.620(1994.12.24)pp.13-15」記載の「PowerPC 620」の分岐高速化方式をスカラプロセッサに適用した場合である。以下のように分岐先アドレス格納キャッシュ(BTAC: branch target address cache)及び分岐記録テーブル(BHT: branch history table)を用いて分岐を高速化している。Aステージにおいて,直前のAステージで生成した命令アドレスによってBTACを検索し,命令アドレスが分岐命令に達してBTACにヒットすると,命令アドレスをBTACから読出された分岐先アドレスにする。このAステージ実行時にはまだ分岐条件確定命令のEステージを実行していないため,BTACヒットは分岐テイクン予測に相当する。BTACには,BHTの4段階の分岐可能性が最も高いレベルになると登録し,最も低いレベルになると削除する。図5の方式により分岐1命令を含む5命令が4サイクルで実行される。
【0011】
図6は「PowerPC 604」及び「PowerPC 620」の分岐高速化方式を5命令並列実行可能なプロセッサに適用した場合である。分岐1命令を含む5命令が1サイクルで実行される。尚,「PowerPC 604」及び「PowerPC 620」は最大4命令の並列実行が可能である。
【0012】
図7は「IEEE Computer, Vol.22, No.1, January 1989, pp.55-64」記載の「Advanced Scientific Computer」の分岐高速化方式をスカラプロセッサに適用した場合である。通常1命令で行う条件分岐処理の分岐先命令アドレス生成,分岐元命令アドレス確定,及び分岐判定を,それぞれ Load lookahead 命令,Prepare to branch 命令,及び分岐命令の3命令で行う。処理を分割することにより先行できる処理を先行させる。Load lookahead 命令は分岐先命令アドレスを生成してアドレスレジスタに書込む。Prepare to branch 命令は何命令後にアドレスレジスタのアドレスに分岐するかを指定する。Prepare to branch 命令は通常分岐条件確定命令より前に実行するので,この命令の実行はテイクン予測に相当する。ノットテイクン予測の場合はこの命令を使用しない。図7において,サイクル数のカウントは一般的には Load lookahead 命令から始めるべきであるが,この命令はn回まわるループの外に出せればサイクル数が実質1/nとみなせるのでカウントしていない。本方式は,分岐オーバーヘッドが減る代りに命令数が増えるので効果は小さく,1分岐処理と4命令の実行に6サイクルかかる。
【0013】
図8は「Advanced Scientific Computer」の分岐高速化方式を5命令並列実行可能なプロセッサに適用した場合である。1分岐処理と4命令が3サイクルで実行される。
【0014】
図9は「IEEE Computer, Vol.24, No.1, January 1991, pp.65-71」記載の「PIPE Processor」の分岐高速化方式をスカラプロセッサに適用した場合である。分岐先命令アドレス生成を Load lookahead 命令で実行し,分岐元命令アドレス確定及び分岐判定を分岐命令で行う。通常,分岐元命令アドレスは分岐命令アドレスであるが,本方式では分岐命令から7命令先の命令までの8通りの指定ができる。従来の遅延分岐スロットが1命令固定であったのに対し,本方式では0〜7命令の図7の遅延分岐スロットを指定できる。Load lookahead 命令はカウントしないものとすると,命令数は増加しない。本方式では,他の方式と異なり分岐条件確定が早くないと分岐は高速化されない。分岐条件確定が十分早いとすると,図9のように1分岐処理と4命令が5サイクルで実行される。
【0015】
図10は「PIPE Processor」の分岐高速化方式を5命令並列実行可能なプロセッサに適用した場合である。1分岐処理と4命令が3サイクルで実行される。命令並列度が5倍になるとと分岐オーバーヘッドを隠すために分岐命令と分岐先命令の間に挿入すべき命令数が5倍になり十分な命令数の挿入は不可能となるので,本方式の効果はなくなる。
【0016】
【発明が解決しようとする課題】
図11は各分岐高速化方式の1分岐処理と4命令の実行サイクルである。並列度が5命令の場合を見ると分るように,命令実行並列度が上がって分岐間隔サイクルが短くなるとると「PowerPC 604」及び「PowerPC 620」以外の方式は効果がほとんどなくなる。
【0017】
プロセッサの動作周波数の向上にメモリのアクセス時間の短縮が追いつかないという現在のトレンドが今後も続くとすると,内蔵キャッシュミス等を考慮した平均命令フェッチサイクルは長くなる。図12は命令フェッチにnサイクルかかる場合の各分岐高速化方式の1分岐処理と4命令の実行サイクルである。「PowerPC 604」及び「PowerPC 620」以外の方式は,命令フェッチサイクルの増加がそのまま実行サイクルの増加につながる。
【0018】
一方,「PowerPC 604」及び「PowerPC 620」の方式はBTACにヒットしなければ効果がない。「PowerPC 604」の64エントリのBTACのヒット率は90%以上である。図13は「PowerPC 604」及び「PowerPC 620」の分岐高速化方式を5命令並列実行可能なプロセッサに適用した場合の分岐1命令を含む5命令の実行サイクル数のBTACヒット率依存性である。BTACミスの場合は「PowerPC 601」の方式で分岐するものとする。命令フェッチサイクルを1サイクルとするとヒット率90%の場合は100%の場合より10%実行サイクル数が伸びる。今後,平均命令フェッチサイクルが伸びて2〜4サイクルになると,実行サイクル数の伸びを10%程度に維持するためには,BTACヒット率を95〜98%程度に上げなければならない。したがって,BTACの容量を増やす必要がある。実際,「PowerPC 604」より新しい「PowerPC 620」ではBTACを256エントリにしている。しかし,初回分岐命令実行時のミスはなくならないため,BTACをさらに大容量化してもヒット率が100%に近づく保証はない。
【0019】
本発明が解決しようとする課題は,分岐間隔サイクルが短く,平均命令フェッチサイクルが長くなっても有効な分岐高速化方式を実現することである。
【0020】
【課題を解決するための手段】
上記課題を解決するために,従来初回実行時に行っていた分岐バッファ(上記従来例のBTACに相当)への登録を分岐に先立って分岐登録命令で行う。この命令は,従来例の Load lookahead 命令及び Prepare to branch 命令と同様に命令数を増加させ実行サイクル数を伸す可能性がある。しかし,Load lookahead 命令と同様に1度実行すれば何度でも分岐できるので,命令数を増加の実行サイクル数への影響は少ない。
【0021】
分岐バッファへの登録を分岐に先立って命令で行うと,従来の初回実行時ならば確定していた情報が確定していない場合がある。こうした情報は予測によって決定し登録する。特に条件分岐の分岐条件は確定していない可能性が高いので,登録後に確定しても分岐非分岐の情報を登録できるようにする。尚,登録後に確定した場合は分岐命令で処理することもできる。
【0022】
また,分岐の登録が分岐元命令フェッチまでに間に合わない場合の誤動作を防止するため,間に合わなかった登録を検出して分岐する。尚,分岐バッファの構成にも依るが,通常分岐バッファにヒットすると分岐命令の実行は不要になるので,分岐を初回実行時から100%分岐バッファで行うと,分岐命令は不要である。しかし,上記誤動作の防止を命令で行うために分岐命令を挿入することもできる。
【0023】
従来の分岐バッファは分岐元命令アドレスとして分岐命令アドレスを使用していた。しかし,本発明のように分岐命令が不要な場合もあるので,分岐バッファのタグとして使用する分岐元命令アドレスは分岐前に実行する最後の命令のアドレスとする。
【0024】
【作用】
上記課題を解決するための手段により,分岐を100%分岐バッファで行うことができるようになり,分岐処理が高速化される。特に,分岐間隔サイクルが短く,平均命令フェッチサイクルが長い場合に効果が大きい。
【0025】
【実施例】
図14は本発明の分岐高速化方式を適用したプロセッサの第1の実施例である。本実施例は本発明を必要最小限のハードウェアで実現することを目的としたものである。このため,分岐登録が間に合わなかった場合や分岐予測がはずれた場合は従来の分岐命令で処理することをソフトウェアに要求する。
【0026】
まず,本実施例のプロセッサの構成について説明する。プロセッサのCPUコア1は命令アドレス部2,命令デコード部3,及び命令実行部4から成る。該CPUコア1はメモリ5と接続されている。次に各部の動作について説明する。
【0027】
命令アドレス部2は分岐登録情報10,分岐指示11,及び分岐先アドレス12から,命令アドレス6及びプログラムカウンタ8を生成し,それぞれメモリ5及び命令実行部4に出力する。命令アドレス部2は本発明の中核を成す部分である。その詳細は後述する。
【0028】
命令デコード部3は命令7をデコードして命令実行制御情報9及び分岐登録情報10を生成し,それぞれ命令実行部4及び命令アドレス部2に出力する。命令デコード部3は分岐命令をデコードした際に該分岐命令に相当する分岐が既に分岐バッファによって行われていた場合は,該分岐命令が無条件分岐命令ならばNOP (No Operation) 命令に,条件分岐命令ならば分岐条件が逆で次命令アドレスに分岐する命令に変換する。この結果,条件分岐命令は分岐予測失敗補償命令となる。
【0029】
命令実行部4は命令実行制御情報9に基づいて命令を実行する。但し,本発明の特長である分岐登録命令は命令アドレス部2で実行する。分岐命令を実行し,分岐すると判断した場合は分岐指示11をアサートし,同時に分岐先アドレス12を出力する。メモリアクセスが必要な場合はメモリ5にアドレス13を出力しデータ14をやりとりする。
【0030】
メモリ5は命令アドレス6の命令7を返し,アドレス13のデータ14を命令実行部4とやりとりする。CPUコア1が直接やりとりするメモリ5は,具体的には命令とデータが独立のキャッシュメモリ,単一のキャッシュメモリ,外部メモリ等がある。本発明の分岐高速化方式は平均命令フェッチサイクルが長い場合にも性能がでる方式であるため,メモリ5は必ずしも高性能なメモリである必要はない。
【0031】
次に,命令アドレス部2の詳細な構成について説明する。図15は本発明の第1の実施例の命令アドレス部2である。分岐バッファ20,インクリメンタ21,命令アドレスセレクタ22,及び命令アドレスキュー23から成る。次に各部の構成及び動作について説明する。
【0032】
分岐バッファ20は連想メモリである。デコーダ40,連想部41,メモリ部42,及び分岐バッファヒット生成回路43から成る。分岐登録情報10に基づいてエントリの登録を行い,命令アドレス6で検索し,ヒットしたら分岐先命令アドレス32を出力する。同時に分岐バッファヒット33も出力する。
【0033】
本実施例では登録エントリは命令で指定する。従来の分岐バッファは登録エントリをハードウェアで指定していた。すなわち,LRU(Least Reacently Used),FIFO(First In First Out),ランダム等のリプレースアルゴリズムによって指定する。しかし,ハードウェアで指定すると100%のヒット率を保証することは困難である。命令で指定すれば汎用レジスタと同様にソフトウェアで制御可能となり100%のヒット率を保証することも容易になる。
【0034】
エントリの登録は以下のように行う。分岐登録情報10はエントリ番号50,分岐元命令アドレス51,及び分岐先命令アドレス52から成る。まず,エントリ番号50をデコーダ40でデコードして指定エントリの登録信号53をアサートし,分岐元命令アドレス51及び分岐先命令アドレス52をそれぞれ連想部41及びメモリ部42に書込む。同時に該エントリの連想部41の有効ビットを立てる。
【0035】
命令アドレス6による検索は以下のように行う。まず,連想部41の有効ビットの立っているエントリの分岐元命令アドレス51と命令アドレス6とを比較する。両者が一致するエントリがあると一致信号54がアサートされる。尚,誤動作を避けるためにソフトウェアの責任で同一の分岐元アドレスのエントリが存在しないようにしておく。そして,一致信号54がアサートされたエントリのメモリ部42を読出して分岐先命令アドレス32とする。同時に,分岐バッファヒット生成回路43によって全エントリの一致信号54の論理和をとり,分岐バッファヒット33として出力する。
【0036】
インクリメンタ21は命令アドレス6を命令フェッチ幅30だけインクリメントし,分岐しなかった場合の次命令アドレス31を生成する。
【0037】
命令アドレスセレクタ22は,分岐指示11がアサートされたら分岐先アドレス12を,分岐指示11がアサートされずに分岐バッファヒット33がアサートされたら分岐先命令アドレス32を,両者ともアサートされなかったら次命令アドレス31を選択し,命令アドレス6とする。分岐指示11及び分岐バッファヒット33が同時にアサートされた場合に分岐先アドレス12を選択するのは,こちらに対応する分岐の方が順序の早い分岐だからである。
【0038】
命令アドレスキュー23は発行した命令アドレス6をバッファリングして,命令実行制御情報9に同期してプログラムカウンタ8を出力するためのものである。バッファが深いほど命令フェッチのレイテンシ増加に対するスループット低下が少ない。
【0039】
図16は本発明の第1の実施例のパイプライン例及び信号タイミングである。本例では命令フェッチは2サイクルかかるものとする。分岐登録命令の4サイクル後に対応する条件分岐命令を実行し,引続き分岐先命令を3サイクル分開始し,該分岐登録命令の分岐予測が誤っていて,該3サイクル分の分岐先命令をキャンセルし,非分岐側命令を実行している。
【0040】
分岐登録命令の命令アドレス6が出力されると,2サイクル後に命令7が到着する。さらに,1サイクル後に分岐登録情報10が出力され,その1サイクル後に分岐バッファ20に登録される。該登録と同一サイクルに条件分岐命令の命令アドレス6が出力され,次のサイクルで分岐バッファ20が検索され,分岐先命令アドレス32が出力されて,分岐バッファヒット33がアサートされる。そして,命令アドレス6として分岐先命令アドレス32が選択される。その後2サイクルは分岐バッファ20にヒットせずに分岐バッファヒット33がネゲートされるため,命令アドレス6として次命令アドレス31が選択される。条件分岐命令の命令アドレス6の2サイクル後に対応する命令7が到着する。該条件分岐命令は,対応する分岐バッファヒット33がアサートされたので,分岐条件が逆で次命令アドレスに分岐する分岐予測失敗補償命令に変換され,命令7到着の1サイクル後に命令実行制御情報9が出力される。分岐登録命令の分岐予測が誤っているので,次のサイクルで分岐指示11がアサートされ,同時に次命令アドレスすなわち非分岐側命令アドレスが分岐先アドレス12として出力される。この時,分岐先の3サイクル目の命令が分岐命令であるため,分岐指示11と同時に分岐バッファヒット33がアサートされる。前述のように,分岐指示11をアサートした命令の方が順序が早いのでこちらが優先される。すなわち,命令アドレス6として分岐先アドレス12が選択される。そして,3サイクル分の分岐先命令はキャンセルされ,非分岐側命令がフェッチ,デコードされて,実行される。
【0041】
以上のように本発明の第1の実施例では,対応する分岐元命令(図16の例では条件分岐命令)の命令フェッチサイクル+2サイクル(図16の例では4サイクル)前までに分岐登録命令を発行すれば0サイクルで分岐できる。
【0042】
図17は本実施例の32ビット固定命令長の分岐登録命令のフォーマットの第1の例である。32ビット固定命令長は現在最も一般的な命令長である。本分岐登録命令はオペランドとして分岐元アドレス,分岐先アドレス,及び登録エントリ番号を有する。通常の分岐は分岐元及び分岐先アドレスの双方とも静的に決定できる場合が多く,該アドレスを直接指定できることが望ましい。しかし,アドレスは32または64ビットあり,命令による直接指定はできない。そこで通常行われている方式は,プログラムカウンタ相対間接指定方式である。該方式を用いてもオフセットすなわちにプログラムカウンタと指定アドレスとの距離に制限を設けなければ必要なビット数は削減されない。通常の分岐命令は分岐先アドレスのオフセットを8〜24ビット程度に制限している。通常の分岐命令は分岐先アドレスのみを指定するのに対し,本分岐登録命令は分岐元アドレス及び登録エントリ番号も指定するため,同一の命令長であれば,該オフセットの制限を厳しくする必要がある。図17の例では分岐先アドレスのオフセットを短めにして分岐元アドレスのオフセットを加えた例である。本例では,分岐元の方が分岐先より分岐登録命令の近くに置き易いことを考慮して,分岐元に6ビット,分岐先に12ビットフィールドを割当てた。
【0043】
図18は本実施例の32ビット固定命令長の分岐登録命令のフォーマットの第2の例である。短いオフセットで対応できない分岐の登録にはこのように複数命令で登録すればよい。複数の登録命令が同時に実行されない場合,登録の途中で分岐バッファ20の検索が行われる。このため,登録の途中では分岐バッファ20の連想部41の有効ビットをネゲートしておく。1回の登録で多数回使用する場合や全体に対する実行頻度の少ない登録では,本フォーマットの使用による登録命令の増加の性能への影響は少ない。また,サブルーチンのコール及びリターンの場合,従来はレジスタやスタックを介してリターンアドレスを受渡していたが,本登録命令によって分岐バッファ20を介したリターンアドレスの受渡しが可能となる。まず,コール側でリターンアドレスを分岐先アドレスとして登録し,次にサブルーチン側で分岐元アドレスを登録すればよい。尚,登録の途中で別のエントリを登録しなければ,エントリ番号フィールドは最初の登録命令にあれば十分である。
【0044】
図19は本発明の分岐高速化方式を適用したプロセッサの第2の実施例である。本実施例は本発明により分岐登録命令だけで分岐処理を行う。このため,第1の実施例に比べてハードウェア量は増加するが,第1の実施例で必要だった従来の分岐命令が不要となるため実行命令数を削減でき,性能が向上する。また,命令実行並列度が上がったり命令フェッチサイクルが長くなったりして分岐登録が間に合わなくなった場合でも,第1の実施例のように従来の分岐命令まで待たずに,登録した時点で分岐するので,急激に性能が低下することがない。さらに,登録から分岐までの間,分岐条件判定結果を反映することができるので,登録時の分岐予測が誤っていた場合の修正を,第1の実施例のように従来の分岐命令まで待つ必要がない。
【0045】
本実施例のプロセッサの構成は第1の実施例と基本的に同じであり,命令アドレス部2,命令デコード部3,及び命令実行部4から成るCPUコア1とメモリ5から成る。次に各部の動作について説明する。
【0046】
命令アドレス部2は分岐登録情報10,更新フラグ番号15,及び更新フラグ値16から,命令アドレス6及びプログラムカウンタ8を生成し,それぞれメモリ5及び命令実行部4に出力する。命令アドレス部2の詳細は後述する。
【0047】
命令デコード部3は命令7をデコードして,命令実行制御情報9を命令実行部4に,分岐登録情報10及び更新フラグ番号15を命令アドレス部2にそれぞれ出力する。
【0048】
命令実行部4の構成及び動作は第1の実施例と基本的に同じである。但し,第1の実施例で命令実行部4で行っていた分岐判定を命令アドレス部2で行うため,図14の分岐指示12の代りに本実施例では分岐判定に必要な更新フラグ値16を命令アドレス部2に出力する。 メモリ5の構成及び動作は第1の実施例と同じである。
【0049】
次に,命令アドレス部2の詳細な構成について説明する。図20は本発明の第2の実施例の命令アドレス部2である。分岐バッファ20,インクリメンタ21,命令アドレスセレクタ22,及び命令アドレスキュー23から成る。次に各部の構成及び動作について説明する。
【0050】
本実施例の分岐バッファ20には第1の実施例の図15の分岐バッファ20に,制御部44が追加されている。尚,図15の分岐バッファヒット生成回路43の機能は制御部44に含まれている。また,図15にあった連想部41の有効ビットはない。本実施例においても登録エントリは命令で指定する。図15の分岐バッファ20と同様に,分岐登録情報10に基づいてエントリの登録を行い,命令アドレス6で検索し,ヒットしたら分岐先命令アドレス32及び分岐制御情報60を出力する。また,登録後の条件判定のために,更新フラグ番号15で検索し,ヒットしたら更新フラグ値16を基にそのエントリの分岐制御情報を更新する。尚,制御部44の動作は後から図21を用いて詳細に説明する。
【0051】
エントリの登録は以下のように行う。分岐登録情報10には,第1の実施例のエントリ番号50,分岐元命令アドレス51,及び分岐先命令アドレス52に,分岐制御情報70を追加している。まず,エントリ番号50をデコーダ40でデコードして指定エントリの登録信号53をアサートし,分岐元命令アドレス51,分岐制御情報70,及び分岐先命令アドレス52をそれぞれ連想部41,制御部44,及びメモリ部42に書込む。
【0052】
命令アドレス6による検索は以下のように行う。まず,連想部41の制御部44からの有効信号71のアサートされているエントリの分岐元命令アドレス51と命令アドレス6とを比較する。両者が一致するエントリがあると一致信号54がアサートされる。そして,一致信号54がアサートされたエントリの制御部44及びメモリ部42を読出してそれぞれ分岐制御情報60及び分岐先命令アドレス32とする。一致するエントリがない場合には分岐制御情報60のうち後述する条件再判定ビット,条件未確定ビット,及び分岐ビットをネゲートする。こうすることにより第1の実施例で必要だった分岐バッファヒット33が不要となる。
【0053】
登録後の条件判定動作は全て制御部44内で行われる。詳細は後から図21を用いて説明する。
【0054】
図21は分岐バッファ20の制御部44の1エントリの詳細である。分岐制御情報として関係フラグ番号100,条件再判定ビット101,条件未確定ビット102,分岐ビット103,及び分岐フラグ値104の保持手段を有する。
【0055】
エントリ登録の際に登録エントリに指定されて登録信号53がアサートされると,分岐制御情報70を該保持手段に保持する。各分岐制御情報は以下のような機能を持つ。関係フラグ番号100は,分岐方向の決定に関係するフラグの番号である。条件再判定ビット101は条件確定後でも関係フラグの更新の度に分岐判定を行うことを示す。1回の登録で何度も分岐判定して分岐する場合に使用する。条件未確定ビット102はまだ関係フラグの更新が行われていないために分岐条件が確定していないことを示す。したがって,条件再判定ビット101または条件未確定ビット102のアサートされているエントリは分岐方向が変化する可能性がある。該変化は後述する登録後の条件判定によって検出する。分岐ビット103は分岐がテイクンまたはテイクン予測であることを示す。分岐フラグ値104は分岐がテイクンになる場合のフラグ値である。
【0056】
命令アドレス6による検索の際には,条件再判定ビット101,条件未確定ビット102,及び分岐ビット103の論理和をとって有効信号71として出力する。該論理を有効信号71として使用するために,プロセッサのリセット等で分岐バッファ20を初期化する際には該3ビットをクリアする。第1の実施例では分岐する場合のみ登録していたため本実施例の分岐ビット103に相当する信号を有効ビットとして使用することができた。本実施例では分岐ビット103がネゲートされていても条件再判定ビット101または条件未確定ビット102がアサートされていると,登録後の条件判定で分岐ビット103がアサートされる可能性があるのでそのエントリは有効であるとみなす必要がある。一方,3ビットともネゲートされると分岐ビット103がアサートされる可能性がなくなるのでそのエントリは無効としてよい。命令アドレス6による検索の結果一致信号54がアサートされると,該保持手段の分岐制御情報100〜104を読出し,分岐制御情報60として出力する。前述のように分岐バッファミスによって一致信号54が全てネゲートされた場合は,分岐制御情報60のうち条件再判定ビット101,条件未確定ビット102,及び分岐ビット103をネゲートして出力する。
【0057】
登録後の条件判定動作では,条件再判定ビット101または条件未確定ビット102がアサートされている場合に連想指示105をアサートして関係フラグ番号100と更新フラグ番号15との比較を行い,一致した場合は条件確定106をアサートする。該条件確定106がアサートされると条件未確定ビット102をクリアし,分岐ビット103を更新する。分岐フラグ値104と更新フラグ値16とが一致すれば分岐,一致しなければ非分岐であるから,新しい分岐ビット103は分岐フラグ値104と更新フラグ値16との排他的論理和の否定である。
以上が本実施例の分岐バッファ20の動作である。
インクリメンタ21の動作は第1の実施例と同一である。
【0058】
命令アドレスセレクタ22は,第1の実施例における命令アドレス6の他に非予測側命令アドレス62も選択する。分岐失敗信号63がアサートされたら,予測側と非予測側を入替えて再分岐するために,命令アドレス6として再分岐先命令アドレス64を,非予測側命令アドレス62として予測側命令アドレス65を選択する。分岐失敗信号63がアサートされずに分岐制御信号60の分岐ビット61がアサートされたら分岐テイクンであるから,命令アドレス6として分岐先命令アドレス32を,非予測側命令アドレス62として次命令アドレス31を選択する。両者ともアサートされなかったら分岐非テイクンであるから,命令アドレス6として次命令アドレス31を,非予測側命令アドレス62として分岐先命令アドレス32を選択する。分岐失敗信号63及び分岐ビット61が同時にアサートされた場合に分岐失敗信号63を優先するのは,こちらに対応する分岐の方が順序の早い分岐だからである。
【0059】
第1の実施例における命令アドレスキュー23が単なるバッファであったのに対し,本実施例の命令アドレスキュー23は,命令フェッチ要求後の分岐条件判定機能と,分岐登録遅延及び分岐予測失敗の際の正しい方向への再分岐機能を有する。キューはシフトレジスタでもシフトしない普通のラッチやメモリでも構成できる。本実施例では普通のラッチで構成する。図20のように命令アドレスキュー23はポインタ80,連想部81,制御信号変換部82,制御部83,及びメモリ部84から成る。ポインタ80はキューの先頭91及び末尾90を指す。連想部81は命令フェッチ要求済みの命令アドレスを保持する。制御信号変換部82は分岐バッファ20用の分岐制御情報を命令アドレスキュー23用の分岐制御情報に変換し,制御部83は該変換後の分岐制御情報を保持する。メモリ部84は連想部81に保持した命令アドレスの次の命令アドレスのうち非予測側を保持する。予測側は命令フェッチ要求を行うので次のエントリの連想部81に保持される。尚,制御信号変換部82及び制御部83の動作は後から図22及び図23を用いて詳細に説明する。
【0060】
命令アドレスキュー23への書込みは以下のように行う。まず,命令アドレスセレクタ22において選択した命令アドレス6を,連想部81のポインタ80の末尾90の指すエントリに書込む。次のサイクルに該命令アドレス6に対応する分岐制御情報60及び非予測側命令アドレス62が生成されるので,分岐制御情報60は制御信号変換部82で変換し,非予測側命令アドレス62はそのまま,それぞれ制御部83及びメモリ部84の末尾90の指すエントリに書込む。このように連想部81への書込みは他より1サイクル早いので,図のように末尾90は後続命令側に1エントリずらす。
【0061】
命令アドレスキュー23においては,分岐バッファ20における登録後の条件判定と同様に,命令フェッチ要求後の条件判定を行う。分岐バッファ20の場合は命令フェッチ要求前であったので,条件判定結果を分岐ビット103に反映すれば処理は完了した。一方,命令アドレスキュー23の場合は命令フェッチ要求後であるから,条件判定結果が予測と異なる場合は直ちに正しい方向へ再分岐する必要がある。まず,制御部83において更新フラグ番号15が入力され,次のサイクルで更新フラグ値が入力されると条件判定を行い,その結果分岐予測失敗が検出されると分岐失敗63及び先頭失敗94をアサートする。先頭失敗94の指すエントリの連想部81及びメモリ部84にそれぞれ予測側及び非予測側命令アドレスが保持されているので,これを読出して予測側命令アドレス65及び再分岐先命令アドレス64とする。尚,先頭失敗94は連想部81においては予測失敗であった分岐の予測側命令アドレスを指すために末尾90と同様に後続命令側に1エントリずらす。
【0062】
分岐バッファの登録遅延に対応するために,分岐バッファ登録時に命令アドレスキュー23の連想部81の,制御部からの有効信号92のアサートされているエントリの命令アドレスを分岐登録情報10の分岐元命令アドレス51’で検索し,ヒット93がアサートされたら以下の処理を行う。まず,分岐登録情報10の分岐制御情報70’を制御信号変換部82で変換して制御部83へ,分岐先命令アドレス52’はそのままメモリ部84へ,それぞれヒット93の指すエントリに書込む。さらに,分岐登録情報10の分岐ビットがアサートされている場合は,登録遅延によって分岐すべきところを分岐しなかったことになるので,分岐失敗63,先頭失敗94,及び登録遅延先行95をアサートする。そして,前述の分岐予測失敗の場合と同様に先頭失敗94の指すエントリの連想部81を読出して予測側命令アドレス65とする。再分岐先命令アドレス64は登録遅延先行95によって分岐先命令アドレス52’が選択される。
【0063】
図22に制御信号変換部82の詳細を示す。命令アドレスキュー23の制御部83及びメモリ部84への書込みは分岐バッファ出力に基づく分岐バッファ系と分岐登録情報10に基づく登録系の2通あり,これに対応して制御信号変換部82には2つの変換論理があり,分岐バッファ制御情報60,70’がそれぞれ命令キュー制御情報112,113に変換される。命令アドレスキュー23に書込まれる命令アドレスを分岐元アドレスとする分岐の分岐先命令フェッチ要求は既に発行されているため,分岐ビット103及び分岐フラグ値104は不要であり,代りに分岐予測の成功/失敗を判定するために分岐成功フラグ値111が必要となる。但し,分岐バッファ登録遅延の際には分岐登録情報10の分岐ビットのアサートが登録遅延による分岐失敗を示すので,登録系の出力には分岐ビット114も付加する。分岐ビット103がアサートされている場合は分岐フラグ値104と分岐成功フラグ値111は一致し,分岐ビット103がネゲートされている場合は分岐フラグ値104と分岐成功フラグ値111は一致しないので,分岐成功フラグ値111は分岐ビット103及び分岐フラグ値104の排他的論理和の否定である。
【0064】
図23は命令アドレスキュー23の制御部83の1エントリの詳細である。命令アドレスキュー制御情報として有効ビット110,関係フラグ番号100,条件再判定ビット101,条件未確定ビット102,及び分岐成功フラグ値111の保持手段を有する。斜線は横からの制御信号に対するポートがないことを示す。
【0065】
命令アドレスキュー23への書込みの際に,ポインタ80からの末尾90がアサートされて書込みエントリに指定されると,命令アドレスキュー制御情報112を該保持手段に保持する。
【0066】
また,命令フェッチ要求後の条件判定のために,条件再判定ビット101または条件未確定ビット102がアサートされている場合に連想指示105をアサートして関係フラグ番号100と更新フラグ番号15との比較を行い,一致した場合は条件確定106をアサートする。該条件確定106がアサートされると条件未確定ビット102をクリアし,分岐成功フラグ値111を更新フラグ値16に更新する。分岐予測は分岐成功フラグ値111と更新フラグ値16とが一致すれば成功,一致しなければ失敗である。条件確定106がアサートされて分岐予測が失敗であった場合は予測失敗115をアサートする。
【0067】
また,登録遅延検出のために,有効ビット110を有効信号92として連想部81に出力し,検索の結果ヒット93がアサートされたら,命令アドレスキュー制御情報113を該保持手段に保持する。さらに,分岐ビット114がアサートされていたら登録遅延116をアサートする。
【0068】
予測失敗115または登録遅延116がアサートされると分岐失敗であるから分岐失敗117をアサートする。そして,前エントリからの先行分岐失敗118がネゲートされていてたら最初の分岐失敗であるから,先頭分岐失敗94をアサートする。また,次エントリへの先行分岐失敗118’として分岐失敗117と先行分岐失敗118との論理和を末尾90でマスクした値を出力する。末尾90でマスクするのは,キューがシフトレジスタになっていないためにエントリをラップアラウンドさせた上で末尾90で切って順序関係を保っているためである。該先行分岐失敗118’は次エントリの先行分岐失敗118に接続される。最上段エントリの先行分岐失敗118’は先行分岐失敗118”を介してラップアラウンドし最下段の先行分岐失敗118に接続される。さらに,分岐失敗117と前エントリからの分岐失敗63との論理和をとって新たな分岐失敗63’として次エントリへ出力する。そして,最上段エントリからの分岐失敗63’は制御部83出力の分岐失敗63となる。また,登録遅延116がアサートされて前エントリからの先行分岐失敗118がネゲートされていてたら最初の分岐失敗が登録遅延によるものであるから前エントリからの登録遅延先行95との論理和をとって新たな登録遅延先行95’として次エントリへ出力する。そして,最上段エントリからの登録遅延先行95’は制御部83出力の登録遅延先行95となる。尚,登録遅延先行95’は予測失敗115によってマスクしていないので予測失敗115及び登録遅延116が同時に発生した場合は登録遅延116が優先される。このケースは,登録遅延によって本来上書きによって消滅しているはずの分岐が残っていて予測失敗が発生したことを意味し,登録遅延116を優先すれば正しく動作する。ちなみに,登録がさらに遅れた場合は誤って予測失敗が発生してしまうけれども,その後登録遅延による再分岐が発生して正しく動作する。
以上が本実施例の命令アドレスキュー23の動作である。
【0069】
図24は本発明の第2の実施例のパイプライン例及び信号タイミングである。本例でも図16と同様に命令フェッチは2サイクルかかるものとする。分岐登録命令の3サイクル後に対応する分岐元兼関係フラグ更新命令を実行し,引続き分岐先命令を3サイクル分開始し,該分岐登録命令の分岐予測が誤っていて,該3サイクル分の分岐先命令をキャンセルし,非分岐側命令を実行している。
【0070】
分岐登録命令の命令アドレス6が出力されると,2サイクル後に命令7が到着し,その1サイクル後に分岐登録情報10が出力される。分岐登録情報10と同一サイクルに分岐元兼関係フラグ更新命令の命令アドレス6が出力され,次のサイクルで分岐登録情報10の分岐元命令アドレス51’で命令アドレスキュー23が検索されて該分岐元兼関係フラグ更新命令の命令アドレス6にヒットし,分岐失敗63及び登録遅延95がアサートされる。この結果次の命令アドレス6として分岐登録情報10の分岐先命令アドレス52’が選択される。その後2サイクルは分岐バッファ20にヒットせずに分岐ビット61がネゲートされるため,命令アドレス6として次命令アドレス31が選択される。分岐元兼関係フラグ更新命令のの命令アドレス6の2サイクル後に対応する命令7が到着し,その1サイクル後に命令実行制御情報9及び更新フラグ番号15が出力される。さらに次のサイクルで更新フラグ番号16が確定すると,命令アドレスキュー23において命令フェッチ要求後の条件判定が行われ分岐失敗63がアサートされる。この時,分岐先の3サイクル目の命令が分岐元命令であるため,分岐ビット61がアサートされる。前述のように,分岐失敗63をアサートした分岐の方が順序が早いのでこちらが優先される。すなわち,命令アドレス6として非予測側命令アドレス96が選択される。そして,3サイクル分の分岐先命令はキャンセルされ,非分岐側命令がフェッチ,デコードされて,実行される。
【0071】
以上のように本発明の第2の実施例では,対応する分岐元命令の命令フェッチサイクル+1サイクル(図24の例では3サイクル)前までに分岐登録命令を発行すれば0サイクルで分岐できる。第1の実施例より1サイクル遅くて良い理由は,登録遅延時に直ちに正しい方向へ分岐する機構があるからである。
【0072】
図25は本実施例の32ビット固定命令長の分岐登録命令のフォーマットの第1の例である。第1の実施例よりも本実施例では分岐制御情報を余分に指定するため,図のように分岐元及び分岐先フィールドを図17の場合より短くする必要がある。図26は本実施例の32ビット固定命令長の分岐登録命令のフォーマットの第2の例である。第1の実施例の図18と同様に複数命令で登録する。
【0073】
図27は本発明の分岐高速化方式を適用したプロセッサの第3の実施例である。本発明の第2の実施例では分岐条件判定に一般的な条件分岐命令の方式を採用している。すなわち,比較命令等によってフラグ値を変化させ,該フラグ値に基づいて分岐/非分岐を決定する。フラグが複数ある場合はフラグ番号を指定する。この方式には以下のような利点がある。まず,1つのフラグ値を複数の分岐の条件判定に使用することができる。また,同一のフラグ値に対して分岐ごとに分岐/非分岐を設定できる。しかし,本発明にこの分岐条件判定方式を適用すると第2の実施例のようにハードウェア量が大きくなってしまう。本発明の第3の実施例は,分岐条件判定にフラグを用いずに,1つの分岐に1つの比較または検査命令を対応させて,第2の実施例で必要だった関係フラグ番号,分岐フラグ値,及び分岐成功フラグ値を不要とし,第2の実施例よりもハードウェア量を削減した例である。
【0074】
第2の実施例と第3の実施例の構成は類似しているので,異なる点のみ説明する。図19の第2の実施例で命令デコード部3から命令アドレス部2に出力していた更新フラグ番号15の代りに,図27の第3の実施例では分岐判定エントリ番号17を出力する。また,第2の実施例で命令実行部4から命令アドレス部2に出力していた更新フラグ値16の代りに,第3の実施例では分岐指示11を出力する。これらの信号はいずれも分岐条件判定命令に関わるものである。第3の実施例において,分岐条件判定命令がデコードされると分岐バッファに登録された対応するエントリを指定するために分岐判定エントリ番号17を出力する。そして,命令実行部4において分岐判定を行い分岐指示11を出力する。
【0075】
次に,命令アドレス部2の詳細な構成について説明する。図28は本発明の第3の実施例の命令アドレス部2である。本命令アドレス部2も第2の実施例の命令アドレス部2と類似しているので,異なる点のみ説明する。
【0076】
本実施例の分岐バッファ20は図20の第2の実施例と制御部44が異なる。第2の実施例で制御部44に入力していた更新フラグ番号15及び更新フラグ値16の代りに,分岐判定エントリ番号17及び分岐指示11を入力する。また,本実施例ではエントリ番号を登録以外の各動作でも使用するためデコーダ40を制御部44に含め,エントリ番号50を分岐制御情報70に含めた。制御部44の動作を除けば分岐バッファ20の動作は第2の実施例と同様である。制御部44は第2の実施例に比べて大幅に簡素化される。該制御部の動作は図29を用いて説明する。
【0077】
図29は分岐バッファ20の制御部44の詳細である。分岐制御情報として分岐ビット103及び有効ビット120の保持手段を有する。第2の実施例で必要だった関係フラグ番号100,条件再判定ビット101,及び条件未確定ビット102は,分岐判定を行うエントリをエントリ番号で直接指定するので不要である。また,分岐フラグ値104も,更新フラグ値16の代りに分岐指示11を使用するので不要である。エントリ登録の際には登録エントリ番号デコーダ121において分岐制御情報70のエントリ番号をデコードして指定エントリの登録信号53をアサートし,分岐制御情報70の分岐ビット103を該保持手段に保持し,有効ビット120を立てる。また,命令アドレス6による検索の際には有効ビット120を有効信号71として出力し,検索の結果ヒット54がアサートされると分岐ビット103を読出し,ヒットエントリ番号エンコーダによってエンコードされたヒットエントリ番号と共に分岐制御情報60として出力する。尚,エントリ番号の一つを存在しないエントリに割当てておき,分岐バッファミスの場合には分岐制御情報60として分岐ビットをネゲートし,エントリ番号を該存在しないエントリとする。登録後の条件判定動作の際に,分岐判定エントリ番号17が入力されると分岐判定エントリ番号デコーダでデコードし,その結果分岐判定エントリに指定されたエントリの分岐ビット103を分岐指示11の値で置換える。
【0078】
本実施例の命令アドレスキュー23は図20と比較すると制御信号変換部82がなく,制御部83が異なる。第2の実施例で制御部83に入力していた更新フラグ番号15及び更新フラグ値16の代りに分岐判定エントリ番号17及び分岐指示11を入力する。他の部分の動作は第2の実施例と同様である。制御部83の動作は図30を用いて説明する。
【0079】
図30は命令アドレスキュー23の制御部83の1エントリの詳細である。本制御部83は分岐バッファ20の制御部44ほど大幅には簡素化されない。命令アドレスキュー制御情報として,有効ビット110,エントリ番号130,及び分岐ビット103の保持手段を有する。
【0080】
命令アドレスキュー23への書込みの際に,ポインタ80からの末尾90がアサートされて書込みエントリに指定されると,有効ビット110を立て,分岐制御情報60を該保持手段に保持する。
【0081】
また,命令フェッチ要求後の条件判定のために,エントリ番号130と分岐指示11との比較を行い,一致した場合は条件確定106をアサートする。該条件確定106がアサートされると分岐ビット103を分岐指示11に更新する。分岐予測は分岐ビット103と分岐指示11とが一致すれば成功,一致しなければ失敗である。条件確定106がアサートされて分岐予測が失敗であった場合は予測失敗115をアサートする。
【0082】
また,登録遅延検出のために,有効ビット110を有効信号92として連想部81に出力し,検索の結果ヒット93がアサートされたら,分岐制御情報70’を該保持手段に保持する。さらに,分岐制御情報70’の分岐ビットがアサートされていたら登録遅延116をアサートする。
予測失敗115または登録遅延116がアサートされた場合の動作は図23と同様である。
【0083】
本実施例は,同時に複数の分岐の分岐判定ができないことを除けば第2の実施例と同等の機能を有するので,プログラムステップ数が増加することはあるけれども見かけ上の性能は第2の実施例と同等である。
【0084】
図31は本発明の分岐高速化方式を適用したプロセッサの第4の実施例の命令アドレス部2である。尚,プロセッサ全体の構成は第2の実施例と同一である。多数の命令を並列実行できるプロセッサの場合ほぼ毎サイクル分岐が発生する。分岐登録を数サイクル先行させた場合その後の命令実行シーケンスによって登録しても実行されない分岐命令がある。すなわち,登録する分岐命令は実行する分岐命令より多い。したがって,1回の分岐登録に対して1回の分岐という最悪のケースでは1サイクルに1分岐の登録では登録がネックとなってしまう。本実施例はこのようなケースでも分岐登録がネックとならないように対策した例である。具体的には分岐バッファをバンク分けして1サイクルに複数の分岐登録を行えるようにする。これに対応して,分岐登録命令も1命令で複数の分岐登録を行えるようにする。
【0085】
また,平均命令フェッチサイクルが長い場合,分岐予測失敗によるペナルティが大きい。本実施例では該ペナルティを削減するために,非予測側命令のフェッチを可能にした。具体的には,命令フェッチ幅を広げて予測側と非予測側を交互にフェッチしても命令供給能力が十分であるようにし,命令アドレスキューも予測側と非予測側の2組用意する。そして,予測失敗時に非予測側から命令を供給することによりペナルティを削減する。
【0086】
次に図31の説明を行う。本命令アドレス部は第2の実施例と同様に分岐バッファ20,インクリメンタ21,命令アドレスセレクタ22,及び命令アドレスキュー23から成る。
【0087】
分岐バッファ20は図20の第2の実施例の分岐バッファ20を2バンク持たせた構成である。バンクの異なるエントリは異なるエントリ番号を持つ。そして,バンクの異なるエントリには同時に登録できる。また,バンクが異なっても2つのエントリに同時にヒットすることはないものとする。同時にヒットするということは,一つの命令アドレスに対する分岐先または分岐条件が複数あるか,同一の分岐が2エントリに登録されていることを意味する。このうち一つの命令アドレスに対する分岐先が複数ある場合は命令フェッチ要求時に分岐条件の確定していない多方向分岐に対応し,サポートすればプロセッサの性能向上に寄与する。しかし,該多方向分岐のサポートはハードウェア量の増大を招き,現状のハードウェアでも命令フェッチ要求時に分岐条件の確定している多方向分岐はサポートできるので,本実施例ではサポートしない。したがって,本実施例では読出し時に出力セレクタ24及び25によって各バンク出力の中からヒットバンクを選択して,分岐制御情報60及び分岐先アドレス32とする。
【0088】
インクリメンタ21の命令アドレス6の入力ポートに命令アドレスラッチ26及びセレクタ27を付加し,命令アドレス6を1サイクル保持できるようにして,予測側と非予測側の2つのアドレス系列を交互にフェッチできるようにする。また,予測失敗や登録遅延時に直ちにアドレス系列を切替えられるようにセレクタ27を通して1サイクル保持していない命令アドレス6も入力できるようにする。
【0089】
命令アドレスセレクタ22は分岐失敗を予測側と非予測側のどちらの命令アドレスキュー23で検出しても正しい方向への再分岐処理ができるように,各キューからの再分岐命令アドレス64及び64’を命令アドレス6のセレクタに入力し,予測側アドレス65及び65’を非予測側命令アドレス62のセレクタに入力して,予測失敗63及び63’によって選択できるような構成になっている。
【0090】
複数の分岐登録を同時に実行する最も単純な方式は,複数の分岐登録命令を同時に実行することである。あるいは,プログラム中にデータとして複数の分岐登録情報を格納しておき,プログラムカウンタ相対でフェッチして分岐バッファに登録してもよい。尚,複数の分岐登録を同時に実行する場合,分岐元及び分岐先アドレスをプログラムカウンタ相対で指定すると,アドレス計算のための加算器が多数必要になり,ハードウェアの増大を招く。そこで,プログラムのポータビリティは若干損われるけれども,命令でアドレスの下位ビットを指定しプログラムカウンタの上位ビットと結合するようにすれば,加算器が不要となる。
以上が本発明の第4の実施例である。
【0091】
分岐バッファの利点は分岐元アドレスが確定した時点で通常より早めに分岐先の情報が得られる点にある。従来の分岐バッファは分岐先の情報として分岐先命令アドレスのみを保持していた。しかし,早めに欲しい情報は他にもあり,バッファ容量の増加という費用に対して十分な効果があれば,欲しい情報を分岐バッファに書込んでおくことは性能向上策として有効である。
【0092】
例えば,分岐登録命令で分岐先命令列の依存関係を登録しておけば,スーパースカラ方式の高速化のネックとなっている命令依存関係解析のうち,静的に解析できる部分をあらかじめ済ましておくことができる。
【0093】
【発明の効果】
本発明によれば、分岐を100%分岐バッファで行うことができるようになり,分岐処理が高速化される。特に,分岐間隔サイクルが短く,平均命令フェッチサイクルが長い場合に効果が大きい。
また,分岐命令が不要になるので,従来の分岐処理用のハードウェアを削減できる。分岐処理信号は通常クリティカルパスになるので,分岐バッファ方式と従来方式の併用に伴って必要となるマルチプレクサを削減できることはクリティカルパス対策にもなる。
本発明は,従来困難であった可変長命令セットの分岐高速化にも有効である。
【図面の簡単な説明】
【図1】従来の高速化されない条件分岐を含む命令処理パイプラインの説明図。
【図2】従来の5命令並列実行可能なプロセッサにおける高速化されない条件分岐を含む命令処理パイプラインの説明図。
【図3】従来のPowerPC 601の分岐高速化方式をスカラプロセッサに適用した場合の説明図。
【図4】従来のPowerPC 601の分岐高速化方式を5命令並列実行可能なプロセッサに適用した場合の説明図。
【図5】従来のPowerPC 604及びPowerPC 620の分岐高速化方式をスカラプロセッサに適用した場合の説明図。
【図6】従来のPowerPC 604及びPowerPC 620の分岐高速化方式を5命令並列実行可能なプロセッサに適用した場合の説明図。
【図7】従来のAdvanced Scientific Computerの分岐高速化方式をスカラプロセッサに適用した場合の説明図。
【図8】従来のAdvanced Scientific Computerの分岐高速化方式を5命令並列実行可能なプロセッサに適用した場合の説明図。
【図9】従来のPIPE Processorの分岐高速化方式をスカラプロセッサに適用した場合の説明図。
【図10】従来のPIPE Processorの分岐高速化方式を5命令並列実行可能なプロセッサに適用した場合の説明図。
【図11】各分岐高速化方式の1分岐処理と4命令の実行サイクルの説明図。
【図12】命令フェッチにnサイクルかかる場合の各分岐高速化方式の1分岐処理と4命令の実行サイクルの説明図。
【図13】 PowerPC 604及びPowerPC 620の分岐高速化方式を5命令並列実行可能なプロセッサに適用した場合の分岐1命令を含む5命令の実行サイクル数のBTACヒット率依存性の説明図。
【図14】本発明の分岐高速化方式を適用したプロセッサの第1の実施例を示す図。
【図15】本発明の第1の実施例の命令アドレス部を示す図。
【図16】本発明の第1の実施例のパイプライン例及び信号タイミングを示す図。
【図17】本発明の第1の実施例の32ビット固定命令長の分岐登録命令のフォーマットの第1の例を示す図。
【図18】本発明の第1の実施例の32ビット固定命令長の分岐登録命令のフォーマットの第2の例を示す図。
【図19】本発明の分岐高速化方式を適用したプロセッサの第2の実施例を示す図。
【図20】本発明の第2の実施例の命令アドレス部を示す図。
【図21】本発明の第2の実施例の分岐バッファの制御部の1エントリを示す図。
【図22】本発明の第2の実施例の命令アドレスキュー制御信号変換部を示す図。
【図23】本発明の第2の実施例の命令アドレスキュー制御部の1エントリを示す図。
【図24】本発明の第2の実施例のパイプライン例及び信号タイミングを示す図。
【図25】本発明の第2の実施例の32ビット固定命令長の分岐登録命令のフォーマットの第1の例を示す図。
【図26】本発明の第2の実施例の32ビット固定命令長の分岐登録命令のフォーマットの第2の例を示す図。
【図27】本発明の分岐高速化方式を適用したプロセッサの第3の実施例を示す図。
【図28】本発明の第3の実施例の命令アドレス部を示す図。
【図29】本発明の第3の実施例の分岐バッファの制御部を示す図。
【図30】本発明の第3の実施例の命令アドレスキュー制御部の1エントリを示す図。
【図31】本発明の分岐高速化方式を適用したプロセッサの第4の実施例を示す図。
【符号の説明】
1…プロセッサのCPUコア、2…命令アドレス部、3…命令デコード部、4…命令実行部、5…メモリ、6…命令アドレス、7…命令、8…プログラムカウンタ、9…命令実行制御情報、10…分岐登録情報、11…分岐指示、12…分岐先アドレス、13…アドレス、14…データ。
Claims (3)
- 分岐前に実行する最後の命令に対応する分岐元命令アドレスと、分岐先命令アドレスとを登録する分岐バッファを有し、
前記分岐バッファへの登録は、分岐登録命令によって行なわれ、
前記分岐バッファに登録された前記分岐元命令アドレスと命令フェッチアドレスが一致した場合に、次の命令フェッチアドレスを前記分岐先命令アドレスに切替え、
前記分岐バッファの各エントリに番号を付与し、前記分岐登録命令で前記番号を指定して前記分岐バッファへの登録を行うことにより、前記分岐バッファをプログラムで管理することを特徴とするプロセッサ。 - 請求項1において、
前記分岐登録命令による登録の際に、条件未確定ビット,関係フラグ番号,及び分岐フラグ値も前記分岐バッファに登録し、条件未確定ビットの立っているエントリの関係フラグ番号を更新フラグ番号で検索してヒットした場合に、ヒットしたエントリに登録されている分岐フラグ値及び更新フラグ値から分岐または非分岐を判断し、判断結果を前記分岐バッファに書込むと同時に条件未確定ビットをクリアすることを特徴とするプロセッサ。 - 請求項1において、
前記分岐登録命令による登録の際に、条件再判定ビット,関係フラグ番号,及び分岐フラグ値も前記分岐バッファに登録し、条件再判定ビットの立っているエントリの関係フラグ番号を更新フラグ番号で検索してヒットした場合に、ヒットしたエントリに登録されている分岐フラグ値及び更新フラグ値から分岐または非分岐を判断し、判断結果を前記分岐バッファに書込むことを特徴とするプロセッサ。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP22000995A JP3765111B2 (ja) | 1995-08-29 | 1995-08-29 | 分岐登録命令を有するプロセッサ |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP22000995A JP3765111B2 (ja) | 1995-08-29 | 1995-08-29 | 分岐登録命令を有するプロセッサ |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH0962508A JPH0962508A (ja) | 1997-03-07 |
JP3765111B2 true JP3765111B2 (ja) | 2006-04-12 |
Family
ID=16744507
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP22000995A Expired - Fee Related JP3765111B2 (ja) | 1995-08-29 | 1995-08-29 | 分岐登録命令を有するプロセッサ |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3765111B2 (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4610218B2 (ja) * | 2004-03-30 | 2011-01-12 | ルネサスエレクトロニクス株式会社 | 情報処理装置 |
US8935517B2 (en) * | 2006-06-29 | 2015-01-13 | Qualcomm Incorporated | System and method for selectively managing a branch target address cache of a multiple-stage predictor |
JP2011209774A (ja) * | 2010-03-26 | 2011-10-20 | Fujitsu Ltd | 分岐予測方法及びその方法を実行する分岐予測回路 |
-
1995
- 1995-08-29 JP JP22000995A patent/JP3765111B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH0962508A (ja) | 1997-03-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7437537B2 (en) | Methods and apparatus for predicting unaligned memory access | |
JP3542020B2 (ja) | 複数予測分岐命令にわたる命令フェッチの位置合わせ命令キャッシュ処理を実行するプロセッサ装置およびプロセッサ制御方法 | |
JP3182740B2 (ja) | 単一クロック・サイクルに非連続命令を取り出すための方法およびシステム。 | |
KR100559482B1 (ko) | 고성능 알아이에스씨 마이크로프로세서 구조 | |
US5287467A (en) | Pipeline for removing and concurrently executing two or more branch instructions in synchronization with other instructions executing in the execution unit | |
US6178498B1 (en) | Storing predicted branch target address in different storage according to importance hint in branch prediction instruction | |
JP3599409B2 (ja) | 分岐予測装置 | |
US6279105B1 (en) | Pipelined two-cycle branch target address cache | |
US5421020A (en) | Counter register implementation for speculative execution of branch on count instructions | |
US6523110B1 (en) | Decoupled fetch-execute engine with static branch prediction support | |
US6330662B1 (en) | Apparatus including a fetch unit to include branch history information to increase performance of multi-cylce pipelined branch prediction structures | |
US7444501B2 (en) | Methods and apparatus for recognizing a subroutine call | |
EP0394624B1 (en) | Multiple sequence processor system | |
JP2004533695A (ja) | 分岐目標を予測する方法、プロセッサ、及びコンパイラ | |
US5935238A (en) | Selection from multiple fetch addresses generated concurrently including predicted and actual target by control-flow instructions in current and previous instruction bundles | |
US6647490B2 (en) | Training line predictor for branch targets | |
US5964869A (en) | Instruction fetch mechanism with simultaneous prediction of control-flow instructions | |
US5903768A (en) | Pipelined Microprocessor and load address prediction method therefor | |
US20070174592A1 (en) | Early conditional selection of an operand | |
US6983359B2 (en) | Processor and method for pre-fetching out-of-order instructions | |
US20040168043A1 (en) | Line predictor which caches alignment information | |
JP3683439B2 (ja) | 分岐予測を抑止する情報処理装置および方法 | |
US6546478B1 (en) | Line predictor entry with location pointers and control information for corresponding instructions in a cache line | |
JP3779012B2 (ja) | 分岐による中断のないパイプライン化されたマイクロプロセッサ及びその動作方法 | |
US6289428B1 (en) | Superscaler processor and method for efficiently recovering from misaligned data addresses |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20050112 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050118 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050318 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050412 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050705 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20050927 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20051116 |
|
A911 | Transfer of reconsideration by examiner before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20051202 |
|
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: 20060104 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060117 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100203 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100203 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110203 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120203 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120203 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130203 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130203 Year of fee payment: 7 |
|
LAPS | Cancellation because of no payment of annual fees |