Files
2026-10-07 13:06:47 +05:00

38 lines
1.8 KiB
Python

# -*- coding: utf-8 -*-
"""Демо: привет, MPI — ранги, размер мира, точка-точка.
Запуск из корня курса:
mpiexec -n 4 python lab08_mpi/examples/01_hello_mpi.py
Каждый ранг — отдельный процесс с копией программы. Ранги обмениваются
сообщениями: ранг 0 рассылает своё имя всем, каждый отвечает.
Без mpiexec (обычный python) программа работает как единственный ранг.
"""
from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()
print(f"[до обмена] ранг {rank} из {size}, узел {MPI.Get_processor_name()}")
if rank == 0:
# ранг 0 рассылает задание всем остальным (bcast: всем одно и то же)
greeting = f"привет от координатора (ранг 0), всего рангов {size}"
else:
greeting = None
greeting = comm.bcast(greeting, root=0) # коллективная: вызывают ВСЕ
print(f"ранг {rank}: получил «{greeting}»")
# точка-точка: каждый ранг (кроме 0) отправляет 0 свой номер
if rank != 0:
comm.send(rank, dest=0, tag=11)
print(f"ранг {rank}: отправил свой номер координатору")
else:
received = [comm.recv(source=r, tag=11) for r in range(1, size)]
print(f"ранг 0: получил номера от рангов {received}")
if size == 1:
print("\nВы запустили без mpiexec — работает один ранг.")
print("Попробуйте: mpiexec -n 4 python lab08_mpi/examples/01_hello_mpi.py")