Re: [eigen] segment fault in "Eigen::internal::gemm_pack_rhs" when call MatrixXd multiplication on a memory limited 32 bit platform |
[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]
Hello, it seems I can't log in "http://eigen.tuxfamily.org/bz/?GoAheadAndLogIn=1" as I am a new user, so I write this mail to ask for your help, thanks!I have a project which runs OK on my 64bit laptop( ubuntu), but when I run this program on a 32 bit linux platform, it will crash with the output:"*** Aborted at 2926 (unix time) try "date -d @2926" if you are using GNU date ***PC: @ 0x206384 Eigen::internal::gemm_pack_rhs<>::operator()() segment fault"I use gdb to debug, and the "bt" output:------------------------------------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ -------- Program received signal SIGSEGV, Segmentation fault.[Switching to LWP 1138]0x0020b65c in Eigen::internal::gemm_pack_rhs<double, int, 2, 0, false, false>::operator() (blockB=0xb6e3dc00, rhs=rhs@entry=0x1cda940, rhsStride=1071644672, rhsStride@entry=106, depth=depth@entry=106, cols=106,this=<optimized out>, offset=0, stride=0)at eigen3/Eigen/src/Core/products/ GeneralBlockPanelKernel.h:1236 1236 eigen3/Eigen/src/Core/products/ GeneralBlockPanelKernel.h: No such file or directory. (gdb) #0 0x0020b65c in Eigen::internal::gemm_pack_rhs<double, int, 2, 0, false, false>::operator() (blockB=0xb6e3dc00, rhs=rhs@entry=0x1cda940, rhsStride=1071644672, rhsStride@entry=106, depth=depth@entry=106,cols=106, this=<optimized out>, offset=0, stride=0)at eigen3/Eigen/src/Core/products/ GeneralBlockPanelKernel.h:1236 #1 0x00212664 in Eigen::internal::general_matrix_matrix_product<int, double, 0, false, double, 0, false, 0>::run (rows=3, cols=<optimized out>, depth=<optimized out>, _lhs=<optimized out>, lhsStride=3, _rhs=0x1cda940,rhsStride=106, res=0x1e39ac0, resStride=3, alpha=1, blocking=..., info=0x0)at eigen3/Eigen/src/Core/products/GeneralMatrixMatrix. h:171 #2 0x0021cacc in Eigen::internal::gemm_functor<double, int, Eigen::internal::general_ matrix_matrix_product<int, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_ blocking_space<0, double, double, -1, -1, -1, 1, false> >::operator() (info=0x0, cols=<optimized out>, col=0, rows=<optimized out>, row=0,this=<optimized out>)at eigen3/Eigen/src/Core/products/GeneralMatrixMatrix. h:221 #3 Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor< double, int, Eigen::internal::general_ matrix_matrix_product<int, double, 0, false, dou---Type <return> to continue, or q <return> to quit---ble, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_ blocking_space<0, double, double, -1, -1, -1, 1, false> >, int> ( transpose=false, cols=<optimized out>, rows=<optimized out>, func=...)at eigen3/Eigen/src/Core/products/Parallelizer.h:96 #4 Eigen::GeneralProduct<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, 5>::scaleAndAddTo<Eigen:: Matrix<double, -1, -1, 0, -1, -1> > (alpha=<optimized out>, dst=..., this=0xb6e546a4) at eigen3/Eigen/src/Core/products/GeneralMatrixMatrix. h:421 #5 Eigen::ProductBase<Eigen::GeneralProduct<Eigen::Matrix< double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, 5>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >::scaleAndAddTo<Eigen:: Matrix<double, -1, -1, 0, -1, -1> > (alpha=<optimized out>, dst=..., this=0xb6e546a4)at eigen3/Eigen/src/Core/ProductBase.h:118 #6 Eigen::ProductBase<Eigen::GeneralProduct<Eigen::Matrix< double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, 5>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >::evalTo<Eigen::Matrix< double, -1, -1, 0, -1, -1> > (dst=..., this=0xb6e546a4) at eigen3/---Type <return> to continue, or q <return> to quit---Eigen/src/Core/ProductBase.h:109 #7 Eigen::ProductBase<Eigen::GeneralProduct<Eigen::Matrix< double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, 5>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >::operator Eigen::Matrix<double, -1, -1, 0, -1, -1> const& (this=0xb6e546a4) at eigen3/Eigen/src/Core/ProductBase.h:127 #8 Eigen::ProductBase<Eigen::GeneralProduct<Eigen:: GeneralProduct<Eigen::Matrix< double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, 5>, Eigen::Transpose<Eigen:: Matrix<double, -1, -1, 0, -1, -1> const>, 5>, Eigen::GeneralProduct<Eigen:: Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, 5>, Eigen::Transpose<Eigen:: Matrix<double, -1, -1, 0, -1, -1> const> >::ProductBase (a_rhs=..., a_lhs=..., this=<optimized out>) at eigen3/Eigen/src/Core/ProductBase.h:98 #9 Eigen::GeneralProduct<Eigen::GeneralProduct<Eigen::Matrix< double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, 5>, Eigen::Transpose<Eigen:: Matrix<double, -1, -1, 0, -1, -1> const>, 5>::GeneralProduct (rhs=..., lhs=..., this=<optimized out>)at eigen3/Eigen/src/Core/products/GeneralMatrixMatrix. h:391 #10 Eigen::MatrixBase<Eigen::GeneralProduct<Eigen::Matrix< double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, 5> >::operator*<Eigen::Transpose- --Type <return> to continue, or q <return> to quit---<Eigen::Matrix<double, -1, -1, 0, -1, -1> const> > (other=..., this=0xb6e546a4) at eigen3/Eigen/src/Core/GeneralProduct.h:595 ------------------------------------------------------------ ------------------------------ ------------------------------ ------------------------------ ----------- and I find this is called by a matrix multiplication like:" MatrixXd cov2= H.transpose() * cov * H; "when I comment out this line and the segment fault will gone.also, if I use opencv's matrix multiplication here and no segment fault will happen, so I think it's a bug of eigen.the rows of H may be 6~200, and the cols of H is 3. I write a simple code to test but no segment fault happen, here's my simple code:"MatrixXd H(2*num, 3);MatrixXd cov = MatrixXd::Zero(2*num, 2*num);H = MatrixXd::Random(2*num, 3);cov = MatrixXd::Random(2*num, 2*num);cout<<"H"<<endl<<H<<endl;cout<<"cov"<<endl<<cov<<endl;MatrixXd cov2= H.transpose() * cov * H;cout<<cov2<<endl;"I have tried to use gdb to debug, but no more info I can get.Could you please have a look or tell me how to debug this problem? thanks!some info about my platform:uname -aLinux 3.4.39 #375 SMP PREEMPT Mon Jul 17 09:07:31 UTC 2017 armv7l GNU/Linuxfreetotal used free shared buff/cache availableMem: 524288 21000 270188 1372 233100 491107Swap: 0 0 0df -hFilesystem Size Used Available Use% Mounted onrootfs 5.0M 528.0K 4.5M 10% //dev/root 5.8M 5.8M 0 100% /romtmpfs 250.9M 1.3M 249.5M 1% /tmp/dev/mtdblock5 5.0M 528.0K 4.5M 10% /overlayoverlayfs:/overlay 5.0M 528.0K 4.5M 10% /tmpfs 512.0K 0 512.0K 0% /dev/dev/mmcblk0p1 7.4G 3..1G 4.3G 42% /mnt/SDCARD/dev/by-name/UDISK 1.1M 196.0K 892.0K 18% /mnt/UDISK/dev/by-name/boot 2.0M 1.7M 322.0K 84% /boot/dev/by-name/boot-res8.0M 39.0K 7.9M 0% /boot-resThanks again!--Best Regards!--extr15
Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |