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
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.
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.
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.
The USING_PART_OF_NAMESPACE_EIGEN
macro was removed in Eigen 3. Instead, simply use
using namespace Eigen;
Apparently, the tutorial is outdated.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With