JP2001243070A - プロセッサ及び分岐予測方法並びにコンパイル方法 - Google Patents

プロセッサ及び分岐予測方法並びにコンパイル方法

Info

Publication number
JP2001243070A
JP2001243070A JP2000053820A JP2000053820A JP2001243070A JP 2001243070 A JP2001243070 A JP 2001243070A JP 2000053820 A JP2000053820 A JP 2000053820A JP 2000053820 A JP2000053820 A JP 2000053820A JP 2001243070 A JP2001243070 A JP 2001243070A
Authority
JP
Japan
Prior art keywords
instruction
branch
conditional branch
prediction
compiler
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
JP2000053820A
Other languages
English (en)
Inventor
Shigehiro Asano
滋博 浅野
Yoshifumi Yoshikawa
宜史 吉川
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.)
Toshiba Corp
Original Assignee
Toshiba 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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP2000053820A priority Critical patent/JP2001243070A/ja
Priority to US09/794,063 priority patent/US6735681B2/en
Publication of JP2001243070A publication Critical patent/JP2001243070A/ja
Pending legal-status Critical Current

Links

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/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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/3846Speculative instruction execution using static prediction, e.g. branch taken strategy
    • 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/3848Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 (修正有) 【課題】 条件分岐命令の予測精度を向上させ、プロセ
ッサ性能を向上させることができるようにしたプロセッ
サを提供すること。 【解決手段】 プロセッサ内の次アドレス計算部14に
おいて、SEL0は命令キャッシュ15の命令に付加さ
れているPredecode0を参照し、それが予測不
可を示す値ならば飽和付きカウンタ部150からの分岐
予測を出力させ、予測可を示す値ならば命令キャッシュ
15の命令に付加されているコンパイラによる分岐予測
Predecode1を出力させる。SEL1はSEL
0の出力が分岐成立を示す値ならば加算器146の出力
(分岐先アドレス)を選択し、分岐不成立ならば加算回
路145の出力(当該命令の次のアドレス)を選択す
る。予測に失敗しない限りこのSEL1の出力はSEL
2を介して次アドレス・レジスタ144に保持される。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、条件分岐命令の分
岐予測機能を持つプロセッサ及び該プロセッサにおける
分岐予測方法並びに該プロセッサで実行されるプログラ
ムを生成するためのコンパイル方法に関する。
【0002】
【従来の技術】パイプライン方式を適用したプロセッサ
においては、プログラムの実行中に条件分岐命令の条件
が真となり分岐が実行されると、当該条件分岐命令の実
行に先行してパイプラインに入れていた命令が実行され
ないため、実際の分岐先の新たな命令をパイプラインに
詰める間、プロセッサは有効な動作をすることができ
ず、実行の効率が低下してしまう。これを「分岐ペナル
ティ」と呼んでいる。
【0003】分岐ペナルティがどのように生じるかにつ
いて5段のパイプラインを持ったRISCプロセッサを
例にとって説明する。一例として図6に示すような命令
列が実行される場合を考える。
【0004】通常のRISCプロセッサの5段パイプラ
インは、 Fステージ(命令のフェッチ)、 Dステージ(命令のデコード)、 Eステージ(命令の実行)、 Mステージ(メモリのアクセス)、 Wステージ(レジスタファイルへの書き込み)、 の各ステージで構成されている。
【0005】このような5段パイプラインで図6に示す
ような命令列を実行した場合、各サイクルにおけるパイ
プラインの様子は図7のようになる。
【0006】すなわち、あるサイクル(Nとする)にお
いて、図6に例示した命令列の“BREQ R2,R
4,LABEL1”の命令がEステージにおいて実行さ
れると、R2レジスタの値とR4レジスタの値とが一致
しているか(真か)、一致していないか(偽か)が判定
される。分岐条件が真であれば分岐成立となり、分岐条
件が偽となれば分岐不成立となる。
【0007】また、このサイクルNでは、上記BREQ
命令に後続する“LW R8,(R9)”の命令がDス
テージに、さらに後続する“AND R11,R8,R
7”の命令がFステージにそれぞれ入っている。
【0008】次に、サイクルN+1においては、先のサ
イクルNでBREQの結果が偽となった場合には、パイ
プライン処理を続行すればよいが、図7に示すように、
BREQの結果が真となった場合には、先のサイクルN
でDステージにあった“LWR8,(R9)”の命令と
Fステージにあった“AND R11,R8,R7”の
命令をキャンセルし、あらためて分岐先の“OR R1
1,R8,R7”の命令からフェッチを始めなければな
らない。すなわち、この例の場合には、BREQ命令の
後の2サイクル分は命令が実行されず、サイクルが無駄
に費やされてしまう。
【0009】上記例では5段のパイプラインであった
が、プロセッサの周波数の向上に伴ってパイプラインの
段数は長くなっているので、パイプライン段数とともに
分岐ペナルティは大きくなる傾向にある。
【0010】このような分岐ペナルティを緩和するため
の方法として、動的な分岐予測を用いるものがある。分
岐予測は過去の分岐条件の真偽から将来の分岐条件の真
偽を予測するもので、一般に過去の条件分岐で真が多け
れば、真と予測し、偽が多ければ、偽と予測する。過去
の条件分岐の傾向を分岐予測に反映させる仕組みは、飽
和付きカウンタで実現されるのが一般的である。例え
ば、2ビットの飽和付きカウンタでは、図8に示すよう
な状態遷移となる。
【0011】図8の状態遷移図において、真と付された
矢印は条件分岐が真となったときの状態遷移を表し、偽
と付された矢印は条件分岐が偽となったときの状態遷移
を表している。条件分岐命令が実行されて真偽が判明す
るごとに、その真偽に従って、4つの状態、すなわちS
N(Strongly Not Taken)、WN
(Weakly Not Taken)、WT(Wea
kly Taken)、ST(Strongly Ta
ken)を遷移させる。そして、条件分岐命令の真偽を
予測する際には、飽和付きカウンタの状態がWTまたは
STにあれば条件分岐は真になると予測し、SNまたは
WNにあれば条件分岐は偽になると予測する。
【0012】なお、このように条件分岐の真偽の結果に
基づいて分岐予測するモードをここでは「真偽モード
(Takenモード)」と呼ぶこととする。
【0013】さて、このような飽和付きカウンタは、プ
ログラム中のすべての条件分岐命令に個別に対応してハ
ードウェアとして存在するのが理想的であるが、現実に
はコストの面から許容できないのが通常である。そこ
で、一般には飽和付きカウンタを一定量だけテーブルの
形で用意し、各条件分岐命令とそのテーブルのエントリ
とを、条件分岐命令のアドレスを入力とする固有のハッ
シュ関数を利用するなどして対応させている。しかし、
この方法を利用すると、ハードウェアの資源が有限で収
まる代わりに、該テーブルの同一エントリ(すなわち、
同一の飽和付きカウンタ)を利用する2つ以上の条件分
岐命令でコンフリクト(この場合、真になる確率の高い
条件分岐命令と偽になる確率の高い条件分岐命令とが同
一の飽和付きカウンタに割り当てられること)が生起し
得るという問題がある。
【0014】このようなコンフリクトに対応する方法と
して、飽和付きカウンタの状態遷移に、コンパイラによ
る条件分岐予測を利用する「アグリー・モード(Agr
eeモード)」がある。
【0015】Agreeモードを利用する方法では、ま
ず、コンパイラがプログラムのコンパイル時に各々の条
件分岐命令の条件の真偽を予測し、予測結果に従って該
命令に追加するタグの値を設定することにより(もしく
は、条件分岐が真であると予測した命令と、偽であると
予測した命令の2種類を使い分けることにより)、プロ
セッサに対して各々の条件分岐命令の条件の真偽につい
ての予測結果を知らせるようにする。そして、Agre
eモードの飽和付きカウンタは、条件分岐の真偽の結果
に基づいて状態を遷移させる前述のモードとは違って、
条件分岐の結果(真または偽)とコンパイラの予測(真
または偽)とが一致したか一致しなかったかによって、
その状態を遷移させるものである。例えば、2ビットの
飽和付きカウンタでは、図9に示すような状態遷移とな
る。
【0016】図9の状態遷移図において、一致と付され
た矢印はコンパイラの予測と一致したときの状態遷移を
表し、不一致と付された矢印はコンパイラの予測と一致
しなかったときの状態遷移を表している。条件分岐命令
が実行されて真偽が確定し、コンパイラの予測との一致
/不一致が判明するごとに、その一致/不一致に従っ
て、4つの状態、すなわちSD(Strongly D
isagree)、WD(Weakly Disagr
ee)、WA(Weakly Agree)、SA(S
trongly Agree)を遷移させる。そして、
条件分岐命令の真偽を予測する際には、飽和付きカウン
タの状態がWAまたはSAにあれば条件分岐は「コンパ
イラの予測に一致する」、すなわちコンパイラが真と予
測すれば真に、コンパイラが偽と予測すれば偽になると
予測し、SDまたはWDにあれば条件分岐は「コンパイ
ラの予測とは不一致になる」、すなわちコンパイラが真
と予測すれば偽に、コンパイラが偽と予測すれば真にな
ると予測する。
【0017】このAgreeモードを用いれば、条件分
岐が真になる確率の高い条件分岐命令と、偽になる確率
の高い条件分岐命令とが同一の飽和付きカウンタ(もし
くは、飽和付きカウンタを構成するテーブルの同一エン
トリ)を使用しても、互いに打ち消し合うようなことが
ないので、実効的にエントリ数を増やしたのと同じ効果
が得られる。
【0018】ところが、Agreeモードの場合には、
コンパイラでは真偽を予測できない条件分岐命令につい
ては適当な方法で真または偽のいずれかを設定するの
で、そのような条件分岐命令が、飽和付きカウンタ(も
しくは、飽和付きカウンタを構成するテーブルのエント
リ)を汚染し、予測率を下げてしまうという問題点があ
る。
【0019】一例として、図9に示すような、ある1つ
の飽和付きカウンタ(もしくは、飽和付きカウンタを構
成するテーブルのある1つのエントリ)を、あるプログ
ラム中の3つの条件分岐命令が共用する場合について考
える。この3つの条件分岐命令は、プログラムの実行時
に同じ出現頻度で現れ、それぞれ、次のような特性を持
っているとする。 ・条件分岐命令A:コンパイラで真と予測され、実際に
は80%の確率で真になる。 ・条件分岐命令B:コンパイラで偽と予測され、実際に
は80%の確率で偽になる。 ・条件分岐命令C:コンパイラで予測できないので偽と
設定され、実際には70%の確率で真になる。
【0020】この場合に、図9に示した状態遷移におい
て、ある状態から一致に遷移する確率(Hとする)は、
次のようにして求めることができる。
【0021】まず、状態遷移図の一致の矢印に遷移する
確率Hは、どの状態からでも同じである。また、状態遷
移図の不一致の矢印に遷移する確率(1−H)も、どの
状態からでも同じである。
【0022】状態SAへはSA自身またはWAから遷移
するので、状態がSAにある確率は、状態がSA自身に
ある確率(SA)に一致の確率Hを乗じたものと、状態
がWAにある確率(WA)に一致の確率Hを乗じたもの
との和で与えられ、 SA×H+WA×H=SA …(1) となる。同様に、状態がWAにある確率(WA)はSA
とWDから、 SA×(1-H)+WD×H=WA …(2) 状態がWDにある確率(WD)はWAとSDから、 WA×(1-H)+SD×H=WD …(3) 状態がSDにある確率(SD)はWDとSDから、 WD×(1-H)+SD×(1-H)=SD …(4) となる。
【0023】ここで、式(2)および式(1)より、 WA=SA×(1-H)/H WD=SA×((1-H)−H×(1-H))/(H×H) が得られる。
【0024】次に、これらWA,WDを式(3)に代入
して、 SD=SA×((1-H)−H×(1-H)−H×(1-H)×(1-H))
/H×H×H が得られる。
【0025】一方、SA+WA+WD+SD=1であ
る。
【0026】ここで、これらWA,WD,SDをSA+
WA+WD+SD=1へ代入しSAについて解くと、 SA=H×H×H/(1−2×H+2×H×H) が得られる。
【0027】いま、確率Hは、条件分岐命令Aが真と予
測して当たる確率0.8と、条件分岐命令Bが偽と予測
して当たる確率0.8と、条件分岐命令Cが偽と予測し
て当たる確率0.3との平均から、H=(0.8+0.
8+0.3)/3=0.633333であるので、上記
の計算によると、SA=0.474343、WA=0.
27462、WD=0.15899、SD=0.092
047と求まる。
【0028】これにより、本例において、飽和付きカウ
ンタが「条件分岐の真偽はコンパイラによる予測に一致
(Agree)する」と予測する確率(AGとする)
は、AG=SA+WA=0.748963となる。もち
ろん、コンパイラに不一致(Disagree)と予測
する確率は(1−AG)=0.251037である。
【0029】さて、ここで、この予測機構により条件分
岐命令の予測が一致する場合の確率を求める。予測が当
たる第1のケースは、飽和付きカウンタによる予測が
「コンパイラの指示と一致」であり、かつ、実際に条件
分岐がコンパイラの指示と一致したケースであり、この
ケースが発生する確率は、 (0.8×AG+0.8×AG+O.3×AG)/3 である。予測が当たる第2のケースは、飽和付きカウン
タによる予測が「コンパイラの指示と不一致」であり、
かつ、実際に条件分岐がコンパイラの指示と不一致にな
ったケースであり、このケースが発生するのは、 (0.2×(1-AG)+0.2×(1-AG)+O.7×(1-AG))
/3 である。そして、上記の2つを加えると、上記例の場合
において予測が当たる確率は、0.56639となる。
【0030】この数値は分岐予測として働いてはいるが
あまりよい値ではない。この場合、コンパイラで予測が
できない条件分岐命令に飽和付きカウンタを割り当てて
しまったことに問題があり、例で示す条件分岐命令Cが
確率を下げている。
【0031】
【発明が解決しようとする課題】従来の分岐予測方法で
は、同一の飽和付きカウンタに複数の条件分岐命令を割
り当てられた場合に、カウンタが汚染され、予測率が低
下することがある、という問題点があった。
【0032】本発明は、上記事情を考慮してなされたも
ので、条件分岐命令の予測精度を向上させ、プロセッサ
性能を向上させることができるようにしたプロセッサ及
び分岐予測方法並びにコンパイル方法を提供することを
目的とする。
【0033】
【課題を解決するための手段】本発明(請求項1)に係
るプロセッサは、同一の分岐先、同一の分岐条件を持つ
命令について、分岐予測に関して、分岐成立と予測され
た命令、分岐不成立と予測された命令および予測不可と
された命令の3種類の区別が設けられた命令セットを持
つことを特徴とする。本発明(請求項2)に係るプロセ
ッサは、与えられた命令が条件分岐命令である場合に、
該命令が、コンパイラにおいて分岐成立と予測された第
1種の条件分岐命令か、コンパイラにおいて分岐不成立
と予測された第2種の条件分岐命令か、コンパイラにお
いて予測不可とされた第3種の条件分岐命令かを識別す
る識別手段と、前記条件分岐命令に対して前記識別結果
に応じた分岐予測処理を行う分岐予測処理手段とを備え
たことを特徴とする。好ましくは、前記分岐予測処理手
段は、前記第1種または第2種と識別された条件分岐命
令と、前記第3種と識別された条件分岐命令とで、異な
る形態の分岐予測処理を行うようにしてもよい。好まし
くは、前記分岐予測処理手段は、前記第1種と識別され
た条件分岐命令については、コンパイラにおける予測に
従って分岐成立と予測して分岐予測処理を行い、前記第
2種と識別された条件分岐命令については、コンパイラ
における予測に従って分岐不成立と予測して分岐予測処
理を行い、前記第3種と識別された条件分岐命令につい
ては、条件分岐予測器を使用して分岐予測処理を行うよ
うにしてもよい。好ましくは、前記分岐予測処理手段
は、前記第1種または第2種と識別された条件分岐命令
について、アグリー・モードの条件分岐予測器を使用し
て分岐予測処理を行い、前記第3種と識別された条件分
岐命令について、真偽モードの条件分岐予測器を使用し
て分岐予測処理を行うようにしてもよい。好ましくは、
命令キャッシュ中で前記識別の対象となった条件分岐命
令に対する識別結果を示す情報を該条件分岐命令に付加
して記録する手段を更に備えるようにしてもよい。ま
た、本発明(請求項7)に係る分岐予測方法は、与えら
れた命令が条件分岐命令である場合に、該命令が、コン
パイラにおいて分岐成立と予測された第1種の条件分岐
命令か、コンパイラにおいて分岐不成立と予測された第
2種の条件分岐命令か、コンパイラにおいて予測不可と
された第3種の条件分岐命令かを識別し、前記条件分岐
命令に対して前記識別結果に応じた分岐予測処理を行う
ことを特徴とする。また、本発明(請求項8)は、与え
られたソースプログラムに基づいて対象とするプロセッ
サで実行可能なオブジェクトプログラムを生成するコン
パイル方法であって、前記ソースプログラムを解析して
中間コードを生成する第1のステップと、前記中間コー
ドを最適化し、コード生成して、オブジェクトプログラ
ムを生成する第2のステップとを有し、前記第2のステ
ップは、対象となった条件分岐命令が、分岐成立と予
測、分岐不成立と予測、予測不可の3種類のいずれに該
当するかを判定するステップと、この判定結果に対応す
る命令を生成するステップとを含むことを特徴とする。
好ましくは、前記第1のステップは、対象となった条件
分岐命令に、前記判定のための情報を付加するステップ
を含むようにしてもよい。
【0034】なお、プロセッサに係る本発明は分岐予測
方法に係る発明としても成立し、分岐予測方法に係る本
発明はプロセッサに係る発明としても成立する。
【0035】また、コンパイル方法に係る本発明はコン
パイラ(装置)に係る発明としても成立し、コンパイラ
(装置)に係る本発明はコンパイル方法に係る発明とし
ても成立する。
【0036】また、コンパイル方法、コンパイラ(装
置)に係る本発明は、コンピュータに当該発明に相当す
る手順を実行させるための(あるいはコンピュータを当
該発明に相当する手段として機能させるための、あるい
はコンピュータに当該発明に相当する機能を実現させる
ための)プログラムを記録したコンピュータ読取り可能
な記録媒体としても成立する。
【0037】本発明によれば、与えられた命令が条件分
岐命令である場合に、該命令が、コンパイラにおいて分
岐成立と予測された第1種の条件分岐命令か、コンパイ
ラにおいて分岐不成立と予測された第2種の条件分岐命
令か、コンパイラにおいて予測不可とされた第3種の条
件分岐命令かを識別し、前記条件分岐命令に対して前記
識別結果に応じた分岐予測処理を行うので(例えば、前
記分岐予測処理手段は、前記第1種または第2種と識別
された条件分岐命令と、前記第3種と識別された条件分
岐命令とで、異なる形態の分岐予測処理を行うので)、
例えば飽和付きカウンタの汚染などの不具合を回避する
ことができ、条件分岐命令の予測精度を向上させ、これ
によって、プロセッサの性能を向上させることができ
る。
【0038】
【発明の実施の形態】以下、図面を参照しながら発明の
実施の形態を説明する。
【0039】本実施形態では、プロセッサにおける条件
分岐予測の性能を向上させるために、コンパイラにおい
て、条件分岐命令の分岐条件について真または偽の予測
を行い、その予測結果を識別可能にするとともに、真偽
が予測できない(もしくは真偽を予測しないと判断し
た)条件分岐命令については、予測しなかったことを識
別可能にし、プロセッサにおいては、コンパイラが真偽
の予測をした条件分岐命令か、コンパイラが真偽の予測
をしなかった条件分岐命令かで、異なる扱いをするよう
にしている。
【0040】この異なる扱いの仕方には種々の形態が考
えられる。例として4つの形態を示すと次のようにな
る。 (1)コンパイラが真偽の予測をしなかった条件分岐命
令は、前述したTakenモードで条件分岐予測を行
う。コンパイラが真偽の予測をした条件分岐命令は、そ
のコンパイラの予測に従う。 (2)コンパイラが真偽の予測をしなかった条件分岐命
令は、前述したTakenモードで条件分岐予測を行
う。コンパイラが真偽の予測をした条件分岐命令は、A
greeモードで条件分岐予測を行う。
【0041】(3)コンパイラが真偽の予測をしなかっ
た条件分岐命令は、条件分岐予測を行わない(例えば常
に偽と予測して扱う)。コンパイラが真偽の予測をした
条件分岐命令は、そのコンパイラの予測に従う。 (4)コンパイラが真偽の予測をしなかった条件分岐命
令は、条件分岐予測を行わない(例えば常に偽と予測し
て扱う)。コンパイラが真偽の予測をした条件分岐命令
は、Agreeモードで条件分岐予測を行う。上記の他
にも種々の方法が考えられる。
【0042】このようにすれば、従来のように「コンパ
イラが真偽の予測をしなかった条件分岐命令」が「コン
パイラが真偽の予測をした条件分岐命令についての予
測」を低下させる、という不具合を回避できるので、条
件分岐予測の性能を向上させることができる。
【0043】以下では、上記の(1)の方法を例にとっ
て説明する。もちろん、それ以外の方法も同様に実施可
能である。
【0044】同一機能を持つ条件分岐命令についてのコ
ンパイラによる予測処理結果すなわち予測可/分岐成
立、予測可/分岐不成立、予測不可の3種の識別の方法
には、種々の方法が考えられるが、例えば、(a)同一
機能の条件分岐命令として、予測可/分岐成立、予測可
/分岐不成立、予測不可に対応する3つの命令を用意
し、コンパイラが3種類の区別に従ってそれらを使い分
ける方法、(b)命令に、予測可または予測不可を示す
第1のフィールドと、予測可の場合には分岐成立(真)
か分岐不成立(偽)かを示し、予測不可の場合にはdo
n’t careとなる第2のフィールドを付加するも
のとし、コンパイラによってこれらフィールドを設定す
る方法、などが考えられる。プロセッサでは、(a)の
場合には、命令をデコードもしくはプリデコードするこ
とにより、(b)の場合には、上記フィールドを参照す
ることによって、予測可/分岐成立、予測可/分岐不成
立、予測不可の3種類の識別を行うことができる。
【0045】ここで、上記の(1)の方法を用いた場合
に、先に上げた例と同様のプログラムについて予測が当
たる確率を求めると、次のようになる。
【0046】なお、3つの条件分岐命令は、プログラム
の実行時に同じ出現頻度で現れ、前述と同じように、そ
れぞれ、次のような特性を持っているとする。 ・条件分岐命令A:コンパイラで真と予測され、実際に
は80%の確率で真になる。この場合、予測可/分岐成
立に対応する。 ・条件分岐命令B:コンパイラで偽と予測され、実際に
は80%の確率で偽になる。この場合、予測可/分岐不
成立に対応する ・条件分岐命令C:コンパイラで予測できず、実際には
70%の確率で真になる。この場合には、予測不可に対
応する。
【0047】まず、条件分岐命令Aおよび条件分岐命令
Bは、コンパイラが予測できるので、飽和付きカウンタ
には反映しない(すなわち、コンパイラの予測に従
う)。従って、条件分岐命令A,Bについて分岐予測が
当たる確率はいずれも0.8である。
【0048】一方、条件分岐命令Cは飽和付きカウンタ
に反映されることになる。条件分岐命令Cは真の側に
0.7の確率で遷移し、偽の側には0.3の確率で遷移
するから、飽和付きカウンタの状態、ST,WT,W
N,SNの各確率はそれぞれ前述のSA,WA,WD,
SDの場合と同様の計算で、 ST=0.7×0.7×0.7/(1-2×0.7+2×0.7×0.7)=0.5
91374 WT=ST×(1-0.7)/0.7=0.253448 WN=WT×(1-0.7)/0.7=0.108621 SN=WN×(1-0.7)/0.7=0.046552 が求められる。
【0049】この方法において例に上げる分岐予測が当
たる確率は、 (0.8+0.8+(ST+WT)×0.7+(WN+SN)×(1-0.7))/3=0.7
45977 となり、前述のように条件分岐命令A,B,Cについて
同一エントリでAgreeモードを使用した場合の確率
(=0.56639)より高い確率で予測が当たるよう
になる。
【0050】以下では、本実施形態についてより詳しく
説明する。
【0051】まず、命令セットに関して説明する。
【0052】上記のように本実施形態では、1つの条件
分岐命令について、次の3種類の区別がある。 ・コンパイラが条件分岐について予測不可とする ・コンパイラが条件分岐を予測可能で、分岐成立と予測
する ・コンパイラが条件分岐を予測可能で、分岐不成立と予
測する コンパイラにより、各条件分岐命令が上記の3種類のい
ずれに該当するかが判断され、対応する条件分岐命令が
生成される。
【0053】上記の3種類を区別するには、例えば、 ・1つの条件分岐命令に対応するOPコードを3つ用意
する方法と、 ・OPコードとは別に命令コード中に3種類を識別する
ためのフィールドを設ける方法とがある。
【0054】前者のOPコードを3種類用意する方法で
は、例えば、BRZ R1,R2,Label(レジス
タR1とレジスタR2の内容を比較し、それらが一致し
たならばLabelに分岐する命令)というような条件
分岐命令について、予測不能、予測可能/分岐成立、予
測可能/分岐不成立に対応して、BRZU(BRZUn
predictable)、BRZT(BRZ Tak
en)、BRZN(BRZ Not Taken)のO
Pコードを用意する。この方法は、コード効率がほとん
ど低下しないという利点がある。
【0055】一方、後者の方法では、予測不能、予測可
能/分岐成立、予測可能/分岐不成立の3種類を識別す
るために2ビットのフィールドを命令コード中に設ける
ので、その分だけコード効率が低下するが、デコード時
間を短縮すること(もしくはこの3種類の識別のための
プリデコード時間を省くこと)ができる。
【0056】以下では、前者のように同一条件分岐命令
について3種類のOPコードを設ける場合(すなわち、
コンパイラが予測不能、予測可能/分岐成立、予測可能
/分岐不成立の区別に従って3種類のOPコードを使い
分ける場合)を例にとって説明する。また、本実施形態
では、インストラクションキャッシュにこれらの命令が
フィルされる時点で、プリデコードを行い、予測不能、
予測可能/分岐成立、予測可能/分岐不成立の3種類を
識別するための識別情報を生成するものとする。なお、
詳しくは後述するように、本実施形態では、無条件分岐
命令も、分岐命令以外の命令も、条件分岐命令と同じ仕
組みで実行するため、無条件分岐命令については予測可
能/分岐成立を示す識別情報を用い、分岐命令以外の命
令については予測可能/分岐不成立を示す識別情報を用
いることになる。
【0057】図1に、本実施形態のプロセッサの構成例
を示す。
【0058】本実施形態では、5段のパイプライン、 F(Fetch)ステージ、 D(Decode)ステージ、 E(Execute)ステージ、 M(Memory)ステージ、 W(Writeback)ステージ、 を持つRISCプロセッサを例にとって説明する。
【0059】図1に示されるように、本プロセッサ1
は、リフィル・プリデコード部(Refill&Pre
decode)11、デコード・レジスタファイルアク
セス部(Decode&Register File
Access)12、実行部(Execute)13、
次アドレス計算部(Next Address)14、
インストラクションキャッシュ(Instructio
n Cache)15、データキャッシュ(Data
Cache)16を持つ。メモリ(Memory)3
は、プロセッサ1のリフィル・プリデコード部11に接
続される。
【0060】図1では、各ブロックをそれが関連するス
テージに対応させて示してある。
【0061】なお、図1では、シングルプロセッサを例
にとって示しているが、もちろん、本プロセッサは、コ
ンパイル時にスタティックに資源を割り当て使用するV
LIW(Very Long Instruction
Word)プロセッサであっても、実行時に資源の割
り当てをダイナミックに行うスーパースカラプロセッサ
でもよい。
【0062】本プロセッサの5段パイプラインの基本的
動作は次のようになる。
【0063】Fステージでインストラクション・キャッ
シュ15のアクセスが行われ、次にDステージでデコー
ド・レジスタファイルアクセス部によりデコード(De
code)およびレジスタファイル(Register
File)のアクセスが行われる。
【0064】Eステージでは、実行部13により、レジ
スタファイルより読み出したデータに対して演算が行わ
れる。命令が条件分岐命令の場合には、分岐条件の真偽
が判定され、真ならば分岐先のアドレスが求められ、偽
ならば当該条件分岐命令の次の命令のアドレスが求めら
れる。
【0065】Mステージでは、データ・キャッシュ16
のアクセスが行われる。
【0066】Wステージでは、データ・キャッシュ16
のアクセスの結果または実行部13による演算の結果が
レジスタファイルに書き込まれる。
【0067】また、次アドレス計算部14の処理手順の
概要は次のようになる。
【0068】次アドレス計算部14は、Fステージにお
いて、条件分岐命令がフェッチされたときに、次にフェ
ッチすべきアドレスを予測する。当該条件分岐命令の分
岐条件が成立するかまたは不成立となるかは、Eステー
ジで当該条件分岐命令が実行されて初めて判明する。次
アドレス計算部14は、Mステージにおいて、当該条件
分岐命令の分岐条件の実行結果(真または偽)および予
測の成功/不成功(すなわち、実行結果と予測との一致
/不一致)に応じて、予測が外れた場合の実際の次アド
レス(真と予測して偽となった場合には“当該命令のア
ドレス+1”、偽と予測して真となった場合には“分岐
先アドレス”)を設定し直す処理や、当該条件分岐命令
がコンパイラで予測不可とした条件分岐命令であった場
合の飽和付きカウンタの更新を行う。なお、本実施形態
では、「無条件分岐命令」と「分岐命令以外の命令」の
場合には、常に予測が当たるものとして処理をすること
になっている。
【0069】さて、本実施形態では、条件分岐の予測の
ために次のような識別情報が用いられる。インストラク
ション・キャッシュ15またはデータ・キャッシュ16
がミスしたときは、リフィル/プリデコード部11を用
いてメモリ3よりデータがインストラクション・キャッ
シュ15またはデータ・キャッシュ16へリフィル(R
efill)されるが、本実施形態では、インストラク
ション・キャッシュ15にミスが起こった場合には、リ
フィルとともに、命令のオペコード部に対する分岐予測
のためのプリデコード(Predecode)を行う。
プリデコードでは、各命令について、前述の3種類(予
測不能、予測可能/分岐成立、予測可能/分岐不成立)
を識別するための2ビットの識別情報を生成し、これを
該命令に付加する。
【0070】この識別情報は、predecode0と
predecode1からなり、各ビットの意味は次の
通りである。 ・predecode0 : 1はコンパイラが予測不
可とした場合を示し、0はコンパイラが予測可としたを
示す。 ・predecode1 : predecode0=
1である場合において、1はコンパイラが条件成立と予
測したことを示し、0はコンパイラが条件不成立と予測
したことを示す。
【0071】この識別情報は、インストラクション・キ
ャッシュ15中に命令と共に保存され、次アドレス計算
部14に利用される。
【0072】なお、本実施形態では、命令が無条件分岐
命令の場合には、predecode0=0、pred
ecode1=1とし、分岐命令以外の命令の場合に
は、predecode0=0、predecode1
=0として、同様に処理をするようにしている。この結
果、本実施形態では、識別情報は、図2のように設定さ
れる。なお、図2中、XはDon’t Careを示
す。
【0073】次に、次アドレス計算部14について詳細
に説明する。
【0074】図3に、次アドレス計算部14の構成例を
示す。
【0075】図3に示されるように、この次アドレス計
算部14は、第1のセレクタ(SEL0)141、第2
のセレクタ(SEL1)142、第3のセレクタ(SE
L2)143、次アドレス・レジスタ(Next Ad
dress REG)144、加算回路145、加算器
(ADDER)146、飽和付きカウンタ部150、3
段のレジスタ(REG_D,REG_E,REG_M)
147〜149、予測判定回路151を持つ。
【0076】次アドレス・レジスタ144は、次にフェ
ッチする命令のアドレスを保持する。この次アドレス・
レジスタ144からインストラクション・キャッシュ1
5へ、フェッチすべき命令のアドレスが与えられる。
【0077】加算器146は、インストラクション・キ
ャッシュ15より命令中のブランチオフセットを供給
し、これを次アドレス・レジスタ144の内容に加算す
るためのものである。インストラクション・キャッシュ
15のタイミングが厳しい場合は、加算器(ADDE
R)の代わりにブランチ・アドレス・キャッシュ(BA
C;Branch Address Cache)が使
われることもある。
【0078】加算回路145は、次アドレス・レジスタ
144の内容に+1を加算するためのものである。
【0079】第1のセレクタ(SEL0)は、インスト
ラクション・キャッシュ15の命令に付加されているP
redecode0を参照し、Predecode0=
1ならば、ハードウェアによる予測器すなわち飽和付き
カウンタ部150からの予測情報(真すなわち分岐成立
を示す情報(例えば、1)、または偽すなわち分岐不成
立を示す情報(例えば、0))を出力させ、Prede
code0=0ならば、インストラクション・キャッシ
ュ15の命令に付加されているPredecode1を
出力させる。すなわち、第1のセレクタ(SEL0)か
らは、コンパイラで予測不可とされた条件分岐命令の場
合に、飽和付きカウンタ部150からの予測情報が出力
され、コンパイラで予測可/分岐成立とされた命令の場
合(または無条件分岐命令の場合)に、Predeco
de1=1が出力され、コンパイラで予測可/分岐不成
立とされた命令の場合(または分岐命令以外の命令の場
合)に、Predecode1=0が出力される。
【0080】この第1のセレクタ(SEL0)の出力
が、第2のセレクタ(SEL1)を切り替える。
【0081】第2のセレクタ(SEL1)は、第1のセ
レクタ(SEL0)の出力が分岐成立を示す値(例え
ば、1)である場合には、次アドレス・レジスタ144
の値にブランチオフセットの値を加算する加算器146
の出力を選択し、第1のセレクタ(SEL0)の出力が
分岐不成立を示す値(例えば、0)である場合には、次
アドレス・レジスタ144の値に+1を加算する加算回
路145の出力を選択する。すなわち、第2のセレクタ
(SEL1)からは、条件分岐が成立すると予測される
場合(または無条件分岐命令の場合)には分岐先アドレ
スが出力され、条件分岐が不成立と予測される場合(ま
たは分岐命令以外の命令の場合)には次のアドレスが出
力される。
【0082】この第2のセレクタ(SEL1)の出力
は、第3のセレクタ(SEL2)への入力となる。な
お、予測に失敗しない限り、第3のセレクタ(SEL
2)においては、この第2のセレクタ(SEL1)の出
力が選択され、次アドレス・レジスタ144に保持され
ることになる。
【0083】さて、第3のセレクタ(SEL2)を切り
替えるのは、予測判定回路151の出力である。
【0084】予測判定回路151は、各命令についての
予測(すなわち、第1のセレクタ(SEL0)の出力)
を保持しておき、Mステージにおいて、Eステージで実
行された当該命令の条件分岐の結果(無条件分岐の場合
は分岐成立、分岐命令以外の命令の場合は分岐不成立と
して扱われる)を入力し、両者を比較し、予測と結果が
一致する場合には、予測成功を示す情報(例えば、1)
を出力し、予測と結果が不一致の場合には、予測不成功
を示す情報(例えば、0)を出力する。
【0085】また、第3のセレクタ(SEL2)へは、
Mステージにおいて、実行部13から、Eステージで実
際に確定した当該命令の次に実行すべき命令のアドレ
ス、すなわち条件分岐命令が分岐成立となった場合に
は、分岐先アドレス、条件分岐命令が分岐不成立となっ
た場合には、当該命令の次のアドレスが与えられる(な
お、無条件分岐命令の場合には、分岐先アドレス、分岐
命令以外の命令の場合には、当該命令の次のアドレスが
与えられるようにして構わない;ただし、これらの場合
には常に予測成功として扱われることになる)。
【0086】第3のセレクタ(SEL2)は、予測判定
回路151の出力が予測成功を示す値である場合には、
第2のセレクタ(SEL1)の出力を選択し、予測判定
回路151の出力が予測不成功を示す値である場合に
は、実行部13から与えられた実際のアドレスを選択す
る。すなわち、条件分岐命令について予測が成功してい
る間(または無条件分岐や分岐命令以外の命令が実行さ
れている間)は、第2のセレクタ(SEL1)の出力が
次アドレス・レジスタ144に保持されるが、予測不成
功が発生した場合には、実行部13から与えられた実際
のアドレスが保持される。
【0087】次に、予測を行うハードウェアの部分、す
なわち飽和付きカウンタ部の構成について詳細に説明す
る。
【0088】図4に、飽和付きカウンタ部150の構成
例を示す。
【0089】このTakenモードの飽和付きカウンタ
部150は、デコーダ1502、複数の飽和付きカウン
タ1501、デコーダ・セレクタ1503を含む。
【0090】複数の飽和付きカウンタ1501は、条件
分岐命令の命令アドレスによりハッシュされる。ハッシ
ュ関数は、アドレスの下位を用いるなどの簡単なもので
よい。
【0091】飽和付きカウンタ部150は、2ポートの
アドレスポート(デコーダ1502(書き込み時)、デ
コーダ・セレクタ1503(読み出し時))を持ってい
る。
【0092】書き込み時(更新時)においては、ライト
・アドレス(Write address)は、REG
_D,REG_E,REG_Mの3段のレジスタ147
〜149により3サイクル遅れたアドレスが供給され
る。これは、飽和付きカウンタ151に書き込みが起こ
るのは、条件分岐の成立/不成立がわかるEステージの
次のMステージとしているためである。ライト・アドレ
スおよびMステージからの条件分岐の成立または不成立
により飽和付きカウンタの一つに状態遷移の信号が送ら
れる。なお、本例では、飽和付きカウンタ151への書
き込みは、コンパイラが予測不可とした条件分岐命令に
ついてのみ、すなわちPredecode0=1のとき
のみ、行われる。Predecode0の値は、例え
ば、REG_D,REG_E,REG_Mの3段のレジ
スタ147〜149により3サイクル遅れて飽和付きカ
ウンタ部150へ供給される。
【0093】読み出し時においては、リード・アドレス
(Read address)により、どの飽和付きカ
ウンタ1501が選択されるかが切り替えられる。そし
て、飽和付きカウンタの一つから、条件分岐の予測情報
が出力される。
【0094】なお、ハッシュの方法として、説明のため
アドレスの下位のみを使用する方法を示したが、それ以
外にも様々な方法があり、いずれの方法を使用すること
も可能である。
【0095】以上では、前述した(1)の方法を例にと
って説明したが、もちろん、それ以外の方法も同様に実
施可能である。
【0096】(2)の方法の場合、例えば、コンパイラ
が予測可能とした条件分岐命令については、飽和付きカ
ウンタ部(Agreeモードとする;予測判定回路の出
力をフィードバックする)からの出力が一致の場合に
は、コンパイラの予測結果を、不一致の場合には、コン
パイラの予測結果とは反対の予測を、第2のセレクタ
(SEL1)に与えるように、図3の構成を修正すれば
よい(コンパイラの予測結果とは反対の予測は、例え
ば、1ビットの反転回路を用いて生成する)。なお、こ
の場合には、コンパイラに予測可能とされた条件分岐命
令についてはAgreeモードの飽和付きカウンタ部を
適用し、コンパイラに予測不可とされた条件分岐命令に
ついてはTakenモードの飽和付きカウンタ部を適用
し、無条件分岐命令と分岐命令以外の命令については飽
和付きカウンタ部を適用しないことから、各命令が、予
測可/分岐成立とされた条件分岐命令か、予測可/分岐
不成立とされた条件分岐命令か、予測不可とされた条件
分岐命令か、無条件分岐命令か、分岐命令以外の命令か
を区別する必要があるので、識別情報は3ビットとな
る。例えば、図2の例に新たにPredecode2を
設け、Predecode2=0は条件分岐命令を示
し、Predecode2=1は条件分岐命令以外の命
令を示すようにしてもよい(なお、それ以外の識別情報
の構成も可能である)。
【0097】(4)の方法の場合、例えば、コンパイラ
が予測可能とした条件分岐命令については、飽和付きカ
ウンタ部(Agreeモードとする;予測判定回路の出
力をフィードバックする)からの出力を、第2のセレク
タ(SEL1)に与え、コンパイラが真偽の予測をしな
かった条件分岐命令については、第2のセレクタ(SE
L1)に例えば分岐不成立を示す値を与えるように、図
3の構成を修正すればよい。
【0098】また、以上では、1つの条件分岐命令に対
応するOPコードを3つ用意する場合について説明した
が、OPコードとは別に命令コード中に3種類を識別す
るためのフィールドを設ける場合には、当該識別のため
のプリデコードは不要となり、このフィールドを参照も
しくはコピーするだけでよい。
【0099】本実施形態によれば、条件分岐命令の予測
を従来方式より高い精度で行うことが可能となり、これ
によって、プロセッサの性能を向上させることができ
る。
【0100】以下では、本実施形態におけるコンパイラ
について説明する。
【0101】ここでは、一般的なプログラムについて、
どのような場合に条件分岐命令を予測可能とし、どのよ
うな場合に条件分岐命令を予測不可とするかというヒュ
ーリスティックの一例を示す。
【0102】一般的なプログラムでは、後方(すなわ
ち、プログラムカウンタの小さい方)に対する条件分岐
命令は成立する確率が高いことが知られている。これ
は、例えばC言語プログラムのFORループのように、
ループは何回も実行されるという場合に後方への条件分
岐命令が使用されるからである。また、goto文のよ
うにC言語のプログラマがエラー処理以外では使わない
ような場合は条件分岐命令が成立しないと予測できる。
これら以外の前方への条件分岐命令は一般にコンパイラ
が実行前に予測を行うことは難しい。
【0103】以上をまとめると、ヒューリスティックの
一例として、 後方への条件分岐命令は成立と予測する goto文が条件の結果実行される場合は不成立と予
測する 前方への条件分岐命令は予測不能とする が得られる。もちろん、他にも種々のヒューリスティッ
クが考えられる。
【0104】次に、以上説明した条件分岐命令にどの予
測を適用するべきか決定するヒューリスティックを採用
したコンパイラがどのような処理の流れを行うかについ
て説明する。
【0105】図5に、本実施形態のコンパイラの動作手
順(機能ブロック)の一例を示す。
【0106】本コンパイラは、一般的に、プロセッサの
アーキテクチャに依存しない中間言語を一旦生成し、こ
れをアーキテクチャと命令セットに最適化された形のコ
ードとして生成する。上で述べたような判定のヒューリ
スティックは、中間言語にだけ適用するのではなく、ソ
ースの解析結果も加味するのが望ましい。このために
は、ソースを解析した結果を中間言語に付加すればよ
い。例えば、上記ののエラー処理の場合の条件分岐命
令は、中間言語にその旨を示すタグ情報を付加すること
で対処する。
【0107】図5で示すように、コンパイラは、まず高
級言語で書かれたソースプログラム(ソースコード)2
03を解析(例えば、字句解析・構文解析等)し、中間
言語104の形にする(201)。この段階で、上記の
のようなタグ情報を、中間言語204に付加する。次
に、中間言語204に対して最適化(例えば、フロー解
析、データ依存解析、命令スケジューリング(命令割り
当て)、レジスタ割り当て等)およびコード生成を行っ
て、アセンブリ言語によるプログラム(オブジェクトプ
ログラム)205を出力する(202)。この段階で、
上記のやのヒューリスティックに従っておよび上記
の解析の際に付加されたタグ情報に従って、コード生成
を行う。
【0108】例えば、第1オペランドで示されるレジス
タと第2オペランドで示されるレジスタの内容を比較
し、それらが一致したならば第3オペランドで示される
ラベルに分岐する条件分岐命令について、上記のが適
用されたならば、予測可能/分岐成立を示すBRZTを
生成し、上記のが適用されたならば、予測可能/分岐
不成立を示すBRZNを生成し、上記のが適用された
ならば、予測不能を示すBRZUを生成する。
【0109】また、OPコードとは別に命令コード中に
3種類を識別するためのフィールドを設ける場合には、
例えば、上記のが適用されたならば、該フィールドに
予測可能/分岐成立を示す“1/0”を設定し、上記の
が適用されたならば、該フィールドに予測可能/分岐
不成立を示す“0/0”を設定し、上記のが適用され
たならば、該フィールドに予測不能を示す“X/1”を
設定する(図2参照)。なお、図3のような構成を用い
る場合には、無条件分岐命令に対して該フィールドに
“1/0”を設定し、分岐命令以外の命令に対して該フ
ィールドに“0/0”を設定するようにすると好まし
い。
【0110】なお、上記では、コンパイラが条件分岐命
令の3種の識別を行ったが、プログラマがアセンブラ言
語による明示的な指定を行うようにしてもよい。また、
両者を併用し、例えば、明示的な指定があればそれを優
先し、明示的な指定がなければ、コンパイラが判断する
ようにしてもよい。
【0111】これまでの説明はシングルスケーラプロセ
ッサを中心として行ったが、本発明はVLIW方式ある
いはスーパースカラ方式にも適用可能である(これまで
説明した構成例を容易に拡張できることは明らかであ
る)。例えば、VLIW方式に本発明を適用する場合、
並列に実行される命令のうち条件分岐命令が1つしか実
行されないという場合には、本構成例がそのまま適用で
きる(条件分岐命令を実行するユニットを本構成例のよ
うにすればよい)。また、スーパースカラ方式でも、同
時に実行される複数の実行ユニットのうち分岐命令を実
行するユニットが一つであれば、本構成例がそのまま適
用できる(条件分岐命令を実行するユニットを本構成例
のようにすればよい)。これらの場合、コンパイラも本
実施形態で例示されたヒューリスティックをそのまま適
用して条件分岐命令を生成することが可能である。
【0112】なお、以上の各機能は、ソフトウェアとし
ても実現可能である。
【0113】また、本実施形態は、コンピュータに所定
の手段を実行させるための(あるいはコンピュータを所
定の手段として機能させるための、あるいはコンピュー
タに所定の機能を実現させるための)プログラムを記録
したコンピュータ読取り可能な記録媒体としても実施す
ることもできる。
【0114】本発明は、上述した実施の形態に限定され
るものではなく、その技術的範囲において種々変形して
実施することができる。
【0115】
【発明の効果】本発明によれば、与えられた命令が条件
分岐命令である場合に、該命令が、コンパイラにおいて
分岐成立と予測された第1種の条件分岐命令か、コンパ
イラにおいて分岐不成立と予測された第2種の条件分岐
命令か、コンパイラにおいて予測不可とされた第3種の
条件分岐命令かを識別し、前記条件分岐命令に対して前
記識別結果に応じた分岐予測処理を行うので(例えば、
前記分岐予測処理手段は、前記第1種または第2種と識
別された条件分岐命令と、前記第3種と識別された条件
分岐命令とで、異なる形態の分岐予測処理を行うの
で)、例えば飽和付きカウンタの汚染などの不具合を回
避することができ、条件分岐命令の予測精度を向上さ
せ、これによって、プロセッサの性能を向上させること
ができる。
【図面の簡単な説明】
【図1】本発明の一実施形態に係るプロセッサの構成例
を示す図
【図2】識別情報の一例を示す図
【図3】次アドレス計算部の構成例を示す図
【図4】飽和付きカウンタ部の構成例を示す図
【図5】同実施形態に係るコンパイラの動作手順の一例
を示す図
【図6】命令列の一例を示す図
【図7】図6の命令列を実行した場合における各サイク
ルにおけるパイプラインの様子を説明するための図
【図8】Takenモードの飽和付きカウンタについて
説明するための図
【図9】Agreeモードの飽和付きカウンタについて
説明するための図
【符号の説明】
1…プロセッサ 11…リフィル・プリデコード部 12…デコード・レジスタファイルアクセス部 13…実行部 14…次アドレス計算部 141〜143…セレクタ 144…次アドレス・レジスタ 145…加算回路 146…加算器 150…飽和付きカウンタ部 1501…飽和付きカウンタ 1502…デコーダ 1503…デコーダ・セレクタ 147〜149…レジスタ 151…予測判定回路 15…インストラクションキャッシュ 16…データキャッシュ 3…メモリ

Claims (9)

    【特許請求の範囲】
  1. 【請求項1】同一の分岐先、同一の分岐条件を持つ命令
    について、分岐予測に関して、分岐成立と予測された命
    令、分岐不成立と予測された命令および予測不可とされ
    た命令の3種類の区別が設けられた命令セットを持つこ
    とを特徴とするプロセッサ。
  2. 【請求項2】与えられた命令が条件分岐命令である場合
    に、該命令が、コンパイラにおいて分岐成立と予測され
    た第1種の条件分岐命令か、コンパイラにおいて分岐不
    成立と予測された第2種の条件分岐命令か、コンパイラ
    において予測不可とされた第3種の条件分岐命令かを識
    別する識別手段と、 前記条件分岐命令に対して前記識別結果に応じた分岐予
    測処理を行う分岐予測処理手段とを備えたことを特徴と
    するプロセッサ。
  3. 【請求項3】前記分岐予測処理手段は、前記第1種また
    は第2種と識別された条件分岐命令と、前記第3種と識
    別された条件分岐命令とで、異なる形態の分岐予測処理
    を行うことを特徴とする請求項2に記載のプロセッサ。
  4. 【請求項4】前記分岐予測処理手段は、前記第1種と識
    別された条件分岐命令については、コンパイラにおける
    予測に従って分岐成立と予測して分岐予測処理を行い、
    前記第2種と識別された条件分岐命令については、コン
    パイラにおける予測に従って分岐不成立と予測して分岐
    予測処理を行い、前記第3種と識別された条件分岐命令
    については、条件分岐予測器を使用して分岐予測処理を
    行うことを特徴とする請求項3に記載のプロセッサ。
  5. 【請求項5】前記分岐予測処理手段は、前記第1種また
    は第2種と識別された条件分岐命令について、アグリー
    ・モードの条件分岐予測器を使用して分岐予測処理を行
    い、前記第3種と識別された条件分岐命令について、真
    偽モードの条件分岐予測器を使用して分岐予測処理を行
    うことを特徴とする請求項3に記載のプロセッサ。
  6. 【請求項6】命令キャッシュ中で前記識別の対象となっ
    た条件分岐命令に対する識別結果を示す情報を該条件分
    岐命令に付加して記録する手段を更に備えたことを特徴
    とする請求項1ないし5のいずれか1項に記載のプロセ
    ッサ。
  7. 【請求項7】与えられた命令が条件分岐命令である場合
    に、該命令が、コンパイラにおいて分岐成立と予測され
    た第1種の条件分岐命令か、コンパイラにおいて分岐不
    成立と予測された第2種の条件分岐命令か、コンパイラ
    において予測不可とされた第3種の条件分岐命令かを識
    別し、 前記条件分岐命令に対して前記識別結果に応じた分岐予
    測処理を行うことを特徴とする分岐予測方法。
  8. 【請求項8】与えられたソースプログラムに基づいて対
    象とするプロセッサで実行可能なオブジェクトプログラ
    ムを生成するコンパイル方法であって、 前記ソースプログラムを解析して中間コードを生成する
    第1のステップと、 前記中間コードを最適化し、コード生成して、オブジェ
    クトプログラムを生成する第2のステップとを有し、 前記第2のステップは、 対象となった条件分岐命令が、分岐成立と予測、分岐不
    成立と予測、予測不可の3種類のいずれに該当するかを
    判定するステップと、 この判定結果に対応する命令を生成するステップとを含
    むことを特徴とするコンパイル方法。
  9. 【請求項9】前記第1のステップは、対象となった条件
    分岐命令に、前記判定のための情報を付加するステップ
    を含むことを特徴とする請求項8に記載のコンパイル方
    法。
JP2000053820A 2000-02-29 2000-02-29 プロセッサ及び分岐予測方法並びにコンパイル方法 Pending JP2001243070A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2000053820A JP2001243070A (ja) 2000-02-29 2000-02-29 プロセッサ及び分岐予測方法並びにコンパイル方法
US09/794,063 US6735681B2 (en) 2000-02-29 2001-02-28 Processor and branch prediction method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2000053820A JP2001243070A (ja) 2000-02-29 2000-02-29 プロセッサ及び分岐予測方法並びにコンパイル方法

Publications (1)

Publication Number Publication Date
JP2001243070A true JP2001243070A (ja) 2001-09-07

Family

ID=18575151

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000053820A Pending JP2001243070A (ja) 2000-02-29 2000-02-29 プロセッサ及び分岐予測方法並びにコンパイル方法

Country Status (2)

Country Link
US (1) US6735681B2 (ja)
JP (1) JP2001243070A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007317083A (ja) * 2006-05-29 2007-12-06 Nec Computertechno Ltd マイクロプロセッサおよびパイプライン制御方法
JP2008107913A (ja) * 2006-10-23 2008-05-08 Toshiba Corp プログラム、ソフトウェア変換装置及びコンピュータ

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050228977A1 (en) * 2004-04-09 2005-10-13 Sun Microsystems,Inc. Branch prediction mechanism using multiple hash functions
US7487334B2 (en) * 2005-02-03 2009-02-03 International Business Machines Corporation Branch encoding before instruction cache write
US20100082426A1 (en) * 2008-09-30 2010-04-01 Yahoo! Inc. Site activation and deactivation
CN105980979B (zh) 2014-12-13 2018-11-20 上海兆芯集成电路有限公司 用于检测暂停的逻辑分析器
WO2016092347A1 (en) * 2014-12-13 2016-06-16 Via Alliance Semiconductor Co., Ltd. Distributed hang recovery logic
CN105849705B (zh) * 2014-12-13 2019-06-04 上海兆芯集成电路有限公司 用于检测暂停的逻辑分析器
US9990199B2 (en) * 2015-09-18 2018-06-05 Axis Ab Conditional flow with hardware acceleration

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5752014A (en) * 1996-04-29 1998-05-12 International Business Machines Corporation Automatic selection of branch prediction methodology for subsequent branch instruction based on outcome of previous branch prediction
US5805878A (en) * 1997-01-31 1998-09-08 Intel Corporation Method and apparatus for generating branch predictions for multiple branch instructions indexed by a single instruction pointer
US6167506A (en) * 1997-11-17 2000-12-26 Advanced Micro Devices, Inc. Replacing displacement in control transfer instruction with encoding indicative of target address, including offset and target cache line location
US6247122B1 (en) * 1998-12-02 2001-06-12 Ip-First, L.L.C. Method and apparatus for performing branch prediction combining static and dynamic branch predictors
US6427206B1 (en) * 1999-05-03 2002-07-30 Intel Corporation Optimized branch predictions for strongly predicted compiler branches

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007317083A (ja) * 2006-05-29 2007-12-06 Nec Computertechno Ltd マイクロプロセッサおよびパイプライン制御方法
JP4728877B2 (ja) * 2006-05-29 2011-07-20 エヌイーシーコンピュータテクノ株式会社 マイクロプロセッサおよびパイプライン制御方法
JP2008107913A (ja) * 2006-10-23 2008-05-08 Toshiba Corp プログラム、ソフトウェア変換装置及びコンピュータ

Also Published As

Publication number Publication date
US20010037446A1 (en) 2001-11-01
US6735681B2 (en) 2004-05-11

Similar Documents

Publication Publication Date Title
US7076638B2 (en) Processor, compiler and compilation method
US5941983A (en) Out-of-order execution using encoded dependencies between instructions in queues to determine stall values that control issurance of instructions from the queues
US7814469B2 (en) Speculative multi-threading for instruction prefetch and/or trace pre-build
US8990543B2 (en) System and method for generating and using predicates within a single instruction packet
US5692169A (en) Method and system for deferring exceptions generated during speculative execution
US7343482B2 (en) Program subgraph identification
US7765342B2 (en) Systems, methods, and computer program products for packing instructions into register files
US6301705B1 (en) System and method for deferring exceptions generated during speculative execution
US7200738B2 (en) Reducing data hazards in pipelined processors to provide high processor utilization
US5878254A (en) Instruction branching method and a processor
US20060015855A1 (en) Systems and methods for replacing NOP instructions in a first program with instructions of a second program
US7712091B2 (en) Method for predicate promotion in a software loop
US6871343B1 (en) Central processing apparatus and a compile method
JP4134179B2 (ja) ソフトウエアによる動的予測方法および装置
US20050257200A1 (en) Generating code for a configurable microprocessor
JP2001243070A (ja) プロセッサ及び分岐予測方法並びにコンパイル方法
US20150339122A1 (en) Processor with conditional instructions
US20030145190A1 (en) Compiler algorithm to implement speculative stores
US7302555B2 (en) Zero overhead branching and looping in time stationary processors
JP2006053830A (ja) 分岐予測装置および分岐予測方法
JP4006887B2 (ja) コンパイラ、プロセッサおよび記録媒体
US20060259752A1 (en) Stateless Branch Prediction Scheme for VLIW Processor
JPH08292887A (ja) 命令の分岐方法およびプロセッサ
JP2006012185A (ja) プロセッサ