source: CIVL/examples/mpi-omp/AMG2013/utilities/timing.h

main
Last change on this file was ea777aa, checked in by Alex Wilton <awilton@…>, 3 years ago

Moved examples, include, build_default.properties, common.xml, and README out from dev.civl.com into the root of the repo.

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@5704 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 4.6 KB
Line 
1/*BHEADER**********************************************************************
2 * Copyright (c) 2008, Lawrence Livermore National Security, LLC.
3 * Produced at the Lawrence Livermore National Laboratory.
4 * This file is part of HYPRE. See file COPYRIGHT for details.
5 *
6 * HYPRE is free software; you can redistribute it and/or modify it under the
7 * terms of the GNU Lesser General Public License (as published by the Free
8 * Software Foundation) version 2.1 dated February 1999.
9 *
10 * $Revision: 2.4 $
11 ***********************************************************************EHEADER*/
12
13
14/******************************************************************************
15 *
16 * Header file for doing timing
17 *
18 *****************************************************************************/
19
20#ifndef HYPRE_TIMING_HEADER
21#define HYPRE_TIMING_HEADER
22
23#include <stdlib.h>
24#include <stdio.h>
25#include <string.h>
26
27#ifdef __cplusplus
28extern "C" {
29#endif
30
31/*--------------------------------------------------------------------------
32 * Prototypes for low-level timing routines
33 *--------------------------------------------------------------------------*/
34
35/* timer.c */
36double time_getWallclockSeconds( void );
37double time_getCPUSeconds( void );
38double time_get_wallclock_seconds_( void );
39double time_get_cpu_seconds_( void );
40
41/*--------------------------------------------------------------------------
42 * With timing off
43 *--------------------------------------------------------------------------*/
44
45#ifndef HYPRE_TIMING
46
47#define hypre_InitializeTiming(name) 0
48#define hypre_IncFLOPCount(inc)
49#define hypre_BeginTiming(i)
50#define hypre_EndTiming(i)
51#define hypre_PrintTiming(heading, wall_time_ptr, comm)
52#define hypre_FinalizeTiming(index)
53
54/*--------------------------------------------------------------------------
55 * With timing on
56 *--------------------------------------------------------------------------*/
57
58#else
59
60/*-------------------------------------------------------
61 * Global timing structure
62 *-------------------------------------------------------*/
63
64typedef struct
65{
66 double *wall_time;
67 double *cpu_time;
68 double *flops;
69 char **name;
70 int *state; /* boolean flag to allow for recursive timing */
71 int *num_regs; /* count of how many times a name is registered */
72
73 int num_names;
74 int size;
75
76 double wall_count;
77 double CPU_count;
78 double FLOP_count;
79
80} hypre_TimingType;
81
82#ifdef HYPRE_TIMING_GLOBALS
83hypre_TimingType *hypre_global_timing = NULL;
84#else
85extern hypre_TimingType *hypre_global_timing;
86#endif
87
88/*-------------------------------------------------------
89 * Accessor functions
90 *-------------------------------------------------------*/
91
92#ifndef HYPRE_USE_PTHREADS
93#define hypre_TimingWallTime(i) (hypre_global_timing -> wall_time[(i)])
94#define hypre_TimingCPUTime(i) (hypre_global_timing -> cpu_time[(i)])
95#define hypre_TimingFLOPS(i) (hypre_global_timing -> flops[(i)])
96#define hypre_TimingName(i) (hypre_global_timing -> name[(i)])
97#define hypre_TimingState(i) (hypre_global_timing -> state[(i)])
98#define hypre_TimingNumRegs(i) (hypre_global_timing -> num_regs[(i)])
99#define hypre_TimingWallCount (hypre_global_timing -> wall_count)
100#define hypre_TimingCPUCount (hypre_global_timing -> CPU_count)
101#define hypre_TimingFLOPCount (hypre_global_timing -> FLOP_count)
102#else
103#define hypre_TimingWallTime(i) (hypre_global_timing[threadid].wall_time[(i)])
104#define hypre_TimingCPUTime(i) (hypre_global_timing[threadid].cpu_time[(i)])
105#define hypre_TimingFLOPS(i) (hypre_global_timing[threadid].flops[(i)])
106#define hypre_TimingName(i) (hypre_global_timing[threadid].name[(i)])
107#define hypre_TimingState(i) (hypre_global_timing[threadid].state[(i)])
108#define hypre_TimingNumRegs(i) (hypre_global_timing[threadid].num_regs[(i)])
109#define hypre_TimingWallCount (hypre_global_timing[threadid].wall_count)
110#define hypre_TimingCPUCount (hypre_global_timing[threadid].CPU_count)
111#define hypre_TimingFLOPCount (hypre_global_timing[threadid].FLOP_count)
112#define hypre_TimingAllFLOPS (hypre_global_timing[hypre_NumThreads].FLOP_count)
113#endif
114
115/*-------------------------------------------------------
116 * Prototypes
117 *-------------------------------------------------------*/
118
119/* timing.c */
120int hypre_InitializeTiming( const char *name );
121int hypre_FinalizeTiming( int time_index );
122int hypre_IncFLOPCount( int inc );
123int hypre_BeginTiming( int time_index );
124int hypre_EndTiming( int time_index );
125int hypre_ClearTiming( void );
126int hypre_PrintTiming( const char *heading , double *wall_time_ptr, MPI_Comm comm );
127
128#endif
129
130#ifdef __cplusplus
131}
132#endif
133
134#endif
Note: See TracBrowser for help on using the repository browser.