2014-02-03 3 views
4

У меня недавно возникла проблема с попыткой обмена большими данными между несколькими процессорами, используя команду «отправить» из библиотеки mpi4py. Даже массив с плавающей запятой 1000x3 слишком большой для отправки. Любые идеи, как преодолеть эту проблему?mpi4py зависает при попытке отправить большие данные

THX заранее.

ответ

1

Я нашел простое решение. Разделите данные на достаточно мелкие куски ...

0

точка-точка передачи/RECV больших данных работ:

#!/usr/bin/env python 
from mpi4py import MPI 
import numpy 

comm = MPI.COMM_WORLD 
rank = comm.Get_rank() 

if rank == 0: 
    data = numpy.arange(300*100000, dtype='f') 
    comm.Send([data, MPI.FLOAT], dest=1, tag=77) 
elif rank == 1: 
    data = numpy.empty(300*100000, dtype='f') 
    comm.Recv([data, MPI.FLOAT], source=0, tag=77) 
    print data 

Запуск этого с двумя процессорами:

% ~/work/soft/mpich/bin/mpiexec -np 2 ./send-numpy.py 
[ 0.00000000e+00 1.00000000e+00 2.00000000e+00 ..., 2.99999960e+07 
    2.99999980e+07 3.00000000e+07] 
1

Я столкнулся с этим же проблема с Isend (не с Send). Похоже, что проблема заключалась в том, что процесс отправки завершился до того, как получатель получил данные. Я исправил это, включив вызов comm.barrier() в конце каждого из процессов.

Смежные вопросы