我在运行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 ,正如彼得所建议的那样。
答案 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"部分。