基础篇 | 15 C++ 科学计算 - OpenBLAS的安装与使用

本文介绍了BLAS库的基础知识,包括其级别和常见实现。重点讲述了OpenBLAS的性能优势及在Mac的Xcode环境下如何安装,并提供了基本使用示例,包括Level1、Level2和Level3的函数应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BLAS简介

类似于Anaconda里面的numpy,C++里面也有类似的矩阵运算库,称之为BLAS(Basic Linear Algebra Subprograms):基础线性代数子程序库。
支持的数据类型有:

  • 单精度浮点数(float)
  • 双精度浮点数(double)
  • 单精度复数
  • 双精度复数

在机器学习里面一般我们只用float类型,很少使用double,考虑到性能,我们认为float的精度已经够了,而且速度快。
还有一个更高级的叫LAPACK,现在我们常用的BLAS其实就是LAPACK里面的一部分。

BLAS支持对子程序的封装,其实就是子函数了,它的子程序分类:

  • Level1: 标量操作、向量操作、向量-向量操作
  • Level2:矩阵-向量操作
  • Level3: 矩阵-矩阵操作

BLAS的实现

BLAS:标准实现(Fortran)
CBLAS:C的BLAS标准实现
Atlas:一种优化实现
GotoBLAS:多线程性能良好的优化实现(已停止更新)
OpenBLAS:目前性能最好的开源实现,基于GotoBLAS
MKL:Intel实现,在Intel处理器上性能最佳

各种BLAS实现的优劣对比

市面上的BLAS实现非常多,最早是用Fortran。

CBLAS是C的BLAS标准实现,但是这种实现有个缺点,速度非常慢。

Atlas:比C要好,但不够好。比如腾讯QQ空间有一个功能,就是标脸框那个程序,怎么做呢,你每上传一张图片之后都会进行图片处理,处理完之后进行人脸检测,识别出来再把结果返回到你的业务服务器上去。那这就有个问题了,我怎么能非常快的处理这些图片。对于流量很大的网站来说,它的数据量是非常大的,我怎么能够高实时性的处理这些东西呢。这就对我们计算产生非常高的要求,要求我们计算非常快,而且是多线程的计算,所以,后来外国友人就推出了GotoBLAS,特点是在多线程的情况下性能是比较良好的。不过这个程序在2010已结不更新了,不去用它了。

目前性能最好的开源实现OpenBLAS。OpenBLAS的整体性能不够稳定,但是平均性能是所有库里面最好的。它的开发者是中国人,中科院研究所的张先义,GitHub仓库叫xianyi。它是由中国人维护的目前最好的开源实现,Caffe里面用的BLAS库就是OpenBLAS。

比如我们使用的numpy,上面使用的是Python接口,底下也用了BLAS库,比如anaconda的numpy就使用了OpenBLAS。

非开源库,MKL:Math Kernel Library。Intel推出的和Intel C++ 编译器绑定的一个库,这是目前在Intel处理器上性能最好的BLAS库,而且比OpenBLAS要稳定。但是有两个问题,1.它是和Intel C+

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值