![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Python 并行计算
文章平均质量分 81
自可乐
人生如此自可乐,岂必局束为人鞿。
展开
-
mpi4py 中的组与通信子
本文从本人简书博客同步过来在上一篇中我们简要总结了 mpi4py 中的点到点通信,下面我们将介绍组与通信子的基本概念。为了理解 MPI 中的组与通信子的概念,我们先来了解以下一些术语的含义。组(group)所谓组,在 MPI 环境里就是指一组进程标识所组成的有序集合。组中的每个进程都有一个唯一的 rank 加以标识。组对象存在于通信子环境内,为通信子定义和描述通信参与者(进程)...原创 2018-03-29 21:10:36 · 627 阅读 · 0 评论 -
mpi4py 中的组管理 API
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中组与通信子的基本概念,下面我们将介绍 mpi4py 中的组管理 API。组的构建和取消 APIMPI.Comm.Get_group(self)返回与通信子 comm 相关的组。MPI.Group.Dup(self)复制当前组而产生一个新的组。MPI.Group.Free(self)释放组对象。...原创 2018-03-29 21:12:42 · 343 阅读 · 0 评论 -
mpi4py 中的通信子管理 API
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中的组管理 API, 下面我们将介绍通信子管理 API。访问通信子信息的操作属于本地操作,即其不需要在整个通信子范围内进行全局通信,但创建通信子的操作必须使用全局信息,因此要发生进程间通信。通信子的创建和取消MPI.Comm.Create(self, Group group)在已有通信子 comm 环境下,利用...原创 2018-03-29 21:14:42 · 318 阅读 · 0 评论 -
mpi4py 中的组间通信
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中的通信子管理 API, 下面我们将介绍组间通信相关方法。组间通信子对象在某些基于组内通信子对象的操作/访问函数中也可使用。访问函数MPI.Comm.Is_inter(self)判断当前通信子是否是组间通信子。MPI.Intercomm.Get_remote_size(self)返回远程组包含的进程数...原创 2018-03-29 21:16:21 · 656 阅读 · 1 评论 -
mpi4py 中的组与通信子小结
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中的组间通信方法, 下面我们将对组及通信子做一个简短的小结。组在 MPI 环境中指的是一组进程标识所组成的有效集合,而通信子定义了封装 MPI 通信的基本模型。组对象存在于通信子环境内,为通信子定义和描述通信参与者(进程),并提供表示和管理进程的若干功能。组与通信子对象都可在运行时刻动态创建和删除。某进程可同时属于一个以上的组/...原创 2018-03-29 21:18:13 · 381 阅读 · 0 评论 -
mpi4py 中的集合通信
本文从本人简书博客同步过来在上一篇中我们简要总结了 mpi4py 中的组与通信子的基本概念和用途,下面我们将进行集合通信的介绍。集合通信的主要功能是对一组进程进行通信、同步、计算等。集合通信根据信息的传递方向可大致分为两大类:单向的集合操作和双向的集合操作。对于具有根进程的集合操作,如 Bcast,Scatter,Gather 等,传输通过根进程的一个参数来定义为单向,此时对包含了根进...原创 2018-03-29 21:19:54 · 490 阅读 · 0 评论 -
mpi4py 简介
本文从本人简书博客同步过来前言计算机编程语言很多,但是适合高性能数值计算的语言却并不多,在高性能计算的项目中通常会使用到的语言有 Fortran、C、C++ 等,他们是传统的高性能计算机语言,这主要得益于它们的静态编译特性,使得有它们生成的机器代码,在底层上做了很多优化,能够充分发挥硬件的性能,但是这一特性也限制了它们的灵活性和易用性。一些动态的计算机语言在灵活性和易用性方面有着明显的优势...原创 2018-03-25 11:28:26 · 3529 阅读 · 0 评论 -
安装和使用 mpi4py
本文从本人简书博客同步过来在上一篇中我们简要介绍了 mpi4py 及其所提供的并行编程功能,本文介绍如何安装和使用 mpi4py。安装依赖要正确地安装和使用 mpi4py,你需要先安装和设置好以下软件:一个 MPI 实现软件,最好能支持 MPI-3 标准,并且最好是动态编译的。比较常用的 MPI 实现软件有 OpenMPI,MPICH 等。Python 2.7,Python...原创 2018-03-25 11:35:41 · 24364 阅读 · 5 评论 -
mpi4py 快速上手
本文从本人简书博客同步过来在上一篇中我们介绍了如何安装和使用 mpi4py,下面我们以几个简单的例子来展示怎么使用 mpi4py 来进行并行编程,以使读者能够快速地上手使用 mpi4py。这些例子来自 mpi4py 的 Document,有些做了一些适当的改动。点到点通信传递通用的 Python 对象(阻塞方式)这种方式非常简单易用,适用于任何可被 pickle 系列化的 ...原创 2018-03-25 11:44:40 · 1187 阅读 · 5 评论 -
mpi4py 点到点通信
本文从本人简书博客同步过来在上一篇中我们已经通过几个简单的例子展示了使用 mpi4py 进行 Python 的并行编程方法,大家可以看到使用 mpi4py 进行 MPI 并行编程是比较简单和方便的,但是要用好 mpi4py,写出实用的功能强大的 MPI 并行计算程序,我们还需要对 mpi4py 所提供对各种方法及其用法有更深入的了解。下面我们从最基本的点到点通信开始,详细地介绍 mpi4py ...原创 2018-03-25 11:49:23 · 468 阅读 · 0 评论 -
mpi4py 点到点通信之标准阻塞通信模式
本文从本人简书博客同步过来在上一篇中概要地介绍了 mpi4py 中的点到点通信方法及其消息传递的流程,下面我们介绍 mpi4py 中标准的阻塞通信模式。阻塞通信是指消息发送方的 send 调用需要接收方的 recv 调用的配合才可完成。即在发送的消息信封和数据被安全地“保存”起来之前,send 函数的调用不会返回。标准模式的阻塞 send 调用要求有接收进程的 recv 调用配合。下面...原创 2018-03-25 11:55:20 · 506 阅读 · 0 评论 -
mpi4py 点到点通信之缓冲阻塞通信模式
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中标准阻塞通信模式,下面我们将介绍缓冲阻塞通信模式。缓冲通信模式主要用于解开阻塞通信的发送和接收之间的耦合。有了缓冲机制,即使在接受端没有启动相应的接收的情况下,在完成其消息数据到缓冲区的转移后发送端的阻塞发送函数也可返回。其实标准通信模式中也存在缓冲机制,它使用的是 MPI 环境所提供的数据缓冲区,是有一定大小的。使用缓冲通信...原创 2018-03-25 13:16:52 · 923 阅读 · 0 评论 -
mpi4py 点到点通信之就绪阻塞通信模式
本文从本人简书博客同步过来在上一篇中我们介绍 mpi4py 中缓冲阻塞通信模式,下面我们将介绍就绪阻塞通信模式。在就绪通信模式下,仅当对方的接收操作启动并准备就绪时,才可发送数据,否则可能导致错误或无法预知的结果。从语义上讲,就绪发送方式与同步和标准发送完全一致,这个动作仅仅是向 MPI 环境传递了一个额外的信息,告诉它对方的接收动作已经“就绪”,不必顾虑,而可直接了当执行相应的发送操作。...原创 2018-03-25 13:20:51 · 341 阅读 · 0 评论 -
mpi4py 点到点通信之同步阻塞通信模式
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中就绪阻塞通信模式,下面我们将介绍同步阻塞通信模式。在同步通信模式下,不论接收端是否启动了接收动作,发送端都可在任何时候启动发送动作,但发送端需等待接受端的接收动作发起并开始接收数据之后才可能结束,即发送动作的结束不仅意味着发送缓冲区已经可以用于其它用途,而且还表示接收端也执行了一定程度的接收工作。对阻塞的同步通信模式而言,它实...原创 2018-03-25 13:22:54 · 470 阅读 · 0 评论 -
mpi4py 点到点通信之非阻塞通信
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中同步阻塞通信模式,下面我们将进入到对非阻塞通信模式的介绍。非阻塞通信将通信和计算进行重叠,在一些情况下可以大大改善性能。特别是在那些具有独立通信控制硬件的系统上,将更能发挥其优势。非阻塞通信需要通过发送操作的 start 函数启动发送,但并不要求操作立即执行和结束,启动发送操作的 start 调用在 MPI 环境从发送数据...原创 2018-03-25 13:24:54 · 510 阅读 · 0 评论 -
mpi4py 点到点通信之非重复非阻塞的标准通信模式
本文从本人简书博客同步过来在上一篇中我们对非阻塞通信做了一个非常概要的介绍,下面我们将依次介绍非重复的非阻塞通信的四种通信模式,并给出相应的例程。让我们首先从非重复的标准通信开始。非重复非阻塞的标准通信模式是与阻塞的标准通信模式相对应的,其通信方法(MPI.Comm 类的方法)接口有一个前缀修饰 I/i,如下:isend(self, obj, int dest, int tag=0)...原创 2018-03-26 21:28:56 · 367 阅读 · 0 评论 -
mpi4py 中的广播操作
本文从本人简书博客同步过来在上一篇中我们对集合通信做了一个非常简要的介绍,后面我们将逐步介绍 mpi4py 中提供的各个集合通信操作方法,下面我们从广播操作开始。对组内通信子上的广播操作而言, 组内被标记为根的进程向组内所有其它进程发送消息。对于组间通信子上的广播操作,其作用是以某个组内的某进程为根,向另外组的其它所有进程广播消息。参与广播操作的组间通信子内包含的所有进程都要参与执行 ...原创 2018-03-30 20:44:34 · 767 阅读 · 0 评论 -
mpi4py 中的发散操作
在上一篇中我们介绍了 mpi4py 中的广播操作方法,下面将介绍发散操作。对组内通信子对象,发散操作从组内的根进程分别向组内进程散发不同的消息。对组间通信子对象,发散操作的函数调用应该包含组间通信子内的所有进程,且其中必须有一个组定义了根进程,数据将从根进程散发给根所处组之外组的所有进程。根进程的 root 参数使用 MPI.ROOT,根进程所处组内的其它进程 root 参数为 MPI.P...原创 2018-03-30 20:46:19 · 1019 阅读 · 0 评论 -
mpi4py 中的数据类型
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中的栅障同步操作方法,至此我们介绍了 mpi4py 中的各种集合通信,下面我们将进入到对数据类型的介绍。在前面的介绍和例程中,我们使用的都是 mpi4py 中预定义的数据类型,如 MPI.CHAR,MPI.INT,MPI.FLOAT,MPI.DOUBLE 等,这些预定义数据类型给我们编写基于 MPI 的并行计算程序提供了很大的方...原创 2018-04-07 22:44:03 · 266 阅读 · 0 评论 -
mpi4py 中的数据类型创建方法
本文从本人简书博客同步过来在上一篇中我们介绍了数据类型图,下面我们将介绍 mpi4py 中的数据类型创建方法,用以创建用户自定义数据类型。连续类型把已有数据类型进行若干次复制,形成新的数据类型。其方法(MPI.Datatype 类方法)接口为:Create_contiguous(self, int count)将原数据类型 oldtype 复制 count 份形成新数据类...原创 2018-04-07 22:46:02 · 380 阅读 · 0 评论 -
mpi4py 中的收集操作
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中的发散操作方法,下面我们将介绍收集操作。收集操作是发散操作的逆操作,根进程从其它进程收集不同的消息依次放入自己的接收缓冲区内。对组间通信子上的收集操作,其方法调用必须包含组间通信子内的所有进程,且其中根进程必须属于某个组。根进程的 root 参数需使用 MPI.ROOT,与根进程处在同一组的其它进程的 root 参数需设置...原创 2018-03-31 23:49:55 · 1214 阅读 · 0 评论 -
mpi4py 点到点通信之非重复非阻塞的缓冲通信模式
本文从本人简书博客同步过来在上一篇我们介绍了 mpi4py 中非重复非阻塞标准通信模式,下面我们将介绍非重复非阻塞缓冲通信。非重复非阻塞的缓冲通信模式是与阻塞的缓冲通信模式相对应的,其通信方法(MPI.Comm 类的方法)接口有一个前缀修饰 I/i,如下:ibsend(self, obj, int dest, int tag=0)irecv(self, buf=None, int s...原创 2018-03-26 21:35:21 · 291 阅读 · 1 评论 -
mpi4py 点到点通信之非重复非阻塞的就绪通信模式
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中非重复非阻塞缓冲通信模式,下面我们将介绍非重复非阻塞就绪通信。非重复非阻塞的就绪通信模式是与阻塞的就绪通信模式相对应的,其通信方法(MPI.Comm 类的方法)接口有一个前缀修饰 I/i,注意:在就绪通信模式中只有只有以大写字母开头的 Irsend,没有以小写字母开头的 irsend。Irsend(self, buf, i...原创 2018-03-26 21:37:14 · 217 阅读 · 0 评论 -
mpi4py 点到点通信之非重复非阻塞的同步通信模式
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中非重复非阻塞就绪通信模式,下面我们将介绍非重复非阻塞同步通信。非重复非阻塞的同步通信模式是与阻塞的同步通信模式相对应的,其通信方法(MPI.Comm 类的方法)接口有一个前缀修饰 I/i,如下:issend(self, obj, int dest, int tag=0)irecv(self, buf=None, int ...原创 2018-03-26 21:39:04 · 336 阅读 · 0 评论 -
mpi4py 点到点通信之可重复的非阻塞标准通信
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中非重复非阻塞同步通信模式,下面我们将介绍可重复的非阻塞通信,我们先从可重复的非阻塞标准通信开始。在实际的计算环境中,经常会在一个内部循环中重复使用相同的数据结构来传递不同的数据,此时将数据结构与发送/接收动作绑定可提高程序的效率,这可以通过可重复的非阻塞通信实现。重复的通信需借助通信请求对象 MPI.Prequest(MPI....原创 2018-03-26 21:41:06 · 381 阅读 · 0 评论 -
mpi4py 点到点通信之可重复的非阻塞缓冲通信
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中可重复非阻塞标准通信模式,下面我们将介绍可重复非阻塞缓冲通信。可重复非阻塞的缓冲通信模式是与阻塞的缓冲通信模式相对应的,其通信方法(MPI.Comm 类的方法)接口如下:Bsend_init(self, buf, int dest, int tag=0)Recv_init(self, buf, int source=AN...原创 2018-03-26 21:43:01 · 290 阅读 · 0 评论 -
mpi4py 点到点通信之可重复的非阻塞就绪通信
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中可重复非阻塞缓冲通信模式,下面我们将介绍可重复非阻塞就绪通信。可重复非阻塞的就绪通信模式是与阻塞的就绪通信模式相对应的,其通信方法(MPI.Comm 类的方法)接口如下:Rsend_init(self, buf, int dest, int tag=0)Recv_init(self, buf, int source=AN...原创 2018-03-26 21:44:45 · 207 阅读 · 0 评论 -
mpi4py 点到点通信之可重复的非阻塞同步通信
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中可重复非阻塞就绪通信模式,下面我们将介绍可重复非阻塞同步通信。可重复非阻塞的同步通信模式是与阻塞的同步通信模式相对应的,其通信方法(MPI.Comm 类的方法)接口如下:Ssend_init(self, buf, int dest, int tag=0)Recv_init(self, buf, int source=AN...原创 2018-03-26 21:46:31 · 241 阅读 · 0 评论 -
mpi4py 点到点通信之组合发送接收
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中可重复非阻塞同步通信模式,下面我们将介绍组合发送接收操作。组合发送接收操作比较适合接力通信的场合。在使用组合发送接收的时候要注意合理安排相关进程之间发送/接收操作的顺序,以避免死锁。组合通信的发送操作,可被任何接收操作匹配,反之,组合通信的接收操作也可匹配任何其它类型的发送动作。组合发送接收通信方法(MPI.Comm ...原创 2018-03-26 21:48:30 · 648 阅读 · 0 评论 -
mpi4py 点到点通信总结
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中组合发送接收通信方法,至此我们就对 mpi4py 中提供的各种点到点通信方法都做了一个简略的介绍,并给出了简短的使用例程。下面我们对点到点通信做一个小结。通过前面的介绍可知,点到点通信有各种不同的模式,可分为阻塞通信,非重复非阻塞通信,可重复非阻塞通信,其中每一类还可分为标准、缓冲、就绪和同步模式。要理解各种模式通信的行为,关...原创 2018-03-26 21:50:37 · 479 阅读 · 0 评论 -
mpi4py 中的打包解包操作
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中的数据类型创建方法,下面我们将介绍数据的打包/解包操作。MPI 除了可以发送或接收连续的数据之外,还可以处理不连续的数据,其基本方法有两种,一是允许用户自定义新的数据类型,这在上一篇中作了相应的介绍,二是数据的打包与解包,即在发送前将不连续空间的数据打包到连续空间,接收端收到数据后再解包恢复到不连续空间。他们也提供了一些 MP...原创 2018-04-09 22:06:00 · 427 阅读 · 0 评论 -
mpi4py 中的进程拓扑
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中的数据打包解包操作,下面我们将介绍进程拓扑。MPI 中的进程组是 n 个进程的集合,组中的每一进程被赋予一个从 0 到 n-1 的 rank 号。在许多并行应用程序中,进程的线性排列不能充分地反映进程间在逻辑上的通信模型(通常由基本问题几何和所用的数学算法所决定),例如,根据问题需要,进程经常被排列成二维、三维网格乃至更复杂的...原创 2018-04-09 22:08:48 · 378 阅读 · 0 评论 -
mpi4py 中的单边通信相关操作
本文从本人简书博客同步过来在上一篇中我们简要地介绍了 mpi4py 中的单边通信概念,下面我们将介绍单边通信的相关操作。创建/释放窗口对象注意:在使用单边通信操作之前,所有进程都须通过共同参与的创建窗口操作公开声明自己可供访问的内存空间。创建和释放窗口对象的方法(MPI.Win 类方法)接口如下:Create(type cls, memory, int disp_unit=...原创 2018-04-14 22:35:57 · 525 阅读 · 0 评论 -
mpi4py 中的单边通信同步操作
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中的单边通信相关操作,下面我们将介绍单边通信的同步操作。单边通信(远端内存访问)操作包括以下两个范畴:主动目标通信。与点到点通信类似,数据从一个进程的内存传送到另一个进程的内存中,两个进程都直接参与通信。被动目标通信。数据仍从一个进程转移到另外一个进程,但这个进程是一个第三方进程。真正参与通信的两个进程都是源——一个负责...原创 2018-04-14 22:37:30 · 489 阅读 · 0 评论 -
mpi4py 中的进程拓扑方法
本文从本人简书博客同步过来在上一篇中我们简要介绍了进程拓扑的基本概念,下面我们将介绍与进程拓扑相关的一些方法。创建方法注意:只能在组内通信子(Intracomm)或 Intracomm 类子类通信子上创建拓扑通信子。创建拓扑通信子的相关方法(MPI.Intracomm 类的方法)接口如下:Create_cart(self, dims, periods=None, bool re...原创 2018-04-09 22:11:46 · 734 阅读 · 0 评论 -
mpi4py 中的规约操作
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中的收集操作方法,下面我们将介绍规约操作。对组内通信子上的规约操作,该操作对组内所有进程的数据进行某种规约后,将结果保存在根进程中。对组间通信子上的规约操作,其方法调用必须包含组间通信子内的所有进程,且其中必须有一个组定义了根进程。根进程的 root 参数使用 MPI.ROOT,与根进程处在同一组的其它进程的 root 参数...原创 2018-04-02 22:35:40 · 597 阅读 · 0 评论 -
mpi4py 中的全收集操作
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中的规约操作方法,下面我们将介绍全收集操作。对组内通信子上的全收集操作,将组内所有进程的发送缓冲区的数据连接在一起,并发送到所有进程的接收缓冲区内。对组间通信子上的全收集操作,假定关联的组为 group A 和 group B,则 A 中的每一个进程贡献一个数据项,连接在一起保存到 B 的各个进程中,同时 B 的各个进程也将...原创 2018-04-02 22:37:12 · 654 阅读 · 0 评论 -
mpi4py 中的全规约操作
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中的全收集操作方法,下面我们将介绍全规约操作。对组内通信子上的全规约操作,组内所有进程都作为根执行一次规约操作,操作完毕后所有进程接收缓冲区的数据均相同。这个操作等价于以某个进程作为根首先进行一次规约操作,然后执行一次广播操作,最后每个进程都得到相同的结果。对组间通信子上的全规约操作,其关联的两个组 group A 和 gr...原创 2018-04-02 22:38:55 · 511 阅读 · 0 评论 -
mpi4py 中的并行 I/O
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中的单边通信的同步操作,下面我们将介绍并行 I/O。简介POSIX 定义的文件接口并不适合描述并行文件 I/O 以及相关的优化操作,为此,MPI-2 专门定义了用于并行 I/O 的工具——ROMIO,它使用派生数据类型的方式定义数据划分,这种定义比 POSIX 中的文件访问模式具有更大的灵活性和表达能力。相关定义...原创 2018-04-16 22:29:48 · 407 阅读 · 0 评论 -
mpi4py 中的并行文件操作
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中并行 I/O 的基本概念和相关术语,下面我们将介绍并行文件操作的相关方法。方法接口并行文件操作的相关方法(MPI.File 类方法)接口如下:Open(type cls, Intracomm comm, filename, int amode=MODE_RDONLY, Info info=INFO_NULL)...原创 2018-04-16 22:31:57 · 1375 阅读 · 0 评论