MPI运行时给出错误的输出

时间:2014-09-19 21:53:50

标签: c++ parallel-processing mpi

我尝试使用MPI_Wtime()测试总运行时间,但我输出的输出不正确。

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

int main(int argc, char *argv[])
{
   int rank, size, len;
   double start, end, runtime;
   char name[MPI_MAX_PROCESSOR_NAME];

   MPI_Init(&argc, &argv);
   MPI_Barrier(MPI_COMM_WORLD);

   MPI_Comm_rank(MPI_COMM_WORLD, &rank);
   MPI_Comm_size(MPI_COMM_WORLD, &size);
   MPI_Get_processor_name(name, &len);
   start = MPI_Wtime();

   printf("Hello World! I am %d of %d on %s\n", rank, size, name);
   fflush(stdout);
   Sleep(1000);
   MPI_Barrier(MPI_COMM_WORLD);
   end = MPI_Wtime();

   MPI_Finalize();

   if (rank == 0)
   {
        runtime = end - start;
        printf("Start time = %d\n", start);
        printf("End time = %d\n\n", end);
        printf("Runtime = %d\n", runtime);
   }

   system("pause");
   return 0;
}

我得到这样的输出:

  

Hello World!我在测试中是0的1   开始时间= 505400631
  结束时间= 521122106

     

运行时间= -1878261760
  按任意键继续 。 。 。

我希望得到秒,但我得到了这些长输出。知道为什么吗?

1 个答案:

答案 0 :(得分:2)

MPI_Wtime()返回doublestartendruntime为双倍。通过执行printf("Start time = %d\n", start);,您将start打印为整数。

我使用gcc(并将Sleep <Windows.h>替换为sleep的{​​{1}})来遵守您的代码,并出现以下警告:

<unistd.h>

解决方案是将这些数字打印为main.c:34:9: attention : format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘double’ [-Wformat]

double

printf("Runtime = %g\n", runtime); 不是必需的,我认为最好在打印操作后将system("pause")移到程序的最后。