【问题标题】:mpi4py hangs when trying to send large data尝试发送大数据时 mpi4py 挂起
【发布时间】:2014-02-26 23:50:10
【问题描述】:

我最近遇到了一个问题,尝试使用 mpi4py 库中的“发送”命令在多个处理器之间共享大数据。即使是 1000x3 的 numpy 浮点数组也太大而无法发送。任何想法如何克服这个问题?

提前谢谢。

【问题讨论】:

    标签: send freeze mpi4py


    【解决方案1】:

    我找到了一个简单的解决方案。将数据分成足够小的块...

    【讨论】:

      【解决方案2】:

      大数据的点对点发送/接收工作:

      #!/usr/bin/env python
      from mpi4py import MPI
      import numpy
      
      comm = MPI.COMM_WORLD
      rank = comm.Get_rank()
      
      if rank == 0:
          data = numpy.arange(300*100000, dtype='f')
          comm.Send([data, MPI.FLOAT], dest=1, tag=77)
      elif rank == 1:
          data = numpy.empty(300*100000, dtype='f')
          comm.Recv([data, MPI.FLOAT], source=0, tag=77)
          print data
      

      用两个处理器运行:

      % ~/work/soft/mpich/bin/mpiexec -np 2 ./send-numpy.py
      [  0.00000000e+00   1.00000000e+00   2.00000000e+00 ...,   2.99999960e+07
         2.99999980e+07   3.00000000e+07]
      

      【讨论】:

        【解决方案3】:

        我在Isend 遇到了同样的问题(Send 没有)。看来问题是由于发送过程在接收方收到数据之前终止。我通过在每个进程结束时添加 comm.barrier() 调用来解决此问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-05-30
          • 2022-01-18
          • 1970-01-01
          • 1970-01-01
          • 2019-07-02
          • 2021-05-12
          • 1970-01-01
          相关资源
          最近更新 更多