【发布时间】:2021-05-15 01:50:18
【问题描述】:
this 帖子中的一位 cmets 简要提及
该标准允许实现将实际数据传输推迟到等待/测试调用。
MPI_Isend/MPI_Irecv 的数据传输是否总是延迟到相关的完成调用(MPI_Wait/MPI_Test 或其变体)被调用?如果不是,什么条件会影响这一点?
【问题讨论】:
-
该标准不保证消息异步进行。一些 MPI 实现具有一个进度线程来实现这一点。在
MPI_Isend()的情况下,可以在急切模式下发送消息。一般来说,当调用 MPI 子例程时,会进行通信。 -
@GillesGouaillardet 感谢您提供此信息。我正在努力寻找有关如何在急切模式下调用
MPI_Isend()的信息。你能给我建议吗? -
渴望与非渴望是一种实现选择。一个经验法则是在 Eager 模式下仅发送“小”消息,但不能保证。
-
我明白了,但
MPI_Test()是强制MPI_Isend以急切模式发送(同时仍保持非阻塞)的唯一方法吗?比如,Eager 模式的实现会是MPI_Isend紧跟在MPI_Test之后吗? -
MPI_Test()不会强制发送,它会进行通信。大多数其他 mpi 子例程也这样做,例如MPI_Wait()、MPI_Recv()甚至MPI_Send()等等。
标签: c++ asynchronous parallel-processing mpi cluster-computing