有人有什么想法吗?最近与其他运行英特尔cpu的系统的交流表明,在某些情况下,系统之间的性能存在很大差异。
如果有的话,可以做些什么来优化现代AMD CPU的性能?
110次浏览(过去30天)
显示旧的注释
芯
2018年4月20日
我有一个AMD Threadripper CPU。我已经看到一些建议,认为基于AMD的计算机将受益于将数学库从英特尔的MKL更改为AMD核心数学库(ACML),以及更改BLAS的建议。规范文件。任何与此相关的线程似乎都很古老,而且AMD可能已经更改了它的数学库的名称。
还有可能为AMD的cpu优化数学库吗?如果是,我需要做什么?
谢谢!
27日评论
芯
2018年10月4日
不幸的是,我没有找到任何有用的方法。
希望Mathworks能够认识到AMD在处理器方面的改进,以及他们在小型工作站市场上的颠覆性,并发布一个工具来切换数学库。但到目前为止,我还没有任何消息。
菲利普Borghesani
2018年10月4日
我建议关心这一点的人提出一个增强请求和支持。金宝app这是典型的先有鸡还是先有蛋或吱吱作响的轮子问题。直到有(大?吵了?预售?)客户想要这样,我们知道,改进将是一个低优先级。
对于许多典型的较小问题的客户来说,MATLAB的速度较慢的核心将击败速度较慢的核心,这仍然有利于英特尔。
芯
2019年5月24日
@
菲利普Borghesani
,我在一段时间后检查这个线程。AMD的硬件似乎卖得很好。也许现在是重新审视这个问题的时候了。如何提交增强请求?我找到的链接是2008年的一篇博客文章,与今天的网站不匹配。
芯
2019年5月24日
我将此作为请求提交,得到的回复是“截至目前,AMD的支持页面似乎没有为Windows机器上的用户下载AMD数学库的链接。金宝app
我一定会把你的建议传达给开发团队,他们可能会把它考虑到MATLAB的未来版本中。”
因此,似乎不会发生太多事情。我会看看我是否能说服AMD的人联系Mathworks来实现这一点。禅宗家族看起来像是为MATLAB而生的。
奈德·弗兰德斯
2019年6月6日
编辑:奈德·弗兰德斯
2019年6月6日
这个问题不是来自AMD的CPU,而是来自英特尔MKL库,它使用了'
辨别CPU分配器
它不仅根据cpu的SIMD扩展(例如AVX2)区分cpu,而且(这很糟糕)还根据它们的供应商字符串区分cpu。每个CPU不报告“正版英特尔”将使调度程序使用最慢的选项,例如不包括使用AVX2,尽管CPU支持它。金宝app
这是英特尔提升CPU销量的卑鄙方式。
惟一的选择是使用MKL以外的其他数学库。
AMD提供的LibM包括128bit和256bit向量扩展,最近已更新到3.3.0版本
IMHO Matlab开发人员应该在这方面花费一些努力,因为我们都是(高薪的)客户,而不仅仅是拥有英特尔CPU的人。
芯
2019年6月6日
编辑:芯
2019年6月6日
@Sven,这也符合我对这个问题的理解。然而,整合这些库需要Mathworks的参与,而不仅仅是终端用户可以更改的东西,对吗?如果只是在编译时包含一个替代的数学库,我无法想象Mathworks有兴趣将性能留在表中。在C代码上,我的AMD cpu在每个线程上的性能大约是英特尔cpu的80%。在MATLAB中接近50%从50跳到80,对于所有AMD用户来说,性能提升了60%,基本上是免费的。我很惊讶回答我的票的支持代表如此不感兴趣。金宝app我会把链接发给他们。编辑:链接的数学库似乎只适用于*nix操作系统。不知道他们为什么会忽略Windows。
奈德·弗兰德斯
2019年6月6日
编辑:奈德·弗兰德斯
2019年6月6日
也许你想在一个更公开的社交媒体渠道上解决这个问题,比如Twitter,并发布一些标签来提高能见度。这是一个普遍存在的问题。我们中的许多人现在使用AMD Ryzen,因为他们在大多数用例中都很出色。
在这种情况下,根据我的理解,它实现起来相对简单,至少提供了一个像OpenBLAS这样的替代数学Lib,其中包括Matlab中的libM。
看看Octave……您可以在安装时选择Lib。那么Matlab为什么不能为了付费用户的利益做同样的事情呢?
这真的应该发生!
我不确定是否有可能调整Matlab以使用其他库。等我有时间我会再调查的。
我也不太明白为什么你的帖子有59次观看,只有3次投票。这应该在每个matlab用户不感兴趣的时候都能自由选择你的硬件。
奈德·弗兰德斯
2019年11月15日
@Wick
如果你还在读这篇文章。我看到了这个:
我最近看到一些人建议在AMD上使用MKL,并将MKL_DEBUG_CPU_TYPE环境变量设置为5,如下所示:
出口MKL_DEBUG_CPU_TYPE = 5
这将覆盖MKL中的CPU调度,并强制使用AVX2代码路径(MKL在没有AVX512的英特尔部件上自然使用的代码路径),否则MKL将选择一个未优化的SSE路径,性能极差。但是使用AVX2路径,MKL在Zen2上表现非常好,通常甚至优于BLIS和OpenBLAS!
不确定这在Matlab中是否可行,但如果是的话,你应该尝试一下。
奈德·弗兰德斯
2019年11月15日
编辑:奈德·弗兰德斯
2019年11月15日
我希望我能详细说明这一点,但我对这些事情也不太了解。
只是谷歌
出口MKL_DEBUG_CPU_TYPE = 5
由于现在很多人似乎都在使用AMD Epyc,这似乎解决了AMD cpu上MKL的问题。我不知道的是这是你能做的还是Mathworks能补丁到Matlab里。在anycase…它的工作原理。AMD CPU上的CPU性能通过这种方式恢复。
或者:
请注意,默认情况下,PyTorch使用英特尔MKL,这是AMD处理器。为了防止这种情况,在开始基准测试之前执行这些行:
“出口MKL_DEBUG_CPU_TYPE = 5”
根据我的理解(这是有限的),可以在Matlab本身的启动脚本中包含这一点,但有人必须向我们解释细节。
芯
2019年11月15日
这是Python环境的注释。我相信,这是对用于执行Python的编译器的更改。不幸的是,Matlab已经编译好了。另外,那是一个关于Linux性能的话题。与我交流过的Mathworks人士指出,AMD为基于*nix的系统提供了针对Zen和后续架构的优化库,但不适用于Windows。因此,除非AMD提供windows优化的数学例程,否则我认为Mathworks不会包含适当的胖二进制文件。
芯
2019年11月17日
奈德——你这家伙!
把你的解决方案作为答案发布出来,我会接受的。将批处理文件中的文本放入答案中,这样人们就可以自己生成批处理文件(没有人喜欢运行随机批处理文件)。此外,您可能想要去掉脚本名称中的空格。在我改变它之后,MATLAB变得更快乐了。顺便说一句,不错的测试脚本。
关于运行这个的一些注意事项。在'call'函数之后执行matlab的shell仍然使用调试cpu。因此,如果您从批处理文件中运行它一次,它就消失了(因为命令窗口消失了)。但是,如果您从提示符中运行批处理文件,那么Matlab的任何后续执行都将使用调试cpu。但是用其他方法执行matlab不会。这使得并排测试更加容易。
有关于各种调试cpu扩展选项的文档吗?新的TR有一些AVX命令(不是完整的512),所以如果有一个调试cpu支持这些命令就太好了。金宝app
再次感谢! !
奈德·弗兰德斯
2019年11月17日
告诉你!永不放弃!呵呵
谢谢你的反馈,我在reddit上相应地修改了帖子。不再需要下载。理想情况下,如果您满意,可以使用系统变量使修复成为永久性的。——>见reddit。
那么你在TR上得到了多少?
不幸的是,这个调试模式是没有记录的英特尔(非常好的理由,我猜…这些黑帮)
芯
2019年11月17日
我在TR上的收益与你的百分比相当。然而,重fft的代码并没有看到任何速度提升。我怀疑其中一个受到了内存访问的限制。然而,矩阵乘法加速是值得单独破解!我希望在这个赛季升级到一个新的TR。内存访问应该是优越的。
提出一个答案,让我接受。这值得永垂不朽!
芯
2019年12月12日
我之前在TR中测试过SMT。这样通常会快一点。但是,至少对于我的代码,运行两个MATLAB实例并加载所有核心仍然更快。当然不是两倍,但根据内存访问量的不同,大约是1.5倍。
奈德·弗兰德斯
2020年3月29日
@wick
显然,2020a包括变通办法,但设置变通办法还不能在所有系统上可靠地工作。你能确认它在你的版本上有效吗?您可能需要删除sys变量
之前
你升级到2020a。
内德
接受的答案
奈德·弗兰德斯
2019年11月18日
编辑:奈德·弗兰德斯
2019年12月2日
如果你想了解背景,你应该读一下。
编辑:在你开始之前,我有一个简短的请求,你可以帮助我,为你自己的利益服务。Matlab不会实现这个。如果你认为Matlab应该提供一个永久的解决方案,服务于所有用户,不管他们使用的是英特尔还是AMD的cpu,
请在Matlab中进行特征请求
实现一个不歧视非Intel cpu的数字库(例如OpenBLAS)。
如果没有人倡导,Mathworks不会做出这种改变。
谢谢!
博士tl;
方案1 (Windows):
创建一个.bat文件。“记事本”用下面的行在AVX2模式下启动Matlab。
@echo掉
设置MKL_DEBUG_CPU_TYPE = 5
matlab.exe
保存为。txt,重命名为。bat。如果双击该文件,Matlab将以AVX2模式启动MKL。如果你以正常的方式开始,它将一如既往。
如果你信任我,你也可以从我的硬盘下载。bat文件(通常你不应该,因为我是一个来自互联网的随机的家伙)。如果你删除了下载文件中提供的启动批处理文件或你自己创建的批处理文件,它就没有了,你的电脑就会像以前一样。
方案2 (Windows)
:
如果您对结果满意(您肯定会满意的:-),那么您应该在系统环境变量中输入MKL_DEBUG_CPU_TYPE=5,从而使设置永久。这有几个优点,其中之一是它适用于Matlab的所有实例,而不仅仅是使用.bat文件打开的实例。
这样做将使更改永久存在,并且对系统上使用MKL的所有程序可用,直到再次删除该条目。
LINUX
:(感谢
foreignrobot
)
只需输入一个终端:
出口MKL_DEBUG_CPU_TYPE = 5
然后在同一终端上运行matlab。
对于基准测试,你可以使用这个脚本:
要使它在Linux中永久存在,请编辑shell的配置脚本(~/。Bashrc表示bash, ~/。zshrc for zsh etc)添加line export MKL_DEBUG_CPU_TYPE=5。这将适用于任何新打开的外壳,并应用于一个已经打开的简单做。~ /。Bashrc或者你的配置脚本名。(由于
lowpolybutt
)
附注:如果您使用的是较老的AMD FX CPU,您可以测试是否
MKL_DEBUG_CPU_TYPE=4适合你。这应该启用AVX,但我还没有测试这个。
15个评论
芯
2019年11月18日
我怀疑这是最古老的公认答案,但它一定是在最高可能的百分比。我认为从你的reddit帖子中剪切/粘贴文本没有问题,所以这是一个独立的答案。批处理文件是背靠背测试非常好的中间步骤。不妨把它留在那里(或者只是作为一系列DOS命令,不一定是批处理文件)。
芯
2019年11月20日
仅供参考,神经网络训练似乎在我的第一代TR上加快了50%。
我已经提交了与此主题相关的原始支持增强请求的后续处理。金宝appMathworks为Intel的MKL库启用一个未记录的调试选项的可能性为零。然而,OpenBLAS库似乎对R和Julia这样的东西表现得很好。我已经提交了一个请求,要求Mathworks包含一个简单的选项来切换数学库。我希望每个关注这个帖子的人都能提交类似的增强请求,并在其他论坛上争取支持。金宝app如果没有人们的支持,Mathworks是不会有这个机会的。
奈德·弗兰德斯
2019年11月20日
编辑:奈德·弗兰德斯
2019年12月4日
我当然也这么做了。每个人都应该这么做!
我还认为他们应该也必须实现OpenBLAS。我有机会简短地看看即将到来的Threadripper 3k在几个基准测试中的表现。鉴于英特尔基本上完全失去了竞争力,他们将无法忽视对英特尔的支持金宝app
到目前为止
市场上最快的cpu。
我的感觉是,他们还没有真正意识到AMD cpu在Matlab中表现不佳的原因。他们
推荐
在系统要求中,你应该有一个英特尔
或AMD CPU与AVX2
金宝app支持。然而,AVX2从未在AMD的cpu上使用过,因为MKL中的区分分派器。
鉴于此事引起的关注,他们可能会采取行动,但就像你说的,为了你自己的利益,请提交一个请求。
我还把这个加到了Reddit的帖子里。
你的50%加速....的确令人印象深刻!
帕特Quillen
2019年12月3日
在MathWorks,我们正在继续调查这个问题,以确定我们是否有资格对MATLAB的完整生产版本进行更改。请注意,在此期间,我们无法确认使用这些环境变量将在我们的整个产品中正确工作,因此请自行承担使用风险。下载188bet金宝搏
除了上面建议的方法之外,还可以用不同的BLAS实现替代MathWorks认可的BLAS,以便在MATLAB中使用。这可以通过在名为BLAS_VERSION的环境变量中指定包含BLAS实现的.so/.dll的完整路径来实现。这与MathWorks没有将我们的产品与替代BLAS实现相匹配的警告是一样的,因此如上所述,我们不能确认使用您自己的BLAS(例如OpenB下载188bet金宝搏LAS)将在我们的产品中正确工作。
芯
2019年12月3日
@PatQuillen,谢谢你的评论。由于这个线程已经有一年半的历史了,而这是一个新的解决方案,很明显,切换BLAS库的能力在MATLAB社区中并不广为人知。
所以你的意思是MATLAB检查变量BLAS_VERSION,如果它存在,将使用它而不是内置的MKL ?我设置变量相同的方式@NedFlanders描述如何设置Linux或Windows的变量?
如果替换库不支持调用,MATLAB是否会退回到MKL,或者它是否会崩溃?金宝app这就是上面的黑客的好处。我们知道MKL库支持一切,因为您已经构建了MAT金宝appLAB来使用它。
我曾经看到过这样的建议:在Intel自己的硬件上,flame/BLIS甚至比MKL还要快,在任何地方都比OpenBLAS还要快。也许一些知道自己在做什么的人可以尝试一下,并提供一些建议。
帕特Quillen
2019年12月3日
@威克,是的,这并不广为人知。它没有记录,我们通常只在人们打电话给客户支持时才告诉他们。金宝app
为了帮助澄清,我所说的是,在加载BLAS时,MATLAB检查BLAS_VERSION的存在,并加载由该变量指向的任何库,而不是MATLAB指定的默认库。MATLAB寻找BLAS标准中对应的符号:
netlib.org/blas
并将它们作为BLAS使用。如果您从供应商那里获得了完整的BLAS,或者您已经编译了一个,那么应该没有问题。
如果实现不支持该函数,MATLAB将不会退回到MKL。金宝app相反,您可能会得到一个崩溃或错误。另一方面,您可以通过在BLAS_VERSION中指定一大堆库实现来分层。
您可以使用环境变量BLAS_VERBOSITY来查看MATLAB正在尝试做什么。设为1可以得到一点信息,设为2可以得到很多信息。
是的,在Windows或Linux上按上述方法设置环境变量。
芯
2019年12月4日
@PatQuillen,谢谢我想明白了。BLAS_VERBOSITY很方便(我学到的DOS命令中不允许有空格)。是否有一种方法来为BLAS库重新加载或我必须重新启动MATLAB每次?如果你想要堆叠路径,使用分号来分隔它们(同样,在Windows中)。
我找到了如何下载BLIS的DLL,但它在“caxpy”上立即出错(这是非常基本的)。所以我正在努力。OpenBlas是下一个。
芯
2019年12月4日
@PatQuillen谢谢。这就解释了为什么不能将BLAS_VERSION设置为“Program Files”目录中的内容——这是MKL的默认位置。它在文件夹名称的空格处中断了解析。我必须将mkl.dll复制到另一个文件夹,以尝试将其设置为转换库。
实验后奥特曼
2019年12月17日
尝试在引号内设置程序文件路径,如“C:\Program Files\bla\bla\blas.dll”;C:\Program Files\bla2\bla2\ blast.dll”
奥尔多Corbellini
2020年4月4日
你在哪里找到win64的BLIS和/或OpenBLAS .dll ?我想在我的新AMD TR上测试这些库。我所能找到的是一些Linux GCC编译器的构建食谱!
(嗨,Yair !]
更多答案(3)
海科Weichelt
2022年3月15日
在MathWorks和AMD之间的密切合作之后,从MATLAB R2022a开始,MATLAB发布了定制版本的AOCL 3.1,可以按以下方式激活:
请注意,来自其他来源的AOCL版本可能无法正确配置/构建,并可能导致MATLAB出错、崩溃或返回不正确的结果。
芯
2019年12月4日
编辑:芯
2019年12月4日
@NedFlanders的公认答案是目前为止最好的解决方案。用那个。
但是在回答的评论中,MathWorks的工作人员@PatQuillen分享了一些有用的无文档环境变量,这些变量允许任何人连接到任何外部BLAS库。这对于让其他BLAS包(如OpenBLAS或BLIS)在MATLAB中工作非常有用。那些评论已经被埋在那个线程中,所以我把它们作为一个独立的解决方案拉出来。我将重复这些评论中的警告:“这与MathWorks没有使我们的产品符合替代BLAS实现的相同警告,因此如上所述,我们不能确认使用您自己的BLAS(例如OpenBLAS)将在我们的产品中正确工作。”下载188bet金宝搏
我们将为主机操作系统设置环境变量。这可以在Linux和Windows的MATLAB之外以临时或永久的方式完成,可以在@NedFlander的reddit线程中看到。不过,我只打算用
setenv
命令仅为一个MATLAB实例设置这些参数。
MATLAB在第一次尝试执行计算时加载BLAS库,以便您可以在此之前进行更改。一旦加载了BLAS库,就没有办法卸载它。你得重新开始。
环境变量BLAS_VERBOSITY将MATLAB设置为命令窗口关于加载过程的详细信息。值1表示最少的信息,2表示更多。
setenv (' BLAS_VERBOSITY ', ' 1 ')
如果定义了环境变量BLAS_VERSION,将指示MATLAB从指定的文件加载BLAS库,而不是使用其内置的默认值。文件应该是您计划使用的BLAS实现的.so/.dll,该实现遵循由
https://netlib.org/blas/。
setenv(“BLAS_VERSION”、“c: \ temp \ mkl.dll”)
是否会加载复制的MKL库
c: \ temp
.您可以使用分号、逗号或空格将多个文件位置连接到BLAS_VERSION的单个定义中。因此,如果您正在编写自己的BLAS,它不支持所有可能的方法,您可以滚动到MKL作为故障保险,例如金宝app。
3评论
拉苏尔Nikbakht
2020年10月14日
你能否详细阐述这一评论?
我有一个AMD CPU, Ryzen 2970wx,似乎他们有一个非常有效的BLAS库实现,他们称之为BLIS。我想把Matlab默认的BLAS库(英特尔)改为AMD的。目前,即使在AMD CPU上应用诡计导出MKL_DEBUG_CPU_TYPE=5 Matlab(使用Ubuntu 18)也不如预期的那么快。
我认为任何其他库而不是英特尔MKL都可以很好地用于AMD cpu。
肯·M。
2019年11月9日
你是说matlab中不要使用windows。
因为这是最简单的方法,所以转换后人们就不再抱怨了。
许多程序在linux下运行得更快,所以如果速度很重要,那么linux也是matlab的一个明显选择。
9日评论
布鲁诺陈德良
2019年11月9日
许多程序在linux上运行得更快。
有证据支持这种说法吗?
我做了一个10年前的基准,它们具有可比性。
如果你在R2019B上运行BENCH,你会看到TMW做的最快的基准测试是Windows 7,其次是Linux,尽管它不是同一个HW。
芯
2019年11月10日
对许多人来说,在工作流程中不一定可以切换到Linux。由于台式机上的Windows用户数量远远超过Linux用户,如果Mathworks能够为Ryzen/Threadripper/Epyc用户提供良好的编译选项,那就太好了。
然而,如果有人有能力连续运行两个操作系统,我很乐意看到两个寻址每线程性能的比较。
马克•史密斯
2020年1月5日
非常感谢Ned Flanders和其他在这里评论的人。我与Mathworks有过一些通信,并向他们指出Matlab应该为AMD cpu优化二进制文件。我决定在Win 10中使用bench命令,在不同的配置下使用Kubuntu来演示为AMD cpu优化二进制文件的效果。我主要使用Win 10,而且是Linux新手。我能够将Kubuntu 19.10安装在一个单独的驱动器上,并运行了几个bench命令。我有5个屏幕截图显示如何使用环境变量改变Win 10和Kubuntu的性能,我被阻止上传。我还下载了AMD AOCL预编译的Ubuntu二进制文件和AMD Math Library (LibM) Ubuntu二进制文件,并将它们与bench命令一起使用。
我用于这些测试的机器是Threadripper 2950x,运行在Asrock X399 Pro Gaming主板上,带有gb 1080 Ti。对于所有这些测试,bios设置为默认值,Precision Boost Overdrive未激活(3.5 Ghz基本时钟)。我通常用2950x的Win 10,频率为4.4 Ghz,有强大的自定义冷却。所有测试都在64 GB ram下运行。
简单的总结是,Win 10不适合Matlab,在柱状图上的分数为~55(低于Surface Pro 3)。使用Win 10环境变量MKL_DEBUG_CPU_TYPE=5,这个分数提高到~75。如果我使用32 GB ram进行4.4 Ghz的bench超频,分数将达到~85。这个芯片的运行时间可能太短了。
对于bios默认设置的Kubuntu,在启动Matlab之前没有超频和MKL_DEBUG_CPU_TYPE=5的设置,结果是~65。在启动Matlab之前添加export MKL_DEBUG_CPU_TYPE=5,结果是~95,没错~95。添加导出命令来链接AMD Ubuntu二进制文件,加上MKL_DEBUG_CPU_TYPE=5,结果是~98分。通过这些改变,它是运行在Xeon E5-1650 v3 3.5 Ghz上的Win 7的第二个排名。
我的结论是,如果Mathworks的主要市场与win10捆绑在一起,就需要更好的数学二进制文件。在win10中,简单地设置环境变量是不够的。在Linux中通过设置环境变量获得的巨大好处需要解释一下。我想知道Linux和Win 10之间有什么不同,使得MKL_DEBUG_CPU_TYPE=5环境变量在Linux中有这么好的效果。在这一点上,我推断微软也在与英特尔合作,阻碍AMD的性能,或者只是忽视了其软件对数学库的影响。
我喜欢Matlab,它功能强大,是业界的主要工具。它需要针对不同的cpu配置进行更好的优化。
Yavor娜·杜波夫
2021年3月26日
你能提供关于如何链接AMD Ubuntu二进制文件(AOCL)的详细信息吗?我试过:
出口BLAS_VERSION = / home /娜·杜波夫/ amd / aocl / 3.0 6 / lib / libblis.so
然而,当使用bench时,我得到:
cpu_id: x86家族143型号96, AuthenticAMD
艰苦的环境...
BLAS:加载/home/dobrev/amd/ aacl /3.0-6/lib/libblis.so
BLAS:加载/home/dobrev/amd/ aacl /3.0-6/lib/libblis.so@0x7fcbf7ab2220
布拉斯特区:/home/dobrev/amd/aocl/3.0-6/lib/libblis.那么,不是兼容层。
我还尝试使用openBLAS获得了相同的结果。
发生错误
由于对页面所做的更改,无法完成操作。重新加载页面以查看其更新状态。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。