BLAS,LAPACK和ATLAS之间有什么关系

时间:2013-07-25 12:31:42

标签: c lapack blas atlas

我不明白BLAS,LAPACK和ATLAS是如何相关的以及我应该如何一起使用它们!我一直在查看他们的所有手册,我对BLAS和LAPACK以及如何在我找到的极少数示例中使用它们有一个大概的想法,但我找不到任何使用ATLAS的实际示例来查看它与这两个。

我正在尝试对矩阵做一些低级别的工作,我的主要语言是C.首先我想使用GSL,但它说如果你想要最好的性能,你应该使用BLAS和ATLAS。有没有好的网页提供一些很好的例子,说明如何在一起使用这些(在C中)?换句话说,我正在寻找使用这三个(或其中任何一个子集!)的教程。总之我很困惑!

4 个答案:

答案 0 :(得分:136)

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

LAPACK是高级线性代数运算的集合。诸如矩阵因子分解(LU,LLt,QR,SVD,Schur等)之类的东西,用于执行诸如“找到矩阵的特征值”,或“找到矩阵的奇异值”或“求解线性系统”之类的事情”。 LAPACK建立在BLAS之上; LAPACK 的许多用户只使用LAPACK接口,根本不需要了解BLAS。 LAPACK通常与BLAS分开编译,可以使用任何高度优化的BLAS实现。

ATLAS是一种可移植的相当不错的BLAS接口实现,它还实现了一些最常用的LAPACK操作。

“你应该使用什么”取决于你正在尝试做什么以及你正在使用什么平台的细节。但是,“使用ATLAS + LAPACK”不会有太大的错误。

答案 1 :(得分:32)

前段时间,当我开始在C中进行一些线性代数时,我很惊讶地发现BLASLAPACK和其他基本{API教程很少。 {1}},尽管它们在某种程度上是许多其他图书馆的基石。出于这个原因,我开始收集我在互联网上找到的所有示例/教程BLASCBLASLAPACKCLAPACKLAPACKE,{ {1}},ATLAS ...在this Github repo中。

好吧,我应该警告你,作为一名机械工程师,我在管理这样的git存储库或GitHub方面经验不足。对你们来说,这看起来一团糟。但是,如果你设法克服凌乱的结构,你会找到各种可能有帮助的例子和说明。我已经尝试了大部分,确保他们编译。那些不编译的我已经提到了。我已将其中许多内容修改为可与OpenBLASGNU compilersgccg++进行编辑。我已经制作了gfortran个您可以阅读的内容,以了解如何在MakeFileFortran/FORTRAN计划中调用单个C例程。我还为mac和linux添加了一些安装说明(对不起windows家伙!)。我还制作了一些C++ bash个文件,用于自动编译其中一些库。

但是转到另一个问题:.shBLAS相当LAPACK不是特定的API。它们只是规范或语言扩展的列表,而不是实现或库。话虽如此,SDK中有Netlib的原始实现,大多数人在谈论FORTRAN 77BLAS时都会引用(令人困惑!)。因此,如果您在使用这些LAPACK时看到很多奇怪的事情,那是因为您实际上在API而不是FORTRAN库和函数中调用C例程。据我所知,CATLASOpenBLASBLAS的一些最佳实现。它们符合原始的LACPACK,尽管据我所知,它们是从API开始实现的(不确定!)。使用C/C++CLBlastclBLASclMAGMAArrayFireViennaCL来提及API的GPGPU实施一些。还有针对特定硬件或平台优化的供应商特定实现,我强烈反对任何人使用它们。

我建议任何想要在OpenCL中使用BLASLAPACK学习的人,首先要学习C混合编程。上述回购的第一章专门讨论这个问题,在那里我收集了许多不同的例子。

P.S。我一直在the dev branch of the repository工作。它似乎稍微不那么混乱了!

答案 2 :(得分:5)

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曾经是最先进的技术。不再了。

答案 3 :(得分:0)

据我所知,并且在通过ATLAS存储库工作之后,它似乎包含了在C中重新实现BLAS。除此之外还有更多内容但是我希望它回答这个问题。