17.2.467. MPI_Wtime
MPI_Wtime — 返回调用处理器上的已用时间。
17.2.467.1. 语法
17.2.467.1.1. C语言语法
#include <mpi.h>
double MPI_Wtime()
17.2.467.1.2. Fortran语法
USE MPI
! or the older form: INCLUDE 'mpif.h'
DOUBLE PRECISION MPI_WTIME()
17.2.467.1.3. Fortran 2008 语法
USE mpi_f08
DOUBLE PRECISION MPI_WTIME()
17.2.467.2. 返回值
自过去某个任意时间点起经过的秒数。
17.2.467.3. 描述
MPI_Wtime 返回一个以秒为单位的浮点数,表示自过去某个时间点以来经过的实际时间。
“过去的时间”在进程的生命周期内保证不会改变。如果用户偏好其他时间单位,需要自行负责将大量秒数转换为相应单位。
该函数具有可移植性(返回秒数而非"时钟周期"),支持高精度计时,且不包含冗余功能。典型用法如下:
{
double starttime, endtime;
starttime = MPI_Wtime();
.... stuff to be timed ...
endtime = MPI_Wtime();
printf("That took %f seconds\n",endtime-starttime);
}
返回的时间是调用它们的节点本地时间。不要求不同节点返回"相同"的时间。
17.2.467.4. 注意事项
布尔变量MPI_WTIME_IS_GLOBAL是一个预定义的属性键,用于指示时钟是否同步。在Open MPI中该变量没有有效值,因为无法保证时钟同步。
此函数旨在提供一个高精度的已用时间(或挂钟)计时器。有关MPI_Wtime的分辨率信息,请参阅MPI_Wtick。
在POSIX平台上,此函数可能会使用比gettimeofday()系统调用成本更低的计时器,但如果无法获取低成本高精度计时器,则会回退到gettimeofday()。可以通过ompi_info(1)命令查询Open MPI是否在您的平台上支持原生高精度计时器;查看"MPI_Wtime支持"的值(或在查看可解析输出时的"options:mpi-wtime")。如果该值为"native",则在调用MPI_Wtime时将使用可能比gettimeofday()成本更低的方法来获取时间。
例如,在支持的平台上,将使用clock_gettime()函数获取该平台支持精度的单调时钟值(如纳秒级)。
另外需要注意的是,MCA参数opal_timer_require_monotonic会影响此行为。该参数默认值为true,但如果设为false,Open MPI可能会使用更细粒度的时间机制(例如x86_64平台上的RDTSC/RDTSCP时钟周期),但在某些情况下(例如MPI进程未绑定到单个处理器核心时)不能保证其单调性。
此函数不会返回错误值。因此,在调用MPI_Init之前或MPI_Finalize之后调用它的结果是未定义的。
另请参阅