MPI4Py Scatter sendbuf Тип аргумента? - PullRequest
2 голосов
/ 04 мая 2009

У меня проблемы с функцией Scatter в модуле Python MPI4Py. Я предполагаю, что я должен быть в состоянии передать ему один список для sendbuffer. Тем не менее, я получаю непротиворечивое сообщение об ошибке, когда я делаю это, или действительно добавляю два других аргумента, recvbuf и root:

  File "code/step3.py", line 682, in subbox_grid
    i = mpi_communicator.Scatter(station_range, station_data)
  File "Comm.pyx", line 427, in mpi4py.MPI.Comm.Scatter (src/
mpi4py_MPI.c:44993)
  File "message.pxi", line 321, in mpi4py.MPI._p_msg_cco.for_scatter
(src/mpi4py_MPI.c:14497)
  File "message.pxi", line 232, in mpi4py.MPI._p_msg_cco.for_cco_send
(src/mpi4py_MPI.c:13630)
  File "message.pxi", line 36, in mpi4py.MPI.message_simple (src/
mpi4py_MPI.c:11904)
ValueError: message: expecting 2 or 3 items

Вот соответствующий фрагмент кода, который начинается на несколько строк выше 682 упоминалось выше.

for station in stations
        #snip--do some stuff with station
        station_data = []
        station_range = range(1,len(station))
        mpi_communicator = MPI.COMM_WORLD
        i = mpi_communicator.Scatter(station_range, nsm)
        #snip--do some stuff with station[i]
        nsm = combine(avg, wt, dnew, nf1, nl1, wti[i], wtm, station[i].id)
        station_data = mpi_communicator.Gather(station_range, nsm)

Я пробовал несколько комбинаций, инициализирующих station_range, но я не должен правильно понимать типы аргументов Scatter.

Есть ли у гуру Python / MPI разъяснение?

1 Ответ

6 голосов
/ 15 сентября 2010

Если вы хотите переместить необработанные буферы (как с Gather), вы предоставляете триплет [buffer, size, type]. Посмотрите на демонстрационные примеры для этого. Если вы хотите отправить объекты Python, вы должны использовать интерфейс более высокого уровня и вызвать gather (обратите внимание на нижний регистр), который использует pickle внутри.

...