completeOrthogonalDecomposition() plus EIGEN_USE_LAPACKE_STRICT has the possibility to get program stuck forever!
Summary
Environment
- Operating System : MacOS
- Architecture : x64
- Eigen Version : 3.3.9
- Compiler Version : Apple clang version 12.0.5
-
Compile Flags :
-O3 -march=native -DEIGEN_USE_LAPACKE_STRICT -DEIGEN_USE_BLAS -DNDEBUG -Xclang -fopenmp -std=gnu++2a - Vector Extension : AVX2
Minimal Example
//run 700 times with different MatrixXd C!
//auto Start = std::chrono::high_resolution_clock::now();
auto CPseudoInverse = C.transpose().completeOrthogonalDecomposition();
Eigen::Matrix<double, 3, -1, RowMajor> Tdelta(3, Ring.size() * 3);
for (ptrdiff_t J{}; J < 3; ++J) {
VectorXd ToSolve = VectorXd::Zero(7);
ToSolve(0) = Delta(I, J);
ToSolve(1 + (J + 2) % 3) = -Delta(I, (J + 1) % 3);
ToSolve(1 + (J + 1) % 3) = Delta(I, (J + 2) % 3);
Tdelta.row(J) = CPseudoInverse.solve(ToSolve).transpose();
}
//auto End = std::chrono::high_resolution_clock::now();
//std::chrono::duration<double> Duration = End - Start;
//std::cout << Duration.count() << "s\n";
Steps to reproduce
- random generate MatrixXd C(In my program They are actually preselected with different size) The MatrixXd C causes problem is
-2.18034 0.158927 -0.931852 -0.258819 1 0 0
-1.73205 0 -1 -0 1 2.58635 2.23607
-1.28376 2.92163 -0.931852 0.258819 1 0 0
-0.896575 0 -1 0.346065 1 0.0424953 0.0107692
-0.732051 0.144494 -1.82843 -0.267949 1 -0.0702027 0.119864
-1.41421 0.119293 -1.82843 -0.55051 1 0 nan
-2.44949 6.93681e-310 -1 -0.55051 1 nan 0
-2 6.95326e-310 -1.82843 -1 1 0 9.88131e-324
-2.56753 9.88131e-324 -1 -0.346065 1 3.45846e-322 6.95326e-310
-2.73205 0 -1.82843 0.267949 1 6.95326e-310 9.88131e-324
-2.04989 nan -1.82843 0.55051 1 9.88131e-324 0
-1.01461 0 -1 0.55051 1 0 nan
-1.4641 2.63051e-310 -1.82843 1 1 nan 0
0.258819 0.931852 9.88131e-324 -2.18034 nan 1 9.88131e-324
0 1 0 -1.73205 0 1 6.95326e-310
-0.258819 0.931852 nan -1.28376 0 1 9.88131e-324
-0.346065 1 0 -0.896575 6.95326e-310 1 0
0.267949 1.82843 nan -0.732051 9.88131e-324 1 nan
0.55051 1.82843 6.95326e-310 -1.41421 0 1 0
0.55051 1 9.88131e-324 -2.44949 nan 1 9.88131e-324
1 1.82843 0 -2 0 1 6.95326e-310
0.346065 1 nan -2.56753 0 1 9.88131e-324
-0.267949 1.82843 0 -2.73205 6.95326e-310 1 0
-0.55051 1.82843 nan -2.04989 9.88131e-324 1 nan
-0.55051 1 6.95326e-310 -1.01461 0 1 0
-1 1.82843 9.88131e-324 -1.4641 nan 1 0
-0.931852 0.258819 2.18034 nan 0 nan 1
-1 0 1.73205 0 4.24399e-314 6.95326e-310 1
-0.931852 -0.258819 1.28376 9.88131e-324 6.95326e-310 9.88131e-324 1
-1 -0.346065 0.896575 6.95326e-310 9.88131e-324 0 1
-1.82843 0.267949 0.732051 9.88131e-324 0 nan 1
-1.82843 0.55051 1.41421 6.95313e-310 nan 0 1
-1 0.55051 2.44949 nan 0 nan 1
-1.82843 1 2 0 2.122e-314 6.95326e-310 1
-1 0.346065 2.56753 8.48799e-314 6.95326e-310 9.88131e-324 1
-1.82843 -0.267949 2.73205 6.95326e-310 9.88131e-324 0 1
-1.82843 -0.55051 2.04989 9.88131e-324 0 nan 1
-1 -0.55051 1.01461 0 nan 0 1
-1.82843 -1 1.4641 nan 0 nan 1
The VectorXd ToSolve is
5.5631e-07
0
0.402857
-1.38778e-17
0
0
0
- The program stuck forever
- ...
What is the current bug behavior?
The program stuck forever
What is the expected correct behavior?
solve it just as when I remove EIGEN_USE_LAPACKE_STRICT!
Anything else that might help
-
lapacke version:3.9.1 (from homebrew formula lapack) -
OpenBLAS version:0.3.13 (from homebrew)