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

Я использую mpi4py 2.0.0, построенную на OpenMPI 1.10.1 в системе Ubuntu 14.04.3 с Python .7.10. По какой-то причине попытка отправки сообщений размером более 64 Кб приводит к зависанию команды send/recv; Тем не менее, я могу успешно отправлять большие сообщения в других системах 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, используя явно указанные буферы фиксированной длины, но это никак не повлияло на проблему.

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

1 ответ

Решение

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

Другие вопросы по тегам