Запуск объемной синхронной параллельной модели (BSP) на Python

#python #parallel-processing

#python #параллельная обработка

Вопрос:

Модель параллельного программирования BSP имеет несколько преимуществ — программисту не нужно явно заботиться о синхронизации, взаимоблокировки становятся невозможными, а рассуждать о скорости становится намного проще, чем при использовании традиционных методов. В SciPy есть интерфейс Python для BSPlib:

 import Scientific.BSP
  

Я написал небольшую программу для тестирования BSP. Программа представляет собой простой случайный эксперимент, который «вычисляет» вероятность того, что бросание n кубика даст сумму k :

 from Scientific.BSP import ParSequence, ParFunction, ParRootFunction
from sys import argv
from random import randint
n = int(argv[1]) ; m = int(argv[2]) ; k = int(argv[3])

def sumWuerfe(ws): return len([w for w in ws if sum(w)==k])
glb_sumWuerfe= ParFunction(sumWuerfe)
def ausgabe(result): print float(result)/len(wuerfe)
glb_ausgabe = ParRootFunction(output)
wuerfe = [[randint(1,6) for _ in range(n)] for _ in range(m)]
glb_wuerfe = ParSequence(wuerfe)

# The parallel calc:
ergs = glb_sumWuerfe(glb_wuerfe)
# collecting the results in Processor 0:
ergsGesamt= results.reduce(lambda x,y:x y, 0)

glb_output(ergsGesamt)
  

Программа работает нормально, но: она использует только один процесс!

Мой вопрос: Кто-нибудь знает, как указать этому Pythonb-BSP-Script использовать 4 (или 8, или 16) процесса? Я думал, что эта реализация BSP будет использовать MPI, но запуск скрипта через mpiexe -n 4 randExp.py не работает.

Ответ №1:

Незначительная вещь, но научный Python != SciPy в вашем вопросе…

Если вы загрузите исходные тексты ScientificPython, вы увидите README.BSP, README.MPI и README.BSPlib. К сожалению, на онлайновых веб-страницах не так много упоминаний о содержащейся там информации.

В README.BSP довольно четко указано, что вам нужно сделать, чтобы заставить материал BSP работать в реальном параллельном режиме:

Для использования модуля Scientific.BSP с использованием более чем одного реального процессора необходимо скомпилировать либо BSPlib, либо MPI-интерфейс. Смотрите README.BSPlib и README.MPI для получения подробной информации об установке. Интерфейс BSPlib, вероятно, более эффективен (я еще не проводил обширных тестов) и позволяет использовать набор инструментов BSP, с другой стороны, MPI более широко доступен и, таким образом, может быть уже установлен на вашем компьютере. Для серьезного использования вам, вероятно, следует установить оба варианта и провести сравнения для ваших собственных приложений. Прикладные программы не обязательно модифицировать для переключения между MPI и BSPlib, необходимо адаптировать только метод запуска программы на многопроцессорной машине.

Для выполнения программы в параллельном режиме используйте исполняемый файл mpipython или bsppython. Руководство по установке MPI или BSPlib расскажет вам, как определить количество процессоров.

и README.MPI сообщает вам, что нужно сделать, чтобы получить поддержку MPI:

Вот что вам нужно сделать, чтобы получить поддержку MPI в Scientific Python:

1) Соберите и установите Scientific Python как обычно (т. Е. «python setup.py в большинстве случаев «установить»).

2) Перейдите в каталог Src/MPI.

3) Введите «python compile.py «.

4) Переместите результирующий исполняемый файл «mpipython» в каталог на пути выполнения вашей
системы.

Итак, вам нужно явно создать больше BSP-материалов, чтобы воспользоваться преимуществами реального параллелизма. Хорошая новость в том, что вам не придется менять свою программу. Причина этого в том, что в разных системах установлены разные параллельные библиотеки, и библиотеки, которые идут поверх них, должны иметь подобный шаг настройки / сборки, чтобы воспользоваться преимуществами всего, что доступно.