关于BLAS的简单介绍
阅读原文时间:2021年04月22日阅读:1

BLAS(Basic Linear Algebra Subprograms基础线性代数程序集)是进行向量和矩阵等基本线性代数操作的事实上的数值库。这些程序最早在1979年发布,是LAPACK(Linear Algebra PACKage)的一部分,便于建立功能更强的数值程序包。BLAS库在高性能计算中被广泛应用,由此衍生出大量优化版本,如Intel
的Intel MKL,AMD的ACML,Goto BLAS和ATLAS等非硬件厂商优化版本,以及利用GPU计算技术实现的CUBLAS等。

  1. BLAS的构成
    BLAS库按照功能可以分为以下三种级别:
  • BLAS1。支持向量与向量之间相关的操作。主要是为了编程方便,在实际计算中使用很少,因为不能在大多数机器上实现高性能。
  • BLAS2。支持矩阵与向量之间相关的操作。在O(n2)时间复杂度实现O(n2)的浮点运算。在许多向量机上能实现接近峰值的性能。然而在多级存储器的处理器上则性能一般,因为受限于数据在存储器间的迁移。
  • BLAS3。支持矩阵与矩阵之间相关的操作。在O(n2)时间复杂度实现O(n3)量级的浮点运算,能充分发挥现代处理器的性能,并且能为用户提供透明的并发机制。
  1. BLAS函数介绍
    BLAS中对每个函数的功能定义如下。BLAS函数名中的前缀“x”表示参数和
    返回值的类型:
    S一单精度实数
    D一双精度实数
    C一单精度复数
    Z一双精度复数
    Q一混合精度
    其中混合精度由S,D,C,Z组成,最左边表示返回值类型,其余为参数类型。如DROTMG表示的是双精度的平面转换,SSCAL表示的则是单精度的向量缩放。BLAS!函数列表如表1.1所示,BLAS2函数列表如表1.2所示,BLAS3函数列表如表1.3所示。

                                       表1.1BLASl函数列表


                                    表1.2 BLAS2函数列表


                                        表1.3 BLAS3函数列表

  • BLAS主要参数
    在BLAS2和BLAS3的函数中,有以下重要的参数:
    INCX: 向量X的存储步长
    LDA: 矩阵A的存储步长(主维(Leading Dimension)实际占用的空间);
    TRANS: 矩阵的转置形式,T(实数转置)、N(实数非转置)、C(复数共轭转置)、H(复数共轭非转置)
    UPLO: 对称阵或三角阵的存储方式,U(上三角)、L(下三角)
    DIAG: 对角线形式,N(非单位对角线)、U(单位对角线)
    SIDE: 矩阵在操作中的位置,L(左边)、R(右边)

  • BLAS优化现状
    BLAS(Basic Linear Algebra Subprograms)是进行向量和矩阵等基本线性代数操作的事实上的标准,一般来说在不同平台上的实现需要进行专门的优化。BLAS库在高性能计算中被广泛应用,并由此衍生出了大量的优化版本。
    目前主要有两种BLAS库的高效实现手段:第一种是针对不同的平台进行的优化,如gotoBLAS库;第二种足自动调优的思想。它可以通过分析不同平台的性能参数,来自动选择不同的优化方案。通过这种方式形成了通用的BLAS优化版本,如ATLAS(Automatically Tuned LinearAlgebra Soflware)库。近年来随着GPU的发展,出现了利用GPU实现的BLAS库,如基于NVIDIA公司CUDA框架的CUBLUS。
    ATLAS库实现了BLAS与LAPACK中绝大多数的函数。它可以自动替指定的处理器找出有效率的方式,用来高效实现BLAS库。目前ATLAS库完成了基于C和FORTRAN两个版本的高效BLAS库实现。gotoBLAS库支持Opteron、Xeon、ltanium、Power、Alpha等平台。并且在Xeon和Opteron平台上,可以同时支持Windows和Linux两种操作系统。gotoBLAS库和ATLAS库都是开源软件,通常来说, gotoBLAS库的性能较高。但是gotoBLAS库针对特定的平台,适用于主流的处理器。因此gotoBLAS
    库的可移植性很差;而ATLAS库则是通用版本,ATLAS库通过牺牲部分性能来提高可移植性。因此ATLAS库针对特定平台的优化是不够的,并且在ATLAS库中只对某些函数进行了优化。
    针对特定平台来优化BLAS库是很重要的工作。目前已经有许多针对特定平台的BLAS库优化版本,它们的性能比原始的BLAS库有很大提高。在大规模并行处理机Hatachi SR2201上实现了高速版的BLAS,它的总体性能提升1.4倍,而双精度性能则提升1.8倍。
    吴少刚等在类Beowulf机群系统上,将矩阵乘的性能比原始BLAS中的性能提升了5倍以上。
    李忠泽等在Pentium Pro体系结构上实现了高效的BLAS库,其中BLAS库中的主要函数DGEMM的性能比原来的BLAS版本中的性能提高了7倍。龙翔、李忠泽等还在三级BLAS上实现了多线程化。

  • CUBLAS介绍
    CUBLAS(CUDA Basic Linear Algebra Subprograms)是CUDA上工具包中包含的一个BLAS库。CUBLAS库是一个基本的矩阵与向量的运算库,提供了与BLAS相似的接口,可用于简单的矩阵计算,其输入是放在显存中的矩阵和向量数据。要使用CUBLAS库,程序必须先将矩阵的数据拷贝到显存中。CUBLAS
    库的效率是比较高的,但是CUDA工具包中只包含CUBLAS库的二进制文件。NVIDIA公司并没有发布CUBLAS库的源代码。

  • ACML介绍
    ACM(AMD Core Math Library)是AMD提出的数学核心库,ACML包含BLAS, Lapack, FFT, RNG(随机数生成器)四个部分,内建了openmp,也就是说不用手动控制多线程和多任务。在运用ACML的程序中,只需要在运行的时候设置OMP_NUM_THREADS=n(例如export OMP_NUM_THREADS=n)就会以n线程运行

    • BLAS-Basic Linear Algebra Subprograms
      完全的level1,level2,level3支持
      高度优化的DGEMM和其他的Level 3 BLAS
      OpenMP对关键例程的支持
    • Lapack-Linear Algebra package
      使用BLAS去解决线性代数问题
      OpenMP对关键例程的支持
    • FFT-快速傅里叶变换
      时频域
      手工调校
      openMP支持2D,3D转换
    • 快速/矢量超验数学库-Fast/vector transcendental math library
      1,2,4, or N values per call
      单精度,双精度
    • RNGs-(随机数生成器)
      综合参考实现
  • Intel MKL介绍
    Intel数学核心函数库(MKL)是一套高度优化、线程安全的数学例程、函数,面向高性能的工程、科学与财务应用。英特尔 MKL 的集群版本包括 ScaLAPACK 与分布式内存快速傅立叶转换,并提供了线性代数 (BLAS、LAPACK 和Sparse Solver)、快速傅立叶转换、矢量数学 (Vector Math) 与随机号码生成器支持。
    主要包括:
    ① LAPACK (线形代数工具linear algebra package)
    ② DFTs (离散傅立叶变换 Discrete Fourier transforms)
    ③ VML (矢量数学库Vector Math Library)
    ④ VSL (矢量统计库Vector Statistical Library)
    2、MKL的主要功能
    1)BLAS 和 LAPACK
    在英特尔处理器中部署经过高度优化的基本线性代数例程BLAS(Basic Linear Algebra Subroutines)和 线性代数包LAPACK(Linear Algebra Package) 例程,它们提供的性能改善十分显著。
    2)ScaLAPACK
    ScaLAPACK是一个并行计算软件包,适用于分布存储的MIMD并行机。ScaLAPACK提供若干线性代数求解功能,具有高效、可移植、可伸缩、高可靠性的特点,利用它的求解库可以开发出基于线性代数运算的并行应用程序。
    ScaLAPACK 的英特尔? MKL 实施可提供显著的性能改进,远远超出标准 NETLIB 实施所能达到的程度。
    3)PARDISO稀疏矩阵解算器
    利用 PARDISO 直接稀疏矩阵解算器解算大型的稀疏线性方程组,该解算器获得了巴塞尔大学的授权,是一款易于使用、具备线程安全性、高性能的内存高效型软件库。英特尔? MKL 还包含共轭梯度解算器和 FGMRES 迭代稀疏矩阵解算器。
    4)快速傅立叶变换 (FFT)
    充分利用带有易于使用的新型 C/Fortran 接口的多维 FFT 子程序(从 1 维至 7 维)。英特尔? MKL 支持采用相同 API 的分布式内存集群,支持将工作负载轻松地分布到大量处理器上,从而实现大幅的性能提升。此外,英特尔? MKL 还提供了一系列 C 语言例程(“wrapper”),这些例程可模拟 FFTW 2.x 和 3.0 接口,从而支持当前的 FFTW 用户将英特尔? MKL 集成到现有应用中。
    5)矢量数学库(VML)
    矢量数学库(Vector Math Library)借助计算密集型核心数学函数(幂函数、三角函数、指数函数、双曲函数、对数函数等)的矢量实施显著提升应用速度。
    6)矢量统计库—随机数生成器(VSL)
    利用矢量统计库(Vector Statistical Library)随机数生成器加速模拟,从而实现远远高于标量随机数生成器的系统性能提升。

  • XBLAS
    劳伦斯伯克利实验室的的 X.S. Li 和 J. Demmel 等人引入 double-double 算法改善基本线性代数子程序集 BLAS 于 2002 年提出混合精度的 XBLAS, 并在此基础上提出额外精度迭代精化算法,分别于 2006 年和 2009 年应用于求解线性系统和最小二乘等问题,同时给出可靠的误差界限。美国工程院院士、IEEE 会士、ACM 会士、加州大学伯克利分校的 J. Demmel 教授一直致力于推动XBLAS 成为下一代 BLAS 标准。

  • GEMV和GEMM
    GEMV是BLAS2的函数,普通矩阵与向量乘,
    GEMM是BLAS3的函数,普通矩阵相乘。

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章