为什么我们使用MPI_Wtime()函数而不是time()函数?

问题描述 投票:0回答:1

由于C中已经有几个定时器,如

time()
clock()
,我们可以使用C库函数来判断一段代码已经运行了多长时间,例如

start_time=time(NULL);
{...}
end_time=time(NULL);
walltime=end_time-start_time;

如果我想确定每个处理器运行同一段代码所需的实际时间, 我可以使用上面的代码而不是用

time()
替换
MPI_Wtime()
吗?如果方法不对的话 为什么我应该在 MPI 代码中使用
MPI_Wtime()
。我写MPI代码时的
time()
MPI_Wtime()
有什么区别吗?

顺便说一句,我不知道

time()
MPI_Wtime()
之间的区别,以及为什么
MPI_Wtime()
存在,因为我们在 C 标准库中已经有一些定时器了。

c mpi time-measurement
1个回答
0
投票

MPI 旨在支持 C、C++ 和 Fortran。它是在 20 世纪 90 年代创建的,当时 Fortran 还没有对计时器的标准支持(有关特定于实现的选项的一些示例,请参阅 LAPACK 源代码)。

尽管

gettimeofday
存在,但由于其工作方式的要求,它通常非常慢。 MPI 不必提供相同的行为并且可以更快。正如 Gilles 所指出的,
MPI_Wtime
返回一个
double
,这通常是用户想要的,而不是包含秒和微秒作为整数的
struct

例如,在 IBM Blue Gene/P 系统上,

MPI_Wtime()
从寄存器读取系统时钟。开销为 220 个周期。相比之下,OpenMP 中的
omp_get_wtime()
调用了
gettimeofday
并且开销高出多个数量级(直到我提交了该错误并且 IBM 修复了它)。

顺便说一句,

MPI_Wtime
不会出现time_t那样的Y2038问题(
https://en.wikipedia.org/wiki/Year_2038_problem
),直到他们通过破坏ABI来修复它。

© www.soinside.com 2019 - 2024. All rights reserved.