Python 并行计算
文章平均质量分 81
Python 并行计算
自可乐
人生如此自可乐,岂必局束为人鞿。
展开
-
并行日志 python-mpi-logger
本文从本人简书博客同步过来在上一篇中我们介绍了在 IPython 中使用 mpi4py,下面我们将介绍一个使用 mpi4py 实现的并行日志工具 —— python-mpi-logger。在介绍 python-mpi-logger 之前,我们先简要地介绍一下日志的概念和其作用以及 Python 标准库提供的日志纪录 logging 模块,因为 python-mpi-logger 也是处于 lo...原创 2018-11-01 21:46:35 · 968 阅读 · 0 评论 -
并行快速傅里叶变换 mpi4py-fft
本文从本人简书博客同步过来在上一篇中我们介绍了一个使用 mpi4py 实现的并行日志工具 —— python-mpi-logger,下面将介绍一个并行的快速傅里叶变换库 —— mpi4py-fft。快速傅里叶变换(FFT)简介快速傅里叶变换(Fast Fourier Transform, FFT),是快速计算序列的离散傅里叶变换(DFT)或其逆变换的方法。傅里叶分析将信号从原始域(通常是时间...原创 2018-11-06 20:26:05 · 3196 阅读 · 4 评论 -
mpi4py初始化和运行时设置
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 并行读/写 numpy npy 文件的方法,下面我们将介绍 mpi4py 软件包初始化相关的一些设置。初始化及运行时设置有在 C/C++/Fortran 等其它计算机语言下编写 MPI 并行计算程序经验的读者都知道,在使用 MPI 时除了要导入 MPI 的相应头文件之外,还要首先调用 MPI_Init/MPI_Init_threa...原创 2018-10-01 22:14:49 · 1196 阅读 · 4 评论 -
mpi4py中的profiling
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中初始化和运行时设置,下面我们将介绍 mpi4py 中的 profiling。API下面是 mpi4py 中 profiling 相关的函数:mpi4py.profile(name, **kargs)MPI profiling 支持。name 是要导入的 profiler 库。其它可设置参数有:path,一系列由字符串表示的...原创 2018-10-01 22:18:16 · 521 阅读 · 0 评论 -
mpi4py 中的 futures 模块
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中的 profiling,下面我们将介绍 mpi4py 中的 futures 模块。mpi4py.futures 提供了一个由多个工作进程使用 MPI 进程间通信来异步执行任务的高级别接口。mpi4py.futures 是建立在 Python 标准库中的 concurrent.futures 的基础之上的。这里先简要介绍一下 con...原创 2018-10-07 21:00:41 · 591 阅读 · 0 评论 -
mpi4py 中的 run 模块
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中的 futures 模块,下面我们将介绍 mpi4py 中的 run 模块。在 mpi4py初始化和运行时设置中介绍过,默认情况下,在导入模块时,mpi4py 会调用 MPI_Init_thread() 以初始化 MPI 执行环境并设置退出钩子以使程序退出前会自动调用 MPI_Finalize() 结束 MPI 执行环境。此外,m...原创 2018-10-11 22:16:19 · 816 阅读 · 0 评论 -
在 cython 中使用 mpi4py
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中的 run 模块,下面我们将介绍在 cython 中使用 mpi4py。cython 简介Cython 是 Python 编程语言的超集,旨在通过主要使用 Python 编写的代码提供类似 C 的性能。Cython 是一种生成 CPython 扩展模块的编译语言,用 Cython 编写 Python 的扩展模块与直接写 Pyth...原创 2018-10-13 22:44:04 · 516 阅读 · 0 评论 -
mpi4py 与 OpenMP 混合编程
本文从本人简书博客同步过来在上一篇中我们介绍了在 cython 中使用 mpi4py 的方法,下面我们将介绍 mpi4py 与 OpenMP 混合编程。OpenMP 简介OpenMP (Open Multi-Processing) 是一个跨平台的多线程实现,它本身不是一种独立的并行语言,而是为多处理器上编写并行程序而设计的、指导共享内存多线程并行的编译制导指令和应用程序编程接口(API),可...原创 2018-10-13 22:47:34 · 1105 阅读 · 0 评论 -
在 IPython 中使用 mpi4py
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 与 OpenMP 混合编程,下面我们将介绍在 IPython 中使用 mpi4py。IPython 简介Python 的一个重要特性是其提供的交互式解释器,在其中可以快速地做一些计算和检验自己的想法而不需要像其它很多编程语言一样必须首先创建一个完整的程序文件。但是 Python 自带的解释器的功能是非常有限的,在很多情况下使用并不...原创 2018-10-14 15:03:55 · 822 阅读 · 1 评论 -
mpi4py 简介
本文从本人简书博客同步过来前言计算机编程语言很多,但是适合高性能数值计算的语言却并不多,在高性能计算的项目中通常会使用到的语言有 Fortran、C、C++ 等,他们是传统的高性能计算机语言,这主要得益于它们的静态编译特性,使得有它们生成的机器代码,在底层上做了很多优化,能够充分发挥硬件的性能,但是这一特性也限制了它们的灵活性和易用性。一些动态的计算机语言在灵活性和易用性方面有着明显的优势...原创 2018-03-25 11:28:26 · 3569 阅读 · 0 评论 -
安装和使用 mpi4py
本文从本人简书博客同步过来在上一篇中我们简要介绍了 mpi4py 及其所提供的并行编程功能,本文介绍如何安装和使用 mpi4py。安装依赖要正确地安装和使用 mpi4py,你需要先安装和设置好以下软件:一个 MPI 实现软件,最好能支持 MPI-3 标准,并且最好是动态编译的。比较常用的 MPI 实现软件有 OpenMPI,MPICH 等。Python 2.7,Python...原创 2018-03-25 11:35:41 · 25403 阅读 · 5 评论 -
mpi4py 快速上手
本文从本人简书博客同步过来在上一篇中我们介绍了如何安装和使用 mpi4py,下面我们以几个简单的例子来展示怎么使用 mpi4py 来进行并行编程,以使读者能够快速地上手使用 mpi4py。这些例子来自 mpi4py 的 Document,有些做了一些适当的改动。点到点通信传递通用的 Python 对象(阻塞方式)这种方式非常简单易用,适用于任何可被 pickle 系列化的 ...原创 2018-03-25 11:44:40 · 1213 阅读 · 5 评论 -
mpi4py 点到点通信
本文从本人简书博客同步过来在上一篇中我们已经通过几个简单的例子展示了使用 mpi4py 进行 Python 的并行编程方法,大家可以看到使用 mpi4py 进行 MPI 并行编程是比较简单和方便的,但是要用好 mpi4py,写出实用的功能强大的 MPI 并行计算程序,我们还需要对 mpi4py 所提供对各种方法及其用法有更深入的了解。下面我们从最基本的点到点通信开始,详细地介绍 mpi4py ...原创 2018-03-25 11:49:23 · 495 阅读 · 0 评论 -
mpi4py 点到点通信之标准阻塞通信模式
本文从本人简书博客同步过来在上一篇中概要地介绍了 mpi4py 中的点到点通信方法及其消息传递的流程,下面我们介绍 mpi4py 中标准的阻塞通信模式。阻塞通信是指消息发送方的 send 调用需要接收方的 recv 调用的配合才可完成。即在发送的消息信封和数据被安全地“保存”起来之前,send 函数的调用不会返回。标准模式的阻塞 send 调用要求有接收进程的 recv 调用配合。下面...原创 2018-03-25 11:55:20 · 528 阅读 · 0 评论 -
mpi4py 点到点通信之缓冲阻塞通信模式
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中标准阻塞通信模式,下面我们将介绍缓冲阻塞通信模式。缓冲通信模式主要用于解开阻塞通信的发送和接收之间的耦合。有了缓冲机制,即使在接受端没有启动相应的接收的情况下,在完成其消息数据到缓冲区的转移后发送端的阻塞发送函数也可返回。其实标准通信模式中也存在缓冲机制,它使用的是 MPI 环境所提供的数据缓冲区,是有一定大小的。使用缓冲通信...原创 2018-03-25 13:16:52 · 948 阅读 · 0 评论 -
mpi4py 点到点通信之就绪阻塞通信模式
本文从本人简书博客同步过来在上一篇中我们介绍 mpi4py 中缓冲阻塞通信模式,下面我们将介绍就绪阻塞通信模式。在就绪通信模式下,仅当对方的接收操作启动并准备就绪时,才可发送数据,否则可能导致错误或无法预知的结果。从语义上讲,就绪发送方式与同步和标准发送完全一致,这个动作仅仅是向 MPI 环境传递了一个额外的信息,告诉它对方的接收动作已经“就绪”,不必顾虑,而可直接了当执行相应的发送操作。...原创 2018-03-25 13:20:51 · 363 阅读 · 0 评论 -
mpi4py 点到点通信之同步阻塞通信模式
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中就绪阻塞通信模式,下面我们将介绍同步阻塞通信模式。在同步通信模式下,不论接收端是否启动了接收动作,发送端都可在任何时候启动发送动作,但发送端需等待接受端的接收动作发起并开始接收数据之后才可能结束,即发送动作的结束不仅意味着发送缓冲区已经可以用于其它用途,而且还表示接收端也执行了一定程度的接收工作。对阻塞的同步通信模式而言,它实...原创 2018-03-25 13:22:54 · 495 阅读 · 0 评论 -
mpi4py 点到点通信之非阻塞通信
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中同步阻塞通信模式,下面我们将进入到对非阻塞通信模式的介绍。非阻塞通信将通信和计算进行重叠,在一些情况下可以大大改善性能。特别是在那些具有独立通信控制硬件的系统上,将更能发挥其优势。非阻塞通信需要通过发送操作的 start 函数启动发送,但并不要求操作立即执行和结束,启动发送操作的 start 调用在 MPI 环境从发送数据...原创 2018-03-25 13:24:54 · 547 阅读 · 0 评论 -
mpi4py 点到点通信之非重复非阻塞的标准通信模式
本文从本人简书博客同步过来在上一篇中我们对非阻塞通信做了一个非常概要的介绍,下面我们将依次介绍非重复的非阻塞通信的四种通信模式,并给出相应的例程。让我们首先从非重复的标准通信开始。非重复非阻塞的标准通信模式是与阻塞的标准通信模式相对应的,其通信方法(MPI.Comm 类的方法)接口有一个前缀修饰 I/i,如下:isend(self, obj, int dest, int tag=0)...原创 2018-03-26 21:28:56 · 395 阅读 · 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 · 313 阅读 · 1 评论 -
mpi4py 点到点通信之非重复非阻塞的就绪通信模式
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中非重复非阻塞缓冲通信模式,下面我们将介绍非重复非阻塞就绪通信。非重复非阻塞的就绪通信模式是与阻塞的就绪通信模式相对应的,其通信方法(MPI.Comm 类的方法)接口有一个前缀修饰 I/i,注意:在就绪通信模式中只有只有以大写字母开头的 Irsend,没有以小写字母开头的 irsend。Irsend(self, buf, i...原创 2018-03-26 21:37:14 · 241 阅读 · 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 · 369 阅读 · 0 评论 -
mpi4py 点到点通信之可重复的非阻塞标准通信
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中非重复非阻塞同步通信模式,下面我们将介绍可重复的非阻塞通信,我们先从可重复的非阻塞标准通信开始。在实际的计算环境中,经常会在一个内部循环中重复使用相同的数据结构来传递不同的数据,此时将数据结构与发送/接收动作绑定可提高程序的效率,这可以通过可重复的非阻塞通信实现。重复的通信需借助通信请求对象 MPI.Prequest(MPI....原创 2018-03-26 21:41:06 · 413 阅读 · 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 · 316 阅读 · 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 · 226 阅读 · 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 · 265 阅读 · 0 评论 -
mpi4py 点到点通信之组合发送接收
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中可重复非阻塞同步通信模式,下面我们将介绍组合发送接收操作。组合发送接收操作比较适合接力通信的场合。在使用组合发送接收的时候要注意合理安排相关进程之间发送/接收操作的顺序,以避免死锁。组合通信的发送操作,可被任何接收操作匹配,反之,组合通信的接收操作也可匹配任何其它类型的发送动作。组合发送接收通信方法(MPI.Comm ...原创 2018-03-26 21:48:30 · 684 阅读 · 0 评论 -
mpi4py 点到点通信总结
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中组合发送接收通信方法,至此我们就对 mpi4py 中提供的各种点到点通信方法都做了一个简略的介绍,并给出了简短的使用例程。下面我们对点到点通信做一个小结。通过前面的介绍可知,点到点通信有各种不同的模式,可分为阻塞通信,非重复非阻塞通信,可重复非阻塞通信,其中每一类还可分为标准、缓冲、就绪和同步模式。要理解各种模式通信的行为,关...原创 2018-03-26 21:50:37 · 514 阅读 · 0 评论 -
mpi4py 中的组与通信子
本文从本人简书博客同步过来在上一篇中我们简要总结了 mpi4py 中的点到点通信,下面我们将介绍组与通信子的基本概念。为了理解 MPI 中的组与通信子的概念,我们先来了解以下一些术语的含义。组(group)所谓组,在 MPI 环境里就是指一组进程标识所组成的有序集合。组中的每个进程都有一个唯一的 rank 加以标识。组对象存在于通信子环境内,为通信子定义和描述通信参与者(进程)...原创 2018-03-29 21:10:36 · 661 阅读 · 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 · 365 阅读 · 0 评论 -
mpi4py 中的通信子管理 API
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中的组管理 API, 下面我们将介绍通信子管理 API。访问通信子信息的操作属于本地操作,即其不需要在整个通信子范围内进行全局通信,但创建通信子的操作必须使用全局信息,因此要发生进程间通信。通信子的创建和取消MPI.Comm.Create(self, Group group)在已有通信子 comm 环境下,利用...原创 2018-03-29 21:14:42 · 347 阅读 · 0 评论 -
mpi4py 中的组间通信
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中的通信子管理 API, 下面我们将介绍组间通信相关方法。组间通信子对象在某些基于组内通信子对象的操作/访问函数中也可使用。访问函数MPI.Comm.Is_inter(self)判断当前通信子是否是组间通信子。MPI.Intercomm.Get_remote_size(self)返回远程组包含的进程数...原创 2018-03-29 21:16:21 · 696 阅读 · 1 评论 -
mpi4py 中的组与通信子小结
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中的组间通信方法, 下面我们将对组及通信子做一个简短的小结。组在 MPI 环境中指的是一组进程标识所组成的有效集合,而通信子定义了封装 MPI 通信的基本模型。组对象存在于通信子环境内,为通信子定义和描述通信参与者(进程),并提供表示和管理进程的若干功能。组与通信子对象都可在运行时刻动态创建和删除。某进程可同时属于一个以上的组/...原创 2018-03-29 21:18:13 · 416 阅读 · 0 评论 -
mpi4py 中的集合通信
本文从本人简书博客同步过来在上一篇中我们简要总结了 mpi4py 中的组与通信子的基本概念和用途,下面我们将进行集合通信的介绍。集合通信的主要功能是对一组进程进行通信、同步、计算等。集合通信根据信息的传递方向可大致分为两大类:单向的集合操作和双向的集合操作。对于具有根进程的集合操作,如 Bcast,Scatter,Gather 等,传输通过根进程的一个参数来定义为单向,此时对包含了根进...原创 2018-03-29 21:19:54 · 537 阅读 · 0 评论 -
mpi4py 中的广播操作
本文从本人简书博客同步过来在上一篇中我们对集合通信做了一个非常简要的介绍,后面我们将逐步介绍 mpi4py 中提供的各个集合通信操作方法,下面我们从广播操作开始。对组内通信子上的广播操作而言, 组内被标记为根的进程向组内所有其它进程发送消息。对于组间通信子上的广播操作,其作用是以某个组内的某进程为根,向另外组的其它所有进程广播消息。参与广播操作的组间通信子内包含的所有进程都要参与执行 ...原创 2018-03-30 20:44:34 · 823 阅读 · 0 评论 -
mpi4py 中的发散操作
在上一篇中我们介绍了 mpi4py 中的广播操作方法,下面将介绍发散操作。对组内通信子对象,发散操作从组内的根进程分别向组内进程散发不同的消息。对组间通信子对象,发散操作的函数调用应该包含组间通信子内的所有进程,且其中必须有一个组定义了根进程,数据将从根进程散发给根所处组之外组的所有进程。根进程的 root 参数使用 MPI.ROOT,根进程所处组内的其它进程 root 参数为 MPI.P...原创 2018-03-30 20:46:19 · 1047 阅读 · 0 评论 -
mpi4py 中的收集操作
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中的发散操作方法,下面我们将介绍收集操作。收集操作是发散操作的逆操作,根进程从其它进程收集不同的消息依次放入自己的接收缓冲区内。对组间通信子上的收集操作,其方法调用必须包含组间通信子内的所有进程,且其中根进程必须属于某个组。根进程的 root 参数需使用 MPI.ROOT,与根进程处在同一组的其它进程的 root 参数需设置...原创 2018-03-31 23:49:55 · 1259 阅读 · 0 评论 -
mpi4py 中的规约操作
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中的收集操作方法,下面我们将介绍规约操作。对组内通信子上的规约操作,该操作对组内所有进程的数据进行某种规约后,将结果保存在根进程中。对组间通信子上的规约操作,其方法调用必须包含组间通信子内的所有进程,且其中必须有一个组定义了根进程。根进程的 root 参数使用 MPI.ROOT,与根进程处在同一组的其它进程的 root 参数...原创 2018-04-02 22:35:40 · 633 阅读 · 0 评论 -
mpi4py 中的全收集操作
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中的规约操作方法,下面我们将介绍全收集操作。对组内通信子上的全收集操作,将组内所有进程的发送缓冲区的数据连接在一起,并发送到所有进程的接收缓冲区内。对组间通信子上的全收集操作,假定关联的组为 group A 和 group B,则 A 中的每一个进程贡献一个数据项,连接在一起保存到 B 的各个进程中,同时 B 的各个进程也将...原创 2018-04-02 22:37:12 · 693 阅读 · 0 评论 -
mpi4py 中的全规约操作
本文从本人简书博客同步过来在上一篇中我们介绍了 mpi4py 中的全收集操作方法,下面我们将介绍全规约操作。对组内通信子上的全规约操作,组内所有进程都作为根执行一次规约操作,操作完毕后所有进程接收缓冲区的数据均相同。这个操作等价于以某个进程作为根首先进行一次规约操作,然后执行一次广播操作,最后每个进程都得到相同的结果。对组间通信子上的全规约操作,其关联的两个组 group A 和 gr...原创 2018-04-02 22:38:55 · 545 阅读 · 0 评论