【发布时间】:2011-06-01 01:25:21
【问题描述】:
我一共使用 MPI 在 4 个节点上传递了 8 条消息。我注意到有两条消息的数组没有提供有意义的结果。我复制了以下代码的摘录?这些是我根据以下代码/结果提出的一些相关问题:
- MPI_Isend 是否也需要等待?我不确定是否存在死锁。我还尝试将这两个变量从一个节点传递到另一个节点,但数组值仍然为 NULL。
- 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]);
}
【问题讨论】:
-
这里没有足够的上下文来弄清楚发生了什么。什么是 B、BB、A、AA、行?哪些变量在这里没有合理的值?你是什么意思数组值是NULL?演示问题的完整代码段是最好的。至于您的其他问题,是的,Isend 和 Irecv 都应该匹配等待或类似的,并且不,在这种特殊情况下,sendrecv 与给定的模式不匹配(在上述情况下,没有一个任务同时发送和接收)。
-
谢谢乔纳森。我能够修复这个错误。它与我的打印方式有关,而不是发送/接收。命令。感谢您的帮助。