首页 > 解决方案 > Python中的平行向量点

问题描述

我试图使用 numpy 进行下面的计算,其中 k 是一个常数,A 是一个大而密集的二维矩阵 (40000*40000),数据类型为 complex128:

A = A - k*np.matmul(A[:,0:1],A[1:2,:])

似乎 np.matmul 或 np.dot 只会使用一个核心。此外,减法运算也在一个内核中完成。我想在集群上运行这个操作,所以想知道我是否可以并行这个操作。对于一个简单的测试,我将这两个操作分开,看看哪个是时间成本部分。

t1 = time.time()
c = np.dot(A_matrix_reverse[:,0:1],A_matrix_reverse[0:1,:])
t2 = time.time()
c = A_matrix_reverse - 10*c
t3 = time.time()
print(t2-t1) # 3.7593634128570557
print(t3-t2) # 9.5412278175354

标签: pythonnumpyparallel-processingmatrix-multiplication

解决方案


Numpy 的点积通过 BLAS 运行,因此如果您使用多线程 BLAS 库运行它,它应该是多线程的。python -m pip install intel-numpy如果由于某种原因您的本地 BLAS 库未针对多线程进行编译,我建议尝试针对 MKL ( ) 构建的 numpy 。

另外,请尝试以下操作,而不是当前的减法:

c *= -10
c += A_matrix_reverse

无需分配一堆您不想保留的中间产品。


推荐阅读