MATLAB博客

给处于领先地位的人的实用建议

线性代数在MATLAB:尝试AMD的AOCL

在R2022a, MathWorks开始在MATLAB中发布AMD的AOCL和英特尔的MKL。本文解释了这些是什么,以及为什么您可能会关心它们。

BLAS和LAPACK

许多现代技术计算都是由计算机实现的布拉斯特区而且LAPACK库。你可能没听说过,但我敢肯定你用过。你曾经用MATLAB把两个密集矩阵相乘过吗?如果是,则您是BLAS用户。计算密集矩阵的特征值或SVD ?是吗?您是LAPACK用户。不会用MATLAB但你用Python或R做过这些运算?您可能也是这些库的用户。

BLAS和LAPACK是许多基于矩阵的计算的核心,因此,正如你可以想象的那样,开发矩阵实验室的公司非常重视它们!当MATLAB在2000年第一次开始使用LAPACK时,Cleve Moler自己写了很多细节速度也随之提高。

win2000_fig1_w.gif

Cleve在2000年的文章中展示了特征值计算的速度。红线显示了与MATLAB在LAPACK之前相比的速度提升

我们MathWorks的许多人发现,上面的结果很有趣,它的性能是以兆次浮点运算(每秒10^6次浮点运算)来衡量的,比我们今天最普通的笔记本电脑所期望的十亿次浮点运算(每秒10^9次浮点运算)慢了数千倍。今年早些时候,我们进入了一个计算的新时代前沿的超级计算机证明它可以以1 Exaflop(10^18次失败)的速度运行。

两个库,许多实现

关于BLAS和LAPACK库需要知道的一件事是,它们有许多实现。所谓的参考布拉斯特区而且LAPACK定义用户界面,并给出每个操作的易于阅读、未优化的实现。

不同的小组使用不同的策略生成这些库的优化实现。我在关于OpenBLAS的文章中提到了一个例子R2022a苹果硅测试版MATLAB.另一个例子是英特尔的数学内核库(MKL),顾名思义,它是英特尔的一个库,为其硬件提供了高度优化的BLAS和LAPACK版本。

英特尔MKL长期以来一直是MATLAB的BLAS和LAPACK提供商。在MATLAB R2022a中,我们有

>>版本-lapack ans = 'Intel(R) oneAPI数学内核库版本2021.3-Product Build 20210611 for Intel(R) 64架构应用程序(CNR分支AVX512_E1)支持线性代数包(LAPACK 3.9.0)' >>版本-blas ans = 'Intel(R) oneAPI数学金宝app内核库版本2021.3-Product Build 20210611 for Intel(R) 64架构应用程序(CNR分支AVX512_E1)' '

MKL在AMD处理器上也能很好地工作,但我们的一些用户一直在要求官方支持AMD自己对这些库的加速实现。金宝app被称为AMD优化CPU库,或简称为AOCL,这些是由AMD开发的,针对他们自己的硬件,尽管与英特尔MKL一样,它们可以在AMD和英特尔的硬件上工作。

AOCL可在MATLAB R2022a中选择使用

从R2022a开始,我们已经开始使用MATLAB发布AOCL,但默认情况下它没有激活。MathWorks不会轻易更改任何东西的默认版本。因此,R2022a在默认情况下继续使用MKL,但英特尔和AMD硬件(在Windows和Linux上)的用户都能够切换到使用通过MathWorks资格测试的AOCL版本。

进行切换的说明如下给出在这个MATLAB答案帖子

当然,你这样做的原因是为了速度。在某些操作中,AOCL可能比MKL更快,如果是这种情况,我们有兴趣听取您的意见。当然,我们也非常有兴趣了解您在尝试时遇到的任何问题。

您期望看到哪些性能差异?

您应该只期望在使用线性代数的函数中看到性能差异。任何潜在的差异将取决于因素,如操作类型,矩阵大小和结构,以及您正在使用的CPU。

在任何给定的硬件上,一个库的性能不一定总是优于另一个库。例如,使用脚本laBench.m,并在Azure D16ads_v5实例上运行,该实例公开了AMD EPYC 7763的8个核,我发现了以下10,000 x 10,000矩阵的计时:

英特尔MKL结果(最好的3个)
  • 矩阵乘法时间是5.60秒
  • Cholesky时间是1.07s
AMD AOCL结果(最好的3个)
  • 矩阵乘法时间是5.31秒
  • Cholesky时间是1.22秒

所以矩阵-矩阵乘法在这个硬件上使用AOCL更快,但是对于这个矩阵大小,Cholesky分解更慢。

轮到你了

我对最近的更新感到非常兴奋,希望你也一样。如果你尝试了,请在评论区或通过twitter告诉我你的进展。

|

评论

要发表评论,请点击此处登录到您的MathWorks帐户或创建一个新帐户。