我按如下方式计算点积:
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是否已经使用了核心的理想平衡?
答案 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活跃。