密対称実数行列の固有値・固有ベクトル計算に関するライブラリの実行

以下に、密対称実数行列の固有値・固有ベクトル計算を行うテスト用プログラム ABCLibTestDRSAllEigVec.f の実行例をのせます。
なお以下の出力例は、バージョン変更等により形式が変わることがありますので、ご注意ください。

この例での指定ファイル .ABCLibDRSAllEigVec は以下の通りです。


-ort CGS  -autotune no  -starttunesize 128  -maxtunesize 512
-tunestride100 128  -tunestride1000 1000  -print yes


以下に4PEを用いて、100次元のFrank行列の固有値と固有ベクトルを、固有値の絶対値が大きいほうから数えて10番目から60番目までの固有値51個と、それに対応する固有ベクトル51個を求めた結果をのせます。


$ mpirun -np 4 -machinefile nodeinfo ABCLibTestDRSAllEigVec

=== Parallel Eigensolver Check Program ===
Parallel Eigensolver on MPI
ABCLibDRSAllEigVec
-------------------------------------------
ABCLib Ver. 1.00
Composed by T. Katagiri, October 2004
-------------------------------------------
Problem size >
100
Start number of eigenvectors >
10
End number of eigenvectors >
60
ncelx=
2
ncely =
2

!!!! Warning !!!!
There is no 'autotuneTRD.dat' file.
I will set AD-HOC parameters for TriRed.
I strongly recommend doing auto-tuning.
!!!! Warning !!!!
There is no 'autotuneHIT.dat' file.
I will set AD-HOC parameters for HIT.
I strongly recommend doing auto-tuning.
Auto-tuned :(Tri) 100 0 8 6
Auto-tuned (HIT): 100 1 1
Tridiagonalization Time = 0.298 [sec]
Re-distribution Time = 0.002 [sec]
Calculating Eigenvalues Time = 0.003 [sec]
------ All Eigenvalues Cal. Time = 0.303 [sec] ------
Gathering Eigenvalues Time = 0.038 [sec]
SubMatrix Indexes : 1 100
Number of Groups : 1
Max clustered eigenvalues : 51
Constant for convergence : 4.9652297362006328E-012
Distance for orthogonalization : 6.391867118793334
fact : 1.0000000000000000E-003
Method for ort. : Peters-Wilkinson
Inverse Iteration : CGS
Calculating Eigenvectors Time = 0.629 [sec]
Householder Inverse Iteration Time = 0.084 [sec]
myid= 0 Abnormal return: error code 4000
Check of maximal error for eigenvalues....
End of checking.
Check of error for eigenvectors...
End of checking.
Check of error for the eigensystem....
End of checking.
=== Result
================================================
n = 100 ,Number of processors = 4
Number of eigenvalues and eigenvectors = 51
Start Eigenvalue No. 10 / End Eigenvalue No. 60
Test Matrix:
Frank
Eigenvalue Max Error = 5.1249242025868220E-014
Eigenvector Error of ||X^T X - I|| = 7.7850102906234229E-014
Eigensystem Error max_i||A x_i - Λ_i x_i|| = 1.6640934173348136E-011
Total Calculation Time = 1.059 [sec]



エルミート行列の固有値・固有ベクトル計算に関するライブラリの実行

以下に、エルミート行列の全固有値・全固有ベクトル計算を行うテスト用プログラム ABCLibTestHerAllEigVec.f の実行例をのせます。
なお以下の出力例は、バージョン変更等により形式が変わることがありますので、ご注意ください。

この例での指定ファイル .ABCLibHerAllEigVec は以下の通りです。

 -ort MGS  -autotune no  -starttunesize 128  -maxtunesize 512
 -tunestride100 128  -tunestride1000 1000  -print yes

以下に4PEを用いた結果をのせます。


$ mpirun -np 4 -machinefile nodeinfo ABCLibTestHerAllEigVec

=== Parallel Eigensolver Check Program ===
Parallel Eigensolver on MPI
ABCLibHerAllEigVec
-------------------------------------------
ABCLib ver. 1.00
Composed by T. Katagiri, October 2004
-------------------------------------------
ncelx =
2
ncely =
2

!!!! Warning !!!!
There is no 'autotuneTRD.dat' file.
I will set AD-HOC parameters for TriRed.
I strongly recommend doing auto-tuning.
!!!! Warning !!!!
There is no 'autotuneHIT.dat' file.
I will set AD-HOC parameters for HIT.
I strongly recommend doing auto-tuning.
Auto-tuned :(Tri) 8 0 8 6
Auto-tuned (HIT): 8 1 1
Tridiagonalization Time = 0.965 [sec]
Re-distribution Time = 0.007 [sec]
Calculating Eigenvalues Time = 0.002 [sec]
------ All Eigenvalues Cal. Time = 0.974 [sec] ------
Gathering Eigenvalues Time = 0.038 [sec]
SubMatrix Indexes : 1 3
Number of Groups : 3
Max clustered eigenvalues : 0
Constant for convergence : 1.2414855315468873E-014
Distance for orthogonalization : 2.7931648995851659E-002
fact : 1.0000000000000000E-003
Method for ort. : Peters-Wilkinson
Inverse Iteration : MGS
Calculating Eigenvectors Time = 0.000 [sec]
Householder Inverse Iteration Time = 0.003 [sec]
myid= 0 Abnormal return: error code 4000
Check of maximal error for eigenvalues....
End of checking.
Check of error for eigenvectors....
End of checking.
Check of error for the eigensystem....
End of checking.
=== Result
================================================
n = 4 ,Number of processors = 4
Test Matrix No: 1
Eigenvalue Max Error = 1.4924678768188513E-015
Eigenvector Error of Real ||X^T X - I|| = 2.9447165805096462E-011
Eigenvector Error of Her ||X^H X - I|| = 3.7867080775839170E-011
Eigensystem Error of Hermitian:
max_i||A x_i - Λ_i x_i|| = 4.9365182464366839E-011
Total Calculation Time = 1.062 [sec]



Gram-Schmidt法による直交化に関するライブラリの実行

以下に、Gram-Schmidt法による直交化を行うテスト用プログラム ABCLibTestQRD.fの実行例をのせます。
なお以下の出力例は、バージョン変更等により形式が変わることがありますので、ご注意ください。


この例での指定ファイル .ABCLibQRD は以下の通りです。


 -ort MGS  -autotune no  -starttunesize 128  -maxtunesize 512
 -tunestride100 128  -tunestride1000 1000  -print yes


以下に4PEを用いて、100次元の乱数ベクトル100個を直交化させる実行例をのせます。

$ mpirun -np 4 -machinefile nodeinfo ABCLibTestQRD

=== Parallel Eigensolver Check Program ===
Parallel QR Decomposition on MPI
ABCLibDRSAllEigVec
-------------------------------------------
ABCLib ver. 1.00
Composed by T. Katagiri, October 2004
-------------------------------------------
problem size >
100
ncelx=
2
ncely =
2

!!!! Warning !!!!
There is no 'autotuneMGSAO.dat' file.
I will set AD-HOC parameters for TriRed.
I strongly recommend doing auto-tuning.
Auto-tuned : 4 4 8 4 8
Tridiagonalization Time = 0.798 [sec]
----- Orthogonalization Time = 0.798 [sec] -----
Normal return
Check of error for vectors....
End of checking.
=== Result
================================================
n = 100 ,Number of processors = 4
Test Matrix:
Random
Orthogonal Error of ||X^T X - I|| = 5.8215990320764321E-013
Total Calculation Time = 0.862 [sec]



インストール時自動チューニングの実行例


以下のように、.ABCLibDRSAllEigVec を設定した場合のインストール時自動チューニングの実行例をのせます。

 -ort MGS  -autotune yes  -starttunesize 128  -maxtunesize 512
 -tunestride100 128  -tunestride1000 1000  -print yes


上記のファイルを実行ディレクトリにおいたあと、以下のコマンドを実行します。

$ mpirun -np 4 -machinefile nodeinfo ABCLibTestDRSAllEigVec


上記のコマンドを実行後、問題サイズなど入力を求めてくるので、以下のように入力します。

なお問題サイズ、求める固有値の開始番号、および終了番号については.ABCLibDRSAllEigVecファイルの値が利用されるので、任意の数値で結構です。
また以下の出力例は、バージョン変更等により形式が変わることがありますので、ご注意ください。

Problem size >
100
Start number of eigenvectors >
2
End number of eigenvectors >
2
ncelx=
2
ncely =
2


入力後、以下のようなログが出力され、自動チューニングモードに入ります。


!!!! Warning !!!!
There is no 'autotuneTRD.dat' file.
I will set AD-HOC parameters for TriRed.
I strongly recommend doing auto-tuning.
!!!! Warning !!!!
There is no 'autotuneHIT.dat' file.
I will set AD-HOC parameters for HIT.
I strongly recommend doing auto-tuning.
===== AUTO Tuning Mode ======
-------------------------------------------
ABCLib ver. 1.00
Composed by T. Katagiri, October 2004
-------------------------------------------
=== Auto-tuning for Tridiagonalization ===
-------------------------------------------
ABCLib ver. 1.00
Composed by T. Katagiri, October 2004
-------------------------------------------
Now start tuning...
1 1 Initial switches: 0 8 6
n= 128 Time= 0.5255729999999992 iupdate_sw= 1
n= 128 Time= 0.2111440000000004 iupdate_sw= 2
n= 128 Time= 0.1672940000000001 iupdate_sw= 3
n= 128 Time= 0.1705660000000000 iupdate_sw= 4
n= 128 Time= 0.1708849999999993 iupdate_sw= 5
n= 128 Time= 0.1729319999999990 iupdate_sw= 6
n= 128 Time= 0.1736940000000011 iupdate_sw= 7
n= 128 Time= 0.1667370000000008 iupdate_sw= 8
n= 128 Time= 0.1737360000000008 iupdate_sw= 9
n= 128 Time= 0.1685940000000001 iupdate_sw= 10
n= 128 Time= 0.1730620000000007 iupdate_sw= 11
n= 128 Time= 0.1696140000000010 iupdate_sw= 12
n= 128 Time= 0.1680330000000017 iupdate_sw= 13
n= 128 Time= 0.1737040000000021 iupdate_sw= 14
n= 128 Time= 0.1699410000000019 iupdate_sw= 15
n= 128 Time= 0.1740300000000010 iupdate_sw= 16
....


自動チューニングが全て終了後、以下のようなファイルが自動生成されています。


$ ls

ABCLibTestDRSAllEigVec     autotuneTRDana.dat    autotuneHITana.dat
autotuneTRDana_tmp.dat     MGSAOblLSM.dat      autotuneHITana_tmp.dat
autotuneTRD.dat          nodeinfo            autotuneHIT.dat
TrdCommLSM.dat          autotuneMGSAOana.dat  TrdMatVecLSM.dat
autotuneMGSAOana_tmp.dat   HITCommLSM.dat      TrdUpdLSM.dat
autotuneMGSAO.dat        HITKerLSM.dat


ここで、三重対角化ルーチンの自動チューニング結果(最適パラメタ)を保存するパラメタ情報ファイル autotuneTRD.dat の中身は、以下のとおりです。

128 1 8 8
256 0 8 3
384 0 7 4
512 0 4 3
-1 0 8 6
-1 0 8 6
-1 0 8 6
-1 0 8 6
-1 0 8 6
-1 0 8 6
-1 0 8 6
-1 0 8 6
-1 0 8 6
-1 0 8 6
-1 0 8 6
-1 0 8 6
-1 0 8 6
-1 0 8 6
-1 0 8 6
-1 0 8 6


また、Gram-Schmidt直交化ルーチンの自動チューニングログを解析した結果を保存するファイル autotuneMGSAOana.dat の中身は、以下のとおりです。


=== ABCLib_QRD Tuning Log Analysis Result
=========================================
Number of PE: 4/Tuning Time: 104.148 [Sec.]
=========================================
ProblemSize | Const [Sec.] (Parameter) | Worst [Sec.] (Parameter) |
Best [Sec.] (Parameter) | C/B | W/B
128 | 0.0250( 4, 4, 8, 4, 8) | 0.0798( 1, 4, 8, 4, 8) | 0.0245( 5, 1, 3, 4, 8) | 1.022 | 3.255
256 | 0.0940( 4, 4, 8, 4, 8) | 0.0988( 1, 4, 8, 4, 8) | 0.0937( 5, 1, 1, 3, 2) | 1.003 | 1.055
384 | 0.2083( 4, 4, 8, 4, 8) | 0.2173( 1, 4, 8, 4, 8) | 0.2042( 5, 2, 5, 4, 5) | 1.020 | 1.064
512 | 0.3729( 4, 4, 8, 4, 8) | 0.4359( 1, 4, 8, 4, 8) | 0.3664( 6, 2, 4, 3, 6) | 1.018 | 1.190




実行起動前自動チューニングの実行例

実行起動前自動チューニングとは、問題サイズや係数行列の情報が固定された場合に行うインストール時自動チューニングよりも精度の高い最適化処理のことです。

以下に実行起動前自動チューニングの例をのせます。


例3: -autotune yes  -starttunesize 1234  -maxtunesize 1234
    -tunestride100 100  -tunestride1000 1000  -ort MGS  
    -beo yes  -print yes



例3では、-starttunesizeと-maxtunesizeが1234次元で同一なので、1234次元のみパラメタを最適化します。この自動チューニングの後、実行時に1234次元を指定することで、推定でない最適パラメタの設定がなされます。

このことにより、インストール時自動チューニングを用いて最適化した場合よりも高速なライブラリ実行が期待できます。