BLAS学习

导师突然通知要开始关于blas的讨论班,之前甚至都没听说过blas这个词,又要开始新一波的锤炼小白之路了…

1. BLAS简介

首先BLAS的全称是 Basic Linear Algebra Subprograms,即 基础线性代数子程序库,其中包含了一系列基本的线性代数运算函数的接口,因此BLAS也会被称为 矩阵运算库

需要注意,BLAS是一个接口的标准而不是某种具体实现,也就是说即便不同版本的BLAS库可以实现相同的接口和功能,但每个接口内部的算法和程序是可以不同的,即具体实现不相同。目前存在几种不同的BLAS (性能对比可参考矩阵运算库之间的性能区别):

1.1 两种基本运算库

  • BLAS:其官网是 Netlib,Netlib用Fortran语言实现了BLAS的这些API接口,但只是一般性地实现了基本功能,并没有对运算做过多的优化,因此这个版本的 BLAS 被称为 reference BLAS,运行速度较慢,通常被其他版本用于衡量性能。之后Netlib又产生了C 语言的版本 cBLAS,除一些接口外与BLAS之间并没有太大的区别。
  • LAPACK:其官网也是 Netlib,是Netlib以BLAS为底层利用Fortran语言实现的另一矩阵运算库,该库相比于BLAS库提供了更为丰富的计算工具,其运行效率也要比BLAS库高。对应cBLAS,也产生了相应的cLAPACK

1.2 三种高级运算库

  • MKL:其官网是 MKL(Math Kernel Library),它是基于英特尔® C++和Fortran编译器构建而成,底层包含了BLAS、LAPACK、ScaLAPACK(面向集群的 LAPACK 分布式内存并行版本)、PARDISO(该并行直接稀疏矩阵解算器的三个阶段均实现了线程化)、DFTs(离散傅立叶变换)、VML(矢量数学库)、VSL(矢量统计学库),因此MKL提供的 BLAS 可以认为是当前性能最高的矩阵运算库。MKL 虽然不是一个开源软件,但目前可以免费下载使用。
  • Armadillo:其官网是 C++ library for linear algebra & scientific computing,与Matlab相似,是一个易于使用的C++矩阵库。其底层包含了LAPACK、BLAS和 ATLAS(Automatically Tuned Linear Algebra Soft) 封装包,支持MKL和 OpenBLAS 等诸多高性能版本。
  • Eigen:其官网是 C++ template library for linear algebra,Eigen是可以用来进行线性代数、矩阵、向量操作等运算的C++库,它采用源码的方式提供给用户使用,只需要包含Eigen的头文件即可使用。它支持以BLAS/LAPACK作为底层 (EIGEN_USE_BLAS、EIGEN_USE_LAPACKE),也支持以MKL作为底层 (EIGEN_USE_MKL_ALL),使用起来非常的方便。

1.3 对比

没有时间打字了,就直接截图过来了,上面给了参考链接,这里再放一遍 (矩阵运算库之间的性能区别)。

看到现在感觉MKL是最强的,在 BLAS简介 中看到作者说无论使用哪种软件,都推荐阅读一下 MKL中BLAS的说明文档
在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值