Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
wistaria opened this issue Mar 21, 2021 · 8 comments

Comments

@wistaria
Copy link
Collaborator

wistaria commented Mar 21, 2021

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

@wistaria wistaria changed the title frank, minij, laplacian, tridiagonal_toeplitz, helmertnofailする frank, minij, laplacian, tridiagonal_toeplitz, helmertのテストがfailする Mar 21, 2021
@t-sakashita
Copy link
Owner

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
Copy link
Owner

成功

  • test_diagonalize_helmert_mpi-1
  • test_diagonalize_helmert_mpi-2
  • test_diagonalize_helmert_mpi-3

失敗

  • test_diagonalize_helmert_mpi-4

@t-sakashita
Copy link
Owner

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

@wistaria
Copy link
Collaborator Author

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

@t-sakashita
Copy link
Owner

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

mpirun -np 4 --oversubscribe ./helmert_mpi

ただし、scalapackのみ。

@t-sakashita
Copy link
Owner

t-sakashita commented Jun 23, 2021

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

@t-sakashita
Copy link
Owner

t-sakashita commented Jun 23, 2021

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
Copy link
Owner

t-sakashita commented Jun 24, 2021

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants