Init
This commit is contained in:
commit
c394677d07
59 files changed
+5149
No files matched your search
@@ -0,0 +1,38 @@
|
||||
# -*- 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")
|
||||
Reference in new issue
Block a user