gpt4 book ai didi

c++ - MPI_Isend/Recv-是否存在死锁?

转载 作者:太空宇宙 更新时间:2023-11-04 12:19:08 26 4
gpt4 key购买 nike

我使用 MPI 在 4 个节点上传递了总共 8 条消息。我注意到有两条消息的数组没有提供有意义的结果。我复制了下面代码的摘录?这些是我根据以下代码/结果提出的一些相关问题:

  1. MPI_Isend 是否也需要等待?我不确定是否存在僵局。我还尝试将这两个变量从一个节点传递到另一个节点,但数组值仍然为 NULL。
  2. MPI_SendRecv 是否会像此处建议的那样提高代码效率 Non Blocking communication in MPI and MPI Wait Issue. Not all information is passed correctly ?如果是这样,如何/为什么?也将感谢有关设置的一些指示。

谢谢!

Source Code:

if ((my_rank) == 0)
{
MPI_Irecv(A, Rows, MPI_DOUBLE, my_rank+1, MPI_ANY_TAG, MPI_COMM_WORLD, &request[6]);
MPI_Wait(&request[6], &status[6]);
}


if ((my_rank) == 1)
{
MPI_Isend(AA, Rows, MPI_DOUBLE, my_rank-1, 0, MPI_COMM_WORLD, &request[6]);
}


if ((my_rank) == 2)
{
MPI_Isend(B, Rows, MPI_DOUBLE, my_rank+1, 0, MPI_COMM_WORLD, &request[7]);
}

if ((my_rank) == 3)
{
MPI_Irecv(BB, Rows, MPI_DOUBLE, my_rank-1, MPI_ANY_TAG, MPI_COMM_WORLD, &request[7]);
MPI_Wait(&request[7], &status[7]);
}

最佳答案

是的,所有非阻塞调用(MPI_Isend、MPI_Irecv 等)都需要一个匹配的 MPI_Wait。在调用 MPI_Wait 之前,不能保证调用完成。在 MPI_Wait 返回之前,您不应该更改缓冲区的内容。

https://computing.llnl.gov/tutorials/mpi/

要使用 SendRecv,同一个任务必须发送消息并等待接收消息。该模式不适用于您的代码。

关于c++ - MPI_Isend/Recv-是否存在死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6062040/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com