1

分散計算を行う方法に関するチュートリアルを見ました。

def parallel_dot(dview, A, B):
    dview.scatter('A', A)
    dview['B'] = B
    dview.execute('C = numpy.dot(A, B)')
    return dview.gather('C')

np.allclose(parallel_dot(dview, A, B),
            np.dot(A, B))

チュートリアルで直接ビューを使用するのはなぜですか? 負荷分散されたビューでこれをどのように実装しますか?

これがどれだけうまく機能するかを理解するために、いくつかのベンチマークを行いました。

t1 = []
t2 = []
for ii in range(10, 1000, 10):
    A = np.random.rand(10000, ii).astype(np.longdouble).T
    B = np.random.rand(10000, 100).astype(np.longdouble)
    t_ = time.time()
    parallel_dot(dview, A, B).get()
    t1.append(time.time() - t_)
    t_ = time.time()
    np.dot(A, B)
    t2.append(time.time() - t_)
plt.plot( range(10, 1000, 10), t1 )
plt.plot( range(10, 1000, 10), t2 )

結果はかなりひどいです (青はパラレル、緑はシリアル):

行列乗算ベンチマーク

4

1 に答える 1

1

それはほとんど価値のある負荷ではありません。最初に、真の行列から行列への乗算ではなく、ベクトル乗算を行っています。10000x10000 のマトリックスを試してみてください。複数のコアを使用している場合は、いくつかの違いが見られると思います。

于 2014-12-17T19:23:20.743 に答える