3 * This source code is part of
7 * GROningen MAchine for Chemical Simulations
9 * Written by David van der Spoel, Erik Lindahl, Berk Hess, and others.
10 * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
11 * Copyright (c) 2001-2008, The GROMACS development team,
12 * check out http://www.gromacs.org for more information.
14 * This program is free software; you can redistribute it and/or
15 * modify it under the terms of the GNU General Public License
16 * as published by the Free Software Foundation; either version 2
17 * of the License, or (at your option) any later version.
19 * If you want to redistribute modifications, please consider that
20 * scientific software is very special. Version control is crucial -
21 * bugs must be traceable. We will be happy to consider code for
22 * inclusion in the official distribution, but derived work must not
23 * be called official GROMACS. Details are found in the README & COPYING
24 * files - if they are missing, get the official version at www.gromacs.org.
26 * To help us fund GROMACS development, we humbly ask that you cite
27 * the papers on the package - you can find them in the top README file.
29 * For more info, check our website at http://www.gromacs.org
32 * Gallium Rubidium Oxygen Manganese Argon Carbon Silicon
36 #ifndef _gmx_wallcycle_h
37 #define _gmx_wallcycle_h
46 enum { ewcRUN
, ewcSTEP
, ewcPPDURINGPME
, ewcDOMDEC
, ewcDDCOMMLOAD
, ewcDDCOMMBOUND
, ewcVSITECONSTR
, ewcPP_PMESENDX
, ewcMOVEX
, ewcNS
, ewcGB
, ewcFORCE
, ewcMOVEF
, ewcPMEMESH
, ewcPME_REDISTXF
, ewcPME_SPREADGATHER
, ewcPME_FFT
, ewcPME_SOLVE
, ewcPMEWAITCOMM
, ewcPP_PMEWAITRECVF
, ewcVSITESPREAD
, ewcTRAJ
, ewcUPDATE
, ewcCONSTR
, ewcMoveE
, ewcTEST
, ewcNR
};
48 extern bool wallcycle_have_counter(void);
49 /* Returns if cycle counting is supported */
51 extern gmx_wallcycle_t
wallcycle_init(FILE *fplog
,int resetstep
,t_commrec
*cr
);
52 /* Returns the wall cycle structure.
53 * Returns NULL when cycle counting is not supported.
56 extern void wallcycle_start(gmx_wallcycle_t wc
, int ewc
);
57 /* Set the start cycle count for ewc */
59 extern double wallcycle_stop(gmx_wallcycle_t wc
, int ewc
);
60 /* Stop the cycle count for ewc, returns the last cycle count */
62 extern void wallcycle_reset_all(gmx_wallcycle_t wc
);
63 /* Resets all cycle counters to zero */
65 extern void wallcycle_sum(t_commrec
*cr
, gmx_wallcycle_t wc
,double cycles
[]);
66 /* Sum the cycles over the nodes in cr->mpi_comm_mysim */
68 extern void wallcycle_print(FILE *fplog
, int nnodes
, int npme
, double realtime
,
69 gmx_wallcycle_t wc
, double cycles
[]);
70 /* Print the cycle and time accounting */
72 extern gmx_large_int_t
wcycle_get_reset_counters(gmx_wallcycle_t wc
);
73 /* Return reset_counters from wc struct */
75 extern void wcycle_set_reset_counters(gmx_wallcycle_t wc
, gmx_large_int_t reset_counters
);
76 /* Set reset_counters */
82 #endif /* _gmx_wallcycle_h */