Skip to content

Commit e72b4e6

Browse files
committed
MPI_Wtick/MPI_Wtime: use opal_clock_get*() wrappers
Update MPI_Wtick and MPI_Wtime to use the portable wrappers opal_clock_gettime() and opal_clock_getres(). Signed-off-by: Jeff Squyres <[email protected]>
1 parent c74f80a commit e72b4e6

File tree

2 files changed

+13
-63
lines changed

2 files changed

+13
-63
lines changed

ompi/mpi/c/wtick.c

+6-28
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* University of Stuttgart. All rights reserved.
1010
* Copyright (c) 2004-2005 The Regents of the University of California.
1111
* All rights reserved.
12-
* Copyright (c) 2007-2014 Cisco Systems, Inc. All rights reserved.
12+
* Copyright (c) 2007-2022 Cisco Systems, Inc. All rights reserved
1313
* Copyright (c) 2015-2016 Research Organization for Information Science
1414
* and Technology (RIST). All rights reserved.
1515
* Copyright (c) 2017 IBM Corporation. All rights reserved.
@@ -31,10 +31,11 @@
3131
#include <time.h>
3232
#endif
3333

34-
#include MCA_timer_IMPLEMENTATION_HEADER
3534
#include "ompi/mpi/c/bindings.h"
3635
#include "ompi/runtime/mpiruntime.h"
3736

37+
#include "opal/util/clock_gettime.h"
38+
3839
#if OMPI_BUILD_MPI_PROFILING
3940
#if OPAL_HAVE_WEAK_SYMBOLS
4041
#pragma weak MPI_Wtick = PMPI_Wtick
@@ -44,38 +45,15 @@
4445

4546
double MPI_Wtick(void)
4647
{
47-
/*
48-
* See https://github.com/open-mpi/ompi/issues/3003
49-
* to get an idea what's going on here.
50-
*/
51-
#if 0
52-
#if OPAL_TIMER_CYCLE_NATIVE
53-
{
54-
opal_timer_t freq = opal_timer_base_get_freq();
55-
if (0 == freq) {
56-
/* That should never happen, but if it does, return a bogus value
57-
* rather than crashing with a division by zero */
58-
return (double)0.0;
59-
}
60-
return (double)1.0 / (double)freq;
61-
}
62-
#elif OPAL_TIMER_USEC_NATIVE
63-
return 0.000001;
64-
#endif
65-
#else
66-
#if defined(__linux__) && OPAL_HAVE_CLOCK_GETTIME
48+
// We intentionally don't use the OPAL timer framework here. See
49+
// https://github.com/open-mpi/ompi/issues/3003 for more details.
6750
struct timespec spec;
6851
double wtick = 0.0;
69-
if (0 == clock_getres(CLOCK_MONOTONIC, &spec)){
52+
if (0 == opal_clock_getres(&spec)){
7053
wtick = spec.tv_sec + spec.tv_nsec * 1.0e-09;
7154
} else {
7255
/* guess */
7356
wtick = 1.0e-09;
7457
}
7558
return wtick;
76-
#else
77-
/* Otherwise, we already return usec precision. */
78-
return 0.000001;
79-
#endif
80-
#endif
8159
}

ompi/mpi/c/wtime.c

+7-35
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* University of Stuttgart. All rights reserved.
1010
* Copyright (c) 2004-2005 The Regents of the University of California.
1111
* All rights reserved.
12-
* Copyright (c) 2006-2014 Cisco Systems, Inc. All rights reserved.
12+
* Copyright (c) 2006-2022 Cisco Systems, Inc. All rights reserved
1313
* Copyright (c) 2015 Research Organization for Information Science
1414
* and Technology (RIST). All rights reserved.
1515
* Copyright (c) 2017 IBM Corporation. All rights reserved.
@@ -31,11 +31,12 @@
3131
#include <time.h>
3232
#endif /* HAVE_TIME_H */
3333

34-
#include MCA_timer_IMPLEMENTATION_HEADER
3534
#include "ompi/mpi/c/bindings.h"
3635
#include "ompi/runtime/mpiruntime.h"
3736
#include "ompi/runtime/ompi_spc.h"
3837

38+
#include "opal/util/clock_gettime.h"
39+
3940
#if OMPI_BUILD_MPI_PROFILING
4041
#if OPAL_HAVE_WEAK_SYMBOLS
4142
#pragma weak MPI_Wtime = PMPI_Wtime
@@ -46,17 +47,9 @@
4647
* and accuracy of the user visible timer.
4748
* More info: https://github.com/mpi-forum/mpi-issues/issues/77#issuecomment-369663119
4849
*/
49-
#if defined(__linux__) && OPAL_HAVE_CLOCK_GETTIME
5050
struct timespec ompi_wtime_time_origin = {.tv_sec = 0};
51-
#else
52-
struct timeval ompi_wtime_time_origin = {.tv_sec = 0};
53-
#endif
5451
#else /* OMPI_BUILD_MPI_PROFILING */
55-
#if defined(__linux__) && OPAL_HAVE_CLOCK_GETTIME
5652
extern struct timespec ompi_wtime_time_origin;
57-
#else
58-
extern struct timeval ompi_wtime_time_origin;
59-
#endif
6053
#endif
6154

6255
double MPI_Wtime(void)
@@ -65,36 +58,15 @@ double MPI_Wtime(void)
6558

6659
SPC_RECORD(OMPI_SPC_WTIME, 1);
6760

68-
/*
69-
* See https://github.com/open-mpi/ompi/issues/3003 to find out
70-
* what's happening here.
71-
*/
72-
#if 0
73-
#if OPAL_TIMER_CYCLE_NATIVE
74-
wtime = ((double) opal_timer_base_get_cycles()) / opal_timer_base_get_freq();
75-
#elif OPAL_TIMER_USEC_NATIVE
76-
wtime = ((double) opal_timer_base_get_usec()) / 1000000.0;
77-
#endif
78-
#else
79-
#if defined(__linux__) && OPAL_HAVE_CLOCK_GETTIME
61+
// We intentionally don't use the OPAL timer framework here. See
62+
// https://github.com/open-mpi/ompi/issues/3003 for more details.
8063
struct timespec tp;
81-
(void) clock_gettime(CLOCK_MONOTONIC, &tp);
82-
if( OPAL_UNLIKELY(0 == ompi_wtime_time_origin.tv_sec) ) {
64+
(void) opal_clock_gettime(&tp);
65+
if (OPAL_UNLIKELY(0 == ompi_wtime_time_origin.tv_sec)) {
8366
ompi_wtime_time_origin = tp;
8467
}
8568
wtime = (double)(tp.tv_nsec - ompi_wtime_time_origin.tv_nsec)/1.0e+9;
8669
wtime += (tp.tv_sec - ompi_wtime_time_origin.tv_sec);
87-
#else
88-
/* Fall back to gettimeofday() if we have nothing else */
89-
struct timeval tv;
90-
gettimeofday(&tv, NULL);
91-
if( OPAL_UNLIKELY(0 == ompi_wtime_time_origin.tv_sec) ) {
92-
ompi_wtime_time_origin = tv;
93-
}
94-
wtime = (double)(tv.tv_usec - ompi_wtime_time_origin.tv_usec) / 1.0e+6;
95-
wtime += (tv.tv_sec - ompi_wtime_time_origin.tv_sec);
96-
#endif
97-
#endif
9870

9971
return wtime;
10072
}

0 commit comments

Comments
 (0)