Armadillo配置教程.docx
- 文档编号:8635279
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:11
- 大小:952.27KB
Armadillo配置教程.docx
《Armadillo配置教程.docx》由会员分享,可在线阅读,更多相关《Armadillo配置教程.docx(11页珍藏版)》请在冰豆网上搜索。
Armadillo配置教程
Armadillo配置及测试教程
有时程序中会用到一些矩阵和向量运算,自己写代码不仅费时而且速度没有保证,网上有很多现成的库可以调用,没必要自己写。
从速度和使用方便角度考虑,ArmadilloC++库是个好选择。
Armadillo的使用习惯非常类似Matlab,下面就介绍一下它在VisualStudio2010中的配置和使用。
1.从官网
比如我下载的是armadillo-4.200.0版本,解压后的文件夹中有以下文件:
2.在VisualStudio2010中新建一个项目,类型是Win32控制台应用程序。
确定后选择空项目即可,点完成。
3.完成后,在左侧“资源管理器”中的“源文件”上鼠标右击选择“添加”中的“新建项”。
然后选择“C++文件”,随便输入一个文件名,点添加。
4.还是在左边“资源管理器”中在项目名上右键鼠标,选择“属性”:
5.进去后,选择左边的“VC++目录”,这里要修改2处:
“包含目录”和“库目录”。
a)“包含目录”要包含解压后文件夹中的include文件夹,比如我的就是D:
\armadillo-4.200.0\include
b)“库目录”要包含Lapack库和Blas库。
Lapack库和Blas库是很基础的线性代数库,好多其他的库和程序都用到他们,依靠他们才能跑起来,比如Matlab,Scilab。
Armadillo不用Lapack和Blas库也能运行,但只能做简单的低维矩阵运算,比如加减乘,但是像矩阵逆,分解,求秩等都做不了,所以要包含这2个库。
Armadillo已经自带了这两个库,他们在examples文件夹中的lib_win64里。
不过它们是X64的。
如果你的程序是X86的(也就是32位的),是不能用64位的。
你需要下载32位版本的Lapack和Blas,可以在这里下载Lapack和Blas库:
我的网盘:
(32位和64位都有,已替你编译好了)
或者(要翻墙)
下载后解压到任意位置,比如我的是D:
\lib_win32,在上图的“库目录”中找到并包含这个文件夹。
都设置好后应该是这样的:
6.随后在“链接器”下面的“输入”页中,修改“附加依赖项”
就是敲入对应Lapack库和Blas库的这2个lib文件的文件名即可,点确定。
最后确定或回车。
完成“属性页”的所有设置。
7.找到解压文件include文件夹中armadillo_bits里的config.hpp文件。
比如我的在D:
\armadillo-4.200.0\include\armadillo_bits目录下。
去掉#defineARMA_USE_LAPACK和#defineARMA_USE_BLAS前的注释,如下:
8.最后一步,在新建的cpp文件中随便写点程序,比如HelloWorld或者后面的测试代码,编译运行一下,然后将Lapack和Blas对应的dll复制到程序Debug或Release目录下(也就是编译生成的exe文件所在的文件夹,如下图),比如我就是将D:
\lib_win32文件夹中的blas_win32_MTd.dll和lapack_win32_MTd.dll这2个文件复制到我的调试文件所在位置,D:
\ArmodilloTest\Debug文件夹中。
9.好了,配置完成,可以使用Armodillo库了。
使用时就是在程序中加入头文件#include"armadillo"和usingnamespacearma即可。
10.下面我们测试一下Armodillo的速度,并对比其他的软件。
见下一页。
Armadillo速度测试
配置好以后自然想体验一下速度,下面就以矩阵求逆为例进行速度测试,代码如下:
#include
#include
#include
#include"armadillo"
usingnamespacearma;
usingnamespacestd;
intmain(intargc,char**argv)
{
matA=randu
cout<<"Elapsedtimeis"< matB;//声明一个矩阵B clock_tstart=clock(); B=inv(A);//求A矩阵的逆 clock_tend=clock()-start; cout< return0; } 这个例子是求一个1000×1000的随机矩阵的逆矩阵。 测试前我们先大概估计一下可能的速度。 1000×1000=106也就是说矩阵一共有一百万项,每一项是0到1之间的浮点数。 一般求逆矩阵的方法是高斯消去法,它的复杂度是 ,其中n指矩阵维数(细节可参考维基百科Gaussianelimination)。 ( 不是真的只需要 次运算,这只是估计,还有系数和低次项,这里我省略了)。 所以最少需要10003=109次浮点运算,也就是10亿次运算的规模。 一个常用的衡量电脑CPU计算速度的指标是: 每秒运行的FLOPS(就是“浮点运算次数”的缩写)。 家用电脑的速度一般在GFLOPS级别,也就是CPU一秒钟可以做个几十亿到上百亿次的浮点数的加减乘除(当然一次只能做4个中的一个)。 比如我的笔记本CPU用SiSoftwareSandra软件测试的结果如下图: 我的电脑CPU是P8700双核,正常发挥的速度是15GFLOPS左右,也就是每秒能做150亿次加减乘除。 打个折就算100亿次吧,运行上面的矩阵求逆最少需要10亿除以100亿,也就是0.1秒的时间。 我们可以用Matlab做个参考,由于Matlab用的库是IntelMKL库(是优化的Blas和Lapack库),它的速度会快些。 我的Matlab跑的结果是0.2秒多,有图为证: 说明我们的估计还是挺靠谱的。 下面看看Armadillo的表现(其实是Blas和Lapack的表现)。 按下Ctrl+F5运行程序,结果是: 1.154秒,5倍的差距。 看来还是Matlab优化的好啊。 再看一下其他软件的速度: [1]Mathematica和Matlab类似,但更擅长符号运算,它的成绩是: 0.20004秒(见下图),可见Mathematica的数值计算能力也不在Matlab之下啊。 [2]Scilab也和Matlab类似,不过是开源的,它的成绩是: 0.879秒 比Matlab慢一点,原因是Scilab安装时让用户可以自己选择库,我安装的时候选择了Blas和Lapack而没有选IntelMKL。 如果在安装时选择的是IntelMKL,如下图: IntelMKL的价格是499美元,提供免费试用版,但scilab在安装时会自动下载IntelMKL,不用我们再买了,直接用即可,这个跟Matlab一样。 使用IntelMKL后scilab速度跟Matlab差不多了: 0.254秒,见下图。 [3]还可以试试64位的Blas和Lapack库的速度,配置过程和前述大致一样,但有些细微差别,如下: 在“生成”菜单下选择“配置管理器” 在出来的“配置管理器”中修改: ✧左边的活动解决方案配置改为Release(Debug也可以)。 ✧右边的活动解决方案平台选择“新建”,在出来的对话框中选择x64,如下图: 然后重复前面在“属性页”中的修改,包括引入include文件,包含进lib文件(只不过这次是64位的了,这次我用了armadillo自带的),然后把dll复制到exe文件目录下,如图: 运行一下,成绩是1.138秒,说明64位的速度和32位的差不多。 [4]有人说用Armadillo可以比Matlab快很多,看来这说法不太现实。 快一点有可能,要是快很多就是瞎扯了(不涉及解释语言自身缺点的情况下)。 毕竟Matlab已经优化的不错了,也接近CPU极限了,普通人的技术还是达不到这个水平的。 有人说Armadillo结合OpenBLAS速度更快,但也差不多,如果真有人能做到快很多请发邮件给我(robinvista2@),我要膜拜一下。 如果你对速度不满意,可以试试IntelMKL,Scilab里带了。 如果想追求更极值的速度,可以借助显卡加速,速度还可以再提升1到2个数量级。 [5]Armadillo中各函数的使用方法可见: 官网APIDocs页面 [6]Armadillo的一些例子在下载文件中的examples文件夹中,它是用VisualStudio2012编译的,如果低版本打不开可直接打开cpp文件复制到你的项目即可。 [7]如果你的速度比我的慢很多,很可能是你用的Blas和Lapack库不好,在网上找找换一个试试。 [8]想了解更多Armadillo的细节设置和使用,请阅读你下载后解压文件中的README.txt 还可参考以下网页: [1]http: //www.ru.is/kennarar/sigurdurh/Armadillo64hack.html [2] [3] [4] [5]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Armadillo 配置 教程