
mpi学习
文章平均质量分 59
ljhandlwt
这个作者很懒,什么都没留下…
展开
-
mpi学习日志(1):mpi与python
MPI是什么?它用来干什么?MPI是信息传递接口(Message Passing Interface),简单来说就是一个用来实现进程通讯的库.它很多时候用于并行算法的设计.下面我们先使用windows环境下python语言来了解mpi的使用.mpi在python的环境还是很好配置的.首先你得安装好python和pip.然后直接用pip安装mpi在python的库,mpi4py.原创 2016-07-18 16:50:20 · 6796 阅读 · 2 评论 -
mpi学习日志(14):mpi4py与probe
今天我们来学习一个颇重要的函数,probe.probe的中文意思是"探查",那么我们可能已经猜出这个函数的作用了,probe函数是用来探查当前进程是否收到消息的.probe函数也有大小写版本和阻塞非阻塞版本,合起来就有4个探查函数了.不过,貌似大小写版本在使用是一样的,只是实现上不一样.(或者是我还未发现效果上的差别)而阻塞和非阻塞版本则有差别,阻塞版本的probe必须在收原创 2016-08-16 20:18:40 · 1243 阅读 · 4 评论 -
mpi学习日志(13):mpi4py与非阻塞型函数
继续填坑.前面第二篇也说过,很多函数有分阻塞型版本和非阻塞型版本,非阻塞型版本的名字比阻塞型的名字多一个i前缀.那么,非阻塞型函数又是怎么回事?我们知道,点对点通信里的recv函数是一个阻塞函数,也就是接收方要等发送方发送了信息,函数才能返回.那么对应的,非阻塞型函数就是,不管发送方是否发送了信息,函数都马上返回,返回一个request对象.我们可以通过request对原创 2016-08-16 18:02:44 · 886 阅读 · 0 评论 -
mpi学习日志(12):mpi4py与需要buf的大写版本函数
在第二篇我们说过mpi里的函数很多都有大写和小写的版本,并且大写的版本是需要buffer的,但那时候并没有说明怎么使用和为什么要这样用,今天就让我填这个坑吧.为什么?这次先说为什么,为什么需要有大写版本的函数?事实上我们是把因果颠倒了,在c语言里,MPI只有大写版本的函数,没有小写版本的.显然,关注效率的C语言当然会更喜欢你提供一个buffer,然后拷贝复制,而不是通过返回原创 2016-08-16 16:47:47 · 1171 阅读 · 0 评论 -
mpi学习日志(11):mpi4py与Spawn(没法用MSMPI实现)
上一篇我们用mpi实现了简单的并行矩阵乘法算法.在这个算法中,有一个缺陷,进程数必须事先确定好.没错,至今为止我们写过的mpi代码都是事先规定好进程数的.那么,能不能动态创建进程?能不能在运行时,根据需要创建不同数目的进程?答案当然是可以的!用Spawn函数就可以!代码:test.py(master)test2.py(slave)原创 2016-07-21 11:12:01 · 1964 阅读 · 5 评论 -
mpi学习日志(10):mpi4py实现简单并行矩阵乘法
除了之前利用gather求π之外,我们就没有写过mpi程序的实例.今天我们就尝试用mpi去写一个简单的并行矩阵乘法,虽说是并行,但不是使用经典的分治去处理,而只是简单地每个进程计算一个格子的值.计算的式子是这样的,3*2的矩阵A乘上2*3的矩阵B,得到3*3的矩阵C.这样的话,我们就需要9个进程去计算每个格子的值.问题分析:我们假设一开始只有进程0拥有矩阵A和B原创 2016-07-20 08:49:28 · 3535 阅读 · 1 评论 -
mpi学习日志(9):mpi4py与Split
上两篇中,我们学习了如何创建新的通信组.有时候,我们需要把进程分成若干组,它们各自形成新的通信组.如果还是用Create()去实现的话,未免有点麻烦.于是,Split函数横空出世,帮我们解决这个麻烦.Split方法和Create一样,也是通信子的所有进程都要调用这个函数,同样也是有barrier的全局同步.每个进程都要向Split提供一个color,color是一个int.所有原创 2016-07-19 21:31:35 · 1316 阅读 · 0 评论 -
mpi学习日志(8):mpi4py与Group运算
今天,我们来学习一下Group的各种增删运算.1.Inclincl是挑选的意思.你要把一个列表作为参数来调用Incl,列表里放的是一些下标(注意不是rank).这些下标对应的进程会被挑选出来,形成一个新的group,并返回这个group.PS:列表里放的是下标,不是rank!!!2.ExclIncl对应的就原创 2016-07-19 21:18:09 · 1047 阅读 · 0 评论 -
mpi学习日志(7):mpi4py与通信子,通信组
从第一篇笔记开始,我们就使用了comm这个对象.而且,几乎每次新学习的函数,都是这个comm的一个方法.今天,我们就来重新认识comm,它到底是什么?1.通信子comm是一个通信子.什么是通信子?通信子其实就是一个对讲机,每个进程都有一个对讲机.通过对讲机,你可以和某个人对话,也可以对全部人发出广播.2.通信组警察有警察之间的对讲机,盗贼有盗贼之间的原创 2016-07-19 20:11:08 · 2633 阅读 · 0 评论 -
mpi学习日志(6):mpi4py与sendrecv
在点对点通信中,除了send和recv这两个最重要的函数,以及send和recv的各种版本的函数,还有一个可能常用的函数,那就是sendrecv.sendrecv其实只是send+recv,没有什么新的花招.只是使用sendrecv有一种函数调用的感觉.发送方像调用者,接收方像被调用者.上述代码,进程1把进程0发给它的列表里的每个元素都乘上2,再返回原创 2016-07-19 10:45:29 · 1377 阅读 · 0 评论 -
mpi学习日志(5):mpi4py与多点通信续
在多点通信里我们已经学习了广播bcast,散播scatter,收集gather,规约reduce.今天我们再来简略看一些可能更为少用的多点通信.1.allgather简单来说就是收集+广播.gather中只有根进程会得到收集到的信息,而allgather则是所有进程都会得到收集到的信息,就相当于收集后再广播一次.2.allredu原创 2016-07-19 10:22:44 · 2623 阅读 · 1 评论 -
mpi学习日志(3):mpi4py与广播
前面我们学习了点对点通信,那是关于两个点的通信.今天,我们学习多个点之间的通信.首先,我们学习广播.所谓广播,就是说某个进程要向其他所有进程发送数据,而不是单独某个进程.显然,一次的广播可以等价为许多次的点对点通信,我们可以用学过的send和recv去实现广播.代码:运行结果:我们看见,5个进程中,除了要广播的进程0,后面4个进程原创 2016-07-18 18:34:01 · 2080 阅读 · 0 评论 -
mpi学习日志(2):mpi4py与点对点通信
前文说到,mpi是信息传递接口,因此信息传递是mpi的重点.而进程中的信息传递就是进程通信!今天我们将看看mpi创建的一组进程是怎么相互通信的.进程通信有许多种,点对点通信,广播,散播等.今天我们先学习点对点通信.什么是点对点通信?其实就是最简单的进程A向进程B发送信息,而进程B向进程A接收信息.这个关于两个进程之间的通信.代码:运行结果:原创 2016-07-18 17:56:17 · 1991 阅读 · 3 评论 -
mpi学习日志(4):mpi4py与散播等
今天要学习的是散播等多点通信.散播:什么是散播?就是发送方要把一堆数据发送出去,但接收方只接收其中的一个.下图是一个散播和广播的对比.同样的,散播也是能等价于多个点对点通信,也同样的有效率问题.只是在考虑效率的时间,我们应该考虑建立通信的时间远大于数据拷贝的时间,比较好.广播使用的函数是bcast,而散播则是scatter代码:原创 2016-07-18 19:42:20 · 1553 阅读 · 1 评论