百科问答小站 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



  

相关话题

  麒麟 9000 比 A14 多 38 亿晶体管,为什么性能不如 A14? 
  如何评价 AMD CEO 表示公司服务器新芯片性能优于英特尔高价货? 
  C++里 const int* 与 int const* 有什么区别? 
  C++的CRTP所带来的静态多态功能具体有什么用? 
  以C++为核心语言的高频交易系统是如何做到低延迟的? 
  如何评价 Intel 酷睿 11 代 CPU 牙膏倒吸? 
  c中struct 为什么可以在数据结构这样用? 
  为什么AMD说最强游戏CPU是5900x,而不是5800x或者5950x? 
  英特尔公司(Intel)为什么不做安谋(ARM)芯片? 
  带一堆指针的链式结构怎么写才好? 

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





© 2024-12-22 - tinynew.org. All Rights Reserved.
© 2024-12-22 - tinynew.org. 保留所有权利