JP2006085619A - 帯係数行列を持つ連立1次方程式の解法プログラム - Google Patents

帯係数行列を持つ連立1次方程式の解法プログラム Download PDF

Info

Publication number
JP2006085619A
JP2006085619A JP2004272173A JP2004272173A JP2006085619A JP 2006085619 A JP2006085619 A JP 2006085619A JP 2004272173 A JP2004272173 A JP 2004272173A JP 2004272173 A JP2004272173 A JP 2004272173A JP 2006085619 A JP2006085619 A JP 2006085619A
Authority
JP
Japan
Prior art keywords
matrix
band
column
procedure
column block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2004272173A
Other languages
English (en)
Inventor
Makoto Nakanishi
誠 中西
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2004272173A priority Critical patent/JP2006085619A/ja
Priority to US11/006,385 priority patent/US7603402B2/en
Publication of JP2006085619A publication Critical patent/JP2006085619A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/11Complex mathematical operations for solving equations, e.g. nonlinear equations, general mathematical optimization problems
    • G06F17/12Simultaneous equations, e.g. systems of linear equations

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Theoretical Computer Science (AREA)
  • Operations Research (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Algebra (AREA)
  • Complex Calculations (AREA)

Abstract

【課題】 圧縮モードで格納された帯行列を用いて、並列処理によってLU分解を効率化し、連立1次方程式の計算を高速にする。
【解決手段】 解法プログラムは、複数の列から構成される列ブロックを並列的にLU分解して作業領域に格納する手順1、1の結果に対して各列の左側での行の入替をキャンセルして圧縮モードの配列にコピーバックする手順2、1の結果に対応して帯行列の更新によって壊れる可能性のある部分を退避する手順3、1の結果を用いて帯行列を並列的に更新する手順4、4の結果上に3で退避した部分を戻す手順5を計算機に実行させる。
【選択図】図1

Description

本発明は係数行列として疎行列、すなわち0でない要素が少ない行列の代表例としての帯行列を持つ連立1次方程式の解法に係り、さらに詳しくはそのような連立1次方程式を共用メモリ型スカラ並列計算機によって解くための連立1次方程式の解法プログラムに関する。
連立1次方程式を計算機によって解く場合には、連立1次方程式を行列によって表示し、行列のLU分解などの演算を行って解を求めやすい形式に変形し、方程式の解を求めるガウスの消去法を基本とする方法が用いられる。
すなわち、連立1次方程式は係数を表わす行列と変数を表わす列ベクトルの積が定数列ベクトルと等しくなるという形式に記述することができる。ここでLU分解を行って、係数を表わす行列を上三角行列と下三角行列とに分解し、前進代入(前進消去)と後退代入という方法を用いることによって、連立1次方程式の解を求めることができる。したがって連立1次方程式を解くためには係数行列をLU分解することが重要な処理となる。このLU分解を共用メモリ型スカラ並列計算機を用いて効率的に並列処理する従来技術として、出願人の次の特許文献がある。
特開2002−163246号公報 「共有メモリ型スカラ並列計算機における並列行列処理方法、及び記録媒体」
この文献には、LU分解すべき行列のうちで左側の複数の列に対応する左上部の対角部分のブロックDと、Dの下側にある列方向のブロックとを取り、下側にある列方向のブロックを、例えばL1からL3の3つに分け、3つのプロセッサのそれぞれにD+L1、D+L2、D+L3を割り振り、並列にLU分解演算を行い、その後対角部分のブロックDの右側の複数の行によって構成されるブロックUを更新し、さらにL1からL3とUとを用いて行列の残りの部分を更新する処理を繰り返すことによって、処理の効率化を実現できる演算方法が開示されている。
係数行列の中で0でない要素の数が少ない疎行列のうちで、特に主対角線の周囲にしか0でない要素が存在しない帯行列(バンド行列)を係数行列として持つ連立1次方程式の解法において、従来ではガウスの消去法をベースとしたLU分解を行う方法が用いられている。このような従来の解法では行列の要素をメモリに格納する場合に、0でない要素が存在する帯の部分だけを効率的に格納するために、帯の部分以外の0の要素の格納を省略する圧縮格納モードが用いられる。またLU分解の解の安定性を高めるために部分ピポットが採用されるが、圧縮格納モードでの格納領域を小さくするために、各列でピポットを用いて行の入れ替えを行う場合に列の右側のみで行の入れ替えを行う方法が用いられていた。さらにLU分解における更新の処理では、ベクトルの外積の形式の演算が用いられていた。
このような帯係数行列を持つ連立1次方程式の解法の従来技術は次の文献に記載されている。
G.H.Gorub,C.F.Van Loan:Matrix Computations,3rd Ed.The Johns Hopkins University Press,Baltimore and London (1996)
一般にスカラ計算機は、CPUの演算性能は高いが、メモリへのアクセス性能が低い。このため、メモリアクセスの性能に依存するベクトルの外積をベースとする演算は性能が低く、ベクトル計算機による処理に比べて効率が悪いという第1の問題点があった。
第2に帯行列が0でない要素のみを格納する圧縮モードでメモリに格納されているため、例えば各列が行方向に1要素ずつずれて格納され、そのままの形式では行列積を用いた更新処理を行うことができず、また行列積を用いて更新しようとする場合にも入れ替えの必要な行における要素の数が圧縮モードの格納領域を越えた時に、その外側の要素の値が壊れてしまう可能性があるという問題点があった。
第3に前述のように部分ピポットの形式で列の右側のみで行の入れ替えを行うために、ブロック化した行列演算の形を利用する更新を行うことができないという問題点があった。
第4にLU分解が終了して前進消去の処理を行う場合に、部分ピポットの形式で列の右側部分のみ行の入れ替えを行っているために、解ベクトルの入れ替えも行う必要があり、ベクトルとスカラの積の演算によって更新処理を行うことが必要となり、その演算を並列に処理する場合には並列処理そのもののオーバヘッドが大きくなり、並列処理の効率が悪化するという問題点があった。
本発明の課題は上述の問題点に鑑み、帯係数行列を持つ連立1次方程式の解法において、帯行列の圧縮格納モードによって生ずる問題点を解決して、ブロック化した行列演算の形式を利用することによってLU分解の高速化を行うことと、LU分解結果に対する前進消去処理における並列化の効率を向上させることである。
図1は本発明の連立1次方程式解法プログラムの原理的な機能ブロック図である。同図は、帯係数行列を持つ連立1次方程式の解法プログラムであり、例えば共用メモリ型スカラ並列計算機によって使用されるものである。
図1において、プログラムでは1で帯行列内部の複数の列から構成される列ブロックが並列的にLU分解されてその結果が作業領域に格納され、2でそのLU分解結果に対して各列のピボット選択の結果として左側で行われていた行の入れ替えがキャンセルされ、そのキャンセル結果のデータが圧縮形式の帯行列にコピーバックされ、3でこの列ブロックのLU分解結果に対応して入れ替えの必要な行の長さの最大値と圧縮形式の帯行列の配列領域の大きさとの関係に基づいて、行列の更新によって壊れる可能性のある部分が退避される。
その後帯行列の残りの部分の更新が行われる。すなわち前述の1で作業領域に格納された列ブロックのLU分解結果を用いて、4で並列的に帯行列の更新が行われ、5ですでに3で退避された部分が帯行列の更新結果上に戻される。すなわち本発明のプログラムは1〜5の手順から成る行列演算を計算機に実行させることになる。
発明の実施の形態においては、この行列演算が帯行列のLU分解のための演算であり、この演算では帯行列の最も左上部の前述の列ブロックに対応する行列演算の終了後に、その列ブロックの最上部の対角部分に含まれる行と列とを帯行列から除外し、除外後の行列の左上部の列ブロックに対応する行列演算を繰返し、最後に残った部分のLU分解を行うこともできる。
また実施の形態においては、この残った部分のLU分解の演算の終了後に、前述の帯行列の並列的更新において行われた行入れ替えの情報を利用して、複数の列から構成される列ブロックの各列の左側でピボット選択に対応する行の入れ替えを行うとともに、その左側での行の入れ替えに対応して連立方程式における定数ベクトルの要素の中でその列に対応する要素の入れ替えを行う手順と、その列ブロックの対角部分の下三角行列に対応する連立方程式を解く手順と、列ブロックの対角部分の下の行列を用いて行列ベクトル積の計算によってベクトルの更新を行う手順とを含む並列的行列演算をさらに計算機に実行させることもできる。
この場合、この並列的行列演算が帯行列のLU分解結果を用いた前進代入の処理のための演算であり、帯行列の最も左上部の列ブロックに対応する並列的行列演算の終了後に、その列ブロックの最上部の対角部分に含まれる行と列とを帯行列から除外して、除外後の行列の左上部の列ブロックに対応する並列的行列演算を繰返し、最後に残った対角ブロックの下三角行列に対する連立方程式の解を求めることもできる。
さらに実施の形態においては、図1の4における帯行列の並列的更新手順において、キャンセル結果のデータがコピーバックされた圧縮形式の帯行列に対して、各列の要素の行の位置を補正して補正後の行列の更新を行うこともでき、またこの補正後の帯行列と列ブロックのLU分解結果を用いて、列ブロック内の対角行列に対応する行ブロックを並列的に更新し、その行ブロックの更新結果を用いて列ブロックと行ブロックとに対応する行列を並列的に更新することもできる。
次に本発明の帯係数行列を持つ連立方程式の解法プログラムは、帯係数行列のLU分解の演算の終了後に、帯係数行列の並列的更新において行われた行入れ替えの情報を利用して、複数の列から構成される列ブロックの各列の左側で、ピボット選択に対応する行の入れ替えを行うとともに、その行の入れ替えに対応して連立方程式における定数ベクトルの要素内でその列ブロックに対応する要素の入れ替えを行う手順と、列ブロックの対角部分の下三角行列に対応する連立方程式を解く手順と、列ブロックの対角部分の下の行列を用いて行列ベクトル積の計算によってベクトルの更新を行う手順とを含む行列演算を計算機に実行させるものである。
本発明によれば、帯行列を係数行列として持つ連立1次方程式の解法において、帯行列が圧縮格納モードでメモリに格納されている場合にも、係数行列のLU分解を高速化することができ、また前進代入の処理においても並列処理の効率を向上させることができ、帯係数行列を持つ連立1次方程式の解を求める処理の高速化に寄与するところが大きい。
図2は、本発明のプログラムを用いて連立1次方程式の解を求めるための共用メモリ型スカラ並列計算機のハードウェア構成例を示すブロック図である。同図において共用メモリ型スカラ並列計算機を構成する複数のプロセッサ10−1、10−2、..10−nは、2次キャッシュメモリ13−1、13−2、..13−nを介して相互結合網12に接続される。
各プロセッサ10−1、10−2、..10−nは、その内部、あるいは各2次キャッシュメモリと各プロセッサとの間に1次キャッシュメモリを備えている。また各プロセッサ10−1、10−2、..10−nによって共有されるメモリモジュール11−1、11−2、..11−nに対しては、相互結合網12を介してプロセッサ10−1、10−2、..10−nがアクセスできるように接続されている。
プロセッサ10−1、10−2、..10−nがデータ処理を行う場合には、まずメモリモジュール11−1、11−2、..11−nから自プロセッサが担当するデータを2次キャッシュメモリ13−1、13−2、..13−nに格納し、さらにその中から処理単位となるデータを1次キャッシュメモリにコピーして処理を行うことになる。
処理が終ると、1次キャッシュメモリから2次キャッシュメモリに処理データが格納され、2次キャッシュメモリ内のデータに対する処理が全て終了すると、メモリモジュール11−1、11−2、..11−nの中で最初にデータを持ってきたメモリモジュールに対するデータの更新が行われる。このような処理を繰返すことによって複数のプロセッサによって並列処理が行われる。
この場合、各プロセッサが処理後のデータをメモリモジュールに書込み、次の処理のために再びメモリモジュールからデータを読み込む時にはプロセッサの間の同期をとる必要がある。すなわち、すべてのプロセッサがメモリモジュールのデータを更新し終わるまで他のプロセッサがメモリモジュールからデータを読み込まないようにする必要がある。このようなプロセッサ間の処理の同期をバリア同期という。
図3は、本発明で対象とする連立1次方程式の係数行列としての帯行列の説明図である。同図において帯行列はN行、N列の正方行列であり、その主対角線の周囲にのみ0でない要素が存在し、主対角線を中心とするある帯の幅の外側の要素はすべて0となっている疎行列である。例えば、中央付近の1つの列を取り、対角要素を除いた下側のその列内で0でない可能性のある要素の数を下バンド幅nh1、対角要素を除いた上側の列内の0でない要素の数を上バンド幅nh2と呼ぶことにする。
図4は、図3の帯行列の圧縮モードにおける格納形式例の説明図である。同図においておいて1番上側の下バンド幅nh1を行数として持つ領域は、後述する行の入れ替えによって0でない値が入る可能性のある領域であり、最初に帯行列を格納した段階では全ての要素が0となっている領域である。その下の行数nh2の領域は上バンド幅の要素を格納する領域であり、その下に対角要素を格納する1行の領域があり、さらにその下に下バンド幅nh1の要素を格納する領域が存在する。
図3の帯行列を図4のように圧縮モードで格納する場合には、例えば図3で最も左側の列から1列ずつ図4の一番上の行数nh1の領域を除いて格納していくことにする。すなわち最も左側の列は図3において対角要素から始まる列であり、図4の対角要素を格納する領域、すなわち行数1の領域から始めて下方向にnh1の行数の領域に0でない(可能性のある)要素が格納される。2列目では、対角要素の上に1つの要素が存在するためにその要素が行数nh2の領域に1つだけ一番下に格納され、その後対角要素、およびその下の要素が次々と格納される。
格納される列が上のバンド(帯)境界に達した以後は、nh2の行数の領域、およびnh1の行数の領域には列ごとに全て0でない(可能性のある)要素が格納され、格納される要素数はnh1+nh2+1で一定となる。
さらに列の下端が図3の行列の最下行に達した以後は、図4の下側の行数nh1の領域に格納される要素は1つずつ減り、最も右側の列では格納される要素は上バンド側の要素と対角要素のみとなる。したがって図4において、行数nh2の領域の左上側、および下の行数nh1の領域の右下側の三角の領域には、不定の値、例えば全て0が格納されることになる。なお圧縮モードでの帯行列の格納形式としては、このような列単位での格納でなく、行単位での格納など、各種の格納形式を用いることができる。
図5は、LU分解を行うための列ブロックの作業領域への格納方法の説明図である。基本的にはこの列ブロックの格納では、最初に図3において最も左上側から対角要素を含む列ブロックの格納が行われるが、ここでは一般的に任意の位置の対角要素から始まる列ブロックの作業領域への格納について説明する。
本実施形態における列ブロックは、対角要素を最も左上の要素とする複数列の要素によって構成されるブロックであり、一般的には上側の対角部分と下側の対角要素を含まない部分とによって構成される。
この列ブロックを構成する複数の列内の要素は、図4、および図5に説明した圧縮モードでは、図3に示すような正しい列と行の位置関係ではなく、一列ごとに行が1つずつずれた形式で格納されている。すなわち図5において、作業領域Wにコピーすべき列ブロックにおける最初の列の要素は対角要素から始まり、その次の列の要素は対角要素の1つ上の行の要素から始まることになる。このように順次1つずつ行のずれた要素を、このずれを補正した形式で、作業領域Wとしての長方形の配列に行と列が正常な位置関係となるような形式で格納する。このように行と列の関係がずれのない正常な位置関係に補正された後に列ブロックのLU分解が行われるために、そのLU分解の結果を用いた行列の更新を行列積の計算によって行うことが可能となり、これによって並列処理による処理効率が向上する。
図6は、この列ブロックの帯係数行列上での位置の説明図である。同図において左上の角が主対角線上にある要素であり、複数の列で構成される長方形のブロックが、作業領域Wに格納される列ブロックを示す。この列ブロックを含む横長の実線の長方形の領域は、図5では下側の図で、左上の縦長の長方形とその右側の横長の長方形とに相当することになる。なお図5において斜めの実線、および点線は全て平行であり、その傾きは図4で説明した斜め方向の実線の傾きと一致する。また図6内の退避必要領域については後述する。
図7は、作業領域Wにコピーされた列ブロックの左下三角部分への0の設定の説明図である。この下三角領域は、図6で示すように下側のバンドの境界を越えた領域に相当し、この領域の要素は全て0であるために図7に示すように作業領域Wにコピーされた列ブロックの左下三角部分には0が設定される。
以上のようにして作業領域Wにコピーされた列ブロックに対するLU分解が、前述の特許文献1において開示された方法を用いて並列的に実行される。この並列処理の詳細については特許文献1に記載されているが、その概要を図8を用いて説明する。
図8においては、例えば3つのプロセッサによる並列処理を行うものとし、列ブロックの対角部分をDとし、その下の部分を1次元目、すなわち行数で均等に分割したL1、L2、およびL3を3つのスレッド(プロセッサ)T1からT3に割当て、各スレッドがD+L1、D+L2、D+L3の演算を行う、すなわち対角部分を冗長に演算することによって列ブロックのLU分解が行われる。このLU分解において部分ピボットを用いた行の入れ替えでは列の右側だけでなく、ブロック幅全体に対して行の入れ替えが行われる。
LU分解された結果は圧縮モードの帯行列格納領域、すなわち図4で説明した領域内の対応する列にコピーバックされる。このコピーバックに先立って、LU分解処理の中で行われた行の入れ替えのうちで各列の左側における行の入れ替えがキャンセルされてから、コピーバックが行われる。
図9は、この各列の左側における行の入れ替えのキャンセルの説明図である。同図においてLU分解され、作業領域Wに格納された結果が同じ大きさの作業領域W1にコピーされ、この作業領域W1上で、各列の左側で行われた行の入れ替えのキャンセルが行われる。列ブロックのLU分解において行の入れ替えが行われた場合には、その入れ替えに関する情報はある1次元配列IP(n)に格納されているものとし、その情報に基づいて左側における行の入れ替えのキャンセルが行われ、その結果作業領域W1の左下三角部分には再び0が格納されることになる。そしてこのキャンセル結果が圧縮モードの帯行列の格納領域、すなわち図4の対応する列に格納される。なお作業領域W上のLU分解結果は、後述する行ブロックと行列の更新時に利用される。
この左側における行の入れ替えのキャンセルは、図4で説明した帯行列の格納形式と関連するものである。列ブロックのLU分解に続いて対応する行ブロックと行列の更新が行われるが、左側で行われた行の入れ替え結果が残っていると、その後の行の入れ替えで、図4の下側の行数nh1の領域のさらに下側に対応する要素が0でなくなる可能性があり、メモリの格納領域を節約するために左側での行の入れ替えのキャンセルが行われる。なおここで更新対象として述べている行ブロックと行列については図10で説明する。
その後、行ブロックの更新と、対応する行列の更新が行われるが、これらの更新に先立って更新によって壊れる可能性のある部分、すなわち図4の格納形式では本来0であるべき部分の要素が0でなくなる可能性のある領域のデータをあらかじめデータ退避用作業領域に退避しておき、その領域を0に設定した後に、行ブロックの更新と行列の更新が行われる。この部分は図6における退避必要領域である。すなわちこの三角部分は図4の配列形式において上の行数nh1の領域よりさらに上の領域に相当し、行の入れ替えによってこの部分が壊れる可能性がある場合には、この領域の退避が必要となる。
このように壊れる可能性のある領域の要素の値が退避された後に行ブロックと行列の更新が行われる。この更新においては、LU分解された列ブロックが圧縮モードの帯行列格納領域にコピーバックされた結果を用いて行われる。したがって行ブロックの更新、および行列の更新の対象となる行列は、圧縮モードで格納されている領域上での列のずれが補正された、行と列とが正常な位置関係を持つ配列として、例えば行ブロックの更新、および行列の更新を行うサブルーチンに渡されて、その後そのサブルーチンによる処理が行われる。この時、壊れる可能性があり、要素の値が退避された領域の要素に対しては、前述のようにその値が0に設定されて行の入れ替え、行ブロックの更新、および行列の更新が行われる。これらの更新において、前述の作業領域Wに残っている列ブロックのLU分解結果が利用される。そして更新が終わった段階で、退避されていた壊れる可能性のある部分が元に戻される。
図10は行ブロックの更新、および列ブロックと行ブロックに対応する行列の更新の並列処理の詳細説明図である。同図においてU1からU4までによって構成される行ブロックに対して、更新の前に列ブロックのLU分解で行われた行の入れ替えに対応する入れ替えが行われる。この入れ替えも、例えばU1からU4、およびその下の行列のC1からC4を1次元目、すなわち行数によって分割し、4つのプロセッサにそれぞれ分担させて独立して並列処理することができる。
行ブロックの更新では、列ブロックの対角部分の下三角行列DLの逆行列と行ブロックの分割部分のそれぞれUiとの行列積を並列に計算することによって、Uiの更新処理が並列に行われる。そして残りの行列の更新では、分割された行列部分Ciから、列ブロックの対角部分を除いたLとUiとの積を減算することによって並列的にCiの更新処理が行われる。このように列ブロックのLU分解から行列更新までの演算を並列処理することにより、メモリアクセス性能の低いスカラ計算機でも、メモリからロードしたデータに対する演算密度を高め、CPUの演算性能を引き出すことができる。
以上の処理によって帯行列のLU分解が終了すると前進代入(前進消去)、および後退代入の処理によって連立方程式の解を求めるソルバー部分の処理が行われる。このソルバー部分の処理についても、従来においては前述のように帯行列が圧縮モードで格納され、LU分解の過程で行われた行の入れ替えに対して各列の左側の行の入れ替えがキャンセルされて格納されていたために、行列ベクトル積でベクトルの更新を行うことができなかった。このため本実施形態では、圧縮モードで格納されている帯行列を作業領域にコピーして処理を行う前に、列の左側でキャンセルされていた行の入れ替えを再び行った後に処理を実行するものとする。これによって行列ベクトル積を用いたベクトルの更新を行うことが可能となり、並列処理によって処理の効率を向上させることができる。
このソルバー部分の並列化処理について図11、および図12を用いて説明する。図11は、帯行列から作業領域への列ブロックの格納(コピー)の説明図である。LU分解における処理と同様に、対角要素が最も左上にあるように複数の列から構成される列ブロックがある作業領域にコピーされる。前述と同様に左下の三角領域はもともと0の要素が格納されている領域であり、0クリアされる。そしてこの作業領域上で各列の左側に対する行の入れ替えが行われる。
この行の入れ替えは、LU分解の過程において行われた行の入れ替え情報、すなわち前述のIP(n)を用いて行われる。この入れ替え情報では、例えばn=1行目に対して行われた入れ替えの相手側の行の情報が保存されている。例えばIP(1)=22であれば1行目と22行目との入れ替えが行われたことになり、また例えばIP(10)=2であれば10行目と2行目とが入れ替えられたことが入れ替え情報から判明し、この情報を使って各列の左側の行の入れ替えが行われる。
図12は、このような列ブロックに対する行の入れ替えの後に、定数ベクトルbの要素の入れ替えなどを行う前進消去における並列化処理の説明図である。同図においてまず行の入れ替えに対応して、入れ替え情報IP(n)が保存されている、例えば1次元配列の情報を使って対応するベクトル、すなわち定数ベクトルb、および解ベクトルを格納する領域の入れ替えが行われ、列ブロックの対角部分の下三角行列に関する方程式が前進消去で解かれ、その後列ブロックのうちで対角部分の下の行列を用いて定数ベクトルの対応する部分の更新が行われる。この処理は並列的に行われる。
図12において、4台のプロセッサを用いて並列処理を行うものとすれば、定数ベクトルbを列ブロックの対角部分に対応するb0と、列ブロックの残りの部分の行数を均等に分割したw1からw4にそれぞれ対応する定数ベクトルの部分b1からb4に分割した後に、対角部分の下三角行列w10に関する連立方程式w10×x0=b0が解かれ、決定されたx0を用いてb0の更新が行われる。ここでx0は、解xのベクトルのうち、ベクトルb0に対応する部分である。
定数ベクトルの残りの部分b1からb4に対しては、4台のプロセッサによって並列更新が行われる。すでに更新されたb0を用いて次式によってその更新処理が並列的に実行される。
bi=bi−wi×b0(i=1..4)
以下本実施形態におけるLU分解処理とソルバー処理とについてそれぞれフローチャートを用いてさらに詳細に説明する。図13は、帯行列のLU分解処理の詳細フローチャートである。同図において処理が開始されると、まずステップS1で行列の次数N、帯幅としての下バンド幅nh1、上バンド幅nh2、および帯行列が圧縮モードで格納された圧縮配列のデータが入力され、ステップS2でブロック幅nblks、および繰返し数loopが決定され、ステップS3でカウント数ncntの値が1とされる。ここで行列の次数Nが、例えば数十万であっても、ブロック幅nblksは例えば40とされ、このブロック幅nblksを用いて繰返し数が次式によって決定される。
loop=(N+nblks−1)/nblks
すなわち繰返し数としては、単純に行列の次数Nをブロック幅nblksで割るのではなく、余りが出る場合を考えて、Nにnblks−1を加算してその結果をnblksで割ったものが繰返し数とされる。
続いてステップS4で列ブロックの作業領域Wへのコピーが行われる。図3から図5で説明したように、まず最初に図3の最も左上の対角要素を含む最も左側の列から始め、ブロック幅nblksの数の列が作業領域Wにコピーされる。
このコピーされる列をカウント数ncnt、およびブロック数nblksを用いて一般的に表わすと、コピーされる列は(ncnt−1)×nblks+1列目からncnt×nblks列目までであり、これらの列が作業領域W、すなわち(nh1+nblks)行、nblks列の領域に行と列とが正常な位置関係となるようにコピーされる。
続いてステップS5で列ブロックのLU分解と、その結果の作業領域Wへの格納が行われる。この列ブロックのLU分解は前述のように特許文献1の方法を用いて並列処理として実行される。
列ブロックのLU分解が終了すると、ステップS6でその結果が領域Wと同じ大きさを持つ作業領域Wにコピーされ、ステップS7でその領域の上で各列の左側でピボット選択の結果として行われていた行の入れ替えがキャンセルされ、ステップS8でキャンセル結果が圧縮モードの帯行列の格納配列にコピーバックされる。
続いてステップS9で列ブロックのLU分解の結果から、行の入れ替えを行う必要がある行の長さの最大値が計算され、ステップS10でその最大値が圧縮モードの帯行列の配列領域を越える場合には、超えることによって壊れる可能性のある部分が作業領域に退避され、その部分が0に設定される。なおこの退避すべき領域は、圧縮モードの配列領域に格納された帯行列の行と列の関係を正常な位置関係に補正したものとして決定され、その領域の要素が0に設定される。
そしてステップS11で圧縮モードの配列が実際に通常の位置関係、すなわち通常形式の行列に補正され、ステップS12で行ブロックの並列更新において、行列の2次元目、すなわち列の数に応じて並列処理を行う各CPUの分担範囲が計算され、ステップS13で行ブロックに対する行の入れ替えが列単位で並列に行われ、ステップS14で作業領域Wに格納されている列ブロックのLU分解の結果を用いて行ブロックの並列的更新が行われる。ステップS15で列ブロックと行ブロックとを用いてこれらに対応する行列が更新され、ステップS16で退避してあった部分が元に戻され、ステップS4で作業領域Wにコピーされた列ブロックに対応する処理を終了する。
そしてステップS17でカウント数が繰返し数−1に達したか否かが判定され、達していない場合にはステップS18でカウント数、すなわちncntの値がインクリメントされ、ステップS4以降の処理が繰り返される。
この処理では、まずカウント数ncnt=1に対応して、例えば図3で最も左上に取られた列ブロックの対角部分に対応する行と列とを除いた小さくなった内側の行列部分に対してncnt=2以上に対応する処理が繰り返され、ステップS17でカウント数ncntが繰返し数−1に達したと判定されると、帯行列において最も右下の残った部分に対してステップS19で1列ごとのLU分解が行われて処理を終了する。
図14は、ソルバー処理の詳細フローチャートである。同図において処理が開始されると、まずステップS21からS23において図13のステップS1からS3と同様に各データの入力、ブロック幅と繰返し数の決定、およびカウント数の初期化が行われる。ステップS24でステップS4におけると同様に、圧縮モードで格納されたLU分解結果としての帯行列から列ブロックが作業領域Wにコピーされる。
そしてステップS25で図13の帯行列のLU分解の過程で行われた行入れ替えの情報、例えば前述の1次元配列IP(n)に保存されている入れ替え情報を用いて、作業領域W上で各列の左側の行の入れ替えが行われる。ステップS26で定数ベクトルbに対して対応する要素の入れ替えが行われ、また解ベクトルを格納する領域についても入れ替えが行われ、ステップS27で列ブロックの対角部分の下三角行列に関する方程式が解かれ、ステップS28で対角部分の下の行列が並列処理を行う各プロセッサによって分担され、行列ベクトル積を用いたベクトルの更新が行われる。ステップS29でカウント数が繰返し数−1に達したか否かが判定され、まだ達していない場合にはステップS30でカウント数がインクリメントされ、ステップS24以降の処理が次の列ブロックに対応して実行される。
ステップS29でカウント数が繰返し数−1に達したと判定されると、ステップS31で最後の対角ブロックに関する連立方程式の解が求められる。この処理では、行の入れ替え情報を用いてベクトルの要素を入れ替えた後で、残りのベクトル部分を更新する処理が最後の要素まで繰り返される。
その後ステップS32で後退代入の計算が行われる。後退代入の処理においては、行の入れ替えの必要はなく、ブロック幅ごとに最後、すなわち下の方から順番に処理が行われる。この処理では対角部分の上三角行列に関する連立方程式が解かれ、解のベクトルを利用してそれより上の部分のベクトルが行列ベクトル積で更新される処理が行われ、後退代入の計算が終了すると、ソルバー処理を終了する。
以上において、本実施形態における連立1次方程式の解法プログラムについて詳細に説明したが、このプログラムを用いることにより帯係数行列を持つ連立1次方程式の計算が高速化される。1つの例として従来のベクトル計算機向けのコードと比較した場合、1CPUのスカラ計算機でも14倍高速となることが判明した。共用メモリ型スカラ計算機を使用することにより、さらなる高速化が期待できる。
(付記1) 帯係数行列を持つ連立方程式の解法プログラムであって、
前記帯行列内の複数の列から構成される列ブロックを並列的にLU分解し、作業領域に格納する手順と、
該LU分解結果に対して各列の左側でピポット選択の結果として行われていた行の入れ替えをキャンセルし、該キャンセル結果のデータを圧縮形式の帯行列格納配列領域にコピーバックする手順と、
前記列ブロックのLU分解結果に対応して、入れ替えの必要な行の長さの最大値と前記圧縮形式の帯行列格納配列領域の大きさとに対応して、帯行列の更新によって壊れる可能性のある部分のデータを退避する手順と、
前記作業領域に格納されている前記列ブロックのLU分解結果を用いて、前記帯行列を並列的に更新する手順と、
前記退避部分のデータを該帯行列更新結果上に戻す手順とを含む行列演算を計算機に実行させることを特徴とする帯係数行列を持つ連立方程式の解法プログラム。
(付記2) 前記行列演算が、前記帯行列のLU分解のための演算であることを特徴とする付記1記載の帯係数行列を持つ連立方程式の解法プログラム。
(付記3) 前記帯行列のLU分解のための演算において、
前記帯行列の最も左上部の前記列ブロックに対応する前記行列演算の終了後に、該列ブロック最上部の対角部分に含まれる行と列とを前記帯行列から除外し、該除外後の行列の左上部の列ブロックに対応する前記行列演算を繰返し、最後に残った部分のLU分解を行うことを特徴とする付記2記載の帯係数行列を持つ連立方程式の解法プログラム。
(付記4) 前記最後に残った部分のLU分解の終了後に、前記帯行列の並列的更新において行われた行入れ替えの情報を利用して、複数の列から構成される列ブロックの各列の左側で、ピボット選択に対応する行の入れ替えを行うとともに、該左側の行の入れ替えに対応して連立方程式における定数ベクトルの要素の内で該列ブロックに対応する要素の入れ替えを行う手順と、
該列ブロックの対角部分の下三角行列に対応する連立方程式を解く手順と、
該列ブロックの対角部分の下の行列を用いて行列ベクトル積の計算によってベクトルの更新を行う手順とを含む並列的行列演算をさらに計算機に実行させることを特徴とする付記3記載の帯係数行列を持つ連立方程式の解法プログラム。
(付記5) 前記並列的行列演算が、前記帯行列のLU分解結果を用いた前進代入処理の演算であり、
前記帯行列の最も左上部の前記列ブロックに対応する前記並列的行列演算の終了後に、該列ブロック最上部の対角部分に含まれる行と列とを前記帯行列から除外して、該除外後の行列の左上部の列ブロックに対応する該並列的行列演算を繰返し、最後に残った対角ブロックの下三角行列に対する連立方程式の解を求めることを特徴とする付記4記載の帯係数行列を持つ連立方程式の解法プログラム。
(付記6) 前記帯行列の並列的更新手順において、
前記キャンセル結果のデータがコピーバックされ、圧縮形式の配列領域に格納された帯行列に対して、各列の要素の行の位置を補正して補正後の行列の更新を行うことを特徴とする付記1記載の帯係数行列を持つ連立方程式の解法プログラム。
(付記7) 前記帯行列の並列的更新手順において、
前記補正後の帯行列と前記列ブロックのLU分解結果とを用いて、該列ブロック内の対角行列に対応する行ブロックを並列的に更新する手順と、
該行ブロックの更新結果を用いて該列ブロックと行ブロックとに対応する行列を並列的に更新する手順とを備えることを特徴とする付記6記載の帯係数行列を持つ連立方程式の解法プログラム。
(付記8) 前記連立方程式の解法プログラムが共用メモリ型スカラ計算機によって実行されることを特徴とする付記1記載の帯係数行列を持つ連立方程式の解法プログラム。
(付記9) 帯係数行列を持つ連立方程式の解法プログラムであって、
該帯係数行列のLU分解演算の終了後に、該帯係数行列の更新において行われた行入れ替えの情報を利用して、複数の列から構成される列ブロックの各列の左側で、ピボット選択に対応する行の入れ替えを行うとともに、該左側での行の入れ替えに対応して連立方程式における定数ベクトルの要素の内で該列ブロックに対応する要素の入れ替えを行う手順と、
該列ブロックの対角部分の下三角行列に対応する連立方程式を解く手順と、
該列ブロックの対角部分の下の行列を用いて、行列ベクトル積の計算によってベクトルの更新を行う手順とを含む並列的行列演算を計算機に実行させることを特徴とする帯係数行列を持つ連立方程式の解法プログラム。
(付記10) 前記連立方程式の解法プログラムが共用メモリ型スカラ計算機によって実行されることを特徴とする付記9記載の帯係数行列を持つ連立方程式の解法プログラム。
本発明の連立1次方程式解法プログラムの原理的な機能ブロック図である。 本発明のプログラムを並列処理として実行する共用メモリ型スカラ並列計算機のハードウェア構成例を示す図である。 帯行列の形式を説明する図である。 帯行列の圧縮モード格納形式の説明図である。 圧縮モードで格納された帯行列から列ブロックの作業領域への格納の説明図である。 列ブロックの帯行列内の位置を説明する図である。 列ブロックの下三角部分への0設定の説明図である。 列ブロックのLU分解における並列処理の説明図である。 列ブロックのLU分解結果における各列の左側の行の入れ替えのキャンセルの説明図である。 行ブロックと行列の並列更新処理の説明図である。 ソルバー部分の並列解法における列ブロックの作業領域への格納の説明図である。 列ブロックに対応する定数ベクトルの並列更新処理の説明図である。 帯行列のLU分解処理の詳細フローチャートである。 ソルバー処理の詳細フローチャートである。
符号の説明
10 プロセッサ
11 メモリモジュール
12 相互結合網
13 2次キャッシュメモリ

Claims (5)

  1. 帯係数行列を持つ連立方程式の解法プログラムであって、
    前記帯行列内の複数の列から構成される列ブロックを並列的にLU分解し、作業領域に格納する手順と、
    該LU分解結果に対して各列の左側でピポット選択の結果として行われていた行の入れ替えをキャンセルし、該キャンセル結果のデータを圧縮形式の帯行列格納配列領域にコピーバックする手順と、
    前記列ブロックのLU分解結果に対応して、入れ替えの必要な行の長さの最大値と前記圧縮形式の帯行列格納配列領域の大きさとに対応して、帯行列の更新によって壊れる可能性のある部分のデータを退避する手順と、
    前記作業領域に格納されている前記列ブロックのLU分解結果を用いて、前記帯行列を並列的に更新する手順と、
    前記退避部分のデータを該帯行列更新結果上に戻す手順とを含む行列演算を計算機に実行させることを特徴とする帯係数行列を持つ連立方程式の解法プログラム。
  2. 前記行列演算が、前記帯行列のLU分解のための演算であることを特徴とする請求項1記載の帯係数行列を持つ連立方程式の解法プログラム。
  3. 前記帯行列のLU分解のための演算において、
    前記帯行列の最も左上部の前記列ブロックに対応する前記行列演算の終了後に、該列ブロック最上部の対角部分に含まれる行と列とを前記帯行列から除外し、該除外後の行列の左上部の列ブロックに対応する前記行列演算を繰返し、最後に残った部分のLU分解を行うことを特徴とする請求項2記載の帯係数行列を持つ連立方程式の解法プログラム。
  4. 前記最後に残った部分のLU分解の終了後に、前記帯行列の並列的更新において行われた行入れ替えの情報を利用して、複数の列から構成される列ブロックの各列の左側で、ピボット選択に対応する行の入れ替えを行うとともに、該左側の行の入れ替えに対応して連立方程式における定数ベクトルの要素の内で該列ブロックに対応する要素の入れ替えを行う手順と、
    該列ブロックの対角部分の下三角行列に対応する連立方程式を解く手順と、
    該列ブロックの対角部分の下の行列を用いて行列ベクトル積の計算によってベクトルの更新を行う手順とを含む並列的行列演算をさらに計算機に実行させることを特徴とする請求項3記載の帯係数行列を持つ連立方程式の解法プログラム。
  5. 帯係数行列を持つ連立方程式の解法プログラムであって、
    該帯係数行列のLU分解演算の終了後に、該帯係数行列の更新において行われた行入れ替えの情報を利用して、複数の列から構成される列ブロックの各列の左側で、ピボット選択に対応する行の入れ替えを行うとともに、該左側での行の入れ替えに対応して連立方程式における定数ベクトルの要素の内で該列ブロックに対応する要素の入れ替えを行う手順と、
    該列ブロックの対角部分の下三角行列に対応する連立方程式を解く手順と、
    該列ブロックの対角部分の下の行列を用いて、行列ベクトル積の計算によってベクトルの更新を行う手順とを含む並列的行列演算を計算機に実行させることを特徴とする帯係数行列を持つ連立方程式の解法プログラム。
JP2004272173A 2004-09-17 2004-09-17 帯係数行列を持つ連立1次方程式の解法プログラム Pending JP2006085619A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2004272173A JP2006085619A (ja) 2004-09-17 2004-09-17 帯係数行列を持つ連立1次方程式の解法プログラム
US11/006,385 US7603402B2 (en) 2004-09-17 2004-12-07 Solution program recording media for simultaneous linear equations having band coefficient matrix

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004272173A JP2006085619A (ja) 2004-09-17 2004-09-17 帯係数行列を持つ連立1次方程式の解法プログラム

Publications (1)

Publication Number Publication Date
JP2006085619A true JP2006085619A (ja) 2006-03-30

Family

ID=36075270

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004272173A Pending JP2006085619A (ja) 2004-09-17 2004-09-17 帯係数行列を持つ連立1次方程式の解法プログラム

Country Status (2)

Country Link
US (1) US7603402B2 (ja)
JP (1) JP2006085619A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10013393B2 (en) 2015-06-02 2018-07-03 Fujitsu Limited Parallel computer system, parallel computing method, and program storage medium

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7792895B1 (en) * 2006-06-16 2010-09-07 Nvidia Corporation Efficient matrix multiplication on a parallel processing device
US7912889B1 (en) 2006-06-16 2011-03-22 Nvidia Corporation Mapping the threads of a CTA to the elements of a tile for efficient matrix multiplication
US7836118B1 (en) * 2006-06-16 2010-11-16 Nvidia Corporation Hardware/software-based mapping of CTAs to matrix tiles for efficient matrix multiplication
US20090292520A1 (en) * 2006-07-27 2009-11-26 Drexel University Solver for hardware based computing
JP4942095B2 (ja) * 2007-01-25 2012-05-30 インターナショナル・ビジネス・マシーンズ・コーポレーション マルチコア・プロセッサにより演算を行う技術
US8533251B2 (en) 2008-05-23 2013-09-10 International Business Machines Corporation Optimized corner turns for local storage and bandwidth reduction
US8250130B2 (en) * 2008-05-30 2012-08-21 International Business Machines Corporation Reducing bandwidth requirements for matrix multiplication
US9189458B1 (en) * 2013-03-05 2015-11-17 Xilinx, Inc. Parameter estimation
CN109635235B (zh) * 2018-11-06 2020-09-25 海南大学 一种自共轭矩阵的三角部分存储装置和并行读取方法

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0748204B2 (ja) 1988-07-08 1995-05-24 三菱電機株式会社 行列演算処理方法
CA2076293A1 (en) * 1991-10-11 1993-04-12 Prathima Agrawal Multiprocessor computer for solving sets of equations
JPH09153022A (ja) 1995-11-29 1997-06-10 Fujitsu Ltd メモリ分散型クロスバー並列計算機システムにおける行列の圧縮入力装置および方法
US6182270B1 (en) * 1996-12-04 2001-01-30 Lucent Technologies Inc. Low-displacement rank preconditioners for simplified non-linear analysis of circuits and other devices
JP3137033B2 (ja) 1997-05-27 2001-02-19 日本電気株式会社 不完全lu分解のフィルイン発生装置及びフィルイン発生方法
US6763519B1 (en) * 1999-05-05 2004-07-13 Sychron Inc. Multiprogrammed multiprocessor system with lobally controlled communication and signature controlled scheduling
JP3639206B2 (ja) 2000-11-24 2005-04-20 富士通株式会社 共有メモリ型スカラ並列計算機における並列行列処理方法、及び記録媒体
US7218789B2 (en) * 2000-12-01 2007-05-15 Lizardtech, Inc. Method for lossless encoding of image data by approximating linear transforms and preserving selected properties for image processing

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10013393B2 (en) 2015-06-02 2018-07-03 Fujitsu Limited Parallel computer system, parallel computing method, and program storage medium

Also Published As

Publication number Publication date
US7603402B2 (en) 2009-10-13
US20060064452A1 (en) 2006-03-23

Similar Documents

Publication Publication Date Title
US11424762B2 (en) Decoder for low-density parity-check codes
US10642613B2 (en) Arithmetic processing device for deep learning and control method of the arithmetic processing device for deep learning
EP1612948B1 (en) Message-passing decoding of low-density parity-check (LDPC) codes using pipeline node processing
JP3584053B2 (ja) 複合オペランド内の多ビット要素を選択するためのマスク
JP5914045B2 (ja) 画像処理装置、画像処理方法、及びプログラム
US9600763B1 (en) Information processing method, information processing device, and non-transitory recording medium for storing program
US20060002471A1 (en) Motion estimation unit
KR100789859B1 (ko) 이레귤러 저밀도 패리티 검사 부호 복호기 및 방법
EP4227886A1 (en) Matrix operation method and apparatus for image data, device, and storage medium
JP2006085619A (ja) 帯係数行列を持つ連立1次方程式の解法プログラム
JP6958027B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP2002163246A (ja) 共有メモリ型スカラ並列計算機における並列行列処理方法、及び記録媒体
US10402196B2 (en) Multi-dimensional sliding window operation for a vector processor, including dividing a filter into a plurality of patterns for selecting data elements from a plurality of input registers and performing calculations in parallel using groups of the data elements and coefficients
EP1143346A2 (en) Method and apparatus for matrix reordering
US9378186B2 (en) Data processing apparatus and method for performing a transform between spatial and frequency domains when processing video data
CN112862725A (zh) 用于计算的方法、计算设备和计算机可读存储介质
US20060013506A1 (en) Inverse transform method, apparatus, and medium
TWI417810B (zh) 影像增強方法、影像增強裝置及影像處理電路
CN113468469A (zh) 由计算机执行的特征图的卷积处理方法、装置和电子设备
WO2016181978A1 (ja) 行列作用装置、行列作用方法、およびプログラム
JP2022074442A (ja) 演算装置および演算方法
JP2021005242A (ja) 情報処理装置、情報処理プログラム、及び情報処理方法
JP3983188B2 (ja) 共有メモリ型スカラ並列計算機用逆行列の並列処理方法
CN113157979B (zh) 一种基于哑模块节点的内核模块关系图构建方法、系统及介质
KR102382336B1 (ko) 3중 대각행렬식 연산 방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20061025

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20080327

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080930

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20081201

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20090421