是ipython还是numpy秘密地并行化矩阵乘法?

时间:2017-09-17 08:47:36

标签: python numpy ipython-parallel

所以案例如下: 我想比较矩阵乘法的运行时间 与ipython并行,只运行在单个核心上。

正常执行代码:

import numpy as np
n = 13
dim_1, dim_2, dim_3, dim_4 = 2**n, 2**n, 2**n, 2**n
A = np.random.random((dim_1, dim_2))
B = np.random.random((dim_3, dim_4))
start = timeit.time.time()
C = np.matmul(A,B)
dur = timeit.time.time() - start
在我的笔记本电脑上,这相当于大约24秒 如果我做同样的事情试图平行它。 我使用以下命令启动四个引擎:ipcluster start -n 4(我有4个核心)。 然后我在笔记本上跑:

from ipyparallel import Client
c = Client()
dview = c.load_balanced_view()
%px import numpy
def pdot(view_obj, A_mat, B_mat):
    view_obj['B'] = B
    view_obj.scatter('A', A)
    view_obj.execute('C=A.dot(B)')
    return view_obj.gather('C', block=True)
start = timeit.time.time()
pdot(dview, A, B)
dur1 = timeit.time.time() - start
dur1

大约需要34秒。 当我在系统监视器中查看时,我可以看到,两者都有 使用所有核心的情况。在平行的情况下似乎 是一个他们没有100%使用的开销(我想是这样的 它们分散在引擎中的部分)。 在非并行部分,所有核心都立即使用100%。 这让我感到惊讶,因为我一直认为python本质上是 在一个核心上运行。

如果有人对此有更深入的了解,会很高兴。

0 个答案:

没有答案