-1
我想在6核英特爾至強機上使用numpy.linalg和openmpi/mpi4py對大量完全獨立的矩陣計算進行對角化。mpi4py不加速embarrisingly可並行化的代碼
當使用N個進程運行時,每個矩陣計算似乎需要延長N倍,因此計算的總時間與非並行版本相同(實際上比較慢)。
E.g.這裏有一個簡單的代碼,僅僅對角化12個1000×1000的隨機矩陣:
import numpy as np
import numpy.linalg as la
import os
import random
import time
# MPI imports ----
from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
N_nodes = comm.Get_size()
t0 = time.time()
def dosomework(N):
matrix = np.random.rand(N,N)
matrix = matrix+matrix.T
la.eig(matrix)
return 1
N_tot = 12
N_per_process = np.int(np.ceil(N_tot/N_nodes))
worker_data = []
for j in range(N_per_process):
dosomework(1000)
print 'Node:',rank,'; iteration:',j,'; time:',time.time()-t0
if rank==0:
print 'done, time = ',time.time()-t0
這大約需要6秒的一個過程中,6秒有兩個過程,和9秒,4個進程。誰能告訴我發生了什麼事?爲什麼這種沒有MPI通信的令人尷尬的可並行代碼沒有得到並行運行的加速?
如果我運行相同的代碼,但與非scypi.linalg
你在什麼處理器/內存上運行?它的讀法就像你的意思是「完成,時間= 6秒」,但我的觀察結果是每個「迭代時間:6秒」。你期望哪一次下降? – Zulan