计算矩阵点积的最快方法

时间:2017-05-08 20:49:01

标签: python performance numpy multiprocessing

我按如下方式计算点积:

import numpy as np
A = np.random.randn(80000, 3000)
B = np.random.randn(3000, 50)
C = np.dot(A, B)

运行此脚本大约需要9秒钟:

Mac@MacBook-Pro:~/python_dot_product$ time python dot.py 

real    0m9.042s
user    0m10.927s
sys     0m0.911s

我可以做得更好吗? numpy是否已经使用了核心的理想平衡?

1 个答案:

答案 0 :(得分:3)

this SO answer的最后两个答案应该会有所帮助。

最后一个指向我SciPy documentation,其中包括这句话:

  

“[np.dot(A,B)使用BLAS评估,其中]通常为a   库仔细调整,以便在您的硬件上尽快运行   利用缓存和汇编程序实现。但   许多架构现在都有一个BLAS也可以利用a   多核机器。如果您的numpy / scipy是使用其中一个编译的,   然后dot()将并行计算(如果这更快)没有   你做了什么。“

所以听起来它取决于您的特定硬件和SciPy编译。有时np.dot(A,B)将使用您的多核/处理器,有时可能不会。

为了找出你的情况,我建议你在系统监视器打开的情况下运行你的玩具示例(使用更大的矩阵),这样你就可以看到一个CPU是否只有活动高峰,或者是多个CPU活跃。