mpi4py 简介

本文从本人简书博客同步过来

前言

计算机编程语言很多,但是适合高性能数值计算的语言却并不多,在高性能计算的项目中通常会使用到的语言有 Fortran、C、C++ 等,他们是传统的高性能计算机语言,这主要得益于它们的静态编译特性,使得有它们生成的机器代码,在底层上做了很多优化,能够充分发挥硬件的性能,但是这一特性也限制了它们的灵活性和易用性。一些动态的计算机语言在灵活性和易用性方面有着明显的优势,但是由于性能等其他方面的原因却并不适合用来做大规模的数值计算,更别说用到高性能计算领域了。这其中有一个例外,就是 Python 计算机语言。作为一种解释型的动态语言,并且不需要类型声明,Python 非常的简单易用,但是其运行性能却比 Fortran、C、C++ 等常规的高性能数值计算语言要差的多。但是近年来 Python 却在数值计算领域占据了越来越大的份额,甚至在高性能计算领域也看到越来越多 Python 的身影。这是因为 Python 已经不仅仅只是作为一个单独的计算机编程语言,而是变成了一个由庞大的库和工具组成的完整生态系统,在数值计算方面也是如此,包含着有 Numpy、Scipy、Pandas 等构成的科学数值计算栈。这些数值计算库和工具在底层一般封装和调用优秀的由 Fortran、C、C++ 等实现的高效算法库,因此在一定程度上弥补了 Python 本身性能上的不足,却丝毫不损害其灵活性和易用性。但是将 Python 应用到高性能计算上还需要有相应的支持工具,MPI(消息传递接口)就是其中非常重要的一个。本文就将简要介绍 mpi4py,一个构建在 MPI 之上的 Python库,允许在 Python 环境下使用 MPI 接口进行多进程并行甚至分布式的高性能计算。

MPI (Message Passing Interface)

MPI 的全称是 Message Passing Interface,即消息传递接口。它是一种用于编写并行程序的标准,包括协议和和语义说明,他们指明其如何在各种实现中发挥其特性,有 MPICH、OpenMPI 等一些具体的实现,提供 Fortran、C、C++ 的相应编程接口。MPI 的目标是高性能,大规模性,和可移植性。MPI 在今天仍为高性能计算的主要模型。

MPI 的工作方式很好理解,我们可以同时启动一组进程,在同一个通信域中不同的进程都有不同的编号,程序员可以利用 MPI 提供的接口来给不同编号的进程分配不同的任务和帮助进程相互交流最终完成同一个任务。就好比包工头给工人们编上了工号然后指定一个方案来给不同编号的工人分配任务并让工人相互沟通完成任务。

MPI 的具体实现并没有提供 Python 的编程接口,这就使得我们没法直接地使用 Python 调用 MPI 实现高性能的计算,不过幸运的是,我们有 mpi4py。mpi4py 是一个构建在 MPI 之上的 Python 库,主要使用 Cython 编写,它以一种面向对象的方式提供了在 Python 环境下调用 MPI 标准的编程接口,这些接口是构建在 MPI-2 C++ 编程接口的基础之上的,因此和 C++ 的 MPI 编程接口非常类似,了解和有 C、C++ MPI 编程经验的人很容易地上手和使用 mpi4py 编写

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值