我正在尝试测量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}}。
这些值不是秒!如何将它们转换为秒?
答案 0 :(得分:3)
这应该可以解决问题:
printf("Runtime=%f\n", end-start);
您的start
和end
变量是双倍的,因此end - start
的结果也是双精度值。您需要使用printf
中的格式说明符来更正,%f
表示浮点值。使用d
会将结果解释为整数,而您只会得到垃圾。
答案 1 :(得分:1)
莫尔的回答是正确的。我只想补充一点,MPI_Wtime不会返回经过秒的整数计数。它返回一个浮点值 - 你知道这是因为你将start和end声明为double,但是当你设置printf说明符时可能会忘记。