(57)【特許請求の範囲】
【請求項１】
主メモリ（６０２）を有するコンピュータ（１０）におけるベクトル処理方法において、
複数のベクトルレジスタ（１６０）の各々につき、それぞれ複数の要素（１６２）を有するチャンク（１６１）を複数含めるステップと、
有効性インジケータ（８２２，８２５，８３２）にて、有効である複数の要素（１６２）の部分集合を指示するステップと、
有効となった複数の要素（１６２）に対応して上記有効性インジケータ（８２２，８２５，８３２）の値を調整するステップであって、各チャンク（１６１）は、該チャンク（１６１）内における２もしくはそれ以上の要素（１６２）が上記メモリ（６０２）からロードされると、有効であるとマーク付けされる、ステップと、
上記複数のベクトルレジスタ（１６０）の１つをプログラムのインストラクションに応答して制御するステップであって、選択された１つのベクトルレジスタ（１６０）は、該ベクトルレジスタ（１６０）の有効な要素（１６２）が算術論理機能ユニット（ＡＬＦＵ）（１６５）へ連続的に送信され、その結果、複数の有効な要素から選択された要素（１６２）が、上記１つのベクトルレジスタ（１６０）からの有効な要素（１６２）が利用可能になる速度で、上記ＡＬＦＵ（１６５）を通して流れるように制御される、ステップと、を有している方法。
【請求項２】
上記ＡＬＦＵ（１６５）として、連続処理のためのオペランドに対応する上記ベクトルレジスタ（１６０）からの上記要素（１６２）のアドレスを受信しながら、未完了の処理のオペランドに対応する上記要素（１６２）のアドレスを保持するアドレスパイプライン（８５０，８５６）を備えたものを用いる、請求項１のベクトル処理方法。
【請求項３】
プログラムのインストラクションに応答して、上記ＡＬＦＵ（１６５）のアドレスパイプライン（８５６）を介してオペランドとしての上記要素（１６２）のアドレスを、該プログラムのインストラクションに応答して動作するベクトルレジスタコントローラ（８３１）へ送信するために、上記ＡＬＦＵ（１６５）に対して個々のベクトルレジスタ（１６０）を選択的に接続するステップと、
プログラムのインストラクションに応答して、上記ＡＬＦＵ（１６５）のアドレスパイプライン（８５０）から出力される演算結果としての上記要素（１６２）のアドレスを受信するステップと、をさらに有している、請求項２に記載のベクトル処理方法。
【請求項４】
メモリ（６０２）とベクトル処理装置を備えたコンピュータシステムであって、
上記ベクトル処理装置は、
上記メモリ（６０２）に結合された複数のベクトルレジスタ（１６０）であって、それぞれ、複数の要素（１６２）を含むチャンク（１６１）を複数有するベクトルレジスタ（１６０）と、
上記チャンク（１６１）内の２かそれ以上の要素（１６２）が上記メモリ（６０２）からロードされると、当該チャンク（１６１）に有効性をマーク付けする、チャンク有効性コントローラ（５００）と、
上記ベクトルレジスタ（１６０）の各々に対応する有効性インジケータ（８２２，８２５，８３２）であって、それぞれ、対応するベクトルレジスタ（１６０）内における有効な要素（１６２）の部分集合を指示するとともに、上記チャンク有効性コントローラ（５００）に接続される、有効性インジケータ（８２２，８２５，８３２）と、
上記複数のベクトルレジスタ（１６０）に結合された算術論理機能ユニット（ＡＬＦＵ）（１６５）と、
上記複数のベクトルレジスタ（１６０）を制御するために接続され、上記複数のベクトルレジスタ（１６０）から選択されたベクトルレジスタ（１６０）の有効な要素（１６２）を上記ＡＬＦＵ（１６５）へ連続的に送信するために、プログラムのインストラクションに応答して動作するベクトルレジスタコントローラ（８３０，８３１）と、を有している、コンピュータシステム。
【請求項５】
上記ＡＬＦＵ（１６５）は、連続処理のオペランドに対応する上記ベクトルレジスタ（１６０）からの上記要素（１６２）のアドレスを受信しながら、未完了の処理のオペランドに対応する上記要素（１６２）のアドレスを保持するように動作するアドレスパイプライン（８５０，８５６）を更に備える、請求項４のコンピュータシステム。
【請求項６】
上記ＡＬＦＵ（１６５）に対して個々のベクトルレジスタ（１６０）を選択的に接続するとともに上記ＡＬＦＵ（１６５）のアドレスパイプライン（８５０，８５６）を介してオペランドとしての上記要素（１６２）のアドレスを上記ベクトルレジスタコントローラ（８３１）へ送信するために、プログラムのインストラクションに応答して、上記ＡＬＦＵ（１６５）のアドレスパイプライン（８５０，８５６）の入力に結合されるオペランドパスセレクタ（８４０）と、
上記ＡＬＦＵ（１６５）のアドレスパイプライン（８５０，８５６）から出力される演算結果としての上記要素（１６２）のアドレスを受信するために、プログラムのインストラクションに応答して、上記ＡＬＦＵ（１６５）のアドレスパイプライン（８５０，８５６）の出力に結合される、結果のパスセレクタ（８１１，８２１）と、を更に備える、請求項５記載のコンピュータシステム。
【請求項７】
主メモリ（６０２）を有するコンピュータ（１０）のためのベクトル処理装置において、
上記メモリ（６０２）に結合された複数のベクトルレジスタ（１６０）であって、それぞれ、複数の要素（１６２）を含むチャンク（１６１）を複数有するベクトルレジスタ（１６０）と、
上記チャンク（１６１）内の２かそれ以上の要素（１６２）が上記メモリ（６０２）からロードされると、当該チャンク（１６１）に有効性をマーク付けする、チャンク有効性コントローラ（５００）と、
上記ベクトルレジスタ（１６０）の各々に対応する有効性インジケータ（８２２，８２５，８３２）であって、それぞれ、対応するベクトルレジスタ（１６０）内における有効な要素（１６２）の部分集合を指示するとともに、上記チャンク有効性コントローラ（５００）に接続される、有効性インジケータ（８２２，８２５，８３２）と、
上記複数のベクトルレジスタ（１６０）に結合された算術論理機能ユニット（ＡＬＦＵ）（１６５）と、
上記複数のベクトルレジスタ（１６０）を制御するために接続され、上記複数のベクトルレジスタ（１６０）から選択されたベクトルレジスタ（１６０）の有効な要素（１６２）を上記ＡＬＦＵ（１６５）へ連続的に送信するために、プログラムのインストラクションに応答して動作するベクトルレジスタコントローラ（８３０，８３１）と、を有しているベクトル処理装置。
【請求項８】
上記ＡＬＦＵ（１６５）は、連続処理のオペランドに対応する上記ベクトルレジスタ（１６０）からの上記要素（１６２）のアドレスを受信しながら、未完了の処理のオペランドに対応する上記要素（１６２）のアドレスを保持するように動作するアドレスパイプライン（８５０，８５６）を更に備える、請求項７記載のベクトル処理装置。
【請求項９】
上記ＡＬＦＵ（１６５）に対して個々のベクトルレジスタ（１６０）を選択的に接続するとともに上記ＡＬＦＵ（１６５）のアドレスパイプライン（８５０，８５６）を介してオペランドとしての上記要素（１６２）のアドレスを上記ベクトルレジスタコントローラ（８３１）へ送信するために、プログラムのインストラクションに応答して、上記アドレスパイプライン（８５０，８５６）の入力に結合されるオペランドパスセレクタ（８４０）と、
上記ＡＬＦＵ（１６５）の上記アドレスパイプライン（８５０，８５６）から出力される演算結果としての上記要素（１６２）のアドレスを受信するために、プログラムのインストラクションに応答して、上記アドレスパイプライン（８５０，８５６）の出力に結合される結果のパスセレクタ（８１１，８２１）と、を更に備える、請求項８記載のベクトル処理装置。
【請求項１０】
主メモリ（６０２）を有するコンピュータ（１０）のためのベクトル処理装置において、
上記主メモリ（６０２）に結合された複数のベクトルレジスタ（１６０）であって、それぞれ、順序付けられたデータの組をなす複数の要素（１６２）を含むチャンク（１６１）を複数有するベクトルレジスタ（１６０）と、
上記ベクトルレジスタ（１６０）の少なくとも１つのための、該ベクトルレジスタ（１６０）におけるそれぞれ有効である連続的な要素（１６２）の範囲を指示する有効性ポインタ（８２５）と、
有効となった複数の連続要素（１６２）に応答して、上記有効性ポインタ（８２５）の値を調整するために有効性ポインタ（８２５）に結合されたチャンク有効性コントローラ（５００）であって、チャンク（１６１）内の２もしくはそれ以上の要素（１６２）が上記メモリ（６０２）からロードされると、各チャンク（１６１）を有効であるとマーク付けする、チャンク有効性コントローラ（５００）と、
上記ベクトルレジスタ（１６０）の少なくとも１つに結合された算術論理機能ユニット（ＡＬＦＵ）（１６５）と、
選択された１つのベクトルレジスタ（１６０）が有効な要素（１６２）の範囲内の全ての要素（１６２）を上記ＡＬＦＵ（１６５）へ連続的に送信し、その結果、有効な要素（１６２）が、上記ベクトルレジスタ（１６０）からの有効な要素（１６２）が利用可能になる速度で上記ＡＬＦＵ（１６５）を通して流れるように、プログラムのインストラクションに応答して上記ベクトルレジスタ（１６０）を制御すべく接続されたベクトルレジスタコントローラ（８３０，８３１）と、を有しているベクトル処理装置。
【発明の詳細な説明】
発明の分野
本発明は、高速コンピュータにおけるメモリアクセス方法及び装置に関し、より詳細には、高速ベクトルプロセッサにおける有効性連鎖に関する。
発明の背景
ベクトルプロセッサを有する高速コンピュータ（ベクトルコンピュータ）はメモリ内のデータへの高速アクセスを必要とする。この種のコンピュータで最大かつ最高速のものはスーパーコンピュータとして知られている。コンピュータを高速化する一つの方法は、パイプライン化法と呼ばれており、入力と出力の間のコンピュータのデジタル論理が複数のシリアルに接続された連続ステージに分割される。データは、先のデータ入力がコンピュータの出力ステージを通して完全に処理される前にコンピュータの入力ステージに供給される。入力段と出力段との間には多数の中間段が存在する。各段は先行段で実行された機能に加えて、所望の全体機能のいくらかを実行する。このようにして、データの多数の部分が入力段と出力段の間の各連続段における処理の種々の連続ステージに存在する。各個別段は、全体の機能のごく一部のみを実行するに過ぎないので、システムクロックは短くすることができる。各連続クロックはパイプライン内でデータを一段ずつ進める。
パイプライン化の結果、システムクロックはパイプライン化されていないシステムのシステムクロックより高速のレートで動作することができる。今日の幾つかのコンピュータデザインでは、システムクロック周期は２ナノ秒（ｎｓ）という高速であり、このことは、単一の機能ユニットについてではあるが、毎秒５００×１００万回の演算が行えることを意味する。各プロセッサ内の並列機能ユニットおよび単一のシステム内の並列のプロセッサはさらに多量のスループットを可能にする。しかしながら、高性能スループットの達成は、データが各パイプラインにシステムクロックレートに近い高速で供給される場合にのみ可能である。
スーパーコンピュータに関し、性能を向上するいま一つの方法は、各中央演算処理ユニット（ＣＰＵ）が互いに結合された多数プロセッサのシステムを構成することである。いくつかの多数プロセッサシステムでは、ＣＰＵ間で１又は複数の共通メモリ補助システムを共有する。幾つかのシステムは、１より多いベクトル演算を同時に実行することができる数個の独立したベクトルプロセッサを各々が有する複数のＣＰＵを持っている。
処理速度が高速化されるにしたがって、コンピュータシステム内のメモリサイズは、より高性能のプロセッサがより大きいプログラムとより多量のデータを処理できるので、飛躍的に増大される。更に、エラー訂正回路が信頼性を向上するためメモリパス内に配置される。メモリアクセス速度は、時間については改善されたが、メモリサイズの増大とエラー訂正回路の複雑さはメモリアクセス時間はほぼ一定のままであることを意味する。例えば、典型的なスーパーコンピュータのシステムクロックレートは、３世代にわたって８ｎｓから４ｎｓへ４ｎｓから２ｎｓへと改善された。同じ時間周期にわたって、メモリアクセス時間はほぼ９６ｎｓのままになっている。この時間は８ｎｓのプロセッサは１２クロックでメモリをアクセスし、４ｎｓのプロセッサでは２４クロック、２ｎｓプロセッサでは４８クロックでアクセスすることを意味する。メモリ全体からランダムにデータをアクセスするコンピュータでは、より高速化されたシステムクロックレートによる速度の改善が何ら見られない。
１つの解決策は、ベクトルの各要素（データ）がそれに関して実行される同様の演算を有する複数のベクトルにデータを編成することである。コンピュータの設計者はベクトルの種々の要素を同時に取り込むためにメモリの種々の部分を設計しており、これら取り込まれた要素は連続するクロックサイクルで１又はそれ以上の並行パイプラインに取り込まれる。この種のデザイン例は、クレイ（Cray）に対し、１９７８年１２月５日に発行された米国特許第４，１２８，８８０号（８８０特許）、チェン等（Chen et al.）に対し、１９８７年４月２８日に発行された米国特許第４，６６１，９００号およびクレイ等（Cray et al.）に対し、１９９４年９月２０日に発行された米国特許第５，３４９，６６７号−これら各特許は、本発明の譲受人であるクレイリサーチインコーポレイテッド（Cray Research Inc.）に譲渡されている−に記載されている。
例えば、ベクトル要素は、メモリ内のベクトルイメージ内の連続した要素位置からベクトルレジスタへとパイプラインにロードされる。単一のＣＰＵは並行に動作することができる数個のベクトルプロセッサを含んでいる。パイプライン化されたメモリからのベクトルロードにオーバーラップして、あるベクトルプロセッサにパイプラインを通して第３のベクトルレジスタに供給された結果のベクトルを供給するために、２つの他のベクトルレジスタからデータを取り出す他のパイプラインが存在する。これらのベクトルロードにオーバーラップして、いま１つのベクトルプロセッサにパイプラインを通して更にいま１つのベクトルレジスタに供給された結果のベクトルを供給するため、他の２つのベクトルレジスタからデータを取り込む他のパイプラインが存在する。この種のデザインの良好に調整されたシステムにおいては、２ｎｓパイプラインクロックを用いると、比較的低速のメモリアクセス時間にも拘わらず、ベクトルプロセッサ内の並行機能ユニットと、高性能の全体パフォーマンスを備えたマルチプロセッサシステム内の並行ベクトルプロセッサを具備したプロセッサ内において、スループットは単一のベクトル機能ユニットについて毎秒５００×１００万回の演算に達しうる。
クレイに対する'８８０特許に記述されたシステムにおいては、各ベクトルレジスタに連係する単一のカウンタが任意のベクトル演算について当該ベクトルレジスタにおける要素をアドレスするのに使用されている。ベクトル演算はゼロ番の要素（ベクトルレジスタの第１要素）で始まり、ベクトル長レジスタで特定される数の要素が処理されるまで続行される。“連鎖（chaining）”と呼ばれるプロセスでは、次の（即ち第２の）ベクトル演算において先の（第１の）ベクトル演算から得られた結果をオペランドとしてのベクトルとして使用する必要がある場合、第２の演算は第１のベクトル演算の結果がベクトルレジスタに到達すると同時に開始（発行）される。第２のインストラクションは、それ故、第１のインストラクションに連鎖“chained”されている。'８８０特許に応じて構成されるシステムでは、第１の機能ユニットにおいて実行される第１ベクトル演算の結果得られる要素は、結果のベクトルレジスタに格納されると同時に、第２の機能ユニットに渡される。この種のシステムにおいて、クロック周期毎に発生するベクトルレジスタに対し、唯一の演算（読出し又は書込み）のみがなされるので、連鎖は第１のインストラクションについて結果の書込み動作がベクトルレジスタに対して行われた時に発生し、同時にその要素の値はあたかも同じレジスタから読み出されたように第２の機能ユニットに渡される。このようにして、単一のクロック期間の間に第２のインストラクションが発行（実行が開始）されるとともに第１のインストラクションに連鎖される。この単一クロック期間は連鎖スロット時間（chain slot time）と名付けられ、各ベクトルインストラクションについて１回だけ生ずる。次にインストラクションが先の機能ユニットもしくはオペランドレジスタ予約の故に連鎖スロット時間に正確に発せられなかった場合には、次のインストラクションは先の演算の全ての要素の結果が結果のベクトルレジスタに格納され、レジスタ予約が解除されるまで待機される。更に、次の１つの要素は、第１機能ユニットによって要素が利用可能となるように、クロック毎に第２の機能ユニットによって受け入れられなければならない。
チェン等に対して与えられた米国特許第４，６６１，９００（，９００特許）に記述されたシステムでは、第１のベクトル演算からの第１要素の書込みから次のベクトル演算の第１要素の読出しへの連鎖は、各ベクトルレジスタに連係する２つの個別カウンタ（１つは読出し用、１つは書込み用）を設けることにより結合が解除されている。これらカウンタは、そのベクトルレジスタにおいて、夫々読出しの要素のアドレス指定及び書込みの要素のアドレス指定に使用される。“フレキシブル連鎖（flexible chaining）”と呼ばれるプロセスでは、相続く演算が連鎖スロット時間に正確に開始されるように強制されてはおらず、第１の結果の要素が相続く演算のオペランドレジスタとして指定されている結果のベクトルレジスタに書き込まれた後の任意の時間に発行される。再び、各ベクトル演算は、ゼロ番の要素（ベクトルレジスタの第１要素）から開始され、ベクトル長レジスタで指定される数の要素が処理されるまで続行される。ベクトル要素の列は２つの列（偶数の要素と奇数の要素）に分割される。偶数要素の書込み動作は、偶数列に行き、同じクロック期間に奇数番の要素の書込み動作は奇数列に行く。次のクロック期間において、次の奇数の要素の次の読出し動作は奇数列に行き、次の偶数の要素の次の書込み動作は偶数列に行く。この方法で、２つの演算は各クロック期間毎、各ベクトルレジスタについてスケジュールされる。
長島等の発明で日立に譲渡された英国特許ＧＢ２１１３８７８号は、先行するインストラクションのライトアドレスの通過に対してリードアドレスを制限する回路を有するベクトル処理装置を開示している。」
本発明の譲受人であるクレイリサーチインコーポレイテッドによって製作されたＣｒａｙ Ｙ−ＭＰＣ９０の如く、超高速ベクトルプロセッサでは、コンピュータシステムは、各々一つ以上のベクトルプロセッサを有する多数の中央演算ユニット（ＣＰＵ）を有する。更に、コンピュータシステムはＣＰＵによって使用されるプログラムとデータを格納する多数の共通メモリを有する。ベクトルデータはＣＰＵに流し込まれ、即ちパイプライン化され、長いアクセス時間による遅延は単一のリクエストの結果として、相続くサイクルで多数の要素を処理することによって補償される。ベクトルプロセッサを通してのベクトルデータの流れの挙動を向上する一つの方法は、特定のベクトルレジスタのどの要素が利用できるか又は有効であるかをモニタ又は追跡するとともに、要素をそれらが利用可能になると、算術もしくは論理ベクトル演算により処理するための算術／論理機能ユニット（ＡＬＦＵ）に流すことである。
先行技術第４図及び第５図を参照して、ベクトルレジスタ内の要素が、例えば、そのベクトルレジスタ内において第１の演算による結果として利用可能となるや否や（又はその後の任意の時間）それら要素が“オペランド”として第２の演算に連鎖されるように、数回の連続的なベクトル演算が“フレキシブル連鎖”によって実行される。このようなシステムの一つが上記'９００特許に記述されている。このようなアプローチはベクトルレジスタへのデータ読み込みがシーケンス外で（例えばメモリ内における潜伏期間により）生ずる情況においては、限られた価値しかない。
必要なのは、メモリ内における相当の潜伏時間を補償することができる。ベクトルコンピュータシステムのための改良されたベクトル連鎖システムであり、ベクトルプロセッサへの、を通しての、およびからのベクトルデータ処理能力を向上することができる方法である。
発明の要旨
本発明は、コンピュータシステムにおけるベクトル処理のための方法および装置を教示する。ベクトルレジスタ内の要素群の最後の要素［チャンク（Chunk）］がメモリからロードされると、チャンク全体が有効（valid）であるとしてマークされるとともに、次に続くもしくは継続中の演算による使用が可能とされる。
ベクトル処理装置は、各ベクトルレジスタが複数の要素を保持する複数のベクトルレジスタを有する。ベクトルレジスタの各々について、有効性インジケータが設けられ、有効性レジスタが有効である対応ベクトルレジスタ内の要素のサブセット（部分集合）を指示する。チャンク有効性コントローラは、有効となった複数の要素に対応して、有効性インジケータの値を調整するために動作する有効性インジケータに結合される。算術論理機能ユニット（ＡＬＦＵ）はプログラムのインストラクションにより特定される機能を実行するためベクトルレジスタに結合される。ベクトルレジスタコントローラは、選択されたベクトルレジスタの有効な要素が連続的に上記ＡＬＦＵに伝送されるように、プログラムのインストラクションに応じてベクトルレジスタを制御するために接続されており、これら要素はＡＬＦＵを通してベクトルレジスタからの有効な要素の利用可能性によって決定される速度で流される。
本発明の一つの態様によれば、ＡＬＦＵは連続的な演算のためのオペランドを受信しながら、未だ完了していない演算用オペランドデータを保持するためのプロセッサパイプラインをさらに備える。
本発明のいま一つの態様によれば、ＡＬＦＵはさらに、連続的な演算のためのオペランドに対応する要素アドレスを受信しながら、未だ完了していない演算用オペランドに対応する要素アドレスを保持するためのアドレスパイプラインをさらに備える。
本発明のさらにいま一つの態様によれば、コンピュータシステムは、ＡＬＦＵを通してオペランドとしてのデータを送信するため個々のベクトルレジスタを選択的に接続するため、プログラムのインストラクションに対応したオペランドパスセレクタと、ＡＬＦＵからの結果を受信するためプログラムのインストラクションに対応した結果のパスセレクタとをさらに備える。
ベクトル処理方法は、複数のベクトルレジスタの各々について複数の要素を保持するステップ、有効性インジケータにおいて有効である要素の部分セットを指示するステップ、有効になった複数の要素に対応して有効性インジケータの値を修正するステップ、算術論理機能ユニット（ＡＬＦＵ）を用意するステップ、選択されたベクトルレジスタの有効な要素をＡＬＦＵに連続的に送信させるためにプログラムのインストラクションに応答してベクトルレジスタ手段を制御し、ベクトルレジスタからの有効な要素の利用可能性によって決まる速度で要素をＡＬＦＵを通して流すようにするステップからなる。
本発明のベクトル処理方法のいま一つの態様によれば、本方法は、さらに、プログラムのインストラクションに応答してＡＬＦＵを通してオペランドとしての要素を送信するため個々のベクトルレジスタを選択的に接続するステップとプログラムのインストラクションに応答してＡＬＦＵから結果を受信するステップからなる。
【図面の簡単な説明】
第１図は本発明の一例としての実施例を図示する図式ダイアグラムである。
第２図は本発明の一例の実施例にしたがった、要素１６２とチャンク１６１からなるベクトルレジスタ１６０を示す図式ダイアグラムである。
第３Ａ図はメモリからベクトルレジスタにベクトル要素を取り込む動作と、その直後にそれらの要素をオペランド要素として読み取るいま１つの動作のタイミングダイアグラムを示す。
第３Ｂ図はメモリからベクトルレジスタにベクトル要素を取り込む動作と、数クロック周期後にそれらの要素をオペランド要素として読み取るいま１つの動作のタイミングダイアグラムを示す。
第３Ｃ図はメモリからベクトルレジスタにベクトル要素を取り込む動作と、それらの要素をオペランド要素として要素が要素列に書き込まれるのと同じ周期で使用するいま一つの動作のタイミングダイアグラムを示す。
第３Ｄ図は第３Ｃ図に示すモードでスタートし、後に第３Ａ図に示すモードに変更する動作のタイミングダイアグラムを示す。
第３Ｅ図はメモリからベクトルレジスタに要素の順番とは違って到着するベクトル要素を取り込む動作と、本発明にしたがってチャンク連鎖を用いてそれらの要素をオペランド要素として読み取るいま一つの動作のタイミングダイアグラムである。
第４図は従来の機能ユニットパイプラインを図示する図式ダイアグラムである。
第５図は従来のベクトルレジスタアレイと制御を示す図式ダイアグラムである。
第６図は第１図に示したベクトルレジスタ１６０のアレイと制御の一実施例の詳細を図示する図式ダイアグラムである。
第７図は第１図に示したベクトルレジスタ１６０のアレイと制御のいま一つの実施例の詳細を図示する図式ダイアグラムである。
第８図はチャンク連鎖コントローラの一実施例の詳細を示す図式ダイアグラムである。
第９図はチャンク連鎖コントローラの他の実施例の詳細を示す図式ダイアグラムである。
第１０図は複数のベクトルレジスタ１６０によって共有される単一のチャンク有効性コントローラ５００を図示する図式ダイアグラムである。
第１１図は複数のベクトルレジスタ１６０の各々に接続される個別のチャンク有効性コントローラ５００を示す図式ダイアグラムである。
好ましい例示的実施例の記述
以下の好ましい例示的実施例の詳細な記述において、記述の一部をなす添付の図面が参照され、これら図面においては、本発明が実施される特定の例示的実施例を図示している。本発明の範囲を逸脱することなしに、他の例示的実施例を利用することができ、構造的変更をなしうることを承知すべきである。
メモリサブシステムが大規模かつ、より複雑化され、プロセッサがより高速となると、ある演算の各成分の時間寄与がより重要となる。多数の独立したメモリサブシステムを備えたマルチプロセッサシステムにおいては、ベクトル要素は、種々の部品間の競合や使用のために、あるメモリサブシステムからは他のメモリサブシステムより早く到達する。性能を最高にするためには、あるベクトルのある要素が他の要素の到着より早く到着するという利点を利用することが好ましい。したがって、上記したシステムにおけるように、零番目の要素から出発して順番通りに要素を処理することに固執するよりは、それらの要素が利用可能になり次第、ベクトルの要素を処理することが好ましい。
第１図は本発明にしたがって構成されたスカラー／ベクトルスーパーコンピュータ１０の例示的実施例を示す図式ダイアグラムであり、共通メモリインターフェース１１２を介して共通メモリ６０２．１〜６０２．Ｍに接続されたスカラー／ベクトルプロセッサＣＰＵからなる。共通メモリ６０２．１〜６０２．Ｍのための“メモリ”は、キャッシュメモリ、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、同期ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）およびビデオランダムアクセスメモリ（ＶＲＡＭ）等で形成されるメインメモリ、ハード磁気ディスク、光ディスク及び磁気テープ装置等の大量格納装置を含みうる。第１図において、ＣＰＵ１００はベクトルプロセッサ１６５、スカラープロセッサ１２５、アドレスプロセッサ１３５、ベクトルレジスタ１６０．１〜１６０．Ｎ、Ｓレジスタ１２０、Ｔレジスタ１４０、Ａレジスタ１３０、Ｂレジスタ１５０、インストラクションバッファ１７０、スカラーデータキャッシュ１１０、およびアドレスセレクタ１１１からなる。共通メモリインターフェース１１２はスカラー／ベクトルプロセッサＣＰＵ１００の共通メモリのセット６０２へのアクセスを与える。１つの実施例では、共通メモリ６０２．１〜６０２．Ｍは共通メモリインターフェース１１２を介してマルチプロセッサ、マルチメモリシステムを形成するＣＰＵ１００と同様の他の複数のスカラー／ベクトルプロセッサＣＰＵに接続される。
スカラーデータキャッシュ１１０は、ＣＰＵ１００内の少なくとも１つのレジスタによって高速にアクセス可能な共通メモリセット６０２内の一部のデータの局所的キャッシュコピーを与える。スカラーデータキャッシュ１１０をＣＰＵ１００内の全てのレジスタにアクセス可能とすることは、そのようなアクセスが付加的なローディングと配線の複雑化をもたらすので得策ではない。第１図に示した実施例では、スカラーＳレジスタ１２０とアドレスＡレジスタ１３０は、スカラーデータキャッシュ１１０からライト・スルー（write-through）（ストアスルーとも呼ばれる）でデータ取込みを行うことができる一方、他の全てのレジスタは共通メモリインターフェース１１２を介して共通メモリ６０２からデータを直接にアクセスしなければならない。
スカラーデータキャッシュ１１０は、本発明の譲受人に譲渡された、“ベクトルプロセッサ用ライトスルー能力を備えた連係スカラーデータキャッシュ”と題する同時係属中の出願により詳細に説明されている。
'９００特許において記述されたデザインでは、各ベクトルレジスタに連係した別個のカウンタ（少なくとも１つのベクトルレジスタからの要素の読出しのためのもの、例えばリードアドレスカウンタ８１２と少なくとも１つの要素のベクトルレジスタへの書込みのためのもの、例えばライトアドレスレジスタ８２２）が、そのベクトルレジスタ内において、夫々読取り動作および書込み動作のため要素をアドレス指定するのに使用される。“フレキシブル連鎖”と呼ばれる従来のプロセスでは、連続的な演算は連鎖スロット時間に正確に開始することが強制されておらず、その代わり、第１の結果の要素が、相続く演算のためのオペランドレジスタとして指定された結果のベクトルレジスタに書き込まれた後、任意の時間に発行される。各ベクトル演算は、ゼロ番の要素から開始され、ベクトル長レジスタによって特定される数の要素が処理されるまで続行される。要素はメモリから取り込まれ、要素の配列順にベクトルレジスタに戻される（即ち、要素ゼロ番は時間的に次に要素１番に後続され、時間的に次に要素２番に後続される等々）。
記述される第１の演算モードは、“ライト（書込み）に続くリード（読出し）（read-following-write）”と呼ばれる。リード動作（コンピュータ内で実行されているプログラムの相続くインストラクションによって惹起される）は、ライト動作の後に生ずるように連鎖される、即ち、書き込まれる先の結果に依存する相続くリード動作は、必要とされる要素が書き込まれるとともに有効となるまで強制的に待機させられる。このようにシステムの一実施例では、ライトアドレスレジスタ８２２は（ａ）ライトコントロール回路にゼロ番の要素が次に書き込まれるべきことを指示し、（ｂ）リードコントロール回路にゼロ番の要素（偶数バンク８１０の）および全ての大きいアドレスの要素（バンク８１０と８２０の）が、それら要素が未だ書き込まれていないのでオペランドとして用いることが有効でないということを指示するため、特定のライト動作の開始において、ライトアドレスレジスタ８２２がゼロにリセットされる。ゼロ番の要素への書込みが完了すると、ライトアドレスレジスタ８２２は、（ａ）ライトコントロール回路に、次に番号１の要素が書き込まれること、（ｂ）リードコントロール回路に番号１およびそれ以上の番号の要素は、それらが未だ書き込まれていないので有効でないことを指示するため、１だけ増加される。この動作のためのベクトルライト長レジスタ８３６における数に対応する要素が書き込まれると、ライト動作は完了したものと考えられる。このように、ライトアドレスレジスタ８２２は、続くリード動作のために有効かつ利用可能である要素の数を指示するとともにライト動作の完了状態を指示する有効性インジケータとして用いられる。
演算の第２のモードは、読取りに続く書込み（write−following−read）と呼ばれる。ライト動作（多分、コンピュータ内で実行されているプログラムの相続くインストラクションによって惹起される）は、リード動作後に生ずるように連鎖される−即ち、先の動作で読取られたオペランド要素を上書きするライト動作は必要な要素が読み取られ、最早何も必要でなくなる迄、待機するように強制される。リードカウンタ８１２は、特定のリード動作の開始に際して、（a）リードコントロール回路に、ゼロ番の要素が次に読み取られるべきこと、および（b）ライトコントロール回路に、ゼロ番の要素およびそれ以上の順番の要素の全ては、それらが読み出されていない（即ち、それら要素のデータは依然必要である）ので、いかなる後続のライト動作においても書き込まれてはならないことを指示するため、ゼロにリセットされる。ゼロ番の要素（偶数要素アレイ）からの読込みが完了すると、リードカウンタ８１２は、（a）リードコントロール回路に番号１の要素が次に読み取られるべきことを指示し、ライトコントロール回路に１番の要素は現在書き込み可能であるが、１番およびそれ以上の番の要素は、それらが未だ読み取られていないので書き込むことはできないことを指示するために、１だけ歩進される。この動作のためのベクトル・リード長レジスタ８３５内の数に対応する要素が読取られると、読取り動作は、完了したと考えられる。
このようにして、リード動作は、リードカウンタが、予め計画された（かつ現在動作中）の当該ベクトルレジスタへの書込み動作によって指定された要素に達するまで実行することが許される。即ち、ライトアドレスレジスタ８２２によって指定された要素まで、各要素はデータを書き込まれ有効となる一方、より大きい番地の要素は依然有効でないとされる。同様に、ライト動作は、当該ベクトルレジスタへの先に予定された（現在動作中の）読取り動作によって指定された要素にライトアドレスレジスタ８２２が達するまで、実行が許される。その場合、リードカウンタ８１２によって指定された要素までの各要素は読み取られ書込みのため利用可能となる一方、より大きい順番の要素は依然利用可能でないとされる。従来のシステムでは、要素の処理およびどの要素が利用可能か、依然必要であるかの指示は、要素順に到着する要素に依存しており、ライトカウンタは、書き込まれるべき次の要素および最下位の順番の有効ではない要素を指定する。先に述べたように、ベクトル要素をシーケンシャルに受取るように規制されたシステムでは、相当な潜伏タイミングを持つメモリを用いる場合、効率的な動作を期待することはできない。
第１図に示す本発明の実施例では、スカラー／ベクトルスーパーコンピュータ１０は１又はそれ以上のスカラー／ベクトルプロセッサＣＰＵ１００を有し、これらは、共通メモリ６０２と総称される、複数の共通メモリ６０２．１〜６０２．Ｍに共通メモリインターフェース１１２を介して接続されている。この種の一実施例では、共通メモリ６０２．１〜６０２．Ｍは共通メモリインターフェース１１２を介して、マルチプロセッサ・マルチメモリシステムを構成する、ＣＰＵ１００と同様の複数の他のスカラー／ベクトルプロセッサＣＰＵ（図示せず）にも接続される。共通メモリ６０２．１〜６０２．Ｍは、複数のスカラー／ベクトルプロセッサのうちの１つが特定の共通メモリ６０２．ｎに対する動作をスケジュールし、他のスカラー／ベクトルプロセッサに対しては一般的には短時間だけ当該共通メモリをロックすることにより締め出す。１より多くのＣＰＵ１００が同時に共通メモリ６０２に対して、もしくはそれからの実行中の動作を持つことが可能である。幾つかの実施例では、共通メモリ６０２に対してより高速又は低速のアクセスタイミングを有するメモリサブシステムを付加することが好ましい。
特定のメモリサブシステムへのアクセスについてのＣＰＵの競合や種々のメモリサブシステムのアクセス時間の変化等の多数の要因により、データが共通メモリ６０２からベクトルレジスタへ返ってくる時間にはある範囲がある。このことは、あるベクトルの要素−これらは一般的には数個のメモリサブシステムに跨って分散されている−は、そのベクトルを要求するＣＰＵ１００にきわめて多くの場合、要素順通りでなく戻ってくることを意味する。第５図に示した、アドレスレジスタ８２２がメモリから読まれた要素の到着ごとに１だけ増加されるシステムでは、要素の順番から外れて到着する要素を取扱うことはできない。
本発明は、パフォーマンスを改善するとともに、順番外れで到着するベクトルエレメントを取扱うため、“チャンク連鎖（chunk chaining）”と命名された方法および装置を提供する。第１図と第２図を参照して、ベクトルレジスタ１６０．１〜１６０．Ｎの各々（個々にはベクトルレジスタ１６０で表される）は、複数のチャンク１６１を含んでおり、各チャンク１６１は１つもしくはそれ以上の要素１６２からなる。チャンクは、必ずしもそうである必要はないが、他のチャンクと同じサイズでありうる。要素１６２をベクトルレジスタ１６０にロードする読取り動作において、要素はベクトルレジスタ１６０にランダムな時間順序で到着することが許される。一つの実施例では、到着する各要素は、到着した要素がロードされるべきレジスタと当該レジスタ内の要素の指定を伴っている。特定のチャンク１６１の全ての要素１６２がベクトルレジスタ１６０にロードされると、チャンク１６１の全体が有効（valid）としてマーク付けされるとともに、その内部の各要素１６２は、当該レジスタ１６０をオペランドとして使用することを求める機能もしくはプロセスによって使用可能となる。メモリのライト動作では、特定のチャンク１６１を構成する要素１６２の全てがベクトルレジスタ１６２から書込まれると、そのチャンク１６１の全体が無効（invalid）（“現在空白でデスティネーションとして使用可能である”ことを意味する）としてマーク付けされる。それは、その後、新しい要素１６２を当該レジスタ１６０にロードするために待機しているプロセスもしくはメモリによって使用される。
多くの場合、ベクトルの所定のベクトル長までの全ての要素１６２が処理される限り、ベクトルレジスタ内のベクトルの要素１６２は、得られる結果に影響を及ぼすことなく、いかなるベクトル演算、いかなる順序でも処理することができる。チャンクを基本とする場合、有効性（validity）［および利用可能性（availability）］の指示を与えることによって、本発明にかかるベクトルチャンク連鎖の方式は、順番外れでランダムな時間に到着するベクトルの要素を処理することを可能にするとともに、要素の順序はどうであれ、“先に（early）”到着する要素は“遅く（late）”到着する要素に先立ってベクトルレジスタ１６０に格納するようにすれば優れたパフォーマンスという利点を得ることができる。
第６図に示された実施例では、ベクトルの内部処理は、以下に記す例外を除いて、'９００特許に用いられた手法と大略同じ手法によって連鎖される。第６図のダイアグラムは、単一のベクトルレジスタ１６０についてのフローと制御を図式的に示しており、かかる論理はベクトルレジスタ１６０．１〜１６０．Ｎの各々について繰返し実行される。ベクトルの偶数要素は、偶数要素バンク８１０に保持され、奇数要素は奇数要素バンク８２０に保持される。有効な要素がバンク８１０と８２０に格納されると、ベクトルライトコントローラ８３１は、特定のベクトルレジスタ１６０の相続く有効な要素の最大アドレスを反映させるためライトアドレスレジスタ８２２内の値を調整する。（順序外れで到着するより大きいアドレスのいくつかの要素も同様に有効である。）かくして、ライトアドレスレジスタ８２２は、ベクトルレジスタ１６０内の各々が有効である要素の部分集合（subset）を指示する有効性インジケータとして使用することができ、これら要素の全てが有効であるので、これら要素はＡＬＦＵ演算によりオペランドとして使用される。同時に、この部分集合以外の要素の少なくとも幾つかは無効であり、それらが有効となるまでオペランドとして使用されるべきではない。
例えば、共通メモリ６０２から到着する要素１６２のデータは、メモリ・要素アドレス・パイプライン／シンクロナイザ８２６を介して到着する対応要素アドレスを伴って、メモリ・データ・パイプライン／シンクロナイザ８２７を介して到着する。ベクトルライトコントローラ８３１は、パイプライン／シンクロナイザ８２６と８２７の遅延を調整するので、これらパイプラインを経由して到着する要素と機能ユニットパイプライン８５６と８５０を経由して到着する要素との間に時間的な衝突はない。
特定のベクトルレジスタ１６０の要素１６２をオペランドとして使用するベクトル演算（即ち、要素が書き込まれた後それら要素をレジスタから読み取る）は、このベクトル演算の期間このベクトルレジスタ１６０をオペランドとして予約しておくためベクトル・リードコントローラ８３０に対するベクトルオペランド信号の発行を活性化することによりスタートする。このオペランド予約は、これら要素がオペランド予約操作によりオペランドとして参照される前に、次に続く演算でベクトルの要素の値を変えることを防止するのに使用される。ベクトル・リード長レジスタ８３５にはベクトル内の要素の数がロードされている。リードアドレスカウンタ８１２はゼロ（即ち、読まれるべき第１の要素のアドレス）がロードされている。
先の演算は、このベクトルレジスタ１６０を結果のレジスタとして設定する（例えば、インストラクションにより、このレジスタをメモリ読出しのデスティネーションもしくはベクトル演算の結果として指定する）。要素が有効であるとされると（例えば、メモリリードからロードされることにより）、ベクトルライトコントローラ８３１は書き込まれた、有効とされた最大のアドレスを反映させるためライトアドレスレジスタ８２２を更新する。ベクトル・リードコントローラ８３０は、ゼロ番の要素からライトアドレスレジスタ８２２に指示されて要素迄続けて要素をバンク８１０と８２０から読出すことができる。
一つのベクトル算術／論理機能ユニット（ＶＡＬＦＵ）（第１図の１６５）はこの演算のために確保されている。各ＣＰＵ１００内には数個のＶＡＬＦＵがあり、各ＶＡＬＦＵは、各ＣＰＵサイクルの間にベクトル演算が同時的に生ずるように、他のＶＡＬＦＵと平行して動作する。ＶＡＬＦＵ１６５はＮ個の連続ステージを有するプロセッサパイプライン８５０で表されている。Ｄ個の連続ステージを有するゴーライト（Go−write）パイプライン８５６は、要素セレクタ８４０によってプロセッサパイプラインに供給される各要素オペランドについて、対応するゴーライト信号がゴーライトセレクタ８４９によってゴーライトパイプライン８５６に供給されるようにプロセッサパイプライン８５０と連係して動作する。ゴーライトパイプライン８５６のステージの数Ｄは、プロセッサパイプラインのステージ数Ｎと等しく設定される。このようにして、各結果の要素がプロセッサパイプライン８５０から出力されると、対応するゴーライト信号がゴーライトパイプライン８５６からベクトルライトコントローラ８３１に同時に出力され、“結果（result）”のベクトルレジスタ１６０に結果の要素を書き込むことを制御するのに使用される。ベクトルライトコントローラ８３１は書き込まれている要素のアドレスを指示するためにライトアドレスレジスタ８２２を更新する。
結果の要素１６２がパイプライン８５０から結果のベクトルレジスタ１６０に出力されると、結果の要素は、ベクトルライトデータセレクタ８２９、選択的に要素遅延回路８３４を介して、偶数ライトデータセレクタ８１１および奇数ライトデータセレクタ８２１に、そして更に、偶数番と奇数番の要素のための偶数要素バンク８１０と奇数要素バンク８２０に夫々供給される。
バンク８１０と８２０に対する要素の読出しと書込みは、１回の読出しと１回の書込みが各ＣＰＵクロック周期内に実行されるように交互に行われる。例えば、一つのクロック周期ｎの間にゼロ番の偶数要素が書き込まれ、次のクロック周期ｎ＋１の間に、１番の奇数要素が書き込まれると同時に、ゼロ番の偶数要素が読み出され、次のクロック周期ｎ＋２の間に偶数要素２番が書き込まれ、奇数要素１番が読出されるという具合である。各クロック周期の間に、最大２回のバンク演算、即ち、１回のバンクに対する要素読出し動作と１回の他のバンクへの要素書込み動作とが実行できる。次のクロック周期では、最大２回のバンク演算、即ち先に読出しが行われたバンクに対する書込みと先に書込みが行われたバンクに対する読出しとが実行される。要素バンクを用いて実行される次のベクトル読出し動作は、（１つの要素分という少ない遅れで−即ち、要素、Ｎ＋１を書き込みながら要素Ｎを読み出すとともにある不確定の時間の後−即ち、当該ベクトルレジスタ１６０からオペランドベクトルの第１の要素を読み出す以前にベクトルレジスタ１６０に結果のベクトルの全ての要素を書き込んだ後）必要とされる要素を与えるベクトルライト動作を後続させる。第３Ａ図は、データ（ベクトル要素）をメモリから取り込んでベクトルレジスタ１６０に書き込むためのクロック周期Ｃ0で発行される動作のタイミングダイアグラムを示す。これらデータをベクトルレジスタ１６０から読出すベクトル演算はクロック周期Ｃ1で発行されるか、クロック周期Ｃ7までいま一つの要求されたオペランドを待つため不実行状態に保持される。メモリの潜伏に対応する時間の経過後、ベクトル要素は、クロック周期Ｃ6において到着し始め（ゼロ番目の要素がクロック周期Ｃ6で偶数要素バンク８１０に書き込まれる）。以後、相続くクロック周期に後続の要素が到着する。クロック周期Ｃ7では、ゼロ番の要素が偶数要素バンク８１０から読出され、要素１番が奇数要素バンク８２０に書き込まれる。クロック周期Ｃ8では要素１番が奇数要素バンク８２０から読み出され、要素２番が偶数要素バンク８１０に書き込まれるという具合である。
第３Ｂ図は、メモリからデータを取り込んでベクトルレジスタ１６０に書き込むためクロック周期Ｃ0で発行される動作についてのタイミングダイアグラムである。ベクトルレジスタ１６０からこれら要素を読み出すベクトル演算は、クロック周期Ｃ10で発行されるか、偶数要素バンク８１０（クロック周期Ｃ10では要素４番を書き込むことでビジイである）がクロック周期Ｃ11まで１クロックの間利用可能となるまで待機すべく不実行に保持される。メモリ潜伏に対応する時間の後、ベクトル要素はクロック周期Ｃ6でメモリから到着し始め（要素ゼロ番が偶数要素バンク８１０に書き込まれる）、その後の後続のクロック周期において後続の要素が到着する。クロック周期Ｃ7では要素１番が奇数要素バンク８２０に書き込まれる。クロック周期Ｃ8では要素２番が偶数要素バンク８１０に書き込まれるといった具合である。クロック周期Ｃ10で、要素４番が偶数要素バンク８１０に書き込まれ、一方、リード動作はそうでなければ発行される（および要素ゼロ番を読出す）であろうが、偶数要素バンク８１０がクロック周期Ｃ11で利用可能となるまで不実行状態に保持される。クロック周期Ｃ11では、要素ゼロ番が読み出されるとともに要素５番が奇数要素バンク８４０に書き込まれる等々。
これに代り、ベクトル・ライト・データセレクタ８２９からリード要素セレクタ８４０までのデータ経路を用いることで、要素バンクを迂回する次の読出しを必要な要素を与えるベクトル書込み動作と同時に後続させることができる（偶数要素オペランドは同じクロック周期において偶数要素結果から与えられる）。しかしながら、この方式では、要求される他のオペランドとＶＡＬＦＵはオペランドとして連鎖される結果の要素と一緒に直ちに利用可能でなければならない。第３Ｃ図はメモリからデータを取込んでベクトルレジスタ１６０に書き込むため、クロック周期Ｃ0で発行される動作のタイミングダイアグラムである。ベクトルレジスタ１６０からこれらの要素を読み出す動作はクロック周期Ｃ1に発行されるが、クロック周期Ｃ6までこのオペランドを待機するよう不実行に保持される。メモリ潜伏に対応する時間の後、ベクトル要素は、クロック周期Ｃ4において到着し始め（要素０番がクロック周期Ｃ6で偶数要素バンク８１０に書込まれる）、後続の書込み要素は後続のクロック周期に到着する。クロック周期Ｃ6において要素ゼロ番が読出し動作のための要素ゼロ番オペランドとして使用される。
クロック周期Ｃ7では要素１番が奇数要素バンク８２０に書込まれるとともに読取り動作のための要素１番オペランドとして使用される。クロック周期Ｃ8では要素２番が偶数要素バンク８２０に書き込まれ、読出し動作のための要素２番オペランドとして使用される。もしも衝突又はその他の要因で、ベクトルの後続の要素のオペランドの利用可能性が遅れる場合には、この代りの方式では、上記した要素バンク８１０と８２０を経由する偶数奇数ルートに復帰する。第３Ｄ図はかかる場合のタイミングダイアグラムを示しており、クロック周期Ｃ8において、読出し動作のために要求された他の一つのオペランドの要素２番のデータは２クロック遅延され、クロック周期Ｃ10において到着する。２オペランド・１結果ＶＡＬＦＵ演算の両方のオペランドはＶＡＬＦＵパイプラインの各入力に同時に供給されなければならない。そのため、他の要素２番オペランドがクロック周期Ｃ10まで利用可能でないので、このオペランドの要素２番の読出しはクロック周期Ｃ10まで遅延される。クロック周期Ｃ10においても、要素４番の書込みデータは到着しようとしているが、要素２番の読出しと要素４番の書込みは偶数要素バンク８１０を用いるので、１クロックだけ遅延（第６図の遅延回路８３４によって）されなければならず、クロック周期Ｃ11において書き込まれる。各後続の競合要素書き込みは同様に１クロック周期遅延される。
各要素が読み出されると、その都度、ベクトルリード長レジスタ８３５は１だけデクリメントされる。ベクトル長レジスタ８３５がゼロになった（この動作のための要素の全てが処理された）ときに、オペランド予約は解除される。
ある特定のレジスタ１６０の要素１６２を結果として使用するベクトル演算（即ち、レジスタに要素を書き込む）は、このベクトル演算の間、このベクトルレジスタ１６０を結果のレジスタとして予約するためベクトル結果信号をベクトルライトコントローラ８３１に対して発行することにより開始される。このオペランド予約は、後続の演算がこれら要素が結果予約演算により結果として書き込まれる前にこのベクトルの要素から値を読み出すことを防止するために使用される。ベクトル書込み長レジスタ８３６には、ベクトルの要素数がロードされている。ライトアドレスカウンタ８２２には、ゼロ（即ち、書き込まれるべき第１の要素のアドレス）がセットされている。
プロセッサパイプライン８５０から来る要素はゴーライトパイプライン８５６から来るゴーライト信号を伴っており、このゴーライト信号は要素の書込みとライトアドレスカウンタ８２２のインクリメントを制御する。メモリ要素パイプライン８２７から来る要素はメモリ要素アドレスパイプライン８２６から来るベクトルライトアドレス信号を伴っており、このベクトルライトアドレス信号は要素の書込みを制御する。しかしながら、ライトアドレスカウンタ８２２は以下に述べるように異なった取り扱いが必要である。
各要素が書き込まれると、ベクトル書き込み長レジスタ８３６は１だけデクリメントされる。ベクトル書き込み長レジスタ８３６がゼロになる（即ち、この演算について要素の全てが書き込まれる）と、上記結果予約は解除される。
チャンク連鎖
要素は順序外れでメモリから到着するのでベクトルライトアドレスカウンタ８２２は各要素の到着毎に単純にインクリメントすることはできない。ベクトルライトアドレスカウンタ８２２は、前述したように、ベクトルレジスタ１６０内の有効な要素のエクステントを指示するために、相続く演算において使用される。ベクトルライトアドレスカウンタ８２２はメモリリード／ベクトルライト演算によって書き込まれた最大有効隣接アドレスを含まなければならない。後続の読出し動作では、ベクトルライトアドレスカウンタ８２２における値まで任意の要素をオペランドとして使用することができる。
例えば、第３Ｅ図を参照して、時間Ｘにおいて要素１，８，３，４，５，０がその順序で到着してベクトルレジスタ１６０に書き込まれていたとすると、ベクトルライトアドレスカウンタ８２２は多くても１の値を持つ。要素２番が未だ到着しておらず、それが到着する迄は、後続の演算においてオペランドとして使用されない。後の時間Ｙにおいて要素７，９，２がこの順序で到着しベクトルレジスタ１６０に書き込まれていたとすると、ベクトルライトアドレスカウンタ８２２は最大５の値を持つ。要素６番が未だ到着していないので、後続の演算においてそれが到着する迄オペランドとして使用することはできない。後の順序Ｚにおいて、要素６番が到着してベクトルレジスタ１６０に書き込まれていたとすると、ベクトルライトアドレスカウンタ８２２は、要素０〜９の全てが有効になっているので、９の値を持つ。時間Ｘにおいて、ベクトルライトコントローラ８１３に対するチャンク有効信号は要素１番までの要素のチャンクが有効であることを指示する。時間Ｙにおいて、ベクトルライトコントローラ８１３に対するチャンク有効信号は、要素５番までの要素のチャンクが有効であることを指示する。時間Ｚではベクトルライトコントローラ８１３に対するチャンク有効信号は、要素９番までの要素のチャンクが有効であることを指示する。
ある実施例において、各ベクトルレジスタ１６０（第２図）は１６個のチャンク１６１からなり、各チャンク１６１は８個の要素１６２からなり（各チャンクは同一サイズである）、合計ではベクトルレジスタ１６０当たり１２８個の要素１６２となる。第８図は、チャンク有効性コントローラ５００の一実施例を示す。メモリインターフェース１１２は、現在進行中の取込み動作を受持つ各デスティネーションレジスタについて１６個のチャンクカウンタのグループ１１６を含む。デスティネーション指示レジスタ１１８は、このチャンクカウンタグループのどのデスティネーションレジスタが使用されているかを指示する。各要素が共通メモリ６０２から到着すると、デスティネーションレジスタと要素アドレスの両方に関する指示がチャンクカウンタ選択回路１１４に与えられ、該選択回路１１４はこのデスティネーションレジスタと要素アドレスに対応するチャンクカウンタをインクリメントする。メモリからのベクトル取り込みの開始に際して、取り込まれるべき各チャンクのカウンタは、ゼロにセットされる。特定のチャンク１６１について各要素が取り込まれると、対応するチャンクカウンタは１だけインクリメントされる。チャンクカウンタが８に達すると（そのチャンクの全ての要素が取り込まれた）、チャンク有効信号（このレジスタについてのこのチャンクは今や有効であることを指示する。）がベクトルライトコントローラ８３１に送られる。このような実施例において、この信号はチャンク有効ビット（ＣＶＢ chunk valid bit）アレイコントローラ１３１に行き、ＣＶＢアレイ１３３内の適当なビットをセットする。この実施例において、ＣＶＢアレイ１３３は８個のベクトルレジスタの各々について１６個のチャンク１６１の各々について有効性指示を与えるべく１６×８個のビットアレイからなる。エンコーダ１３５は、各ベクトルレジスタについてＣＶＢアレイによって有効であると指示されたチャンクに属する要素に対応してライトアドレスの値を与える。第６図の実施例を参照すると、このライトアドレス値はベクトルライトコントローラ８３１からライトアドレスレジスタ８２２に与えられる。第７図の実施例を参照すると、このライトアドレス値はベクトルライトコントローラ８３１から最大有効アドレスレジスタ８２５に与えられる。この場合、最大有効アドレスレジスタ８２５は、有効な要素の数を指示する有効性インジケータとして使用することができる。
第９図に示されたいま一つの実施例では、任意のサイズのチャンクが設けられる。第９図はチャンク有効性コントローラ５００のいま一つの例を示す。共通メモリ６０２から各要素が到着すると、デスティネーションレジスタと要素アドレスの両方に対応する指示が要素有効性ビット（Element validity bit ＥＶＢ）アレイコントローラ５１２に与えられ、該コントローラはこのデスティネーションレジスタと要素アドレスに対応して、ＥＶＢアレイ５１４の個々のビットをセットする。メモリからのベクトル取込みの開始に際して、取り込まれるべきベクトルレジスタ１６０に対応する全てのＥＶＢアレイビットはゼロにセットされる。各要素１６２が取り込まれると、対応するＥＶＢアレイビットは１にセットされる。かかる実施例において、８個のベクトルレジスタ１６０の各々について、１２８個の要素１６２の各々に有効性指示を与えるため、ＥＶＢアレイ５１４は１２８×８ビットアレイからなる。エンコーダ５１６は各ベクトルレジスタ１６０についてＥＶＢアレイによって有効と指示された要素に対応してライトアドレス値を与える。チャンクエンコーダ５１６は、任意のサイズのチャンク内の最大の連続有効要素にジャンプすることができるので、この実施例では変化するサイズチャンクを設けることができる。この実施例は第６図に示した実施例と第７図に示した実施例のいずれかと共用することができる。第６図の実施例を参照すると、各エンコーダ５１６からのライトアドレス値はベクトルライトコントローラ８３１からライトアドレスレジスタ８２２に与えられる。第７図の実施例では、このライトアドレス値はベクトルライトコントローラ８３１から最大有効アドレスレジスタ８２５に与えられる。
第７図はベクトルレジスタ１６０のコントローラおよび要素アレイについて第６図の実施例に代わる実施例を示している。第７図に示す実施例において、外は第６図のものと同一であるが、要素アドレスはゴーライト信号の一部としてゴーライトパイプライン８５６を介して与えられる。この方法で、プロセッサパイプライン８５０から出力される結果の要素はゴーライトパイプライン８５６から出力される対応の要素アドレスを伴っている。ライトアドレスレジスタ８２２とライトアドレスインクリメンタ８８６は、要素がオペランドとして有効か否かの指示を与えるためコンパレータ８３２と連係して使用される最大有効アドレスレジスタ８２５で置換えられる。第７図に示す実施例では、プロセッサパイプライン８５０と８５６から夫々来る要素と対応する要素アドレス、同様にメモリパイプライン８２７と８２６から夫々来る要素と要素アドレスを取り扱う。
第１０図は、複数のベクトルレジスタ１６０によって共有される単一のチャンク有効性コントローラ５００を有する実施例を示す。第１１図は複数のベクトルレジスタ１６０各々に接続された個別のチャンク有効性コントローラ５００を有する代わりの実施例を示す。他の実施例では複数のベクトルレジスタ１６０によって共有され、かつ接続される種々の数のチャンク有効性コントローラ５００を有する。
パイプライン化されたいかなるコンピュータもそのパイプラインに存在するデータを修正するためのインストラクションを備えなければならない。したがって、いかなる格納操作は、あるパイプラインに存在するかもしれないデータを考慮しなければならない（例えば、スカラーレジスタに格納されたデータは、取り込まれるとともに、ベクトルレジスタによる相続く演算のためパイプライン中に存在するデータ中に反映されなければならない）。ある実施例では、そのようなパイプラインの保守はメモリインターフェースの排他的制御をプロセッサのベクトル部分又はスカラー部分のいずれかに交互に与えるという手法を用いることによって達成される。例示的な実施例では、インストラクションバッファ１７０に関連する発行制御（issue-control）回路は、処理中のスカラー演算の完了までベクトル演算の発行を阻止するとともに、同様に実行中のベクトル演算の完了までいかなるスカラー演算の発行を阻止することによってプログラマを保護する。スカラー演算は他のスカラー演算と重なることは許されるが、ベクトル演算とは許されない。同様に、ベクトル演算は他のベクトル演算と重なることは許されるが、スカラー演算との重なりは許可されない。共通メモリインターフェース１１２は、ベクトル書込み処理といかなる先行のベクトル読出し処理とが両方の処理が同じストライド（stride）（ベクトル内の連続する要素のアドレス間のアドレス差をストライドと呼ぶ）を有する限り、重ならないようにベクトル書込み処理を制御する、即ち、後に発行される書込み処理は要素が読出されてしまった後まで、先に発行された読出し処理の要素に対して、書込みを行うことは許可されない。この実施例では、異なるストライドを持つ処理間の衝突は検出されえず、プログラマ又はコンパイラはベクトル読出し処理が完了するまで書込み処理をホールドする特別なインストラクションを使用しなければならない（例えば、1000から始めて1000,1001,...,1007等連続したメモリ位置から要素を読出すベクトル読出し処理に、1001から始まって1001,1004,1007等３個目毎に書込みを行う書込み処理が後続する場合、書込み処理は読出し処理が所望のデータを読出す以前に1004又は1007の位置に書込みを行う。このようにして、プログラマもしくはコンパイラはベクトル読出し処理後およびベクトル書込み処理前に特別な同期インストラクションの一つを挿入しなければならない。このインストラクションは可干渉性の書込み処理の開始が許可される以前に読出し処理が完了することを保証するため、共通メモリリクエスト（読出し処理からの）がクリアされる迄、待機される）。
第１図に示す実施例では、ベクトルレジスタ１６０は８個のベクトルレジスタからなり、各々は１要素当たり６４ビットのベクトル要素を１２８まで収納することができる。ベクトルプロセッサ１６５は、連続するクロック周期で連続したベクトル要素をパイプライン化された方法で連続的に処理する。例えば、ソースベクトルレジスタＶjの１２８個の各要素はソースベクトルレジスタＶkの１２８個の各要素に１２８個の連続クロックで加えられ、これら１２８個の演算の結果がデスティネーションベクトルレジスタＶiの１２８個の要素にロードされるコンピュータ回路はパイプラインを初期にロードするのに数サイクル（周期）を要するが、その後は、クロック毎に１回の処理が実行される。
第１図に示す実施例では、Ｓレジスタ１２０は各々６４ビットを持つ８個のスカラーレジスタからなる。スカラープロセッサ１２５は連続したクロック周期で連続したスカラーレジスタを処理するが、上述のベクトルプロセッサで使用される方法よりはいささか非効率的なパイプライン処理方式が用いられる。
第１図に示す実施例では、Ｔレジスタ１４０は、各々６４ビットを持つ６４個のスカラーレジスタからなる。Ｔレジスタ１４０の内容はＳレジスタ１２０との間および共通メモリ６０２のセットとの間でやりとりされる。
第１図に示す実施例において、Ａレジスタ１３０は各々６４ビットを持つ８個のアドレスレジスタからなる。アドレスプロセッサ１３５は連続するクロック周期で連続するアドレスレジスタを処理するが、上記したベクトルプロセッサにより用いられる方法よりはいささか非効率的なパイプライン処理方式が用いられる。第１図に示す実施例において、Ｂレジスタ１５０は各々６４ビットを持つ６４個のスカラーレジスタからなる。Ｂレジスタ１５０の内容は、Ａレジスタ１３０との間および共通メモリ６０２のセットとの間でやりとりされる。
第１図に示す実施例において、インストラクションＩバッファ１７０は１グループ当たり３２個のインストラクションバッファからなる計８グループからなり、各インストラクションバッファレジスタは６４ビットを持つ。インストラクションは実行のためＩバッファ１７０内のグループに取り込まれる。データはＩバッファ１７０に取り込まれるだけで格納されることはなく、スカラーデータキャッシュ１１０はＩバッファ１７０へのデータ転送を無視する。
本明細書で用いられている“翻訳された（translated）”なる用語は１つのメモリセット内のデータを指すアドレスがいま一つのメモリに存在するデータのコピーを指す他のアドレスにマップされるアドレスマッピング処理に適用される。例えば、論理アドレスは、コンパイラおよびディスク格納サブシステムによってデータを追跡し、プログラマにとってフレキシブルなインターフェースを与えるために使用される“論理アドレス空間”内のデータを指すのに使用される。これらのデータが共通メモリ６０２にロードされると、データを配置するのに物理アドレスが使用される。
第１図に示す実施例において、論理アドレスはデジタル論理ハードウエアによって共通メモリ６０２のセット内のデータをアクセスするのに使用される物理アドレスに翻訳される。このようなアドレス変換はプログラマがインストラクション取り込み、データ取り込み又はデータ格納のためデータをアクセスするのに使用するためのよりフレキシブルなインターフェースを提供する。
マルチプロセッサシステムにおけるいま一つの重要なパフォーマンス上の制約はマルチプロセッサが共通のリソースを共有する場合に生ずるプロセッサ“ロックアウト”又は“ブロッキング”である。ある実施例では、通常のロード、格納、ベクトルロード、ベクトル格納処理は、マルチプロセッサシステムにおいて、あるプロセッサから他のプロセッサへブロック又はロックされることはない。その代わり、アトミックテストアンドセットインストラクション（atomic test and set instructions）の如き従来の同期インストラクションがある共有されたリソースが使用中か利用可能である場合に、プロセッサ間で信号をやりとりするのに使用される。プログラム作成上の規約やコンパイラの制約は、衝突しているコードの実行を共有のリソースの障害が解決されるまで不実行保持するのに使用される。いずれかの適当な方法が、プロセッサ対プロセッサの衝突があるか否かを決定し、後続の衝突しないインストラクションの実行を許可し、或はブロックするのに使用しうる。
以上の記述は図示のために意図されたものであり、制限的でないことが了解されるべきである。多くの他の実施例は、以上の記述を参照すれば、当業者にとっては明らかであろう。本発明の範囲は、添付のクレームを参照し、クレームが包含する均等物の全範囲を含んで決められるべきである。
【図１】
0003789937.tif 000002
【図２】
0003789937.tif 000003
【図３Ａ】
0003789937.tif 000004
【図３Ｂ】
0003789937.tif 000005
【図３Ｃ】
0003789937.tif 000006
【図３Ｄ】
0003789937.tif 000007
【図３Ｅ】
0003789937.tif 000008
【図４】
0003789937.tif 000009
【図５】
0003789937.tif 000010
【図６】
0003789937.tif 000011
【図７】
0003789937.tif 000012
【図８】
0003789937.tif 000013
【図９】
0003789937.tif 000014
【図１０】
0003789937.tif 000015
【図１１】
0003789937.tif 000016