[eigen] Matrix product avoiding heap allocation |
[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]
I also attach the QtCreator project file in case you are using that IDE.
clang++ -c -pipe -mmacosx-version-min=10.7 -std=c++11 -stdlib=libc++ -g -arch x86_64 -Wall -W -DEIGEN_RUNTIME_NO_MALLOC -D__STDC_CONSTANT_MACROS -I/usr/local/Cellar/qt/4.8.5/mkspecs/unsupported/macx-clang -I../testEigenMatMatProd -I../eigen -I/usr/local/include -I/usr/local/Cellar/eigen/3.2.0/include/eigen3 -I.../testEigenMatMatProd -I. -o main.o ../testEigenMatMatProd/main.cpp
clang++ -headerpad_max_install_names -mmacosx-version-min=10.7 -stdlib=libc++ -arch x86_64 -o testEigenMatMatProd main.o
And this is the application output:
Assertion failed: (is_malloc_allowed() && "heap allocation is forbidden (EIGEN_RUNTIME_NO_MALLOC is defined and g_is_malloc_allowed is false)"), function check_that_malloc_is_allowed, file ../eigen/Eigen/src/Core/util/Memory.h, line 204.
And this is the backtrace:
0 __pthread_kill __pthread_kill 0x7fff892db866
1 pthread_kill pthread_kill 0x7fff8d27c35c
2 abort abort 0x7fff8cb75bba
3 __assert_rtn __assert_rtn 0x7fff8cb3fa5f
4 Eigen::internal::check_that_malloc_is_allowed() Memory.h 204 0x100006d6f
5 Eigen::internal::aligned_malloc(unsigned long) Memory.h 216 0x1000036e1
6 Eigen::internal::general_matrix_matrix_product<long, float, 0, false, float, 0, false, 0>::run(long, long, long, float const*, long, float const*, long, float*, long, float, Eigen::internal::level3_blocking<float, float>&, Eigen::internal::GemmParallelInfo<long>*) GeneralMatrixMatrix.h 157 0x100002d5f
7 Eigen::internal::gemm_functor<float, long, Eigen::internal::general_matrix_matrix_product<long, float, 0, false, float, 0, false, 0>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, float, float, -1, -1, -1, 1, false> >::operator()(long, long, long, long, Eigen::internal::GemmParallelInfo<long>*) const GeneralMatrixMatrix.h 224 0x100002b18
8 void Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor<float, long, Eigen::internal::general_matrix_matrix_product<long, float, 0, false, float, 0, false, 0>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, float, float, -1, -1, -1, 1, false> >, long>(Eigen::internal::gemm_functor<float, long, Eigen::internal::general_matrix_matrix_product<long, float, 0, false, float, 0, false, 0>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, float, float, -1, -1, -1, 1, false> > const&, long, long, bool) Parallelizer.h 96 0x10000273f
9 void Eigen::GeneralProduct<Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, 5>::scaleAndAddTo<Eigen::Matrix<float, -1, -1, 0, -1, -1> >(Eigen::Matrix<float, -1, -1, 0, -1, -1>&, float const&) const GeneralMatrixMatrix.h 421 0x1000025fd
10 void Eigen::ProductBase<Eigen::GeneralProduct<Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, 5>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::Matrix<float, -1, -1, 0, -1, -1> >::scaleAndAddTo<Eigen::Matrix<float, -1, -1, 0, -1, -1> >(Eigen::Matrix<float, -1, -1, 0, -1, -1>&, float const&) const ProductBase.h 111 0x1000023d0
11 void Eigen::ProductBase<Eigen::GeneralProduct<Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, 5>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::Matrix<float, -1, -1, 0, -1, -1> >::evalTo<Eigen::Matrix<float, -1, -1, 0, -1, -1> >(Eigen::Matrix<float, -1, -1, 0, -1, -1>&) const ProductBase.h 102 0x10000233d
12 Eigen::Matrix<float, -1, -1, 0, -1, -1>& Eigen::MatrixBase<Eigen::Matrix<float, -1, -1, 0, -1, -1> >::lazyAssign<Eigen::GeneralProduct<Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, 5>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::Matrix<float, -1, -1, 0, -1, -1> >(Eigen::ProductBase<Eigen::GeneralProduct<Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, 5>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::Matrix<float, -1, -1, 0, -1, -1> > const&) ProductBase.h 272 0x1000022dd
13 Eigen::Matrix<float, -1, -1, 0, -1, -1>& Eigen::PlainObjectBase<Eigen::Matrix<float, -1, -1, 0, -1, -1> >::lazyAssign<Eigen::GeneralProduct<Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, 5> >(Eigen::DenseBase<Eigen::GeneralProduct<Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, 5> > const&) PlainObjectBase.h 438 0x10000225f
14 Eigen::internal::assign_selector<Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::GeneralProduct<Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, 5>, false, false>::run(Eigen::Matrix<float, -1, -1, 0, -1, -1>&, Eigen::GeneralProduct<Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, 5> const&) Assign.h 546 0x1000021dd
15 Eigen::Matrix<float, -1, -1, 0, -1, -1>& Eigen::NoAlias<Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::MatrixBase>::operator=<Eigen::GeneralProduct<Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, 5> >(Eigen::MatrixBase<Eigen::GeneralProduct<Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::Matrix<float, -1, -1, 0, -1, -1>, 5> > const&) NoAlias.h 42 0x100002103
16 main main.cpp 52 0x100001b4b
17 start start 0x100000fc4
--
#include <iostream> #include <cmath> #include <complex> #include <Eigen/Eigen> typedef int Integer; typedef float Real; typedef std::complex< Real > Complex; typedef std::complex< float > complex_float; typedef std::complex< double > complex_double; typedef Eigen::Matrix< Integer, 1, Eigen::Dynamic > RowI; typedef Eigen::Matrix< Real, 1, Eigen::Dynamic > RowR; typedef Eigen::Matrix< Complex, 1, Eigen::Dynamic > RowC; typedef Eigen::Matrix< Integer, Eigen::Dynamic, 1 > ColI; typedef Eigen::Matrix< Real, Eigen::Dynamic, 1 > ColR; typedef Eigen::Matrix< Complex, Eigen::Dynamic, 1 > ColC; typedef ColI VectorI; typedef ColR VectorR; typedef ColC VectorC; typedef Eigen::Matrix< Integer, Eigen::Dynamic, Eigen::Dynamic > MatrixI; typedef Eigen::Matrix< Real, Eigen::Dynamic, Eigen::Dynamic > MatrixR; typedef Eigen::Matrix< Complex, Eigen::Dynamic, Eigen::Dynamic > MatrixC; using namespace std; int main() { MatrixR c; MatrixR a; MatrixR b; c.resize(14, 8); a.resize(14, 3); b.resize(3, 8); a << 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7; b << 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8; Eigen::internal::set_is_malloc_allowed(false); c.noalias() = a * b; Eigen::internal::set_is_malloc_allowed(true); return 0; }
Attachment:
testEigenMatMatProd.pro
Description: Binary data
Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |