Использование mpi с python - проблема определения - PullRequest
0 голосов
/ 27 июня 2019

Я должен работать на Python и, более конкретно, MPI. Мне пришлось проделать ту же самую работу, используя openmp для c, и она отлично работала, но я борюсь с использованием mpi. Мне нужно использовать MPI и получить время, но я не знаю, как использовать несколько потоков и процессов. Я знаю, что вы можете использовать send и recv, scatter и collect, но я не совсем понимаю, как их использовать. Вот что я придумал:

if __name__=="__main__":
start = MPI.Wtime ()
flux=MPI.COMM_WORLD
rank=flux.Get_rank()
size=flux.Get_size()
F = open("param.dat",'r')
N = int(F.readline())
Nt= int(F.readline())
print("================================")
print("====== Probleme du barage ======")
print("====== avec %d mailles"%(N))
print("====== et %d pas de temps"%(Nt))
print("================================")
dx = 1./N
x,h,hu = init(N,dx)
plt.plot(x,h,x,hu/h);
for i in range(Nt):
if rank == 0:
fh,fu,cm = Flux(N,h,hu) # calcul des flux
dt = 0.75*dx/cm;
hn,hun = integre(N,dt,dx,h,hu,fh,fu)
h  =  hn.copy()
hu = hun.copy()
print("I am rank %d in group of %d processes" %(rank,size))
plt.plot(x,h,'--',x,hu/h,'--');plt.show()
end = MPI.Wtime()
print("Total time %f" % (end -start))

Программа работает, и я получаю время, например, если я использую 4 процесса:

I am rank 2 in group of 4 processes
Total time 0.014009
I am rank 3 in group of 4 processes
Total time 0.023530
I am rank 1 in group of 4 processes
Total time 0.026517
I am rank 0 in group of 4 processes
Total time 0.597385

Но это не помогает, это занимает больше времени, чем оригинальная программа. Надеюсь, ты сможешь помочь мне. Я пробовал разные статьи и блоги, в которых рассказывалось, как использовать разные методы, но я не смог что-то из этого извлечь. Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...