Выполнение объемной синхронной параллельной модели (BSP) в Python - PullRequest
3 голосов
/ 06 апреля 2011

Модель параллельного программирования 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 Ответ

3 голосов
/ 06 апреля 2011

Незначительная вещь, но Scientific 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, чтобы использовать преимущества реального параллелизма. Хорошей новостью является то, что вам не нужно менять свою программу. Причина этого в том, что в разных системах установлены разные параллельные библиотеки, и библиотеки, которые идут в дополнение к ним, должны иметь такой шаг конфигурации / сборки, чтобы использовать все доступные возможности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...