have a node level persistent setup API.
authorGengbin Zheng <gzheng@illinois.edu>
Tue, 27 Mar 2012 03:23:30 +0000 (20:23 -0700)
committerGengbin Zheng <gzheng@illinois.edu>
Tue, 27 Mar 2012 03:23:30 +0000 (20:23 -0700)
src/arch/gemini_gni/machine-persistent.c
src/arch/util/persist-comm.c
src/ck-core/ck.C
src/conv-core/persistent.h

index 4b6304dd6c5ca7fc5d475f8d1f7210e1ae50cccb..5b36524f35b4f178ad6f9b67d20ddc4e08e42404 100644 (file)
@@ -211,6 +211,10 @@ int PumpPersistent()
 
 #endif
 
+#if ! LARGEPAGE
+#error "Persistent communication must be compiled with LARGEPAGE on"
+#endif
+
 void *PerAlloc(int size)
 {
 //  return CmiAlloc(size);
index 9238187d3f8a3bcb57ff0cd0d386fcf7e42d2e42..906fc4a1f91f91dc8a4ba63841435a2c872909bc 100644 (file)
@@ -177,6 +177,15 @@ PersistentHandle CmiCreatePersistent(int destPE, int maxBytes)
   return h;
 }
 
+/* for SMP */
+PersistentHandle CmiCreateNodePersistent(int destNode, int maxBytes)
+{
+    /* randomly pick one rank on the destination node is fine for setup.
+       actual message will be handled by comm thread anyway */
+  int pe = CmiNodeFirst(destNode) + rand()/RAND_MAX * CmiMyNodeSize();
+  return CmiCreatePersistent(CmiNodeFirst(destNode), maxBytes);
+}
+
 static void persistentRequestHandler(void *env)
 {             
   PersistentRequestMsg *msg = (PersistentRequestMsg *)env;
index dbb030950e371d70b395d7f9615d39e3354cbfce..d9e89fd18bf22e1c2a47ddf614f46e930eaf9400 100644 (file)
@@ -1379,7 +1379,7 @@ void _skipCldEnqueue(int pe,envelope *env, int infoFn)
        env, env->getQueueing(),env->getPriobits(),
        (unsigned int *)env->getPrioPtr());
 #if CMK_PERSISTENT_COMM
-        CmiPersistentOneSend();
+    CmiPersistentOneSend();
 #endif
   } else {
     if (pe < 0 || CmiNodeOf(pe) != CmiMyNode())
index ddf80ab039b3c849330f08fd854977f59b839884..e233b6b538364659e1364416861752a547eb432b 100644 (file)
@@ -56,6 +56,7 @@ typedef struct {
 
 void CmiPersistentInit();
 PersistentHandle CmiCreatePersistent(int destPE, int maxBytes);
+PersistentHandle CmiCreateNodePersistent(int destNode, int maxBytes);
 PersistentReq CmiCreateReceiverPersistent(int maxBytes);
 PersistentHandle CmiRegisterReceivePersistent(PersistentReq req);
 void CmiUsePersistentHandle(PersistentHandle *p, int n);