/******************************************************************************* * This file is part of SWIFT. * Copyright (c) 2012 Pedro Gonnet (pedro.gonnet@durham.ac.uk) * Matthieu Schaller (schaller@strw.leidenuniv.nl) * 2016 John A. Regan (john.a.regan@durham.ac.uk) * Tom Theuns (tom.theuns@durham.ac.uk) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * ******************************************************************************/ #ifndef SWIFT_TIMERS_H #define SWIFT_TIMERS_H /* Config parameters. */ #include /* Local includes. */ #include "atomic.h" #include "cycle.h" #include "inline.h" /** * @brief The timers themselves. * * If you modify this list, be sure to change timers_names in timers.c as * well! **/ enum { timer_none = 0, timer_prepare, timer_init, timer_init_grav, timer_drift_part, timer_drift_gpart, timer_drift_spart, timer_drift_bpart, timer_kick1, timer_kick2, timer_timestep, timer_end_hydro_force, timer_end_grav_force, timer_dosort, timer_doself_density, timer_doself_gradient, timer_doself_force, timer_doself_limiter, timer_doself_stars_density, timer_doself_stars_feedback, timer_doself_bh_density, timer_doself_bh_swallow, timer_doself_bh_feedback, timer_doself_grav_pp, timer_doself_sink_density, timer_doself_sink_swallow, timer_dopair_density, timer_dopair_gradient, timer_dopair_force, timer_dopair_limiter, timer_dopair_stars_density, timer_dopair_stars_feedback, timer_dopair_bh_density, timer_dopair_bh_swallow, timer_dopair_bh_feedback, timer_dopair_grav_mm, timer_dopair_grav_pp, timer_dopair_sink_density, timer_dopair_sink_swallow, timer_dograv_external, timer_dograv_down, timer_dograv_mesh, timer_dograv_top_level, timer_dograv_long_range, timer_dosub_self_density, timer_dosub_self_gradient, timer_dosub_self_force, timer_dosub_self_limiter, timer_dosub_self_stars_density, timer_dosub_self_stars_feedback, timer_dosub_self_bh_density, timer_dosub_self_bh_swallow, timer_dosub_self_bh_feedback, timer_dosub_self_grav, timer_dosub_self_sink_density, timer_dosub_self_sink_swallow, timer_dosub_pair_density, timer_dosub_pair_gradient, timer_dosub_pair_force, timer_dosub_pair_limiter, timer_dosub_pair_stars_density, timer_dosub_pair_stars_feedback, timer_dosub_pair_bh_density, timer_dosub_pair_bh_swallow, timer_dosub_pair_bh_feedback, timer_dosub_pair_grav, timer_dosub_pair_sink_density, timer_dosub_pair_sink_swallow, timer_doself_subset, timer_dopair_subset, timer_dopair_subset_naive, timer_dosub_subset, timer_do_ghost, timer_do_extra_ghost, timer_do_stars_ghost, timer_do_black_holes_ghost, timer_do_sinks_ghost, timer_dorecv_part, timer_dorecv_gpart, timer_dorecv_spart, timer_dorecv_bpart, timer_do_limiter, timer_do_cooling, timer_do_star_formation, timer_do_star_evol, timer_gettask, timer_qget, timer_qsteal, timer_locktree, timer_runners, timer_step, timer_csds, timer_do_stars_sort, timer_do_stars_resort, timer_fof_self, timer_fof_pair, timer_drift_sink, timer_do_rt_ghost1, timer_do_rt_ghost2, timer_doself_rt_gradient, timer_dopair_rt_gradient, timer_dosub_self_rt_gradient, timer_dosub_pair_rt_gradient, timer_doself_rt_transport, timer_dopair_rt_transport, timer_dosub_self_rt_transport, timer_dosub_pair_rt_transport, timer_do_rt_tchem, timer_do_rt_advance_cell_time, timer_do_rt_collect_times, timer_do_sync, timer_neutrino_weighting, timer_count, }; /* The timers. */ extern ticks timers[timer_count]; /* The timer names. */ extern const char *timers_names[]; /* Define the timer macros. */ #ifdef SWIFT_USE_TIMERS #define TIMER_TIC const ticks tic = getticks(); #define TIMER_TOC(t) timers_toc(t, tic) #define TIMER_TIC2 const ticks tic2 = getticks(); #define TIMER_TOC2(t) timers_toc(t, tic2) INLINE static ticks timers_toc(unsigned int t, ticks tic) { const ticks d = (getticks() - tic); atomic_add(&timers[t], d); return d; } #else #define TIMER_TIC #define TIMER_TOC(t) (void)0 #define TIMER_TIC2 #define TIMER_TOC2(t) (void)0 #endif /* Function prototypes. */ void timers_reset_all(void); void timers_open_file(int rank); void timers_close_file(void); void timers_print(int step); #endif /* SWIFT_TIMERS_H */