RokkoWrapperParallelDenseSolvers - t-sakashita/rokko GitHub Wiki
密行列ソルバ(MPI並列版)向けラッパーの実装
ラッパーROKKO_pdsyevシリーズに、以下を行うラッパーを用意
- 作業配列のサイズ取得のための固有値ルーチンの呼び出し
- 計算のための固有値ルーチンの呼び出し
標準出力
- エラーメッセージや
verboseの出力は、プロセス0でのみ行うようにする。
検討
- LAPACKの関数pxerblaでメッセージを表示するようにする?
- ScaLAPACKのラッパーでも、LAPACKE_malloc、lapack_intを使うべきか。
ソルバのエラー プロセス数が1のとき、エラーが出る。
- pdsyevd(Clangでビルド)
$ mpirun -np 1 ./frank_mpi_mapping scalapack:pdsyevd
Eigenvalue decomposition of Frank matrix
library:routine = scalapack:pdsyevd
num_procs = 1
routine = pdsyevd
dimension = 10
{ 0, 0}: On entry to PDORMTR parameter number 16 had an illegal value
largest eigenvalues: 44.766 5.0489 1.873 1 0.6431 0.46523 0.36621 0.30798 0.27379 0.25568
residual of the largest eigenvalue/vector: |x A x - lambda| = 43.951
これは、ScaLAPACKのバグのようだ。 https://listserv.fysik.dtu.dk/pipermail/gpaw-users/2013-September/002347.html
- pdsyevx(これはClangだけかも)
$ mpirun -np 1 ./frank_mpi_mapping scalapack:pdsyevx
Eigenvalue decomposition of Frank matrix
library:routine = scalapack:pdsyevx
num_procs = 1
routine = pdsyevx
dimension = 10
--------------------------------------------------------------------------
mpirun noticed that process rank 0 with PID 10896 on node sakashita exited on signal 6 (Abort trap: 6).
--------------------------------------------------------------------------
zsh: exit 134 mpirun -np 1 ./frank_mpi_mapping scalapack:pdsyevx
配列の宣言の仕方を変えるとエラーは消える。
- エラー出る:
double work[1]; - エラー出ない:
double* work = new double[1];