dsdplog.c

Go to the documentation of this file.
00001 #include "dsdpsys.h"
00002 #include <stdio.h>
00003 #include <stdlib.h>
00004 
00005 #define DSDP_MAX_EVENT_NAME_LENGTH 50
00006 #define DSDP_MAX_EVENTS            30
00007 
00012 FILE *dsdpoutputfile;
00013 
00014 typedef struct {
00015   int counter;
00016   double begintime;
00017   double totaltime;
00018   char ename[DSDP_MAX_EVENT_NAME_LENGTH];
00019 } EventInfo;
00020 
00021 
00022 typedef struct{
00023   EventInfo event[DSDP_MAX_EVENTS];
00024   int nevents;
00025   int neventsmax;
00026   double time0;
00027 } EventLog;
00028 
00029 static EventLog eventlog;
00030 
00031 
00032 #undef __FUNCT__
00033 #define __FUNCT__ "DSDPEventLogBegin"
00034 int DSDPEventLogBegin(int eventid){
00035   double tt;
00036   DSDPTime(&tt);
00037   if (eventid<=0){return 0;}
00038   if (eventlog.event[eventid].begintime!=0 && eventid!=DSDP_MAX_EVENTS-1){
00039     DSDPPrintf("Timing error: id: %d %s.  Call begin without calling end.%4.4e\n",eventid,eventlog.event[eventid].ename,eventlog.event[eventid].begintime);
00040   };
00041   eventlog.event[eventid].begintime=tt;
00042   eventlog.event[eventid].counter++;
00043   return 0;
00044 }
00045 
00046 #undef __FUNCT__
00047 #define __FUNCT__ "DSDPEventLogEnd"
00048 int DSDPEventLogEnd(int eventid){
00049   double tt;
00050   DSDPTime(&tt);
00051   if (eventid<=0){return 0;}
00052   tt=tt-eventlog.event[eventid].begintime;
00053   eventlog.event[eventid].totaltime+=tt;
00054   eventlog.event[eventid].begintime=0;
00055   return 0;
00056 }
00057 
00058 #undef __FUNCT__
00059 #define __FUNCT__ "DSDPEventLogRegister"
00060 int DSDPEventLogRegister(const char *ename, int *eventid){
00061   int id;
00062   id=eventlog.nevents;
00063   if (id<0 || id>=DSDP_MAX_EVENTS){ *eventid=DSDP_MAX_EVENTS-1;return 0;}
00064   eventlog.event[id].begintime=0;
00065   eventlog.event[id].totaltime=0;
00066   eventlog.event[id].counter=0;
00067   strncpy(eventlog.event[id].ename,ename,DSDP_MAX_EVENT_NAME_LENGTH-1);
00068   eventlog.nevents++;
00069   *eventid=id;
00070   return 0;
00071 }
00072 
00073 #undef __FUNCT__
00074 #define __FUNCT__ "DSDPEventLogInitialize"
00075 int DSDPEventLogInitialize(void){
00076   int i;
00077   double t0;
00078   DSDPTime(&t0);
00079   eventlog.time0=t0;
00080   for (i=0;i<DSDP_MAX_EVENTS;i++){
00081     eventlog.event[i].begintime=0;
00082     eventlog.event[i].totaltime=0;
00083     eventlog.event[i].counter=0;
00084     strncpy(eventlog.event[i].ename,"",DSDP_MAX_EVENT_NAME_LENGTH-1);
00085   }
00086   eventlog.nevents=1;
00087   return 0;
00088 }
00089 
00090 #undef __FUNCT__
00091 #define __FUNCT__ "DSDPEventLogSummary"
00092 int DSDPEventLogSummary(void){
00093   int i;
00094   double etime,ttime,tfinal;
00095   DSDPTime(&tfinal);
00096   if (tfinal==0){
00097     DSDPPrintf("DSDP Timing is not turned on.  Check installation and recompile. \n\n");
00098   }
00099   ttime=tfinal-eventlog.time0;
00100   /*  DSDPMemoryLog(); */
00101   DSDPPrintf("PERFORMANCE SUMMARY\n");
00102   DSDPPrintf("                     Event                      Calls    Time(s)   Time(%%)\n");
00103   DSDPPrintf("--------------------------------------------------------------------------\n");
00104   for (i=1;i<eventlog.nevents;i++){
00105     etime=eventlog.event[i].totaltime;
00106     if (etime==0 || eventlog.event[i].counter==0) continue;
00107     DSDPPrintf(" %40s   %9d   %4.4e  %5.2f\n",eventlog.event[i].ename,eventlog.event[i].counter,etime,100*etime/ttime);
00108   }
00109   DSDPPrintf("--------------------------------------------------------------------------\n");
00110 
00111   if (dsdpoutputfile){
00112     fprintf(dsdpoutputfile,"PERFORMANCE SUMMARY\n");
00113     fprintf(dsdpoutputfile,"                     Event                      Calls    Time(s)   Time(%%)\n");
00114     fprintf(dsdpoutputfile,"--------------------------------------------------------------------------\n");
00115     for (i=1;i<eventlog.nevents;i++){
00116       etime=eventlog.event[i].totaltime;
00117       if (etime==0 || eventlog.event[i].counter==0) continue;
00118       fprintf(dsdpoutputfile," %40s   %9d   %4.4e  %5.2f\n",eventlog.event[i].ename,eventlog.event[i].counter,etime,100*etime/ttime);
00119     }
00120     fprintf(dsdpoutputfile,"--------------------------------------------------------------------------\n");
00121   }
00122   fflush(NULL);
00123   return 0;
00124 }
00125 

Generated on Wed May 21 19:31:19 2008 for DSDP by  doxygen 1.5.5