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



  

相关话题

  码农们最常说的「谎言」有哪些? 
  为什么ASIC的频率可以达到GHz,而FPGA只能达到几百MHz? 
  C++中函数返回的过程是什么样的? 
  年薪到手30万+,却舍不得给自己配一台台式机,是不是很可悲? 
  把windows平台下mfc框架的代码移植到linux对编程小白来说难度很大吗?应该学习什么内容呢? 
  C++整型有__int8、__int16、__int32等等,为什么还要short、int、long? 
  C++为何不允许在函数中直接传递数组? 
  为什么很多程序无法计算负数的立方根? 
  网上有对于C++编程要避免使用cin、cout、fstream;而是使用scanf、printf、FILE *的说法, 请问是正确的吗? 
  要设计一段C++程序将这组数按要求重新排序时,有哪些好的算法? 

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





© 2025-02-20 - tinynew.org. All Rights Reserved.
© 2025-02-20 - tinynew.org. 保留所有权利