为什么MATLAB在我的Windows服务器上这么慢?

时间:2017-12-05 15:30:19

标签: matlab performance server benchmarking

我在运行MS Windows Server 2008 R2 Enterprise v 6.1(SP1)的服务器上安装了Matlab R2017a,基准测试结果很糟糕:

bench
3.6424   0.5267   0.2114   5.0303   1.5557   3.4980

[columns = LU,FFT,ODE,Sparse,2-D,3-D]

请注意,LU和Sparse特别慢。

服务器有这个硬件: CPU:Intel Xeon E7320 @ 2.13GHz(4个物理处理器,16个逻辑) 128 GB RAM 64位操作系统

Matlab版本:9.2.0.556344(R2017a) Java版本:Java 1.7.0_60-b19与Oracle公司Java Hotspot(TM)64位服务器VM混合模式。

还有其他用户可以在服务器上联机,但我可以看到他们没有给系统施加压力,并且已经确认这些运行时间是稳定的(过去一周已经多次测试过。

我的问题是这样的:是否有任何其他库或Matlab依赖的东西可能是"错误"?我在一个类似但略微更新的服务器上有另一个类似的设置,使得工作台结果更接近我根据规格所期望的结果。我想知道它是否正在使用"错误"线性代数模块或其他东西。

替代解释我知道Matlab在特定的AMD Opteron CPU上运行得非常慢(我碰巧也在Matlab中使用了这样的服务器,链接https://se.mathworks.com/matlabcentral/answers/33939-poor-matlab-performance-on-amd-based-computer)。它可能与英特尔至强E7320的问题类似吗?

编辑:Xeon E7320 ,正如彼得所建议的那样。

1 个答案:

答案 0 :(得分:4)

更新:我不确定Matlab的bench是否只利用单个CPU内核,多个CPU内核或GPU(OpenCL / CUDA)。如果它可以使用GPU加速,那将产生巨大的差异。 (特别是如果你在"慢速"服务器中没有一个)。

正如评论中所讨论的,a dual-core Sandybridge laptop在一些基准测试中的速度提高了10倍,但在某些其他组件上只增加了2或1.5倍。 (但我不确定Matlab的版本是否被控制;你链接的那个帖子提到不同版本的Matlab在bench中做了不同的工作量。)

本答案的其余部分是在假设您的测试利用了所有CPU核心的情况下编写的(否则使用旧的多核机器没有意义)。但不考虑GPU。

我认为您的CPU实际上是a 65nm Core2-based Xeon E7320,而不是" E3720" (没有谷歌点击)。你在比较什么? 您的Tigerton CPU很古老(大约10岁),当然它们很慢。 (Tigerton与Conroe / Merom,第一代Core2相同的微体系结构)。

与现代CPU相比,你有非常低的内存带宽和缓存速度,并且只有SSSE3,而不是AVX或FMA。这些CPU没有内置的内存控制器,因此all 4 sockets are sharing the memory controller hub (MCH) via separate 1066MHz Front-Side Buses.内存带宽不会随着套接字的数量而扩展,并且不是很好。 多年来,内存带宽增长速度超过了每核心性能。根据这个链接,一个四核16核Tigerton(就像你有)几乎不比四核八核巴塞罗那Opteron好。对于受CPU限制的工作负载来说并不是那么糟糕,但是内存限制的工作负载会非常糟糕。

除了低时钟速度外,它的时钟时钟明显慢于现代CPU。 IDK那些时代应该是什么样的(我在[performance]标签,而不是Matlab),但3GHz四核i5或i7 Haswell / Skylake桌面完全合情合理或者高功率笔记本电脑比你的16芯恐龙机要快。

(实际上,该基准测试是否会随着内核数量的增加而扩展?如果没有,单线程内存带宽可能真的不好。)

Sandybridge的性能发生了很大的变化(所有代码,包括非SIMD工作负载),并且您的机器和现代CPU之间还有其他几个较小的跳跃。 SnB每个时钟可以运行2个加载指令,而之前的Intel(如Core2)可以运行1个。

对于优化库将利用的特定于FP的东西,x86 ISA扩展非常重要:AVX将SIMD矢量宽度加倍,使FLOPS加倍(在具有全宽执行单元的Intel CPU上)。 FMA执行mul +添加一条指令,可能使FLOPS加倍。微体系结构的改进也很重要:Haswell有两个FMA单元,而早期的CPU有一个FP加法器和一个FP乘法器,再次可能使FLOPS加倍。只有连续的内存和高计算与内存工作负载才能充分利用这一点,例如:一个密集的matmul,但在这种情况下,一个Haswell核心正在做8个Tigerton核心的工作。

我认为如果CPU拥有它,Matlab可以利用AVX + FMA。

顺便说一下,它不只是16"逻辑"处理器。你没有超线程,所以你有一个带有四个四核CPU的4插槽系统,用于16个物理内核。 (而这些"四核"芯片实际上是同一封装中的两个独立的双核芯片,according to wikipedia

因此,就需要相互通信的物理芯片的数量而言,有8个(每个包中有两个)。这是为了达到其他CPU的大量跳跃,因此内核之间的同步比单芯片四核更加昂贵。 (甚至可能比具有一对18核CPU的现代双插槽Xeon盒更糟糕。)

请注意,内存的高延迟也会损害内存带宽:请参阅此答案中有关优化memcpy / memset以及存储带宽如何在Intel CPU中工作的"latency bound platforms"部分。