idamnjanovic@60: /************************************************************************** idamnjanovic@60: * idamnjanovic@60: * File name: ompprof.h idamnjanovic@60: * idamnjanovic@60: * Ron Rubinstein idamnjanovic@60: * Computer Science Department idamnjanovic@60: * Technion, Haifa 32000 Israel idamnjanovic@60: * ronrubin@cs idamnjanovic@60: * idamnjanovic@60: * Last Updated: 18.8.2009 idamnjanovic@60: * idamnjanovic@60: * Collection of definitions and functions for profiling the OMP method. idamnjanovic@60: * idamnjanovic@60: *************************************************************************/ idamnjanovic@60: idamnjanovic@60: idamnjanovic@60: #ifndef __OMP_PROF_H__ idamnjanovic@60: #define __OMP_PROF_H__ idamnjanovic@60: idamnjanovic@60: #include "mex.h" idamnjanovic@60: #include idamnjanovic@60: idamnjanovic@60: idamnjanovic@60: idamnjanovic@60: /************************************************************************** idamnjanovic@60: * idamnjanovic@60: * Constants and data types. idamnjanovic@60: * idamnjanovic@60: **************************************************************************/ idamnjanovic@60: idamnjanovic@60: idamnjanovic@60: /* constants denoting the various parts of the algorithm */ idamnjanovic@60: idamnjanovic@60: enum { DtX_TIME, XtX_TIME, DtR_TIME, MAXABS_TIME, DtD_TIME, LCHOL_TIME, COMPCOEF_TIME, idamnjanovic@60: UPDATE_DtR_TIME, UPDATE_RESNORM_TIME, COMPRES_TIME, INDEXSORT_TIME }; idamnjanovic@60: idamnjanovic@60: idamnjanovic@60: idamnjanovic@60: /* profiling data container with counters for each part of the algorithm */ idamnjanovic@60: idamnjanovic@60: typedef struct profdata idamnjanovic@60: { idamnjanovic@60: clock_t prevtime; /* the time when last initialization/call to addproftime() was performed */ idamnjanovic@60: idamnjanovic@60: clock_t DtX_time; idamnjanovic@60: clock_t XtX_time; idamnjanovic@60: clock_t DtR_time; idamnjanovic@60: clock_t maxabs_time; idamnjanovic@60: clock_t DtD_time; idamnjanovic@60: clock_t Lchol_time; idamnjanovic@60: clock_t compcoef_time; idamnjanovic@60: clock_t update_DtR_time; idamnjanovic@60: clock_t update_resnorm_time; idamnjanovic@60: clock_t compres_time; idamnjanovic@60: clock_t indexsort_time; idamnjanovic@60: idamnjanovic@60: /* flags indicating whether profiling data was gathered */ idamnjanovic@60: int DtX_time_counted; idamnjanovic@60: int XtX_time_counted; idamnjanovic@60: int DtR_time_counted; idamnjanovic@60: int DtD_time_counted; idamnjanovic@60: int update_DtR_time_counted; idamnjanovic@60: int resnorm_time_counted; idamnjanovic@60: int compres_time_counted; idamnjanovic@60: int indexsort_time_counted; idamnjanovic@60: idamnjanovic@60: } profdata; idamnjanovic@60: idamnjanovic@60: idamnjanovic@60: idamnjanovic@60: /************************************************************************** idamnjanovic@60: * idamnjanovic@60: * Initialize a profdata structure, zero all counters, and start its timer. idamnjanovic@60: * idamnjanovic@60: **************************************************************************/ idamnjanovic@60: void initprofdata(profdata *pd); idamnjanovic@60: idamnjanovic@60: idamnjanovic@60: /************************************************************************** idamnjanovic@60: * idamnjanovic@60: * Add elapsed time from last call to addproftime(), or from initialization idamnjanovic@60: * of profdata, to the counter specified by comptype. comptype must be one idamnjanovic@60: * of the constants in the enumeration above. idamnjanovic@60: * idamnjanovic@60: **************************************************************************/ idamnjanovic@60: void addproftime(profdata *pd, int comptype); idamnjanovic@60: idamnjanovic@60: idamnjanovic@60: /************************************************************************** idamnjanovic@60: * idamnjanovic@60: * Print the current contents of the counters in profdata. idamnjanovic@60: * idamnjanovic@60: * Parameters: idamnjanovic@60: * pd - the profdata to print idamnjanovic@60: * erroromp - indicates whether error-based (nonzero) or sparsity-based (zero) idamnjanovic@60: * omp was performed. idamnjanovic@60: * batchomp - indicates whether batch-omp (nonzero) or omp-cholesky (zero) idamnjanovic@60: * omp was performed. idamnjanovic@60: * signum - number of signals processed by omp idamnjanovic@60: * idamnjanovic@60: **************************************************************************/ idamnjanovic@60: void printprofinfo(profdata *pd, int erroromp, int batchomp, int signum); idamnjanovic@60: idamnjanovic@60: idamnjanovic@60: #endif idamnjanovic@60: