JP5520779B2 - 分岐誤予測バッファを用いるためのシステム及び方法 - Google Patents

分岐誤予測バッファを用いるためのシステム及び方法 Download PDF

Info

Publication number
JP5520779B2
JP5520779B2 JP2010246340A JP2010246340A JP5520779B2 JP 5520779 B2 JP5520779 B2 JP 5520779B2 JP 2010246340 A JP2010246340 A JP 2010246340A JP 2010246340 A JP2010246340 A JP 2010246340A JP 5520779 B2 JP5520779 B2 JP 5520779B2
Authority
JP
Japan
Prior art keywords
branch
instruction
instructions
prediction
bmb
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.)
Active
Application number
JP2010246340A
Other languages
English (en)
Other versions
JP2011100454A (ja
JP2011100454A5 (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.)
Ceva DSP Ltd
Original Assignee
Ceva DSP Ltd
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 Ceva DSP Ltd filed Critical Ceva DSP Ltd
Publication of JP2011100454A publication Critical patent/JP2011100454A/ja
Publication of JP2011100454A5 publication Critical patent/JP2011100454A5/ja
Application granted granted Critical
Publication of JP5520779B2 publication Critical patent/JP5520779B2/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
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • 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/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • G06F9/381Loop buffering
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling

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)
  • Executing Machine-Instructions (AREA)

Description

本発明の実施形態は、分岐命令の結果を予測するための方法及びシステムに関する。特に、本発明の実施形態は、後続の分岐誤予測中に用いるために、分岐誤予測から命令を記憶する処理に関する。
プログラムには分岐命令が含まれるが、この命令では、プロセスは、分岐条件に基づき、複数の可能な進路の内の一つに進む。例えば、一連の命令1、2、3、4、5において、5が分岐命令である場合、命令5は、プロセスに対して、命令6、7、8、・・・に順次進むように又は先に飛び越えて命令100、101、102、・・・に至るように命令する。
時間遅延を回避するために、命令は、通常、プロセッサパイプラインで必要とされる時に使用準備が整っているように、プログラムメモリから早めにフェッチされる。しかしながら、分岐では、次の命令は、分岐命令が実行されるまで不明なことがある。従って、後続の命令は、事前にフェッチできず、これによって、プロセスパイプラインに時間遅延が生じる。
そのような時間遅延を低減するために、分岐予測器を用いて、条件分岐の結果を予測する。分岐において予測される命令は、先行してプログラムメモリから検索され、アクセスを簡単にするために、一時的にプログラムキャッシュに記憶される。分岐予測器は、分岐結果を判断するために分岐命令自体だけを用いて静的であってもよいし、或いは分岐結果を判断するために分岐の履歴の統計値も用いて動的であってもよい。
米国特許第3940741号明細書 米国特許第4725947号明細書
しかしながら、分岐予測器は、幾つかのアルゴリズムの場合、性能が悪いことがあり、例えば、約50%の分岐で正確に予測し、約50%の分岐で正しくない予測を行う。更に、幾つかのアルゴリズムは、動的な分岐予測からは、例えば、現在の分岐判断と先行する分岐判断との間の相関関係がない場合、効果が得られない。
分岐予測が正しい場合、予測された命令は、直ちにプログラムキャッシュから検索される。分岐予測が正しくない場合、検索された命令は、廃棄され、プロセッサは、再度、追加の演算サイクルを用いて、プログラムメモリから正しい命令を検索しなければならない。分岐誤予測後、プログラムメモリから正しい命令を検索するために用いられる追加の演算サイクルは、分岐誤予測ペナルティと称することがある。
本発明の実施形態に基づくシステムの概略説明図。 本発明の実施形態に基づく分岐命令によって開始されるプロセッサ動作を示す表。 本発明の実施形態に基づく分岐命令によって開始されるプロセッサ動作を示す表。 本発明の実施形態に基づく分岐命令によって開始されるプロセッサ動作を示す表。 本発明の実施形態に基づく分岐命令によって開始されるプロセッサ動作を示す表。 本発明の実施形態に基づく分岐命令によって開始されるプロセッサ動作を示す表。 本発明の実施形態に基づく分岐命令によって開始されるプロセッサ動作を示す表。 本発明の実施形態に基づく方法のフローチャート。
本発明と見なされる主題については、詳細に指摘し、本明細書の末尾部分において明瞭に権利主張を行っている。しかしながら、本発明は、その目的、特徴、及び利点と共に構成及び動作方法の双方に関して、添付図面と共に解釈する際、以下の詳細な説明を参照すると最も良く理解することができる。本発明の特定の実施形態について、上記図面を参照して述べる。
図を簡単明瞭にするために、図示した要素は、必ずしも縮尺通りに描かれているとは限らないことを認識されたい。例えば、幾つかの要素の寸法は、理解しやすいように、他の要素に対して誇張していることがある。更に、適切であると思われる場合、参照数字は、図中で繰り返し用いて、対応する又は類似の要素を示すことがある。
以下の説明において、本発明の様々な態様について述べる。説明のために、本発明が充分に理解されるように特定の構成及び細目について記載する。しかしながら、本明細書に提示された個々の詳細が無くても本発明を実施可能であることも当業者には明らかである。更に、本発明を不明瞭にしないために、公知の特徴は、省略又は簡略化することがある。
特に具体的に言及しない限り、以下の議論から明らかなように、明細書全体において、“処理”、“演算”、“計算”、“判断”等の用語を利用する議論は、演算システムのレジスタやメモリ内の電子的量等の物理量として表されるデータを操作したり、演算システムのメモリ、レジスタ又は他のそのような情報記憶装置、伝送又は表示装置内において、物理量として同様に表される他のデータに変換したりするコンピュータ又は演算システム又は同様な電子演算装置のアクションやプロセスを指すことを認識されたい。
分岐命令は、プロセスが、その命令において、複数の可能な進路の内の一つに進む命令を意味する。分岐命令は、条件付きであってもよいし、或いは無条件であってもよい。無条件分岐命令は、結果が予め決定され、後続の命令が、分岐命令の処理前に分かっているものである。例えば、無条件分岐命令は、所定の回数、命令ループを繰り返し、そして、後続の命令にジャンプするものであってもよい。条件分岐命令は、結果が条件に依存するものである。条件は、通常、後続の命令がフェッチされる前には、未知である。例えば、ある状況では、条件は、分岐命令が復号された時にのみ分かることがある。
プログラム中で分岐命令に遭遇すると、プロセッサは、分岐命令に従うと予測される一以上の命令をプログラムメモリから検索する。プログラムメモリから命令を検索するために、プロセッサは、命令をフェッチし、プログラムキャッシュにそれらを記憶し、命令を待ち行列に入れて、ディスパッチする。そして、命令を読み出す場合、プロセッサは、タグアレイにアクセスし、タグ比較を実施し、プログラムキャッシュにアクセスする。この一連の動作は、通常、広範囲にわたり、電力を消費する。従来のシステムでは、分岐予測が正しくなく、誤った予測命令がプログラムメモリから検索された場合、これらの命令は廃棄され、プロセッサは、プログラムメモリにアクセスして、広範囲にわたる処理を繰り返して、正しい命令を検索する。分岐予測が正しくない度に、プロセッサは、正しい命令をプログラムメモリからフェッチするために、大幅な時間遅延及び演算ペナルティ、即ち、誤予測ペナルティを被る。
本発明の一実施形態において、条件分岐命令を実行するためのシステム及び方法を提供する。分岐予測器が、一以上の命令を予測する。予測される命令は、条件分岐命令に依存する。分岐誤予測バッファは、分岐誤予測中に、分岐予測器によって予測されなかった正しい命令を記憶する。
本発明の一実施形態において、条件分岐命令を実行するためのシステム及び方法を提供する。一以上の正しい命令は、分岐誤予測時、分岐誤予測バッファから検索する。分岐誤予測バッファは、前回の分岐誤予測時に予測されなかった前回用いた命令を記憶する。
本発明の一実施形態において、分岐誤予測バッファに命令を記憶するためのシステム及び方法を提供する。条件分岐命令に依存する一以上の予測された命令は、プログラムメモリから検索する。プロセッサは、一以上の予測された命令が正しくないと判断する。一以上の正しい命令は、プログラムメモリから検索する。一以上の正しい命令は、分岐誤予測バッファに記憶する。
本発明の実施形態には、誤予測された命令を記憶するローカルキャッシュ、例えば、分岐誤予測バッファ(BMB:branch mis-prediction buffer)を含む。誤予測命令は、一旦分岐条件が分かると、分岐命令の後に続く正しい命令であると判断される命令であるが、分岐予測器によって予測されなかった命令を意味する。誤予測時、正しい命令がBMBに記憶される場合、命令は、プログラムメモリからではなく、BMBから迅速に検索して、誤予測ペナルティがゼロになる。しかしながら、正しい命令がBMBに記憶されない場合、正しい命令は、プログラムメモリから検索され、誤予測ペナルティを招く。しかしながら、本発明の実施形態によれば、誤予測命令を廃棄し、それらをフェッチするために用いられた計算労力を無駄にする代わりに、誤予測命令は、BMBに記憶して、誤予測になり得る後続の分岐時に用いる。
図1を参照すると、この図は、本発明の実施形態によるシステムの概略説明図である。本システムには、プロセッサ1を有する装置100と、データメモリユニット2と、プログラムメモリユニット3と、プログラムキャッシュ10とを含む。
装置100は、コンピュータ装置、セル方式の装置、又は他の任意のデジタル装置、例えば、携帯電話、携帯情報端末(PDA)、ビデオゲーム操作卓等を含む。装置100には、コンピュータプログラムを動作させるために一連の命令を実行可能な任意の装置を含む。
プロセッサ1には、中央処理装置(CPU)、デジタル信号プロセッサ(DSP)、マイクロプロセッサ、コントローラ、チップ、マイクロチップ、フィールド・プログラマブル・ゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)又は他の任意の集積回路(IC)、又は他の任意の適切な多目的又は特定プロセッサ又はコントローラを含む。
プロセッサ1は、データバス4を介してデータメモリユニット2に接続され、プログラムメモリバス5を介してプログラムメモリユニット3に接続される。
プログラムメモリユニット3は、通常、コンピュータプログラムを動作させるための命令及び規則一式を記憶し、一方、データメモリユニット2は、通常、予め生成された(即ち、静的な)データやスクラッチパッド(即ち、動的な)データ等の、プログラム命令を動作させつつ生成されたデータを記憶する。しかしながら、メモリ又は複数のメモリに命令やデータを記憶するための他の構成を用いてもよい。
プログラムキャッシュ10は、命令がプログラム制御ユニット8によって用いられる場合に命令へのアクセスが更に容易になるように、プログラムメモリユニット3から検索されたプログラム命令に一時的な記憶場所を提供する。プログラムメモリユニット3は、長期メモリユニットであってもよく、一方、プログラムキャッシュ10は、短期メモリユニットであってもよい。データメモリユニット2、プログラムメモリユニット3、及びプログラムキャッシュ10としては、例えば、ランダムアクセスメモリ(RAM)、ダイナミックRAM(DRAM)、フラッシュメモリ、キャッシュメモリ、揮発性メモリ、不揮発性メモリ又は他の適切なメモリユニット又は記憶ユニットが挙げられる。データメモリユニット2、プログラムメモリユニット3、及びプログラムキャッシュ10は、別個の又は一体化したメモリユニットとして実現する。データメモリユニット2、プログラムキャッシュ10及びプログラムメモリユニット3の少なくとも一つは、一体化したり(オンチップ)、別個(即ち、オフチップ)にしたりしてもよい。多重レベルメモリ又はメモリ階層構造が存在する一実施形態では、プログラムメモリユニット3は、オフチップであってもよく、プログラムキャッシュ10及びデータメモリユニット2の少なくとも一つは、オンチップであってもよく、例えば、L−1キャッシュ(例えば、プロセッサクロックレートとは異なるレートで動作する)又はL−2キャッシュ(例えば、L−1キャッシュより比較的一体化が進んでおり、通常、プロセッサクロックレートで動作する)であってもよい。他の又は追加のメモリアーキテクチャも用いる。
プロセッサ1には、プログラム制御ユニット8を含む。プログラム制御ユニット8は、プログラムメモリユニット3から命令を要求し、検索し、かつディスパッチでき、さらに一般的に、プログラム・パイプライン・フローを担う。プログラム制御ユニット8には、データメモリバス4に接続されたデータメモリコントローラ(図示せず)と、プログラムメモリバス5に接続されたプログラムメモリコントローラ(図示せず)とを、それぞれデータメモリユニット2及びプログラムメモリユニット3からデータを検索するために含む。
プログラム制御ユニット8には、フェッチユニット12、割込みユニット13、及び分岐メカニズム14を含む。フェッチユニット12は、プログラムメモリユニット3からプログラム命令を検索又はフェッチして、プログラム制御ユニット8によって用いるために要求されるまで、命令をプログラムキャッシュ10に保存する。フェッチユニット12は、命令をディスパッチする前に、ローカル待ち行列に命令をフェッチするために用いる。分岐メカニズム14は、分岐命令を検出し、分岐命令の結果を予測し、かつ分岐命令の予測された結果に基づき、フェッチユニット12を介してプログラムメモリユニット3から後続の命令を要求する。割込みユニット13は、現プロセスの割込みを行い、例えば、他の高優先度の処理を開始する。
プロセッサ1には、復号ユニット6、ロード/ストアユニット7、一以上のレジスタファイル9、及び実行ユニット11を含む。一旦、命令がプログラム制御ユニット8によってディスパッチされると、復号ユニット6は、命令を復号する。プロセッサ1は、レジスタファイル9を用いてタグを実現して、例えば、同じ演算サイクルにおいて、要求に応じて、復号された命令に効率的にアクセスする。実行ユニット11は、命令を実行する。ロード/ストアユニット7は、データメモリユニット2との間でロード/ストア動作を実施する。
プロセッサ1は、例えば、各命令について、以下の一連のパイプラインステージを実行する。
・IF1−プログラムメモリアドレス(プログラム制御ユニット8によって動作)
・IF2−プログラムメモリをフェッチ(フェッチユニット12によって動作)
・D1−命令ディスパッチ(プログラム制御ユニット8によって動作)
・D2−命令復号(復号ユニット6によって動作)
・D3乃至D4−レジスタファイル読み出し(レジスタファイル9を用いる)
・E1乃至E4−実行、データメモリアクセス、及びレジスタファイル書き戻し(実行ユニット11、ロード/ストアユニット7、及びレジスタファイル9によって動作)
他の又は追加のパイプラインステージ及び動作装置構成要素を用いてもよい。
一連の命令を含むプロセスでは、将来処理される命令は、事前に分かっており、フェッチユニット12は、プロセッサが命令をディスパッチする準備が整う前に、各命令がフェッチされるように、先制して命令を検索する。フェッチされた命令は、一時的にプログラムキャッシュメモリ10に記憶されるたりプログラムメモリ3よりアクセスがかなり速いローカル待ち行列に記憶されるたりする。
しかしながら、条件分岐命令の後に続く命令は、命令がフェッチされようとする時には、まだ分かっていない分岐条件に依存する。例えば、分岐命令は、分岐条件の結果に応じて、任意の多数の異なる命令又は処理経路に進む。
分岐メカニズム14は、命令が分岐命令であるかどうか、例えば、命令の処理の復号ステージ(D2)において識別する。命令が分岐命令である場合、多数の可能な後続の命令の内の正しいものが、命令が検索されようとしている時に、既知でないならば、分岐メカニズム14は、どの命令が分岐命令に続く可能性が最も高いか予測する。分岐対象バッファ(BTB:branch target buffer)16は、予測を行うために用いられるデータを記憶する。BTB16は、バッファ又は一時的メモリユニットであってもよく、これは、プログラムキャッシュ10とは別個であっても、一体化されても、又は、その一部であってもよい。
予測された分岐命令が、実際の分岐命令と合致する場合、予測された命令を用いてもよく、分岐誤予測ペナルティはゼロである。
しかしながら、予測された分岐命令が実際の分岐命令と合致しない場合、実際の分岐命令は、プログラムメモリ3からフェッチする。従って、分岐メカニズム14が分岐結果を誤予測する度に、プロセスは、プログラムメモリ3から正しい命令をフェッチするという、例えば、3サイクル(IF1乃至D1)の時間遅延及び演算ペナルティを被る。この時間遅延又はサイクル数は、異なるプロセッサ1のパイプラインに対して変わる。
本発明の実施形態によれば、一旦、正しい命令が、プログラムメモリ3から検索され、命令を廃棄する代わりに、それらをフェッチために用いられた計算労力を無駄にする代わりに用いられると、正しい分岐命令は、誤予測されたが、書き込まれたり、保存されたり、後で用いるために分岐誤予測バッファ(BMB)17に記憶されたりする。BMB17は、予測されなかった正しい分岐命令を蓄積する。プログラムは、初期的にプログラムメモリ3からこれらの命令を検索する一回限りの誤予測ペナルティを招くが、後続の誤予測時に用いるために、それらを保存することによって、同じ命令を検索するための誤予測ペナルティは、その後、回避される。
一連のプログラム命令の動作時、第1の状況では、分岐メカニズム14は、分岐命令の後に続く正しい命令を予測し、正しい後続の命令は、プログラムメモリ3から既に検索されている。そして、正しい後続の命令を用いる。この場合、誤予測はなく、誤予測ペナルティはゼロである。
第2の状況では、分岐メカニズム14が誤予測を行い、分岐命令の後に続く誤った命令を予測する。一旦、分岐命令の後に続く命令が分かると、プロセッサ1は、BMB17からの命令の検索を試行する。プロセッサ1は、プログラム制御ユニット8がプログラムメモリ・サブシステムから新しい命令をフェッチするのと同時に、BMB17が誤予測命令を含むかどうかチェックする。分岐命令が分かった後でのみ、プロセッサ1は、予測された命令と誤予測命令との間の選択を行う。正しい命令が、前回のプログラム分岐において、誤予測命令であった場合、命令は、既にBMB17に記憶されているはずである。従って、プログラムメモリ3から正しい命令を検索する代わりに、プロセッサ1は、BMB17から正しい命令を検索する。従って、分岐誤予測であっても、正しい分岐命令が前回の正しい誤予測命令であった場合、プログラムメモリ3から命令を検索するための誤予測ペナルティは、ゼロである。誤予測ペナルティが、正しい予測についてはゼロであり、誤予測についてはゼロ以外(例えば、3演算サイクル)である他の方法とは対照的に、本発明の実施形態によれば、誤予測ペナルティは、正しい分岐予測及び正しくない分岐予測双方についてゼロである。
BMB17は、ディスパッチされた命令を記憶する(D1パイプラインステージにおいて)。他の選択肢として、BMB17の命令は、パイプラインプロセスの他のステージにおいて記憶する(例えば、IF2又はD2)。BMB17は、通常、プログラムキャッシュ10より小さいことから、BMB17は、プログラムキャッシュ10よりも更にアクセスが容易である。BMB17は、分岐メカニズム14と物理的に一体化する。
図2−4を参照すると、これらは、本発明の実施形態による分岐命令によって開始されるプロセッサ動作を示す表である。
図2−4において、表中の各行は、単一の命令のプロセッサパイプラインステージを示す。(列1に列挙された)命令は、処理する順番に、即ち、命令が最初にプロセッサパイプラインに(動作IF1において)投入する順番に、一連の行に順序よく並べられる。一連の各列は、一連の各演算サイクルにおいて生じる命令で実行される動作を示す。即ち、一旦、各行の命令が最初にプロセッサパイプラインに入ると、一連の各列において、プロセッサは、命令により一連の動作、例えば、プログラムメモリアドレス指定(IF1)、フェッチ処理(IF2)、ディスパッチ処理(D1)、復号処理(D2)、レジスタファイル読み出し(D3乃至D4)、実行、データメモリアクセス、及びレジスタファイル書き戻し(E1乃至E4)を実行する。他の又は追加の動作を用いてもよい。
図2において、分岐予測器は、分岐命令BranchA、Bが、正しい命令Bの代わりに、命令Aに分岐すると誤予測する。即ち、条件付き命令BranchA、Bの分岐条件は、その条件に対する静的な予測と合致しない。しかしながら、図において、誤予測された正しい分岐命令Bは、BMBに記憶されるため、分岐誤予測に対するペナルティが存在しない。
表中の右上のセル(行1、列1)は、“BranchA、B”と表記された命令を示す。命令BranchA、Bは、プログラムにおける一連の命令中の命令であってもよい。命令BranchA、Bは、第1アドレスに記憶してもよく、例えば、任意に101として示してもよい。命令BranchA、Bは、分岐命令であってもよく、例えば、命令A又は命令Bのいずれかの次に進む命令を提供するが、このことは、その命令が復号されるまで未知である(動作D2において)。BranchA、Bに続く次の命令(例えば、三つの遅延スロットの後)は、予測された命令と誤予測命令とを比較することによって判断でき、通常、BranchA、BがパイプラインステージE1を完了した後にのみ分かる。図の例は、静的な予測に依存しない。このように、アドレスA又はBのいずれかは、次の一連のアドレスであってもよい。命令Aは、第2アドレスに記憶され、例えば、任意に201と示してもよく、命令Bは、第3アドレスに記憶され、例えば、任意に301と示してもよい。
プログラム処理中、命令BranchA、Bは、例えば、パイプラインステージIF1(行1、列4)において、プロセッサパイプラインに投入される。パイプラインステージIF1では、プロセッサは、プログラムメモリアドレスにアクセスして、プログラムメモリ中のアドレス101に記憶された命令BranchA、Bを特定する。
命令BranchA、Bは、次の一連のステージIF2(行1、列5)、D1(行1、列6)、そして、D2(行1、列7)に進む。パイプラインステージD2において、プロセッサは、命令BranchA、Bを復号して、BranchA、Bが分岐命令であることを検出する。動作D2において分岐命令を検出する場合、例えば、3演算サイクルを用いてもよい(IF1−D1)。遅延スロット(例えば、三つのスロット、ds1、ds2、及びds3)は、命令BranchA、Bが復号されるまで、パイプラインサイクルを遅延させるために用いる。
分岐メカニズムは、動作D2(行1、列7)において、命令BranchA、Bが分岐命令であると判断する。分岐予測器は、分岐がアドレス201において命令Aに進むと予測する。従って、命令Aは、例えば、パイプラインステージIF1(行5、列8)において、プロセッサパイプラインに投入でき、次のパイプラインステージIF2(行5、列9)でプログラムメモリからフェッチする。
命令Aは、プログラムメモリからアクセスされるが(行5、列8)、BMBは、同時にアドレス301における予測されなかった命令Bについて、例えば、命令Bキャッシュタグと合致するBMBキャッシュタグの有無をチェックすることによって検索する(行15、列8)。この状況では、アドレス301(命令Bが常駐する)がキャッシュタグに存在し、タグ比較でヒットフラグがアサートされる(行16、列8)。一実施形態において、キャッシュタグは、レジスタ(例えば、RAMではない)に実装して、ヒットフラグを同じ演算サイクルで利用可能になる(列8に対応)。キャッシュにおいてヒットすることから(行16、列8)、BMBは、命令Bデータの抽出に進む。
後続の演算サイクルにおいて(列9に対応)、命令Bが整合すると分かったタグに対応するキャッシュアドレスは、BMBに適用する。次のサイクルでは、命令Bは、BMBから検索する(行19、列10)。命令は、(前回の分岐命令に対してD1パイプラインステージにおいて)ディスパッチされた後、BMBに記憶する。従って、命令Bは、BMBから読み出された後(行19、列10)、パイプラインの復号ステージD2に進む(行14、列11)。
命令BがBMBから検索される間、プロセッサは、分岐予測が正しいと仮定して、命令A及びAの後に続く命令、即ち、A+1、A+2、…の処理を継続する。分岐予測が正しい場合、BMBから検索された命令Bは、用いられない。予測された命令A、A+1、A+2、…は、通常、少なくとも分岐条件が分かるまで処理される。
命令BranchA、Bが、E1パイプラインステージ(行1、列10)を完了する間に、分岐条件が分かり、従って、実際の分岐方向が分かる。条件結果が示すことは、この場合、予測された分岐命令Aが誤っており、従って、プロセスが、代わりに、命令Bに進むべきであることである。その結果、次のサイクルの復号ステージD2(行5、列11)において、プロセッサは、命令Aの投入をBMBからの正しい分岐命令Bで置き換える(行14、列11)。
後続の二つのサイクルでは、命令B+1及びB+2が、BMBから読み出され(行19、列11及び12)、復号ステージにおいて、それぞれ命令A+1及びA+2で置き換えるために用いられる(行14、列12及び13)。命令A、A+1、A+2は、それぞれB、B+1、B+2によって、D2−>D2によって示される各一連の復号ステージD2(行5、列11)、(行6、列12)、及び(行7、列13)において置き換えられる。予測された命令A(プログラムメモリから)及び予測されなかった命令B(BMBから)は、同じ演算サイクルにおいて、双方共利用可能であり、ディスパッチされることから(列10に対応)、如何なる誤予測に対する演算ペナルティ又は時間遅延もなく、分岐誤予測において、予測された命令Aを予測されなかった命令Bでの置き換えが行われる。
図3において、これらの動作が行われるのは、図2と同様に、分岐命令BranchA、Bが、正しい命令Bの代わりに命令Aに分岐すると、分岐予測器が誤予測する場合である。しかしながら、図2とは対照的に、正しい分岐命令Bは、BMBに記憶されない。この状況では、命令Bは、BMBに追加でき、このように、BMBは、後続の誤予測時に用いるための命令で満たす。
分岐メカニズムは、命令BranchA、Bが、動作D2において分岐命令であると判断する(行1、列7)。分岐予測器は、分岐がアドレス201において、命令Aに進むと予測する。従って、命令Aは、例えば、パイプラインステージIF1(行5、列8)において、プロセッサパイプラインに投入でき、次のパイプラインステージIF2において、プログラムメモリからフェッチする(行5、列9)。
命令Aがプログラムメモリからフェッチされる(行5、列8)間に、BMBは、同時にアドレス301において、予測されなかった命令Bについて、例えば、命令Bキャッシュタグと合致するBMBキャッシュタグの有無をチェックすることによって(行17、列8)、検索される。この状況では、図2と対照的に、アドレス301(命令Bが常駐する)は、キャッシュタグには存在せず、タグ比較によって、ミスフラグをアサートする(行18、列8)。一実施形態において、キャッシュタグは、レジスタ(例えば、RAMではない)に実装して、ミスフラグを同じ演算サイクルにおいて利用可能にする(列8に対応)。キャッシュに誤りがあることから(行18、列8)、BMBは、例えば、消費電力を最小限に抑えるために、通常、タグ又はBMBデータにアクセスしない。
プロセッサは、分岐予測が正しいと仮定して、命令A及びAの後に続く命令、即ち、A+1、A+2、…のフェッチ及びディスパッチを継続する。分岐予測が正しい場合、BMBキャッシュ誤り(行16、列8)は、重要ではなく、キャッシュ誤りに対する演算ペナルティがない。
命令BranchA、Bが、E1パイプラインステージを完了する(行1、列10)と、分岐条件が分かり、従って、実際の分岐方向が分かる。条件結果は、この場合、予測された分岐命令Aが誤っていることを示しており、従って、プロセスは、命令A及びAの後に続く命令、即ち、A+1、A+2、…(それぞれ、列10、行5、6、及び7)が、D2復号ステージにおいて復号される前に、それらを“キル”する。
その結果、復号ステージD2の入力は、BMBからの正しい分岐命令Bであるはずである。しかしながら、命令BはBMBに存在しないことから、復号ステージD2の入力は、命令Bが得られるまで、例えば、3演算サイクルの間、存在しない(行16、列8、9、及び10)。
プロセッサは、プログラムメモリから命令Bをフェッチする(行8、列11)。命令Bのアドレス301は、命令B、B+1、B+2がBMBに記憶されるのに備えて(それぞれ行19、列13、14、15)、タグとしてBMBに書き込む(行17、列13)。
各命令B、B+1、B+2は、フェッチし(それぞれ行8、9、10、それぞれ列12、13、14)、ディスパッチする。ディスパッチされた命令パケットB、B+1、B+2は、BMBアドレスにおいて、BMBに書き込むことができ(それぞれ行20、列13、14、15)、例えば、最長時間未使用(LRU)置換法に基づき、例えば、BMBに配置する。同一のディスパッチされた命令パケットB、B+1、B+2は、同時にディスパッチパイプラインステージD1に投入される(それぞれ行8、9、10、それぞれ列13、14、15)。次の演算サイクルにおいて、プロセッサは、ディスパッチされた命令パケットB、B+1、B+2をD2ステージにおいて、復号する(それぞれ行8、9、10、それぞれ列14、15、16)。
従って、分岐誤予測時、予測されなかった分岐命令は、例えば、まだ記憶されていなければ、BMBに記憶する。このように、プロセッサは、正しい分岐命令でBMBを満たすが、これらの命令は、誤って予測されなかったものである。一旦、BMBに記憶されると、これらの分岐命令は、図2を参照して述べたように、将来の分岐誤予測時に用いる。
正しい分岐命令Bが、プログラムメモリから検索されず(即ち、正しくない予測された命令Aだけが検索され)、その命令が、BMBにおいて利用不可能であった(前回の誤予測での分岐ではなかった)ことから、プロセッサは、プログラムメモリ・サブシステムから命令Bを検索する(行8、列11、12、及び13)。プログラムメモリ・サブシステムからの命令Bの検索には、追加の、例えば、三つの演算サイクルを用いることがあり、従って、プログラムプロセスは、誤予測ペナルティを招く。
上述した実施形態において、ディスパッチされる命令A及びBは、同じサイクルにおいて、例えば、図2では、条件分岐命令BranchA、Bの結果に依存して、復号される準備が同時に整っているそれぞれ(行5、列10)及び(行19、列10)において、利用可能である。しかしながら、他の選択肢としての一実施形態では、命令A及びBは、異なるサイクルでディスパッチしたり、誤予測履歴、ペナルティ、又は他の判断基準に応じて処理したりしてもよい。
上述した本実施形態では、プロセッサ1は、命令がディスパッチされた後、それらをBMBに(D1パイプラインステージにおいて)記憶し、他の一実施形態では、プロセッサ1は、パイプラインプロセスの他のいずれかの又は追加のステージにおいて、命令を記憶する。
上記実施形態において、分岐誤予測時、BMBは、正しい予測されなかった分岐命令を記憶する。他の選択肢として又は追加として、正しい分岐予測時、BMB又は別個のメモリユニットは、正しい予測された分岐命令を記憶する。
また、BMB又は別個のメモリユニットは、各命令入力項目に対応する統計データをBMBに記憶する。統計データには、例えば、命令が(例えば、どの命令が最長又は最短時間未使用であったかに基づき、命令を順序良く並べるために)用いられる演算サイクル等の使用頻度履歴データと、(例えば、BMBに命令を記憶すべきかどうか判断するために、又は、命令の合計もしくは平均使用頻度に基づき、BMBに命令を順序良く並べるために)命令が誤予測された割合又は回数と、(例えば、命令のサイズに基づき、命令を順序良く並べるための)命令のサイズと、を含む。
本発明の一実施形態において、BMB17は、所定のしきい値より大きい誤予測割合を有する分岐用の誤予測を記憶する。しきい値は、演算プラットホームの演算効率パラメータを満足するように、例えば、各分岐又はプロセスについてBMB17に記憶された命令の成功又は使用頻度履歴対BMB17に命令を記憶するメモリ及び演算コストに基づき、予め自動的に決定する。他の選択肢として、所定のしきい値は、例えば、30乃至50%より大きくなるように、プログラマによって手動で又は半自動的に設定してもよい。誤予測割合が、充分に小さいか又は特定の分岐又はプロセス用の所定のしきい値より小さい場合、プロセッサは、その分岐又はプロセスについて、誤予測命令を記憶しなくてもよい。例えば、分岐又はプロセスについて、分岐誤予測ペナルティの平均の減少が、例えば、指定されたサイクル数より小さい場合、誤予測命令は、BMB17に記憶しなくてもよい。
本発明の一実施形態において、分岐メカニズム14は、統計的に最も起こる可能性が高い命令の代わりに、BMB17に既に記憶された命令をどの命令が補足するかに基づき、命令を部分的に又は完全に予測する。例えば、分岐メカニズム14は、BMB17を検索したり、記憶された潜在的な未知の分岐命令のいずれかを探したり、BMB17に既に記憶されているものがある場合、分岐予測ユニットは、BMB17に記憶されていない命令を予測する、即ち、統計的に高い可能性で予測する。このように、プロセッサ1は、命令が、BMB17に既に記憶された命令に対して新しいように又はそれらと重複しないように、プログラムメモリ3から命令を検索する。
プログラムが開始され、誤予測がない場合、BMB17は、空である。プログラムが動作するにつれて、各(又は他の選択肢として、一部のみの)分岐誤予測について、誤予測命令を追加してBMB17を満たす。BMB17は、例えば、プログラマによって決定された固定の又は最大のサイズ、又は、例えば、BMB17使用頻度履歴に基づき、自動的に決定される可変サイズを有する。BMB17のサイズが小さければ小さいほど、その使用頻度は効率的である。しかしながら、BMB17のサイズが大きければ大きいほど、記憶する命令の数は多くなる。
誤予測時、従来のプロセッサは、プログラムメモリから正しい誤予測命令をフェッチする。そして、プロセッサは、プログラムキャッシュに命令を記憶するが、ここで、命令は、待ち行列に入れられ、ディスパッチされる。命令にアクセスするために、プロセッサは、タグアレイにアクセスし、タグ比較を実施し、プログラムキャッシュにアクセスして、命令を読み出す。このプロセスは、比較的大量のプロセッサ電力を消費する。特に、例えば、“超長命令語”(VLIW)パケット等の大きなデータパケットが用いられる場合、VLIWプロセッサは、VLIWパケットを検索し、VLIWパケットを送出するように、待ち行列に格納するか又はパケットをバッファに入れる。送出された後、VLIWパケットは、実行ユニットにディスパッチされ、ディスパッチされた後にのみ、復号され、実行される。従来のシステムでは、この広範囲にわたる一連の動作は、分岐誤予測がある度に、実行される。本発明の実施形態によれば、分岐誤予測がある場合でも、正しい命令が前回誤予測されていれば、正しい命令は、既にBMB17に記憶されている。従って、正しい命令が、迅速にBMB17から検索され、上記広範囲にわたる一連の動作は、例えば、全面的に又は少なくとも部分的に省いてもよい。
図4は、四つの図、図4A−i、4A−ii、4B−i、及び4B−iiを含んでおり、これらは、一緒に表示して四つの象限に配置すべきものであり、図4A−iは右上の象限、図4A−iiは右下の象限、図4B−iは左上の象限、及び図4B−iiは左下の象限に配置する。
図4は、本発明の実施形態によるループ命令によって開始されたプロセッサ動作を示す。ループ命令(例えば、brloop_write)(行1、列1)は、可能な分岐経路の内の一つが前回の命令を繰り返し、これによって、ループ又は一連の繰り返し命令が生じる特別な種類の分岐命令である。本実施形態では、分岐ループ命令は、無条件分岐ループ命令も用いるが、条件付きである。
本発明の実施形態には、BMB17をループバッファとして用いるためのシステム及び方法を含む。BMB17は、ループ命令が、プログラムメモリ3からよりもむしろ局所的にアクセスするように、ループ命令の記憶専用であってもよい。ループ命令は、ループシーケンスの一部ではない他の非繰り返し命令よりも更に頻繁に用いることから、プログラムメモリ3よりもむしろBMB17に局所的にループ命令を記憶すると、プログラムメモリ3にアクセスするために用いられる消費電力が減少し、他の非繰り返し命令の場合よりも、それらの命令を更に待ち行列に入れ、並べ/ディスパッチする。
分岐ループ命令“brloop_write”(行1、列1)は、命令ループ中の命令パケットの数n(例えば、n=6)を示す。命令“nop”は、プロセッサパイプラインの待ち時間による無動作を示す。プロセッサ1は、命令(例えば、chip_select及びwrite_enable命令)を用いて、命令ループの最初のn−1命令パケットをBMB17に書き込む。BMB17には、ループ中の最後のn番目の命令パケットが書き込まれる専用のレジスタ(例えば、brloop_last_ir_r)を含む。ループ中の最後の命令パケットが、専用レジスタに書き込まれている間に、ループ中にもう命令がないことが分かり、ループ中の第1命令パケットは、BMB17から自動的に同時に検索する。
命令をBMB17に書き込むためには、パケット数が復号される(行1、列6)場合、プロセッサ1は、BMB17において、一以上のレジスタを更新して、命令パケットの数(例えば、n=6)をBMB17のそれぞれの登録項目に書き込む(行30、列7−12)。タグアドレス命令を用いて、BMB17タグアレイを更新する(行27)が、その間、キャッシュインデックス命令を用いて、BMB17キャッシュアレイを更新する(行30)。各BMB17入力項目は、一以上の(例えば、四つの)命令パケットを保持する。例えば、第1のBMB17入力項目は、ループA1−A4中の第1の四つの命令パケットで埋めてもよい(行30、列7−10)。対応するタグアドレスは、各BMB17入力項目についてBMB17に書き込む(行27、列7)。命令ループが五つ以上の命令を含む場合、プロセッサ1は、BMB17レジスタを更新して、次の(最大)四つの命令パケットA5で満たされる次のBMB17入力項目を見つけて(行30、列11)、それに応じて、対応するタグアドレスを書き込む(行28、列11)。プロセッサ1は、最後の命令6以外の全てがBMB17に書き込まれるまで、この処理を継続する(行30、列11)。プロセッサ1は、各第4番目の命令についてタグ比較を実施して、次のBMB17入力項目のアドレスを見つけて(行28、列12)、BMB17から命令を検索する(行31、列13、14、…)。
本発明の幾つかの実施形態において、命令は、最長時間未使用法(LRU)アルゴリズムに基づく順番で、BMB17に書き込まれる。BMB17には、レジスタと、LRUアルゴリズムに基づき順序よく並べられた対応する登録項目と、を含む。
分岐ループ(brloop)命令A4(行6、列1)(二つの遅延スロット5及び6付き、行7及び8、列1)は、選択されたか又は選択されなかったか予測する。予測され選択されたアドレス102は、“予測されなかった分岐対象アドレス”又は“PTADDR_R”レジスタに書き込まれ(行43、列12)、BMB17のタグアレイを検索するために用いる(行26、列12)。分岐ループ命令4Aが選択された場合、ループ命令は、プログラムメモリ3からの代わりに、BMB17からアクセスして、消費電力を低減する。選択されなかったアドレス108は、通常、最後のループ反復の終了時点においてのみ又は分岐が正しく予測されない終了条件においてのみ用いられる。反復の最後のループ(行25、列26)は、終了条件がある場合又は分岐が正しく予測されない場合である。
割込みユニット13は、現プロセス(図示せず)に割込み、例えば、他のプロセスを開始して、部分的に処理された分岐命令データを破壊することが多い。割込みユニット13は、プロセッサ1がループ命令をBMB17に書き込む間、ディセーブル状態にする。また、割込みユニット13は、プロセッサ1がBMB17から命令を読み出す間、ディセーブル状態にする。一つの例外では、割込みは、最後の命令パケットを読み出す間、例えば、命令ループの各反復において、許容される。そのような割込みが許容された場合、分岐命令が選択された場合、リターンレジスタには、PTADDR_Rレジスタのプログラムアドレスを書き込む(行43、列12、18、24)。また、分岐が選択されなかった場合、リターンレジスタには、プログラムカウンタ又は“pseq_pc”からのプログラムアドレスを書き込む。BMB17は、ロックして、プログラマにBMB17登録項目の置き換えを制御させる。
ループバッファの状態は、インデックス、フラグ、又は他のマーカーによって追跡する。“buf_valid”フラグは、ループ中の全ての命令がBMB17に書き込まれていたりBMB17において入手可能であったりする時、設定する。buf_validフラグは、いずれかのループ命令がBMB17において置き換えられた時、クリアする。“buf_active”フラグは、プロセッサ1がBMB17から命令にアクセスした時、設定する。buf_activeフラグは、brloop_write命令に遭遇した後、設定でき、ループ命令は、BMB17に書き込まれる。buf_activeフラグは、分岐が選択された場合、或いは呼出し又は割込みに遭遇した場合、クリアする。
ループバッファの状態は、異なるフラグ組合せによって示す。例えば、buf_valid及びbuf_activeは、以下の四つの各異なる状態を示す。
・buf_validがクリアされ、buf_activeがクリアされる場合、プログラムカウンタは、BMB17の範囲外にある命令にアクセスする。この状況では、命令は、プログラムメモリ3からフェッチする。
・buf_validがクリアされ、buf_activeが設定される場合、命令は、プログラムメモリ3からフェッチして、BMB17に書き込む。
・buf_validが設定され、buf_activeが設定される場合、命令は、BMB17から直接フェッチする。
・割込み又は選択された分岐により、BMB17の範囲外にあるプログラムアドレスにプログラムカウンタがジャンプした場合、buf_validが設定され、buf_activeがクリアされる。この状況では、命令は、プログラムメモリ3からフェッチされる。サブルーチン又は割込みから戻る際、buf_activeを設定する(又は他の選択肢として、一旦、brloop_write命令に遭遇した時のみ、buf_activeを設定する)。
図4は、六つの命令パケットA1−A6付きのループを有するプロセスの例を示す(行3−8、列1)。本例において、ループ(brloop_write)の分岐命令は、条件付きである。しかしながら、本発明の実施形態は、無条件である、即ち、常に選択される分岐ループ命令にも同様に適用可能であることが当業者によって認識されるであろう。
図4は、BMB17への書き込み処理(行30)と、ループの反復時のBMB17からの読み出し(行31)と、ループからの終了(ループカウンタが負になったか又は分岐条件が誤っているかのいずれかによる)と、を示す。ループ終了は、行25、列26見られ、この場合、デコーダ入力がアドレス108の“次の命令”(NI)で動作しており、これは、ループ命令ではない。また、ループ終了は、行29、列26に見られ、この場合、BMB17がループ命令についてもはやアクセスされない。
ループの第1反復時、命令は、実行され、同時にBMB17に書き込まれる。後続の反復中、命令は、プログラムメモリ3、待ち行列、及びディスパッチャがアイドル状態である間、BMB17からアクセスされる。最後の反復の終了時点で、プログラムメモリ3、待ち行列、及びディスパッチャは、ループの後に来る次の一連の命令パケットで、例えば、アドレス108、109、110、・・・で動作し始める。
BMB17には、バッファ、キャッシュ、又は後続の誤予測もしくはループの反復時のアクセスのために、別個のキャッシュに誤予測又はループ命令を記憶する他のメモリ構造を含む。BMB17は、通常、分岐結果の履歴に依拠せずに将来予測を行い、これによって、静的及び動的双方の分岐予測法の制限が克服される。他の実施形態では、BMB17は、全面的に又は部分的に分岐予測履歴を考慮して、将来の予測を行う。
BMB17は、通常、ソフトウェア指示に依拠しない。しかしながら、幾つかの実施形態では、ソフトウェア指示は、BMB17に命令を予めロードするために用いる。BMB17は、プログラマに対して完全に又は部分的にトランスペアレントである。BMB17は、完全に又は部分的に連携するキャッシュを用いて、分岐対象アドレスに命令を記憶する。これらの命令は、命令ループ中又は分岐予測器が正しくない予測を行う時、自動的に検索する(例えば、分岐誤予測時、オーバーヘッド無しを達成する)。
図5を参照すると、本図は、本発明の実施形態による方法のフローチャートである。
動作500時、プロセッサは、条件分岐命令を復号する。
動作510時、分岐予測ユニットは、分岐に続く後続の命令を予測する。
動作520時、フェッチユニットが、予測された命令をプログラムメモリから検索する。
動作525時、プロセッサは、予測されなかった命令を分岐誤予測バッファ(BMB)から、例えば、命令キャッシュタグと合致するBMBキャッシュタグの有無をチェックすることによって、検索する。動作520及び525は、実質的に同時に、例えば、同じクロックサイクルにおいて動作させる。
動作530時、プロセッサは、分岐命令を実行し、分岐に続く実際の後続の命令を判断する。
動作540時、プロセッサは、分岐に続く実際の後続の命令と、プログラムメモリから検索された予測された命令とを比較する。実際の命令が予測された命令と合致する場合、プロセスは、動作550に進む。実際の命令が予測された命令と合致しない場合、プロセスは、動作560に進む。
動作550時、プロセッサは、プログラムメモリから検索された予測された命令を復号する。
動作560時、プロセッサは、BMBから検索された予測されなかった命令を復号する。
予測されなかった命令がBMBで見つからず、従って、動作525時、BMBで検索されず、動作530時に判断された実際の命令が、動作520時にプログラムメモリから検索された予測された命令と合致しない場合、プロセスは、動作570に進む。
動作570時、プロセッサは、予測されなかった命令をプログラムメモリから検索し、命令を復号し、命令をBMBに書き込む。
他の動作又は一連の動作を用いてもよい。
本発明の実施形態には、コンピュータ又はプロセッサ可読媒体等の物や、例えば、メモリ、ディスクドライブ、又はUSBフラッシュメモリ等のコンピュータ又はプロセッサ記憶媒体を含んでおり、これら媒体は、プロセッサ又はコントローラによって実行されると本明細書に開示した方法を実行する命令を符号化し、含み、又は記憶する。
上述した個々の実施形態は、本発明が関連する多くの分散システムに有用であることが判るであろうが、本発明の更なる改変が当業者には実施可能であろう。そのような全ての改変は、添付の特許請求の範囲によって規定される本発明の範囲及び精神内にあるとみなすものである。

Claims (11)

  1. 分岐予測器と、プログラムメモリと、分岐誤予測バッファとを備え、
    分岐予測器は、条件分岐命令についての分岐予測を行うものであり、
    プログラムメモリは、分岐予測器による分岐予測により予測された分岐方向にある命令が検索されるものであり、
    分岐予測器により予測された分岐方向にある命令がプログラムメモリにおいて検索されるのと同時に、分岐誤予測バッファは、分岐予測器による分岐予測により予測されなかった分岐方向にある命令を得ることが試みられるものであり、
    プログラムメモリは、分岐予測器による分岐予測が正しくなかったことが判明し、かつ、分岐誤予測バッファに、分岐予測器による分岐予測により予測されなかった分岐方向にある命令が存在しなかったことが判明したときに、分岐予測器による分岐予測により予測されなかった分岐方向にある命令であって、条件分岐命令による実際の分岐方向にある命令が検索されるものであり、
    分岐誤予測バッファは、分岐予測器による分岐予測により予測されなかった分岐方向にある命令であって、条件分岐命令による実際の分岐方向にある命令が、プログラムメモリから検索されたときに、その検索された命令を記憶するものである、システム。
  2. 請求項に記載のシステムにおいて、プロセッサをさらに備え、
    プロセッサは、プロセッサパイプラインにおいて、条件分岐命令を復号した後に、条件分岐命令による実際の分岐方向にある命令を復号するものである、システム。
  3. 請求項に記載のシステムにおいて、プロセッサをさらに備え、
    プロセッサは、条件分岐命令による実際の分岐方向が判明した後に、分岐予測器による分岐予測により予測されなかった分岐方向にある命令であって、条件分岐命令による実際の分岐方向にある命令を復号するものである、システム。
  4. 請求項1に記載のシステムにおいて、分岐誤予測バッファは、ディスパッチされる命令を記憶するものである、システム。
  5. 請求項1に記載のシステムにおいて、分岐誤予測バッファは、最長時間未使用法(LRU)アルゴリズムを用いて命令を記憶するものである、システム。
  6. 請求項1に記載のシステムにおいて、分岐誤予測バッファは、ループを形成する命令も記憶するものである、システム。
  7. 条件分岐命令についての分岐予測により予測された分岐方向にある命令をプログラムメモリから検索する段階と、
    条件分岐命令についての分岐予測により予測された分岐方向にある命令をプログラムメモリから検索する段階と同時に、条件分岐命令についての分岐予測により予測されなかった分岐方向にある命令を分岐誤予測バッファから得ることを試みる段階と、
    条件分岐命令についての分岐予測が正しくなかったことが判明し、かつ、分岐誤予測バッファに、条件分岐命令についての分岐予測により予測されなかった分岐方向にある命令が存在しなかったことが判明したときに、条件分岐命令についての分岐予測により予測されなかった分岐方向にある命令であって、条件分岐命令による実際の分岐方向にある命令を、プログラムメモリから検索する段階と、
    条件分岐命令についての分岐予測により予測されなかった分岐方向にある命令であって、条件分岐命令による実際の分岐方向にある命令が、プログラムメモリから検索されたときに、その検索された命令を分岐誤予測バッファに記憶する段階と、を備える方法。
  8. 請求項に記載の方法において、条件分岐命令による実際の分岐方向が判明した後に、条件分岐命令についての分岐予測により予測されなかった分岐方向にある命令であって、条件分岐命令による実際の分岐方向にある命令を復号する段階を更に備えた方法。
  9. 請求項に記載の方法において、分岐誤予測バッファは、ディスパッチされた命令を記憶するものである、方法。
  10. 請求項に記載の方法において、
    分岐誤予測バッファに、ループを形成する命令記憶する段階と、
    ループを形成する命令のうちの分岐命令において分岐が成立する間は、分岐誤予測バッファからループを形成する命令を得る段階と、更に備えた方法。
  11. 請求項に記載の方法において、分岐誤予測バッファは、最長時間未使用法(LRU)アルゴリズムを用いて命令を記憶するものである、方法。
JP2010246340A 2009-11-04 2010-11-02 分岐誤予測バッファを用いるためのシステム及び方法 Active JP5520779B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/611,937 2009-11-04
US12/611,937 US9952869B2 (en) 2009-11-04 2009-11-04 System and method for using a branch mis-prediction buffer

Publications (3)

Publication Number Publication Date
JP2011100454A JP2011100454A (ja) 2011-05-19
JP2011100454A5 JP2011100454A5 (ja) 2013-12-19
JP5520779B2 true JP5520779B2 (ja) 2014-06-11

Family

ID=43413571

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010246340A Active JP5520779B2 (ja) 2009-11-04 2010-11-02 分岐誤予測バッファを用いるためのシステム及び方法

Country Status (4)

Country Link
US (2) US9952869B2 (ja)
EP (1) EP2330500B1 (ja)
JP (1) JP5520779B2 (ja)
CA (1) CA2719615C (ja)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120005462A1 (en) * 2010-07-01 2012-01-05 International Business Machines Corporation Hardware Assist for Optimizing Code During Processing
US9342432B2 (en) 2011-04-04 2016-05-17 International Business Machines Corporation Hardware performance-monitoring facility usage after context swaps
US8868886B2 (en) 2011-04-04 2014-10-21 International Business Machines Corporation Task switch immunized performance monitoring
US20130055033A1 (en) 2011-08-22 2013-02-28 International Business Machines Corporation Hardware-assisted program trace collection with selectable call-signature capture
US8874884B2 (en) 2011-11-04 2014-10-28 Qualcomm Incorporated Selective writing of branch target buffer when number of instructions in cache line containing branch instruction is less than threshold
US9235419B2 (en) 2012-06-11 2016-01-12 International Business Machines Corporation Branch target buffer preload table
US9557999B2 (en) * 2012-06-15 2017-01-31 Apple Inc. Loop buffer learning
US9753733B2 (en) * 2012-06-15 2017-09-05 Apple Inc. Methods, apparatus, and processors for packing multiple iterations of loop in a loop buffer
US9471322B2 (en) 2014-02-12 2016-10-18 Apple Inc. Early loop buffer mode entry upon number of mispredictions of exit condition exceeding threshold
US9135015B1 (en) * 2014-12-25 2015-09-15 Centipede Semi Ltd. Run-time code parallelization with monitoring of repetitive instruction sequences during branch mis-prediction
US10296346B2 (en) 2015-03-31 2019-05-21 Centipede Semi Ltd. Parallelized execution of instruction sequences based on pre-monitoring
US10296350B2 (en) 2015-03-31 2019-05-21 Centipede Semi Ltd. Parallelized execution of instruction sequences
US9916164B2 (en) * 2015-06-11 2018-03-13 Intel Corporation Methods and apparatus to optimize instructions for execution by a processor
US10908902B2 (en) * 2016-05-26 2021-02-02 International Business Machines Corporation Distance based branch prediction and detection of potential call and potential return instructions
JP2019101543A (ja) 2017-11-29 2019-06-24 サンケン電気株式会社 プロセッサ及びパイプライン処理方法
US10901743B2 (en) * 2018-07-19 2021-01-26 International Business Machines Corporation Speculative execution of both paths of a weakly predicted branch instruction
US10915322B2 (en) * 2018-09-18 2021-02-09 Advanced Micro Devices, Inc. Using loop exit prediction to accelerate or suppress loop mode of a processor
JP7100258B2 (ja) * 2018-10-10 2022-07-13 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US11182166B2 (en) * 2019-05-23 2021-11-23 Samsung Electronics Co., Ltd. Branch prediction throughput by skipping over cachelines without branches
CN110688160B (zh) * 2019-09-04 2021-11-19 苏州浪潮智能科技有限公司 一种指令流水线处理方法、系统、设备及计算机存储介质
JP7417159B2 (ja) * 2020-04-07 2024-01-18 日本電信電話株式会社 情報処理装置、情報処理方法、およびプログラム
WO2022212220A1 (en) * 2021-03-27 2022-10-06 Ceremorphic, Inc. Mitigation of branch misprediction penalty in a hardware multi-thread microprocessor
US20220308887A1 (en) * 2021-03-27 2022-09-29 Redpine Signals, Inc. Mitigation of branch misprediction penalty in a hardware multi-thread microprocessor
US20220308888A1 (en) * 2021-03-27 2022-09-29 Redpine Signals, Inc. Method for reducing lost cycles after branch misprediction in a multi-thread microprocessor
JP7319439B1 (ja) 2022-08-30 2023-08-01 株式会社スギノマシン バリ取り工具

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS549456B2 (ja) 1972-07-05 1979-04-24
JPS6051948A (ja) 1983-08-31 1985-03-23 Hitachi Ltd 情報処理装置
JPH01106141A (ja) 1987-10-19 1989-04-24 Mitsubishi Electric Corp データ処理装置
GB9412487D0 (en) * 1994-06-22 1994-08-10 Inmos Ltd A computer system for executing branch instructions
US5850542A (en) * 1995-09-15 1998-12-15 International Business Machines Corporation Microprocessor instruction hedge-fetching in a multiprediction branch environment
US5734881A (en) * 1995-12-15 1998-03-31 Cyrix Corporation Detecting short branches in a prefetch buffer using target location information in a branch target cache
SE510295C2 (sv) 1997-07-21 1999-05-10 Ericsson Telefon Ab L M Metod vid processor för att hantera villkorade hoppinstruktioner samt processor anpassad att verka enligt den angivna metoden
US8285976B2 (en) * 2000-12-28 2012-10-09 Micron Technology, Inc. Method and apparatus for predicting branches using a meta predictor
US7010675B2 (en) * 2001-07-27 2006-03-07 Stmicroelectronics, Inc. Fetch branch architecture for reducing branch penalty without branch prediction
US6918030B2 (en) * 2002-01-10 2005-07-12 International Business Machines Corporation Microprocessor for executing speculative load instructions with retry of speculative load instruction without calling any recovery procedures
US7197630B1 (en) * 2004-04-12 2007-03-27 Advanced Micro Devices, Inc. Method and system for changing the executable status of an operation following a branch misprediction without refetching the operation
WO2006057084A1 (ja) * 2004-11-25 2006-06-01 Matsushita Electric Industrial Co., Ltd. 命令供給装置
US7437543B2 (en) * 2005-04-19 2008-10-14 International Business Machines Corporation Reducing the fetch time of target instructions of a predicted taken branch instruction
TWI328771B (en) * 2005-07-15 2010-08-11 Nvidia Corp Pipelined central processing unit structure and method of processing a sequence of instructions

Also Published As

Publication number Publication date
JP2011100454A (ja) 2011-05-19
US20110107071A1 (en) 2011-05-05
US20180210735A1 (en) 2018-07-26
EP2330500A1 (en) 2011-06-08
US10409605B2 (en) 2019-09-10
CA2719615A1 (en) 2011-05-04
US9952869B2 (en) 2018-04-24
EP2330500B1 (en) 2013-08-28
CA2719615C (en) 2019-04-09

Similar Documents

Publication Publication Date Title
JP5520779B2 (ja) 分岐誤予測バッファを用いるためのシステム及び方法
US7917731B2 (en) Method and apparatus for prefetching non-sequential instruction addresses
US9378020B2 (en) Asynchronous lookahead hierarchical branch prediction
EP3850480B1 (en) Controlling accesses to a branch prediction unit for sequences of fetch groups
US8578141B2 (en) Loop predictor and method for instruction fetching using a loop predictor
TW200813822A (en) D-cache miss prediction and scheduling
US20070186049A1 (en) Self prefetching L2 cache mechanism for instruction lines
US11099850B2 (en) Branch prediction circuitry comprising a return address prediction structure and a branch target buffer structure
US20120311308A1 (en) Branch Predictor with Jump Ahead Logic to Jump Over Portions of Program Code Lacking Branches
US8028180B2 (en) Method and system for power conservation in a hierarchical branch predictor
US10853075B2 (en) Controlling accesses to a branch prediction unit for sequences of fetch groups
US20080040576A1 (en) Associate Cached Branch Information with the Last Granularity of Branch instruction in Variable Length instruction Set
EP4020167A1 (en) Accessing a branch target buffer based on branch instruction information
US10922082B2 (en) Branch predictor
US10740102B2 (en) Hardware mechanism to mitigate stalling of a processor core
EP2348399B1 (en) System and method for processing interrupts in a computing system
EP4081899A1 (en) Controlling accesses to a branch prediction unit for sequences of fetch groups

Legal Events

Date Code Title Description
RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20120112

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131101

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20131101

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20131101

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20131125

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131203

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140228

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140407

R150 Certificate of patent or registration of utility model

Ref document number: 5520779

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

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