Eigen is a free and open source, relatively fast, very versatile linear algebra library written completely in C++ templates. It is very fast and in some cases produces code as fast as commercial implementations like Intel MKL, AMD ACML etc. The beauty of the Eigen is, it’s completely written in C++ templates and it’s very easy to plug it in to a project compiled with any supported compiler.
Here I describe the process of how to install Eigen with Microsoft Visual Studio 2010 Express and 64bit compilers from Microsoft Windows SDK 7.1 supporting OpenMP and vectorization with SSE2. All these tools are free.
Install Microsoft Tools
Install Visual C++ 2010 Express Edition & Install Microsoft Windows SDK for Windows Version 7.1. When WindowsSDK is installed, Make sure to include Visual C++ Compilers as seen in the above picture
Install Eigen Library
Just unzip the latest version of the Eigen template library to the hard disk.
Creating New Project
Start Visual c++ 2010 Express and create a new Visual C++ Empty Project. Give a name for the new project.
Add a new c++ source file to the project
Add a new c++ source file to the project and copy-paste the code below. Visual C++ editor will highlight missing include files and datatypes in the source code. This is expected because Visual C++ environment still doesn’t know where the Eigen libraries, and this can be fixed very easily.
#include <iostream> #include <ctime> #include <Eigen/Eigen> using namespace std; using namespace Eigen; int main() { MatrixXd A = MatrixXd::Random(5000,5000); MatrixXd B = MatrixXd::Random(5000,2); //cout << "Here is the invertible matrix A:" << endl << A << endl; //cout << "Here is the matrix B:" << endl << B << endl; clock_t clock_start=clock(); MatrixXd X = A.lu().solve(B); double time_c=(double)(clock()- clock_start)/CLOCKS_PER_SEC; //cout << "Here is the (unique) solution X to the equation AX=B:" << endl << X << endl; cout << "Relative error: " << (A*X-B).norm() / B.norm() << endl; cout<< "Elapsed Time is: "<< time_c<< "s" <<endl; cin.get(); }
Create 64bit solution platforms
Create 64bit "Solution platforms" for both "Debug" and "Release" "Solution Configurations".
Set Project Properties for ‘Release’ Configuration and ‘x64’ Platform
Platform Toolset – Windows7.1SDK
Set Platform Toolset to Windows7.1SDK
Add Eigen Library to Include Path
Add Eigen library location to VC++ Include path. Once this step is done, VC++ editor should no longer highlight error in the sample code.
Multi processor compilation
Turn on Multiprocessor Compilation if you have a multicore processor.
Compiler Optimization
Make sure compiler optimization is set to 'Maximize Speed'
Enable Enhance Instruction Set Support
Enable SSE2 support. Once enabled Eigen will Make use of SSE2 to Vectorize it's code generation
Turn on OpenMP support
Eigen uses OpenMP when possible. Eigen uses OpenMp specialy during crucial Matrix-Matrix product calculations.
Build and Run the Project
Build and run the project. The given example code solves a system linear equation with 5000 equations. As you can see from above picture all processor core are occupied during calculation. You can turn on and off OpenMP and SSE2 support and test how fast the code completes when these features are turned on and off.
Hello,
is it really true that you can link a 64bit Version including openMP?
If I try to do so with an other Project I got an link error that vcomp.lib was not found. 32 bit linking is OK. I am using VC Studio 2010 Express with SDK 7.1 enabled and same configuration like in your Project.
Any hints?
Thanks
Dietmar
I don’t have the same configuration as mentioned in this post anymore in my PCs. But when I built 64bit configuration with OpenMP there were no linking errors. The executable was 64bit. Perhaps following bug has something to do with your error.
http://support.microsoft.com/kb/2519277
A link to download the VS 2010 express solution I have built in the above post:
https://www.dropbox.com/sh/l0596h4mn0hp3gs/snWdSdaUvL?dl=1
Hope this helps.
Thanks for answering. Yes, it seems that some files are missing as described in the Microsoft Report. But using the SP1 update did not Change the Situation. Don’t know why.
If I look in your link.read.1.log file from dropbox I see:
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 10.0\VC\BIN\X86_AMD64\C2.DLL
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 10.0\VC\LIB\AMD64\MSVCPRT.LIB
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 10.0\VC\LIB\AMD64\MSVCRT.LIB
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 10.0\VC\LIB\AMD64\OLDNAMES.LIB
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 10.0\VC\LIB\AMD64\VCOMP.LIB
All the files I have except the AMD64\VCOMP.LIB. (And perhaps the .dll too!)
Best Regards
Dietmar