#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
модуле. Не имеет значения, какой файл его использует.