raise CcdUSER event to activate QD.
authorGengbin Zheng <gzheng@illinois.edu>
Fri, 18 Feb 2011 05:51:43 +0000 (23:51 -0600)
committerGengbin Zheng <gzheng@illinois.edu>
Fri, 18 Feb 2011 05:51:43 +0000 (23:51 -0600)
disabled immediate message for now.
minor optimization in CldAckNoTaskHandler to reuse the incoming message.

src/conv-ldb/cldb.workstealing.c

index cbb2b88ac4738ceb3d102fda21aabff0addbad12..bba101aa9511e595e51f80b5cab0c49ea012397f 100644 (file)
@@ -5,7 +5,7 @@
 #include "queueing.h"
 #include "cldb.h"
 
-#define IDLE_IMMEDIATE                 1
+#define IDLE_IMMEDIATE                 0
 #define TRACE_USEREVENTS        0
 
 #define PERIOD 10                /* default: 30 */
@@ -43,7 +43,6 @@ char *CldGetStrategy(void)
 
 /* since I am idle, ask for work from neighbors */
 
-
 static void CldBeginIdle(void *dummy)
 {
   int i;
@@ -55,6 +54,8 @@ static void CldBeginIdle(void *dummy)
   int mype;
   int numpes;
 
+  CcdRaiseCondition(CcdUSER);
+
   myload = CldLoad();
   //if (myload > 0) return; // I do not think this will be true when a processor is idle. overhead code
 
@@ -85,7 +86,6 @@ static void CldAskLoadHandler(requestmsg *msg)
 {
   int receiver, rank, recvIdx, i;
   int myload = CldLoad();
-  double now = CmiWallTimer();
   CldProcInfo  cldData = CpvAccess(CldData);
 
   int sendLoad;
@@ -103,6 +103,8 @@ static void CldAskLoadHandler(requestmsg *msg)
       r_msg.from_pe = CmiMyPe();
       r_msg.to_rank = CmiMyRank();
 
+      CcdRaiseCondition(CcdUSER);
+
       CmiSetHandler(&r_msg, CpvAccess(CldAckNoTaskHandlerIndex));
       CmiSyncSend(receiver, sizeof(requestmsg),(char *)&r_msg);
     /* send ack indicating there is no task */
@@ -112,28 +114,30 @@ static void CldAskLoadHandler(requestmsg *msg)
 
 void  CldAckNoTaskHandler(requestmsg *msg)
 {
-    int victim; 
-    requestmsg r_msg;
-    int notaskpe = msg->from_pe;
-    CldProcInfo  cldData = CpvAccess(CldData);
-    int mype = CmiMyPe();
+  int victim; 
+  int notaskpe = msg->from_pe;
+  CldProcInfo  cldData = CpvAccess(CldData);
+  int mype = CmiMyPe();
+
+  CcdRaiseCondition(CcdUSER);
+
   do{
       victim = (((CrnRand()+notaskpe)&0x7FFFFFFF)%CmiNumPes());
   }while(victim == mype || victim == notaskpe);
 
   /* fixme */
   //CmiBecomeImmediate(&msg);
-  r_msg.to_rank = CmiRankOf(victim);
-  r_msg.from_pe = mype;
-  CmiSetHandler(&r_msg, CpvAccess(CldAskLoadHandlerIndex));
-  CmiSyncSend(victim, sizeof(requestmsg),(char *)&r_msg);
+  /* reuse msg */
+  msg->to_rank = CmiRankOf(victim);
+  msg->from_pe = mype;
+  CmiSetHandler(msg, CpvAccess(CldAskLoadHandlerIndex));
+  CmiSyncSendAndFree(victim, sizeof(requestmsg),(char *)msg);
   //cldData->sent = 1;
 
   //cldData->lastCheck = CmiWallTimer();
 
-  CmiFree(msg);
-
 }
+
 void CldHandler(void *msg)
 {
   CldInfoFn ifn; CldPackFn pfn;