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