高速缓存与矩阵乘法(二)

LAPACK

如果矩阵的规模较小,直接按照公式展开计算倒是看不出性能上有什么大问题,比如两个二维方阵相乘,计算公式如下
c [ i ] [ j ] = ∑ k = 1 n a [ i ] [ k ] ∗ b [ k ] [ j ] , 1 ⩽ i ⩽ n , 1 ⩽ j ⩽ n c[i][j]=\sum^n_{k=1}a[i][k]*b[k][j],\quad 1\leqslant i\leqslant n,1\leqslant j\leqslant n c[i][j]=k=1na[i][k]b[k][j],1in,1jn
但是,随着矩阵规模的增大,这种计算方式的性能瓶颈就比较突出了,根本无法满足正常的业务需要。

下面介绍基于 BLAS (Basic Linear Algebra Subprograms) 算法库的线性代数库 LAPACK (Linear Algebra PACKage),该库是用 Fortran 编写的算法库,是为了解决通用的线性代数问题的。不少计算机厂商都提供了针对不同处理器进行了优化的 BLAS/LAPACK 算法包,例如 Intel 的 MKL (Math Kernel Library,商业版),AMD 的 ACML 等。在 Matlab 的 bin 目录里可以发现 MKL、blas、lapack 的踪影,所以由此推断,Matlab 底层应该也是使用了 BLAS/LAPACK 库的。

CLAPACK

CLAPACK 是使用 f2c 工具将 LAPACK 的 Fortran 代码转换成 C 语言代码的 C 语法算法包,其主页是 http://www.netlib.org/clapack,下面介绍如何在 windows 系统中编译生成 CLAPACK 库。

环境准备

  • Windows 10
  • Visual Studio 2019(受支持的其它版本亦可)
  • 下载 cmake,并安装到系统上
  • 在 CLAPACK 的主页 http://www.netlib.org/clapack 下载源码包 clapack-3.2.1-CMAKE.tgz,并解压

编译 CLAPACK 源码

首先,打开 CMake(cmake-gui)应用程序,如下图所示
在这里插入图片描述
第一步,输入 clapack 源码目录;第二步,指定一个新目录,用于存放要生成的解决方案 (CLAPACK.sln);第三步,设置要生成的解决方案的参数,如下图所示
在这里插入图片描述
选择使用 Visual Studio 16 2019 生成工程,并指定 x64 平台(后面可以按照同样的步骤生成 win32 或其它平台下的工程),点击 Finish 按钮,就会开始生成解决方案了。如果生成后有红色的错误提示信息,如下图所示,点击按钮 Generate 重新生成即可,可能需要执行两次,错误提示信息才会消失。
在这里插入图片描述
之后就可以到生成的解决方案目录下,打开解决方案 CLAPACK.sln,并分别编译 Debug 和 Release 版本。然后,就可以分别到对应的工程目录下找到编译好的库文件,有以下三个:

blas.lib

libf2c.lib

lapack.lib

而引用上述静态库所需要包含的头文件,则可以在 CLAPACK 源码目录下的 INCLUDE 目录下找到,有以下三个文件:

blaswrap.h

clapack.h

f2c.h

将编译好的静态库文件和需引用的头文件收集到一起,就可以提供给其它动态库或应用程序引用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值