a new option +useAbsoluteTime time to converse timing module to force it to use...
authorGengbin Zheng <gzheng@illinois.edu>
Thu, 31 Mar 2011 18:38:15 +0000 (13:38 -0500)
committerGengbin Zheng <gzheng@illinois.edu>
Thu, 31 Mar 2011 18:38:15 +0000 (13:38 -0500)
When +useAbsoluteTime is specified, projections will find global least init time automatically at the end of tracing. This retired the option +traceStartTime

src/arch/mpi/machine.c
src/ck-perf/trace-projections.C
src/conv-core/convcore.c
src/conv-core/converse.h

index eb28834011295f43d1db9de493b26972d50fe804..1ccef7d175e258e14d88580f558e5fe3865b5d07 100644 (file)
@@ -264,6 +264,7 @@ extern unsigned char computeCheckSum(unsigned char *data, int len);
 
 /* MPI calls are not threadsafe, even the timer on some machines */
 static CmiNodeLock  timerLock = 0;
+static int _absoluteTime = 0;
 static double starttimer = 0;
 static int _is_global = 0;
 
@@ -283,8 +284,25 @@ int CmiTimerIsSynchronized()
   return _is_global;
 }
 
-void CmiTimerInit()
+int CmiTimerAbsolute()
+{       
+  return _absoluteTime;
+}
+
+double CmiStartTimer()
+{
+  return 0.0;
+}
+
+double CmiInitTime()
 {
+  return starttimer;
+}
+
+void CmiTimerInit(char **argv)
+{
+  _absoluteTime = CmiGetArgFlagDesc(argv,"+useAbsoluteTime", "Use system's absolute time as wallclock time.");
+
   _is_global = CmiTimerIsSynchronized();
 
   if (_is_global) {
@@ -331,17 +349,18 @@ double CmiTimer(void)
 #if 0 && CMK_SMP
   if (timerLock) CmiLock(timerLock);
 #endif
+
 #if CMK_TIMER_USE_XT3_DCLOCK
-  t = dclock() - starttimer;
+  t = dclock();
 #else
-  t = MPI_Wtime() - starttimer;
+  t = MPI_Wtime();
 #endif
 
 #if 0 && CMK_SMP
   if (timerLock) CmiUnlock(timerLock);
 #endif
 
-  return t;
+  return _absoluteTime?t: (t-starttimer);
 }
 
 double CmiWallTimer(void)
@@ -350,15 +369,18 @@ double CmiWallTimer(void)
 #if 0 && CMK_SMP
   if (timerLock) CmiLock(timerLock);
 #endif
+
 #if CMK_TIMER_USE_XT3_DCLOCK
-  t = dclock() - starttimer;
+  t = dclock();
 #else
-  t = MPI_Wtime() - starttimer;
+  t = MPI_Wtime();
 #endif
+
 #if 0 && CMK_SMP
   if (timerLock) CmiUnlock(timerLock);
 #endif
-  return t;
+
+  return _absoluteTime? t: (t-starttimer);
 }
 
 double CmiCpuTimer(void)
index efdf57bc4b8877cf154953aa23679d515725008c..e5a724bc9ae152f184ec97e9e232e0fdef4ca5f5 100644 (file)
@@ -1810,7 +1810,7 @@ TraceProjectionsInit::TraceProjectionsInit(CkArgMsg *msg) {
       findOutliers = true;
     }
   }
-  bool findStartTime = CmiGetArgFlagDesc(msg->argv,"+traceStartTime", "Find minimum trace start time.");
+  bool findStartTime = (CmiTimerAbsolute()==1);
   traceProjectionsGID = CProxy_TraceProjectionsBOC::ckNew(findOutliers, findStartTime);
   if (findOutliers) {
     kMeansGID = CProxy_KMeansBOC::ckNew(outlierAutomatic,
@@ -2710,7 +2710,7 @@ void TraceProjectionsBOC::endTimeDone(CkReductionMsg *msg)
   CkAssert(CkMyPe() == 0);
   parModulesRemaining--;
   if (CkpvAccess(_trace) != NULL) {
-    CkpvAccess(_trace)->_logPool->globalEndTime = *(double *)msg->getData();
+    CkpvAccess(_trace)->_logPool->globalEndTime = *(double *)msg->getData() - CkpvAccess(_trace)->_logPool->globalStartTime;
     // CkPrintf("End time determined to be %lf us\n",
     //      (CkpvAccess(_trace)->_logPool->globalEndTime)*1e06);
   }
index 34b309ad1434ed08bf7036e0bc746b133894c370..6a057c500f555c9c1d30682c1ad20c6b030dca92 100644 (file)
@@ -782,6 +782,8 @@ static void CmiHandlerInit()
  *
  *****************************************************************************/
 
+static int _absoluteTime = 0;
+
 #if CMK_TIMER_USE_TIMES
 
 CpvStaticDeclare(double, clocktick);
@@ -793,7 +795,17 @@ int CmiTimerIsSynchronized()
   return 0;
 }
 
-void CmiTimerInit()
+double CmiStartTimer()
+{
+  return 0.0;
+}
+
+double CmiInitTime()
+{
+  return inittime_wallclock;
+}
+
+void CmiTimerInit(char **argv)
 {
   struct tms temp;
   CpvInitialize(double, clocktick);
@@ -854,12 +866,29 @@ int CmiTimerIsSynchronized()
   return 0;
 }
 
-void CmiTimerInit()
+int CmiTimerAbsolute()
+{
+  return _absoluteTime;
+}
+
+double CmiStartTimer()
+{
+  return 0.0;
+}
+
+double CmiInitTime()
+{
+  return inittime_wallclock;
+}
+
+void CmiTimerInit(char **argv)
 {
   struct timeval tv;
   struct rusage ru;
   CpvInitialize(double, inittime_virtual);
 
+  _absoluteTime = CmiGetArgFlagDesc(argv,"+useAbsoluteTime", "Use system's absolute time as wallclock time.");
+
 #if ! CMK_MEM_CHECKPOINT
   /* try to synchronize calling barrier */
   CmiBarrier();
@@ -896,6 +925,7 @@ double CmiCpuTimer()
   currenttime =
     (ru.ru_utime.tv_sec * 1.0)+(ru.ru_utime.tv_usec * 0.000001) +
     (ru.ru_stime.tv_sec * 1.0)+(ru.ru_stime.tv_usec * 0.000001);
+  
   return currenttime - CpvAccess(inittime_virtual);
 #endif
 }
@@ -915,7 +945,7 @@ double CmiWallTimer()
   }
   lastT = currenttime;
 #endif
-  return currenttime - inittime_wallclock;
+  return _absoluteTime?currenttime:currenttime - inittime_wallclock;
 }
 
 double CmiTimer()
@@ -960,7 +990,12 @@ double  CmiStartTimer(void)
   return CpvAccess(inittime_walltime);
 }
 
-void CmiTimerInit()
+double CmiInitTime()
+{
+  return CpvAccess(inittime_walltime);
+}
+
+void CmiTimerInit(char **argv)
 {
   struct rusage ru;
 
@@ -1036,7 +1071,22 @@ int CmiTimerIsSynchronized()
   return 0;
 }
 
-void CmiTimerInit()
+double CmiStartTimer()
+{
+  return 0.0;
+}
+
+double CmiInitTime()
+{
+  return inittime_wallclock;
+}
+
+int CmiTimerAbsolute()
+{
+  return 1;
+}
+
+void CmiTimerInit(char **argv)
 {
   BGLPersonality dst;
   CpvInitialize(double, clocktick);
@@ -1074,7 +1124,7 @@ double CmiTimer()
 
 #if CMK_TIMER_USE_BLUEGENEP  /* This module just compiles with GCC charm. */
 
-void CmiTimerInit() {}
+void CmiTimerInit(char **argv) {}
 
 #include "dcmf.h"
 
@@ -1107,7 +1157,17 @@ int CmiTimerIsSynchronized()
 #include "hwi/include/bqc/A2_inlines.h"
 #include "spi/include/kernel/process.h"
 
-void CmiTimerInit()
+double CmiStartTimer()
+{
+  return 0.0;
+}
+
+double CmiInitTime()
+{
+  return CpvAccess(inittime);
+}
+
+void CmiTimerInit(char **argv)
 {
   CpvInitialize(double, clocktick);
   CpvInitialize(unsigned long, inittime);
@@ -1152,7 +1212,17 @@ double CmiTimer()
 CpvStaticDeclare(double, inittime_wallclock);
 CpvStaticDeclare(double, inittime_virtual);
 
-void CmiTimerInit()
+double CmiStartTimer()
+{
+  return 0.0;
+}
+
+double CmiInitTime()
+{
+  return CpvAccess(inittime_wallclock);
+}
+
+void CmiTimerInit(char **argv)
 {
 #ifdef __CYGWIN__
        struct timeb tv;
@@ -1213,7 +1283,17 @@ double CmiTimer()
 static double clocktick;
 CpvStaticDeclare(long long, inittime_wallclock);
 
-void CmiTimerInit()
+double CmiStartTimer()
+{
+  return 0.0;
+}
+
+double CmiInitTime()
+{
+  return CpvAccess(inittime_wallclock);
+}
+
+void CmiTimerInit(char **argv)
 {
   CpvInitialize(long long, inittime_wallclock);
   CpvAccess(inittime_wallclock) = _rtc();
@@ -1248,7 +1328,17 @@ static timebasestruct_t inittime_wallclock;
 static double clocktick;
 CpvStaticDeclare(double, inittime_virtual);
 
-void CmiTimerInit()
+double CmiStartTimer()
+{
+  return 0.0;
+}
+
+double CmiInitTime()
+{
+  return inittime_wallclock;
+}
+
+void CmiTimerInit(char **argv)
 {
   struct rusage ru;
 
@@ -3281,7 +3371,7 @@ void ConverseCommonInit(char **argv)
   CmiPoolAllocInit(30);  
 /* #endif */
   CmiTmpInit(argv);
-  CmiTimerInit();
+  CmiTimerInit(argv);
   CstatsInit(argv);
   CmiInitCPUAffinityUtil();
 
index a082aa4f3c8193f058f72e33770072ce0221dc7a..5ed3cf6ceee216c5e0e8cc2cf2d1ff249bbc65da 100644 (file)
@@ -764,13 +764,17 @@ static __inline__ unsigned long long int rdtsc(void)
 #define CmiWallTimer() ((double)rdtsc()*(_cpu_speed_factor))
 #define CmiTimer CmiCpuTimer
 double   CmiStartTimer(void);
+double   CmiInitTime(void);
 #define CmiTimerIsSynchronized()       (0)
+#define CmiTimerAbsolute()              (0)
 
 #else
-void     CmiTimerInit();
+void     CmiTimerInit(char **argv);
+int      CmiTimerAbsolute();
+double   CmiStartTimer(void);
+double   CmiInitTime(void);
 double   CmiTimer(void);
 double   CmiWallTimer(void);
-#define  CmiStartTimer()                (0.0)
 int      CmiTimerIsSynchronized();
 #endif