Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use Eigen, the C++ template library for linear algebra?

I have an image processing algorithm which makes of matrices, I have my own matrix operation codes (Multiplication, Inverse...) with me. But the processor I use is ARM Cortex-A8 processor, which has NEON co-processor for vectorization, as matrix operations are ideal cases for SIMD operations, I asked the compiler (-mfpu=neon -mfloat-abi=softfp) to generate NEON instructions for my code, but the compiler fails to do so and then I also attempted to write my own NEON intrinsics code for the Matrix operations, but I found it very hard to do so.

So, I thought of making use of Eigen library which promises vectorization of matrix operations. So I promptly downloaded the Eigen C++ library and tried using it as given in their tutorials but, unfortunately I get compilation errors when I run their example programs.

Anyone out there who has experience using Eigen, any examples will be really helpful? Kindly help me how to go about it.

Help!

Thanks


I have the Eigen folder at: /home/ubuntu/Documents/eigen I set this path in my Eclipse's C++ project's additional directories. Then I run the following program (Example)-

#include <Eigen/Core>

// import most common Eigen types
USING_PART_OF_NAMESPACE_EIGEN

int main(int, char *[])
{
  Matrix3f m3;
  m3 << 1, 2, 3, 4, 5, 6, 7, 8, 9;
  Matrix4f m4 = Matrix4f::Identity();
  Vector4i v4(1, 2, 3, 4);

  std::cout << "m3\n" << m3 << "\nm4:\n"
    << m4 << "\nv4:\n" << v4 << std::endl;
}

Errors I get -

Build of configuration Debug for project Test_Eigen ****

make all

Building file: ../main.cpp

Invoking: Sourcery G++ C++ Compiler

arm-none-linux-gnueabi-g++ -I/home/ubuntu/Documents/eigen -O0 -g3 -Wall -c -fmessage-length=0 -fcommon -MMD -MP -MF"main.d" -MT"main.d" -mcpu=cortex-a8 -marm -o"main.o"

"../main.cpp"

../main.cpp:6: error: expected constructor, destructor, or type conversion before 'int' make: *** [main.o] Error 1

like image 216
HaggarTheHorrible Avatar asked Jul 15 '10 15:07

HaggarTheHorrible


People also ask

Can Eigen be used in C?

Eigen is a library which heavily uses C++ features which are not present in C. As such, it cannot be directly used from a C translation unit. However, you can wrap the parts using Eigen in a separate shared library and expose a C interface.

How do I add Eigen library to code blocks?

go to codeblocks Settings-> complier-> Search Directories-> Add-> enter the address of the folder you chose in (1)-> o.k. declare #include "Eigen/Dense" before the main function.

Is Eigen faster than armadillo?

However, aggressively tuning for performance implies more specialisations, more overloads, more “SFINAE” and so on and as result compiles slower than Eigen. Armadillo is perhaps the winner in compilation times if we exclude Fastor which is a smaller library.


1 Answers

The USING_PART_OF_NAMESPACE_EIGEN macro was removed in Eigen 3. Instead, simply use

using namespace Eigen;

Apparently, the tutorial is outdated.

like image 142
Thomas Avatar answered Nov 02 '22 22:11

Thomas