Making critical path auto-prioritization work better. Now handles ForChareMsg envelopes.
authorIsaac Dooley <idooley2@illinois.edu>
Wed, 5 Aug 2009 21:02:57 +0000 (21:02 +0000)
committerIsaac Dooley <idooley2@illinois.edu>
Wed, 5 Aug 2009 21:02:57 +0000 (21:02 +0000)
src/ck-core/ckarray.C
src/ck-core/envelope-path.h
src/ck-core/envelope.h
src/ck-cp/pathHistory.C
src/ck-cp/pathHistory.h

index eef16e97ff7a77c98626c033c8bf6cd6d0f23f57..68ac56cfd43e1aa0b6fc910b373c7eb436ffa56f 100644 (file)
@@ -728,9 +728,12 @@ inline void msg_prepareSend(CkArrayMessage *msg, int ep,CkArrayID aid)
        env->getsetArrayHops()=0;
 #ifdef USE_CRITICAL_PATH_HEADER_ARRAY
        criticalPath_send(env);
+       automaticallySetMessagePriority(env);
 #endif
 }
 
+
+/// Just a non-inlined version of msg_prepareSend()
 void msg_prepareSend_noinline(CkArrayMessage *msg, int ep,CkArrayID aid)
 {
        envelope *env=UsrToEnv((void *)msg);
@@ -738,6 +741,10 @@ void msg_prepareSend_noinline(CkArrayMessage *msg, int ep,CkArrayID aid)
        env->getsetArraySrcPe()=CkMyPe();
        env->setEpIdx(ep);
        env->getsetArrayHops()=0;
+#ifdef USE_CRITICAL_PATH_HEADER_ARRAY
+       criticalPath_send(env);
+       automaticallySetMessagePriority(env);
+#endif
 }
 
 void CProxyElement_ArrayBase::ckSend(CkArrayMessage *msg, int ep, int opts) const
index bf47ce89978674d41cd4ac5505e04193d22ce07f..c5d72edacd1b77a7ee90a406aa9e5d915ea8f3c6 100644 (file)
@@ -45,9 +45,6 @@ extern void resetCricitalPathDetection();
 extern void resetThisEntryPath();
 
 
-extern void bracketStartCriticalPathMethod(envelope * env);
-extern void bracketEndCriticalPathMethod(envelope * env);
-
 
 #endif
 
index b04ec654234f87ff81e0cf9c32a4d3915b380d9f..c3ef7398eb27ebcd6f4a6f94020d7969fdf3b5b7 100644 (file)
@@ -34,7 +34,7 @@
 
 
 
-//#define USE_CRITICAL_PATH_HEADER_ARRAY
+#define USE_CRITICAL_PATH_HEADER_ARRAY
 
 /**
     \addtogroup CriticalPathFramework 
@@ -112,7 +112,7 @@ class PathHistoryEnvelope {
   
   void incrementTotalTime(double time);
 
-  void createPath(envelope *originatingMsg);
+  //  void createPath(envelope *originatingMsg);
 
   void setDebug100();
       
index b4693d8ed986e8730ebe7fcf51ccb0c5af598093..f4d221ef1f5ab4a9aaa60bc32a4f6252644c2753 100644 (file)
@@ -195,13 +195,16 @@ void pathHistoryManager::criticalPathProjectionsDone(CkReductionMsg *msg){
 
 /// An interface callable by the application.
 void useThisCriticalPathForPriorities(){
+#ifdef USE_CRITICAL_PATH_HEADER_ARRAY
   pathHistoryManagerProxy.ckLocalBranch()->useCriticalPathForPriories();
+#endif
 }
 
 
 /// Callable from inside charm++ delivery mechanisms (after envelope contains epIdx):
 void automaticallySetMessagePriority(envelope *env){
-  
+  #ifdef USE_CRITICAL_PATH_HEADER_ARRAY
+
 #if DEBUG
   if(env->getPriobits() == 8*sizeof(int)){
     CkPrintf("[%d] priorities for env=%p are integers\n", CkMyPe(), env);
@@ -219,6 +222,7 @@ void automaticallySetMessagePriority(envelope *env){
     
     switch(env->getMsgtype()) {
     case ForArrayEltMsg:
+    case ForChareMsg:
       {        
        const int ep = env->getsetArrayEp();
        const int arr = env->getArrayMgrIdx();
@@ -230,13 +234,17 @@ void automaticallySetMessagePriority(envelope *env){
        CkPrintf("[%d] destination array,ep occurs %d times along stored critical path\n", CkMyPe(), count);
 #endif
        
-       if(count > 0 && env->getPriobits() == 8*sizeof(int)){
+       if(count > 0){
          // Set the integer priority to high
+#if DEBUG
          CkPrintf("Prio auto high\n");
+#endif
          *(int*)(env->getPrioPtr()) = -5;
-       }  else if ( env->getPriobits() == 8*sizeof(int)){
+       } else {
          // Set the integer priority to low
+#if DEBUG
          CkPrintf("Prio auto low: %d,%d\n", arr, ep);
+#endif
          *(int*)(env->getPrioPtr()) = 5;
        }
        
@@ -247,10 +255,6 @@ void automaticallySetMessagePriority(envelope *env){
       CkPrintf("Can't Critical Path Autoprioritize a ForNodeBocMsg\n");    
       break;
       
-    case ForChareMsg:
-      CkPrintf("Can't Critical Path Autoprioritize a ForChareMsg\n");
-      break;
-      
     case ForBocMsg:
       CkPrintf("Can't Critical Path Autoprioritize a ForBocMsg\n");
       break;
@@ -266,17 +270,21 @@ void automaticallySetMessagePriority(envelope *env){
     }
       
   }
+
+#endif
 }
 
 
 
 void pathHistoryManager::useCriticalPathForPriories(){
+#ifdef USE_CRITICAL_PATH_HEADER_ARRAY
+
   // Request a critical path that will be stored everywhere for future use in autotuning message priorities
   
   // The resulting critical path should be broadcast to saveCriticalPathForPriorities() on all PEs
   CkCallback cb(CkIndex_pathHistoryManager::saveCriticalPathForPriorities(NULL),thisProxy); 
   traceCriticalPathBack(cb, false);
-  
+#endif  
 }
 
 
@@ -317,7 +325,7 @@ void pathHistoryManager::saveCriticalPathForPriorities(pathInformationMsg *msg){
       const std::pair<int,int> k = iter->first;
       const int c = iter->second;
 
-      CkPrintf("[%d] On critical path EP %d,%d occurrs %d times\n", CkMyPe(), k.first, k.second, c);
+      CkPrintf("[%d] On critical path EP %d,%d occurs %d times\n", CkMyPe(), k.first, k.second, c);
 
     }
   }
index d6f5d83e97d476ea33673f41dcd313fed82ba5a5..6ae076793457a69e0d113324c453ac060952ee1c 100644 (file)
@@ -29,6 +29,7 @@
 void initializeCriticalPath(void);
 
 void useThisCriticalPathForPriorities();
+void automaticallySetMessagePriority(envelope *env);
 
 
 class pathHistoryManager : public CBase_pathHistoryManager {