走进BLAS/LAPACK(1)

来源:互联网 发布:dota2能在mac上玩吗 编辑:程序博客网 时间:2024/05/18 01:41

引言

BLAS和LAPACK是什么?相信大部分对线性代数计算有初步认识的人都知道是专门为线性代数开发的工具库。blas的全名是basic linear algebra subprograms,共有三个层次的计算:

  • level 1:向量与向量之间的计算
  • level 2:向量与矩阵之间的计算
  • level 3:矩阵与矩阵之间的计算

而lapack则是建立在blas之上的更复杂的计算程序,比如说LU分解,Ax=b 的求解。更详细的信息可以百度或google,但是纸上得来终觉浅,不管你把资料看得多仔细,也不可能知道这些软件,更确切地说库,是如何使用的,而这就是我写这一系列blog的目的。关于blas/lapack的中文资料太少了,在网上能找到的大部分都是如何安装这些tarfile,安装完了,然后呢?没有然后了,好心的给些简单的例子,却没有说如何链接这些库。看完之后依然不懂,根本没有办法理解。我自己从一无所知到慢慢理解,花费了一些时间和精力,在我写完这一系列blog之后,希望能够帮上其它人,也希望和大家一起交流。

配置

所有代码的编译都是在ubuntu 14.04 LTS 上,C/C++用的是gcc,而fortran用的是gfortran,我没在windows平台上试过,所以不清楚。说句实在的,想要学会使用blas这一类库还是在linux平台上更好一些。每个安装的包我都会在介绍时注明版本,这里就不多说了。

简介

虽然blog的名字是走进blas/lapack,但介绍blas的时间会远远超过lapack,原因有两点:第一,lapack是建立在blas之上的,当你弄明白了blas的原理,lapack的使用也就不用多说了。第二,同时也是主要原因,blas的种类太多了,而lapack相对较少。对,blas有很多种,本质上说,blas只是一个规范,它规定了基本函数的名称与作用,输入输出的参数数目和类型,至于如何实现,就有不同的版本了,这是为什么了呢?

原因很简单,还是回到那句话,lapack是建立在blas之上的,也就是说,lapack的运算速度很大程度依赖于blas的运算速度。因此,对于blas的优化就显得很重要。而像这种底层代码的优化,就不仅仅限于软件层面上了,更多是在于硬件方面,如何充分利用不同的系统架构,不同的处理器的特点,使之能发挥出最大的性能就成了关键。比如说同样是linux的操作系统,使用intel处理器和使用AMD处理器,二者特有的blas库不一样;都是用intel的处理器,ubuntu和MACBOOK的专属blas也不一样。通常来说,最早Fortran版的blas是最慢的,不建议使用,因此也被称为reference implmentation (只有参考的价值,没有使用的价值),还有其它各种版本的implementation,强烈建议看完blas(维基百科) 再接下看这篇博客。这样对我接下来要干的事情也有一个整体的印象。

限于我笔记本的配置,我只会测试reference blas,open blas,ATLAS和MKL。其间也会简单介绍一下cblas这个C语言的接口。

0 0
原创粉丝点击