Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix most of spelling mistakes in src/
[simgrid.git] / src / smpi / colls / bcast / bcast-ompi-split-bintree.cpp
index 578cd89..e91c768 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013-2019. The SimGrid Team.
+/* Copyright (c) 2013-2020. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
 #include "../coll_tuned_topo.hpp"
 #include "../colls_private.hpp"
 #define MAXTREEFANOUT 32
-namespace simgrid{
-namespace smpi{
-
-int
-Coll_bcast_ompi_split_bintree::bcast ( void* buffer,
-                                            int count,
-                                            MPI_Datatype datatype,
-                                            int root,
-                                            MPI_Comm comm)
+namespace simgrid {
+namespace smpi {
+
+int bcast__ompi_split_bintree( void* buffer,
+                               int count,
+                               MPI_Datatype datatype,
+                               int root,
+                               MPI_Comm comm)
 {
     unsigned int segsize ;
     int rank, size;
     int segindex, i, lr, pair;
     int segcount[2];       /* Number ompi_request_wait_allof elements sent with each segment */
     uint32_t counts[2];
-    int num_segments[2];   /* Number of segmenets */
+    int num_segments[2];   /* Number of segments */
     int sendcount[2];      /* the same like segcount, except for the last segment */
     size_t realsegsize[2];
     char *tmpbuf[2];
@@ -136,8 +135,7 @@ Coll_bcast_ompi_split_bintree::bcast ( void* buffer,
         (segsize > counts[0] * type_size) ||
         (segsize > counts[1] * type_size) ) {
         /* call linear version here ! */
-        return (Coll_bcast_SMP_linear::bcast ( buffer, count, datatype,
-                                                    root, comm));
+        return bcast__SMP_linear( buffer, count, datatype, root, comm);
     }
     type_extent = datatype->get_extent();
 
@@ -185,43 +183,38 @@ Coll_bcast_ompi_split_bintree::bcast ( void* buffer,
 
     /* intermediate nodes code */
     else if( tree->tree_nextsize > 0 ) {
-        /* Intermediate nodes:
-         * It will receive segments only from one half of the data.
-         * Which one is determined by whether the node belongs to the "left" or "right"
-         * subtree. Topoloby building function builds binary tree such that
-         * odd "shifted ranks" ((rank + size - root)%size) are on the left subtree,
-         * and even on the right subtree.
-         *
-         * Create the pipeline. We first post the first receive, then in the loop we
-         * post the next receive and after that wait for the previous receive to complete
-         * and we disseminating the data to all children.
-         */
-        sendcount[lr] = segcount[lr];
-        base_req=Request::irecv(tmpbuf[lr], sendcount[lr], datatype,
-                           tree->tree_prev, COLL_TAG_BCAST,
-                           comm);
+      /* Intermediate nodes:
+       * It will receive segments only from one half of the data.
+       * Which one is determined by whether the node belongs to the "left" or "right"
+       * subtree. Topology building function builds binary tree such that
+       * odd "shifted ranks" ((rank + size - root)%size) are on the left subtree,
+       * and even on the right subtree.
+       *
+       * Create the pipeline. We first post the first receive, then in the loop we
+       * post the next receive and after that wait for the previous receive to complete
+       * and we disseminating the data to all children.
+       */
+      sendcount[lr] = segcount[lr];
+      base_req      = Request::irecv(tmpbuf[lr], sendcount[lr], datatype, tree->tree_prev, COLL_TAG_BCAST, comm);
+
+      for (segindex = 1; segindex < num_segments[lr]; segindex++) {
+        /* determine how many elements to expect in this round */
+        if (segindex == (num_segments[lr] - 1))
+          sendcount[lr] = counts[lr] - segindex * segcount[lr];
+        /* post new irecv */
+        new_req = Request::irecv(tmpbuf[lr] + realsegsize[lr], sendcount[lr], datatype, tree->tree_prev, COLL_TAG_BCAST,
+                                 comm);
+
+        /* wait for and forward current segment */
+        Request::waitall(1, &base_req, MPI_STATUSES_IGNORE);
+        for (i = 0; i < tree->tree_nextsize; i++) { /* send data to children (segcount[lr]) */
+          Request::send(tmpbuf[lr], segcount[lr], datatype, tree->tree_next[i], COLL_TAG_BCAST, comm);
+        } /* end of for each child */
 
-        for( segindex = 1; segindex < num_segments[lr]; segindex++ ) {
-            /* determine how many elements to expect in this round */
-            if( segindex == (num_segments[lr] - 1))
-                sendcount[lr] = counts[lr] - segindex*segcount[lr];
-            /* post new irecv */
-            new_req = Request::irecv( tmpbuf[lr] + realsegsize[lr], sendcount[lr],
-                                datatype, tree->tree_prev, COLL_TAG_BCAST,
-                                comm);
-
-            /* wait for and forward current segment */
-            Request::waitall( 1, &base_req, MPI_STATUSES_IGNORE );
-            for( i = 0; i < tree->tree_nextsize; i++ ) {  /* send data to children (segcount[lr]) */
-                Request::send( tmpbuf[lr], segcount[lr], datatype,
-                                   tree->tree_next[i], COLL_TAG_BCAST,
-                                   comm);
-            } /* end of for each child */
-
-            /* upate the base request */
-            base_req = new_req;
-            /* go to the next buffer (ie. the one corresponding to the next recv) */
-            tmpbuf[lr] += realsegsize[lr];
+        /* update the base request */
+        base_req = new_req;
+        /* go to the next buffer (ie. the one corresponding to the next recv) */
+        tmpbuf[lr] += realsegsize[lr];
         } /* end of for segindex */
 
         /* wait for the last segment and forward current segment */