MPI_Recv需要很长很长的时间才能返回

时间:2016-02-14 20:25:06

标签: openmpi

我试图比较两个程序的执行时间:
- 第一个使用非阻塞函数MPI_Ssend和MPI_Irecv,它允许“在发送和接收消息时进行一些计算”。
- 另一个使用阻塞OpenMPI函数。

我没有问题来评估第一个节目的表现,看起来很“好”。 我的问题是使用MPI_Recv的第二个程序通常需要很长的时间才能完成:总是超过1秒:(例如1.001033秒)。好像这个过程必须做一些需要1秒钟的事情 我修改了我的初始代码,以显示一个等效的代码。

#include "mpi.h"
#include <stdlib.h>
#include <stdio.h>

#define SIZE 5000

int main(int argc, char * argv[])
{
    MPI_Request trash;

    int rank;
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);

    int myVector[SIZE];
    for(int i = 0 ; i < SIZE ; i++)
        myVector[i] = 100;

    int buff[SIZE];

    double startTime = MPI_Wtime();

    if(rank == 0)
      MPI_Issend(myVector, SIZE, MPI_INT, 1, 1, MPI_COMM_WORLD, &trash);
    if(rank == 1) {
      MPI_Recv(buff, SIZE, MPI_INT, 0, 1, MPI_COMM_WORLD, NULL);
      printf("Processus 1 finished in %lf seconds\n", MPI_Wtime()-startTime);
    }

    MPI_Finalize();
return 0;
}

谢谢。

0 个答案:

没有答案