JP2012502367A - 疎及び密予測を伴うハイブリッド分岐予測デバイス - Google Patents

疎及び密予測を伴うハイブリッド分岐予測デバイス Download PDF

Info

Publication number
JP2012502367A
JP2012502367A JP2011526253A JP2011526253A JP2012502367A JP 2012502367 A JP2012502367 A JP 2012502367A JP 2011526253 A JP2011526253 A JP 2011526253A JP 2011526253 A JP2011526253 A JP 2011526253A JP 2012502367 A JP2012502367 A JP 2012502367A
Authority
JP
Japan
Prior art keywords
cache
branch
entry
instruction
sparse
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2011526253A
Other languages
English (en)
Other versions
JP5255701B2 (ja
JP2012502367A5 (ja
Inventor
ディー.ズラースキ ジュニア. ジェラルド
ディー.ダンダス ジェイムズ
エックス.ジャーヴィス アンソニー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
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 Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2012502367A publication Critical patent/JP2012502367A/ja
Publication of JP2012502367A5 publication Critical patent/JP2012502367A5/ja
Application granted granted Critical
Publication of JP5255701B2 publication Critical patent/JP5255701B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer

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)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

【解決手段】
マイクロプロセッサにおける分岐予測のためのシステム及び方法。ハイブリッドデバイスは、命令キャッシュの各エントリ内の通常のより小さい数より多くない分岐に対して疎キャッシュ内に分岐予測情報をストアする。iキャッシュラインが追加的な分岐を備えているあまり一般的でない場合に対しては、デバイスは、対応する分岐予測情報を密キャッシュ内にストアする。疎キャッシュの各エントリは、対応する命令キャッシュラインが追加的な分岐命令を含んでいるか否かを表示するビットベクタをストアする。この表示はまた、記憶のための密キャッシュ内のエントリを選択するために用いられてよい。第2の疎キャッシュは、第1の疎キャッシュから退去させられた全てのエントリをストアする。
【選択図】図4

Description

この発明はマイクロプロセッサに関し、更に詳しくは分岐予測メカニズムに関する。
最新のマイクロプロセッサは1つ以上のプロセッサコア又はプロセッサを含むであろうし、各プロセッサはソフトウエアアプリケーションの命令を実行することができる。これらのプロセッサは典型的にはパイプライン化され、この場合、これらのプロセッサは1つ以上のデータ処理段階を含み、データ処理段階はこれらの間に位置する記憶要素(レジスタ及びアレイ)と共に直列に接続されている。1つの段階の出力は、クロック周期又は位相を規定するクロックの遷移の間に次の段階の入力とされ、当該遷移は1つのクロックのほんの一瞬である。パイプラインは命令処理の部分部分が実行される任意の数の段階に分割されていてよいが、命令処理は一般的に、命令をフェッチすること(fetching)と、命令を復号化することと、命令を実行することと、実行された結果を命令によって指定される宛先にストアすることとを備えている。
理想的には、クロック周期毎にパイプラインの各段階に対する命令の有用な実行が生み出される。しかし、パイプライン内のストール(stall)が当該パイプライン段階の間に実行されるべき有用なワークを生じさせないことがある。幾つかのストールは数クロック周期を持続させることがあり、そしてプロセッサ性能を著しく低下させ得る。ストールの幾つかの例は、データキャッシュ又は命令キャッシュのミス、命令間のデータ依存性、及び予測を誤った分岐命令のような制御フロー予測ミスを含む。
プロセッサ性能に対するストールのネガティブな影響は、パイプライン段階を重複させることによって低減され得る。更なる技術は命令の順序外実行(out-of-order execution)を可能にすることであり、それによりデータ依存ストールの低減が支援される。また、スーパースケーラアーキテクチャ(superscalar architecture)を伴うコアは、動的なスケジューリングに基きクロック周期毎に変化する数の命令を発行する。しかし、数クロック周期のストールは、それら全てのストール周期を隠すことを妨げるであろう順序どおりのリタイアメント(in-order retirement)に起因して、それでもなおプロセッサの性能を低下させる。そこで、性能損失を低減するための他の方法は、多重周期ストールの発生を低減することである。1つのそのような多重周期ストールは、分岐命令のような制御フロー命令の予測ミスである。
分岐命令は、条件付きの又は無条件の、及び直接の又は間接の、のような多くの種類を備えている。条件付き分岐命令は、命令ストリームをどのパスが取り入れるかの決定を実行する。命令内で符号化されているであろう指定の条件が満たされていないと分岐命令が決定した場合、その分岐命令は取り込まれるべきではないとみなされ、そしてプログラム順序における次のシーケンシャル命令が実行される。一方で、指定の条件が満たされていると分岐命令が決定した場合には、その分岐命令は取り込まれるべきであるとみなされる。その結果、プログラム順序内の次のシーケンシャル命令ではなく、むしろ分岐目標アドレスに配置される命令である後続の命令が実行される。無条件分岐命令は常に取り込まれる条件付き分岐命令とみなされる。試験する命令内には指定の条件はなく、そして後続の命令の実行は常にシーケンシャル順序とは異なるシーケンスで発生する。
また、分岐目標アドレスは、当該分岐命令それ自身内にストアされているであろうオフセットによって、プログラムカウンタ(PC)レジスタ内にストアされる線形アドレス値に対して指定され得る。この種の分岐目標アドレスは直接的であると称される。分岐目標アドレスはまた、レジスタ又はメモリ内の値によって指定することができ、この場合、レジスタ又はメモリロケーションが分岐命令内にストアされているであろう。この種の分岐目標アドレスは間接的であると称される。更に、間接的分岐命令においては、分岐目標アドレスを指定しているレジスタは異なる値でロードされ得る。
無条件間接的分岐命令の例は、プログラムコード内にサブルーチンを実装するために使用されることができ且つ分岐目標アドレスを供給するためにリターンアドレススタック(RAS)を用いることができる手続きコール及びリターンを含む。他の例は、スイッチケース命令文(switch-case statement)を実装するために用いられ得る間接的ジャンプ命令であり、スイッチケース命令文はC++及びJavaのようなオブジェクト指向プログラムにおいて一般的である。
条件付き分岐命令の例は、プログラムコード内にループを実装するために用いられ得る分岐命令である(例えば「フォー(for)」及び「ホワイル(while)」構成)。条件付き分岐命令は、取り込まれるとみなされるべき指定の条件を満たす必要がある。満たされた条件の例は、指定のレジスタがその時点でゼロのストア値を保持していることであり得る。指定のレジスタは当該条件付き分岐命令において符号化される。この指定のレジスタは、ソフトウエアアプリケーションコード内の命令によってループ内でデクリメントされるそのストア値を有することができる。指定のレジスタの出力は、専用のゼロ検出組み合わせ論理に入力されるであろう。
また、複数の条件付き分岐命令は互いにいくらかの依存関係を有していることがある。例えば、プログラムは次のような単純なケースを有しているかもしれない。
if(value==0)value==1;
if(value==1)
上記ケースを実装するために用いられるであろう条件付き分岐命令は、条件を予測する正確性を改善するために用いられ得るグローバル履歴を有しているであろう。1つの形態では、予測は2ビットカウンタによって実装され得る。次に分岐予測を更に詳細に説明する。
最新のマイクロプロセッサは、分岐命令の条件の結末を決定し且つ分岐目標アドレスを決定するために多重化クロック周期を必要とすることがある。特定のパイプライン内で実行中の特定のスレッドに対して、分岐命令が復号化されるまで分岐命令又は後続の命令によっては有用なワークが実行されないことがあり、そして後で条件の結末及び分岐目標アドレスの両方が知られることになる。これらのストール周期はプロセッサの性能を低下させる。
ストールよりもむしろ、予測は命令がフェッチされた直後に条件付き分岐条件及び分岐目標アドレスから作成され得る。いつ予測が整ったかに関する正確な段階は、パイプライン実装に依存している。分岐条件を予測するために、メモリからの、例えば命令キャッシュ(iキャッシュ)からの命令をフェッチするために用いられるPCは、分岐予測論理を索引付けるために用いられ得る。PCを用いる早期の組み合わせによる予測スキームの1つの例は、スコット・マクファーリン(Scott McFarling)の1993年の文献、「組み合わせ分岐予測器」、デジタル・ウエスタン・リサーチ・ラボラトリ・テクニカル・ノートTN−36("Combining Branch Predictors", Digital Western Research Laboratory Technical Note TN- 36)に記載されているジーセレクト(gselect)分岐予測方法であり、当該文献はその全部を参照のためにここに組み込まれる。PCにストアされる線形アドレスは、ハッシング(hashing)機能におけるグローバル履歴レジスタ内にストアされる値と組み合わされるであろう。ハッシング機能の出力及びPCは、パターン履歴テーブル(PHT)、分岐目標バッファ(BTB)その他の予測テーブルを索引付けるために用いられ得る。取り込まれた又は取り込まれなかった予測よりはむしろ、その時点での分岐命令の分岐目標アドレス情報でのグローバル履歴レジスタの更新は、条件付き分岐方向予測(即ち、取り込まれ又は取り込まれなかった結末予測)及び、BTB予測又は間接的目標アレイ予測のような間接的分岐目標アドレス予測の両方の予測精度を高めることができる。多くの異なるスキームが分岐予測メカニズムの種々の形態に含まれ得る。
高い分岐予測精度は、より電力効率が良好で且つより高性能なマイクロプロセッサに貢献する。予測された命令ストリームからの命令は、分岐命令の実行に先立ち投機的に(speculatively)実行されてよく、そしてどんな場合でも分岐命令の実行に先立ちプロセッサのパイプライン内に置かれる。予測された命令ストリームが正しい場合には、クロック周期毎に実行される命令の数は有利に増加させられる。しかし、予測された命令ストリームが正確でない場合(即ち1つ以上の分岐命令が不正確に予測されている場合)には、不正確に予測された命令ストリームからの命令はパイプラインから破棄され、そしてクロック周期毎に実行される命令の数は減少させられる。
多くの場合、分岐予測メカニズムは、特定の分岐命令に対するより正確な挙動をなすために、分岐命令の先行する実行の履歴を備えている。そのような分岐予測履歴は典型的には、分岐命令に対応するデータを記憶装置内に維持している必要がある。また、目標アドレス予測において用いられる全部の又は一部の分岐目標アドレスをストアするために、分岐目標バッファ(BTB)が用いられることがある。履歴及びアドレス情報を備えている分岐予測データが記憶装置から退去させられ、あるいは失われた場合には、分岐命令のためのデータを後で再生成する必要があろう。
上述の問題の1つの解決法は、分岐予測記憶装置の規模を大きくすることであろう。しかし、分岐予測記憶装置の規模を大きくすることは、ゲート領域の顕著な増大及び分岐予測メカニズムの規模の顕著な拡大を必要とするであろう。その結果、ゲート領域及び電力消費を減少させるために分岐予測記憶装置の規模を小さくすることによって、分岐の挙動に関する有益なデータは退去させられるかもしれず、そして再生成されなければならない。
上述に鑑み、ゲート数の顕著な増大又は分岐予測メカニズムの規模の顕著な拡大を必要とせずに分岐予測能力を向上させるための効果的な方法及びメカニズムが要望されている。
マイクロプロセッサにおける分岐予測のためのシステム及び方法が検討される。
1つの実施形態では、マイクロプロセッサ内のハイブリッド分岐予測デバイスが提供される。命令キャッシュ(iキャッシュ)の各エントリ内の予め定められた数の分岐に対する分岐予測情報に対して記憶装置を割り当てるよりもむしろ、ハイブリッドデバイスは、命令キャッシュの各エントリ内の通常のより小さい数より多くない分岐に対して第1の記憶装置内に分岐予測情報をストアする。iキャッシュラインが追加的な分岐を備えているあまり一般的でない場合に対しては、デバイスは、対応する分岐予測情報を第2の記憶装置内にストアする。
また、疎キャッシュ及び密キャッシュを備えたハイブリッド分岐予測デバイスが検討される。疎キャッシュの各エントリは、命令キャッシュのエントリ又はキャッシュラインに対応する。これらの対応するエントリは、命令フェッチ要求の間にプロセッサから送られる同一のアドレスによって選択されてよい。疎キャッシュのエントリの各々は、命令キャッシュライン内の予め定められた数より多くない分岐命令に対して分岐予測情報をストアする。また、各エントリは、この命令キャッシュラインが追加的な分岐命令を含んでいてよいか否かの表示、例えばビットベクタをストアする。この表示はまた、追加的な分岐に対する分岐予測情報をストアするための密キャッシュ内のエントリを選択するために用いられてよい。ハイブリッド分岐予測デバイスはまた、第1の疎キャッシュから退去させられたエントリをストアするための第2の疎キャッシュを備えている。全てのエントリはストアされ、分岐予測情報は失われずあるいは後で再構築される必要がない。
図1はプロセッサコアの1つの実施形態の一般化されたブロック図である。
図2は分岐予測ユニットの1つの実施形態を示す一般化されたブロック図である。
図3はiキャッシュ記憶配置の1つの実施形態を示す一般化されたブロック図である。
図4はハイブリッド分岐予測を伴うプロセッサコアの1つの実施形態を示す一般化されたブロック図である。
図5は分岐予測ユニットの1つの実施形態を示す一般化されたブロック図である。
図6は疎キャッシュ記憶配置の1つの実施形態を示す一般化されたブロック図である。
図7は密分岐キャッシュ記憶配置の1つの実施形態を示す一般化されたブロック図である。
図8は分岐予測の効果的な改良のための方法の1つの実施形態のフロー図である。
本発明が種々の修正及び代替的な形態を許容し得る一方で、具体的な実施形態が例示の目的で図面に示されており、またここに詳細に説明されている。しかし、図面及びそれに対する詳細な説明は、開示された特定の形態に本発明を限定することを意図しているのではなく、むしろ本発明は、添付の特許請求の範囲により画定されるような本発明の精神及び範囲内にある全ての修正、均等なもの及び代替案を網羅するものであることが理解されるべきである。
以下の説明においては、本発明の完全な理解をもたらすために多くの特定の詳細が示されている。しかし、当業者であれば、これらの特定の詳細なしに本発明を実施し得ることを認識すべきである。幾つかの例では、周知の回路、構造及び技術は、本発明を不明瞭にすることを避けるために、詳細には示されていない。
図1を参照すると、順序外実行を行うプロセッサコア100の一般化されたブロック図の1つの実施形態が示されている。コア100は所定の命令セットアーキテクチャ(ISA)に従う命令を実行するための回路を含む。例えば、x86命令セットアーキテクチャが選択されてよい。代替的には、任意の他の命令セットアーキテクチャが選択されてよい。1つの実施形態では、コア100は単一プロセッサ構成内に含まれていてよい。もう1つの実施形態では、コア100は多重化プロセッサ構成内に含まれていてよい。他の実施形態では、コア100は多重化ノードシステムの処理ノード内の多重化コア構成内に含まれていてよい。
命令キャッシュ(iキャッシュ)102はソフトウエアアプリケーションに対する命令をストアすることができ、またデータキャッシュ(dキャッシュ)116は命令によって実行される計算で用いられるデータをストアすることができる。一般的に言うと、1つのキャッシュは1つ以上のブロックをストアすることができ、各ブロックは、図示しないシステムメモリ内の対応するアドレスにストアされるデータのコピーである。ここで用いられる「ブロック」は、連続したメモリロケーションにストアされる一連のバイトであり、コヒーレンシ(coherency)目的のための単位として取り扱われる。幾つかの実施形態では、ブロックはキャッシュ内での割り当て及び割り当て解除(allocation and deallocation)の単位でもある。1つのブロック内のバイトの数は、設計上の選択に従って変化してよく、また任意のサイズのものであってよい。例としては、32バイト及び64バイトのブロックがよく用いられる。
キャッシュ102及び116は、図示されるように、プロセッサコア100内に集積化されていてよい。代替的には、キャッシュ102及び116は、所望に応じてバックサイドキャッシュ構成又はインライン構成でコア100と結合されていてよい。更には、キャッシュ102及び116はキャッシュの階層(hierarchy)として実装されてよい。1つの実施形態では、キャッシュ102及び116は各々L1及びL2キャッシュ構造を代表する。他の実施形態では、キャッシュ102及び116は、L3キャッシュ構造として実装されるもう1つのキャッシュ(図示せず)を共有してよい。代替的には、キャッシュ102及び116の各々はL1キャッシュ構造を代表し、そして共有されるキャッシュ構造はL2キャッシュ構造であってよい。所望に応じて他の組み合わせが可能でありまた選択されてよい。
キャッシュ102及び116並びに任意の共有されるキャッシュの各々は、対応するキャッシュ制御器に結合されるキャッシュメモリを含んでいてよい。コア100が多重化コアシステム内に含まれている場合には、メモリ制御器(図示せず)は、パケットを経路付け、データ処理のためにパケットを受け取り、そしてコア100内の論理によって用いられる内部クロックにパケットを同期させるために用いられてよい。また、多重化コアシステムにおいては、多重化プロセッサの多重化キャッシュ内にメモリブロックの多重化コピーが存在してよい。従ってメモリ制御器内には、キャッシュコヒーレンシ回路が含まれていてよい。与えられたブロックは1つ以上のキャッシュ内にストアされていてよく、またキャッシュコピーの1つはメモリシステム内のコピーに対して修正されているであろうから、コンピューティングシステムは多くの場合にキャッシュとメモリシステムの間のコヒーレンシを維持する。コヒーレンシは、所定のコヒーレンシプロトコルに従ってブロックの他のキャッシュコピーによってブロックに対する更新が反映される場合に維持される。種々の具体的なコヒーレンシプロトコルが周知である。
命令フェッチユニット(IFU)104は、iキャッシュミスが無い場合にクロック周期毎にiキャッシュ102から多重化命令をフェッチしてよい。IFU104は、iキャッシュ102からフェッチすべき次の命令のアドレスに対するポインタを保持するプログラムカウンタ(PC)レジスタを含んでいてよい。分岐予測ユニット122がIFU104に結合されていてよい。ユニット122は、命令ストリームのフローを次のシーケンシャル命令を実行することから変化させる命令の情報を予測するように構成されてよい。予測情報の例は、次のシーケンシャル命令が実行されるべきかあるいは命令ストリームにおける他のロケーション内の命令が次に実行されるべきかを決定する条件が満たされているか否かの予測を備えた1ビット値を含んでいてよい。予測情報の他の例は、次のシーケンシャル命令とは異なる実行すべき次の命令のアドレスであってよい。実際の結末及び予測が正しかったか否かの決定は、後でのパイプライン段階において生じてよい。また、代替的な実施形態においては、IFU104及びユニット122を2つの別のユニットとして実装するよりもむしろ、IFU104がユニット122を備えていてよい。
復号器ユニット106は、多重化フェッチ命令のオペコード(opcodes)を復号化する。復号器ユニット106は、並べ替えバッファ118のような順序どおりのリタイアメントキュー(in-order retirement queue)におけるエントリを予約ステーション108内及びロード/ストアユニット114内に割り当ててよい。予約ステーション108におけるエントリの割り当ては発送(dispatch)とみなされる。予約ステーション108は、複数の命令がそれらのオペランドが利用可能になるまで待機する命令キューとして機能することができる。オペランドが利用可能であり且つハードウエア資源も利用可能である場合、命令は予約ステーション108から整数及び浮動小数点機能ユニット110又はロード/ストアユニット114へ順序外(out-of-order)に発行されてよい。機能ユニット110は、加算、減算、掛け算、割り算、及び平方根のようなコンピュータ計算のための演算論理ユニット(ALU)を含んでいてよい。分岐命令の結末を決定しまた計算された結末を予測された値と比較するための論理が含まれていてよい。一致しない場合には、予測ミスが発生し、そして分岐命令の後の後続の命令は除去される必要があり、また新たなフェッチが正しいPC値で実行される必要がある。
ロード/ストアユニット114はメモリアクセス命令を実行するためのキュー及び論理を含んでいてよい。また、正しい最も若いストア命令からの受信され転送されたロード命令データ又はバイパスデータを確保するために、照合論理がロード/ストアユニット114内にあってよい。
機能ユニット110及びロード/ストアユニット114からの結果は、共通データバス112上に提示されてよい。結果は並べ替えバッファ118に送られてよい。ここで、それ自身の結果を受け取り、リタイアメントに対して標識付けられ、且つ先頭キュー(head-of-the-queue)である命令は、その結果をレジスタファイル120へ送ってよい。レジスタファイル120は、プロセッサコア100の汎用レジスタのアーキテクチャ状態を保持することができる。1つの実施形態では、レジスタファイル120は32個の32ビットレジスタを含んでいてよい。次いで、並べ替えバッファ内の命令は順序どおりにリタイアさせられてよく、そしてその先頭キューポインタは、プログラム順序における後続の命令に対して調節されてよい。
共通データバス112上の結果は、結果を待っている命令のオペランドに値を転送するために、予約ステーションへ送られてよい。これらの待機している命令がそれらのオペランドに対する値を有しており且つハードウエア資源が当該命令を実行するために利用可能である場合には、これらの命令は、予約ステーション108から機能ユニット110又はロード/ストアユニット114内の適切なハードウエア資源に対して順序外で発行されてよい。共通データバス112上の結果は、制御フロー予測情報及び/又はPC値を更新するために、IFU104及びユニット122へ経路付けられてよい。
図2は分岐予測ユニット200の1つの実施形態を示している。命令のアドレスはレジスタプログラムカウンタ210(PC210)内にストアされる。1つの実施形態では、アドレスは32ビット又は64ビット値であってよい。グローバル履歴シフトレジスタ240(GSR240)は、条件付き分岐命令の末尾の予測結果の最新の履歴を含んでいてよい。1つの実施形態では、GSR240は1エントリ10ビットシフトレジスタであってよい。他の実施形態では、シフトレジスタGSR240は異なる数のビットを含んでいてよい。GSR240にストアされている情報は、グローバル履歴を用いることによって、その時点での条件付き分岐命令の条件が満たされているか否かを予測するために用いられてよい。例えば1つの実施形態では、GSR240は、プログラム実行における最後の10個の条件付き分岐命令の1ビットの取り込まれた/取り込まれなかった結果を保持する10ビットシフトレジスタであってよい。1つの実施形態では、論理「1」は取り込まれた結末を示してよく、また論理「0」は取り込まれなかった結末を示してよく、あるいは逆であってもよい。また代替的な実施形態においては、GSR240は、分岐毎基準(per-branch basis)に対応する又は分岐履歴のテーブル内で結合された分岐履歴に対応する情報を用いてよい。これらの実施形態においては、分岐予測を作成するために用いられるグローバル履歴情報を提供するために、1つ以上の分岐履歴テーブル(BHT)が用いられてよい。
十分なアドレスビット(即ちPC210にストアされているその時点での分岐命令のPC)がその時点の分岐命令を指定するために用いられる場合には、これらのビットのハッシングは、GSR240にストアされているブローバル履歴と共に、いずれかの要素単独でよりも有益な予測情報を有することができる。1つの実施形態では、PCの低位の10ビットはGSRの10ビットでハッシュされてよい。代替的な実施形態では、PCの低位の10ビット以外のビット、そして場合によっては非連続のビットがGSRのビットでハッシュされてよい。また、GSR240の多重化された部分部分はPC210で別々にハッシュされてよい。例えば、26ビットGSR240は、第1のハッシング機能においてPC210と組み合わされるその低位の13ビットと、第2のハッシング機能においてPC210と組み合わされる高位の13ビットとを有していてよい。2つの別々の出力は次いで、予測論理及びテーブル260へ伝達されてよい。多くのそのような代替が可能でありまた検討される。
1つの実施形態では、PCビット及びGSRビットのハッシングは、ビットの連結(concatenation)を備えていてよい。代替的な実施形態では、ハッシング機能の結果はPCビットのGSRビットとの排他的ORを含んでいてよい。ハッシング論理250内で実行される他のハッシング機能は、予測論理260内に含まれる1つ以上のパターン履歴テーブル(PHT)及び/又は他のテーブルに対する索引を決定するために用いられてよい。1つの実施形態においては、予測論理260内でBTBを索引付けるために、PCが単独で用いられてよい。ここで用いられているように、文字が続く参照番号によって参照される要素は、当該番号単独によって集合的に参照されることがある。例えば、予測テーブル262a〜262dは集合的に予測テーブル262として参照されることがある。
1つの実施形態では、1つの予測テーブル262は条件付き分岐のためのPHTであってよく、この場合、PHTの各エントリは2ビットカウンタを保持してよい。特定の2ビットカウンタは、条件付き分岐命令結果(即ち取り込まれ又は取り込まれていない)の過去の挙動に基いてインクリメント及びデクリメントされてよい。予め定められたスレッショルド値に一旦到達すると、ストアされている予測は、取り込まれた及び取り込まれていないの1ビット予測値の間でフリップしてよい。2ビットカウンタのシナリオでは、PHTの各エントリは以下の4つの状態、即ち、取り込まれないことを強く予測する、取り込まれないことを予測する、取り込まれることを強く予測する、及び取り込まれることを予測する、のうちの1つを保持することができ、4つの状態において、各状態は1ビットの取り込まれる/取り込まれないの予測値に対応している。
代替的には、1つ以上の予測テーブル262は、既に論じられたようにハッシング論理250の出力によって索引付けられてよく、そしてこれらのテーブル262は、1つの実施形態では学習された(trained)4ビットの重みをストアしてよい。1つの実施形態では、2つのテーブル262が同一のクロック周期内で索引付けられてよい。1つの実施形態では、これら2つのテーブル262はハッシング論理250からの同一の出力によって索引付けられてよい。代替的な実施形態では、これら2つのテーブル262は、ハッシング論理250内の別個のハッシング機能のそれぞれの出力から索引付けられてよい。読み出される対応する2つの重みは、2ビットによって符号拡張されて(sign-extended)おり、そして予測論理260内の論理によって互い加算されてよい。代替的には、これら2つの符号拡張された値はまた、合算されそしてバイアス重みに加えられてよい。バイアス重みもまた2ビットによって符号拡張されており、このバイアス重みは分岐予測記憶装置の読み出しであってよく、これについては後で更に詳細に説明する。条件付き分岐命令の予測された方向を表示するために、合計6ビットの最も重み付けの大きいバイト(most-significant-byte)(MSB)が用いられてよい。
1つの実施形態では、これらのテーブル262はハッシング論理250からの出力によってアクセスされてよく、ハッシング論理250からの出力は、論理250の入力としての分岐予測記憶装置からの分岐数(例えば1,2,等)を含む。これらの分岐数は、同一クロック周期内で予測されつつある別個の分岐命令を区別するために用いられてよい。例えば、テーブル262の行アクセスは、ハッシュされていないGSR240の一部分、例えば1つの実施形態ではGSR240の低位の7ビットを用いてよい。これらのテーブル262の出力は、1つ以上のその選択線に対してハッシュ出力を用いるマルチプレクサによって減少され得る。論理250内のこのハッシュ機能への入力は、PC210、GSR240の分離された部分、例えば1つの実施形態では23乃至7のビット範囲、及び対応する分岐数を含んでいてよい。
予測(例えば、取り込まれる/取り込まれない、又は分岐目標アドレス、あるいは両方)が一旦決定されたならば、その値はGSR240内に投機的にシフトされてよい。1つの実施形態では、取り込まれる/取り込まれないの値だけがGSR240内にシフトされる。他の実施形態では、分岐目標アドレスの一部分がGSR240内に移される。GSR240をどのように更新するかの決定は、更新論理230内で実行される。後のパイプライン段階において予測ミスが決定された場合には、この1つ以上の値は正しい結末で修復されてよい。しかし、このプロセスはまた、その時点でパイプライン内で生じている(in flight)分岐予測ミス及び正しいPCからの命令の再フェッチに起因して、フェッチされている命令を終了させることを取り入れている。これらのステップは、プロセッサ性能の妨げになるパイプラインストールを含む。
1つの実施形態では、予測論理及びテーブル260内のPHT又は他の論理からの1ビットの取り込まれる/取り込まれないの予測は、iキャッシュを索引付けそして同時にGSR240を更新するのに次のPCを用いることを決定するために用いられてよい。例えば1つの実施形態では、予測が取り込まれた場合、分岐目標アドレスが次のPCを決定するために用いられてよい。予測が取り込まれなかった場合には、次のシーケンシャルPCが次のPCを決定するために用いられてよい。
1つの実施形態では、更新論理230はGSR240を更新する方法を決定してよい。例えば、条件付き分岐がグローバル履歴更新を要求している場合には、更新論理230は、1ビットの取り込まれる/取り込まれないの予測ビットをGSR240の最新の位置にシフトさせることを決定してよい。代替的な実施形態では、分岐はGSRに対する値を提供しなくてよい。他の実施形態では、GSR240及びPC210のハッシュは予測論理260内の間接的予測アレイを索引付けるために用いられ得るので、分岐目標アドレスの一部分は、例えば間接的分岐のためにGSR240に入力されてよい。分岐目標アドレスにおける例えば1つの実施形態では4ビットの当該部分は、分岐目標アドレスの中間部分から選択されてよい。分岐目標アドレスの高位のビットは、メモリ内の同様のロケーションに置かれる命令間では頻繁には変化しないであろうし、また低位のビットは、メモリ内の異なる線、ワード、及びバイトへのアクセスに起因して高い頻度で変化する。例えば1つの実施形態では、分岐目標アドレスのビット7乃至4が用いられてよい。
代替的な実施形態では、更新論理230はGSR240内へのシフト動作を実行しなくてよく、むしろ分岐目標アドレスの1つ以上のビットとGSR240の1つ以上の選択されたビットとの排他的ORを実行してよい。次いで、GSR240の選択されたビットは排他的ORの結果で置換される。例えば、分岐目標アドレスの3ビット、例えば分岐目標アドレスのビット7乃至5とGSR240の最新の3ビットとの排他的ORの結果がGSR240の最新の3ビットと置き換わってよい。更新論理230の他の実施形態が実装されてよい。いずれの場合にも、間接的な分岐命令の分岐目標アドレスの一部分は、これらの命令の発生をその時点での分岐予測メカニズムと相関付ける試みにおいて、グローバル履歴を更新するために用いられてよい。与えられた分岐又は分岐の種類がGSRに対して価値をもたらすか否かは、設計上の選択である。
更新論理230の各実装においては、GSR内にストアされた新たなグローバル履歴は、条件付き分岐方向予測(即ち、取り込まれる/取り込まれないの結末予測)及び間接的分岐目標アドレス予測、例えばBTB予測又は間接的目標アレイ予測の両方の正確性を高めることができる。正確性の向上は、ダイ面積、電力消費、及びクロック周期増大に対して無視し得る影響で達成することができる。
ソフトウエアアプリケーション命令は、図1のiキャッシュ102のような命令キャッシュ内に種々の方法でストアされ得る。例えば、図3は4ウエイセットアソシアティブキャッシュ構成(4-way set associative cache organization)を用いて命令がストアされるiキャッシュ記憶配置300の1つの実施形態を示している。ISAに依存する可変長命令であってよい命令338は、4ウエイセットアソシアティブキャッシュ330内のキャッシュラインのデータ部分又はブロックデータであってよい。1つの実施形態では、キャッシュラインの命令338は64バイトを備えていてよい。代替的な実施形態では、異なるサイズが選ばれてよい。
命令338の連続的なバイト内にストアされていてよい命令は、1つ以上の分岐命令を含んでいてよい。幾つかのキャッシュラインは少しの分岐命令を有していてよく、また他のキャッシュラインは多くの分岐命令を有していてよい。キャッシュライン毎の分岐命令の数には一貫性がない。従って、対応するキャッシュラインのための分岐予測情報の記憶装置は、全ての分岐に対する情報を提供するために、多数の分岐情報がキャッシュライン内にストアされることを前提とする必要があろう。しかし、そのような記憶装置は大きなダイ面積を必要とするであろうし、また電力消費を増大させるであろう。キャッシュライン毎の小さな数であってよい共通ケースの数の分岐命令の情報及び非共通ケースに対するキャッシュライン内の追加的な分岐の表示のための主記憶装置を有するハイブリッド記憶装置は、より効率的であろう。ハイブリッド記憶装置スキーム内には、主記憶装置によって表示される追加的な分岐のための補助記憶装置があってよい。そのようなハイブリッド記憶装置スキームの更なる詳細は後述する。
キャッシュ330の4ウエイの各々はまた状態情報334を有しており、状態情報334はキャッシュラインの有効ビット及び他の状態情報を備えていてよい。例えば、状態フィールドは、MOESIスキーム内の状態のような対応するキャッシュブロックの状態を特定するために用いられる符号化されたビットを含んでいてよい。また、ブロック状態334内のフィールドは、退去(eviction)のための、最後に使用されてから最も長い時間が経過した(Least Recently Used)(LRU)情報を表示するために用いられるビットを含んでいてよい。LRU情報は、キャッシュセット332内のどのエントリが最も長い間参照されなかったのかを表示するために用いることができ、またキャッシュ制御器によって採用されるキャッシュ交換アルゴリズムと併せて用いることができる。
プロセッサコアからキャッシュ330に提示されるアドレス310は、対応するキャッシュセット332を選択するためにブロックインデックス318を含んでいてよい。1つの実施形態では、ブロック状態334及びブロックタグ336が、同一アレイ内の連続したビット内よりはむしろ別個のアレイ内にストアされていてよい。ブロックタグ336は、選択されたキャッシュセット332内で4キャッシュラインのどれがアクセスされている最中であるかを決定するために用いられてよい。また、アドレス310のオフセット320がキャッシュライン内の具体的なバイト又はワードを表示するために用いられてよい。
次に図4を参照すると、ハイブリッド分岐予測を伴うプロセッサコア400の1つの実施形態の一般化されたブロック図が示されている。図1の回路部分に対応する回路部分には同一の番号が付されている。iキャッシュサブシステムに対するキャッシュ階層の最初の2つのレベルは、iキャッシュ410及びキャッシュ412として明示的に示されている。キャッシュ410及び412は、1つの実施形態では、それぞれL1キャッシュ構造及びL2キャッシュ構造として実装されてよい。1つの実施形態では、キャッシュ412は、命令及びデータの両方をストアするスプリット第2レベルキャッシュであってよい。代替的な実施形態では、キャッシュ412は、2つ以上のコアの間で共有されるキャッシュであってよく、またメモリ制御器内にキャッシュコヒーレンシ制御回路を必要とする。他の実施形態では、L3キャッシュ構造がチップ上又はチップ外にあってよく、そしてキャッシュ412よりもむしろL3キャッシュが多重化コア間で共有されてよい。
前述したように、iキャッシュ410からフェッチされつつあるアドレスの有益な割合のために、対応するiキャッシュライン内には少数の分岐命令のみが含まれていてよい。一般的に言って、多くのアプリケーションコードの大きな割合に対して、分岐はiキャッシュライン内に疎にのみ見出される。従って、特定のiキャッシュラインに対応する分岐予測情報の記憶は、多数の分岐に対して情報をストアするための回路を割り当てる必要はないであろう。例えば、ハイブリッド分岐予測デバイス440は、分岐予測ユニット122によって用いられるべき分岐予測情報をストアするためのダイ面積及び回路をより効率的に割り当てることができる。疎分岐キャッシュ420は、iキャッシュライン毎に予め定められた通常の疎な数の分岐命令に対する分岐予測情報をストアすることができる。iキャッシュ410内の各キャッシュラインは、対応するエントリを疎分岐キャッシュ420内に有していてよい。1つの実施形態では、通常の疎な数の分岐は、iキャッシュ410内の各64バイトキャッシュラインに対して2分岐であってよい。iキャッシュ410内の各ラインのための疎な数の分岐に対してのみ予測情報をストアすることによって、iキャッシュ410内の各ラインに対して予め定められた最大数の分岐に対する情報を含む記憶装置において、キャッシュ420のサイズを大幅に低減することができる。ダイ面積要求、容量性負荷、及び電力消費が各々低減され得る。
1つの実施形態では、iキャッシュ410は4ウエイセットアソシアティブキャッシュとして組織化されてよい。疎分岐キャッシュ420は直接マッピングされたキャッシュとして組織化されてよい。疎分岐キャッシュ420内の各エントリはiキャッシュ410内のキャッシュラインに対応していてよい。疎分岐キャッシュ420の各エントリは、iキャッシュ410の対応するライン内の予め定められた疎な数の分岐命令、例えば1つの実施形態では2分岐、に対応する分岐予測情報を備えていてよい。分岐予測情報は後で更に詳細に説明される。代替的な実施形態では、異なる数の分岐命令が疎であると決定されてよく、またiキャッシュ410内のラインのサイズは異なるサイズであってよい。キャッシュ420は、IFU104からiキャッシュ410へ送られるのと同じ線形アドレスによって索引付けられてよい。iキャッシュ410及びキャッシュ420は両方とも、キャッシュライン境界に対応する線形アドレス内のビットのサブセットによって索引付けられてよい。例えば1つの実施形態では、線形アドレスはリトルエンディアン(little-endian)バイト順序での32ビットを備えていてよく、またiキャッシュ410内のラインは64バイトを備えていてよい。従って、キャッシュ410及び420は各々、ビット6で終了する線形アドレスの同一部分によって索引付けられてよい。
疎分岐キャッシュ422は、キャッシュ420から退去させられたラインをストアするためにコア400において利用されてよい。キャッシュ422はキャッシュ420と同じキャッシュ構成を有していてよい。iキャッシュ410からラインが退去させられてキャッシュ412内に置かれた場合、その対応するキャッシュ420内のエントリは、キャッシュ420から退去させられてキャッシュ422内にストアされてよい。このように、先に退去させられたキャッシュラインがキャッシュ412からキャッシュ410に戻った場合には、このキャッシュライン内の分岐に対する対応する分岐予測情報もまた、キャッシュ422からキャッシュ420へと戻される。従って、対応する分岐予測情報が再構築される必要はない。分岐予測情報を再構築するためのプロセスの不在により、プロセッサ性能が向上し得る。
より密に詰め込まれた分岐情報を含むアプリケーションコード内の領域に対しては、iキャッシュ410内のキャッシュラインは、疎な数の分岐より多くを含んでいてよい。疎分岐キャッシュ420の各エントリは、iキャッシュ410内の疎な数の分岐を超えた追加的な分岐の表示をストアしていてよい。追加的な分岐が存在する場合には、対応する分岐予測情報は密分岐キャッシュ430内にストアされてよい。
密分岐キャッシュ430の各エントリは、iキャッシュ410内のラインの一部分に対応していてよい。例えば、iキャッシュ410は64バイトのラインを有していてよく、また密分岐キャッシュ430の各エントリは64バイトラインの8バイト部分に対応していてよい。疎分岐キャッシュ420の各エントリは、対応する64バイトラインのどの8バイト部分が追加的な分岐を有していてよいかを指定するベクタのビット(vector of bits)を有していてよく、この場合、その64バイトラインは通常の疎な数の分岐より多くを有していてよい。ベクタビットの数及びiキャッシュラインの提示された部分の対応するサイズは、アプリケーションコード内に密に詰め込まれた分岐の領域の挙動を効率的に捕捉するために選択されてよい。
1つの実施形態では、密分岐キャッシュ430は4ウエイセットアソシアティブキャッシュとして組織化されてよい。従って密分岐キャッシュ430は、64バイトラインの8バイト部分毎に4つの分岐命令に対する分岐予測情報をストアすることができる。64バイトライン内の8つの8バイト部分でもって、密分岐キャッシュ430は、単一の64バイトライン内の32個の分岐命令に対する分岐予測情報をストアすることができる。この実施形態では、疎分岐キャッシュ420と密分岐キャッシュ430のハイブリッドな組み合わせが、iキャッシュ410内の64バイトラインに対する34個の分岐命令の分岐予測情報をストアすることができる(2つの疎分岐と32個の密分岐)。キャッシュ410、412、420、422、及び430のサイズ、結合性(associativity)、及び密度は、対象とするアーキテクチャ上で動作することになるアプリケーションに対する性能と電力消費の間での最良のトレードオフをもたらすように選択されてよい。
図5を参照すると、分岐予測ユニット500の一般化されたブロック図の1つの実施形態が示されている。図2の回路部分に対応する回路部分には同一の番号が付されている。ここでは、ストアされたハイブリッド分岐予測情報は、予測論理及びテーブル260とハッシング論理250へ伝達されてよい。1つの実施形態では、ハイブリッド分岐予測情報は、疎分岐キャッシュ420及び422並びに密分岐キャッシュ430のようなiキャッシュとは別のキャッシュ内にストアされてよい。1つの実施形態では、この情報は、同じクロック周期内で予測されつつある分岐命令を区別するための分岐数、特定の条件付き分岐命令の種類その他を表示する分岐種類情報、テーブル260内のテーブルエントリと合算されるべき重み情報、対応するキャッシュライン内の分岐命令の最終バイトに対するポインタのような付加的なアドレス情報、及び対応する分岐目標アドレス情報を含んでいてよい。
既に論じられたように、ストアされたハイブリッド分岐情報からのバイアス重み情報が、論理及びテーブル260内のテーブルからの2つの対応する符号拡張重み値と合算されてよい。このバイアス重みもまた合算に先立ち符号拡張されていてよく、そして6ビット合計の最も重み付けの大きいバイト(MSB)は、条件付き分岐命令の予測された方向を表示するために用いられてよい。
図6は分岐予測情報がストアされる疎キャッシュ記憶配置600の1つの実施形態を示している。1つの実施形態では、キャッシュ630は直接マッピングされたキャッシュとして組織化されてよい。予め定められた疎な数のエントリ634は、直接マッピングされたキャッシュ630内のキャッシュラインのデータ部分内にストアされてよい。1つの実施形態では、疎な数は2であると決定されてよい。各エントリ634は、iキャッシュ410の対応するライン内の特定の分岐に対する分岐予測情報をストアしてよい。対応するライン内に疎な数の分岐を超えて追加的な分岐が存在してよいことの表示が、密分岐表示636内にストアされる。
1つの実施形態では、各エントリ634は、有効ビットを備えている状態フィールド640と他の状態情報とを備えていてよい。エンドポインタフィールド642は、iキャッシュ410のライン内の対応する分岐命令の最後のバイトに対する表示をストアしていてよい。例えば、対応する64バイトのiキャッシュラインに対して、エンドポインタフィールド642は、64バイトのいずれかを指し示すために6ビットを備えていてよい。このポインタ値は、iキャッシュ410及び疎分岐キャッシュ420の両方を索引付けるために用いられる線形アドレス値に添付されていてよく、また全体のアドレス値は分岐予測ユニット500へ送られてよい。
予測情報フィールド644は、分岐予測ユニット500内で用いられるデータを備えていてよい。例えば、特定の分岐命令が直接的のなものであり、間接的なものであり、条件付きなものであり、無条件なものであり、又は他のものであることを表示するために、分岐種類情報が伝達されてよい。また、予測論理及びテーブル260における重みテーブル内の重みと合算されてよいバイアス重みがストアされてよい。分岐予測ユニット500に関して既に論じられたように、1つの実施形態では、4ビットの重みは、予測テーブル260内の2つの別々のテーブルからの読み出しであってよい。これらのテーブルは、PC210及びGSR240を結合するハッシング機能の出力によって索引付けられてよい。読み出される対応する2つの重みは、2ビットによって符号拡張され、そして同じく2ビットにより符号拡張されているフィールド644からのバイアス重みに加えられてよい。6ビット合計の最も重み付けの大きいバイト(MSB)は、条件付き分岐命令の予測された方向を示すために用いられてよい。
対応する部分的分岐目標アドレス値がアドレスフィールド646内にストアされてよい。通常の場合、分岐命令それ自身と同じページ内に分岐目標が置かれていることが見出されるであろうから、部分的分岐目標アドレスのみが必要とされてよい。1つの実施形態では、1ページは4KBを備えていてよく、そして12ビットの分岐目標アドレスがフィールド646内に記憶される必要があるだけである。より小さいフィールド646は、ダイ面積、容量負荷、及び電力消費を低減することを更に支援する。フィールド646にストアされているのに対して付加的なビットを必要とする分岐目標のためには、別個のページ外アレイが利用されてよい。
密分岐表示フィールド636はビットベクタを備えていてよく、この場合、当該ベクタの各ビットは、iキャッシュ410の対応するライン内の一部分に対して追加的な分岐が存在する可能性を表示する。例えば、フィールド636は8ビットベクタを備えていてよい。各ビットはiキャッシュ410の64バイトライン内の別個の8バイト部分に対応していてよい。1つの実施形態では、最初のビットはiキャッシュ410の対応するライン内の最初の8バイトのデータに対応していてよい。ベクタ内の各次に続くビットは、キャッシュライン内の次の連続する8バイトに対応していてよい。1つの実施形態では、フィールド636内の1つ以上のセットビットは、疎な数の分岐を超えて追加的な分岐が64バイトキャッシュライン内に存在し得ることを表示してよい。フィールド636内の特定のセットビットは、8バイトの対応するグループ内に追加的な分岐が存在することを示してよい。この場合、密分岐キャッシュ430が索引付けられる。1つの実施形態では、密分岐キャッシュ430は疎分岐キャッシュ420と並行して索引付けられてよいが、電力を節約するために、フィールド636内でセットビットが見出される場合にのみキャッシュ430が索引付けられてもよい。
図7は密分岐キャッシュ記憶配置700の1つの実施形態を示している。1つの実施形態では、4ウエイセットアソシアティブキャッシュ構成を用いて追加的な分岐予測情報がストアされる。キャッシュ730のキャッシュセット732内の4つのキャッシュラインの各々は、iキャッシュ410の64バイトキャッシュライン内の8バイト領域に対応していてよい。キャッシュ730の4ウエイの各々は状態情報734を有していてよく、状態情報734は、有効ビットと、対応するキャッシュラインの他の状態情報とを備えていてよい。
プロセッサコアからキャッシュ730に提示されるアドレス310は、対応するキャッシュセット732を選択するために、ブロックインデックス318及び、オフセット320の一部分を伝達してよい。密分岐キャッシュ430は、iキャッシュ410及び疎分岐キャッシュ420とは異なるアドレス可能な境界を利用してよい。例えば1つの実施形態では、キャッシュ410及び420は64バイト境界を伴うデータにアドレスすることができ、また密分岐キャッシュ430は8バイト境界を伴うデータにアドレスすることができる。従って、オフセット320の一部分、例えば合計6ビットのうちの3ビットがキャッシュ730を索引付けるために追加的に必要になるであろう。1つの実施形態では、ブロック状態734及びブロックタグ736は、同一のアレイ内の連続するビット内よりはむしろ、別個のアレイ内にストアされてよい。ブロックタグ736は、選択されたキャッシュセット732内で4つのキャッシュラインのどれがアクセスされている最中であるかを決定するために用いられてよい。分岐予測情報はブロックデータ738の連続するビット内にストアされてよい。
1つの実施形態では、各ブロックデータ738は、iキャッシュ410のライン内の対応する分岐命令の最後のバイトに対する表示をストアするエンドポインタフィールド740を備えていてよい。例えば、対応する64バイトのiキャッシュラインに対して、エンドポインタフィールド740は、対応する8バイト領域内の任意のバイトを指し示すために3ビットを備えていてよい。このポインタ値は、iキャッシュ410及び疎分岐キャッシュ420の両方を索引付けるために用いられる線形アドレス値に添付されていてよく、また全体のアドレス値は分岐予測ユニット500へ送られてよい。
1つの実施形態では、予測情報フィールド742は、疎キャッシュ420内の分岐予測フィールド644と同様のデータを備えていてよい。この情報は分岐予測ユニット500内で用いられてよい。特定の分岐命令が直接的のなものであり、間接的なものであり、条件付きなものであり、無条件なものであり、又は他のものであることを示すために、分岐種類情報が伝達されてよい。また、予測論理及びテーブル260における重みテーブル内の重みと合算されてよいバイアス重みがストアされてよい。同様に、分岐目標アドレスフィールド744は、疎キャッシュ420内のアドレスフィールド646と同様のデータを備えていてよい。通常の場合、分岐命令それ自身と同じページ内に分岐目標が置かれていることが見出されるであろうから、部分的分岐目標アドレスのみが必要とされてよい。1つの実施形態では、1ページは4KBを備えていてよく、そして全部で32ビットではなく12ビットの分岐目標アドレスがフィールド744内に記憶される必要があるだけである。より小さいフィールド744は、ダイ面積、容量負荷、及び電力消費を低減することを更に支援する。フィールド744にストアされているのに対して付加的なビットを必要とする分岐目標のためには、別個のページ外アレイが利用されてよい。
図8は分岐予測の効果的な改良のための方法800を示している。方法800は、代替的な実施形態を導き出すために当業者によって修正されてよい。また、この実施形態におけるステップは逐次的な順序で示されている。しかし、幾つかのステップは図示されているのとは異なる順序で起こってよく、幾つかのステップは同時に実行されてよく、幾つかのステップは他のステップと組み合わされてよく、そして幾つかのステップは他の実施形態ではなくてよい。図示される実施形態では、プロセッサはブロック802において命令をフェッチする。プログラムカウンタ内にストアされる線形アドレスは、命令データの連続するバイトをフェッチするためにiキャッシュ410へ伝達されてよい。iキャッシュ410内のキャッシュラインのサイズに応じて、プログラムカウンタの全部の内容がiキャッシュ410へ伝達されなくてもよい。またブロック804において、同じアドレスが疎分岐キャッシュ420へ伝達されてよい。
L1疎分岐キャッシュ420においてキャッシュヒットがない場合(条件ブロック806)には、対応するキャッシュラインがブロック808においてL2疎分岐キャッシュから検索され(retrieved)てよい。ミスが発生した場合には、iキャッシュ410内の対応するキャッシュラインはどこにもないであろうから、第2レベルキャッシュ412から検索される必要がある。一旦L1疎分岐キャッシュ420内の要求されたラインがアクセスされると、条件ブロック810において、疎分岐エントリが有効エントリに対して照合される。1つの実施形態では、疎分岐エントリはコード実行の間に順次埋められてよい。従って、疎分岐キャッシュ420内の有効エントリ間には無効エントリの「ギャップ」はないであろう。無効エントリが検出されると、iキャッシュ410の対応するライン内にはもはや分岐命令がないことを表示してよい。無効エントリが発見されない場合には、iキャッシュ410内の対応するラインは、少なくとも最大数の疎分岐命令を有しているであろう。この対応するiキャッシュライン内の予め定められた数の疎分岐よりも多くの分岐命令がある場合には、疎分岐キャッシュ420内にストアされている密分岐表示636内のビットベクタが当該表示をもたらすことができる。
有効な疎分岐エントリがない場合(条件ブロック810)には、iキャッシュ410のライン内にいずれの分岐命令もないか、あるいはコード実行の間に分岐命令が未だ検出されていないことになる。この場合には、フロー制御はブロック802へ戻る。他の場合には、最初の疎分岐エントリが照合される。疎分岐エントリは順次埋められ且つ少なくとも1つのエントリは有効であるから、最初の疎分岐エントリは有効である必要がある。疎分岐エントリは並行して照合されてよく、例えば各疎分岐エントリの状態フィールド640内の有効ビットがセットされているか否かが検出される。ここでフローを逐次的に説明する。その時点での疎分岐エントリは、その時点でのエントリが有益な分岐予測情報を有しているかどうか(条件ブロック812)を決定するために照合されるその対応する有効ビットを有している。有益な情報がストアされていると有効ビットが表示している場合には、ブロック814において、疎分岐キャッシュ420は、エンドポインタフィールド642、分岐予測情報フィールド644、及び分岐目標アドレスフィールド646内にストアされている対応する情報をプロセッサに伝達してよい。次いで、次の疎分岐エントリがその有効ビットを照合される。
予め定められた疎な数の分岐エントリの全てが未だ照合されていない場合(条件ブロック816)には、方法800のための制御フローはブロック812へ戻る。他の場合には、密分岐表示フィールド636内の密ビットベクタがセットビットに対して照合されてよい(条件ブロック818)。このベクタ内に1つ以上のビットがセットされている場合には、ブロック820において、密分岐キャッシュ430は、iキャッシュ410及び疎分岐キャッシュ420にアクセスするために用いられたよりもっと下位のビットでプログラムカウンタ値の一部分によって索引付けられてよい。このことは、密分岐表示フィールド636内の各ビットが例えば64バイトのiキャッシュラインより小さい8バイトのような領域に対応するであろうから、より細かい精度によってアドレス可能な密キャッシュに起因し得る。
密分岐キャッシュ430がセットアソシアティブである場合には、アドレスのタグフィールド及び密分岐キャッシュのフィールド734内の有効ビットは、プロセッサへ送るべき対応するキャッシュラインを決定するために用いられてよい。このキャッシュラインは、エンドポインタフィールド740、分岐予測情報フィールド742、及び分岐目標アドレスフィールド744内にストアされている情報を備えていてよい。方法800の制御フローは次いでブロック802へ戻る。同一クロック周期内で並行して予測される分岐命令の数は、分岐予測ユニット500内の回路に依存するであろう。例えば1つの実施形態では、疎分岐キャッシュ420は、1クロック周期において2つの疎分岐命令に対する分岐予測情報を分岐予測ユニット500へ送ることが可能であろう。密分岐キャッシュ430からの分岐予測情報は、後続のクロック周期において送られてよい。クロック周期毎に分岐予測情報によって示される密分岐の数、及びクロック周期毎に予測される密分岐の数は、選択される実施形態に依存する。
上述の実施形態はかなり詳細に説明されてきたが、上述の開示を完全に理解するならば、多くの変形及び修正が当業者にとって明らかであろう。後述の特許請求の範囲は、そのような全ての変形及び修正を包含するものとして解釈されることが意図されている。

Claims (20)

  1. 命令キャッシュと、前記命令キャッシュのエントリに各々が対応する第1の複数のエントリを備えている第1の疎キャッシュとを備えたマイクロプロセッサであって、
    前記第1の疎キャッシュの各エントリは、
    第1の数より多くない分岐命令に対して分岐予測情報をストアし、
    前記命令キャッシュの対応するエントリが前記第1の数より多い分岐命令を含むか否かの表示をストアするように構成されているマイクロプロセッサ。
  2. 第2の複数のエントリを備えている密キャッシュを更に備え、
    前記第2の複数のエントリの各々は、前記第1の数の分岐命令内に含まれない追加的な分岐命令に対して分岐予測情報をストアするように構成されている、請求項1に記載のマイクロプロセッサ。
  3. 前記第1の疎キャッシュの全ての退去させられたエントリをストアするように構成されている第2の疎キャッシュを更に備えた、請求項2に記載のマイクロプロセッサ。
  4. 前記命令キャッシュ内のエントリ及び前記第1の疎キャッシュ内の対応するエントリは同一のアドレスによって選択される、請求項3に記載のマイクロプロセッサ。
  5. 前記疎キャッシュのエントリ内の前記ストアされた表示は、前記密キャッシュ内のエントリを選択するために利用されるビットベクタを備えており、各ビットは前記命令キャッシュのエントリ内の領域に対応している、請求項4に記載のマイクロプロセッサ。
  6. 前記分岐予測情報は前記命令キャッシュのエントリ内の対応する分岐命令のロケーションを表示するエンドポインタを備えている、請求項5に記載のマイクロプロセッサ。
  7. 前記分岐予測情報は分岐命令の種類及び分岐予測ユニットによって利用されるバイアス重み値を表示している、請求項6に記載のマイクロプロセッサ。
  8. 前記分岐予測情報は分岐予測ユニットによって利用される分岐目標アドレスを備えている、請求項7に記載のマイクロプロセッサ。
  9. 分岐予測を改善するための方法であって、
    命令キャッシュのエントリ内の第1の数より多くない分岐命令に対して疎キャッシュのエントリ内に分岐予測情報をストアすることと、
    前記命令キャッシュの対応するエントリが前記第1の数より多い分岐命令を含むか否かの表示を前記疎キャッシュの前記エントリ内にストアすることとを備えた方法。
  10. 前記第1の数の分岐命令内に含まれない追加的な分岐命令に対する分岐予測情報を密キャッシュ内にストアすることを更に備えた、請求項9に記載の方法。
  11. 前記第1の疎キャッシュの退去させられたエントリを第2の疎キャッシュ内にストアすることを更に備えた、請求項10に記載の方法。
  12. 前記命令キャッシュ内のエントリ及び前記第1の疎キャッシュ内の対応するエントリを同一のアドレスによって選択することを更に備えた、請求項11に記載の方法。
  13. 前記疎キャッシュのエントリ内の前記ストアされた表示は、前記密キャッシュ内のエントリを選択するために利用されるビットベクタを備えており、各ビットは前記命令キャッシュのエントリ内の領域に対応している、請求項12に記載の方法。
  14. 前記分岐予測情報内に含まれる対応するエンドポインタによって前記命令キャッシュのエントリ内の分岐命令のロケーションを表示することを更に備えた、請求項13に記載の方法。
  15. 分岐命令の種類及び分岐予測ユニットによって利用されるバイアス重み値を前記分岐予測情報内に表示することを更に備えた、請求項14に記載の方法。
  16. 前記分岐予測情報は分岐予測ユニットによって利用される分岐目標アドレスを備えている、請求項15に記載の方法。
  17. 命令キャッシュのエントリに各々が対応する第1の複数のエントリを備えている第1の疎キャッシュを備えたハイブリッド分岐予測デバイスであって、
    前記第1の疎キャッシュの各エントリは、
    第1の数より多くない分岐命令に対して分岐予測情報をストアし、
    前記命令キャッシュの対応するエントリが前記第1の数より多い分岐命令を含むか否かの表示をストアするように構成されているハイブリッド分岐予測デバイス。
  18. 第2の複数のエントリを備えている密キャッシュを更に備え、
    前記エントリの各々は、前記第1の数の分岐命令内に含まれない追加的な分岐命令に対して分岐予測情報をストアするように構成されている、請求項17に記載のハイブリッド分岐予測デバイス。
  19. 前記第1の疎キャッシュの全ての退去させられたエントリをストアするように構成されている第2の疎キャッシュを更に備えた、請求項18に記載のハイブリッド分岐予測デバイス。
  20. 前記疎キャッシュのエントリ内の前記ストアされた表示は、前記密キャッシュ内のエントリを選択するために利用されるビットベクタを備えており、各ビットは前記命令キャッシュのエントリ内の領域に対応している、請求項19に記載のハイブリッド分岐予測デバイス。
JP2011526253A 2008-09-05 2009-09-04 疎及び密予測を伴うハイブリッド分岐予測デバイス Active JP5255701B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/205,429 2008-09-05
US12/205,429 US8181005B2 (en) 2008-09-05 2008-09-05 Hybrid branch prediction device with sparse and dense prediction caches
PCT/US2009/056136 WO2010028316A1 (en) 2008-09-05 2009-09-04 Hybrid branch prediction device with sparse and dense prediction caches

Publications (3)

Publication Number Publication Date
JP2012502367A true JP2012502367A (ja) 2012-01-26
JP2012502367A5 JP2012502367A5 (ja) 2012-10-18
JP5255701B2 JP5255701B2 (ja) 2013-08-07

Family

ID=41217601

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011526253A Active JP5255701B2 (ja) 2008-09-05 2009-09-04 疎及び密予測を伴うハイブリッド分岐予測デバイス

Country Status (6)

Country Link
US (1) US8181005B2 (ja)
EP (1) EP2347332B1 (ja)
JP (1) JP5255701B2 (ja)
KR (1) KR101493019B1 (ja)
CN (1) CN102160033B (ja)
WO (1) WO2010028316A1 (ja)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8489866B2 (en) 2010-06-30 2013-07-16 International Business Machines Corporation Branch trace history compression
US8635408B2 (en) * 2011-01-04 2014-01-21 International Business Machines Corporation Controlling power of a cache based on predicting the instruction cache way for high power applications
US9235419B2 (en) * 2012-06-11 2016-01-12 International Business Machines Corporation Branch target buffer preload table
US8972665B2 (en) 2012-06-15 2015-03-03 International Business Machines Corporation Cache set selective power up
US20140115257A1 (en) * 2012-10-22 2014-04-24 Advanced Micro Devices, Inc. Prefetching using branch information from an instruction cache
US9489203B2 (en) 2012-12-11 2016-11-08 Advanced Micro Devices, Inc. Pre-fetching instructions using predicted branch target addresses
US9489204B2 (en) 2013-03-15 2016-11-08 Qualcomm Incorporated Method and apparatus for precalculating a direct branch partial target address during a misprediction correction process
US9195606B2 (en) 2013-03-15 2015-11-24 Intel Corporation Dead block predictors for cooperative execution in the last level cache
US9639368B2 (en) * 2014-06-13 2017-05-02 International Business Machines Corporation Branch prediction based on correlating events
GB2534522B (en) 2014-07-25 2016-12-28 Imagination Tech Ltd Conditional branch prediction using a long history
US9940236B2 (en) * 2014-12-17 2018-04-10 Intel Corporation Pointer chasing across distributed memory
US10936713B2 (en) 2015-12-17 2021-03-02 The Charles Stark Draper Laboratory, Inc. Techniques for metadata processing
US10235176B2 (en) 2015-12-17 2019-03-19 The Charles Stark Draper Laboratory, Inc. Techniques for metadata processing
US10474462B2 (en) * 2016-02-29 2019-11-12 Qualcomm Incorporated Dynamic pipeline throttling using confidence-based weighting of in-flight branch instructions
US10175982B1 (en) * 2016-06-16 2019-01-08 Apple Inc. Storing taken branch information
US10831678B2 (en) * 2017-11-21 2020-11-10 Arm Limited Multi-tier cache placement mechanism
EP3746921B1 (en) 2018-02-02 2023-12-27 Dover Microsystems, Inc. Systems and methods for policy linking and/or loading for secure initialization
SG11202007272QA (en) 2018-02-02 2020-08-28 Charles Stark Draper Laboratory Inc Systems and methods for policy execution processing
CN110462587A (zh) * 2018-03-29 2019-11-15 深圳市大疆创新科技有限公司 分支预测的方法与装置
US11797398B2 (en) 2018-04-30 2023-10-24 Dover Microsystems, Inc. Systems and methods for checking safety properties
WO2020097179A1 (en) 2018-11-06 2020-05-14 Dover Microsystems, Inc. Systems and methods for stalling host processor
US11841956B2 (en) 2018-12-18 2023-12-12 Dover Microsystems, Inc. Systems and methods for data lifecycle protection
US11275692B2 (en) 2019-05-24 2022-03-15 Texas Instruments Incorporated Methods and apparatus for multi-banked victim cache with dual datapath
CN112559049A (zh) 2019-09-25 2021-03-26 阿里巴巴集团控股有限公司 用于指令高速缓存的路预测方法、访问控制单元以及指令处理装置
US11726783B2 (en) * 2020-04-23 2023-08-15 Advanced Micro Devices, Inc. Filtering micro-operations for a micro-operation cache in a processor
US11520701B2 (en) * 2021-04-02 2022-12-06 Tenstorrent Inc. Data structure optimized dedicated memory caches
US11630670B2 (en) 2021-07-21 2023-04-18 Apple Inc. Multi-table signature prefetch
CN113504943B (zh) * 2021-09-03 2021-12-14 广东省新一代通信与网络创新研究院 用于降低资源使用的混合分支预测装置实现方法及系统
WO2023237195A1 (en) * 2022-06-09 2023-12-14 Huawei Technologies Co., Ltd. Sparse correlations in dynamic branch prediction

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1055276A (ja) * 1996-03-25 1998-02-24 Sun Microsyst Inc 多重レベル分岐予測方法および装置
US5752259A (en) * 1996-03-26 1998-05-12 Advanced Micro Devices, Inc. Instruction cache configured to provide instructions to a microprocessor having a clock cycle time less than a cache access time of said instruction cache
JP2001522082A (ja) * 1997-10-30 2001-11-13 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド より小さな数の分岐予測および代替ターゲットを用いて近似的により大きな数の分岐予測をすること
US6425075B1 (en) * 1990-02-26 2002-07-23 Advanced Micro Devices, Inc. Branch prediction device with two levels of branch prediction cache
JP2003509733A (ja) * 1997-10-23 2003-03-11 インテル・コーポレーション トレースに基づく命令キャッシング
US20040148497A1 (en) * 2003-01-27 2004-07-29 Ali Vahidsafa Method and apparatus for determining an early reifetch address of a mispredicted conditional branch instruction in an out of order multi-issue processor
JP2005500616A (ja) * 2001-07-24 2005-01-06 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 2レベルの分岐予測キャッシュによる分岐予測
JP2007207246A (ja) * 2006-02-03 2007-08-16 Internatl Business Mach Corp <Ibm> 命令ラインのための自己プリフェッチl2キャッシュ機構

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5136697A (en) * 1989-06-06 1992-08-04 Advanced Micro Devices, Inc. System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache
US5414822A (en) * 1991-04-05 1995-05-09 Kabushiki Kaisha Toshiba Method and apparatus for branch prediction using branch prediction table with improved branch prediction effectiveness
US5574871A (en) 1994-01-04 1996-11-12 Intel Corporation Method and apparatus for implementing a set-associative branch target buffer
US5954816A (en) 1996-11-19 1999-09-21 Advanced Micro Devices, Inc. Branch selector prediction
US6108774A (en) 1997-12-19 2000-08-22 Advanced Micro Devices, Inc. Branch prediction with added selector bits to increase branch prediction capacity and flexibility with minimal added bits
WO2002084509A1 (en) * 2001-02-24 2002-10-24 International Business Machines Corporation A novel massively parrallel supercomputer
US6804799B2 (en) 2001-06-26 2004-10-12 Advanced Micro Devices, Inc. Using type bits to track storage of ECC and predecode bits in a level two cache
US20050228977A1 (en) * 2004-04-09 2005-10-13 Sun Microsystems,Inc. Branch prediction mechanism using multiple hash functions
US20070266228A1 (en) 2006-05-10 2007-11-15 Smith Rodney W Block-based branch target address cache

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6425075B1 (en) * 1990-02-26 2002-07-23 Advanced Micro Devices, Inc. Branch prediction device with two levels of branch prediction cache
JPH1055276A (ja) * 1996-03-25 1998-02-24 Sun Microsyst Inc 多重レベル分岐予測方法および装置
US5752259A (en) * 1996-03-26 1998-05-12 Advanced Micro Devices, Inc. Instruction cache configured to provide instructions to a microprocessor having a clock cycle time less than a cache access time of said instruction cache
JP2003509733A (ja) * 1997-10-23 2003-03-11 インテル・コーポレーション トレースに基づく命令キャッシング
JP2001522082A (ja) * 1997-10-30 2001-11-13 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド より小さな数の分岐予測および代替ターゲットを用いて近似的により大きな数の分岐予測をすること
JP2005500616A (ja) * 2001-07-24 2005-01-06 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 2レベルの分岐予測キャッシュによる分岐予測
US20040148497A1 (en) * 2003-01-27 2004-07-29 Ali Vahidsafa Method and apparatus for determining an early reifetch address of a mispredicted conditional branch instruction in an out of order multi-issue processor
JP2007207246A (ja) * 2006-02-03 2007-08-16 Internatl Business Mach Corp <Ibm> 命令ラインのための自己プリフェッチl2キャッシュ機構

Also Published As

Publication number Publication date
JP5255701B2 (ja) 2013-08-07
CN102160033B (zh) 2014-03-19
EP2347332B1 (en) 2012-11-07
KR101493019B1 (ko) 2015-02-12
US20100064123A1 (en) 2010-03-11
KR20110081963A (ko) 2011-07-15
EP2347332A1 (en) 2011-07-27
WO2010028316A1 (en) 2010-03-11
CN102160033A (zh) 2011-08-17
US8181005B2 (en) 2012-05-15

Similar Documents

Publication Publication Date Title
JP5255701B2 (ja) 疎及び密予測を伴うハイブリッド分岐予測デバイス
US7376817B2 (en) Partial load/store forward prediction
JP5894120B2 (ja) ゼロサイクルロード
US5887152A (en) Load/store unit with multiple oldest outstanding instruction pointers for completing store and load/store miss instructions
US7890702B2 (en) Prefetch instruction extensions
EP2035920B1 (en) Local and global branch prediction information storage
US9213551B2 (en) Return address prediction in multithreaded processors
US20110093658A1 (en) Classifying and segregating branch targets
US9367471B2 (en) Fetch width predictor
US20110078425A1 (en) Branch prediction mechanism for predicting indirect branch targets
US20070288733A1 (en) Early Conditional Branch Resolution
US10067875B2 (en) Processor with instruction cache that performs zero clock retires
US8171240B1 (en) Misalignment predictor
US11099850B2 (en) Branch prediction circuitry comprising a return address prediction structure and a branch target buffer structure
US8301871B2 (en) Predicated issue for conditional branch instructions
US20130138888A1 (en) Storing a target address of a control transfer instruction in an instruction field
US20070288732A1 (en) Hybrid Branch Prediction Scheme
US20070288731A1 (en) Dual Path Issue for Conditional Branch Instructions
US5822574A (en) Functional unit with a pointer for mispredicted resolution, and a superscalar microprocessor employing the same
US20070288734A1 (en) Double-Width Instruction Queue for Instruction Execution

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120903

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120903

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121205

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130304

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130419

R150 Certificate of patent or registration of utility model

Ref document number: 5255701

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160426

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250