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



  

相关话题

  能否把高版本的libstdc++静态连接到一个只暴露纯C接口的动态库中,给低版本c++程序调用? 
  中国没有能力制造中央处理器(CPU),如果超威半导体(AMD)和英特尔商量好在中国卖高价会怎么样? 
  多核CPU中,利用多线程进行排序中出现了一些奇怪的现象,不知道其背后的原因是什么,希望有人能给予解答? 
  AMD Zen2偶发,Zen3高发的WHEA-18错误,可能是由什么原因造成的? 
  Intel Core i9-9900K 和 AMD 线程撕裂者 2920X 之间如何选择? 
  至强处理器到底好不好? 
  CPU(为方便讨论,这里仅限32位X86指令)的各种构架,比如奔3,奔4,对纯加法运算速度有帮助吗? 
  计算机科学与技术专业学生买笔记本,中央处理器选超威半导体(AMD) 好还是英特尔(Intel) 好? 
  现代C/C++编译器有多智能?能做出什么厉害的优化? 
  Win11让AMD很受伤,游戏性能下降15%,官方建议暂时别升级,你的电脑CPU在受影响的列表中吗? 

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





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