Armadillo配置教程.doc_第1页
Armadillo配置教程.doc_第2页
Armadillo配置教程.doc_第3页
Armadillo配置教程.doc_第4页
Armadillo配置教程.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Armadillo配置及测试教程有时程序中会用到一些矩阵和向量运算,自己写代码不仅费时而且速度没有保证,网上有很多现成的库可以调用,没必要自己写。从速度和使用方便角度考虑,Armadillo C+库是个好选择。Armadillo的使用习惯非常类似Matlab,下面就介绍一下它在Visual Studio 2010中的配置和使用。1. 从官网/download.html下载文件,随便解压到某处(比如D:下)。可以看到里面有例子和库。比如我下载的是armadillo-4.200.0版本,解压后的文件夹中有以下文件:2. 在Visual Studio 2010中新建一个项目,类型是Win32控制台应用程序。确定后选择空项目即可,点完成。3. 完成后,在左侧“资源管理器”中的“源文件”上鼠标右击选择“添加”中的“新建项”。 然后选择“ C+文件”,随便输入一个文件名,点添加。4. 还是在左边“资源管理器”中在项目名上右键鼠标,选择“属性”:5. 进去后,选择左边的“VC+目录”,这里要修改2处:“包含目录”和“库目录”。a) “包含目录”要包含解压后文件夹中的include文件夹,比如我的就是D:armadillo-4.200.0includeb) “库目录”要包含Lapack库和Blas库。Lapack库和Blas库是很基础的线性代数库,好多其他的库和程序都用到他们,依靠他们才能跑起来,比如Matlab,Scilab。 Armadillo 不用Lapack和Blas库也能运行,但只能做简单的低维矩阵运算,比如加减乘,但是像矩阵逆,分解,求秩等都做不了,所以要包含这2个库。Armadillo已经自带了这两个库,他们在examples文件夹中的lib_win64里。不过它们是X64的。如果你的程序是X86的(也就是32位的),是不能用64位的。你需要下载32位版本的Lapack和Blas,可以在这里下载Lapack和Blas库:我的网盘:/s/1eQoW3ei (32位和64位都有,已替你编译好了)或者 (要翻墙)/2013/10/blas-lapack-precompiled-binaries-for.html 下载后解压到任意位置,比如我的是D:lib_win32,在上图的“库目录”中找到并包含这个文件夹。都设置好后应该是这样的:6. 随后在“链接器”下面的“输入”页中,修改“附加依赖项”就是敲入对应Lapack库和Blas库的这2个lib文件的文件名即可,点确定。最后确定或回车。完成“属性页”的所有设置。7. 找到解压文件include文件夹中armadillo_bits里的config.hpp文件。比如我的在D:armadillo-4.200.0includearmadillo_bits目录下。去掉 #define ARMA_USE_LAPACK和#define ARMA_USE_BLAS前的注释,如下:8. 最后一步,在新建的cpp文件中随便写点程序,比如HelloWorld或者后面的测试代码,编译运行一下,然后将Lapack和Blas对应的dll复制到程序Debug或Release目录下(也就是编译生成的exe文件所在的文件夹,如下图),比如我就是将D:lib_win32文件夹中的blas_win32_MTd.dll和lapack_win32_MTd.dll这2个文件复制到我的调试文件所在位置,D:ArmodilloTestDebug文件夹中。9. 好了,配置完成,可以使用Armodillo库了。使用时就是在程序中加入头文件#include armadillo和using namespace arma即可。10. 下面我们测试一下Armodillo的速度,并对比其他的软件。见下一页。Armadillo速度测试配置好以后自然想体验一下速度,下面就以矩阵求逆为例进行速度测试,代码如下:#include#include#include#include armadillousing namespace arma;using namespace std;int main(int argc, char* argv) mat A = randu(1000,1000); /创建一个1000X1000的随机矩阵A cout Elapsed time is endl; mat B; /声明一个矩阵B clock_t start=clock(); B=inv(A); /求A矩阵的逆 clock_t end=clock()-start; coutendendl; /输出求逆所需的时间 return 0; 这个例子是求一个10001000的随机矩阵的逆矩阵。测试前我们先大概估计一下可能的速度。10001000 = 106 也就是说矩阵一共有一百万项,每一项是0到1之间的浮点数。一般求逆矩阵的方法是高斯消去法,它的复杂度是,其中n指矩阵维数(细节可参考维基百科Gaussian elimination)。(不是真的只需要次运算,这只是估计,还有系数和低次项,这里我省略了)。所以最少需要10003=109次浮点运算,也就是10亿次运算的规模。一个常用的衡量电脑CPU计算速度的指标是:每秒运行的FLOPS(就是“浮点运算次数”的缩写)。家用电脑的速度一般在GFLOPS级别,也就是CPU一秒钟可以做个几十亿到上百亿次的浮点数的加减乘除(当然一次只能做4个中的一个)。比如我的笔记本CPU用SiSoftware Sandra软件测试的结果如下图:我的电脑CPU是P8700双核,正常发挥的速度是15GFLOPS左右,也就是每秒能做150亿次加减乘除。打个折就算100亿次吧,运行上面的矩阵求逆最少需要10亿除以100亿,也就是0.1秒的时间。我们可以用Matlab做个参考,由于Matlab用的库是Intel MKL库(是优化的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而没有选Intel MKL。如果在安装时选择的是Intel MKL,如下图:Intel MKL的价格是499美元,提供免费试用版,但scilab在安装时会自动下载Intel MKL,不用我们再买了,直接用即可,这个跟Matlab一样。使用Intel MKL后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速度更快,但也差不多,如果真有人能做到快很多请发邮件给我(),我要膜拜一下。如果你对速度不满意,可以试试Intel MKL, Scilab里带了。如果想追求更极值的速度,可以借助显卡加速,速度还可以再提升1到2个数量级。5 Armadillo中各函数的使用方法可见:官网API Docs页面6 Armadillo的一些例子在下载文件中的examples文件夹中,它是用Visual Studio 2012编译的,如果低版本打不开可直接打开cpp文件复制到你的项目即可。7 如果你的速度比我的慢很多,很可能是你用的Blas和Lapack库不好,在网上找找换一个试试。8 想了解更多Armadillo的细节设置和使用,请阅读你下载后解压文件中的README.txt还可参考以下网页:1 http:/www.ru.is/kennarar/sigurdurh/Armadillo64hack.html2 http:/www.mir

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论