我试图比较两个程序的执行时间:
- 第一个使用非阻塞函数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;
}
谢谢。