BSP并行编程模型有几个优点--程序员不必显式地关注同步,死锁变得不可能,关于速度的推理也比传统方法容易得多。在BSPlib的SciPy中有一个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脚本使用4(或8或16)进程吗?我认为这个BSP实现应该使用MPI,但是通过mpiexe -n 4 randExp.py启动脚本不起作用。
发布于 2011-04-06 12:35:59
一件小事,但是科学的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支持:
是您在科学Python中获得MPI支持所必须做的事情:
1)像往常一样构建和安装科学Python (即大多数情况下"python setup.py install“)。
2)转到Src/MPI目录。
3)输入"python compile.py“。
4)将生成的可执行文件"mpipython“移动到
系统的执行路径。
因此,您必须显式地构建更多的BSP东西,以利用真正的并行性。好消息是你不应该改变你的程序。这样做的原因是不同的系统安装了不同的并行库,在此基础上的库必须有这样的配置/构建步骤来利用任何可用的功能。
https://stackoverflow.com/questions/5565453
复制相似问题