Использование mpi4py для распараллеливания цикла for в вычислительном кластере

1

Я раньше не работал с распределенными вычислениями, но я пытаюсь интегрировать mpi4py в программу, чтобы распараллелить цикл for в вычислительном кластере.

Это псевдокод того, что я хочу сделать:

for file in directory: Initialize a class Run class methods Conglomerate results

Я просмотрел все, и я не могу найти для этого никакого решения. Есть ли способ сделать это просто с mpi4py, или есть еще один инструмент, который может сделать это с легкой установкой и настройкой?

Теги:
parallel-processing
cluster-computing
mpi4py

1 ответ

2

Чтобы добиться параллелизма цикла for с MPI4Py, проверьте приведенный ниже пример кода. Его просто цикл для добавления некоторых чисел. Цикл for будет выполняться в каждом узле. Каждый узел получит другой блок данных для работы (диапазон для цикла). В конце Узел с нулевым раском будет добавлять результаты от всех узлов.

#!/usr/bin/python

import numpy
from mpi4py import MPI
import time

comm = MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()

a = 1
b = 1000000

perrank = b//size
summ = numpy.zeros(1)

comm.Barrier()
start_time = time.time()

temp = 0
for i in range(a + rank*perrank, a + (rank+1)*perrank):
    temp = temp + i

summ[0] = temp

if rank == 0:
    total = numpy.zeros(1)
else:
    total = None

comm.Barrier()
#collect the partial results and add to the total sum
comm.Reduce(summ, total, op=MPI.SUM, root=0)

stop_time = time.time()

if rank == 0:
    #add the rest numbers to 1 000 000
    for i in range(a + (size)*perrank, b+1):
        total[0] = total[0] + i
    print ("The sum of numbers from 1 to 1 000 000: ", int(total[0]))
    print ("time spent with ", size, " threads in milliseconds")
    print ("-----", int((time.time()-start_time)*1000), "-----")

Чтобы выполнить код выше, вы должны запустить его следующим образом:

$ qsub -q qexp -l select = 4: ncpus = 16: mpiprocs = 16: ompthreads = 1 -I # Salomon: ncpus = 24: mpiprocs = 24
$ ml Python
$ ml OpenMPI
$ mpiexec -bycore -bind-to-core python hello_world.py

В этом примере мы запускаем код с поддержкой MPI4Py на 4 узла, 16 ядер на узел (всего 64 процесса), каждый процесс python связан с другим ядром.

Источники, которые могут вам помочь:
Отправьте задание с кодом python (mpi4py) на кластер HPC
https://github.com/JordiCorbilla/mpi4py-examples/tree/master/src/examples/matrix%20multiplication

Ещё вопросы

Сообщество Overcoder
Наверх
Меню