mak*_*ghi 131 c blas lapack atlas
我不明白BLAS,LAPACK和ATLAS是如何相关的以及我应该如何一起使用它们!我一直在查看他们的所有手册,我对BLAS和LAPACK以及如何在我找到的极少数示例中使用它们有了一般概念,但我找不到任何使用ATLAS的实际示例来查看它与这两个.
我正在尝试对矩阵做一些低级别的工作,我的主要语言是C.首先我想使用GSL,但它说如果你想要最好的性能,你应该使用BLAS和ATLAS.有没有什么好的网页提供一些很好的例子,说明如何一起使用这些(在C中)?换句话说,我正在寻找使用这三个(或其中任何一个子集!)的教程.总之我很困惑!
Ste*_*non 145
BLAS是低级矩阵和向量算术运算的集合("通过标量乘以向量","将两个矩阵相乘并添加到第三个矩阵"等等).
LAPACK是高级线性代数运算的集合.诸如矩阵因子分解(LU,LLt,QR,SVD,Schur等)之类的东西,用于执行诸如"找到矩阵的特征值",或"找到矩阵的奇异值"或"求解线性系统"之类的事情".LAPACK建立在BLAS之上; 许多LAPACK用户只使用LAPACK接口,根本不需要了解BLAS.LAPACK通常与BLAS分开编译,并且可以使用您可用的任何高度优化的BLAS实现.
ATLAS是BLAS接口的便携式相当好的实现,它还实现了一些最常用的LAPACK操作.
"你应该使用什么"取决于你正在尝试做什么以及你正在使用什么平台的细节.但是,对于"使用ATLAS + LAPACK",你不会走得太远.
Foa*_*oad 37
前一阵子,当我开始在做一些线性代数C
,它来到我作为一个惊喜地看到有这么几个教程BLAS
,LAPACK
和其他基本API
,S尽管他们在某种程度上许多其他库的基石.出于这个原因,我开始收集所有的例子/教程我能找到所有在互联网上的BLAS
,CBLAS
,LAPACK
,CLAPACK
,LAPACKE
,ATLAS
,OpenBLAS
...在这个Github上回购.
好吧,我应该警告你,作为一名机械工程师,我在管理这样的git存储库或GitHub方面经验不足.对你们来说,这看起来一团糟.但是,如果你设法克服凌乱的结构,你会找到各种可能有帮助的例子和说明.我已经尝试了大部分,确保他们编译.那些不编译的我已经提到了.我已修改其中许多是可编译的GNU compilers
(gcc
,g++
和gfortran
).我已经制作了MakeFile
一些你可以阅读的内容,以了解如何Fortran/FORTRAN
在一个C
或一个程序中调用个别例程C++
.我还为mac和linux添加了一些安装说明(对不起windows家伙!).我还制作了一些bash
.sh
文件来自动编译其中的一些库.
但要你的另一个问题:BLAS
和LAPACK
相当API
不是特定SDK
秒.它们只是规范或语言扩展的列表,而不是实现或库.随着中说,有原始的实现通过入Netlib在FORTRAN 77
谈论的时候,大多数人是指(容易混淆的!)BLAS
和LAPACK
.所以如果你在使用这些时看到很多奇怪的东西,那API
是因为你实际上是在调用FORTRAN
例程C
而不是C
库和函数.ATLAS
并OpenBLAS
有一些最好的实现BLAS
,并LACPACK
就我知道的.它们符合原始版本API
,尽管据我所知,它们是C/C++
从头开始实现的(不确定!).还有的GPGPU的实现API
使用S OpenCL
:CLBlast,clBLAS,clMAGMA,ArrayFire和ViennaCL提一些.还有针对特定硬件或平台优化的供应商特定实现,我强烈反对任何人使用它们.
我建议任何想要学习BLAS
和使用LAPACK
的人C
都是先学习FORTRAN-C
混合编程.上述回购的第一章专门讨论这个问题,在那里我收集了许多不同的例子.
PS我一直在处理存储库的dev分支.它似乎稍微不那么凌乱!
小智 11
到目前为止,ATLAS已经过时了。它是在人们认为针对各种平台优化BLAS超出人类能力的时候开发的,因此,自动生成和自动调整是必须的。
在2000年代初期,出现了Kazushige Goto,他展示了如何手动编码高效的实现。您可能会喜欢《纽约时报》上的一篇有趣的文章:https://www.nytimes.com/2005/11/28/technology/writing-the-fastest-code-by-hand-for-fun-a-human- computer-keeps.html。
Kazushige一方面对矩阵矩阵乘法的高性能实现背后的理论有更好的了解,另一方面对它们进行了更好的设计。他的方法通常在当前CPU上表现最好,但不在ATLAS自动调整的搜索空间中。因此,ATLAS本质上是劣等的。Kazushige对BLAS的实施被称为GotoBLAS。他加入行业时被称为OpenBLAS。
GotoBLAS背后的思想被重构为一个新的实现,即类似于BLAS的库实例化软件(BLIS)框架(https://github.com/flame/blis),该框架实现了相同的算法,但结构代码更少需要针对新架构进行自定义实施。BLIS用C编码。
这次讨论表明,BLAS的实施很多。BLAS本身是该接口的事实上的标准。ATLAS曾经是最先进的技术。它不再。