《pupyMPI - 纯Python实现的MPI》
1. 引言
消息传递接口(MPI)是一种广泛用于表达并行性的模型。它的成功得益于其可移植性、完整性和高性能,作为标准,MPI极大地提高了高性能计算(HPC)应用程序的可移植性。然而,MPI通常被认为编程难度较大,这对于许多并非专业程序员的潜在用户(如研究人员)来说是个问题,因为他们可能不擅长在确定性逻辑框架中高效表达算法。
传统上,HPC应用程序使用C/C++或Fortran编写,这些静态类型、编译型的低级语言具有出色的性能。近年来,像MATLAB和Python这样的高级解释型语言越来越受欢迎。Python通过与C和Fortran混合使用,并借助合适的库和数据结构,在科学计算(包括消息传递)方面已能达到与纯C相当的性能。随着NumPy和SciPy等科学计算库的不断成熟,Python现在常被用于处理计算密集型任务。
2. Python中的MPI
- 现有方案 :一些项目利用Python包装C代码相对容易的特点,提供了与现有MPI实现(如Open MPI或MPICH)的绑定。这种方式的优点是通信层性能有保障,且能复用大量MPI内部功能。但缺点也很明显,绑定需要与特定的MPI实现兼容并随其变化,系统管理员需要维护C MPI库及其依赖,且Python绑定需要编译和链接MPI库,导致可移植性较差。
- pupyMPI优势 :创建Python版MPI的一个重要原因是拥有“Python风格”的API,即从用户角度移除数据类型信息。pupyMPI是纯Python实现的MPI 1.3规范的大量子集。与仅在C实现的MPI