не может отправлять сообщения MPI определенной длины

Я использую mpi4py 2.0.0, созданный для OpenMPI 1.10.1, в системе Ubuntu 14.04.3 с Python .7.10. По какой-то причине попытка отправки сообщения размером более 64 Кб приводит к зависанию отправки/получения; однако я могу успешно отправлять большие сообщения в других системах Ubuntu 14, используя точно такое же программное обеспечение и пакеты OpenMPI/mpi4py. Я также могу успешно отправлять большие сообщения в программах на C, использующих OpenMPI. Это говорит о том, что в среде есть что-то, что отрицательно влияет на связь MPI, выполняемую mpi4py. Любые идеи относительно того, что может мешать работе mpi4py?

Вот пример кода, который работает в одной системе и зависает в другой, когда для N установлено значение 65537 или больше.

import os
import sys

from mpi4py import MPI
import numpy as np

N = 65537

def worker():
    comm = MPI.Comm.Get_parent()
    size = comm.Get_size()
    rank = comm.Get_rank()

    buf = np.empty(N, np.byte)
    comm.Recv(buf=buf)

if __name__ == '__main__':
    script_file_name = os.path.basename(__file__)
    if MPI.Comm.Get_parent() != MPI.COMM_NULL:
        worker()
    else:
        comm = MPI.COMM_SELF.Spawn(sys.executable,
                        args=[script_file_name],
                        maxprocs=1)

        comm.Send(np.random.randint(0, 256, N).astype(np.byte), 0)

Я также попытался заменить маринованный send/recv на немаринованный Send/Recv, используя явно заданные буферы фиксированной длины, но это никак не повлияло на проблему.

Любопытно, что проблема не затрагивает передачи между одноранговыми процессами, использующими один и тот же коммуникатор.


person lebedov    schedule 11.11.2015    source источник
comment
Странный. Является ли работающий код C эквивалентом кода Python, т.е. он также использует MPI_Comm_spawn? Все ли процессы выполняются на одном хосте? Было бы полезно, если бы вы могли подключиться к каждому процессу Python с помощью GDB и создать трассировку стека основного потока.   -  person Hristo Iliev    schedule 11.11.2015
comment
Проблема, вызванная виртуальным сетевым интерфейсом, как вы заметили в ответ на аналогичную проблему в другом месте на SO :-)   -  person lebedov    schedule 12.11.2015


Ответы (1)


Проблема решена: OpenMPI сбивал с толку наличие виртуального сетевого интерфейса, созданного Docker. Удаление интерфейса устранило странность, хотя можно также указать OpenMPI игнорировать интерфейс.

person lebedov    schedule 11.11.2015