charm may skip calling LrtsSend when sending to same PE.
authorGengbin Zheng <gzheng@illinois.edu>
Sat, 24 Mar 2012 23:31:45 +0000 (18:31 -0500)
committerGengbin Zheng <gzheng@illinois.edu>
Sat, 24 Mar 2012 23:31:45 +0000 (18:31 -0500)
In batch mode of persistent, the counter may gets out of sync. Insert a call to persistent module when charm sends a local message

src/arch/gemini_gni/machine-persistent.c
src/arch/gemini_gni/machine.c
src/arch/util/persist-comm.c
src/ck-core/ck.C
src/conv-core/persistent.h

index 3535e0fb3b12c3ff409845ce6140e5240f2f0eb5..4b6304dd6c5ca7fc5d475f8d1f7210e1ae50cccb 100644 (file)
@@ -24,7 +24,10 @@ void LrtsSendPersistentMsg(PersistentHandle h, int destNode, int size, void *m)
     RDMA_REQUEST        *rdma_request_msg;
     
     PersistentSendsTable *slot = (PersistentSendsTable *)h;
-    if (h==NULL) CmiAbort("LrtsSendPersistentMsg: not a valid PersistentHandle");
+    if (h==NULL) {
+        printf("[%d] LrtsSendPersistentMsg: handle from node %d to node %d is NULL. \n", CmiMyPe(), myrank, destNode);
+        CmiAbort("LrtsSendPersistentMsg: not a valid PersistentHandle");
+    }
     CmiAssert(CmiNodeOf(slot->destPE) == destNode);
     if (size > slot->sizeMax) {
         CmiPrintf("size: %d sizeMax: %d mype=%d destPe=%d\n", size, slot->sizeMax, CmiMyPe(), destNode);
index 5d39712ceda9b86c6afff92aefbe0b27e7d2a4d7..ac302bbcca48825b5cbaa36b3c008775f4a408d7 100644 (file)
@@ -721,7 +721,7 @@ inline int IndexPool_getslot(IndexPool *pool, void *addr, int type)
     s = pool->freehead;
     if (s == -1) {
         int newsize = pool->size * 2;
-        printf("[%d] IndexPool_getslot %p expand to: %d\n", myrank, pool, newsize);
+        //printf("[%d] IndexPool_getslot %p expand to: %d\n", myrank, pool, newsize);
         if (newsize > (1<<(32-SHIFT-1))) CmiAbort("IndexPool too large");
         struct IndexStruct *old_ackpool = pool->indexes;
         pool->indexes = (struct IndexStruct *)malloc(newsize*sizeof(struct IndexStruct));
index 57643801a9a2f9a6f62d9d35526e3b0f6256d9d2..9238187d3f8a3bcb57ff0cd0d386fcf7e42d2e42 100644 (file)
@@ -432,6 +432,11 @@ void CmiUsePersistentHandle(PersistentHandle *p, int n)
   CpvAccess(curphs) = 0;
 }
 
+void CmiPersistentOneSend()
+{
+  if (CpvAccess(phs)) CpvAccess(curphs)++;
+}
+
 #endif
 
 /*@}*/
index add5df611488934ade9da61e5a11f84dec381f62..dbb030950e371d70b395d7f9615d39e3354cbfce 100644 (file)
@@ -1378,6 +1378,9 @@ void _skipCldEnqueue(int pe,envelope *env, int infoFn)
     CqsEnqueueGeneral((Queue)CpvAccess(CsdSchedQueue),
        env, env->getQueueing(),env->getPriobits(),
        (unsigned int *)env->getPrioPtr());
+#if CMK_PERSISTENT_COMM
+        CmiPersistentOneSend();
+#endif
   } else {
     if (pe < 0 || CmiNodeOf(pe) != CmiMyNode())
       CkPackMessage(&env);
index d60ed90dc452bfb5ef002a37f282ef8736de4c5b..ddf80ab039b3c849330f08fd854977f59b839884 100644 (file)
@@ -62,6 +62,7 @@ void CmiUsePersistentHandle(PersistentHandle *p, int n);
 void CmiDestoryPersistent(PersistentHandle h);
 void CmiDestoryAllPersistent();
 
+void CmiPersistentOneSend();
 #else
 
 typedef int PersistentRecvHandle;