X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b98b530ed10d60d9c350bf4919896a0c50b649f3..dabf1458cbad8890c6a4c7ade00fd16ce425db2a:/src/smpi/colls/coll_tuned_topo.cpp diff --git a/src/smpi/colls/coll_tuned_topo.cpp b/src/smpi/colls/coll_tuned_topo.cpp index db88a997bb..56d09c8613 100644 --- a/src/smpi/colls/coll_tuned_topo.cpp +++ b/src/smpi/colls/coll_tuned_topo.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2013-2017. The SimGrid Team. +/* Copyright (c) 2013-2019. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -19,21 +19,23 @@ * Additional copyrights may follow */ -#include "colls_private.h" -#include "coll_tuned_topo.h" +#include "coll_tuned_topo.hpp" +#include "colls_private.hpp" /* * Some static helpers. */ static int pown( int fanout, int num ) { - int j, p = 1; + int p = 1; if( num < 0 ) return 0; if (1==num) return fanout; if (2==fanout) { return p< 1) - return ((pown(fanout,level) - 1)/(fanout - 1)); - else - return 0; // is this right ? + if (fanout > 1) + return ((pown(fanout, level) - 1) / (fanout - 1)); + else + return 0; // is this right ? } /* @@ -76,12 +78,11 @@ ompi_coll_tuned_topo_build_tree( int fanout, int root ) { int rank, size; - int schild, sparent; + int sparent; int level; /* location of my rank in the tree structure of size */ int delta; /* number of nodes on my level */ int slimit; /* total number of nodes on levels above me */ int shiftedrank; - int i; ompi_coll_tree_t* tree; XBT_DEBUG("coll:tuned:topo_build_tree Building fo %d rt %d", fanout, root); @@ -101,20 +102,12 @@ ompi_coll_tuned_topo_build_tree( int fanout, size = comm->size(); rank = comm->rank(); - tree = (ompi_coll_tree_t*)malloc(sizeof(ompi_coll_tree_t)); + tree = new ompi_coll_tree_t; if (not tree) { XBT_DEBUG("coll:tuned:topo_build_tree PANIC::out of memory"); return NULL; } - tree->tree_root = MPI_UNDEFINED; - tree->tree_nextsize = MPI_UNDEFINED; - - /* - * Set root - */ - tree->tree_root = root; - /* * Initialize tree */ @@ -123,8 +116,8 @@ ompi_coll_tuned_topo_build_tree( int fanout, tree->tree_root = root; tree->tree_prev = -1; tree->tree_nextsize = 0; - for( i = 0; i < fanout; i++ ) { - tree->tree_next[i] = -1; + for (int i = 0; i < fanout; i++) { + tree->tree_next[i] = -1; } /* return if we have less than 2 processes */ @@ -148,8 +141,8 @@ ompi_coll_tuned_topo_build_tree( int fanout, delta = pown( fanout, level ); /* find my children */ - for( i = 0; i < fanout; i++ ) { - schild = shiftedrank + delta * (i+1); + for (int i = 0; i < fanout; i++) { + int schild = shiftedrank + delta * (i+1); if( schild < size ) { tree->tree_next[i] = (schild+root)%size; tree->tree_nextsize = tree->tree_nextsize + 1; @@ -191,8 +184,8 @@ ompi_coll_tree_t* ompi_coll_tuned_topo_build_in_order_bintree( MPI_Comm comm ) { int rank, size; - int myrank, rightsize, delta; - int parent, lchild, rchild; + int myrank, delta; + int parent; ompi_coll_tree_t* tree; /* @@ -201,15 +194,12 @@ ompi_coll_tuned_topo_build_in_order_bintree( MPI_Comm comm ) size = comm->size(); rank = comm->rank(); - tree = (ompi_coll_tree_t*)malloc(sizeof(ompi_coll_tree_t)); + tree = new ompi_coll_tree_t; if (not tree) { XBT_DEBUG("coll:tuned:topo_build_tree PANIC::out of memory"); return NULL; } - tree->tree_root = MPI_UNDEFINED; - tree->tree_nextsize = MPI_UNDEFINED; - /* * Initialize tree */ @@ -233,11 +223,11 @@ ompi_coll_tuned_topo_build_in_order_bintree( MPI_Comm comm ) while ( 1 ) { /* Compute the size of the right subtree */ - rightsize = size >> 1; + int rightsize = size >> 1; /* Determine the left and right child of this parent */ - lchild = -1; - rchild = -1; + int lchild = -1; + int rchild = -1; if (size - 1 > 0) { lchild = parent - 1; if (lchild > 0) { @@ -304,7 +294,7 @@ int ompi_coll_tuned_topo_destroy_tree( ompi_coll_tree_t** tree ) ptr = *tree; - free (ptr); + delete ptr; *tree = NULL; /* mark tree as gone */ return MPI_SUCCESS; @@ -326,7 +316,7 @@ ompi_coll_tree_t* ompi_coll_tuned_topo_build_bmtree( MPI_Comm comm, int root ) { - int childs = 0; + int children = 0; int rank; int size; int mask = 1; @@ -345,7 +335,7 @@ ompi_coll_tuned_topo_build_bmtree( MPI_Comm comm, index = rank -root; - bmtree = (ompi_coll_tree_t*)malloc(sizeof(ompi_coll_tree_t)); + bmtree = new ompi_coll_tree_t; if (not bmtree) { XBT_DEBUG("coll:tuned:topo:build_bmtree PANIC out of memory"); return NULL; @@ -371,21 +361,22 @@ ompi_coll_tuned_topo_build_bmtree( MPI_Comm comm, if( remote >= size ) remote -= size; bmtree->tree_prev = remote; } - /* And now let's fill my childs */ + /* And now let's fill my children */ while( mask < size ) { remote = (index ^ mask); if( remote >= size ) break; remote += root; if( remote >= size ) remote -= size; - if (childs==MAXTREEFANOUT) { - XBT_DEBUG("coll:tuned:topo:build_bmtree max fanout incorrect %d needed %d", MAXTREEFANOUT, childs); + if (children==MAXTREEFANOUT) { + XBT_DEBUG("coll:tuned:topo:build_bmtree max fanout incorrect %d needed %d", MAXTREEFANOUT, children); + delete bmtree; return NULL; } - bmtree->tree_next[childs] = remote; + bmtree->tree_next[children] = remote; mask <<= 1; - childs++; + children++; } - bmtree->tree_nextsize = childs; + bmtree->tree_nextsize = children; bmtree->tree_root = root; return bmtree; } @@ -406,11 +397,10 @@ ompi_coll_tuned_topo_build_bmtree( MPI_Comm comm, */ ompi_coll_tree_t* ompi_coll_tuned_topo_build_in_order_bmtree(MPI_Comm comm, int root) { - int childs = 0; + int children = 0; int rank, vrank; int size; int mask = 1; - int remote; ompi_coll_tree_t *bmtree; int i; @@ -424,9 +414,10 @@ ompi_coll_tree_t* ompi_coll_tuned_topo_build_in_order_bmtree(MPI_Comm comm, int vrank = (rank - root + size) % size; - bmtree = (ompi_coll_tree_t*)xbt_malloc(sizeof(ompi_coll_tree_t)); + bmtree = new ompi_coll_tree_t; if (not bmtree) { XBT_DEBUG("coll:tuned:topo:build_bmtree PANIC out of memory"); + delete bmtree; return NULL; } @@ -442,21 +433,22 @@ ompi_coll_tree_t* ompi_coll_tuned_topo_build_in_order_bmtree(MPI_Comm comm, int } while (mask < size) { - remote = vrank ^ mask; + int remote = vrank ^ mask; if (remote < vrank) { bmtree->tree_prev = (remote + root) % size; break; } else if (remote < size) { - bmtree->tree_next[childs] = (remote + root) % size; - childs++; - if (childs == MAXTREEFANOUT) { - XBT_DEBUG("coll:tuned:topo:build_bmtree max fanout incorrect %d needed %d", MAXTREEFANOUT, childs); + bmtree->tree_next[children] = (remote + root) % size; + children++; + if (children == MAXTREEFANOUT) { + XBT_DEBUG("coll:tuned:topo:build_bmtree max fanout incorrect %d needed %d", MAXTREEFANOUT, children); + delete bmtree; return NULL; } } mask <<= 1; } - bmtree->tree_nextsize = childs; + bmtree->tree_nextsize = children; bmtree->tree_root = root; return bmtree; @@ -471,7 +463,7 @@ ompi_coll_tuned_topo_build_chain( int fanout, int rank, size; int srank; /* shifted rank */ int i,maxchainlen; - int mark,head,len; + int mark; ompi_coll_tree_t *chain; XBT_DEBUG("coll:tuned:topo:build_chain fo %d rt %d", fanout, root); @@ -494,14 +486,12 @@ ompi_coll_tuned_topo_build_chain( int fanout, /* * Allocate space for topology arrays if needed */ - chain = (ompi_coll_tree_t*)malloc( sizeof(ompi_coll_tree_t) ); + chain = new ompi_coll_tree_t; if (not chain) { XBT_DEBUG("coll:tuned:topo:build_chain PANIC out of memory"); fflush(stdout); return NULL; } - chain->tree_root = MPI_UNDEFINED; - chain->tree_nextsize = -1; for(i=0;itree_next[i] = -1; /* @@ -561,6 +551,8 @@ ompi_coll_tuned_topo_build_chain( int fanout, */ if( srank != 0 ) { int column; + int head; + int len; if( srank-1 < (mark * maxchainlen) ) { column = (srank-1)/maxchainlen; head = 1+column*maxchainlen; @@ -596,7 +588,7 @@ ompi_coll_tuned_topo_build_chain( int fanout, if( rank == root ) { chain->tree_prev = -1; chain->tree_next[0] = (root+1)%size; - for( i = 1; i < fanout; i++ ) { + for (int i = 1; i < fanout; i++) { chain->tree_next[i] = chain->tree_next[i-1] + maxchainlen; if( i > mark ) { chain->tree_next[i]--; @@ -616,15 +608,13 @@ ompi_coll_tuned_topo_build_chain( int fanout, int ompi_coll_tuned_topo_dump_tree (ompi_coll_tree_t* tree, int rank) { - int i; - XBT_DEBUG("coll:tuned:topo:topo_dump_tree %1d tree root %d" " fanout %d BM %1d nextsize %d prev %d", rank, tree->tree_root, tree->tree_bmtree, tree->tree_fanout, tree->tree_nextsize, tree->tree_prev); if( tree->tree_nextsize ) { - for( i = 0; i < tree->tree_nextsize; i++ ) - XBT_DEBUG("[%1d] %d", i, tree->tree_next[i]); + for (int i = 0; i < tree->tree_nextsize; i++) + XBT_DEBUG("[%1d] %d", i, tree->tree_next[i]); } return (0); }