(57)【特許請求の範囲】
【請求項１】
分岐予測器と、プログラムメモリと、分岐誤予測バッファとを備え、
分岐予測器は、条件分岐命令についての分岐予測を行うものであり、
プログラムメモリは、分岐予測器による分岐予測により予測された分岐方向にある命令が検索されるものであり、
分岐予測器により予測された分岐方向にある命令がプログラムメモリにおいて検索されるのと同時に、分岐誤予測バッファは、分岐予測器による分岐予測により予測されなかった分岐方向にある命令を得ることが試みられるものであり、
プログラムメモリは、分岐予測器による分岐予測が正しくなかったことが判明し、かつ、分岐誤予測バッファに、分岐予測器による分岐予測により予測されなかった分岐方向にある命令が存在しなかったことが判明したときに、分岐予測器による分岐予測により予測されなかった分岐方向にある命令であって、条件分岐命令による実際の分岐方向にある命令が検索されるものであり、
分岐誤予測バッファは、分岐予測器による分岐予測により予測されなかった分岐方向にある命令であって、条件分岐命令による実際の分岐方向にある命令が、プログラムメモリから検索されたときに、その検索された命令を記憶するものである、システム。
【請求項２】
請求項１に記載のシステムにおいて、プロセッサをさらに備え、
プロセッサは、プロセッサパイプラインにおいて、条件分岐命令を復号した後に、条件分岐命令による実際の分岐方向にある命令を復号するものである、システム。
【請求項３】
請求項１に記載のシステムにおいて、プロセッサをさらに備え、
プロセッサは、条件分岐命令による実際の分岐方向が判明した後に、分岐予測器による分岐予測により予測されなかった分岐方向にある命令であって、条件分岐命令による実際の分岐方向にある命令を復号するものである、システム。
【請求項４】
請求項１に記載のシステムにおいて、分岐誤予測バッファは、ディスパッチされる命令を記憶するものである、システム。
【請求項５】
請求項１に記載のシステムにおいて、分岐誤予測バッファは、最長時間未使用法（ＬＲＵ）アルゴリズムを用いて命令を記憶するものである、システム。
【請求項６】
請求項１に記載のシステムにおいて、分岐誤予測バッファは、ループを形成する命令も記憶するものである、システム。
【請求項７】
条件分岐命令についての分岐予測により予測された分岐方向にある命令をプログラムメモリから検索する段階と、
条件分岐命令についての分岐予測により予測された分岐方向にある命令をプログラムメモリから検索する段階と同時に、条件分岐命令についての分岐予測により予測されなかった分岐方向にある命令を分岐誤予測バッファから得ることを試みる段階と、
条件分岐命令についての分岐予測が正しくなかったことが判明し、かつ、分岐誤予測バッファに、条件分岐命令についての分岐予測により予測されなかった分岐方向にある命令が存在しなかったことが判明したときに、条件分岐命令についての分岐予測により予測されなかった分岐方向にある命令であって、条件分岐命令による実際の分岐方向にある命令を、プログラムメモリから検索する段階と、
条件分岐命令についての分岐予測により予測されなかった分岐方向にある命令であって、条件分岐命令による実際の分岐方向にある命令が、プログラムメモリから検索されたときに、その検索された命令を分岐誤予測バッファに記憶する段階と、を備える方法。
【請求項８】
請求項７に記載の方法において、条件分岐命令による実際の分岐方向が判明した後に、条件分岐命令についての分岐予測により予測されなかった分岐方向にある命令であって、条件分岐命令による実際の分岐方向にある命令を復号する段階を更に備えた方法。
【請求項９】
請求項７に記載の方法において、分岐誤予測バッファは、ディスパッチされた命令を記憶するものである、方法。
【請求項１０】
請求項７に記載の方法において、
分岐誤予測バッファに、ループを形成する命令も記憶する段階と、
ループを形成する命令のうちの分岐命令において分岐が成立する間は、分岐誤予測バッファからループを形成する命令を得る段階と、を更に備えた方法。
【請求項１１】
請求項７に記載の方法において、分岐誤予測バッファは、最長時間未使用法（ＬＲＵ）アルゴリズムを用いて命令を記憶するものである、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、分岐命令の結果を予測するための方法及びシステムに関する。特に、本発明の実施形態は、後続の分岐誤予測中に用いるために、分岐誤予測から命令を記憶する処理に関する。
【背景技術】
【０００２】
プログラムには分岐命令が含まれるが、この命令では、プロセスは、分岐条件に基づき、複数の可能な進路の内の一つに進む。例えば、一連の命令１、２、３、４、５において、５が分岐命令である場合、命令５は、プロセスに対して、命令６、７、８、・・・に順次進むように又は先に飛び越えて命令１００、１０１、１０２、・・・に至るように命令する。
【０００３】
時間遅延を回避するために、命令は、通常、プロセッサパイプラインで必要とされる時に使用準備が整っているように、プログラムメモリから早めにフェッチされる。しかしながら、分岐では、次の命令は、分岐命令が実行されるまで不明なことがある。従って、後続の命令は、事前にフェッチできず、これによって、プロセスパイプラインに時間遅延が生じる。
【０００４】
そのような時間遅延を低減するために、分岐予測器を用いて、条件分岐の結果を予測する。分岐において予測される命令は、先行してプログラムメモリから検索され、アクセスを簡単にするために、一時的にプログラムキャッシュに記憶される。分岐予測器は、分岐結果を判断するために分岐命令自体だけを用いて静的であってもよいし、或いは分岐結果を判断するために分岐の履歴の統計値も用いて動的であってもよい。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第３９４０７４１号明細書
【特許文献２】米国特許第４７２５９４７号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、分岐予測器は、幾つかのアルゴリズムの場合、性能が悪いことがあり、例えば、約５０％の分岐で正確に予測し、約５０％の分岐で正しくない予測を行う。更に、幾つかのアルゴリズムは、動的な分岐予測からは、例えば、現在の分岐判断と先行する分岐判断との間の相関関係がない場合、効果が得られない。
【０００７】
分岐予測が正しい場合、予測された命令は、直ちにプログラムキャッシュから検索される。分岐予測が正しくない場合、検索された命令は、廃棄され、プロセッサは、再度、追加の演算サイクルを用いて、プログラムメモリから正しい命令を検索しなければならない。分岐誤予測後、プログラムメモリから正しい命令を検索するために用いられる追加の演算サイクルは、分岐誤予測ペナルティと称することがある。
【図面の簡単な説明】
【０００８】
【図１】本発明の実施形態に基づくシステムの概略説明図。
【図２】本発明の実施形態に基づく分岐命令によって開始されるプロセッサ動作を示す表。
【図３】本発明の実施形態に基づく分岐命令によって開始されるプロセッサ動作を示す表。
【図４Ａ−ｉ】本発明の実施形態に基づく分岐命令によって開始されるプロセッサ動作を示す表。
【図４Ａ−ｉｉ】本発明の実施形態に基づく分岐命令によって開始されるプロセッサ動作を示す表。
【図４Ｂ−ｉ】本発明の実施形態に基づく分岐命令によって開始されるプロセッサ動作を示す表。
【図４Ｂ−ｉｉ】本発明の実施形態に基づく分岐命令によって開始されるプロセッサ動作を示す表。
【図５】本発明の実施形態に基づく方法のフローチャート。
【発明を実施するための形態】
【０００９】
本発明と見なされる主題については、詳細に指摘し、本明細書の末尾部分において明瞭に権利主張を行っている。しかしながら、本発明は、その目的、特徴、及び利点と共に構成及び動作方法の双方に関して、添付図面と共に解釈する際、以下の詳細な説明を参照すると最も良く理解することができる。本発明の特定の実施形態について、上記図面を参照して述べる。
【００１０】
図を簡単明瞭にするために、図示した要素は、必ずしも縮尺通りに描かれているとは限らないことを認識されたい。例えば、幾つかの要素の寸法は、理解しやすいように、他の要素に対して誇張していることがある。更に、適切であると思われる場合、参照数字は、図中で繰り返し用いて、対応する又は類似の要素を示すことがある。
【００１１】
以下の説明において、本発明の様々な態様について述べる。説明のために、本発明が充分に理解されるように特定の構成及び細目について記載する。しかしながら、本明細書に提示された個々の詳細が無くても本発明を実施可能であることも当業者には明らかである。更に、本発明を不明瞭にしないために、公知の特徴は、省略又は簡略化することがある。
【００１２】
特に具体的に言及しない限り、以下の議論から明らかなように、明細書全体において、“処理”、“演算”、“計算”、“判断”等の用語を利用する議論は、演算システムのレジスタやメモリ内の電子的量等の物理量として表されるデータを操作したり、演算システムのメモリ、レジスタ又は他のそのような情報記憶装置、伝送又は表示装置内において、物理量として同様に表される他のデータに変換したりするコンピュータ又は演算システム又は同様な電子演算装置のアクションやプロセスを指すことを認識されたい。
【００１３】
分岐命令は、プロセスが、その命令において、複数の可能な進路の内の一つに進む命令を意味する。分岐命令は、条件付きであってもよいし、或いは無条件であってもよい。無条件分岐命令は、結果が予め決定され、後続の命令が、分岐命令の処理前に分かっているものである。例えば、無条件分岐命令は、所定の回数、命令ループを繰り返し、そして、後続の命令にジャンプするものであってもよい。条件分岐命令は、結果が条件に依存するものである。条件は、通常、後続の命令がフェッチされる前には、未知である。例えば、ある状況では、条件は、分岐命令が復号された時にのみ分かることがある。
【００１４】
プログラム中で分岐命令に遭遇すると、プロセッサは、分岐命令に従うと予測される一以上の命令をプログラムメモリから検索する。プログラムメモリから命令を検索するために、プロセッサは、命令をフェッチし、プログラムキャッシュにそれらを記憶し、命令を待ち行列に入れて、ディスパッチする。そして、命令を読み出す場合、プロセッサは、タグアレイにアクセスし、タグ比較を実施し、プログラムキャッシュにアクセスする。この一連の動作は、通常、広範囲にわたり、電力を消費する。従来のシステムでは、分岐予測が正しくなく、誤った予測命令がプログラムメモリから検索された場合、これらの命令は廃棄され、プロセッサは、プログラムメモリにアクセスして、広範囲にわたる処理を繰り返して、正しい命令を検索する。分岐予測が正しくない度に、プロセッサは、正しい命令をプログラムメモリからフェッチするために、大幅な時間遅延及び演算ペナルティ、即ち、誤予測ペナルティを被る。
【００１５】
本発明の一実施形態において、条件分岐命令を実行するためのシステム及び方法を提供する。分岐予測器が、一以上の命令を予測する。予測される命令は、条件分岐命令に依存する。分岐誤予測バッファは、分岐誤予測中に、分岐予測器によって予測されなかった正しい命令を記憶する。
【００１６】
本発明の一実施形態において、条件分岐命令を実行するためのシステム及び方法を提供する。一以上の正しい命令は、分岐誤予測時、分岐誤予測バッファから検索する。分岐誤予測バッファは、前回の分岐誤予測時に予測されなかった前回用いた命令を記憶する。
【００１７】
本発明の一実施形態において、分岐誤予測バッファに命令を記憶するためのシステム及び方法を提供する。条件分岐命令に依存する一以上の予測された命令は、プログラムメモリから検索する。プロセッサは、一以上の予測された命令が正しくないと判断する。一以上の正しい命令は、プログラムメモリから検索する。一以上の正しい命令は、分岐誤予測バッファに記憶する。
【００１８】
本発明の実施形態には、誤予測された命令を記憶するローカルキャッシュ、例えば、分岐誤予測バッファ（ＢＭＢ：branch mis-prediction buffer）を含む。誤予測命令は、一旦分岐条件が分かると、分岐命令の後に続く正しい命令であると判断される命令であるが、分岐予測器によって予測されなかった命令を意味する。誤予測時、正しい命令がＢＭＢに記憶される場合、命令は、プログラムメモリからではなく、ＢＭＢから迅速に検索して、誤予測ペナルティがゼロになる。しかしながら、正しい命令がＢＭＢに記憶されない場合、正しい命令は、プログラムメモリから検索され、誤予測ペナルティを招く。しかしながら、本発明の実施形態によれば、誤予測命令を廃棄し、それらをフェッチするために用いられた計算労力を無駄にする代わりに、誤予測命令は、ＢＭＢに記憶して、誤予測になり得る後続の分岐時に用いる。
【００１９】
図１を参照すると、この図は、本発明の実施形態によるシステムの概略説明図である。本システムには、プロセッサ１を有する装置１００と、データメモリユニット２と、プログラムメモリユニット３と、プログラムキャッシュ１０とを含む。
【００２０】
装置１００は、コンピュータ装置、セル方式の装置、又は他の任意のデジタル装置、例えば、携帯電話、携帯情報端末（ＰＤＡ）、ビデオゲーム操作卓等を含む。装置１００には、コンピュータプログラムを動作させるために一連の命令を実行可能な任意の装置を含む。
【００２１】
プロセッサ１には、中央処理装置（ＣＰＵ）、デジタル信号プロセッサ（ＤＳＰ）、マイクロプロセッサ、コントローラ、チップ、マイクロチップ、フィールド・プログラマブル・ゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）又は他の任意の集積回路（ＩＣ）、又は他の任意の適切な多目的又は特定プロセッサ又はコントローラを含む。
【００２２】
プロセッサ１は、データバス４を介してデータメモリユニット２に接続され、プログラムメモリバス５を介してプログラムメモリユニット３に接続される。
プログラムメモリユニット３は、通常、コンピュータプログラムを動作させるための命令及び規則一式を記憶し、一方、データメモリユニット２は、通常、予め生成された（即ち、静的な）データやスクラッチパッド（即ち、動的な）データ等の、プログラム命令を動作させつつ生成されたデータを記憶する。しかしながら、メモリ又は複数のメモリに命令やデータを記憶するための他の構成を用いてもよい。
【００２３】
プログラムキャッシュ１０は、命令がプログラム制御ユニット８によって用いられる場合に命令へのアクセスが更に容易になるように、プログラムメモリユニット３から検索されたプログラム命令に一時的な記憶場所を提供する。プログラムメモリユニット３は、長期メモリユニットであってもよく、一方、プログラムキャッシュ１０は、短期メモリユニットであってもよい。データメモリユニット２、プログラムメモリユニット３、及びプログラムキャッシュ１０としては、例えば、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、フラッシュメモリ、キャッシュメモリ、揮発性メモリ、不揮発性メモリ又は他の適切なメモリユニット又は記憶ユニットが挙げられる。データメモリユニット２、プログラムメモリユニット３、及びプログラムキャッシュ１０は、別個の又は一体化したメモリユニットとして実現する。データメモリユニット２、プログラムキャッシュ１０及びプログラムメモリユニット３の少なくとも一つは、一体化したり（オンチップ）、別個（即ち、オフチップ）にしたりしてもよい。多重レベルメモリ又はメモリ階層構造が存在する一実施形態では、プログラムメモリユニット３は、オフチップであってもよく、プログラムキャッシュ１０及びデータメモリユニット２の少なくとも一つは、オンチップであってもよく、例えば、Ｌ−１キャッシュ（例えば、プロセッサクロックレートとは異なるレートで動作する）又はＬ−２キャッシュ（例えば、Ｌ−１キャッシュより比較的一体化が進んでおり、通常、プロセッサクロックレートで動作する）であってもよい。他の又は追加のメモリアーキテクチャも用いる。
【００２４】
プロセッサ１には、プログラム制御ユニット８を含む。プログラム制御ユニット８は、プログラムメモリユニット３から命令を要求し、検索し、かつディスパッチでき、さらに一般的に、プログラム・パイプライン・フローを担う。プログラム制御ユニット８には、データメモリバス４に接続されたデータメモリコントローラ（図示せず）と、プログラムメモリバス５に接続されたプログラムメモリコントローラ（図示せず）とを、それぞれデータメモリユニット２及びプログラムメモリユニット３からデータを検索するために含む。
【００２５】
プログラム制御ユニット８には、フェッチユニット１２、割込みユニット１３、及び分岐メカニズム１４を含む。フェッチユニット１２は、プログラムメモリユニット３からプログラム命令を検索又はフェッチして、プログラム制御ユニット８によって用いるために要求されるまで、命令をプログラムキャッシュ１０に保存する。フェッチユニット１２は、命令をディスパッチする前に、ローカル待ち行列に命令をフェッチするために用いる。分岐メカニズム１４は、分岐命令を検出し、分岐命令の結果を予測し、かつ分岐命令の予測された結果に基づき、フェッチユニット１２を介してプログラムメモリユニット３から後続の命令を要求する。割込みユニット１３は、現プロセスの割込みを行い、例えば、他の高優先度の処理を開始する。
【００２６】
プロセッサ１には、復号ユニット６、ロード／ストアユニット７、一以上のレジスタファイル９、及び実行ユニット１１を含む。一旦、命令がプログラム制御ユニット８によってディスパッチされると、復号ユニット６は、命令を復号する。プロセッサ１は、レジスタファイル９を用いてタグを実現して、例えば、同じ演算サイクルにおいて、要求に応じて、復号された命令に効率的にアクセスする。実行ユニット１１は、命令を実行する。ロード／ストアユニット７は、データメモリユニット２との間でロード／ストア動作を実施する。
【００２７】
プロセッサ１は、例えば、各命令について、以下の一連のパイプラインステージを実行する。
・ＩＦ１−プログラムメモリアドレス（プログラム制御ユニット８によって動作）
・ＩＦ２−プログラムメモリをフェッチ（フェッチユニット１２によって動作）
・Ｄ１−命令ディスパッチ（プログラム制御ユニット８によって動作）
・Ｄ２−命令復号（復号ユニット６によって動作）
・Ｄ３乃至Ｄ４−レジスタファイル読み出し（レジスタファイル９を用いる）
・Ｅ１乃至Ｅ４−実行、データメモリアクセス、及びレジスタファイル書き戻し（実行ユニット１１、ロード／ストアユニット７、及びレジスタファイル９によって動作）
他の又は追加のパイプラインステージ及び動作装置構成要素を用いてもよい。
【００２８】
一連の命令を含むプロセスでは、将来処理される命令は、事前に分かっており、フェッチユニット１２は、プロセッサが命令をディスパッチする準備が整う前に、各命令がフェッチされるように、先制して命令を検索する。フェッチされた命令は、一時的にプログラムキャッシュメモリ１０に記憶されるたりプログラムメモリ３よりアクセスがかなり速いローカル待ち行列に記憶されるたりする。
【００２９】
しかしながら、条件分岐命令の後に続く命令は、命令がフェッチされようとする時には、まだ分かっていない分岐条件に依存する。例えば、分岐命令は、分岐条件の結果に応じて、任意の多数の異なる命令又は処理経路に進む。
【００３０】
分岐メカニズム１４は、命令が分岐命令であるかどうか、例えば、命令の処理の復号ステージ（Ｄ２）において識別する。命令が分岐命令である場合、多数の可能な後続の命令の内の正しいものが、命令が検索されようとしている時に、既知でないならば、分岐メカニズム１４は、どの命令が分岐命令に続く可能性が最も高いか予測する。分岐対象バッファ（ＢＴＢ：branch target buffer）１６は、予測を行うために用いられるデータを記憶する。ＢＴＢ１６は、バッファ又は一時的メモリユニットであってもよく、これは、プログラムキャッシュ１０とは別個であっても、一体化されても、又は、その一部であってもよい。
【００３１】
予測された分岐命令が、実際の分岐命令と合致する場合、予測された命令を用いてもよく、分岐誤予測ペナルティはゼロである。
しかしながら、予測された分岐命令が実際の分岐命令と合致しない場合、実際の分岐命令は、プログラムメモリ３からフェッチする。従って、分岐メカニズム１４が分岐結果を誤予測する度に、プロセスは、プログラムメモリ３から正しい命令をフェッチするという、例えば、３サイクル（ＩＦ１乃至Ｄ１）の時間遅延及び演算ペナルティを被る。この時間遅延又はサイクル数は、異なるプロセッサ１のパイプラインに対して変わる。
【００３２】
本発明の実施形態によれば、一旦、正しい命令が、プログラムメモリ３から検索され、命令を廃棄する代わりに、それらをフェッチために用いられた計算労力を無駄にする代わりに用いられると、正しい分岐命令は、誤予測されたが、書き込まれたり、保存されたり、後で用いるために分岐誤予測バッファ（ＢＭＢ）１７に記憶されたりする。ＢＭＢ１７は、予測されなかった正しい分岐命令を蓄積する。プログラムは、初期的にプログラムメモリ３からこれらの命令を検索する一回限りの誤予測ペナルティを招くが、後続の誤予測時に用いるために、それらを保存することによって、同じ命令を検索するための誤予測ペナルティは、その後、回避される。
【００３３】
一連のプログラム命令の動作時、第１の状況では、分岐メカニズム１４は、分岐命令の後に続く正しい命令を予測し、正しい後続の命令は、プログラムメモリ３から既に検索されている。そして、正しい後続の命令を用いる。この場合、誤予測はなく、誤予測ペナルティはゼロである。
【００３４】
第２の状況では、分岐メカニズム１４が誤予測を行い、分岐命令の後に続く誤った命令を予測する。一旦、分岐命令の後に続く命令が分かると、プロセッサ１は、ＢＭＢ１７からの命令の検索を試行する。プロセッサ１は、プログラム制御ユニット８がプログラムメモリ・サブシステムから新しい命令をフェッチするのと同時に、ＢＭＢ１７が誤予測命令を含むかどうかチェックする。分岐命令が分かった後でのみ、プロセッサ１は、予測された命令と誤予測命令との間の選択を行う。正しい命令が、前回のプログラム分岐において、誤予測命令であった場合、命令は、既にＢＭＢ１７に記憶されているはずである。従って、プログラムメモリ３から正しい命令を検索する代わりに、プロセッサ１は、ＢＭＢ１７から正しい命令を検索する。従って、分岐誤予測であっても、正しい分岐命令が前回の正しい誤予測命令であった場合、プログラムメモリ３から命令を検索するための誤予測ペナルティは、ゼロである。誤予測ペナルティが、正しい予測についてはゼロであり、誤予測についてはゼロ以外（例えば、３演算サイクル）である他の方法とは対照的に、本発明の実施形態によれば、誤予測ペナルティは、正しい分岐予測及び正しくない分岐予測双方についてゼロである。
【００３５】
ＢＭＢ１７は、ディスパッチされた命令を記憶する（Ｄ１パイプラインステージにおいて）。他の選択肢として、ＢＭＢ１７の命令は、パイプラインプロセスの他のステージにおいて記憶する（例えば、ＩＦ２又はＤ２）。ＢＭＢ１７は、通常、プログラムキャッシュ１０より小さいことから、ＢＭＢ１７は、プログラムキャッシュ１０よりも更にアクセスが容易である。ＢＭＢ１７は、分岐メカニズム１４と物理的に一体化する。
【００３６】
図２−４を参照すると、これらは、本発明の実施形態による分岐命令によって開始されるプロセッサ動作を示す表である。
図２−４において、表中の各行は、単一の命令のプロセッサパイプラインステージを示す。（列１に列挙された）命令は、処理する順番に、即ち、命令が最初にプロセッサパイプラインに（動作ＩＦ１において）投入する順番に、一連の行に順序よく並べられる。一連の各列は、一連の各演算サイクルにおいて生じる命令で実行される動作を示す。即ち、一旦、各行の命令が最初にプロセッサパイプラインに入ると、一連の各列において、プロセッサは、命令により一連の動作、例えば、プログラムメモリアドレス指定（ＩＦ１）、フェッチ処理（ＩＦ２）、ディスパッチ処理（Ｄ１）、復号処理（Ｄ２）、レジスタファイル読み出し（Ｄ３乃至Ｄ４）、実行、データメモリアクセス、及びレジスタファイル書き戻し（Ｅ１乃至Ｅ４）を実行する。他の又は追加の動作を用いてもよい。
【００３７】
図２において、分岐予測器は、分岐命令ＢｒａｎｃｈＡ、Ｂが、正しい命令Ｂの代わりに、命令Ａに分岐すると誤予測する。即ち、条件付き命令ＢｒａｎｃｈＡ、Ｂの分岐条件は、その条件に対する静的な予測と合致しない。しかしながら、図において、誤予測された正しい分岐命令Ｂは、ＢＭＢに記憶されるため、分岐誤予測に対するペナルティが存在しない。
【００３８】
表中の右上のセル（行１、列１）は、“ＢｒａｎｃｈＡ、Ｂ”と表記された命令を示す。命令ＢｒａｎｃｈＡ、Ｂは、プログラムにおける一連の命令中の命令であってもよい。命令ＢｒａｎｃｈＡ、Ｂは、第１アドレスに記憶してもよく、例えば、任意に１０１として示してもよい。命令ＢｒａｎｃｈＡ、Ｂは、分岐命令であってもよく、例えば、命令Ａ又は命令Ｂのいずれかの次に進む命令を提供するが、このことは、その命令が復号されるまで未知である（動作Ｄ２において）。ＢｒａｎｃｈＡ、Ｂに続く次の命令（例えば、三つの遅延スロットの後）は、予測された命令と誤予測命令とを比較することによって判断でき、通常、ＢｒａｎｃｈＡ、ＢがパイプラインステージＥ１を完了した後にのみ分かる。図の例は、静的な予測に依存しない。このように、アドレスＡ又はＢのいずれかは、次の一連のアドレスであってもよい。命令Ａは、第２アドレスに記憶され、例えば、任意に２０１と示してもよく、命令Ｂは、第３アドレスに記憶され、例えば、任意に３０１と示してもよい。
【００３９】
プログラム処理中、命令ＢｒａｎｃｈＡ、Ｂは、例えば、パイプラインステージＩＦ１（行１、列４）において、プロセッサパイプラインに投入される。パイプラインステージＩＦ１では、プロセッサは、プログラムメモリアドレスにアクセスして、プログラムメモリ中のアドレス１０１に記憶された命令ＢｒａｎｃｈＡ、Ｂを特定する。
【００４０】
命令ＢｒａｎｃｈＡ、Ｂは、次の一連のステージＩＦ２（行１、列５）、Ｄ１（行１、列６）、そして、Ｄ２（行１、列７）に進む。パイプラインステージＤ２において、プロセッサは、命令ＢｒａｎｃｈＡ、Ｂを復号して、ＢｒａｎｃｈＡ、Ｂが分岐命令であることを検出する。動作Ｄ２において分岐命令を検出する場合、例えば、３演算サイクルを用いてもよい（ＩＦ１−Ｄ１）。遅延スロット（例えば、三つのスロット、ｄｓ１、ｄｓ２、及びｄｓ３）は、命令ＢｒａｎｃｈＡ、Ｂが復号されるまで、パイプラインサイクルを遅延させるために用いる。
【００４１】
分岐メカニズムは、動作Ｄ２（行１、列７）において、命令ＢｒａｎｃｈＡ、Ｂが分岐命令であると判断する。分岐予測器は、分岐がアドレス２０１において命令Ａに進むと予測する。従って、命令Ａは、例えば、パイプラインステージＩＦ１（行５、列８）において、プロセッサパイプラインに投入でき、次のパイプラインステージＩＦ２（行５、列９）でプログラムメモリからフェッチする。
【００４２】
命令Ａは、プログラムメモリからアクセスされるが（行５、列８）、ＢＭＢは、同時にアドレス３０１における予測されなかった命令Ｂについて、例えば、命令Ｂキャッシュタグと合致するＢＭＢキャッシュタグの有無をチェックすることによって検索する（行１５、列８）。この状況では、アドレス３０１（命令Ｂが常駐する）がキャッシュタグに存在し、タグ比較でヒットフラグがアサートされる（行１６、列８）。一実施形態において、キャッシュタグは、レジスタ（例えば、ＲＡＭではない）に実装して、ヒットフラグを同じ演算サイクルで利用可能になる（列８に対応）。キャッシュにおいてヒットすることから（行１６、列８）、ＢＭＢは、命令Ｂデータの抽出に進む。
【００４３】
後続の演算サイクルにおいて（列９に対応）、命令Ｂが整合すると分かったタグに対応するキャッシュアドレスは、ＢＭＢに適用する。次のサイクルでは、命令Ｂは、ＢＭＢから検索する（行１９、列１０）。命令は、（前回の分岐命令に対してＤ１パイプラインステージにおいて）ディスパッチされた後、ＢＭＢに記憶する。従って、命令Ｂは、ＢＭＢから読み出された後（行１９、列１０）、パイプラインの復号ステージＤ２に進む（行１４、列１１）。
【００４４】
命令ＢがＢＭＢから検索される間、プロセッサは、分岐予測が正しいと仮定して、命令Ａ及びＡの後に続く命令、即ち、Ａ＋１、Ａ＋２、…の処理を継続する。分岐予測が正しい場合、ＢＭＢから検索された命令Ｂは、用いられない。予測された命令Ａ、Ａ＋１、Ａ＋２、…は、通常、少なくとも分岐条件が分かるまで処理される。
【００４５】
命令ＢｒａｎｃｈＡ、Ｂが、Ｅ１パイプラインステージ（行１、列１０）を完了する間に、分岐条件が分かり、従って、実際の分岐方向が分かる。条件結果が示すことは、この場合、予測された分岐命令Ａが誤っており、従って、プロセスが、代わりに、命令Ｂに進むべきであることである。その結果、次のサイクルの復号ステージＤ２（行５、列１１）において、プロセッサは、命令Ａの投入をＢＭＢからの正しい分岐命令Ｂで置き換える（行１４、列１１）。
【００４６】
後続の二つのサイクルでは、命令Ｂ＋１及びＢ＋２が、ＢＭＢから読み出され（行１９、列１１及び１２）、復号ステージにおいて、それぞれ命令Ａ＋１及びＡ＋２で置き換えるために用いられる（行１４、列１２及び１３）。命令Ａ、Ａ＋１、Ａ＋２は、それぞれＢ、Ｂ＋１、Ｂ＋２によって、Ｄ２−＞Ｄ２によって示される各一連の復号ステージＤ２（行５、列１１）、（行６、列１２）、及び（行７、列１３）において置き換えられる。予測された命令Ａ（プログラムメモリから）及び予測されなかった命令Ｂ（ＢＭＢから）は、同じ演算サイクルにおいて、双方共利用可能であり、ディスパッチされることから（列１０に対応）、如何なる誤予測に対する演算ペナルティ又は時間遅延もなく、分岐誤予測において、予測された命令Ａを予測されなかった命令Ｂでの置き換えが行われる。
【００４７】
図３において、これらの動作が行われるのは、図２と同様に、分岐命令ＢｒａｎｃｈＡ、Ｂが、正しい命令Ｂの代わりに命令Ａに分岐すると、分岐予測器が誤予測する場合である。しかしながら、図２とは対照的に、正しい分岐命令Ｂは、ＢＭＢに記憶されない。この状況では、命令Ｂは、ＢＭＢに追加でき、このように、ＢＭＢは、後続の誤予測時に用いるための命令で満たす。
【００４８】
分岐メカニズムは、命令ＢｒａｎｃｈＡ、Ｂが、動作Ｄ２において分岐命令であると判断する（行１、列７）。分岐予測器は、分岐がアドレス２０１において、命令Ａに進むと予測する。従って、命令Ａは、例えば、パイプラインステージＩＦ１（行５、列８）において、プロセッサパイプラインに投入でき、次のパイプラインステージＩＦ２において、プログラムメモリからフェッチする（行５、列９）。
【００４９】
命令Ａがプログラムメモリからフェッチされる（行５、列８）間に、ＢＭＢは、同時にアドレス３０１において、予測されなかった命令Ｂについて、例えば、命令Ｂキャッシュタグと合致するＢＭＢキャッシュタグの有無をチェックすることによって（行１７、列８）、検索される。この状況では、図２と対照的に、アドレス３０１（命令Ｂが常駐する）は、キャッシュタグには存在せず、タグ比較によって、ミスフラグをアサートする（行１８、列８）。一実施形態において、キャッシュタグは、レジスタ（例えば、ＲＡＭではない）に実装して、ミスフラグを同じ演算サイクルにおいて利用可能にする（列８に対応）。キャッシュに誤りがあることから（行１８、列８）、ＢＭＢは、例えば、消費電力を最小限に抑えるために、通常、タグ又はＢＭＢデータにアクセスしない。
【００５０】
プロセッサは、分岐予測が正しいと仮定して、命令Ａ及びＡの後に続く命令、即ち、Ａ＋１、Ａ＋２、…のフェッチ及びディスパッチを継続する。分岐予測が正しい場合、ＢＭＢキャッシュ誤り（行１６、列８）は、重要ではなく、キャッシュ誤りに対する演算ペナルティがない。
【００５１】
命令ＢｒａｎｃｈＡ、Ｂが、Ｅ１パイプラインステージを完了する（行１、列１０）と、分岐条件が分かり、従って、実際の分岐方向が分かる。条件結果は、この場合、予測された分岐命令Ａが誤っていることを示しており、従って、プロセスは、命令Ａ及びＡの後に続く命令、即ち、Ａ＋１、Ａ＋２、…（それぞれ、列１０、行５、６、及び７）が、Ｄ２復号ステージにおいて復号される前に、それらを“キル”する。
【００５２】
その結果、復号ステージＤ２の入力は、ＢＭＢからの正しい分岐命令Ｂであるはずである。しかしながら、命令ＢはＢＭＢに存在しないことから、復号ステージＤ２の入力は、命令Ｂが得られるまで、例えば、３演算サイクルの間、存在しない（行１６、列８、９、及び１０）。
【００５３】
プロセッサは、プログラムメモリから命令Ｂをフェッチする（行８、列１１）。命令Ｂのアドレス３０１は、命令Ｂ、Ｂ＋１、Ｂ＋２がＢＭＢに記憶されるのに備えて（それぞれ行１９、列１３、１４、１５）、タグとしてＢＭＢに書き込む（行１７、列１３）。
【００５４】
各命令Ｂ、Ｂ＋１、Ｂ＋２は、フェッチし（それぞれ行８、９、１０、それぞれ列１２、１３、１４）、ディスパッチする。ディスパッチされた命令パケットＢ、Ｂ＋１、Ｂ＋２は、ＢＭＢアドレスにおいて、ＢＭＢに書き込むことができ（それぞれ行２０、列１３、１４、１５）、例えば、最長時間未使用（ＬＲＵ）置換法に基づき、例えば、ＢＭＢに配置する。同一のディスパッチされた命令パケットＢ、Ｂ＋１、Ｂ＋２は、同時にディスパッチパイプラインステージＤ１に投入される（それぞれ行８、９、１０、それぞれ列１３、１４、１５）。次の演算サイクルにおいて、プロセッサは、ディスパッチされた命令パケットＢ、Ｂ＋１、Ｂ＋２をＤ２ステージにおいて、復号する（それぞれ行８、９、１０、それぞれ列１４、１５、１６）。
【００５５】
従って、分岐誤予測時、予測されなかった分岐命令は、例えば、まだ記憶されていなければ、ＢＭＢに記憶する。このように、プロセッサは、正しい分岐命令でＢＭＢを満たすが、これらの命令は、誤って予測されなかったものである。一旦、ＢＭＢに記憶されると、これらの分岐命令は、図２を参照して述べたように、将来の分岐誤予測時に用いる。
【００５６】
正しい分岐命令Ｂが、プログラムメモリから検索されず（即ち、正しくない予測された命令Ａだけが検索され）、その命令が、ＢＭＢにおいて利用不可能であった（前回の誤予測での分岐ではなかった）ことから、プロセッサは、プログラムメモリ・サブシステムから命令Ｂを検索する（行８、列１１、１２、及び１３）。プログラムメモリ・サブシステムからの命令Ｂの検索には、追加の、例えば、三つの演算サイクルを用いることがあり、従って、プログラムプロセスは、誤予測ペナルティを招く。
【００５７】
上述した実施形態において、ディスパッチされる命令Ａ及びＢは、同じサイクルにおいて、例えば、図２では、条件分岐命令ＢｒａｎｃｈＡ、Ｂの結果に依存して、復号される準備が同時に整っているそれぞれ（行５、列１０）及び（行１９、列１０）において、利用可能である。しかしながら、他の選択肢としての一実施形態では、命令Ａ及びＢは、異なるサイクルでディスパッチしたり、誤予測履歴、ペナルティ、又は他の判断基準に応じて処理したりしてもよい。
【００５８】
上述した本実施形態では、プロセッサ１は、命令がディスパッチされた後、それらをＢＭＢに（Ｄ１パイプラインステージにおいて）記憶し、他の一実施形態では、プロセッサ１は、パイプラインプロセスの他のいずれかの又は追加のステージにおいて、命令を記憶する。
【００５９】
上記実施形態において、分岐誤予測時、ＢＭＢは、正しい予測されなかった分岐命令を記憶する。他の選択肢として又は追加として、正しい分岐予測時、ＢＭＢ又は別個のメモリユニットは、正しい予測された分岐命令を記憶する。
【００６０】
また、ＢＭＢ又は別個のメモリユニットは、各命令入力項目に対応する統計データをＢＭＢに記憶する。統計データには、例えば、命令が（例えば、どの命令が最長又は最短時間未使用であったかに基づき、命令を順序良く並べるために）用いられる演算サイクル等の使用頻度履歴データと、（例えば、ＢＭＢに命令を記憶すべきかどうか判断するために、又は、命令の合計もしくは平均使用頻度に基づき、ＢＭＢに命令を順序良く並べるために）命令が誤予測された割合又は回数と、（例えば、命令のサイズに基づき、命令を順序良く並べるための）命令のサイズと、を含む。
【００６１】
本発明の一実施形態において、ＢＭＢ１７は、所定のしきい値より大きい誤予測割合を有する分岐用の誤予測を記憶する。しきい値は、演算プラットホームの演算効率パラメータを満足するように、例えば、各分岐又はプロセスについてＢＭＢ１７に記憶された命令の成功又は使用頻度履歴対ＢＭＢ１７に命令を記憶するメモリ及び演算コストに基づき、予め自動的に決定する。他の選択肢として、所定のしきい値は、例えば、３０乃至５０％より大きくなるように、プログラマによって手動で又は半自動的に設定してもよい。誤予測割合が、充分に小さいか又は特定の分岐又はプロセス用の所定のしきい値より小さい場合、プロセッサは、その分岐又はプロセスについて、誤予測命令を記憶しなくてもよい。例えば、分岐又はプロセスについて、分岐誤予測ペナルティの平均の減少が、例えば、指定されたサイクル数より小さい場合、誤予測命令は、ＢＭＢ１７に記憶しなくてもよい。
【００６２】
本発明の一実施形態において、分岐メカニズム１４は、統計的に最も起こる可能性が高い命令の代わりに、ＢＭＢ１７に既に記憶された命令をどの命令が補足するかに基づき、命令を部分的に又は完全に予測する。例えば、分岐メカニズム１４は、ＢＭＢ１７を検索したり、記憶された潜在的な未知の分岐命令のいずれかを探したり、ＢＭＢ１７に既に記憶されているものがある場合、分岐予測ユニットは、ＢＭＢ１７に記憶されていない命令を予測する、即ち、統計的に高い可能性で予測する。このように、プロセッサ１は、命令が、ＢＭＢ１７に既に記憶された命令に対して新しいように又はそれらと重複しないように、プログラムメモリ３から命令を検索する。
【００６３】
プログラムが開始され、誤予測がない場合、ＢＭＢ１７は、空である。プログラムが動作するにつれて、各（又は他の選択肢として、一部のみの）分岐誤予測について、誤予測命令を追加してＢＭＢ１７を満たす。ＢＭＢ１７は、例えば、プログラマによって決定された固定の又は最大のサイズ、又は、例えば、ＢＭＢ１７使用頻度履歴に基づき、自動的に決定される可変サイズを有する。ＢＭＢ１７のサイズが小さければ小さいほど、その使用頻度は効率的である。しかしながら、ＢＭＢ１７のサイズが大きければ大きいほど、記憶する命令の数は多くなる。
【００６４】
誤予測時、従来のプロセッサは、プログラムメモリから正しい誤予測命令をフェッチする。そして、プロセッサは、プログラムキャッシュに命令を記憶するが、ここで、命令は、待ち行列に入れられ、ディスパッチされる。命令にアクセスするために、プロセッサは、タグアレイにアクセスし、タグ比較を実施し、プログラムキャッシュにアクセスして、命令を読み出す。このプロセスは、比較的大量のプロセッサ電力を消費する。特に、例えば、“超長命令語”（ＶＬＩＷ）パケット等の大きなデータパケットが用いられる場合、ＶＬＩＷプロセッサは、ＶＬＩＷパケットを検索し、ＶＬＩＷパケットを送出するように、待ち行列に格納するか又はパケットをバッファに入れる。送出された後、ＶＬＩＷパケットは、実行ユニットにディスパッチされ、ディスパッチされた後にのみ、復号され、実行される。従来のシステムでは、この広範囲にわたる一連の動作は、分岐誤予測がある度に、実行される。本発明の実施形態によれば、分岐誤予測がある場合でも、正しい命令が前回誤予測されていれば、正しい命令は、既にＢＭＢ１７に記憶されている。従って、正しい命令が、迅速にＢＭＢ１７から検索され、上記広範囲にわたる一連の動作は、例えば、全面的に又は少なくとも部分的に省いてもよい。
【００６５】
図４は、四つの図、図４Ａ−ｉ、４Ａ−ｉｉ、４Ｂ−ｉ、及び４Ｂ−ｉｉを含んでおり、これらは、一緒に表示して四つの象限に配置すべきものであり、図４Ａ−ｉは右上の象限、図４Ａ−ｉｉは右下の象限、図４Ｂ−ｉは左上の象限、及び図４Ｂ−ｉｉは左下の象限に配置する。
【００６６】
図４は、本発明の実施形態によるループ命令によって開始されたプロセッサ動作を示す。ループ命令（例えば、ｂｒｌｏｏｐ＿ｗｒｉｔｅ）（行１、列１）は、可能な分岐経路の内の一つが前回の命令を繰り返し、これによって、ループ又は一連の繰り返し命令が生じる特別な種類の分岐命令である。本実施形態では、分岐ループ命令は、無条件分岐ループ命令も用いるが、条件付きである。
【００６７】
本発明の実施形態には、ＢＭＢ１７をループバッファとして用いるためのシステム及び方法を含む。ＢＭＢ１７は、ループ命令が、プログラムメモリ３からよりもむしろ局所的にアクセスするように、ループ命令の記憶専用であってもよい。ループ命令は、ループシーケンスの一部ではない他の非繰り返し命令よりも更に頻繁に用いることから、プログラムメモリ３よりもむしろＢＭＢ１７に局所的にループ命令を記憶すると、プログラムメモリ３にアクセスするために用いられる消費電力が減少し、他の非繰り返し命令の場合よりも、それらの命令を更に待ち行列に入れ、並べ／ディスパッチする。
【００６８】
分岐ループ命令“ｂｒｌｏｏｐ＿ｗｒｉｔｅ”（行１、列１）は、命令ループ中の命令パケットの数ｎ（例えば、ｎ＝６）を示す。命令“ｎｏｐ”は、プロセッサパイプラインの待ち時間による無動作を示す。プロセッサ１は、命令（例えば、ｃｈｉｐ＿ｓｅｌｅｃｔ及びｗｒｉｔｅ＿ｅｎａｂｌｅ命令）を用いて、命令ループの最初のｎ−１命令パケットをＢＭＢ１７に書き込む。ＢＭＢ１７には、ループ中の最後のｎ番目の命令パケットが書き込まれる専用のレジスタ（例えば、ｂｒｌｏｏｐ＿ｌａｓｔ＿ｉｒ＿ｒ）を含む。ループ中の最後の命令パケットが、専用レジスタに書き込まれている間に、ループ中にもう命令がないことが分かり、ループ中の第１命令パケットは、ＢＭＢ１７から自動的に同時に検索する。
【００６９】
命令をＢＭＢ１７に書き込むためには、パケット数が復号される（行１、列６）場合、プロセッサ１は、ＢＭＢ１７において、一以上のレジスタを更新して、命令パケットの数（例えば、ｎ＝６）をＢＭＢ１７のそれぞれの登録項目に書き込む（行３０、列７−１２）。タグアドレス命令を用いて、ＢＭＢ１７タグアレイを更新する（行２７）が、その間、キャッシュインデックス命令を用いて、ＢＭＢ１７キャッシュアレイを更新する（行３０）。各ＢＭＢ１７入力項目は、一以上の（例えば、四つの）命令パケットを保持する。例えば、第１のＢＭＢ１７入力項目は、ループＡ１−Ａ４中の第１の四つの命令パケットで埋めてもよい（行３０、列７−１０）。対応するタグアドレスは、各ＢＭＢ１７入力項目についてＢＭＢ１７に書き込む（行２７、列７）。命令ループが五つ以上の命令を含む場合、プロセッサ１は、ＢＭＢ１７レジスタを更新して、次の（最大）四つの命令パケットＡ５で満たされる次のＢＭＢ１７入力項目を見つけて（行３０、列１１）、それに応じて、対応するタグアドレスを書き込む（行２８、列１１）。プロセッサ１は、最後の命令６以外の全てがＢＭＢ１７に書き込まれるまで、この処理を継続する（行３０、列１１）。プロセッサ１は、各第４番目の命令についてタグ比較を実施して、次のＢＭＢ１７入力項目のアドレスを見つけて（行２８、列１２）、ＢＭＢ１７から命令を検索する（行３１、列１３、１４、…）。
【００７０】
本発明の幾つかの実施形態において、命令は、最長時間未使用法（ＬＲＵ）アルゴリズムに基づく順番で、ＢＭＢ１７に書き込まれる。ＢＭＢ１７には、レジスタと、ＬＲＵアルゴリズムに基づき順序よく並べられた対応する登録項目と、を含む。
【００７１】
分岐ループ（ｂｒｌｏｏｐ）命令Ａ４（行６、列１）（二つの遅延スロット５及び６付き、行７及び８、列１）は、選択されたか又は選択されなかったか予測する。予測され選択されたアドレス１０２は、“予測されなかった分岐対象アドレス”又は“ＰＴＡＤＤＲ＿Ｒ”レジスタに書き込まれ（行４３、列１２）、ＢＭＢ１７のタグアレイを検索するために用いる（行２６、列１２）。分岐ループ命令４Ａが選択された場合、ループ命令は、プログラムメモリ３からの代わりに、ＢＭＢ１７からアクセスして、消費電力を低減する。選択されなかったアドレス１０８は、通常、最後のループ反復の終了時点においてのみ又は分岐が正しく予測されない終了条件においてのみ用いられる。反復の最後のループ（行２５、列２６）は、終了条件がある場合又は分岐が正しく予測されない場合である。
【００７２】
割込みユニット１３は、現プロセス（図示せず）に割込み、例えば、他のプロセスを開始して、部分的に処理された分岐命令データを破壊することが多い。割込みユニット１３は、プロセッサ１がループ命令をＢＭＢ１７に書き込む間、ディセーブル状態にする。また、割込みユニット１３は、プロセッサ１がＢＭＢ１７から命令を読み出す間、ディセーブル状態にする。一つの例外では、割込みは、最後の命令パケットを読み出す間、例えば、命令ループの各反復において、許容される。そのような割込みが許容された場合、分岐命令が選択された場合、リターンレジスタには、ＰＴＡＤＤＲ＿Ｒレジスタのプログラムアドレスを書き込む（行４３、列１２、１８、２４）。また、分岐が選択されなかった場合、リターンレジスタには、プログラムカウンタ又は“ｐｓｅｑ＿ｐｃ”からのプログラムアドレスを書き込む。ＢＭＢ１７は、ロックして、プログラマにＢＭＢ１７登録項目の置き換えを制御させる。
【００７３】
ループバッファの状態は、インデックス、フラグ、又は他のマーカーによって追跡する。“ｂｕｆ＿ｖａｌｉｄ”フラグは、ループ中の全ての命令がＢＭＢ１７に書き込まれていたりＢＭＢ１７において入手可能であったりする時、設定する。ｂｕｆ＿ｖａｌｉｄフラグは、いずれかのループ命令がＢＭＢ１７において置き換えられた時、クリアする。“ｂｕｆ＿ａｃｔｉｖｅ”フラグは、プロセッサ１がＢＭＢ１７から命令にアクセスした時、設定する。ｂｕｆ＿ａｃｔｉｖｅフラグは、ｂｒｌｏｏｐ＿ｗｒｉｔｅ命令に遭遇した後、設定でき、ループ命令は、ＢＭＢ１７に書き込まれる。ｂｕｆ＿ａｃｔｉｖｅフラグは、分岐が選択された場合、或いは呼出し又は割込みに遭遇した場合、クリアする。
【００７４】
ループバッファの状態は、異なるフラグ組合せによって示す。例えば、ｂｕｆ＿ｖａｌｉｄ及びｂｕｆ＿ａｃｔｉｖｅは、以下の四つの各異なる状態を示す。
・ｂｕｆ＿ｖａｌｉｄがクリアされ、ｂｕｆ＿ａｃｔｉｖｅがクリアされる場合、プログラムカウンタは、ＢＭＢ１７の範囲外にある命令にアクセスする。この状況では、命令は、プログラムメモリ３からフェッチする。
・ｂｕｆ＿ｖａｌｉｄがクリアされ、ｂｕｆ＿ａｃｔｉｖｅが設定される場合、命令は、プログラムメモリ３からフェッチして、ＢＭＢ１７に書き込む。
・ｂｕｆ＿ｖａｌｉｄが設定され、ｂｕｆ＿ａｃｔｉｖｅが設定される場合、命令は、ＢＭＢ１７から直接フェッチする。
・割込み又は選択された分岐により、ＢＭＢ１７の範囲外にあるプログラムアドレスにプログラムカウンタがジャンプした場合、ｂｕｆ＿ｖａｌｉｄが設定され、ｂｕｆ＿ａｃｔｉｖｅがクリアされる。この状況では、命令は、プログラムメモリ３からフェッチされる。サブルーチン又は割込みから戻る際、ｂｕｆ＿ａｃｔｉｖｅを設定する（又は他の選択肢として、一旦、ｂｒｌｏｏｐ＿ｗｒｉｔｅ命令に遭遇した時のみ、ｂｕｆ＿ａｃｔｉｖｅを設定する）。
【００７５】
図４は、六つの命令パケットＡ１−Ａ６付きのループを有するプロセスの例を示す（行３−８、列１）。本例において、ループ（ｂｒｌｏｏｐ＿ｗｒｉｔｅ）の分岐命令は、条件付きである。しかしながら、本発明の実施形態は、無条件である、即ち、常に選択される分岐ループ命令にも同様に適用可能であることが当業者によって認識されるであろう。
【００７６】
図４は、ＢＭＢ１７への書き込み処理（行３０）と、ループの反復時のＢＭＢ１７からの読み出し（行３１）と、ループからの終了（ループカウンタが負になったか又は分岐条件が誤っているかのいずれかによる）と、を示す。ループ終了は、行２５、列２６見られ、この場合、デコーダ入力がアドレス１０８の“次の命令”（ＮＩ）で動作しており、これは、ループ命令ではない。また、ループ終了は、行２９、列２６に見られ、この場合、ＢＭＢ１７がループ命令についてもはやアクセスされない。
【００７７】
ループの第１反復時、命令は、実行され、同時にＢＭＢ１７に書き込まれる。後続の反復中、命令は、プログラムメモリ３、待ち行列、及びディスパッチャがアイドル状態である間、ＢＭＢ１７からアクセスされる。最後の反復の終了時点で、プログラムメモリ３、待ち行列、及びディスパッチャは、ループの後に来る次の一連の命令パケットで、例えば、アドレス１０８、１０９、１１０、・・・で動作し始める。
【００７８】
ＢＭＢ１７には、バッファ、キャッシュ、又は後続の誤予測もしくはループの反復時のアクセスのために、別個のキャッシュに誤予測又はループ命令を記憶する他のメモリ構造を含む。ＢＭＢ１７は、通常、分岐結果の履歴に依拠せずに将来予測を行い、これによって、静的及び動的双方の分岐予測法の制限が克服される。他の実施形態では、ＢＭＢ１７は、全面的に又は部分的に分岐予測履歴を考慮して、将来の予測を行う。
【００７９】
ＢＭＢ１７は、通常、ソフトウェア指示に依拠しない。しかしながら、幾つかの実施形態では、ソフトウェア指示は、ＢＭＢ１７に命令を予めロードするために用いる。ＢＭＢ１７は、プログラマに対して完全に又は部分的にトランスペアレントである。ＢＭＢ１７は、完全に又は部分的に連携するキャッシュを用いて、分岐対象アドレスに命令を記憶する。これらの命令は、命令ループ中又は分岐予測器が正しくない予測を行う時、自動的に検索する（例えば、分岐誤予測時、オーバーヘッド無しを達成する）。
【００８０】
図５を参照すると、本図は、本発明の実施形態による方法のフローチャートである。
動作５００時、プロセッサは、条件分岐命令を復号する。
動作５１０時、分岐予測ユニットは、分岐に続く後続の命令を予測する。
【００８１】
動作５２０時、フェッチユニットが、予測された命令をプログラムメモリから検索する。
動作５２５時、プロセッサは、予測されなかった命令を分岐誤予測バッファ（ＢＭＢ）から、例えば、命令キャッシュタグと合致するＢＭＢキャッシュタグの有無をチェックすることによって、検索する。動作５２０及び５２５は、実質的に同時に、例えば、同じクロックサイクルにおいて動作させる。
【００８２】
動作５３０時、プロセッサは、分岐命令を実行し、分岐に続く実際の後続の命令を判断する。
動作５４０時、プロセッサは、分岐に続く実際の後続の命令と、プログラムメモリから検索された予測された命令とを比較する。実際の命令が予測された命令と合致する場合、プロセスは、動作５５０に進む。実際の命令が予測された命令と合致しない場合、プロセスは、動作５６０に進む。
【００８３】
動作５５０時、プロセッサは、プログラムメモリから検索された予測された命令を復号する。
動作５６０時、プロセッサは、ＢＭＢから検索された予測されなかった命令を復号する。
【００８４】
予測されなかった命令がＢＭＢで見つからず、従って、動作５２５時、ＢＭＢで検索されず、動作５３０時に判断された実際の命令が、動作５２０時にプログラムメモリから検索された予測された命令と合致しない場合、プロセスは、動作５７０に進む。
【００８５】
動作５７０時、プロセッサは、予測されなかった命令をプログラムメモリから検索し、命令を復号し、命令をＢＭＢに書き込む。
他の動作又は一連の動作を用いてもよい。
【００８６】
本発明の実施形態には、コンピュータ又はプロセッサ可読媒体等の物や、例えば、メモリ、ディスクドライブ、又はＵＳＢフラッシュメモリ等のコンピュータ又はプロセッサ記憶媒体を含んでおり、これら媒体は、プロセッサ又はコントローラによって実行されると本明細書に開示した方法を実行する命令を符号化し、含み、又は記憶する。
【００８７】
上述した個々の実施形態は、本発明が関連する多くの分散システムに有用であることが判るであろうが、本発明の更なる改変が当業者には実施可能であろう。そのような全ての改変は、添付の特許請求の範囲によって規定される本発明の範囲及び精神内にあるとみなすものである。
【図１】
0005520779.tif 000002
【図２】
0005520779.tif 000003
【図３】
0005520779.tif 000004
【図４Ａ−ｉ】
0005520779.tif 000005
【図４Ａ−ｉｉ】
0005520779.tif 000006
【図４Ｂ−ｉ】
0005520779.tif 000007
【図４Ｂ−ｉｉ】
0005520779.tif 000008
【図５】
0005520779.tif 000009