mpi4py: как разделяется MPI.COMM_WORLD между файлами?

#python #multiprocessing #mpi #mpi4py

Вопрос:

У меня есть программа на python, которая использует несколько файлов, и я хочу запустить ее параллельно, используя mpi4py. Нужно ли мне определять переменную comm = MPI.COMM_WORLD в начале каждого файла или мне следует определить ее один раз и передать в качестве аргумента?

Чтобы сделать вещи конкретными, рассмотрим следующую программу, состоящую из двух файлов python, сначалаmpi_base_file.py:

 from mpi4py import MPI
from mpi_other_file import print_rank

comm = MPI.COMM_WORLD

if rank == 0:
    print('rank and comm in base file', comm.Get_rank(), comm)
    print_rank()
 

иmpi_other_file.py:

 from mpi4py import MPI
comm = MPI.COMM_WORLD

def print_rank():
    print('rank and comm in other file', comm.Get_rank(), comm)
 

Бег mpiexec -np 2 python3 mpi_base_file.pyдает:

ранг, связь и размер в базовом файле 0 <объект mpi4py.MPI.Intracomm в 0x7fa841be49f0>

ранг, связь и размер в другом файле 0 <объект mpi4py.MPI.Intracomm в 0x7fa841be49f0>

Переменная MPI.COMM_WORLD и ранг, по-видимому, одинаковы в обоих файлах, как mpi4py достигает этого? Работает ли он на нескольких узлах, которые не используют одну и ту же память? Если нет, то каков правильный способ реализации программы?

Комментарии:

1. MPI.COMM_WORLD является глобальной переменной, определенной в MPI модуле. Не имеет значения, какой файл его использует.