MPI4PY обеспечивает привязки стандарта интерфейса передачи сообщений (MPI) для Python и позволяет любой программе Python использовать несколько процессоров.
Поддерживает связь любого выбираемого объекта Python
point-to-point (sends, receives)
collective (broadcasts, scatters, gathers)
В качестве примера коллективных разбросов
рассмотрим список, имеющий значения от 0 до 79
import mpi4py
from mpi4py import MPI
mpi4py.rc.initialize = True
comm = MPI.COMM_WORLD
size = comm.Get_size()
rank = comm.Get_rank()
def processParallel(unitList):
subList=[i**2 for i in unitList]
return subList
if comm.rank == 0:
#Read the data in to a list
elementList=list(range(80))
#divide the data in do different chunks [small groups]
mainList = [elementList[x:x+10] for x in range(0, len(elementList), 10)]
else:
mainList = None
unitList = comm.scatter(mainList, root=0)
comm.Barrier()
processedResult=processParallel(unitList)
# Gathering the results back to Rank 0
final_detected_data = comm.gather(processedResult, root=0)
if comm.rank == 0:
print(final_detected_data)
Запустите код как: python -n python, например: python -n 8 python sample.py
Сравните время, необходимое для обработки всего списка