我尝试使用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
按任意键继续 。 。 。
我希望得到秒,但我得到了这些长输出。知道为什么吗?
答案 0 :(得分:2)
MPI_Wtime()
返回double
,start
,end
和runtime
为双倍。通过执行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")
移到程序的最后。