为什么MATLAB在我的Windows Server上这么慢



我在运行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,稀疏,2-d,3-d]

请注意,LU和稀疏特别慢。

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

MATLAB版本:9.2.0.556344(R2017A)Java版本:Java 1.7.0_60-B19带有Oracle Corporation Java Hotspot(TM)64位服务器VM混合模式。

服务器上还有其他用户可以在线上进行在线,但我可以看到他们没有强调系统并验证了这些运行时间是稳定的(过去一周已经多次测试。

我的问题是这样的:MATLAB依赖的其他库可能是"错误的"?我在类似但较新的服务器上还有另一个类似的设置,该设置使基于规格更接近我期望的基础。我想知道它是否使用"错误"线性代数模块或其他内容。

替代说明我知道MATLAB在特定的AMD Opteron CPU上运行非常慢(我碰巧在Matlab上使用了此类服务器,链接https://se.mathworks.com/Matlabcentral/Answers/33939基于AMD的罚款 - 计算机)。英特尔Xeon E7320是否有可能是类似的问题?

编辑:Xeon E7320 ,如Peter所建议。

更新:我不确定MATLAB的bench是否仅利用单个CPU核心,多个CPU内核,或者还利用GPU(OpenCL/CUDA)。如果它可以使用GPU加速度,那将使巨大差异。(尤其是如果您在"慢速"服务器中根本没有一个)。

在评论中讨论的那样,在某些基准测试中,双核Sandybridge笔记本电脑的速度快10倍,但在其他一些组件上只能快2或1.5倍。(但是我不确定MATLAB的版本是否受到控制;您链接的该线程提到MATLAB的不同版本在其bench中做不同数量的工作)。


剩下的答案是为了假设您的测试利用所有CPU内核(否则使用旧的多核机就没有意义)。但是不考虑GPU。


我认为您的CPU实际上是基于65nm Core2的Xeon E7320,而不是" E3720"(没有Google Hits)。您在比较什么?您的Tigerton CPU是古老的(大约10年),当然它们很慢。(Tigerton与Conroe/Merom,第一代Core2)。

与现代CPU相比,您的内存带宽和缓存速度非常低,并且仅具有SSSE3,而不是AVX或FMA。这些CPU没有内置的内存控制器,因此所有4个插座都通过单独的1066MHz前侧总线共享内存控制器集线器(MCH)。内存带宽不会随插座数量扩展,并且不是很好。多年来,内存带宽的增长速度比每核性能的速度快。根据该链接,一个四核16核Tigerton(像您一样)比四核8核Barcelona Opteron好。对于有CPU结合的工作量来说还不错,但是绑定内存的工作负载会很糟糕。


以及低时钟速度,比现代CPU的时钟速度要慢得多。idk当时应该是什么样(我在这里使用[performance]标签,而不是MATLAB),但是3GHz四核i5或i7 haswell/skylake台式机或高功率笔记本电脑完全合理的是比您更快16核恐龙机。

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

Sandybridge(包括所有代码,包括非SIMD工作负载)发生了很大的进步,并且在您的机器和现代CPU之间还有其他几个较小的跳跃。SNB可以每个时钟运行2个加载说明,而1对于以前的Intel(例如您的Core2)。

对于优化库的FP特定内容,将利用X86 ISA扩展名很重要:AVX将SIMD矢量宽度加倍,将FLOPS翻倍(在具有全宽宽执行单元的Intel CPU上)。FMA对MUL 添加了一项指令,可能会加倍拖鞋。微构造的改进也很重要:Haswell具有两个FMA单元,而较早的CPU具有一个FP加法器和一个FP乘数,再次可能会增加一倍。只有连续的内存和高计算与内存工作负载才能充分利用这一点,例如一个密集的matmul,但在这种情况下,Haswell Core的工作与8个Tigerton内核一样多。

我假设MATLAB可以利用AVX FMA,如果CPU拥有它。


和顺便说一句,不仅是16个"逻辑"处理器。您没有超线程,因此您有一个4个插入系统,带有四个四核CPU,可容纳16个物理内核。(根据Wikipedia的说法,这些"四核"芯片实际上是同一包中的两个单独的双核模具。

因此,就需要相互通信的物理芯片数量而言,有8个(每个包装中有两个)。到达其他CPU是很多啤酒花,因此芯之间的同步比单盘四核要昂贵。(甚至比带有一对18核CPU之类的现代双插座Xeon盒子更糟)。

请注意,高延迟到内存也可能会损害内存带宽:有关优化Memcpy/Memset的答案的"延迟绑定平台"一部分以及商店带宽如何在Intel CPU中工作。

相关内容

  • 没有找到相关文章

最新更新