fix another bug in previous fix.
authorGengbin Zheng <gzheng@illinois.edu>
Fri, 30 Oct 2009 01:17:31 +0000 (01:17 +0000)
committerGengbin Zheng <gzheng@illinois.edu>
Fri, 30 Oct 2009 01:17:31 +0000 (01:17 +0000)
src/ck-core/ckmemcheckpoint.C

index 8db6f64b7a2ad9f794cc8bb97d84a06663446ff4..7a6aade09f869936d00d1d0ff2e104f3ad774eba 100644 (file)
@@ -90,16 +90,19 @@ inline int CkMemCheckPT::BuddyPE(int pe)
 {
   int budpe;
 #if NODE_CHECKPOINT
-    // buddy is the processor with same rank on next physical node
+    // buddy is the processor with same rank on the next physical node
   int r1 = CmiPhysicalRank(pe);
   int budnode = CmiPhysicalNodeID(pe);
   do {
     budnode = (budnode+1)%CmiNumPhysicalNodes();
-    budpe = (CmiGetFirstPeOnPhysicalNode(budnode) + r1 % CmiNumPesOnPhysicalNode(budnode)) % CmiNumPes();
+    int *pelist;
+    int num;
+    CmiGetPesOnPhysicalNode(budnode, &pelist, &num);
+    budpe = pelist[r1 % num];
   } while (isFailed(budpe));
   if (budpe == pe) {
     CmiPrintf("[%d] Error: failed to find a buddy processor on a different node.\n", pe);
-    CmiAbort("Failed to a buddy processor");
+    CmiAbort("Failed to find a buddy processor");
   }
 #else
   budpe = pe;