首页 文章

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

提问于
浏览
108

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

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

4 回答

  • 3

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

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

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

    “你应该使用什么”取决于你正在尝试做什么以及你正在使用什么平台的细节 . 但是,对于“使用ATLAS LAPACK”,你不会走得太远 .

  • 128

    不久之前,当我开始在 C 中做一些线性代数时,我惊讶地看到 BLASLAPACK 和其他基本 API 的教程很少,尽管事实上它们在某种程度上是许多其他图书馆的基石 . 出于这个原因,我开始收集我在互联网上找到的所有示例/教程 BLASCBLASLAPACKCLAPACKLAPACKEATLASOpenBLAS ...在this Github repo .

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

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

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

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

  • 30

    ATLAS现在已经过时了 . 它是在人们认为优化各种平台的BLAS超出人类能力的时候开发的,因此自动生成和自动调谐是最佳选择 .

    在21世纪初期,随后是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曾经是最先进的 . 它不再是 .

  • 0

    据我所知,在完成ATLAS存储库之后,似乎它包含了在C中重新实现BLAS . 除此之外还有更多内容,但我希望它能回答这个问题 .

相关问题