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



  

相关话题

  C++如何返回未知类型的空引用? 
  C++ 运动完上一个函数到下一个函数时,上一个函数里的变量值(结构体变量)为什么没保留住,变成零了? 
  cpu的核心模式和用户模式是不是就是root和不root的区别? 
  如何生成多个互不重叠的不同半径圆? 
  为什么Intel的u多数带核显,多数买家都会自己加独显,设计有问题? 
  你是如何学会正则表达式的? 
  为什么C++头文件喜欢把一个类型通过typedef定义出无数个新名字,这有什么意义吗? 
  臭打游戏的,想用3080ti显卡 ,cpu是5800x还是升级12700k啊,有啥体验差别么? 
  2019 年了,Rust 到底比 C++ 强在哪里? 
  学习 C/C++ ,有什么书籍推荐? 

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





© 2024-11-05 - tinynew.org. All Rights Reserved.
© 2024-11-05 - tinynew.org. 保留所有权利