计算矩阵点积的最快方法



我按如下方式计算点积:

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 是否已经为核心使用了理想的平衡?

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

最后一个向我指出了SciPy文档,其中包括以下引用:

"[np.dot(A,B) 使用 BLAS 进行评估,这通常是一个 库经过精心调整,可在您的硬件上尽可能快地运行 利用缓存和汇编程序实现。但 许多体系结构现在都有一个 BLAS,它也利用了 多核机器。如果你的numpy/scipy是使用其中之一编译的, 然后 dot() 将被并行计算(如果这更快),没有 你什么都做。

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

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

相关内容

  • 没有找到相关文章

最新更新