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之后调用它的结果是未定义的。

另请参阅