【手続補正書】
【提出日】平成29年8月17日(2017.8.17)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の汎用ユニットからなる高性能プロセッサ・システムで、
各汎用ユニットは、少なくとも１つの実行ユニットと命令リード・バッファ（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モードで作動する、ことを特徴とする請求項６に記載の高性能プロセッサ・システム。
【請求項１４】
mとwを正数とすると、m個の連続した命令が、可能な分岐ターゲット命令とm命令内の分岐命令の後続命令とともに、最初のアドレスから分岐関係にもとづいてw個の道へ組織され、そしてまた命令の順序にもとづいてm個の命令発行スロットへ分割される；
各発行スロットは１つの汎用ユニットへ対応し、それは少なくとも１つの後端パイプラインと最大w個までの前端パイプラインとそして最大wセットまでのIRBリード・ポート／ビット・ラインを持つ；
前端パイプラインは分岐決定ステージへ到るパイプラインを含み、そして後端パイプラインは分岐決定ステージの後のパイプライン・ステージを含む；
グローバル・ジグザグ・ワードラインは、m個の汎用ユニットの複数の前端パイプラインへの命令を発行するw個道のそれぞれの複数のリード・ポートを制御する、ことを特徴とする請求項６に記載の高性能プロセッサ・システム。
【請求項１５】
トラッカーはトラック・テーブルとエンド・アドレス・テーブルをアドレス指定するために初期アドレスを提供する；
トラック・テーブルはエンド・アドレス・テーブルをアドレス指定するターゲット・アドレスを出力する；
エンド・アドレス・テーブルは初期アドレスとターゲット・アドレスの次ブロック・アドレスを出力する；
初期アドレス、ターゲット・アドレスそしてエンド・アドレスは複数の汎用ユニットのIRBへ送られる；
初期アドレスはm個のIRBの始めから命令順にジグザグ・バスを駆動し、各ターゲット・アドレスはその対応する分岐命令が発行されるIRBから始めてジグザグ・バスを駆動する；各次ブロック・アドレスは、その対応する初期もしくはターゲットのジグザグ・パスが命令ブロックの最後の命令のリード・ポートを繋げるところのIRB、その後ろのIRBから始めてジグザグ・バスを駆動する、ことを特徴とする請求項１４に記載の高性能プロセッサ・システム。
【請求項１６】
依存関係チェッカーは発行命令間の依存関係をチェックしそして、依存関係チェックの結果にもとづいて、各道に対してアドレス・インクリメントを生成する；
各前端パイプラインは分岐命令を処理する時、独立に分岐決定を下す；
複数の独立した分岐決定と分岐命令のシーケンスにもとづいて、道を選択するシグナルが生成され、道を選択する；
選択された道の中の非依存命令と選択された道以前の命令は各汎用ユニットの後端パイプラインによって実行されリタイアされる；
開始オフセット・アドレスと選択された道の道アドレス・インクリメント量が加算され、加算結果の下位部分は次の初期オフセット・アドレスとなる；
加算結果がブロック・オフセット・アドレス境界を越えないとき、選ばれた道ブロック・アドレスは次の初期ブロック・アドレスである；そして
加算結果がブロック・オフセット・アドレス境界を越えるとき、選ばれた道ブロック・アドレスの順番上次のブロック・アドレスが次の初期ブロック・アドレスである、ことを特徴とする請求項１４に記載の高性能プロセッサ・システム。
【請求項１７】
１つの汎用ユニットが単一発行モードにおいて動的に配分され、もしくは複数の汎用ユニットがILPモードにおいて動的に配分され、シリーズの命令を実行する；そして、
複数の汎用ユニットが、命令ループを展開し命令ループを並列実行してループ・サイクル数を減らすために、配分される、ことを特徴とする請求項６に記載の高性能プロセッサ・システム。
【請求項１８】
システムは命令ループから、少なくとも共有レジスタ・アドレス、基底アドレス・レジスタ・アドレス、ストライド、そしてループの深さを含む情報を抽出する；
共有レジスタ・アドレスとは、ループの反復において変わる事のない共有パラメータを保持する各汎用ユニット内のレジスタのアドレスである；
基底アドレス・レジスタ・アドレスは、ループ反復で使用される基底アドレスを保持する各汎用ユニット内のレジスタのアドレスである；
ストライドとは基底アドレスの２反復間の差異である；
ループの深さとは命令ループ内の命令数である；
もしくは特別なLOOP命令が共有レジスタ・アドレス、基底アドレス・レジスタ・アドレス、ストライド、ループの深さ、そしてループ幅を提供する；
ループ幅とはループの総数である、ことを特徴とする請求項１７に記載の高性能プロセッサ・システム。
【請求項１９】
命令ループにおいて、複数の汎用ユニットがループ幅と利用可能な汎用ユニットの最大数にもとづいて配分される；
配分された汎用ユニットの各IRBは同じ命令を記憶し、行相関モードであり、１つの汎用ユニットがアクティブ汎用ユニットとして指定される；
アクティブ汎用ユニットは共有パラメータと開始基底アドレスを抽出し、共有パラメータを配分された汎用ユニットのそれぞれに記憶するためにイントラ汎用ユニット・バスを経て送りだし、アクティブ汎用ユニットの基底レジスタの開始基底アドレスを記憶し、イントラ汎用ユニット・バスを経て他の配分された汎用ユニットへ開始基底アドレスとストライドを送り、その間、他の配分された汎用ユニットのそれぞれは、開始基底アドレスを、ストライド量と汎用ユニットとアクティブ汎用ユニットとの間の汎用ユニット数の差異を掛け合わせたものによって調整し、そして各汎用ユニットの基底レジスタの中に調整された基底アドレスを記憶する、ことを特徴とする請求項１８に記載の高性能プロセッサ・システム。
【請求項２０】
配分された汎用ユニットはループの深さ分の命令を一度実行する；
もしループ幅から実行されたループの数を引いたものがまだ配分された汎用ユニットより大きいならば、ストライドと配分された汎用ユニットの数にもとづいて各汎用ユニットの反復パラメータを計算しセットし、そして配分された汎用ユニットはループの深さ分の命令を一度実行する；
実行されたループがループ幅に等しくなったとき、ループ動作モードを脱出する、ことを特徴とする請求項１９に記載の高性能プロセッサ・システム。
【請求項２１】
複数の汎用ユニットのそれぞれは複数セットのスレッド資源を複数セットのIRBと複数セットのレジスタとして持ち、スレッド・レベル並列処理（TLP）をサポートする；
IRBは命令をその対応する汎用ユニットのそれぞれにスレッドの状態に応じて出力し、スレッドに対応するレジスタはデータを記憶もしくは取り出す；
スレッド資源はスレッド状態にもとづいてスイッチし、実行資源を使用し、よって複数汎用ユニットはTLPプロセッサとして機能する、ことを特徴とする請求項１に記載の高性能プロセッサ・システム。
【請求項２２】
スレッド資源を各プログラムに、プログラム優先度、プログラムの資源にたいする現時点での需要、そしてプログラムの準備状態に応じて動的に配分する；
汎用ユニットは、もし現在より高い優先度のプログラムによって必要とされていないならば、より低い優先度のプログラムに配分され、より高い優先度のプログラムが必要とするときには、より高い優先度のプログラムへ返される、ことを特徴とする請求項２１に記載の高性能プロセッサ・システム。
【請求項２３】
システムはさらに以下を含む：
プログラムの優先度に応じて各プログラムへ汎用ユニットを配分し、優先度が高いほどより多くの汎用ユニットが配分される；
配分された汎用ユニットの中から１つのIRBをリードIRBとして指定し、各リードIRBの中の命令は出力され、汎用ユニットにおける実行のためのその通常の出力の前であり、早く出力された命令はプログラム実行のための資源需要を決定するためにデコードされ、その時点においてより高い並列度を持ったプログラムがより高い資源需要を持つ；
プログラムの準備状態は少なくともプログラムがその時点において必要とする利用可能なデータを含む；
実行されるべき命令の資源需要と準備状態は、その時点におけるプログラム毎の需要フィードバック・シグナルを構成し、プログラムの優先度と需要フィードバック・シグナルにもとづいてスレッド資源を配分する、ことを特徴とする請求項２２に記載の高性能プロセッサ・システム。
【請求項２４】
システムはさらに以下を含む：
配分ユニット；配分ユニットは、スレッド資源テーブルの内容、プログラムの資源需要、そしてプログラムの準備状態にもとづいて、動的にスレッド資源をプログラムへリアルタイムで配分する；
スレッド資源テーブルの各行はシステムによって実行されたプログラムの記録、それはプログラムの識別、スレッド資源番号、プログラムに配分された汎用ユニットの位置、そしてアクティブ汎用ユニットの位置を含む、を保持する；
実行のための命令の通常の出力の前に、各リードIRBは命令をその資源需要を決定するためにデコードされるべく出力する；
プログラムの資源需要とプログラムの準備状態はフィードバック・シグナルを形成し、フィードバック・シグナルはプログラムの配分された汎用ユニットのスレッド資源テーブルにおける位置と‘AND'されて、プログラムの実際の需要を形成する；
最高位優先度のプログラムの実際の需要にもとづいて汎用ユニットを動的に配分し、まだ配分されていない残りの汎用ユニットは次の高位優先度のプログラムの実際の需要にもとづいて配分され、全ての汎用ユニットが配分されるまで、もしくは各プログラムがその汎用ユニット配分を得るまで、プログラムの優先度にもとづいて汎用ユニットを配分する；
各汎用ユニットは配分に応じて動作する、ことを特徴とする請求項２３に記載の高性能プロセッサ・システム。
【請求項２５】
システムはさらに以下を含む：
プロセッサ・システム内において異なるスレッド間の命令同期を命令アドレスにもとづいた順次ロックによって実施する；
プログラム内の命令はもし２つの汎用ユニットが同じプログラムを実行するならロック命令としてセットされうる；サブ・ルーティン内の命令はもし２つのスレッドが同じサブ・ルーティンを呼び出すならロック命令としてセットされうる；ロック命令のアドレスはロック・アドレスであり、ロック・アドレスはトラック・ポイント位置（BN）でありうる；
もしロックされたスレッドがロック命令を実行するなら、それは一時停止実行によってロックされ、ロック・レジスタへロック・アドレスを記憶する；
アンロック・スレッドがロック命令を実行するとき、アンロック・スレッドはロック・アドレスを、ロック・レジスタのアドレスと照合するために、送り出す；
もし照合一致した場合、ロックされているスレッドはアンロックされ実行を再開する、ことを特徴とする請求項１に記載の高性能プロセッサ・システム。
【請求項２６】
プロセッサ・システム内において異なるスレッド間の命令同期を命令アドレスにもとづいたバリア・ロックによって実施する；
プログラム内の命令はもし２つの汎用ユニットが同じプログラムを実行するならロック命令としてセットされうる；サブ・ルーティン内の命令はもし２つのスレッドが同じサブ・ルーティンを呼び出すならロック命令としてセットされうる；ロック命令のアドレスはロック・アドレスであり各汎用ユニットのロック・レジスタに記憶され、ロック・アドレスはトラック・ポイント位置（BN）でありうる；
バリア・ロック同期した汎用ユニットがロック命令を実行するとき、それは実行を一時停止し、ロック・アドレスをロック・レジスタにおけるアドレスと照合するために送り出す；
全ての照合結果が"一致"のとき、バリア・ロックされた汎用ユニットは実行を再開する、ことを特徴とする請求項１に記載の高性能プロセッサ・システム。
【請求項２７】
プロセッサ・システム内において異なるスレッド間の命令同期を命令アドレスにもとづいたバリア・ロックによって実施する；
各汎用ユニットはさらにデータ・リード・バッファ（DRB）を含む；
DRBのエントリはデータ取得命令を含んでいるIRBのエントリに対応する；
高性能プロセッサはさらに少なくとも１つのデータ・エンジンを含む；
同データ・エンジンは、該当するデータ取得命令が実行ユニットによって実行される前に、DRBに必要なデータを充填する；そして
IRBが該当するデータ取得命令を実行ユニットに送る時に、DRBは該当するデータを実行ユニットへ送る、ことを特徴とする請求項１に記載の高性能プロセッサ・システム。