Merge branch 'charm' of charmgit:charm into charm
authorGengbin Zheng <gzheng@illinois.edu>
Tue, 13 Sep 2011 03:57:06 +0000 (20:57 -0700)
committerGengbin Zheng <gzheng@illinois.edu>
Tue, 13 Sep 2011 03:57:06 +0000 (20:57 -0700)
src/arch/gemini_gni/Makefile.machine
src/arch/gemini_gni/machine-persistent.c
src/arch/gemini_gni/machine-persistent.h
src/arch/util/machine-common-core.c
src/arch/util/machine-lrts.h
src/arch/util/machine-pxshm.c
src/arch/util/persist-comm.c

index 41bac81e582e4db164aa9bfd7593ab820a982ac5..6b97d97148eac6e689bee043dcbf0b379c23ae4c 100644 (file)
@@ -1,2 +1,2 @@
-$(L)/libconv-cplus-n.a: machine.c machine-common-core.c machine-broadcast.c machine-lrts.h machine-pxshm.c mempool.c
+$(L)/libconv-cplus-n.a: machine.c machine-common-core.c machine-broadcast.c machine-lrts.h machine-pxshm.c mempool.c machine-persistent.c
 
index b8a2866e1dfd8405c6c32335485e51005a83f397..4fb7b43bb36f99fd5dbf5ab1603b3fb90dd9ac4d 100644 (file)
@@ -10,7 +10,7 @@
 
 /*
   machine specific persistent comm functions:
-  * CmiSendPersistentMsg
+  * LrtsSendPersistentMsg
   * CmiSyncSendPersistent
   * PumpPersistent
   * PerAlloc PerFree      // persistent message memory allocation/free functions
@@ -18,7 +18,7 @@
 */
 
 
-void CmiSendPersistentMsg(PersistentHandle h, int destPE, int size, void *m)
+void LrtsSendPersistentMsg(PersistentHandle h, int destPE, int size, void *m)
 {
   CmiAssert(h!=NULL);
   PersistentSendsTable *slot = (PersistentSendsTable *)h;
@@ -29,7 +29,7 @@ void CmiSendPersistentMsg(PersistentHandle h, int destPE, int size, void *m)
     CmiAbort("Abort: Invalid size\n");
   }
 
-/*CmiPrintf("[%d] CmiSendPersistentMsg h=%p hdl=%d destPE=%d destAddress=%p size=%d\n", CmiMyPe(), *phs, CmiGetHandler(m), destPE, slot->destAddress[0], size);*/
+/*CmiPrintf("[%d] LrtsSendPersistentMsg h=%p hdl=%d destPE=%d destAddress=%p size=%d\n", CmiMyPe(), *phs, CmiGetHandler(m), destPE, slot->destAddress[0], size);*/
 
   if (slot->destBuf[0].destAddress) {
 #if 0
@@ -61,7 +61,6 @@ void CmiSendPersistentMsg(PersistentHandle h, int destPE, int size, void *m)
     }
 #else
      // uGNI part
-    CmiFree(m);
 #endif
   }
   else {
@@ -84,6 +83,7 @@ void CmiSendPersistentMsg(PersistentHandle h, int destPE, int size, void *m)
   }
 }
 
+#if 0
 void CmiSyncSendPersistent(int destPE, int size, char *msg, PersistentHandle h)
 {
   CmiState cs = CmiGetState();
@@ -98,8 +98,9 @@ void CmiSyncSendPersistent(int destPE, int size, char *msg, PersistentHandle h)
     CdsFifo_Enqueue(CpvAccess(CmiLocalQueue),dupmsg);
   }
   else
-    CmiSendPersistentMsg(h, destPE, size, dupmsg);
+    LrtsSendPersistentMsg(h, destPE, size, dupmsg);
 }
+#endif
 
 extern void CmiReference(void *blk);
 
@@ -189,6 +190,7 @@ void setupRecvSlot(PersistentReceivesTable *slot, int maxBytes)
     slot->destBuf[i].destAddress = buf;
     /* note: assume first integer in elan converse header is the msg size */
     slot->destBuf[i].destSizeAddress = (unsigned int*)buf;
+    // slot->destBuf[i].mem_hdl = 0;
   }
   slot->sizeMax = maxBytes;
 }
index 9304f3b8efb4fda4d2e6ca1a4bddd3c7930e4348..bdc07cddfddaaf63c2f4544ce5cf15f92efb2712 100644 (file)
@@ -44,7 +44,6 @@ extern int phsSize;
 
 void *PerAlloc(int size);
 void PerFree(char *msg);
-void CmiSendPersistentMsg(PersistentHandle h, int destPE, int size, void *m);
 int PumpPersistent();
 void swapSendSlotBuffers(PersistentSendsTable *slot);
 void swapRecvSlotBuffers(PersistentReceivesTable *slot);
index 0ce523eb8c27625220d25c9de6932b6531e8f841..3a2d2f71b8786382f9e6cadc9919dbf4bf482898 100644 (file)
@@ -448,6 +448,8 @@ inline void CommunicationServerPxshm();
 void CmiExitPxshm();
 #endif
 
+int refcount = 0;
+
 void CmiFreeSendFn(int destPE, int size, char *msg) {
     CMI_SET_BROADCAST_ROOT(msg, 0);
     CQdCreate(CpvAccess(cQdState), 1);
@@ -455,7 +457,6 @@ void CmiFreeSendFn(int destPE, int size, char *msg) {
         CmiSendSelf(msg);
     } else {
 #if CMK_USE_PXSHM
-        int refcount = 0;
         int ret=CmiValidPxshm(destPE, size);
         if (ret) {
           CMI_DEST_RANK(msg) = CmiRankOf(destPE);
@@ -464,6 +465,14 @@ void CmiFreeSendFn(int destPE, int size, char *msg) {
           return;
         }
 #endif
+#if CMK_PERSISTENT_COMM
+    if (phs) {
+        CmiAssert(phsSize == 1);
+        LrtsSendPersistentMsg(*phs, destPE, size, msg);
+        return;
+    }
+#endif
+
         int destNode = CmiNodeOf(destPE);
 #if CMK_SMP
         if (CmiMyNode()==destNode) {
index 4c70b4b354b8297a6350f29ec89374046c71f997..87abc15d97d6615db2a38ddaa97e325ff6ed0c0a 100644 (file)
@@ -6,6 +6,10 @@ void LrtsPrepareEnvelope(char *msg, int size);
 /* The machine-specific send function */
 CmiCommHandle LrtsSendFunc(int destNode, int size, char *msg, int mode);
 
+#if CMK_PERSISTENT_COMM
+void LrtsSendPersistentMsg(PersistentHandle h, int destPE, int size, void *m);
+#endif
+
 /* ### Beginning of Machine-startup Related Functions ### */
 void LrtsInit(int *argc, char ***argv, int *numNodes, int *myNodeID);
 
index 4c2a563eec2c2f24ae62675a0dee9def8b971ceb..8222d23d3218ce2ee9d5012b6c9541f91430df23 100644 (file)
@@ -116,7 +116,6 @@ typedef struct {
        volatile int flagReceiver;
         CmiMemorySMPSeparation_t pad2;
        volatile int turn;
-       int dummy;
 #endif 
 
 } sharedBufHeader;
@@ -230,6 +229,11 @@ void CmiInitPxshm(char **argv){
        pxshmContext->lockRecvCount = 0;
 #endif
 
+#if 0
+        char name[64];
+        gethostname(name,64);
+        printf("[%d] name: %s\n", myrank, name);
+#endif
 };
 
 /**************
@@ -619,7 +623,7 @@ int sendMessage(char *msg, int size, int *refcount, sharedBufData *dstBuf,PxshmS
        /***
         * Shared Buffer is too full for this message
         * **/
-       printf("send buffer is too full\n");
+       printf("[%d] send buffer is too full\n", CmiMyPe());
        pushSendQ(dstSendQ,msg,size,refcount);
        (*refcount)++;
        MACHSTATE3(3,"Pxshm send ogm %p size %d queued refcount %d",ogm,ogm->size,ogm->refcount);
@@ -835,7 +839,7 @@ void static inline handoverPxshmMessage(char *newmsg,int total_size,int rank,int
  * ****************/
 
 void initSendQ(PxshmSendQ *q,int size){
-       q->data = (OutgoingMsgRec *)malloc(sizeof(OutgoingMsgRec)*size);
+       q->data = (OutgoingMsgRec *)calloc(size, sizeof(OutgoingMsgRec));
 
        q->size = size;
        q->numEntries = 0;
@@ -847,17 +851,17 @@ void initSendQ(PxshmSendQ *q,int size){
 void pushSendQ(PxshmSendQ *q, char *msg, int size, int *refcount){
        if(q->numEntries == q->size){
                //need to resize 
+CmiPrintf("[%d] pushSendQ resize \n", CmiMyPe());
                OutgoingMsgRec *oldData = q->data;
                int newSize = q->size<<1;
-               q->data = (OutgoingMsgRec *)malloc(sizeof(OutgoingMsgRec)*newSize);
+               q->data = (OutgoingMsgRec *)calloc(newSize, sizeof(OutgoingMsgRec));
                //copy head to the beginning of the new array
-               
                CmiAssert(q->begin == q->end);
 
                CmiAssert(q->begin < q->size);
                memcpy(&(q->data[0]),&(oldData[q->begin]),sizeof(OutgoingMsgRec)*(q->size - q->begin));
 
-               if(q->end != 0){
+               if(q->end!=0){
                        memcpy(&(q->data[(q->size - q->begin)]),&(oldData[0]),sizeof(OutgoingMsgRec)*(q->end));
                }
                free(oldData);
index ce09bc53e0f1aebd6d186a6aa1984ef2db88a79d..e493887b35014337f0f2b5499d3a1830d8f61fff 100644 (file)
@@ -246,7 +246,7 @@ static void persistentReqGrantedHandler(void *env)
   slot->destHandle = msg->destHandlerIndex;
 
   if (slot->messageBuf) {
-    CmiSendPersistentMsg(h, slot->destPE, slot->messageSize, slot->messageBuf);
+    LrtsSendPersistentMsg(h, slot->destPE, slot->messageSize, slot->messageBuf);
     slot->messageBuf = NULL;
   }
   CmiFree(msg);