MPI异步IO:硬盘和网络数据IO

应用场景描述

参与计算的每个MPI节点的本地盘上都存有数据文件,每个数据文件含有若干条记录信息,文件的大小在100GB左右,现在每个MPI节点需要把本地记录从磁盘读取出来,进行处理,然后发给其它所有节点,同时接收其他节点发过来的记录数据进行计算。多点广播,多点接收,多点读盘的模式。实际问题来源于地震资料处理,一个TB级别的地震资料被平均分割放在MPI节点上的本地硬盘上,这些硬盘逻辑上类似一个分布式RAID,原则上可以提供更高的IO吞吐。在对地震资料进行时间或深度偏移成像计算时候,整个地震数据体需要在每个节点内处理一遍。

细节

  • 磁盘记录数据读取MPI_File_iread异步方式+双缓存(double buffer)。采用双缓存是保证其他操作(计算、网络数据Recv&Send)时候,磁盘保持忙碌,实现时间覆盖(oeverlapping)
  • 数据网络接收MPI_Irecv异步方式+双缓存(double buffer)。双缓存目的是保持网络接收数据忙碌,实现运行时间覆盖
  • 数据网络发送MPI_Isend异步方式。网络接收到的和硬盘读进来的记录数据,在处理过程中是只读的(read-only),处理同时会直接用MPI_Isend发送给下游节点,处理和数据转发可以同时进行。
  • MPI节点采用Ring-Bcast方式进行数据网络接收发送。本节点接收上游节点数据,进行处理,并同时转发给下游节点,实现“接收+处理+转发”同时进行。
  • 每个节点既是数据源Source(来源于磁盘和转发Send),也是Sink(数据Recv)
  • 每块数据都会有附加信息,标记本块数据已经流过的节点数目统计,若该数字等于整个COMM的MPI节点总数,该数据处理完后就会被丢弃,不再被转发。
  • 当本节点本地盘数据已经读取完成后,会发送给下游节点一个空数据包,空包内同样有流过节点计数,每个接收到该空包的节点,内部会有一个统计其他已经完成磁盘数据IO的节点数,作为整个程序结束标志信息
  • 数据计数可使用Recv&Send函数中的tag参数实现,或者是在每块数据头部预留有元信息空间(meta info)
  • 函数:MPI_File_iread, MPI_Irecv, MPI_Isend, MPI_Recv_init, MPI_Waitany, MPI_Waitsome

性能分析

假设总计有 n n n个节点,每个节点本地盘数据有 m m m块记录,每块记录读盘IO时间 T d i s k T_{disk} Tdisk, 网络接收时间 T r e c v T_{recv} Trecv,发送时间 T s e n d T_{send} Tsend,处理时间 T p r o c s s T_{procss} Tprocss, 那么总计接收时间 ( n − 1 ) m T r e c v (n-1)mT_{recv} (n1)mTrecv,读盘时间 m T d i s k mT_{disk} mTdisk,发送时间 n m T s e n d nmT_{send} nmTsend,处理时间 n m T p r o c e s s nmT_{process} nmTprocess. 整个过程耗时 T = M A X { m T d i s k , ( n − 1 ) m T r e c v , n m T s e n d , n m T p r o c e s s } ≈ M A X { n m T s e n d , n m T p r o c e s s } T=MAX\{mT_{disk},(n-1)mT_{recv},nmT_{send},nmT_{process}\}\approx MAX\{nmT_{send},nmT_{process}\} T=MAX{mTdisk,(n1)mTrecv,nmTsend,nmTprocess}MAX{nmTsend,nmTprocess}此处假设 T r e c v ≈ T s e n d T_{recv}\approx T_{send} TrecvTsend n n n节点数较大情况。此处磁盘IO时间可以被完全掩盖。在TB级别海量数据处理过程中,一般数据IO的时间都是占比很可观的,采用MPI+分布式磁盘模式,可以显著降低磁盘IO对整体处理过程的影响,对于计算量很大的处理过程 T p r o c e s s > T s e n d T_{process}>T_{send} Tprocess>Tsend,总耗时基本相当于整体数据在单节点上的处理时间,如果把节点内采用OpenMP或其他多核多线模式考虑进去, 一些计算过程中可能满足 T p r o c s s < T s e n d T_{procss}<T_{send} Tprocss<Tsend,于是总耗时等同于整体数据在网上发送一次的时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值