简化一下具体实现如下 #ifdef EIGEN_ALLOCA#define ei_declare_aligned_stack_constructed_variable(TYPE,NAME,SIZE,BUFFER) \Eigen::internal::check_size_for_overflow<TYPE>(SIZE); \TYPE* NAME = (BUFFER)!=0 ? (BUFFER) \:reinterpret_cast<TYPE*>( \(sizeof(TYPE)*SIZE<=EIGEN_STACK_ALLOCATION_LIMIT)...
EIGEN_UNROLLING_LIMIT定义循环的大小以启用元循环展开。将其设置为零以禁用展开。这里的循环大小以Eigen自己的“FLOPS数”概念表示,它不对应于迭代次数或指令数。默认值为110。 EIGEN_STACK_ALLOCATION_LIMIT定义在堆栈上分配缓冲区的最大字节数。对于内部临时缓冲区,将使用动态内存分配作为备选方案。对于固定大小的矩阵...
(sizeof(TYPE)*SIZE<=EIGEN_STACK_ALLOCATION_LIMIT) ? EIGEN_ALIGNED_ALLOCA(sizeof(TYPE)*SIZE)\ Eigen::internal::aligned_malloc+(sizeof(TYPE)*SIZE) ); \ Eigen::internal::aligned_stack_memory_handler<TYPE> EIGEN_CAT(NAME,_stack_memory_destructor+)((BUFFER)==0 ? NAME : 0,SIZE,sizeof(TY...
这些块不再在堆栈上分配。您可以通过使用-DEIGEN_STACK_ALLOCATION_LIMIT=$((256*1024))或您认为合适...
这个是一个稠密矩阵相乘。首先需要知道的是Eigen并不是一步一步地先做转置,再去乘,而是使用lazy ...
(sizeof(TYPE)*SIZE<=EIGEN_STACK_ALLOCATION_LIMIT) ? EIGEN_ALIGNED_ALLOCA(sizeof(TYPE)*SIZE)\ Eigen::internal::aligned_malloc+(sizeof(TYPE)*SIZE) ); \ Eigen::internal::aligned_stack_memory_handler<TYPE> EIGEN_CAT(NAME,_stack_memory_destructor+)((BUFFER)==0 ? NAME : 0,SIZE,sizeof(TY...