在Python中运行批量同步并行模型(BSP)

时间:2011-04-06 11:18:07

标签: python parallel-processing

BSP并行编程模型有几个好处 - 程序员不需要明确关心同步,死锁变得不可能,关于速度的推理变得比传统方法容易得多。 SciPy中有一个BSPlib的Python接口:

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脚本使用4(或8或16)个进程?我认为这个BSP实现可以使用MPI,但是通过mpiexe -n 4 randExp.py启动脚本不起作用。

1 个答案:

答案 0 :(得分:3)

一件小事,但是科学Python!=你问题中的SciPy ......

如果您下载ScientificPython源代码,您将看到README.BSP,README.MPI和README.BSPlib。不幸的是,在线网页上的信息并没有多少提及。

README.BSP非常清楚你需要做些什么来让BSP的东西在真正的并行中工作:

  

为了使用该模块   Scientific.BSP使用多个   真正的处理器,你必须编译   无论是BSPlib还是MPI   接口。请参阅README.BSPlib和   README.MPI以获取安装详细信息。   BSPlib接口可能更多   有效(我没有做过广泛的   测试),并允许使用   另一方面,MPI是BSP工具集   更广泛地获得并且因此可能   已安装在您的计算机上。   为了认真使用,你应该这样做   安装两个并进行比较   你自己的应用程序应用   程序不必修改为   仅在MPI和BSPlib之间切换   在a上运行程序的方法   多处理器机必须   适配。

     

要以并行模式执行程序,   使用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内容以利用真正的并行性。好消息是你不应该改变你的程序。这样做的原因是不同的系统安装了不同的并行库,而在这些库之上的库必须具有这样的配置/构建步骤,以利用可用的任何东西。