Matlab/NumPy/C++Eigen 速度差距为什么很大?

测试了一个算例:两个10000 X 10000矩阵做乘法,只计算做乘法那一步,发现Python速度比其他两个快一倍? 硬件环境:AMD Threadr…
关注者
428
被浏览
456,913
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

为什么你Matlab R2016b慢?是因为Matlab R2016b发布的时候,Zen根本不存在,采用的所有库都是老版本,不存在任何针对Zen的优化。专门为Zen优化的数学库AOCL第一版发布时间大概是2016年底,对于MATLAB来说,不可能在一个2016H2开头出的版本里封装年底才出的AOCL,更何况也没有Zen系列处理器用来测试封装的程序对不对。

(ACML已经不是给Zen系列处理器优化的,那个里面全是SSE,给K10啊推土机啊之类的用的。)

而Python有所不同,Numpy 1.16.2基本上是2019Q1的东西,如果默认是openblas,那么该有的优化早有了。

另外OpenBLAS似乎已经开始考虑Zen2的支持:

所以你要升级到MATLAB 2019再试,当然不保证新版本会快一点。或者你可以试着让你的MATLAB计算调用外部OpenBLAS。

至于为什么Eigen+MKL慢,这个不用我多说了吧?

肯定有人会提到AMD的半宽度SIMD的问题,然而这个东西是这样的:假设并行充分优化的前提下,线程撕裂者毕竟有16个Core,所以比9900k差的只是频率上的差距。

你如果stick to线程撕裂者做有限元或者CFD,要懂一点优化的方法,至少折腾个AOCC。可以参考AMD官方指导和测试的OpenFOAM性能:

实际上你如果有余力把所有的C++库都用AOCC编译一遍,性能可能会提高不少。至少就目前的测试来看,可能计算性能上有15%的提升。