关于BLAS的简单介绍

article/2025/9/13 10:53:08

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的函数,普通矩阵相乘。


http://chatgpt.dhexx.cn/article/uSbwCrhm.shtml

相关文章

Blazor 基础入门

Blazor 基础知识 Intro Blazor 是微软在 .NET 里推出的一个 WEB 客户端 UI 交互的框架, 使用 Blazor 你可以代替 JavaScript 来实现自己的页面交互逻辑,可以很大程度上进行 C# 代码的复用,Blazor 对于 .NET 开发人员来说是一个不错的选择。 托…

Blazeds学习

BlazeDS是一个基于服务器的Java远程调用(remoting)和Web消息传递(messaging)技术,使得后台的Java应用程序和运行在浏览器上的Flex应用程序能够相互通信 一个BlazeDS应用包括两个部分:一个客户端应用程序和…

Blazeds初步

客户端应用 Blazeds包括客户端和服务端应用。客户端应用是典型的Adobe flex或者AIR应用。Flex和AIR应用使用flex组件和blazeds服务通信,包括Remote Object、HTTPService、WebService、Produce和Consumer。其中的HTTPService、WebService、Produce和Consumer是Flex S…

BlazeDS配置实例

.什么是BlazeDS BlazeDS is the server-based Java remoting and web messaging technology that enables developers to easily connect to back-end distributed data and push data in real-time to Adobe Flex and Adobe AIR™ applications for more responsive rich Inte…

Bazel

bazel:是一个可以快速构建和测试任意规模软件的编译工具,能够用来编译大部分语言。Bazel使用分布式缓存和增量构建方法,使得编译更加快速。 Bazel 主要文件 使用 Bazel 管理的项目一般包含以下几种 Bazel 相关的文件:WORKSPACE&a…

BlazeDS

BlazeDS 为使用Flex 或者AIR 的客户端程序提供了高度可扩展的远程访问和消息服务。 blazeds :是一门技术,是一门面向AS的前后台通讯框架 在服务器端:提供3种服务,远程调用(remoting-config.xml中配置),访问…

Blazeds(一)

Blazeds体系结构 一个Blazeds应用包含了一个运行在浏览器或者Adobe AIR的客户端应用并且和J2EE应用服务端通信。客户端可以是Flex也可以是结合Flex、HTML/JavaScript的应用程序。 整个体系主要包括通道、端点、消息、服务、目的地、适配器等,把这些搞懂也就…

Blazor 简介

Blazor 是一个用于使用 .NET 生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建丰富的交互式 UI。共享使用 .NET 编写的服务器端和客户端应用逻辑。将 UI 呈现为 HTML 和 CSS,以支持众多浏览器,其中包括移动浏览器。 使用 .…

blaze介绍

sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId1005269003&utm_campaigncommission&utm_sourcecp-400000000398149&utm_mediumshare 项目联系 QQ:231469242 FICO FICO(NYSE: FICO)是全…

BlazePose

摘要 我们提出了BlazePose,一种轻量级卷积神经网络架构,用于人体姿态估计,可用于移动设备上的实时推断。在推理过程中,网络为一个人产生33个身体关键点,在Pixel 2手机上以每秒30帧以上的速度运行。这使得它特别适合姿态…

BlazeDS介绍

概况 BlazeDS是用来处理J2EE服务器与远程客户端之间远程通信的组件,它以Servlet的形式部署在J2EE容器里,专门负责处理通信。一般而言,远程客户端采用Flex编写,因为Flex组件中对通信细节进行了良好的封装,使得Flex程序员不必关心通信细节。 图1 BlazeDS概况 BlazeDS应用程…

初探blazeDS

blazeDS是一套面向actionscript的前后台通信框架。 在服务器端,blazeDS以servlet的方式存在于java应用服务器上。它默认提供3中服务,远程调用(在remoting-config.xml中配置)、访问代理(proxy-config.xml)、…

BlazeDS详解

一、Blazeds初步 客户端应用 Blazeds包括客户端和服务端应用。客户端应用是典型的Adobe flex或者AIR应用。Flex和AIR应用使用flex组件和blazeds服务通信,包括Remote Object、HTTPService、WebService、Produce和Consumer。其中的HTTPService、WebService、Produce和…

MySQL配置Amoeba中间件

MySQL配置Amoeba中间件 Amoeba介绍环境配置安装Amoeba配置Amoeba配置文件配置dbServers.xml,设置数据库,登录MySQL的账号和密码 启动Amoeba注意事项 Amoeba介绍 Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中…

MySQL主从复制和基于Amoeba的读写分离部署

文章目录 MySQL主从复制和基于Amoeba读写分离什么是主从复制?为什么要有MySQL主从复制?什么是读写分离?一、MySQL主从复制原理二、主从复制的工作过程三、主从复制方式1、异步复制方式2、半同步复制/增强半同步复制3、全同步复制4、多线程复制…

amoeba mysql下载_amoeba数据库中间件透明实现MYSQL读写分离

Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba for Mysql软件。这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的 时候充当SQL路由功能,专注于分布式数据库代理层(Database Proxy)开发。座落与 Client、DB Server(…

mysql amoeba_MySQL基于Amoeba实现读写分离

读写分离应用分析: 在企业用户中,在大量的数据请求下,单台数据库将无法承担所有读写操作。解决方法: 配置多台数据库服务器以实现主从复制读写分离。 1、基于程序代码内部实现 在代码中根据select、 insert 进行路由分类,这种方法…

mysql amoeba 配置_Amoeba新版本MYSQL读写分离配置

官方简介 Amoeba的中文意思是变型虫 主要解决: • 降低 数据切分带来的复杂多数据库结构 • 提供切分规则并降低 数据切分规则 给应用带来的影响 • 降低db 与客户端的连接数 • 读写分离 个人简单描述 可能你还没明白Amoebla这鬼东西主要干麻的呢!比方说…

amoeba mysql_Mysql 基于 Amoeba 的 读写分离

首先说明一下amoeba 跟 MySQL proxy在读写分离的使用上面的区别: 在MySQL proxy 6.0版本 上面如果想要读写分离并且 读集群、写集群 机器比较多情况下,用mysql proxy 需要相当大的工作量,目前mysql proxy没有现成的 lua脚本。mysql proxy根本…

amoeba mysql binary_amoeba安装与实现amoeba for mysql读写分离

运行环境 l CentOS6.3 l Jdk1.6.0_30 l amoeba-mysql-binary-2.2.0 l amoeba:192.168.88.17 l master1:192.168.88.10 l slave1:192.168.88.11 一: 安装jdk1.5以上版本 1.1 卸载centos服务器自带版本jdk 1.1.1 …