C04-MPI的扩展MPI-2_第1页
C04-MPI的扩展MPI-2_第2页
C04-MPI的扩展MPI-2_第3页
C04-MPI的扩展MPI-2_第4页
C04-MPI的扩展MPI-2_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、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,主进程组中动态进程的创建,mpi_comm_spawn(cmd,

3、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,root, comm,intercom

4、m,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,问题,客户端每次连接的端口可能是不同的,方案,服务端 建立特定名字和端口字符串的联系 mpi_publish_name(servi

5、cename,info,portname) 客户端 根据名字得到特定的端口字符串 mpi_lookup_name(servicename,info,portname,基于socket的通信,mpi_comm_join(fd,intercomm) 将socket通信转化为mpi通信,什么是远程存储访问(单边通信)? remote memory access/one-sided communication,打电话 留字条 阅读email,通信窗口,开辟自己内存的一段空间作为对外联系的窗口,任何进程都可以通过对窗口的访问来达到数据通信的目的,窗口操作的分类,窗口读 mpi_get 窗口写 mpi_p

6、ut 窗口运算 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_disp, target_count, targ

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

8、i_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) 启动第二次握手(窗口操作结束,图示,锁方式,借鉴临界区的概念 加锁后只允许自己访问 开锁后将访问权让给别人,加锁语句,mpi_win_lock(lock_type, rank,

10、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类似) 与用c/fortran打开文件不同,文件打开方式,文件关闭,

11、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) 返回打开文件时指定的模式,具有显式偏移的文件操作,阻塞显式偏移并行文件读写,mpi_file_read_at(fh, offset, buf,

12、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) 组调用,所有进程都执行了一次mpi_file_write_at,非阻塞显式偏移并行文件读写,m

13、pi_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, count, datatype) 组调用读开始 mpi_file_read_

14、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_view(fh, disp,etype, filetype, datar

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

16、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, datatype,status) 组内所有进程都写,非阻塞视口文件读写,mpi

17、_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) 组调用读操作完成,组调用写操作,mpi_file_write_all_beg

18、in(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,status) 共享读 mpi_file_write_shared(fh, buf

19、, 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_shared(fh, buf, count,datatype,request) 非阻

20、塞写,完成调用,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_end(fh, buf, status) 完成非阻塞组调用写操作,分布式数组文件的存取,mpi_type_create_darray(size,rank,ndims,array_of_gsizes,array_of_distribs, array_of_dargs,array_of_psizes,order,oldtype,ne

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论