BLAS,LAPACK和ATLAS之间的关系是什么?

我不明白BLAS,LAPACK和ATLAS是如何相关的,我应该如何将它们一起使用! 我一直在浏览所有的手册,我对BLAS和LAPACK有一个总体的概念,以及如何使用它们,但是我找不到任何使用ATLAS的实际例子来看看它是如何相关的这两个。

我想在matrix上做一些低级别的工作,而我的主要语言是C.首先,我想使用GSL,但是如果你想要最好的性能,你应该使用BLAS和ATLAS。 有没有什么好的网页给出一些如何使用这些(在C中)所有在一起的好例子? 换句话说,我正在寻找关于使用这三个(或他们的任何子集!)的教程。 总之我很困惑!

BLAS是低级matrix和向量算术运算(“通过标量乘以一个向量”,“乘以两个matrix并添加到第三个matrix”等等)的集合。

LAPACK是更高级的线性代数运算的集合。 诸如matrix分解(LU,LLt,QR,SVD,Schur等)用于“findmatrix的特征值”或“findmatrix的奇异值”或“求解线性系统” ”。 LAPACKbuild立在BLAS之上; 许多LAPACK用户使用LAPACK接口,根本不需要知道BLAS。 LAPACK通常是与BLAS分开编译的,可以使用任何可用的高度优化的BLAS实现。

ATLAS是BLAS接口的便携式相当好的实现,也实现了一些最常用的LAPACK操作。

“你应该使用什么”取决于你想要做什么和你使用的平台的细节。 但是,使用ATLAS + LAPACK不会有太大的错误。

而前一段时间,当我开始在C语言中做一些线性代数时,看到BLAS,LAPACK和其他基础API的教程很less,我感到惊讶。 尽pipe它们在某种程度上是许多其他图书馆的基石。 出于这个原因,我开始收集所有的例子,我可以在互联网上findBLAS,CBLAS,LAPACK,CLAPACK,LAPACKE,ATLAS,OpenBLAS …在这个Github回购 。

那么,我应该警告你,作为一名机械工程师,我在pipe理这样的回购方面几乎没有经验,可能首先会让你们看起来一塌糊涂。 但是,如果你设法克服困境,你会发现所有的例子和说明可能是帮助。 我已经尝试了最多的,我没有提到的编译。 我已经修改了其中的许多与GNU编译器(gcc,g ++和gfortran)编译。 我已经创build了可以读取的make文件,以了解如何在C或C ++程序中调用各个Fortran例程。 我也已经把一些安装说明的Mac和Linux(抱歉窗户家伙!)。 我也做了一些bash文件来自动编译这些库中的一些。

但是要回到你的另一个问题:BLAS和LAPACK是不是特定SDK的API。 它们只是规范或语言扩展的列表,而不是实现或库。 这就是说, Netlib在FORTRAN 77中提供了一些参考实现,大多数人在讨论BLAS和LAPACK的时候都会提到(令人困惑的)。 所以如果在使用这些API时看到很多奇怪的事情,那是因为实际上应该用C而不是C库和函数调用Fortran例程。 就我所知,ATLAS和OpenBLAS是BLAS和LACPACK的一些最好的实现。 它们符合最初的API,尽pipe据我所知,它们是从零开始(不确定!)在C / C ++上实现的。 还有针对特定硬件或平台进行优化的供应商特定实现,我劝阻任何人使用它们。

我向任何想要在C中学习BLAS和LAPACK的人推荐先学习Fortran-C混合编程。 提到的回购的第一章是关于这个问题的,在这里我收集了许多不同的例子。

我环顾四周,只能用一些简单的例子来find这两个网页。 我希望更多的人可以添加代码来使用这些库。

http://www.seehuhn.de/pages/linear

http://www.lindonslog.com/programming/atlas-blas-lapack-linear-algebra-libraries/

我searchBLAS,ATLAS,LAPACK之间的关系带我到这个页面。 虽然问题已经很老了,斯蒂芬·佳能的答案对于初步的理解很有帮助,但是我会把其他问题引用到BLAS的维基百科上 。 页面和内部的链接对我非常有帮助。

据我所知,在通过ATLAS存储库之后,似乎它包含了在C中重新实现BLAS。还有一点比它多,但我希望它能回答这个问题。

Interesting Posts