ALTAS,LAPACK, SCALAPACK, MUMPS记录

安装ALTAS,LAPACK, SCALAPACK, MUMPS记录 (2)


 
这次开始安装ATLAS和LAPACK的组合,先做出这个串行版本的,下次装BLACS和ScaLAPACK的并行版本。开

一。 BLAS,ATLAS 与 LAPACK

BLAS(Basic Linear Algebra Subroutines, )是做数值计算最重要的数学函数库,包含3个Level的线性代数运算,都是以Fortran语言写的高效率程序。BLAS Level 1-3 分别是 向量-向量运算,矩阵-向量运算和矩阵-矩阵运算,从计算复杂度O(n) 向 O(n^3)过渡。

官方的网站是  http://www.netlib.org/blas/  从这里可以下载到最原始的BLAS(F77写的,只有FORTRAN接口的,不过后续也出了C接口的)还有些相关文档。一般你得到的是所有3个Level的函数源码,*.f, 包里面含有Makefile,安装上正确的 fortran编译器即可编译出自己的BLAS库(将源码编译成目标文件 *.o 然后用ar打包到 libblas.a),作为静态库供人使用。当然你也可以编译出共享库 (shared library). 

当然除了普通版本的BLAS更有针对你的机器做优化版本的BLAS,那就是ATLAS(Automatically Tuend Linear Algebra Subprograms),官方网站是  http://math-atlas.sourceforge.net/,当然要针对你的机器和平台进行优化,编译出结果的速度也就会相对慢一些。

LAPACK (Linear Algebra PACKage) 是在BLAS 基础上做出来的,针对线性代数方程组,线性最小二乘问题和矩阵特征值问题求解的软件包,也是用F77写的,LAPACK一般来说是没有官方做的C-API的。

LAPACK提供的一些函数也按功能分类,它的分类是按照函数功能的粒度来的,最高层是 driver routines 是求解具体问题的函数, 中间层是 computional routines 是在具体求解过程中需要用到的一些基本的矩阵变换,矩阵分解等操作,最底层是 auxiliary routines这些都是给上两层提供辅助的函数。

LAPACK里面用的BLAS的线性代数运算去整合它的求解。所以官方文档的最开始就说明了,LAPACK包里面虽然包括了一份最普通版本的BLAS,你可以编译,但如果有更高效的BLAS,要首先使用之。所以我们在这里就必须先安装ATLAS了。


二 。安装ATLAS, LAPACK

对于这两个包的安装,说白了就是将源代码编译成目标文件,或是组合成静态库,或是在编译的时候就编译成动态版本的,再组合成共享库。一般共享库使用的较多,默认安装ATLAS是 会编译成静态库的,指定选项的得到动态库。我试过现在的最新版本ATLAS(3.10.0)和LAPACK(3.4.3)的组合,安装虽然生成了两个共享库文件,但是再装之后的软件时可能会带来麻烦(这个可以放到最后再说)。正常安装的版本,我选的是 ATLAS(3.8.4)和LAPACK(3.1.1),生成标准的6个共享库文件,并测试通过。

由于ATLAS的安装包里面,提供了BLAS和普通版本,也有C的全部API接口,同时也包含了少部分的LAPACK函数的C-API接口,如果只用C-API仅仅用这个包就行了。不过很多LAPACK的函数是没有的,这就必须在找一份完整的LAPACK,与之同时安装,调用时候用Fortran的接口。

安装过程无外乎如下几个步骤:
1。 解压 ATLAS和LAPACK 的包到你方便操作的目录下
2。进入ATLAS目录,新建一个BUILD的子目录(也可以是任何其他地方的目录,提供给Build的时候用,只要不是跟ATLAS的源码目录相同即可)
3.   进入Build目录,进行configure 并指定一些相关的选项(包括编译器,编译选项还有系统相关的)
4. make build 
5. 做个有责任心的人的话,make check, make ptcheck, make time,保证没有报错的情况下,就可以安装生成的库文件到你的库目录了。

这里比较麻烦的有如下几点。

1. 安装ATLAS之前,要先安装一遍LAPACK! 有人肯定要问,我装ATLAS就是为了给LAPACK提供一个高效的BLAS,这又是为神码?
安装ATLAS其实是同时把LAPACK也给一起编译了,但是ATLAS里面没有完整的LAPACK,你就必须给ATLAS提供一个完整的LAPACK程序包。怎么提供呢,就是把LAPACK的 lapack_LINUX.a 提供给它,这就必须先编译一次LAPACK。

2. 编译LAPACK与ATLAS要用相同的编译器和编译选项
ATLAS是有赖机器及OS平台的,所以编译选项最好还是让它自己去找最优的,人为指定难免出错。LAPACK与ATLAS用相同的选项,这只能从ATLAS上取得。
先在给ATLAS BUILD目录同级建一个tmp目录,作为临时build目录,进去 configure 一下,吧跟LAPACK无关的选项都别带上,会在 tmp 下生成一个 make.inc, 里面就包含有ATLAS的 F77 和 F77FLAGS,copy到 LAPACK这边的make.inc中,指定给 FORTRAN和OPTS就可以了。

3. configure ATLAS时候的必要选项 
../configure -b 32 -D c -DPentiumCPS=2826 -Fa alg -fPIC
这些对提取F77和F77FLAGS的值够用了。-b 指定编译出库的类型(32位库还是64位库), -D c -DPentiumCPS是指定你的CPU的时钟频率,可以功过 grep MHz /proc/cpuinfo 得到。 要得到动态的共享库,就必须加上 -Fa alg -fPIC 编译选项,得到与位置无关的代码。
另外在编译好 LAPACK 之后,到 ATLAS/BUILD/ 下 configure 时再附加上 --prefix=xxx 和 --with-netlib-lapack=xxx/lapack_LINUX.a 就完整了 
其他一些编译选项,则可以 ../configure --help 查看,活在是去看官方的安装文档

4. make build 和一系列的测试之后,可以进入到 BUILD/lib 看到生成了静态库, *.a 未有 *.so出现,再次 make shared, make ptshared, 得到如下六个库文件,大工告成!
libatlas.so   libcblas.so   libf77blas.so   liblapack.so   libptcblas.so   libptf77blas.so

在 3.10.0 的 ATLAS 中没有了 --with-netlib-lapack指定lapack_LINUX.a 只需要 --with-netlib-lapack-tarfile,给出下载的包就行,不需要自己在去编译 LAPACK了。但是最后生成的 库文件也给整合了,不是上面的6个,而是两个 
libsatals.so libtatlas.so, 去 BUILD/lib 里面查看 Makefile, 可以看到确实被整合了的。为了依其上的软件能更通用,又不想自己去改Makefile的内容,就用老版本的组合了。

参考:
LAPACK 上的安装说明,ATLAS的安装手册(ATLAS./doc/atlas_install.pdf)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值