(57)【要約】      （修正有）【課題】行列関連の演算を実行する際に適している、効率的なプロセッサ素子アーキテクチャを提供する。【解決手段】線形アレーは、ヘッド・プロセッサ素子と、一組の通常のプロセッサ素子とを含み、ヘッド・プロセッサ素子は、アレーの最も近い隣接プロセッサ素子と相互接続していて、隣接していない通常のプロセッサ素子から、ヘッド・プロセッサ素子へのフィードバック経路を持つ。各プロセッサ素子は、乗算、組合せおよび演算の累算を行うための演算回路、およびレジスタ・ファイルを含む。ヘッド・プロセッサ素子は、非線形関数ゼネレータを含む。各プロセッサ素子は、終了する算術演算の待ち時間を、それにより新しい演算をスタートする周期の倍数になるように、パイプライン処理している。アレーを制御するために、超長命令語（ＶＬＩＷ）プログラム、またはその他のタイプのプログラムを使用することができる。【選択図】図７
2010049696.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも一つのデジタル・プロセッサ素子を含む装置であって、
前記デジタル・プロセッサ素子が、
少なくとも二つの複素数の実数部および虚数部に、別の少なくとも二つの複素数の実数部と虚数部とを掛け、それにより少なくとも１６個の部分的積を形成するよう動作し、また前記部分的積の、各々が実数または虚数を表わす一つまたはそれより多くの加法組合せを形成するよう動作する演算回路と、
少なくとも第一のポートおよび第二のポートであって、その各々が、前記レジスタ・ファイルへ、または前記レジスタ・ファイルから、二つの複素数語を書き込むことができ、または二つの複素数語を読み出すことができるような第一のポートおよび第二のポートを有し、このポートが、前記複素数語をそこに供給し、そこから前記実数または虚数を受け取るために演算回路に接続されているようなレジスタ・ファイルとを含む装置。
【請求項２】
請求項１に記載の装置において、前記演算回路が、一つの演算の開始から終了までの待ち時間が、新しい演算をスタートすることができる周期よりも長くなるように構成されたパイプライン処理ロジックを含み、それにより、前記プロセッサ素子が、同時に、各演算が異なる開始時間を持つ一つ以上の演算を計算することができる装置。
【請求項３】
請求項１に記載の装置において、前記レジスタ・ファイルの前記第一または第二のポートのうちの少なくとも一つが、読み出しまたは書き込みによりアクセスされる前記二つの複素数語の所与の組が、一対の各語線からの同じ語線または別の語線からのものでよいように、語線を制御可能であるように共にペアにするロジックを含む装置。
【請求項４】
請求項１に記載の装置において、前記演算回路が、さらに、前記部分的積を受け取ることができる入力を持つ少なくとも八つの加算装置を含み、前記加算装置が、前記部分的積の一つまたはそれ以上の加法組合せを形成することができ、前記各加算装置が、一つの実数または虚数を表わし、前記八つの加算装置が一緒になって、四つの複素数の合計を形成することができ、また、各加算装置が、新しい入力数と以前の合計と合計に対応する新しい合計を累算することができるように、その入力に加算する結果からのフィードバック接続を持つ装置。
【請求項５】
請求項１に記載の装置であって、さらに、前記プロセッサ素子の線形アレーを備え、前記線形アレーの前記各プロセッサ素子が、前記アレーの少なくとも一つの他のプロセッサ素子に接続している装置。
【請求項６】
請求項５に記載の装置において、前記プロセッサ素子の前記線形アレーが、さらに、一つのヘッド・プロセッサ素子と、複数の通常のプロセッサ素子とを備え、前記ヘッド・プロセッサ素子が、前記各通常のプロセッサ素子の機能のスーパーセットを供給する装置。
【請求項７】
請求項１に記載の装置において、前記プロセッサ素子が、さらに、非線形関数ゼネレータを含む装置。
【請求項８】
請求項７に記載の装置において、
前記非線形関数ゼネレータが、ある変数を固定の領域内にシフトすることにより、前記変数をスケールすることができる正規化回路であって、その正規化ロジックが、前記変数をどれだけシフトしたかを示すべき指数値を出力する正規化回路と、
少なくとも１つの非線形関数に対する補間係数の数値のテーブルを記憶するためのメモリと、
選択した数の前記変数の最上位ビットだけを取り上げ、前記変数のところの前記関数の前記数値が、前記補間係数を使用して補間を計算することにより近似できるように、選択した数の最上位ビットを、前記テーブル内の前記関数の補間係数を発見するために、アドレスとして使用するロジック回路とを備える装置。
【請求項９】
請求項１に記載の装置において、前記プロセッサ素子が、さらに、
前にその入力のところに現われた同じ一連のデジタル語を出力することができるパイプライン処理遅延ラインであって、前記シーケンスの複数の要素が一度に種々の段の遅延ラインを横切るパイプライン処理遅延ラインと、
前記遅延ラインの出力、または前記遅延ラインの遅延のない入力シーケンスとして、その出力を選択することができるマルチプレクサであって、前記選択が前記プロセッサ素子の入力により制御されるマルチプレクサとを備える装置。
【請求項１０】
線形アレーに配置されている複数のデジタル・プロセッサ素子であって、その各々が前記アレーの少なくとも１つの別のプロセッサ素子に接続されているようなデジタル・プロセッサ素子を含む装置において、少なくとも１つの前記デジタル・プロセッサ素子が、
少なくとも二つの複素数の実数部および虚数部に、別の少なくとも二つの複素数の実数部と虚数部とを掛け、それにより少なくとも１６個の部分的積を形成するよう動作し、また前記部分的積の、各々が実数または虚数を表わす一つまたはそれより多くの加法組合せを形成するよう動作する演算回路と、
少なくとも第一のポートおよび第二のポートであって、その各々が前記レジスタ・ファイルへ、または前記レジスタ・ファイルから、二つの複素数語を書き込むことができ、または二つの複素数語を読み出すことができるような第一のポートおよび第二のポートを有し、このポートが、前記複素数語をそこに供給し、そこから前記実数または虚数を受け取るために演算回路に接続されているようなレジスタ・ファイルとを含む装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、プロセッサ素子および技術に関し、特に行列計算を行うためのプロセッサ素子のアレーを備えるパイプライン処理デバイスに関する。
【背景技術】
【０００２】
＜優先権の主張＞
本出願は、「ＱＲ分解用のパイプライン処理線形プロセッサ・アレー」という名称の、発明者Ａ．Ｊ．グリーンバーガーの１９９９年６月１０日付の米国仮出願６０／１３８，４２３号の優先権を主張する。
【０００３】
技術が進歩するにつれて、メーカーは、一つの集積回路上により多くのワイヤおよびトランジスタを集積することができるようになり、今までは実現不可能であったデジタル信号処理動作を行う新しい機会が到来している。
【０００４】
そのような新規な用途の一例としては、無線通信システムの基地局でのアンテナのアレー用の適応ビーム形成の使用がある。この場合の目標は、所与のセル内により多くの移動局ユーザを収容し、より高速なデータ速度を実現できるようにすることである。この目標は、問題の移動局の方向を指していて、干渉ソースから全然影響を受けない放射パターンを形成するために、複数のアンテナにより受信した複数の信号を時変複合加重により加算することにより達成される。このタイプの問題を最適化するための種々の解決方法は周知であり、複素数の行列およびベクトルによる計算の実行を含む。例えば、１９９６年に、プレンティスホール社発行のＳ．ハイキンの「適応フィルタ理論」第３版参照。所与の時間において、一回の複素数乗算を行うだけではすまず、非常に多くの回数、複素数乗算を行わなければならない。
【０００５】
このタイプのもう一つの新しい用途は、直接シーケンス符号分割多元接続（ＤＳ／ＣＤＭＡ）コード化を使用する無線システム基地局に対するマルチユーザの検出である。これらのアルゴリズムの場合には、例えば、１９９６年１０月号のＩＥＥＥ通信マガジン掲載の、Ｓ．モシャビの「ＤＳ−ＣＤＭＡ通信用のマルチユーザ検出」の１２４ページに記載されているように、相互に干渉している種々の移動局について、リアルタイムで入手した集合的な知識が、上記干渉を解決し、個々の各移動局の検出を改善するために使用される。これらのアルゴリズムも、複素数の行列の集中的な計算を含む。
【０００６】
無線基地局に対する上記の新しい用途は、多くの場合、基本的な行列計算を使用する周知のアルゴリズムの修正したものを使用する。代表的な最も興味のある四つの演算は下記の通りである。
【０００７】
１．ｎ個の未知数を含む一組のｎ個の一次方程式の解。一つの可能なアプローチは、ギブンズ回転により、ＱＲ分解を使用して上記一組の方程式を三角形に変換し、その後で、逆置換により三角形に変換した一組の方程式を解く方法である。
２．マトリックス反転。一つの可能なアプローチは、ギブンズ回転によりＱＲ分解を使用して一組の方程式を三角形に変換し、その後で、多重逆置換により、逆数について上記一組の三角形に変換した方程式を解く方法である。
３．マトリックス−マトリックス乗算。
４．共分散および相互相関。後でさらに処理が行われる行列およびベクトルを形成するために、入力信号のベクトルに関する上記統計を計算する必要がある。
【０００８】
これらの演算を行うための従来の技術については、以下にさらに詳細に説明する。
一組の一次方程式を解く場合には、行列表示は下記式のようになる。
Ａｘ＝ｙ                    （１）
ここで、Ａは複素数値の既知の正方行列であり、ｙは複素数値の既知のベクトルであり、ｘは未知の複素数ベクトルである。上記式を数値解法するには多くの技術が使用される。しかし、これらの技術のうちのいくつかは、数値が不安定であるという欠点がある。式（１）を解くための数値的に安定な技術は、ギブンズ回転によるＱＲ分解またはＱＲ因数分解と呼ばれ、例えば、１９９６年に、ジョンズ・ホプキンス大学出版部が発行した、Ｈ．ゴルブおよびＣ．Ｆ．バン・ローンの「行列計算」第３版に記載されている。このアプローチは、行列Ａを積に因数分解するプロセスを含む。
Ａ≡ＱＲ                          （２）
【０００９】
ここで、Ｑはユニタリー行列であり、Ｒは右上の三角行列である。「右上の三角」という表現は、主要な対角線の下のＲのすべての構成要素がゼロであることを意味する。それ故、式（１）の両辺には、ＱHで示すＱの共役転置行列（すなわち、随伴エルミート行列）が掛けられる。
ＱHＡｘ＝ＱHｙ                    （３）
式（２）を式（３）に代入すると、下記式が得られる。
ＱHＱＲｘ＝ＱHｙ                  （４）
ＱHＱは、単位行列に等しいので、式（４）は下記式のようになる。
Ｒｘ＝ＱHｙ                        （５）
【００１０】
式（５）は「逆置換」と呼ばれる技術を使用して、各構成要素ｘについて簡単に解くことができる式である。「逆置換」という用語は、ほとんどがゼロで、一つだけが未知数である、式（５）の行列の一番下の行が、最初に解かれる反復法を指す。この場合、解は一つ上の行に代入され、その行が解かれる。このプロセスは、式（５）の行列のすべての行の解が得られるまで継続して行われる。
【００１１】
ユニタリー行列ＱHを発見するための、有効で数値的に安定している方法は、個々のいわゆる「ギブンズ回転」の積としての方法である。この場合、上記各ゼロは、前に置かれたゼロをそのままにしておいて、前の行列の一つの要素を追い出す。例えば、１９５８年３月出版の、「Ｊ．Ｓｏｃ．Ｉｎｄｕｓｔ．Ａｐｐｌ．Ｍａｔｈ」６巻、１号の２６ページ掲載のＷ．ギブンズの「一般行列と三角形に変形する平面ユニタリー回転の計算」を参照してほしい。当業者にとっては、ギブンズ回転が、帰納的最小自乗適応アルゴリズムを行うために、役に立つことは周知である。
【００１２】
図１−図５を参照しながら、ギブンズ回転を使用する小さな行列式の三角形への変換について以下に説明する。下記式（６）は、上記例に対する個々の行列およびベクトル要素を示す式（１）の展開である。
【数１】
2010049696.tif 000003
【００１３】
図１は、対応するギブンズ回転のいくつかの段を示す。図１の六つの段の場合には、５×４のアレーにゼロが連続して並んでいる。各アレーの頭のところの文字は、四つの列が、変換中の行列Ａの要素であること、および５番目の列が変換中のベクトルｙの要素を持っていることを示す。太字で示すゼロは、各段内に現在挿入中のゼロを示す。下記式（７）は、図１の段１での最初の単一変換の方法をより詳細に示す。より詳細に説明すると、一つの要素を強制的にゼロにするために、２×２の複素数のユニタリー行列が、最初の二つの行に適用され、他の要素すべては、新しい数値に変換される。「*」記号は、複素数の共役を示す。
【数２】
2010049696.tif 000004
強制的にゼロにされる要素を発見するために、行列を乗算することにより下記式が得られる。
【数３】
2010049696.tif 000005
単一制約により、
【数４】
2010049696.tif 000006
下記式（１０）は、これら式を満足する。
【数５】
2010049696.tif 000007
そして、
【数６】
2010049696.tif 000008
【００１４】
ゼロでない変換された要素ａ11’は、下記式の実数により表わされる。
【数７】
2010049696.tif 000009
【００１５】
この行列は、二つの列のすべての他の要素を「回転」させる。
【００１６】
すでに説明したように、ギブンズ回転を使用するＱＲ分解は、三角形の形をしている二つの次元の収縮アレーで手早く解くことができる。対応する１９８１年発行の、発明者Ｗ．Ｍ．ジェントルマンおよびＨ．Ｔ．クングの「収縮アレーによるマトリックス三角形への変換」のＳＰＩＥ  Ｖ２９８の１９ページを参照してほしい。
【００１７】
図２−図５は、プロセッサ素子（ＰＥ）の三角形のアレー上の５×４行列式を三角形にする手順の始まりを示す。図２−図５の丸いボックスは、ｃ、ｓおよび上記式（１０）−（１２）に示すように更新した要素を計算する特殊な「ヘッド」要素である。四角いボックスは、ｃおよびｓを使用する二つの要素を回転する「通常の」要素である。これらも、ｃおよびｓを右に移動させる。図２に示す、ギブンズ回転のステップ１においては、第一のｃ１およびｓ１が計算される。図３に示すステップ２においては、第二のｃ２およびｓ２が計算され、要素の一番上の行の第一の四角いボックスは、回転させるためにｃ１およびｓ１を使用する。図４に示すステップ３においては、第三のｃ３およびｓ３が計算され、第一の四角いボックスは回転するために、ｃ２およびｓ２を使用し、第二の四角いボックスは、回転するためにｃ１およびｓ１を使用する。図５に示すステップ４においては、第二の行のヘッド要素は、第四のｃ４およびｓ４の計算を帰納的に開始することができる。第二の行のヘッド要素の上の四角いボックスは、依然として回転を続けている。計算は、三角形のアレーを通して収縮するように進行する。
【００１８】
この問題の場合には、帰納的な手順により、計算の待ち時間を短くする機会があることに留意されたい。所与の列に二つのゼロを並べてから、元の列に続けて他のゼロを並べながら、次の列に右に向かってゼロを並べ始めることができる。使用できる平行度の程度は、処理中の行列が大きくなるにつれて増大する。
【００１９】
計算が収縮的にではなく、平行して行われる上記アーキテクチャの一つの修正アーキテクチャがある。この修正アーキテクチャの場合には、ｃ１およびｓ１が分かった場合には、それらを、すべての四角いボックスのヘッド要素の右に同時に送り、ｃ１およびｓ１のこれらの数値を使用するすべての回転を並列に行うことができる。ヘッド要素でのｃおよびｓの計算は、集中的なものであることに留意されたい。何故なら、絶対値の自乗および逆数の平方根が必要であるからである。
【００２０】
図６は、ギブンズ回転を使用するＱＲ分解用の二つのアーキテクチャで、時間の経過とともに行われるデータの処理方法の全体を示す。並列の場合には、プロセッサ素子のほぼ水平なバンドが一度に動作する。時間の経過につれて、上記バンドは、図に示す三角形のアレーの中を下向きに移動する。収縮の場合には、能動状態のプロセッサ素子のある角度を持ったバンドが、アレーをその下向きの角度を維持しながら、三角形のアレーの中を下向きに移動する。両方のケースの場合、プロセッサ素子の使用が効率的でないことは明らかである。大型の行列のＱＲ分解の場合には、大部分のプロセッサ素子は、任意の所与の時間アイドル状態になっている。例えば、計算のピーク時の、縦１７×横１６の大きさの行列式の場合には、三角形内のプロセッサ素子の価値ある五つまでの行は、一度に能動状態になることができ、待ち時間は短くなり最適状態になる。しかし、平均して、プロセッサ素子のうちの僅かな素子だけを稼働状態に維持することができる。
【００２１】
それ故、上記の二次元の三角形のアレーよりも効率的な、ＱＲ分解および他のタイプの行列計算を行うためのアーキテクチャを発見することが望ましい。一つのアプローチは、一つの一次元のプロセッサ・アレーを考慮の対象にして、シーケンシャルに仮想の二つの次元のアレーの動作を、物理的に一次元のアレー上にマップする方法である。ＩＣＡＳＳＰ９９、Ｇ．ライトボディ、Ｒ．ワルキ、Ｒ．ウッドおよびＪ．マクキャニの「線形ＱＲアーキテクチャの新規なマッピング」；１９９９年の、ＩＥＥＥ国際会議アコウスト、演説、信号処理、１９３３ページに、上記アプローチが記載されている。このアプローチは、二次元の三角アレーからプロセッサ素子を効率よく使用する線形アレーにマッピングするために、再マッピングおよびスケジューリング・スキームを使用する。しかし、このアルゴリズムの全待ち時間は、置き換えた三角アレーの全待ち時間より遥かに長い。また、このアプローチにより、１００％ハードウェアを利用するには、第二の三角形への変換問題が、第一の三角形への変換問題が半分終了した場合にスタートする、二つの独立の三角形への変換問題のステップをインターリーブする必要がある。
【００２２】
１９９２年マサチューセッツ州、ボストンのクルワ・アカデミック出版発行の、Ｊ．Ｈ．モレノおよびＴ．ラングの「収縮タイプのアレーに関する行列計算」の２０６−２１０ページには、他のアプローチが記載されているが、このアプローチは、高い効率でこのタイプの、行列アルゴリズムを実行するために、パイプライン処理プロセッサ素子の線形アレーを使用する。
【００２３】
上記の適応アンテナ・アレー問題を処理するために、他の方法を使用することもできる。例えば、１９８３年の、Ｐｒｏｃ．ＳＰＩＥ  Ｖ．４３１、１０５ページ掲載の、Ｊ．Ｇ．マックハータの「収縮性アレーを使用する帰納的最小自乗最小化」に記載の「帰納的最小自乗」（ＲＬＳ）と呼ばれる計算がもっと簡単なアルゴリズムは、適応アンテナ問題に適用することができる。このアプローチの場合には、最適な結果には及ばない結果しか得られないが、計算が簡単になるという利点がある。ＲＬＳアルゴリズムは、上記逆置換を使用しなくてもすむ。二次元三角収縮アレー上で、迅速にＲＳＬアルゴリズムを実行する方法は周知である。この二つの二次元アレーに基づく、ハードウェアによる解決方法については、例えば、１９９８年の放送通信に関するＩＥＥＥ１９９８年国際チューリッヒ・セミナーの２９ページ掲載の、Ｂ．ハラーの「移動通信における、ＲＬＳをベースとする、時間参照ビーム形成についてのアルゴリズムおよびＶＬＳＩアーキテクチャ」が記載している。
【００２４】
上記の従来の逆置換プロセスについて、以下にさらに詳細に説明する。すでに説明したように、ＱＲ分解が終了した後で、三角形に変換された一組の式は、式（５）の形をしていて、この式はこの実施形態のために展開される。
【数８】
2010049696.tif 000010
【００２５】
上記のギブンズの手順の後で、この例においては、ｒ11、ｒ22およびｒ33である最後のものを除いて、Ｒ行列の対角線方向のすべての要素は実数であり、またこの例の場合はｒ44である最後の対角線方向の最後の要素は複素数である。逆置換プロセスを使用すれば、この一組の式（１３）を解くことができる。より詳細に説明すると、一つの未知数ｘ4しか含んでいない四つの式の最後の式を最初に解くことができる。例えば、ｙ4をｒ44で割ることにより、ｘ4を得ることができる。別の方法としては、ｘ4を発見するために、逆数、１／ｒ44を計算し、その後で、ｙ4を掛けることもできる。その後で、ｘ4は四つの式のうちの第三の式に代入される。ｒ33の逆数を計算する事ができる。その後で、ｘ3を、（１／ｒ33）（ｙ3−ｒ34ｚ4）の形で、発見することができる。その後で、このプロセスは、スペースの未知数が発見されるまで、式を通して、反対方向に継続して実行される。
【００２６】
行列の逆数は、上記の一連の逆置換を含む手順により、発見することができる。行列Ａの逆数Ａ-1を発見したい場合を考えてみよう。定義により、下記式のようになる。
ＡＡ-1＝Ｉ                    （１４）
【００２７】
ここで、Ｉは単位行列である。上記説明と同様に、下記式のようなユニタリー行列Ｑが存在する。
Ａ＝ＱＲ                      （１５）
【００２８】
ここで、Ｒは右の三角形である。これを式（１４）に代入すると、下記式が得られる。
ＱＡＲ-1＝Ｉ                  （１６）
【００２９】
その後で、先に進んで、一連のギブンズ回転の結果としての、Ｑ、ＱHの随伴エルミート行列を発見することができる。式１６の両辺にＱHを掛けると、下記式が得られる。
ＲＡ-1＝ＱH                   （１７）
【００３０】
この時点で、ＲおよびＱHは、両方とも発見されるが、Ａ-1は未知数であることを思いだしてほしい。式（１７）の左辺の各列は、右辺の対応する列と等しくなけてはならないので、式（１７）は一連の式に分割することができる。
Ｒｘj＝ｙj                    （１８）
【００３１】
ここで、ｘjはＡ-1の列であり、ｙjはＱHの対応する列である。ｊの異なる数値に対する一連の式（１８）の各式は、式（５）の逆置換問題に似ている。これらすべての逆置換問題は、共通の右の三角形の行列Ｒを共有している。それ故、行列の逆数は、ギブンズ回転によりＱＲ分解を行った後で、多くの逆置換を行うことにより発見することができる。
【００３２】
信号のアレーの高度の処理の際に行われるもう一つの共通な演算は、一つの行列に他の行列を掛けることである。この場合、各行列の要素は複素数値を持つ。行列ＡおよびＢの乗算による行列Ｃの構成を考えてみよう。この例の場合には、三つの各行列は、複素数要素を含む三つの４×４行列である。式（１９）は、この例を展開して、行列要素を示す。
【数９】
2010049696.tif 000011
【００３３】
Ｃの１６の各複素数要素は、Ａの一つの行からの要素、およびＢの一つの列からの要素の四回の複素数乗算の結果得られたものである。
【数１０】
2010049696.tif 000012
【００３４】
それ故、必要な複素数乗算の回数は、全部で４×４×４＝６４回である。式（１９）のマトリックス−マトリックス乗算は、多くの異なるハードウェア・アーキテクチャにより、多くの方法で計算することができる。通常のプログラム可能なデジタル・コンピュータの場合には、ある実数に他の実数を掛けるためのハードウェアを備えているが、通常、それ以上のハードウェアの支援はない。プログラムは、通常、四つの実数乗算の合計として、各複素数乗算を行う。
【数１１】
2010049696.tif 000013
【００３５】
現在の多くのデジタル・コンピュータの場合には、乗算および累算用の演算ハードウェアが、前の項がその乗算および累積を終了する前に、新しい項が乗算を始めることができるように、すでにパイプライン処理を行っていて、それにより、式（２０）および（２１）に示すように、計算の処理能力が改善される。
【００３６】
現在のベクトル・スーパコンピュータの場合には、プログラム制御によるハードウェアが、メモリから（この例の場合には、ａ21、ａ22である）オペランドを、ベクトル・レジスタにロードするのを助け、そのため、上記オペランドを、パイプライン処理乗算ハードウェアの入力に迅速に送ることができる。
【００３７】
最近のプログラム可能なデジタル信号プロセッサ（ＤＳＰ）のあるものは、一つ以上の乗算装置を含んでいる。例えば、ペンシルバニア州アレンタウンのマイクロエレクトロニック・グループの、ルーセント・テクノロジーズ社のスターコアＳＣ１４０ ＤＳＰは、それぞれが、二つの実数を掛け合わせ、各サイクル毎にその結果を累算することができる、四つの演算ユニットを含む。正しくプログラムされている場合には、ＳＣ１４０は、式（２０）の演算を行っている際に、サイクル毎にピーク速度で、一つの複素数乗算および累算を行うことができる。
【００３８】
マトリックス−マトリックス乗算のような演算を行うための、「行列計算用の収縮アレー装置」という名称の、Ｈ．Ｔ．クングおよびＣ．Ｅ．レイザソンの、１９８５年の米国特許第４，４９３，０４８号は、プロセッサ素子の二次元収縮アレーを提案している。この場合、各プロセッサ素子は、二つの数の乗算、およびその後のサイクル毎の累算からなる、「ステップ」演算を行うことができる。これらのアレーにおいては、ＡおよびＢの要素は、特定のパターンに従って、アレー周辺のプロセッサ素子に送られる。Ｃの要素は周辺のプロセッサ素子からのものである。例えば、１９８８年プレンテイス・ホール社発行のＳ．Ｙ．クングの「ＶＬＳＩアレー・プロセッサ」の２１３ページには、他の二次元アレーの例が記載されている。このようなアレーが、複素数の乗算および累算を行うことができる各プロセッサ素子と一緒に組み立てられた場合には、このアレーは、非常に高性能を持つことができる。しかし、このようなアレーは、非常に高価であり、データを入力したり、取り出したりするのが難しい。
【００３９】
上記適応アンテナ用途の場合には、多数の空間的に分離しているアンテナは、すべて同じ一組の必要な移動局ユーザおよび不必要な干渉源から信号を受信する。上記アンテナから受信した信号に、特定の組の複素数加重値を加えることにより、適応アンテナ・アレーは、一つの移動局の方向に高い利得を持ち（指向性）、干渉源の方向の利得をゼロにすることができる。ｘをアンテナ・アレーから受信したベクトルと仮定しよう。必要な信号ｙdを検出するための最適加重Ｗoptのベクトルは、ウイナ・ホプト式により入手できるが、このベクトルは、静止している一組の移動局および干渉源にとっては理想的なものであり、また、あまり急速に移動しない、静止していない組にとっては実際的なものである。
ＲxＷopt＝ｒxd                （２２）
【００４０】
この場合、Ｒx＝Ｅ｛ｘｘH｝                      （２３）
【００４１】
上記式は、複素数共分散行列である。
ｒxd＝Ｅ｛ｘｙ*d｝                  （２４）
【００４２】
上記式は、複素数相互相関ベクトルである。Ｅ｛｝演算は、時間経過中の統計的平均をとることを示す。実際には、上記平均は、最近受信したデータに対して加重をより重くし、古いデータに対して加重を軽くすることができる。ある実際のシステムの場合には、送信機は、周期的に、既知の信号を送信するが、システムをトレーニングし、Ｗoptを発見するために、ｙdに対して使用されるのはこの既知の信号である。
【００４３】
それぞれ、式（２３）の共分散行列、および式（２４）の相互相関ベクトルを、かなり頻繁に計算しなければならない。これらの両方の手順は、上記マトリックス−マトリックス乗算と比較すると、計算は簡単であるが、従来の技術の場合には、必要な計算効率をあげることはできない。
【００４４】
上記のことから考えて、ＱＲ分解を行い、その後で、逆置換を行うことにより、一組の式の解のような演算、およびマトリックス反転、マトリックス−マトリックス乗算、および共分散および相互相関のような、その他の行列関連の演算を実行する際に使用するのに適している、もっと効率的なプロセッサ素子アーキテクチャの開発が待望されているのは明らかである。
【発明の概要】
【課題を解決するための手段】
【００４５】
本発明は、種々の行列演算を行うのに特に効率の高いパイプライン処理を行うプログラム可能なプロセッサ素子（ＰＥ）、および上記プロセッサ素子の線形アレー用のアーキテクチャを提供する。本発明によれば、各プロセッサ素子は、（ｉ）少なくとも二つの複素数の実数部と虚数部に、少なくとも他の二つの複素数の実数部および虚数部を掛け合わせることができ、それにより、少なくとも１６の部分的積を形成することができ、（ｉｉ）各加法の組合せが実数または虚数を表わす、上記部分的積の一つまたはそれ以上の加法の組合せを形成することができる演算回路を含む。各プロセッサ素子内のレジスタ・ファイルは、第一のポートと第二のポートとを含み、各第一のポートおよび第二のポートは、二つの複合語を読み取ることができ、またはレジスタ・ファイルへまたはレジスタ・ファイルから二つの複合語を書き込むことができる。上記ポートは、そこに複合語を供給し、そこから実数または虚数を受け取るための演算回路に接続している。
【００４６】
他の観点から見ると、本発明の行列計算を行うのに適しているプロセッサ素子の線形アレーは、ヘッド・プロセッサ素子、一組の通常のプロセッサ素子を含み、上記ヘッド・プロセッサ素子は、通常のプロセッサ素子の機能的スーパーセットであり、アレー内の最も近い隣接プロセッサ素子と相互接続していて、隣接していない通常のプロセッサ素子から、ヘッド・プロセッサ素子へのフィードバック経路を持つ。ヘッド・プロセッサ素子は、さらに、非線形関数ゼネレータを含む。各プロセッサ素子は、終了する算術演算の待ち時間を、それにより新しい演算をスタートする周期の倍数になるようにパイプライン処理を行う。アレーを制御するために、超長命令語（ＶＬＩＷ）プログラム、またはその他のタイプのプログラムを使用することができる。このアレーは、例えば、一組の一次方程式、マトリックス反転、マトリックス−マトリックス乗算、および共分散および相互相関の計算のような、複雑な行列演算を行う際に特に高い効率を示す。
【００４７】
都合のよいことに、本発明を使用した場合には、二次元三角アレーを使用してすでに実行した行列計算を、処理素子のパイプライン処理線形アレーを使用して、効率的に実行することができる。それ故、本発明を使用すると、パイプライン処理のために、待ち時間が若干長くなるだけで、かなり簡単なハードウェアにより、行列計算を行うことができる。
【００４８】
本発明の上記および他の機能および利点は、添付の図面を参照し、下記の説明を読めば理解することができるだろう。
【図面の簡単な説明】
【００４９】
【図１】ＱＲ分解の例のための一組のギブンズ回転の各段である。
【図２】図１の例のギブンズ回転をプロセッサ素子の従来の二次元三角アレーで実行する方法である。
【図３】図１の例のギブンズ回転をプロセッサ素子の従来の二次元三角アレーで実行する方法である。
【図４】図１の例のギブンズ回転をプロセッサ素子の従来の二次元三角アレーで実行する方法である。
【図５】図１の例のギブンズ回転をプロセッサ素子の従来の二次元三角アレーで実行する方法である。
【図６】プロセッサ素子の二次元三角アレー上で実行される、従来の並列および収縮処理アプローチの比較である。
【図７】本発明の例示としての実施形態のプロセッサ素子である。
【図８】図７のプロセッサ素子の乗算装置の詳細図でである。
【図９】図７のプロセッサ素子で使用するのに適している、非線形関数ゼネレータである。
【図１０】図９の非線形関数ゼネレータで使用するのに適している逆平方根ゼネレータの一実施形態である。
【図１１】図９の非線形関数ゼネレータのパイプライン処理の実行である。
【図１２】図７のプロセッサ素子のレジスタ・ファイルの詳細図である。
【図１３】図１２のレジスタ・ファイルのポートに関連するクロスバー・スイッチである。
【図１４】本発明のプロセッサ素子の線形アレーのいくつかの例である。
【図１５】本発明のプロセッサ素子の線形アレーのいくつかの例である。
【図１６】本発明のプロセッサ素子の線形アレーのいくつかの例である。
【図１７】本発明のプロセッサ素子の線形アレーのいくつかの例である。
【図１８】ホスト・プロセッサと通信するコプロセッサ内のプロセッサ素子の線形アレーの一実施形態である。
【図１９】例示としての逆置換操作を実行するための本発明の線形アレーの一例である。
【図２０】本発明の線形アレー上で、マトリックス−マトリックス乗算を容易に行うために、その内部で、マトリックスを部分行列に分割するのを可能にする方法である。
【図２１】図１５の線形アレーを使用する、マトリックス−マトリックス乗算の性能である。
【図２２】図１５の線形アレーを使用する、マトリックス−マトリックス乗算の性能である。
【図２３】図１６の線形アレーを使用する共分散および相互相関の計算である。
【図２４】図１６の線形アレーを使用する共分散および相互相関の計算である。
【図２５】本発明の、平方根正規化プロセスを使用して、実行することができる逆平方根範囲縮小のグラフである。
【図２６】本発明の正規化ハードウェアの一例である。
【図２７】本発明の正規化ハードウェアの一例である。
【発明を実施するための形態】
【００５０】
本発明は、例えば、ギブンズ回転によるＱＲ分解、逆置換による一組の三角形の式の解法、マトリックス−マトリックス乗算、および共分散および相互相関の形成を含む、種々の行列演算を行う際に、高い効率を示す制御を備えている、パイプライン処理を行うプログラム可能なプロセッサ素子（ＰＥ）、および上記プロセッサ素子の線形アレー用のアーキテクチャを提供する。
＜プロセッサ素子アーキテクチャ＞
【００５１】
図７は、本発明のプロセッサ素子（ＰＥ）１００の例示としての実施形態である。すでに説明したように、プロセッサ素子のパイプライン処理アレーは、通常、通常のプロセッサ素子とヘッド・プロセッサ素子の両方を含む。図７のプロセッサ素子１００は、本発明のヘッド・プロセッサ素子の一例と見なすことができる。このプロセッサ素子は、対応する通常の素子の機能のスーパーセットを持つ。この例示としての実施形態の場合には、ヘッド・プロセッサ素子は、図に示すすべての素子を含むが、一方、対応する通常のプロセッサ素子は、一点鎖線で示す非線形関数ゼネレータ１０２以外のすべての素子を含む。
【００５２】
図７のプロセッサ素子１００は５段のパイプラインで構成されているが、同じアーキテクチャを、他の長さのパイプラインを使用して実行することもできる。
【００５３】
プロセッサ素子１００の素子１０４は、以下に説明する方法で、二つの複素数と二つの複素数との間の乗算／累算を行う、複素数乗算装置部分である。上記素子１０４は、また、読出し専用メモリ（ＲＯＭ）テーブル駆動補間エンジンとして実行することができる、非線形関数ゼネレータ１０２を含む。例示としての実施形態で、ゼネレータ１０２にょり発生させることができる、二つの非線形関数は、逆平方根および逆数である。非線形関数ゼネレータ１０２については、以下にさらに詳細に説明する。
【００５４】
図７のプロセッサ素子１００は、また、三つのポートを持つレジスタ・ファイル１０６を含む。上記レジスタ・ファイル１０６の、これらポートのうちの二つ、すなわち、ポートｒ１およびｒ２は、計算中の一時的な記憶のソースおよび宛先として使用される。このレジスタ・ファイル１０６の第三のポートｒ３は、演算対象のデータの数値を書き込み、その結果を読み出すことができる、ホスト・プロセッサ専用のポートである。上記ホスト・プロセッサは、この第三ポートを、そのメモリ・アドレスおよびデータ・バスに直接インターフェースする、メモリとして使用することができる。もう一つの例としては、第三のポートは、デジタル・プロセッサ設計分野の当業者であれば周知の、直接メモリ・アクセス（ＤＭＡ）コントローラを通して、インターフェースすることもできる。ＤＭＡコントローラおよび関連するインターフェース・ロジックを使用すると、レジスタ・ファイルとホスト・プロセッサとの間のメモリ転送が容易になり、必要に応じて、語を再度並べ変えることができる。
【００５５】
複素数乗算装置部分１０４に左には、それぞれを、ｉｌｃ０（１）およびｉｌｓ０（１）で示す、一組の入力レジスタ１０８−１および１０８−２が位置する。これらレジスタは、横の入力ｉｌｃおよびｉｌｓからシフトされたか、またはレジスタ・ファイル１０６のポート２からロードされたか、または入力ｉｔａおよびｉｔｂからロードされた数値を保持することができる。これら二つのレジスタは、また、ある種の処理アルゴリズムの場合に必要な収縮パイプライン処理演算を維持するために、遅延素子１１１を通して遅延出力信号を供給する、一点鎖線で示す遅延ライン１１０を供給する。
【００５６】
図７の右側においては、出力右信号ｏｒｃおよびｏｒｓを、それぞれ、マルチプレクサ１１２−１および１１２−２により選択した、三つの可能な信号のうちの一つにより駆動することができる。より詳細に説明すると、ｏｒｃ出力信号は、ｉｌｃ０（１）、ｉｌｃ０（５）またはｏｒｔｃ（４）のいずれかであってもよいし、ｏｒｓ出力信号は、ｉｌｓ０（１）、ｉｌｓ０（５）またはｏｒｔｓ（４）のいずれかであってもよい。信号ｉｌｃ０（１）およびｉｌｓ０（１）は、マトリックス−マトリックス乗算を行うために使用するような、１サイクル収縮移送アルゴリズム用に使用される。信号ｉｌｃ０（５）およびｉｌｓ０（５）は、遅延ライン１１０の出力であり、ＱＲ分解を行うために使用されるアルゴリズムにような、多重サイクル収縮移動アルゴリズム用に使用される。信号ｏｒｔｃ（４）およびｏｒｔｓ（４）は、ゼネレータ１０２が発生する非線形関数を表わす。
【００５７】
プロセッサ素子１００は、また、保持レジスタｇ１、ｈ１、ｇ２およびｈ２、および種々の信号を、複素数乗算装置部分１０４のＹ１およびＹ２被乗数に適用することができる、多数のマルチプレクサ１１４−１、１１４−２、１１４−３、１１４−４、１１６−１および１１６−２を含む。
【００５８】
上記式（７）のところですでに説明したように、基本的なギブンズ回転は、下記式のような積の組合せにより、二つの複素数行列要素を回転するために、二つの複素数量ｃおよびｓを使用する。
【数１２】
2010049696.tif 000014
【００５９】
それ故、プロセッサ素子１００が行う演算のうちの一つは、式（２５）のようなギブンズ回転である。式（２５）中の演算は、通常、従来のデジタル・コンピュータまたはＤＳＰによる、１６の実数の乗算および多数の加算を必要とする。その代わりに、本発明のプロセッサ素子１００は、もっと効率的にギブンズ回転を行うために、二つの複素数と二つの複素数を使用する乗算装置を使用する。引用によって本明細書の記載に援用した、「複素数乗算装置回路」という名称の、発明者Ａ．グリーンバーガーの、１９９９年６月１４日付の米国特許出願第０９／３３３，０７１号が、この乗算装置について詳細に記載している。
【００６０】
さらに、複素数乗算装置部分１０４は、最後の加算装置段の入力に戻される出力からのフィードバックを含む。より詳細に説明すると、ｚ１（５）−Ｚ４（５）で示す複素数出力は、図に示すように、マルチプレクサ１１８−１および１１８−２を通して、レジスタ・ファイル１０６に書き込むことができる。ｚ１（５）出力は、可能な被乗数入力としてフィードバックされる。ｚ２（４）およびｚ４（４）出力は、それぞれ、マルチプレクサ１２０−１および１２０−２およびレジスタ１２２−１および１２２−２を通して、ｏｌａおよびｏｌｂとして、近隣のプロセッサ素子の左に送ることができる。
【００６１】
レジスタ・ファイル１０６のポートｒ１は、入力ｉｒａおよびｉｒｂを通して、プロセッサ素子からその右に送られる、最高二つの複素数語により、書き込むことができる。ｉｒａおよびｉｒｂ入力の数値は、ｏｌａおよびｏｌｂを通って左に進む。入力ｉｔａおよびｉｔｂにより、データは、近隣のプロセッサ素子を通らないで、それぞれ、マルチプレクサ１２４−１および１２４−２を通って、直接プロセッサ素子１００に入力することができる。
【００６２】
複素数乗算装置部分１０４の入力ａ２およびａ４は、それぞれ、マルチプレクサ１２６−１および１２６−２の出力により駆動される。乗算装置部分１０４のｚｌ（４）−ｚ４（４）出力は、図に示すように、レジスタ１２７−１、１２７−２、１２７−３および１２７−４に送られる。
【００６３】
図８は、図７の複素数乗算装置部分１０４で実行することができる、２複素数×２複素数用の乗算装置１５０のブロック・アーキテクチャである。図８の左側には、乗算処理される各複素数Ｘ１およびＸ２を保持する、複数の組の入力レジスタ１５２−１および１５２−２が位置する。本明細書においては、複素数Ｘ１およびＸ２を「乗数」と呼ぶ。図８の頂部には、乗算処理される各複素数Ｙ１およびＹ２を保持する、複数の組の入力レジスタ１５４−１および１５４−２が位置する。複素数Ｙ１およびＹ２は、「被乗数」と呼ばれる。
【００６４】
乗算装置１５０は、再コード化要素１５６−１および１５６−２を使用して、左側で多重ビット再コード化を行い、また、被乗数多重要素１５８−１および１５８−２を使用して、頂部で被乗数多重形成を行う。左側の四つの実数と頂部の四つの実数の１６の部分的積は、中央のボックス１６０内で作られる。中央のボックス内の各部分的積ボックス１６２−１、１６２−２、．．．、１６２−１６は、マルチプレクサおよび加算装置を含む。
【００６５】
図８の底部には、最高四つまでの複素数の結果、ｚ１−ｚ４の実数部および虚数部を形成するための、最後の八つの加算装置を含む、もう一つの一組の加算装置回路１６４が位置する。図８のｚ１（４）の「（４）」は、計算の際のパイプラインの段を示す。図８にはハッキリと示していないが、適当な部分的積の出力は、最後の八つの加算装置の入力に送られる。
【００６６】
また、図８に示すように、ｚ２−４（４）およびｚ１（４）マルチプレクサへの入力から、前段のパイプライン段に戻るフィードバック経路が設置されていて、そのため、累算を行うことができる。前の段のパイプライン段のところで加算することができる、別々の入力、ａ２およびａ４となるの可能性を持つ、ｚ２（４）およびｚ４（４）用の最後の加算装置も設置されている。図７のプロセッサ素子１００においては、マルチプレクサ１２６−１および１２６−２により、これら二つの別々の入力を、ｉｌｃ、ｒ２およびａ２およびｉｌｓ用のｉｒａ、ｒ２およびａ４用のｉｒｂから、出力するようにすることができる。
【００６７】
図７の非線形関数ゼネレータ１０２について、さらに詳細に説明する。すでに説明したように、行列計算のために必要な関数は、通常、逆平方根および逆数である。これら関数を計算するには、整級数展開、反復帰納的フォーミュラおよび補間を含む、多くの周知の数値法がある。１９６８年に、プレンティス・ホール社発行の、Ｃ．Ｔ．ファイクの「数学的関数のコンピュータ評価」を参照してほしい。集積回路技術が進歩したために、チップをベースとするメモリ上に、大きな「参照」テーブルを記憶することができるようになったために、補間法がもっと実用的なものになった。これらのテーブルは、通常、点の格子上の関数に対するデータを含み、そのため、必要な点の関数を補間法により計算することができきる。この補間技術の一つの利点は、広い範囲にわたって効果的に機能する任意の関数に適用できることである。そのため、異なる機能を発生するために、同じまたは類似のハードウェア・エンジンを使用することができる。
【００６８】
図９は、非線形関数ゼネレータ１０２の例示としての実施形態である。ゼネレータ１０２は、式（１０）、（１１）および（１２）が示すギブンズ回転を計算するために使用される。図９の場合には、陰をつけた要素は、複素数を処理し、陰をつけていない要素は実数だけを処理する。ゼネレータ１０２は、対応する実数部および虚数部の平方の合計として、それぞれ、複素数Ｙ１およびＹ２の絶対値の平方を生成する、要素１７０−１および１７０−２を含む。ギブンズ回転の場合には、合計要素１７２が、平方計算要素１７０−１および１７０−２の出力の合計、｜ａ11｜2＋｜ａ21｜2を発生する。この合計は、逆平方根ゼネレータ１７４に入力として送られる。入力合計の２進小数点が位置する場所を示すために、数ｑも、平方根ゼネレータ１７４に入力とし送られる。入力合計は、２進小数点の右のすべてのビットが、その数の小数部分、すなわち、その数の１より小さい部分を示す、「固定小数点」フォーマットの２進数である。
【００６９】
図１０は、図９の逆平方根ゼネレータ１７４の詳細図である。この実施形態の場合には、平方根ゼネレータ１７４は、二次補間装置１８０として実行される。正規化要素１８２は、その数を、１より大きいかまたは等しく、４より小さい領域内に正規化する。この正規化機能を実行するのに適している技術については、図２５、２６および２７を参照しながら、詳細に説明する。
【００７０】
正規化要素１８２の出力は、領域１／２−１内の符号がついていない正規化した数値であり、および正規化した数値を入手するために、入力のシフトしなければならないビット数を示す、符号がついている指数である。図１０に示すように、正規化した数値の多数の最上位のビットは「オフセット」と呼ばれ、予め計算したテーブルを含むメモリ１８４へのアドレスとして使用される。メモリ１８４の出力は、補間の際に使用される三つの係数ａ、ｂおよびｃである。オフセットの右側の正規化した数値の最下位のビットは、「ｄｘ」と呼ばれる。要素１８６が発生したｄｘおよびその平方は二次補間装置１８０に送られ、この補間装置は、ｄｘ2＋ｂｄｘ＋ｃの形の出力仮数を計算する。
【００７１】
結果として得られた仮数の精度は、メモリ１８４の大きさの関数である。オフセットのためにもっと多くのビットを使用する場合には、もっと大きなメモリが必要になり、その結果、仮数の精度は向上する。テーブル１は、異なるテーブル・サイズで達成可能な精度を示す。エラーは全領域にわたる、最悪ミニマックス相対エラーである。例えば、（１４＋１７＋２４）ビットの９６語の容量を持つメモリは、３．１×１０-7の最悪の場合のエラーを生み出すことができる。
【００７２】
図１０の同じハードウェアの大部分は、逆数計算に再使用することがある。もちろん、逆数用のテーブルを記憶するには、別のメモリが必要になる。
【表１】
2010049696.tif 000015
【００７３】
再び図９について説明すると、非線形関数ゼネレータ１０２は、さらに、別の組の乗数１８８−１、１８８−２および１８８−３を含む。これら乗数は、式（１０）−（１２）で必要な三つの数値を生成する。固定小数点乗数の後で、対応するたる形シフタ１９０−１、１９０−２および１９０−３は、結果を非正規化（denormalize）するために、上記指数を使用する。一番下の右の「ｚ１（４）へ」のところの出力は、図８の一番下に「非線形から」と表示されているマルチプレクサへ送られる。  
【００７４】
図９の非線形関数ゼネレータ１０２は、一段の回路の形をしてて、数値はＹ１およびＹ２入力に入力され、保持され、最終的には三つの結果が表示される。しかし、例示としての実施形態の場合には、上記回路は、好適には、パイプライン処理され、そのため、他のいくつかのものを計算しながら、新しい逆平方根の計算を始めることができるものであることが好ましい。
【００７５】
図１１は、図９の非線形関数ゼネレータ１０２の、上記パイプライン処理の実施形態の一例を示す。この実施形態の場合には、ゼネレータ１０２は、垂直方向の矢印で示す場所にレジスタを設置することにより、または、例えば、１９９６年の、ＩＥＥＥ  Ｊ半導体回路３１巻、３号の３７６ページ掲載の、Ｍ．ハシャミおよびＢ．Ａ．ウーリイの「２５０ＭＨｚの傾斜クロックパイプライン処理接続バッファ」に記載されている技術のような、当業者であれば周知のもっと進んだ技術を使用してパイプライン処理される。各パイプライン段の待ち時間はφである。全計算を通しての全待ち時間は５φであるけれとも、各φ毎に新しい計算を始めることができる。それ故、計算のピーク時には、ｃ、ｓの五つの重畳している計算を行うことができ、式（１０）−（１２）の更新した数値が同時に計算されるが、φの倍数により時間的に分離している。
【００７６】
レジスタ・ファイル１０６のアーキテクチャについて、さらに詳細に説明する。必要な行列演算のあるものを行うためには、サイクル毎に四つの複素数語を処理する速度で、レジスタ・ファイル１０６に記憶している数値にアクセスしなければならない。例えば、二つの複素数乗数、および二つの複素数被乗数を、図８の乗算装置１５０のＸおよびＹ入力に供給しなければならない。図７のプロセッサ素子アーキテクチャの場合には、これら複素数語のうちの二つは、レジスタ・ファイル１０６のポートｒ１から供給され、これら複素数語のうちの他の二つは、レジスタ・ファイル１０６のポートｒ２から供給される。それ故、これらポートのうちの所与の一つは、同時に二つの複素数語を取り出すように設計されている。
【００７７】
図１２は、所与のプロセッサ素子の、レジスタ・ファイル１０６内の語１９０のアレーである。図１２は、また、三つのポートのうちの一つを解読するための語線も示す。この実施形態のレジスタ・ファイル１０６は、各語が、例えば、１６ビットのような、所与の数を保持する、四つのリアルな語の幅を持つように構成される。語は、簡単に図示してあるように、０から３で示す四つの列に常駐する。一つのポート用の語線デコーダ２００は、行アドレスおよび制御情報を取入れ、その左側の一本の語線、およびその右側の一本の語線を能動状態にすることができる。上記目的のために、水平方向の一点鎖線で示すように、二つの行はペアになっている。デコーダ２００は、同じ二重の行の左側の一本の語線および右側の一本の語線を駆動しさえすればよい。列０および１、または列２および３の複素数語のビットの、物理的レイアウトは図示する必要はないが、必要な任意の順列に並べられている左から右へのある順序を持つことができる。
【００７８】
所与の複素数語は、二つの隣接する実数語を含み、一方の語は実数部を表わし、他方の語は虚数部を表わす。この例の場合には、図１２の列０の各語は実数であり、列１の同じ行の各隣接する語は、関連する虚数部である。同様に、列２は実数部を保持し、列３は他の複素数語の虚数部を保持する。
【００７９】
テーブル２は、８×８行列の要素の行列図である。各要素は複素数である。行列の二つの隣接する列のすべての要素は、一つのプロセッサ素子のレジスタ・ファイル１０６に記憶される。陰をつけた部分は、第一のプロセッサ素子の、レジスタ・ファイルに記憶される、第一の二つの列を示す。
【表２】
2010049696.tif 000016
【００８０】
テーブル３は、テーブル２の陰をつけた要素が、図１２のレジスタ・ファイル１０６の行および列にどのように記憶されるかを示す。テーブル３においては、上記二つの「行列図」の列が、どのようにしてレジスタ・ファイルに、靴紐のパターンで記憶されるかを示すために、テーブル２の第一の列からの要素だけに陰がつけてある。
【表３】
2010049696.tif 000017
【００８１】
テーブル３の記憶スキームの利点は、このスキームを使用した場合には、各ポートが、テーブル２の「行列図」の同じ行または同じ列上の、隣接する二つの複素数語にアクセスすることができることである。以下に説明するように、この機能は、プロセッサ素子のアレー上での、効率的なマトリックス−マトリックス乗算の際に使用される。テーブル４は、同じ結果、すなわち、同じ「行列図」の行または列上のとちらかの隣接する、二つの複素数語にアクセスすることができる、レジスタ・ファイル１０６の第一の二つの行用の別の記憶スキームである。
【表４】
2010049696.tif 000018
【００８２】
図１３は、レジスタ・ファイル１０６の所与のポートに関連するクロスバー・スイッチ２１０である。このスイッチは、図に示すように配置されている、マルチプレクサ２１２−１、２１２−２、２１２−３および２１２−４、およびドライバ２１４−１、２１４−２、２１４−３および２１４−４を含む。図の一番下の部分には、テーブル３に示すレジスタ・ファイルの列のビット線に取り付けられているバスが位置する。この図の一番上の部分には、ｃｍｐｌｘａおよびｃｍｐｌｘｂと表示されている、二つの複素数語の幅を持つバスが位置している。上記バス、ｃｍｐｌｘａおよびｃｍｐｌｘｂは、両方で図７のポートｒ１またはｒ２のうちの一方を形成する。
【００８３】
クロスバー・スイッチ２１０は、マルチプレクサ２１２−１、２１２−２、２１２−３および２１２−４の制御入力に供給された「逆」信号を通して、二つの複素数語の順序を反対するオプションを含む、図の一番上および一番下のところの二組のバスの二方向相互接続を行う。「逆」ロジック信号だと断定されない場合には、コラム０オプション１はｃｍｐｌｘａに接続され、列２および３はｃｍｐｌｘｂに接続される。「逆」ロジック信号と断定される場合には、相互接続は反対になる。クロスバー・スイッチ２１０の方向性は、「書込み」信号および「読出し」信号により制御される。一度に断定されるのは、これら信号のうちの一方だけである。「書込み」信号と断定された場合には、データはスイッチ２１０を通って下方に流れ、レジスタ・ファイルの内容はそのポートを通して書き込まれる。「読出し」信号であると断定された場合には、データはスイッチ２１０を通って上方に流れ、レジスタ・ファイル１０６の内容は、そのポートを通して読み出される。
【００８４】
テーブル３の記憶スキームと、図１３のクロスバー・スイッチ２１０とを組み合せることにより、「行列図」の行または列どちらかの上の、隣接する二つの複素数語に順次アクセスすることができ、以下に説明するように、高性能のマトリックス−マトリックス乗算を行うことができる。テーブル５は、二つの行２、３上に常駐する、種々のペアにアクセスするためのレジスタ・ファイル１０６およびクロスバー・スイッチ２１０の使用方法のいくつかの例を示す。
【表５】
2010049696.tif 000019
【００８５】
テーブル６は、図の一番上の部分において、図１２のレジスタ・ファイル１０６に入る可能な制御フィールドを示す。ｄｒｏｗの他に、二つの行のうちのどれを使用すべきかを示す多重ビット・フィールド、およびアクセスは単一複素数語に対してのものなのか、または二重複素数語に対してのものなのかを示す１ビット・フィールドｓｄ、およびｓｄ＝単一である場合に、列番号を示し、ｓｄ＝二重である場合に、二つの複素数語が、同じ行上に存在するのか、同じ列（行列図）上に存在するのかを示す１ビット・フィールドｘ、および二つの可能な列の列またはスタート列を示す１ビット・フィールドｃが存在する。
【表６】
2010049696.tif 000020
【００８６】
本発明は、複素数計算、すなわち、複素数を含む計算を実行する際に使用するのに特によく適している。しかし、本発明は実数値だけを含む計算にも使用することができる。例えば、図１２に示すようなレジスタ・ファイルが、実数だけを含んでいると仮定しよう。当業者であれば、複素数計算に関連する上記技術を、簡単な方法で、一つの行または一つの列上の、四つの連続している実数値にアクセスできるように、修正することができることは周知であろう。より詳細に説明すると、図１２のデコーダ２００は、一つを各列内の各語にというふうに、語線の数を、二重に出力するように構成することができる。テーブル７は、実数の行列の四つの列の語を、これを行うためのレジスタ・ファイルのコラム０−３に、どのような方法で記憶させことができるかを示す。
【表７】
2010049696.tif 000021
【００８７】
この実数計算をサポートするためのクロスバー・スイッチは、図１３のスイッチ２１０より大きい。また、マトリックス−マトリックス乗算が、レジスタ・ファイル１０６および乗算ハードウェアを完全に使用することができるように、図８の乗算装置１５０の一番下の最後の加算装置の数は１６に増大しなければならない。
【００８８】
＜プロセッサ素子の線形アレー＞
高い効率で行列演算を行うために、上記のように構成されている多数のプロセッサ素子は、線形アレーの形に相互接続される。異なるプロセッサ素子相互接続技術は、通常、例えば、ＱＲ分解、逆置換、マトリックス反転、マトリックス−マトリックス乗算、および共解散および相互相関の形成のような、異なるタイプの計算のために使用される。
【００８９】
図１４は、左側に一つのヘッド・プロセッサ素子２２２、その右側に１６の通常のプロセッサ素子を含むプロセッサ素子の１７の素子の線形アレー２２０である。各プロセッサ素子は、その最も近い隣接プロセッサ素子と二方向相互接続を持つ。各プロセッサ素子は、また、図７の（入力頂部用の）表示「ｉｔ」に対応する、下向き矢印で示す頂部からの外部入力を持つ。この線形アレー構成は、１７×１６行列式上でＱＲ分解を行ったり、逆置換を行ったりするのに適している。これについては、以下にさらに詳細に説明する。
【００９０】
図１５は、左側に一つのヘッド・プロセッサ素子２３２、およびその右側に三つの通常のプロセッサ素子を含むプロセッサ素子の４素子線形アレー２３０である。図は、時計方向の円形相互接続を示す。この構成は、以下に説明する方法により、マトリックス−マトリックス乗算を行うことができる。この場合、一番左側のプロセッサ素子２３２は、通常、ヘッド・プロセッサ素子に関連する上記の非線形関数能力を持つ必要はない。
【００９１】
図１６は、左側に一つのヘッド・プロセッサ素子２４２を持ち、その右側に四つの通常のプロセッサ素子を持つプロセッサ素子の５素子線形アレー２４０である。時計方向の円形相互接続は、最も左側の四つのプロセッサ素子、および四番目のプロセッサ素子から五番目のプロセッサ素子への、左から右への一つの追加の接続用に形成される。この構成は、以下に説明するように、最も左の四つのプロセッサ素子において、共分散行列の計算を、最も右のプロセッサ素子において、相互相関関係ベクトルの計算を行うことができる。この場合もまた、最も左のプロセッサ素子２４２は、通常、ヘッド・プロセッサ素子に関連する非線形関数能力を持つ必要はない。
【００９２】
図１４−図１６に示すような、本発明のプロセッサ素子の線形アレーは、通常、種々の演算を行うように構成されているポート、演算回路、およびレジスタ・ファイルを含む。図１４−図１６に示すタイプのプロセッサ素子のアレーは、所与の時間に、アレー内の各プロセッサ素子が、それ自身のデータに対して、個々の演算または命令を実行することができることを意味する、多重命令多重データ（ＭＩＭＤ）と呼ばれる、クラスであると見なすことができる。アレーの機能を制御するために、プログラムを使用することができる。このプログラム制御は、例えば、１９９１年９月１３日付のサイエンス２５３巻、１２３３ページ掲載の、Ｊ．Ａ．フイッシャおよびＢ．Ｒ．ラウの「命令レベルの並列処理」記載の、超長命令語（ＶＬＩＷ）と呼ばれるクラスのものであってもよい。一つの長い命令語は、アレーの各プロセッサ素子を制御するための、個々の動作を含むことができる。
【００９３】
超長語命令は、周知の従来の技術を使用する、プロセッサの線形アレーを制御するために順番に並べることができる。一組の超長語命令を含むプログラムは、メモリに常駐している。一つの集積回路上のインスタンシエーションのために、一つのメモリ語に全部の超長語命令を保持するために、十分なビットからなる非常に広いアクセス・サイズを持つように、メモリを構成することができる。上記メモリから対応する線形アレーへの、超長語命令の転送は、図２に示すような、従来の二次元アレーの制御のために必要な転送より、簡単であることに留意されたい。
【００９４】
すでに説明したように、線形アレー上での異なるアルゴリズムの実行は、プロセッサ素子間の異なる相互接続を必要とする場合がある。例えば、ＱＲ分解は、通常、アレー内の素子の数が行列に１を足した次元に等しい場合には、右端の素子からヘッド素子へのフィードバックを必要としない。マトリックス−マトリックス乗算は、通常、使用中の右側の最後の素子からヘッド素子への、フィードバック接続を必要とする。共分散および相互相関は、通常、最後の素子の隣の素子からヘッド素子への、フィードバック経路を必要とする。
【００９５】
プロセッサ素子の線形アレーを備える集積回路が、異なるアルゴリズムを実行できるようにするために、追加ロジックを追加することができる。図１７は、上記のような追加ロジックを含む、５プロセッサ素子線形アレー２５０を示す。プロセッサ素子２５２はヘッド・プロセッサ素子を表わす。三状態ゲート２５４−１、２５４−２、２５４−３および２５４−４は、左から右へのバス接続を、ヘッドプロセッサ素子２５２に戻る、フィードバック・バス２５６に接続している。三状態ゲートのうちの一つだけしか能動状態になることができず、すべての他のゲートは能動状態ではないので、フィードバック・バス２５６を駆動することはできない。同様に、マルチプレクサ２５８−１、２５８−２、２５８−３および２５８−４は、右から左への接続とヘッドプロセッサ素子２５２により駆動されるフィードバック・バス２６０の間で選択を行う。
【００９６】
三状態ゲート２５４−１、２５４−２、２５４−３および２５４−４、およびマルチプレクサ２５８−１、２５８−２、２５８−３および２５８−４の制御は、アレーの相互接続を形成するために、所与のアルゴリズムの冒頭のところで、制御レジスタに静的に書込むことができる。これは、「構成可能な計算」と呼ばれるアプローチの一例である。
【００９７】
複素数行列により種々の演算を行うためのプロセッサ素子のアレーは、通常、アレーにデータを供給し、アレーにどの計算を行うのかを知らせ、計算終了後に結果を受け取るための、もっと大きなシステムへのインターフェースを必要とする。例えば、アレーは、特定用途向けロジックにインターフェースを通して、接続することもできるし、またはホスト・プロセッサにインターフェースを通して、接続することもできる。ホスト・プロセッサ自身は、マイクロプロセッサ、デジタル信号プロセッサ、ワークステーション、または他の任意のタイプのデジタル処理デバイスを使用することができる。
【００９８】
図１８は、共プロセッサ３０２およびホスト・プロセッサ３０４を含む、処理システム３００の一例である。共プロセッサ３０２は、一つのヘッドプロセッサ素子３０６および四つの通常のプロセッサ素子を含む５プロセッサ素子線形アレーを含む。線形アレーは、すでに説明したような方法で、アレー内でデータを送るために、最も近くの隣接するアレー間の接続を含む。プログラム・メモリ３０８は、上記のように、アレーの個々の素子の動作を制御するための、一つまたはそれ以上のプログラムを含む。アレーへの命令の適用は、周知の従来のタイプのものであってよい、プログラム・シーケンサ３１０により制御される。この例の各プロセッサ素子は、三つのポートを含むレジスタ・ファイルを含む。所与のプロセッサ素子の、レジスタ・ファイルのポートのうちの二つのポートは、プログラム・メモリの命令により制御されるが、第三のポートは、インターフェース・ロジック・ブロック３１２により独立に制御される。より詳細に説明すると、インターフェース・ロジック・ブロック３１２は、各プロセッサ素子用のポートｒ３のアドレスを制御する。インターフェース・ロジック・ブロック３１２は、各レジスタ・ファイルに、データを書込むことができるし、または各プロセッサ素子のポートｒ３を通して、各レジスタ・ファイルから、データを読み出すことができる。
【００９９】
図に示すように、一つのインターフェース・ポート３１３が、インターフェース・ロジック・ブロック３１２を、ホスト・プロセッサ３０４の直接メモリ・アドレス（ＤＭＡ）ポート３１４に接続している。インターフェース・ポート３１３を使用することにより、ホスト・プロセッサ３０４のメモリと、インターフェース・ロジック・ブロック３１２との間で、データをやりとりすることができる。もう一つのインターフェース・ポート３１５により、どんなデータを書き込んだり、読み出しするのかを指定するために、ホスト・プロセッサ３０４からプログラム・シーケンサ３１０に制御を渡すことができる。インターフェース・ロジック・ブロック３１２は、ホストＤＭＡポートへの、またはホストＤＭＡポート３１４からのデータ転送を、アレーのレジスタ・ファイルに必要な分散記憶することができる。必要なマッピングの一例は、ホスト・プロセッサ・メモリのテーブル２から、所与のプロセッサ素子のレジスタ・ファイルのテーブル３へ送られるものである。さらに、ホスト・プロセッサ３０４は、プログラム・シーケンサ３１０に、どんなプログラムを実行するのか、その実行を何時開始するのかを示すコマンドを送ることができる。プログラム・シーケンサ３１０は、例えば、ホスト・プロセッサ３０４に、特定のプログラムの実行を何時終了するのかを知らせるために、状態をホスト・プロセッサ３０４に送ることもできる。ホスト・プロセッサ３０４は、また、例えば、プログラム・メモリ３０８に、異なるプログラムをダウンロードするために、第二のＤＭＡポート３１６および接続３１７を通して、共プロセッサ３０２のプログラム・メモリ３０８と直接通信することもできる。接続３１７は、この接続がオプションであることを示すために一点鎖線で表わす。
【０１００】
共プロセッサ３０２は、例えば、汎用ホスト・コンピュータに、インターフェースを通して接続していて、実行する異なるプログラムとともに動的にロードすることができる、柔軟な共プロセッサとして、読出し専用メモリに、または多数の他の構成に記憶しているそのプログラムにより、一つの固定アルゴリズムを実行する特定用途向けＩＣ（ＡＳＩＣ）に埋設されている一つのモジュールの形で実行することができる。埋設したＡＳＩＣ用途の場合には、データにとっては、図１８のレジスタ・ファイルのポートｒ３を通してよりも、各プロセッサ素子上のポートを通して直接アレーを入力し、出力したほうが便利である。
【０１０１】
ＱＲ分解、逆置換、マトリックス反転、マトリックス−マトリックス乗算、および共分散および相互相関の形成のいくつかの例のための、本発明のプロセッサ素子の線形アレーの動作を以下に詳細に説明する。
【０１０２】
＜ＱＲ分解＞
すでに説明したように、ＱＲ分解は、二次元三角収縮アレーを使用して、従来技術により達成される。この節においては、図１４に示す本発明の線形アレー上で、同じアルゴリズムを、かなり少ないハードウェアを使用して、ほとんど同じ性能で実行する方法について以下に説明する。
【０１０３】
図２示すものから図１４に示すものへの、相互接続のマッピングについて、最初に説明する。以下に説明するように、仮想の二次元三角アレーは、物理的な一次線形アレーにマッピングすることができる。三角形のアレーの丸い（ｒｏｎｕｄ）各ヘッドプロセッサ素子は、線形アレーの一つのヘッドプロセッサ素子にマッピングされる。丸いプロセッサ素子の右に隣接する、三角アレーの四角い（ｓｑｕａｒｅ）通常の各プロセッサ素子は、丸いプロセッサ素子の右に隣接する線形アレーの通常のプロセッサ素子にマッピングされる。このパターンは継続して行われる。図１４の線形アレー２２０のプロセッサ素子間の相互接続は、二方向の相互接続である。二次元三角アレーの一つの素子は、データをすぐ下の列の送り、これは線形アレーでマッピングされ、データを左に送る。このようにして、二次元三角アレー上で行われたすべての計算は、線形アレーにマッピングされるが、例外が一つだけある。すなわち、二次元の場合に可能な本当の平行状態ではなく、線形アレーは、行列の新しいコラム上で計算がスタートする度に、計算を位相φだけずらさなければならないことである。そうすることにより、以下により詳細に説明するように、ＱＲ分解の全待ち時間が若干長くなる。
【０１０４】
この例の場合には、図７のレジスタ・ファイルの唯一の使用方法は、結果が発生した場合、その結果を書き込むことである。上記結果はレジスタ・ファイル内に残り、プロセッサにより書き戻す際には示されない。
【表８】
2010049696.tif 000022
【０１０５】
図８は、図１４の線形アレー２２０のプロセッサ素子のための、可能な一組の命令を示す。ニーモニックは最初のコラム内に表示されている。第二および第三のコラム内の「ｙ」は、ニーモニックが、それぞれ、丸いまたは四角いプロセッサ素子に、適用することができることを示す。第四のコラムは、命令の実行内容を示す。説明が示すように、頂部または右側からロードすることができる各プロセッサ素子の入力のところに、「ｇ１」レジスタが位置するものと仮定する。
【０１０６】
テーブル９は、テーブル８に示す命令を使用して、ＱＲ分解を行うプログラムである。「ｃｓｔｖ２」の２ように、ニーモニックに続く数字は、プロセッサ素子により無視されるもので、プログラムの理解を助けるために、ソース・コードだけに存在するものである。入力ばブランクである場合には、「ｎｏｏｐ」命令お実行すべきことを示す。「ｎｏｏｐ」は、新しい計算をスタートしない。しかし、進行中の任意の前の計算に対しては、パイプライン処理を続行する。一番上の行は列の意味を示す。第一列は、ステップおよびサブステップで測定した経過時間のカウントを示す。サブステップは、テーブルの１行を占有し、パイプラインの説明の上に示す長さの時間を必要とする。この例の場合、命令の終了の待ち時間は５φであり、一つのステップと等しい。第二から第八までの列は、図１４の１７のプロセッサ素子を制御する命令に対応する。
【０１０７】
このテーブルの一つの行は、超長語命令と見なすことができる。プロセッサ素子の線形アレーを制御するための超長語命令を順番に並べる方法は、当業者にとっては周知のものである。
【０１０８】
テーブル９のプログラムの開始の近くの、各ステップの第一のサブステップ上でだけ、命令をスタートさせることができることに留意されたい。何故なら、次の命令は、前の命令の結果を必要とし、待ち時間が一つのステップであるからである。しかし、ステップ４のサブステップ２に到達した場合には、ゼロがすでに二つ存在し、プログラムは、パイプラインに相互に位置する二つの「ｃ」と「ｓ」の計算を開始することができる。計算が、プロセッサ素子の二次元三角アレー上で行われている場合には、「ｃｓｔｖ４」ｐ「ｃｓｒｇ１６」は、同時に実行することができる。本発明の場合には、これら演算は完全には同時に行われないで、サブステップφだけずれる。このずれは、従来の二次元三角アレーから、本発明の一次元線形アレーへ、移行するさいに必要なプロセッサ素子の、かなりの低減からみればささいなことである。プログラムが進行するにつれて、ますます多くのパイプライン処理スロットが使用されるのを観察することができる。ステップ１３により、パイプラインは「ｃ」および「ｓ」の５回の計算で一杯になる。プログラムが終了するまでには、パイプラインをもはや満たすことはできない。テーブル９の最後の行は、各プロセッサ素子の使用の百分率を示す。
【表９】
2010049696.tif 000023
2010049696.tif 000024
2010049696.tif 000025
2010049696.tif 000026
2010049696.tif 000027
2010049696.tif 000028
2010049696.tif 000029
2010049696.tif 000030
2010049696.tif 000031
2010049696.tif 000032
2010049696.tif 000033
【０１０９】
上記例の場合には、三角形に変換される式の行列要素は、アレーの頂部のところの入力を通して、図１４の線形アレー２２０に入力される。他の実施形態の場合には、三角形に変換される行列要素は、アレーで行われた前の計算により、そこに残留している状態で、アレーのレジスタ・ファイルに予め位置することができる。もう一つの他の実施形態の場合には、三角形に変換される行列要素は、図７のポートｒ３を通して、ＤＭＡインターフェースのような他のインターフェースにより、レジスタ・ファイルに導入される。
【０１１０】
すでに説明したように、二次元三角アレーを通して線形アレーへ行くための待ち時間の延長は、毎回、アルゴリズムにおいて、新しい列をゼロにするプロセスを開始する機会であり、線形アレーは、一つのサブステップφだけ遅延する。テーブル９の第二の列を見れば、例示としてのプログラムの場合には、１５の新しい列をゼロに変換するための機会の回数に対応して、これが１５回行われることがわかる。それ故、この例の場合には、線形アレー２２０が必要とする追加の待ち時間は、サブステップ１５回分であり、これは３回のステップに等しい。
【０１１１】
テーブル１０は、従来の二次元三角アレーの利点の数と、本発明のパイプライン処理の線形アレー２２０の利点の数との比較を示す。パイプライン処理線形アレー２２０は、三角アレーが必要とするプロセッサ素子の数の１１％のプロセッサ素子しか必要としないが、待ち時間は６％しか増大していないことがわかる。しかし、回路設計にパイプライン段を導入した場合、パイプライン処理線形アレーの「ステップ」時間が、三角アレーのそれよりすこし長くなる恐れがある。さらに、線形アレーの各プロセッサ素子は、通常、二次元三角アレー全体にわたって、例えば、分散した形で存在している一時的記憶装置よりも容量が少ない、レジスタ・ファイルの形の一時的記憶装置を含んでいなければならない。しかし、本発明を使用すれば、待ち時間をほんの少し損するだけで、ＱＲ分解を行うために必要な回路の数をかなり低減することができる。
【表１０】
2010049696.tif 000034
【０１１２】
＜逆置換＞
図１９は、本発明の５素子線形アレー３２０である。この線形アレー３２０は、上記式（１３）を解くための二方向相互接続を含む。ＱＲ分解プロセスの終了時に計算を行う、アレー３２０のヘッドプロセッサ素子３２２は、ｒ行列である、ｒ11、ｒ22、ｒ33およびｒ44のすべての主要な対角線方向の素子を保持する。その右に隣接するプロセッサ素子は、右に隣接する対角線方向の素子、すなわち、ｒ12、ｒ23、ｒ34およびｙ4を保持する。
【０１１３】
テーブル１１は、図１９の線形アレー３２０が、式（１３）を解く方法の全体的な概要を示す。
【表１１】
2010049696.tif 000035
【０１１４】
ステップ１においては、ヘッド・プロセッサ素子３２２で、ｒ44の逆数が計算される。この逆数もｒｎｄ１で示す。ステップ２においては、ヘッド・プロセッサ素子は、ｒ44の逆数に、ｓｑｒ２で示す上記プロセッサ素子からその右に送られた、ｙ4の数値を掛けることにより、ｘ4の解を計算する。ステップ３においては、ヘッド・プロセッサ素子は、ｒ33の逆数を計算する。その右（ｓｑｒ２）の通常のプロセッサ素子は、その左からそこに送られてきたｘ4と、そのレジスタ・ファイルに記憶しているｒ34とを掛ける。得られる積が、右からそこへ送られてきたｙ3の数値から引かれる。ステップ４においては、ヘッド・プロセッサ素子は、ｒ33の逆数に、右からそこへ送られてきたｙ3−ｒ34ｘ4を、掛けることによりｘ3を計算する。ｓｑｒ３で示す第三のプロセッサ素子は、同様に、ｙ2−ｒ24ｘ4を計算する。図に示すように、このプロセスは、ｘ1の解が得らるステップ８まで継続して行われる。乗算が行われるすべての場所は太字で示す。ステップ５において、プロセッサ素子、ｓｑｒ２が行う計算の中で、必要な乗算はｒ23ｘ3だけであることに留意されたい。残りは右からそこへ送られる。これらステップの待ち時間は、図に示していない。実際には、ある種の演算は前もって行うことができる。例えば、ｒ33の逆数の計算は、逆数ｒ44の計算がスタートした後、一回のサブステップ時間が経過した後で、スタートすることができる。この特定のアルゴリズム用のパイプラインの充填効率は低いことに留意されたい。
【０１１５】
＜マトリックス反転＞
すでに説明したように、ＱＲ分解を行った後で、共通のＲを共有する多重逆置換を行うことにより、行列を反転することができる。この節においては、ただ一回の逆置換を行う間の、全待ち時間を少し長くするだけで、パイプライン処理素子の線形アレー上で、複数の逆置換を可能にする方法について説明する。
【０１１６】
式（１８）の複数の逆置換問題は、共通の行列Ｒを共有しているので、Ｒの主な対角線方向の要素だけの逆数をｊのすべての数値に対して一回計算しさえすればよい。
【表１２】
2010049696.tif 000036
【０１１７】
テーブル１２は、ＱＲ分解の終了時に、プロセッサ素子の８素子線形アレーのレジスタ・アレーに記憶しているものを示す。レジスタ・ファイルの内容は、式（１８）の素子である。
【表１３】
2010049696.tif 000037
2010049696.tif 000038
2010049696.tif 000039
2010049696.tif 000040
2010049696.tif 000041
2010049696.tif 000042
【０１１８】
テーブル１３は、本発明の８素子線形アレーが、行列を反転する方法を示す。このテーブルは、基本的には、アレーの未使用のパイプライン段にインターリーブした、テーブル１１の例の四つのコピーを示す。図７の例示としての実施形態の場合には、１回のサイクルの間に、二つまでの複素数を右から左に移動させることができ、他の二つまでの複素数を左から右に移動させることができる。テーブル１３の反転例は、１サイクル当りの一つのプロセッサ素子当り、せいぜい一回の複素数乗算しか行わないが、一方、ハードウェアは、一つのプロセッサ素子当りの１サイクル当り、一回以上の乗算を行うことができる。さらに、多くの利用可能な多くの追加の未使用のサブステップが、パイプライン内に存在する。当業者であれば、実際に、マトリックス反転の解を見つけだすために、その内部で、Ｒの逆数および対角線方向に位置しない素子が右に移動し、部分的な結果が左に移動する、多くの可能な命令の組およびプログラムの解が存在することを理解することができるだろう。四つの逆置換を行うための全待ち時間が、一回だけ逆置換を行うための待ち時間より、８％しか長くないこと、およびアレーのパイプラインは、多くの残りのアイドルなプロセッサ素子について、まだ少ししか使用されていないことに留意されたい。
【０１１９】
＜マトリックス−マトリックス乗算＞
この節においては、図１５の例示としての線形アレー２３０を使用して、第三の複素数行列、ＡＢ≡Ｃを形成するために、８×８複素数行列を掛け算する方法を説明する。使用する技術の場合、計算は、ブロックまたは部分行列に分割される。図２０は、１６の２×２の積の部分行列に分割された、８×８複素数積行列Ｃを示す。この図においては、ｃ35、ｃ36、ｃ45およびｃ46を示す、一つの部分行列を強調してある。以下に示す例の場合には、図１５の四つの素子アレー２３０の各プロセッサ素子は、図２０の四つの列のうちの一つを計算するために専用に使用される。この場合、左から三番目のプロセッサ素子により計算される部分行列を強調してある。図２０の四つの行のうちの一つの行全体が、アレーの四つのプロセッサ素子により同時に計算される。
【０１２０】
図２０の一つの行を処理している間に、アレー２３０は、アレーを通してＡの行の数値を循環させる。一方、Ｂの行は指定のプロセッサ素子に留まる。図２１は、マトリックス−マトリックス乗算の一つのステップを示す。Ａの行１および行２上の複素数の数値のペアは、各プロセッサ素子の、ｉｌｃおよびｉｌｓ入力（図７参照）上で、入手することができる。これらのペアの数値には、各プロセッサ素子のＢの二つの列からの一組の複素数が掛けられる。図２２は、複数の組の数値が、次のプロセッサ素子の方向へ時計方向にシフトされ、次の乗算がスタートする次のステップを示す。上記四つのステップが行われた後で、Ａの同じ二つの行上の数値の他の組、すなわち、ａ12、ａ22、ａ14、ａ24、ａ16、ａ26、ａ18、ａ28がロードされ、さらに四つのステップに対してプロセスが続行される。この時点において、Ｃの行１および２のすべての結果を生成するために、必要な、すべての乗算がスタートする。その後で、同じプロセスが、行３および４に対して再びスタートする。
【表１４】
2010049696.tif 000043
【０１２１】
テーブル１４は、マトリックス−マトリックス乗算を行うために、テーブル８にすでに示した命令の組に追加できる、いくつかの可能な命令を示す。テーブル１５内は、第三の複素数行列、ＡＢ≡Ｃを形成する目的で、二つの８×８複素数行列を乗算するために、図１５の線形アレー２３０を制御するためのプログラムを示す。このプログラムの冒頭のところに、ＡおよびＢの最初の二つの列が、左側において、第一のプロセッサ素子に記憶されている。第三および第四の列は、第二のプロセッサ素子等にすでに記憶されている。すでに形成済みの積Ｃの最初の二つの列は、第一のプロセッサ素子に保持され、第三および第四の列は第二のプロセッサ素子等の内部に保持去れる。テーブル１５のプログラム・リストにおいては、第一の四つの列は、使用する命令ニーモニックを含む。四つの連続しているラインは、四つのプロセッサ素子を、それぞれ、制御するための個々の命令を示す。ニーモニックの右側の列の内部には、レジスタ・ファイルに対する二つの各ポートの制御を示すフィールドに対する数値を示す。フィールド名、ｄｒｏｗ、ｘおよびｃは、テーブル６の制御に対応する。
【表１５】
2010049696.tif 000044
2010049696.tif 000045
2010049696.tif 000046
2010049696.tif 000047
2010049696.tif 000048
2010049696.tif 000049
【０１２２】
テーブル１５のプログラムは、初期値を含む各プロセッサ素子の二つのｇレジスタ、および二つの入力左レジスタをロードすることによりスタートする。次のサブステップは、四つのクロス乗積の乗算をスタートし、Ａ値をアレーの周囲での時計方向のシフトをスタートする。次の命令は、累算Ｃクロス乗積に加算するために、乗算−累算命令をスタートする。サブステップ１／４においては、Ａの新しい数値をレジスタ・ファイルから読み出す。サブステップ２／３においては、各プロセッサ素子のＣ内の四つの素子、すなわち、第一プロセッサ素子のｃ１１、ｃ１２、ｃ２１およびｃ２２、第二のプロセッサ素子のｃ１３、ｃ１４、ｃ２３、ｃ２４等の計算を終了するために、最後の乗算−累算がスタートする。パイプラインの待ち時間のために、これらの結果は、サブステップ３／３まで、レジスタ・ファイルに書き戻されない。一方、アレーは、サブステップ２／４において、Ｃの次の組の数値の計算をスタートする。最後の乗算はサブステップ７／２でスタートし、パイプラインの待ち時間経過後、サブステップ８／２において、最終的な結果がレジスタ・ファイルに書き込まれる。それ故、８×８複素数マトリックス−マトリックス乗算は、アレー２３０上で終了するまで、４０サブステップ以下の時間しか掛からない。
【０１２３】
複素数行列に（例えば、７×７のような）奇数の大きさを乗算するために、何時でも次の偶数の大きさに行列をゼロで充填することができ、その後で、８×８乗算のために上記手順を行うことができる。しかし、そうすると、不必要な余分な乗算を行わなければならないために、効率が低下する。当業者であれば、別の方法として、奇数の大きさの行列を処理するために、適当な命令を、テーブル１４の行列に追加することができることをすぐに理解することができるだろう。
【０１２４】
各レジスタ・ファイルにもっと多くの列を記憶することによって、同じ大きさのアレー上で、もっと大きなアレーの乗算を行うことができる。例えば、第一のプロセッサ素子に第一の四つの列を記憶し、第二のプロセッサ素子等の上に列５−８を記憶することによって、図１５の線形アレー２３０上で、１６×１６の複素数マトリックス−マトリックス乗算を行うことができる。アレーのレジスタ・ファイルに入りきらない大きさの、行列の場合には、そのような行列を入れることができる大きさのブロックに分解して、周知のブロック行列乗算方法を使用することができる。この場合には、ホスト・プロセッサ、または第三のレジスタ・ファイル・ポートを使用する専用ロジックを、ブロックの緊密に接続しているアップローディンおよびダウンローディングと協力させなければならない。
【０１２５】
＜共分散および相互相関＞
この節においては、共分散および相互相関を同時に計算するための、図１６の線形アレー２４０の使用方法を説明する。式（２３）および（２４）は、共分散および相互相関を計算するためには、フォームの項、ｘｘHおよびｘｙdを計算しなければならないことを示す。
【０１２６】
上記のマトリックス−マトリックス乗算と比較すると、共分散の計算はもっと簡単である。二つのＮ×Ｎ行列を乗算する場合には、Ｎ3の乗算を行わなければならない。共分散だけの計算なら、Ｎ2の乗算を行いさえすればよい。下記の例の場合には、入力ベクトルｘ（例えば、アンテナのアレーからのデータ）、および期待値ｙdは、図２３に示すように、頂部からアレー２４０内に入り、一番左の四つの各プロセッサ素子、および５番目のプロセッサ素子用のｇ１レジスタ用の、図７のｇ１、ｈ２、ｉｌｃ０（１）およびｉｌｓ０（１）レジスタにロードされる。次のサブステップにおいては、第一の四つの各プロセッサ素子は、前のステップにおいて、それ自身をすでに入力している二つの数値の四つのクロス乗積を計算する。例えば、左側の第一のプロセッサ素子は、四つの項、すなわち、ｘ1ｘ1*、ｘ1ｘ2*、ｘ2ｘ1*およびｘ2ｘ2*を計算する。同時に、ｉｌｃ０（１） およびｉｌｓ０（１）レジスタ内の数値が右に送られる。次のサブステップにおいては、第一の四つの各プロセッサ素子は、その左側にあった数値とｇ１、およびｈ２内に保持している数値との四つのクロス乗積を計算する。右側のプロセッサ素子は、二つの積、ｘ7ｙd*およびｘ8ｙd*を計算する。図２４は、第三のサブステップの時計方向の相互接続上のデータである。各乗算によるパイプライン遅延の終わりのところで、完了した項を、レジスタ・ファイルに書き込むことができる。別の方法としては、時間平均を更新するために、レジスタ・ファイルに記憶した前の数値により、完了した項を最初に加重し、平均することができる。その後で、図に示す例に対する共分散および相互相関を数ステップで完了することができる。当業者であれば、共分散および相互相関を計算するために、他の方法でアレーを構成し、プログラムすることができることを、理解することができるだろう。
【０１２７】
＜平方根正規化プロセス＞
図２５、図２６および図２７を参照しながら、図１０のところですでに説明した平方根正規化プロセスについて、さらに詳細に説明する。本発明のこの機能は、ある関数に対するアーギュメントの範囲縮小、および必要な機能を達成するための移行の結果の変換を助けるデジタル・ハードウェアを提供する。説明の都合上、上記関数は下記式で表わされるものと仮定する。
【数１３】
2010049696.tif 000050
【０１２８】
図２５は、この逆平方根機能のグラフである。このグラフから、ｘの数値が小さい場合には、逆平方根機能が非常に急勾配になることが分かる。このグラフの陰をつけた部分は、０．５＜ｙ（ｘ）≦１および１≦ｘ＜４の範囲に対応する。陰をつけた部分においては、関数の勾配は緩やかで、テーブル内の数値間に補間するというような周知の技術を使用して、もっと容易に達成することができる。
【０１２９】
図２５の陰をつけた部分に対応する、縮小した範囲内の数値を生成するための正規化プロセスは、識別を使用することができる。
【数１４】
2010049696.tif 000051
ｎが整数である場合で、シフトが、ビット２ｎの偶数に制限されている場合には、「偶数」正規化を行うことができ、その場合には、二つの最上位のデータ・ビットは、ロジック１を含む。下記のテーブル１６に多数の例を示す。
【表１６】
2010049696.tif 000052
【０１３０】
テーブル１６の最初の二つの列の「＝」の左側の数値は、固定小数点２進表示であり、「＝」の右側の数値は十進法表示である。
【０１３１】
元のアーギュメントが、０．０４−６の範囲内の合ったことに留意されたい。正規化されたｘの範囲は、１．０≦ｘ＜４である。正規化されたｘの２進小数点の位置は、任意の点である。重要なことは、最小のｘに対する最大のｘの比率であり、正規化後は４に等しい。しかし、１−４の範囲はｘを選択するのに適した領域である。何故なら、この領域においては、関数の勾配が急でないからである。そのため、補間または他の周知の技術により、高い精度を達成することができる。
【０１３２】
正規化したｘが決定されると、整級数展開、テーブル駆動補間法、およびニュートン−ラプソン回帰のような、当業者にとっては周知の技術を使用して、正規化した数値ｘの逆平方根の計算を進めることができる。
【０１３３】
図２６は、上記の「偶数」正規化プロセスの可能なハードウェアによる実行である。正規化を行う前のアーギュメントｘの隣接するビットの各ペアは、図に示すように、１である場合には、他方または両方は、ロジック１の数値を持つことを示すように、一連のＯＲゲート３２５内の、対応する二つの入力ＯＲゲートに入力することができる。図２６の例の場合には、Ｗビットは、２進小数点の左側のすべてのビットの数を示し、この例の場合には偶数で１２である。Ｆビットは、ｘの小数部分のビットの全部の数を示すが、この例の場合には８である。一連のＯＲゲート３２５は、ｘのビットの隣接するペアの方を向いている、１０のＯＲゲートを含む。
【０１３４】
一連のＯＲゲート３２５の出力は、現在のハードウェア正規化装置の周知のタイプの優先順位エンコーダ３２７の入力になる。エンコーダ３２７は、アーギュメントの最上位ビットの場所に近い、ロジック１の出力と一緒に、特定のＯＲゲートに対応する２ｎの数値を出力する。エンコーダ３２７の出力のところの数値は、正規化されたｘを形成するために、アーギュメントを２ｎだけシフトするたる形シフタ３３０を制御する。
【０１３５】
より詳細に説明すると、優先順位エンコーダ３２７は、左から右の方を向いている、第一のロジック１入力の位置に対応する一つの数を出力する。この例の場合には、最初の１は左から数えて第二のＯＲゲートからのものである。ＯＲゲートからの入力の次に示す０−１８の数字は、優先順位エンコーダ３２７が出力する２ｎの数値である。それ故、この例の場合、２ｎ＝２が出力である。すでに説明したように、数値２ｎは一番左の位置、または一番左の位置の次の位置に、何時でもロジック１を持つ正規化した仮数を形成するために、ｘをシフトするたる形シフタ３３０を制御するために使用される。
【０１３６】
図２６の正規化した仮数のビット部分は、「オフセット」と呼ばれるが、これについては、図１０のところですでに説明した。これらのビットは、例えば、読出し専用メモリ（ＲＯＭ）、または他のタイプのメモリに記憶しているテーブルのような、参照用テーブルから、関数の近似値を発見するための、アドレスとして使用することができる。この例の場合には、オフセットは、３２語を含むテーブルを示す五つのビットを持つ。しかし、０≦ｘ＜１に対応する、これら語の最も下の部分は、決して参照されることはないので、参照用テーブルは２４語を含んでいればそれで十分である。図２６の場合も、オフセットの右側のいくつかのビットには「ｄｘ」がつけられている。これらビットは、ｘがオフセットの数値より大きい量を示す。線形補間アルゴリズムを使用する場合には、参照用テーブルは、ｙ（オフセット）の数値と、オフセットのところのｙ（正規化したｘ）の勾配の両方を含む。正規化したｘのところのｙ（正規化したｘ）の数値を発見するために、ｄｘの数値にはテーブルから発見した勾配が掛けられ、オフセットのところの数値に加算される。
【０１３７】
正規化したｘの逆平方根を計算した後で、結果を、ビットの数の半分だけ、正規化シフトの方向とは反対方向にシフトすることによって、元のアーギュメントの必要な逆平方根を入手することができる。すなわち、正規化の際に、右側へ２ｎ＝６ビットだけシフトさせた場合には、非正規化により、結果は定数＋（ｎ＝３）ビットだけ、左側にシフトされる。それ故、上記識別を行うハードウェアを構成することによって、アーギュメントの範囲を容易に狭くすることができ、また結果を容易に調整することができる。
【０１３８】
再び図２６の例について説明するが、ｘの２進小数点は、左から数えてＷビットであることに留意されたい。参照用テーブルの数値は、テーブル１６に示す左から数えて２ビット目の位置にある２進小数点に基づいている。それ故、非正規化を行うためには、たる形シフタ３３０によるｎビットの可変シフトに加えて、（Ｗビット−２）／２に等しいシフトを何時でも行わなければならない。それ故、上記のｙ（正規化したｘ）の数値は、逆の方向に（ｎ−１−（Ｗビット／２））ビット分だけシフトさせ、その結果、必要なｙ（ｘ）とした、たる形シフタにより非正規化することができる。
【０１３９】
図２７は、ビットの全数が奇数である場合の、正規化プロセスにおける違いを示す。この例の場合には、Ｗビットの数は１１である。全数の数を偶数にするために、余分なゼロがｘの前に追加される。この例の場合には、一組のＯＲゲート３２５’は、図２６の一組のＯＲゲート３２５に対応するが、第一のＯＲゲートは除去されていて、前に追加したビットの右のビットは、優先順位エンコーダ３２７’に直接入力される。
【０１４０】
逆平方根の計算に基づいて、上記正規化技術を説明してきたが、この技術は、平方根の計算にも適用することができる。この技術は、簡単な方法で、立法根等のような他の分数ベキにも適用を広げることができる。例えば、立法根の場合には、３ビットの倍数分等だけシフトするように正規化装置を構成することができる。
【０１４１】
上記の本発明の実施形態は例示としてのものに過ぎない。他の実施形態は、プロセッサ素子およびその線形アレーに対して他の構成を使用することができ、上記以外の計算も行うことができる。当業者であれば、添付の特許請求の範囲に含まれる、上記および多数の他の実施形態を容易に思いつくことができるだろう。
【図１】
2010049696.tif 000053
【図２】
2010049696.tif 000054
【図３】
2010049696.tif 000055
【図４】
2010049696.tif 000056
【図５】
2010049696.tif 000057
【図６】
2010049696.tif 000058
【図７】
2010049696.tif 000059
【図８】
2010049696.tif 000060
【図９】
2010049696.tif 000061
【図１０】
2010049696.tif 000062
【図１１】
2010049696.tif 000063
【図１２】
2010049696.tif 000064
【図１３】
2010049696.tif 000065
【図１４】
2010049696.tif 000066
【図１５】
2010049696.tif 000067
【図１６】
2010049696.tif 000068
【図１７】
2010049696.tif 000069
【図１８】
2010049696.tif 000070
【図１９】
2010049696.tif 000071
【図２０】
2010049696.tif 000072
【図２１】
2010049696.tif 000073
【図２２】
2010049696.tif 000074
【図２３】
2010049696.tif 000075
【図２４】
2010049696.tif 000076
【図２５】
2010049696.tif 000077
【図２６】
2010049696.tif 000078
【図２７】
2010049696.tif 000079