Eigen3 Boost MPFR segfault, когда выравнивание отключено - PullRequest
2 голосов
/ 13 октября 2019

Я сталкиваюсь со странной проблемой segfault, когда пытаюсь использовать Boost.Multiprecision, чтобы обернуть MPFR и отключить предположения выравнивания Eigen.

Пример тестового кода:

#include <boost/multiprecision/mpfr.hpp>
#include <Eigen/Dense>
#include <iostream>

int main(int argc, char** argv)
{
  typedef boost::multiprecision::number<
    boost::multiprecision::mpfr_float_backend<71,
      boost::multiprecision::allocate_stack>,
    boost::multiprecision::et_off>
    real256;

  Eigen::Matrix<real256, 9, 9> mat;
  // set mat to identity matrix
  for (size_t i = 0; i < 9; ++i)
  {
    for (size_t j = 0; j < 9; ++j)
    {
      mat(i, j) = 0;
    }
  }
  for (size_t i = 0; i < 9; ++i)
  {
    mat(i, i) = 1;
  }
  std::cout << mat << std::endl;
  Eigen::Matrix<real256, 9, 9> mat2 = mat2.inverse();
  std::cout << mat2 << std::endl;
}

Когда япостройте это, используя gcc / clang с «минимальным» набором опций, он отлично работает:

g++ mat_test.cpp -L/usr/lib/x86_64-linux-gnu -lmpfr -I/usr/include/eigen3 -o mat_test

Однако, когда я пытаюсь отключить предположения о выравнивании eigen, во время обратного вычисления он вызывает ошибки.

g++ mat_test.cpp -L/usr/lib/x86_64-linux-gnu -lmpfr -I/usr/include/eigen3 -DEIGEN_MAX_ALIGN_BYTES=0 -o mat_test

Обратите внимание, что этот segfault не возникает, если я изменяю матрицы, чтобы они содержали двойные или плавающие числа. Я заметил, что раньше была ошибка в оболочках MPFR Boost Multiprecision, когда самостоятельное назначение могло вызывать странные проблемы, однако я полагаю, что я использую достаточно новую версию Boost, чтобы исправить это (1.65.1).

Есть ли что-то конкретное в конкретных опциях, которые я использую для определения типов Boost MPFR, которые негативно взаимодействуют с Eigen?

Я пытался использовать gdb, чтобы отследить, где происходит проблема, но я не могудействительно имеет много смысла в том, что же является настоящей проблемой.

Вот трассировка стека, которую я получил от gdb:

#0  __memmove_avx_unaligned_erms ()
    at ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:227
#1  0x00007ffff79600b5 in mpfr_set4 ()
    from /usr/lib/x86_64-linux-gnu/libmpfr.so.6
#2  0x000055555555cdda in boost::multiprecision::backends::detail::mpfr_float_imp<71u, (boost::multiprecision::mpfr_allocation_type)0>::operator= (this=0x7fffffff6d20, o=...)
    at /usr/include/boost/multiprecision/mpfr.hpp:414
#3  0x000055555555c651 in boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>::operator= (this=0x7fffffff6d20, o=...)
    at /usr/include/boost/multiprecision/mpfr.hpp:709
#4  0x000055555555c0c1 in boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>::operator= (this=0x7fffffff6d20, e=...)
    at /usr/include/boost/multiprecision/number.hpp:159                                                                                          
#5  0x00005555555649d1 in Eigen::internal::gemm_pack_rhs<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, long, Eigen::internal::blas_data_mapper<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, long, 0, 0>, 4, 0, false, true>::operator() (this=0x7fffffff542f, blockB=0x7fffffff6d20, rhs=..., depth=4, cols=9, stride=9, offset=0)
    at /usr/include/eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h:1988
#6  0x0000555555562d19 in Eigen::internal::triangular_solve_matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, long, 1, 5, false, 0, 0>::run (size=9, otherSize=9, _tri=0x7fffffff99e0, triStride=9, _other=0x7fffffffc480, otherStride=9, blocking=...)  
    at /usr/include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix.h:153
#7  0x000055555556f934 in Eigen::internal::triangular_solver_selector<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> const, Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9>, 1, 5, 0, -1>::run (lhs=..., rhs=...)                                          
    at /usr/include/eigen3/Eigen/src/Core/SolveTriangular.h:102
#8  0x000055555556ece1 in Eigen::TriangularViewImpl<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> const, 5u, Eigen::Dense>::solveInPlace<1, Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > (this=0x7fffffff8220, _other=...)                           
    at /usr/include/eigen3/Eigen/src/Core/SolveTriangular.h:179
#9  0x000055555556d757 in Eigen::TriangularViewImpl<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> const, 5u, Eigen::Dense>::solveInPlace<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > (this=0x7fffffff8220, other=...)                               
    at /usr/include/eigen3/Eigen/src/Core/TriangularMatrix.h:511
#10 0x000055555556b541 in Eigen::PartialPivLU<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> >::_solve_impl<Eigen::CwiseNullaryOp<Eigen::internal::scalar_identity_op<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0> >, Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> >, Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > (this=0x7fffffff99e0, rhs=..., dst=...)
    at /usr/include/eigen3/Eigen/src/LU/PartialPivLU.h:240
#11 0x0000555555569f3d in Eigen::internal::Assignment<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9>, Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> >, Eigen::CwiseNullaryOp<Eigen::internal::scalar_identity_op<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0> >, Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > >, Eigen::internal::assign_op<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0> >, Eigen::internal::Dense2Dense, void>::run (dst=..., src=...)
    at /usr/include/eigen3/Eigen/src/Core/Solve.h:147
#12 0x0000555555567ca4 in Eigen::internal::call_assignment_no_alias<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9>, Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> >, Eigen::CwiseNullaryOp<Eigen::internal::scalar_identity_op<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0> >, Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > >, Eigen::internal::assign_op<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0> > > (dst=..., src=..., func=...)
    at /usr/include/eigen3/Eigen/src/Core/AssignEvaluator.h:836                                                                      
#13 0x0000555555563690 in Eigen::internal::call_assignment<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9>, Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> >, Eigen::CwiseNullaryOp<Eigen::internal::scalar_identity_op<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0> >, Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > >, Eigen::internal::assign_op<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0> > >(Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9>&, Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> >, Eigen::CwiseNullaryOp<Eigen::internal::scalar_identity_op<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0> >, Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > > const&, Eigen::internal::assign_op<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0> > const&, Eigen::internal::enable_if<!Eigen::internal::evaluator_assume_aliasing<Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> >, Eigen::CwiseNullaryOp<Eigen::internal::scalar_identity_op<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0> >, Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > >, Eigen::internal::evaluator_traits<Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> >, Eigen::CwiseNullaryOp<Eigen::internal::scalar_identity_op<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0> >, Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > > >::Shape>::value, void*>::type) (dst=..., src=..., func=...)
    at /usr/include/eigen3/Eigen/src/Core/AssignEvaluator.h:804                                                                                     
#14 0x0000555555561742 in Eigen::internal::call_assignment<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9>, Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> >, Eigen::CwiseNullaryOp<Eigen::internal::scalar_identity_op<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0> >, Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > > > (dst=..., src=...)
    at /usr/include/eigen3/Eigen/src/Core/AssignEvaluator.h:782                                                                                                      
#15 0x0000555555560637 in Eigen::PlainObjectBase<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> >::_set<Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> >, Eigen::CwiseNullaryOp<Eigen::internal::scalar_identity_op<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0> >, Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > > > (this=0x7fffffffc480, other=...)
    at /usr/include/eigen3/Eigen/src/Core/PlainObjectBase.h:710                                                                                           
#16 0x000055555555ef35 in Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9>::operator=<Eigen::Solve<Eigen::PartialPivLU<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> >, Eigen::CwiseNullaryOp<Eigen::internal::scalar_identity_op<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0> >, Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > > > (this=0x7fffffffc480, other=...)
    at /usr/include/eigen3/Eigen/src/Core/Matrix.h:225
#17 0x000055555555db42 in Eigen::internal::Assignment<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9>, Eigen::Inverse<Eigen::PartialPivLU<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > >, Eigen::internal::assign_op<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0> >, Eigen::internal::Dense2Dense, void>::run (dst=..., src=...)
    at /usr/include/eigen3/Eigen/src/LU/PartialPivLU.h:574
#18 0x000055555555cda8 in Eigen::internal::call_assignment_no_alias<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9>, Eigen::Inverse<Eigen::PartialPivLU<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > >, Eigen::internal::assign_op<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0> > > (dst=..., src=..., func=...)     
    at /usr/include/eigen3/Eigen/src/Core/AssignEvaluator.h:836
#19 0x000055555555c62a in Eigen::internal::call_assignment<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9>, Eigen::Inverse<Eigen::PartialPivLU<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > >, Eigen::internal::assign_op<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0> > >(Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9>&, Eigen::Inverse<Eigen::PartialPivLU<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > > const&, Eigen::internal::assign_op<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0> > const&, Eigen::internal::enable_if<!Eigen::internal::evaluator_assume_aliasing<Eigen::Inverse<Eigen::PartialPivLU<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > >, Eigen::internal::evaluator_traits<Eigen::Inverse<Eigen::PartialPivLU<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > > >::Shape>::value, void*>::type) (dst=..., src=..., func=...)                                           
    at /usr/include/eigen3/Eigen/src/Core/AssignEvaluator.h:804
#20 0x000055555555c086 in Eigen::internal::call_assignment<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9>, Eigen::Inverse<Eigen::PartialPivLU<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > > > (dst=..., src=...)                                     
    at /usr/include/eigen3/Eigen/src/Core/AssignEvaluator.h:782
#21 0x000055555555bb35 in Eigen::PlainObjectBase<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> >::_set<Eigen::Inverse<Eigen::PartialPivLU<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > > > (this=0x7fffffffc480, other=...)                          
    at /usr/include/eigen3/Eigen/src/Core/PlainObjectBase.h:710
#22 0x000055555555b54d in Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9>::operator=<Eigen::Inverse<Eigen::PartialPivLU<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > > > (this=0x7fffffffc480, other=...)                                              
    at /usr/include/eigen3/Eigen/src/Core/Matrix.h:225
#23 0x000055555555b055 in Eigen::internal::compute_inverse<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9>, Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9>, 9>::run (matrix=..., result=...)
    at /usr/include/eigen3/Eigen/src/LU/InverseImpl.h:28          
#24 0x000055555555ac92 in Eigen::internal::Assignment<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9>, Eigen::Inverse<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> >, Eigen::internal::assign_op<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0> >, Eigen::internal::Dense2Dense, void>::run (dst=..., src=...)           
    at /usr/include/eigen3/Eigen/src/LU/InverseImpl.h:310
#25 0x0000555555559d99 in Eigen::internal::call_assignment_no_alias<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9>, Eigen::Inverse<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> >, Eigen::internal::assign_op<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0> > > (dst=..., src=..., func=...)                           
    at /usr/include/eigen3/Eigen/src/Core/AssignEvaluator.h:836
#26 0x00005555555599ba in Eigen::PlainObjectBase<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> >::_set_noalias<Eigen::Inverse<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > > (this=0x7fffffffc480, other=...)                                        
    at /usr/include/eigen3/Eigen/src/Core/PlainObjectBase.h:728
#27 0x00005555555593ac in Eigen::PlainObjectBase<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> >::PlainObjectBase<Eigen::Inverse<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > > (this=0x7fffffffc480, other=...)                                     
    at /usr/include/eigen3/Eigen/src/Core/PlainObjectBase.h:537
#28 0x0000555555558a4a in Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9>::Matrix<Eigen::Inverse<Eigen::Matrix<boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<71u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0>, 9, 9, 0, 9, 9> > > (this=0x7fffffffc480, other=...)
    at /usr/include/eigen3/Eigen/src/Core/Matrix.h:379
#29 0x0000555555556f16 in main (argc=1, argv=0x7fffffffd9c8)
    at mat_test.cpp:27
...