在Openmpi中使用MPI_Wtime()

时间:2015-08-14 10:03:38

标签: time runtime mpi

我正在尝试测量mpi程序的运行时间。我正在使用不同数量的进程运行它以便稍后比较运行时。

致电MPI_WTime()后,我致电并将MPI_Finalize()的值保存在一个值中。 在致电MPI_WTime之前,我致电MPI_Finalize并将其值保存在另一个变量中。 在MPI_WTime()之后,我减去了int main(int argc, char* argv[]){ double start, end; MPI_Init(&argc, &argv); start = MPI_Wtime(); //Do something....... end = MPI_Wtime(); MPI_Finalize(); if(rank==0){ printf("Runtime=%d\n", end-start); } } 的两个值。

我的程序如下:

41291472

这很有效。问题只是我得到的结果。不幸的是我没有秒。使用一个进程运行程序将返回如下数字:1978567624并运行带有64个进程的程序返回{{1}}。 这些值不是秒!如何将它们转换为秒?

2 个答案:

答案 0 :(得分:3)

这应该可以解决问题:

printf("Runtime=%f\n", end-start);

您的startend变量是双倍的,因此end - start的结果也是双精度值。您需要使用printf中的格式说明符来更正,%f表示浮点值。使用d会将结果解释为整数,而您只会得到垃圾。

答案 1 :(得分:1)

莫尔的回答是正确的。我只想补充一点,MPI_Wtime不会返回经过秒的整数计数。它返回一个浮点值 - 你知道这是因为你将start和end声明为double,但是当你设置printf说明符时可能会忘记。