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