我正在编写一个程序来使用MPI库检查最短路径。有两种情况:要么我找到了一个更好的路径,以防缓冲区的第一个插槽的状态resultBuff[0] = 1,我需要遍历缓冲区的其余内容以获得更好的路径。另一种情况是resultBuff[0] = 0,我不会在缓冲区的其他单元格中排除任何值。我是否可以使用单独的呼叫:如果我找到了更好的路径并将其存储在MPI_Isend到resultBuff[1]中:MPI_Isend((void*)sendBuff, 11, MPI_INT, 0, 1, MPI_COMM_WORLD, &request);如果没有找到更好的路径:MPI_Isend((void*)sendBuff, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &request);在这两种情况下我都会用MPI_Recv( (void*)resultBuff, 11, MPI_INT, MPI_ANY_SOURCE, 1, MPI_COMM_WORLD, &status);收到结果。这行吗?如果是这样,如果不发送更好的路径,我会节省通信成本吗?注:resultBuff[10]为11号。 最佳答案 是的,你可以这样做。从MPI标准和man pages为MPIYRCV,“计数参数表示消息的最大长度;实际数字可以用确定”,使用从MPIYRCVE()返回的status对象调用。至于节省通信成本,它可能不会——这样的短消息主要取决于发送消息的延迟,而不是带宽。
09-06 20:46