(57)【特許請求の範囲】
【請求項１】
複数の汎用ユニットからなる高性能プロセッサ・システムであって、
各汎用ユニットは、少なくとも１つの実行ユニットと命令リード・バッファ（IRB）とを含み、
IRBは、同汎用ユニットの実行ユニットに、実行のために命令を記憶して出力し、
各IRBは、他のIRBから独立して作動するように設定されたときに、各汎用ユニットが独立してシングル命令発行モードで作動し、複数のIRBが協調して作動するように設定されたときには、複数の該当する汎用ユニットがマルチ命令発行モードで作動し、
複数汎用ユニットのIRBは、それぞれ異なったシングルまたはマルチ命令発行モードで作動するように設定可能であり、
複数の汎用ユニットの複数のIRBのリード・ポートは、２次元配列を構成し複数の行および列を含み、
各行は、複数のIRBにおける１つの命令に対応し、各列は、１つのIRBに対応し、
ビット・ラインは、IRBの各行のリード・ポートを実行ユニットに接続し、IRBから命令ユニットに命令を転送し、
ワードラインは、リード・ポートを制御してデータを出力し、
複数のIRBのワードラインは、プロセッサ・システムの作動モードを設定するために、独立または協調して作動するように設定可能である、
ことを特徴とする高性能プロセッサ・システム。
【請求項２】
設定可能なイントラ汎用ユニット・バスをさらに含み、
イントラ汎用ユニット・バスは、汎用ユニット間において設定に従ってデータを転送する、
ことを特徴とする請求項１に記載の高性能プロセッサ・システム。
【請求項３】
少なくとも１つの命令キャッシュ、トラック・テーブル、トラッカーをさらに含み、
トラック・テーブルは、命令キャッシュの命令ブロックに一対一に対応する複数のトラックを有し、各トラックは、それぞれ複数のトラック・エントリを有し、
トラック・テーブルにおける分岐命令のトラック・エントリは、分岐命令のキャッシュ・アドレスによってアドレス指定され、分岐命令のトラック・エントリは、分岐命令の分岐ターゲット命令のキャッシュ・アドレスを記憶し、
分岐決定の制御下において、トラッカーは、キャッシュ・アドレス（ブロック・アドレスとオフセット）のフォーマットでトラック・テーブル内の場所を呼び出し、IRBに対して、少なくとも現行ブロック・アドレス、順番上次のブロック・アドレス、もしくは現行ブロックの最初の分岐ターゲット・アドレスを含むブロック・アドレスを提供し、
順番上次のブロック・アドレスにおける命令ブロックもしくは最初の分岐ターゲット・アドレスにおける命令ブロックがIRBに記憶されていない場合、順番上次のブロック・アドレスにおける命令ブロックもしくは最初の分岐ターゲット・アドレスにおける命令ブロックが命令キャッシュから読み出され、IRBへ充填される、
ことを特徴とする請求項１に記載の高性能プロセッサ・システム。
【請求項４】
各IRBは命令ブロックを記憶するために複数のIRBブロックを含み、
各IRBブロックは、コンパレータ、デコーダ、およびIRBブロックにおける命令ブロックのブロック・アドレスを記憶するレジスタを有し、
コンパレータは、インプット・アドレスのブロック・アドレス部分とレジスタに記憶されたブロック・アドレスとを比較し、同等ならば、デコーダはインプット・アドレスのブロック・オフセット部分を解読し、命令を実行ユニットに出力するためにIRBを制御するワードラインを有効にする、
ことを特徴とする請求項１に記載の高性能プロセッサ・システム。
【請求項５】
各IRBは、命令ブロックを記憶するために複数のIRBブロックを含み、
各IRBブロックは、コンパレータ、デコーダ、およびIRBブロックにおける命令ブロックのブロック・アドレスを記憶するレジスタを有し、
各IRBブロックは、複数のトークン・パッサーを持ち、１つのトークン・パッサーは、IRBブロックの１つの命令に対応し、
コンパレータは、インプット・アドレスのブロック・アドレス部分とレジスタに記憶されたブロック・アドレスとを比較し、同等ならば、デコーダは、インプット・アドレスのブロック・オフセット部分を解読し、命令を実行ユニットに出力するためにIRBを制御するワードラインを有効にする、
ことを特徴とする請求項１に記載の高性能プロセッサ・システム。
【請求項６】
汎用ユニットの一部もしくは全部がコラム相関モードで独立に作動するように設定され、
コラム相関モードにおける各汎用ユニットは、それ自身の分岐決定を生成し、それ自身のIRBのリード・ポートを制御するローカル・ワードラインを有効化し、実行ユニットに命令を出力し、
汎用ユニットは、SISDもしくはMIMDモードで作動する、
ことを特徴とする請求項１に記載の高性能プロセッサ・システム。
【請求項７】
汎用ユニットの一部もしくは全部がコラム相関モードで独立に作動するように設定され、
汎用ユニットの複数のIRBは、同じプログラムの命令を記憶し、
コラム相関モードの各汎用ユニットはそれ自身の分岐決定を生成し、それ自身のIRBのリード・ポートを制御するローカル・ワードラインを有効化し、実行ユニットに命令を出力し、
汎用ユニットは、同じプログラムの異なるセグメントもしくは異なる分岐を実行し、Super SIMDモードで作動する、
ことを特徴とする請求項６に記載の高性能プロセッサ・システム。
【請求項８】
汎用ユニットの一部もしくは全部が行相関モードで協調して作動するように設定され、
汎用ユニットの複数IRBは、同じ命令を記憶し、
水平グローバル・ワードラインは、行相関モードにおいて汎用ユニットのIRBのリード・ポートを制御し、汎用ユニットの各実行ユニットに同じ命令を出力し、
汎用ユニットは、SIMDモードで作動する、
ことを特徴とする請求項１に記載の高性能プロセッサ・システム。
【請求項９】
汎用ユニットの一部もしくは全部が対角相関モードで設定され、
汎用ユニットの複数のIRBは同じ命令を記憶し、
ジグザグ・グローバル・ワードラインは、対角相関モードにおいて汎用ユニットのIRBのリード・ポートを制御し、汎用ユニットの複数の実行ユニットに連続した命令を出力し、
各汎用ユニットの各実行結果は、全て対角に相関された汎用ユニットのレジスタにイントラ汎用ユニット・バスを経て記憶され、各実行ユニットは、そのオペランドを共有レジスタからであるかのごとく受け取り、
汎用ユニットは、ILPモードで作動する、
ことを特徴とする請求項１に記載の高性能プロセッサ・システム。
【請求項１０】
各汎用ユニットは、依存関係チェッカーを有し、複数の汎用ユニットの依存関係チェッカーは、グループとして作動するように設定され、
依存関係チェッカーのグループは、対応する汎用ユニットのIRBから出力された複数の命令に対して依存関係チェックを実施し、並列に実行されうる命令の数を決定し、次命令の発行のためのアドレス・インクリメントを決定し、依存関係を有する命令とその後続命令は中断され、他の命令は実行を完了してリタイアされ、
依存関係チェッカーの設定を通じて並列に発行されうる命令の最大数を変更し、複数の汎用ユニットを分離することができ、
アドレス・インクリメントは、現行アドレスに加算されて次の開始アドレスを決定し、もしくはアドレス・インクリメントは、トークンをパスするためのトークン・パッサーを有するIRB内を通過するトークンの距離として使われる、
ことを特徴とする請求項１に記載の高性能プロセッサ・システム。
【請求項１１】
汎用ユニットの一部もしくは全部が設定と命令によりソフト・ワイヤード・モードで設定され、
ソフト・ワイヤード・モードにおいて各汎用ユニットは、順番上次の汎用ユニットのレジスタにイントラ汎用ユニット・バスを経て結果を書き込むように設定され、命令の宛先レジスタ・アドレスは、順番上次の汎用ユニットの命令のソース・レジスタ・アドレスと同じであり、よって汎用ユニットをソフト・ワイヤードする、
ことを特徴とする請求項１に記載の高性能プロセッサ・システム。
【請求項１２】
汎用ユニットの一部もしくは全部がコラム相関モードで設定され、
汎用ユニットの複数のIRBは、異なる命令を記憶し、
共有ロード／記憶ユニットは、複数の汎用ユニットに同じデータを提供し、
汎用ユニットは、MISDモードで作動する、
ことを特徴とする請求項１に記載の高性能プロセッサ・システム。
【請求項１３】
ｍとｗを正の整数として、ｍ個の連続した命令が、ｍ個の命令内の可能な分岐ターゲット命令と分岐命令の後続命令とともに、初期アドレスから分岐関係に基づいてｗ個の道に組織され、命令の順序に基づいてｍ個の命令発行スロットに分割され、
各発行スロットは、１つの汎用ユニットに対応し、少なくとも１つの後端パイプラインと最大ｗ個までの前端パイプラインと最大ｗセットまでのIRBリード・ポート／ビット・ラインとを有し、
前端パイプラインは、分岐決定ステージに至るパイプラインを含み、後端パイプラインは、分岐決定ステージの後のパイプライン・ステージを含み、
グローバル・ジグザグ・ワードラインは、ｍ個の汎用ユニットの複数の前端パイプラインへの命令を発行するｗ個の道のそれぞれの複数のリード・ポートを制御する、
ことを特徴とする請求項１に記載の高性能プロセッサ・システム。
【請求項１４】
トラッカーは、トラック・テーブルとエンド・アドレス・テーブルをアドレス指定するために初期アドレスを提供し、
トラック・テーブルは、エンド・アドレス・テーブルをアドレス指定するターゲット・アドレスを出力し、
エンド・アドレス・テーブルは、初期アドレスとターゲット・アドレスの次ブロック・アドレスを出力し、
初期アドレス、ターゲット・アドレスおよびエンド・アドレスは、複数の汎用ユニットのIRBに送られ、
初期アドレスは、ｍ個のIRBの最初からジグザグ・バスを命令順に駆動させ、各ターゲット・アドレスは、その対応する分岐命令が発行されるIRBからジグザグ・バスを駆動させ、次のブロック・アドレスのそれぞれは、その対応する初期もしくはターゲットのジグザグ・パスが命令ブロック内の最後の命令のリード・ポートを接続するIRBの後にあるIRBからジグザグ・バスを駆動させる、
ことを特徴とする請求項１３に記載の高性能プロセッサ・システム。
【請求項１５】
依存関係チェッカーは、発行命令間の依存関係をチェックし、依存関係チェックの結果に基づいて、各道に対してアドレス・インクリメントを生成し、
各前端パイプラインは、分岐命令を処理する時、独立して分岐決定を下し、複数の独立した分岐決定と分岐命令のシーケンスに基づいて、道を選択するシグナルを生成して、道を選択し、
選択された道の中の非依存命令と選択された道以前の命令は、各汎用ユニットの後端パイプラインによって実行されてリタイアされ、
開始オフセット・アドレスと選択された道の道アドレス・インクリメント量が加算され、加算結果の下位部分は、次の初期オフセット・アドレスとなり、
加算結果がブロック・オフセット・アドレス境界を越えないときに、選ばれた道ブロック・アドレスは、次の初期ブロック・アドレスとなり、
加算結果がブロック・オフセット・アドレス境界を越えるときに、選ばれた道ブロック・アドレスの順番上次のブロック・アドレスが次の初期ブロック・アドレスとなる、
ことを特徴とする請求項１３に記載の高性能プロセッサ・システム。
【請求項１６】
１つの汎用ユニットが単一発行モードにおいて動的に配分され、もしくは複数の汎用ユニットがILPモードにおいて動的に配分され、シリーズの命令を実行し、
複数の汎用ユニットが、命令ループを展開して命令ループを並列実行してループ・サイクル数を減らすために、配分される、
ことを特徴とする請求項１に記載の高性能プロセッサ・システム。
【請求項１７】
システムは、命令ループから、少なくとも共有レジスタ・アドレス、基底アドレス・レジスタ・アドレス、ストライド、およびループの深さを含む情報を抽出し、
共有レジスタ・アドレスは、ループの反復において変わる事のない共有パラメータを保持する各汎用ユニット内のレジスタのアドレスであり、
基底アドレス・レジスタ・アドレスは、ループ反復で使用される基底アドレスを保持する各汎用ユニット内のレジスタのアドレスであり、
ストライドは、基底アドレスの２反復間の差異であり、
ループの深さは、命令ループ内の命令数であり、
特別なLOOP命令は、共有レジスタ・アドレス、基底アドレス・レジスタ・アドレス、ストライド、ループの深さ、およびループ幅を提供し、
ループ幅は、ループの総数である、
ことを特徴とする請求項１６に記載の高性能プロセッサ・システム。
【請求項１８】
命令ループにおいて、複数の汎用ユニットがループ幅と利用可能な汎用ユニットの最大数に基づいて配分され、
配分された汎用ユニットの各IRBは、同じ命令を記憶し、行相関モードであり、１つの汎用ユニットは、アクティブ汎用ユニットとして指定され、
アクティブ汎用ユニットは、共有パラメータと開始基底アドレスを抽出し、共有パラメータを配分された汎用ユニットのそれぞれに記憶するためにイントラ汎用ユニット・バスを経て送り出し、アクティブ汎用ユニットの基底レジスタの開始基底アドレスを記憶し、イントラ汎用ユニット・バスを経て他の配分された汎用ユニットへ開始基底アドレスとストライドを送り、他の配分された汎用ユニットのそれぞれは、開始基底アドレスを、ストライド量と汎用ユニットとアクティブ汎用ユニットとの間の汎用ユニット数の差異を掛け合わせたものによって調整し、各汎用ユニットの基底レジスタの中に調整された基底アドレスを記憶する、
ことを特徴とする請求項１７に記載の高性能プロセッサ・システム。
【請求項１９】
配分された汎用ユニットは、命令ループ内の命令数であるループの深さ分の命令を一度実行し、ループの総数であるループ幅から実行されたループの数を引いたものがまだ配分された汎用ユニットより大きい場合に、ストライドと配分された汎用ユニットの数に基づいて各汎用ユニットの反復パラメータを計算してセットし、
配分された汎用ユニットは、ループの深さ分の命令を一度実行し、実行されたループがループ幅に等しくなったときに、ループ動作モードを脱出する、
ことを特徴とする請求項１８に記載の高性能プロセッサ・システム。
【請求項２０】
複数の汎用ユニットのそれぞれは、複数セットのスレッド資源を複数セットのIRBと複数セットのレジスタとして有し、スレッド・レベル並列処理（TLP）をサポートし、
IRBは命令をその対応する汎用ユニットのそれぞれにスレッドの状態に応じて出力し、スレッドに対応するレジスタは、データを記憶もしくは取り出し、
スレッド資源は、スレッド状態に基づいてスイッチし、実行資源を使用し、よって複数の汎用ユニットは、TLPプロセッサとして機能する、
ことを特徴とする請求項１に記載の高性能プロセッサ・システム。
【請求項２１】
スレッド資源を各プログラムに、プログラム優先度、プログラムの資源に対する現時点での需要、およびプログラムの準備状態に応じて動的に配分し、
汎用ユニットは、現在より高い優先度のプログラムによって必要とされていない場合に、より低い優先度のプログラムに配分され、より高い優先度のプログラムが必要とする場合には、より高い優先度のプログラムに戻される、
ことを特徴とする請求項２０に記載の高性能プロセッサ・システム。
【請求項２２】
プログラムの優先度に応じて各プログラムに汎用ユニットを配分し、優先度が高いほどより多くの汎用ユニットが配分され、
配分された汎用ユニットの中から１つのIRBをリードIRBとして指定し、リードIRBの各々の命令が出力され、汎用ユニットでの実行のためにその通常の出力が行われる前に、早期に出力された命令は、現時点において並列処理の度合いの高いプログラムほど資源需要が高くなるプログラムを実行するための資源需要を決定するために、デコードされ、
プログラムの準備状態は、少なくともプログラムが現時点において必要とする利用可能なデータを含み、
実行されるべき命令の資源需要と準備状態は、現時点におけるプログラム毎の需要フィードバック・シグナルを構成し、プログラムの優先度と需要フィードバック・シグナルに基づいてスレッド資源を配分する、
ことを特徴とする請求項２１に記載の高性能プロセッサ・システム。
【請求項２３】
配分ユニットは、スレッド資源テーブルの内容、プログラムの資源需要、およびプログラムの準備状態に基づいて、動的にスレッド資源をプログラムにリアルタイムで配分し、
スレッド資源テーブルの各行は、システムによって実行されたプログラムの記録、プログラムの識別、スレッド資源番号、プログラムに配分された汎用ユニットの位置、およびアクティブ汎用ユニットの位置を保持し、
実行のための命令の通常の出力よりも前に、各リードIRBは、命令をその資源需要を決定するためにデコードされるべく出力し、
プログラムの資源需要およびプログラムの準備状態がフィードバック・シグナルを形成すると、プログラムが配分された汎用ユニットのスレッド資源テーブルにおける位置を含むフィードバック・シグナル‘AND’が、プログラムの実際の需要を形成し、
最高位優先度のプログラムの実際の需要に基づいて汎用ユニットを動的に配分し、まだ配分されていない残りの汎用ユニットは、次の高位優先度のプログラムの実際の需要に基づいて配分され、全ての汎用ユニットが配分されるまで、もしくは各プログラムがその汎用ユニット配分を得るまで、プログラムの優先度に基づいて汎用ユニットを配分し、
各汎用ユニットは配分に応じて動作する、
ことを特徴とする請求項２２に記載の高性能プロセッサ・システム。
【請求項２４】
プロセッサ・システム内において異なるスレッド間の命令同期を命令アドレスに基づいた順次ロックによって実施し、
プログラム内の命令は、２つの汎用ユニットが同じプログラムを実行する場合にロック命令としてセットされ、
サブ・ルーティン内の命令は、２つのスレッドが同じサブ・ルーティンを呼び出す場合にロック命令としてセットされ、
ロック命令のアドレスは、ロック・アドレスであり、ロック・アドレスは、ロック操作を行うときに使われるアドレス情報であるトラック・ポイント位置（BN）であり、
ロックされたスレッドがロック命令を実行する場合に、一時停止実行によってロックされ、ロック・レジスタにロック・アドレスを記憶し、
アンロック・スレッドがロック命令を実行するときに、アンロック・スレッドは、ロック・アドレスを、ロック・レジスタのアドレスと照合するために、送り出し、
照合が一致した場合、ロックされているスレッドは、アンロックされて実行を再開する、
ことを特徴とする請求項１に記載の高性能プロセッサ・システム。
【請求項２５】
プロセッサ・システム内において異なるスレッド間の命令同期を命令アドレスに基づいたバリア・ロックによって実施し、
プログラム内の命令は、２つの汎用ユニットが同じプログラムを実行する場合にロック命令としてセットされ、
サブ・ルーティン内の命令は、２つのスレッドが同じサブ・ルーティンを呼び出す場合にロック命令としてセットされ、
ロック命令のアドレスは、ロック・アドレスであり、各汎用ユニットのロック・レジスタに記憶され、ロック・アドレスは、トラック・ポイント位置（BN）であり、
バリア・ロック同期した汎用ユニットがロック命令を実行するときに、実行を一時停止し、ロック・アドレスをロック・レジスタにおけるアドレスと照合するために送り出し、
全ての照合結果が”一致”するとき、バリア・ロックされた汎用ユニットは、実行を再開する、
ことを特徴とする請求項１に記載の高性能プロセッサ・システム。
【請求項２６】
プロセッサ・システム内において異なるスレッド間の命令同期を命令アドレスに基づいたバリア・ロックによって実施し、
各汎用ユニットは、さらにデータ・リード・バッファ（DRB）を含み、
DRBのエントリは、データ取得命令を含むIRBのエントリに対応し、
高性能プロセッサは、さらに少なくとも１つのデータ・エンジンを含み、
同データ・エンジンは、対応するデータ取得命令が実行ユニットによって実行される前に、DRBに必要なデータを充填し、
IRBがデータ取得命令を実行ユニットに送る時に、DRBは、対応するデータを実行ユニットに送る、
ことを特徴とする請求項１に記載の高性能プロセッサ・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
[1]  この発明はコンピューター、コミュニケーション、そして集積回路の分野に関連する。
【背景技術】
【０００２】
[2]  従来の汎用プロセッサ(CPU)とデジタルシグナルプロセッサ（DSP）は共にフレキシブルである；異なるアプリケーションを取り扱うために異なるプログラムを走らせる。しかし、限られたリソースのために、汎用プロセッサの処理能力とスループット率は不十分である。従来のマルチコア・プロセッサは複数のプロセッサ・コアを統合し、プログラムを並列処理することでチップ性能を改善する。しかし、従来のマルチコア・プロセッサの全能力を活かすには並列プログラミングの考え方が必要とされる。現実には、OSによるリソースの配分と管理は、必要に応じてというよりは、通常均等に分割される。汎用CPUに比べて、デジタルシグナルプロセッサはより多くの計算ユニットを持つが、大抵の場合、計算資源はまだ不十分である。従って、並列処理を改善こと、特にプログラム実行にもとづいて計算資源を動的にスケジューリングして資源をより良く配分することは、汎用プロセッサの効率を改善する１つの鍵である。
【０００３】
[3]  今日のプロセッサ・アーキテクチャにおいて、キャッシュは通常下位レベルメモリの内容の一部を記憶するために用いられ、その内容が高位レベルメモリもしくはプロセッサ・コアによって素早く読み込まれ、パイプラインをよどみない状態に維持する。基本的なキャッシュは、キャッシュミスの後、下位レベルメモリからの内容によって自らを充填し、キャッシュが不足内容によって満たされるまで、パイプラインを待たせることになる。幾つかの新しいキャッシュ構造、例えば:  犠牲キャッシュ、トレースキャッシュ、そしてプリフェッチは全て基本キャッシュに対する改善である。にもかかわらず、プロセッサ／メモリのスピードギャップはさらに広がりつつある。従来のアーキテクチャ、特にキャッシュミスは現代のプロセッサの改善を制限する最も深刻なボトルネックである。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
[4]  既存のプロセッサ・アーキテクチャは通常ロード命令を使ってデータを読む。それはメモリからレジスタへオペランドをロードし、そしてオペレーション・ユニットへ送り該当するオペレーションを実行する；結果を実現した後、実行結果はレジスタに書き戻され、そして記憶命令を使って結果をレジスタからメモリへ移す。統計によると、従来のプロセッサにおいては、データのロード／記憶命令がプログラムの命令全体の30%近くを占める。データ読み取り命令とデータ記憶命令自体は算術論理操作を含まないから、これらのタイプの命令はより大きな割合を占め、プロセッサの稼働率はより低くなり、プロセッサの操作能力は最大に活用されない。加えて、分岐命令自体は算術論理操作を含まない；このタイプの命令はプログラムの命令数全体の約16%を占める。もしデータ読み取り/記憶命令と分岐命令を隠すことが可能なら、従ってそれらが別個の命令サイクルを占領しないならば、プロセッサの命令効率を改善することができる。
【０００５】
[5]  従来のグラフィック・プロセッサ・ユニット（GPU）は複数のレーンを持つ。各レーンは同じタイプのデータもしくは異なるタイプのデータに対して同じ命令を実行する。しかし、異なる命令を同時に実行することが出来ないため、GPUは効率に限界がある；マルチコア・プロセッサのコアは同時に異なる命令を実行できるが、プロセッサ・コアの数に限界があり規模を拡大するのが困難である。
【課題を解決するための手段】
【０００６】
[6]  この発明は新しいプロセッサ・システム・アーキテクチャを開示し、上述の問題全てを解決する。
【０００７】
[7]  この開示は通常の汎用ユニットに基づいた高性能プロセッサ・システムを開示する。それは命令メモリと複数のレーン、命令を記憶する命令メモリを取り扱う。各レーンは命令を実行するのに用いられる命令ユニットを含む。レジスタ・ファイル（RF）はオペランドを記憶する；命令バッファリングの最中、命令リードバッファ（IRB）は自動的にプロセッサへ命令を出力しそれらを実行する。
【０００８】
[8]  必要に応じて、複数の命令リード・バッファが同時に複数の命令を対応する実行ユニットへ出力する；もしくは１つの同命令リード・バッファが同時に複数の命令を対応する実行ユニットへ出力する；もしくは同命令リード・バッファと命令メモリが同時に複数の命令を同命令リード・バッファの対応する実行ユニットへ出力する。
【０００９】
[9]  必要に応じて、同トラッカーは、実行ユニットによって現在実行されている命令の後の最初の分岐命令まで動き、それから次命令のアドレスとターゲット命令のアドレスを出力する；同次命令もしくはターゲット命令が命令リード・バッファに記憶されていないとき、命令メモリを制御し同次命令もしくはターゲット命令を命令リード・バッファに充填する。
【００１０】
[10]  必要に応じて、各命令リード・バッファの各命令はトークン・パッサーに対応し、同トークン・パッサーはトークンをパスするのに用いられる；同命令リード・バッファは実行ユニットの出力トークンに対応するトークン・パッサーによって供給された命令を積極的に実行する。
【００１１】
[11]  必要に応じて、開示はプリプロセッサを開示し、同プリプロセッサは実行ユニットへまだ送られていない命令を処理する；そして同命令リード・バッファは、有効トークンを持つトークン・パッサーに対応する命令の後の少なくとも１つの命令を供給する。
【００１２】
[12]  必要に応じて、同高性能プロセッサ・システムをコラム相関と設定することを通して、異なる命令リード・バッファが、各自の実行ユニットで実行された命令の結果に沿って該当する命令を出力するようにする。
【００１３】
[13]  必要に応じて、同高性能プロセッサ・システムを行相関もしくは対角相関と設定することを通して、命令リード・バッファの一部または全部が、ある命令リード・バッファのトークン配置に応じて、該当する命令を出力するようにする。 
【００１４】
[14]  必要に応じて、トークン・パッサーが同期的にトークンを異なる命令リード・バッファへパスする。
【００１５】
[15]  必要に応じて、設定可能なレーン間のバス、同レーン間バスは設定によってレーン間でデータを送信もしくは結果を実行する。
【００１６】
[16]  必要に応じて、少なくとも１つのレーンを設定することを通して、以下の少なくとも１つを実現する：単一命令フロー単一データフローモデル、単一命令フロー複数データフローモデル、スーパー単一命令フロー複数データフローモデル、複数命令フロー単一データフローオペレーションモデル、複数命令フロー複数データフローモデル、命令レベル並列モデル、ソフトワイヤーロジックモデル、ループ命令モデル、単一レーン複数スレッドオペレーションモデル、複数レーン複数スレッドオペレーションモデル、そして同時複数スレッドモデル。
【００１７】
[17]  必要に応じて、同命令レベル並列モデルの 単一サイクルの最大命令発行数は設定によって変更可能で、適応的発行数設定を実現する。
【００１８】
[18]  必要に応じて、設定可能な依存関係チェック・モジュールは１つの発行の中で同時に実行されうる命令の位置と数を決定するのに用いられ、トークン・パッサーの距離を確定する。
【００１９】
[19]  必要に応じて、レーンの隔離を依存関係チェック・モジュールの設定によって実現する。
【００２０】
[20]  必要に応じて、設定によって、同時に同じオペランドを複数のレジスタファイルへ書き込む。
【００２１】
[21]必要に応じて、同チップ上スケジューリング・モジュールは設定を通してレーン数とプログラム・モードをリアルタイムで変更する。
【００２２】
[22]  必要に応じて、コンバータは異なるセットの命令を１つのタイプの命令セットへ変換する。
【００２３】
[23]  本開示は一般汎用ユニットを元にした高性能プロセッサを提唱し、各命令ユニットはその対応する命令リードバッファを持つ；複数の命令リード・バッファが同時に複数の命令をそれらの対応する実行ユニットへ出力する；もしくは１つの命令リード・バッファが同時に複数の命令を対応する実行ユニットへ出力する；もしくは命令リード・バッファと命令メモリが同時に複数の命令を同命令リード・バッファの対応する実行ユニットへ出力する。
【００２４】
[24]  必要に応じて、実行ユニットが分岐命令へ実行する前に、分岐命令の次の命令とターゲット命令を命令リード・バッファへ事前に充填する。
【００２５】
[25]  必要に応じて、命令リード・バッファは、プロセッサ・コアによる命令の実行結果に応じて、トークンをパスし、それから同トークンの対応する命令をプロセッサ・コアに出力して実行する。
【００２６】
[26]  必要に応じて、トークンがあるところのトークン・パッサーに対応する命令の後の少なくとも１つの命令が前処理される。
【００２７】
[27]  必要に応じて、高性能プロセッサ・システムをコラム相関として設定することを通して、異なる命令リード・バッファが対応する実行ユニットによって実行された命令の結果に対応する命令を出力するように仕向ける；もしくは同高性能プロセッサ・システムを行相関もしくは対角相関として設定し、命令リード・バッファの一部もしくは全部が、ある命令リード・バッファのトークン位置に応じて対応する命令を出力するようにする。
【００２８】
[28]  必要に応じて、少なくとも１つのレーンを設定することを通して、以下の少なくとも１つを実現する：単一命令フロー単一データフローモデル、単一命令フロー複数データフローモデル、スーパー単一命令フロー複数データフローモデル、複数命令フロー単一データフローオペレーションモデル、複数命令フロー複数データフローモデル、命令レベル並列モデル、ソフトワイヤーロジックモデル、ループ命令モデル、単一レーン複数スレッドオペレーションモデル、複数レーン複数スレッドオペレーションモデル、そして同時複数スレッドモデル。
【００２９】
[29]  必要に応じて、同命令レベル並列モデルの単一サイクルの最大命令発行数は設定によって変更可能で、自己適応的な発行数設定を実現する。
【００３０】
[30]  必要に応じて、依存関係チェックを通して、同時に発行された命令から、並列で実行されうる命令の場所と数を決定し、トークン・パッシングの距離を確定する；そして依存関係チェック・モジュールの設定を通してレーンを隔離する。
【００３１】
[31]  必要に応じて、需要に応じて複数レーンを並列に実行されるべくループ命令ステージへ割り当て、ループを展開し、並列に実行することによりループ数を減らす。
【００３２】
[32]  必要に応じて、異なるレーンの異なるスレッド、もしくは同じレーンの異なるスレッドが異なるモデルとして設定され、走る；前もってセットされたプログラム優先度それとプログラムの資源需要に応じて、レーンとスレッド資源のリアルタイムの動的スケジューリングを実行する。
【００３３】
[33]  必要に応じて、スレッドソース割り当てテーブルとプログラムの現在の資源需要とプログラムの準備状態に応じて、動的に異なるプログラムにスレッド資源を割り当てる。
【００３４】
[34]  必要に応じて、異なる命令セットの命令を、レーンの実行ユニットで実行できる、１つのタイプの命令セットの命令に変換した後、実行ユニットを使って実行する。
【００３５】
[35]  必要に応じて、スーパー単一命令複数データフローモードにおいて、複数レーンが同じプログラムを実行し、各レーンは各自の独立した分岐決定メカニズムと命令アドレス指定メカニズムを持ち、独立に同じプログラムの異なるステージもしくは異なる分岐を実行することができる。
【００３６】
[36]  必要に応じて、１つのトラッカーに対応する複数のレーンにおいて、１つのレーンはアクティブ・レーン、残りは後続レーンである；同複数レーンの命令リード・バッファの内容は同じである；同トラッカーのリードポインタは、同複数レーンの少なくとも１つのレーンの実行ユニットによって現在実行されている命令の次の命令へ、移動し、そして、同第１命令から始まる複数の命令の分岐命令のターゲット命令のアドレスを出力する；同第１命令もしくは同ターゲット命令がまだ同複数レーンの命令リード・バッファに記憶されていないとき、命令メモリを制御して同第１命令もしくは同ターゲット命令を、同複数レーンの命令リード・バッファへ充填する；そして同複数レーンの命令リード・バッファを制御して同第１命令から始まる複数の命令を別々に出力する。
【００３７】
[37]  必要に応じて、同複数レーンの同複数命令に対して依存関係チェックを行い、依存関係チェック結果に応じて、同トラッカー・ポインタのインクリメント量を決定し、トラッカー・ポインタを更新し、依存関係チェック結果に応じて、プロセッサ・コアが全部もしくは一部の同複数命令を実行するようにする。
【００３８】
[38]  必要に応じて、同トラッカーは同第１命令アドレスと次ブロック命令アドレスを同複数レーンのIRBへ出力し、同複数レーンの中の各対応するレーンのIRBを制御し、同第１命令から始まる複数の連続した命令を対応するレーンへ実行のために出力する；同トラッカーはまた、同第１命令アドレスから始まる複数の連続した命令の中の全ての分岐の分岐ターゲット・アドレスとそれらの次ブロック命令アドレス、を同複数レーンのIRBへ出力し、同複数レーンの各対応レーンのIRBを制御して、同第１命令アドレスから始まる連続した複数のアドレスを対応するレーンへ実行のために出力する。
【００３９】
[39]  必要に応じて、同リードレーンの命令リード・バッファは、受け取った同第１命令アドレスにもとづいて対応するジグザグ・ワードラインを活性化し、よってジグザグ・ワードラインが通過する後続レーンのIRBのリードポートを有効にし、同第１命令から始まって最初の分岐命令まで出力し、そしてイネーブル信号が同第１命令へ辿り着くとき、それはターゲット・バスへパスされ、そしてそれは分岐ターゲット・アドレスによって決定された命令ブロックの後続レーンのジグザグ・ワードラインによって受け取られ、それが通過する同後続レーンのIRBのリードポートを有効にして該当する命令を出力する；そして上記プロセスにおいて、ジグザグ・ワードライン上のイネーブル信号は、命令ブロックの境界に辿り着いたとき、バスにパスされ、それは次ブロック・アドレスによって決定された命令ブロックの後続レーンのジグザグ・ワードラインによって受け取られ、それが通過する同後続レーンのIRBのリードポートを有効にして該当する命令を出力する。
【００４０】
[40]  必要に応じて、分岐ポイントの分岐の命令が道と定義され、各道において同じ発行シーケンスの命令を実行するレーンがスロットとして定義される；依存関係チェック・モジュールが各道において第１レーンから始まる依存関係チェックを行い、各道における依存関係チェック結果に応じて、各道に対してリード・ポインタ・インクリメントを生成し、各道における依存関係チェック結果に応じて、対応する道の実行ユニットを制御して、一部もしくは全部の該当する命令を実行する。
各道の分岐命令の実行結果にもとづいて、道の中の１つの道の実行ユニットを選び実行を完了し、しかし他の道の実行ユニットの実行を中止する；そして１つの道の命令アドレスとリードポインタ・アドレスを選び、各道の分岐命令の実行結果にもとづいてトラッカー・リードポインタを更新する。
【００４１】
[41]  必要に応じて、並列発行される命令の数は依存関係チェッカーの設定を通して変えることができる。
【００４２】
[42]  必要に応じて、同システムの各レーンはまたデータリード・バッファとデータエンジンを含む；同データエンジンは、データリード・バッファに前もって、命令リード・バッファの命令ロード命令によって用いられるかもしれないデータを充填する。
【００４３】
[43]  必要に応じて、同データリードバッファのテーブル・エントリと命令リード・バッファのテーブル・エントリは一対一の関係にあり、データ読み取り命令に対応するデータはデータリード・バッファから、命令リード・バッファの同データ読み取り命令の位置を通して、直接見いだされる；もしくはデータリード・バッファのテーブル・エントリ数は命令リードバッファのテーブル・エントリ数より小さく、命令リード・バッファのアイテムのそれぞれはポインタを含み、データ読み取り命令に対応するデータは、命令リード・バッファのデータ読み取り命令エントリの同ポインタをデコードすることを通して、見いだされる。
【００４４】
[44]  必要に応じて、さらに以下を含む：１つのトラッカーに対応する複数のレーン；    同複数レーンにおいて、１つのレーンはリード・レーン、残りは後続レーンである；同複数レーンの命令リード・バッファの内容は同じである；同トラッカーのリードポインタは、同複数レーンの少なくとも１つのレーンの実行ユニットによって現在実行されている命令の次の命令へ、移動し、そして、同第１命令から始まる複数の命令の分岐命令のターゲット命令のアドレスを出力する；同第１命令もしくは同ターゲット命令がまだ同複数レーンの命令リード・バッファに記憶されていないとき、命令メモリを制御して同第１命令もしくは同ターゲット命令を、同複数レーンの命令リード・バッファへ充填する；そして同複数レーンの命令リード・バッファを制御して同第１命令から始まる複数の命令を別々に出力する。
【００４５】
[45]  必要に応じて、同複数レーンの同複数命令に対して依存関係チェックを行い、依存関係チェック結果に応じて、同トラッカー・ポインタのインクリメント量を決定し、トラッカー・ポインタを更新し、依存関係チェック結果に応じて、プロセッサ・コアが全部もしくは一部の同複数命令を実行するようにする。
【００４６】
[46]  必要に応じて、同トラッカーは同第１命令アドレスと次ブロック命令アドレスを同複数レーンのIRBへ出力し、同複数レーンの中の各対応するレーンのIRBを制御し、同第１命令から始まる複数の連続した命令を対応するレーンへ実行のために出力する；同トラッカーはまた、同第１命令アドレスから始まる複数の連続した命令の中の全ての分岐の分岐ターゲット・アドレスとそれらの次ブロック命令アドレス、を同複数レーンのIRBへ出力し、同複数レーンの各対応レーンのIRBを制御して、同第１命令アドレスから始まる連続した複数のアドレスを対応するレーンへ実行のために出力する。
【００４７】
[47]  必要に応じて、同リードレーンの命令リード・バッファは、受け取った同第１命令アドレスにもとづいて対応するジグザグ・ワードラインを活性化し、よってジグザグ・ワードラインが通過する後続レーンのIRBのリードポートを有効にし、同第１命令から始まって最初の分岐命令まで出力し、そしてイネーブル信号が同第１命令へ辿り着くとき、それはターゲット・バスへパスされ、そしてそれは分岐ターゲット・アドレスによって決定された命令ブロックの後続レーンのジグザグ・ワードラインによって受け取られ、それが通過する同後続レーンのIRBのリードポートを有効にして該当する命令を出力する；そして上記プロセスにおいて、ジグザグ・ワードライン上のイネーブル信号は、命令ブロックの境界に辿り着いたとき、バスにパスされ、それは次ブロック・アドレスによって決定された命令ブロックの後続レーンのジグザグ・ワードラインによって受け取られ、それが通過する同後続レーンのIRBのリードポートを有効にして該当する命令を出力する。
【００４８】
[48]  必要に応じて、分岐ポイントの分岐の命令が道と定義され、各道において同じ発行シーケンスの命令を実行するレーンがスロットとして定義される；依存関係チェック・モジュールが各道において第１レーンから始まる依存関係チェックを行い、各道における依存関係チェック結果に応じて、各道に対してリード・ポインタ・インクリメントを生成し、各道における依存関係チェック結果に応じて、対応する道の実行ユニットを制御して、一部もしくは全部の該当する命令を実行する。
各道の分岐命令の実行結果にもとづいて、道の中の１つの道の実行ユニットを選び実行を完了し、しかし他の道の実行ユニットの実行を中止する；そして１つの道の命令アドレスとリードポインタ・アドレスを選び、各道の分岐命令の実行結果にもとづいてトラッカー・リードポインタを更新する。
【００４９】
[49]  必要に応じて、並列発行される命令の数は依存関係チェッカーの設定を通して変えることができる。
【００５０】
[50]  必要に応じて、同システムの各レーンはまたデータリード・バッファとデータエンジンを含む；同データエンジンは、データリード・バッファに前もって、命令リード・バッファの命令ロード命令によって用いられるかもしれないデータを充填する。
【００５１】
[51]  必要に応じて、同データリードバッファのテーブル・エントリと命令リード・バッファのテーブル・エントリは一対一の関係にあり、データ読み取り命令に対応するデータはデータリード・バッファから、命令リード・バッファの同データ読み取り命令の位置を通して、直接見いだされる；もしくはデータリード・バッファのテーブル・エントリ数は命令リードバッファのテーブル・エントリ数より小さく、命令リード・バッファのアイテムのそれぞれはポインタを含み、データ読み取り命令に対応するデータは、命令リード・バッファのデータ読み取り命令エントリの同ポインタをデコードすることを通して、見いだされる
【００５２】
[52]  本開示の他の態様は、この分野に精通した者にとっては、本開示の詳細な説明、クレーム、そして図面を通して理解されうる。
【発明の効果】
【００５３】
[53]  本発明のプロセッサ・システムは通常の汎用ユニットから構成される。汎用ユニットは単一命令単一データ（SISD）、単一命令複数データ（SIMD）、複数命令単一データ（MISD）、そして複数命令複数データ（MIMD）、命令レベル並列プロセッサ（ILP）、ベクタープロセッサ、そしてスレッドレベル並列プロセッサ（TLP）へと構成されうる。このプロセッサシステムの部分は１つまたはそれ以上の上述のプロセッサ構造へと同時に構成されうる。加えて、本発明によって開示されるプロセッサ・システムは既存の設定に基づいて、もしくはプログラムの実行に応じて、動的に構成されることが可能であり、計算資源を活用しプロセッサ性能を向上させる。
【００５４】
[54]  本発明によって開示されるプロセッサ・システムのキャッシュ・システムは、キャッシュミスの後に充填される従来のキャッシュ・システムとは異なり、命令はプロセッサによって実行される前に命令リードバッファ（IRB）へ充填される。
よって、キャッシュミスによる実行ユニット待ちサイクルを隠すもしくは消去する。
さらに当プロセッサ・システムのキャッシュ・システムは、プロセッサ・コアが要求する前に命令を実行のためにプロセッサ・コアに出力することができる。
それはキャッシュ読み取りクリティカルパスにおけるアドレスタグ照合を避け、従って通常のキャッシュ・システムに比べてより高いクロック周波数とより低い電力消費で稼働することができる。
【００５５】
[55]  統計によると、従来のプロセッサ・ユニットのプログラムにおいては、データ読み取り命令、データ記憶命令そして分岐命令が全プログラム命令の46%を占める。
本発明のプロセッサ・システムは上記命令を他のタイプの命令とともに同時に実行する。
それによって、この種の命令が使う時間を隠蔽し、よって余分な時間をかけさせない。
従って、効率をあげることになる。
【００５６】
[56]  この分野に精通した者にとっては、本開示の他の利点と応用は自明である。
【図面の簡単な説明】
【００５７】
【図１】[57]  図１は本開示と整合する例示的な同命令キャッシュ・システムのプロセッサ・システムを示す。
【図２Ａ】[58]  図２Aは開示された実施形態と整合する例示的なトラック・ポイント・フォーマットを示す。
【図２Ｂ】[59]  図２Bは開示された実施形態と整合する例示的な新トラックの構築の実施形態を示す。
【図３】[60]  図３は開示された実施形態と整合する例示的なトラッカーのリード・ポインタの動きである。
【図４】[61]  図４は本開示と整合する例示的な、コア11へ実行のために命令を供給する同IRB107の実施形態である。
【図５】[62]  図５は本開示と整合する例示的な設定を受けている制御ユニットを示す。
【図６】[63]  図６は例示的な、IRB107の各命令に対応しているトークン・パッサーを示す。
【図７】[64]  図７は開示された実施形態と整合するもう１つの例示的なトークン信号パッシングを示す。
【図８Ａ】[65]  図８Aは本開示と整合する例示的なイントラ・レーン・バスを示す。
【図８Ｂ】[66]  図８Bは本開示と整合するもう１つの例示的なイントラ・レーン・バスを示す。
【図８Ｃ】[67]  図８Cは開示された実施形態と整合する例示的な、同じもしくは異なる命令を実行しているレーンのグループを示す。
【図９Ａ】[68]  図９Aは開示された実施形態と整合する例示的なMIMDオペレーションを示す。
【図９Ｂ】[69]  図９Bは開示された実施形態と整合する例示的な、MIMDオペレーションをサポートする同一内容を持つ複数TTを示す。
【図９Ｃ】[70]  図９Cは開示された実施形態と整合する例示的な時分割多重化TTを示す。
【図９Ｄ】[71]  図９Dは開示と整合する例示的な、後続トラック情報を複数レーンへ供給する実施形態を示す。
【図９Ｅ】[72]  図９Eは開示された実施形態と整合する例示的な、一時的なトラックの行の実施形態を示す。
【図９Ｆ】[73]  図９Fは開示された実施形態と整合する例示的な、ミクロ・トラック・テーブルの実施形態を示す。
【図１０Ａ】[74]  図１０Aは本開示と整合する例示的なトークン・パッサー配列である。
【図１０Ｂ】[75]  図１０Bは例示的な、同トークン・パッサーの配列内の基本パッサー構造である。
【図１１】[76]  図１１は開示された実施形態と整合する例示的な、トークン・パッサー・マトリックスを伴った設定可能な複数レーンプロセッサ・システムを示す。
【図１２】[77]  図１２は開示された実施形態と整合する例示的な、依存関係チェックモジュールの内部構造を示す。
【図１３Ａ】[78]  図１３Aは本開示と整合する例示的なプロセッサ・システムである。
【図１３Ｂ】[79]  図１３Bは本開示のSISDプロセッサの例である。
【図１３Ｃ】[80]  図１３Cは本開示のSIMDの例である。
【図１３Ｄ】[81]  図１３Dは本開示のスーパーSIMDの例である。
【図１３Ｅ】[82]  図１３Eは本開示のMISDの例である。
【図１３Ｆ】[83]  図１３Fは本開示のMIMDの例である。
【図１３Ｇ】[84]  図１３Gは本開示のILPの例である。
【図１３Ｈ】[85]  図１３Hは本開示のTLPの例である。
【図１３Ｉ】[86]  図１３Iは本開示の’ソフト・ワイヤード’の例である。
【図１４】[87]  図１４AはLOOP命令によるレーン割り当ての例である。
【図１４Ｂ】[88]  図１４BはLOOP命令によるレーン割り当てのもう１つの例である。
【図１４Ｃ】[89]  図１４CはLOOP命令によるレーン割り当てのもう１つの例である。
【図１５Ａ】[90]  図１５Aは開示された実施形態と整合する例示的な、プロセッサ・システムにおけるレーンの動的設定を示す。
【図１５Ｂ】[91]  図１５Bは例示的な、プログラムを各レーンへ割り当てる、割り当てユニットのスレッド資源割り当てテーブルである。
【図１５Ｃ】[92]  図１５Cは開示された実施形態と整合する例示的な動的レーン割り当てのための処理システムである。
【図１６】[93]  図１６は本開示の構造におけるプロセッサの命令同期の実施形態である。
【図１７】[94]  図１７は本開示と整合する例示的な複数命令セットをサポートするマルチレーン・プロセッサである。
【図１８Ａ】[95]  図１８Aは本開示と整合するDRBを含むプロセッサ・システムの実施形態である。
【図１８Ｂ】[96]  図１８Bは本開示と整合するDRBを含むプロセッサ・システムのもう１つの実施形態である。
【図１９Ａ】[97]  図１９Aは実行されている命令セグメントを示す。
【図１９Ｂ】[98]  図１９Bは命令アドレス軸における命令セグメントを示す。
【図２０】[99]  図２０は開示された実施形態と整合する例示的な、同時に複数の可能な命令を発行することをサポートするIRBである。
【図２１】[100]  図２１は例示的な実施形態でそれは、４命令を並列に発行でき、そして発行された命令内の分岐命令の分岐決定にもとづいてプログラム実行フローを決定する。
【図２２】[101]  図２２は実施形態と整合する例示的な同レーン・プロセッサの汎用IRB構造である。
【図２３】[102]  図２３は実施形態と整合する例示的なレーン・プロセッサ・システムの完全な構造である。
【発明を実施するための形態】
【００５８】
[103]  図１１が最良の形態である。
【００５９】
[104]  発明の例示的な実施形態にたいする詳細な言及が、例示的な実施形態に関する付随された図表とともにこれからなされる。説明とクレームに言及することにより、この発明の特徴と利点がより明白にされる。なお、全ての付随する図表は簡略化されて不正確な比率を用いており、この開示された実施形態を便利かつ明晰に説明する目的のためのみに用いられる。
【００６０】
[105]  なお、現行の開示の内容を明晰に説明するために複数の実施形態が、この開示の異なる実装を解釈するために、提示される。そして複数の実施形態は消尽法によってではなく列挙される。さらに、簡略化のために、先に言及された実施形態は、多くの場合、後述する実施形態においては省略される。従って、後述された実施形態において言及されなかった内容に関しては、先行する記述が参照される。
【００６１】
[106]  この開示はいくつもの修正や変更のかたちで拡張されうるが、しかし明細書は幾つかの特定の実施形態を詳しく説明するために列挙する。発明者の意図は開示をここで扱われる特定の実施形態に限るものではないということが理解されるべきである。反対に、発明者の意図は、この開示のクレームによって定義された精神と範囲にもとづいた全ての改良、等価な変換や修正を保護することである。同じ参照番号がすべての図表に通じて、同じもしくは似た部分を示すために用いられる。
【００６２】
[107]  この開示においてCPUはキャッシュ・システムの例として用いられるが、本発明は汎用プロセッサ、CPU、MCU、DSP、GPU、SOC、and ASIC、など全ての適当なプロセッサ・システムに適用されうる。
【００６３】
[108]  本開示において命令アドレスそしてデータアドレスは命令とデータの主メモリアドレスを意味する。簡略のため、本開示においては仮想アドレスは物理アドレスと同じであると仮定する。しかし、本発明によって開示された手法はアドレス変換が必要なケースにおいても適用されうる。本開示においては、現行命令とはプロセッサ・コアによって現在実行されているもしくは読み込まれている命令のことを指す；現行命令ブロックとはプロセッサ・コアによって実行されている命令を含む命令ブロックのことを指す。
【００６４】
[109]  図１に示されるように、プロセッサ・ユニットはフィラー202、アクティブ・リスト204、スキャナー208、トラック・テーブル210、トラッカー214、命令メモリ206、命令リードバッファ107、そしてプロセッサ・コア111を含む。これらのコンポーネントを列挙するのは説明目的である。これらのコンポーネントはハードウェアもしくはソフトウェア、またはそれらの組み合わせでありうる。
【００６５】
[110]  プロセッサ・コア（CPUコア）111が命令を実行するとき、最初に高レベルメモリから命令を読み出す。ここで、メモリ階層レベルはプロセッサ・コア111への近さを意味する。プロセッサ・コア111へ近い程、レベルが高い。より高いレベルのメモリは低いレベルのメモリに比べて一般的により速いが容量がより少ない。
【００６６】
[111]  本実施形態において、命令リードバッファ107の容量並びに待ち時間はメモリ206よりも小さくそして短い。命令メモリ206と命令リードバッファ107はどんな適切なメモリ、例えばレジスタ、レジスタ・ファイル、SRAM、DRAM、フラッシュ・メモリ、ハードディスク、ソリッドステート・ディスク、もしくはどんな適切なメモリもしくは将来のメモリでも良い。命令メモリ206はシステムのキャッシュとして、もしくは他のキャッシュ・レベルが存在するときはレベル１キャッシュとして、機能することができる。それはプロセッサ・コア111が取得する、例えば命令ブロックの中の命令を、記憶する、メモリセクション上のメモリブロックへ再分割されうる。
【００６７】
[112]  フィラー202は命令もしくは命令ブロックを低位レベルメモリから読み出し、アクティブ・リスト204によって供給されたアドレスにもとづいて命令メモリ206へ充填する。そして、命令ブロックは命令メモリ206から命令リードバッファ107へ充填され、プロセッサ・コア111に読み出される準備が整う。ここで充填するとは、命令を低位レベルメモリから高位レベルメモリへ動かすことである。メモリアクセスとはプロセッサ・コア111が命令をメモリ命令リードバッファ107から読み取ることである。
【００６８】
[113]  テーブル204のテーブルエントリと命令メモリ206の両方におけるメモリブロックは互いに一対一に対応している。アクティブ・リスト204の各エントリは、命令ブロックのメモリブロック・アドレスとメモリ206におけるそのブロック番号（BNX）のペアである。本発明においてブロック番号は命令メモリ206における記憶ブロックの位置を示す。スキャナー208によって生成された分岐ターゲット命令アドレスはアクティブ・リスト204に記憶された命令ブロック・メモリ・アドレスと照合され、分岐ターゲットが既に命令メモリ206に記憶されているかを判定することができる。もしテーゲット命令ブロックがまだ命令メモリ206に無いならば、それを206へ充填し、同時に命令ブロック・アドレスとブロック番号（BNX）の対応しあうペアがアクティブ・リスト204において構成される。この開示において照合とは二つの値を比べることである。二つの値が等価であるとき、照合は成功であり、その他の場合は’不一致’である。
【００６９】
[114]  スキャナ208は下位レベルメモリから命令メモリ206へ充填される命令をスキャンする。そして命令タイプ、命令ソース・アドレスそして分岐オフセットなどの情報を抽出し、この情報にもとづいて分岐ターゲット・アドレスを計算する。本発明においては、分岐命令もしくは分岐ポイントはプロセッサ・コア116の実行フローを変える（例えば命令をプログラムの順序で実行しない）ことが出来る全ての妥当な命令のことである。分岐ソースとは分岐命令を意味し、分岐ソースアドレスは分岐命令の命令アドレスのことである；分岐ターゲット命令は分岐成功の後に実行される。分岐ターゲットアドレスとは成功した分岐が移る先のアドレスであり、分岐ターゲット命令のアドレスでもある。例えば、命令タイプは条件分岐命令、無条件分岐命令そして他の命令タイプなどを含むことができる。命令タイプは条件分岐命令のサブカテゴリー、例えば等しい場合に分岐、大きい場合に分岐、などを含むことができる。無条件分岐命令は、いつも採用される、条件分岐命令の１つのタイプと見做すことできる。他の情報も含まれることが可能である。スキャナ208は上記情報とアドレスを他のモジュール、例えばアクティブ・リスト204やトラック・テーブル210へ送る。
【００７０】
[115]  命令リードバッファ107は現行命令ブロックを含む少なくとも１つの命令ブロックを含む。命令リードバッファの各行はメモリ206のブロックの命令と同じ数もしくは少ない数の命令を含む。命令リードバッファの各行と命令ブロックは同じ数の命令を含み、命令リードバッファの行は対応する命令ブロック番号で表現することができる。もし命令リードバッファの行がメモリ命令ブロックの命令より少ない命令を含むならば、複数行が１つの命令ブロックに対応し、命令リードバッファの行を特定するためにより下位のアドレスビットがブロック番号へ追加される。例えば、もしBNXが’111’である命令ブロックがあるならば、その対応する命令リードバッファ107の行は’1110’や’1111’として特定される。
【００７１】
[116]  以下の説明の簡略のため、命令リードバッファ107の行は命令メモリ206の命令ブロックと同じ数の命令を含むと仮定する。
【００７２】
[117]  本発明において、命令リードバッファ107は自動的にプロセッサ・コア111へ、プロセッサ・コア111の実行状態にもとづいて実行される命令を供給する。
【００７３】
[118]  トラック・テーブル210は複数のトラック・ポイントを持つ。トラック・ポイントはトラック・テーブルのテーブル要素である。それは少なくとも１つの命令の情報、例えば命令タイプ、分岐ターゲット・アドレスなど、を含むことができる。本発明においては、命令メモリの命令はその対応するトラック・テーブル・エントリのトラック・テーブル・アドレスによってアドレス指定される。分岐命令に対応するトラック・テーブル・エントリはその分岐ターゲット命令のトラック・テーブル・アドレスを含む。トラックとは命令メモリ206の１つの命令ブロックに対応する複数のトラック・エントリ（トラック・ポイント）である。トラックとそれに対応する命令ブロックは同じブロック番号によってインデックス付けされる。トラック・テーブルは少なくとも１つのトラックを含む。トラック・ポイントの数はトラック・テーブル210の行のエントリ数と同じである。トラック・テーブル210は他の仕方でも編成されうる。
【００７４】
[119]  第一アドレス(BNX)と第二アドレス(BNY)はトラック・ポイント（すなわち命令）をトラック・テーブル（命令メモリ）内でインデックスするのに用いることができる。第一アドレスはトラック・ポイントの命令ブロック番号を表し、第二アドレスはトラック・ポイント（そして対応する命令）の位置（アドレス・オフセット）を表すことができる。もしトラック・ポイントが分岐タイプを持つならば、トラック・ポイントのアドレス内容はその分岐ターゲットを示す。トラック・ポイントの第一アドレスはターゲット・トラックを特定し、第二アドレスはターゲット・トラック上のターゲット命令を特定する。従って、トラック・テーブルはそのアドレスが分岐ソース命令に対応し、その内容が分岐ターゲット・アドレスに対応する。
【００７５】
[120]  スキャナ208は命令メモリ206に記憶されている命令情報を抽出し、抽出された情報をトラック・テーブル210の対応するエントリに記憶する。もし命令が分岐命令であれば、分岐命令の分岐ターゲット命令アドレスが計算され、アクティブ・リスト204へ照合のために送る。照合が一致した場合、分岐ターゲット命令のブロック番号（BNX）を得る。もし分岐ターゲット・アドレスがまだアクティブ・リスト204になければ、分岐ターゲット・アドレスはフィラー202へ送られ、それは下位レベルメモリから命令ブロックを読み出す。同時に、アクティブ・リストの交換ロジックは命令ブロックのためにブロック番号BNXを割り当てる；ターゲット・アドレスのより上位部分がアクティブ・リスト204のエントリへ記憶され、そしてフィラー202によって読み出された命令ブロックがブロック番号によって示されたメモリブロックへ充填される。そしてBNXとターゲット・アドレスの下位部分は、対応するトラック・テーブルのエントリに第一および第二アドレスとして記憶される。
【００７６】
[121]  トラック・テーブル210のトラックと命令メモリ206のメモリブロックは一対一に対応し、共に同じポインタを用いる。プロセッサ・コア111によって実行される命令は全て命令メモリ206と命令リードバッファ107へ充填される。トラック間のプログラム順序関係を維持するために、各トラック上に最後の命令に対応するトラック・ポイントの後にエンド・トラック・ポイントがあり、それは次の順番のトラックの命令ブロックの第一アドレスを記憶する。もし命令メモリ206が複数の命令ブロックを記憶するならば、命令ブロックが実行されているとき、次の順番の命令ブロックは命令メモリ206と命令リードバッファ107へ記憶され、プロセッサ・コア111によって実行されるために待機する。次の命令ブロックのアドレスは前の命令ブロックのアドレスとブロックサイズとの合計である。このアドレスはまたアクティブ・リスト204へ照合のために送られ、得られた命令ブロックは命令メモリ206へ充填され、BNXは現行トラックのエンド・トラック・ポイントへ充填される。206へ充填されたこの新しいブロックの中の命令はスキャナ208によってスキャンされ、抽出された情報は前述のように対応するトラックへ充填される。
【００７７】
[122]  トラッカー214のリード・ポインタは第一アドレス・ポインタと第二アドレス・ポインタから構成される。第一アドレス・ポインタはトラック・テーブル210の現在実行されているトラックにポイントする。第二アドレス・ポインタは第一分岐トラック・ポイント、もしくはトラックに分岐トラック・ポイントが残っていないならばエンド・ポイントへ、現行命令に対応するトラック・ポイントが実行された後、ポイントする。第一アドレス・ポインタは命令メモリ206をインデックスして、ターゲットもしくは次の命令ブロックを読み出し、命令リードバッファ107へ充填し、もし分岐が成功裏に取られた場合にプロセッサ・コア111によって実行されるように備える。
【００７８】
[123]  もしトラッカー214が分岐命令へポイントししかし分岐が取られなかった場合、トラッカー214のリード・ポインタは次の分岐トラック・ポイントへ、もしくはトラック上に残っている分岐トラック・ポイントがない場合はエンド・トラック・ポイントへ、ポイントする。命令リードバッファ107は、分岐命令が取られなかった後に続くフォールスルー命令をプロセッサ・コア111へ実行のために提供する。
【００７９】
[124]  もしトラッカー114によってポイントされる分岐命令が分岐を取るならば、分岐ターゲットの第一アドレスと第二アドレスはトラッカーの新しいアドレス・ポインタになり、トラック・テーブルの分岐ターゲットに対応するトラック・ポイントをポイントする。新しいトラッカー・アドレス・ポインタはまた最近充填された分岐命令ブロックへポイントし、それを新しい現行命令ブロックとする。命令リードバッファ107は分岐ターゲット命令と現行分岐命令に後続する命令をプロセッサ・コア111へ実行のために供給する。それからトラッカー214のリード・ポインタは、新しい命令ブロックに対応する、トラック内の現行命令の後の最初の分岐命令トラック・ポイントへ、あるいはトラックに分岐トラック・ポイントが残っていない場合はエンド・トラックへ、ポイントする。
【００８０】
[125]  もしトラッカー214がトラックのエンド・ポイントへポイントしているなら、トラッカー214のリード・ポインタは最後のトラック・ポイントの位置コンテンツ値に更新される。すなわち、ポインタは次トラックの最初のトラック・ポイントへポイントし、従って新しい現行命令ブロックをポイントする。それからトラッカー214のリード・ポインタは、トラック・テーブル210内の現行命令を含むトラックの中の現行命令の後の最初の分岐命令トラック・ポイントへポイントする。もしくは、トラック内に分岐トラック・ポイントが残っていない場合はエンド・トラック・ポイントへポイントする。前述のシーケンスを繰り返す。命令はプロセッサ・コア111で実行される前に命令メモリ206と命令リードバッファ107へ充填されうる。コア111は最小待機時間で命令を読み込み、よってプロセッサの性能を向上させる。
【００８１】
[126]  本開示において、スキャナ208からのアドレスがアクティブ・リスト204の中で照合一致しない場合、アドレスはフィラー202へ送られ下位レベルメモリから対応する命令ブロックを読み出す。同時に、アクティブ・リスト204は命令ブロックのブロック・アドレスを記憶するエントリを割り当て、よってブロック・アドレス／ブロック番号のペアを形成する。本開示におけるブロック・アドレスとは命令ブロックの始めの命令のアドレスのことである。本開示において命令メモリは複数のメモリ・ブロックへ論理的に分割されている。各メモリブロックは命令ブロックを記憶し、ブロック・アドレスを記憶するアクティブ・リストと対応している。アクティブ・リストのエントリとその対応するメモリ206の命令メモリブロックは同じブロック番号によってアドレス指定される。
【００８２】
[127]  スキャナ208は命令メモリ206からの各命令を調べ、命令タイプを抽出し、分岐ターゲット・アドレスを計算する。同分岐ターゲット・アドレスは分岐アドレスと分岐オフセットの合計として計算されうる。分岐ターゲット・アドレスの上位部分は対応するブロック番号を得るためにアクティブ・リスト204の内容と照合され、第一アドレスになる。分岐ターゲット・アドレスの下位部分、ブロック内のオフセット・アドレスである、は第二アドレスになる。
【００８３】
[128]  エンド・トラック・ポイントにおいて、命令ブロック・アドレスと命令ブロック長の合計は次の命令ブロックのブロックアドレスである。そして、ブロック・アドレスは、それが分岐ターゲット・アドレスであるかのように照合され、エンド・ポイントに記憶されているブロック番号を得る。
【００８４】
[129]  もしターゲット・アドレスの上位部分がアクティブ・リスト204において照合一致されるなら、アクティブ・リスト204は対応するブロック番号をトラック・テーブル210へ出力する。もし一致しないならば、アクティブ・リスト204はこのアドレスをフィラー202へバス244を経て送り、対応する命令ブロックを命令メモリへ充填し、同時にブロック番号をこのアドレスに割り当て、そしてこのブロック番号をトラック・テーブル210へ出力する。
【００８５】
[130]  新しいトラックはトラック・テーブル210の交換可能な行へ置かれる。もし分岐命令がこの新しいトラックに対応する命令ブロックにあるならば、分岐トラック・ポイントが対応するトラック・エントリに構成される。同分岐トラック・ポイントは分岐ソース命令のアドレスによって見つけだされる。例えば、分岐ソース・アドレスの上位部分はトラック番号（ブロック番号）へマップされ、トラックをインデックスする；ソース・アドレスの下位部分（オフセット）はトラック上のエントリをインデックスする。
【００８６】
[131]  トラック・テーブルの行のエンド・トラック・ポイントもしくはトラック・テーブル・エントリは、タイプ・フィールド、第一アドレス（XADDR）フィールドそして第二アドレス（YADDR）フィールドを含むフォーマットを持つ。他のフィールドも含むことも可能である。タイプ・フィールドは対応する命令の命令タイプを表す。タイプ・フィールドはトラック・ポイントに対応する命令のタイプ、例えば条件分岐、無条件分岐そして他の命令、を表すことができる。XADDRフィールドはまた第一次元アドレス、もしくは第一アドレスとして知られる。YADDRフィールドはまた第二次元アドレス、もしくは第二アドレスとして知られる。
【００８７】
[132]  新トラック・ポイントの内容は分岐ターゲット・アドレスに対応できる。つまり、分岐トラック・ポイントは分岐ターゲット命令のアドレス情報を記憶する。例えば、トラック・テーブル210のターゲット・トラックのブロック番号は同分岐トラック・ポイントの第一アドレスとして記憶される。分岐ターゲット命令のオフセット・アドレスは同分岐トラック・ポイントに記憶される第二アドレスである。
【００８８】
[133]  トラックのエンド・トラック・ポイントは特殊なトラック・ポイントである。エンド・トラック・ポイントは次のブロックの最初の命令にポイントするから、エンド・トラックのフォーマットは無条件分岐のタイプとプログラム順序における次のブロックの第一アドレス、しかし第二アドレスを含まない、である。あるいは、定数’0’が第二アドレス・フィールドに置かれる。
【００８９】
[134]  図２Aは開示された実施形態と整合する例示的なトラック・ポイントのフォーマットを示す。図２Bに示されるように、非エンド・トラック・ポイントは内容フォーマットとして、命令タイプ322、第一アドレス334、第二アドレス336を含む。トラックの少なくとも二つのトラック・ポイントの命令タイプが同時に読み出されうる。従って、トラックの全ての非エンド・トラック・ポイントの命令タイプは一緒に記憶され、そしてこれらの非エンド・トラック・ポイントの第一アドレスと第二アドレスも一緒に記憶されうる。
エンド・トラック・ポイントは内容フォーマットとしては命令タイプ332、第一アドレス334、そして’0’値を持つ内容338を含む。同様にエンド・トラック・ポイントと非エンド・トラック・ポイントの命令タイプ322も一緒に記憶され、そして第一アドレス334と内容338も、トラックの全ての非エンド・トラック・ポイントの第一アドレスと第二アドレスに続いて記憶されうる。さらに、エンド・トラック・ポイントの第二アドレスは’0’値を持つ内容338であり、従って定数は記憶されない。第二アドレス’0’はトラッカー214がエンド・トラック・ポイントをポイントした時に直接生成される。
【００９０】
[135]  図２Bに示されるように、既存のトラック340（BNX0で表される）は３つの分岐命令もしくは分岐ポイント342、344、そして346を含む。分岐ポイント342を調べているとき（ターゲット・ブロック番号BNX1がアクティブ・リストにて照合されるか割り当てられる）、新しいトラック348（次の利用可能な行はBNX1と表される）は分岐ポイント342のターゲット命令を含むように生成され、トラック・テーブル210のブロック番号（つまりBNX1）は分岐ポイント324の中に第一アドレスとして記録される。同様に、分岐ポイント344を調べているとき（ターゲット・ブロック番号BNX2がアクティブ・リストにて照合されるか割り当てられる）、他の新しいトラック350（BNX2として表される）がトラック・テーブル210にて生成され、そしてブロック番号が分岐ポイント344に記録される；分岐ポイント546を調べているとき（ターゲット・ブロック番号BNX3がアクティブ・リストにて照合されるか割り当てられる）、他の新しいトラック352（BNX3として表される）がトラック・テーブル210に生成され、そしてブロック番号が分岐ポイント346に記録される。従って、単一トラック内の全ての分岐ポイントに対応する新しいトラックが生成される。
【００９１】
[136]  本記述において、各分岐命令のトラック・ポイントに記憶される第二アドレスは分岐命令の分岐ターゲット命令を含む命令ブロックのオフセットである。
【００９２】
[137]  前述の様々な実施形態は、分岐ターゲット・アドレスを計算し命令先取り操作を実現するために、直接アドレス指定方式を用いる。しかし、間接アドレス指定方式も用いられうる。間接アドレス指定方式においては、始めにレジスタ値（例えば基底レジスタ値）が決定され、それによって分岐ターゲットアドレスを計算する。レジスタ値は命令実行の結果に応じて変えられる。従って、新しい値が間接分岐の基底レジスタのために計算され、しかしまだ基底レジスタに書き込まれていないとき、新しい値はバイパスされターゲット・アドレス計算と後続オペレーションを実行する。
【００９３】
[138]  図３は開示された実施形態と整合するトラッカーのリード・ポインタの例示的な動きである。図３に示されるように、トラッカーのリード・ポインタはトラック・テーブルの非分岐命令をスキップし、トラック・テーブルの次の分岐ポイントへ動いてプロセッサ・コア111による分岐決定を待つ。関係のない部分またはコンポーネントは図３のこの実施形態から省略されている。この実施形態においては、メモリ210に記憶されている命令タイプと他の抽出された命令情報は左から右へ昇順アドレスに沿って、つまりプログラムの順番に沿って、配列される。さらに、メモリ210の命令タイプ’0’は対応する命令が非分岐命令であることを示し、メモリ210の命令タイプ’1’は対応する命令が分岐命令であることを示す。
【００９４】
[139]  メモリ210の第一アドレス394（ブロック番号、BNX）によってポイントされたトラックの中の、第二アドレス396（ブロック・オフセット、BNY）によってポイントされた命令を表す、エントリはいつでも読み出されうる。複数のエントリが、メモリ210の第一アドレス394によってインデックスされたトラックの命令タイプを表す全てのエントリも、同時に読み出されうる。
【００９５】
[140]  メモリ210の各行の最も大きなオフセット・アドレスを持つ命令に対応するエントリの右側に、順番に実行される次の命令のアドレスを記憶するためにエンド・エントリが追加される。エンド・エントリの命令タイプは常に’1’に設定される。エンド・エントリの命令情報の第一アドレスは次の命令の命令ブロック番号である。第二アドレス（BNY）は常にゼロに設定され、命令トラックの最初のエントリへポイントする。エンド・エントリは同等の無条件分岐命令として定義される。トラッカーがエンド・エントリをポイントするとき、セレクタ388がトラック・テーブル210の出力380を選択するように、内部制御信号が常に生成される；レジスタ390の値を更新するために他の制御信号もまた生成される。内部信号はトラック・テーブル550のエンド・エントリの特殊ビットによって、もしくは第二アドレス396がエンド・エントリをポイントするとき、トリガーされる。
【００９６】
[141]  図３において、トラッカー114は主にシフタ382、主要ゼロカウンタ384、加算器386、セレクタ388そしてレジスタ390を含む。トラック・テーブル210から読み出された複数の命令を表す複数の命令タイプはシフタ382によって左にシフトされる。シフト量はレジスタ390によって出力された第二アドレス・ポインタ396によって決定される。シフタ382によって出力されたシフトされた命令タイプ399の最左ビットはステップビットである。ステップビットの信号とプロセッサ・コアからのBRANCH信号は一緒にレジスタ390の更新を決定する。セレクタ388はTAKEN信号によって制御される。セレクタの出力391は第一アドレス部分と第二アドレス部分を含む次アドレスである。TAKENが’1’（分岐がある）であるとき、セレクタ388はトラック・テーブル210の出力380（分岐ターゲットの第一アドレスと第二アドレスを含む）を選び出力391とする。TAKENが’0’（分岐がない）であるとき、セレクタ388は現行第一アドレス394を出力391の第一アドレス部分として、そして加算器の出力397を出力391の第二アドレス部分として選ぶ。命令タイプ399は主要ゼロカウンタ384へ送られ、次の’1’命令タイプ（対応する命令が分岐命令であることを表す）の前の’0’命令タイプ（対応する命令が非分岐命令であることを表す）の数を計算する。計算においてステップビットは、ステップビットが実際には’0’か’1’であるかに関わらず、それは’0’であるとして取り扱われる。主要’0’の数395（ステップ数）は加算器386へ送られ、レジスタ390によって出力された第二アドレス396と加算され、次の分岐ソース・アドレス397を得る。ここで次の分岐ソース・アドレスは現行命令の次の分岐命令の第二アドレスであり、そして次の分岐ソース・アドレスの前の非分岐命令はトラッカー214によってスキップされる点が注意されるべきである。
【００９７】
[142]  第二アドレスは命令を表すエントリにポイントし、第二アドレスによって制御されたシフターがトラック・テーブル210によって出力された複数の命令タイプを左にシフトする。この時点で、トラック・テーブル210によって読み出された命令を表す命令タイプは命令タイプ399の最左ステップビットへシフトされる。シフト命令タイプ399は主要ゼロカウンタへ送られ、次の分岐命令の前の命令の数をカウントする。主要ゼロカウンタ384の出力395はトラッカーの先送りステップである。このステップは第二アドレス396へ加算器386によって加算される。加算操作の結果は次の分岐命令アドレス397である。
【００９８】
[143]  シフトされた命令タイプ399のステップビット信号が’0’であるとき、それは第二アドレス396によってポイントされたトラック・テーブル210のエントリが非分岐命令であることを示し、ステップビット信号はレジスタ390の更新を制御する；セレクタ388は次の分岐ソース・アドレス397を第二アドレス396としてTAKEN信号392’0’の制御の下に選び、そして第一アドレス394は変わらないままである。新しい第一と第二アドレスは同じトラックの次の分岐命令へポイントし、分岐命令の前の非分岐命令はスキップされる。新しい第二アドレスはシフタ396を制御して命令タイプ398をシフトし、分岐命令を表す命令タイプは次の操作のためにステップビット399へ置かれる。
【００９９】
[144]  シフトされた命令タイプ399のステップビット信号が’1’であるとき、それは第二アドレスによってポイントされたトラック・テーブルのエントリが分岐命令であることを示す。ステップビット信号はレジスタ390の更新に影響を与えず、プロセッサ・コアからのBRANCH信号393がレジスタ390の更新を制御する。加算器の出力397は同じトラックの現行分岐命令の次の分岐命令のアドレスであり、メモリの出力380は現行分岐命令のターゲット・アドレスである。
【０１００】
[145]  BRANCH信号が’1’であるとき、セレクタ388の出力391はレジスタ390を更新する。もしプロセッサ・コアからのTAKEN信号392が’0’であるなら、それはプロセッサ・コアがこの分岐ポイントにおいてオペレーションを順番に実行することを決定したことを示す。セレクタ388は次の分岐のソース・アドレス397を選ぶ。レジスタ390によって出力された第一アドレス394は変わらないままで、次の分岐ソース・アドレス397が新しい第二アドレス396になる。新しい第一アドレスと新しい第二アドレスは同じトラックの次の分岐命令にポイントする。新しい第二アドレスはシフタ396を制御し命令タイプ398をシフトし、そして分岐命令ビットを表す命令タイプが次の操作のためにステップビット399に置かれる。
【０１０１】
[146]  プロセッサ・コアからのTAKEN信号392が’1’ならば、それはプロセッサ・コアがこの分岐ポイントにて分岐ターゲットへジャンプすることを決定したことを示す。セレクタはトラック・テーブル210から読み出された分岐ターゲット・アドレス380を選びレジスタ390から出力された第一アドレス394と第二アドレス395になる。この場合、BRANCH信号393はレジスタ390を制御して第一アドレスと第二アドレスをそれぞれ新第一アドレスと新第二アドレスとしてラッチする。新第一アドレスと新第二アドレスは同じトラックにない分岐ターゲット・アドレスにポイントしうる。新第二アドレスはシフタ396を制御して命令タイプ398をシフトさせ、分岐命令ビットを表す命令タイプはステップビット399に次の操作のために置かれる。
【０１０２】
[147]  第二アドレスがトラック・テーブルのエンド・エントリ（次のライン・エントリ）にポイントするとき、前述のように、内部制御信号がセレクタ388を制御しトラック・テーブル210の出力530を選び、そしてレジスタ390を更新する。この場合、新しい第一アドレス394はトラック・テーブル220のエンド・エントリに記録された次のトラックの第一アドレスであり、そして第二アドレスはゼロである。第二アドレスはシフタ396を制御して命令タイプ398をゼロビットシフトし次の操作を開始する。操作は繰り返され、従ってトラッカー214はトラック・テーブル210と恊働してトラック・テーブルの非分岐命令をスキップしそして常に分岐命令にポイントする。
【０１０３】
[148]  本記述においては、アクティブ・リスト104は一杯である時には交換される必要があるが、しかし新しいブロック・アドレス／ブロック番号のペアが生成される。各ブロックのステータスを分岐のターゲットとして記録する相関テーブルが、トラック・テーブル・エントリが既に交換されたブロックへ分岐するのを阻むために用いられる。ただ分岐のターゲットでない命令メモリのブロックとそれに対応するアクティブ・リスト・エントリだけが、交換の候補となる。
【０１０４】
[149]  図４は命令リード・バッファ107の例示的な実施形態であり、本開示と整合する型でコア11に実行のために命令を供給する。説明の簡明のために、トラック・テーブル210、トラッカー214、命令メモリ206、命令リード・バッファ107そしてその制御ユニット401、そしてプロセッサ・コア111のみが示されている。
【０１０５】
[150]  図４において、トラッカー214のリード・ポインタ231はトラック・テーブル210のトラックに沿って動き、現在実行されている命令の後の最初の分岐エントリにおいて止まる。分岐エントリBN233の内容は、BNXとBNYを含み、制御ユニット401へ送られる。加えて、エンド・ポイント235の内容（順番上次の命令の最初の命令のアドレス）もまた401へ送られる。
【０１０６】
[151]  制御ユニット401は命令リード・バッファ107の各行の命令の対応するブロック番号を記憶する。本実施形態においては、命令リード・バッファ107の各行はメモリ206の１つの命令ブロックを記憶する。制御ユニット401は受け取った分岐ソースBNの第一アドレス（BNX）、分岐ターゲットBN、そしてエンド・ポイントをその内容とともに照合する。もし照合が一致するなら、必要な命令ブロックは既に命令リード・バッファにある。あるいは、一致しないBNXはメモリ206へ送られ、必要な命令ブロックを読み出し、命令リード・バッファ107の交換可能な行に充填する。交換可能な行はアクティブ・リスト204の交換と同様の仕方で決定される。
【０１０７】
[152]  さらに、ソースもしくはターゲットBNの第二アドレス（BNY）は、命令リード・バッファ107の一致した行からの対応する分岐命令もしくは分岐ターゲット命令をインデックスするのに用いられる。図５は開示された実施形態に整合する同制御の例示的なマッチングプロセスである。本実施形態においては、命令メモリ206は既に全ての必要な命令ブロックを含んでいるもと想定する。
【０１０８】
[153]  図５に示されるように、命令リード・バッファ107の命令ブロック501は上から下へオフセット・アドレスの昇順に沿って８つの命令を保つ。制御ユニット401のサブ・ブロック503は第一アドレス・レジスタ505、次命令ブロック・アドレス・コンパレータ507、分岐ターゲット・アドレス・コンパレータ511、そしてターゲット・アドレス・デコーダ515を含む。505は命令ブロック501のブロック番号を記憶する。もし照合一致すれば、一致した507の出力は、命令ブロックは実行された命令ブロックの次の順番の命令ブロックであるから、501の最初（一番上）の命令にポイントする。もし照合が’一致しないならば、ブロック501は次の順番のブロックではない。
【０１０９】
[154]  コンパレータ511はバス233のBNXと505の内容とを比べる。もし一致すれば、一致した511の出力は、バス233のBNYアドレスをデコードするアドレス・デコーダ515を有効にする。デコーダ515の出力525は501の命令の１つ、分岐ターゲットをポイントする。もし一致しないならば、511の出力は515を無効にし、そして501はテーゲット命令ブロックではない。
【０１１０】
[155]  図４に戻って、トラッカー214のリード・ポインタ231が新しいトラックをポイントするとき、エンド・ポイント235が読み出されて制御ユニット401へ送られ、コンパレータ507によって505のそれぞれの第一アドレスと比べられる。もし一致しないならば、制御ユニット401はBNXを命令メモリ206へ送り、命令ブロックを読み取ってそれを命令リード・バッファ107へ充填する。もし一致するならば、次の順番のブロックが命令リード・バッファ107において特定される。
【０１１１】
[156]  トラッカー214のリード・ポインタ231は動きそして前述のように実行されている命令に対応するトラック・ポイントの後の最初の分岐ポイントにて止まる。本記述においては、分岐ソースと分岐ターゲット・アドレスは制御ユニット401へ送られ図５に描かれたように比較される。分岐ソースを含む命令ブロックは既に命令リード・バッファ107にあるから分岐ソース位置は特定されうる。分岐ターゲット位置もまた照合によって特定されうる。制御ユニット401は分岐ターゲットBNXをメモリ206へ送り、もし照合一致しなければ対応する命令ブロックを読み取りそれを命令リード・バッファ107へ充填する。従ってターゲット位置は命令リード・バッファ107の中において知られている。
【０１１２】
[157]  よって分岐ソース、分岐ターゲットそして次の順番のブロックの最初の命令の位置は制御ユニット401における照合によって見つけられる。
【０１１３】
[158]  本記述において、受け取られたクロック401はシステム・クロックとプロセッサ・コア111のパイプラインのステータスに依存する。コア111が命令を必要とするとき、制御ユニット401は有効なクロックを受け取る。コア111が新しい命令を必要としないとき、例えばパイプライン・ストールの間、制御ユニット401はクロック信号を受け取らない。
トークン・パッサーが制御ユニット401に含まれていて、各パッサーは１つの命令に対応する。パッサーはCPUが必要とする命令を表す有効なトークン信号をパスする。制御ユニット401は有効なクロック・サイクル毎にトークン・パッサーを更新し、コア111が次に必要とする命令に対応するトークンをトークン・パッサーにパスする。よって、制御ユニットは命令リード・バッファ107を制御してトークン信号に応じて正しい命令をコア111へ出力する。
【０１１４】
[159]  本実施形態は制御ユニット401がコア111へ必要に応じて命令を供給するイニシアティブを取る、ほんの一例である。制御ユニット401がプロセッサ・コア111へ必要な命令を送るイニシアティブを取ることを保証する、他のハンドシェーク信号やコミュニケーション・プロトコルもまた本開示の保護の下にある。
【０１１５】
[160]  図６は命令リード・バッファ107における各命令に対応するトークン・パッサーを例示する。図６におけるトークン・パッサーはトークン・シグナル・レジスタ601とORロジック607を含み、そして１つの同トークン・パッサーの出力621は他のトークン・パッサーのインプット623へ命令アドレス順に繋がり、分岐無しに順番に命令を実行しているときにトークンをパスする。トークン信号レジスタ601はリセット可能である。
【０１１６】
[161]  もし取られた分岐がない場合、全てのトークン・レジスタ601のリセットを制御するTAKEN信号はアクティブでない（’0’）。各トークン・パッサーはインプット203における前段階からのトークン信号を受け、アクティブ・トークンを制御ユニット401のクロックの制御のもと、伝搬させる。分岐が取られたとき、TAKEN信号は全てのトークン・レジスタ601のリセットを制御して、アクティブ状態’1’にし、よって現行のアクティブ・トークン信号の通過をブロックする。分岐ターゲット・デコーダは新しいトークンを生成し、625を経てORロジック607に差し込む。新しいトークンはその後、対応するトークン・レジスタ601へラッチされ、よってトークン信号挿入を完了する。
【０１１７】
[162]  図７は開示された実施形態と整合する他の例示的なトークン信号パッシングを示す。簡便のため、図７はトラックテーブル1010、命令メモリ206、トラッカー214、コントロール・ユニット1001そして幾つかのトークン・パッサーを含む命令リード・バッファ107、のみを含む。ここにおいて、トークン・パッサー（1011、1013、1015、1017）はそれぞれ命令（701、703、705、707）に対応する。命令メモリ206とトラッカー214は図４と同じである。トークン・パッサーのトークン信号レジスタはリセットポートを持ち、全てのトークン信号レジスタは同時に’0’にリセットされる。制御ユニット1001はターゲット・デコーダ（例えば1021と1023）、対応する命令ブロックのBNXを記憶するレジスタ（例えば1025と1027）、分岐ターゲット・ブロックのBNXと照合するのに用いられるターゲットBNXコンパレータ（例えば1029と1031）、そして次の命令ブロックのBNXを照合するのに用いられる次BNXコンパレータ（例えば1033と1035）を含む。ここにおいて、ターゲットBNXコンパレータの機能は図５のコンパレータ511と同じであり、次BNXコンパレータの機能は図５のコンパレータ507と同じである。
【０１１８】
[163]  トラック214の分岐ソース・ポインタ231はトラック・テーブル1010をポイントし、それから分岐ターゲット・アドレス233を読み出す。ここにおいて、ターゲットBNX1043は制御ユニット1001の分岐ターゲット・コンパレータ（例えば1029と1031）へ送られ、各命令のBNXアドレスと比較される。対応する分岐ターゲット・デコーダ（1021もしくは1023）は、もし1043がレジスタに記憶されているBNXの１つと照合一致するならば使用可能になる。使用可能デコーダは分岐ターゲット・アドレスのBNYを受け取り、トークン信号を分岐ターゲット命令に対応するトークン・パッサーに差し込む。制御ユニット1001において、分岐が取られたなら、それは全てのトークン・パッサーを’0’にリセットし、分岐ソース命令ブロックに対応するトークン信号を消し、それからターゲット・デコーダは分岐ターゲット命令に対応するトークン・パッサーへトークンを差し込む。本実施形態において、各命令ブロックの第一トークン・パッサーのトークン信号レジスタのインプットはANDゲートから来る。ANDゲートの１つのインプットはグローバル・バス1024とカップルしており、他のインプットは次命令ブロックBNXコンパレータの出力とカップルしている。
【０１１９】
[164]  トラック214はまたトラック・テーブル1010から分岐ソース・ポインタ231を通して次命令ブロック・アドレス235を読み出し、それからアドレスを、制御ユニット1001のそれぞれの次命令ブロック・コンパレータ（例えばコンパレータ1033と10350）へ送り、それを各命令ブロックBNX（例えばレジスタ1025と1027に記憶されているBNX）と比較する。一致した結果は、対応する命令ブロックの第一トークン・パッサーのANDゲート（例えば1019）へ送られる。本実施形態において、各命令ブロックの最後のトークン・パッサーのトークン状態は、ORゲート1007の１つのインプットとカップルして、グローバル・バス1024を生成する。よって、ORゲート1007の出力1024は、トークンが任意の命令ブロックの最後のトークン・パッサーへ辿り着いたとき、’1’である。トークン・バス1024は、各命令ブロックの最初のトークン・パッサーのANDゲート（例えば1019）の１つのインプットとカップルする。これらのANDゲートの他のインプットは、対応する次命令ブロック・コンパレータの出力とカップルする。このとき、照合一致したコンパレータ（例えばコンパレータ1035）の出力は’1’であり、バス1024の状態は’1’であり、よって照合一致した命令ブロックに対応するANDゲートの出力は’1’であり、そしてトークンは対応する命令ブロックの最初のトークン・パッサーへ送られる。
【０１２０】
[165]  さらに、ORゲート1007の出力は、各命令ブロックに対応するANDゲート（例えばANDゲート1019）に送られる。同ANDゲートの他のインプットは次コンパレータ（例えばコンパレータ1033と1035）の出力とカップルし、次命令ブロックを決定するのに用いられる。その出力は命令リード・バッファ107の命令ブロックの最初のトークン・パッサー（例えばトークン・パッサー1015）へ送られる。トラック・テーブル1010の現行トラックのエンド・トラック・ポイントから読み出された次ブロックBNXは、制御ユニット1001の次BNXコンパレータへバス235を経て送られ、このBNXは対応する命令のBNXと比較される。ここで命令（705と707）の命令ブロックは１つの次命令ブロックで、次BNXコンパレータ1035の結果だけが’1’で、他の次BNXコンパレータの結果は’0’である。よってANDゲート1019は’1’を出力し、そしてこの値はトークン信号レジスタ1009に書き込まれる。他のトークン・パッサーのトークン信号レジスタの値は’0’であり、よってトークン信号は、トラック・テーブルのエンド・ポイントによってポイントされている次命令ブロックの最初の命令に対応するトークン・パッサーへ移る。それは正しい命令を実行のためにCPUへ出力し、そしてトークンは現行命令ブロックから次命令ブロックへパスされる。
【０１２１】
[166]  もう一方で、分岐命令が取られたとき、それは現行命令に対応するトークン・パッサーから分岐ターゲット命令に対応するトークン・パッサーへトークンをパスする必要がある。図７のトークン・パッサー1017は分岐ターゲット命令へ対応し、そして命令701は分岐ターゲット命令であると仮定しよう。この実施形態においては、分岐TAKEN信号1037がCPUコア111によって生成されたとき、この信号は全てのトークン信号レジスタのリセット・ポートへ送られトークン信号を消去する。ターゲットBNXはトラック・テーブル1010から読み出され、そして比較されるために全てのターゲットBNXコンパレータへ送られる。この例では、ターゲットBNXコンパレータ1029の結果のみが’1’であり、それはターゲット・デコーダ1021を制御しターゲット・トラック・ポイントのBNYをデコードする。デコードの結果に応じて、ターゲット・デコーダ1021のワード・ライン1039は’1’で、それはトークン信号をORゲート1042に差し込み、そしてストレージ701を制御して分岐ターゲット命令701をCPUコア111にバス1003を経て出力する。次のクロック・サイクルにおいて、トークン信号はトークン・パッサー1013へパスされ、命令703を出力する。
【０１２２】
[167]  本記述において、プロセッサ・パイプラインは前端パイプラインと後端パイプラインにTAKEN信号の位置によって分割されうる。重複した前端パイプラインがCPUコアに追加され、命令リード・バッファはフォールスルー命令と分岐ターゲット命令をCPUコアに分岐命令の後に提供する。TAKEN信号1037が生成されたとき、CPUコアの二つの前端パイプラインは分岐命令の後に命令を実行する；それは前端パイプラインの２つの実行結果の１つを、さらに後端パイプラインによって実行されるべく、選ぶ。それは分岐が取られるか取られないかに関わらず、パイプラインが分岐ペナルティを被らないことを保証する。
【０１２３】
[168]  図７に戻って、各命令とカップルする他のバス1094が存在し、それによって２クロック・サイクル先に読み出し前処理ユニット1069によって前処理される。よってトークン・パッサーは、正常実行のために現行命令を、そしてロード／記憶命令のために次命令後の命令を、同時に提供することができる。ここにおいて、トークン信号に対応する命令はCPUコア111へ実行のため送られ、次命令後の命令は前処理ユニット1069へ送られ前もってロード／記憶操作を実行する。
【０１２４】
[169]  この実施形態において、トークン信号は、出力された二つの命令が同じ命令ブロックにないとき、グローバル・バスへパスされる。つまり、現行命令は現行命令ブロックに位置するが、次命令後の命令は次命令ブロックに位置する。特に、命令ブロックの最後の二つのトークン・パッサーは、それぞれそのトークン信号レジスタの値を出力し、値をORゲート（1057と1007）へバス（1053と1055）を通して送る。トークン信号が、現行命令ブロックの最後のトークン・パッサーの前のトークン・パッサーにあるとき、命令リード・バッファは対応する命令を出力し、トークン信号はまたORゲート1057へバス1053を通して送られ、ORゲート1057の出力はグローバル・バス1061を通してANDゲート1065へ送られる。ここにおいて、ANDゲート1065にカップルしているトークン・パッサーは次命令ブロックであると仮定されている。ANDゲート1065の出力は’1’である、なぜならANDゲート1065の他のインプットは次BNXコンパレータの出力、それは’1’である、とカップルしているから。従って、同次命令ブロックの最初の命令は現行命令ブロックの最後の命令の前の命令と同時に出力されうる。もう一方で、トークン信号が現行命令ブロックの最後のトークン・パッサーにあるとき、命令リード・バッファーは対応する命令を出力し、トークン信号はまたORゲート1007へバス1055を経て送られ、ORゲート1007の結果はANDゲート1019へグローバル・バス1024を経て送られる。ANDゲート1019の出力は、ANDゲート1019の他のインプット・ポートは次BNXコンパレータの出力とカップルしていてそれは’1’であるから、’1’であり、よって同時命令ブロックの第二命令は現行命令ブロックの最後の命令と同時に出力される。
【０１２５】
[170]  本記述においては、プロセッサ・システムは複数のレーンを含むことができ、各レーンは独立した命令リード・バッファ、レジスタ、実行ユニットと読み／書きユニットを含み、１つのレーンから他のレーンへ、レーン間の情報交換を可能にするイントラ・レーン・バスを経て、データを送ることができる。図８Aは本開示と整合する例示的なイントラ・レーン・バスを示す。レーン801の出力ドライバー810はバス820を動かしデータをレーン802へ送る。例えばドライバー810は、レーン801の実行ユニットの出力がバス820を通ってレーン802のレジスタ・ファイルもしくは実行ユニットへ行くようにする。図８Bを参照されること。レーン801の出力移送ゲート811と812は、イントラ・レーン・バス830と840をコンフィギュレーション信号の制御の下に駆動する；レーン802の移送ゲート821と822もまたイントラ・レーン・バス830と840をコンフィギュレーション信号の制御の下に駆動する。インプット・セレクタ815はバス830もしくはバス840のデータをレーン801へのインプットとして選び、またインプット・セレクタ825はバス830もしくは840のデータをレーン802へのインプットとして選ぶ。インプット・セレクタはコンフィギュレーション信号の制御の下にあるかもしくはオペランド・レジスタ・アドレスの照合によって制御される。例えば、R1はレーン801で実行される命令のターゲット・レジスタである；しかしR1はまたレーン802のソース・オペランドの１つである。それから照合結果は、マルチプレクサ825を制御してバス840を選び、従って801の実行結果をバス840を通してレーン802へパスする。イントラ・レーン連絡ゾーンはコンフィギュレーション制御信号によって定義されうる。例えば本実施形態においては、バス830はスイッチ832によって開き、そしてバス840はスイッチ841によって閉じる。
【０１２６】
[171]  本記述においては、ある種の操作モードにおいては異なるレーンの実行ユニットは同じオペランドをインプットとして取りうるし、別の操作モードにおいては異なるレーンの各実行ユニットは独立したオペランドをインプットとして必要とする。図８Cは、開示された実施形態と整合する、例示的なレーンが同じもしくは異なる命令を実行することを示している。ここで850、851、852、853は異なるレーンの実行ユニットで、860、861、862、863はそれぞれ各自のレーンの実行ユニットに対応しているレジスタ・ファイルである。実行ユニット850は自身のレーンのレジスタ860から読み書きを行う。そして他の３つのレーンも各レーンが独自のオペランドにおいて実行するときに同じように振る舞う。
【０１２７】
[172]  １つの実行ユニットの結果は、複数のレーンがある種の操作モードにおいて同じプログラムを実行しているとき、複数のレーンの中のレジスタ・ファイルにイントラ・レーン・バス870を経て出力され書き込まれる。よって、複数レーンの各命令ユニットは同じオペランドを読みうる。
【０１２８】
[173]  本記述において、複数のトラッカーが複数命令複数データ（MIMD）オペレーションを制御するのに使われる。典型的なMIMDシステムにおいて、複数の命令ストリームは同時に複数のレーンで実行され、全てのこれらのレーンは同じ命令キャッシュとデータキャッシュを共有する。
【０１２９】
[174]  図９Aは開示された実施形態と整合する例示的なMIMDオペレーションを示す；図９Aは命令キャッシュ1101、トラック・テーブル1103、データキャッシュ1105、４つの命令ユニット1111、1113、1115、1117そして４つのトラッカー1121、1123、1125、1127、4つの実行ユニットに対応する４つの命令リード・バッファ1131、1133、1135、1137を含む。各命令ユニットは自身のレジスタ・ファイル、算術ロジックユニット（ALU）そしてデコーダを持ち、対応する命令リード・バッファから送られてきた命令を独立に実行することができる。
【０１３０】
[175]  この実施形態においては、トラック・テーブル1103は４つのリード・ポートを持ち、それぞれ１つのトラッカーに仕えて各自のトラック・ポイントの内容を同時に読み出す。各トラッカーは前述の通り機能し、リード・ポインターは動きそして実行されている命令の後の最初の分岐において止まる。命令キャッシュ1101は、次の順番のブロックとターゲット・ブロックを、命令リード・バッファのターゲット・アドレスの照合結果にもとづいて、４つの命令リード・バッファへ供給する。各命令リード・バッファは命令をその対応するレーンに、デコードと各自のトークン・パッサーのもとの実行のために供給する。
【０１３１】
[176]  各自のトラッカーをサポートし、 同じ内容を持つ４つのトラック・テーブルは図９Aの４ポート・トラック・テーブル1103にとって変わることができる。図９Bは開示された実施形態と整合する例示的な、同じ内容を持ちMIMDオペレーションをサポートする複数のトラック・テーブルを示す。トラック・テーブル1151、1153、1155そして1157は同じ内容を含み、各自のトラッカー1161、1163、1165そして1167のリード・ポインターによってインデクスされたそれぞれトラック・ポイント内容を出力する。トラック・テーブルの１つにおいて新しいトラックが追加されるか古いトラックが交換されるかしたとき、同じことが他のトラック・テーブルにおいても内容の一貫性を保つために施される。よって図９Aと同じ機能を実現する。
【０１３２】
[177]  時分割多重方式は単一ポート・トラック・テーブルと複数のトラッカーを用いて、複数のトラック・ポイント内容を供給することができる。図９Cは開示された実施形態と整合する例示的な時分割多重方式トラック・テーブルを示す。４つのトラッカー1171、1173、1175、そして1177によって出力されたリード・ポインターの１つはマルチプレクサ1179によって選ばれ、トラック・テーブル1169をインデクスする。トラック・テーブル1169は４つ全てのトラッカーへトラック・テーブル内容を出力する。要求しているトラッカーだけが内容を受け付け、他のトラッカーは内容を受け付けない。全てのトラッカーが各サイクルにおいてトラック・テーブルに訪れる必要はないから、４つのトラッカーは 時分割多重方式を使ってトラック・テーブルに訪れることができる。セレクタ1179の制御は４つのレーンのそれぞれの実行優先順位にもとづく。これは各レーンにおいて実行されている命令の数の制御が時間の同じ周期の中で異なることを可能にする。さらにより高周波数のクロックがトラック・テーブル1169そしてトラッカー1171、1173、1175、そして1177へ供給され（例えば周波数がレーンのクロック周波数の４倍）、システム・クロック・サイクル内で、トラック・テーブルが成功裏にトラック・ポイント内容を全てのトラッカーへ出力することができる。このようにして、各命令リード・バッファは対応するレーンのために記憶命令を供給しなくてよい。
【０１３３】
[178]  本記述において、複数の分岐ポイントの後の後続するトラックは、トラック・テーブルの複数の分岐ポイントに記憶されている情報にもとづいて活用されうる。この後続トラックは次の順番のトラックと分岐ターゲット・トラックを含む。図９Dは開示と整合する例示的な、複数レーンに後続トラック情報を供給する実施形態を示す。
【０１３４】
[179]  図９Dにおいてトラック・テーブル1201は４つのトラック1211、1213、1215、そして1217の情報を、トラッカー1203によって出力されたリード・ポインターによってインデックスされた分岐ポイントにもとづいて、出力する。４つのトラックの情報は以下の通り：トラック情報1211は、1203（第一分岐）によってインデックスされた分岐と続く分岐（第二分岐）はともに取られなかったというものである；トラック情報1213は、第一分岐は取られなかったが第二分岐が取られたというもの；トラック情報1215は第一分岐は取られたが第二分岐は取られなかったというもの；トラック情報1217は第一と第二分岐が共に取られたというものである。
【０１３５】
[180]  図９Dのレジスタ1221、1223、1225、1227、1228、そして1229はそれぞれ対応する６つのレーンの分岐履歴を記憶する。レーンが同分岐ポイントを実行したとき、６つのレジスタの各値は’01’、’10’、’10’、’11’、’00’、そして’11’である。第五レーンが1211のトラック情報を選びさらなる実行を方向づけることに基づいて、第一レーンは1213のトラック情報を選びさらなる実行を方向づけ、第四と第六レーンは1217のトラック情報を選びさらなる実行を方向づける。このようにして、同じ１つのトラッカーが、６つのレーンの二つの分岐の実行に基づいて後続トラック情報を供給し、６つのレーンが同じ命令を実行することを可能にする。よって、小さなオーバーヘッド・コストによる複数の分岐の並列処理が可能になる。
【０１３６】
[181]独立した一時的なトラックが各トラッカーに対して与えられ、複数のトラッカーが同じトラック・テーブルを訪れるときの、トラック・テーブル・アクセスにおけるボトルネックを緩和する。本発明の一時的トラック行の例は図９Eを参照されたい。
【０１３７】
[182]  例として同時にトラック・テーブル1301にアクセスする二つのトラッカー1303と1305を取り上げる。トラッカー1303のリード・ポインタ1307が新しいトラックをポイントするとき、マルチプレクサ1311はリード・ポインタ1307の値を選び、バス1313を経てトラック・テーブル1301をインデックスするためにそれを送る。全トラックは読み出され、一時的トラック行1315に記憶される。それから、トラック・ポイントは、トラック・テーブル1301にアクセスする代わりに、トラッカー1303のリード・ポインタがまだ同じトラックをインデクスしている間は、直接に一時的トラック行1315から読み出される。トラッカー1305のリード・ポインタ1309が新しいトラックをポイントするとき、マルチプレクサ1311はリード・ポインタ1309の値を選び、バス1313を経てトラック・テーブル1301をインデックスするためにそれを送る。全トラックが読み出され、一時的トラック行1317に記憶される。それから、トラック・ポイントは、トラック・テーブル1301にアクセスする代わりに、トラッカー1305のリード・ポインタがまだ同じトラックをインデクスしている間は、直接に一時的トラック行1317から読み出される。よって、これはアクセス争いとトラック・テーブル1301へのアクセス数を、そして電力消費を減らす。
【０１３８】
[183]  さらに、一時的トラック行の規模はトラッカーと働きやすいように拡大されうる。図９Fは開示された実施形態に整合する例示的なミクロ・トラック・テーブルである。
【０１３９】
[184]  本実施形態において、トラック・テーブル1301、トラッカー1303そして1305は図９Eのそれらと同じである。違いは９Fはミクロ・トラック・テーブル1355と1357を用い、９Eの一時的トラック行1315と1317を代替する。図９Eにおいて、トラッカーのリード・ポインタが新しいトラックをポイントするとき、対応する一時的トラック行の内容は交換される。本実施形態においては、トラッカーのリード・ポインタが新しいトラックをポイントするとき、同新トラックの内容はミクロ・トラック・テーブルの交換可能行に書き込まれる（従来のメモリ交換ポリシーを用いる）。ミクロ・トラック・テーブルの各行はトラックの対応するBNXを記憶するレジスタを持つ。トラッカー・リード・ポインタのBNX値はミクロ・トラック・テーブルに記憶されているBNXと照合され、トラッカー・リード・ポインタによってインデックスされたトラックが既にトラック・テーブルに記憶されているか、そして既にトラック・テーブルにあるならその位置、をチェックする。このようにして、トラッカーのリード・ポインタが現行トラックを再びポイントするとき、対応するトラック・ポイントは見つけ出され、トラック・テーブル1301へ再びアクセスする代わりにミクロ・トラック・テーブルから読み出される。これはさらに二つのトラッカーによるトラック・テーブル1301へのアクセス争いを減らし、そして電力消費を減らす。
【０１４０】
[185]  ミクロ・トラック・テーブルも行数は対応する命令リード・バッファの命令ブロック数と同じ、もしくは異なることが可能である。ミクロ・トラック・テーブルの行数と命令リード・バッファの命令ブロックのブロック数が同じとき、二つは対応する、あるいは対応しなくてもよい。もし二つが完全に対応するなら、二つは同じBNXマッチャーを使うことができ、それぞれ自身のマッチャーをもつ必要がない。
【０１４１】
[186]  この開示における命令キャッシュは複数の異なるプログラムを同時に記憶でき、トラック・テーブルの各プログラムに対応するトラックは互いに独立している。
各プロラムのトラッカーはそれ自身のトラックにおいて互いに交わることなく走る。唯一の例外は異なるプログラムによって呼び出された共有サブルーティンである。しかし、この場合においても、各プログラムはそれ自身のトラックへ、共有サブルーティンの実行が完了した時点で、戻る。
【０１４２】
[187]  本記述において、汎用トークン・パッサー・ユニットは複数レーン・プロセッサ環境において構成される。汎用トークン・パッサーはそれ自身のレーンの命令実行を制御するだけでなく、他のレーンのトークン・パッサーと連携して、ILPもしくはSIMDなどの複数レーン間の同期動作を実現する。複数レーンの同トークン・パッサーはマトリックスとして組織され、オペレーションの異なるモードをサポートするように設置されうる。
【０１４３】
[188]  図１０Aは本開示と整合する例示的なトークン・パッサー配列を示す。12のトークン・パッサーのマトリックスが示されている。前述のように、トークン・パッサーの各行は１つのレーンの命令リード・バッファに対応する。３レーンのトークン・パッサーの一部がここに示されていて、各トークン・パッサーは命令リード・バッファの命令に対応する各トークン・パッサーは基本パッサー（例えば1611）と ３インプット・マルチプレクサ（例えば1631）によって形成されている。本開示のトークン・パッサー・マトリックスの同基本トークン・パッサーについては図１０Bを参照のこと。
【０１４４】
[189]  図１０Bにおいて、各基本パッサーは少なくとも１つのトークン信号レジスタ1651、ORゲート1653、そしてマルチプレクさ1655から構成される。前述されたように、トークン・パッサーはより多くの機能を実現するためにより複雑な構造を持つこともできる。ORゲート1653のインプットの１つはターゲット・デコーダから来る。もう１つはトークン信号レジスタ1651の出力から来る。図１０Aに戻って、最左コラム以外の全てのコラムは、３インプット・マルチプレクサ、1631、1633、1635、1641、1643、そして1645を持つ。これらのマルチプレクサはコラム間の関係を定義するように設定されうる。最左コラムもまた３インプット・マルチプレクサを持ちうるが、インプットAのみを受付けるように設定される必要があり、このコラムの中でトークン・パッシングを受付ける。
【０１４５】
[190]  各コラムのトークン・パッサーは他のコラムに関係しないように設定され、各レーンはそれ自身の命令リード・バッファの命令を実行する（各レーンは異なるプログラムを実行する）。図１０Aのマルチプレクサ1631、1633、1635、1641、1643、そして1645 は全て各自のコラムのトークン・パッサーの出力（マルチプレクサのインプットA）を選ぶ。このようにして、トークン・パッサー1601、1603、1605そして1607は第一コラムのトークン・パッサーを構成し他のコラムから独立にトークン信号を次々にパスすることができる；トークン・パッサー1611、1613、1615そして1617は第二コラムを構成し次々にトークン信号をパスする；トークン・パッサー1621、1623、1625そして1627は第三コラムのトークン・パッサーを構成し次々にトークン信号を移送する。３つのグループのトークン・パッサーはそれぞれ、各自のレーンの実行のために命令を提供する自身の命令リード・バッファを制御し、よってMIMDプロセッサの機能を実現する。図９Bの実施形態において示される複数のトラッカーは分岐ターゲット・アドレスと次の命令ブロック・アドレスをトークン・パッサーの各グループに提供する。このトークン・パッサー間の相関はコラム相関と名付けられる。
【０１４６】
[191]  これらのコラムの命令リード・バッファが同じ命令を記憶しているとき、各トラックは同じ命令を同時に実行する（GPUオペレーションのように）。ここで、最左コラムはひとつのトラッカーの指示の下のリードコラムと設定されうる、右側の他のコラムは後続コラムとして設定され、リードコラムを追って同期する。
【０１４７】
[192]  本記述において、リードコラムと後続コラムの設定は行相関関係を形成する。特に、図１０Aのマルチプレクサ1631、1633、1635、1641、1643そして1645は全てその左のトークン・パッサーの出力（マルチプレクサのインプットC）を選ぶ。つまり、基本パッサー1611と1621は両方とも動かず、マルチプレクサ1631と1641が基本パッサー1601のトークン信号値をパスする；基本パッサー1613と1623は両方とも動かず、マルチプレクサ1633と1643が基本パッサー1603のトークン信号値をパスする；基本パッサー1615と1625は両方とも動かず、マルチプレクサ1635と1645が基本パッサー1605のトークン信号値をパスする。このようにして、トークン信号が基本パッサー1601にあるとき、基本パッサー1601のトークン信号値は、基本パッサー1601に対応するレーンへの命令の出力を制御するだけでなく、マルチプレクサ1631とマルチプレクサ1641へパスされ、そしてそこから基本パッサー1611と1621へ対応するレーンへの命令出力を制御する。
【０１４８】
[193]  同様にして、トークン信号が基本パッサー1603へパスされるとき、基本パッサー1603、基本パッサー1611そして基本パッサー1621に対応する各自のレーンへの命令の出力を制御する。このモードにおいては、最初のトークン・パッサーは受動トークン・パッサーを動かして同じ命令を出力させ、SIMDもしくはGPUの機能を実現する。
【０１４９】
[194]  リードコラムと後続コラムは対角相関として設定されうる。特に、図１０Aのマルチプレクサ1631、1633、1635、1641、1643、そして1645は全てその左上へのトークン・パッサーの出力（マルチプレクサの出力B）を選ぶ。すなわち、トークン・パッサー1613と1625は共にトークン・パッサー1601のトークン信号値を出力し、トークン・パッサー1615と1627は共にトークン・パッサー1603のトークン信号値を出力する。このようにして、トークン信号が基本パッサー1601にあるとき、基本パッサー1601のトークン信号値は、基本パッサー1601に対応するレーンへの命令の出力を制御するだけでなく、マルチプレクサ1633とマルチプレクサ1645にもパスされ、そこから基本パッサー1613と1625に対応するレーンへの命令出力を制御する。
【０１５０】
[195]  同様にして、トークン信号が基本パッサー1603へパスされるとき、基本パッサー1603、基本パッサー1615そして基本パッサー1627に対応する各自のレーンへの命令出力を制御する。このモードにおいては、最初のトークン・パッサーは受動トークン・パッサーを動かして複数の連続した命令を出力させ、ILPプロセッサの機能を実現する。
【０１５１】
[196]  本開示の設定可能な同プロセッサ・システムは複数の異なるプロセッサの機能を実現するように設定されうる。異なるレーンはそれぞれ、同プロセッサ・システムがILPプロセッサとして設定されているとき、連続する命令のセグメントの中の１つの命令を実行する。この場合、同じサイクル中に命令リード・バッファによって出力された複数の命令間のデータ依存をチェックする必要がある。隣り合うサイクルの中で命令リード・バッファによって出力された複数の命令間のデータ依存もまたチェックされ、実行ユニットの出力は、データ依存を持つ後の命令を実行する実行ユニットへバイパスされ、よって命令実行効率を向上させる。
【０１５２】
[197]  本記述において、複数のレーンがILPモードに設定されうる。図１１は開示された実施形態に整合する例示的な、トークン・パッサー・マトリックスを持つ設定可能複数レーン・プロセッサ・システムである。最大発行幅４のILP設定が例として用いられる。図１１において、モジュール1701はトークン・パッサー配列と対応する命令リード・バッファ（この例においてはそれは４つのレーンに対応する）を含む。設定によって、最初のトークン・パッサーはトークン信号をパスし、後続するトークン・パッサーは対角相関におけるその左上にあるトークン・パッサーからのトークン信号を受付ける。簡明のため、使われない部分は省かれている。前述のように、モジュール1701は、各クロックサイクルにおいて、トークン信号に対応するものから始まる連続する４つの命令を出力することが可能である。
【０１５３】
[198]  モジュール1703は連続した命令の依存性チェックを行なうように設定されうる。４つの連続した命令の依存性チェックを例として取り上げる。同４つの連続した命令はモジュール1701の４レーン1411、1413、1415、1417によってバス1461,1463、1465、1467を経て出力される。同４つの連続した命令の最初の３つの命令の宛先レジスタ・アドレスはバス1711、1713、1715に置かれる。同４つの連続した命令の８つのオペランド・ソース・レジスタ・アドレスはバス1721、1723、1725、1727、1731、1733、1735、1737に置かれる。図１１に示されるように、バス1711、1713、1715からバス1725、1727、1731、1733、1735、1737への交差点において設定可能コンパレータが存在する。命令依存性チェックはこれらのコンパレータの設定に応じて実行され、特定の命令のソース・レジスタ・アドレスと他の命令の宛先レジスタ・アドレスとを比較する。コンパレータの設定（つまり比較するまたはしない）が、特定の命令のソース・レジスタ・アドレスと他の命令の宛先レジスタ・アドレスとを比較することを決定し、よってイントラ命令依存関係チェックを行なう。
【０１５４】
[199]  本実施形態における中空円は比較を行なうように設定されたコンパレータを表す。同一命令のソース・オペランド・レジスタ・アドレスは一緒にOR操作される。つまり、バス1725、1727そしてバス1711の交差点における２つのコンパレータの結果は、第１の命令の宛先レジスタ・アドレスと第２の命令の二つのソース・レジスタ・アドレスを比較するように設定されていて、ORゲート1743によってOR操作される；バス1731、1733とバス1711、1713の交差点におけるコンパレータは、第１と第２命令の宛先レジスタ・アドレスと第３の命令の二つのソース・レジスタ・アドレスを比較するように設定されていて、その結果はORゲート1745によってORされる；バス1735、1737、そしてバス1711、1713、1715の交差点における６つのコンパレータは、第１、第２、第３命令の宛先レジスタ・アドレスと第４の命令の二つのソース・レジスタ・アドレスを比較するように設定されていて、その結果はORゲート1747にてORされる。本実施形態において、２つのソース・レジスタ・アドレスは他の命令の宛先レジスタ・アドレスと比べるのに必要とされない。従って、バス1721、1723そしてバス1711、1713、1715、1717の交差点におけるコンパレータは比較するように設定されていない。よってORロジック1741の出力は’0’である。
【０１５５】
[200]  そして、ORロジック1741、1743、1745、1747の出力は、４つのレーン1411、1413、1415、1417の各自の決定ブロック1751、1753、1755、そして1757へ送られる。図１１において、各決定ブロックはそれ自身のレーンのORゲートの出力を受付ける。加えて、決定モジュールはカスケードされ、各モジュールはその右側のレーンのモジュールからの出力を受付け、さらにそれは下方に１ポジション、シフトされる。そして右側レーン・モジュール出力の下方シフトによって取り残された、決定モジュールの残るインプットは右側レーンのORゲートの出力と接続される。例えば、決定ブロック1755はORロジック1745の出力を受け付け、一番上のその第一右側インプットはその右側のORロジック1747の出力を受け付け、その第二、第三、第四の右側インプットは決定ブロック1757の第一、第二、第三出力を受付ける。
【０１５６】
[201]  最大発行速度４をサポートするために、４つの対応する決定ブロックが依存性チェック・モジュールのセットとして設定される。この依存性チェック・モジュールにおいて、最終ステージの決定ブロック（最も左）へのインプットは選択信号1739としてグループされ、トークン・パッサーのマルチプレクサを制御し、トークン信号の正確なパッシングを制御する。
【０１５７】
[202]  この実施形態において、各決定ブロックはある構造を持つ。図１２は開示された実施形態と整合する例示的な、依存チェックモジュールの内部構造を示す。本記述において、Write after Read（WAR）ハザードとRead after Read（RAR）ハザードをチェックする必要はなく、Read after Write（RAW）ハザードとWrite after Write（WAW）ハザードをチェックするだけで良い。つまり、もし命令のソースレジスタ・アドレス（オペランド）が、この命令の前のある命令の宛先レジスタ・アドレスと同じであれば、これら２つの命令は並列に実行され得ない。２つの命令が同じ宛先レジスタに書き込んでいるとき、第一の命令の結果は破棄され、第二の命令の結果のみRFに書き込まれる。
【０１５８】
[203]  この実施形態において、最大２つのソースレジスタと１つの宛先レジスタを用いるそれぞれの命令が、例として用いられる。他のシナリオは類推によって推論されうる。RAWハザードをチェックすることにおいて、最初の３命令から抽出された宛先レジスタ・アドレス1711、1713、1715が、最初の命令の後の命令から抽出されたソースレジスタ・アドレス1725、1727、1731、1733、1735、1737と比較される。特に、最初の命令の宛先レジスタ・アドレス1711は各ソースレジスタ・アドレス1725、1727、1731、1733、1735、1737と比較される。宛先レジスタ・アドレス1713は各ソースレジスタ・アドレス1731、1733、1735、1737と比較される。宛先レジスタ・アドレス1715は各ソースレジスタ・アドレス1735、1737と比較される。レーンの同比較結果はレーンに付随した決定ロジックへ送られる。
【０１５９】
[204]  この実施形態において、決定ロジック・グループの最終段階におけるORゲート（各グループの決定は右から左へ行なわれるから最左）は強制的に’1’にされる。決定ロジックの残りの各段階は、その対応するレーンの比較結果と、前段階の決定ブロックからの決定結果を処理する。これらのロジックの最終段階の決定結果は選択信号1739になり、それは図１１の各トークン・パッサーのマルチプレクサを制御する。
【０１６０】
[205]  トークン信号がトークン・パッサー1431にあると仮定し、トークン・パッサー1431、1433、1435、1437に対応する４命令は依存チェックユニットと実行ユニットへ、バス1461、1463、1465、1467を通して、同時に送られる。実行ユニットは、依存チェックユニットの検出結果に応じて、これら４命令のうちどれが並列に実行されうるかを決定する。依存チェックユニットによって出力された選択信号1739は、トークン信号の通過を制御する各トークン・パッサーへ送られる。
【０１６１】
[206]  依存チェックのプロセスは図１１と図１２によって示される。トークン信号がトークン・パッサー1431にあると仮定し、レーン1411、1413、1415、1417はそれぞれ命令をバス1461、1463、1465、1467を経て発行する。ORゲート1741の出力は強制的に’1’にされ、次のグループに対する依存決定ロジックのこのグループの影響をブロックする。ORゲート1749の出力、他の決定ロジックの最終段階である、もまた強制的に’1’され、この決定グループに対する、依存決定ロジックのそのグループの影響をブロックする。もし４つの発行された命令間に依存がないならば、ORゲート1743、1745、1747の出力は全て’0’である。決定ブロック1759が決定ブロック1757へ送る出力は、上から下へ’1’、’0’、’0’、’0’である。決定ブロック1757において、ORゲート1747の出力は’0’であるから、決定ブロックが決定ブロック1755へ送る出力は、上から下へ’0’、’1’、’0’、’0’である。同様に決定ブロック1755の出力は、上から下へ’0’、’0’、’1’、’0’であり、決定ブロック1753の出力は、上から下へ’0’、’0’、’0’、’1’である。シフト・ブロッカー・ロジック1753、1755、1757は全て信号の通過をブロックせず、1491、1492、1493の’0’信号はそれぞれシフトされ、1471、1472、1473（これは命令2、3、4において依存が検出されないということ）になり、1494の信号は’1’に固定され、シフトされ信号1474へ着くようにパスされ、各トークン・パッサーにおける４インプット・マルチプレクサを制御する制御信号を値’0001’にセットし、全ての４インプット・マルチプレクサの第４インプットを選ぶ。各４インプット・マルチプレクサの第４インプットは、トークン・パッサー1439の４インプット・マルチプレクサ以外において、’0’である。このマルチプレクサの第４インプットは値が’1’の制御ライン1447に繋がっている。従って、トークン信号はトークン・パッサー1433、1435、1437を飛び越え、トークン・パッサー1439へパスされる。トークン信号パッサー1431に対応する命令の始めにおいて、４つの命令間には依存がないため、これら４命令は並列に発行されうる；これら４命令の全ては実行ユニットによって実行されうる。次のクロック・サイクルにおいて、IRBはトークン・パッサー1439に対応する命令から始まる４命令を、プロセッサ・コアへ実行のために、また依存チェックユニットへ検証のために、出力する。
【０１６２】
[207]  トークン・パッサー1431に対応する命令から始まる４命令の問題に戻る。もし４番目の命令のみ（トークン信号パッサー1437に対応する命令）が依存関係を持つ（４番目の命令が最初の３つの命令のどれかと依存関係を持つ）場合、依存ビット1493は’1’であり、シフト・ブロッカー・ロジック1757の３つのANDゲート全てが’0’を出力し、信号1494の通過をブロックし、信号1493は信号1473へ到達するために２段階のシフトを経る。各トークン・パッサーの全ての４インプット・マルチプレクサを制御する制御信号を’0010’にし、全４インプット・マルチプレクサの第３のインプットを選ぶ。全４インプット・マルチプレクサの第３のインプットは、トークン・パッサー1437の４インプット・マルチプレクサ、その第３インプットは値が’1’の制御ライン1447に繋がっている、以外は’0’である。このようにして、トークンはトークン・パッサー1437へパスされる。これはトークン・パッサー1437に対応する命令が最初の３つの命令と依存関係をもつからであり、これら３命令と同時には発行されえず、新しいクロック・サイクルにおいて再発行されなければならない。それから、実行ユニットは同最初の３命令のみを実行する。次のクロック・サイクルにおいて、IRBはトークン信号パッサー1437の命令から始まる４命令を、実行のためにプロセッサ・コアへ、そして依存チェックユニットへチェックのために、出力する。トークン・パッサー1437に対応する命令は第１レーン1411のバス1461からこのとき出力される（前サイクルは第４レーン1417のバス1467から出力した）。
【０１６３】
[208]  トークン・パッサー1431に対応する命令から始まる４命令の問題に戻る。もし第２（トークン・パッサー1433に対応する）と第４命令（トークン・パッサー1437に対応する）の両方が前の命令と依存関係を持つとき、第４命令の依存信号1493は従って’1’であり、シフト・ブロッカー・ロジック1757の３つのANDゲートが’0’を出力するようにし、従って信号1494の通過をブロックする；信号1493はシフトし左にパスする。しかし、このとき、第２命令の依存ビット1491は’1’で、シフト・ブロッカー・ロジック1753の３つのANDゲートが’0’を出力するようにし、従って信号1493の通過をブロックする；1491それ自身は信号1471へ到達し、トークン・パッサーの全ての４インプット・マルチプレクサの制御信号を’1000’にし、全４インプット・マルチプレクサの第１インプットを選ぶ。４インプット・マルチプレクサのそれぞれの第１インプットは 、トークン・パッサー1433の４インプット・マルチプレクサ、その第１インプットは値が’1’の制御ライン1447に繋がっている、以外は’0’である。従って、トークン信号はトークン・パッサー1433へパスされる。それから、実行ユニットは同第１命令しか実行できない。次のクロック・サイクルにおいて、命令バッファはトークン信号パッサー1433の始まりの命令に対応する４命令を、プロセッサ・コアへ実行のために、また依存チェックユニット1449へチェックのために、出力する。トークン・パッサー1433に対応する命令はこのとき第１レーン1411のバス1461から出力される（前サイクルは第２レーン1413のバス1463から出力した）。
【０１６４】
[209]  この実施形態において、トークン・パッサーのマルチプレクサは４インプット・マルチプレクサであり、また依存チェックユニットは設定可能であるから、従って最大４発行をサポートできる。並列でより少ない数の命令を発行するために、依存チェックユニット・モジュールはそれに対応して設定され、依存ビットの通過をブロックする。例えば、図１２において、３発行を並列で実行するために、依存ビット1439は’1’と設定され、判断モジュール1757のANDゲートをブロックし、制御信号1739の信号1471、1472、1473はそれらの間で唯１つの’1’を持ち、信号1474は’0’である。最初の３命令（バス1461、1462、1463の命令）の依存関係チェック結果に応じて、トークン信号はそれに対応して、現行トークン信号パッサーの後の、第１、２、３トークン信号パッサーへパスされ、３-発行ILPを達成する。他のいかなる適切な最大命令数も同様に設定しうる。
【０１６５】
[210]  本記述において、電力を節約するために、より小さな発行頻度が設定でき、使われていないレーンの電力供給を止めることができる。より小さな発行頻度はまた、他のレーンが他の目的で使われるために、設定できる。
【０１６６】
[211]  いくつかの命令セット・アーキテクチャにおいて、レジスタの値を比較することによって、分岐決定がなされる。これらの状況において、正しい分岐命令の実行は上述の依存チェック方法を用いることによって保証される。
【０１６７】
[212]  他の幾つかの命令セット構造において、分岐決定は、ふつう前の命令の実行結果である、フラッグにもとづいてなさる。これらの状況において、追加的なロジックがこれらのフラッグの依存関係をチェックするために追加される。例えば、図１２において、バス1451、1452、1453の値はそれぞれ、第１、第２、第３命令がフラッグ設定命令であるかを表し、そしてバス1454、1455、1456の値はそれぞれ第２、第３、第４命令が分岐命令であるかを表す。このようにして、同レジスタ依存関係チェックと同じ方法を用いいて、フラッグ設定命令と分岐命令との間に依存関係があるかを判断し、正しい分岐命令の実行を保証する。
【０１６８】
[213]  図１１に戻って、モジュール1705は対応する命令ユニットを含む；モジュール1709は同４レーン1411、1413、1415、1417の対応するレーンのレジスタファイル含む。各レジスタファイルは２つの読み込みポート（読み込みAと読み込みB）と４つの書き込みポートを持つ。同読み込みポートAと読み込みポートBは２つのソース・オペランドの読み出しを同時にサポートできる。この実施形態において、同４書き込みポートは４レーンの４命令の４実行結果の書き戻しを同時にサポートし、複数のレーンによる同じプログラムの連続した命令の一貫した実行をサポートする。同じ値が同時に全４レーンのレジスタファイルに書き込まれ、よってこれら４レジスタファイルの値の一貫性を保証する。よって、各レーンの実行ユニットがレーンのレジスタファイルからデータを読み出すとき、それは同じデータを読む。’Write after Write’依存関係チェックもまた実行されなければならず、故に同じ宛先レジスタ・アドレスを持つ複数の命令の最後の実行結果のみがレジスタファイルに書き戻される。WAW依存関係チェックは図１２で示されたWAR依存関係チェックと同じやり方で実行されうる。理解を容易にするために、WAW依存関係チェックは図に示されていないが、この業界の平均的な人にとって実装するのは容易である。
【０１６９】
[214]  レーン間にイントラ-レーン・バスがあり、１つのレーンから複数の他のレーンへデータを運ぶ。図１１を参照されたい。各レーンの実行ユニットは設定レジスタの制御のもとにある送信ゲートを持ち、各実行ユニットの実行結果をイントラ-レーン・バスへ送る。レーンの各実行ユニットはバイパス・ロジックの制御のもとにあるマルチプレクサを持ち、それは他のレーンによってイントラ-レーン・バスに置かれたデータを受け取ることができる。
【０１７０】
[215]  モジュール1707はバイパス・ロジックを含む。この実施形態において、前クロック・サイクルの命令の宛先レジスタ・アドレスは、現行サイクルの全ての命令のソースレジスタ・アドレスと照合されるために遅延される。比較結果は、バイパス実行結果を対応する命令のソース・オペランドとして有効にし、結果はRFへ書き戻される。モジュール1707の中空円はコンパレータを表す。連続する同４命令の宛先レジスタ・アドレス1711、1713、1715、1717は、それぞれが各自のレジスタ1771、1773、1775、1777によって遅延された後、バス1781、1783、1785、1787へ置かれる。
【０１７１】
[216]  説明の簡明のため、前サイクルの４命令はデータ依存関係を持たないことが仮定されている。よって、現行サイクル命令のソースレジスタ・アドレスは、前サイクルの全ての４宛先レジスタ・アドレスと比較される。前サイクルでデータ依存関係があれば、それは同様に処理される。現行サイクル命令のソースレジスタ・アドレスは、並列に実行されうる全ての前サイクル命令の宛先レジスタ・アドレス（この状況では、少なくとも１、最大４）のみと比較される必要がある。
【０１７２】
[217]  モジュール1707において、コンパレータ（全部で８つ）の第１行はそれぞれ、前サイクルの最初の命令の宛先レジスタ・アドレスと現行サイクルの４命令の８つのソースレジスタ・アドレス（バス1721、1723、1735、1727、1731、1733、1735、1737の値）を比較する； 同様にコンパレータの第２行はそれぞれ、前サイクルの第２命令の宛先レジスタ・アドレス（バス1782の値）と現行サイクルの４命令の８ソースレジスタ・アドレスを比較する；コンパレータの第３行はそれぞれ、前サイクルの第３命令の宛先レジスタ・アドレス（バス1783の値）と現行サイクルの４命令の８ソースレジスタ・アドレスを比較する；コンパレータの第４行はそれぞれ、前サイクルの第４命令の宛先レジスタ・アドレス（バス1784の値）と現行サイクルの４命令の８ソースレジスタ・アドレスを比較する。現行サイクルの命令は前サイクルのバイパス結果から、もしくはレジスタファイルから、オペランドを得る。この実施形態において、もしWAWチェックが複数の命令が同じ宛先レジスタ・アドレスを持つことを見いだしたとき、最後のサイクルの最後の命令の実行結果のみが、今サイクルのソースオペランドとしてバイパスされる。
【０１７３】
[218]  例えば、現行サイクルの第１命令のソースレジスタ・アドレス1721は、前サイクルの４宛先レジスタ・アドレスを比較する：1781、1783、1785、1788。比較結果1795はマルチプレクサ1791を制御する。マルチプレクサ1791は５インプットを持ち、そのうち４つは前サイクルの４つの実行結果に接続し、もう１つはレジスタファイルの読み取りポートAに接続する。ソースレジスタ・アドレス1721が宛先レジスタ・アドレス1781と一致するとき、 マルチプレクサ1791は前サイクルの第１命令の実行結果を選ぶ。同様に、もしソースレジスタ・アドレス1721が宛先レジスタ・アドレス1783もしくは1785もしくは1787と一致するなら、マルチプレクサ1791は前サイクルの第２、３、４命令の結果を選ぶ。もしどれも一致しないならば、マルチプレクサ1791はレジスタファイルの読み取りポートAの出力をオペランドとして選ぶ。他の状況は類推によって推し量られうる。
【０１７４】
[219]  従って、本開示の同プロセッサ・システムの本体は同じ構造をもつレーンのマトリックスとして構成できる。各レーンは命令リード・バッファ、実行ユニット、レジスタ・ファイル、データ読み込みバッファ、読み込み／記憶バッファ、を含む。レーンは命令キャッシュとデータキャッシュを共有する。さらに、同プロセッサ・システムは異なる機能を持つプロセッサーとして設定されうる：例えば、単一命令単一データ・プロセッサ（SISD）、単一命令複数データ（SIMD）、複数命令単一データ（MISD）、複数命令複数データ（MIMD）、命令レベル並列プロセッサ（ILP）、あるいはベクタープロセッサ。それはまた、もし適当なスレッド資源が加えられるなら、スレッド・レベル並列プロセッサ（TLP）にもなる。ここでスレッド資源とは、命令やデータや状態を記憶する、重複した命令リード・バッファ、レジスタ・ファイル、データ読み取りバッファ、状態レジスタ、そしてパイプライン・レジスタなどである。以下の記述は４レーンからなるプロセッサ・システムにもとづいている。
【０１７５】
[220]  図１３Aは本開示と整合する例示的なプロセッサ・システムである。同プロセッサ・システムは４つのレーン1811、1813、1815そして1817を含む。同レーンは図１１の実施形態と同様であるが、実行ユニットとロード／記憶ユニット以外に、二つのセットの命令リード・バッファ（IRB）と二つのグループのレジスタ・ファイル（RF）がある。これらのうち、IRB1801、IRB1861、実行ユニット1813、RF1821、RF1831そして読み込み／記憶ユニット1841、全てがレーン1811に対応する；IRB1803、IRB1863、実行ユニット1813、RF1823、RF1833、読み込み／記憶ユニット1843は全てレーン1813に対応する；IRB1805、IRB1865、実行ユニット1815、RF1825、RF1835、読み込み／記憶ユニット1845は全てレーン1815に対応する；IRB1807、IRB1867、実行ユニット1817、RF1827、RF1837、読み込み／記憶バッファ1847は全てレーン1817に対応する；IRB1801、1803、1805、1807、そしてRF1821、1823、1825、1827はスレッドQに対応し、IRB1861、1863、1865、1867そしてRF1831、1833、1835、1837はスレッドRに対応する。従って、４レーンと２スレッドが８つの仮想マシンを構成する。これらの仮想マシンのそれぞれは独立に走ることができる、もしくは複数の仮想マシンが一緒に走ることができる。またレーン間のデータを交換するイントラ・レーン・バスと、マルチレーン恊働オペレーションのためにデータ依存をチェックするデータ依存チェックユニットがある。本例においては、機能が前述されている部分に関しては省略される。
【０１７６】
[221]  IRB、RF、そして読み込み／記憶ユニットからなる前述のレーン構造において、IRBはトラッカーから供給されたトラック・アドレスの指示の下、命令キャッシュから命令ブロックを取ってくる。IRBはまた実行のために、命令を実行ユニットとロード／記憶ユニットへ供給する。命令ユニットは命令をデコードし実行し、オペランドをRFから読み出し、結果をRFヘ記憶する。ロード／記憶ユニットはデータを取りに行き、RFへロードするかもしくはRFからのデータをデータキャッシュへ記憶する。
【０１７７】
[222]  図１３Bは本開示のSISDプロセッサの例である。この例において、各モジュールの構造と機能は図１３Aのそれらと同様である。コラム相関モードの、１つのレーンと１つのセットのスレッド資源だけがSISDオペレーションのために必要とされる。図１３BのIRB1801は自動的に命令を実行のためにレーン1811へ出力する。レーン1811は命令を実行し、RF1821、1831そしてロード／記憶ユニット1841と図１３Aで示された同じ仕方で、恊働する。他の３つのレーンと付随するIRB、RF、ロード／記憶ユニットは全て、例えばクロックを止めるもしくはこれらのモジュールへの電力を断つことで、シャットダウンする。イントラ・レーン・バスとデータ依存チェックは用いられない。単一データがレーン1811に付随するロード／記憶ユニットによって読み取られる。図１３Bのように設定されたプロセッサ・システムはSISDプロセッサとして働ける、通常のシングル発行CPUである。
【０１７８】
[223]  図１３Cは本開示のSIMDの例である。この例において、各モジュールの構造と機能は図１３Aのそれらと同様である。１つのスレッドの資源がSIMDオペレーションに用いられる。１つのトラッカーの指示のもと行相関モードにおいて、４つのIRBが同じ命令ブロックを記憶し、同じ命令を４つのレーンに供給する。各レーンの対応するRFは異なるデータを記憶でき、また各レーンの対応するロード／記憶ユニットは異なるデータアドレスに読み書きできる。このようにして、４つのレーンは、それぞれのデータに対して同じプログラムを実行し、SIMDプロセッサの機能を実現する。イントラ・レーン・バスとデータ依存チェックは用いられない。図１３Cのように設定されたプロセッサ・システムは、SIMDプロセッサ、例えばベクター・プロセッサのように機能できる。
【０１７９】
[224]  本開示のこのプロセッサ・システムはまたスーパーSIMDモードでも機能できる。通常SIMDモードでは複数レーンが同じ命令を同時に実行する。プログラムが分岐を持つとき、既存のSIMDプロセッサの各レーンは分岐決定をおこない、レーンマスクを生成する。そして各レーンはそのレーンマスク値に沿って動作する。最初に、レーンマスク値’0’のレーン（分岐を取らない決定）が非分岐命令を実行し（分岐命令までのフォールスルー命令）、その間レーンマスク値’1’のレーンは止まって待機する。それから、レーンマスク値’1’のレーン（分岐を取る決定）は分岐ターゲット命令を実行し、その間レーンマスク値’0’のレーンは止まって待機する。もし分岐の複数の層（例えば３層分岐）があるなら、プログラムは８回スプリットする必要があり実行効率はたったの12.5%である。これはマルチレーン・プロセッサの効率を減らし、あまり分岐の無い特殊プログラム用にしか使えない。本開示のスーパーSIMDモードは通常SIMDと異なり、複数レーンが同じプログラムを実行するが、各レーンはそれ自身の分岐決定と命令インデクス・メカニズムを持つ。各レーンは同じプログラムの異なるセグメントもしくは異なる分岐を実行することができる。よってプロセッサ・システムは複数分岐を実行するのにまだ100%の効率を持つ。
【０１８０】
[225]  図１３Dは本開示のスーパーSIMDの例である。この例において、各モジュールの構造と機能は図１３Aのそれらと同様である。１つのスレッドの資源がスーパーSIMDオペレーションに用いられる。４つのトラッカーの指示のもとコラム相関モードにおいて、４つのIRBが同じ命令ブロックを記憶し、４つのレーンに命令を供給する。各レーンの対応するRFは異なるデータを記憶でき、また各レーンの対応するロード/記憶ユニットは異なるデータアドレスに読み書きできる。各レーンはそれ自身のデータを処理するから、各レーンの分岐決定を実行するのは、たとえレーンが同じ命令を実行しているときでも、同じではないかもしれず、４つのレーンが分岐ポイントの後のプログラムの異なる分岐を実行することに繋がる。このモードにおいては、各レーンはそれ自身のトラッカーとトークン・パッサーのもと、コラム相関モードにて動作し、プログラムを独立に実行し、よってマスク・レジスタを使ってそれぞれの分岐を交代で実行するSIMDプロセッサよりもずっと効率が良い。イントラ・レーン・バスとデータ依存チェックは用いられない。図１３Dのように設定されたプロセッサ・システムは、高効率のSIMDプロセッサとして機能することができる。
【０１８１】
[226]  図１３Eは本開示のスーパーMISDの例である。この例において、各モジュールの構造と機能は図１３Aのそれらと同様である。４つのトラッカーの指示のもとコラム相関モードにおいて、４つのIRBが異なる命令ブロックを記憶し、異なる命令を４つのレーンに供給する。４つのロード／記憶ユニットのうち１つだけが動き（例えば図１３Eの1841）、その間他の３つはシャットダウンする。1841によって取ってこられたデータは、イントラ・レーン・バスを経て全４レーンのRFにロードするために送られる。全４レーンによって生成された結果データもまたイントラ・レーン・バスを経て1841へ送られデータキャッシュへ記憶される。データ依存チェックは用いられない。４つのレーンのそれぞれが、同じデータソースに対して異なるプログラムを実行し、MISDプロセッサとして機能する。
【０１８２】
[227]  図１３Fは本開示のMIMDの例である。この例において、各モジュールの構造と機能は図１３Aのそれらと同様である。１つもしくは両方のスレッドの資源がMIMDオペレーションに用いられる。４つのトラッカーの指示のもとコラム相関モードにおいて、４つのIRBが異なる命令ブロックを記憶し、異なる命令を４つのレーンに供給する。各レーンの対応するRFは異なるデータを記憶でき、また各レーンの対応するロード/記憶ユニットは異なるデータアドレスに読み書きできる。イントラ・レーン・バスとデータ依存チェックは用いられない。このようにして、４つのレーンはそれぞれのデータに対して互いに独立に異なるプログラムを実施し、MIMDプロセッサの機能を実現する。
【０１８３】
[228]  図１３Gは本開示のILPの例である。この例において、各モジュールの構造と機能は図１３Aのそれらと同様である。１つのトラッカーの指示のもと対角相関モードにおいて、４つのIRBが同じ命令ブロックを記憶し、同じプログラムの連続した命令を４つのレーンに供給する。データ依存チェックが用いられる。もし４つの命令間にデータ依存が無いならば、IRB1801、1803、1805、1807はそれぞれ４命令の第１、第２、第３、第４を出力し、４発行を実現する。もしデータ依存があるならば、依存関係を持つ命令はもう一度次のクロック・サイクルにて発行されなければならない。イントラ・レーン・バスが、各レーンの実行結果を全４レーンのRFへ送るのに用いられる。従って、各実行ユニットは、そのオペランドを共有RFからのそれであるように受け取る。各レーンの対応するロード／記憶ユニットは異なるデータアドレスに読み書きできる。このモードにおいて、マルチレーン・プロセッサはマルチ発行ILPプロセッサとして機能する。
【０１８４】
[229]  図１３Hは本開示のTLPの例である。この例において、２つのセットのスレッド資源QとR、それらに対応する４レーンがあり、全部で８つの仮想マシンを構成する。IRBは命令を、スレッドの待機／実行状態にもとづいて、その対応するレーンに出力し、そしてスレッドに対応するRFがデータを呼び出しまたは記憶するのに用いられる。例えば、レーン1811が、行記憶ユニット1841がデータをデータキャッシュから読み出し、１つのスレッドのもとレジスタ・ファイル1821に記憶するのを、待っているとき、IRB1861は他のスレッドの命令を実行のためにレーン1811へ供給する。前スレッドの中間実行結果はRF1821に記憶されるが、新しいスレッドの結果は1831にあり、レーン1811は各スレッドの命令を正しく実行できる。従ってそれはTLPプロセッサ、例えばGPU、として機能できる。
【０１８５】
[230]  複数スレッドは他の前述のモードと共に共存できる；例えばマルチスレッドSIMDプロセッサ；あるいは１つのスレッドはILPで他のスレッドはSIMD。異なるスレッドは、ストレージ要素を共有しないから、互いに干渉しない。本開示のプロセッサ・システムはマルチスレッド・スーパーSIMDとして設定できる。各レーンが独立の命令フロー制御を持つから、分岐を持ったプログラムを実行するうえで、GPUよりも、ずっど効率が高い。それはマスキングを使ったGPUのように異なる分岐を交代で実行する必要がない。
【０１８６】
[231]  図１３１は本開示の”ソフトワイヤー”の例である。１つのスレッドがこの実施形態で用いられる。異なる命令を含むが恊働している異なるレーンのIRBとIRBは行相関モードのもとにある。代わりに、同じ命令を含む異なるレーンのIRBとIRBは対角相関モードのもとにある。両方のケースにおいて、命令依存チェックはオフにされ、イントラ・レーン・バスは動いている。特別なのは、プログラミングがRead After Write方式で、命令の少なくとも１つのオペランド・レジスタが前の命令の宛先レジスタである。例えば：
【０１８７】
[232]  LD R3 R2 ＃0
【０１８８】
[233]  AND R5 R4 R3
【０１８９】
[234]  MUL R7 R6 R5
【０１９０】
[235]  SD R7R8 ＃0
【０１９１】
[236]  本例において、定数はRFのレジスタR2、R3、R6、R8に記憶される。最初の命令はデータを(R2)+0（例えばストリームデータ）のI/Oアドレスからロードし、オペレーション結果は(R8)+0のI/Oアドレスへ戻され記憶される。この実施形態においては、依存チェックはオフにされているので、４つの命令が同じクロック・サイクル内で発行されうる。しかし各命令のオペランドは実際、前のクロック・サイクルの前の命令によって生成されている。例えばAND命令のオペランドR3は前のクロック・サイクルのLD命令によってロードされている。結果は実行ユニット間のリンクである。IRBのクロックは、実行ユニットとイントラ・バスへのクロックが正常に動いている間、止められる。その結果、各レーンは同じ命令を繰り返し実行し、命令ユニットは命令と共にソフトワイヤーされる。ソフトワイヤーとは、宛先レジスタ・アドレスとオペランド・レジスタ・アドレスとのペアリングとして定義され、イントラ・レーン・バスとバイパス・ロジックによって設定される。データ転送の全てはバスとバイパス・ロジックを通すので、このケースにおいては対応するRFの書き込みは、電力を保存するために、使用禁止にされうる。このソフトワイヤー方式は大規模科学技術計算、例えば高速フーリエ変換（Fast Fourier Transform : FFT）、にとって良い。
【０１９２】
[237]  本記述において、命令ループは、プロセッサの実行効率を向上させるために、並列オペレーションとして展開することができる。プログラムが実行されているとき、通常、直列で実行される命令と並列で実行される命令が交互にある。よくある並列実行はループの形式である。ループは何千回も実行されうる。通常、ループの間に単一もしくは複数の直列命令がある。マルチレーン・プロセッサにおいて、直列命令を実行するために、単一発行において単一のレーンを、もしくはILPモードにおいて複数のレーンを、割り当てることができる；しかし複数のレーンを割り当て 、ループを並列実行のために展開して、実行効率を向上させることができる。
【０１９３】
[238]  この目的のため、命令の新しいタイプ、LOOP命令が定義される。LOOP命令は命令ループの中の複数の反復を展開し、それを複数のレーンへ並列実行のために配り、実行されるループの数を減らして実行時間を短縮する。図１４AはLOOP命令によるレーン分配の例である。LOOP命令は以下のフォーマットを用いる：ループ命令タイプ（LOOP）、共有レジスタ・アドレス（一般reg）、基底レジスタ・アドレス（基底reg）、ステップ長（ストライド）、幅（Width）、深さ（Depth）。これらのうち、LOOPは命令タイプ、一般regはループが共有するパラメータのレジスタ・アドレス（パラメータは反復中に変化しない）、基底regはループにおいて用いられる基底レジスタのアドレス、ストライドは反復毎に変化するパラメータの２つの反復間の違い、Widthはループの数、Depthはループの中の命令の数である。ストライド、Width、Depthは即値の形式でありうる。あるいは、ストライド、Width、Depthの値はRFに記憶され、そしてLOOP命令はLOOP、一般reg、基底reg、そしてストライド、Width、Depthのレジスタ・アドレスのフォーマットを取りうる。またそれは一部のパラメータを即値、一部のパラメータをレジスタというフォーマットで取り得る。複数の異なるストライド、基底reg、一般regがまた、複数のパラメータの反復パターン、複数の基底アドレス、複数の共有パラメータ、を持つ命令ループのために用いられる。
【０１９４】
[239]  以下の命令の例を参照されたい。
【０１９５】
[240]  LOOP R2 R1 ＃-4 ＃256 ＃3
【０１９６】
[241]  LD R3 R1 0 
【０１９７】
[242]  MUL R4 R3 R2
【０１９８】
[243]  SD R4 R1 100
【０１９９】
[244]  ループの意味は前術定義され、R2は一般reg、R1は基底reg、ストライドは-4、Widthは256（ループ数）、Depthは3（ループ命令自体以外に、ループは３命令を持つ）。他の命令の第一コラムは命令タイプで、LDはロード、MULは掛け算；SDは記憶；第二コラムは記憶命令のための宛先レジスタ・アドレスかソース・レジスタ・アドレス；第三コラムは第一ソース・レジスタ・アドレスかロード記憶命令の基底レジスタ・アドレス；第四コラムは第二レジスタ・アドレスか即値である。
【０２００】
[245]  図１４Aは複数レーンの３レーン2100、2101、2102とコントローラ2150を示す。バス2140、2141、2142等はレーン間でデータを移送する。命令はレーンを制御してデータをバスに置く、またはレーンを制御してバスからデータを受け取る。最左レーン2100はLOOP命令を実行する前に命令を直列で実行する（今後このレーンはリード・レーンと呼ばれる）。LOOP命令実行の前はR1の値は1024、R2の値は138である。最大31レーンがこのスレッドのために割り当てられる。レーン番号レジスタ2110、2111、2112、….、があり、各スレッドのための各レーンにレーン番号を記憶する。リード・レーン番号は’0’であり、他の後続するレーンのレーン番号は左から右へ、1、2、3 …である。全てのレーンはレーン番号レジスタに繋がった検出器を持ち、もし’0’が検出されたら、レーンはリード・レーンとして検出される；もし’0’以外の番号が検出されたら、レーンは後続レーンとして検出される。
【０２０１】
[246]  ここで、走っているレーン2100とは別に、 全３１レーンのIRB2120、2121、2122は全て同じ命令を持ち、他のレーンはイネーブラ信号2160の下では動かない。或は、命令はIRB2110の中にのみあり、IRB2111、2112にはない；レーン2100がLOOP命令をデコードするときのみ、またはLOOP命令が先に検出されたとき、IRB2120にある命令と同じものがIRB2111、2112へ充填される。
【０２０２】
[247]  アクティブ・レーン2100のデコーダは、LOOP命令をデコードするときに、マルチレーン実行リクエストを割り当てユニットへ送り、そして命令は図７の前処理プロセッサを用いてレーン割り当てのために前処理される。割り当てユニットは３１のレーンを、リクエスト幅（ここでは256）とこのスレッドに許されたスレッドの最大数にもとづいて、このループを実行するために割り当てる。割り当てユニットは、要求された幅が許されたレーンの最大数よりも小さいならば、丁度充分なだけの数のレーンを割り当てる。この時点で、ループ命令と後続命令は全レーンのIRB2110、2111、2112、…の中にある。
【０２０３】
[248]  ループコントローラ2150はループ命令の実行を制御するのを助ける。2150はマルチプレクサ2152、2155、2163、レジスタ2153、2154、2162、2165、減算器2156、デクリメンタ2164、デコーダ2157、ループ決定ブロック2169から構成される。減算器2156は減算された結果が0より大きいかどうかを検出し、その結果を信号2158として用いてマルチプレクサ2155を制御する。デクリメンタ2164はインプットから’1’を引き、結果をレジスタ2165へ記憶するために送る。それはまた結果が’0’のとき信号2166を検出し送り出す。
デコーダ2157はバイナリ数をレーン・イネーブル信号へデコードする。ループ決定ブロック2169は信号2158と信号2166をインプットとして取り、信号2167と信号2168を生成して命令フローを制御する。デクリメンタ2164とレジスタ2165は、ループ内の命令実行をカウントする、カウンタを形成し、そしてループの終了を示して、レーンにループの始めの実行へジャンプして戻るように信号2166によって指示する。信号2166はまたレジスタ2153と減算器2156に、次のサイクルのカウントに入るよう指示する。レジスタ2165へのクロックはレーンのクロックと同期している。減算器2156とレジスタ2153はサイクル数を数えるカウンタを形成し、ループ・エグジットのタイミングを制御し、さらに最後のサイクルのレーン数を計算する。
【０２０４】
[249]  コントローラ2150はループ命令を検出したときループ・モードに入り、そのデコードと制御ロジックはマルチプレクサ2152を制御し、レジスタ2153はループ命令のWidth2151（この場合256）へラッチする。同時に、スレッドに割り当てられたレーン2170の数（この場合31）は2154にラッチされ、Depth2161が2162にラッチされる。減算器2156はそれからレジスタ2154の値をレジスタ2153の値から差し引き（ここでは、256-31＝=225）、結果が0より大きいことを検出する。検出結果2158はマルチプレクサ2155を制御し、レジスタ2154の値（31）をデコーダ2157へ送る。デコードの後、2157からのバス2160は全レーン（レーン0-31）を有効化する。コントローラ2150はまたLOOP命令の後の最初の命令を分岐ターゲットとしてセットする。サイクル決定ユニット2169は信号2158と2166をインプットとして取り、信号2167と信号2168を生成する。信号2158が減算器2156の結果が0より大きいことを示し、信号2166が減算器2164の結果が0に等しいことを示すとき、信号2167は有効である。ここで2167はレジスタ2153を制御して更新し、命令バッファ2120、2121、2122、…を制御して分岐ターゲットへのジャンプを実行する。他の状況において2167は無効であり、その場合2153を更新せずまた分岐を実行しない。信号2158が減算器2156の結果が0より大きくないことを示し、信号2166が減算器2164の結果が0に等しいことを示すとき、信号2168は有効である。この時点で2168は各レーンとコントローラ2150を制御しループから脱出し、単一もしくは複数レーンにおいてILPフォーマットの直列命令を実行する準備をする。
【０２０５】
[250]  以下の例は前述のLOOP命令の実行を描写する。LOOP命令が実行されるとき、リードレーンはデータを発信し、パッシブレーンはデータを受け取る。リードレーン（レーン0）がLOOP命令をデコードした後、R1（R1[0]）のレジスタ値（1000）が読み出され、データバス2140へ置かれる。デコードしているループ命令に続くレーンはデータバスから（R1[0]）を読み出し、乗算加算操作（R1[n]）= （R1[0]）＋n*ストライド  を実行し、実行結果は対応するレーンのR1レジスタへ書き込まれる。ここで、nはレーン番号レジスタに記憶されているレーン番号で、（R1[n]）はn番目レーンのレジスタ値（レーンの中のR1レジスタ値は左から右へ：1000、996、992、988 …. 880）を表す。レーン0は乗算操作、中間値＝n *ストライド、を行い、その値はレーンの中間レジスタ2130、2131、2132、…. へバス2142を通して記憶される。同時に、ループ命令の一般Reg値R2にもとづいて、参照レーンのR2値（R2[0]）は他の３０レーンのR2にデータバス2141を通して記憶され、値は’138’である。この場合、LOOP命令は実行され、レーンは並列実行サイクルの反復のための準備ができる。
【０２０６】
[251]  全３１レーンが命令LDを実行するとき、各レーンがオフセット値（ここでは0）と基底Reg R1の値をロード・アドレスとして合計し、データをメモリから取りそれらを各R3レジスタへ記憶させる。同時にデクリメンタ2164はレジスタ2162のDepth値（3）を1減らし、そしてレジスタ2165に記憶させる（ここで値は2）。各レーンがMUL命令を実行するとき、各レーンのR3レジスタのデータとレジスタR2の値（138）は掛け合わされ、結果はR4レジスタへ記憶される。同時に、デクリメンタ2164はレジスタ2165の値を減らし、そしてそれをレジスタ2165（値は1に等しい）へ戻す。各レーンがSD命令を実行するとき、R4レジスタの値はメモリへ記憶される。メモリ・アドレスはオフセット（100）と各レーンの基底Reg R1の値（1000、1096、1092、1088、… 980）との合計である。同時にデクリメンタ2164はレジスタ2165の値を1減らす（今は0）。このときデクリメンタ2165は、結果が0であるが減算器2156の結果は0より大きいことを検出し、従って信号2167は有効である。信号2167はIRB2120、2121、2122、… に分岐を実行し、LD命令へポイントする（前は分岐ターゲットセット）よう指示する。同時に信号2167は減算器2156の出力（ここでは225）を制御しマルチプレクサ2152を通してパスし、レジスタ2153を更新する。信号2167はまた各レーンのR1レジスタを制御し、中間値（ここでは-124）を加え、そしてR1へ記憶させる。そして各レーンのR1値はそれぞれ、876、872、868、864、…、756である。このとき、2166の制御のもと、レジスタ2106のDepth（3）はデクリメンタ2164へマルチプレクサ2163を通して送られる。減算器2156の検出結果は0より大きく（225-31=194）、2158によってパスされたマルチプレクサ2155を制御する結果はレジスタ2156の値（31）を選び、それはデコーダ2157によってデコード（0-30有効）され、全３１レーンを次のループを実行するように有効にする。次のループのための準備が今整っている。次のサイクルはLD命令から出発し、オペレーションは前サイクルと同じである。８つのそのようなサイクルが全部で実行される。
【０２０７】
[252]  従って、９番目のサイクルの始めに、レジスタ2153に記憶されている値は8（256-8*31=8）である。減算器2156の結果は-23（8-31=-23）であり、結果検出器2158はこれが0より小さいことを示す；信号制御マルチプレクサ2155はレジスタ2153に記憶されている残りのWidth’8’を選ぶ。これらはデコーダ2157によってレーン0-7のイネーブル信号へデコードされる。９番目のループにおいて、レーン0-7のみがサイクル命令をイネーブル信号のもと実行し、レーン8-30は無効なイネーブル信号の制御のもとにあり動作しない。
【０２０８】
[253]  ９番サイクルの終わりまでに、信号2158（減算器2156の結果、0より小さい）と信号2166（デクリメンタ2164の結果、0に等しい）は一緒に信号2168を有効にし、信号2167を無効にする。有効な信号2168はコントローラ2150をしてサイクル状態から脱出させる。有効な信号2168はまたレジスタ2154を1にリセットし、フォローアップ命令をレーン0にてのみ実行されるように指示する。有効な信号2168はまたレーン7のR1値を制御してレーン0のR1レジスタへ書き戻されるようにする、もしくはレーン0にてオペレーション（R1[0]）＝（R1[0]）＋残りの幅＊ストライド  を実行し、（R1[0]）がサイクル実行の最終状態を反映するようにする。無効シグナル2167は分岐をとらないようIRBを制御し、そしてサイクル後の次の命令がレーン0で正常に実行される。
【０２０９】
[254]  LOOP命令機能は既存の命令を用いて実現できる。そのテクニックは既存の命令ループの中からLOOP命令の鍵となる要素を抽出し、そしてそれらをループ・コントローラ2150へ送る。そして命令ループの中の複数の反復が展開され、並列で実行されループ数を減らす。これは以下のコードと図１４Aによって説明される。
【０２１０】
[255]  Entry: LD R3 R1 0
【０２１１】
[256]  MUL R4 R3 R2
【０２１２】
[257]  SD R4 R1 100
【０２１３】
[258]  SUBS R1 R1 ＃4
【０２１４】
[259]  BNZ Entry
【０２１５】
[260]  この実施形態と前述のLOOP命令例は同じ機能を実現する。ループに入る時点で、前のようにR1値を1024、R2値は138と仮定する。最初にループが実行されるとき、ループ・コントローラ2150はこれがループであることを知らない、よってループの命令は直列で実行される。BNZ命令を実行するとき、検出ロジックは、その命令タイプと負アドレス・オフセットによって、それがバックワード分岐命令であることを判断する。同時にDepth５（アドレス・オフセットの絶対値）が決定される。ロジック検出はまた分岐決定基準をこの命令から抽出する（分岐命令の前の命令の実行結果が’0’か否かによる）。このループの２回目の実行において、検出ロジックはソース・レジスタと宛先レジスタ・アドレスの記録と比較を始め、要素を抽出する。R2はループの宛先レジスタではなく、そしてそれは一般レジスタとして定められる。R1はLD命令とSD命令の基底アドレスであり、基底アドレスとして定められる。SUBSは分岐命令の前の分岐決定を更新する最後の命令で、そのオペレーションは4を引くこと、従ってストライドは-4である。２回目のループの終わりにおいて、ループ・コントローラは、ストライドと各レーン番号にもとづいて、各レーンを制御し、結果を計算してR1レジスタに記憶させる（各レーンのR1レジスタの内容はそれぞれ1016、1012、1008、---、896）。レーン0のR2の内容はレーン1-30のR2レジスタへ記憶される。中間値（31*-4 = -124）はレーン0によって、割り当てられたレーンの数とストライドに応じて計算され、中間値は各レーンの中間レジスタに記憶される。オペレーションの残りは前述されたLOOP命令実施形態と同様である。
【０２１６】
[261]  命令の他のタイプのループ要素、例えば分岐条件の１つが分岐命令によって生成される、もまた抽出されうる。 例えば：
【０２１７】
[262]  Entry: LD R3 R1 0
【０２１８】
[263]  MUL R4 R3 R2
【０２１９】
[264]  SD R4 R1 100
【０２２０】
[265]  SUB R1 R1 ＃4
【０２２１】
[266]  BNZ R1 Entry
【０２２２】
[267]  最初の３命令は前件の例と同様で、SUB命令は引き算のみを実行し、分岐条件を作り出さない。BNZ命令は、R1値を0と比べ、それがNRZの条件を満たすか判断する（もし結果が0でなければジャンプ）。この例において、R1は直列で実行される最初のループの終わりまでに、R1は基底レジスタとして決定される。さらなるオペレーションは前回と同様である。
【０２２３】
[268]  この実施形態において、ループ分岐の終わりは、各自の分岐決定の結果として、各レーンのTAKEN信号によって決定され、サイクル・コントローラ2150の深度コントローラを不必要とする。サイクル・カウンタはここで主に最後のサイクルの有効レーンの数をカウントする。サイクルを脱出するタイミングはサイクル・カウンタを通して制御されうる。もしくは最後のサイクルの最後のレーンのTAKEN信号によっても制御されうる。
【０２２４】
[269]  図１４Bのサイクル・コントローラ2180を参照されたい。構造はコントローラ2150のループ・コントローラと同様であるが、しかしコンバータ2181が追加される。コンバータ2181は基底アドレス2182（並列ループに行くとき、R1値は1024-2*4=1016）を、レジスタ2153にラッチされたWidth2151（値は1016/4=254）へ変換する。コンバータは割り算を実行する（基底アドレス/ストライドのように。それは基底アドレスをストライド量だけシフトすることによって、もしくは基底/ストライドのテーブルをチェックすることによっても得られる）。割り当てられたレーンの数は前と同じくレジスタ2170へラッチされる。加えて、この実施形態の減算器2183は前例のように引き算を実行するが、決定ロジックは、0より大きいという条件だけでなく、命令セットの許可された分岐決定の全てに対して、決定をする。従って命令の分岐タイプ（例えばNRZ）とレーンによって生成された分岐条件もまた決定のために2183へ送られる。もしデコーダ2157の出力が負であれば、バス2160上の出力はレーン0を有効するが他のレーンを無効にする。よってシステムはループの並列実行の準備ができる。
【０２２５】
[270]  ３１レーンのそれぞれが交代で、ループに入るときに、LD命令（ここで各レーンのR1内容は前述のように異なる）、MUL命令、SD命令、SUBS、NRZ命令を実行する。各レーンの分岐決定ロジックはそれ自身の分岐決定を行い、自身のTAKEN信号を送り、信号は各レーン2185、2186、2187、…のANDロジックへ送られる。各レーンの分岐信号の制御のもと（分岐信号はレーンが現在分岐命令を実行していることを示し、分岐が取られるか否かに関わらず、分岐命令を実行しているときは、分岐信号は’1’である。）、中間値-124がR1の内容にに追加され、R1にラッチされもどされる（例えば、オペレーション後の各レーンのR1値はそれぞれ892、888、884、…、772）。同時に’1’分岐信号はレジスタ2153を更新し、よって内容は今223で、減算器／コンパレータ2183の出力は’192’であり、比較出力2184はまだ’1’、コントロール・マルチプレクサ2155はレジスタ2154の内容をデコーダ2157でデコードするために選び、イネーブル信号2160を送って全３１レーンを有効にする。‘1’信号2184は、各レーン2185、2186、2187、…. のANDロジックを有効にし、各レーンのTAKEN信号がそれぞれの分岐決定ロジックからIRB2120、2121、2122、….へ移されるのを可能にする。それぞれのIRBにおいて、トークンは対応するトラック・テーブルによって指定された分岐ターゲットへパスされ、ループの最初のLD命令を２回目において、実行し始める。
【０２２６】
[271]  ９回目のサイクルの始めにおいて、レジスタ2153の値は6（254-8*31=6）で、減算器2183の結果は-25（6-31=-25）、結果は0より小さいと検出される；信号2184は’0’でマルチプレクサ2155を制御して、デコーダ2157によってデコードされた、レジスタ2153に記憶された残りのWidth8を選び、結果として生じたイネーブル信号がレーン0-5を有効にする。９回目のループにおいて、レーン0からレーン5のみがループ命令を実行し、レーン6-30は有効にされていないので動作しない。
【０２２７】
[272]  ９回目のループの終わりにおいて、’0’信号2184は各レーン2185、2186、2187、…. のANDロジックの出力が’0’になるようにし、IRBを制御して分岐しないようにする、しかしループの外の命令（BNZの後の命令）の実行を開始し、コントローラ2180がループ状態を抜け出すようにする。レジスタ2154は’1’にリセットされ、後続する命令がレーン0でのみ実行されるよう指示し、レーン5のR1値をレーン0のR1レジスタへ書き戻す。かわりにレーン0は掛け算／足し算操作 (R1[0]) = (R1[0]) + 残りの幅*ストライド  を実行し、(R1[0])はループ実行の最後における状態を反映する。信号2184が’0’であるとき、分岐信号はプロセッサが、最後の有効レーン（2157のインプットで決定される、ここではレーン5）の基底アドレスR1の内容(R1[5])を転送し、レーン0のR1へ記憶（R1[0]）するようにする。
【０２２８】
[273]  各チャンネルに既存の分岐決定ロジックを用いて、サイクル数に応じて決定するのではなく、サイクルを制御することが可能である。図１４Cにおいて、サイクルの最後（最右）のレーンからのTAKEN信号を選ぶマルチプレクサ2155の出力2190を、制御信号2184として用いて、ANDゲート2185、2186、2187、…. を制御してTAKEN信号を有効にする。この実施形態において、出力2190は最初の８サイクルにおいて’31’である。これはレーン30のTAKEN信号を選んで、前述のANDロジックを制御する2084とする。８サイクルの全てにおいて、レーン30の分岐決定は全て’分岐を取る’で、従ってレーン30のTAKEN信号は’1’であり、それはバス2184に置かれ、各レーンが分岐を取り次のサイクルに入るように制御する。９回目サイクルにおいて、2090の値は’6’で、レーン5のTAKEN値は信号2184へパスされるように選ばれる。９回目サイクルの終わりにおいて、レーン0-4のTAKEN値は’1’で、しかしレーン5のTAKEN値は’0’である。レーン5のTAKEN値は信号2184へパスされ、各IRB2120、2121、2122、….全てがBNZの後の命令を出力しループを抜けるようにする。信号2184はまたR1[5]値をR1[0]に入れるのを制御する。この実施形態においては、サイクル・コントローラ2180の主な機能は、必要とされるレーンにおいて実行を制御しているサイクルのために割り当てられた数を提供することである（サイクルの終わりにおいて不必要なレーンの実行をストップし、誤データを生み出すのを防止する）；もう一方で、それはまたサイクルの最後のレーンのトークン信号をサイクル・コントロール（最後のレーンの分岐決定は正しい決定である）として選ぶ。
【０２２９】
[274]  実装の他の方法としては、基底アドレス値2181をサイクルの始めにおいてレジスタ2153へ記憶し（割り算やシフトやテーブルチェックを必要としない）、レーンの割り当て数2170をストライドによって掛け算し結果を2154へ記憶させる、ことができる。最後の例においては、数254（基底アドレス／ストライド＝幅）-31（割り当てられたレーン数）である。この例においては、1016（基底アドレス）- 124（割り当てられたレーン数＊ストライド ＝中間値）である。この操作の結果は調整される必要がある。この例においては、信号2190の値は前例のそれと比較され、’ストライド’倍大きく、よってコンバータがメモリ2155の出力ポートへ追加される必要があり、コンバータはマルチプレクサ2155の出力を’ストライド’で割ったものを選んで2190を生成する。コンバータはテーブルもしくはシフト操作として実装されうる。
【０２３０】
[275]  前に述べられたように、ループ命令と通常のバックワード分岐命令は交換できる。通常の分岐命令の利点はソフトウェア互換性で、ループ命令の利点はより高い実行効率である。以下の実施形態はループ命令を用いるが、しかし通常の分岐命令の組み合わせによって代替されうる。  
【０２３１】
[276]  もしループ命令のストライドが’0’なら、それは各レーンが同じデータを記憶するようにする。それはレーン・プロセッサが動作モードをスイッチする、例えばSIMD、MISD、MIMD間をスイッチする、ことを可能にする。MISDを例にとると、以下の命令はこのプログラムの最初に位置する。ループ命令はオペレーション・タイプ、一般Reg、基底Reg、ストライド、幅、深さ、のフォーマットを持つ。
【０２３２】
[277]  LOOP R2 R1 ＃-4 ＃3 ＃3 
【０２３３】
[278]  LD R3 R1 0
【０２３４】
[279]  LD R11 R1 66
【０２３５】
[280]  LD R12 R1 66
【０２３６】
[281]  ループ命令を実行する前、R1値は前の命令によって1024にセットされ、R2値は138にセットされ、R4値は621、R5値は2148である。ループ命令を実行するとき、割り当てユニットはLOOP命令の要求に応じて３レーン；レーン0、1、2を割り当てる。各レーンのR1値は（前例と同様）それぞれ1024、1021、1016である。最初のLD命令を実行するとき、  各レーンは(R1)+0（オフセット）にもとづいて各自のデータを取りに行き、３片のデータが各レーンのR3レジスタに置かれる。最初のLD命令の実行後、(R3[0])=1、(R3[1])=0、(R3[2])=-1。第二、第三のLD命令も実行され、異なるデータが３レーンのR11とR12レジスタに記憶される。幅が３であるから、３つのレーンがあり、プログラムは第三LD命令に辿り着いたときループを脱出し、それから次の命令の実行を続ける：
【０２３７】
[282]  LOOP R4 R5 ＃-0 ＃3 ＃256
【０２３８】
[283]  LD R7 R5 0
【０２３９】
[284]  LD R8 R5 82
【０２４０】
[285]  LD R9 R5 116
【０２４１】
[286]  ……
【０２４２】
[287]  ループ命令のこのセグメントにおいて、ストライドが0であるから、３レーンの基底R5は同じ値（2148）である。従って、最初のLD命令を実行するとき、全３レーンは全て同じメモリ・アドレス2148からデータをロードし、各レーンのR7へデータを記憶する。第二LD命令を実行するとき、全３レーンは全て同じメモリ・アドレス2230からデータをロードし、各レーンのR8へデータを記憶する。それから、以下の分岐命令が実行される（レーンはまだサイクル状態にあることに注意）。
【０２４３】
[288]  BGT R3 entry0
【０２４４】
[289]  BEQ R3 entry1
【０２４５】
[290]  BLT R3 entry2
【０２４６】
[291]  Entry0: MUL R21 R7 R2
【０２４７】
[292]  ……
【０２４８】
[293]  SD R21 R1 500
【０２４９】
[294]  NOP
【０２５０】
[295]  Entry1: AND R21 R7 R8
【０２５１】
[296]  ……….
【０２５２】
[297]  SD R21 R1 500
【０２５３】
[298]  NOP
【０２５４】
[299]  Entry2: SUB R21 R7 R9
【０２５５】
[300]  ………
【０２５６】
[301]  SD R21 R1 500
【０２５７】
[302]  NOP
【０２５８】
[303]  本記述において、BGT命令の意味は、レジスタR3値が0より大きいとき、エントリ0へ分岐するということ；BEQ命令の意味は、レジスタR3値が0に等しいとき、エントリ1へ分岐するということ；BLT命令の意味は、レジスタR3値が0より小さいとき、エントリ2へ分岐するということ。３レーンのR3値は同じではないから、レーン0はエントリ0コードを実行し、レーン1はエントリ1のコードを実行し、レーン2はエントリ2のコードを実行する。同じデータ、例えばR7、R8、R9のデータに対して、各レーンは異なる操作を実行し、結果をそれぞれのメモリ・アドレスに書き戻す。このようにして、MISDプログラムを、直列プログラムとして普通に始まりしかしMISDモードで実行する１つのプログラムとして、書くことができる。
【０２５９】
[304]  同じ命令しかし異なるパラメータを持ったMISDに対して、非ゼロ・ストライドを持ったLOOP命令が各レーンに異なるパラメータを読み込むのに用いられる；それからゼロ・ストライドのLOOP命令が同じデータをレーンに読み込むために用いられる。それから、同じオペレーションを同じデータに対して、異なるパラメータにおいて実行し、結果は異なるメモリ・アドレスに記憶される。例えば
【０２６０】
[305]  LOOP R2 R1 ＃-4 ＃16 ＃3
【０２６１】
[306]  LD R3 R1 0
【０２６２】
[307]  LD R11 R1 66   
【０２６３】
[308]  LD R12 R1 78
【０２６４】
[309]  LOOP R4 R5 ＃-0 ＃16 ＃256
【０２６５】
[310]  LD R7 R5 0
【０２６６】
[311]  LD R8 R5 82
【０２６７】
[312]  LD R9 R5 116
【０２６８】
[313]  MUL R21 R7 R11
【０２６９】
[314]  ADD R21 R21 R12
【０２７０】
[315]  SD R21 R5 56
【０２７１】
[316]  ……
【０２７２】
[317]  ここで、最初の非ゼロ・ストライドを持ったLOOP命令は異なる基底アドレスとパラメータを各レーンに読み込む。第二LOOP命令は同じデータもしくは一般パラメータを読み込む。オペレーションは同じデータに対して、同じまたは異なるパラメータにおいて並列に実行される。各レーンの結果は異なるメモリ・アドレスに記憶される。まとめると、 各レーンが異なるパラメータもしくはデータを必要とするとき非ゼロ・ストライドLOOP命令を用いて、各レーンが同じパラメータもしくはデータを必要とするときはゼロ・ストライドLOOP命令を用いる。
【０２７３】
[318]  本開示のマルチレーン・プロセッサは複数のモードで動作でき、テーブル1がそれらの幾つかをまとめている。テーブルの各行はモードを表し、各コラムは鍵となるパラメータの幾つかの設定を表す。テーブルの中で、全部で１１のモードがあり、これらのうちSISDは単一命令ストリーム、単一データ・ストリームのモードであり、SIMDは単一命令ストリーム、複数データストリームのモードであり、このモードにおけるマルチレーン・プロセッサはベクター・プロセッサ・オペレーションをエミュレートすることができる；スーパーSIMDは本開示の独自のオペレーションモデルであり、オペレーションはほぼSIMDのそれと同じであるが、各レーンは同じプログラムの異なる命令を実行できる；MISDは複数命令ストリーム、単一データ・ストリームのモードである；MIMDは複数命令ストリーム、複数データ・ストリームのモードである；ILPは命令レベル並列モードである；SWLはソフトウェア・ワイヤード・ロジック・モードである；LOOPは複数レーン・プロセッサがLOOP命令を実行するときのモードである；STLPは単一レーン複数スレッド・オペレーション・モードである；MTLPは複数レーン複数スレッド・オペレーション・モードであり、これらのモードの複数レーン・プロセッサはGPU操作をエミュレートすることができる；SMTは同時複数スレッドモードで、それはモードのミックスであり、マルチレーン・プロセッサは通常このモードで走る。
【０２７４】
[319]  テーブルは全部で８つの設定パラメータのコラムをもつ。これらのうち、スレッド・コラムは特定モードにおいて要求される最小スレッド資源のことを意味し、このコラムのパラメータは’単一’スレッドか’複数’スレッドかである。プログラム・コラムは異なるレーンが同じプログラムを実行するかを示し、設定は’同じ’もしくは’異なる’である。IRBコラムは異なるレーンの命令リード・バッファ間の相関関係を示し、’コラム’設定は各レーンのIRBは全てリードコラムであり、各自のトラッカーのもと独立に動くことを示す；’行’とはモードが１つのリードコラムを持ち、少なくとも１つの後追いコラムをもち、リードコラムはトラッカーのもと独立に動き、後追いコラムはリードコラムに従い、そして後追いコラムとリードコラムから出力された命令は同じプログラムの全く同じ命令であることを表す；’対角’はモードが１つのリードコラムと少なくとも１つの後追いコラムを持ち、リードコラムはそのトラッカーのもと独立に動き、後追いコラムはリードコラムに従い、そして後追いコラムの命令はリードコラムの命令に続く命令であることを表す。RFコラムは、同じスレッドの異なるレーンのRFが同じデータを持つかを表し、’同じ’もしくは’異なる’に設定される。イントラ・レーン・バス・コラムはバスがレーン間データ交換に用いられるか否かを表し、’Yes’もしくは’No’に設定される。データコラムは、異なるレーンのリード／記憶ユニットからのデータが同じか否かを表し、’同じ’もしくは’異なる’に設定される。
【０２７５】
[320]  テーブル1:11はマルチレーン・プロセッサの作業モードである。
【表１】
0006467743.tif 000002
【０２７６】
[321]  さらに、もし開示と整合する型でもっと多くのレーンがプロセッサ・システムにある場合、レーンはグループに分割されうる。これらのグループのそれぞれは１つの特定のプロセッサ構造に設定され、そして全てのこれらのグループは同時に動作する。本記述においは、異なるレーン間さらに同じレーンの異なるスレッド間で、異なるプロセッサモードに設定し動作させることが可能である。割り当てユニットは、プログラムのあらかじめ決められた優先順位とプログラムの資源に対する必要度に応じて、動的にレーンと資源を割り当て、資源を有効に使う。これは同時に上テーブルの同時マルチスレッド・モード（SMT）である。図１５Aは開示された実施形態と整合する例示的な、プロセッサ・システムにおけるレーンの動的設定である。説明の簡明のため、図１５はトラック・テーブル1901、命令キャッシュ1903、データキャッシュ1905、１６レーン、そして対応する１６トラッカーのみを表示する。
【０２７７】
[322]  この実施形態において、各レーンは４スレッドをサポートする。よって４スレッドをスイッチすることによって実行される命令をスイッチすることが可能である。しかし、１つのスレッドだけが一度につき実行されうる。従って、IRB、RF、DRBはすべて４つの同一の部品を持ち、それぞれ４つのスレッドに対応する。特に、レーン1941を例にとると、これは１つの実行ユニット1909しか持たない。しかし、IRB1911、RF1921、DRB1931はスレッドQに対応し、IRB1913、RF1923、DRB1933はスレッドRに対応し、IRB1915、RF1925、DRB1935はスレッドSに対応し、IRB1917、RF1927、DRB1937はスレッドTに対応する。従ってプログラムは各レーンの各スレッドに割り当てられ、プロセッサ・システムの実行効率を、優先順位とプログラムの並列処理度合いに応じて向上させる。
【０２７８】
[323]  例えば、実行されるべき１０のプログラムがあり、優先順位に応じて高い方からリストする：プログラムA、B、C、D、E、F、G、H、I、そしてJ。一般的に、より多くの計算資源（レーン）がより高い優先順位のプログラムに割り当てられる。加えて、より高い並列処理の度合いを持つプログラムへより多くのレーンが割り当てられる。並列処理とは、ここでは、同時に実行されうる連続した命令群、もしくは並列実行可能な命令（例えばループ命令）へ分割可能な命令、のこと。図１５Bは、各レーンにプログラムを割り当てる割り当てユニットの、スレッド資源割り当てテーブルの例である。
【０２７９】
[324]  ここで割り当てユニットは、スレッド資源を異なるプログラムへ、スレッド資源、割り当てテーブル、プログラムの現在の資源に対する必要度、プログラムの準備状態（例えばデータが使えるか）、に応じて動的に割り当てる。この例において、プログラムAの優先度が一番高いので、1941から1956のQスレッドの１６レーンが全てプログラムAへ割り当てられる。プログラムBはプログラムAに次ぐ優先度しかないので、1945から1956のRスレッドの１２レーンがプログラムBのために割り当てられる。この例において、プログラムCはスレッドSのレーン1949から1952を占め、プログラムDはスレッドSのレーン1953から1954を占め、プログラムEはスレッドSのレーン1955から1956を占める。プログラムFはスレッドTのレーン1949から1950、プログラムGはスレッドTのレーン1951から1952、プログラムHはスレッドTのレーン1953から1954、プログラムIはスレッドTのレーン1955、プログラムJはスレッドTのレーン1956へ、1961に示されるように割り当てられる。各レーンのスレッド資源、例えばIRB、RF、DRBはスレッド資源テーブルにもとづいて配分される。
【０２８０】
[325]  スレッド資源割り当てテーブルは現在実行されているプログラムの数と同じ行数を持ち（この例では、プログラムAからJのために１０行1990-1999）、各行は対応するプログラムのスレッド番号、リードコラムの位置そしてプログラムに割り当てられたレーンの位置を記憶する。このテーブルは全部で３つのコラムを持つ。１つのコラム1960は各プログラムの識別記号を記録する。コラム1961は各プログラムのリードコラムのスレッド番号と開始レーン番号を記録する。もう１つのコラム1962は、各行が１６ビットバイナリ数で、コラム1961で示されたスレッドにおいて表されるプログラムのための、利用可能な行の位置を表す。‘1’はビットに対応するレーンをプログラムが使う権利があることを表し、’0’はプログラムがビットに対応するレーンを使う権利がないことを表す。この例において、リードコラムは利用可能レーンに位置する。例えば、1990行、1961コラムのテーブル・エントリはQ0で、プログラム（この例ではプログラムA）がスレッドQの資源を使い、リードコラムがレーン0から始まる利用可能レーンにあることを表す。行1990、コラム1962のテーブル・エントリの１６ビットバイナリ数は’1111111111111111’である。コラム1961と1962の組み合わせは、この行によって表されたプログラムがQスレッドの全てのレーンを使え、リードレーンがこれらのレーンのいずれか１つにでも置かれうることを意味する。もう１つの例は、行1991コラム1961においてエントリがR4、コラム1962エントリが’0000111111111111’ で、プログラム（ここではプログラムB）がRスレッドのレーン4-15を使え、リードコラムが同レーン4-15のいずれか１つにでも置かれうることを表す。別の例では、行1992コラム1961においてエントリがS8で、1962エントリは’0000000011110000’で、プログラム（ここではプログラムC）がSスレッドのレーン8-11を使え、リードコラムが同レーン8-11のいずれか１つにでも置かれうることを表す。残りも類推によって理解されうる。記述の簡明のため、以下の説明においては、リードコラムは同利用可能レーンの最初のレーンに位置するもの、例えばQ0はリードコラムがレーン0にあることを表し、R4はリードコラムがレーン4にあること、S8 はリードコラムがレーン8にあることを表す、と仮定する。他の同様のテクニックもまた利用されうる。
【０２８１】
[326]  全てのクロックサイクルにおいて、コラム1961のデータは全レーンのIRBへ送られ、それらは1961のデータを用いて実行の前にリードコラムの命令を取り、デコードした後、デマンド・フィードバック信号を送り返す。デマンド・フィードバック信号も１６ビットバイナリ数で、その値は以下の意味を持つ：’0000000000000000’はプログラムが２クロックサイクル後にスレッド資源を必要としない（ここで命令は２サイクル前にプレデコードされると仮定する）、データが利用可能でない、などを表す；’1111000000000000’は正常な命令とデータが用意できていることを表す；’1111100000000000’〜’1111111111111111’はワイドな命令を表し（例えばループ命令のように）、バイナリ数は実行に必要なレーンを、最左レーン（リードレーン）から始まって表し、もし１６レーン以上必要とされる場合は’1111111111111111’を送り返す。スレッド資源割り当てテーブルへ送り返されたデマンド・フィードバック信号と、テーブルの対応する行のエントリにおいてオペレーションが実行される。オペレーションはデマンド・フィードバック信号をコラム1961の量だけ右シフトさせ、シフト結果は対応する行のコラム1962値とともにAND操作される。例えば、行1990のデマンド・フィードバック信号は、0ビットロジック右シフト後（コラム1961はQ0）、’1111000000000000’ で、コラム1962の値とAND操作され、中間結果1980、その値は’1111000000000000’を得る。行1991のデマンド・フィードバック信号は、４ビットロジック右シフトの後（コラム1961のテーブル・アイテムはR4）、’1111000000000000’で、コラム1962の値とともにAND操作され、中間結果1981は’0000111100000000’である。行1992のデマンド・フィードバック信号は、８ビットロジック右シフトの後（1981のテーブル・アイテムはS8）、コラム1962の値とともにAND操作され、中間結果1982は’0000000011110000’である。意味するところは、プログラムCにおいてループ命令が先読みされ、１６レーンをリクエストし、しかしプログラムCの優先度は４レーンしか許可せず、よって４レーンだけ割り当てられたということ。行1993のデマンド・フィードバック信号は、１２ビットロジック右シフト後（1961のテーブルアイテムはS12）、’0000000000000000’で、プログラムDのデータが利用可能でないことを意味し、コラム1962の値とともにAND操作され、中間結果1983は’0000000000000000’である。行1994のデマンド・フィードバック信号は、１４ビットロジック右シフト後（1961のアイテムの値はS14）、’1111000000000000’で、コラム1962値とのAND操作の後、中間結果1982は’0000000000000011’である。行1997のデマンド・フィードバック信号は、１２ビットロジック右シフト後（コラム1961のアイテムの値はT12）、’1111000000000000’ で、コラム1962値とのAND操作の後、中間結果1987は’0000000000001100’である。プログラムF、G、I、Jに対するオペレーションも同様で、ここでは繰り返さない。
【０２８２】
[327]  同中間結果に対するさらなるオペレーションは２次元スレッド・レーン割り当て値へ導き、それは各レーンのスレッド資源を制御する。行1990、コラム1960の’Q’を使って1980の中間値’1111000000000000’の’1’を交換し、結果は割り当て値’QQQQ------------’である。ここで’-‘はレーンがまだ割り当てられていないことを表す。そして1980行の値が反転されマスキング信号’0000111111111111’ を生成し、それは1981行の値とAND操作され’0000111100000000’になる。この値を用いて割り当て値’----RRRR--------’を前のように得る。この値を反転し’1111000011111111’を得て、行1980からのマスキング信号とAND操作され、新しいマスキング信号’0000000011111111’を得る。この新しいマスクは中間値1982へ適用され、割り当て値’--------SSSS----’を得る。それから他の新しいマスク’0000000000001111’が前と同じ方法を用いて生成される。行1983への操作の結果は割り当て値’----------------’で、新しいマスキング信号は、プログラムDが資源をリクエストせず、よってレーンが割り当てられていないので、まだ’0000000000001111’である。そして新しいマスキング信号と行1984値をAND操作し、割り当て値’------------SS’を得て、新しいマスキング信号は’0000000000001100’になる。それから、マスキング信号を行1985と行1986の値に適用して、二つのプログラムの割り当てられたレーンは両方とも優先度のより高いプログラムに取られるから、両方とも”----------------”を得る。そしてマスキング信号を行1987値とAND操作し、割り当て値’------------TT--’を得る。新しいマスキング信号’0000000000000000’が前と同じ方法を用いて生成される。この時点で全てのレーンは割り当てられる。割り当て値とマスキングを生成するプロセスはここで省略する。
【０２８３】
[328]  上記の全ての割り当て値にOR操作をすることで、最終割り当て値1971 ’QQQQRRRRSSSSTTSS’を得る。この値は各レーンに送られ、そのオペレーションを指示する。指定のクロック・サイクルにおいて、レーンはこのスレッド割り当ての下に動作し、以下のプログラム’AAAABBBBCCCCHHEE’のために効率良くオペレーションを実行する。
【０２８４】
[329]  もし次のクロック・サイクルにおいて、プログラムA、C、D、E、F、G、H、I、Jの要求が変化せず、しかしプログラムBがループ命令をプレデコードした場合、行1991のデマンド・フィードバック信号を’1111111111111111’にする。４ビットロジック右シフト（コラム1961のテーブルアイテムはR4である）の後、コラム1962値とAND操作し、中間値1984は’0000111111111111’である。同中間結果に対するさらなるオペレーションは２次元スレッドレーン割り当て値に導かれ、それは各レーンのスレッド資源を制御する。図１５Cを参照されたい。行1980の値は’1111000000000000’で、割り当て値の結果は’QQQQ------------’になり、行1980の値の反転値を取りマスキング値’0000111111111111’を得る。この値と行1981値をAND操作し、’0000111111111111’を得る。この値を用いて割り当て値’----RRRRRRRRRRRR’を前と同じように得る。この値を反転し’1111000000000000’を得て、行1980のマスキング信号とAND操作し、新しいマスキング信号’0000000000000000’を得る。この時点で、全てのレーンは割り当てられる。新しいマスキング信号はこの時点以降の他のプログラムの資源リクエストをマスクする。他のC、D、E、F、G、H、I、J、Kのデマンド・フィードバック信号は割り当て結果に影響しない。それから全ての同割り当て値に対してOR操作を実行し、最終割り当て値1972 ’QQQQRRRRRRRRRRRR’を得る。この値は各レーンに送られ、そのオペレーションを指示する。指定されたクロック・サイクルにおいて、レーンはこのスレッド割り当てのもと動作し、プログラム’AAAABBBBBBBBBBBB’のために効率良くオペレーションを実行する。
【０２８５】
[330]  このような割り当ての結果は、レーン1941、1942、1943、1944がスレッドQのプログラムAへ割り当てられ、これら４レーンにおいてはスレッド・スイッチングはなく、常にプログラムAを実行することである。プログラム実行の間、プログラムAの並列処理度合いが４よりも大きいとき、もっと多くのレーンがプログラムAのためにスレッドQに割り当てられうる（最大１６スレッド）。レーン1945、1946、1947、1948がプログラムAによって使われないとき、これら４レーンはもっぱらプログラムBによって使われる。これら４レーンは、プログラムAが４レーン以上必要としない間、プログラムBの命令を実行し続けられる。図１５Cに示されるように、レーン1941、1942、1943、1944はもっぱらプログラムAによって用いられるから、従ってプログラムBは最大１２レーンを用いることができる。
【０２８６】
[331]  他の８プログラムの優先度は低いから、これらはどのレーンをも排他的に使わない。同様に、図１５Bの1965のレーン割り当て状況に示されるように、プログラムAとプログラムBが共にレーン1949、1950、1951、1952の１つもしくは複数を必要としないとき、これらのレーンはSスレッドのプログラムCへ割り当てられうる；プログラムAとプログラムBが共にレーン1953もしくは1954を使う必要がないとき、これらのレーンはSスレッドのプログラムDへ割り当てられうる；プログラムAとプログラムBが共にレーン1955もしくは1956を使う必要がないとき、これらのレーンはSスレッドのプログラムEへ割り当てられうる。
【０２８７】
[332]  割り当てユニットはスレッド資源を異なるプログラムへ、スレッド資源割り当てテーブル、資源への要求、そして各プログラムの準備状態にもとづいて、動的に割り当てる。
【０２８８】
[333]  本記述においては、同期制御が異なるレーンにおいて実行される命令に適用されうる。図１６は本開示の構造におけるプロセッサの命令の同期化の実施形態を示す。この実施形態においては、例としてプロセッサの２レーンを使い２つの異なる命令を同時に実行する。これらのうち、IRB2005、実行ユニット2007、RF2009、データリード・バッファ2011、ロード／記憶ユニット2013そしてデータ書き込みバッファ2015が最初のレーン2031に対応し、IRB2017、実行ユニット2019、RF2021、データリードバッファ2023、ロード／記憶ユニット2025そしてデータ書き込みバッファ2027が第二レーン2033に対応する。加えて、命令キャッシュ2001とデータキャッシュ2003はこれらのレーン両方によって共有される。
【０２８９】
[334]  この実施形態において、トラック・テーブル2035をインデックスする二つのトラッカーがあり、トラッカー2037はレーン2031と恊働しトラッカー2039はレーン2033と恊働する。これら二つのトラッカーの機能と構造は同一である。トラッカー2037を例として取り上げると、通常のインクリメンタ2041、レジスタ2043、マルチプレクサ2045以外に、さらに追加的なロックレジスタ2047、アンロックFIFO2049、送信ゲート2051そしてANDゲート2053を含む。命令同期のためにロックとアンロック操作を行なうとき、ロックレジスタ2047はアドレス情報（例えばトラック・ポイント位置 BN）を記憶し、それはロックに使われる。またアンロックFIFO2049はアドレス情報（例えばトラック・ポイント位置 BN）を記憶し、それはアンロックに使われる。アンロックFIFO2049とロックレジスタ2047の命令情報が同じであるとき、アンロックが起こる。同じアドレスを持った同じ命令は、もし２つのレーンが同じプログラムを実行するなら、ロックになりうる。両方のプログラムが呼び出すサブルーチンは、もし２つのレーンが異なるプログラムを実行するなら、ロックになりうる。このサブルーチンを呼ぶには、ロックとアンロックの、２つの方法がある。
【０２９０】
[335]  特にレーン2031とレーン2033が実行している命令を同期するのにシーケンシャル・ロックが必要とされる。つまりレーン2033は命令Bを実行する前に、レーン2031が命令Aを実行し終わるまで待つ必要があり、トラッカー2037の送信ゲート2051を有効にしてバス2071のアンロックFIFO2049の内容を駆り、そしてトラッカー2039のコンパレータ2073をセットしてバス2071のアドレス情報をモニターすし、３インプット・マルチプレクサ2075がコンパレータ2073の出力をANDゲート2063のインプットとする。この実施形態において、ロックとアンロック命令は分岐命令に似た命令として定義され、スキャナが命令のこのタイプをスキャンしたとき、それは分岐ポイントとして取り扱われトラック・テーブルへ記憶される。
【０２９１】
[336]  レーン2033のトッラカー2039はロックされた命令の分岐ポイントを読み出すとき、分岐命令に出会ったときと同じように振る舞い、命令アドレスのところで止まり、分岐決定を待つ。ここでデコーディングはこれがロック命令であることを示し、命令のアドレスはレジスタ2057へラッチされる（命令自身をデコードできるが、スキャンの途中でスキャナによって生成され、トラック・テーブルの中の命令に対応するテーブル・エントリに記憶された、ロックタイプでもあり得る。トラッカーはこの特殊タイプをデコードするデコーダを持つ）。このとき、コンパレータ2073はロックレジスタ2057の中のアドレスを照合しておらず、マルチプレクサ2075を通して’不一致’信号とフィードバックをANDゲート2063へ送り、トラッカーのポインタ・レジスタ2067の更新を防ぎ、トラッカー・アドレス・ポインタ2039の動きを止める。この信号はまたレーン2033の命令の実行も止める。
レーン2033と対応するトラッカー2039はロック状態に入る。
【０２９２】
[337]  レーン2031のトラッカー2037がアンロック命令の分岐ポイントをトラック・テーブルから読み出すとき、それは分岐命令を読み出すのと同じように振る舞い、命令のアドレスで止まり、分決定結果を待つ。ここでデコーダはこれがアンロック命令であることを示す。それにもとづいて、命令のアドレスはFIFO2049へ記憶され、また送信ゲート2051へバス2071を通して置かれる。同時にトラッカー2037は’分岐が取られなかった’信号を生成し、レーン2031とトラッカー2037が後続するコードを実行し続けるようにする。このとき、コンパレータ2073の’一致’結果がANDゲートへ３インプットマルチプレクサ2075を経て送られ、トラッカーとレーン2033が実行を再開するようにする。レーン2033と対応するトラッカー2039はアンロック状態に入る。アンロック状態のトラッカー2039はロックレジスタ2057とアンロックFIFO2049をリセットする。
【０２９３】
[338]  上記の例において、もしレーン2031がアンロック命令を最初に実行すると、アンロック・アドレスはFIFO2049へ記憶され、バス2071へ送信ゲート2051を経て置かれ、レーン2031とトラッカー2037は後続コードを実行し続ける。もし他のアンロック命令が実行中に実行されたなら、新しいアンロック命令はまたFIFO2049に記憶される。トラッカー2039がロック命令のアドレスをレジスタ2057へラッチするとき、コンパレータ2073の照合一致結果は、レーン2033と2039がロック状態に行かないようにし、しかし後続命令を実行し続けるようにする。
【０２９４】
[339]  トークン・パッシングは、トークンが対応するIRB2017の命令Bに対応するトークン・パッサーへパスされるときに休止される。実行ユニット2019が命令Bを受けた後に実行を休止した後、それは信号2605をトラッカー2039のANDゲート2063へ出力し、ANDゲート2063にレジスタ2067の更新を休止させ、よってリード・ポインタ2055の更新を休止する。
【０２９５】
[340]  同時に、レーン2031は命令実行を続け、命令Aの実行に近づくとき、該当するトラック・ポイントの位置情報をアンロック・レジスタ・グループ2049へ書き込む。アンロック・レジスタ・グループ2049の構造はFIFO構造である。
【０２９６】
[341]  例えば、命令Aのトラック・ポイント情報はアンロックFIFO2049に命令Aの前の特別命令によって書き込まれる。このケースにおいて2049の深さは命令Aから同特別命令までの命令数に等しい。
【０２９７】
[342]  別の例では、トラッカー2037のリード・ポインタ2053は、命令実行とともに、対応するトラックに沿って動き、リード・ポインタの値（トラック・ポイントの位置データ）をアンロックFIFO2049へ書き込む。ここで、アンロックFIFO2049の深さは、トラッカー2037のリード・ポインタ2053が命令Aにポイントするのとレーン2031が同じ命令を実行することの間の時間遅延に対応する。
【０２９８】
[343]  このようにして、リード ・ポインタ2053が命令Aに対応するトラック・ポイントのポイントするとき、命令Aの対応するトラック・ポイント位置データはアンロックFIFO2049の対応する最初のレジスタに書き込まれる。その後トラック・ポイント位置はアンロックFIFO2049の各レジスタを通して逐次送信される。トラック・ポイントの位置がアンロックFIFO2049へ送信されるとき、レーン2031は命令Aの実行を終了する。
【０２９９】
[344]     このプロセスにおいて（レーン2033はレーン2031が命令Aの実行が終わるのを待ち、命令Bの実行を開始する）、送信ゲート2051が開き、送信ゲート2061が閉じ、命令Aに対応するアンロックFIFO2049のトラック・ポイント位置をバス2071へ送る。コンパレータ2073はバス2071のトラック・ポイント位置とロックレジスタ2057に記憶された命令Aのトラック・ポイントを比較し、二つが等しいとき、それは命令Aが既にレーン2031によって実行されたことを示し、ここでレーン2033は命令Bの実行を開始できる。この実施形態において、マルチプレクサ2075はコンパレータ2073によって生成された比較結果を選び、トラッカー2039のレジスタ2067の更新を制御し、レーン2033は命令Bの実行後の後続命令の実行を続ける。
【０３００】
[345]  レーン2031とレーン2033で走る命令を同期させるのにバリアロックが必要とされるとき、それは命令Aの実行がレーン2033とレーン2031の両方で完了した後でのみ後続命令を実行することである。この場合、トラッカー2037と2039の各ロックレジスタは命令Aのトラック・ポイント位置情報にラッチする。マルチプレクサ2075と2079の両方はANDゲート2077の出力を選び、トラッカー・リード・ポインタの更新を制御する。よって、レーン2031と2033は命令Aの後に、ANDゲート2077がそれぞれのマルチプレクサに’1’を出力したときのみ、後続命令を実行できる。これは全ての関係あるトラッカー（この例ではトラッカー2037と2039）のレジスタ（FIFO）が命令Aのトラック・ポイント位置を各自の対応するコンパレータへ出力した後、つまり全ての関係あるレーン（この例ではレーン2031とレーン2033）が命令Aを実行した後、でのみ起こる。もしいくつかのレーンがバリアロックに参加しないなら、これらのレーンのマスクレジスタ2080または2081は’1’にセットされる。これは、これらのレーンのそれぞれからゲート2077への信号が’1’にセットされることに繋がり、よって他のレーンに適用されるバリアロックに干渉しない。
【０３０１】
[346]  他のケースにおいて、２つのレーンで実行されている命令が互いに同期する必要がないとき、マルチプレクサ2075と2077の両方は値’1’を選ぶようにセットされ、よってトラッカー2037のレジスタ2043とトラッカー2039のレジスタ2067は比較結果によって制御されず、それぞれは各自のトラックを独立に実行する。
【０３０２】
[347]  開示されたマルチレーン・プロセッサは１つ以上の命令セットをサポートするように拡張されうる。図１７は本開示と整合する例示的な、複数の命令セットをサポートするマルチレーン・プロセッサである。この図において、206は命令メモリ、209はスキャン・コンバータ、1811、1813、1815、1817は４つのプロセッサ・コアである。レーン1811、1813、1815、1817は命令セットAの命令のみを実行する。スキャン・コンバータ209のスキャン機能はスキャナ208の機能と同様であるが、それは変換機能も持ち、インプットされた命令セットBの命令を対応する命令セットAの命令に変換することができる。従って、図１５の実施形態は命令セットAと命令セットBを同時にサポートできる。命令セットAを実行するとき、スキャン・コンバータはスキャン機能のみを実行し、命令セット変換機能は実行しない。命令セットBを実行しているときのみ、スキャン・コンバータ209はスキャン機能を実行するだけでなく、命令セット変換機能も実行する。命令の変換は、命令が命令メモリ206に記憶される前に起き、よって命令メモリ206は命令セットAの命令のみ持つ。従って、各レーンが命令を転送し割り当てるとき、ターゲットが命令メモリ206においてヒットされる限り、命令変換を待つ必要がない。
【０３０３】
[348]  さらに、スキャン・コンバータ209には２つの命令セット変換メカニズムがあり、それぞれ命令セットBと命令セットCを命令セットAへ変換する。この状況において、それはマルチレーン・プロセッサの異なるレーンと異なるスレッドが異なる命令セットの命令を実行していることと同じである。
【０３０４】
[349]  本記述において、DRBを含むプロセッサ・システムの他の実施形態が図１８Aに示される。DRB2218のエントリ数はIRB2214のエントリ数と異なり、一方、その構造と機能はIRB107に等しい。IRB2214の各エントリには追加のフィールドがあり、それはデータリードバッファ・アドレス（DRBA）を記憶するのに用いられる。そして追加のDRBAデコーダ2220があり、それはDRBAをデコードしDRBの対応するエントリを選ぶのに用いられる。IRBエントリに記憶されたDRBAは、このIRBエントリがバス2205を通して実行ユニット2206へ命令を発行するとき、バス2209によってパスされ、デコーダ2220によってデコードされた後DRB2218の１つのエントリを選ぶ。選ばれたDRBエントリに記憶されたデータはまた実行ユニット2206へ適切なパイプライン・サイクルにおいて送られる（それはバス2209におけるアドレス・パスを遅らせることによって実現できる）。もしIRBのエントリが他の命令によって交換されたとき、交換されたエントリのDRBAは読み出され、交換モジュールに記憶される。
【０３０５】
[350]  本記述において、DRBを含むプロセッサ・システムの他の実施形態が図１８Bに示される。DRBのエントリを充填するデータエンジン2230があり、加算器2232、ストライド・メモリ2236そしてマルチプレクサ2238、2242から構成される。データアドレス2235、ストライド値2237そして状態ビット2239はストライド・メモリ2236の各エントリを含む。それは命令ブロックが充填される度に命令を検査し、各データリード命令のためにそれぞれストライド・メモリとDRBにエントリを割り当てる。これは利用可能なDRBAを、データリード命令に対応するIRBエントリへ充填することによって実現でき、それは交換ロジックによってなされ、ストライド・メモリ・エントリとDRBエントリの初期化を完了する。実装の詳細については、ストライド・メモリの部分もしくは全ての内容（例えばデータアドレス2235、ストライド値2237、状態ビット2239）がDRB2218、もしくはトラック・テーブルの対応するエントリに記憶されうる。しかし、図１８Bの実施形態は独立のDRB2218とストライド・メモリ2236を示す。データアドレスは、バス2215からのDRBAのデコーダ2220の結果をデコードすることによってアドレス指定された、ストライド・メモリ2236の内容に従って計算される。データエンジン2230は、DRB2218とストライド・メモリ2236の内容を書き込み更新することを担う。ストライド・メモリ2239のエントリの状態ビットとDRB2218のエントリの有効ビットの両方は最初の割り当てにおいて’0’にセットされる。
【０３０６】
[351]  バス2215のDRBAによってアドレス指定された、ストライド・メモリ2236とDRB2218の内容は、データ・リード命令が最初にIRB2214によってバス2205を経て発行されたとき、読み出される。DRBエントリの有効ビットはこのとき’0’であり、実行ユニットがパイプラインを失速させデータを待つように指示する。一方、ストライド・メモリ・エントリの状態ビット2239は’0’であり、データエンジン1930が実行ユニット2206によって生成される（もしくはデータエンジン自身によって計算される、例えばデータリード命令におけるデータ基底アドレスをデータ・オフセットに加えることによってデータ・アドレスを生成する）データ・アドレス2231を待つように指示する。キャッシュ2242からのデータ、それはマルチプレクサ2242によって選ばれバス2243を通して送られたアドレス2231によってインデックスされている、はDRB2218の対応するエントリへバス2223を通して充填され、このエントリの有効ビットと対応するストライド・メモリ・エントリの状態ビット2239を’1’にセットする。
実行ユニットはデータをDRBからバス2207を経て読み出し、もし望まれたDRBエントリの有効ビットが’1’ならパイプライン操作を完了する。
有効ビットはそれから’0’にリセットされ、バス2243のデータアドレスはストライド・メモリ2236の対応するエントリのデータ・アドレス・フィールド2235へ充填される。
【０３０７】
[352]  もしデータロード命令が再び発行された場合、DRB2218の該当エントリの’0’有効ビットは、実行ユニットのパイプラインを失速させDRB2218にデータが充填されるのを待つよう指示する。ストライド・メモリ2236の該当エントリの’1’状態ビット2239は、データエンジンが実行ユニットによって再び生成されたバス2231のデータ・アドレスを待つように指示し、データがデータキャッシュ2222から読み出されDRB2218の対応するエントリへ充填されたことにもとずいて、その有効ビットを’1’にセットする。よって命令ユニット2206は必要なデータをバス2207から読み出すことができ、前述のように実行を続行する。それから’1’有効ビットと’1’状態ビットはデータエンジンのマルチプレクサ2238を制御して、この時のデータアドレス2231を加算器2232のために選ぶ。加算器2232はストライド・メモリ2236に記憶された古いデータアドレス2235をデータアドレス2231から差し引き、結果（差異、つまりストライド）はストライド・メモリ2236のエントリのストライド・フィールド2237に記憶される。
【０３０８】
[353]  さらに、ストライド・フィールド2237のストライド値を、マルチプレクサ2238によって選ばれたバス2231の現行データアドレスに足した結果2233は、データリード命令が次回実行されるときの可能なデータアドレスである。結果のアドレスは、マルチプレクサ2242によって選ばれた後バス2243に送られ、ストライド・メモリ2236の対応するエントリのデータアドレス・フィールド2237に記憶される。データエンジンは、バス2243のデータアドレスに従ってデータキャッシュ2233から前もってデータを読み出し、DRB2218にそれを記憶する。対応する状態ビットが’2’にセットされ、有効ビットは’1’にセットされる。ここで注目に値するのは、ストライド・メモリ2236の対応するエントリは前もって計算された次データアドレスとデータ・ストライド値を記憶し、DRB2218の対応するエントリは先取りされた次データを記憶し、さらにDRB2218のエントリとストライド・メモリ2236のエントリは両方とも、データリード命令に対応しているIRB2214のエントリのDRBAによってポイントされている点である。
【０３０９】
[354]  結果として、データリード命令によって必要とされるデータは、命令が再び実行されるとき、既にDRB2218に記憶されており、命令に対応するIRBのエントリのDRBAによってポイントされている。そしてそれは適切な時にバス2207へ送られる。よって、実行ユニット2206はデータキャッシュからデータを読むために待つ必要がない。状態ビット2239の値が’2’であるから、データエンジン2236は再び、データアドレス2235にデータ・ストライド2237を加えることによって、次回のデータアドレスを計算しデータを取りに行く。それはまたストライド・メモリ2236とDRB2218の対応するエントリを更新し、有効ビットを’1’にセットする。
【０３１０】
[355]  上記手法と装置はループにおけるデータローディングの効率をあげる。しかし、可能データアドレスにおけるデータ先取りのため、確認する必要がある。図１８Bの実施形態はコンパレータ2234を用いて、可能データアドレス2235と、データロード命令を実行したときに実行ユニットによって生成された実際のレータアドレス2231、とを比較し、よって可能データアドレスの正確さを確認する。それは先取りされたデータを保ち、後続オペレーションに進み、もし２つのアドレスが同一なら状態ビットを’2’に保ち、そうでなければ状態ビットを’1’にセットし、データストライドを再計算しこの状態から上記手順を繰り返す。
【０３１１】
[356]  本記述において、図１４A、B、Cで示される命令ループを並列に実行する実施形態にもとづいて、データエンジンはループにおけるロード命令への対応するデータを供給するために追加される。ここで、各レーンはそれ自身のデータエンジンを持ち、各データエンジンは該当するレーンのレーン番号を持つ（例えば’0’、’1’、……）。各レーンは掛け算器を持ち、同掛け算器はデータエンジンに置かれる独立した掛け算器でありうる。もしくはレーンは実行ユニットの掛け算器を共有しうる。加えて、４つのグループのバスがあり（ストライド・バス、幅バス、初期アドレス・バス、最終レーン番号バス）、それらは全てのバスに股がり、それぞれデータアドレス・ストライド値、並列実行に使われるレーン数（レーン幅）、並列実行が始まるデータアドレス、そして最後の並列ループ実行の最終レーン番号を全てのレーンに送る。
【０３１２】
[357]  この実施形態において、ループ命令は図１４の実施形態のようにサイクル・コントローラによって分解される。まず最初に、同命令ループを２回ひとつのレーンにおいて実行し、それから前述と同じ方法でデータアドレス・ストライドを得る：同じデータロード命令を２回実行する中で生成された２つのデータアドレスを差し引く。それから、サイクル・コントローラは、ループカウント合計、割り当てられるレーンの数、ループ命令の優先度にもとづいて並列実行に必要なレーンの数を、決定する（この例では、これらのレーンは連続している）。同命令ループはすでに２回実行されているから、同レーン数はループの合計数より’2’少ない値に等しい。サイクル・コントローラは初期データアドレスを以下のように得る：初期レーン番号（ループを並列に実行するレーンの最初のレーンのレーン番号）を前回の最後（２度目）の実行におけるデータロード命令のデータアドレスから差し引き、そしてストライドによって掛け算し、つまり初期アドレス＝最後の前データアドレス ー 初期レーン番号＊データストライドを得る。サイクル・コントローラはまた、前の計算のように、サイクル数NIを計算する。同ループ命令は既に２回実行されているから、サイクル数NIはループ数合計から２を引いてレーン幅で割った値の切り上げ整数の商に等しい（余りは最後の並列ループ実行で用いられたレーン数である）。サイクル・コントローラはまた、ループ並列実行の最終サイクルのために、最終レーン番号LILを生成する。同最終レーン番号LILは、最終サイクルにおいて必要とされるレーン数に初期レーン番号を足して１引いたものである。それから、サイクル・コントローラは同ストライド、レーン幅、初期アドレス、そして同最終レーン番号LILをそれぞれ、ストライド・バス、幅バス、初期アドレスバス、最終レーン番号バスを通して、並列サイクルに参加している全てのレーンに送る。
【０３１３】
[358]  最初のパラレルサイクルにおいて、各レーンのデータエンジンは、そのデータアドレスを自身のレーン番号、受けた初期アドレスと受けたデータ・ストライドにもとづいて計算する。特に、各レーンの対応するデータアドレスは、レーン番号に’1’足しそれからデータ・ストライドによって掛け算されそれから初期アドレスに足されたものに等しい、つまりデータアドレス＝（レーン番号＋１）＊ストラド＋初期アドレス。このようにして、データエンジンはデータを、データアドレスにもとづいて前もってDRBへ充填する。DRBは、該当するデータロード命令がレーンに対してIRBによって発行されたとき、該当するデータをレーンへ発行する。最初のサイクルの後の全てのサイクルにおいて、新しいデータアドレスは、レーン幅とストライドを掛け合わせたものに元のデータアドレスを足すことによって得られ、それからデータエンジンはデータを前もってDRBへ充填する。上記オペレーションを最後の並列サイクルまで繰り返す。
【０３１４】
[359]  この実施形態において、最後の並列サイクルの前の全てのサイクルにおいて、サイクル・コントローラは、並列サイクルに参加する全レーンの最大レーン番号を最終レーン番号バスを通して、全てのレーンへ送り、全ての同レーンが同ループ命令を実行するようにする。最後の並列サイクルにおいて、サイクル・コントローラは最終レーン番号LILを最終レーン番号バスを通して全てのレーンに送り、それから並列サイクルに参加している全てのレーンは受け取った最終レーン番号LILを各自のレーン番号と比べる。レーン番号が最終レーン番号LILよりも大きいレーンは同ループ命令を実行せず、残りのレーンは前述のように最後の並列サイクルを完了する。
【０３１５】
[360]  例えば、命令ループのループ合計が１００であると仮定すると、ループのロード命令が最初に実行された時に生成された最初のデータアドレスは’260’でデータ・ストライドは’3’である。そしてここで全部で１０レーンが割り当てられる（レーン番号は’4’~’13’）。ストライド’3’は、命令ループを２度１つのレーンで実行することによって、ループのロード命令を２度目に実行するときのデータアドレスが’263’であることから、見いだせる。この命令ループには１０レーンが割り当てられ、従ってレーン幅は’10’、初期アドレス＝（263-4*3）=251、並列ループ番号 NI=(100-2)/10 =10（切り上げ）、最終並列ループは８レーン使い、最終レーン番号=8+4-1 = 11である。
【０３１６】
[361]  最初の並列サイクルの間、最初のレーン（レーン番号’4’）のデータアドレス＝(4+1)*3+251=266、第二レーン（レーン番号’5’）のデータアドレス＝(5+1)*3+251=269、…そして最後のレーン（レーン番号’13’）のデータアドレス＝(13+1)*3+251=293。各レーンのデータエンジンは、前と同様、各自のDRBへ対応するデータアドレスにもとづいてデータを充填し、それから新しいデータアドレスを計算する。特に、最初のレーンの新しいデータアドレス＝10*3+266=296で、第二レーンのデータアドレス＝10*3+269=299、…そして最後のレーンのデータアドレス＝10*3+293=323。それからデータエンジンは対応するデータを各自のDRBへ充填し、第二サイクル中の発行に備える。このように、各レーンのデータアドレスは、ロード命令が実行される毎に更新され、それからこれら１０レーンのデータアドレスは、ループ内のロード命令が９回実行された後、それぞれ’536’、’539’、… 、’563’と更新される。
【０３１７】
[362]  １０回目の並列サイクルにおいて、最終レーン番号LILが’11’であるから、レーン’4’~’11’は正常に動作し、レーン’12’と’13’は同命令ループを実行しない。このようにして、１０回目の並列サイクルにおいて、レーン’4’~’11’のデータエンジンはデータアドレス’536’、’539’、…、’557’を持ち、これらのアドレスに対応するデータが実行ユニットへ発行され、対応する命令がIRBによって発行されるときに最後の並列サイクルを完了する。
【０３１８】
[363]  少しの修正で、マルチレーン・プロセッサとそのIRBは分岐予測の助け無しに分岐命令を処理することができ、しかも分岐ペナルティによるパイプライン失速とパイプライン・フラッシュを被らない。その方法は、まだ未決定の分岐決定に依存する複数の命令（例えば分岐命令の次の命令（フォールスルー命令）や分岐ターゲット命令）を同時に分岐決定がなされるまでに実行することである；それから分岐決定によって選ばれた命令の分岐の実行を続行し、命令の他の分岐を中断する。分岐決定がなされるパイプライン段階を境界として用い、プロセッサ実行ユニット・パイプラインは前端パイプラインと後端パイプラインへ分けられる。分岐決定によって制御されるマルチプレクサは、複数の前端パイプラインによって出力された、部分的に処理された命令分岐の１つを選び、選ばれた命令分岐は実行され単一のパイプラインによって完了する。以下の記述は図１０〜１２の実施形態にもとづくが、にもかかわらず、他への応用は類推によって達成されうる。図１９は実施形態と整合する例示的な命令セグメントである。図２０は実施形態と整合する例示的な、同時に複数の可能な命令を発行することをサポートするIRBである。図２１は実施形態と整合する例示的な、図２０のIRBを使う例示的なレーン・プロセッサで、図１９の命令セグメントを実行し、構造と機能を説明する。
【０３１９】
[364]  実行される命令セグメントは図１９Aに示される。行2301は同時に発行される４つの連続した命令からなり、図において丸で印された命令は分岐命令である。この例における全４命令は分岐命令で同じIRBブロックに置かれ、その最初のアドレスは’68’、次のブロックアドレスは’23’。行2301における４命令に対応するトラック・テーブル・エントリは行2302に示される。この図に示されるように、命令3の分岐ターゲットは’68.0’であり、命令4、5、6はそれぞれ’68.7’、’68.1’、’68.2’である（ここでのアドレス・フォーマットはBNX.BNY）。トラック・ポイント2303はそのトラックのエンド・ポイントで、それは次ブロック・アドレス’23’を記憶する。説明の簡明のため、同時に発行された４つの異なる命令は、プログラム・シーケンスによって異なる命令発行スロットにおいて発行されたものと定義する。行2304に示されるように、命令3はスロットAに置かれ、命令4、5、6はそれぞれスロットB、C、Dに置かれる。図１９Bは、命令セグメントの、例えば2301、命令アドレスを軸とした可能な実行径路を示す。ポイント2306は１つのクロック・サイクルにおいて発行された最初の命令、命令3、を示し、影の部分は同じサイクルで発行された４命令を示す。この図で丸で印された分岐命令は行2301のそれに対応し、丸から派生する弧線は分岐を表し、矢印がポイントする先は行2302の分岐ターゲット・アドレスに対応する分岐ターゲットを表す。アドレスが0から7の命令がIRBブロックへ充填され、その最初のアドレスBNXは’68’であり、アドレスが8から15の命令はまた他のIRBブロックへ充填され、その最初のアドレスBNXは’23’である。
【０３２０】
[365]  これら４レーンの実行は命令3から始まり、前の３つの分岐命令の分岐決定にもとづいて、このサイクルにおいて４つの可能なプログラム実行径路が存在する。第４分岐命令の結果は次のクロック・サイクルに影響を及ぼし、それは後で議論される。実行径路は分岐命令3、分岐ターゲット0、もし分岐が取られた場合はその後続命令1と2、すなわち3、0、1、2；命令3の分岐ターゲット命令0、1、2はこれ以後簡明のためO道と呼ばれる。同様にして、分岐命令3が取られず分岐命令4が取られたとき、実行径路は命令3、4、7、8であり、命令4の分岐ターゲット命令7、8は以後P道と呼ばれる。同じ理由で、もし分岐命令3と4が取られずしかし分岐命令5が取られるなら、実行径路は命令3、4、5、1で、命令5の分岐ターゲット命令1は以後Q道と呼ばれる。最後に、もしこれら３つ全ての分岐命令が取られない場合、実行径路は命令3、4、5、6で、以後N道と呼ばれる。後続する命令7、8、9、10は、もし命令6が取られないなら、次のサイクルで実行され、以後N道と呼ばれる。または命令6が取られるなら、後続する命令2、3、4、5が実行され、以後J道と呼ばれる。N道とJ道は次のサイクルにおいて異なる実行径路であるが、それらの違いは現行サイクルで実行される命令には影響を与えない。充分な実行ユニットと対応するIRBリードポートとビット・ラインが１サイクル中に各可能実行径路に供給されている限り、実行されうる全ての可能な命令は同時に複数の前端パイプラインへ発行され、それから分岐決定によって選ばれ、可能な命令の一部のみが更なる実行のために後端パイプラインへ送られる。
【０３２１】
[366]  図２０は実施形態２１で用いられる例示的なIRB構造である。全てのIRBブロックはマトリックスからなり、命令はプログラム・シーケンスに沿って上から下に、各行に１つの命令が置かれる；各行の各コラムは左から右へ対応する前端パイプラインへ仕えるリードポートを持つ。命令はどのコラムのリードポートからも出力され、必要に応じてコラムに付属した実行ユニットへ発行される。この実施形態はIRBとそれらに付属する前端パイプラインを発行スロットの面で組織する、つまり各レーンは単一のもしくは複数の可能な命令を、命令の連続したセグメントの、順列上固定された場所（発行スロット）において処理する。図１９において、スロットAはたった１つの可能な命令をもち、B、C、Dスロットはそれぞれ、２、３、４の可能な命令を持つ。従ってこの実施形態において、各行は４つのリードポートを持ち、最大４つの命令が、IRBの１つの命令発行スロット、例えば2401から、発行されるのをサポートする。
【０３２２】
[367]  各レーンは、複数のIRBブロックを持つ、自身のIRB（例えばIRB2401、2407）を持つ。各IRBブロックはデコード・モジュール2403と、ストレージ要素、リードポート、バスから構成されるマトリックス2405を含む。マトリックスの各行（例えば2411、2413）は命令を記憶し、４つのリードポート（図においてXで示される）を持つ；各行のリードポートはビットライン・バス（例えばバス2461）によってコラムに接続される。異なるレーンの同じ行の命令は、オペレーション・モードに依って、同じあるいは互いに異なる。各コラムのビットライン・バスは各IRBの各行のリードポートを、同じコラムのレーンの前端パイプラインへ接続する。例えばビットライン・バス2461はそのコラムのリードポートを前端パイプライン2491へ接続する。各コラムは、図１９で説明された、１つのスロットの１つの’道’の命令、に対応する。’道’は複数の発行スロットにて発行される必要がある命令を持つかもしれない。レーンを発行スロットとして整理すると、同じ’道’の命令は複数のスロットに分散しうる。’道’はそれ自身の特定のコラムを複数の発行スロット（つまりレーン）において持ちうる。例えばN道は、N道に特定したコラムを発行スロットA、B、C、Dのそれぞれに持つ。発行スロット（レーン）のマトリックス2405において、コラム2421はN道に特定のコラムである；コラム2423、2325、2427はそれぞれO、P、Q道に特定のコラムである。IRB2407は他のレーンのIRBで、2401と同じ構造を持ち、同じデコーダ2408と同じマトリックス2409を持つ。オペレーションに必要な構成要素のみがデコーダ2408とマトリックス2408に示されている。この例において、デコーダ2403と2408はトラッカーからのアドレスをデコードし、ワードラインを駆動する。図１０〜１２の実施形態のトークン・レジスタは、トラッカーの指示のもと同じ機能を実行し、そのオペレーションの原理は以下に描かれるものと同じであるので、ここでは繰り返さない。
【０３２３】
[368]  IRBブロック2401のデコーダ・モジュール2403を例として用いて、第１アドレス・レジスタ1025、現第１アドレス・コンパレータ1029そして現第２アドレス・デコーダ1021は前実施形態の対応する部分と同じ（分岐ソース・コンパレータと分岐ソースアドレス・デコーダとして知られている）であり、これらのうち第１アドレス・レジスタ1025は現行命令ブロックの対応するBNX値を記憶し、命令が命令ブロックへ充填されるときに同時に書き込まれる。第１アドレス・コンパレータ1029はトラッカーからのリード・ポインタ2471のBNXと、第１アドレス・レジスタ1025に記憶されているBNXと比較し、もし比較結果が同じなら、対応する命令ブロックが現行命令ブロックであることを意味する。それは第２アドレス・デコーダ1021をして、リード・ポインタ2471のBNYをデコードし、ローカル・ワードライン2450もしくは2451のうちの１つにおいて、ただ１つの’1’を駆動する。第１アドレス・コンパレータ1029の比較結果が’等しくない’とき、第２アドレス・デコーダ1021の出力は全て’0’になる。
【０３２４】
[369]  レーン・プロセッサとして、この実施形態のIRBの各行のリードポートはワードラインの４タイプの制御のもと、命令を発行する。ワードラインのこれら４タイプは各コラムのマルチプレクサ（例えばマルチプレクサ2431）によって選ばれ、各行のリードポートを制御し、図１３の実施形態に描かれたモードを実現する。ワードラインの４タイプのうち、１つのタイプはローカル・ワードラインで、第２アドレス・デコーダによって駆動される。例えばワードライン2450と2451は第２アドレス・デコーダ1021によって駆動される。第２のタイプは特殊ジグザグ・ワードライン（例えばワードライン2482）で、次アドレス・コンパレータ2481によって駆動され、各IRBブロックの第１行のリードポートを制御する。第１、第２のタイプのワードラインはレーンの中で割り当てられる。第３、第４のタイプのグローバル・ワードラインはデコーダやコンパレータによって直接に駆動されず、むしろワードラインの信号を１つのレーンからその右のレーンへパスする。第３タイプのグローバル・レベル・ワードライン（例えばワードライン2460）は、信号を水平に右のレーンの同じ行のリードポートへパスする。第４タイプのグローバル・ジグザグ・ワードライン（例えばワードライン2453）は、信号を右側のレーンの１行下のリードポートへ対角的にパスする。一般信号はレーンの同じコラムの全てのマルチプレクサを制御し、各マルチプレクサの同じインプット・ポートを選ぶ。異なるコラムの制御信号は独立に設定され、同じコラムのリードポートを、ワードラインの４タイプの１つによって、制御もしくは無効にする。
【０３２５】
[370]  レーン独立のオペレーション、例えばSISDやMIMDを実行しているとき、各レーンのトラッカーはデコーダ（例えばデコーダ1021）を制御し、レーンのIRBのトークン・レジスタはリードポートを制御するローカル・ワードラインを駆動し、レーンの実行ユニットへ命令を発行する。このモードのオペレーションはただ１つの道が必要で、つまり各スロットにただ１つのコラムを意味する。例えば、もしN道だけ用いられるなら、制御マトリックス2405のNコラム2421の全てのマルチプレクサは真ん中のインプットを選び、それはローカル・ワードライン2450、2451などである；そして制御Oコラム2423、Pコラム2425、Qコラム2427のマルチプレクサは全て左の’0’（無効）インプットを選ぶ。もし第１アドレス・レジスタ1025の内容が’68’で、リードポインタ2471のアドレスが’68.0’なら、コンパレータ1029はデコーダ1021を有効にし、ワードライン2450を駆動し、N道のマルチプレクサ2431はそれを水平のグローバル・ワードライン2460へ送信し、リードポート2432を有効にし、行2411に記憶された命令をビットライン・バス2461を通して前端パイプライン2491へ処理のために送る。そしてO、P、Qの全てのマルチプレクサ（例えばマルチプレクサ2433）は無効にセットされ、従ってワードライン2450はこれら３リードポートに影響を与えない。同じ議論によって、IRB2407のN道のマルチプレクサ2435と2457もローカル・ワードラインを選び、デコーダ2409の制御のもと、前端パイプライン2492へ実行のために命令を発行し、水平のグローバル・ワードライン2460の信号には影響されない。これは前述のコラム相関である。
【０３２６】
[371]  SIMDタイプのオペレーションを実行しているとき、それは各レーンの１つのコラム（１つの道）だけ使う必要があり、しかしレーンはリードレーンと後続レーンに区別される。このタイプのオペレーションにおいて、複数レーンの最左レーンはリードレーンで、リードレーンの各コラムのマルチプレクサのセットアップは前例のそれと同様である。リードレーンの右側の複数のレーンは後続レーンである。後続レーンのO、P、Qコラムのマルチプレクサは、前と同様、’0’（無効）を選ぶ。しかし、後続レーンのNコラム・マルチプレクサは左インプットを選び、それは第３タイプのワードライン- グローバル水平ワードライン（例えばワードライン2460）である。今IRBリードポート・マトリックス2405のレーンはリードレーンとしてセットされ、IRB2407のレーンは後続レーンとしてセットされる。マルチプレクサ2431はワードライン2450を選び、グローバル水平ワードライン2460を駆動し、リードポート2432が行2411の命令を発行するようにし、マルチプレクサ2435も水平ワードライン2460を選び、グローバル水平ワードライン2467を駆動してリードポート2436を有効にし、行2411の命令を前端パイプライン2499へ処理のために発行する（マトリックス2405とIRB2407の同じ行の命令は同じか異なる）。同時に、水平ワードライン2467の信号は、もっと右のレーンへ送られ、同じ方法を用いて各レーンの同じ行のN道リードポートを駆動し、命令を発行する。これは前述の行相関である。本例と上述の例は共にN道のみを使い、他の道は無効にされている。
【０３２７】
[372]  命令レベル並列処理（ILP）モードにてマルチ発行オペレーションを行なっているとき、全ての道N、O、P、Qが用いられる。このモードにおいて、グローバル・ジグザグ・ワードライン（例えばワードライン2468）が、上記２例で使われたワードライン以外に、用いられる。ジグザグ・ワードラインは、ある道のレーンの行におけるリードポートの制御信号を、同じ道の右側のレーンの１行下のリードポートへパスし、同じ道の次の順番の命令を右レーンへ 発行する。このモードにおいて、トラッカーはデコーダ1021を制御しもしくはIRBのトークン・レジスタは、リードポートを制御する各レーンのローカル・ワードラインを駆動して命令を発行する。ローカル・ワードラインの信号はジグザグ・ワードラインを経て隣のレーンへパスされ、順序上次の命令を発行しILPを実現する。このモードにおいて、1021のような各レーンの第２アドレス・デコーダは、それぞれ１つの道のワードラインを駆動する。例えば、Aスロット・デコーダはN道を駆動し、B、C、DスロットデコーダはそれぞれO、P、Q道を駆動する。特に、スロットAのNコラム2421のマルチプレクサは、中央インプットを選ぶように設定され、それはデコーダによって出力されたローカル・ワードラインであり、他のコラムのそれらは、スロットAがたった１つの可能な命令しかもたないから、左’0’（無効）を選ぶ。スロットBのコラムO2423のマルチプレクサは全て中央インプットを選ぶように設定され、それはデコーダによって出力されたローカル・ワードラインであり、N道のマルチプレクサは右インプット、ジグザグ・ワードライン、を選ぶように設定され、またPとQ道は、スロットBは２つの可能な命令しか持たないから、左の無効を選ぶように設定される。
【０３２８】
[373]  スロットCのコラムP2425のマルチプレクサは中央インプットを選ぶように設定され、それはデコーダによって出力されたローカル・ワードラインであり、他の道NとOは右側インプットを選び、それはジグザグ・ワードラインで、道Qは、スロットCは３つの可能な命令しか持たないから、左側の無効を選ぶ。スロットDのコラムQ2427のマルチプレクサは右側インプットを選ぶように設定され（このコラムのマルチプレクサは２つのインプットしか持たず、右側インプット機能は他のコラムのマルチプレクサの中央インプットのそれと同じである）、それはデコーダによって出力されたローカル・ワードラインであり、他の道N、P、Qは、スロットDは４つの可能な命令しか持たないから、右側インプットを選び、それはジグザグ・ワードラインである。図２０を参照されたい。IRB2401はスロットCに、IRB2407はスロットDにある。上で言及されたように、IRB2401のN道2421とQ道2423のマルチプレクサは右のインプット、ジグザグ・ワードラインを選ぶ；道2425のマルチプレクサは中央インプット、ローカル・ワードラインを選ぶ；道Q2427のマルチプレクサは左のインプット、無効を選ぶ。そしてIRB2407のマルチプレクサ、N、O、P道は全てジグザグ・ワードラインのインプットを選ぶ；そしてQ道はローカル・ワードラインのインプットを選ぶ。
【０３２９】
[374]  前例のように、スロットCのデコーダ2403はリードポインタ2471をデコードし、ローカル・ワードライン2450を駆動し、有効にし、ここでP道2425のマルチプレクサ2433のみがローカル・ワードライン2450を選び、イネーブル信号をジグザグ・ワードライン2468に送ってリードポート2433を有効にし、行2411の命令を前端パイプライン2495へ処理のために発行する。P道のDスロットIRB2407のマルチプレクサ2437はジグザグ・ワードライン2468を選び、リードポート2438を有効にして、行2413の命令を前端パイプライン2496へ処理のために発行する。これは前述の対角相関である。この実施形態において、N道のグローバル・ジグザグ・ワードラインとグローバル水平ワードラインは同じワードラインを共有し、ワードラインは右レーンのN道の同じ行のマルチプレクサの左インプットに接続するだけでなく、右レーンのN道の下の行のマルチプレクサの右インプットにも接続する。もしN道のマルチプレクサ全てが左インプットを選ぶなら、前例で描かれたように、動作モードは行相関である。もしN道のマルチプレクサ全てが右インプットを選ぶなら、動作モードは対角相関である。もしIRB2401がスロットAにあり、ローカル・ワードライン2450が有効なら、マルチプレクサ2431は有効ワードライン2450を選んで駆動し、グローバル水平ワードライン2460をして行2411の命令を前端パイプライン2491へ発行する。そしてスロットBのIRB2407のマルチプレクサ2437は右インプットを選ぶよう設定され、それはリードポート2438を制御し、行2413から前端パイプライン2492へ命令を発行する。
【０３３０】
[375]  デコーダ例えば1021がIRBブロックの下方境界の近くのローカル・ワードラインをデコードし駆動するとき、ジグザグ・バスが下方境界に到達し、従って最後のスロット、スロットDへパスされる前に、引き続く命令の発行を可能にするように、パスし続けることができない、可能性がある。各命令ブロックはランダムに各IRBブロックへ充填されるから、この問題を解決するために、単純に下方境界のジグザグ・ワードラインと次の下方IRBブロックのジグザグ・ワードブロックを接続することはできない。本開示の前の実施形態は既に、この問題を解決するためにどのようにトークン・バスを利用するか説明している。この実施形態は例として図２０を用いて、アドレス・デコーディングがどのように同じ機能を実現するか説明する。ジグザグ・ワードラインがIRBブロックの下方境界に達するスロットの数は、第２アドレスBNYにおいて計算を実行することで得られ、それはどのローカル・ワードラインを駆動するか、そして第２アドレスをデコードするデコーダのスロット番号を決定する。行番号は常にIRBブロックの第１行である。道番号は常にジグザグ・ワードラインが下方境界に達するのと同じ道である。計算の詳細は図２１の実施形態にて説明され、ここではいかにIRBが、正しいジグザグ・ワードラインを駆動して、計算もしくはテーブル点検によって得られた第１アドレスBNXにもとづいて、発行スロットを利用して複数の連続した命令を継ぎ目なく発行するか、それらの命令は異なるIRBブロックに記憶されるかも知れない、のみを説明する。
【０３３１】
[376]  例として、まだIRB2401をスロットCとして、IRB2407をスロットDをして使う。行2411はIRBブロックの第１行で、行2413は第２行であるが最後の行ではない。IRB2401のコラムN2421、コラムO2423、コラムP2425のマルチプレクサの右インプットは全てジグザグ・ワードラインへ接続されている。これら３コラムの第１行の３マルチプレクサの右インプットはそれぞれ、デコーダ2403の３次ブロック・コンパレータによって駆動された特別なジグザグ・ワードラインに接続している。例えば、N道次ブロック・コンパレータ2481はワードライン1082を駆動し、N道マルチプレクサ2431の右インプットに接続する。他のO、P道は類推によって推し量られうる。Q道は、スロットDに発行された１つの命令しか持たないから、このクロック・サイクルにおいて次ブロックを持たず、その後続命令は全て次のサイクルで発行されなければならない。次ブロック・コンパレータは次ブロック・アドレス・バスの最初のアドレスと、デコーダに記憶された最初のアドレスを比較し、比較結果は特別なジグザグ・バスを直接駆動する。
【０３３２】
[377]  スロットCのレーンのIRB2401の第１アドレスレジスタ1025に記憶された命令ブロック・アドレスは’23’と仮定する。トラッカー・リードポインタの現行アドレスは’68.6’である。リードポインタはスロットAへ送られ、N道ジグザグ・ワードレーンを駆動する。リードポインタの第１アドレスはスロットAのIRBブロックのそれぞれに記憶されている第１アドレスと比較される。第１アドレスが’68’であるIRBブロックはさらにリードポインタの第２アドレスをデコードし、ジグザグ・ワードライン’6’へ動く（図２０には記されていない）。各IRBは８命令を含むと仮定し、よって８行のリードポートを持つ。前に説明されたように、同’6’ジグザグ・ワードラインは、第１アドレスが’68’のIRBブロックの中のスロットAの第６行命令の発行を可能にする。ジグザグ・バスはまた、右のレーン、スロットBを通して７行目の命令の発行を駆動する。それから、ジグザグ・ワードラインIRBブロックの下方境界へ到達する。
【０３３３】
[378]  同時に、リードポインタ’68.6’が生成されたとき、次アドレス’23’は既にトラック・テーブルの点検を通じて得られている。リードポインタのBNY’6’とこのリードポインタがスロットAのレーンに送られる事実にもとづいて、またこのレーンのN道マルチプレクサのみがローカル・ワードライン、第２アドレス・デコーダによって出力される、を選ぶように設定される事実にもとづいて、次ブロックの第１命令はスロットCのN道から発行されるべきであることが推論される。従ってトラッカーは、次ブロック・アドレス’23’を、スロットCのN道の次ブロック・アドレス・バス2486へ置く。図２０において、N道次ブロック・アドレス・コンパレータ2481はバス2486上のアドレスそして第１アドレス・レジスタ1025の内容と一致を見いだし、よって特別ジグザグ・バス2482を駆動する。スロットCとスロットDのN道のマルチプレクサ（例えばコラム2421）は右インプット、ILPモードにおいてジグザグ・ワードラインに接続するインプット、を選ぶように設定されることは既に説明された。従って、ワードライン2482はスロットCのマルチプレクサ2431によって選ばれ、バス2460を駆動し、スロットDのマルチプレクサ2437はバス2460を選ぶ。その結果、行2411の命令はスロットCの前端パイプライン2491へ発行され、行2412の命令はスロットDの前端パイプライン2492へ発行される。よって、N道の全４つの命令発行スロットは、IRBブロック境界を越える発行の時でも、充分に活用される。
【０３３４】
[379]  図２１は、４つの命令を並列に発行できる例示的な実施形態で、発行された命令内の分岐命令の分岐決定にもとづいて、プログラムの実行フローを決定する。描写の簡明のため、実施形態の実行ユニット・パイプラインは３つのステージを持つ：Dパイプは命令でコードのため、Eパイプは実行のため、Wパイプは書き戻しのため。この実施形態の方法は他の形式と構成のパイプラインにも適用可能である。IRB2550によって発行された命令、命令デコード、依存チェック、分岐決定そしてRFリードは全てパイプ・ステージDで行なわれる。図１８のデータエンジンはデータリード・バッファDRB（図２１には記されていない）へ前もってデータを充填する。IRBの制御のもと、DRBはパイプ・ステージE（実行のためにバイパス）とパイプ・ステージW（ロード命令を実行するときRFを充填する）でデータを供給する；従って、パイプラインは通常のデータアクセス・ステージMを必要としない。
【０３３５】
[380]  図２１のトラック・テーブル2501は前実施形態とは異なる。トラック・テーブルはリード・ポインタによってポイントされたテーブル・エントリ2511と３つの続きのテーブル・エントリ2512、2513、2514を出力し、同時に４つの連続した命令がポイントするかもしれない４つの分岐ターゲットを供給する。エンド・トラック・ポイント・メモリ2502はトラック・テーブルから分離され、にもかかわらず、トラック・テーブルのそれと同じ行アドレスによるアドレス内容を記憶し、そして内容は対応する行がトラック・テーブルにおいて更新されると同時に更新される。それは４つのリードポートを持ち、４BNXアドレス・インプットにもとづいて４エンド・トラック・ポイントを並列に出力する。４つのBNXアドレス・インプットにもとづいて、エンド・トラック・ポイント・メモリによって提供された次ブロック・アドレスは有効もしくは無効とみなされる。シフタ2546、2547、2548はこれら次ブロックアドレス（エンド・トラック・ポイント・メモリによって提供される）を適切なスロットへシフトすることを担う。レジスタ2530、2531、2532、2533は同４次ブロックアドレスを記憶する。これら４つの次ブロックアドレスにおいて、シフタ2546によってシフトされた後の第１次ブロックアドレスはレジスタ2540、2541、2542のいずれかによって記憶される；シフタ2547によってシフトされた後の第２の次ブロックアドレスはレジスタ2543と2544のいずれかによって記憶される；シフタ2548によってシフトされた後の第３の次ブロックアドレスはレジスタ2545によって記憶される。レジスタ2530、2531、2532、2533によって出力された次ブロックアドレスBNXはマルチプレクサ2586によって選ばれ、それは分岐決定結果2598によって制御される。出力はバス2539を通過し、次のクロック・サイクルの現行アドレスを計算するために、トラッカー2504のマルチプレクサ2529のインプットへ送られる。また、レジスタ2530、2531、2532によって出力された次ブロックアドレスは、IRB2550、2551、2552の次ブロックアドレス・コンパレータ2419へ送られる。レジスタ2540によって出力された次ブロックアドレスは、IRB2551のコラムアドレス・コントローラ2411へ送られ、レジスタ2541と2543によって出力された次ブロックアドレスは、IRB2552のコラムアドレス・コントローラ2411へ送られる。レジスタ2542、2544、2545によって出力された次ブロックアドレスはIRB2553のコラムアドレス・コントローラ2411へ送られる；これらは次IRBブロックの複数のジグザグ・ワードラインを制御する。この実施形態において、レジスタ2525、2530、2531、2532、2533はBNXを記憶する；レジスタ2526はBNYを記憶する；レジスタ2521、2522、2523、2524はBNXとBNYの両方を記憶する。
【０３３６】
[381]  トラッカー2504は前と違って、現行アドレスと、４命令以内の分岐命令の全ての分岐ターゲットを、現行命令の開始と同時に供給することができる。特に、レジスタ2525、2526はそれぞれ現行命令の第１アドレスBNXと第２アドレスBNYを記憶する；レジスタ2521、2522、2523、2524は、トラック・テーブルによって出力された現行命令セグメント（この実施形態においては４つ）の分岐ターゲット・アドレス（BNXとBNY）2511、2512、2513、2514を記憶する。この例において、４つのBNXは’68’、４つのBNYはそれぞれ’0’、’7’、’1’、’2’である。レジスタ2525（BNX）と2526（BNY）の出力はバス2520において一緒に結合される（図において円と矢印は一緒に結合された２つのバスを表す）。レジスタ2521、2524、2523の出力は、リードバッファ2504の全ての第１アドレス・コンパレータと現行第２アドレス・デコーダ1021へ送られ、それは複数のジグザグ・ワードラインを駆動する。
【０３３７】
[382]  バス2520とレジスタ2521、2522、2523、2524の出力はマルチプレクサ2585によって選ばれ、それは分岐決定によって制御される。マルチプレクサ2585の出力の第１アドレスBNX部分2535はマルチプレクサ2529の他のインプットへ送られる；第２アドレスBNY部分2536は加算器2528へ送られ、マルチプレクサ2527によって供給されたインクリメントへ加算され、それは依存関係チェックの検出結果2565の制御の下にある。加算器の合計は新しい現行第２アドレスBNYとして用いられ、レジスタ2526へ記録される。加算器のキャリー出力信号2538はマルチプレクサ2529を制御する。キャリー出力がないとき、マルチプレクサ2529は現行第１アドレス2535を選ぶ；キャリー出力があるとき、マルチプレクサ2529は次ブロックの第１アドレス2539を選ぶ；マルチプレクサ2529の出力は新しい現行第１アドレスBNXでレジスタ2526へ記憶される。
【０３３８】
[383]  マルチプレクサ2529の出力と加算器2528の出力もまた結合され、リードポインタ2510になり、トラック・テーブル2501の読み取りを制御する。リードポインタ2510（次サイクルの現行アドレス）とトラック・テーブル2501の出力2511、2512、2513（次サイクルの命令1、2、3の分岐ターゲット）はエンド・トラック・ポイント・メモリ2502へ送られ、各アドレスの次ブロックアドレスを読み出す；そしてまたコラム・アドレス・ジェネレータ2503へ送られる。コラム・アドレス・ジェネレータは対応するコラムアドレスを生成する。現行アドレスの次ブロックアドレスはレジスタ2530へ記憶され、対応するシフトの後、レジスタ2540へ記憶される。2511、2512、2513の次ブロックアドレスと現行命令セグメントの第１、２、３命令の分岐ターゲット・アドレスはレジスタ2531、2532、2533へ記憶され、対応するシフトの後、レジスタ2541、2542、2543、2544、2545へ記憶される。
【０３３９】
[384]  IRB2550、2551、2552、2553は図２０のような構造を持つIRBの４つのグループである。４つのうち、IRB2553は次ブロック・アドレス・デコーダを必要としない。命令間の依存関係にもとづいて、依存関係チェッカー2560、2561、2562、2563は信号2597をトラッカー2504へ伝え、インクリメントを選び次サイクルの初期アドレスを決定する。2570〜2579は１０個の前端パイプラインである。分岐決定の制御のもと、マルチプレクサ2581、2582、2583は、後端パイプライン2590などによる更なる実行のために、前端パイプラインの出力を選ぶ。全部で４つの後端パイプライン2590、2591、2592、2593があり、４命令の並列実行を支える。RF2595は全ての前端パイプラインと後端パイプラインによって共有される。前端パイプライン2570によって処理される命令は、RF2595からのデータ取得を制御し、データは後端パイプライン2590へさらなる処理のために送られる。前端パイプライン2571〜2579によって処理される命令はRF2595からのデータ取得を制御し、データは、命令デコーディングを経て得られた対応する動作制御と共に、マルチプレクサ2581、2582、2583によって選ばれる。選ばれたデータと動作制御は後端パイプライン2591、2592、2593へさらなる処理のために送られる。後端パイプラインにて完了されるべく選択された命令の実行結果は、RF2595へ書き戻される。
【０３４０】
[385]  共通路があるから、全部で１０前端パイプラインがあり、それらは分岐決定によって決定される同４実行通路によって共有される。例えば、全４通路は命令セグメントの第１命令（この例では命令３）を実行しなければならず、従ってセグメントの第１命令はただ１つだけ、４つではなく、前端パイプラインが必要である。セグメントの第２、３、４命令はそれぞれ２、３、４の前端パイプラインを必要とする。同じサイクルで処理される４命令は同じ命令実行スロットにある。説明の簡明のため、同じクロック・サイクルにおいて発行された４つの連続する命令が占める命令実行スロットを、それぞれスロットA、B、C、Dと命令実行順に名付ける。スロットAは１つの選択しかなく、図１９A、Bの例では命令3である；スロットBは２つの選択を持ち、命令4（命令3は分岐しない）か命令0（命令3が分岐する）である；同じ理由でスロットCは３つ選択を持ち、スロットDは４つ選択を持つ。命令スロットにおいて実行される可能性のある全ての命令は、それ自身の指定された前端パイプラインを持つ。この図に示されるように、命令スロットAは前端パイプライン2570のみを含み、命令スロットBは２つの前端パイプライン2571、2574を、命令スロットCは３つの前端パイプライン2572、2575、2577を、命令スロットDは４つの前端パイプライン2573、2576、2578、2579を含む。後端パイプライン2590、2591、2592、2593はRA、RB、RC、RDと印され、それぞれA、B、C、D命令スロットにおける分岐決定選択の後の命令の実行を示唆する。RF2595は全命令スロットの前端、後端パイプラインによって共有される。
【０３４１】
[386]  複数の命令が１つの命令スロットにおいて発行されうるから、説明の簡明のため、道を分岐命令に起因する可能な異なるプログラム実行径路と定義する。最初に、N道を、スロットA、B、Cにおける複数の命令が非分岐命令もしくは分岐を取らない分岐命令であるような、実行径路と定義し、このサイクルには４つの命令がある；命令Aで分岐が取られたと仮定すると、ここからの全ての必要とされる命令はO道と名付けられ、このサイクルには３つの命令がある；A命令は分岐しないがBが分岐すると仮定すると、ここから必要とされる命令はP道と名付けられ、このサイクルにおいて２命令がある；もし命令A、Bが分岐せず、命令Cが分岐する場合、ここから必要な命令はQ道と名付けられ、このサイクルにおいて１つの命令がある。命令A、B、Cが分岐しない、しかし分岐命令Dによって必要とされる命令はJ道と名付けられ、このサイクルにおいてはこれらの命令のうちのゼロである。トラック・テーブル2511、2512、2513、2514の出力は、N道のスロットA 、B、C、Dの命令の対応するトラック・テーブル・エントリで、内容は各命令の分岐ターゲットであり、またO、P、Q、J道の出発点でもある。
【０３４２】
[387]  本記述において、現行命令もしくは分岐ターゲットの次ブロックアドレスは以下の方法にもとづいて生成される。生成された次ブロックアドレスはシフトされ、適切なレジスタにおいて記憶される。各IRBブロックの行数（ストレージ・エントリ数）をnとする；ブロックオフセット・アドレス（第２アドレス）をBNYとし、それは0〜n-1の値を持ち、トップ行は行0である；全部でm個のスロットがあり、0〜m-1の値を持ち、最左スロットはスロット0である；全部でw個の道があり、0〜w-1の値を持ち、最左は0道である。それから、次ブロックアドレスはもし((m-w) - (n-BNY))が0より大きければ有効で、それ以外では無効である。この実施形態において、N、O、P道の次ブロックアドレスは、対応する初期BNYアドレスにもとづいて適切なスロットへシフトされる。Q道は同次ブロックアドレスを必要としない。特に、((m-w) - (n-BNY)-1)値はシフト量として用いられ、次ブロックアドレスを右シフトする。
【０３４３】
[388]  この例では、n=8、m=4、w=4、Nは道0、Oは道1、Pは道2、Qは道3である。N道のBNY=6、((m-w) - (n-BNY))=((4-0) - (8-6))=2、で0より大きいから、次ブロックアドレスは有効である。その意味は、アドレス’6’はデコードされ、ジグザグ・ワードラインを駆動し、アドレス’6’に対応する命令はN道スロットAから発行され、アドレス’7’に対応する命令はN道スロットBから発行され、このときジグザグ・ワードラインはIRBブロックの下方境界に着いて止まる。このとき、次ブロックアドレスのデコーディングは、次命令ブロックの最初の命令にポイントし、知られるべき唯一のことは、プロセッサ資源をフル活用しそして現行IRBによって発行された命令との衝突を避けるべく、N道のどのスロットから命令が発行されるべきかということである。このとき、シフト量((m-w) - (n-BNY)-1)=1で、シフタ2546は有効な次ブロックアドレス、レジスタ2530に記憶されたN道次ブロックアドレス、を右に１つシフトし、シフト結果をN道Cスロットのレジスタ2541へ記憶する（N道の他の対応するレジスタ2540と2542の値は無効）。このアドレスは、コラム2の次命令ブロックのコラムデコーダ2411によってデコードされ、N道スロットCから最初の命令（BNY=0）を発行し、第２命令（BNY=1）はN道スロットDから発行される。もし((m-w) - (n-BNY))が0より小さいなら、次ブロックアドレスは無効であり、N道の対応するレジスタ2540、2541、2542は全て無効である。コントローラは全てのコラムデコーダ2411を制御し、それらはジグザグ・ワードラインを駆動せず、この状況故に、現行IRBブロックは命令を全てのコラムに同時に発行する。上記計算の結果は参照テーブルに置かれることで計算にとって代わることができる。
【０３４４】
[389]  依存関係チェッカー2560〜2563は図１２の依存関係チェッカーと同様の構造を持つが、検出されるべき命令のソースは少し異なる。N道の構造と依存関係チェッカー2560の接続は図１２の依存関係チェッカーのそれと同様であり、検査されるRFアドレスは４スロットのN道命令から来る。O道の依存関係チェッカー2561の基本構造は依存関係チェッカー2560と同様で、最後の３命令はスロットB、C、DのO道から、最初の命令はスロットAのN道から来る。図２１の影の部分は依存関係チェックで検査されるべきスロット命令を示している。P道の依存関係チェッカー2562はスロットA、BのN道の命令とスロットC、DのP道の相関関係を検査する。Q道の依存関係チェッカー2563はスロットA、B、CのN道とスロットDのQ道の相関関係を検査する。各依存関係チェッカーの結果はまた修正されなければならない。例えば、Q道が発行する最初の命令はスロットBからであり、もし依存関係チェッカー2561が依存関係を検出しないなら、インクリメントは’3’になる；もしスロットDの命令が依存関係を持つなら、インクリメントは’2’である；もしスロットCの命令が依存関係を持つなら、インクリメントは’1’である；もしスロットBの命令が依存関係を持つなら、インクリメントは’0’であり、次サイクルはスロットBの命令から発行を開始すべきである。同じ理由によって、依存関係チェッカー2562のソースはスロットA、BのN道とスロットC、DのP道で、それぞれインクリメント’2’（命令間に依存関係がない）、’1’（スロットDが依存関係を持つ）、’0’（スロットCが依存関係を持つ）を生成する。同じ理由で、依存関係チェッカー2563のソースはスロットA、B、CのN道とスロットDのQ道で、それぞれインクリメント’1’（命令間に依存関係がない）、’0’（スロットDが依存関係を持つ）を生成する。ここで分岐アドレス自身がプロセッサ状態を変えると仮定すると、後の命令との間に依存関係を生み出す。もしそうでなければ、トラッカー・レジスタ2521、2522、2523の命令タイプを依存関係チェックに導入し、分岐命令とそれに続く発行スロットの命令との間の依存関係チェックを無効にする。全４依存関係チェッカーによって出力されたインクリメントは、分岐決定によって制御されるマルチプレクサ2584によって選ばれ、2584の出力2597はトラッカーのマルチプレクサ2527を制御し、加法器2528へ適切なインクリメントを供給する。
【０３４５】
[390]  さらに、依存関係チェッカーの結果はまた、命令の結果を消去する中止信号を生成するのに用いられ、それは並列に生成されるが、並列には実行され得ない。特に、同時に発行された２命令間に依存関係があるとき、第２の命令とそれに続く命令の実行は中止されなければならない。
【０３４６】
[391]  図１２の依存関係チェックモジュールの実施形態を例として用いると、少なくとも１つの命令が発行されなくてはならないから、スロットAの命令は、依存関係チェックの結果がいかんであれ、常に発行され実行される。出力1491が’1’のとき、スロットBの命令とスロットAの命令との間に依存関係があり、従ってスロットB、C、Dの中止信号は’1’であり、スロットB、C、Dの前端パイプラインの実行結果はすべて消去される。これはスロットAの命令だけを発行し実行するのと等価であり、スロットB、C、Dの命令は実行されず、スロットB、C、Dは分岐TAKEN信号を生成しない。
【０３４７】
[392]  出力1491が’0’、出力1492は’1’のとき、スロットC命令がスロットAもしくはBの命令と依存関係を持つこと、そしてスロットAとBの命令は依存関係を持たないこと、を示す。従って、スロットBの中止信号は’0’で、スロットBの前端パイプラインが正常に実行する。同時に、スロットCとDの中止信号は’1’で、スロットCとスロットDの前端パイプラインの実行結果は消去される。これはスロットA、Bの命令のみを発行し実行するのと等価であり、スロットCとDの命令は実行せず、スロットCとDは分岐TAKEN信号を生成しない。
【０３４８】
[393]  出力1491、1492が両方’0’で、出力1493が’1’のとき、Dスロットの命令はスロットA、B、もしくはCのいずれかの命令と依存関係を持ち、スロットA、B、Cの命令は互いに依存関係を持たないことを示す。従って、スロットBとCの中止信号は’0’で、スロットBとCの前端パイプラインは正常に実行する。同時に、スロットDの中止信号は’1’で、スロットDの前端パイプラインの実行結果を消去する。これはスロットA、B、Cのみの命令を発行し実行し、スロットDの命令を実行しないのと等価である。スロットDは分岐TAKEN信号を生成しない。
【０３４９】
[394]  最後に、出力1491、1492、1493が全て’0’のとき、それはスロットA、B、C、Dの命令間に依存関係がないことを示す。従って、スロットB、C、Dの中止信号は’0’であり、スロットB、C、Dの前端パイプラインは正常に実行し、それはスロットA、B、C、Dの命令を発行し実行することと等価である。
【０３５０】
[395]  図２１のIRBは説明の簡便のために編成されている。もしスロットによって編成されるなら、パイプラインと結果は同じであり、従ってここでは繰り返さない。IRB2550はスロットAに対応し、ビットラインによってリンクされたリードポートのコラムを持ち、それは対応する前端パイプライン2570へ命令を発行する。スロットAにただ１つの道（N道）があり、それは対応する前端パイプライン2570上の印によって特定される。IRB2551はBスロットへ対応し、全部で２つの道（N道、O道）を持つ。IRB2552はスロットCへ対応し、全部で３つの道（N道、O道、P道）を持つ。IRB2553はスロットDへ対応し、全部で４つの道（N道、O道、P道、Q道）を持つ。スロットAのIRB2550のデコーダ2417が発行する度に、それはジグザグ・ワードライン2555を駆動しスロットA、B、C、DのN道の命令を読み出し、それから対応する前端パイプラインへ発行する。IRB2550、2551、2552の対応するデコーダがワードラインを駆動するか否かは、N道によって発行された命令が分岐命令か否かに依る。もしスロットAのN道が分岐命令なら、レジスタ2521の命令タイプは分岐である。それから、スロットB IRB2551のデコーダはレジスタ2521の分岐ターゲット・アドレスをデコードし、ワードライン2556を駆動してスロットB、C、DのO道の命令を読み出し、対応する前端パイプラインへ発行する；それはもしタイプが分岐でなければ、ワードラインを駆動しない。もしスロットAが分岐命令を持たなければ、それは分岐ターゲットを持たないから、スロットB、C、DのO道は発行される必要がない。同じ原理で、道P、Qにおいてワードラインを駆動するかは、スロットBとCのN道命令が分岐命令かに依存する（レジスタ2522、2523の命令タイプが分岐か否かを見る）。分岐タイプ情報はトラック・テーブルのテーブル・エントリを読み出すことにより提供される。この実施形態においては、リードポートはワードラインにより直接制御され、それはジグザグ・ワードラインとして設定されている。
【０３５１】
[396]  図１９Aにおいて命令セグメントを実行するとき、初期条件は、命令アドレス0〜7の命令ブロックは既にIRBブロックにあり、IRBブロックの第１アドレスレジスタ505にあるアドレスは’68’である；命令アドレス8〜15の命令ブロックは既に他のIRBブロックにあり、IRBブロックの第１アドレスレジスタ505にあるアドレスは’23’である。前クロック・サイクルにおいて、リードポインタ2510の第１アドレスBNXは’68’で、第２アドレスは’3’である（円と矢印は２つのバスが交わっていることを表す）。リードポインタ’68.3’ をアドレスとして用いて、４つの連続したテーブル・エントリを、トラック・テーブル2501の行63の３番目のテーブル・エントリから始めて、読み出す；図１９Aのテーブル・エントリの内容、分岐ターゲット・アドレス’68.0’、’68.7’、’68.1’、’68.2’はそれぞれバス2511、2512、2513、2514から読み出され、レジスタ2521、2522、2523、2524のインプットへ送られる。ここでアドレス・フォーマットはBNX.BNYである。バス2510、2511、2512の各第１命令アドレスBNXはエンド・トラック・ポイント・メモリ2502へ送られ、対応する次ブロックアドレスを読み出し、各第２アドレスBNYは、前述のように、対応するシフト量を決定するのに用いられる。バス2510〜2512のBNXアドレスは全て’68’で、メモリ2502の行68の内容は’23’で、エンド・トラック・ポイント・メモリ2502の３つの出力は全て’23’である。前述のように、現行アドレスの第２アドレス’3’とO道の第２アドレス’0’はともに無効な次ブロックアドレスを生成する。P道の第２アドレス’7’は有効な次ブロックアドレスを生成し、シフト量((m-w) - (n-BNY)-1) = ((4-2)-(8-7)-1) = 0で、シフトを必要とせず、直接レジスタ2545へ記憶される（ここでレジスタ2540、2541、2542、2543、2544は全て無効）。
【０３５２】
[397]  クロック信号がトラッカー・レジスタと次ブロックアドレス・レジスタを更新したあと、バス2520の値’68.3’、レジスタ2525と2526の出力を一緒にしたもの、がスロットA IRB2550へ現行クロック・サイクルにおいて送られる。値はデコーダの第１アドレス・コンパレータによって照合され、第２アドレス・デコーダによってデコードされ、ジグザグ・ワードライン2555を駆動して、スロットA、B、C、Dに沿って命令3、4、5、6；レジスタ2540、2541、2542のN道の次ブロックアドレスは全て無効であり、従ってスロットB、C、Dをデコードした後、コラムデコーダ2411はいかなるN道のワードラインも駆動しない。同時にレジスタ2521の出力’68.0’はスロットBのIRB2551へ送られる。デコーダによって照合されデコードされた後、それはジグザグ・ワードライン2556を駆動し、スロットB、C、DのQ道に沿った命令0、1、2を発行する；レジスタ2543と2544のO道の次ブロックアドレスは無効で、従ってスロットCとDのコラムデコーダによって駆動されるワードラインはない。同時に、レジスタ2522の出力’68.7’はP道IRB2552へ送られ、デコーダによって照合ならびにデコードされた後、ジグザグ・ワードライン2557を駆動する。P道Cスロットに沿って命令7を発行した後、ワードラインはそれがIRBブロックの下方境界に着いたときに終了する；レジスタ2545のP道の次ブロックアドレスは有効で、従ってDスロットのデコーダはそれをデコードし、ワードライン2558を駆動する；DスロットのP道の次命令ブロックのIRBにおいて’0’行が命令8を発行する。同時に、レジスタ2523の出力’68.1’はQ道のIRB2553へ送られ、デコーダによる照合とデコードの後、デコーダはワードライン2559を駆動してQ道のスロットDに沿って命令’1’を発行する。
【０３５３】
[398]  各分岐決定は、スロットA、B、C、Dの前端パイプラインにおいて、N道の命令3、4、5、6のために、独立になされる。前端パイプラインによって出力される分岐決定は、前端パイプラインによって処理されている命令が分岐命令であり、分岐が取られたと決定され、そして命令が依存関係を持たない時にのみ、’taken’である。他の状況においては分岐決定は’not taken’である。
【０３５４】
[399]  ４スロットのN道分岐決定結果は優先度エンコーダ2596へ送られ、道優先順位コード2598をエンコードする。優先度エンコーダ2596は、対応する命令のアドレス順序にもとづいて、分岐決定の優先度をセットする。もしスロットA道Nの分岐決定が’taken’であれば、この場合、エンコーダによって出力された道優先順位コード2598は、スロットB、C、DのN道の命令の分岐決定結果に関わらず、道Oを選ぶことを意味する。もしスロットA道Nの命令が’not taken’であり、スロットB道Nの分岐決定が’taken’であるなら、エンコーダによって出力された道優先順位コード2598は、スロットC、DのN道も命令の分岐決定結果に関わらず、道Pを選ぶことを意味する。もしスロットA、B道Nの命令が’not taken’であり、スロットC道Nの命令が’taken’であれば、エンコーダによって出力された道優先順位コード2598は、スロットDのN道も命令の分岐決定結果に関わらず、道Qを選ぶことを意味する。もしスロットA、B、CのN道の命令が’not take’と決定された場合、エンコーダによって出力された道優先順位コード2598は、道Jを選ぶことを意味し、後で説明される。最後にスロットA、B、C、DのN道が全て’not taken’と決定された場合、エンコーダによって出力された道優先順位コード2598は、道Nを選ぶことを意味する。
【０３５５】
[400]  道優先順位コード2598はマルチプレクサ2581、2582、2583、2584、2585、2586を制御する。全部のマルチプレクサが、道優先順位コードの全ての意味タイプの制御を必要とはしない。例えば  道優先順位コードJはマルチプレクサ2586の制御をしない。最初に、後端パイプラインに供給される前端パイプラインの出力を選ぶ状況を見る。マルチプレクサ2581、2582、2583は、前端パイプラインによってデコードされた動作制御信号とDRBからのデータを選ぶ。図１８の実施形態に見られたように、データエンジンによって充填されたDRB（図２１には記されていない）、もまたスロットへ、この実施形態ではIRB2550〜2553のように、編成される；スロットAはN道、スロットBはNとO道、スロットCはN、O、P道、スロットDはN、O、P、Q道を持つ。道グルーピングはIRB2550〜2553と同じである。各スロットのDRBは後端プロセッサとRFへ、その対応するスロットのIRB2550、2551、2552、2553の制御のもと、データを提供する。DRBスロットA道Nからのデータと、スロットA道Nの前端パイプラインによって生成された動作制御信号は、両方とも後端パイプライン2580へ、バイパス実行もしくはRF2595に記憶されるために、送られる。DRBの他のスロットからのデータと、対応するスロットの前端パイプライン2571〜2579の動作制御信号は共にマルチプレクサ2581、2582、2583を通して選ばれ、後端パイプライン2591、2592、2593へ、バイパス実行もしくはRF2595に記憶されるために、送られる。
【０３５６】
[401]  もし道優先順位コードがO道を選ぶことを意味するなら、マルチプレクサ2581、2582、2583はOインプットを選び、つまり３つのO道前端パイプラインの、後端パイプライン2591、2592、2593への出力を、処理続行のために、選ぶ。前端パイプライン2470の出力は後端パイプライン2590へ送られ、分岐決定には影響されない。ここでスロットA道Nの前端パイプラインの命令は命令3である。スロットB、C、DのO道の前端パイプラインの命令は、命令3が’taken’分岐命令であると仮定した時の命令で、つまり分岐命令3の分岐ターゲット0、そしてターゲットに続く２つの命令（命令1と2）である。よって命令3、0、1、2は後端パイプライン2590、2591、2592、2593へ処理のために送られる。
【０３５７】
[402]  同じ理由で、道優先順位コードがP道を意味するなら、マルチプレクサ2581、2582、2583は全てそれらのPインプットを選ぶ、つまりN道スロットAとBの前端パイプラインの出力とP道スロットCとDの前端パイプラインの出力は、マルチプレクサの出力として用いられ、処理を続行するために後端パイプラインへ供給される。よって命令3、4、7、8は後端パイプライン2590、2591、2592、2593へ送られ処理される。同じ理由で、道優先順位コードがQ道を意味するとき、マルチプレクサ2581、2582、2583は全てそれらのQインプットを選び、N道スロットA、B、Cの前端パイプラインの出力とQ道スロットDの前端パイプラインの出力はマルチプレクサ出力として、処理を続行するために後端パイプラインへ供給される。よって命令3、4、1、2は後端パイプライン2590、2591、2592、2593へ処理のために送られる。同じ理由で、道優先順位コードがN道を意味するとき、マルチプレクサ2581、2582、2583は全てそれらのNインプットを選び、N道スロットA、B、C、Dの前端パイプラインの出力は、処理の続行のために後端パイプラインへ供給される。よって命令3、4、5、6は後端パイプライン2590、2591、2592、2593へ処理のために送られる。道優先順位コードがJ道を意味するとき、マルチプレクサ2581、2582、2583は全てそれらのJインプットを選び、そして命令3、4、5、6を出力する。J道とN道の選択は現行クロック・サイクルにおいて同じで、違いは次サイクルにおいてのみ重大である。
【０３５８】
[403]  道優先順位コード2598はまた次サイクルでどの命令のセグメントが実行されるかを決定する。 分岐決定から生成される道優先順位コード2598はマルチプレクサ2584、2585、2586を制御しプログラムのコースを決定する。トラッカー2504は、次クロック・サイクルで実行されるべき命令セグメントの先頭命令アドレスを、マルチプレクサ2584の出力、それはある道のアドレス・インクリメント量を選ぶ；マルチプレクサ2585の出力、それは現行サイクルにおける同じ道の先頭アドレスを選ぶ；そしてマルチプレクサ2586の出力、それは現行サイクルにおける同じ道の次ブロックアレスを選ぶ、にもとづいて計算する。特に、この方法は加法器2528を使って、現行サイクルにおいてマルチプレクサ2585によって選ばれた（レジスタ2525、2526から、もしくはレジスタ2521、2522、2523、2524から）、ある道の先頭アドレスのBNYアドレス2536を、マルチプレクサ2527によって選ばれたインクリメント量、マルチプレクサ2584によって選ばれた同じ道の出力（依存関係チェッカー2560、2561、2562、2563から）によって制御されている、に追加する；合計は次サイクルの先頭命令の第２アドレスBNYである。加法器2528のキャリーアウト出力2538はマルチプレクサ2529を制御する；もしキャリーアウトが’0’なら、現行サイクルのこの道の先頭アドレスの第１アドレスBNX2535を選ぶ；もしキャリーアウトが’1’なら、マルチプレクサ2586の出力2539を選び、それはマルチプレクサ2586によって選ばれた（レジスタ2530、2531、2532、2533から）、現行サイクルのこの道の次ブロックアドレスの第１アドレスBNXであり、マルチプレクサ1529の出力は次サイクルの第１アドレスBNXである。BNXとBNYは合体してリードポインタ2510になり、それはトラック・テーブル2501へポイントし、pポイントされたエントリ2511、そして次の３つのエントリ2512、2513、2514を、前述と同様の仕方で読み出す。リードポインタ2510はまたエンド・アドレス・メモリ2502とコラムアドレス・ジェネレータ2503へ送られ、対応する次ブロックアドレスとコラムアドレスを得る。従って、クロック信号が来るとき、リードポインタ2510のBNXとBNYはそれぞれ現行アドレスとしてレジスタ2525と2526へ送られる；トラック・テーブル出力2511〜2514はそれぞれレジスタ2521〜2524へ分岐ターゲット・アドレスとしてラッチされる；エンド・アドレス・メモリ2502の出力はレジスタ2530〜2533へ次ブロックアドレスとしてラッチされ、そして対応するシフトの後レジスタ2540〜2545へラッチされる。プロセッサはオペレーションの新サイクルを、前に述べられたように、開始する。
【０３５９】
[404]  道優先順位コード2598がN道であるとき、マルチプレクサ2584は命令依存関係チェッカー・ユニット2560の出力をインクリメント制御信号2597として選ぶ。道優先順位コード2598がO道、P道、Q道であるとき、マルチプレクサ2584はそれに対応して、命令依存関係チェッカー・ユニット2561、2562、2563の出力をインクリメント制御信号2597として選ぶ。道優先順位コード2598がJ道であるとき、マルチプレクサ2584は常に’0’をインクリメント制御信号2597として選び、制御信号はマルチプレクサ2527においてインクリメント値’0’を選ぶ。
【０３６０】
[405]  ここに幾つかの実例をあげる：分岐決定がN道命令3、4、5、6で分岐しない、そして依存関係チェック・ユニット2560は命令3、4、5、6に依存がないと判断したと仮定する。それから、分岐優先順位エンコーダ2596が道優先順位コードをN道として出力する。そしてマルチプレクサ2581、2582、2583はN道の前端パイプラインの出力を選び、実行のために後端パイプライン2591、2592、2593へ送る。従って、命令3、4、5、6は後端パイプラインで実行し、実行結果は共有RF2586へ書き戻される。マルチプレクサ2584は依存関係チェッカー2560の出力’4’をインクリメント量として選び、加法器2528から2597へ送り、それをマルチプレクサ2585によって選ばれたレジスタ2526の内容’3’に合計する。合計は’7’で、キャリーアウトは’0’である。従ってマルチプレクサ2529はレジスタ2525の内容’68’をマルチプレクサ2585を通して選ぶ。従ってリードポインタは’68.7’、次サイクルはN道の命令7、8、9、10（8、9、10は次IRBブロック内にある）を実行する。他の道O、P、Qは命令7、8、9のトラック・テーブル・エントリから記録された分岐ターゲットから実行を始める。もし命令が非分岐であれば、対応する道のIRBは命令を発行せず、そして道はまた最終分岐決定のために選ばれない。
【０３６１】
[406]  分岐決定が命令3、4、5は分岐を取らないが命令6は分岐を取ると結論し、依存関係チェックユニット2560が４つの命令間に相関関係はないと結論したと仮定する。ここで、分岐優先順位エンコーダ2590は道優先順位コードをJ道として出力する。ここで、マルチプレクサ2581、2582、2583はN道の前端パイプライン出力を選び、実行のために後端パイプライン2591、2592、2593へ送る。従って、命令3、4、5、6は後端パイプラインにて実行する。マルチプレクサ2584はJ道のインクリメント制御’0’を選び、加法器2528から2597へ送る。加法器は同インクリメント制御と、マルチプレクサ2585によって選ばれたレジスタ2524の内容’2’を合計し、合計は’2’でキャリーアウトは’0’である。従ってマルチプレクサ2529はレジスタ2524の第１アドレス’68’を選び、それはマルチプレクサ2585によって選ばれる。従ってリードポインタは’68.2’で、次サイクル命令2、3、4、5はN道にて発行される。他の道O、P、Qは命令2、3、4のトラック・テーブル・エントリに記録された分岐ターゲットから実行を始める。
【０３６２】
[407]  分岐決定がスロットA命令3は分岐を取らない、しかしスロットB命令4は分岐を取る、そして依存関係チェックユニット2562が４つの命令間に相関関係はないと結論したと仮定する。それから分岐優先順位エンコーダ2596は道優先順位コードをP道として出力する。マルチプレクサ2581はN道Bスロットの前端パイプライン出力を選び、実行のために後端パイプライン2591へ送る。マルチプレクサ2582、2583はP道スロットC、スロットDの前端パイプライン出力を、後端パイプライン2592、2593によって実行されるべく、選ぶ。従って命令3、4、7、8は後端パイプラインで実行される。マルチプレクサ2584は依存関係チェックユニット2562の出力のインクリメント制御’2’を選び、加法器2528から2597へ送る。
加法器2528はインクリメント制御とマルチプレクサ2585によって選ばれたレジスタ2522の内容’7’とを合計する。合計は’1’でキャリーは’1’である。従って、マルチプレクサ2529はレジスタ2532の第１アドレス’23’の内容を選び、それはマルチプレクサ2586によって選ばれる。従って、リードポインタは’23.1’、命令9、10、11、12（４つの連続した命令で次命令ブロックのアドレスが’1’であるものから始まる）は次サイクルにN道にて発行される。他の道O、P、Qは命令9、10、11のトラック・テーブル・エントリに記録された分岐ターゲットから実行を始める。
【０３６３】
[408]  分岐決定がスロットA命令3は分岐を取り、そして依存関係チェックユニット2561がO道Bスロット命令0がN道Aスロット命令3に依存関係を持つ結論したと仮定する。それから分岐優先順位エンコーダ2596は道優先順位コードをO道として出力する。そしてマルチプレクサ2581、2582、2583はO道Bスロット、Cスロット、Dスロットの前端パイプラインの出力を、後端パイプライン2591、2592、2593によって実行されるべく選ぶ。従って命令3、0、1、2は後端パイプラインで実行される；しかしそれからB、C、Dスロットの0、1 、2命令は依存関係により中止され、スロットAの命令3のみが完了され、その結果は共有RF2595へ書き戻される。マルチプレクサ2584は依存関係チェックユニット2561によって出力されたインクリメント制御’0’を選び、加法器2528から2597へ送る。加法器2528はインクリメント制御とマルチプレクサ2585によって選ばれたレジスタ2521の第２アドレスの内容’0’とを合計する。合計は’0’でキャリーは’0’である。従って、マルチプレクサ2529は、マルチプレクサ2585によって選ばれた、レジスタ2521の第１アドレス’68’の内容を選ぶ。従って、リードポインタは’68.0’、命令0、1、2、3は次サイクルにN道にて発行される。他の道O、P、Qは命令0、1、2のトラック・テーブル・エントリに記録された分岐ターゲットから実行を始める。
【０３６４】
[409]  この実施形態はジグザグ・バスによって制御されたIRBを用い、それは複数の命令を順番に発行することができる。この実施形態は分岐ターゲット情報と命令の次ブロックアドレス情報をフル活用し、共にトラック・テーブルに記憶され、それは間もなく実行され、複数の同IRBを制御し、分岐命令による複数の実行径路上の命令を並列に前処理する。この実施形態は処理されている各分岐命令に対して分岐決定をおこない、それから最終分岐決定結果を、分岐命令の順序を考慮にいれて、生成する。分岐決定結果は、さらに処理されるべき複数の実行径路の１つのセットの、中間的な前処理結果を選び、そして選ばれたセットの中の命令に対する依存関係チェックは、選ばれたセットの中の命令の一部もしくは全部が実行を完了するために用いられる、他は中止される、かを決定する。それはまた選ばれた径路の先頭第２アドレスを同じ径路のインクリメント量に追加する。次サイクルにおいて、加算の合計は第２アドレスになり、先頭第１アドレスは、もし合計がIRBブロック境界を越えなければ、次サイクルの第１アドレスになる。次サイクルにおいて、IRBブロック境界以内の合計は第２アドレスになり、選ばれた径路の次ブロックアドレスは、もし合計がIRBブロック境界を越えれば、第１アドレスになる。
【０３６５】
[410]  本開示は命令マルチ発行の方法を開示する。この方法はn個の連続した命令を並列に発行する、アドレスaの命令から始めて、依存関係チェックモジュールを用いて同複数命令間の依存関係を検出し、依存関係と依存命令の場所に応じてアドレス・インクリメント量iをフィードバックする；そして命令アドレスa=a+iから始まる n個の命令を発行する。ここで、発行する命令の列は0、1、2、…、n-1と定義される；それからi=p、pは命令列の最初の依存命令の場所である；nは、もし発行された命令間に依存が見つからない場合の依存命令の場所と定義される。ここで依存関係をもつ２命令のうち、列の後方にある命令を、依存命令と定義する。
【０３６６】
[411]  本開示は特別データリード・バッファ（DRB）を採用する。データエンジンは命令に対応するデータを先取りし、DRBヘ前もって充填する命令が発行されるとき、対応するデータは自動的にIRBから実行のために抽出される。
【０３６７】
[412]  パイプラインのプロセッサは通常の命令取得パイプ段階から出発せず、むしろ命令デコード・パイプ段階から出発する；それはまたメモリ（データ）アクセス段階を含まない。命令はプロセッサ・コアへ、トラック・テーブル、トラッカー、そしてIRBを含む命令エンジンによって押し込まれる。データはデータエンジンによって先取りされ、DRBへ充填され、データはコアへ、対応する命令の発行に続いて、押し込まれる。
【０３６８】
[413]  この方法の具体的な実装は、対角もしくはいわゆるジグザグ・ワードラインを用いて、メモリを制御し、それは１つの命令（もしくは一般的にデータ）に対して複数のリードポートを持ち、複数のビットラインがこれらのリードポートを接続し、それらは互いに独立しており、よって連続した命令（もしくは連続したデータ）のセグメントが、複数のビットラインの上を、接続された複数の処理ユニットへ、並列処理のために送られる。
【０３６９】
[414]  本開示はまた、命令ループを複数のレーンへ展開し並列に実行する方法も開示する。
【０３７０】
[415]  本開示はまた、複数レーン・プロセッサの命令スケジューリング方法、そしてスレッド優先度、命令の準備/有効状態、そしてこれらスレッドのデータ、に応じてレーン資源を割り当てる方法も開示する。
【０３７１】
[416]  本発明はまた、複数レーン・プロセッサのレーン間の命令実行を同期させる方法も開示する。
【０３７２】
[417]  図２２は実施形態に整合する例示的な、レーン・プロセッサの汎用IRB構造である。この実施形態において、各レーンは全く同じ構造、汎用構造を持ち、各レーンは４道を含みそして１つの命令スロットに対応する。全部で４つのスロットがある：A、B、C、D、で図２１に示される分岐ペナルティ無しにILPマルチ発行を実現する。
【０３７３】
[418]  特に、図２２の第１レーン（スロットA）を例にとると、各レーンのトラック・テーブル2601、トラッカー2604、レジスタ2621、2622、2623、IRB2650はそれぞれ図２１のトラック・テーブル2501、トラッカー2504、レジスタ2521、2522、2523、IRB2550へ対応する。レーンのIRB2650は４道を含むから、従って４つの対応する前端パイプラインが存在し、前端パイプライン2670は図２１の実行ユニット2570へ対応し、実行ユニット2661、2662、2663は他の３道に対応する。マルチプレクサ2680がこれら４道の前端パイプラインの結果を選んだ後、実行を続けるためにそれを後端パイプライン2690へ送る。
【０３７４】
[419]  この実施形態において、図２１の実施形態におけるように、スロットAはN道のみを必要とし、従ってIRB2650のO、P、Q道と最後の３つの前端パイプライン2661、2662、2663は無効と設定され、マルチプレクサ2680は常に前端パイプライン2670の出力を選ぶよう設定され、設定後のレーンの構造は図２１のスロットAと同様である。スロットBはN、O道だけ必要とし、従ってIRB2651のP、Q道と最後の２つの前端パイプラインは無効と設定され、マルチプレクサ2681は前端パイプライン2671と2674の出力を選ぶよう設定され、設定後のレーンの構造は図２１のスロットBと同様である。スロットCはN、O、P道だけ必要とし、従ってIRB2652のQ道と最後の前端パイプラインは無効と設定され、マルチプレクサ2681は前端パイプライン2672、2675、2674の出力を選ぶよう設定され、設定後のレーンの構造は図２１のスロットCと同様である。スロットDは４道全て必要とし、従って設定後のレーンの構造は図２１のスロットDと同様である。明瞭のため、優先順位エンコーダとその対応するマルチプレクサ、相関検出モジュール2660の詳細は図２２に示されていない。優先順位エンコーダそしてその対応するマルチプレクサ、の構造と機能は図２１のそれと同じである。依存関係チェッカー・モジュール2660は、図２１の依存関係チェッカー・モジュール2560、2561、2562、2563の機能を含み、図２１の配線が示すような、対応するスロットと道において発行された命令に対して同様の依存関係チェックを施すことができ、よってここでは繰り返されない。
【０３７５】
[420]  レーン・プロセッサが、図２１の実施形態で示されたような、分岐ペナルティ無しのILPマルチ発行モードであるとき、４スロットのうち１スロットAのトラック・テーブル2601、トラッカー2604、レジスタ2621、2622、2623が用いられる。他の３つのスロットのトラック・テーブル、トラッカーそして対応するレジスタはオペレーションに参加しない。この実施形態において、このモードは、これら４スロットのマルチプレクサ2640、2641、2642、2643の設定を通して達成される。特に2640はトラッカー2604によって出力されたリードポインタを出力として選ぶように設定され、この出力は図２１のバス2520と等しく、スロットAのIRB2650のコントローラへ送られ、ローカル・ワードライン2655を駆動して、N道スロットAから命令を発行する。ローカル・ワードライン2655はさらにグローバル・ジグザグ・ワードライン2645を駆動して、N道スロットB、C、Dから同時に命令を発行し、これら４つのN道の命令はそれぞれ前端パイプライン2670、2671、2672、2673へ実行のために送られる。
【０３７６】
[421]  マルチプレクサ2641は、レジスタ2621の出力のリードポインタ値をスロットBのIRB2651のコントローラへの出力として選び、ローカル・ワードライン2656を駆動して、O道スロットBからの命令を発行する、ように設定される。ローカル・ワードライン2656はさらにグローバル・ジグザグ・ワードライン2646を駆動して、O道スロットC、Dから同時に命令を発行し、これら３つのO道の命令はそれぞれ前端パイプライン2674、2675、2676へ実行のために送られる。
【０３７７】
[422]  マルチプレクサ2642は、レジスタ2622の出力のリードポインタ値をスロットCのIRB2652のコントローラへの出力として選び、ローカル・ワードライン2657を駆動して、P道スロットCからの命令を発行する、ように設定される。ローカル・ワードライン2657はさらにグローバル・ジグザグ・ワードライン2647を駆動して、P道スロットDから同時に命令を発行し、これら２つのP道の命令はそれぞれ前端パイプライン2677、2678へ実行のために送られる。
【０３７８】
[423]  マルチプレクサ2643は、レジスタ2623の出力のリードポインタ値をスロットDのIRB2653のコントローラへの出力として選び、ローカル・ワードライン2658を駆動して、Q道スロットDからの命令を発行し、前端パイプライン2679へ実行のために送る、ように設定される。
【０３７９】
[424]  後続のオペレーションは図２１で実施されたものと同じであり、よってここでは繰り返されない。よって、この実施形態の汎用レーン構造は図２１の実施形態で描かれた機能を設定によって達成する。
【０３８０】
[425]  本開示は、計算資源の複数のセットによって消費される命令とデータの間の相関関係を設定することで、様々なモードの並列命令実行を達成する方法を開示する。本開示はまたレーン・プロセッサを開示し、それは複数のワードライン（複数の命令メモリを制御し、そのリードポートは相互に独立なビットラインによって繋がっている）の設定を通して並列で複数の命令を発行することが可能である。これらのワードラインはローカル・ワードライン、それはレーン内を制御する、そしてグローバル直線ワードラインとグローバル筋交いワードライン、それらは共にレーン間の通過を制御する、を含む。ワードラインの設定と各命令メモリの内容そしてレーン間データ交換が、このレーン・プロセッサが複数モードの動作をサポートすることを可能にする。各レーンは独立にもしくは組み合わさって動作することができる。隣接するレーンは異なるモード下で動作でき、互いに干渉しない。レーンはまたソフトウェアによって直列関係に設定可能で、データをリレー方式で処理する。
【０３８１】
[426]  本開示はさらに、マルチレーン・プロセッサを使ってILPマルチ命令発行を実現する方法も開示する。この方法は、各レーンへ複数分岐の命令を処理するために複数の前端パイプラインを供給し、レーン間のデータ交換を提供し、各レーンのレジスタファイル内容を同じにし、各レーンが同じプログラムを同期しながら実行するようにする。先頭アドレスから始まるn個の連続した命令を駆動し、そしてn命令内の分岐命令からの可能な分岐ターゲット命令を、分岐関係に応じた異なる仕方で駆動し、そして命令シーケンス順序に応じてn命令スロットへ駆動する。
各nレーンはそれ自身の発行スロットの命令に責任を持つ。各スロットの命令は同時に発行される。同複数の同時発行命令はそれぞれ独立に実行される。命令間の依存関係はチェックされ、依存関係を持つ命令と同じ道の後続命令は全て中止される；そして道アドレス・インクリメント量は、命令間に依存関係があるか、そして依存命令の場所、にもとづいて、各道へフィードバックされる。分岐決定が独立に各分岐命令を、他の分岐決定に関係なく、実行するようにする。独立した分岐決定のそれぞれと分岐命令シーケンス順序にもとづいた分岐優先度、にもとづいて、現行サイクルと次サイクルにおける実行の道を決定する。決定された道にもとづいて、同同時発行命令から正常実行とリタイアのためのn個の命令を選び、残りの命令を中止する。決定された次サイクルの道にもとづいて、この道の現行サイクル・アドレスと道のインクリメント量とを合計する。結果は次サイクルの先頭アドレスのブロックオフセット・アドレスBNYである。もし上記合計がブロックアドレス境界を越えないなら、決定された道の現行サイクル・アドレスを、次サイクルの先頭ブロック・アドレスBNXとする。もし上記合計がブロックアドレス境界を越えるなら、決定された道の現行サイクル次ブロック・アドレスを、次サイクルの先頭ブロック・アドレスBNXとする。それから先頭アドレスから始まるn個の連続した命令、そしてn個の命令内の分岐命令からの可能な分岐ターゲット命令が同時に発行される。このプロセスは繰り返して行なわれる。
【０３８２】
[427]  図２３は実施形態と整合する例示的な、レーン・プロセッサ・システムの完全な構造である。２つのレーンを持ち、各レーンは４つの道をもつ、レーン・プロセッサ・システムが例として示される。実施形態の方法とシステムはまた、より多くのレーンもしくは道を持ったレーン・プロセッサ・システムへも拡張できるが、それらの詳細はここでは探られない。この実施形態において、プロセッサ・システムはトラック・テーブル・モジュール2701、トラッカーモジュール2703、データエンジン・モジュール2705、第１レベル命令キャッシュ2707、IRB2709、依存関係チェッカー・モジュール2711、実行ユニット2713、データリード・バッファ2715、書き込みバッファ2717、第１レベルデータキャッシュ2719、スキャナ2721、第２レベルキャッシュ2723から構成される。第２レベルキャッシュ2723は命令とデータの両方を記憶する。前実施形態で述べられたように、トラッカー2703が、分岐ターゲット命令がまだ第１レベル命令キャッシュ2707に記憶されていないことを見いだしたとき、それは対応する命令ブロックを第２レベルキャッシュ2723から取得し、それを第１レベル命令キャッシュ2707へ充填し、同時に対応するトラックを、スキャナが充填された命令を検査した後、トラック・テーブル2701に造る。データエンジン2705が、データアクセス命令のデータアドレスに対応するデータがまだ第１レベルデータキャッシュ2719に記憶されていないことを見いだしたとき、それは対応するデータブロックを第２レベルキャッシュ2723から取得し、それを第１レベルデータキャッシュ2719へ充填し、同時に第２レベルキャッシュ2723へ、第１レベルデータキャッシュ2719からはじき出されたデータブロックを書き戻す。
【０３８３】
[428]  この実施形態のレーン・プロセッサ・システムは２つのレーン（命令スロットAとBに対応する）を含み、各レーンは４道（合計８道）を含み、各道は実行ユニット、IRB、DRBからなるセットを持つ。依存関係チェッカー・モジュール2711は設定可能で、レーン内で、もしくは複数レーンのある道において、あるいは複数レーンの全ての道において、発行された命令間の依存関係を検出する。トラッカー・モジュール2703とトラック・テーブル・モジュール2701は２つのトラッカーと２つのトラック・テーブルを含み、それぞれスロットAとBに対応する。命令レベル並列発行と設定されたとき、スロットAトラッカー・モジュール2703とトラック・テーブル・モジュール2701に対応するトラッカーとトラック・テーブルだけが動作し、スロットAのトラッカーは、第１レベル命令キャッシュ2707から、分岐ターゲット命令をインデックスし取得し、それをプロセッサが分岐命令へと実行する前に、IRB2709へ充填する。スロットBに対応するトラッカーとトラック・テーブルは動作しない。
【０３８４】
[429]  加えて、図２１、２２の実施形態において描かれたように、トラッカー・モジュール2703は新しい現行BNX、BNYを、初期BNX、BNYに依存関係チェックユニット2711によって出力されたインクリメント量、実行ユニット2713によって出力される分岐結果2714に応じて決定される、を追加することによって計算する。
【０３８５】
[430]  データエンジン・モジュール2705もまた２つのデータエンジンを含み、それぞれスロットAとBに対応している。この例では、データエンジンは図１８のそれと同様である。それは同じデータアクセス命令の次回の実行のために、ストライド情報にもとづいて可能なデータアドレスを計算する。同データアドレスに対応するデータが第１レベル・データキャッシュ2719からIRB2715へ、もしまだそこにないなら、充填される。特に、IRB2709がデータアクセス命令を実行ユニット2713へ発行するとき、同時にバス2710を通してDRB2715へ宛てる（図１８Bの実施形態の例では、アドレスはバス2215を通してデコーダ222へ送られ、それからデータアクセス命令に対応するデータを読み出すためにインデクスする）。
【０３８６】
[431]  加えて、実施形態のプロセッサ・システムにおいて、書き込みバッファ2717は、実行ユニット2713が第１レベルデータキャッシュ2719に書き戻そうとしているデータを、一時的に記憶し、一時的データを、もしDRB2715へデータを充填しないなら、第１レベルデータキャッシュ2719へ書き戻す（第１レベルデータキャッシュ2719のポートはこのときビジーでない）。これは第１レベルデータキャッシュ2719における読み込み／書き込み衝突を減らし、実行ユニット2713で使われうるデータがDRB2717へ直に充填されることを保証する。
【０３８７】
[432]  前実施形態で述べられたように、トラッカー・モジュール2703の誘導のもと、本実施形態のプロセッサ・システムはIRBを制御し、正しい命令をプログラムフローに沿って中断無しに実行ユニットにて実行されるように供給し、そしてIRBに記憶された情報をもとに、分岐命令が分岐を取るか否かに関わらず、対応するデータをDRBの中に見つける。プロセッサ・システムで用いられた各道はそれ自身のIRBとDRBを持ち命令と対応するデータを供給するから、従って命令と対応するデータは異なる道に対して同時に供給され、よってプロセッサ・システム効率を向上させる。
【０３８８】
[433]  本開示の技術的なプランはより多くの階層を持ったキャッシュ・システムに拡張しうる。
【０３８９】
[434]  この分野に精通した者には、ここに示された実施形態の様々なバリエーションが企てられうることが自明である。発明は例示的な実施形態において描写されたものの、添付された請求項の精神と範囲の中で修正を伴って上述で概説されたように実装されることが考えられる。
【０３９０】
[435]  本開示の装置と方法はレーン・プロセッサに関連する様々なアプリケーションへ応用され、それはレーン・プロセッサの効率を向上させることができる。
【図１】
0006467743.tif 000003
【図２Ａ】
0006467743.tif 000004
【図２Ｂ】
0006467743.tif 000005
【図３】
0006467743.tif 000006
【図４】
0006467743.tif 000007
【図５】
0006467743.tif 000008
【図６】
0006467743.tif 000009
【図７】
0006467743.tif 000010
【図８Ａ】
0006467743.tif 000011
【図８Ｂ】
0006467743.tif 000012
【図８Ｃ】
0006467743.tif 000013
【図９Ａ】
0006467743.tif 000014
【図９Ｂ】
0006467743.tif 000015
【図９Ｃ】
0006467743.tif 000016
【図９Ｄ】
0006467743.tif 000017
【図９Ｅ】
0006467743.tif 000018
【図９Ｆ】
0006467743.tif 000019
【図１０Ａ】
0006467743.tif 000020
【図１０Ｂ】
0006467743.tif 000021
【図１１】
0006467743.tif 000022
【図１２】
0006467743.tif 000023
【図１３Ａ】
0006467743.tif 000024
【図１３Ｂ】
0006467743.tif 000025
【図１３Ｃ】
0006467743.tif 000026
【図１３Ｄ】
0006467743.tif 000027
【図１３Ｅ】
0006467743.tif 000028
【図１３Ｆ】
0006467743.tif 000029
【図１３Ｇ】
0006467743.tif 000030
【図１３Ｈ】
0006467743.tif 000031
【図１３Ｉ】
0006467743.tif 000032
【図１４Ａ】
0006467743.tif 000033
【図１４Ｂ】
0006467743.tif 000034
【図１４Ｃ】
0006467743.tif 000035
【図１５Ａ】
0006467743.tif 000036
【図１５Ｂ】
0006467743.tif 000037
【図１５Ｃ】
0006467743.tif 000038
【図１６】
0006467743.tif 000039
【図１７】
0006467743.tif 000040
【図１８Ａ】
0006467743.tif 000041
【図１８Ｂ】
0006467743.tif 000042
【図１９Ａ】
0006467743.tif 000043
【図１９Ｂ】
0006467743.tif 000044
【図２０】
0006467743.tif 000045
【図２１】
0006467743.tif 000046
【図２２】
0006467743.tif 000047
【図２３】
0006467743.tif 000048