MPI_Bsend_init / MPI_Start是最佳的异步缓冲通信。

时间:2012-03-31 16:33:50

标签: parallel-processing mpi

MPI_Bsend_init / MPI_Start是最佳的异步缓冲通信。你们能想到更好的方式来处理器之间的数据通信。 N个处理节点的伪代码

   MPI_Recv(request[i]) -- Recv data

   for(i=0;i<N;i++) MPI_Bsend_init(request[i]) -- Setup request

   MPI_Start(request[i]) -- Send data

1 个答案:

答案 0 :(得分:1)

从性能的角度来看,Bsend是错误的功能。 Bsend几乎没有任何优势,因为今天基本上所有实现所使用的急切协议都会自动缓存在接收器端,用于小消息,这就是Bsend可行的地方。

在任何情况下,持久性发送 - 正如您所使用的 - 已经是非阻塞的,因此没有Isent_init这样的东西。参见例如http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node51.html

  

调用是本地的,具有与非阻塞类似的语义   非阻塞部分中描述的通信操作   沟通。也就是说,使用创建的请求调用MPI_START   MPI_SEND_INIT以与调用相同的方式启动通信   MPI_ISEND ...

我的同事们惊讶地发现,持续的Send-Recv确实可以提高现代InfiniBand集群的效率。我只能假设这是因为IB页面注册是在前面完成的。