​好友说:“要易懂,大多数人看的懂,还要带有趣味性,这就像杨振宁和霍金的对比一样,霍金的演讲带趣味性,听众多,名气大。比如,高性能计算和太空宇宙的关系,和生物医学的关系,有这些举例,那被阅读的次数会多很多”

前言:

为什么向量、矩阵运算是计算机软件非常重要的基础运算函数集呢?

让我们先讲标量,标量就是描述一个事物,只需要数值大小就行。例如一个苹果,一斤苹果,一年365天,如果要就行运算,一个算盘或计算器就搞定了,学会了这个可以做个小卖部老板了。

但,更多时候描述一个事物,往往一个量不够,需要更多特征量。例如物理要描述一个力,就有力的大小和方向;一种颜色需要红、绿、蓝三个量;在一个二维空间要描述一条线段、一个面,在一个三维空间描述一个立体结构;一天的股市交易数据等等、等等。于是,数学家通过上千年的努力构建了“向量”这个人类最强的数学概念。可以说懂标量做个小店老板。只有懂向量,你才懂算法是什么,你也将对世界有一个全新的认识。

另外,线性代数是数学的一个基础,也是整个科学的基础,因为人类的知识几乎都是建立在线性的基础上的。这是什么含义?线性代数是你所见到的视频、音频、人工智能所有计算机软件技术的基础。而矢量、向量,向量运算贯穿整个线性代数。线性代数要学习的内容就是如何解决线性问题,如何把复杂问题线性化是别的学科的内容,比如《微积分》、《信号与系统》等。

正文:

今天我来聊聊最受青睐的计算机代码排名第五的BLAS那些事情。BLAS是Basic Linear Algebra Subprograms的简写,它是一组线性代数计算中通用的基本运算操作函数集合。

---- BLAS简史 ----

(1979年)

科学计算通常利用向量和矩阵进行相对的简单数学运算,但计算量还是很大。而在上世纪70年代,科学界缺乏一套通用的计算工具来执行这些运算。所以科学界的程序员们要花时间编写完成基本数学运算的代码,而无法专心研究科学问题。但是编程世界需要一个标准。于是,1979年,出现了基础线性代数程序集(Basic Linear Algebra Subprograms, BLAS)[6]。这一标准一直发展到了1990年,为向量和后来的矩阵数学定义了一系列基本程序。

田纳西大学的计算机科学家Jack Dongarra认为,BLAS实际上将复杂的矩阵和向量运算简化成类似加减法一样基础的简单计算单元。他是BLAS开发团队的一员。

Cray-1超算:在1979年引入BLAS编程工具前,在加利福尼亚劳伦斯·利弗莫尔国家实验室里的Cray-1超级计算机等机器上工作的研究人员,没有线性代数标准。来源:ScienceHistory Images/Alamy

德克萨斯大学奥斯丁分校的计算机科学家Robert van de Geijn说,BLAS「可能是科学计算领域定义的最重要接口」。除了为常用函数提供标准命名,研究人员还可以确保基于BLAS的代码可以在任何计算机上以同样方式运行。这一标准同时也使得计算机产商可以不断优化BLAS,好在他们的硬件上快速运行。

40多年来,BLAS已经成为了科学计算技术栈的核心,使得科学计算软件得以持续发展。Dongarra说:「它是计算的基础结构。」

(2013年7月20日)

【OpenBLAS wiki】OpenBLAS is an optimized Basic Linear Algebra Subprograms (BLAS) library based on GotoBLAS 21.13 BSD version.

OpenBLAS 是一个基于BSD许可(开源)发行的优化 BLAS 计算库,由张先轶于2013年7月20日发起,并发布OpenBLAS 0.2.7第一个版本,作为OpenBLAS开源项目的发起人和主要维护者,张先轶获2016CCF科学技术奖二等奖 [2] 。BLAS(Basic Linear Algebra Subprograms 基础线性代数程序集)是一个应用程序接口(API)标准,用以规范发布基础线性代数操作的数值库(如矢量或矩阵乘法),OpenBLAS是BLAS标准的一种具体实现。

OpenBLAS迄今为止已经释放了三十多个发行版本,获得3700多个star,上千个fork。

2013年8月1日,OpenBLAS 0.2.8 version

2013年7月20日,OpenBLAS 0.2.7 version

......

2016年9月3日,OpenBLAS 0.2.19 ,多核

......

2019年8月19日,OpenBLAS 0.3.7 version

2020年12月13日,OpenBLAS 0.3.13 version

2021年3月18日,OpenBLAS 0.3.14 version

张先轶博士,北京理工毕业,中科院博士, UT Austin和MIT博后研究。CCF高性能计算专委会委员。OpenBLAS开源项目发起人。曾荣获中国计算机学会科技进步二等奖,中国科学院杰出科技成就奖。

我得说这是特意挑的,为此我在网络上搜索了一圈,我是觉得很有趣,有点科学家的气质。好奇,他是左手是在扶墙吗?

https://github.com/xianyi/OpenBLAS

由于文章配图的需要,我搜索了"BLAS"相关的图片,原来BLAS还是一个帅哥。尽管跑题了,因为实在太帅了,也表明我努力探索,所以有了如下图片,期望可以加个鸡腿。


---- BLAS库中函数的三个层次 ----

第一层:函数处理单一向量的计算以及两个向量的计算。层次1函数最初出现在1979年公布的BLAS库中。

第二层:函数处理矩阵与向量的计算,同时也包含线性方程求解计算。层次2函数公布于1988年。

第三层:函数包含矩阵与矩阵运算。层次3函数发表于1990年。

由于上文涉及到了向量、矩阵,我好奇对“矩阵、向量、张量”这些奇奇怪怪的名词是否有比较科普的文章,然而没有找到。在https://easyai.tech/ai-definition/vector找到了些图,就从这些图开始聊聊。

标量、向量、矩阵、张量的关系

这4个概念是维度不断上升的,我们用点线面体的概念来比喻解释会更加容易理解:

  • 点——标量(scalar)

  • 线——向量(vector)

  • 面——矩阵(matrix)

  • 体——张量(tensor)

标量

1个苹果,2个苹果,3个苹果

向量

向量(也称为欧几里得向量、几何向量、矢量),指具有大小(magnitude)和方向的量。

向量可以有n个特征纬度,于是它可以是这样的:

v={a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19....,an};

“嗨~~~,你打算这么错字数收稿费吗?”

向量,最初被应用于物理学,在物理学和工程学中,几何向量更常被称为矢量。许多物理量都是矢量,比如一个物体的位移,球撞向墙而对其施加的力等等。几何向量的概念在线性代数中经由抽象化,得到更一般的向量概念。

矩阵

我该怎么进一步解释呢?好吧,一堆具有细节特征描述的苹果!

张量

这可怎么办?

运算

这世界上有非常多优美的变换,如果你将他们编程,并可视化,就能得到下图。在数学家眼里,世界皆可用数学来表达!!!

插播:“向量”谁发明的?8位天才数学家,历经2000年完成!亚里士多德(《力学》一书中记载了“速度”的平行四边形法则,3个世纪以后又被海伦证明。物理学把力学元素分成了两类:矢量和标量,这里的力是既有大小又有方向的量,我们称之为矢量,矢量都满足“平行四边形法则”。而像质量等只有大小没有方向的量,我们称之为标量。);17世纪的英国数学家牛顿(Isaac Newton,1643—1727)在其数学名著《自然哲学之数学原理》中准确阐述、证明了力的“平行四边形法则”,给出了力的分解、合成方法,为他的整个力学系统的构建起了很大的作用。18世纪复数在伯努利、欧拉等大家的关注下,才得以广泛的关注,最著名的就有欧拉公式,欧拉公式将指数函数的定义域扩大到了复数域,建立和三角函数和指数函数的关系,被誉为“数学中的天桥”。......

是不是终于可以为挂科找到强大的理由呢?

计算机硬件运算单元的理解水平就是小学一年级,只懂“+-X÷ 移位”这种基本运算,如何计算这些奇奇怪怪的向量、矩阵、三角反三角函数、积分微分、指数对数?这就需要软件来设计这些算法,因为实在太难了,反正当初我是差点挂科了。于是也有了BLAS,LIBM/VML,FFT这些函数库,再形成了一些数学库集合,例如Intel MKL(Math Kernel Library),AMD MCL(Math Core Library),  APL(Arm Performance Libraries),PerfXLab国产自主知识产权的PerfXAPI-MPL(Math Performance Libraries)。

一位硕士生开发数学计算机软件,年收入达10亿美元!知道说谁吗?

上个世纪70年代,计算机在美国的发展进入了快车道,利特就成长于这一年代。利特1978年毕业于麻省理工大学电气工程和计算机科学专业,之后又于1980年在斯坦福大学获得了电气工程学硕士。

在读书期间他开始思考一个问题:如何能让计算机的运算变得更加迅速和简单?为了实现这一理想,他开始全身心地投入到研究工作中。

1984年利特成立公司,他想召集更多志同道合的人一起为共同的理想而奋斗。共同完成创业的梦想,但万事开头难,公司成立初期利特是唯一的一名员工,但他从来没有想过放弃,在他租来的房屋里没日没夜地研究程序和代码,而他的坚持也终于等来了另外两位合伙人,就这样他们三人渐渐将公司运作起来。经过不断地尝试和努力他们终于开发出了公司的第一个也是目前最成功的数学计算机软件——Matlab(数字实验室),这一软件在理工世界中可谓人尽皆知。

之后,公司便开启了“疯狂”的升级和扩充模式。因为新员工的不断加入,迈斯沃克从最初的出租屋转移到马萨诸塞州更大的一间屋子,可还是有很多员工只能在不同的地点远程工作。之后公司又搬到南纳蒂克一栋大楼的顶层,并最终“霸占”了整栋大楼。而现在,公司的足迹已经遍布世界其他地区。

Matlab解决的核心问题是什么呢?其实就是“如何计算这些奇奇怪怪的向量、矩阵、三角反三角函数、积分微分、指数对数等各种计算和方程”。


----这些,你知道吗?---

LAPACK

简介:线性代数库,也是Netlib用fortran语言编写的,其底层是BLAS。LAPACK提供了丰富的工具函式,可用于诸如解多元线性方程式、线性系统方程组的最小平方解、计算特徵向量、用于计算矩阵QR分解的Householder转换、以及奇异值分解等问题。该库的运行效率比BLAS库高。从某个角度讲,LAPACK也可以称作是一组科学计算(矩阵运算)的接口规范。Netlib实现了这一组规范的功能,得到的这个库叫做LAPACK库。

MKL

简介:英特尔MKL基于英特尔® C++和Fortran编译器构建而成,并使用OpenMP*实现了线程化。该函数库的算法能够平均分配数据和任务,充分利用多个核心和处理器。支持Linux/Win。它的底层就有:

  • BLAS:所有矩阵间运算(三级)均面向密集和稀疏 BLAS 实现了线程化。许多矢量间运算(一级)和矩阵与矢量的运算(二级)均面向英特尔® 64 架构上 64 位程序中的密集型矩阵实现了线程化。对于稀疏矩阵,除三角形稀疏矩阵解算器外的所有二级运算均实现了线程化。

  • ...其他忽略,以免BLAS主角不高兴...

Eigen

简介:Eigen是可以用来进行线性代数、矩阵、向量操作等运算的C++库,它里面包含了很多算法。它支持多平台。Eigen采用源码的方式提供给用户使用,在使用时只需要包含Eigen的头文件即可进行使用。之所以采用这种方式,是因为Eigen采用模板方式实现,由于模板函数不支持分离编译,所以只能提供源码而不是动态库的方式供用户使用。

底层:

  • BLAS/LAPACK:支持所有基于F77的BLAS或LAPACK库作为底层(EIGEN_USE_BLAS、EIGEN_USE_LAPACKE)

  • MKL:支持MKL作为底层(EIGEN_USE_MKL_ALL)

  • CUDA:支持在CUDA kernels里使用CUDA

  • OpenMP:多线程优化

关系

  • 狭义的BLAS/LAPACK可理解为用于线性代数运算库的API

  • Netlib实现了Fortran/C版的BLAS/LAPACK、CBLAS/CLAPACK

  • 开源社区及商业公司针对API实现了BLAS(ATLAS、OpenBLAS)和LAPACK(MKL、ACML、CUBLAS)的针对性优化

  • Eigen、Armadillo除自身实现线性代数运算库外还支持上述各种BLAS/LAPACK为基础的底层以加速运算

对比

  • 接口易用程度:Eigen > Armadillo > MKL/OpenBLAS

  • 速度:MKL≈OpenBLAS > Eigen(with MKL) > Eigen > Armadillo

总结一下,这篇文章并没达到自己想要的效果,“基础数学-->应用数学-->计算机科学-->具体的、形象的例子”这个知识链条有点太长了,所以我几乎没办法用较少的时间完成。哪位大神可以帮助呢?请联系我。

为什么要做这个事情呢?

* 一方面是个人的亲身体会,当年在学线性代数、微积分这些奇奇怪怪的东西时,就一句话“我未来又不当数学家,学这个感觉没啥用”。而等我学到自控原理时,才发现数学作为算法的PID是如此的强大。

* 另外一方面,我国有大量的工程师熟练调用各种库去编写一个App和系统,但,我们完全忽略了大量的、优秀的基础软件(就是调用的那些库、框架、算法)的存在和价值;我们也习惯于用“站在巨人肩膀上”的角度去思考创新,但是,高质量的技术创新通常是基于基础技术往前探索的结果。

* 所以,希望用技术科普的方式像大家介绍整个知识体系,尤其希望有更多的学生能对基础技术感兴趣和认可其价值。

--听说张博最近在招徒弟--

对BLAS有兴趣的朋友,联系我manwjh@126.com

最受青睐的计算机代码“之”BLAS相关推荐

  1. 影响科学圈的“十大名码”!为科学变革加速的十大计算机代码。

    程序员用代码改变世界,基于计算机硬件的迅猛发展,摩尔定律被渐渐遗忘,科学圈也受到了一系列的影响.近日,科学顶刊 Nature 发布文章,介绍了上世纪五十年代以来改变科学圈的十大计算机代码,当然,排名不 ...

  2. 对人脑而言,阅读计算机代码和阅读语言有何不同?

    作者 | Anne Trafton 翻译 | 火火酱,责编 | 晋兆雨 出品 | AI科技大本营 头图 | 付费下载于视觉中国 神经科学家们发现,人类在解读代码时会激活一个通用的大脑区域网络,但不会激 ...

  3. L1-015 跟奥巴马一起画方块 (15分) 美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥

    美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014年底,为庆祝"计算机科学教育周"正式启动,奥巴马编写了很简单的计算机代 ...

  4. OpenAI升级Codex,直接将书面语言转为计算机代码;区块链网站被黑客偷走6亿美元加密货币|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 孙胜 出品 | CSDN(ID:CSDNnews) ...

  5. 格子玻尔兹曼方法书中,计算机代码(Fortran语言)FDM的输出结果是什么,为什么显示程序“[25024] Console1.exe”已退出,返回值为 0 (0x0)。

    格子玻尔兹曼方法书中,计算机代码(Fortran语言)FDM的输出结果是什么,为什么显示程序"[25024] Console1.exe"已退出,返回值为 0 (0x0).

  6. 前端学习13:HTML响应式设计、计算机代码、语义元素

    目录 HTML响应Web设计 一.什么是响应式Web设计? 1.流体网格 2.媒体查询 3.响应媒体 4.视口元标记 二.使用Bootstrap HTML计算机代码元素 HTML 语义元素 一.什么是 ...

  7. 世界是如何由计算机代码运行的(原文见http://www.bbc.co.uk/timelines/zxsrcdm)

    世界是如何由计算机代码运行的 1679 2008年 二进制:莱布尼兹发明电脑的语言 提花织机:由纸板控制的机器 Babbage和Lovelace:硬件和软件的第一个想法 霍勒里斯的人口普查机器:大数据 ...

  8. 计算机代码,名词解释和作用,还有我们要高高飞起来喔!

    目录 词语解释 计算机代码 作用 词语解释 供把资料和指示输入自动计算机或制表机的任何符号系统:亦指这种符号的记录(如靠打孔资料卡片或磁带上的受磁点) 计算机代码 源代码(也称源程序),是指一系列人类 ...

  9. 计算机代码设计-基于ssm的员工工资管理系统-人事工资管理系统设计-企业工资管理系统代码

    计算机代码设计-基于ssm的员工工资管理系统-人事工资管理系统设计-企业工资管理系统代码 注意:该项目只展示部分功能,如需了解,评论区咨询即可. 1.开发环境 开发语言:Java 后台:SSM(Spr ...

最新文章

  1. 使用SharpPCap在C#下进行网络抓包
  2. Java中的双重检查锁(double checked locking)
  3. python爬虫新手项目-33个Python爬虫项目实战(推荐)
  4. 出租房的网络环境研究
  5. Asp.net在线备份、压缩和修复Access数据库
  6. 重磅 CV、NLP 算法赛,科大讯飞2020 A.I.开发者大赛正式启动!
  7. C#中StreamWriter与BinaryWriter的区别兼谈编码。
  8. Pandas读取数据内存优化
  9. web安全day30:人人都要懂的LAMP--apache服务安装和配置
  10. Security+ 学习笔记43 无线网络
  11. oracle的采购管理模块,ORACLEERP采购管理模块操作手册
  12. mysql workbench修改密码_更改MySQL用户密码
  13. linux 系统安装微信小程序开发工具
  14. SEO网站优化步骤超详细完整版教程
  15. word底色怎么去掉的办法
  16. 【阿里—云计算】从飞天系统到飞天2.0(核心组成:飞天洛神)
  17. fcitx5 使用搜狗皮肤
  18. SG Input 软件安全分析之逆向分析
  19. Python:05打印字母联想英文周一到周日(字符串)
  20. 核电工程能源行业案例 | 达索系统百世慧®

热门文章

  1. Mess——一个可混淆Activity的项目
  2. Docker安装使用(备忘)
  3. 理解这两点,也就理解了paxos协议的精髓
  4. 天草丹参保心茶,你值得拥有
  5. matlab fft(x dim),matlab的fft函数
  6. ROS-noetic源码安装navigation功能包
  7. OpenStake组件
  8. Qt开发一个小软件记录
  9. 基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)
  10. STM32CubeIDE开发(三十), 如何结合RT-Thread开发STM32程序