C04-MPI的扩展MPI-2.ppt

上传人:小** 文档编号:3687788 上传时间:2020-10-16 格式:PPT 页数:89 大小:1.04MB
返回 下载 相关 举报
C04-MPI的扩展MPI-2.ppt_第1页
第1页 / 共89页
C04-MPI的扩展MPI-2.ppt_第2页
第2页 / 共89页
点击查看更多>>
资源描述

《C04-MPI的扩展MPI-2.ppt》由会员分享,可在线阅读,更多相关《C04-MPI的扩展MPI-2.ppt(89页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、MPI的扩展MPI-2,谭光明 副研究员 中国科学院计算技术研究所 国家智能计算机研究开发中心 计算机体系结构国家重点实验室(筹),MPI-1的不足,不支持进程个数的动态改变 不支持单边通信模式 不支持并行文件操作,应用需求,动态任务树 精确成型应用实例,MPI-2的解决方案,对通信域进行扩展 组内通信域 组间通信域 具体实现方式 动态派生进程(有父子关系) 独立进程间通信(C/S关系) Socket通信(转换socket通信),组间通信域的点到点通信,例子,MPI_SEND(buf,count,datatype,dest,tag,intercomm) 与组内通信的不同:1 dest的含义;2

2、 intercomm MPI_RECV(buf,count,datatype,source,tag, intercomm,status) 与组内通信的不同:1 source的含义;2 intercomm,组间通信域的组通信,例子,MPI_ALLTOALL(sendbuf,sendcount,sendtype,recvbuf,recvcount,recvtype,intercomm),图示,组间通信域的一对多和多对一,本地一个发,对方所有的收 本地一个收,对方所有的发,例子,MPI_BCAST(buf,count,datatype,root, intercomm),主进程组中动态进程的创建,MP

3、I_COMM_SPAWN(cmd,argv,maxprocs, info,root,comm,intercomm,aryerrcodes) 最多派生maxprocs个进程,root是参数检查的进程,派生进程组得到组间通信域,MPI_COMM_GET_PARENT(parent) 在派生进程组中调用 在初始化之后 三次同步 父进程同步 子进程之间同步 父子进程之间同步,源程序,主进程组程序(独立的MPI程序),派生进程组程序(独立的MPI程序),启动,创建多组子进程,MPI_COMM_SPAWN_MULTIPLE(count,cmdary,argvary,maxprocsary,infoary,

4、root, comm,intercomm,errcodeary) 各组子进程是不同的,独立进程间通信,服务端 MPI_OPEN_PORT(info,port_name) MPI_COMM_ACCEPT(port_name,info,root,comm,intercomm) 在打开的特定端口上等待连接,独立进程间通信(续),客户端 MPI_COMM_CONNECT(port_name,info, root,comm,intercomm) 请求与指定端口连接 MPI_COMM_DISCONNECT(comm),问题,客户端每次连接的端口可能是不同的,方案,服务端 建立特定名字和端口字符串的联系 M

5、PI_PUBLISH_NAME(servicename,info,portname) 客户端 根据名字得到特定的端口字符串 MPI_LOOKUP_NAME(servicename,info,portname),基于socket的通信,MPI_COMM_JOIN(fd,intercomm) 将socket通信转化为MPI通信,什么是远程存储访问(单边通信)? Remote Memory Access/One-Sided Communication,打电话 留字条 阅读EMAIL,通信窗口,开辟自己内存的一段空间作为对外联系的窗口,任何进程都可以通过对窗口的访问来达到数据通信的目的,窗口操作的分类

6、,窗口读 MPI_GET 窗口写 MPI_PUT 窗口运算 MPI_ACCUMULATE,窗口的创建,MPI_WIN_CREATE(base, size, disp_unit, info, comm ,win),注意,窗口创建操作是组调用,所有的进程必须都执行 得到的窗口是组窗口,与给定的通信域密切相关 用同一窗口对象可以访问所有其它进程的窗口,窗口的释放,MPI_WIN_FREE(win) 当所有窗口都不再使用时释放 是组调用,远程更新(向窗口写),MPI_PUT(origin_addr, origin_count, origin_datatype, target_rank, target_

7、disp, target_count, target_datatype, win),注意,不同进程的窗口是通过进程标识来区别的 对不同进程窗口的操作使用的是同一窗口句柄 偏移是以创建窗口时指定的偏移单位大小计算的,从远程得到数据(从窗口读),MPI_GET(origin_addr, origin_count, origin_datatype, target_rank, target_disp, target_count, target_datatype, win),注意,写窗口的逆操作 不同进程的窗口是通过进程标识来区别的 对不同进程窗口的操作使用的是同一窗口句柄 偏移是以创建窗口时指定的偏移

8、单位大小来计算的,对远程数据的计算(窗口数据运算),MPI_ACCUMULATE(origin_addr, origin_count, origin_datatype, target_rank, target_disp,target_count, target_datatype, op, win),图示,同时执行了窗口的读和写操作,问题,访问冲突问题(R,W) 读读(RR) 读写(RW) 写读(WR) 写写(WW) 解决办法 窗口同步管理,窗口同步管理,栅栏方式 握手方式 锁方式,栅栏方式,MPI_WIN_FENCE(assert, win) assert = 0,窗口操作前,窗口操作完成,窗

9、口操作,示例,前后两次窗口操作互不干扰,握手方式,第一次握手,为窗口访问作准备 第二次握手,窗口访问完成,发起访问方的操作顺序,MPI_WIN_START(group, assert, win) 启动第一次握手(开始窗口访问) 窗口操作 MPI_WIN_COMPLETE(win) 启动第二次握手(结束窗口访问),接收访问方的操作过程,MPI_WIN_POST(group, assert, win) 启动第一次握手(准备窗口操作) 等待被访问 MPI_WIN_WAIT(win) 启动第二次握手(窗口操作结束),图示,锁方式,借鉴临界区的概念 加锁后只允许自己访问 开锁后将访问权让给别人,加锁语句

10、,MPI_WIN_LOCK(lock_type, rank, assert, win) 共享锁:允许其它的进程同时加共享锁 互斥锁:不允许其它的进程再加锁,开锁语句,MPI_WIN_UNLOCK(rank, win) 允许其它的进程加锁,图示,练习,请用单边通信重新实现Jacobi迭代的例子。 请写一个简单的动态进行创建的例子,并行文件I/O的分类,显式偏移的文件I/O 视口文件I/O 共享文件I/O,一些基本操作,并行文件打开,MPI_FILE_OPEN(comm, filename, amode, info, fh) 文件打开 组调用,amode必须都相同 fh是一个组句柄(与WIN类似)

11、 与用C/Fortran打开文件不同,文件打开方式,文件关闭,MPI_FILE_CLOSE(fh) 注意:组调用,删除指定的文件,MPI_FILE_DELETE(filename, info),文件大小,MPI_FILE_SET_SIZE(fh,size) 组调用,所有的size都相同 MPI_FILE_GET_SIZE(fh,size),文件进程组与文件打开模式,MPI_FILE_GET_GROUP(fh,group) 返回句柄fh对应的进程组group MPI_FILE_GET_AMODE(fh, amode) 返回打开文件时指定的模式,具有显式偏移的文件操作,阻塞显式偏移并行文件读写,M

12、PI_FILE_READ_AT(fh, offset, buf, count, datatype,status),写文件,MPI_FILE_WRITE_AT(fh, offset, buf, count, datatype,status),组调用阻塞显式偏移并行文件读写,MPI_FILE_READ_AT_ALL(fh, offset,buf, count,datatype,status) 组调用,所有进程都执行了一次MPI_FILE_READ_AT MPI_FILE_WRITE_AT_ALL(fh, offset,buf, count,datatype,status) 组调用,所有进程都执行了

13、一次MPI_FILE_WRITE_AT,非阻塞显式偏移并行文件读写,MPI_FILE_IREAD_AT(fh, offset,buf, count, datatype, request) MPI_FILE_IWRITE_AT(fh, offset,buf, count, datatype, request) 同非阻塞通信的基本含义,调用返回并不意味着操作的完成,完成形式,MPI_WAIT MPI_TEST 与非阻塞通信的完成调用形式完全相同,非阻塞组调用显式偏移并行文件读写,具有显式的开始与结束形式 MPI_FILE_READ_AT_ALL_BEGIN(fh, offset, buf, cou

14、nt, datatype) 组调用读开始 MPI_FILE_READ_AT_ALL_END(fh, buf, status) 组调用读结束,写操作,MPI_FILE_WRITE_AT_ALL_BEGIN(fh, offset, buf, count, datatype) 组调用写开始 MPI_FILE_WRITE_AT_ALL_END(fh, buf, status) 组调用写结束,视口文件读写,特点:隐式文件指针 取文件的一部分形成视口,然后对该视口进行操作,每个进程把视口看作是整个文件,文件视口, 文件类型是在基本类型的基础上形成的自定义数据类型,文件视口的定义,MPI_FILE_SET_

15、VIEW(fh, disp,etype, filetype, datarep,info),数据表示,native(效率最高,移植性最差) internal (效率一般,移植性一般) external32(效率最低,移植性最好),文件视口的定义(续),组调用 偏移的单位是字节 视口数据是连续的 文件句柄的含义转换,视口信息的获取,MPI_FILE_GET_VIEW(fh, disp,etype, filetype, datarep) 得到偏移,基本类型,文件类型以及数据表示等信息,当前视口指针偏移,MPI_FILE_GET_POSITION(fh, offset) 文件视口句柄,视口偏移,绝对偏

16、移,MPI_FILE_GET_BYTE_OFFSET(fh, offset, disp) 给定相对偏移offset,给出绝对偏移disp,阻塞方式的视口读写,MPI_FILE_READ(fh, buf,count,datatype, status) 从视口当前位置读数据 MPI_FILE_WRITE(fh, buf,count,datatype, status) 向视口当前位置写数据,阻塞方式的视口文件组调用,MPI_FILE_READ_ALL(fh, buf,count, datatype,status) 组内所有进程都读 MPI_FILE_WRITE_ALL(fh, buf,count,

17、datatype,status) 组内所有进程都写,非阻塞视口文件读写,MPI_FILE_IREAD(fh, buf, count, datatype, request) 非阻塞视口文件读 MPI_FILE_IWRITE(fh, buf, count,datatype, request) 非阻塞视口文件写,完成操作,MPI_WAIT MPI_TEST 同非阻塞的通信调用形式,非阻塞视口组调用,MPI_FILE_READ_ALL_BEGIN(fh, buf, count,datatype) 组内进程都执行非阻塞的读操作 MPI_FILE_READ_ALL_END(fh, buf, status)

18、 组调用读操作完成,组调用写操作,MPI_FILE_WRITE_ALL_BEGIN(fh, buf, count,datatype) 组调用写操作开始 MPI_FILE_WRITE_ALL_END(fh, buf, status) 组调用写操作完成,共享文件操作,基于视口文件操作,但视口文件指针只有一个,即共享指针 任何文件对指针的操作都同时影响其它的文件 各个进程对视口定义有什么要求?,移动共享视口指针,MPI_FILE_SEEK_SHARED(fh, offset, whence),阻塞共享文件读写,MPI_FILE_READ_SHARED(fh, buf,count, datatype,

19、status) 共享读 MPI_FILE_WRITE_SHARED(fh, buf, count, datatype,status) 共享写,阻塞共享文件组读写,MPI_FILE_READ_ORDERED(fh, buf, count, datatype, status) 组内进程依次读 MPI_FILE_WRITE_ORDERED(fh, buf, count, datatype, status) 组内进程依次写,非阻塞共享指针文件操作,MPI_FILE_IREAD_SHARED(fh, buf, count, datatype,request) 非阻塞读 MPI_FILE_IWRITE_S

20、HARED(fh, buf, count,datatype,request) 非阻塞写,完成调用,MPI_WAIT MPI_TEST 同非阻塞通信形式,非阻塞共享文件组读写,MPI_FILE_READ_ORDERED_BEGIN(fh, buf, count, datatype) 启动非阻塞组读操作 MPI_FILE_READ_ORDERED_END(fh, buf, status) 完成非阻塞组读操作,写操作,MPI_FILE_WRITE_ORDERED_BEGIN(fh, buf, count, datatype) 启动非阻塞组调用写操作 MPI_FILE_WRITE_ORDERED_EN

21、D(fh, buf, status) 完成非阻塞组调用写操作,分布式数组文件的存取,MPI_TYPE_CREATE_DARRAY(size,rank,ndims,array_of_gsizes,array_of_distribs, array_of_dargs,array_of_psizes,order,oldtype,newtype) 定义一种新的数据类型,分布式数组文件类型,例子,gsizes0=m; gzises1=n; distribs0=MPI_DISTRIBUTE_BLOCK; /* MPI_DISTRIBUTE_CYCLIC, MPI_DISTRIBUTE_NONE*/ dist

22、ribs1=MPI_DISTRIBUTE_BLOCK; dargs0=MPI_DISTRIBUTE_DFLT_DARG; dargs1=MPI_DISTRIBUTE_DFLT_DARG; psizes0=2; psizes1=3; MPI_Comm_rank(MPI_COMM_WORLD,分布式子数组文件的定义,MPI_TYPE_CREATE_SUBARRAY(ndims,array_of_sizes, array_of_subsizes, array_of_starts, order, oldtype, newtype) 在原来数组的基础上定义一个子数组类型,例子,gsizes0=m; gsizes1=n; psizes0=2; psizes3=3; lsizes0=m/psizes0; lsizes1=n/psizes1; dims0=2; dims1=3; periods0=periods1=1; MPI_Cart_create(MPI_COMM_WORLD,2,dims,periods, 0 ,例子,MPI_Type_create_subarray(2,gsizes,lsizes,start_indices,MPI_ORDER_C,MPI_FLOAT,THANKS,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com