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

Parallel processing 是MPI_Bsend_init/MPI_Start最佳异步缓冲通信。,parallel-processing,mpi,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 MPI_Recv(请求[i])——Recv数据 从性能的角度来看,(i=

是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
MPI_Recv(请求[i])——Recv数据

从性能的角度来看,(i=0;iBsend在这里是错误的函数。Bsend几乎没有任何优势,因为目前基本上所有实现都使用的渴望协议在接收方自动缓冲小消息,这是Bsend可行的地方

在任何情况下,您正在使用的持久发送已经是非阻塞的,因此不存在Isent_init。请参阅例如:

调用是本地的,语义与非阻塞调用类似 非阻塞部分中描述的通信操作 通信。也就是说,对MPI_的调用以创建的请求开始 MPI_SEND_INIT以与调用相同的方式启动通信 我想


我的同事已经证实,persistent Send Recv确实在现代InfiniBand群集上提供了效率提升,这让我感到惊讶。我只能假设这是因为IB页面注册是提前完成的。

如果您需要(a)持久通信请求和(b)缓冲通信,这是一种非常好的方式。但我还没有发现在实践中持久通信会带来任何显著的性能优势,缓冲发送也有自己的问题,正如这位OpenMPI开发人员所列举的-。@JonathanDursi非常感谢您提供的信息。我对MPI_Bsend也有问题l、 您是否建议改用MPI_Isend。