説明

連立1次方程式を処理するための装置およびコンピュータ・プログラム

【課題】 Ax=bを満たすnx1のベクトルxに対応するnの高精度データ要素を生成するための、装置およびコンピュータ・プログラムを提供することであって、この式で、Aは、nxnの事前に定義された高精度データ要素に対応する正定値対称nxn行列であり、bは、nの事前に定義された高精度データ要素に対応するnx1ベクトルである。
【解決手段】 装置(1)は、行列Aおよびベクトルbのデータ要素を定義する入力データを格納するための、メモリ(3)と、制御論理(2)とを備える。第1の処理ステップ(a)で、制御論理(2)は、A=bを満たすnx1のベクトルxに対応するnの低精度データ要素を入力データから生成するための第1の反復プロセスを実施する。この式で、Aは、低精度の行列Aのnxnデータ要素に対応するnxn行列であり、bは、低精度のベクトルbのnx1データ要素に対応するnx1ベクトルである。制御論理(2)は第1の収束条件発生時に第1の反復プロセスを終了する。ステップ(b)で、制御論理は、現行の解ベクトルxを取得するために、ベクトルxのデータ要素を高精度データ要素に変換する。ステップ(c)で、制御論理(2)は、ベクトルbとベクトル積Axとの間の差に依存して、nx1の修正ベクトルに対応するnの低精度データ要素を生成するための第2の反復プロセスを実施する。制御論理(2)は第2の収束条件発生時に第2の反復プロセスを終了する。ステップ(d)で、制御論理(2)は、修正ベクトルのnの低精度データ要素から、nx1の更新ベクトルuのそれぞれの高精度データ要素を生成し、その後ステップ(e)で、x=x+uとなるように、現行の解ベクトルxのデータ要素を更新する。制御論理(2)は、第3の収束条件が発生するまでステップ(c)から(e)を実行する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般に、連立1次方程式(linear systems of equations)の処理に関する。高精度の解を生成するために、連立1次方程式の混合精度処理のための装置およびコンピュータ・プログラムが提供される。
【背景技術】
【0002】
現在のプロセッサは、通常、高精度および低精度で処理演算を実行することができる。この精度が、浮動小数点数の小数部を表すために使用可能なビット数を決定する。ここで「高」および「低」という用語は、単に、一方が他方より高い2つの異なるレベルの精度(したがって、「小数ビット(fractional bits)」数)を区別するために使用され、個々の精度レベルに対するいかなる特定の制約をも示唆するものではない。したがって、低精度および高精度で使用される実際の小数ビット数は、システムによって大幅に異なる可能性がある。たとえば現行のIEEE規格では、低精度(「単精度」とも呼ばれる)処理について、小数点以下10進8桁と等価である32ビットを指定し、高精度(または「倍精度」)処理について、小数点以下10進16桁と等価である64ビットを指定している。しかしながら多くの組み込みシステムでは、たとえば8および16ビット、または10および20ビットなどの、異なる指定を使用している。
【0003】
プロセッサのタイプに応じて、専用処理論理または同じプロセッサ・ハードウェアの適切なソフトウェア制御による、低精度演算および高精度演算が実施可能である。どちらの場合も、低精度演算は高精度演算よりも複雑でなく、大幅に高速である。したがって複雑なタスクが高精度な結果を必要とする場合、「混合精度」手法を採用することができる。混合精度処理を使用すると、タスクの一部のコンポーネントは低精度で実行され、他のコンポーネントは高精度で実行されるため、全体の結果は高精度で取得される。多くの科学およびエンジニアリングの適用例に不可欠なこうした処理タスクの一例が、連立1次方程式の解である。このタスクでは、プロセッサが、Ax=bのように、次元(dimension)nx1のベクトルの要素に対応するnの高精度データ要素を生成する必要がある。ここで、Aは次元nxnの正定値対称行列(symmetric, positive-definitematrix)であり、bは次元nx1のベクトルである。行列Aは、メモリ内に格納し、処理演算に必要な場合にアクセスしなければならない、nxnの高精度データ要素によって定義される。同様に右側のベクトルbは、システム・メモリに格納されたnの高精度データ要素によって定義される。行列Aが密である場合、解ベクトルxに対応する高精度データ要素を生成するタスクは、かなりのプロセッサ集約型である。特に、係数行列Aのすべての要素が非ゼロである場合、タスクは、行列Aの次元nと共に3次的に成長する、プロセッサ内の多数の算術演算を必要とする。
【0004】
これまで、前述のタスクの混合精度手法は、行列分解(decomposition)(変換)に基づくものであった。処理演算の基本ステップは以下の通りである。第1に、行列Aは、nxnの高精度データ要素で構成され、システム・メモリ内に格納されなければならない。次に行列Aは、システム・メモリ内に低精度コピーAを生成するために格下げ(demote)される(丸められる)。これは、適切な丸めプロセスによって、行列Aの高精度データ要素をそれぞれの低精度データ要素へと変換することによって実行される。次にプロセッサは分解プロセスを実施し、これによって行列AはA=LLのように分解され、ここでLは下三角行列(lower triangular matrix)であり、Lはその転置行列を示す。変換は、コレスキー分解によって実行される。この技法は当分野で良く知られており、ここで詳細に論じる必要はない。留意しなければならないのは、分解は低精度ハードウェアによって実施可能であるが、この分解のコストが次元nの3乗で増加することである。係数行列LおよびLの1次方程式について、ベクトル解のデータ要素を生成するための後続の処理は、行列次元nと共に2次的に増加するコストを必要とする。これは、以下のような反復改良方法を使用して実行される。
【0005】
初期の、Ax=bの低精度推定解ベクトルxは、L(L)=bを解くことによって取得され、この式でbは、低精度のベクトルbのnx1データ要素に対応する要素を備えるnx1ベクトルである。ベクトルxの低精度データ要素は、現行の解ベクトルxを取得するための適切な変換プロセスによって、それぞれの高精度データ要素に格上げされる。これは、たとえば各ケースで最も近い高精度値を選択することなどによって、様々な方法で実行することができる。その後、r=b−Axのように、現行のnx1残差(誤り)ベクトルrに対応する、nの高精度データ要素が生成される。
次にプロセッサは、以下のように、収束まで反復プロセスを実施する。
1)1次方程式L(Lz)=rにおけるnx1ベクトルzに対応する、nの低精度データ要素を生成し、この式でrは、低精度に変換された現行の誤りベクトルrに対応し、
2)高精度ベクトルzを取得するためにベクトルzのデータ要素を高精度要素に変換し、
3)x=x+zとなるように、現行の高精度解ベクトルxのデータ要素を更新し、
4)r=b−Axとなるように、現行の高精度誤りベクトルrのデータ要素を更新し、
5)収束が検出される(通常はrが十分小さいか、まったく進行しなくなる時点)まで、ステップ1から4を反復する。
【0006】
上記プロセスで、コレスキー分解は、最初にメモリ内に行列Aが形成されることを必要とする。その後この行列は、後続の演算で高精度誤りベクトルrが計算されるごとに、プロセッサによってメモリから取り出される。典型的な適用例では、行列Aは、たとえば次元n=10,000またはこれよりもはるかに大きいなど、非常に大きい可能性があり、結果としてプロセッサとメモリ・サブシステムとの間にかなりのトラフィックが生じる。行列変換プロセスは、必要なプロセッサ調整レベルによって並列処理環境で実行することが困難であり、既存の技法では適切に調整されない。さらに前述のように、全体の複雑さは、依然として行列Aの次元nに関して3次式である。
【発明の概要】
【発明が解決しようとする課題】
【0007】
これらおよび他の問題が、全体の処理効率を制限し、多くの適用例の処理要求に対処可能なハードウェアのタイプを限定する可能性がある。実際には、3次式の複雑さのみが、現行の単一プロセッサおよび並列プロセッサ・ベースのコンピューティング・システムによって処理可能な問題の大きさを制限する。
【課題を解決するための手段】
【0008】
本発明の一態様は、Ax=bを満たすnx1のベクトルxに対応するnの高精度データ要素を生成するための装置を提供し、この式で、Aは、nxnの事前に定義された高精度データ要素に対応する正定値対称nxn行列であり、bは、nの事前に定義された高精度データ要素に対応するnx1ベクトルである。この装置は、行列Aおよびベクトルbの当該のデータ要素を定義する入力データを格納するための、メモリと、
(a)A=bを満たすnx1のベクトルxに対応するnの低精度データ要素を当該入力データから生成するための第1の反復プロセスを実施し、この式で、Aは、低精度の行列Aのnxnデータ要素に対応するnxn行列であり、bは、低精度のベクトルbのnx1データ要素に対応するnx1ベクトルであって、制御論理は第1の収束条件発生時に第1の反復プロセスを終了すること、
(b)現行の解ベクトルxを取得するために、ベクトルxのデータ要素を高精度データ要素に変換すること、
(c)ベクトルbとベクトル積Axとの間の差に依存して、nx1の修正ベクトルに対応するnの低精度データ要素を生成するための第2の反復プロセスを実施し、制御論理は第2の収束条件発生時に第2の反復プロセスを終了すること、
(d)当該修正ベクトルのnの低精度データ要素から、nx1の更新ベクトルuのそれぞれの高精度データ要素を生成すること、
(e)x=x+uとなるように、当該現行の解ベクトルxのデータ要素を更新すること、および
(f)第3の収束条件発生までステップ(c)から(e)を実行すること、
を実行するように適合された、制御論理とを備える。
【0009】
従来の手法であるコレスキー分解ベースの技法の代わりに、本発明の諸実施形態は、ステップ(a)の解ベクトルxの低精度データ要素を生成するための反復プロセスを実施し、現行の高精度解ベクトルxを更新するために使用される、修正ベクトルの低精度データ要素を生成するための反復プロセス(ステップ(c))も実施する。このプロセスでは行列変換は不要であるが、低精度処理の加速性能は依然として利用可能である。各反復改良ステップは、行列サイズnに関する2次コストを招くため、処理演算全体のコストは、最悪の場合、従来システムの3次コストと比較して行列サイズnと共に2次的にのみ増加する。さらに、処理演算全体は、行列Aと他のベクトル(ステップ(a)のxとステップ(c)の修正ベクトル)との行列ベクトル積のみを使用して実施可能である。これにより、前述の変換ベースのプロセスに関連付けられた並列処理問題が回避される。実際に、行列ベクトル積に基づく演算は特に並列実施に適しており、これにより、本発明の諸実施形態は超並列実施で実現可能である。これに加えて、行列Aの形成は処理装置の演算に不可欠である。前述のように、従来の技法では、行列Aは第1にメモリ内に構築されなければならず、その後、誤りベクトルrを生成するために各反復時にメモリから取り出される。これに対して、本発明の諸実施形態で必要なベクトル積は、行列Aを形成することもなく生成可能である。特に、行列Aをある一定の関数として定義することが一般的であり、それによってAを用いる行列ベクトル積の計算は単純であり、計算上安価である。これについては以下でより詳細に説明するが、事前に形成された行列をあらゆる反復時にメモリからロードすることが回避可能であるため、その効果は、処理を大幅に簡略化すること、およびメモリ・サブシステムへのトラフィックを劇的に削減することである。
【0010】
演算の効率性における他の改良点は、ステップ(a)および(c)における反復プロセスの使用から生じる。従来のシステムでは、分解LLに基づく1次方程式の解は、反復プロセスの各パスにおいて特定の正確さで取得される。たとえば、zに関するL(Lz)=rの解は、固定数のステップを含み、定義された精度の、すなわち、低精度プロセスで使用可能なビット数まで計算された値に対応するデータ要素を有する、ベクトルzを引き出す。これは、反復改良の理論特性が必要とするよりもかなり厳密な正確さ要件を課すものである。前述のステップ(a)および(c)のそれぞれの反復プロセスは、所定の収束条件発生時に制御論理によって終了され、これによって、本発明の諸実施形態を必要な正確さまで自動的に適合させることができる。収束条件は、通常、所定の最大反復回数の完了または解の収束として定義される(所定の許容範囲に従って解を達成するか、または反復の間にいっさいの進行が検出されない)。したがって、反復プロセスは高速で低精度の論理を活用できるのみでなく、これらのプロセスは必要な正確さの解が達成されると即時に終了する。これは、標準の行列因数分解ベースのシステムでは不可能である。
【0011】
制御論理は様々な方法でステップ(c)および(d)を実行するように適合可能であるが、これらのステップは好ましくは、ベクトルbとベクトル積Axとの差異に依存する誤りベクトルrに基づき、特に、Aとその行列ベクトル積が誤りベクトルrに依存する修正ベクトルの反復生成に基づく。したがって、好ましい諸実施形態では、制御論理は、
ステップ(b)で現行の解ベクトルxを生成した後、ベクトルbとベクトル積Axとの差異を示す現行のnx1の誤りベクトルrに対応するnのデータ要素を生成すること、
当該修正ベクトルと行列Aのベクトル積が誤りベクトルrに依存するように、ステップ(c)を実行すること、および
ステップ(d)で、修正ベクトルのデータ要素を高精度データ要素に変換することによって、更新ベクトルuのデータ要素を生成すること、
を実行するように適合される。
【0012】
誤りベクトルrのデータ要素は、好ましくは、r=b−Axとなるように、高精度の制御論理によって生成され、その後、低精度誤りベクトルrを取得するために、それぞれ低精度データ要素へと変換される。その後これは、修正ベクトルと行列Aのベクトル積が低精度誤りベクトルrと等しくなるように、ステップ(c)の第2の反復プロセスで使用することができる。その後、ステップ(e)で、現行の解ベクトルxのデータ要素を更新した後、制御論理は、r=b−Axとなるように、現行の誤りベクトルrのデータ要素を更新することができる。こうした諸実施形態では、都合の良いことに、第3の収束条件は現行の誤りベクトルrに依存している。
【0013】
代替実施形態が想定可能であるが、好ましい諸実施形態では、第1および第2の反復プロセスそれぞれが、良く知られた共役勾配法を含む。一般に、様々な収束条件は所与の適用例に対して所望なように設定可能であるが、これらの条件は、好ましくは、問題の反復プロセスの所定数のパスの完了、あるいは結果として生じる解の収束の検出、またはその両方(解ベクトルが所定の許容範囲に到達すること、またはプロセスの連続するパス間で進行が検出されないこと)に依存する。
【0014】
行列Aおよびベクトルbの事前に定義されたデータ要素は、システム・メモリ内で個別に事前決定することが可能であるか、または任意の便利な方法で入力データによって定義することが可能である。たとえば、前述のように、行列Aのデータ要素を定義する入力データは、任意のnx1ベクトル上での行列Aの適用を定義する関数Fを備えることができる。すなわち、関数Fは、任意のnx1の要素上での各行列A要素a(i,j)の適用を定義し、ここで1 i nおよび1 j nは、それぞれ行列A要素の行および列インデックスである。この場合、制御論理は、Aとの行列ベクトル積の、特別に高速かつ計算上安価な生成のために、ステップ(a)から(e)の実行において関数Fを使用するように適合される。特に、行列要素a(i,j)を含む処理演算は、通常、完全にプロセッサ・キャッシュ内で実行可能であり、Aとの行列ベクトル積の生成の結果として生じるメモリ・トラフィックは、従来のシステム全体にわたって劇的に削減可能である。これについて、以下でより詳細に説明する。
【0015】
本発明を具体化する装置は、共有メモリ・リソース、あるいは個別に割り当てられたメモリ・リソース、またはその両方を使用する、1つまたは複数のプロセッサによって実施可能である。最も効率的な動作の場合、および特に複雑な適用例では、制御論理は、理想的にはステップ(a)から(e)を実施するために集合的に並列に動作するように配置構成された、複数のプロセッサを備える。一般に、プロセッサは、専用の低精度および高精度のハードウェアを使用するか、または低精度および高精度の動作のためのソフトウェアによって構成可能な共通ハードウェアを使用することができる。複数のプロセッサが採用される場合、これらは単一のチップに組み込むか、または、ユニプロセッサあるいはマルチコア・プロセッサ、またはその両方をベースとしたコンピューティング・システムの、異なるチップを介して、たとえば、分散コンピューティング・システムの複数のコンピュータを介して、分散することができる。同様に、本発明を具体化する装置の動作で利用されるメモリは、ローカル・プロセッサ・キャッシュ・メモリから、ディスクまたはバックアップ・ストレージ・メディアなどのメイン・ストレージへの、1つまたは複数タイプのストレージの1つまたは複数のコンポーネントを備え、こうしたメモリまたはそのコンポーネントは、制御論理の異なるプロセッサによって全体的または部分的に共有することができる。
【0016】
本発明の第2の態様は、Ax=bを満たすnx1のベクトルxに対応するnの高精度データ要素を、コンピュータに生成させるためのコンピュータ・プログラムを提供し、この式で、Aは、nxnの事前に定義された高精度データ要素に対応する正定値対称nxn行列であり、bは、nの事前に定義された高精度データ要素に対応するnx1ベクトルである。このコンピュータ・プログラムは、コンピュータのメモリ内に格納され行列Aおよびベクトルbの当該のデータ要素を定義する入力データに、コンピュータをアクセスさせ、
(a)A=bを満たすnx1のベクトルxに対応するnの低精度データ要素を当該入力データから生成するための第1の反復プロセスを実施し、この式で、Aは、低精度の行列Aのnxnデータ要素に対応するnxn行列であり、bは、低精度のベクトルbのnx1データ要素に対応するnx1ベクトルであって、第1の収束条件発生時に第1の反復プロセスを終了すること、
(b)現行の解ベクトルxを取得するために、ベクトルxのデータ要素を高精度データ要素に変換すること、
(c)ベクトルbとベクトル積Axとの間の差に依存して、nx1の修正ベクトルに対応するnの低精度データ要素を生成するための第2の反復プロセスを実施し、第2の収束条件発生時に第2の反復プロセスを終了すること、
(d)当該修正ベクトルのnの低精度データ要素から、nx1の更新ベクトルuのそれぞれの高精度データ要素を生成すること、
(e)x=x+uとなるように、当該現行の解ベクトルxのデータ要素を更新すること、および
(f)第3の収束条件発生までステップ(c)から(e)を実行すること、
をコンピュータに実行させるための、プログラム・コード手段を備える。
【0017】
「コンピュータ」という用語は最も一般的な意味で使用され、コンピュータ・プログラムを実施するためのデータ処理機能を有する任意のデバイス、コンポーネント、またはシステムを含み、したがって、前述のような、単一デバイスあるいはデバイスの分散システムの1つまたは複数のプロセッサを備えることができることを理解されよう。さらに本発明を具体化するコンピュータ・プログラムは、独立プログラムまたはプログラム・セットを構成可能であるか、あるいは、大きなプログラムまたはプログラム・セットの一部とすることが可能であり、コンピュータ内にロードするためのディスクまたは電子伝送などの、コンピュータ読み取り可能媒体内に供給、たとえば具体化することが可能である。コンピュータ・プログラムのプログラム・コード手段は、問題の方法を、直接、あるいは(a)他の言語、コード、または表記への変換、および(b)異なる材料形式での再生成のいずれか、または両方の後に、コンピュータに実行させるように意図された、命令セットの、任意の言語、コード、または表記の、任意の式を備えることが可能である。
【0018】
一般に、本明細書では、本発明の一態様の実施形態を参照しながら特徴について説明しており、対応する特徴は本発明の他の態様の諸実施形態で提供可能である。
【0019】
次に、本発明の好ましい諸実施形態について、添付の図面を参照しながら例を挙げて説明する。
【図面の簡単な説明】
【0020】
【図1】本発明を具体化する処理装置を示す概略ブロック図である。
【図2】図1の装置の動作を示す流れ図である。
【図3】本発明を具体化する装置の例示的実施を示す図である。
【図4】本発明の諸実施形態のランタイムと従来のシステムとを比較するグラフである。
【図5】本発明の諸実施形態および従来システムでのメモリ使用量を示す表である。
【発明を実施するための形態】
【0021】
図1は、説明される動作に関与するメイン・コンポーネントを示す、本発明を具体化する処理装置の簡略図である。装置1は、図ではコントローラ2によって表された制御論理と、ここではキャッシュ・メモリ4およびメイン・メモリ5によって簡略化形式で表されたメモリ3とを備える。コントローラ2の制御論理は、高精度および低精度の両方の論理を備え、これによってコントローラ2は高精度および低精度で処理動作を実行できる。一般に、コントローラ2の制御論理は、ハードウェアまたはソフトウェア、あるいはそれらの組み合わせで実施可能である。しかしながらこの実施形態では、論理は、説明された機能をソフトウェアによって実行するように構成された1つまたは複数のプロセッサ・コアによって実施される。当業者であれば、本明細書の説明から好適なソフトウェアが明らかとなろう。一般に、説明される高精度および低精度の動作は、装置1の異なるプロセッサによって実行可能であるが、この例では、コントローラ2のプロセッサは、高精度または低精度で動作を実行するためのソフトウェア制御の下で、個別に動作可能であるものと想定している。ここでキャッシュ・メモリ4は、たとえばレベル1キャッシュ・メモリなどのコントローラ2のメイン作業メモリを表す。メイン・メモリ5は、コントローラ2によってアクセス可能なメモリ・サブシステムの残りを表し、追加のキャッシュ・レベル、ハード・ディスク、およびバックアップ・ストレージ・メディアなどの、様々なタイプのストレージを含むことができる。
【0022】
装置1は、Ax=bによって定義される連立1次方程式の解を表すnx1のベクトルxに対応する、nの高精度データ要素を生成するためのプロセスを実施するように適合される。ここでAは、次元nxnの正定値対称密行列であり、bはnx1ベクトルである。行列Aの要素に対応するnxnの高精度データ要素、およびベクトルbの要素に対応するnの高精度データ要素は、メモリ5に格納された入力データによって定義される。より具体的に言えば、行列Aの高精度データ要素は、ここではスカラ関数F( )=a(i,j)を介して間接的に定義され、この式でa(i,j)は、行インデックスi(1 i n)および列インデックスj(1 j n)を伴う要素を表す。この例では、ベクトルbのデータ要素はメモリ5内で直接定義されるものと想定している。メモリ5は、処理動作で使用するための3つの収束条件を定義するパラメータを指定する、データC(k,d)、C(k,d)、およびC(p,c)も保持する。これらのパラメータについて、以下で説明する。
【0023】
解ベクトルxの高精度データ要素を生成するために、装置1によって実行されるキー・ステップが、図2の流れ図に示されている。動作は、通常は、コントローラ2のプロセッサ上またはコントローラ2と通信中のリモート・プロセッサ上のいずれで実行中であっても、装置のI/O(入力/出力)インターフェース(図示せず)を介したオペレータ・プロンプトまたは他のアプリケーションからの要求に応答して、ステップ10で開始される。ステップ11で、コントローラ2はメイン・メモリ5にアクセスして高精度関数F( )を取り出し、キャッシュ・メモリ4内に低精度コピーF( )を作成する。これは、高精度関数を低精度表現へと格下げ、すなわち丸めることによって、知られた方法で実行可能である。同様に、コントローラ2は、ベクトルbの高精度データ要素を取り出し、これらをそれぞれ低精度要素へと格下げして、低精度ベクトルbを生成する。ストレージ容量および次元nに応じて、ベクトルbのデータ要素はキャッシュ4内に保持するか、またはメイン・メモリ5内に再格納することができる。
【0024】
次にステップ12で、コントローラ2は、A=bを満たす、初期の近似nx1解ベクトルxに対応するnの低精度データ要素を生成するための第1の反復プロセスの1つのパスを実行する。この式でAは、関数F( )によって定義されるnxnの低精度行列である。この実施形態では、第1の反復プロセスに使用される技法は、共役勾配(CG)プロセスである。CGプロセスは、連立1次方程式の解に関する良く知られた技法であり、ここでより詳細に説明する必要はない。必要な計算は、関数F( )と、必要に応じてメイン・メモリ5からキャッシュ4へと再呼び出し可能なベクトルbの要素とのみを使用して、コントローラ2によって実行可能である。CGプロセスの1つのパス後に取得されるベクトルxの低精度要素はメモリ3に格納され、動作はステップ13へと進み、ここでコントローラ2によってパス・カウンタpが1つだけ増分される。意思決定ステップ14では、コントローラ2は、現行のパス・カウントpが、第1の反復プロセスの最大許可パス数を示す事前に設定されたパラメータkに等しいかどうかをチェックする。否定応答(ステップ14で「No」(N)の決定)であると想定すると、次にコントローラ2は意思決定ステップ15で、解xの収束が発生したかどうかを決定する。ここでは、2つのイベントのいずれかが発生した場合、収束が検出される。第1のイベントは、xに対する事前に設定された下方許容範囲(drop tolerance)dに達したことである。すなわち、コントローラ2は、xに対する現行の解が、第1のパスで取得された解と、量f dだけ異なるかどうかをチェックし、ここで下方許容範囲dは通常、パーセント変化として指定される。第2のイベントは、プロセスのこのパスでいかなる進行も達成されなかったこと、すなわち、xの解が以前のパスで取得された解から変化していないことである。ステップ15で収束が検出されないものと想定すると、動作は解プロセスの他のパスのためにステップ12に戻る。プロセスは、ステップ14でkパスの第1の発生が完了しているか、またはステップ15で収束が識別されているものとして定義された、第1の収束条件Cの発生まで反復される。収束条件Cが検出される(ステップ14またはステップ15で「Yes」(Y)の決定)と、コントローラ2は第1の反復プロセスを終了する。
【0025】
第1の反復プロセスが完了すると、動作はステップ16へと進み、ここでコントローラ2は、第1の反復プロセスによって出力された解ベクトルxの高精度コピーを作成する。これは、メモリ3に格納された現行の高精度解ベクトルxを取得するために、ベクトルxの低精度データ要素を、それぞれの高精度データ要素に変換することによって、知られた方法で実行可能である。次にステップ17で、コントローラ2は、r=b−Axを満たす現行のnx1の誤りベクトルrに対応する、nの高精度データ要素を生成する。この計算は、関数F( )と、必要に応じてキャッシュ4へと再呼び出し可能なベクトルxおよびbの要素とを使用して、実行可能である。結果として生じる誤りベクトルrの高精度要素は、ベクトルrの要素をそれぞれ低精度データ要素に変換することによってステップ18で生成される、この誤りベクトルの低精度コピーrと共に、メモリ3に格納される。
【0026】
次にステップ19で、コントローラ2は、Az=rを満たす、nx1の修正ベクトルzに対応するnの低精度データ要素を生成するための、第2の反復プロセスの第1のパスを実行する。ここでも、この例の第2の反復プロセスに共役勾配技法が使用され、必要な計算は、関数F( )を使用してコントローラ2によって実行可能である。プロセスの1つのパスの後取得されるベクトルzの低精度要素はメモリ3に格納され、動作はステップ20へと進み、パス・カウンタpはコントローラ2によって1つだけ増分される。意思決定ステップ21で、コントローラ2は、現行のパス・カウントpが、第2の反復プロセスの最大許可パス数を示す事前に設定されたパラメータkに等しいかどうかをチェックする。等しくない場合、コントローラ2は、意思決定ステップ22で、解zの収束が発生したかどうかを決定する。ここでも、(1)zに対する事前に設定された下方許容範囲dに達したか、または(2)プロセスのこのパスでいかなる進行も達成されなかった、すなわち、zの解が以前のパス以来変化していない場合、収束が検出される。ステップ22で収束が検出されないものと想定すると、動作は解プロセスの他のパスのためにステップ19に戻る。プロセスは、ステップ21でkパスの第1の発生が完了しているか、またはステップ22で収束が識別されているものとして定義された、第2の収束条件Cの発生まで反復される。収束条件Cが検出される(ステップ21またはステップ22でY)と、コントローラ2は第2の反復プロセスを終了する。
【0027】
第2の反復プロセスが完了すると、動作はステップ24へと進み、コントローラ2は、メモリ3に格納される高精度更新ベクトルuを生成するために、修正ベクトルzのデータ要素をそれぞれの高精度データ要素へと変換する。次にステップ25でコントローラ2は、x=x+uとなるように現行の高精度解ベクトルxのデータ要素を更新し、更新された解xをメモリ3に格納する。解ベクトルxを更新した後、コントローラ2は、ステップ26で、r=b−Axとなるように現行の高精度誤りベクトルrを更新し、ここでも計算は、行列Aを定義する関数F( )を使用して実行される。新しいベクトルrの高精度要素はメモリ3に格納され、動作はステップ27へと進み、ここで第3の反復プロセスに関するパス・カウンタpはコントローラ2によって1つだけ増分される。意思決定ステップ28で、コントローラ2は、現行のパス・カウントpが、第3の反復プロセスの最大許可パス数を示す事前に設定されたパラメータpに等しいかどうかをチェックする。等しくない場合、コントローラ2は、意思決定ステップ29で、解rの収束が発生したかどうかを決定する。上記と同様に、(1)rに対する事前に設定された許容範囲cに達したか、または(2)プロセスの以前のパス以来、rの解でいかなる進行も達成されなかった場合、収束が検出される。この場合、許容範囲cは誤りしきい値を指定し、これによってユークリッド・ノルムがc未満である誤りベクトルrは、必要な許容範囲内にあるものとみなされる。ステップ29で収束が検出されないものと想定すると、動作は第3の反復プロセスの他のパスのためにステップ18に戻り、新しい誤りベクトルrについて、第2の反復プロセスを再度実行する必要がある。ステップ18から29のプロセスは、ステップ28でpパスの第1の発生が完了しているか、またはステップ29で誤りベクトルrの解の収束が識別されているものとして定義された、第3の収束条件Cの発生まで反復される。収束条件Cが検出される(ステップ28またはステップ29でY)と、コントローラ2は第3の反復プロセスを終了する。ステップ30で、最終の解ベクトルxに対応する高精度データ要素が、プロセスを開始したオペレータまたはアプリケーションへと出力され、処理動作は完了する。
【0028】
前述の装置は、行列Aが密であり、次元nが非常に大きい場合であっても、連立1次方程式の解に対して特別な動作効率を提供する。装置は、高速で低精度の処理を利用し、処理動作の複雑さは、k=k=kの場合、O(kn)のみである。これは、O(n)のコストが生じる前述の従来システムとは著しく対照的である。
【0029】
上記プロセスで行列AまたはAを含むすべての計算は、他のベクトルとのAまたはAの行列ベクトル積のみを必要とすることに留意されたい。これらの計算は、行列Aの事前の形成を必要としないが、適宜、関数F( )またはF( )、および必要に応じてメイン・メモリ5からキャッシュ4への再呼び出しが可能な問題のベクトルの要素のみを使用して、コントローラ2によって実行可能である。すなわち、行列A(またはA)を含む必要な処理動作は、完全にプロセッサ・キャッシュ内で実行可能である。これにより、コントローラ2のプロセッサとメモリ・サブシステムとの間のトラフィックは、前述の従来の手法に比べて劇的に減少する。特に、前述の実施形態では、行列A(またはA)との行列ベクトル積の計算に必要なのはメモリ移動のO(kn)のみであり、ここでkは、通常、次元nに比べて小さい。これに対して従来の方式では、分解に先立って行列Aをシステム・メモリ内に形成する必要がある。この行列はA=LLとして分解され、ここでLはO(n/2)要素を伴う下三角行列である。低精度で格納された行列Lは、すべての解のケースで使用される。オリジナルの高精度の行列Aは、誤りの計算で使用される。したがって従来のシステムでは、そのプロセスの各反復改良ステップで、データのO(n)をメイン・メモリからプロセッサへと移動させる必要がある。
【0030】
3つの収束条件C(k,d)、C(k,d)、およびC(p,c)を定義するパラメータは、所与のアプリケーションで必要な正確さに従って、所望なように設定可能である。好ましい諸実施形態では、実施の便宜上、k=k=kが選択され、これによって第1および第2の反復プロセスでパスの最大数は同じである。従来システムでの誤り計算プロセスとは異なり、これらのプロセスは誤りベクトルrに向かって完全に解く必要はないが、必要な正確さまで自動的に適合可能であることに留意されたい。
【0031】
前述のように、装置1は、並列に動作する複数のプロセッサによって実現可能であり、これらのプロセッサが集合的に前述の処理動作を実施する。図3は、こうした実施の単純な例を示す。ここでコントローラ2の機能は、この場合、バス・インターフェース(I/F)を介して共有メモリ・サブシステムと通信する、個々のレベル1(L1)キャッシュを有する複数のプロセッサによって実施される。処理動作は行列ベクトル積に基づいているため、使用されるプロセッサの数が多い可能性がある。こうした超並列実施は特別な動作効率を提供する。図4は、本発明の諸実施形態のランタイムと前述の従来システムとを、2つの異なる値の行列次元nおよび様々な数の並列プロセッサに関して比較している。縦軸はランタイムに対応し、横軸は使用されるプロセッサの数に対応する。行列サイズnの2つの値は32768および49152である。実線で示された上部のトレースは従来のスキームに対応し、破線の下部のトレースは本発明の諸実施形態に対応する。縦軸上のスケールは対数関数であることに留意されたい。本発明の諸実施形態が大幅な改良を与え、ランタイムが少なくとも1桁減少していることが直ちに明らかとなろう。
【0032】
本発明の諸実施形態は、メモリ使用量および帯域幅についても大幅な改良を与えている。図5の表は、様々なサイズの行列Aについて従来のスキームおよび前述の本発明の諸実施形態を使用した、誤りベクトルrの各反復改良ステップに関するギガバイト単位でのメモリ使用量(必要な帯域幅)を示す。この表の一番上の行は、nの値が異なる従来システムに関する結果を示す。その下の4行は、説明した実施形態におけるk=k=kの異なる値についての結果を示す。本発明の諸実施形態によって劇的な改良が達成されたことは容易に明らかとなろう。
【0033】
前述の例示的諸実施形態に対して、多くの変更および修正が実行可能であることを理解されよう。例を挙げると、反復プロセスに対する収束条件は、それらの指定に対する様々なイベント・セットに依存し、これらのイベントの組み合わせに様々に依存することができる。しかしながら好ましい諸実施形態では、各プロセスについて常に最大数の反復を指定する。収束条件に関してある許容範囲が指定される場合、これは、所与のアプリケーションに所望なように様々な方法で定義可能である。また、前述の第1および第2の反復プロセスでは共役勾配方法が採用されているが、所望であれば連立1次方程式に関する他の反復解技法が採用可能である。前述の諸実施形態に対して、本発明の範囲を逸脱することなく多くの他の変更および修正が実行可能である。

【特許請求の範囲】
【請求項1】
Ax=bを満たすnx1のベクトルxに対応するnの高精度データ要素を生成するための装置(1)であって、この式で、Aは、nxnの事前に定義された高精度データ要素に対応する正定値対称nxn行列であり、bは、nの事前に定義された高精度データ要素に対応するnx1ベクトルであって、行列Aおよびベクトルbの前記データ要素を定義する入力データを格納するための、メモリ(3)と、
(a)A=bを満たすnx1のベクトルxに対応するnの低精度データ要素を前記入力データから生成するための第1の反復プロセスを実施し、この式で、Aは、低精度の行列Aのnxnデータ要素に対応するnxn行列であり、bは、低精度のベクトルbのnx1データ要素に対応するnx1ベクトルであって、制御論理(2)は第1の収束条件発生時に第1の反復プロセスを終了すること、
(b)現行の解ベクトルxを取得するために、ベクトルxの前記データ要素を高精度データ要素に変換すること、
(c)前記ベクトルbと前記ベクトル積Axとの間の差に依存して、nx1の修正ベクトルに対応するnの低精度データ要素を生成するための第2の反復プロセスを実施し、前記制御論理は第2の収束条件発生時に第2の反復プロセスを終了すること、
(d)前記修正ベクトルのnの低精度データ要素から、nx1の更新ベクトルuのそれぞれの高精度データ要素を生成すること、
(e)x=x+uとなるように、前記現行の解ベクトルxの前記データ要素を更新すること、および
(f)第3の収束条件発生までステップ(c)から(e)を実行すること、
を実行するように適合された、制御論理とを備える、装置。
【請求項2】
前記制御論理(2)が、
ステップ(b)で前記現行の解ベクトルxを生成した後、前記ベクトルbと前記ベクトル積Axとの差異を示す現行のnx1の誤りベクトルrに対応するnのデータ要素を生成すること、
前記修正ベクトルと行列Aのベクトル積が誤りベクトルrに依存するように、ステップ(c)を実行すること、および
ステップ(d)で、修正ベクトルのデータ要素を高精度データ要素に変換することによって、更新ベクトルuのデータ要素を生成すること、
を実行するように適合された、請求項1に記載の装置(1)。
【請求項3】
前記制御論理(2)が、
r=b−Axとなるように高精度で前記誤りベクトルrの前記データ要素を生成すること、
低精度誤りベクトルrを取得するために、前記誤りベクトルrの前記データ要素をそれぞれの低精度データ要素に変換すること、
前記修正ベクトルと前記行列のAの前記ベクトル積が低精度の誤りベクトルrに等しいように、ステップ(c)を実行すること、および
ステップ(e)で、前記現行の解ベクトルxの前記データ要素を更新した後、r=b−Axとなるように、前記現行の誤りベクトルrの前記データ要素を更新すること、
を実行するように適合され、
前記第3の収束条件が前記現行の誤りベクトルrに依存する、
請求項2に記載の装置(1)。
【請求項4】
前記第1の収束条件が、
前記第1の反復プロセスの所定のパス数が完了すること、
前記ベクトルxの解が所定の許容範囲に到達すること、および
前記第1の反復プロセスの連続するパスにおいて、前記ベクトルxの解に変化が検出されないこと、
のうちの少なくとも1つ、またはそのうちの第1の発生に依存する、前記請求項のいずれか一項に記載の装置(1)。
【請求項5】
前記第2の収束条件が、
前記第2の反復プロセスの所定のパス数が完了すること、
前記修正ベクトルの解が所定の許容範囲に到達すること、および
前記第1の反復プロセスの連続するパスにおいて、前記修正ベクトルの解に変化が検出されないこと、
のうちの少なくとも1つ、またはそのうちの第1の発生に依存する、前記請求項のいずれか一項に記載の装置(1)。
【請求項6】
前記第3の収束条件が、
ステップ(c)から(e)の所定のパス数が完了すること、
前記現行の解ベクトルxに依存するベクトルの解が所定の許容範囲に到達すること、および
ステップ(c)から(e)の連続するパスにおいて、前記現行の解ベクトルxに依存する前記ベクトルの解に変化が検出されないこと、
のうちの少なくとも1つ、またはそのうちの第1の発生に依存する、前記請求項のいずれか一項に記載の装置(1)。
【請求項7】
前記現行の解ベクトルxに依存する前記ベクトルが前記現行の誤りベクトルrを含む、請求項6および3に記載の装置(1)。
【請求項8】
行列Aの前記データ要素を定義する前記入力データは、任意のnx1ベクトルの上での各行列A要素a(i,j)の適用を定義する関数Fを備え、ここで1 i nおよび1 j nは、それぞれ行列A要素の行および列インデックスであり、前記制御論理(2)は、ステップ(a)から(e)の実行において前記関数Fを使用するように適合された、前記請求項のいずれか一項に記載の装置(1)。
【請求項9】
前記第1の反復プロセスが共役勾配方法を含む、前記請求項のいずれか一項に記載の装置(1)。
【請求項10】
前記第2の反復プロセスが共役勾配方法を含む、前記請求項のいずれか一項に記載の装置(1)。
【請求項11】
前記制御論理(2)が、ステップ(a)から(e)を実施するために並列に集合的に動作するように配置構成された複数のプロセッサを備える、前記請求項のいずれか一項に記載の装置(1)。
【請求項12】
Ax=bを満たすnx1のベクトルxに対応するnの高精度データ要素を、コンピュータに生成させるためのコンピュータ・プログラムであって、この式で、Aは、nxnの事前に定義された高精度データ要素に対応する正定値対称nxn行列であり、bは、nの事前に定義された高精度データ要素に対応するnx1ベクトルであって、前記コンピュータのメモリ(2)内に格納され行列Aおよびベクトルbの前記データ要素を定義する入力データに、前記コンピュータをアクセスさせ、
(a)A=bを満たすnx1のベクトルxに対応するnの低精度データ要素を前記入力データから生成するための第1の反復プロセスを実施し、この式で、Aは、低精度の行列Aのnxnデータ要素に対応するnxn行列であり、bは、低精度のベクトルbのnx1データ要素に対応するnx1ベクトルであって、第1の収束条件発生時に前記第1の反復プロセスを終了すること、
(b)現行の解ベクトルxを取得するために、ベクトルxの前記データ要素を高精度データ要素に変換すること、
(c)前記ベクトルbと前記ベクトル積Axとの間の差に依存して、nx1の修正ベクトルに対応するnの低精度データ要素を生成するための第2の反復プロセスを実施し、第2の収束条件発生時に前記第2の反復プロセスを終了すること、
(d)前記修正ベクトルの前記nの低精度データ要素から、nx1の更新ベクトルuのそれぞれの高精度データ要素を生成すること、
(e)x=x+uとなるように、前記現行の解ベクトルxの前記データ要素を更新すること、および
(f)第3の収束条件発生までステップ(c)から(e)を実行すること、
をコンピュータに実行させるための、プログラム・コード手段を備える、コンピュータ・プログラム。
【請求項13】
ステップ(b)で前記現行の解ベクトルxを生成した後、前記ベクトルbと前記ベクトル積Axとの差異を示す現行のnx1の誤りベクトルrに対応するnのデータ要素を生成すること、
前記修正ベクトルと行列Aのベクトル積が誤りベクトルrに依存するように、ステップ(c)を実行すること、および
ステップ(d)で、修正ベクトルのデータ要素を高精度データ要素に変換することによって、更新ベクトルuのデータ要素を生成すること、
を、前記コンピュータに実行させるためのプログラム・コード手段を含む、請求項12に記載のコンピュータ・プログラム。
【請求項14】
r=b−Axとなるように高精度で前記誤りベクトルrの前記データ要素を生成すること、
低精度誤りベクトルrを取得するために、前記誤りベクトルrの前記データ要素をそれぞれの低精度データ要素に変換すること、
前記修正ベクトルと前記行列のAの前記ベクトル積が低精度の誤りベクトルrに等しいように、ステップ(c)を実行すること、および
ステップ(e)で、前記現行の解ベクトルxの前記データ要素を更新した後、r=b−Axとなるように、前記現行の誤りベクトルrの前記データ要素を更新すること、
を、前記コンピュータに実行させるためのプログラム・コード手段を含み、
前記第3の収束条件が前記現行の誤りベクトルrに依存する、
請求項13に記載のコンピュータ・プログラム。
【請求項15】
前記第1の収束条件が、前記第1の反復プロセスの所定のパス数が完了すること、前記ベクトルxの解が所定の許容範囲に到達すること、および、前記第1の反復プロセスの連続するパスにおいて、前記ベクトルxの解に変化が検出されないこと、のうちの少なくとも1つ、またはそのうちの第1の発生に依存し、
前記第2の収束条件が、前記第2の反復プロセスの所定のパス数が完了すること、前記修正ベクトルの解が所定の許容範囲に到達すること、および、前記第1の反復プロセスの連続するパスにおいて、前記修正ベクトルの解に変化が検出されないこと、のうちの少なくとも1つ、またはそのうちの第1の発生に依存し、
前記第3の収束条件が、ステップ(c)から(e)の所定のパス数が完了すること、前記現行の解ベクトルxに依存するベクトルの解が所定の許容範囲に到達すること、および、ステップ(c)から(e)の連続するパスにおいて、前記現行の解ベクトルxに依存する前記ベクトルの解に変化が検出されないこと、のうちの少なくとも1つ、またはそのうちの第1の発生に依存する、
請求項12から14のいずれか一項に記載のコンピュータ・プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公表番号】特表2012−521591(P2012−521591A)
【公表日】平成24年9月13日(2012.9.13)
【国際特許分類】
【出願番号】特願2012−501429(P2012−501429)
【出願日】平成22年3月3日(2010.3.3)
【国際出願番号】PCT/IB2010/050912
【国際公開番号】WO2010/109359
【国際公開日】平成22年9月30日(2010.9.30)
【出願人】(390009531)インターナショナル・ビジネス・マシーンズ・コーポレーション (4,084)
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MASCHINES CORPORATION
【Fターム(参考)】