visual studio 2010 下配置线性代数库Eigen

经过测试,armadillo在vs2010下不能运行,需要vs2012版本以及以上。由于armodillo要求openmp版本要在3.0以上,所以用visual studio时不能并行 (visual studio里的openmp的版本都是2.0,最新的vs2017里面也是)。
在vs2010下面,Eigen是可以使用的,也可以用并行,配置相对于armadillo也较为简单。具体设置如下:
1. 新建空工程;
2. 将Eigen文件夹放到工程文件夹里面;
3. 添加Eigen库到工程工程里面,project->**properties->C/C++->general-》additional include directories->把Eigen文件夹(这里是eigen3)包括进来,再把地址前面改为../eigen3,这样也可以考到别的电脑上计算了。

4. 建立resource的cpp文件,里面写一些测试语句,例如:
#include <iostream>
#include "time.h"
#include <Eigen\Dense>
using namespace std;
using namespace Eigen;
void main()
{
clock_t start,finish;
double duaration;
start=clock();
cout<<"start"<<endl;
MatrixXd m2=MatrixXd::Random(10000,10000);  
MatrixXd rel;
rel=m2*m2;
cout<<"finish"<<endl;
finish=clock();
duaration=(double)(finish-start)/CLOCKS_PER_SEC;
cout<<"the elapsed time is "<<duaration<<" s"<<endl;
}
5. 把编译那个地方改为x64(在win32下没有成功,可能是由于Eigen是64位的?),在release下面编译。在debug下可能会出现failure during conversion to COFF: file invalid or corrupt的错误,需要做如下设置:
Project(项目)->Properties(属性)->Linker(连接器)->Gerneral(常规)->Enable Incremental Linking(启动增量链接),把 Yes (/INCREMENTAL) 改为 No (/INCREMENTAL:NO),这样在Debug下也可以运行了。
6.非并行条件下,做5000*5000矩阵乘法时候,Eigen比armadillo快不少,如果在armadillo里添加Intel MKL,计算速度会提高,能达到和Eigen差不多的效率。总体来说,选择Eigen最省事。