6 코어 인텔 제온 기계에서 numpy.linalg 및 openmpi/mpi4py를 사용하여 완전히 독립적 인 많은 행렬 계산을 대각 화하려고합니다.mpi4py는 현저하게 병렬화 가능한 코드의 속도를 향상시키지 못합니다.
N 개의 프로세스로 실행하면 각 행렬 계산이 N 배로 길어서 계산을위한 총 시간이 비 병렬 버전과 같고 (실제로 약간 느립니다).
예. 여기에 단지 12 임의 1000x1000 행렬을 대각선 화 간단한 코드는 다음과 같습니다
는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 초, 4 개 프로세스와 9 초 약 6 초 걸립니다. 아무도 나에게 무슨 일이 일어나는지 말해 줄 수 있니? MPI 통신이없는이 당황스럽게 병렬화 가능한 코드가 속도 향상을 병렬로 실행하지 않는 이유는 무엇입니까?
나도 같은 코드를 실행하지만 문제 해결이 아닌 scypi.linalg
이것을 실행하는 프로세서/메모리는 무엇입니까? 그것은'done, time = 6 seconds'을 의미하는 것처럼 읽지 만, 제 관찰은 각 반복 시간 인 6 초입니다. 어느 시간대에 내려갈 것으로 예상됩니까? – Zulan