t-sakashita / rokko

Integrated Interface for libraries of eigenvalue decomposition
Boost Software License 1.0
10 stars 2 forks source link

frank, minij, laplacian, tridiagonal_toeplitz, helmertのテストがfailする #584

Open wistaria opened 3 years ago

wistaria commented 3 years ago

test/diagonalize/frank, minij, laplacian, tridiagonal_toeplitz, helmert lapack & row-major が fail

t-sakashita commented 3 years ago
solver=scalapack
163: /home/runner/work/rokko/rokko/test/diagonalize/helmert_mpi.cpp:57: Failure
163: The difference between rokko::norm_diff(u.transpose().col(i), locZ.col(i)) and 0 is 1, which exceeds eps, where
163: rokko::norm_diff(u.transpose().col(i), locZ.col(i)) evaluates to 1,
163: 0 evaluates to 0, and
163: eps evaluates to 1.0000000000000001e-05.
163: /home/runner/work/rokko/rokko/test/diagonalize/helmert_mpi.cpp:57: Failure
163: The difference between rokko::norm_diff(u.transpose().col(i), locZ.col(i)) and 0 is 1, which exceeds eps, where
163: rokko::norm_diff(u.transpose().col(i), locZ.col(i)) evaluates to 1,
163: 0 evaluates to 0, and
163: eps evaluates to 1.0000000000000001e-05.
163: /home/runner/work/rokko/rokko/test/diagonalize/helmert_mpi.cpp:57: Failure
163: The difference between rokko::norm_diff(u.transpose().col(i), locZ.col(i)) and 0 is 1, which exceeds eps, where
163: rokko::norm_diff(u.transpose().col(i), locZ.col(i)) evaluates to 1,
163: 0 evaluates to 0, and
163: eps evaluates to 1.0000000000000001e-05.
163: /home/runner/work/rokko/rokko/test/diagonalize/helmert_mpi.cpp:57: Failure
163: The difference between rokko::norm_diff(u.transpose().col(i), locZ.col(i)) and 0 is 0.99999999999999989, which exceeds eps, where
163: rokko::norm_diff(u.transpose().col(i), locZ.col(i)) evaluates to 0.99999999999999989,
163: 0 evaluates to 0, and
163: eps evaluates to 1.0000000000000001e-05.

https://github.com/t-sakashita/rokko/runs/2868623006?check_suite_focus=true

t-sakashita commented 3 years ago

成功

失敗

t-sakashita commented 3 years ago

坂下のMacでは、test/diagonalizeのctestは、全て成功している。 コンパイラは、mpicxx-mpich-clang90。

wistaria commented 3 years ago

macOS 11.4 + homebrew + gcc 11.1 + openmpi でも成功

t-sakashita commented 3 years ago

Untutu18のvirtualboxで実行してみた。 test/diagonalize/helmert_mpiは、正常終了した。

mpirun -np 4 --oversubscribe ./helmert_mpi

ただし、scalapackのみ。

t-sakashita commented 3 years ago

test/diagonalize/helmert_mpi.cppの実行エラーとなっているのは、Elementalを使った場合。 Macでも再現できた。

t-sakashita commented 3 years ago

example/cxx/dense/helmert_mpi.cppでも、Elementalを用いた場合、固有ベクトルの残差が誤っている。

largest eigenvalues: 9.999999999999989342 8.999999999999992895 8.000000000000001776 6.999999999999997335 6.000000000000002665 4.999999999999997335 4.000000000000000888 3.000000000000001776 1.999999999999998668 1.000000000000000888
residual of the largest eigenvalue/vector: |x A x - lambda| = 9.999999999999989342

9 に関連

73 に関連

t-sakashita commented 3 years ago

そもそも、ElementalのPMRRRは、ブロックサイクリック行列ではなく、列方向のみ分割している。 Elementalの使用時は、固有ベクトルのチェックを行わないようにした。 ac6436d5a9b4fb93009f5f3c5b80cacb39495d6b