fix cmibarrier problem on pamilrts
authorYanhuaSun <sun51@illinois.edu>
Mon, 25 Mar 2013 00:45:27 +0000 (19:45 -0500)
committerYanhuaSun <sun51@illinois.edu>
Mon, 25 Mar 2013 00:45:27 +0000 (19:45 -0500)
src/arch/pamilrts/machine.c
src/arch/util/machine-common-core.c

index c58976c7d0aaa838828e8f1db9e64036a972217d..df1a537a1222b8eee7edbabc69c13f484406997e 100644 (file)
@@ -90,7 +90,7 @@ __thread int32_t _cmi_bgq_incommthread = 0;
 //  return _cmi_bgq_incommthread;
 //}
 
-static void LrtsBarrier(int async);
+static void CmiNetworkBarrier(int async);
 #if SPECIFIC_PCQUEUE && CMK_SMP
 #define  QUEUE_NUMS     _Cmi_mynodesize + 3
 #include "lrtsqueue.h"
@@ -612,9 +612,9 @@ void LrtsInit(int *argc, char ***argv, int *numNodes, int *myNodeID)
     return;
   }
 
-  LrtsBarrier(0);
-  LrtsBarrier(0);
-  LrtsBarrier(0);
+  CmiNetworkBarrier(0);
+  CmiNetworkBarrier(0);
+  CmiNetworkBarrier(0);
 
   /* checksum flag */
   if (CmiGetArgFlag(*argv,"+checksum")) {
@@ -904,7 +904,11 @@ pami_result_t network_barrier_handoff(pami_context_t context, void *msg)
   return machine_network_barrier(context, 0);
 }
 
-void LrtsBarrier(int async) {
+void LrtsBarrier()
+{
+    CmiNetworkBarrier(1);
+}
+static void CmiNetworkBarrier(int async) {
   pami_context_t my_context = cmi_pami_contexts[0];
   pami_barrier_flag = 1;
 #if CMK_SMP && CMK_ENABLE_ASYNC_PROGRESS
index fcc0dd82a945f14aa510b54591c2acca1e628906..9460737f70f2797bc032b44ffc56868f0934c079 100644 (file)
@@ -1213,14 +1213,14 @@ int CmiBarrier() {
 #if CMK_SMP
     /* make sure all ranks reach here, otherwise comm threads may reach barrier ignoring other ranks  */
     CmiNodeAllBarrier();
-    if (CmiMyRank() == CmiMyNodeSize())
-#else
-    if (CmiMyRank() == 0)
 #endif
+    if (CmiMyRank() == 0)
     {
         LrtsBarrier();
     }
+#if CMK_SMP
     CmiNodeAllBarrier();
+#endif
     return 0;
 }