ブロックLU分解プログラム

        2003/09/08 日立製作所 & 早稲田大学 後 保範 ( Ushiro Yasunori )

1. 概要

 密実行列を係数とする連立一次方程式Ax=bの係数AをブロックGauss消去法でLU分解し、
数値解xを計算するFORTRAN及びCのソースプログラムを掲載する。
本プログラムは内容を理解してもらうことを目的とし、計算時間及び使用メモリ量の効率化
は目的としていない。本格的なプログラムは金田研究室から他のプログラムと合わせて
公開する予定。配列の格納順はCとFORTRANで異なる。CとFORTRANのそれぞれの配列順を
考慮したプログラムになっている。

2. 軸交換のないプログラム

(1) 特異性チェックの無いプログラム

 (a) 計算方法 : Aをブロックガウス消去法でLU分解し、LUx=bの解xを前進後退代入でもとめる。
 (b) プログラム : FORTRANCのソースプログラム

3. 部分軸交換付きプログラム

(1) 対象行全体を交換するプログラム

 (a) 計算方法 : Aをブロックガウス消去法でLU分解し、LUx=bの解xを前進後退代入でもとめる。
 (b) プログラム : FORTRANCのソースプログラム

(2) 対象行の右側行だけ交換するプログラム

 (a) 計算方法 : Aをブロックガウス消去法でLU分解し、LUx=bの解xを前進後退代入でもとめる。
 (b) プログラム : FORTRANCのソースプログラム

(3) キャッシュ用対策プログラム

 (a) 計算方法 : Aをブロックガウス消去法でLU分解し、LUx=bの解xを前進後退代入でもとめる。
        主力部がブロックサイズ(MB×MB)単位に処理するキャッシュ対策がなされている。
 (b) プログラム : FORTRANCのソースプログラム

5. テスト用プログラム

(1) テストメインプログラム

 (a) テスト対象: 4種類のブロックLU分解プログラムを一回にテストする。
       2000次元までの乱数データの行列で、結果の精度、計算速度及びMFLOPSを
       各LU分解法ごとに出力する。計算する次元数(N)とブロックサイズ(MB)を画面より与える。
 (b) プログラム : FORTRANCのソースプログラム

(2) 行列作成プログラム

 (a) 作成行列: IDAは行列の種類でIDA=0は非対角行列が全て1で対角が1+SIG(入力値)となる。
       IDA=1なら全要素を0.0〜1.0の一様乱数で作成する。
       IDBは右辺行列の指定であるが、現在は解xが1.0となるようにbを作成。
 (b) プログラム : FORTRANCのソースプログラム