406787048bf5e67c8e642ce615fb5069bb11f5d1
[alexxy/gromacs.git] / src / gromacs / timing / walltime_accounting.h
1 /*
2  *
3  *                This source code is part of
4  *
5  *                 G   R   O   M   A   C   S
6  *
7  *          GROningen MAchine for Chemical Simulations
8  *
9  *                        VERSION 3.2.0
10  * Written by David van der Spoel, Erik Lindahl, Berk Hess, and others.
11  * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
12  * Copyright (c) 2001-2004, The GROMACS development team,
13  * check out http://www.gromacs.org for more information.
14
15  * This program is free software; you can redistribute it and/or
16  * modify it under the terms of the GNU General Public License
17  * as published by the Free Software Foundation; either version 2
18  * of the License, or (at your option) any later version.
19  *
20  * If you want to redistribute modifications, please consider that
21  * scientific software is very special. Version control is crucial -
22  * bugs must be traceable. We will be happy to consider code for
23  * inclusion in the official distribution, but derived work must not
24  * be called official GROMACS. Details are found in the README & COPYING
25  * files - if they are missing, get the official version at www.gromacs.org.
26  *
27  * To help us fund GROMACS development, we humbly ask that you cite
28  * the papers on the package - you can find them in the top README file.
29  *
30  * For more info, check our website at http://www.gromacs.org
31  *
32  * And Hey:
33  * Gromacs Runs On Most of All Computer Systems
34  */
35
36 #ifndef GMX_TIMING_WALLTIME_ACCOUNTING_H
37 #define GMX_TIMING_WALLTIME_ACCOUNTING_H
38
39 #include "../legacyheaders/types/simple.h"
40
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44
45 #if 0
46 }
47 #endif
48
49 /*! Contains per-process and per-thread data about elapsed wall-clock
50  *  times and integration steps performed. */
51 typedef struct gmx_walltime_accounting *gmx_walltime_accounting_t;
52
53 //! Constructor
54 gmx_walltime_accounting_t
55 walltime_accounting_init(int numOpenMPThreads);
56
57 //! Destructor
58 void
59 walltime_accounting_destroy(gmx_walltime_accounting_t walltime_accounting);
60
61 /*! Record initial time stamps, e.g. at run end or counter
62  * re-initalization time */
63 void
64 walltime_accounting_start(gmx_walltime_accounting_t walltime_accounting);
65
66 /*! Measure and cache the elapsed wall-clock time since
67  * walltime_accounting_start */
68 void
69 walltime_accounting_end(gmx_walltime_accounting_t walltime_accounting);
70
71 /*! Measure and return the elapsed wall-clock time since
72  * walltime_accounting_start */
73 double
74 walltime_accounting_get_current_elapsed_time(gmx_walltime_accounting_t walltime_accounting);
75
76 //! Get the cached wall-clock time for this node
77 double
78 walltime_accounting_get_elapsed_time(gmx_walltime_accounting_t walltime_accounting);
79
80 //! Get the cached wall-clock time, multiplied by the number of OpenMP threads
81 double
82 walltime_accounting_get_elapsed_time_over_all_threads(gmx_walltime_accounting_t walltime_accounting);
83
84 //! Get the cached initial time stamp for this node
85 double
86 walltime_accounting_get_start_time_stamp(gmx_walltime_accounting_t walltime_accounting);
87
88 //! Get the number of integration steps done
89 double
90 walltime_accounting_get_nsteps_done(gmx_walltime_accounting_t walltime_accounting);
91
92 /*! Set the number of integration steps done
93  *
94  * TODO consider whether this should get done in walltime_accounting_end */
95 void
96 walltime_accounting_set_nsteps_done(gmx_walltime_accounting_t   walltime_accounting,
97                                     gmx_large_int_t             nsteps_done);
98
99 /*! \brief Calls system timing routines (e.g. clock_gettime) to get the
100  * (fractional) number of seconds elapsed since the epoch.
101  *
102  * Resolution is implementation-dependent, but typically nanoseconds
103  * or microseconds. */
104 double gmx_gettime();
105
106 #ifdef __cplusplus
107 }
108 #endif
109
110 #endif  /* GMX_TIMING_WALLTIME_ACCOUNTING_H */