版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第python中mpi4py的所有基础使用案例详解python中mpi4py的基础使用
大多数MPI程序都可以使用命令mpiexec运行。在实践中,运行Python程序如下所示:
$mpiexec-n4pythonscript.py
案例1:测试comm.send和comm.recv函数,代码如下
frommpi4pyimportMPI
comm=MPI.COMM_WORLD
rank=comm.Get_rank()
ifrank==0:
data={'a':7,'b':3.14}
comm.send(data,dest=1,tag=11)
elifrank==1:
data=comm.recv(source=0,tag=11)
rank代表进程编号,其总数是mpiexec-n中的n的个数,最大的n受到电脑cpu内核数的限制
dest代表发送的目标,tag是一个标志位可以忽略,source为数据来源rank标志
案例2:具有非阻塞通讯的python对象
frommpi4pyimportMPI
comm=MPI.COMM_WORLD
rank=comm.Get_rank()
ifrank==0:
data={'a':7,'b':3.14}
req=comm.isend(data,dest=1,tag=11)
req.wait()
elifrank==1:
req=comm.irecv(source=0,tag=11)
data=req.wait()
案例3:快速发送实例
这里的Send和Recv都是大写,用于numpy数据的传输
frommpi4pyimportMPI
importnumpy
comm=MPI.COMM_WORLD
rank=comm.Get_rank()
#passingMPIdatatypesexplicitly
ifrank==0:
data=numpy.arange(1000,dtype='i')
comm.Send([data,MPI.INT],dest=1,tag=77)
elifrank==1:
data=numpy.empty(1000,dtype='i')
comm.Recv([data,MPI.INT],source=0,tag=77)
#automaticMPIdatatypediscovery
ifrank==0:
data=numpy.arange(100,dtype=numpy.float64)
comm.Send(data,dest=1,tag=13)
elifrank==1:
data=numpy.empty(100,dtype=numpy.float64)
comm.Recv(data,source=0,tag=13)
案例4:集体通讯,广播机制
广播机制就是将当前root=0端口下的所有信息发送到任何一个进程
frommpi4pyimportMPI
comm=MPI.COMM_WORLD
rank=comm.Get_rank()
ifrank==0:
data={'key1':[7,2.72,2+3j],
'key2':('abc','xyz')}
else:
data=None
data=comm.bcast(data,root=0)
案例5:scatter,将root=0下的数据一次分发到各个rank下
frommpi4pyimportMPI
comm=MPI.COMM_WORLD
size=comm.Get_size()
rank=comm.Get_rank()
ifrank==0:
data=[(i+1)**2foriinrange(size)]
else:
data=None
data=comm.scatter(data,root=0)
assertdata==(rank+1)**2
案例6:gather,将所有rank下的数据收集到root下
frommpi4pyimportMPI
comm=MPI.COMM_WORLD
size=comm.Get_size()
rank=comm.Get_rank()
data=(rank+1)**2
data=comm.gather(data,root=0)
ifrank==0:
foriinrange(size):
assertdata[i]==(i+1)**2
else:
assertdataisNone
案例7,numpy的广播机制
与之前一样都是大写
frommpi4pyimportMPI
importnumpyasnp
comm=MPI.COMM_WORLD
rank=comm.Get_rank()
ifrank==0:
data=np.arange(100,dtype='i')
else:
data=np.empty(100,dtype='i')
comm.Bcast(data,root=0)
foriinrange(100):
assertdata[i]==i
案例8:numpy的Scatter机制
frommpi4pyimportMPI
importnumpyasnp
comm=MPI.COMM_WORLD
size=comm.Get_size()
rank=comm.Get_rank()
sendbuf=None
ifrank==0:
sendbuf=np.empty([size,100],dtype='i')
sendbuf.T[:,:]=range(size)
recvbuf=np.empty(100,dtype='i')
comm.Scatter(sendbuf,recvbuf,root=0)
assertnp.allclose(recvbuf,rank)
案例9:numpy的Gather机制
frommpi4pyimportMPI
importnumpyasnp
comm=MPI.COMM_WORLD
size=comm.Get_size()
rank=comm.Get_rank()
sendbuf=np.zeros(100,dtype='i')+rank
recvbuf=None
ifrank==0:
recvbuf=np.empty([size,100],dtype='i')
comm.Gather(sendbuf,recvbuf,root=0)
ifrank==0:
foriinrange(size):
assertnp.allclose(recvbuf[i,:],i)
案例10:allgather机制
allgather就是scatter加上广播机制。
rank0=a
rank1=b
rank2=c
allgather后结果为
rank0=a,b,c
rank1=a,b,c
rank2=a,b,c
frommpi4pyimportMPI
importnumpy
defmatvec(comm,A,x):
m=A.shape[0]#loc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (新)医院感染工作计划完整版
- 2026年互联网承运运维服务合同
- 2026年大数据建设碳资产管理协议
- 2026年快消改造环保治理合同
- 2026年航天分销租赁托管合同
- 村居集体经济工作制度
- 领导带班下井工作制度
- 食品内部防疫工作制度
- 鱼苗过塘消毒工作制度
- 驻马店地区正阳县2025-2026学年第二学期五年级语文期末考试卷(部编版含答案)
- 中考生物总复习2024年中考生物二轮复习:专题二生物与环境
- DL-T1848-2018220kV和110kV变压器中性点过电压保护技术规范
- 中考物理单元复习:浮力
- FZT 62011.2-2016 布艺类产品 第2部分:餐用纺织品
- 超级实用的脚手架含量计算表脚手架计算表
- 2023年新高考全国Ⅱ卷语文真题(原卷版)
- 如何建立质量管理体系
- 特征值特征向量及其应用
- 回归分析方差分析
- 数控机床与编程-加工中心编程
- 中国传统民居建筑-客家土楼
评论
0/150
提交评论