(57)【要約】【課題】  条件分岐命令を実行し、分岐予測を行なうための、改善された方法及び装置を提供すること。【解決手段】  本発明の実施形態は、分岐予測情報を格納する方法及び装置を提供する。一実施形態において、この方法は、分岐命令を受信することと、ローカル分岐予測情報についてのローカル予測可能性値を含む、分岐命令についてのローカル分岐予測情報を格納することとを含む。この方法は、ローカル予測可能性値が予測可能性の閾値を下回る場合にのみ、分岐命令についてのグローバル分岐予測情報を格納することをさらに含む。【選択図】      図４
2009540412.tif 000002
【特許請求の範囲】
【請求項１】
分岐予測情報を格納する方法であって、
分岐命令を受信することと、
ローカル分岐予測情報についてのローカル予測可能性値を含む、前記分岐命令についてのローカル分岐予測情報を格納することと、
前記ローカル予測可能性値が予測可能性の閾値を下回る場合にのみ、前記分岐命令についてのグローバル分岐予測情報を格納することと
を含む方法。
【請求項２】
前記ローカル分岐予測情報は、前記分岐命令の予測結果に対応する予測ビットを含む、請求項１に記載の方法。
【請求項３】
前記分岐命令の前記予測結果は、前記分岐命令の分岐条件が成立すること、及び、前記分岐命令の分岐条件が成立しないことの一方である、請求項２に記載の方法。
【請求項４】
前記グローバル分岐予測情報は、１つ又は複数の他の分岐命令についての１つ又は複数の結果ビットと、前記分岐命令の前記予測結果に対応する、対応する予測ビットとを含む、請求項１に記載の方法。
【請求項５】
前記グローバル分岐予測情報はグローバル予測可能性値を含む、請求項１に記載の方法。
【請求項６】
前記ローカル予測可能性値が前記グローバル予測可能性値より大きい場合、前記ローカル分岐予測情報を用いて、前記分岐命令の結果を予測することと、
前記グローバル予測可能性値が前記ローカル予測可能性値より大きい場合、前記グローバル分岐予測情報を用いて、前記分岐命令の結果を予測することと
をさらに含む、請求項５に記載の方法。
【請求項７】
前記ローカル分岐予測情報は第１のテーブル内に格納され、前記グローバル分岐予測情報は第２のテーブル内に格納される、請求項１に記載の方法。
【請求項８】
前記ローカル予測可能性値は、前記分岐命令についての以前の正確な予測の頻度を示す、請求項１に記載の方法。
【請求項９】
分岐命令を実行する方法であって、
前記分岐命令を受信することと、
前記分岐命令についてのローカル分岐予測情報が格納されるかどうかを判定することと、
前記分岐命令についてのローカル分岐予測情報が格納される場合、ローカル分岐予測情報を用いて、前記分岐命令の結果を予測することと、
前記分岐命令についてのローカル分岐予測情報が格納されない場合、前記分岐命令についてのグローバル分岐予測情報を用いて、前記分岐命令の前記結果を予測することであって、前記命令についての前記グローバル分岐予測情報は、前記分岐命令についての前記ローカル分岐予測情報のローカル予測可能性値が予測可能性の閾値を下回る場合にのみ格納される、ことと
を含む方法。
【請求項１０】
前記分岐命令の前記予測結果は、前記分岐命令の分岐条件が成立すること、及び、前記分岐命令の分岐条件が成立しないことの一方である、請求項９に記載の方法。
【請求項１１】
少なくとも１つの命令が、前記分岐命令の前記予測結果を用いてプリフェッチされる、請求項９に記載の方法。
【請求項１２】
前記ローカル分岐予測情報は、前記分岐命令の前記予測結果に対応する予測ビットを含む、請求項９に記載の方法。
【請求項１３】
前記グローバル分岐予測情報は、１つ又は複数の他の分岐命令についての１つ又は複数の結果ビットと、前記分岐命令の前記予測結果に対応する、対応する予測ビットとを含む、請求項９に記載の方法。
【請求項１４】
前記ローカル分岐予測情報は第１のテーブル内に格納され、前記グローバル分岐予測情報は第２のテーブル内に格納される、請求項９に記載の方法。
【請求項１５】
前記グローバル分岐予測情報を含む前記第２のテーブルにアクセスするとき、１つ又は複数の他の分岐命令についての１つ又は複数の結果ビットが索引として用いられる、請求項１４に記載の方法。
【請求項１６】
前記ローカル予測可能性値は、前記分岐命令についての以前の正確な予測の頻度を示す、請求項９に記載の方法。
【請求項１７】
ローカル分岐予測情報を格納するための第１のテーブルと、
グローバル分岐予測情報を格納するための第２のテーブルと、
分岐命令を受信し、
前記第１のテーブル内に、前記ローカル分岐予測情報についてのローカル予測可能性値を含む前記分岐命令についてのローカル分岐予測情報を格納し、
前記ローカル予測可能性値が予測可能性の閾値を下回る場合にのみ、前記第２のテーブル内に前記分岐命令についてのグローバル分岐予測情報を格納する、
ように構成された回路と
を備える集積回路デバイス。
【請求項１８】
前記ローカル分岐予測情報は、前記分岐命令の予測結果に対応する予測ビットを含む、請求項１７に記載の集積回路デバイス。
【請求項１９】
前記分岐命令の前記予測結果は、前記分岐命令の分岐条件が成立すること、及び、前記分岐命令の分岐条件が成立しないことの一方である、請求項１８に記載の集積回路デバイス。
【請求項２０】
前記グローバル分岐予測情報は、１つ又は複数の他の分岐命令についての１つ又は複数の結果ビットと、前記分岐命令の前記予測結果に対応する、対応する予測ビットとを含む、請求項１７に記載の集積回路デバイス。
【請求項２１】
前記グローバル分岐予測情報はグローバル予測可能性値を含む、請求項１７に記載の集積回路デバイス。
【請求項２２】
前記回路は、
前記ローカル予測可能性値が前記グローバル予測可能性値より大きい場合、前記ローカル分岐予測情報を用いて前記分岐命令の結果を予測し、
前記グローバル予測可能性値が前記ローカル予測可能性値より大きい場合、前記グローバル分岐予測情報を用いて前記分岐命令の結果を予測する、
ようにさらに構成される、請求項２１に記載の集積回路デバイス。
【請求項２３】
前記ローカル予測可能性値は、前記分岐命令についての以前の正確な予測の頻度を示す、請求項１７に記載の集積回路デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、プロセッサにおける命令の実行に関する。具体的には、本出願は、分岐命令を実行するプロセッサの効率を向上させることに関する。
【背景技術】
【０００２】
現代のコンピュータ・システムは、典型的には、コンピュータ・システム内の情報を処理するために使用することができるプロセッサを含む、幾つかの集積回路（ＩＣ）を含む。プロセッサで処理されるデータは、プロセッサで実行されるコンピュータ命令、並びにコンピュータ命令を用いてプロセッサで操作されるデータを含むこともできる。典型的には、コンピュータ命令及びデータは、コンピュータ・システム内のメイン・メモリに格納される。
【０００３】
プロセッサは、典型的には、一連の小ステップで命令を実行することによって命令を処理する。場合によっては、プロセッサで処理される命令の数を増加させる（よって、プロセッサの速度を増大させる）ために、プロセッサをパイプライン化することができる。パイプライン化とは、プロセッサ内に、別個のステージ（段、stage）を設け、各々のステージが、命令を実行するのに必要な小ステップのうちの１つ又は複数を行なうことを言う。場合によっては、プロセッサ・コアと呼ばれるプロセッサの部分に、（他の回路に加えて）パイプラインを配置することができる。一部のプロセッサは、複数のプロセッサ・コアを有することができ、場合によっては、各々のプロセッサ・コアが複数のパイプラインを有することができる。プロセッサ・コアが複数のパイプラインを有する場合、命令のグループ（発行グループと呼ばれる）を複数のパイプラインに対して並行して発行し、各々のパイプラインにより並行して実行することができる。
【０００４】
パイプラインにおいて命令を実行することの一例として、第１の命令を受信したとき、第１のパイプライン・ステージは、命令の小部分を処理することができる。第１のパイプライン・ステージがその命令の小部分の処理を終了したとき、第２のパイプライン・ステージは、第１の命令の別の小部分の処理を開始することができ、その間に、第１のパイプライン・ステージは、第２の命令の小部分を受信し、その処理を開始する。したがって、プロセッサは、２つ又はそれ以上の命令を同時に（並行して）処理することができる。
【０００５】
プロセッサは、典型的には、条件が満たされた場合、コンピュータ・プログラムが１つの命令からターゲット命令に分岐する（これにより、もしあれば中間の命令がスキップされる）ことを可能にする条件分岐命令を提供する。条件が満たされない場合、ターゲット命令に分岐することなく、分岐命令の後の次の命令を実行することができる。典型的には、条件分岐命令が実行され、条件がテストされるまで、テストされる条件の結果は未知である。したがって、分岐条件がテストされるまで、条件分岐命令の後に実行される次の命令を知ることはできない。
【０００６】
命令を実行するためにパイプラインが用いられる場合、条件分岐命令がパイプラインの幾つかのステージを通過するまで、条件分岐命令の結果を知ることができない。したがって、条件分岐命令が、分岐条件の結果を判定するのに必要なステージを通過するまで、条件分岐命令の後に実行される次の命令を知ることができない。場合によっては、分岐条件をテストし、実行される次の命令が分かるまで、パイプラインにおける命令の実行をストールすることができる（例えば、命令を実行するために、分岐命令に先行するパイプライン・ステージを用いることはできない）。しかしながら、パイプラインをストールする場合、同数の命令を並行して実行するために、パイプラインは用いられておらず（条件分岐の前の幾つかのステージは、命令を実行していていないので）、パイプラインの利点が減少し、プロセッサ全体の効率が低下する。
【０００７】
場合によっては、プロセッサの効率を改善するために、分岐予測を用いて条件分岐命令の結果を予測することができる。例えば、条件分岐命令に遭遇したとき、プロセッサは、分岐条件の結果が分かった後にどの命令を実行するかを予測することができる。次に、条件分岐命令が発行されたときにパイプラインをストールする代わりに、プロセッサは、予測される次の命令から始まる命令の発行を続行することができる。
【０００８】
しかしながら、場合によっては、分岐予測が正しくないことがある（例えば、プロセッサは、条件分岐命令の１つの結果を予測できるものの、条件分岐命令が実行されたとき、正反対の結果が得られることがある）。条件分岐命令の結果が誤って予測された場合、条件分岐命令の後に引き続いてパイプラインに発行された予測命令をパイプラインから除去し、命令の効果を取り消すことができる（パイプラインのフラッシュと呼ばれる）。次に、パイプラインをフラッシュした後、条件分岐命令についての正しい次の命令をパイプラインに発行し、命令の実行を続行することができる。条件分岐命令の結果が誤って予測され、誤って予測された命令のグループがパイプラインからフラッシュされ、これによりパイプラインによってなされた前の作業が取り消された場合、プロセッサの効率が悪化することがある。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
したがって、条件分岐命令を実行し、分岐予測を行なうための、改善された方法及び装置が必要とされる。
【課題を解決するための手段】
【００１０】
本発明の実施形態は、分岐予測情報を格納する方法及び装置を提供する。一実施形態において、この方法は、分岐命令を受信することと、ローカル分岐予測情報についてのローカル予測可能性値を含む、分岐命令についてのローカル分岐予測情報を格納することとを含む。この方法は、ローカル予測可能性値が予測可能性の閾値を下回る場合にのみ、分岐命令についてのグローバル分岐予測情報を格納することをさらに含む。
【００１１】
本発明の実施形態はまた、分岐命令を実行する方法も提供する。一実施形態において、この方法は、分岐命令を受信することと、分岐命令についてのローカル分岐予測情報が格納されるかどうかを判定することとを含む。分岐命令についてのローカル分岐予測情報が格納された場合、ローカル分岐予測情報を用いて分岐命令の結果を予測する。分岐命令についてのローカル分岐予測情報が格納されない場合、分岐命令についてのグローバル分岐予測情報を用いて分岐命令の結果を予測する。分岐命令についてのローカル分岐予測情報のローカル予測可能性値が予測可能性の閾値を下回る場合にのみ、命令についてのグローバル分岐予測情報が格納される。
【００１２】
本発明の実施形態はまた、ローカル分岐予測情報を格納するための第１のテーブルと、グローバル分岐予測情報を格納するための第２のテーブルと、回路とを含む、集積回路デバイスも提供する。一実施形態において、回路は、分岐命令を受信し、分岐命令についてのローカル分岐予測情報を第１のテーブル内に格納するように構成される。ローカル分岐予測情報は、ローカル分岐予測情報のローカル予測可能性値を含む。回路は、ローカル予測可能性値が予測可能性の閾値を下回る場合にのみ、第２のテーブル内に、分岐命令についてのグローバル分岐予測情報を格納するようにさらに構成される。
【００１３】
本発明の上記の特徴、利点及び目的が得られる方法を詳細に理解することができるように、添付の図面に示されている本発明の実施形態を参照することによって、上記で簡潔に要約された本発明のより具体的な説明をなすことができる。
【００１４】
しかしながら、添付の図面は本発明の典型的な実施形態のみを図示するものであり、よって、本発明の範囲を限定するものとみなすべきではなく、本発明は他の等しく有効な実施形態も認め得ることに留意すべきである。
【発明を実施するための最良の形態】
【００１５】
本発明の実施形態は、分岐予測情報を格納するための方法及び装置を提供する。一実施形態において、この方法は、分岐命令を受信することと、ローカル分岐予測情報のローカル予測可能性値を含む分岐命令についてのローカル分岐予測情報を格納することとを含む。この方法は、ローカル予測可能性値が予測可能性の閾値を下回る場合にのみ、分岐命令についてのグローバル分岐予測情報を格納することをさらに含む。
【００１６】
以下において、本発明の実施形態が説明される。しかしながら、本発明は特定の説明される実施形態に限定されるものではないことを理解すべきである。代わりに、本発明を実施し、実行するために、異なる実施形態に関連していても関連していなくても、以下の特徴及び要素の任意の組み合わせが考慮される。さらに、種々の実施形態において、本発明は、従来技術に優る多数の利点を提供する。しかしながら、本発明の実施形態は、他の可能な解決法及び／又は従来技術に優る利点を達成できるものの、所定の実施形態によって特定の利点が達成されるかどうかは、本発明を制限するものではない。したがって、以下の態様、特徴、実施形態及び利点は、例証にすぎず、特許請求の範囲に明示的に列挙される場合を除いて、添付の特許請求の範囲の要素又は制限と考えられない。同様に、「本発明」への言及は、ここで開示されるあらゆる本発明の主題の一般化として解釈されるべきではなく、特許請求の範囲に明示的に列挙され場合を除いて、添付の特許請求の範囲の要素又は制限と考えるべきではない。
【００１７】
以下は、添付の図面に示された本発明の実施形態の詳細な説明である。これらの実施形態は例示的なものであり、本発明を明確に伝えるように詳細なものとなっている。しかしながら、提供された詳細の量は、実施形態の予期される変形物を制限することを意図するものではなく、逆に、本発明は、添付の特許請求の範囲によって定められるような本発明の精神及び範囲内に含まれる全ての修正物、均等物及び代替物を網羅するものである。
【００１８】
本発明の実施形態は、例えば、コンピュータ・システムなどのシステムと共に用いることができ、そのようなシステムに関して本発明の実施形態を以下に説明する。ここで用いられるシステムは、パーソナル・コンピュータ、インターネット・アプライアンス、デジタル・メディア機器、携帯情報端末（portable digital assistant、ＰＤＡ）、携帯型音楽／映像プレーヤー及びビデオゲーム・コンソールを含む、プロセッサ及びキャッシュ・メモリを使用する任意のシステムを含むことができる。キャッシュ・メモリを用いるプロセッサと同じダイ上にキャッシュ・メモリを配置することができるが、場合によっては、プロセッサとキャッシュ・メモリを異なるダイ（例えば、別個のモジュール内の別個のチップ、又は単一モジュール内の別個のチップ）上に配置することができる。
【００１９】
本発明の実施形態は、各々のプロセッサ・コアが多数のパイプラインを用いて命令を実行する複数のプロセッサ・コアと複数のＬ１キャッシュとを有するプロセッサに関して以下に説明されるが、単一の処理コアを有するプロセッサを含む、キャッシュを用いる任意のプロセッサで本発明の実施形態を用いることができる。一般に、本発明の実施形態は、任意のプロセッサで用いることができ、いずれかの特定の構成に限定されるものではない。例えば、一般に、実施形態は、カスケード式遅延実行パイプラインを用いるプロセッサに限定されない。さらに、Ｌ１命令キャッシュ（Ｌ１  Ｉ−キャッシュ又はＩ−キャッシュ）とＬ１データ・キャッシュ（Ｌ１  Ｄ−キャッシュ又はＤ−キャッシュ２２４）に分割されたＬ１−キャッシュを有するプロセッサに関して以下に説明されるが、本発明の実施形態は、統合されたＬ１キャッシュを用いる構成にも用いることができる。また、以下に説明される幾つかの実施形態においては、命令をバッファに入れるためのデュアル命令バッファが説明される。場合によっては、命令をバッファに入れるために、単一の組み合わされたバッファ又は他のバッファ構成を用いることができる。
【００２０】
例示的なシステムの概要
図１は、本発明の一実施形態によるシステム１００を示すブロック図である。システム１００は、命令及びデータを格納するためのシステム・メモリ１０２と、グラフィックス処理のためのグラフィックス処理ユニット１０４と、外部装置と通信するためのＩ／Ｏインターフェース（１０６）と、命令及びデータを長期間格納するための記憶装置１０８と、命令及びデータを処理するためのプロセッサ１１０とを含むことができる。
【００２１】
本発明の一実施形態によると、プロセッサ１１０は、Ｌ２キャッシュ１１２及び複数のＬ１キャッシュ１１６を有することができ、各々のＬ１キャッシュ１１６は、複数のプロセッサ・コア１１４のうちの１つで用いられる。一実施形態によると、各々のプロセッサ・コア１１４をパイプライン化することができ、各々の命令が一連の小ステップで実行され、各々のステップが異なるパイプライン・ステージで実行される。
【００２２】
図２は、本発明の一実施形態によるプロセッサ１１０を示すブロック図である。簡単にするために、図２には、プロセッサ１１０の単一のコア１１４が示されており、これに関して図２を説明する。一実施形態においては、各々のコア１１４は同一のものであってもよい（例えば、同一のパイプライン・ステージを有する同一のパイプラインを含むことができる）。別の実施形態においては、各々のコア１１４は異なっていてもよい（例えば、異なるステージを有する異なるパイプラインを含むことができる）。
【００２３】
本発明の一実施形態においては、Ｌ２キャッシュは、プロセッサ１１０で使用される命令及びデータの一部を含むことができる。場合によっては、プロセッサ１１０は、Ｌ２キャッシュ１１２内に含まれていない命令及びデータを要求することがある。要求された命令及びデータがＬ２キャッシュ１１２内に含まれていない場合、要求された命令及びデータを（上位レベルのキャッシュ又はシステム・メモリ１０２から）取り出し、Ｌ２キャッシュ内に配置することができる。プロセッサ・コア１１４がＬ２キャッシュ１１２から命令を要求したとき、まずプリデコーダ及びスケジューラ２２０（以下で詳述される）によって命令を処理することができる。
【００２４】
本発明の一実施形態において、Ｉ−ラインと呼ばれるグループ内のＬ２キャッシュ１１２から命令をフェッチすることができる。同様に、Ｄ−ラインと呼ばれるグループ内のＬ２キャッシュ１１２からデータをフェッチすることができる。図１に示されるＬ１キャッシュ１１６を、２つの部分、すなわち、Ｉ−ラインを格納するためのＬ１命令キャッシュ２２２（Ｉ−キャッシュ２２２）、及び、Ｄ−ラインを格納するためのＬ１データ・キャッシュ２２４（Ｄ−キャッシュ２２４）に分割することができる。Ｌ２アクセス回路２１０を用いて、Ｌ２キャッシュ１１２からＩ−ライン及びＤ−ラインをフェッチすることができる。
【００２５】
本発明の一実施形態においては、Ｌ２キャッシュ１１２から取り出されたＩ−ラインを、プリデコーダ及びスケジューラ２２０で処理することができ、Ｉ−キャッシュ２２２内にＩ−ラインを配置することができる。プロセッサの性能をさらに改善するために、多くの場合、命令がプリデコード（predecode）され、例えば、Ｉ−ラインがＬ２（又はより上位の）キャッシュから取り出される。こうしたプリデコードは、アドレス生成、分岐予測及びスケジューリング（命令を発行すべき順番を決定すること）などの種々の機能を含むことができ、命令の実行を制御するディスパッチ情報（１組のフラグ）としてキャプチャされる。場合によっては、プリデコーダ及びスケジューラ２２０は、複数のコア１１４及びＬ１キャッシュの間で共有することができる。同様に、Ｌ２キャッシュ１１２からフェッチされたＤ−ラインを、Ｄ−キャッシュ２２４内に配置することができる。各々のＩ−ライン及びＤ−ライン内のビットを用いて、Ｌ２キャッシュ１１２内の情報のラインがＩ−ラインであるか、又はＤ−ラインであるかを追跡することができる。随意的に、Ｉ−ライン及び／又はＤ−ラインにおいてＬ２キャッシュ１１２からデータをフェッチする代わりに、他の方法で、例えば、より少量のデータ、より大量のデータ、又は可変量のデータをフェッチすることなどによって、Ｌ２キャッシュ１１２からデータをフェッチすることができる。
【００２６】
一実施形態において、Ｉ−キャッシュ２２２及びＤ−キャッシュ２２４は、どのＩ−ライン及びＤ−ラインが現在Ｉ−キャッシュ２２２及びＤ−キャッシュ２２４内にあるかを追跡するために、それぞれＩ−キャッシュ・ディレクトリ２２３及びＤ−キャッシュ・ディレクトリ２２５を有することができる。Ｉ−ライン又はＤ−ラインがＩ−キャッシュ２２２又はＤ−キャッシュ２２４に付加されたとき、対応するエントリを、Ｉ−キャッシュ・ディレクトリ２２３又はＤ−キャッシュ・ディレクトリ２２５内に配置することができる。Ｉ−ライン又はＤ−ラインがＩ−キャッシュ２２２又はＤ−キャッシュ２２４から除去されたとき、Ｉ−キャッシュ・ディレクトリ２２３又はＤ−キャッシュ・ディレクトリ２２５内の対応するエントリを除去することができる。Ｄ−キャッシュ・ディレクトリ２２５を用いるＤ−キャッシュ２２４に関して以下に説明されるが、本発明の実施形態は、Ｄ−キャッシュ・ディレクトリ２２５が用いられない場合でも使用することができる。そのような場合、Ｄ−キャッシュ２２４に格納されたデータ自体は、どのＤ−ラインがＤ−キャッシュ２２４内に存在するかを示すことができる。
【００２７】
一実施形態においては、命令フェッチ回路２３６を用いて、コア１１４に対する命令をフェッチすることができる。例えば、命令フェッチ回路２３６は、コア内で実行中の現在の命令を追跡するプログラム・カウンタを含むことができる。コア内の分岐ユニットを用いて、分岐命令に遭遇したときにプログラム・カウンタを変更することができる。Ｉ−ライン・バッファ２３２を用いて、Ｌ１  Ｉ−キャッシュ２２２からフェッチされた命令を格納することができる。発行及びディスパッチ回路２３４を用いて、Ｉ−ライン・バッファ２３２から取り出された命令を命令グループにグループ分けすることができ、以下で説明されるように、命令グループをコア１１４に対して並行して発行することができる。場合によっては、発行及びディスパッチ回路は、プリデコーダ及びスケジューラ２２０により与えられる情報を用いて、適切な命令グループを形成することができる。
【００２８】
発行及びディスパッチ回路２３４から命令を受け取ることに加えて、コア１１４は、様々な場所からデータを受け取ることができる。コア１１４がデータ・レジスタからデータを要求する場合、レジスタ・ファイル２４０を用いて、データを得ることができる。コア１１４がメモリ位置からデータを要求する場合、キャッシュ・ロード及びストア回路２５０を用いて、Ｄ−キャッシュ２２４からデータをロードすることができる。こうしたロードが実行される場合、必要なデータ要求をＤ−キャッシュ２２４に対して発行することができる。同時に、Ｄ−キャッシュ・ディレクトリ２２５をチェックして、所望のデータがＤ−キャッシュ２２４内に配置されているかどうかを判定することができる。Ｄ−キャッシュ２２４が所望のデータを含む場合、Ｄ−キャッシュ・ディレクトリ２２５は、Ｄ−キャッシュ２２４が所望のデータを含み、Ｄ−キャッシュ・アクセスをある時間の後に完了することができることを示すことができる。Ｄ−キャッシュ２２４が所望のデータを含まない場合、Ｄ−キャッシュ・ディレクトリ２２５は、Ｄ−キャッシュ２２４が所望のデータを含まないことを示すことができる。Ｄ−キャッシュ・ディレクトリ２２５は、Ｄ−キャッシュ２２４よりも迅速にアクセスすることができるので、Ｄ−キャッシュ・ディレクトリ２２５にアクセスした後、かつ、Ｄ−キャッシュ・アクセスが完了する前に、所望のデータ要求を（例えば、Ｌ２アクセス回路２１０を用いて）Ｌ２キャッシュ１１２に対して発行することができる。
【００２９】
場合によっては、コア１１４内でデータを修正することができる。修正されたデータをレジスタ・ファイルに書き込むことができ、又はメモリに格納することができる。ライトバック（write back）回路２３８を用いて、データをレジスタ・ファイル２４０に書き戻す（ライトバックする）ことができる。場合によっては、ライトバック回路２３８は、キャッシュ・ロード及びストア回路２５０を用いて、データをＤ−キャッシュ２２４に書き戻すことができる。随意的に、コア１１４は、キャッシュ・ロード及びストア回路２５０にアクセスして、直接的に格納を実行することができる。場合によっては、以下に説明されるように、ライトバック回路２３８を用いて、命令をＩ−キャッシュ２２２に書き戻すこともできる。
【００３０】
上述のように、発行及びディスパッチ回路２３４を用いて、命令グループを形成し、形成された命令グループをコア１１４に発行することができる。発行及びディスパッチ回路２３４はまた、Ｉ−ライン内の命令を回転し、マージ（merge）し、それにより適切な命令グループを形成するための回路を含むことができる。発行グループの形成は、発行グループ内の命令間の依存関係、並びに以下で詳細に説明する命令の順序付けから達成することのできる最適化などの幾つかの考慮事項を考慮に入れることができる。一旦発行グループが形成されると、プロセッサ・コア１１４に対して発行グループを並行してディスパッチすることができる。場合によっては、命令グループは、コア１１４内のパイプラインごとに１つの命令を含むことができる。随意的に、命令グループは、より少数の命令とすることができる。
【００３１】
本発明の一実施形態によると、１つ又は複数のプロセッサ・コア１１４は、カスケード式遅延実行パイプライン構成を用いることができる。図３に示される例では、コア１１４は、カスケード式構成の４つのパイプラインを含む。随意的に、より少数（２つ又はそれ以上のパイプライン）又はより多数（４より多いパイプライン）をそのような構成において用いることもできる。さらに、図３に示されるパイプラインの物理的レイアウトは例示的なものであり、必ずしもカスケード式遅延実行パイプライン・ユニットの実際の物理的レイアウトを示唆するものではない。
【００３２】
一実施形態においては、カスケード式遅延実行パイプライン構成内の各パイプライン（Ｐ０、Ｐ１、Ｐ２、Ｐ３）は、実行ユニット３１０を含むことができる。実行ユニット３１０は、所定のパイプラインに対して１つ又は複数の機能を実行する幾つかのパイプライン・ステージを含むことができる。例えば、実行ユニット３１０は、命令のフェッチ及びデコードの全て又は一部を実行することができる。実行ユニットで実行されたデコードは、プリデコーダ及びスケジューラ２２０と共有することができ、プリデコーダ及びスケジューラ２２０は、複数のコア１１４間で共有され、又は随意的に単一のコア１１４で使用される。実行ユニットはまた、レジスタ・ファイルからデータを読み取り、アドレスを計算し、整数演算機能を実行し（例えば、演算論理装置すなわちＡＬＵを用いて）、浮動小数点演算機能を実行し、命令分岐を実行し、データ・アクセス機能を実行し（例えば、メモリからのロード及びストア）、データをレジスタに戻して格納する（例えば、レジスタ・ファイル２４０内に）ことができる。場合によっては、コア１１４は、命令フェッチ回路２３６、レジスタ・ファイル２４０、キャッシュ・ロード及びストア回路２５０、ライトバック回路、並びに他の任意の回路を用いてこれらの機能を使用することができる。
【００３３】
一実施形態においては、各実行ユニット３１０は、同一の機能を実行することができる。随意的に、各実行ユニット３１０（又は、異なるグループの実行ユニット）は異なる機能の組を実行することができる。さらに、場合によっては、各コア１１４内の実行ユニット３１０は、他のコアにおいて提供される実行ユニット３１０と同じであってもよく、又は異なるものであってもよい。例えば、あるコアにおいては、実行ユニット３１００及び３１０２が、ロード／ストア及び演算機能を実行し、実行ユニット３１０１及び３１０３が、演算機能のみを実行することができる。
【００３４】
一実施形態においては、図示されるように、実行ユニット３１０における実行を、他の実行ユニット３１０に対して遅延式に実行することができる。図示される構成は、カスケード式遅延構成とも呼ばれることもあるが、図示されるレイアウトは、必ずしも実行ユニットの実際の物理的レイアウトを示すわけではない。そのような構成では、命令グループ内の命令（便宜上、Ｉ０、Ｉ１、Ｉ２、Ｉ３と呼ぶ）がパイプラインＰ０、Ｐ１、Ｐ２、Ｐ３に対して並行して発行され、各々の命令を、各々の他の命令に対して遅延式に実行することができる。例えば、まず、命令Ｉ０をパイプラインＰ０に対する実行ユニット３１００において実行することができ、２番目に、命令Ｉ１をパイプラインＰ１に対する実行ユニット３１０１において実行することができ、以下同様である。
【００３５】
一実施形態においては、プロセッサ・コア１１４に発行グループを発行するとき、Ｉ０を実行ユニット３１００において直ちに実行することができる。その後、命令Ｉ０が実行ユニット３１００における実行を終了した後、実行ユニット３１０１は命令Ｉ１の実行を開始することができ、以下同様にして、コア１１４に対して並行して発行された命令が、互いに対して遅延式に実行される。
【００３６】
一実施形態においては、幾つかの実行ユニット３１０を互いに対して遅延させることができるが、他の実行ユニット３１０は互いに対して遅延されない。第２の命令の実行が第１の命令の実行に依存する場合、転送パス（forwarding path）３１２を用いて、第１の命令から第２の命令に結果を転送することができる。図示される転送パス３１２は例示的なものにすぎず、コア１１４は、実行ユニット３１０内の様々な地点から他の実行ユニット３１０又は同一の実行ユニット３１０へのより多くの転送パスを含むことができる。
【００３７】
一実施形態においては、実行ユニット３１０で実行されていない命令（例えば、遅延されている命令）を遅延キュー３２０又はターゲット遅延キュー３３０内に保持することができる。遅延キュー３２０は、実行ユニット３１０で実行されていない命令グループ内の命令を保持するのに使用することができる。例えば、命令Ｉ０が実行ユニット３１００において実行されている間、命令Ｉ１、Ｉ２及びＩ３を遅延キュー３２０内に保持することができる。命令が遅延キュー３２０を通じて移動されると、命令を適切な実行ユニット３１０に対して発行し、実行することができる。ターゲット遅延キュー３３０は、既に実行ユニット３１０で実行された命令の結果を保持するのに使用することができる。場合によっては、ターゲット遅延キュー３３０内の結果を実行ユニット３１０に転送して処理することができ、又は適切な場合には無効にすることができる。同様に、ある環境においては、以下で説明されるように、遅延キュー３２０内の命令を無効にすることができる。
【００３８】
一実施形態において、命令グループ内の各命令が遅延キュー３２０、実行ユニット３１０及びターゲット遅延キュー３３０を通じて渡された後、結果（例えば、データ、及び以下で説明されるように、命令）をレジスタ・ファイルに、或いはＬ１  Ｉ−キャッシュ２２２及び／又はＤ−キャッシュ２２４のいずれかに書き戻すことができる。場合によっては、ライトバック回路３０６を用いて、最後に修正されたレジスタの値（ターゲット遅延キュー３３０の１つから受け取った）を書き戻し、無効にされた結果を廃棄することができる。
【００３９】
分岐予測情報
本発明の一実施形態において、プロセッサ１１０は、プロセッサ１１０によって実行されている条件分岐命令についての分岐予測情報を格納することができる。分岐予測情報は、所定の分岐命令の実行履歴を反映させることができ、及び／又は、実行中の分岐命令の結果を予測するのに有用なものにすることができる。
【００４０】
本発明の一実施形態においては、プロセッサ１１０を用いて、ローカル分岐履歴情報及び／又はグローバル分岐履歴情報を記録することができる。以下に述べられるように、場合によっては、こうした分岐予測情報を分岐命令に再エンコードすることができる。また、場合によっては、分岐履歴テーブル内に分岐予測情報を格納することもできる。
【００４１】
一実施形態において、ローカル分岐履歴情報を用いて、単一の分岐命令の分岐履歴を追跡することができる。場合によっては、ローカル分岐履歴情報は、以前に分岐条件が成立したか（taken）又は以前に分岐条件が不成立であったか（not taken）を示す単一のビット（分岐履歴ビット、ＢＲＨ）を含むことができる（例えば、ビットが設定された場合、以前に分岐条件が成立しており、ビットが設定されていない場合、以前に分岐条件が不成立である）。ＢＲＨが設定された場合、後の分岐命令の実行中、分岐条件が成立するであろうという予測を行なうことができ、分岐命令の結果が完全に解決される前に、プロセッサ１１０が、分岐条件成立パス（branch taken path）に関する命令をフェッチし、実行することが可能になる。同様に、ＢＲＨが消去される場合、分岐条件が不成立であろうという予測を行なうことができ、プロセッサ１１０が、分岐条件不成立パス（branch not-taken path）に関する命令をフェッチし、実行することが可能になる。
【００４２】
ローカル分岐履歴情報はまた、分岐命令の結果を予測する際に分岐履歴ビットの信頼性を判断するために用いることができるカウンタ（ＣＮＴ）を含むこともできる。例えば、分岐の結果（分岐条件が成立する又は分岐条件が不成立である）がＢＲＨの値と合致する度に、カウンタを増分することができ、これによりＢＲＨ予測がより信頼できることが示される。幾つかの実施形態においては、カウンタがその最高値に達するとき、カウンタが飽和することがある（例えば、３ビット・カウンタは、７で飽和し得る）。同様に、分岐の結果がＢＲＨの値と合致しない度に、カウンタを減分することができ、ＢＲＨ予測があまり信頼できないことが示される。カウンタがその最低値（例えば、ゼロ）に達するとき、カウンタが減分を停止することもある。カウンタは、１ビット・カウンタ、２ビット・カウンタ、又は３ビット・カウンタとすることができ、或いは、随意的に、カウンタが、どのような数のビットを含むこともできる。
【００４３】
場合によっては、ローカル分岐履歴情報が分岐命令の結果を正しく予測するかどうか（例えば、分岐命令がローカルに予測可能であるかどうか）を示すローカル分岐履歴情報の別のビット（ＢＰＲＤ）を格納することができる。例えば、ＣＮＴがローカル予測可能性の閾値を下回る場合、ＢＰＲＤを消去し、分岐命令が予測可能でないことを示すことができる。ＣＮＴがローカル予測可能性の閾値を上回るか又はこれと等しい場合、ＢＰＲＤを設定し、分岐命令が予測可能であることを示すことができる。場合によっては、分岐命令がローカルに予測可能であることを示す値に、ＢＰＲＤを初期化することができる（例えば、ＢＰＲＤを最初に消去してもよい）。また、場合によっては、一旦ＢＰＲＤが消去されると、たとえＣＮＴが予測可能性の閾値より上に上昇したとしても、ＢＰＲＤが消去されたままにし（例えば、ＢＰＲＤはスティッキー・ビット（sticky bit）とすることができる）、これにより分岐命令がローカルに予測可能でないままであることを示すことができる。随意的に、ＣＮＴの値に応じて、ＢＰＲＤを連続的に更新することができる。
【００４４】
場合によっては、分岐が予測可能であるか又は部分的に予測可能であるかを示す値（例えば、予測可能性の閾値を上回る値、又は「部分的予測可能性」の閾値を上回る値）に、ＣＮＴを初期化することができる。また、場合によっては、ＣＮＴが予測可能性の閾値を下回るとき、又は、随意的にＣＮＴがゼロのとき、ＢＲＨビットを修正し、分岐命令の最新の結果（例えば、分岐される又は分岐されない）を反映させることができる。場合によっては、最新の結果を反映させるようにＢＲＨを修正した場合、ＢＰＲＤは、ＣＮＴが予測可能性の閾値より上に上昇するまで設定されたままであることができる（予測不可能であることを示す）。分岐命令のローカル予測可能性を示す測定値及び／又はビットを維持することによって、分岐命令の結果を予測するためにローカル分岐履歴情報を使用するかどうかの判断を行なうことができる。
【００４５】
グローバル分岐履歴情報を用いて、複数の命令の分岐履歴を追跡することができる。例えば、所定の分岐命令についてのグローバル分岐履歴情報は、現在の分岐命令の前に実行された分岐命令の数（例えば、１、２、３、４、又はそれ以上）を見て、分岐条件が成立したか又は分岐条件が不成立であったかを記録することができる。実行されている分岐命令のアドレスと共に、以前の分岐命令の履歴結果（ＧＢＨ）を示すビットを分岐履歴テーブルへの索引として用いることができる。分岐履歴テーブル内の各エントリは、分岐の対応する結果が何であったかを示す対応するグローバル分岐履歴ビット（ＧＢＲＨ）（例えば、現在の分岐命令の結果（ＧＢＲＨ）であった、以前の分岐命令の履歴結果（ＧＢＨ）についての）を含むことができる。
【００４６】
場合によっては、分岐履歴テーブル内の各々のエントリは、上述されたカウンタと類似したグローバル分岐履歴カウンタ（ＧＢＣＮＴ）を含むことができる。グローバル分岐履歴ＧＢＲＨが分岐命令の結果を正しく予測する度に、ＧＢＣＮＴを増分することができ、グローバル分岐履歴エントリが分岐命令の結果を不正確に予測する度に、ＧＢＣＮＴを減分することができる。ＧＢＣＮＴの値を用いて、分岐命令についてのグローバル分岐履歴の信頼性又は予測可能性を求めることができる。
【００４７】
場合によっては、グローバル分岐履歴情報は、ＢＰＲＤと類似したビットＧＢＰＲＤを含むことができ、このＧＢＰＲＤは、ＧＢＣＮＴが予測可能性の閾値を上回るか又はこれと等しい場合に設定され、ＧＢＣＮＴが予測可能性の閾値を下回るときに消去される。したがって、ＧＢＰＲＤを用いて、分岐命令がグローバルに予測可能であるかどうかを判定することができる。場合によっては、ＧＢＰＲＤは、スティッキー・ビットとすることができる（例えば、一旦ビットが消去されると、ビットは消去されたままにすることができる）。随意的に、場合によっては、ＧＢＣＮＴの値に応じて、ＧＢＰＲＤを更新することができる。
【００４８】
分岐予測情報の格納
本発明の一実施形態においては、実行中、ローカル分岐履歴情報を対応する分岐命令又はＩ−ラインに再エンコードすることができる。ローカル分岐履歴情報を対応する分岐命令に再エンコードすることによって、分岐予測情報を格納するのに用いられる分岐履歴テーブルのサイズを低減させることができ、ローカル分岐履歴情報を本質的に無制限に格納することができる（例えば、分岐命令自体の中に又はこれと共に）。また、本発明の一実施形態においては、ローカル分岐履歴情報が信頼できないものである場合（例えば、確認カウントＣＮＴがローカル予測可能性の所定の閾値を下回る場合）、分岐履歴テーブル内にのみグローバル分岐履歴情報を格納することができる。したがって、場合によっては、分岐命令の結果を予測するためにその命令についてのローカル分岐履歴が許容可能なほど正しくない場合にのみ、所定の分岐命令についてのグローバル分岐履歴情報を格納することができる。
【００４９】
図４は、本発明の一実施形態による、ローカル及びグローバル分岐履歴情報を記録し、格納するためのプロセス４００を示す流れ図である。プロセス４００は、分岐命令を受信し、実行する、ステップ４０２で開始することができる。ステップ４０４において、上述のように、例えば、分岐命令についての分岐予測情報を更新することができる（例えば、分岐履歴ビットを設定又は消去することによって、分岐履歴カウントを増分又は減分することによって）。ステップ４０６において、更新されたローカル分岐履歴情報（例えば、ＢＲＨ、ＣＮＴ、及び／又は他のローカル分岐履歴情報）を分岐命令に再エンコードすることができる。
【００５０】
ステップ４０８において、ローカル分岐履歴情報が、分岐命令がローカルに予測可能であること（例えば、ローカル分岐履歴だけを用いて分岐が予測可能であること）を示すかどうかについて判定を行なうことができる。上述のように、こうした判定は、ＣＮＴが予測可能性の閾値よりも大きいか又はこれと等しいかを判定することを含み得る。ローカル分岐履歴情報が、分岐命令がローカルに予測可能であることを示さない場合には、ステップ４１０において、分岐命令についてのグローバル分岐履歴情報（例えば、ＧＢＲＨ及び／又はＧＢＣＮＴ）を含む分岐履歴テーブルにエントリを付加することができる。次に、ステップ４１２において、プロセス４００が終了できる。
【００５１】
上述のように、ローカル分岐履歴情報は、命令ビット及び／又はＩ−ライン・ビットを用いることを含み得る種々の方法で格納することができる。一実施形態において、ローカル分岐履歴情報及び／又はターゲット・アドレスは、分岐命令を含むＩ−ラインに格納することができる。図５（Ａ）は、本発明の一実施形態による、分岐命令についてのローカル分岐履歴情報及び／又はターゲット・アドレスをＩ−ライン５０２内に格納するために用いられる例示的なＩ−ライン５０２を示すブロック図である。
【００５２】
図示されるように、Ｉ−ラインは、複数の命令（命令１、命令２等）、アドレス（例えば、有効アドレスＥＡ）を格納するために用いられるビット、制御情報（ＣＴＬ）を格納するために用いられるビットを含むことができる。本発明の一実施形態においては、図５（Ａ）に示される制御ビットＣＴＬを用いて、分岐命令についてのローカル分岐履歴情報（例えば、ＢＲＨビット、ＢＰＲＤビット、ＣＮＴビット、及び／又は他のビット）を格納することができる。本発明の一実施形態において、Ｉ−ラインは、複数の分岐命令を含むことができ、分岐命令の各々についてローカル分岐履歴情報を格納することができる。
【００５３】
場合によっては、Ｉ−ラインにおいてその目的のために割り当てられたビット内にローカル分岐履歴情報を格納することができる。随意的に、本発明の一実施形態においては、ローカル分岐履歴情報は、他の形では用いられないＩ−ラインのビットに格納することができる。例えば、Ｌ２キャッシュ１１２内の各々の情報ラインは、異なるキャッシュ・レベル間で転送されるデータのエラー訂正のために用い得る追加のデータ・ビット（例えば、転送されたデータが破損されていないことを保証し、実際に起こったいずれかの破損を修復するために用いられるエラー訂正コードＥＣＣ）を有することができる。場合によっては、各々のレベルのキャッシュ（例えば、Ｌ２キャッシュ１１２及びＩ−キャッシュ２２２）は、各々のＩ−ラインの同一のコピーを含むことができる。各々のレベルのキャッシュが所定のＩ−ラインのコピーを含む場合には、ＥＣＣを用いなくてもよい。代わりに、例えば、キャッシュ間でＩ−ラインが適切に転送されたかどうかを判定するために、パリティ・ビット（parity bit）を用いることができる。パリティ・ビットが、キャッシュ間でＩ−ラインが不適切に転送されたことを示した場合には、（キャッシュにそのラインが含まれているため）エラー・チェックを行なう代わりに、転送キャッシュからそのＩ−ラインを再フェッチすることができ、よって、分岐予測情報を格納する際に用いられるＥＣＣビットを除去する。
【００５４】
ローカル分岐履歴情報を他の形では用いられないＩ−ラインのビットに格納する例として、格納された２ワードごとに、エラー訂正用に１１ビットを用いるエラー訂正プロトコルを考える。１つのＩ−ラインにおいて、２つの命令ごとにパリティ・ビットを格納するために、１１ビットのうちの１つを用いることができる（１ワードごとに１つの命令が確認される場合）。残りの命令１つにつき５ビットを、ローカル分岐履歴情報を格納するために用いることができる。
【００５５】
上述のように、場合によっては、命令がデコード及び／又は実行された（ここでは一般に再エンコードと呼ばれる）後で、分岐命令内にローカル分岐履歴情報を格納することができる。図５（Ｂ）は、命令の一実施形態による例示的な分岐命令５０４を示すブロック図である。分岐命令５０４は、命令のタイプ、１つ又は複数のレジスタ・オペランド（Ｒｅｇ．１）、及び／又はデータを識別するのに用いられるオペレーション・コード（Ｏｐ−Ｃｏｄｅ）を含むことができる。図示されるように、分岐命令５０４はまた、ＢＲＨビット、ＢＰＲＤビット、及び／又はＣＮＴビットを格納するために用いられるビットを含むこともできる。
【００５６】
上述のように、例えば、分岐命令５０４が実行されたとき、ローカル分岐履歴情報を修正することができる。次に、ローカル分岐履歴情報を命令５０４にエンコードすることができ、その結果、命令が後にデコードされたとき、ローカル分岐履歴情報を用いて分岐命令の結果を予測できるようになる。下記のように、場合によっては、分岐命令５０４が再エンコードされたとき、その命令を含むＩ−ラインを変更されたものとしてマーク付けし、再びＩ−キャッシュ２２２に書き戻す。
【００５７】
本発明の一実施形態において、ローカル分岐履歴情報がＩ−ライン又は分岐命令に再エンコードされた場合、システム１００において用いられるキャッシュ及び／又はメモリの各レベルは、Ｉ−ライン又は分岐命令内に含まれる再エンコードされた情報のコピーを含むことができる。本発明の別の実施形態においては、キャッシュ及び／又はメモリの特定のレベルだけが、命令及び／又はＩ−ライン内に含まれる再エンコードされた情報を含み得る。当業者には周知のキャッシュ・コヒーレンシ（cache coherency）原理を用いて、キャッシュ及び／又はメモリの各レベルにおけるＩ−ラインのコピーを更新することができる。
【００５８】
命令キャッシュを用いる従来のシステムにおいて、命令は、典型的には、プロセッサ１１０によって修正されないことが留意される。したがって、従来のシステムにおいては、Ｉ−ラインは、典型的には、Ｌ２キャッシュ１１２に書き戻されるのではなく、しばらく後にＩ−キャッシュ２２２からエージ・アウトされる。しかしながら、ここに説明されるように、幾つかの実施形態においては、修正されたＩ−ライン及び／又は命令をＬ２キャッシュ１１２に書き戻すことができ、これにより、ローカル分岐履歴情報（及び／又は、他のタイプの情報／フラグ）をより高いキャッシュ・レベル及び／又はメモリ・レベルに保持することが可能になる。命令情報をより高いキャッシュ・レベルに書き戻すことによって、計算を繰り返す必要なしに、既に計算された命令情報及び結果（例えば、命令のプリデコード及び／又は実行中に計算された情報）を後で再使用することができる。格納された命令情報を再使用し、命令情報の再計算を低減させることによって、後のプリデコード及びスケジューリング中に、命令をプリデコードし、実行するのに消費される電力を低減させることができる。
【００５９】
一例として、Ｉ−ライン内のプリデコードされた命令がプロセッサ・コアによって処理されたとき（潜在的にローカル分岐履歴情報が更新される）、Ｉ−ラインをＩ−キャッシュ２２２内に書き込むことができ（例えば、ライトバック回路２３８を用いて）、潜在的にＩ−キャッシュ２２２に格納されたＩ−ラインのより古いバージョンを上書きする。一実施形態においては、Ｉ−ラインに格納された情報に変更がなされた場合、Ｉ−ラインをＩ−キャッシュ２２２内に配置することだけ可能である。随意的に、一実施形態においては、Ｉ−ラインをＩ−キャッシュ２２２に常に書き戻すことができる。
【００６０】
本発明の一実施形態によると、修正されたＩ−ラインがＩ−キャッシュ２２２に書き戻されたとき、変更されたものとしてＩ−ラインをマーク付けすることができる。Ｉ−ラインがＩ−キャッシュ２２２に書き戻され、変更されたものとしてマーク付けされた場合、Ｉ−ラインは、異なる時間にわたってＩ−キャッシュ内に残ることができる。例えば、Ｉ−ラインがプロセッサ・コア１１４に頻繁に用いられる場合には、Ｉ−ラインは、数回にわたってＩ−キャッシュ２２２にフェッチされ、戻され、潜在的には毎回更新される。しかしながら、Ｉ−ラインが頻繁に使用されない場合（エージング（ageing）と呼ばれる）、Ｉ−ラインをＩ−キャッシュ２２２からパージすることができる。Ｉ−ラインがＩ−キャッシュ２２２からパージされたとき、Ｉ−ラインが変更されたものとしてマーク付けされたかどうかの判定をなすことができる。Ｉ−ラインが変更されたものとしてマーク付けされた場合、Ｉ−ラインをＬ２キャッシュ１１２に書き戻すことができる。随意的に、Ｉ−ラインをＬ２キャッシュ１１２に常に書き戻すことができる。一実施形態においては、Ｉ−ラインを随意的に一度に幾つかのキャッシュ・レベルに（例えば、Ｌ２キャッシュ１１２及びＩ−キャッシュ２２２に）、又は、Ｉ−キャッシュ２２２以外のレベルに（例えば、直接Ｌ２キャッシュ１１２に）書き戻すことができる。
【００６１】
一実施形態においては、上述のように、命令が実行された後、分岐命令５０４内のビットを再エンコードすることができる。場合によっては、命令がより高レベルのソース・コードからコンパイルされたとき、ローカル分岐履歴情報を命令にエンコードすることもできる。例えば、一実施形態において、ソース・コードをコンパイルするのに用いられるコンパイラは、分岐命令を認識し、ローカル分岐履歴情報を生成し、そうした情報を分岐命令にエンコードするように設計することができる。
【００６２】
例えば、一旦プログラムのソース・コードが生成されると、ソース・コードを命令にコンパイルすることができ、次に、テスト実行（又は「トレーニング」）中、命令を実行することができる。プログラムにおける分岐命令についてのローカル分岐履歴情報を生成するために、テスト実行及びテスト実行の結果を監視することができる。次に、テスト実行に照らして、分岐命令についてのローカル分岐履歴情報を適切な値に設定するように、ソース・コードを再コンパイルすることができる。場合によっては、プロセッサ１１０においてテスト実行を行なうことができる。場合によっては、プロセッサ１１０をテスト実行用のための特別なテスト・モードに置くために、プロセッサ１１０内の制御ビット又は制御ピンを用いることができる。随意的に、テスト実行を行ない、結果を監視するように設計された特別なプロセッサを用いることができる。
【００６３】
図６は、本発明の一実施形態による、分岐予測情報を格納するための回路を示すブロック図である。場合によっては、プロセッサ・コア１１４は、分岐実行回路６０２を利用して、分岐命令を実行し、分岐予測情報を記録することができる。また、分岐実行回路６０２はを用いて、分岐履歴ストレージ６０４を制御し、これにアクセスすることができる。分岐履歴ストレージ６０４は、例えば、分岐履歴テーブル６０６を含むことができる。
【００６４】
図７は、本発明の一実施形態による分岐履歴テーブル６０６を示すブロック図である。上述のように、エントリ７０６を、分岐命令のグローバル分岐履歴（例えば、ＧＢＲＨ、ＧＢＣＮＴ、及び／又はＧＢＰＲＤ）を記述する分岐履歴テーブル内に配置することができる。場合によっては、分岐命令がローカルに予測可能でない場合にのみ、こうしたエントリを作製することができる。したがって、分岐履歴テーブル６０６は、プロセッサ１１０によって実行されている分岐命令の全てについてのエントリを含むことはできない。分岐命令のアドレス（分岐命令アドレス）及びグローバル分岐履歴を示すビットは、分岐履歴テーブル６０６への索引７０４として用いることができる。随意的に、場合によっては、分岐命令アドレスの一部だけ（例えば、グローバル分岐履歴を示す５ビットに加えて８ビットの分岐命令アドレスだけ）を、分岐履歴テーブル６０６への索引７０４として用いることができる。
【００６５】
グローバル分岐履歴に索引付けするために、いずれかの適切な数のビットを用いることができる（例えば、１、２、３、４、５、又はそれ以上）。例えば、対応する以前の条件分岐命令により分岐命令が分岐されたか又は分岐されなかったかを、各々のビットが示すことができる（例えば、ビット０のＧＢＨは、以前の分岐命令が分岐された場合にはを設定することができ、又は以前の分岐命令が分岐されなかった場合には消去することができ、ビット１のＧＢＨは、先行する条件分岐命令の結果に応じて設定又は消去することができる、以下同様）。
【００６６】
本発明の一実施形態において、分岐履歴テーブル６０６内のエントリ７０６は、対応する条件分岐命令がプロセッサ１１０（例えば、Ｉ−キャッシュ２２２、Ｌ２キャッシュ１１２、Ｌ３キャッシュ、及び／又は他のいずれかのキャッシュ・レベル）のキャッシュに入れられる限り、保持することができる。場合によっては、分岐命令についてのエントリ７０６は、分岐命令が特定のレベルのキャッシュにある場合にのみ（例えば、分岐命令がＩ−キャッシュ２２２又はＬ２キャッシュ１１２にあるときにのみ）残されてもよい。随意的に、例えば、エントリ７０６への最新のアクセスを示すエージ（age）値を用いて、エントリ７０６を分岐履歴テーブル６０６からエージ・アウトすることができる。例えば、一旦エントリ７０６についてのエージ値がエージの閾値を上回り、それによりエントリ７０６が頻繁に使用されていないことが示されると、分岐履歴テーブル６０６からエントリ７０６を除去することができる。随意的に、当業者には周知の他のいずれかのキャッシュ保持技術を用いて、エントリ７０６を分岐履歴テーブル６０６内に保持することができる。
【００６７】
場合によっては、エントリ７０６を分岐履歴テーブル６０６内に保持するための上述された技術に加えて、分岐命令がローカルに予測可能であることを分岐命令についてのローカル分岐履歴情報が示す場合に、分岐履歴テーブル内のエントリ７０６を除去することができる。例えば、分岐命令が以前にローカルに予測不可能であり、その結果、グローバル分岐履歴情報が格納された場合、分岐命令が後でローカルに予測可能になる場合、グローバル分岐履歴情報を含むエントリ７０６を分岐履歴テーブル６０６から除去することができる。したがって、場合によっては、グローバル分岐履歴情報は、不必要に分岐履歴テーブル６０６内に格納しなくてもよい。
【００６８】
場合によっては、ローカル分岐履歴情報及びグローバル分岐履歴情報の両方をテーブル（例えば、ローカル分岐履歴テーブルに加えて、グローバル分岐履歴テーブル）内に格納することができ、そこで、分岐命令がローカルに予測不可能であることをローカル分岐履歴テーブル内のエントリが示す場合に限り、エントリがグローバル分岐履歴テーブル内に作製される。また、場合によっては、そうした情報をＩ−ラインに付加し、及び／又は、そうした情報を命令に再エンコードすることによって、グローバル分岐履歴及びローカル分岐履歴の両方を格納することができる。例えば、一実施形態において、ローカル分岐履歴情報を各々の分岐命令に再エンコードすることができ、分岐についてのグローバル分岐履歴が、分岐命令を含むＩ−ラインに付加される。一実施形態においては、分岐命令がローカルに予測可能でない場合に限り、所定の命令についてのグローバル分岐履歴を、命令を含むＩ−ラインに付加することができる。
【００６９】
条件分岐の事前解決（preresolution）
場合によっては、条件分岐命令の結果は、事前に解決可能であり得る（例えば、条件分岐命令をアウト・オブ・オーダー方式（out-of-order）で試験発行（trial issue）し、実行することによって、プログラムの順序に従って分岐命令が実行される前に、条件分岐命令の結果を判定することができる）。条件分岐命令が事前に解決可能である場合には、プロセッサ・コア１１４において条件分岐命令が実行される前に、条件分岐命令の結果（例えば、分岐される又は分岐されない）を判定することができる。次に、判定された結果を用いて、命令の実行をスケジューリングすることができる（例えば、命令をフェッチし、スケジューリングし、条件分岐命令についての事前解決されたパスに沿ってプロセッサ・コア１１４に対して発行することによって）。したがって、場合によっては、条件分岐の分岐条件が成立するか又は分岐条件が不成立であるかを判定するために、分岐予測情報（例えば、分岐命令の以前の実行からの情報）を用いることはできない。
【００７０】
図８は、本発明の一実施形態による、条件分岐命令を事前解決するためのプロセス８００を示す流れ図である。プロセス８００は、実行される条件分岐命令を含むＩ−ラインがキャッシュから（例えば、Ｌ２キャッシュ１１２又はＩ−キャッシュ２２２から）フェッチされるステップ８０２で開始することができる。ステップ８０４において、条件分岐命令が事前解決可能であるかどうかの判定を行なうことができる。条件分岐命令が事前解決可能である場合には、ステップ８０６において、分岐命令をアウト・オブ・オーダー方式でプロセッサ・コア１１４に試験発行することができる。ステップ８０８において、条件分岐命令を実行することができ、これにより条件分岐命令の結果（例えば、分岐条件が成立する又は分岐条件が不成立である）が事前解決される。次に、ステップ８１０において、分岐命令の事前解決の結果を格納することができる。ステップ８１２において、スケジューリング中、格納された分岐命令の結果を用いて、後続命令の実行をスケジューリングすることができる。次に、ステップ８１４において、プロセス８００が終了することができる。
【００７１】
上述のように、条件分岐命令が事前解決可能であるかどうかの判定を行なうことができる。条件分岐命令は、種々の場合に事前解決可能であり得る。例えば、条件分岐命令は、条件レジスタ（ＣＲ）内のビットをチェックして、別の命令に分岐するかどうかを判定することができる。条件レジスタ内のビットが設定されており、分岐命令に先行するいずれの命令によっても（例えば、条件分岐命令がＬ２キャッシュ１１２からフェッチされる時刻と条件分岐命令が実行される時刻との間に実行される命令によって）修正されない場合、条件分岐命令を事前解決することができる。先行する命令が条件分岐命令の結果を修正しないことを保証することによって（例えば、先行する命令が条件レジスタにおける値を変更せず、それにより分岐命令の結果が変更されることを保証することによって）、先行する命令を実行することなく、分岐命令（又は、命令の組み合わせ）をアウト・オブ・オーダー方式で試験発行することによって、分岐命令の結果を成功裏に判定することができる。次に、後で使用するために、条件分岐命令の結果を格納することができる。
【００７２】
場合によっては、条件分岐命令の結果を事前解決しようとして、命令の結果を保存せずに、２つ又はそれ以上の命令をアウト・オブ・オーダー方式で試験発行することがある。命令の結果を保存せずに命令をアウト・オブ・オーダー方式で試験発行することによって、典型的にアウト・オブ・オーダー実行（例えば、依存性のチェック）と関連したオーバーヘッドなしに、条件分岐の結果を事前解決することができる（例えば、分岐命令を実際に実行する前に）。例えば、場合によっては、条件レジスタ内のビットに影響を及ぼす、分岐命令に先行する加算命令（add instruction）或いは他の算術又は論理命令を実行することができる。影響されたビットに基づいて、条件分岐命令は、分岐条件が成立するかどうかを判定することができる（付加−分岐の組み合わせと呼ばれる）。付加−分岐の組み合わせを事前解決できる（例えば、分岐命令及び加算命令の結果に影響を及ぼす他の直前の命令を実行する必要がない）場合、加算命令及び分岐命令をアウト・オブ・オーダー方式で試験発行し、これを用いて条件分岐命令の結果を判定し、格納することができる。付加−分岐の組み合わせを試験発行した後、事前解決された条件分岐命令の結果を格納することができ、一方、加算命令（合計）及び分岐命令の結果（プログラム・カウンタを分岐ターゲット・アドレスに変更する）を廃棄することができる。したがって、試験発行及び実行は、命令を実際に実行する前のプリフェッチに類似している。
【００７３】
場合によっては、条件分岐命令の結果を事前解決しようとして、３つ又はそれ以上の命令をアウト・オブ・オーダー方式で試験発行することができる。例えば、データをレジスタにロードするために、ロード命令を用いることができ、次に、比較命令を用いてレジスタ・コンテンツを他のデータと比較することができる。次に、比較命令の結果は、分岐条件が成立するかどうかを判定するために用いられる条件レジスタ内のビットに影響を及ぼすことがある（ロード−比較−分岐の組み合わせと呼ばれる）。ロード−比較−分岐の組み合わせを事前解決することができる（例えば、命令の結果に影響を及ぼす他の直前の命令を実行する必要がない）場合、命令をアウト・オブ・オーダー方式で試験発行し、この命令を用いて、条件分岐命令の結果を判定し、格納することができる。
【００７４】
一実施形態において、条件分岐命令及び他の命令を含むＩ−ラインの部分を選択し、アウト・オブ・オーダー方式での試験発行を実行することができ、これにより条件分岐命令が事前解決される。Ｉ−ラインの部分が選択され、アウト・オブ・オーダー方式で試験発行された場合、Ｉ−ラインの部分は、分岐命令、１つ又は複数の先行する命令、及び１つ又は複数の後続命令を含むことができる。条件分岐命令の結果は、スケジューリング及び実行のために格納し、使用することができ、他の命令の結果は廃棄することができる。
【００７５】
上述のように、場合によっては、条件分岐命令の試験発行を行なうことができる。したがって、本発明の一実施形態において、条件分岐命令が１つ又は複数の命令のアウト・オブ・オーダー実行によって事前解決された場合、実行された命令によって変更されたいずれのレジスタ値も格納することなく、アウト・オブ・オーダー方式で実行された命令を実行することができる。例えば、分岐命令が事前解決された場合、上述のように条件分岐命令の結果（分岐条件が成立する又は分岐条件が不成立である）を格納することはできても、事前解決された分岐命令によって、プログラム・カウンタ（通常、分岐命令に影響を受ける）を変えることができない。同様に、事前解決中に、加算命令、ロード命令、比較命令、及び／又はいずれの他の命令が試験発行され、条件分岐命令が事前解決され、分岐結果（分岐条件が成立する又は分岐条件が不成立である）が格納された後、こうした命令の結果を廃棄することができる。さらに、上述の結果は、事前解決されていない他の命令（例えば、イン・オーダーで正常に実行される命令）に転送することができない。場合によっては、事前解決中にアウト・オブ・オーダー方式で試験発行された命令の各々においてビットを設定し、命令の結果がいずれのレジスタにも又は他の命令にも影響を及ぼすべきではないこと、及び、分岐の結果（分岐条件が成立する又は分岐条件が不成立である）の結果を格納すべきであることを示すことができる。
【００７６】
一実施形態において、命令が事前解決可能であることを識別するために、分岐命令内にフラグを設定することができる。例えば、条件分岐命令のプリデコード及びスケジューリング中に、フラグを設定することができる（例えば、プリデコーダ及びスケジューラ回路２２０によって）。上述のような命令の組み合わせ又はＩ−ラインの部分に対して、こうしたフラグを設定することもできる。フラグが設定された場合、プロセッサ１１０がフラグを検出し、これに応答して、条件分岐命令及び事前解決のために必要な他の命令を、アウト・オブ・オーダー方式で試験発行し、事前解決することができる。場合によっては、フラグは、トレーニング・モード（以下に説明される）中に設定することができ、条件分岐命令の後の実行中、設定されたままにすることができる。随意的に、コンパイラによってフラグをコンパイル時刻に設定することができ、フラグを後に使用して、命令を事前解決すべきかどうかを判定することができる。
【００７７】
分岐命令を実行するために、カスケード式遅延実行プロセッサ・ユニット（図３に関して上述された）が用いられる本発明の一実施形態において、事前解決される命令は、最も遅延される実行パイプライン（例えば、図３のパイプラインＰ３）に試験発行することができる。例えば、最も遅延される実行パイプラインが最も使用されない実行パイプラインである場合には、事前解決された命令を最も遅延される実行パイプラインに試験発行することができる。
【００７８】
場合によっては、事前解決可能な各分岐命令において事前解決を行なうことができる。随意的に、本発明の一実施形態において、条件分岐命令が事前解決可能であり、予測可能でない（例えば、ローカルに及び／又はグローバルに予測可能でない）場合にのみ、事前解決を実行することができる。例えば、条件分岐命令のローカル予測可能性が予測可能性の閾値を下回る場合（例えば、上述されたＣＮＴ値によって判定されるように）、使用される場合、条件分岐命令のグローバル予測可能性が予測可能性の閾値を下回る場合、及び条件分岐命令が事前解決可能である場合、ここで述べられるように条件分岐命令を事前解決することができる。随意的に、当業者には周知の条件分岐命令の予測可能性を判定するための何らかのスキームを用いて、条件分岐命令が予測可能であるかどうかを判定することができる。
【００７９】
本発明の一実施形態において、命令がＬ２キャッシュ１１２からフェッチされたとき、条件分岐命令を事前解決することができるかどうかの判定を行なうことができる。例えば、Ｉ−ラインがＬ２キャッシュ１１２からフェッチされたとき、フェッチされたＩ−ラインが、事前解決すべき条件分岐命令を含むかどうかを判定するために、プリデコーダ及びスケジューラ回路２２０を用いることができる。Ｉ−ラインが事前解決すべき条件分岐命令を含む場合、プリデコーダ及びスケジューラ２２０は、例えば、他の命令がＩ−キャッシュ２２２内に配置される前に、条件分岐命令、及び事前解決するのに必要な他の命令をアウト・オブ・オーダー方式でプロセッサ・コア１１４に試験発行することができる。
ここから
【００８０】
本発明の一実施形態において、条件分岐命令を含むＩ−ラインがＬ２キャッシュ１１２からプリフェッチされた後、条件分岐命令を事前解決することができる。例えば、フェッチされたＩ−ラインが、Ｉ−ラインの外にある命令に分岐する（これをターゲットとする）「出口分岐命令」を含むとプロセッサ１１０が判断したとき、Ｉ−ラインのプリフェッチを行なうことができる。出口分岐命令のターゲット・アドレスを抽出し（例えば、ターゲット・アドレスを計算すること、又は以前に格納されたターゲット・アドレスを使用することによって）、これを用いて、Ｌ２キャッシュ１１２、より高レベルのキャッシュ、及び／又はメモリから、ターゲットとされた命令を含むＩ−ラインをプリフェッチすることができる。例えば、Ｉ−ライン内の命令をターゲットとした出口分岐命令が実行される前に、及び／又は、Ｉ−ライン内の命令をターゲットとするようにプロセッサ１１０についてのプログラム・カウンタが変更される前に、こうしたプリフェッチを行なうことができる。例えば、分岐予測情報を用いて、出口分岐命令の結果を予測することができる。結果として、出口分岐がなされた場合／時、ターゲットとされたＩ−ラインがＩ−キャッシュ２２２内に既にあってもよく、これによりＩ−キャッシュ２２２における費用のかかるミスが回避され、全体的な性能が改善される。
【００８１】
上述のように、出口分岐命令のターゲットとされたＩ−ラインがプリフェッチされた後、プリフェッチされたＩ−ラインが事前解決すべき条件分岐命令を含むかどうかの判定を行なうことができる。プリフェッチされたＩ−ライン内に含まれる条件分岐命令を事前解決することによって、条件分岐命令の結果を早期に判定することができ、それによりプロセッサ１１０が、命令の実行をより良好にスケジューリングすることが可能になる。さらに、場合によっては、一旦プリフェッチされたＩ−ライン内の分岐命令の結果が事前解決されると、必要に応じて、事前解決された分岐命令のターゲット・アドレスを用いて、付加的なＩ−ラインをプリフェッチすることができる。
【００８２】
条件分岐命令がキャッシュからプリフェッチされる一実施形態において、別のＩ−ライン内の予測可能な条件分岐命令（又は、事前解決された条件分岐命令）に基づいて、プリフェッチが（及び／又は、Ｉ−ラインのチェーンがプリフェッチされる場合、他の先行するプリフェッチが）行なわれた場合にのみ、条件分岐命令を事前解決することができる。随意的に、場合によっては、たった１個又は２個の予測不可能な条件分岐命令（例えば、予測不可能な分岐命令に基づいたプリフェッチ、これに続く別の予測不可能な分岐命令に基づいたプリフェッチ）に基づいて先行するプリフェッチが行なわれた場合に限り、条件分岐命令を事前解決することができる。予測不可能な条件分岐命令に基づいて先行するプリフェッチの数を制限することによって、プリフェッチされたＩ−ライン内の命令を最終的に実行することができない場合（例えば、予測とは正反対の結果を用いて最終的に解決される、予測不可能な分岐命令に基づいた不正確なプリフェッチのために）、事前解決を行なうのに必要なリソースを保存することができる。
【００８３】
図９は、本発明の一実施形態による、Ｌ２キャッシュ１１２からフェッチされた（又は、プリフェッチされた）条件分岐命令を事前解決するための例示的な回路を示すブロック図である。図示されるように、例えば、Ｌ２キャッシュ１１２からフェッチされ、プリデコーダ及びスケジューラ２２０を介してＩ−キャッシュ２２２に中継されるＩ−ラインに格納された１つ又は複数のアドレスに基づいて、Ｉ−ラインのプリフェッチを行なうために、プリフェッチ回路９０２を用いることができる。また、図示されるように、事前解決可能な分岐及び事前解決可能な分岐命令の組み合わせを検出し、かつ、Ｌ２キャッシュ１１２からフェッチ又はプリフェッチされるＩ−ラインから命令を選択するために、分岐事前解決検出及び選択回路９０４を設けることができる。
【００８４】
一実施形態においては、事前解決される命令を、キュー９０６内に配置することができる。発行及びディスパッチ回路２３４を用いて、命令をＩ−ライン・バッファ２３２又はキュー９０６から発行するかどうかを判定することができる。場合によっては、プロセッサ・コア１１４の自由サイクル（例えば、未使用のプロセッサ・サイクル）中、条件分岐命令又は分岐命令の組み合わせを実行することができる。例えば、一実施形態においては、実行中、Ｉ−ライン・バッファ２３２内の命令を優先することができる。Ｉ−ライン・バッファ２３２から実行される命令がストールをもたらす（例えば、キャッシュ・ミスのために）場合、発行／ディスパッチ回路２３４は、キュー９０６から命令を試験発行し、これにより、プロセッサ・コア１１４内の他の命令の実行を妨げることなく、事前解決を実行するために、プロセッサ・コア１１４が用いることができる。随意的に、一実施形態においては、命令がある閾値時間キュー内にあった後、又はＩ−ライン・バッファ２３２からの閾値数の命令が実行された後、キュー９０６から命令を試験発行することができる（例えば、試験発行された条件分岐命令又は分岐命令の組み合わせごとに、第１の数のスケジューリングされた命令をアウト・オブ・オーダー方式で実行することができる）。
【００８５】
キュー９０６内の分岐命令／組み合わせを試験発行するための他の実施形態は、当業者には容易に明らかになるはずである。例えば、先行実行命令タグを命令内に配置する、又はキュー９０６内の命令と共に格納することができ、プログラム・カウンタが先行実行命令タグとほぼ等しいとき（例えば、プログラム・カウンタが命令の実行から１キャッシュ・ライン離れているときなど、プログラム・カウンタが先行実行命令タグから離れた閾値数の命令であるとき）、タグ付けされ命令をキュー９０６からた取り出し、試験発行することができる。例えば、先行実行命令タグは、試験発行される事前解決命令のより上位のビットだけを提供することができる。先行実行命令タグのより上位のビットは、例えば、試験発行される命令を含む、命令ライン、２つの命令ラインのグループ、又は４つの命令ラインのグループ等を識別することができる。プログラム・カウンタが識別された命令ライン内又はその付近に含まれるとき、タグ付けされた命令を試験発行することができ、上述のような条件分岐命令を実行する際に後で使用するために、事前解決結果を格納することができる。
【００８６】
したがって、プリフェッチされた命令がキュー９０６内に配置された場合、実行される可能性が高い命令（例えば、プログラム・カウンタとほぼ等しい先行実行命令タグを有し、かつ、事前解決命令付近で分岐し得る先行する分岐命令を有することができない事前解決命令）だけを、キュー９０６から実際に取り出し、実行することができる。随意的に、キュー９０６は、キュー内の命令が通過する一定の遅延を有することができる。命令が一定の遅延期間にわたってキュー９０６内にあった後、命令を試験実行することもできる。
【００８７】
本発明の一実施形態において、条件分岐命令の事前解決された結果を用いて、Ｉ−ラインの後のプリフェッチを行なうことができる。例えば、分岐条件が成立するときに条件分岐命令が別のＩ−ライン内のターゲット命令に分岐する場合、分岐命令の事前解決された結果が、分岐条件が成立することを示す場合には、他のＩ−ラインをプリフェッチすることができる。事前解決された結果が、分岐条件が不成立であることを示す場合、別の分岐命令のターゲット又は別の後続Ｉ−ラインに対して、プリフェッチを用いることができる。
【００８８】
本発明の一実施形態においては、Ｉ−キャッシュ２２２からフェッチ又はプリフェッチされた条件分岐命令又は条件分岐命令の組み合わせを事前解決することができる。例えば、Ｉ−キャッシュ２２２からフェッチされた第１のＩ−ライン（例えば、プロセッサ・コア１１４からのデマンド／要求に応答して）は、１つ又は複数のターゲット有効アドレス（或いは、有効アドレスの１つ又は複数の部分、例えば、その部分は、Ｉ−キャッシュ２２２内のＩ−ラインを識別するのに十分なだけのアドレス・ビットとすることができる）を含むことができる。ターゲット有効アドレスは、例えば、最初にフェッチされたＩ−ラインにおける命令の後に実行することができる命令を含む後続Ｉ−ラインに対応することができる。場合によっては、プリデコード及びスケジューリング（例えば、プリデコーダ及びスケジューラ２２０による）の際に、フェッチされる一連のＩ−ラインに対応するターゲット・アドレスを生成し、これをＩ−ライン内に配置することができる。随意的に、以下に述べられるように、第１のＩ−ライン内の出口分岐命令についてのターゲット・アドレスを用いることができる。
【００８９】
一実施形態においては、１つ又は複数のターゲット有効アドレスを用いて、Ｉ−キャッシュ２２２から後続Ｉ−ラインをプリフェッチすることができる。例えば、第１のＩ−ラインは、２つのＩ−ラインを識別する２つの有効アドレスの部分を含むことができ、その各々をプリフェッチすることができる。場合によっては、プリフェッチされるＩ−ラインがＩ−キャッシュ２２２にないという判定が行なわれる場合、Ｌ２キャッシュ１１２からＩ−ラインをフェッチすることができる。同様に、各々のプリフェッチされたＩ−ラインについて、後のプリフェッチのために（例えば、一連のプリフェッチを行なうために）プリフェッチされたＩ−ライン内のターゲット・アドレスを用いることができる。
【００９０】
有効アドレスを用いてＬ１キャッシュ２２２からプリフェッチされる各Ｉ−ラインを、１つ又は複数のバッファ内に配置することができる。各々のＩ−ラインについて、Ｉ−ラインが事前解決可能な条件分岐命令又は条件分岐命令の組み合わせを含むかどうかの判定を行なうことができる。上述のように、Ｉ−ラインが事前解決可能な条件分岐命令又は条件分岐命令の組み合わせを含む場合には、それらをアウト・オブ・オーダー方式で試験発行し、事前解決することができる。
【００９１】
図１０は、本発明の一実施形態による、Ｉ−キャッシュ２２２からフェッチされた（又は、プリフェッチされた）条件分岐命令を事前解決するための例示的な回路を示すブロック図である。図示されるように、Ｉ−キャッシュ・プリフェッチ回路１００２を用いて、Ｉ−キャッシュ２２２からフェッチ又はプリフェッチされたＩ−ライン内のターゲット・アドレスを検出し、該ターゲット・アドレスに対応するＩ−ライン要求を発行することができる。次に、プリフェッチされたＩ−ラインを、４つのＩ−ライン・バッファ２３２、１０１０、１０１２、１０１４のうちの１つの中に配置することができる。例えば、第１のＩ−ライン・バッファ２３２を用いて、命令をプログラム順に実行することができ（例えば、実行されているプログラムの現在の部分について）、一方、他のＩ−ライン・バッファ１０１０、１０１２、１０１４を、条件分岐命令／命令の組み合わせのアウト・オブ・オーダー実行のために用いることができる。予測されていない又は事前解決されていない分岐パスをバッファリングするため、又は、以下に述べられる同時マルチスレッド処理などの他の目的のために、他のＩ−ライン・バッファ１０１０、１０１２、１０１４を用いることもできる。
【００９２】
一旦プリフェッチされたＩ−ラインからの条件分岐命令／命令の組み合わせがＩ−ライン・バッファ１０１０、１０１２、１０１４内に配置されると、上述のように、事前解決のために、条件分岐命令／命令の組み合わせをアウト・オブ・オーダー方式で試験発行することができる。場合によっては、（例えば、図９のキュー９０６を介して）Ｌ２キャッシュ１１２からアウト・オブ・オーダー方式で試験発行された命令に関して上述されたように、プロセッサ・コア１１４における自由サイクル中、他のバッファ１０１０、１０１２、１０１４からの条件分岐命令／命令の組み合わせだけを試験発行し、実行することができる。
【００９３】
Ｉ−キャッシュ２２２又はＬ２キャッシュ１１２からフェッチされた命令の事前解決に関して上述したが、例えば、条件分岐命令がＬ３キャッシュからフェッチされた後など、他の時刻に事前解決を実行することもできる。
【００９４】
上述のように、事前解決された条件分岐命令の結果（例えば、分岐条件が成立する又は分岐条件が不成立である）を格納し、後続命令のスケジューリングを決定するために後で用いることができる（例えば、後続命令をプロセッサ・コア１１４に正しく発行し、及び／又はプリフェッチすることを可能にする）。本発明の一実施形態においては、条件分岐命令の結果を、コンテンツ・アドレス可能メモリ（ＣＡＭ）を用いてアクセスされるビットとして格納することができる。条件分岐命令の事前解決が条件分岐命令がとられることを示す場合には、格納されたビットを設定することができる。さもなければ、事前解決が条件分岐命令がとられないことを示す場合には、格納されたビットを消去することができる。
【００９５】
図１１は、本発明の一実施形態による、事前解決された条件分岐情報を格納するための例示的なＣＡＭを示すブロック図である。アドレスがＣＡＭ１１０２に適用されると、ＣＡＭ１１０２の出力は、アドレスに対応するエントリがＣＡＭ１１０２内に存在するかどうかを示し、エントリを識別することができる。次に、選択回路１１０４によってエントリ識別を使用し、例えば、対応する事前解決された分岐データ（例えば、ＲＡＭアレイ）のテーブル１１０６から、エントリ／アドレスと関連したデータを得ることができる。したがって、分岐命令のアドレスをＣＡＭ１１０２への索引として使用し、もしあれば、事前解決された分岐命令の格納された結果を得ることができる。場合によっては、条件分岐命令アドレスの一部だけを用いて、条件分岐命令の結果を格納することができる。実行中、ＣＡＭ１１０２をチェックして、分岐命令の結果が事前解決されたかどうかを判定することができ、事前解決された場合には、これに応じて分岐命令及び後続命令の実行をスケジューリングする。さらに、上述のように、場合によっては、事前解決可能であり、予測可能ではない条件分岐命令だけを事前解決することができる。全ての条件分岐命令を事前解決できるわけではないので、これに応じて、条件分岐命令を格納するのに必要なメモリ（例えば、ＣＡＭ１１０２及び／又はテーブル１１０６）のサイズを減少させることができる。
【００９６】
本発明の一実施形態においては、ＣＡＭ１１０２及び事前解決された分岐データ・テーブル１１０６を用いて、１つ又は複数の条件分岐命令についての条件レジスタ・ビット（例えば、条件分岐命令及び／又は他の情報の結果の代わりに、或いはそれに加えて）を格納することができる。条件分岐命令が実行のためにスケジューリングされているとき、条件分岐命令に対応する条件レジスタ・エントリのビットをチェックし、分岐条件が成立するか又は分岐条件が不成立であるかを判定することができる。
【００９７】
例えば、条件レジスタが、プロセッサ１１０で処理した値がゼロである（ゼロである場合は分岐する、すなわちＢＲＺ）ことを示す場合には、１つのタイプの条件分岐命令の分岐条件が成立し得る。ＢＲＺ命令及び後続命令が実行のためにスケジューリングされているとき、プロセッサ１１０は、ＣＡＭ１１０２及びテーブル１１０６をチェックして、ＢＲＺ命令に対応する条件レジスタ・エントリがテーブル１１０６内にあるかどうかを判定することができる。こうしたエントリが配置されると、条件レジスタ・エントリにおけるゼロ・ビット（Ｚ−ビット）を調べて、条件分岐命令の分岐条件が成立するか（Ｚ−ビットが設定された場合）、又は分岐条件が不成立であるか（Ｚ−ビットが消去される場合）を判定することができる。
【００９８】
本発明の一実施形態においては、複数の条件分岐命令が、事前解決された分岐データ・テーブル１１０６内の単一の条件レジスタ・エントリを利用してもよい。各々の命令は、条件レジスタ・エントリをチェックして、分岐命令の分岐条件が成立するか又は分岐条件が不成立であるかを判定することができる。例えば、１つの条件分岐命令が、条件レジスタ・エントリについてのＺ−ビットをチェックして、前の計算結果がゼロであったかどうかを判定することができる。別の条件分岐は、前の計算結果がオーバーフローをもたらしたか（例えば、計算により、値を格納するのに用いられるカウンタによって保持されるのに大きすぎる値がもたらされたか）を示すオーバーフロー・ビットをチェックすることができる。したがって、場合によっては、各々を複数の分岐命令のために用いることができる条件レジスタ・エントリを格納することによって、事前解決された分岐データ・テーブル１１０６のサイズを減少させることができる。
【００９９】
場合によっては、条件分岐命令が事前解決された場合でも、条件分岐命令の両方のターゲットをプリフェッチし、及び／又は、バッファに入れることができる。例えば、場合によっては、条件分岐命令は、事前解決が完全に正しいかどうかを判定することなく（例えば、実行時に、プログラム順の条件分岐命令に先行する命令が、事前解決された結果を修正するかどうかを判定することなく）、条件分岐命令を事前解決することがある。このような場合、条件分岐命令の事前解決は、条件分岐命令のパスに後続する「最良の推量（best quess）」とすることができる。一実施形態においては、事前解決されたパスだけを発行しながら、条件分岐命令の両方のパス（事前解決されたパス及び事前解決されていないパス）をバッファに入れることによって、事前解決されたパスが命令の後に続かなかったことを条件分岐命令の実行が示す場合でも、バッファに入れられ事前解決されていないパスを発行することによって、プロセッサ１１０が迅速に回復することができる。
【０１００】
場合によっては、例えば、条件分岐命令は、条件分岐命令がＬ２キャッシュ１１２から取り出された時点で解決することができない条件に依存するので、条件分岐命令は、事前解決可能ではない。条件分岐命令のために事前解決が用いられない場合、他の技術を用いて、分岐命令後の命令の実行をスケジューリングすることができる。
【０１０１】
例えば、本発明の一実施形態において、ＣＡＭ１１０２をチェックして、条件分岐命令に対応するエントリが存在するかどうかを判定することができる。条件分岐命令についての対応するエントリが存在することをＣＡＭ１１０２が示す場合には、条件分岐命令及び／又は後続命令のスケジューリング及び実行のために、対応するエントリを用いることができる。条件分岐命令についての対応するエントリが存在しないことをＣＡＭ１１０２が示す場合には、条件分岐命令及び／又は後続命令のスケジューリング及び実行のために、別の方法を用いることができる。例えば、分岐予測情報（上述された）を用いて、事前解決可能でない条件分岐命令の結果を予測することができる。随意的に、以下に述べられるように、断定された発行（predicated issue）又はデュアル・パス発行（dual-path issue）を用いて、事前解決可能でない条件分岐命令を実行することができる。随意的に、当業者には周知のいずれかの他の条件分岐解決機構を用いて、条件分岐命令に後続する命令をスケジューリングすることができる。
【０１０２】
条件分岐命令のためのデュアル・パス発行
本発明の一実施形態においては、プロセッサ１１０を用いて、条件分岐命令の（例えば、分岐条件が成立する又は分岐条件が不成立である）複数のパスを同時に実行することができる。例えば、プロセッサ１１０が条件分岐命令を検出すると、プロセッサ１１０は、条件分岐命令の分岐条件成立パスからの命令と分岐条件不成立パスからの命令の両方を発行することができる。条件分岐命令を実行し、条件分岐命令の分岐条件が成立するか又は分岐条件が不成立であるかの判定を行なうことができる（例えば、両方の分岐パスが発行された後）。条件分岐命令の分岐条件が成立する場合、分岐条件不成立パスからの命令の結果を廃棄することができる。分岐条件が不成立である場合、分岐条件成立パスからの命令の結果を廃棄することができる。
【０１０３】
図１２は、本発明の一実施形態による、条件分岐命令の複数のパスを実行するためのプロセス１２００を示す流れ図である。図示されるように、プロセス１２００は、実行される命令のグループを受信するステップ１２０２で開始することができる。ステップ１２０４において、命令のグループは、条件分岐命令を含むかどうかについての判定を行なうことができる。命令のグループが条件分岐命令を含む場合には、ステップ１２０６において、プロセッサ１１０は、条件分岐命令の分岐条件成立パス及び分岐条件不成立パスから命令を発行することができる。ステップ１２０８において、条件分岐命令の分岐条件が成立するか又は分岐条件が不成立であるかについての判定を行なうことができる。条件分岐命令の分岐条件が不成立である場合には、ステップ１２１０において、分岐条件成立パスからの命令の結果を廃棄することができ、一方、分岐条件不成立パスからの命令の結果を伝搬することができる。しかしながら、条件分岐命令の分岐条件が成立する場合には、ステップ１２１２において、分岐条件不成立パスからの命令の結果を廃棄することができ、一方、分岐条件成立パスからの命令の結果を伝搬することができる。次に、ステップ１２１４においてプロセスが終了することができる。
【０１０４】
本発明の一実施形態においては、例えばローカル分岐予測及び／又はグローバル分岐予測を用いて条件分岐命令が予測不可能である場合（又は、随意的に、条件分岐命令が完全に予測可能でない場合）、デュアル・パス発行のみを用いることができる。例えば、ローカル分岐予測が用いられる場合に、条件分岐命令がローカルに予測可能である場合には（例えば、ＣＮＴが予測可能性の閾値より大きいか又はこれと等しい場合には）、デュアル・パス発行を用いることはできない。条件分岐がローカルに予測不可能である場合には、デュアル・パス発行（又は、随意的に、事前解決又は断定された発行）を用いることができる。ローカル分岐予測及びグローバル分岐予測の両方が用いられる場合に、条件分岐命令がローカルに予測可能であるか又はグローバルに予測可能である場合には、デュアル・パス発行を用いることができない。しかしながら、条件分岐命令がローカルにもグローバルにも予測可能でない場合には、デュアル・パス発行（又は、随意的に別の方法）を用いて、条件分岐命令を実行することができる。さらに、場合によっては、分岐の事前解決が用いられる場合、条件分岐命令が予測可能でも事前解決可能でもない場合にのみ、デュアル・パス発行を用いることができる。
【０１０５】
場合によっては、デュアル・パス発行が行われるかどうかは、プロセッサ・コア１１４において２つのスレッドが同時に実行されるかどうかによって決まり得る。例えば、プロセッサ・コア１１４において１つのスレッドだけが実行されている場合には、予測不可能な条件分岐命令が検出される場合、又は部分的にのみ予測可能な分岐が検出される場合、デュアル・パス発行を行なうことができる。
【０１０６】
場合によっては、デュアル・パス発行が行われるかどうかは、条件分岐命令の予測可能性、及び、２つのスレッドが実行されているかどうかの両方によって決まり得る。例えば、条件分岐命令が実行されており、予測不可能な条件分岐命令が検出された場合、デュアル・パス発行が行なわれる間に別のスレッドが休止されているとしても、デュアル・パス発行を用いることができる。しかしながら、部分的に予測可能な条件分岐命令が検出された場合には、他のスレッドが既に休止される又は実行されていない場合も、デュアル・パス発行のみを用いることができる。こうしたデュアル・パス発行の判定はまた、各々のスレッドと関連した優先順位によっても決まり得る。例えば、場合によっては、上述の条件のいずれかを用いて、デュアル・パス発行を受けるスレッドの優先順位が、実行されている他のスレッドの優先順位よりも大きい場合に限り、デュアル・パス発行を行なうことができる。
【０１０７】
本発明の一実施形態においては、条件分岐命令の検出及びデュアル・パス発行の開始は、命令ラインがＬ２キャッシュ１１２からフェッチされ（又は、プリフェッチされ）、Ｉ−キャッシュ２２２に送られたときに、プリデコーダ及びスケジューラ回路２２０によって行なうことができる。場合によっては、プリデコーダ及びスケジューラ２２０は、所定の命令グループが条件分岐命令を含むかどうかを判定することができる。プリデコーダ及びスケジューラ２２０を用いて、条件分岐命令がローカル及び／又はグローバルに予測可能であるかどうかを判定することができる。さらに、プリデコーダ及びスケジューラ２２０を用いて、条件分岐命令の各々のパスについて命令及びＩ−ラインをフェッチし、プリフェッチし、及び／又はバッファに入れることができる。
【０１０８】
一実施形態において、デュアル・パス発行を用いて条件分岐命令を実行できるとプリデコーダ及びスケジューラ２２０が判断する場合、プリデコーダ及びスケジューラ２２０は、命令のためにデュアル・パス発行を用い得ることを示すビットを格納することができる（場合によっては、例えば、命令が事前解決可能でなく、予測可能でもないと判断した後で）。ビットは、例えば、命令にエンコードすることができ、さもなければ、ビットを条件分岐命令と関連付ける方法で格納することができる。場合によっては、デュアル・パス発行が適切であるかどうかを判定するのに用いられる電力消費を減少させるために、以下に述べられるトレーニング段階中にのみ、ビットを計算し、格納することができる。ビットが後で検出されたとき、デュアル・パス発行を用いて、条件分岐命令を実行することができる。
【０１０９】
本発明の一実施形態において、プロセッサ・コア１１４は、条件分岐命令について各々のパスを実行するために、同時マルチスレッド処理（ＳＭＴ）機能を用いることができる。典型的には、同時マルチスレッド処理を用いて、第１及び第２のスレッドを発行し、プロセッサ１１０において実行することができる。条件分岐命令のデュアル・パス実行のために用いられた場合、条件分岐命令の１つのパスを、プロセッサ１１０への第１のスレッドとして発行することができ、条件分岐命令の別のパスを、プロセッサ１１０への第２のスレッドとして発行することができる。条件分岐命令の結果が判定された後、結果（分岐条件が成立する又は分岐条件が不成立である）を用いて、パス／スレッドの一方の実行を続行し、他方のパス／スレッドの結果を廃棄することができる。例えば、条件分岐の分岐条件が成立する場合には、分岐条件成立スレッドが実行を続行することができ、一方、分岐条件不成立スレッド（及び結果）を廃棄することができる。同様に、条件分岐の分岐条件が不成立である場合には、分岐条件不成立スレッドは実行を続行することができ、一方、分岐条件成立スレッド（及び結果）を廃棄することができる。
【０１１０】
図１３は、本発明の一実施形態による、条件分岐命令のデュアル・パス発行のために用いられる回路を示すブロック図である。図示されるように、場合によっては、各々のスレッドにつき１つの、２つのＩ−ライン・バッファ１３３２、１３３６を設けることができる。同様に、各々のスレッドにつき１つの、２組の発行及びディスパッチ回路１３３４、１３３８を設けることができる。１つのスレッドからの命令を他のスレッドとマージし、組み合わせられた発行グループを形成するように、マージ（merge）回路１３０２を設けることもできる。場合によっては、単一の発行グループが、両方のスレッドからの命令を含むことができる。各々のスレッドには、レジスタ・ファイル２４０内の別個の組のレジスタ１３４０、１３４２を設けることもできる。分岐パス選択回路１３０４を用いて、スレッドの各々についての条件分岐命令の分岐条件が成立するか又は分岐条件が不成立であるかを判定し、必要に応じて、いずれかのスレッドの結果を伝搬し、又はいずれかのスレッドの結果を廃棄するることができる。
【０１１１】
図１４は、本発明の一実施形態による、同時マルチスレッド処理を用いて実行される例示的な命令１４０２を示すブロック図である。図示されるように、命令は、ｏｐ−コード、１つ又は複数のレジスタ・オペランド（Ｒｅｇ．１、Ｒｅｇ．２）、及び／又はデータを含むことができる。各々の命令及び／又はレジスタ・オペランドについて、命令に用いるために、スレッド・レジスタ１３４０、１３４２の組を示す１又はそれ以上のビット（Ｔ）を提供することができる。したがって、例えば、スレッド０における命令及びスレッド１における命令の両方が、同じレジスタ（例えば、Ｒｅｇ．１）を用いることができるが、スレッド０における命令はスレッド０のレジスタ１３４０においてレジスタ１を使用し、一方、スレッド１における命令はスレッド１のレジスタ１３４２においてレジスタ１を使用することになり、これにより命令間の競合が回避される。
【０１１２】
本発明の一実施形態においては、プロセッサ１１０によりスレッド・バリディティ（validity）ビット（Ｔ０Ｖ、Ｔ１Ｖ）を使用し、所定の分岐パスが有効か又は無効かを判定することができる。例えば、両方のビットの組を用いて、条件分岐命令の各パスについて各命令又は命令グループを発行し、両方のスレッドが有効であることを示すことができる。分岐命令の結果を判定した後、後続する分岐パス（例えば、分岐条件が成立する又は分岐条件が不成立である）についてのビットを設定したままにし、一方、後に続かない分岐パスについてのビットを消去することができる。そのスレッド内の命令についてのスレッド・バリディティ・ビットが設定された場合、命令の結果は、例えば、Ｄ−キャッシュ２２４又はレジスタ・ファイル２４０に転送する又は書き戻すことによって、伝搬し、及び／又は格納することができる。そのスレッド内の命令についてのスレッド・バリディティ・ビットが消去された場合、命令の結果は、廃棄することができ、プロセッサ１１０によって伝搬することはできない。したがって、スレッド・ビットＴ０Ｖ、Ｔ１Ｖを用いて、後続する分岐パスについてのスレッドの実行を選択し、継続することができる。
【０１１３】
本発明の一実施形態においては、スレッド・ビットＴ及び／又はスレッド・バリディティ・ビットＴ０Ｖ、Ｔ１Ｖは、各々の命令１１０２に格納する（例えば、エンコードする）ことができる。随意的に、スレッド・ビットＴ及び／又はスレッド・バリディティ・ビットＴ０Ｖ、Ｔ１Ｖは、例えば、命令１４０２及びビットを保持するラッチのグループ内など、命令１４０２の外部に格納してもよい。
【０１１４】
本発明の一実施形態においては、プロセッサ・パイプラインに対して各々のパスについての命令を発行するとき、デュアル発行された条件分岐命令の予測パス（predicted path）が好都合であり得る。場合によっては、条件分岐命令がローカル及び／又はグローバルに予測不可能であっても、こうした予測を用いることができる（例えば、「最良の」推量として）。
【０１１５】
非予測パス（non-predicted path）よりも予測パスの方が好ましい例として、予測パスについての命令に対する非予測パスについての命令の一定の比率を出すことができる。例えば、発行グループ内に４つの命令が配置された場合、比率は、予測パスからの３つの命令に対して非予測パスからの１つの命令とすることができる。発行グループ内に６つの命令が配置された場合、比率は、予測される分岐について４であるのに対して予測されない分岐について２とすることができる。発行グループ内に８つの命令が配置された場合、比率は、予測パスについて６であるのに対して非予測パスについて２とすることができる（３対１の比率でもある）。
【０１１６】
非予測パスよりも予測パスの方が好ましい別の例として、予測パスについての命令に対する非予測パスについての命令の比率は、条件分岐命令の予測可能性のレベルに基づいて変化し得る。条件分岐命令の予測可能性が第１の範囲内にある場合には、第１の比率の命令を発行することができる。例えば、条件分岐命令が中程度に予測不可能である場合には、例えば、３対１といった大きな比率の命令を発行することができる。条件分岐命令の予測可能性が第２の範囲内にある場合には、第２の比率の命令を発行することができる。例えば、条件分岐命令が完全に予測不可能である場合には、例えば、１対１などの等しい比率の命令を発行することができる。
【０１１７】
場合によっては、プロセッサ１１０によって実行されている別のスレッドがストールされた場合にのみ、断定された分岐命令のためのデュアル発行を用いることができる。例えば、プロセッサ１１０が第１のスレッド及び第２のスレッドを実行しており、第１のスレッドが条件分岐命令を含む場合、プロセッサ１１０は、例えば、キャッシュ・ミスのために第２のスレッドがストールされている場合に、第１のスレッドのデュアル・パス発行を用いることができる。場合によっては、上述した他の条件を適用することもできる。例えば、第２のスレッドがストールされる場合、及び、条件分岐命令がローカル及び／又はグローバルに予測不可能である場合の両方に、デュアル・パス発行を用いることができる。
【０１１８】
デュアル・パス発行がＳＭＴ回路を用いる幾つかの場合において、デュアル・パス発行の一方のパスがストールする場合、ストールされたスレッドが実行を再開するまで（例えば、キャッシュ・ミスのために第１のスレッドがストールされる場合には、例えば、Ｌ２キャッシュ１１２から必要なデータが取り出されるまで、第２のスレッドを単独で発行することができる）、或いは、条件分岐命令の結果が解決され、スレッドの一方が廃棄されるまで、発行された唯一のスレッドとすることができる。場合によっては、上述のように、ストールされたスレッドが、予測され、好ましい条件分岐命令のパスである場合でも、他方のスレッドがストールされた場合に一方のスレッドの発行を行なうことができる。
【０１１９】
本発明の一実施形態においては、Ｉ−ライン・バッファ２３２及び／又は遅延キュー３２０が、条件分岐命令の両方のパスからの命令を含むことができる。Ｉ−ライン・バッファ２３２及び遅延キュー３２０は格納回路であり、処理回路を含まないので、比較的少ないオーバーヘッドで、条件分岐命令の両方のパスを格納し、バッファに入れ、キューに入れることができる。条件分岐命令の結果が解決された後、後に続かない分岐パスについての命令を無効なものとしてマーク付けし（例えば、スレッド・バリディティ・ビットＴ０Ｖ、Ｔ１Ｖを変えることによって）、必要に応じて、Ｉ−ライン・バッファ２３２及び／又は遅延キュー２３０から廃棄することができる。
【０１２０】
場合によっては、制限された処理リソースについて２つの命令が競合している場合、デュアル・パス発行を制限することがある。例えば、両方のパスが、実行のために所定のパイプライン（例えば、パイプラインＰ０）を必要とする１つ又は複数の命令を含む場合には、分岐パスのデュアル・パス発行が制限されることがある。処理リソースが不十分であるために条件分岐命令のパスについてのデュアル・パス発行が制限される、本発明の一実施においては、条件分岐命令の予測パスを発行し、制限されたリソースを用いて実行することができる。
【０１２１】
また、例えば、プロセッサ１１０におけるリソースの制約／競合のために、条件分岐の一方のパスだけの発行が制限されることがあり、プロセッサ１１０は、条件分岐命令の両方のパスを発行し、リソースが両方のパスによって共有されるようにすることができる。例えば、第１の分岐パスをストールし、第２の分岐パスがリソースを使用してもよい。次に、第２の分岐がリソースの使用を終了した後、第１の分岐パスが実行を再開し、リソースを使用してもよい。随意的に、リソースの競合が生じないように、分岐パスについての命令のスケジューリングを構成することができる。例えば、こうしたスケジューリングは、リソースを使用する第１の分岐パスに対してイン・オーダー方式で命令を発行しながら、第２の分岐パスに対してアウト・オブ・オーダー方式で命令を発行することを含むことができる。第１の分岐パスがリソースの使用を終了した後、リソースを使用する第２の分岐パスからの命令を発行することができる。
【０１２２】
本発明の一実施形態において、条件分岐命令のデュアル発行は、分岐距離が閾値距離を下回る分岐に制限することができる。例えば、場合によっては、プロセッサ１１０は、プロセッサ・コア１１４において命令をアドレス指定するために、アドレスの下部のみを用いることができる（例えば、ベース・アドレスに、ベース・アドレスからのオフセットとしての下部を加えたものを用いて、各々の命令をアドレス指定することができる）。例えば、部分的アドレスを格納し、計算するときに減少したプロセッサ・リソースを用いることができるので、こうした部分的アドレス指定を用いることができる。
【０１２３】
各々の命令アドレスの下部オフセット部分が、プロセッサ・コア１１４においてその命令をアドレス指定するために用いられる、一実施形態においては、分岐距離がアドレス部によって提供されるオフセットよりも短い場合にのみ、デュアル・パス発行を用いることができる。こうした場合、デュアル・パス発行についての分岐距離を制限することによって、両方のパスが、命令をアドレス指定するためにプロセッサ・コア１１４に用いられる同じベース・アドレスを有効に使用することができる。また、一実施形態においては、以下に述べられるように、例えば、分岐距離が条件分岐命令の効率的なデュアル発行の閾値距離より短い場合に、断定された発行を用いて条件分岐命令が実行されるなど、分岐距離上により低い距離閾値を置くことができる。
【０１２４】
条件分岐命令の一方のパスだけが発行される幾つかの場合においては、例えば、発行されない分岐パスについて命令をフェッチし、それらの命令をＩ−キャッシュ２２２及び／又はＩ−ライン・バッファ２３２内に置くことによって、条件分岐命令の他方のパスをバッファに入れることもできる。条件分岐命令の結果が、その発行されたパスが後に続かなかったことを示す場合、発行されなかったパスからのバッファに入れられた命令を、迅速に発行し、プロセッサ１１０によって実行することができ、これにより、発行されたが、後に続かなかった分岐パスから、発行されなかったが後に来た分岐パスに切り換えるのに必要な待ち時間が低減される。条件分岐命令の両方のパスをバッファに入れ、予測パスだけを発行することによって、条件分岐命令の結果が非予測パスに後続すべきであることを示す場合でも、プロセッサ１１０は、非予測パスの実行を迅速に開始することができる。
【０１２５】
一実施形態においては、分岐が、十分に予測可能であるための閾値を下回るが、部分的に予測可能であるための閾値より大きいか又はこれと等しいことを分岐命令の予測可能性が示す場合には、両方の分岐パスをバッファに入れるものの、一方の分岐パスだけを発行することができる。こうした場合、部分的に予測される条件分岐命令についての予測パスを、プロセッサ１１０による実行のために、バッファに入れることも発行することもできる。非予測パスをバッファに入れ、発行しないことも可能である。条件分岐命令の結果が、分岐命令が予測され、発行されたパスに後続することを示す場合には、予測され発行されたパスは、実行を継続することができる。条件分岐命令の結果が、予測パスに後続しなかったことを示す場合には、バッファに入れられ発行されなかったパスを発行し、実行することができる。
【０１２６】
場合によっては、条件分岐命令の断定された(predicated)発行（以下に述べられる）が効率的でない場合（例えば、中間にある（interceding）命令の数のために）、或いは、断定された発行が可能でない場合（例えば、命令の相互依存性のために）にのみ、デュアル・パス発行を用いることができる。
【０１２７】
短い条件分岐命令のための断定された実行
場合によっては、条件分岐命令は、分岐条件が成立する場合、条件分岐命令と条件分岐命令のターゲットとの間に配置された１つ又は複数の中間の命令の上をジャンプすることができる。条件分岐命令の分岐条件が不成立である場合には、中間の命令を実行することができる。こうした分岐命令は、短い条件分岐と呼ぶことができる。
【０１２８】
本発明の一実施形態においては、条件分岐命令の結果が分かる前に、短い条件分岐命令と短い条件分岐命令のターゲットとの間の中間の命令を、例えばプロセッサ１１０によって発行し、実行することができる。条件分岐命令が実行されると、分岐条件が成立するかどうかについての判定を行なうことができる。分岐条件が成立する場合には、発行された中間の命令の結果を廃棄することができる。分岐条件が不成立である場合には、発行された中間の命令の結果を格納することができる。条件分岐命令の結果（例えば、分岐条件が不成立である）について中間の命令の結果の使用及び／又は格納を断定(predicate)できるので、短い条件分岐命令にの中間の命令を発行する技術は、「断定された発行」と呼ぶことができる。断定された発行を用いることによって、プロセッサ１１０は、条件分岐命令の両方のパスを単一パスとして効率的に実行し（例えば、単一のスレッドを使用し、第２のアクティブ・スレッドを妨げない）、分岐条件が成立する場合に条件分岐命令がジャンプする中間の命令の結果を使用するかどうかを、後で判定することができ、これにより、プロセッサ・コア１１４内の命令の非効率的なストール又はフラッシュなしに、条件分岐命令が実行される。以下に述べられるように、プロセッサが、中間の命令の結果を用いるべきでないと判断する場合には、例えば、ビット（例えば、バリディティ・ビット）を消去することによって、結果を廃棄することができ、中間の命令の結果が無効であることを示す。
【０１２９】
図１５は、本発明の一実施形態による、短い条件分岐を実行するためのプロセス１５００を示す流れ図である。図示されるように、プロセス１５００は、実行される命令のグループを受信するステップ１５０２で開始することができる。ステップ１５０４において、命令グループが短い条件分岐命令を含むかどうかの判定を行なうことができる。命令グループが短い条件分岐命令を含む場合には、ステップ１５０６において、短い条件分岐命令と、短い条件分岐命令と短い条件分岐命令のターゲットとの間にある中間の命令とを、例えばプロセッサ・コア１１４に発行することができる。ステップ１５０８において、条件分岐命令の結果が、条件分岐の分岐条件が成立することを示すか又は分岐条件が不成立であることを示すかの判定を行なうことができる。分岐条件が不成立である場合には、ステップ１５１０において、中間の命令の結果を格納し、プロセッサ１１０において伝搬することができる。分岐条件が成立する場合には、ステップ１５１２において、中間の命令の結果を廃棄することができる。ステップ１５１４において、プロセス１２００が終了することができる。
【０１３０】
図１６（Ａ）−図１６（Ｃ）は、本発明の一実施形態による、短い条件分岐命令（Ｉ２）を示すブロック図である。図１６（Ａ）に示されるように、条件分岐命令Ｉ２の分岐条件が成立する場合、命令は、幾つかの中間の命令（Ｉ３、Ｉ４、Ｉ５）を超えてターゲット命令（Ｉ６）に分岐することができる。しかしながら、条件分岐命令の分岐条件が不成立である場合には、後続命令（例えば、命令Ｉ６）が実行される前に、中間の命令（Ｉ３、Ｉ４、Ｉ５）を実行することができる。
【０１３１】
上述のように、短い条件分岐命令Ｉ２が検出された（例えば、プリデコーダ及びスケジューラ２２０によって）とき、例えば、分岐条件が成立するか又は不成立であるかに関係なく、条件分岐命令Ｉ２及び中間の命令Ｉ３−Ｉ５をプロセッサ・コア１１４に発行することができる。本発明の一実施形態においては、各々の命令は、命令の結果が有効であるかどうかを示すバリディティ・ビット（Ｖ）を含むことができる。例えば、所定の命令についてビットが設定された場合、命令は有効とすることができ、命令の結果をメモリ、レジスタ及び他の命令に伝搬することができる。所定の命令についてビットが設定されなかった場合、命令は無効とすることができ、命令の結果を廃棄することができ、伝播することはできない。
【０１３２】
したがって、本発明の一実施形態においては、設定されたバリディティ・ビットと共に各々の命令を発行することができ、これにより命令が有効であると推定されることが示される。条件分岐命令が実行された後、分岐条件が不成立であるという判定が行なわれた場合（例えば図１６（Ｂ）に示されるように）、中間の命令Ｉ３−Ｉ５の各々ついてバリディティ・ビットが設定されたままであってもよく、中間の命令が有効であること、及び、中間の命令の結果を伝搬できることを示す。随意的に、分岐条件が成立するという判定が行なわれた場合（例えば、図１６（Ｃ）に示されるように）、中間の命令Ｉ３−Ｉ５の各々についてバリディティ・ビットを消去することができ、命令の結果を廃棄すべきであることを示す。
【０１３３】
例えば、中間の命令の結果を伝搬するかどうかを判定するために、フォワーディング（forwarding）回路、ライトバック回路２３８、キャッシュ・ロード及びストア回路２５０、及び／又はプロセッサ１１０内の他の回路によって、バリディティ・ビットを調べることができる。バリディティ・ビットが設定された場合には、結果を伝搬することができ（例えば、ライトバック回路２３８は、中間の命令の結果を書き戻すことができる）、バリディティ・ビットが消去された場合には、結果を廃棄することができる（例えば、ライトバック回路２３８は、中間の命令の結果を廃棄することができる）。本発明の一実施形態においては、あらゆる命令が、バリディティ・ビットを有することができる。随意的に、一実施形態においては、バリディティ・ビットは、条件分岐命令とターゲット命令との間の中間の命令（Ｉ３−５）についてのみ、維持及び／又は修正することができる。
【０１３４】
一実施形態においては、断定された発行についてのコスト及び／又は効率（例えば、プロセッサ時間のサイクルにおける）がデュアル発行についてのコスト及び／又は効率を下回る場合にのみ、短い条件分岐命令の断定された発行を用いることができる。中間の命令の数が、効率的なデュアル発行の命令閾値数を下回る場合には、断定された発行を行なうことができる。中間の命令の数が、効率的なデュアル発行の命令閾値数よりも多いか又はそれと等しい場合には、デュアル発行を行なうことができる。
【０１３５】
一例として、プロセッサ・コア１１４が３４個の命令を同時に処理できる場合、デュアル発行中、各々の分岐パスからの１７個の命令を発行及び／又は実行する（又は、部分的に実行する）ことができる。典型的には、分岐命令によって、デュアル・パスの１つだけの分岐条件が成立するので、分岐条件不成立パスからの１７個の命令を無効にし、廃棄することができる。したがって、短い条件分岐についての断定された発行を用いるかどうかを判定する際、断定された発行中に１７個の命令を廃棄できるかどうかの判定を行なうことができる。例えば、短い条件分岐と短い条件分岐のターゲットとの間の中間の命令の数が１７個より少ない場合には、短い条件分岐が分岐され、中間の命令をスキップする場合には、１７個未満の命令（デュアル発行のコスト）が廃棄されるので、断定された命令を用いることができる。
【０１３６】
場合によっては、断定された発行を行なうかどうかを判定するために、任意の閾値数の中間の命令を選択することができる（例えば、デュアル発行のコストよりも大きい、これと等しい、又はこれより小さい閾値）。中間の命令数が閾値数よりも少ない場合には、短い条件分岐の断定された発行を用いることができる。中間の命令数が閾値より大きいか又はこれと等しい場合には、別の発行形態（例えば、デュアル発行又は予測情報を用いる発行）を用いることができる。
【０１３７】
場合によっては、断定された発行を行なうかどうかを判定するとき、中間の命令にさらなる制限を課すことができる。例えば、本発明の一実施形態においては、断定された発行を行なうために、中間の命令の無効化がターゲット命令に悪影響を及ぼさないように（例えば、無効にされた中間の命令からターゲット命令に正しくないデータを転送することによって）、分岐命令のターゲット命令が中間の命令から独立していることが必要とされ得る。随意的に、場合によっては、条件分岐命令の結果が解決される前に不適切な転送が行なわれず、中間の命令は、有効にされるか又は無効にされるかのいずれかであるように、ターゲット命令後の１つ又は複数の命令もまた中間の命令から独立していることが必要とされ得る。
【０１３８】
中間の命令と後に実行される命令との間の競合が短い条件分岐命令の断定された発行を排除する幾つかの場合においては、短い条件分岐に対して、デュアル・パス発行（例えば、ＳＭＴ機能を有する）を用いることができる。
【０１３９】
命令を発行するためのデュアル命令キュー
一実施形態において、分岐命令の複数のパスの実行（例えば、予測パス及び非予測パス）を遅延させることができ、これにより、分岐命令に後続するパスを実行する前に分岐命令の結果を判定することが可能になる。場合によっては、いずれのパスからの命令も実際に実行することなく、分岐命令の両方のパスの実行を遅延させることによって、分岐命令の後続しないパスからの命令を不必要に実行することなく、分岐命令の後続するパスを後で実行することができる。
【０１４０】
本発明の一実施形態においては、プロセッサ・コア１１４は、デュアル命令キューを用いて、条件分岐命令の予測パス及び非予測パスの両方の命令の実行を遅延させることができる。例えば、条件分岐命令の両方のパスについて、発行グループを形成することができる。パスの第１のものについての発行グループは、デュアル命令キューの第１のキューに発行することができる。パスの第２のものについての発行グループは、デュアル命令キューの第２のキューに発行することができる。条件分岐命令の結果を判定した後、判定された結果（予測される又は予測されない）に対応する分岐パスからの命令をデュアル命令キューから取り出し、遅延実行パイプラインの実行ユニットにおいて実行することができる。
【０１４１】
図１８は、本発明の一実施形態による、デュアル命令キューを用いて分岐命令を実行するためのプロセス１８００を示す流れ図である。プロセス１８００は、実行される命令のグループを受信するステップ１８０２で開始することができる。ステップ１８０４において、命令グループが条件分岐命令を含むかどうかの判定が行なわれる。命令グループが条件分岐命令を含む場合には、ステップ１８０６において、条件分岐命令を実行のために発行することができる。
【０１４２】
ステップ１８１０において、条件分岐命令の予測パスについての命令を、デュアル命令キューの第１のキューに発行することができ、条件分岐命令の予測されないパスについての命令を、デュアル命令キューの第２のキューに発行することができる。ステップ１８１２において、条件分岐命令の予測パス及び非予測パスについての命令を、ステップ１８１４において条件分岐命令の結果が判定されるまで、デュアル発行キューにおいて遅延させることができる。分岐命令の予測パスが後続する場合には、ステップ１８１６において、デュアル命令キューの第１のキューからの命令（予測パスについての命令）を実行ユニットにおいて実行することができる。分岐命令の非予測パスが後続する場合には、ステップ１８１８において、デュアル命令キューの第２のキューからの命令（非予測パスについての命令）を実行ユニットにおいて実行することができる。ステップ１８２０において、プロセス１８００が終了することができる。
【０１４３】
図１９は、本発明の一実施形態による、デュアル命令キュー１９００を用いるプロセッサ・コア１１４を示すブロック図である。図示されるように、デュアル命令キュー１９００は、第１のＩ−キュー１９０２及び第２のＩ−キュー１９０４を含むことができる。第１のＩ−ライン・バッファ２３２１及び第２のＩ−ライン・バッファ２３２２を用いて、それぞれ条件分岐命令の予測パス及び非予測パスについてＩ−キャッシュ２２２からフェッチされた命令をバッファすることができる（逆もまた同様）。条件分岐命令の各々のパスに対して命令を発行するために、発行及びディスパッチ回路２３４１、２３４２を設けることもできる。
【０１４４】
一実施形態においては、分岐実行ユニット１９１０において条件分岐命令を実行することができる。条件分岐命令の結果を判定する間、条件分岐命令の予測パス及び非予測パスについての命令を、それぞれ、Ｉ−ライン・バッファ２３２１、２３２２にバッファに入れ、発行及びディスパッチ回路２３４１、２３４２によって発行し、デュアル命令キュー１９００のＩ−キュー１９０２、１９０４において遅延させることができる。本発明の一実施形態においては、デュアルＩ−キュー１９００の深さ１９０６は、分岐実行ユニット１９１０を用いて条件分岐命令の結果を判定する間、コア１１４内の命令の実行をストールすることなく、条件分岐命令の両方のパスをバッファに入れるのを可能にするのに十分なものとすることができる。
【０１４５】
分岐実行ユニット１９１０を用いて条件分岐命令の結果（例えば、分岐条件が成立する又は分岐条件が不成立である）を判定した後、その結果を選択回路１９０８に与えることができる。次に、選択回路１９０８は、対応するＩ−キュー１９０２、１９０４からの条件分岐命令の後続するパスについての命令を提供することができる。例えば、Ｉ−キュー０  １９０２において、予測パスについての命令が遅延され、Ｉ−キュー１  １９０４において、非予測パスについての命令が遅延される場合、及び、条件分岐命令が非予測パスに後続する場合、選択回路１９０８は、実行ユニット３１０によって実行されるＩ−キュー１  １９０４からの命令を選択することができる。随意的に、条件分岐命令の結果が、分岐命令が予測パスに後続することを示す場合、選択回路１９０８は、実行ユニット３１０によって実行されるＩ−キュー０  １９０２からの命令を選択することができる。
【０１４６】
図１９においては、パイプラインについての単一のデュアルＩ−キュー１９００に関して示されるが、本発明の実施形態は、遅延型実行を利用する各パイプライン（例えば、図３のパイプラインＰ１、Ｐ２、Ｐ３）ごとにデュアルＩ−キューを提供することができる。
【０１４７】
場合によっては、選択回路は、デュアル命令キュー１９００に格納されたバリディティ・ビット（例えば、分岐実行ユニット１９１０からの信号の代わりに）を用いて、どの命令を実行ユニット３１０に発行するかを決定することができる。一例として、分岐実行ユニット１９１０は、例えば、デュアル命令キュー１９００に格納された各パスごとのパス識別子を用いて、パスの一方が有効であり、他方のパスが無効であることを示すことができる。随意的に、各パス内の各命令について、バリディティ・ビットを提供することができる。バリディティ・ビットは、条件分岐命令の結果に基づいて設定又は消去することができる。
【０１４８】
例えば、Ｉ−キュー０  １９０２におけるパスをパス０とし、Ｉ−キュー１  １９０４におけるパスをパス１とすることができる。各パス内の各命令は、１に設定するか又は消去して０にすることができるバリディティ・ビットを有することができる。分岐実行ユニット１９１０が、分岐命令のどのパスに後続するかを判定した後、後続するパスについてのバリディティ・ビットを１に設定し、そのパスについての命令を実行ユニット３１０において実行すべきであることを示す。後に続かないパスについてのバリディティ・ビットを０に設定し、そのパスについての命令を実行ユニット３１０において実行すべきではないことを示すことができる。したがって、選択回路１９０８により命令を受信したとき、選択回路１９０８は、バリディティ・ビット（例えば、分岐実行ユニット１９１０からの信号の代わりに）を用いて、どの命令を実行ユニット３１０に提供するかを決定することができる。例えば、選択回路１９０８は、実行のために、設定されたバリディティ・ビットを有する命令だけを実行ユニット３１０に提供することができる。
【０１４９】
一実施形態においては、同時マルチスレッド処理を使用しないプロセッサ・コア１１４において、デュアル命令キュー１９００を用いることができる。したがって、場合によっては、２つのグループの発行回路２３４１、２３４２に対してマージ回路を設けることができる（例えば、予測パス及び非予測パスを同時に実行することはできず、よって、いかなるマージも必要とすることなく、別個の発行グループを生成し、発行することができるので）。
【０１５０】
随意的に、本発明の一実施形態において、同時マルチスレッド処理を使用するプロセッサ・コア１１４において、デュアル命令キュー１９００を用いることができる。例えば、デュアル命令キュー１９００をマージ回路と共に使用し、第１のスレッドにおける条件分岐命令、及び、第２のスレッドにおける命令についての予測パス及び非予測パスの両方を発行することができる。また、本発明の実施形態は、第１のスレッドの予測パス及び非予測パスについての命令、並びに、第２のスレッドからの命令を保持する３倍幅（triple-width）の命令キューを提供することができる。スレッドの優先順位に応じて、及び／又は、実行されるスレッドの数に応じて、選択回路を用いて、３倍幅の命令キューにおける遅延キュー・パスのいずれか１つから選択することができる。例えば、３倍幅の命令キューから、より優先順位が高いスレッドからの有効な命令を実行することができる。随意的に、３倍幅の命令キューから、休止されていないスレッドからの有効な命令を発行することができる。
【０１５１】
本発明の一実施形態においては、デュアル命令キュー１９００を用いて、条件分岐命令が予測不可能であるか又は部分的にのみ予測可能である場合に限り、予測パス及び非予測パスを保持することができる。条件分岐命令が予測可能である場合には、予測パスをデュアル命令キュー１９００の一方のパス内に保持し、例えば別のスレッドからの他の命令をデュアル命令キュー１９００の他方のパス内に保持し、例えば他方のスレッドが休止される場合に発行することができる。
【０１５２】
場合によっては、上述のように、複数の遅延実行パイプライン（例えば、Ｐ１、Ｐ２等）において、複数のデュアル命令キュー１９００を用いることができる。随意的に、例えば、最も遅延した実行パイプラインといった単一の実行パイプラインにおいて、デュアル命令キューを用いることができる。複数のデュアル命令キュー１９００が用いられる一実施形態においては、条件分岐命令を実行する際にどのデュアル命令キュー１９００を用いるべきかの判定を行なうことができる。例えば、条件分岐命令が長期の依存関係を含み、拡張されたプロセッサ・サイクル数にわたって条件分岐命令の結果を判定することができない場合には、最も遅延したデュアル命令キューを用いて、条件分岐命令パスについての命令を遅延させることができる。
【０１５３】
予測可能性に従った分岐命令の実行
場合によっては、条件分岐命令を実行するために、上述した方法及び回路の各々を用いることができる。随意的に、本発明の一実施形態においては、条件分岐命令についての予測可能性レベルを計算することができる。条件分岐命令の計算された予測可能性レベルに基づいて、複数の方法の１つを用いて、条件分岐命令を実行することができる。例えば、条件分岐命令が完全に予測可能である、部分的に予測可能である、又は予測不可能であるという判定を行なうことができる。予測可能性レベルに基づいて、条件分岐命令の実行方法を選択することができる。その予測可能性に従って条件分岐命令の実行方法を選択することによって、プロセッサ１１０の非効率性を最小にしながら、プロセッサ１１０の全体のリソース使用率を最大にすることができる。
【０１５４】
図１７（Ａ）−図１７（Ｂ）は、本発明の一実施形態による、条件分岐命令の予測可能性に応じて条件分岐命令を実行するためのプロセス１７００を示す。プロセス１７００は、実行される命令のグループを受信するステップ１７０２（図１７（Ａ））で開始することができる。ステップ１７０４において、命令グループが条件分岐命令を含むかどうかの判定を行なうことができる。命令グループが条件分岐命令を含む場合には、ステップ１７０６において、分岐がローカルに完全に予測可能であるかどうかの判定を行なうことができる。例えば、そうした判定は、ローカル分岐履歴カウンタＣＮＴがローカル分岐予測可能性の閾値を上回るか又はこれと等しいかを判定することによって行なうことができる。分岐がローカルに完全に予測可能である場合には、ステップ１７０８において、ローカル分岐予測を用いて、条件分岐命令及び後続命令をスケジューリングし、実行することができる。
【０１５５】
ステップ１７１０において、分岐がローカルに完全に予測可能ではない場合には、グローバル分岐予測情報を追跡し、格納することができる。次に、ステップ１７１２において、分岐命令がグローバルに完全に予測可能であるかどうかの判定を行なうことができる。こうした判定は、例えば、グローバル分岐履歴カウンタＧＢＣＮＴがグローバル分岐予測可能性の閾値より大きいか又はこれと等しいかを判定することによって行なうことができる。分岐がグローバルに完全に予測可能である場合には、ステップ１７１４において、グローバル分岐予測を用いて、条件分岐命令及び後続命令をスケジューリングし、実行することができる。条件分岐命令がローカル又はグローバルに完全に予測可能である、分岐予測を用いることによって、プロセッサ１１０は、場合によっては、条件分岐命令の事前解決、断定された発行、又はデュアル・パス発行を行なうのに必要なリソースを用いるのを回避することができる。
【０１５６】
分岐がローカルにもグローバルにも完全に予測可能でないという判定が行なわれた場合には、ステップ１７２０において、条件分岐命令が事前解決可能であるかどうかの判定を行なうことができる。条件分岐命令が事前解決可能である場合には、ステップ１７２２において、条件分岐命令を事前解決することができ、条件分岐命令の事前解決されたパス（例えば、分岐条件が成立する又は分岐条件が不成立である）に基づいて、条件分岐命令及び後続命令をスケジューリングし、発行し、実行することができる。一実施形態においては、事前解決を用いて、プロセッサ１１０が、条件分岐命令の断定された発行又はデュアル・パス発行を用いるのを回避することが可能であり、このことにより、場合によっては、実行された命令の結果が廃棄され、それにより、プロセッサの効率が低減されることがある。
【０１５７】
条件分岐命令が事前解決可能でない場合には、ステップ１７３０（図１７（Ｂ））において、条件分岐命令が、断定された発行を用いて実行できる短い条件分岐命令であるかどうかの判定を行なうことができる。こうした判定は、命令の依存性が断定された発行を排除するかどうかを判定すること、及び／又は、デュアル発行が断定された発行より効率的であるかどうかを判定することを含むことができる。条件分岐命令が、断定された発行を用いて実行できる短い条件分岐命令であると判定された場合には、ステップ１７３２において、上述のように断定された発行を用いて短い条件分岐命令を発行し、実行することができる。
【０１５８】
断定された発行を使用できないと判定された場合には、ステップ１７４０において、条件分岐命令の両方のパスをバッファに入れることができる。条件分岐命令の両方のパスをバッファに入れることによって、プロセッサ１１０が後で条件分岐命令の結果が誤って予測された場合には、後でより迅速な回復を行なうことができる（例えば、分岐命令の結果が誤って予測された場合には、分岐命令の他方のパスを実行のために容易に利用可能であり得る）。また、条件分岐命令の両方のパスをバッファに入れることによって、必要に応じてデュアル発行を実行することができる。
【０１５９】
ステップ１７４２において、条件分岐命令が中程度に予測可能であるかどうかを判定することができる。こうした判定は、ローカル分岐履歴カウンタＣＮＴが中程度のローカル予測可能性の閾値を上回るかどうかを判定すること、及び／又は、グローバル分岐履歴カウンタＧＢＣＮＴが中程度のグローバル予測可能性の閾値を上回るかどうかを判定することを含むことができる。ステップ１７４４において、条件分岐命令が中程度に予測可能であると判定された場合には、Ｉ−バッファ２３２から分岐命令についての予測パスを発行し、実行することができる。上述のように、予測パスが条件分岐命令に後続しなかったという判定が後で行なわれた場合には、分岐命令の予測されずバッファに入れられたパスを発行し、実行することによって、より迅速な回復を行なうことができる。分岐命令の非予測パスをバッファに入れるが実行しないことによって、命令の結果が、予測が不正確であり、命令の非予測パスが後続することを示す場合でも、プロセッサ１１０は、分岐命令の非予測パスを迅速に回復し、発行することができる。
【０１６０】
条件分岐命令がローカルにもグローバルにも中程度に予測可能でない（例えば、分岐が予測不可能である）場合には、ステップ１７５０において、デュアル・パス実行により、条件分岐命令を実行できるかどうかの判定を行なうことができる。こうした判定は、例えば、プロセッサ１１０内の別のスレッドがストールされるかどうか（これにより、別個のスレッドにおいて両方のパスを発行することが可能になる）を判定すること、条件分岐命令についての分岐距離を求めること、分岐パスの各々についての命令の依存性を判定すること、及び／又は、デュアル・パス実行に関して上述された他の考慮事項のいずれかを含むことができる。
【０１６１】
デュアル・パス発行を用いて条件分岐命令を実行できるという判定が行なわれた場合には、ステップ１７５４において、例えば上述のようにデュアル・パス発行を用いて、条件分岐命令を発行し、実行することができる。しかしながら、デュアル・パス発行を用いて条件分岐命令を実行できないという判定が行なわれた場合には、条件分岐命令についての最良の予測を用いて、分岐命令及び後続命令をスケジューリングし、発行し、実行することができる。最良の予測は、例えば、どのタイプの予測がより信頼できるかに基づいて、ローカル予測又はグローバル予測のいずれかを用いることを含み得る（例えば、ＧＢＣＮＴがＣＮＴより大きいか又はこれと等しい場合には、ローカル予測の代わりにグローバル予測を用いて、分岐命令を実行することができる）。次に、ステップ１７６０において、プロセス１７００が終了することができる。
【０１６２】
分岐予測情報の保持及び更新
本発明の一実施形態において、命令が実行されている間、分岐予測情報及び／又は他の情報を連続的に追跡し、更新することができ、その結果、所定の命令の組が実行されるとき、分岐予測情報及び他の格納された値が時間と共に変化し得る。したがって、例えば、プログラムが実行されるとき、分岐予測情報を動的に修正することができる。
【０１６３】
本発明の一実施形態においては、命令の組の最初の実行段階中（例えば、プログラムが実行される最初の「トレーニング（training）」期間中）、分岐予測情報及び／又は他の情報を格納することができる。最初の実行段階は、初期化段階又はトレーニング段階と呼ぶこともできる。トレーニング段階中、例えば上述の基準に従って、分岐予測情報を追跡し、格納することができる（例えば、命令を含むＩ−ライン内又はシャドウ・キャッシュ内に）。
【０１６４】
一実施形態においては、１つ又は複数のビット（例えば、分岐命令を含むＩ−ライン内又はグローバル分岐履歴テーブル内に格納された）を用いて、トレーニング段階に命令が実行されているかどうか、又は、プロセッサ１１０がトレーニング段階モードにあるかどうかを示すことができる。例えば、トレーニング段階中、プロセッサ１１０内のモード・ビット（mode bit）を消去することができる。ビットが消去される間、上述のように、分岐予測情報を追跡し、更新することができる。トレーニング段階が完了すると、ビットを設定することができる。ビットが設定されると、もはや分岐予測情報を更新することができず、トレーニング段階が完了し得る。
【０１６５】
一実施形態においては、トレーニング段階は、指定の時間（例えば、ある数のクロック・サイクルが経過するまで、又は所定の命令がある回数実行されるまで）継続することができる。一実施形態においては、指定の時間が経過し、トレーニング段階が終了したとき、最後に格納された分岐予測情報を格納したままにすることができる。また、一実施形態においては、トレーニング段階は、所定のＩ−ラインが閾値回数だけ実行されるまで継続することができる。例えば、Ｉ−ラインが所定のキャッシュ・レベルから（例えば、メイン・メモリ１０２、Ｌ３キャッシュ、又はＬ２キャッシュ１１２から）フェッチされたとき、Ｉ−ライン内のカウンタ（例えば、２又は３ビット・カウンタ）をゼロにリセットすることができる。カウンタが閾値数のＩ−ライン実行を下回る間、トレーニング段階は、Ｉ−ライン内の命令を継続することができる。Ｉ−ラインの各々の実行後、カウンタを増分することができる。閾値数のＩ−ライン実行後、Ｉ−ライン内の命令についてのトレーニング段階を中止することができる。また、場合によっては、実行されているＩ−ライン内の命令に応じて、異なる閾値を用いることができる（例えば、変化の度合いがより大きい結果を有する命令に対して、より多くのトレーニングを用いることができる）。
【０１６６】
本発明の別の実施形態においては、トレーニング段階は、１つ又は複数の出口基準が満たされるまで継続することができる。例えば、最初の実行段階は、分岐命令が予測可能になるまで継続することができる。分岐命令の結果が予測可能になると、Ｉ−ラインにおいてロック・ビット（lock bit）を設定することができ、最初のトレーニング段階が完了したこと、及び、分岐命令の後の実行のために、強く予測可能な分岐命令についての分岐履歴ビットを用い得ることを示す。
【０１６７】
本発明の別の実施形態においては、断続的なトレーニング段階において、分岐予測情報を修正することができる。例えば、各々のトレーニング段階についての頻度及び持続時間の値を格納することができる。頻度に対応するクロック・サイクル数が経過する度に、トレーニング段階を開始することができ、指定の持続時間値にわたって継続することができる。別の実施形態においては、頻度に対応するクロック・サイクル数が経過する度に、トレーニング段階を開始し、指定の閾値条件が満たされるまで（例えば、上述のように、命令についての指定の予測可能性レベルに達するまで）継続することができる。
【０１６８】
カスケード式遅延実行パイプライン・ユニットにおける命令の実行に関し、幾つかの場合において上述したが、本発明の実施形態は、一般に、遅延実行パイプラインを使用しないプロセッサを含むいずれのプロセッサと共に用いることもできる。
【０１６９】
上記は本発明の実施形態に向けられているが、本発明の基本的範囲から逸脱することなく、本発明の他の及び更なる実施形態を考えることができ、本発明の範囲は、上記の特許請求の範囲によって定められる。
【図面の簡単な説明】
【０１７０】
【図１】本発明の一実施形態による、システムを示すブロック図である。
【図２】本発明の一実施形態による、コンピュータ・プロセッサを示すブロック図である。
【図３】本発明の一実施形態による、プロセッサのコアの１つを示すブロック図である。
【図４】本発明の一実施形態による、ローカル及びグローバル分岐履歴情報を記録し、格納するためのプロセスを示す流れ図である。
【図５】（Ａ）本発明の一実施形態による、分岐命令についてのローカル分岐履歴情報を命令ライン（Ｉ−ライン）内に格納するために用いられる例示的な命令ラインを示すブロック図である。          （Ｂ）本発明の一実施形態による、例示的な分岐命令を示すブロック図である。
【図６】本発明の一実施形態による、分岐予測情報を格納するための回路を示すブロック図である。
【図７】本発明の一実施形態による、分岐履歴テーブルを示すブロック図である。
【図８】本発明の一実施形態による、条件分岐命令を事前解決するためのプロセスを示す流れ図である。
【図９】本発明の一実施形態による、Ｌ２キャッシュからフェッチされた条件分岐命令を事前解決するための例示的な回路を示すブロック図である。
【図１０】本発明の一実施形態による、Ｉ−キャッシュからフェッチされた条件分岐命令を事前解決するための例示的な回路を示すブロック図である。
【図１１】本発明の一実施形態による、事前解決された条件分岐命令を格納するための例示的なＣＡＭを示すブロック図である。
【図１２】本発明の一実施形態による、条件分岐命令の複数のパスを実行するためのプロセスを示す流れ図である。
【図１３】本発明の一実施形態による、条件分岐命令のデュアル・パス発行のために用いられる回路を示すブロック図である。
【図１４】本発明の一実施形態による、同時マルチスレッド処理を用いて実行される例示的な命令を示すブロック図である。
【図１５】本発明の一実施形態による、短い条件分岐を実行するためのプロセスを示す流れ図である。
【図１６】（Ａ）本発明の一実施形態による、短い条件分岐命令を示すブロック図である。            （Ｂ）本発明の一実施形態による、短い条件分岐命令を示すブロック図である。            （Ｃ）本発明の一実施形態による、短い条件分岐命令を示すブロック図である。
【図１７】（Ａ）本発明の一実施形態による、条件分岐命令の予測可能性に応じて条件分岐命令を実行するためのプロセスを示す。            （Ｂ）本発明の一実施形態による、条件分岐命令の予測可能性に応じて条件分岐命令を実行するためのプロセスを示す。
【図１８】本発明の一実施形態による、デュアル命令キューを用いて分岐命令を実行するためのプロセスを示す流れ図である。
【図１９】本発明の一実施形態による、デュアル命令キューを有するプロセッサ・コアを示すブロック図である。
【図１】
2009540412.tif 000003
【図２】
2009540412.tif 000004
【図３】
2009540412.tif 000005
【図４】
2009540412.tif 000006
【図５】
2009540412.tif 000007
【図６】
2009540412.tif 000008
【図７】
2009540412.tif 000009
【図８】
2009540412.tif 000010
【図９】
2009540412.tif 000011
【図１０】
2009540412.tif 000012
【図１１】
2009540412.tif 000013
【図１２】
2009540412.tif 000014
【図１３】
2009540412.tif 000015
【図１４】
2009540412.tif 000016
【図１５】
2009540412.tif 000017
【図１６】
2009540412.tif 000018
【図１７】
2009540412.tif 000019
【図１８】
2009540412.tif 000020
【図１９】
2009540412.tif 000021
【国際調査報告】
2009540412.tif 000022
2009540412.tif 000023