2015-11-11 1 views
1

Я запускаю 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?не может отправлять сообщения MPI на определенную длину

Ниже приведен пример кода, который работает в одной системе и зависает на другом, когда 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) 

Я также попытался заменить маринованные посыла/ПРИЕМ с не маринованные отправки/ПРИЕМ с помощью явно заданных буферов фиксированной длины, но это не оказывает никакого влияния на эту проблему.

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

+0

Странно. Является ли код C, который работает эквивалентно Python, т. Е. Использует ли он MPI_Comm_spawn? Все процессы работают на одном хосте? Это поможет, если вы можете подключиться к каждому процессу Python с помощью GDB и создать трассировку стека основного потока. –

+0

Проблема, вызванная виртуальным сетевым интерфейсом, как вы заметили в ответ на аналогичную проблему в другом месте на SO :-) – lebedov

ответ

1

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

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