131 lines
4.3 KiB
C
131 lines
4.3 KiB
C
/*BHEADER**********************************************************************
|
|
* (c) 1997 The Regents of the University of California
|
|
*
|
|
* See the file COPYRIGHT_and_DISCLAIMER for a complete copyright
|
|
* notice, contact person, and disclaimer.
|
|
*
|
|
* $Revision$
|
|
*********************************************************************EHEADER*/
|
|
|
|
/******************************************************************************
|
|
*
|
|
* Header file for doing timing
|
|
*
|
|
*****************************************************************************/
|
|
|
|
#ifndef HYPRE_TIMING_HEADER
|
|
#define HYPRE_TIMING_HEADER
|
|
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Prototypes for low-level timing routines
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
/* timer.c */
|
|
double time_getWallclockSeconds( void );
|
|
double time_getCPUSeconds( void );
|
|
double time_get_wallclock_seconds_( void );
|
|
double time_get_cpu_seconds_( void );
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* With timing off
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
#ifndef HYPRE_TIMING
|
|
|
|
#define hypre_InitializeTiming(name) 0
|
|
#define hypre_IncFLOPCount(inc)
|
|
#define hypre_BeginTiming(i)
|
|
#define hypre_EndTiming(i)
|
|
#define hypre_PrintTiming(heading, comm)
|
|
#define hypre_FinalizeTiming(index)
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* With timing on
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
#else
|
|
|
|
/*-------------------------------------------------------
|
|
* Global timing structure
|
|
*-------------------------------------------------------*/
|
|
|
|
typedef struct
|
|
{
|
|
double *wall_time;
|
|
double *cpu_time;
|
|
double *flops;
|
|
char **name;
|
|
int *state; /* boolean flag to allow for recursive timing */
|
|
int *num_regs; /* count of how many times a name is registered */
|
|
|
|
int num_names;
|
|
int size;
|
|
|
|
double wall_count;
|
|
double CPU_count;
|
|
double FLOP_count;
|
|
|
|
} hypre_TimingType;
|
|
|
|
#ifdef HYPRE_TIMING_GLOBALS
|
|
hypre_TimingType *hypre_global_timing = NULL;
|
|
#else
|
|
extern hypre_TimingType *hypre_global_timing;
|
|
#endif
|
|
|
|
/*-------------------------------------------------------
|
|
* Accessor functions
|
|
*-------------------------------------------------------*/
|
|
|
|
#ifndef HYPRE_USE_PTHREADS
|
|
#define hypre_TimingWallTime(i) (hypre_global_timing -> wall_time[(i)])
|
|
#define hypre_TimingCPUTime(i) (hypre_global_timing -> cpu_time[(i)])
|
|
#define hypre_TimingFLOPS(i) (hypre_global_timing -> flops[(i)])
|
|
#define hypre_TimingName(i) (hypre_global_timing -> name[(i)])
|
|
#define hypre_TimingState(i) (hypre_global_timing -> state[(i)])
|
|
#define hypre_TimingNumRegs(i) (hypre_global_timing -> num_regs[(i)])
|
|
#define hypre_TimingWallCount (hypre_global_timing -> wall_count)
|
|
#define hypre_TimingCPUCount (hypre_global_timing -> CPU_count)
|
|
#define hypre_TimingFLOPCount (hypre_global_timing -> FLOP_count)
|
|
#else
|
|
#define hypre_TimingWallTime(i) (hypre_global_timing[threadid].wall_time[(i)])
|
|
#define hypre_TimingCPUTime(i) (hypre_global_timing[threadid].cpu_time[(i)])
|
|
#define hypre_TimingFLOPS(i) (hypre_global_timing[threadid].flops[(i)])
|
|
#define hypre_TimingName(i) (hypre_global_timing[threadid].name[(i)])
|
|
#define hypre_TimingState(i) (hypre_global_timing[threadid].state[(i)])
|
|
#define hypre_TimingNumRegs(i) (hypre_global_timing[threadid].num_regs[(i)])
|
|
#define hypre_TimingWallCount (hypre_global_timing[threadid].wall_count)
|
|
#define hypre_TimingCPUCount (hypre_global_timing[threadid].CPU_count)
|
|
#define hypre_TimingFLOPCount (hypre_global_timing[threadid].FLOP_count)
|
|
#define hypre_TimingAllFLOPS (hypre_global_timing[hypre_NumThreads].FLOP_count)
|
|
#endif
|
|
|
|
/*-------------------------------------------------------
|
|
* Prototypes
|
|
*-------------------------------------------------------*/
|
|
|
|
/* timing.c */
|
|
int hypre_InitializeTiming( char *name );
|
|
int hypre_FinalizeTiming( int time_index );
|
|
int hypre_IncFLOPCount( int inc );
|
|
int hypre_BeginTiming( int time_index );
|
|
int hypre_EndTiming( int time_index );
|
|
int hypre_ClearTiming( void );
|
|
int hypre_PrintTiming( char *heading , MPI_Comm comm );
|
|
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|