# -*- 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")