3 * This source code is part of
7 * GROningen MAchine for Chemical Simulations
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.
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.
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.
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.
30 * For more info, check our website at http://www.gromacs.org
33 * Gromacs Runs On Most of All Computer Systems
36 #ifndef GMX_TIMING_WALLTIME_ACCOUNTING_H
37 #define GMX_TIMING_WALLTIME_ACCOUNTING_H
39 #include "../legacyheaders/types/simple.h"
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;
54 gmx_walltime_accounting_t
55 walltime_accounting_init(int numOpenMPThreads);
59 walltime_accounting_destroy(gmx_walltime_accounting_t walltime_accounting);
61 /*! Record initial time stamps, e.g. at run end or counter
62 * re-initalization time */
64 walltime_accounting_start(gmx_walltime_accounting_t walltime_accounting);
66 /*! Measure and cache the elapsed wall-clock time since
67 * walltime_accounting_start */
69 walltime_accounting_end(gmx_walltime_accounting_t walltime_accounting);
71 /*! Measure and return the elapsed wall-clock time since
72 * walltime_accounting_start */
74 walltime_accounting_get_current_elapsed_time(gmx_walltime_accounting_t walltime_accounting);
76 //! Get the cached wall-clock time for this node
78 walltime_accounting_get_elapsed_time(gmx_walltime_accounting_t walltime_accounting);
80 //! Get the cached wall-clock time, multiplied by the number of OpenMP threads
82 walltime_accounting_get_elapsed_time_over_all_threads(gmx_walltime_accounting_t walltime_accounting);
84 //! Get the cached initial time stamp for this node
86 walltime_accounting_get_start_time_stamp(gmx_walltime_accounting_t walltime_accounting);
88 //! Get the number of integration steps done
90 walltime_accounting_get_nsteps_done(gmx_walltime_accounting_t walltime_accounting);
92 /*! Set the number of integration steps done
94 * TODO consider whether this should get done in walltime_accounting_end */
96 walltime_accounting_set_nsteps_done(gmx_walltime_accounting_t walltime_accounting,
97 gmx_large_int_t nsteps_done);
99 /*! \brief Calls system timing routines (e.g. clock_gettime) to get the
100 * (fractional) number of seconds elapsed since the epoch.
102 * Resolution is implementation-dependent, but typically nanoseconds
103 * or microseconds. */
104 double gmx_gettime();
110 #endif /* GMX_TIMING_WALLTIME_ACCOUNTING_H */