百科问答小站 logo
百科问答小站 font logo



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

  

user avatar   ma-yan-lin-12 网友的相关建议: 
      

看到问题的第一感觉是,一定是哪里不对!因为无论是 MATLAB 还是 Python + Numpy 底层都是调用 BLAS, LAPACK 等,所以速度应该不会差别很大。

我在自己的电脑上测试了一下,用的 Windows 10 + MATLAB 2018b + Anaconda,CPU为 i7-8700k。双方都可以使用 MKL 加速。

MATLAB代码

       A = rand(10000, 10000); B = rand(10000, 10000); f = @() A*B; timeit(f)     

得到的结果是 6.6110s

Python代码 (ipython)

       import numpy as np A = np.random.rand(10000, 10000) B = np.random.rand(10000, 10000) %timeit A @ B     

结果为 6.45s +- 182ms

从结果来看,基本可以认为,二者没有区别。

所以,题主哪里没有配置好?希望对题主有所帮助


PS:这类只涉及到基本矩阵运算的语言之间的比较是没有意义的,因为大家都是调用底层的库来实现,差别可能就是一点调用开销,这在整个程序中可以忽略不计。

如果真的想比较语言之间的差别,需要根据任务自己实现一些任务,然后比较运行速度。当然,严格来说这也有偏差,因为不同的语言适应的任务也不同,但是起码有一定的意义。


PS2: 由于题主的CPU是AMD,所以我怀疑可能是平台的关系。随便Google一下发现了一些人在抱怨,MATLAB在AMD的CPU上执行速度并不理想,甚至满于低一档Intel CPU。例如,有人发现同样的代码,在AMD 2990WX(32核64线程@3.5GHZ, 64G RAM)上需要2200s,而在 Intel 8700k (6核12线程@4.0GHZ, 32GRAM)上只需要600s,3.5x倍的速度。[1]

原因大概有二:

  1. Threadripper 虽然核心数比较多,但是单核新能还是不如Intel,而MATLAB中很多函数没有经过多核优化,单核心能就非常关键了
  2. MATLAB很多函数是只对Intel优化的,比如严重依赖MKL,而Intel自己的编译器“故意”让同样的代码在AMD CPU上执行缓慢[2]

参考

  1. ^ https://www.mathworks.com/matlabcentral/answers/430679-the-same-matlab-code-runs-slow-on-amd-2990wx-based-pc-and-runs-fast-4x-times-faster-on-8700k-based
  2. ^Intel "cripple AMD" function https://www.agner.org/optimize/blog/read.php?i=126



  

相关话题

  12代intel了,為什麼不把12900k做成超頻遊戲本? 
  深度学习底层开发对数学有哪些要求? 
  matlab中怎么找特定mat文件? 
  如何看待麒麟970理论性能超骁龙835,而游戏体验却不如835? 
  怎么在事先未知将要输入数字的个数的情况下,将其全部赋值给一个数组? 
  半导体厂商如何做芯片的出厂测试? 
  Visual Studio"从现有代码创建项目",这个功能可以用脚本实现吗? 
  如何看待 AMD 2020.10.8(当地时间)发布的 Zen3 处理器?有哪些亮点和不足? 
  使用 open addressing 的 Hash 表载荷过高为什么会降低 CPU 的缓存命中率? 
  C++的运行时多态,性能损失有多大? 

前一个讨论
男友文章被拒,感觉受了很大打击,该如何开解?
下一个讨论
江西理工大学校园磁悬浮发车,永磁磁浮轨道交通系统「虹轨」是什么?





© 2025-06-07 - tinynew.org. All Rights Reserved.
© 2025-06-07 - tinynew.org. 保留所有权利