(57)【特許請求の範囲】
【請求項１】
Ａｘ＝ｂを満たす次元ｎｘ１ベクトルｘに対応するｎ個の高精度データ要素を生成するための装置であって、この式で、Ａは、ｎｘｎ個の事前に定義された高精度データ要素に対応する次元ｎｘｎ正定値対称行列であり、ｂは、事前に定義されたｎ個の高精度データ要素に対応する次元ｎｘ１ベクトルであり、行列Ａの高精度データ要素が、スカラ関数Ｆ＝ａ（ｉ，ｊ）で定義され、ここで、ｉは行列Ａの行インデックス（１＜＝ｉ＜＝ｎ）であり、およびｊは行列Ａの列インデックス（１＜＝ｊ＜＝ｎ）であり、
前記装置は、
行列Ａおよびベクトルｂの前記データ要素を定義する入力データを格納するためのメモリと、
（ａ）Ａｌｘｌ＝ｂｌを満たす次元ｎｘ１ベクトルｘｌに対応するｎ個の低精度データ要素を前記入力データから生成するための第１の反復プロセスを実施するステップであって、この式で、Ａｌは、前記スカラ関数Ｆに基づいて作成された低精度関数Ｆｌによって定義される低精度の行列Ａｌのｎｘｎ個のデータ要素に対応する次元ｎｘｎ行列であり、ｂｌは、低精度のベクトルｂのｎｘ１個のデータ要素に対応する次元ｎｘ１ベクトルであり、前記高精度は前記低精度よりも高いレベルの精度を有し、前記制御論理は第１の収束条件を満たすことに応じて前記第１の反復プロセスを終了する、前記第１の反復プロセスを実施するステップと、
（ｂ）ベクトルｘｌの前記低精度データ要素それぞれを高精度データ要素に変換し、現行の高精度解ベクトルｘを取得するステップと、
（ｃ）前記ベクトルｂとベクトル積Ａｘとの間の差に依存して、次元ｎｘ１修正ベクトルに対応するｎ個の低精度データ要素を生成するための第２の反復プロセスを実施するステップであって、前記制御論理は第２の収束条件を満たすことに応じて前記第２の反復プロセスを終了する、前記第２の反復プロセスを実施するステップと、
（ｄ）前記修正ベクトルのｎ個の低精度データ要素から、次元ｎｘ１更新ベクトルｕそれぞれの高精度データ要素を生成するステップと、
（ｅ）ｘ＝ｘ＋ｕとなるように、前記現行の高精度解ベクトルｘの前記データ要素を更新するステップと、
（ｆ）第３の収束条件が満たされるまで、前記ステップ（ｃ）〜（ｅ）を実行するステップと
を実行するように適合された、前記制御論理と
を備えている、前記装置。
【請求項２】
前記制御論理が、
前記ステップ（ｂ）で前記現行の高精度解ベクトルｘを生成した後、前記ベクトルｂと前記ベクトル積Ａｘとの差異を示す現行の次元ｎｘ１誤りベクトルｒ（以下、現行の誤りベクトルｒという）に対応するｎ個のデータ要素を生成するステップと、
前記次元ｎｘ１修正ベクトルと前記行列Ａｌのベクトル積が前記現行の誤りベクトルｒに依存するように、前記ステップ（ｃ）を実行するステップと、
前記ステップ（ｄ）で、前記次元ｎｘ１修正ベクトルのデータ要素を高精度データ要素に変換することによって、更新ベクトルｕのデータ要素を生成するステップと
を実行するように適合された、請求項１に記載の装置。
【請求項３】
前記制御論理が、
ｒ＝ｂ−Ａｘとなるように高精度で前記現行の誤りベクトルｒの前記データ要素を生成するステップと、
低精度誤りベクトルｒｌを取得するために、前記現行の誤りベクトルｒの前記データ要素をそれぞれの低精度データ要素に変換するステップと、
前記修正ベクトルと前記行列のＡｌの前記ベクトル積が前記低精度の誤りベクトルｒｌに等しいように、前記ステップ（ｃ）を実行するステップと、
前記ステップ（ｅ）で、前記現行の高精度解ベクトルｘの前記データ要素を更新した後、ｒ＝ｂ−Ａｘとなるように、前記現行の誤りベクトルｒの前記データ要素を更新するステップと
を実行するように適合され、
前記第３の収束条件が前記現行の誤りベクトルｒに依存する、
請求項２に記載の装置。
【請求項４】
前記第１の収束条件が、
前記第１の反復プロセスの所定のパス数が完了すること、
前記ベクトルｘｌの解が所定の許容範囲に到達すること、および
前記第１の反復プロセスの連続するパスにおいて、前記ベクトルｘｌの解に変化が検出されないこと
のうちの少なくとも１つ、またはそのうちの第１の発生に依存する、請求項１〜３のいずれか一項に記載の装置。
【請求項５】
前記第２の収束条件が、
前記第２の反復プロセスの所定のパス数が完了すること、
前記修正ベクトルの解が所定の許容範囲に到達すること、および
前記第２の反復プロセスの連続するパスにおいて、前記修正ベクトルの解に変化が検出されないこと
のうちの少なくとも１つ、またはそのうちの第１の発生に依存する、請求項１〜４のいずれか一項に記載の装置。
【請求項６】
前記第３の収束条件が、
前記ステップ（ｃ）〜（ｅ）の所定のパス数が完了すること、
前記現行の高精度解ベクトルｘに依存するベクトルの解が所定の許容範囲に到達すること、および
前記ステップ（ｃ）〜（ｅ）の連続するパスにおいて、前記現行の高精度解ベクトルｘに依存する前記ベクトルの解に変化が検出されないこと
のうちの少なくとも１つ、またはそのうちの第１の発生に依存する、請求項１〜５のいずれか一項に記載の装置。
【請求項７】
前記現行の高精度解ベクトルｘに依存する前記ベクトルが前記誤りベクトルｒを含む、請求項１〜６のいずれか一項に記載の装置。
【請求項８】
前記第１の反復プロセス又は前記第２の反復プロセスが、共役勾配方法を含む、請求項１〜７のいずれか一項に記載の装置。
【請求項９】
前記制御論理が、
ステップ（ａ）〜（ｅ）を並列に実施するように構成された複数のプロセッサを備えている、
請求項１〜８のいずれか一項に記載の装置。
【請求項１０】
Ａｘ＝ｂを満たす次元ｎｘ１ベクトルｘに対応するｎ個の高精度データ要素を生成するためのコンピュータ・プログラムであって、この式で、Ａは、ｎｘｎ個の事前に定義された高精度データ要素に対応する次元ｎｘｎ正定値対称行列であり、ｂは、事前に定義されたｎ個の高精度データ要素に対応する次元ｎｘ１ベクトルであり、行列Ａの高精度データ要素が、スカラ関数Ｆ＝ａ（ｉ，ｊ）で定義され、ここで、ｉは行列Ａの行インデックス（１＜＝ｉ＜＝ｎ）であり、およびｊは行列Ａの列インデックス（１＜＝ｊ＜＝ｎ）であり、前記コンピュータのメモリ内に格納され行列Ａおよびベクトルｂの前記データ要素を定義する入力データに、前記コンピュータをアクセスさせ、
（ａ）Ａｌｘｌ＝ｂｌを満たす次元ｎｘ１ベクトルｘｌに対応するｎ個の低精度データ要素を前記入力データから生成するための第１の反復プロセスを実施するステップであって、この式で、Ａｌは、低精度の行列Ａのｎｘｎ個のデータ要素に対応する次元ｎｘｎ行列であり、ｂｌは、低精度のベクトルｂのｎｘ１個のデータ要素に対応する次元ｎｘ１ベクトルであり、前記高精度は前記低精度よりも高いレベルの精度を有し、前記制御論理は第１の収束条件を満たすことに応じて前記第１の反復プロセスを終了する、前記第１の反復プロセスを実施するステップと、
（ｂ）ベクトルｘｌの前記低精度データ要素それぞれを高精度データ要素に変換し、現行の高精度解ベクトルｘを取得するステップと、
（ｃ）前記ベクトルｂとベクトル積Ａｘとの間の差に依存して、次元ｎｘ１修正ベクトルに対応するｎ個の低精度データ要素を生成するための第２の反復プロセスを実施するステップであって、前記制御論理は第２の収束条件を満たすことに応じて前記第２の反復プロセスを終了する、前記第２の反復プロセスを実施するステップと、
（ｄ）前記修正ベクトルのｎ個の低精度データ要素から、次元ｎｘ１更新ベクトルｕそれぞれの高精度データ要素を生成するステップと、
（ｅ）ｘ＝ｘ＋ｕとなるように、前記現行の高精度解ベクトルｘの前記データ要素を更新するステップと、
（ｆ）第３の収束条件が満たされるまで、前記ステップ（ｃ）〜（ｅ）を実行するステップと
をコンピュータに実行させるための、プログラム・コード手段を備えている、前記コンピュータ・プログラム。
【請求項１１】
前記ステップ（ｂ）で前記現行の高精度解ベクトルｘを生成した後、前記ベクトルｂと前記ベクトル積Ａｘとの差異を示す現行の次元ｎｘ１誤りベクトルｒ（以下、現行の誤りベクトルｒという）に対応するｎ個のデータ要素を生成するステップと、
前記次元ｎｘ１修正ベクトルと前記行列Ａｌのベクトル積が前記現行の誤りベクトルｒに依存するように、前記ステップ（ｃ）を実行するステップと、
前記ステップ（ｄ）で、前記次元ｎｘ１修正ベクトルのデータ要素を高精度データ要素に変換することによって、更新ベクトルｕのデータ要素を生成するステップと
を、前記コンピュータに実行させるための、前記プログラム・コード手段をさらに含む、請求項１０に記載のコンピュータ・プログラム。
【請求項１２】
ｒ＝ｂ−Ａｘとなるように高精度で前記現行の誤りベクトルｒの前記データ要素を生成するステップと、
低精度誤りベクトルｒｌを取得するために、前記現行の誤りベクトルｒの前記データ要素をそれぞれの低精度データ要素に変換するステップと、
前記修正ベクトルと前記行列のＡｌの前記ベクトル積が前記低精度の誤りベクトルｒｌに等しいように、前記ステップ（ｃ）を実行するステップと、
前記ステップ（ｅ）で、前記現行の高精度解ベクトルｘの前記データ要素を更新した後、ｒ＝ｂ−Ａｘとなるように、前記現行の誤りベクトルｒの前記データ要素を更新するステップと
を、前記コンピュータに実行させるための、プログラム・コード手段をさらに含み、
前記第３の収束条件が前記現行の誤りベクトルｒに依存する、
請求項１１に記載のコンピュータ・プログラム。
【請求項１３】
前記第１の収束条件が、
前記第１の反復プロセスの所定のパス数が完了すること、
前記ベクトルｘｌの解が所定の許容範囲に到達すること、および
前記第１の反復プロセスの連続するパスにおいて、前記ベクトルｘｌの解に変化が検出されないこと
のうちの少なくとも１つ、またはそのうちの第１の発生に依存し；
前記第２の収束条件が、
前記第２の反復プロセスの所定のパス数が完了すること、
前記修正ベクトルの解が所定の許容範囲に到達すること、および
前記第２の反復プロセスの連続するパスにおいて、前記修正ベクトルの解に変化が検出されないこと
のうちの少なくとも１つ、またはそのうちの第１の発生に依存し；又は、
前記第３の収束条件が、
前記ステップ（ｃ）〜（ｅ）の所定のパス数が完了すること、
前記現行の高精度解ベクトルｘに依存するベクトルの解が所定の許容範囲に到達すること、および
前記ステップ（ｃ）〜（ｅ）の連続するパスにおいて、前記現行の高精度解ベクトルｘに依存する前記ベクトルの解に変化が検出されないこと
のうちの少なくとも１つ、またはそのうちの第１の発生に依存する、
請求項１０〜１２のいずれか一項に記載のコンピュータ・プログラム。
【請求項１４】
前記現行の高精度解ベクトルｘに依存する前記ベクトルが前記誤りベクトルｒを含む、請求項１０〜１３のいずれか一項に記載のコンピュータ・プログラム。
【請求項１５】
前記第１の反復プロセス又は前記第２の反復プロセスが、共役勾配方法を含む、請求項１０〜１４のいずれか一項に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、連立１次方程式（linear systems of equations）の処理に関する。高精度の解を生成するために、連立１次方程式の混合精度処理のための装置およびコンピュータ・プログラムが提供される。
【背景技術】
【０００２】
現在のプロセッサは、通常、高精度および低精度で処理演算を実行することができる。この精度が、浮動小数点数の小数部を表すために使用可能なビット数を決定する。ここで「高」および「低」という用語は、単に、一方が他方より高い２つの異なるレベルの精度（したがって、「小数ビット（fractional bits）」数）を区別するために使用され、個々の精度レベルに対するいかなる特定の制約をも示唆するものではない。したがって、低精度および高精度で使用される実際の小数ビット数は、システムによって大幅に異なる可能性がある。たとえば現行のＩＥＥＥ規格では、低精度（「単精度」とも呼ばれる）処理について、小数点以下１０進８桁と等価である３２ビットを指定し、高精度（または「倍精度」）処理について、小数点以下１０進１６桁と等価である６４ビットを指定している。しかしながら多くの組み込みシステムでは、たとえば８および１６ビット、または１０および２０ビットなどの、異なる指定を使用している。
【０００３】
プロセッサのタイプに応じて、専用処理論理または同じプロセッサ・ハードウェアの適切なソフトウェア制御による、低精度演算および高精度演算が実施可能である。どちらの場合も、低精度演算は高精度演算よりも複雑でなく、大幅に高速である。したがって複雑なタスクが高精度な結果を必要とする場合、「混合精度」手法を採用することができる。混合精度処理を使用すると、タスクの一部のコンポーネントは低精度で実行され、他のコンポーネントは高精度で実行されるため、全体の結果は高精度で取得される。多くの科学およびエンジニアリングの適用例に不可欠なこうした処理タスクの一例が、連立１次方程式の解である。このタスクでは、プロセッサが、Ａｘ＝ｂのように、次元（dimension）ｎｘ１のベクトルの要素に対応するｎの高精度データ要素を生成する必要がある。ここで、Ａは次元ｎｘｎの正定値対称行列（symmetric, positive-definitematrix）であり、ｂは次元ｎｘ１のベクトルである。行列Ａは、メモリ内に格納し、処理演算に必要な場合にアクセスしなければならない、ｎｘｎの高精度データ要素によって定義される。同様に右側のベクトルｂは、システム・メモリに格納されたｎの高精度データ要素によって定義される。行列Ａが密である場合、解ベクトルｘに対応する高精度データ要素を生成するタスクは、かなりのプロセッサ集約型である。特に、係数行列Ａのすべての要素が非ゼロである場合、タスクは、行列Ａの次元ｎと共に３次的に成長する、プロセッサ内の多数の算術演算を必要とする。
【０００４】
これまで、前述のタスクの混合精度手法は、行列分解（decomposition）（変換）に基づくものであった。処理演算の基本ステップは以下の通りである。第１に、行列Ａは、ｎｘｎの高精度データ要素で構成され、システム・メモリ内に格納されなければならない。次に行列Ａは、システム・メモリ内に低精度コピーＡｌを生成するために格下げ（demote）される（丸められる）。これは、適切な丸めプロセスによって、行列Ａの高精度データ要素をそれぞれの低精度データ要素へと変換することによって実行される。次にプロセッサは分解プロセスを実施し、これによって行列ＡｌはＡｌ＝ＬＬＴのように分解され、ここでＬは下三角行列（lower triangular matrix）であり、ＬＴはその転置行列を示す。変換は、コレスキー分解によって実行される。この技法は当分野で良く知られており、ここで詳細に論じる必要はない。留意しなければならないのは、分解は低精度ハードウェアによって実施可能であるが、この分解のコストが次元ｎの３乗で増加することである。係数行列ＬおよびＬＴの１次方程式について、ベクトル解のデータ要素を生成するための後続の処理は、行列次元ｎと共に２次的に増加するコストを必要とする。これは、以下のような反復改良方法を使用して実行される。
【０００５】
初期の、Ａｘ＝ｂの低精度推定解ベクトルｘ１は、Ｌ（ＬＴｘ１）＝ｂｌを解くことによって取得され、この式でｂｌは、低精度のベクトルｂのｎｘ１データ要素に対応する要素を備えるｎｘ１ベクトルである。ベクトルｘｌの低精度データ要素は、現行の解ベクトルｘを取得するための適切な変換プロセスによって、それぞれの高精度データ要素に格上げされる。これは、たとえば各ケースで最も近い高精度値を選択することなどによって、様々な方法で実行することができる。その後、ｒ＝ｂ−Ａｘのように、現行のｎｘ１残差（誤り）ベクトルｒに対応する、ｎの高精度データ要素が生成される。
次にプロセッサは、以下のように、収束まで反復プロセスを実施する。
１）１次方程式Ｌ（ＬＴｚ）＝ｒｌにおけるｎｘ１ベクトルｚに対応する、ｎの低精度データ要素を生成し、この式でｒｌは、低精度に変換された現行の誤りベクトルｒに対応し、
２）高精度ベクトルｚｈを取得するためにベクトルｚのデータ要素を高精度要素に変換し、
３）ｘ＝ｘ＋ｚｈとなるように、現行の高精度解ベクトルｘのデータ要素を更新し、
４）ｒ＝ｂ−Ａｘとなるように、現行の高精度誤りベクトルｒのデータ要素を更新し、
５）収束が検出される（通常はｒが十分小さいか、まったく進行しなくなる時点）まで、ステップ１から４を反復する。
【０００６】
上記プロセスで、コレスキー分解は、最初にメモリ内に行列Ａが形成されることを必要とする。その後この行列は、後続の演算で高精度誤りベクトルｒが計算されるごとに、プロセッサによってメモリから取り出される。典型的な適用例では、行列Ａは、たとえば次元ｎ＝１０，０００またはこれよりもはるかに大きいなど、非常に大きい可能性があり、結果としてプロセッサとメモリ・サブシステムとの間にかなりのトラフィックが生じる。行列変換プロセスは、必要なプロセッサ調整レベルによって並列処理環境で実行することが困難であり、既存の技法では適切に調整されない。さらに前述のように、全体の複雑さは、依然として行列Ａの次元ｎに関して３次式である。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
これらおよび他の問題が、全体の処理効率を制限し、多くの適用例の処理要求に対処可能なハードウェアのタイプを限定する可能性がある。実際には、３次式の複雑さのみが、現行の単一プロセッサおよび並列プロセッサ・ベースのコンピューティング・システムによって処理可能な問題の大きさを制限する。
【課題を解決するための手段】
【０００８】
本発明の一態様は、Ａｘ＝ｂを満たすｎｘ１のベクトルｘに対応するｎの高精度データ要素を生成するための装置を提供し、この式で、Ａは、ｎｘｎの事前に定義された高精度データ要素に対応する正定値対称ｎｘｎ行列であり、ｂは、ｎの事前に定義された高精度データ要素に対応するｎｘ１ベクトルである。この装置は、行列Ａおよびベクトルｂの当該のデータ要素を定義する入力データを格納するための、メモリと、
（ａ）Ａｌｘｌ＝ｂｌを満たすｎｘ１のベクトルｘｌに対応するｎの低精度データ要素を当該入力データから生成するための第１の反復プロセスを実施し、この式で、Ａｌは、低精度の行列Ａのｎｘｎデータ要素に対応するｎｘｎ行列であり、ｂｌは、低精度のベクトルｂのｎｘ１データ要素に対応するｎｘ１ベクトルであって、制御論理は第１の収束条件発生時に第１の反復プロセスを終了すること、
（ｂ）現行の解ベクトルｘを取得するために、ベクトルｘｌのデータ要素を高精度データ要素に変換すること、
（ｃ）ベクトルｂとベクトル積Ａｘとの間の差に依存して、ｎｘ１の修正ベクトルに対応するｎの低精度データ要素を生成するための第２の反復プロセスを実施し、制御論理は第２の収束条件発生時に第２の反復プロセスを終了すること、
（ｄ）当該修正ベクトルのｎの低精度データ要素から、ｎｘ１の更新ベクトルｕのそれぞれの高精度データ要素を生成すること、
（ｅ）ｘ＝ｘ＋ｕとなるように、当該現行の解ベクトルｘのデータ要素を更新すること、および
（ｆ）第３の収束条件発生までステップ（ｃ）から（ｅ）を実行すること、
を実行するように適合された、制御論理とを備える。
【０００９】
従来の手法であるコレスキー分解ベースの技法の代わりに、本発明の諸実施形態は、ステップ（ａ）の解ベクトルｘｌの低精度データ要素を生成するための反復プロセスを実施し、現行の高精度解ベクトルｘを更新するために使用される、修正ベクトルの低精度データ要素を生成するための反復プロセス（ステップ（ｃ））も実施する。このプロセスでは行列変換は不要であるが、低精度処理の加速性能は依然として利用可能である。各反復改良ステップは、行列サイズｎに関する２次コストを招くため、処理演算全体のコストは、最悪の場合、従来システムの３次コストと比較して行列サイズｎと共に２次的にのみ増加する。さらに、処理演算全体は、行列Ａと他のベクトル（ステップ（ａ）のｘｌとステップ（ｃ）の修正ベクトル）との行列ベクトル積のみを使用して実施可能である。これにより、前述の変換ベースのプロセスに関連付けられた並列処理問題が回避される。実際に、行列ベクトル積に基づく演算は特に並列実施に適しており、これにより、本発明の諸実施形態は超並列実施で実現可能である。これに加えて、行列Ａの形成は処理装置の演算に不可欠である。前述のように、従来の技法では、行列Ａは第１にメモリ内に構築されなければならず、その後、誤りベクトルｒを生成するために各反復時にメモリから取り出される。これに対して、本発明の諸実施形態で必要なベクトル積は、行列Ａを形成することもなく生成可能である。特に、行列Ａをある一定の関数として定義することが一般的であり、それによってＡを用いる行列ベクトル積の計算は単純であり、計算上安価である。これについては以下でより詳細に説明するが、事前に形成された行列をあらゆる反復時にメモリからロードすることが回避可能であるため、その効果は、処理を大幅に簡略化すること、およびメモリ・サブシステムへのトラフィックを劇的に削減することである。
【００１０】
演算の効率性における他の改良点は、ステップ（ａ）および（ｃ）における反復プロセスの使用から生じる。従来のシステムでは、分解ＬＬＴに基づく１次方程式の解は、反復プロセスの各パスにおいて特定の正確さで取得される。たとえば、ｚに関するＬ（ＬＴｚ）＝ｒｌの解は、固定数のステップを含み、定義された精度の、すなわち、低精度プロセスで使用可能なビット数まで計算された値に対応するデータ要素を有する、ベクトルｚを引き出す。これは、反復改良の理論特性が必要とするよりもかなり厳密な正確さ要件を課すものである。前述のステップ（ａ）および（ｃ）のそれぞれの反復プロセスは、所定の収束条件発生時に制御論理によって終了され、これによって、本発明の諸実施形態を必要な正確さまで自動的に適合させることができる。収束条件は、通常、所定の最大反復回数の完了または解の収束として定義される（所定の許容範囲に従って解を達成するか、または反復の間にいっさいの進行が検出されない）。したがって、反復プロセスは高速で低精度の論理を活用できるのみでなく、これらのプロセスは必要な正確さの解が達成されると即時に終了する。これは、標準の行列因数分解ベースのシステムでは不可能である。
【００１１】
制御論理は様々な方法でステップ（ｃ）および（ｄ）を実行するように適合可能であるが、これらのステップは好ましくは、ベクトルｂとベクトル積Ａｘとの差異に依存する誤りベクトルｒに基づき、特に、Ａとその行列ベクトル積が誤りベクトルｒに依存する修正ベクトルの反復生成に基づく。したがって、好ましい諸実施形態では、制御論理は、
ステップ（ｂ）で現行の解ベクトルｘを生成した後、ベクトルｂとベクトル積Ａｘとの差異を示す現行のｎｘ１の誤りベクトルｒに対応するｎのデータ要素を生成すること、
当該修正ベクトルと行列Ａｌのベクトル積が誤りベクトルｒに依存するように、ステップ（ｃ）を実行すること、および
ステップ（ｄ）で、修正ベクトルのデータ要素を高精度データ要素に変換することによって、更新ベクトルｕのデータ要素を生成すること、
を実行するように適合される。
【００１２】
誤りベクトルｒのデータ要素は、好ましくは、ｒ＝ｂ−Ａｘとなるように、高精度の制御論理によって生成され、その後、低精度誤りベクトルｒｌを取得するために、それぞれ低精度データ要素へと変換される。その後これは、修正ベクトルと行列Ａｌのベクトル積が低精度誤りベクトルｒｌと等しくなるように、ステップ（ｃ）の第２の反復プロセスで使用することができる。その後、ステップ（ｅ）で、現行の解ベクトルｘのデータ要素を更新した後、制御論理は、ｒ＝ｂ−Ａｘとなるように、現行の誤りベクトルｒのデータ要素を更新することができる。こうした諸実施形態では、都合の良いことに、第３の収束条件は現行の誤りベクトルｒに依存している。
【００１３】
代替実施形態が想定可能であるが、好ましい諸実施形態では、第１および第２の反復プロセスそれぞれが、良く知られた共役勾配法を含む。一般に、様々な収束条件は所与の適用例に対して所望なように設定可能であるが、これらの条件は、好ましくは、問題の反復プロセスの所定数のパスの完了、あるいは結果として生じる解の収束の検出、またはその両方（解ベクトルが所定の許容範囲に到達すること、またはプロセスの連続するパス間で進行が検出されないこと）に依存する。
【００１４】
行列Ａおよびベクトルｂの事前に定義されたデータ要素は、システム・メモリ内で個別に事前決定することが可能であるか、または任意の便利な方法で入力データによって定義することが可能である。たとえば、前述のように、行列Ａのデータ要素を定義する入力データは、任意のｎｘ１ベクトル上での行列Ａの適用を定義する関数Ｆを備えることができる。すなわち、関数Ｆは、任意のｎｘ１の要素上での各行列Ａ要素ａ（ｉ，ｊ）の適用を定義し、ここで１  ｉ  ｎおよび１  ｊ  ｎは、それぞれ行列Ａ要素の行および列インデックスである。この場合、制御論理は、Ａとの行列ベクトル積の、特別に高速かつ計算上安価な生成のために、ステップ（ａ）から（ｅ）の実行において関数Ｆを使用するように適合される。特に、行列要素ａ（ｉ，ｊ）を含む処理演算は、通常、完全にプロセッサ・キャッシュ内で実行可能であり、Ａとの行列ベクトル積の生成の結果として生じるメモリ・トラフィックは、従来のシステム全体にわたって劇的に削減可能である。これについて、以下でより詳細に説明する。
【００１５】
本発明を具体化する装置は、共有メモリ・リソース、あるいは個別に割り当てられたメモリ・リソース、またはその両方を使用する、１つまたは複数のプロセッサによって実施可能である。最も効率的な動作の場合、および特に複雑な適用例では、制御論理は、理想的にはステップ（ａ）から（ｅ）を実施するために集合的に並列に動作するように配置構成された、複数のプロセッサを備える。一般に、プロセッサは、専用の低精度および高精度のハードウェアを使用するか、または低精度および高精度の動作のためのソフトウェアによって構成可能な共通ハードウェアを使用することができる。複数のプロセッサが採用される場合、これらは単一のチップに組み込むか、または、ユニプロセッサあるいはマルチコア・プロセッサ、またはその両方をベースとしたコンピューティング・システムの、異なるチップを介して、たとえば、分散コンピューティング・システムの複数のコンピュータを介して、分散することができる。同様に、本発明を具体化する装置の動作で利用されるメモリは、ローカル・プロセッサ・キャッシュ・メモリから、ディスクまたはバックアップ・ストレージ・メディアなどのメイン・ストレージへの、１つまたは複数タイプのストレージの１つまたは複数のコンポーネントを備え、こうしたメモリまたはそのコンポーネントは、制御論理の異なるプロセッサによって全体的または部分的に共有することができる。
【００１６】
本発明の第２の態様は、Ａｘ＝ｂを満たすｎｘ１のベクトルｘに対応するｎの高精度データ要素を、コンピュータに生成させるためのコンピュータ・プログラムを提供し、この式で、Ａは、ｎｘｎの事前に定義された高精度データ要素に対応する正定値対称ｎｘｎ行列であり、ｂは、ｎの事前に定義された高精度データ要素に対応するｎｘ１ベクトルである。このコンピュータ・プログラムは、コンピュータのメモリ内に格納され行列Ａおよびベクトルｂの当該のデータ要素を定義する入力データに、コンピュータをアクセスさせ、
（ａ）Ａｌｘｌ＝ｂｌを満たすｎｘ１のベクトルｘｌに対応するｎの低精度データ要素を当該入力データから生成するための第１の反復プロセスを実施し、この式で、Ａｌは、低精度の行列Ａのｎｘｎデータ要素に対応するｎｘｎ行列であり、ｂｌは、低精度のベクトルｂのｎｘ１データ要素に対応するｎｘ１ベクトルであって、第１の収束条件発生時に第１の反復プロセスを終了すること、
（ｂ）現行の解ベクトルｘを取得するために、ベクトルｘｌのデータ要素を高精度データ要素に変換すること、
（ｃ）ベクトルｂとベクトル積Ａｘとの間の差に依存して、ｎｘ１の修正ベクトルに対応するｎの低精度データ要素を生成するための第２の反復プロセスを実施し、第２の収束条件発生時に第２の反復プロセスを終了すること、
（ｄ）当該修正ベクトルのｎの低精度データ要素から、ｎｘ１の更新ベクトルｕのそれぞれの高精度データ要素を生成すること、
（ｅ）ｘ＝ｘ＋ｕとなるように、当該現行の解ベクトルｘのデータ要素を更新すること、および
（ｆ）第３の収束条件発生までステップ（ｃ）から（ｅ）を実行すること、
をコンピュータに実行させるための、プログラム・コード手段を備える。
【００１７】
「コンピュータ」という用語は最も一般的な意味で使用され、コンピュータ・プログラムを実施するためのデータ処理機能を有する任意のデバイス、コンポーネント、またはシステムを含み、したがって、前述のような、単一デバイスあるいはデバイスの分散システムの１つまたは複数のプロセッサを備えることができることを理解されよう。さらに本発明を具体化するコンピュータ・プログラムは、独立プログラムまたはプログラム・セットを構成可能であるか、あるいは、大きなプログラムまたはプログラム・セットの一部とすることが可能であり、コンピュータ内にロードするためのディスクまたは電子伝送などの、コンピュータ読み取り可能媒体内に供給、たとえば具体化することが可能である。コンピュータ・プログラムのプログラム・コード手段は、問題の方法を、直接、あるいは（ａ）他の言語、コード、または表記への変換、および（ｂ）異なる材料形式での再生成のいずれか、または両方の後に、コンピュータに実行させるように意図された、命令セットの、任意の言語、コード、または表記の、任意の式を備えることが可能である。
【００１８】
一般に、本明細書では、本発明の一態様の実施形態を参照しながら特徴について説明しており、対応する特徴は本発明の他の態様の諸実施形態で提供可能である。
【００１９】
次に、本発明の好ましい諸実施形態について、添付の図面を参照しながら例を挙げて説明する。
【図面の簡単な説明】
【００２０】
【図１】本発明を具体化する処理装置を示す概略ブロック図である。
【図２】図１の装置の動作を示す流れ図である。
【図３】本発明を具体化する装置の例示的実施を示す図である。
【図４】本発明の諸実施形態のランタイムと従来のシステムとを比較するグラフである。
【図５】本発明の諸実施形態および従来システムでのメモリ使用量を示す表である。
【発明を実施するための形態】
【００２１】
図１は、説明される動作に関与するメイン・コンポーネントを示す、本発明を具体化する処理装置の簡略図である。装置１は、図ではコントローラ２によって表された制御論理と、ここではキャッシュ・メモリ４およびメイン・メモリ５によって簡略化形式で表されたメモリ３とを備える。コントローラ２の制御論理は、高精度および低精度の両方の論理を備え、これによってコントローラ２は高精度および低精度で処理動作を実行できる。一般に、コントローラ２の制御論理は、ハードウェアまたはソフトウェア、あるいはそれらの組み合わせで実施可能である。しかしながらこの実施形態では、論理は、説明された機能をソフトウェアによって実行するように構成された１つまたは複数のプロセッサ・コアによって実施される。当業者であれば、本明細書の説明から好適なソフトウェアが明らかとなろう。一般に、説明される高精度および低精度の動作は、装置１の異なるプロセッサによって実行可能であるが、この例では、コントローラ２のプロセッサは、高精度または低精度で動作を実行するためのソフトウェア制御の下で、個別に動作可能であるものと想定している。ここでキャッシュ・メモリ４は、たとえばレベル１キャッシュ・メモリなどのコントローラ２のメイン作業メモリを表す。メイン・メモリ５は、コントローラ２によってアクセス可能なメモリ・サブシステムの残りを表し、追加のキャッシュ・レベル、ハード・ディスク、およびバックアップ・ストレージ・メディアなどの、様々なタイプのストレージを含むことができる。
【００２２】
装置１は、Ａｘ＝ｂによって定義される連立１次方程式の解を表すｎｘ１のベクトルｘに対応する、ｎの高精度データ要素を生成するためのプロセスを実施するように適合される。ここでＡは、次元ｎｘｎの正定値対称密行列であり、ｂはｎｘ１ベクトルである。行列Ａの要素に対応するｎｘｎの高精度データ要素、およびベクトルｂの要素に対応するｎの高精度データ要素は、メモリ５に格納された入力データによって定義される。より具体的に言えば、行列Ａの高精度データ要素は、ここではスカラ関数Ｆ（  ）＝ａ（ｉ，ｊ）を介して間接的に定義され、この式でａ（ｉ，ｊ）は、行インデックスｉ（１＜＝ｉ＜＝ｎ）および列インデックスｊ（１＜＝ｊ＜＝ｎ）を伴う要素を表す。この例では、ベクトルｂのデータ要素はメモリ５内で直接定義されるものと想定している。メモリ５は、処理動作で使用するための３つの収束条件を定義するパラメータを指定する、データＣ１（ｋ１，ｄ１）、Ｃ２（ｋ２，ｄ２）、およびＣ３（ｐ，ｃ）も保持する。これらのパラメータについて、以下で説明する。
【００２３】
解ベクトルｘの高精度データ要素を生成するために、装置１によって実行されるキー・ステップが、図２の流れ図に示されている。動作は、通常は、コントローラ２のプロセッサ上またはコントローラ２と通信中のリモート・プロセッサ上のいずれで実行中であっても、装置のＩ／Ｏ（入力／出力）インターフェース（図示せず）を介したオペレータ・プロンプトまたは他のアプリケーションからの要求に応答して、ステップ１０で開始される。ステップ１１で、コントローラ２はメイン・メモリ５にアクセスして高精度関数Ｆ（  ）を取り出し、キャッシュ・メモリ４内に低精度コピーＦｌ（  ）を作成する。これは、高精度関数を低精度表現へと格下げ、すなわち丸めることによって、知られた方法で実行可能である。同様に、コントローラ２は、ベクトルｂの高精度データ要素を取り出し、これらをそれぞれ低精度要素へと格下げして、低精度ベクトルｂｌを生成する。ストレージ容量および次元ｎに応じて、ベクトルｂｌのデータ要素はキャッシュ４内に保持するか、またはメイン・メモリ５内に再格納することができる。
【００２４】
次にステップ１２で、コントローラ２は、Ａｌｘｌ＝ｂｌを満たす、初期の近似ｎｘ１解ベクトルｘｌに対応するｎの低精度データ要素を生成するための第１の反復プロセスの１つのパスを実行する。この式でＡｌは、関数Ｆｌ（  ）によって定義されるｎｘｎの低精度行列である。この実施形態では、第１の反復プロセスに使用される技法は、共役勾配（ＣＧ）プロセスである。ＣＧプロセスは、連立１次方程式の解に関する良く知られた技法であり、ここでより詳細に説明する必要はない。必要な計算は、関数Ｆｌ（  ）と、必要に応じてメイン・メモリ５からキャッシュ４へと再呼び出し可能なベクトルｂｌの要素とのみを使用して、コントローラ２によって実行可能である。ＣＧプロセスの１つのパス後に取得されるベクトルｘｌの低精度要素はメモリ３に格納され、動作はステップ１３へと進み、ここでコントローラ２によってパス・カウンタｐｘが１つだけ増分される。意思決定ステップ１４では、コントローラ２は、現行のパス・カウントｐｘが、第１の反復プロセスの最大許可パス数を示す事前に設定されたパラメータｋ１に等しいかどうかをチェックする。否定応答（ステップ１４で「Ｎｏ」（Ｎ）の決定）であると想定すると、次にコントローラ２は意思決定ステップ１５で、解ｘｌの収束が発生したかどうかを決定する。ここでは、２つのイベントのいずれかが発生した場合、収束が検出される。第１のイベントは、ｘｌに対する事前に設定された下方許容範囲（drop tolerance）ｄ１に達したことである。すなわち、コントローラ２は、ｘｌに対する現行の解が、第１のパスで取得された解と、量ｆ  ｄ１だけ異なるかどうかをチェックし、ここで下方許容範囲ｄ１は通常、パーセント変化として指定される。第２のイベントは、プロセスのこのパスでいかなる進行も達成されなかったこと、すなわち、ｘｌの解が以前のパスで取得された解から変化していないことである。ステップ１５で収束が検出されないものと想定すると、動作は解プロセスの他のパスのためにステップ１２に戻る。プロセスは、ステップ１４でｋ１パスの第１の発生が完了しているか、またはステップ１５で収束が識別されているものとして定義された、第１の収束条件Ｃ１の発生まで反復される。収束条件Ｃ１が検出される（ステップ１４またはステップ１５で「Ｙｅｓ」（Ｙ）の決定）と、コントローラ２は第１の反復プロセスを終了する。
【００２５】
第１の反復プロセスが完了すると、動作はステップ１６へと進み、ここでコントローラ２は、第１の反復プロセスによって出力された解ベクトルｘｌの高精度コピーを作成する。これは、メモリ３に格納された現行の高精度解ベクトルｘを取得するために、ベクトルｘｌの低精度データ要素を、それぞれの高精度データ要素に変換することによって、知られた方法で実行可能である。次にステップ１７で、コントローラ２は、ｒ＝ｂ−Ａｘを満たす現行のｎｘ１の誤りベクトルｒに対応する、ｎの高精度データ要素を生成する。この計算は、関数Ｆ（  ）と、必要に応じてキャッシュ４へと再呼び出し可能なベクトルｘおよびｂの要素とを使用して、実行可能である。結果として生じる誤りベクトルｒの高精度要素は、ベクトルｒの要素をそれぞれ低精度データ要素に変換することによってステップ１８で生成される、この誤りベクトルの低精度コピーｒｌと共に、メモリ３に格納される。
【００２６】
次にステップ１９で、コントローラ２は、Ａｌｚ＝ｒｌを満たす、ｎｘ１の修正ベクトルｚに対応するｎの低精度データ要素を生成するための、第２の反復プロセスの第１のパスを実行する。ここでも、この例の第２の反復プロセスに共役勾配技法が使用され、必要な計算は、関数Ｆｌ（  ）を使用してコントローラ２によって実行可能である。プロセスの１つのパスの後取得されるベクトルｚの低精度要素はメモリ３に格納され、動作はステップ２０へと進み、パス・カウンタｐｚはコントローラ２によって１つだけ増分される。意思決定ステップ２１で、コントローラ２は、現行のパス・カウントｐｚが、第２の反復プロセスの最大許可パス数を示す事前に設定されたパラメータｋ２に等しいかどうかをチェックする。等しくない場合、コントローラ２は、意思決定ステップ２２で、解ｚの収束が発生したかどうかを決定する。ここでも、（１）ｚに対する事前に設定された下方許容範囲ｄ２に達したか、または（２）プロセスのこのパスでいかなる進行も達成されなかった、すなわち、ｚの解が以前のパス以来変化していない場合、収束が検出される。ステップ２２で収束が検出されないものと想定すると、動作は解プロセスの他のパスのためにステップ１９に戻る。プロセスは、ステップ２１でｋ２パスの第１の発生が完了しているか、またはステップ２２で収束が識別されているものとして定義された、第２の収束条件Ｃ２の発生まで反復される。収束条件Ｃ２が検出される（ステップ２１またはステップ２２でＹ）と、コントローラ２は第２の反復プロセスを終了する。
【００２７】
第２の反復プロセスが完了すると、動作はステップ２４へと進み、コントローラ２は、メモリ３に格納される高精度更新ベクトルｕを生成するために、修正ベクトルｚのデータ要素をそれぞれの高精度データ要素へと変換する。次にステップ２５でコントローラ２は、ｘ＝ｘ＋ｕとなるように現行の高精度解ベクトルｘのデータ要素を更新し、更新された解ｘをメモリ３に格納する。解ベクトルｘを更新した後、コントローラ２は、ステップ２６で、ｒ＝ｂ−Ａｘとなるように現行の高精度誤りベクトルｒを更新し、ここでも計算は、行列Ａを定義する関数Ｆ（  ）を使用して実行される。新しいベクトルｒの高精度要素はメモリ３に格納され、動作はステップ２７へと進み、ここで第３の反復プロセスに関するパス・カウンタｐｒはコントローラ２によって１つだけ増分される。意思決定ステップ２８で、コントローラ２は、現行のパス・カウントｐｒが、第３の反復プロセスの最大許可パス数を示す事前に設定されたパラメータｐに等しいかどうかをチェックする。等しくない場合、コントローラ２は、意思決定ステップ２９で、解ｒの収束が発生したかどうかを決定する。上記と同様に、（１）ｒに対する事前に設定された許容範囲ｃに達したか、または（２）プロセスの以前のパス以来、ｒの解でいかなる進行も達成されなかった場合、収束が検出される。この場合、許容範囲ｃは誤りしきい値を指定し、これによってユークリッド・ノルムがｃ未満である誤りベクトルｒは、必要な許容範囲内にあるものとみなされる。ステップ２９で収束が検出されないものと想定すると、動作は第３の反復プロセスの他のパスのためにステップ１８に戻り、新しい誤りベクトルｒについて、第２の反復プロセスを再度実行する必要がある。ステップ１８から２９のプロセスは、ステップ２８でｐパスの第１の発生が完了しているか、またはステップ２９で誤りベクトルｒの解の収束が識別されているものとして定義された、第３の収束条件Ｃ３の発生まで反復される。収束条件Ｃ２が検出される（ステップ２８またはステップ２９でＹ）と、コントローラ２は第３の反復プロセスを終了する。ステップ３０で、最終の解ベクトルｘに対応する高精度データ要素が、プロセスを開始したオペレータまたはアプリケーションへと出力され、処理動作は完了する。
【００２８】
前述の装置は、行列Ａが密であり、次元ｎが非常に大きい場合であっても、連立１次方程式の解に対して特別な動作効率を提供する。装置は、高速で低精度の処理を利用し、処理動作の複雑さは、ｋ１＝ｋ２＝ｋの場合、Ｏ（ｋｎ２）のみである。これは、Ｏ（ｎ３）のコストが生じる前述の従来システムとは著しく対照的である。
【００２９】
上記プロセスで行列ＡまたはＡｌを含むすべての計算は、他のベクトルとのＡまたはＡｌの行列ベクトル積のみを必要とすることに留意されたい。これらの計算は、行列Ａの事前の形成を必要としないが、適宜、関数Ｆ（  ）またはＦｌ（  ）、および必要に応じてメイン・メモリ５からキャッシュ４への再呼び出しが可能な問題のベクトルの要素のみを使用して、コントローラ２によって実行可能である。すなわち、行列Ａ（またはＡｌ）を含む必要な処理動作は、完全にプロセッサ・キャッシュ内で実行可能である。これにより、コントローラ２のプロセッサとメモリ・サブシステムとの間のトラフィックは、前述の従来の手法に比べて劇的に減少する。特に、前述の実施形態では、行列Ａ（またはＡｌ）との行列ベクトル積の計算に必要なのはメモリ移動のＯ（ｋｎ）のみであり、ここでｋは、通常、次元ｎに比べて小さい。これに対して従来の方式では、分解に先立って行列Ａをシステム・メモリ内に形成する必要がある。この行列はＡ＝ＬＬＴとして分解され、ここでＬはＯ（ｎ／２）要素を伴う下三角行列である。低精度で格納された行列Ｌは、すべての解のケースで使用される。オリジナルの高精度の行列Ａは、誤りの計算で使用される。したがって従来のシステムでは、そのプロセスの各反復改良ステップで、データのＯ（ｎ２）をメイン・メモリからプロセッサへと移動させる必要がある。
【００３０】
３つの収束条件Ｃ１（ｋ１，ｄ１）、Ｃ２（ｋ２，ｄ２）、およびＣ３（ｐ，ｃ）を定義するパラメータは、所与のアプリケーションで必要な正確さに従って、所望なように設定可能である。好ましい諸実施形態では、実施の便宜上、ｋ１＝ｋ２＝ｋが選択され、これによって第１および第２の反復プロセスでパスの最大数は同じである。従来システムでの誤り計算プロセスとは異なり、これらのプロセスは誤りベクトルｒに向かって完全に解く必要はないが、必要な正確さまで自動的に適合可能であることに留意されたい。
【００３１】
前述のように、装置１は、並列に動作する複数のプロセッサによって実現可能であり、これらのプロセッサが集合的に前述の処理動作を実施する。図３は、こうした実施の単純な例を示す。ここでコントローラ２の機能は、この場合、バス・インターフェース（Ｉ／Ｆ）を介して共有メモリ・サブシステムと通信する、個々のレベル１（Ｌ１）キャッシュを有する複数のプロセッサによって実施される。処理動作は行列ベクトル積に基づいているため、使用されるプロセッサの数が多い可能性がある。こうした超並列実施は特別な動作効率を提供する。図４は、本発明の諸実施形態のランタイムと前述の従来システムとを、２つの異なる値の行列次元ｎおよび様々な数の並列プロセッサに関して比較している。縦軸はランタイムに対応し、横軸は使用されるプロセッサの数に対応する。行列サイズｎの２つの値は３２７６８および４９１５２である。実線で示された上部のトレースは従来のスキームに対応し、破線の下部のトレースは本発明の諸実施形態に対応する。縦軸上のスケールは対数関数であることに留意されたい。本発明の諸実施形態が大幅な改良を与え、ランタイムが少なくとも１桁減少していることが直ちに明らかとなろう。
【００３２】
本発明の諸実施形態は、メモリ使用量および帯域幅についても大幅な改良を与えている。図５の表は、様々なサイズの行列Ａについて従来のスキームおよび前述の本発明の諸実施形態を使用した、誤りベクトルｒの各反復改良ステップに関するギガバイト単位でのメモリ使用量（必要な帯域幅）を示す。この表の一番上の行は、ｎの値が異なる従来システムに関する結果を示す。その下の４行は、説明した実施形態におけるｋ１＝ｋ２＝ｋの異なる値についての結果を示す。本発明の諸実施形態によって劇的な改良が達成されたことは容易に明らかとなろう。
【００３３】
前述の例示的諸実施形態に対して、多くの変更および修正が実行可能であることを理解されよう。例を挙げると、反復プロセスに対する収束条件は、それらの指定に対する様々なイベント・セットに依存し、これらのイベントの組み合わせに様々に依存することができる。しかしながら好ましい諸実施形態では、各プロセスについて常に最大数の反復を指定する。収束条件に関してある許容範囲が指定される場合、これは、所与のアプリケーションに所望なように様々な方法で定義可能である。また、前述の第１および第２の反復プロセスでは共役勾配方法が採用されているが、所望であれば連立１次方程式に関する他の反復解技法が採用可能である。前述の諸実施形態に対して、本発明の範囲を逸脱することなく多くの他の変更および修正が実行可能である。
【図１】
0005570038.tif 000002
【図２】
0005570038.tif 000003
【図３】
0005570038.tif 000004
【図４】
0005570038.tif 000005
【図５】
0005570038.tif 000006