Merge branch 'ramv/fix-topo-tree' into charm
authorRamprasad Venkataraman <ramv@illinois.edu>
Tue, 26 Oct 2010 20:34:25 +0000 (15:34 -0500)
committerRamprasad Venkataraman <ramv@illinois.edu>
Tue, 26 Oct 2010 20:34:25 +0000 (15:34 -0500)
src/libs/ck-libs/multicast/ckmulticast.C
src/util/spanningTreeStrategy.h
src/util/treeStrategy_3dTorus_minBytesHops.h
src/util/treeStrategy_3dTorus_minHops.h
src/util/treeStrategy_nodeAware_minBytes.h

index 229312e12c1acbb01dab07d5ba0fa0851cfd08a7..d86786cb8fe3caff09dd3fdb60bcccaa2492dfd4 100644 (file)
@@ -519,7 +519,7 @@ void CkMulticastMgr::setup(multicastSetupMsg *msg)
         int *peListPtr = mySubTreePEs.getVec();
         topo::SpanningTreeVertex *nextGenInfo;
         nextGenInfo = topo::buildSpanningTreeGeneration(peListPtr,peListPtr + mySubTreePEs.size(),numchild);
-        CkAssert(nextGenInfo->childIndex.size() == numchild);
+        numchild    = nextGenInfo->childIndex.size();
 
         // Distribute the section members across the number of direct children (branches)
         // Direct children are simply the first section member in each of the branch lists
index 7b84e713621617472e9535822ad1b57808533619..4d49385d30c1aa3cf2614171e9afa125cd03a5a3 100644 (file)
@@ -1,6 +1,7 @@
 #include <iostream>
 #include <vector>
 #include <iterator>
+#include <cstdlib>
 
 #include "conv-config.h"
 #include "spanningTreeVertex.h"
index f86745bd6bebaadba8e16d25fccb9b55c53cc886..83d85543f1dec48ffd56a2fdc0db285634256073 100644 (file)
@@ -92,8 +92,9 @@ SpanningTreeVertex* SpanningTreeStrategy_3dTorus_minBytesHops<Iterator,SpanningT
     {
         (*itr).X.reserve(3);
         (*itr).X.assign(3,0);
+        int coreNum; ///< dummy var. Get and discard the core number
         ///@todo: If the machine coordinates are already stored in the vertices, do we want to find them again?
-        aTopoMgr.rankToCoordinates( (*itr).id, (*itr).X[0], (*itr).X[1], (*itr).X[2] );
+        aTopoMgr.rankToCoordinates( (*itr).id, (*itr).X[0], (*itr).X[1], (*itr).X[2], coreNum );
         /// If this is a not a local node (separated by the network from the tree root)
         if (numHops(*firstVtx,*itr) > 0)
             numRemoteDestinations++;
@@ -113,7 +114,7 @@ SpanningTreeVertex* SpanningTreeStrategy_3dTorus_minBytesHops<Iterator,SpanningT
     /// If there are any local vertices at all
     if (numLocalDestinations > 0)
     {
-        numLocalBranches = (numRemoteDestinations >= maxBranches-1)? 1 : (maxBranches - numRemoteDestinations);
+        numLocalBranches = (numRemoteDestinations >= maxBranches)? 1 : (maxBranches - numRemoteDestinations);
         /// Distribute the local destination vertices amongst numLocalBranches branches
         SpanningTreeVertex *localTree = impl::buildNextGen_topoUnaware(firstVtx,beyondLastLocal,numLocalBranches);
         /// Append the local tree info to the child info
@@ -125,7 +126,7 @@ SpanningTreeVertex* SpanningTreeStrategy_3dTorus_minBytesHops<Iterator,SpanningT
 
     /// Partition the remote-vertex bounding box into the remaining number of branches
     impl::TreeBoundingBoxOn3dTorus<Iterator> treePart;
-    treePart.partition(firstVtx,beyondLastLocal,beyondLastVtx,maxBranches-numLocalBranches);
+    treePart.partition(firstVtx,beyondLastLocal,beyondLastVtx,maxBranches);
 
     /// Identify the closest member in each remote branch and put it at the corresponding childIndex location
     for (int i=numLocalBranches, numChildren=(*firstVtx).childIndex.size(); i<numChildren; i++)
index 6a8aafe03e841c01546ad1944da0da8be9c86295..ed4c88a30aedc29377404c623aaf2d1276d44688 100644 (file)
@@ -124,7 +124,8 @@ SpanningTreeVertex* SpanningTreeStrategy_3dTorus_minHops<Iterator,SpanningTreeVe
     {
         (*itr).X.reserve(3);
         (*itr).X.assign(3,0);
-        aTopoMgr.rankToCoordinates( (*itr).id, (*itr).X[0], (*itr).X[1], (*itr).X[2] );
+        int coreNum; ///< dummy var. Get and discard the core number
+        aTopoMgr.rankToCoordinates( (*itr).id, (*itr).X[0], (*itr).X[1], (*itr).X[2], coreNum );
     }
     ///@todo: If the machine coordinates are already stored in the vertices, do we want to find them again?
 
index ed4f002fcc92b2f2fa117a97477ed055799fca94..1cadda2709734d72a9d0cc1f5746b2710f799cdc 100644 (file)
@@ -98,14 +98,14 @@ namespace impl {
         {
             /// Determine how many branches can be used to span the local destinations
             int numRemoteDestinations = std::distance(firstVtx,beyondLastVtx) -1 - numLocalDestinations; ///< @warning: This is O(treeSize) for Iterator != random iterator
-            numLocalBranches = (numRemoteDestinations >= maxBranches-1)? 1 : (maxBranches - numRemoteDestinations);
+            numLocalBranches = (numRemoteDestinations >= maxBranches)? 1 : (maxBranches - numRemoteDestinations);
 
             /// Distribute the local destination vertices amongst numLocalBranches branches
             Iterator beyondLastLocal = lastLocal;
             parent = buildNextGen_topoUnaware(firstVtx,++beyondLastLocal,numLocalBranches);
 
             /// Construct a topo-unaware tree for the rest (off-node PEs) of the vertices
-            SpanningTreeVertex *remoteSubTrees = buildNextGen_topoUnaware(lastLocal,beyondLastVtx,maxBranches-numLocalBranches); ///< Abuse the interface by faking lastLocal as the tree root
+            SpanningTreeVertex *remoteSubTrees = buildNextGen_topoUnaware(lastLocal,beyondLastVtx,maxBranches); ///< Abuse the interface by faking lastLocal as the tree root
 
             /// Append the remote sub-tree info to the result object
             for (int i=0, n=remoteSubTrees->childIndex.size(); i< n; i++)