(57)【要約】  予測された分岐命令の確認の前に同時に分岐予測を解決する方法が記載されている。この方法は、２つ以上の予測された分岐命令を処理することを含み、各予測された分岐命令は予測された状態および訂正された状態を有する。この方法は、さらに訂正された状態の１つを選択することを含む。予測された分岐命令の１つが予測ミスされた場合、選択された訂正された状態は、先の命令フェッチを導くために使用される。
2010505210.tif 000002
【特許請求の範囲】
【請求項１】
予測された分岐命令の確認の前に同時に予測された分岐命令を解決する方法であって、
２つ以上の予測された分岐命令を処理することと、各予測された分岐命令は予測された状態および訂正された状態を有し、前記予測された分岐命令は、解決ステージに同時に入り、
前記予測された分岐命令の１つから前記訂正された状態の１つを選択することと、
予測ミスされた前記予測された分岐命令の少なくとも１つを決定することと、
前記選択された訂正された状態に基づく先の命令フェッチを導くことと、
を含む方法。
【請求項２】
前記予測された状態は、さらに分岐方向を含む請求項１に記載の方法。
【請求項３】
前記予測された状態は、さらにプロセッサのモードを含む請求項１に記載の方法。
【請求項４】
前記予測された状態は、さらにターゲットアドレスを含む請求項１に記載の方法。
【請求項５】
前記選択された訂正された状態は、最も古い前記予測された分岐命令の１つに関連する請求項１に記載の方法。
【請求項６】
前記選択された訂正された状態は、ランダムに選ばれる請求項１に記載の方法。
【請求項７】
前記選択された訂正された状態は、最後に予測されたパイプラインに基づく請求項１に記載の方法。
【請求項８】
前記選択された訂正された状態は、最後に予測ミスされたパイプラインに基づく請求項１に記載の方法。
【請求項９】
前記選択された訂正された状態は、前記予測された分岐命令のタイプを基礎とする請求項１に記載の方法。
【請求項１０】
複数のパイプラインにおいて、予測された分岐命令の確認の前に、同時に予測された命令を解決する方法であって、
２つ以上の予測された分岐命令を処理することと、各予測された分岐命令は予測された状態および訂正された状態を有し、前記予測された分岐命令は、別々のパイプラインの解決ステージに同時に入り、
前記予測された分岐命令の１つから前記訂正された状態の１つを選択することと、
予測ミスされた前記予測された分岐命令の少なくとも１つを決定することと、
前記選択された訂正された状態に基づいて先の命令フェッチを導くことと、
を含む方法。
【請求項１１】
前記予測された状態は、さらに分岐方向を含む請求項１０に記載の方法。
【請求項１２】
前記予測された状態は、さらにプロセッサのモードを含む請求項１０に記載の方法。
【請求項１３】
前記予測された状態は、さらにターゲットアドレスを含む請求項１０に記載の方法。
【請求項１４】
前記選択された訂正された状態は、最も古い前記予測された分岐命令の１つに関連する請求項１０に記載の方法。
【請求項１５】
前記選択された訂正された状態は、ランダムに選ばれる請求項１０に記載の方法。
【請求項１６】
前記選択された訂正された状態は、最後に予測されたパイプラインに基づく請求項１０に記載の方法。
【請求項１７】
前記選択された訂正された状態は、最後に予測ミスされたパイプラインに基づく請求項１０に記載の方法。
【請求項１８】
前記選択された訂正された状態は、前記予測された分岐命令のタイプに基づく請求項１０に記載の方法。
【請求項１９】
予測された分岐命令の確認の前に同時に予測された分岐命令を解決するシステムは、
複数の分岐命令を予測するように構成された予測ロジックと、各予測された分岐命令は、予測された状態および訂正された状態を有しており、
２つ以上の予測された分岐命令が解決ステージに同時に達したときに決定するように構成された解決ロジックと、前記解決ロジックは、前記分岐命令の少なくとも１つが予測ミスされたとき、前記予測された分岐命令の１つから前記訂正された状態の１つを選ぶ、
前記選択された訂正された状態に基づいて命令をフェッチするように構成されたフェッチロジックと、
を備えるシステム。
【請求項２０】
前記予測された状態は、さらに分岐方向を備える請求項１９に記載のシステム。
【請求項２１】
前記システムは、プロセッサである請求項１９に記載の方法。
【請求項２２】
前記予測された状態は、さらに前記プロセッサのモードを備える請求項２０に記載のシステム。
【請求項２３】
前記予測された状態は、さらにターゲットアドレスを備える請求項１９に記載のシステム。
【請求項２４】
前記選択された訂正された状態は、最も古い前記予測された分岐命令の１つに関連する請求項１９のシステム。
【請求項２５】
前記選択された訂正された状態は、ランダムに選ばれる請求項１９に記載の方法。
【請求項２６】
前記選択された訂正された状態は、最後に予測されたパイプラインに基づく請求項１９に記載の方法。
【請求項２７】
前記選択された訂正された状態は、最後に予測ミスされたパイプラインに基づく請求項１９に記載の方法。
【請求項２８】
前記選択された訂正された状態は、前記予測された分岐命令のタイプを基礎とする請求項１９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピュータシステムに関し、より具体的には、同時に予測された分岐命令を解決するための技術に関する。
【背景技術】
【０００２】
コンピュータプラットフォームの発展の基本は、プロセッサである。初期のプロセッサは、その時点で使用可能な技術に限定されていた。製造技術において新しい発展は、初期のプロセッサの１／１０００のサイズまで減少した、および、上回るトランジスタの設計を可能にする。これらのより小さいプロセッサの設計は、前の予想を上回り、さらに速く、さらに有効であり、処理パワーを出力している間に実質的により少ない電力を使用する。
【０００３】
プロセッサの物理的な設計が発展したため、情報を処理する、および、機能を実効する革新的な方法も変わった。例えば、命令の「パイプライン方式（pipelining）」は、１９６０年代の初期からプロセッサ設計に実装されていた。パイプライン方式の一例は、命令が順次すばやく流れる間に実行パイプラインをユニットに切断する概念である。ユニットは、
いくつかのユニットがいくつかの命令の適切な部分を同時に処理することができるように設計されている。パイプライン方式の利点の１つは、命令が並列に評価されるため、命令の実行が重なっていることである。パイプライン方式は、命令レベル並列性(instruction level parallelism)（ＩＬＰ）とも呼ばれている。
【０００４】
プロセッサパイプラインは、多くのステージによって構成されている、ここで各ステージは命令を実行することと関連する機能を実行する。各ステージは、パイプステージ（pipe stage）またはパイプセグメント（pipe segment）と呼ばれている。このステージは、パイプラインを形成するために合わせて接続されている。命令は、パイプラインの一方の端から始まり、他方の端で終了する。
【０００５】
パイプライン処理は継続してプロセッサの設計に実装されているが、これは当初プロセッササイクル（processor cycle）ごとに１つの命令のみが実行するように制約されていた。プロセッサの処理する処理量を増加させるために、より最近のプロセッサの設計には、同時に複数の命令を処理することが可能な複数のパイプラインが実装されている。この複数のパイプラインを有するプロセッサのタイプは、スーパースカラプロセッサ（superscalar processor）として分類されることがある。
【０００６】
プロセッサ内において、条件付分岐命令などの特定の命令のタイプが予測されることがある。プロセッサ内の分岐予測ハードウェアは、条件付分岐命令の予測を提供するために設計されることがある。この予測に基づいて、プロセッサは、次の順次命令を実行することを継続するか、または、次の実行されるべき命令に導かれる。
【０００７】
分岐予測ハードウェアを使用するスーパースカラプロセッサは、同じ、または、別々のパイプラインにおいて、同じクロックサイクル内で２つ以上の予測された分岐命令を同時に生じさせ、解決することができる。一般に、このようなアプリケーションにおいて、プロセッサは、予測ミスの場合においていずれかの訂正のステップが行われる前に、最も古い予測ミスされている分岐を決定するために、両方の分岐予測の完全な解決を決定することができるまで待たなければならない。ここには、複数の分岐予測が生じる高速プロセッサのために、最も古い予測ミスされた分岐の決定から、訂正された状態の選択を分離する必要性がある。
【発明の概要】
【０００８】
本発明は、この必要性を認め、すべての同時分岐命令予測の完全な解決が可能な前に、適切な行動を予測し、適切な行動を実行することに向けてステップを踏むことによって、同時分岐命令予測の処理するプロセッサを開示する。
【０００９】
予測された分岐命令の確認の前に同時に予測された分岐命令を解決する方法が開示されている。この方法は、最初に２つ以上の予測された分岐命令を処理することを備えている。各予測された分岐命令は、予測された状態と訂正された状態を有している。予測された分岐命令は、解決ステージに同時に入り、予測された分岐命令の１つから訂正された状態の１つが選択される。この方法は、予測された分岐命令の少なくとも１つが予測ミスされ、選択された訂正された状態が先の命令フェッチを導くために使用されることをさらに確認する。
【００１０】
複数のパイプラインにおいて、予測された分岐命令の確認の前に同時に予測された分岐命令を解決する方法は、最初に２つ以上の予測された分岐命令を処理することを備えている。各予測された分岐命令は、予測された状態と訂正された状態を有する。予測された分岐命令は、別々のパイプラインの解決ステージに同時に入り、予測された分岐命令の１つから訂正された状態の１つが選択される。この方法は、予測された分岐命令の少なくとも１つが予測ミスされ、選択された訂正された状態が先の命令フェッチを導くために使用されることをさらに確認する。
【００１１】
予測された分岐命令の確認の前に同時に予測された分岐命令を解決するシステムは、複数の分岐命令を予測するように構成された予測ロジックを備えている。各予測された分岐命令は、予測された状態と訂正された状態を有している。このシステムは、２つ以上の予測された分岐命令が解決ステージに同時に達したときに決定するように構成された解決ロジックをさらに備えている。この解決ロジックは、そして予測された分岐命令から１つから訂正された状態１つを選択する。このシステムは、選択された訂正された状態に基づいて先の命令をフェッチするように構成されたフェッチロジックを備えている。
【００１２】
本発明のより完全な理解、ならびに発明のさらなる特徴および利点は、以下の詳細な説明および添付の図面から明らかになる。
【図面の簡単な説明】
【００１３】
【図１】図１は、本発明の一実施形態を用いたプロセッサの高レベルロジックハードウェアブロック図を示す。
【図２】図２は、本発明の一実施形態を用いているスーパースカラプロセッサの低レベルロジックブロック図を示す。
【図３】図３は、図１のプロセッサのパイプラインにおいて解決ステージのフローチャートを示す。
【図４】図４は、図３の複数の同時分岐解決フローを示す。
【発明を実施するための形態】
【００１４】
以下に説明される添付された図面に関連した詳細な説明は、本発明の種々の実施形態の説明を意図し、本発明で実施されることがある実施形態のみを表すことを意図していない。この詳細な説明は、本発明の全体を通した理解を提供する目的で特定の記述を含む。しかしながら、本発明がこれらの特定の記述なしで実施されることがあることは当業者にとって明らかである。ある例において、よく知られた構成および要素は、本発明の概念を不明瞭にすることを防ぐためにブロック図の形式で示されている。頭字語および他の記述的な専門語は、単に便宜および明瞭のために使用されることがあり、この発明の範囲の限定を意図していない。
【００１５】
スーパースカラのプロセッサにおいて、プロセッサの内部のリソースは、並列な処理を容易にするように設計されている。設計のいくつかの様相は、事前フェッチ、分岐処理、レジスタ値を含むデータの依存性の解決、命令の開始などの命令を含む。プロセッサが大多数のメモリ装置より速く動作するため、プログラム命令は、プロセッサの可能性を最大限に適切に使用するのに、十分な速さでメモリから直接読み込むことができない。
【００１６】
命令キャッシュは、従来のメモリとプロセッサのスピードの差をうめるように設計された特別なメモリである。メモリからフェッチされた命令は、プロセッサクロックスピード（processor clock speed）で読み込むことが可能なより速い命令キャッシュに位置する。フェッチされた命令は、プログラムにおいて次の順次命令または予測が行われた分岐のターゲットであることがある。次の命令が予測された分岐のターゲットであるとき、プロセッサは、分岐がどこへ行くか予想し、前の適切な命令をフェッチするように試みる。分岐予測が誤っている場合、プロセッサは、その命令処理を、予測された分岐パスでフェッチした命令をパージすることによって訂正し、訂正された分岐パスで命令をフェッチすることを再び開始する。この処理は、さらに詳しく図２、３及び４の解説で説明される。
【００１７】
図１は、下に説明される１つの実施形態を使用するスーパースカラプロセッサ１００の高レベルの図を示す。プロセッサ１００は、確保された高速バス１０４介して命令キャッシュ１０６に接続された中心処理ユニット（central processing unit）（ＣＰＵ）１０２を備えている。このＣＰＵは、データキャッシュ１０８に接続される他の分離された高速バス１１０を備えている。この命令キャッシュ１０６およびデータキャッシュ１０８は、汎用バス１１６を介して入力／出力ポート（Ｉ／Ｏ）１１２およびメモリ１１４とさらに接続される。
【００１８】
プロセッサ１００内において、命令フェッチユニット（Instruction Fetch Unit）（ＩＦＵ）１２２は、メモリ１１４から命令キャッシュ１０６への命令のロードを制御する。一度、命令キャッシュ１０６が命令によりロードされると、ＣＰＵ１０２は、高速バス１０４を介して命令とアクセスすることが可能となる。命令キャッシュ１０６は、図１に示すように分離されたメモリ構造であることがあり、または、ＣＰＵ１０２の内部の要素として内蔵されることもある。組み込みは、命令キャッシュ１０６のサイズならびに複雑性、および、ＣＰＵ１０２の電力損失に基づいて決めることができる。
【００１９】
命令は、一度にいくつかの命令が命令キャッシュ１０６からフェッチされ、符号化されることがある。命令キャッシュ１０６内において、命令は、キャッシュラインとして知られているセクションにグループ分けされる。各キャッシュラインは、複数の命令を含んでいる。フェッチされた命令の数は、必要とされるフェッチの帯域幅ならびに各キャッシュラインの命令の数に依存することがある。１つの実施形態において、ＣＰＵ１０２は、各クロックサイクルの間にＩＦＵ１２２で命令キャッシュ１０６から上位のパイプライン２５０に４つの命令をロードする。上位のパイプライン２５０内において、命令は、演算タイプおよびデータ依存について解析される。命令を解析した後、プロセッサ１００は、実行のために命令を上位のパイプ２５０から下位の機能的なユニットまたはパイプライン２１０および２２０に分散することができる。
【００２０】
命令は、命令機能、パイプラインの利用可能度、命令キャッシュ１０６からロードされた命令のグループ内の命令位置などに依存して下位のパイプライン２１０または２２０に送信されることがある。下位のパイプライン２１０および２２０内において、命令は、オリジナルプログラムシーケンス（original program sequence）ではなく利用可能なリソース基づいて並列に処理される。この処理のタイプは、ダイナミック命令スケジューリング（dynamic instruction scheduling）とよく呼ばれている。
【００２１】
下位のパイプライン２１０および２２０は、算術ロジックユニット、フローティングポイントユニット、記憶ユニット、ロードユニットなどの種々の実行ユニット（Execution Units）（ＥＵ）１１８を含むことができる。例えば、算術ロジックユニットなどのＥＵ１１８は、整数加算、減算、単純乗算、ビット単位ロジック演算（例えば、ＡＮＤ、ＮＯＴ、ＯＲ、ＸＯＲ）、ビットシフティングなどの広範囲の算術機能実行することができる。命令が実行を終了した後、ＣＰＵ１０２は、命令の結果が適正にプロセッサ１００を更新するために使用できるように、命令の結果およびレコーダそれらを適正なシーケンスに加える。
【００２２】
プロセッサ１００によって実行された大多数のプログラムは、条件付分岐命令を含むことができる。条件付分岐命令の実際の分岐行動は、命令が下位のパイプライン２１０または２２０において深部で実行されるまで知られない。分岐命令の最後の実行を待つことによって生じるストールおよび次に分岐命令の結果に基づいて命令をフェッチすべきことを防ぐために、プロセッサ１００は、分岐予測のいくつかの形式を使用することができる。分岐予測を使用することによって、プロセッサ１００は、上位のパイプ２５０において条件付分岐命令の分岐行動を予測することができる。予測された分岐評価に基づいて、プロセッサ１００は、推論的にフェッチし、予測されたアドレス−分岐ターゲットアドレス（例えば、分岐の予測が行われている場合）または分岐命令の後の次のくるべきアドレス（例えば、分岐の予測が行われていない場合）のいずれかからの命令を実行するために準備する。
【００２３】
条件付分岐命令の１つの例は、単純アセンブラ命令等しくなければジャンプ（jump not equal）（ＪＮＥ）である。ＪＮＥ命令が実行されたとき、特定の値は、レジスタにロードされることがあり、値がゼロ（zero）に等しい場合、条件付命令は行われず、シーケンスにおいて次の命令がフェッチされ実行される。しかしながら、レジスタにおいて値がゼロと等しくない場合、条件付分岐は、考慮のうえで行われ、次のフェッチされた命令は、ＪＮＥ命令に関連したターゲットアドレスに位置する。ターゲットアドレスは、前のＪＮＥ命令の実行で前にＪＮＥ命令に関連されていてもよい。
【００２４】
命令を予測するとき、いくつかの条件または「状態」が予測されることがある。例えば、分岐方向、ターゲットアドレス、またはプロセッサモードなどのプロセッサ１００の特定の状態が予測されることがある。プロセッサモードを予測することは、分岐命令の実行の後に、プロセッサ１００がどのモードにいるか予測することを必要とする。例えば、進化したＲＩＳＣプロセッサアーキテクチャにおいて、命令は、ＡＲＭモードまたはサム（Thumb）モードのいずれかで実行されることがある。
【００２５】
条件付分岐の方向を予測する可能な１つの方法は、分岐活動記録テーブル（branch history table）を使用することである。分岐活動記録テーブルは、過去の分岐の数の活動記録を記憶する単純ルックアップテーブルであることがある。１つの分岐活動記録は、過去の条件付分岐の１０２４方向を記憶することができる。複合演算は、予測技術の階層に基礎付けられた分岐予測を作成するために書き込まれることがある（複数のレベル分岐プレディクタ（predictors））。
【００２６】
図２は、プロセッサ１００内の上位のパイプ２５０および２つの下位のパイプライン２１０ならびに２２０の下位レベルの機能的なブロック図２００を示し、本発明の１つの態様に従った命令の処理を示す。機能的なハードウェアブロック図２００内の異なるロジックブロック（またはステージ）は、ハードウェア、ファームウェア、または両方の組み合わせを含むことができる。機能的なハードウェアブロック図２００は、上位のパイプ２５０および２つの下位のパイプライン２１０ならびに２２０によって構成されている。以前に言及したように、上位のパイプ２５０のステージは、ＩＦＵ１２２内に存在する。上位のパイプ２５０内には、フェッチステージ２０２、命令キャッシュステージ２０４、命令符号化ステージ２０６がある。さらに上位のパイプ２５０と関連するのは、分岐予測ロジック２０８である。
【００２７】
上位のパイプ２５０において第１ステージは、フェッチステージ２０２である。フェッチステージ２０２は、検索され取り出されるべき命令の次のグループの選択を制御する。プロセッサ１００が起動すると、フェッチステージ２０２は、検索され取り出され、ロードされるべき開始命令を決定する。図３および図４の検討に関連して説明されているが、フェッチステージ２０２は、下位のパイプライン２１０および２２０からのフィードバックを受信することもできる。フィードバックは、先の命令の選択および命令がどのような順序で実行されるかに影響することがある。
【００２８】
命令キャッシュステージ２０４において、フェッチステージ２０２の間で選択された命令アドレスは、そのアドレスに命令が存在しているか決定するように命令キャッシュ１０６をアクセスするために使用される。命令キャッシュヒットがある場合、ＣＰＵ１０２は、命令を命令キャッシュ１０６から上位のパイプ２５０へと検索して取り出し、プロセッサ１００がメモリ１１４に戻ることなく、プロセッサスピードでフェッチ命令することを可能にする。命令キャッシュにミスがある場合（例えば、命令キャッシュ１０６からフェッチされるべき命令が使用不可能な場合）、ＩＦＵ１２２は、メモリ１１４から命令を検索して取り出し、命令キャッシュ１０６にそれらをロードし、ＣＰＵ１０２にそれらを転送する。命令キャッシュステージ２０４の間に命令が検索して取り出された後、命令は、命令符号化ステージ２０６の間に解析される。
【００２９】
命令符号化ステージ２０６の間に種々の命令に関係する情報は、解析され、処理される。例えば、命令符号化ステージ２０６内で、プロセッサ１００は、命令のタイプ（例えば、アクション、記憶、ロード、ジャンプなど）を決定する。命令が条件付分岐命令の場合、分岐予測ロジック２０８は、引き起こされる。命令符号化ステージ２０６は、分岐予測ロジック２０８が分岐命令を生じされたことを通知し、分岐予測ロジック２０８と通信する。
【００３０】
分岐予測の部分として、分岐予測ロジック２０８は、予測された状態を提供する。予測された状態に記憶された情報は、予測された分岐方向、予測されたターゲットアドレス、またはプロセッサ１００の予測された状態を含むことができる。この情報は、レジスタ、レジスタのグループ、分岐命令と関連するメモリ位置に記憶されることがある。本発明の１つの態様において、予測された状態は、予測された分岐方向のみ含むことができる。他の実施形態において、予測された状態は、予測された分岐方向および予測されたターゲットアドレスにのみ関連する情報を含むことができる。更なる実施形態において、予測された状態は、予測されたターゲットアドレスおよび予測されたプロセッサモードに関連する情報を含むことができる。なお、更なる実施形態において、予測された状態は、予測された分岐方向、予測されたターゲットアドレス、および予測されたプロセッサモードを含むことができる。
【００３１】
分岐方向が予測されたとき、予測された状態は、分岐の予測が行われたか、または、行われていないかを予測する情報を含んでいる。１つの実施形態において、予測された状態は、単一のビットであることがある。例えば、予測された状態に関連したレジスタまたはメモリ位置内で、ビット位置において記憶された「１」は、予測が行われたと分岐を示す。逆に、レジスタまたはメモリ位置内のビット位置に「０」が記憶されている場合、分岐が行われていないと予測されることがある。
【００３２】
ターゲットアドレスが予測された場合、予測された状態は、フェッチされる次の命令の位置を示すターゲットアドレスを含むことができる。ターゲットアドレスのサイズは、プロセッサ１００のアーキテクチャに依存することができる。１つの実施形態において、ターゲットアドレスは、予測された状態に関連したレジスタにおいて記憶された３２ビットアドレス識別子であることがある。
【００３３】
プロセッサモードが予測されたとき、予測された状態は、一度条件付分岐が実行されると、プロセッサ１００が所属される予測されたモードに関連する情報を含むことができる。
【００３４】
例えば、プロセッサモードの予測に基づいて、プロセッサは、命令符号化を異なるように実行する行動をとることができる（つまり、命令のＡＲＭ符号化対命令のサム符号化）。プロセッサモードの予測された状態は、レジスタおよびメモリ位置に記憶された単一のビットの値であることがある。
【００３５】
予測された状態を補って完全にすると、分岐予測ロジック２０８は、さらに予測された分岐命令に関連する訂正された状態を計算し、記憶する。訂正された状態は、予測が誤った場合の情報を含む。訂正された状態の一部として記憶された情報は、回復アドレスおよびプロセッサの前の状態を含むことができる。訂正された状態は、分岐の予測ミスの場合の適切な命令の順序のシーケンスを回復するために、プロセッサ１００によって使用されることがある。
【００３６】
分岐予測ロジック２０８によってつくられた予測の結果として、情報は、次の命令フェッチを導くように、フェッチステージ２０２内のロジックをフェッチするために提供される。予測された状態は、予測に基づく適切な命令を検索し取り出すために、フェッチロジックによって使用される。例えば、予測された状態がターゲットアドレスを含んでいる場合、フェッチロジックは、ターゲットアドレスに位置する命令キャッシュ１０６から次の命令を検索取り出す。命令キャッシュ１０６において命令が利用可能でない場合、フェッチロジックは、メモリ１１４から命令キャッシュ１０４へ命令をロードし、そして命令を上位のパイプ２５０にロードする。
【００３７】
初期の分岐予測が解決される前に、予測を要求する他の分岐命令に出くわすことは、まれである。この例において、プロセッサ１００は、分岐予測ロジック２０８によって実行された予測ごとのトラックを維持する。このトラッキングは、最初に届いた予測を識別することを含む。予測の「時期」をトラッキングする１つの方法は、各条件付分岐命令に関連する命令順序値を使用することである。各予測された状態が割り当てられると、命令順序値も割り当てられ、記憶され、または分岐命令とともに搬送される。一度、予測ロジックが予測を実行すると、または、命令符号化ステージ２０６において現在の命令が予測を要求していないと決定すると、命令は適切な下位のパイプライン２１０および２２０に伝わる。
【００３８】
前に記載したように、下位のパイプライン２１０および２２０は、命令の特定のタイプと関連することがある。例えば、パイプラインは、算術本質の命令を実行するため、または、ロード／記憶機能のすべてを対応するためのみに設計されることがある。パイプラインに予測された分岐命令を送信するために、パイプラインは、分岐命令に対応するように設計されていなければならない。図２に示すように、両方の下位のパイプライン２１０および２２０は、分岐命令に対応するように構成されている。下位のパイプライン２１０および２２０は、各プロセッササイクルの間に複数の命令を実行するように設計されていることもある。したがって、下位のパイプライン２１０および２２０内で、複数の分岐命令は、同じプロセッササイクルの間に実行されることがある。
【００３９】
一度、命令が適切な下位のパイプライン２１０または２２０に入ると、分岐命令などの命令は、より効果的な実行を容易にするために並び換えられることがある。分岐命令が
下位のパイプライン２１０または２２０に達し、実行を持続させるために更なる情報またはデータを要求する場合、プロセッサ１００は、分岐命令を実行する前に、他の命令または命令のグループを実行することができる。この場合において、分岐命令は、実行を用意にするために必要な情報が利用可能となる前に、リザベーションステーション（reservation station）（図示しない）に保有されることがある。例えば、分岐命令は、分岐命令が特定のレジスタに記憶されたターゲットアドレスに分岐され、ターゲットアドレスがまだ利用可能でない場合、リザベーション局に保有される。ターゲットアドレスの値は、他の次の実行された命令として決定されることがある。分岐命令は、次の命令が実行されるまで保有され、特定のレジスタを更新し、ターゲットアドレスが利用可能となる。ターゲットアドレスが利用可能となった後、分岐命令は、更なる実行のために開放される。このような方法で実行された命令は、従来のプログラムシーケンスではなく、利用可能なリソースに基づいて並列に実行される。下位のパイプライン２１０および２２０において命令が実行された後、結果は、プロセッサ１００が正しくに更新されるように、適切なシーケンスに集められ、再び配列される。
【００４０】
リザベーション局内で、いくつかの命令は、同じ時間に保有され、各命令は、更なる情報、プロセッサリソースなどを待っている。一般的に、複数の命令は、プロセッサ１００によって、同じプロセッササイクルの間にリザベーション局から開放されることがある。したがって、複数の分岐命令が同じプロセッササイクルの間にリザベーション局から開放されることは、可能である。
【００４１】
プロセッサ１００は、下位のパイプライン２１０および２２０においてそれらが実行されているため、命令を監視することを継続する。分岐命令がリザベーション局から開放されるとき、または、最後の実行する準備ができたとき、分岐命令と関連する予測の処理は、各下位のパイプライン２１０および２２０の解決ステージ２１５内で、解決ロジック２２５によって実行される。解決ステージ２１５は、図３の記載と関連して説明される。
【００４２】
解決ロジック２２５は、予測された状態の正しさを確認し、予測ミスの事象において訂正された状態を選択する。例えば、予測された状態がターゲットアドレスであり、ターゲットアドレスが決定された適切なターゲットアドレスと一致しない場合、予測ミスが生じる。予測ミスの場合において、解決ロジック２２５は、フェッチステージ２０２に、訂正された状態ならびにフラッシュされる必要がある命令を識別する情報を含むフィードバックを提供する。フラッシュされた命令は、誤った予測に基づいて前にフェッチされた命令である。適切な命令がフラッシュされた後、フェッチロジックは、訂正された状態に基づいた命令を再びフェッチすることを開始する。解決ロジック２２５が予測が正しいと決定する場合、何も行動が行われず、フェッチされた不確かな命令（予測に基づいて）が次に実行される。
【００４３】
図３は、下位のパイプライン２１０および２２０のいずれかの解決ステージ２１５に関連した処理のフロー３００を説明するフローチャートである。処理のフロー３００は、予測された分岐命令がすべてのそれらの依存性を解決したとき、開始ブロック３０２から始まる。分岐依存性は、予測を基礎とされたオペランドが利用可能なとき、解決する。この解決は、解決ステージ２１５において、下位のパイプライン２１０および２２０のいずれかで生じる。
【００４４】
判断ブロック３１２で、分岐解決ステージ２１５に同時に入った複数の予測分岐があるかどうかを判断する。前に記載したように、複数の分岐命令は、同じ下位のパイプライン２１０または２２０の同じプロセッササイクルの間に解決ステージ２１５に入ることができる。本発明の１つの態様は、同じ下位のパイプライン２１０または２２０において、複数の分岐命令を解決する。別の実施形態において、下位のパイプライン２１０において、解決ステージ２１５に入る分岐命令、下位のパイプライン２２０の解決ステージ２１５に入る分岐命令は、同時に解決することがある。プロセッサ１００がさらに下位のパイプラインを有している場合には、本発明の他の実施形態が下位のパイプラインの１つにおいて、複数の分岐予測を解決することができる。
【００４５】
プロセッサ１００は、このアセスメントを作るために、両方の下位のパイプライン２１０および２２０を監視する。プロセッサ１００が複数の分岐命令が解決ステージ２１５に同時に入ったと判断する場合、処理フロー３００は、複数の同時分岐解決フロー３２０に導かれる。複数の同時分岐解決フロー３２０は、分岐解決ステージ２１５に同時に入った２つ以上の予測された分岐命令をどのように解決するか決定し、図４に関連してさらに説明される。解決ステージ２１５に１つの分岐命令のみが入ってきた場合、処理フロー３００は、判断ブロック３１４に続く。
【００４６】
判断ブロック３１４で、分岐予測の結果は、分岐が正しく予測されているか決定するために解析される。判断ブロック３１４で、条件付分岐命令の予測が正しく予測されている場合（例えば、予測された条件付分岐命令のターゲットアドレスが解決されたターゲットアドレスと一致する）、上位のパイプ２５０ならびに下位のパイプライン２１０および２２０において、残っている命令は、正しく予測され、処理フロー３００は、そして終了ブロック３５０へと導かれる。
【００４７】
判断ブロック３１４で、分岐予測結果が予測ミスが生じたことを示す場合（例えば、予測ターゲットアドレスが解決ターゲットアドレスと一致しない）、予測ミスの命令より新しいすべての命令（分岐予測の命令順序値に基づく）は、ブロック３１６に示されるように、上位のパイプ２５０、下位のパイプライン２１０および２２０にフラッシュされる。処理フロー３００は、フェッチステージ２０２内で分岐の訂正された状態の情報がフェッチロジックに送られるブロック３１８に進む。フェッチロジックは、分岐の訂正された状態に基づいて命令をフェッチする。
【００４８】
図４は、複数の同時分岐解決処理フロー３２０をさらに詳しく示す。複数の同時分岐解決処理フロー３２０は、同じプロセッササイクルの間に２つ以上の予測された分岐が解決ステージ２１５に達したときに始まる。２つ以上の予測分岐が解決時期２１５に同時に入ったとき、プロセッサ１００は、同じプロセッササイクルの間に両方の分岐の解決をハンドルする。この解決は、分岐が予測ミスされたかどうかの決定を含み、パイプラインを再び導くなどの適切な行動を行う。
【００４９】
図４に示すように、複数の同時分岐解決処理フロー３２０は、最初に、ブロック４０２で解決されている分岐の訂正された状態の１つを選ぶ。予測ミスが生じたかどうかを複数の同時分岐解決処理フロー３２０が決定する前に、訂正された状態の１つの選択が生じる。複数の同時分岐解決処理フロー３２０の初期において、訂正された状態の１つ選択することによって、予測ミスの予期で更なる時間が保管されることがある。予測ミスが生じていない場合、この選択によって、更なる処理時間の損失はない。
【００５０】
特定の分岐の訂正された状態の選択は、いくつかの要因に基づくことが可能である。１つの実施形態において、訂正された状態の選択は、解決分岐の相対的な時期に基づき、最も古い分岐命令が選択される。別の実施形態において、訂正された状態の選択は、下位のパイプライン２１０および２２０の最近の予測ミスに基づくことができる。さらに他の実施形態において、選択は、最後の予測が届いた下位のパイプライン２１０または２２０に基づくことができる。さらなる実施形態において、命令のタイプは、訂正された状態を選択する基礎として使用されることがある。一方、訂正された状態は、ランダムに選ばれることがある。選択の処理にかかわらず、選択された訂正された状態は、予測ミスの場合において、先の命令フェッチのフェッチロジックを操作するために使用されることがある。
【００５１】
訂正された状態の選択は、プロセッサ１００の実行スピードに影響があることがある。プロセッサの設計によるが、各前述の態様は、特定のスピードの利点がある。例えば、下位のパイプライン２１０または２２０に基づいて訂正された状態を選ぶことは、最後に予測ミスされた下位のパイプライン２１０または２２０の決定よりさらに速く実行することができる。訂正された状態の確実性は、複数の同時分岐解決処理フロー３２０において、後で確認される。
【００５２】
前述した実施形態を使用するプロセッサ１００の１つの利点は、プロセッサ１００が最も古い分岐予測が予測ミスされたことを予期することである。したがって、プロセッサ１００は、単一のサイクルにおいて、分岐が予測ミスされたことを厳密に決定するために必要とされる余分な時間を考慮するためのプロセッサの回数を減少する代わりに、上位のパイプ２５０および下位のパイプライン２１０ならびに２２０をフラッシュされるなどの適当な行動を実行する。プロセッサ１００が訂正された予測ミス分岐を選ぶ場合、最も古い予測ミス分岐が対応する分岐予測を決定するために待つ前に、プロセッサ１００が命令をフラッシュし、再びフェッチすることを開始するため、より高いクロック周波数を実現することができる。プロセッサ１００にもたらす増加したクロックレートは、間違った訂正された状態を選んでいるため、どのクロックサイクルの損失より上回っている。
【００５３】
ブロック４０２で訂正された状態の情報が選択された後、複数の同時分岐解決処理フロー３２０は、判断ブロック４０４に進む。判断ブロック４０４で、解決ロジック２２５は、任意の分岐命令の予測ミスが生じたかどうか決定する。判断ブロック４０４で、予測ミスが生じていない場合、複数の同時分岐解決処理フロー３２０は、ブロック４５０で終了する。この例において、両方の予測が訂正され、命令がロードされた上位のパイプ２５０および下位のパイプライン２１０および２２０は有効であり、訂正は必要ではない。
【００５４】
予測ミスが生じた場合、複数の同時分岐解決処理フロー３２０は、上位のパイプ２５０においてすべての命令がフラッシュされるブロック４０６に進む。上位のパイプ２５０において、すべての命令がプログラムの順序にあるため、これらはいずれの解決分岐より新しい。上位のパイプ２５０の命令がいずれの解決分岐命令より新しいため、これらは予測ミスパスにフェッチされ、フラッシュされる。
【００５５】
ブロック４０６で上位のパイプ２５０がフラッシュされた後、複数の同時分岐解決処理フロー３２０は、ブロック４０８に続く。ブロック４０８で、フェッチロジックは、上位のパイプ２５０においてフェッチすることを再び導くために、選択された分岐の訂正された状態を使用する。複数の同時分岐解決処理フロー３２０は、判断ブロック４１０に続く。判断ブロック４１０で、訂正された状態の情報の選択は、予測ミス分岐命令が訂正された状態が選択された分岐命令に関連するか調べることによって確認される。判断ブロック４１０で確認が成功した場合、ブロック４１８でプロセッサ１００は、命令順序値に基づいて、下位のパイプライン２１０および２２０からのより最近の命令をフラッシュする。ブロック４１８の結果、複数の同時分岐解決処理フロー３２０は、終了し、ブロック４５０に進む。
【００５６】
ブロック４１０で確認が失敗した場合（つまり、最も古い予測ミス分岐が選択されない）、すべての命令は、ブロック４１２で上位のパイプ２５０から再度フラッシュされる。ブロック４１２での命令のフラッシュは、ブロック４０８で上位のパイプ２５０からフェッチされた命令を効果的に移動する。第２の分岐の訂正された状態情報は、そしてブロック４１４でフェッチロジックに送られる。フェッチロジックは、第２分岐の訂正された状態に基づいて命令をフェッチする。第２の分岐命令（命令順序値に基づく）より新しいすべての命令は、ステップ４１６で下位のパイプライン２１０および２２０からフラッシュされる。下位のパイプライン２１０および２２０から命令がフラッシュされた後、ステップ４５０で複数の同時分岐解決処理フロー３２０は終了する。
【００５７】
本明細書に含まれた実施形態に関連して説明される例示的なロジックブロック、モジュール、回路、構成部品、および／または構成要素は、汎用プロセッサ、ディジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレー（ＦＰＧＡ）もしくは他のプログラミング可能なロジックデバイス、ディスクリートのゲートもしくはトランジスタロジック、ディスクリートのハードウェア構成要素、あるいは本明細書で説明される機能を実行するように設計された任意の組み合わせを使用して、実施、または実行されることがある。汎用プロセッサは、マイクロプロセッサであることがあるが、代替として、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態マシンであってもよい。プロセッサは、コンピューティングデバイスの組み合わせとして、例えば、ＤＳＰとマイクロプロセッサの組み合わせ、複数のマイクロプロセッサ、ＤＳＰコアと連携する１つ以上のマイクロプロセッサ、または他の任意のそのような構成として実施されることもある。
【００５８】
本明細書において特定の実施形態が図示され、記述されているが、当業者は、同じ効果を実現するために意図された任意の機構が、示された特定の実施形態の代わりに用いられること、および発明が他の環境において他の適用例があることがあることが分かる。
【００５９】
この応用例は、本発明の任意の適用例または変形例に及ぶことを意図する。下記の特許請求の範囲は、発明の範囲を本明細書で説明された特定の実施例に限定することを全く意図していない。
【図１】
2010505210.tif 000003
【図２】
2010505210.tif 000004
【図３】
2010505210.tif 000005
【図４】
2010505210.tif 000006
【国際調査報告】
2010505210.tif 000007
2010505210.tif 000008