测试 matlab_Matlab R2020a HPC类并行负载测试

本文对Matlab R2020a在HPC类并行负载下的性能进行了测试,涉及内存带宽、随机访存、HPL、DGEMM等多个测试项目。测试结果显示,处理器的内存带宽、核心数和AVX512指令集对其性能有很大影响。10980XE在多核性能上表现出色,而1065G7在某些特定项目中展示了强劲的实力。测试还揭示了Matlab在矩阵计算中并行性发挥存在的瓶颈,表明了内存带宽和处理器支持的新指令集对科学计算性能的重要性。
摘要由CSDN通过智能技术生成

​ Matlab是世界知名和广泛用于教学和生产环境的数据可视化,科学计算开发软件,正如其全称matrix&laboratory所说,其主要用于矩阵计算相关的工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。在信号处理与图像领域的作用,也使得Matlab在深度学习领域具有一席之地,如今,有无数大学和企业在使用Matlab进行工作和学习,Matlab在以科学计算为主的HPC负载中性能如何?现代处理器在Matlab软件中能否发挥出较强的性能?从Matlab测试中,我们又能发现哪些现代处理器在高性能负载中面临的挑战,以及可能会遇到哪些性能瓶颈的因素,本次测试基于Matlab实际环境操作,采用Matlab推荐的优化示例,可能不会像之前那样进行详细的执行分析(其实是没有条件),测试出来的数据也与理想状态有些出入。本次依然会有诸多CPU参与测试,首先将他们的信息进行发布:

5db2299295050d89374d2a366a3ee23f.png

Matlab自带一个简短的基准测试,通过在编辑器内输入简单的代码:

bench
bench(N)
bench(0)
t = bench(N)

点击运行,20秒内便能得到一个基准计算结果,有6个子项:

8080af1efab80121d09bdc6d6a8984c3.png

942b4eff8550266168cdc1971432d94f.png

尺度为执行时间,LU和FFT反映了我们理想中的多核性能,10980XE一马当先,但接下来其他项目就比较混乱,在除了LU以外的情况下,测试使用的9750H均不敌1065G7,10980XE在除LU和FFT以外的项目都没有对9900KF和3700X取得什么优势,甚至不乏明显落后,而在8核的对比中,9900KF在LU,Sparse中明显高于3700X,在3-D中3700X明显领先,在其余项目中两者基本相当,1065G7作为新架构,其在ODE和Sparse的表现亮眼,大幅甩开9750H的同时进入与9900KF/3700X相当的水准线,值得注意。不过这个简单的bench不是今天的重点,接下来我们会运行针对HPC类型负载,进行更严格,数据集更高的负载进行专项测试:

1,Stream内存带宽测试

首先我们要对参与测试的机型的内存带宽进行测试,才采用Matlab示例的Stream进行带宽测试:

0f64f010268de501aeb431d6d0861936.png

i9-10980XE拥有四通道3600Mhz的内存配置,自然在内存带宽测试中傲视群雄,考虑其可以支持宽一倍数据的AVX512矢量和更多核心,也理所应当需要更高带宽,3700X在实例为8时取得最高60GB/S带宽,这已经超过3600Mhz双通道内存的理论值,当示例设置为12时测得40GB/S左右,而Intel平台很难有如此大的波动,我们使用的9750H测试机的内存带宽也明显低于正常情况,它搭载了双通道16GB DDR4 2666Mhz内存,使用AIDA64测试带宽在30GB/S,也比较低,1065G7使用AIDA64可以测得50GB/S带宽,也明显高于该测试使用的9750H,所以我们可以认为该机器的内存带宽相对其他对手都明显较低,在这之后的对比,也会凸显内存带宽对数据密集计算的重要性

2,RandomAccess随机访存

测试每秒可对随机生成的向量进行更新内存地址的数量,计为Gups,数据集为1GB,但实际每台机器原则上进行对应核心数数量的实例同时计算来获得最终结果。最终参与测试的9750H的性能依旧垫底

8818cf8793e9c8f20457db84d1be8147.png

3,HPL

熟悉linpack的都应该知道,HPL这便是高性能高斯法(高斯法可见之前文章提及)求解线性方程组基准linpack benchmark,在此我们将调用Matlab示例函数来实现,为了保证并行性,将并行多个实例进行测试,原则上为等同于核心数的实例数进行测试,并且根据实际内存大小和实例数自动选择合适的数据集,同时Matlab将在接下来的矩阵计算中可以使用AVX512指令来进行测试(如果处理器支持)

9b64828503c248081e372c7a05ef4ab9.png

最终结果10980XE保持了良好的状态,一马当先,领先9900KF接近2倍,不过相比我们使用的Intel MKL优化版基准,Matlab的成绩要差很多,显然并行性发挥存在大量瓶颈,10980XE可以达到1100Gflops,9900K能达到500Gflops,不过领先幅度有一定相似性

fe53a163c539dc5a0e1060508d142790.png

最大的意外在3700X,9750H,他们都被1065G7击败,虽然3700X在缓存跨越CCX访问需要经过I/O die,以及FMA并行上有劣势,但如此大的差距还是令人惊讶的,1065G7证明了他的实力,在该项目中并行性的瓶颈使得Icelake微架构发挥其作为新架构使其串行执行效率更高,核心支持AVX512也是高性能的有力支撑,但还与前拥有相比9750H更高的内存容量(该测试对于9750H的6核调用6个实例,每个实例2.6GB,是唯一在该项目内存不太够用的一组测试机,不过调小点都结果影响也不大,所以也不修改数据)和带宽有关。

4,DGEMM

随机创建三个矩阵,执行C=C+A*B的矩阵计算,采用与HPL一样的FP64双精度浮点数据格式,相对来说这是更低访存需求的矩阵计算,在足够优化的情况下,甚至能非常逼近理论值。

3d4d96bd39f2b4abb93deb01268b4dc6.png

10980XE进一步拉开了与其他产品的差距,达到了9900KF的2.3倍,但3700X也摆脱了瓶颈,与9900KF较为接近,9750H也领先1065G7 40%,1065G7的半吞吐512FMA没能在此创造奇迹,但值得一提的是,这些成绩依旧与处理器的理论值相去甚远。

5,Ptrans

矩阵转置随机生成矩阵A和B,计算A的转置矩阵与矩阵B之和,这对进程间通信效率有要求,计算体现的算力也就不会比之前的大矩阵运算高。

ab5064394504a96d0d32170b26681fe7.png

10980XE依旧以2倍左右的优势领跑,9900KF与3700X的差距类似GEMM,而内存带宽偏低且不支持AVX512的9750H再次掉队,其性能非常尴尬。最终所有测试机的成绩都更接近内存带宽的差异。

6,FFT快速傅里叶变换

测试一定数据集大小的矩阵执行快速傅里叶变换的速度,并且尽可能通过合适的数据集(不能超过安装内存)和实例数保证并行性。

a0fa97a9709b7ae8171a694db3bd4475.png

最终更高核心数的10980XE没有拉开差距,3700X保持与9900KF差距不到10%的距离,而这台9750H的表现依旧垫底。

7,矩阵左除计算(ab)

左除式ab(不是a/b),相当于inv(a)*b即a的逆矩阵左乘b,该测试与HPL的算法有相似的地方。

7409f2b6bc97479d277684081a235904.png

最终结果其实与HPL有相似之处,9750H的较好成绩相对HPL有所改善,自然3700X的表现照旧,10980XE保持接近2倍领先9900KF的差距。

8,计算21点游戏速率

模拟进行21点纸牌游戏,玩法是蒙特卡洛金融工具分析的代表,最终对比的是6名玩家完成20000手手牌的执行时间,该项目无AVX支持,使用Parallel Computing Toolbox进行部署,具备一定多线程支持。最终频率最高,内存延迟最低的9900KF最快,10980XE与3700X相当,1065G7略超对比的9750H,呈现出频率与核心数都非常重要的特点。

27ceb57f99d3b03f4504410d470ab405.png

科学计算中的并行挑战

在Matlab测试中,我们应该感觉到,并不是什么计算项目都能从更多核心中获得足够的加速比,更多核心的收益在下降,Matlab官方介绍举例到,如果两个人去装水,并将水带回来倒空再去装水,如果两人完美处在一来一回之中,互相没有干扰,但如果两人都到达打水的地方,就会争夺水管,或者一人需要等待,这便是并行中的资源争夺,越多的人在这个过程工作,而不增加资源(水管),出现同时需要打水的情况就越大,在基准测试中,建立了一个较大的矩阵,以便CPU总是不可避免需要访问DRAM来获取数据,这会加大资源争夺的机会,为了排除一些干扰,测试避免了进程间通信问题,然后执行求和,GEMM和FFT运算(访存需求依次扩大)的多核加速比,首先我们来看10980XE,18核心,四通道3600Mhz内存,128GB内存。

07ec59c5cbe7cdb687e47543df9b335f.png

我们可以看到左图,蓝色是向量矩阵求和的加速比,橘红色是向量FFT的加速比,黄色是矩阵乘,不奇怪的是,求和的加速比最高,FFT最低,10980XE在1-16核均保持了一定的扩展性,尽管多核收益在不断下降,值得一提的是在测试中,最佳成绩是16核状态的,18核的加速比甚至不降反升,这从资源均衡的角度来说,核心和线程在2的整数次幂上的确有时表现会好,而每个核心需要处理的数据组越大,往往有时会因此提高并行度(因为可以更专注于数值计算而非初始化),但数据集过大后,基本都会下降,因为资源冲突凸显了,在右图中,只有矩阵乘的情况是数据集增加到2048的平方依旧提升加速比的,但加速比绝对值也较有限(10左右)。

本次测试最大的数据集为2048*2048大小,可以设置更高,而实际上每个处理器的内存资源不同,更好的测试应该是各自匹配更好的数据集大小以便适应其内存系统,这是今后要改善的。

其他产品也基本符合上文这一情况,但又各有特点:

9900KF

8cb897e9eaf6a3c752103e570cc2b1b6.png

9900KF一开始同样是向量求和加速比好于矩阵相乘,FFT在4核尺度就已经难以增长,但之后矩阵乘的加速比提升反超了向量求和,同样,每核心的数据集过高后,会有可能损害加速比(不绝对)。

1065G7

8cba411dbde9936e90048071f8c96616.png

1065G7核心较少,但也可以看出向量求和的加速比扩展更好,在四核范围都是良好扩展。

9750H

4958294785825c4d7e00878f9b00ca40.png

9750H的趋势很接近9900KF前6核的表现,这里就不再赘述。

3700X

9190df0f44af65a88ff630a39f23530c.png

3700X反而在FFT上保持了良好的势头,换言之,高核心数的AMD Zen2产品有可能因此明显超越Intel,这可能也与较大的L3有关,对大缓存需求且没有过多的跨越CCX间通信问题,这让其表现更高,有兴趣的也可以对比9900KF,在同样8核尺度下,不同任务负载的多核扩展性双方有何差异。

AVX512与Matlab矩阵计算

AVX512有助于矩阵计算,Matlab自然不能缺席,通过HPC挑战项目,我们计算了HPL,GEMM,Ptrans和ab矩阵10980XE对比9900KF的情况,通过假设多核加速比相同的情况下,计算频率*核心数的比值,推算AVX512的收益(仅供参考),GEMM的表现最为出色,矩阵转置提升较小,不过也不得不说10980XE的AVX512频率实在太低了。

4b1c6a9c7aa376e4235d00da6d42e3e5.png

测试的结果已经比较明显了,3700X主要在与HPL类型相关的计算中性能很低,从测试趋势来看,FFT的表现会比较好,而毫无疑问,Matlab函数已经可以调用AVX512,这对新intel处理器是一个好消息。本篇不是绝对准确的性能对比,只是把这几天运行matlab可以运行的测试项目进行了简单对比,具体到每个处理器的性能可能结果不完全准确,通过多个矩阵计算基准的测试,进一步了解了matlab的科学计算性能,严格来说matlab为用户提供了诸多矩阵基本操作的函数,方便了用户进行矩阵运算,并用于数值分析的需要,其底层基于MKL核心数学库,在诸多方面实现了运用AVX512的计算,这有利于新一代高性能处理器的性能表现,IceLake处理器的表现也还不错,在目前的基准中,随着矩阵运算对访存性能,并行计算对并行资源的需求使得多核扩展表现出了瓶颈,而作为一个方便的矩阵运算平台,本身的绝对性能优化水平也似乎显得不是那么高,使得性能测试变得更加复杂。本次测试只是一个开端,旨在开启使用Matlab进行性能测试,此后,Matlab会不断出现在今后的性能综合对比测试中,在这个过程中,会不断对这些实例基准进行一定调节,使得性能更符合之后测试的处理器最佳的状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值