热门搜索:人民论坛、 山东社会科学、 新闻爱好者、 制造业自动化

基于Python 的MPI

浏览21次 时间:2013年12月04日 11:23

马亚蕾 陕西职业技术学院 陕西西安 710100

【文章摘要】

基于Python MPI Python 程序设计语言提供了消息传递接口(MPI) 标准的绑定,并且允许任何的Python 程序使用多处理器。在它的首次发行中,基于Python MPI 被建造在MPI-1 规范的头部,该规范还为随后的MPI-2 C++ 绑定定义了一个面向对象的接口,并且为通用Python 对象的通信提供了支持。

【关键词】

消息传递;MPI; 高级语言; 并行Python

0 引言

对于更多的科学家和工程师来说,高性能计算与以往任何时候相比,都成为了一种负担的得起的资源。高质量开源软件和商用硬件的结合极大地影响了现在流行的专用Beowulf 类机群和工作站机群系统。已证明消息传递是一种有效的计算模型,特别适合(但不局限于) 分布式内存体系结构。

1 背景

1.1 MPI

MPI (消息传递接口)是一个标准的、便捷的,适用于各种并行计算机上设计函数的消息传递系统。这种标准定义了语法和语义库(MPI 不是一种程序设计语言的扩展),它允许所有的用户用主要的科学的程序设计语言(Fortran, C, C++)编写简单的程序。

1.2 Python

Python 是一种现代而成熟的、易于学习,强大的程序设计语言,并且拥有不断增长的用户群。它具有高效率高层次的数据结构和简单且有效的具有动态类型和动态绑定的面向对象编程的方法。Python 优美的语法,连同它解释的自然性,使它在许多区域的大多数平台上,对于脚本和快速应用程序的开发上成为一种理想的语言。

1.3 什么是基于Python MPI

由于使用纯粹的Python 而不是使用编译语言或者第三方的MPI 工具来开发一个MPI 工具,所以Python 具有足够的联网能力。这种方法是很有吸引力的,因为它确保了直接方便地在任何平台上运行Python。然而,即使一些基本的MPI 特征(像通信调度和数据类型处理)将会要求大量的工作被开发。而且,获取合理的性能和访问特定的平台的特征和专用的通信硬件将会要求编译语言的支持。

2 基于Python MPI 的新特征

这一节呈现了一个MPI 性能的调查以及基于Python MPI 的新的可用的特征,在Python 的设计环境中为了提高通信性能和更好地支持经典MPI-1 的操作。近来免费提供的,高质量的和开放源码的MPI-2 的实现很大力度上推动了包含另一类功能的集合,为了对几乎所有的MPI-2 的扩充提供支持。

2.1 对象序列

Python 标准库支持数据保持的各种不同机制。他们中的许多依赖于磁盘存储器,但是pickling marshaling 也可以和内存缓冲器一起起作用。

Pickle( 速度较慢,在纯Python 写的) 模块和cPickle(更快,用C 编写的)模块给连续的通用Python 对象提供可扩展的工具,这些对象使用ASCII 和二进制格式。排列模型为使用二进制格式的特殊的Python 提供了内置的Python 对象,但是独立于机器体系结构的命令。

2.2 存储缓冲器的直接通信

基于Python MPI 得到了改善,支持任何输出的单段缓冲接口的对象直接通信。这个接口是一个标准的Python 机制,靠某些类型(如字符串和数值数组) 来提供,允许用C 语言访问包括有关的数据的连续内存缓冲区(即地址和长度)。

2.3 非阻塞和持续的通信

Comm 类的Isend () Irecv () 方法分别发起了一个发送和接收的操作。这些方法返回一个请求的实例,特别标明开始的操作。它的完成可以使用Test () Wait(),和cancel() 诸如此的请求类的方法来控制。

2.4 MPI-2 扩充

2.4.1. 动态进程管理

在基于Python MPI 中,新的进程在内部通信器 ( 即,Intracomm 实例) 之内可以通过调用Spawn () 方法来创建。 此调用返回一个新的内部通信器 ( Intercomm 实例),可以用于进行父类及子类进程之间点对点的和集体通信。

不相交的进程组可以建立一个客户机/ 服务器方式的通信。服务器应用程序必须首先调用Open_port ()函数,打开一个端口Publish_name()函数,去公布一个所提供的服务,下次在一个Intracomm 实例中调用Accept ()方法。客户端应用程序通过调用Lookup_name() 函数可以先找到一个发布的服务,它返回了在一台服务器能联络上的端口; 并且下次调用Connect ()方法返回一个Intracomm 实例。Accept() and Connect() 都返回一个Intercomm 的实例。当客户机/ 服务器进程之间的连接不再需要时, 所有的都必须合作地调用Comm 类的Disconnect () 方法。 另外,服务器应用程序可以通过Unpublish_name () Close_ port () 函数释放资源。

2.4.2. 单向通信

单向通信(也称为远程存储器访问, RMA)用RMA 网络硬件的一个单向的接口补充传统双向的MPI 通信模型。这种扩充降低了使用共享内存的范例编写应用程序的延迟和软件开销。单向通信的语法是相当复杂的。 MPI 的远程内存访问的应用程序接口围绕使用Windows 的对象,而直观地指定一个可用于远程操作进程的内存区域。

3 结论

基于Python MPI 为用Python 语言编写的并行程序中的使用消息传递范例提供了一个基础层。它使用任何可用的MPI 规范标准保留的语法和语义得到MPI 的实现。它特别适合于其他MPI 的集成库,并协助运行在并行环境下的复杂的Python 驱动程序的开发。

【参考文献】

[1]J.Amundson,P.Spentzouris,J.Qiang, R.Ryne,Synergia:a 3D accelerator modelling tool with 3D space charge, J.Comput.Phys.211(1)(2006) 229 248.

[2]P.Barrett,J.Hunter,P.Greenfield, Matplotliba portable Python plotting package, Astronomical Data Analysis Software & Systems XIV, 2004.

[3]D.M.Beazley,P.S.Lomdahl,Feeding a l a r g e s c a l e p h y s i c s a p p l i c a t i o n t o P y t h o n , i n : P r o c e e d i n g s o f 6 t h International Python Conference, San Jose, California,1997,pp.2129.

[4]Beowulf.org,The Beowulf cluster site,_http://www.beowulf.org/_, 2007.

【作者简介】

马亚蕾,女,(1985-),陕西职业技术学院,助教,硕士研究生,研究方向为计算机网络。

上一篇 下一篇

论文发表与咨询

论文发表 写作指导 职称论文 毕业论文 客服联系方式:
投稿信箱:qwlw888@163.com
在线咨询客服QQ:站点合作85610631
联系电话:18262951856
点击进入支付宝支付(支付宝认可网络诚信商家)
点击进入财付通支付(财付通认可网络诚信商家)
点击进入支付方式---->>>>

论文发表 诚信说明