Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Update copyright lines with new year.
[simgrid.git] / src / smpi / colls / alltoall / alltoall-mvapich-scatter-dest.cpp
index 7dbad24..15dd553 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013-2017. 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
  * copyright file COPYRIGHT in the top level MVAPICH2 directory.
  *
  */
+
 //correct on stampede
 #define MV2_ALLTOALL_THROTTLE_FACTOR         4
-#include "../colls_private.h"
+
+#include "../colls_private.hpp"
 namespace simgrid{
 namespace smpi{
-int Coll_alltoall_mvapich2_scatter_dest::alltoall(
-                            void *sendbuf,
-                            int sendcount,
-                            MPI_Datatype sendtype,
-                            void *recvbuf,
-                            int recvcount,
-                            MPI_Datatype recvtype,
-                            MPI_Comm comm)
+int alltoall__mvapich2_scatter_dest(const void *sendbuf,
+                                    int sendcount,
+                                    MPI_Datatype sendtype,
+                                    void *recvbuf,
+                                    int recvcount,
+                                    MPI_Datatype recvtype,
+                                    MPI_Comm comm)
 {
     int          comm_size, i, j;
     MPI_Aint     sendtype_extent = 0, recvtype_extent = 0;
     int mpi_errno=MPI_SUCCESS;
     int dst, rank;
-    MPI_Request *reqarray;
-    MPI_Status *starray;
-    
+
     if (recvcount == 0) return MPI_SUCCESS;
-    
+
     comm_size =  comm->size();
     rank = comm->rank();
-    
+
     /* Get extent of send and recv types */
     recvtype_extent = recvtype->get_extent();
     sendtype_extent = sendtype->get_extent();
-    
+
     /* Medium-size message. Use isend/irecv with scattered
      destinations. Use Tony Ladd's modification to post only
      a small number of isends/irecvs at a time. */
@@ -83,20 +80,20 @@ int Coll_alltoall_mvapich2_scatter_dest::alltoall(
      there are only a few isend/irecvs left)
      */
     int ii, ss, bblock;
-        
+
     //Stampede is configured with
     bblock = MV2_ALLTOALL_THROTTLE_FACTOR;//mv2_coll_param.alltoall_throttle_factor;
-    
+
     if (bblock >= comm_size) bblock = comm_size;
     /* If throttle_factor is n, each process posts n pairs of isend/irecv
      in each iteration. */
-    
+
     /* FIXME: This should use the memory macros (there are storage
      leaks here if there is an error, for example) */
-    reqarray= (MPI_Request*)xbt_malloc(2*bblock*sizeof(MPI_Request));
-    
-    starray=(MPI_Status *)xbt_malloc(2*bblock*sizeof(MPI_Status));
+    MPI_Request* reqarray = new MPI_Request[2 * bblock];
+
+    MPI_Status* starray = new MPI_Status[2 * bblock];
+
     for (ii=0; ii<comm_size; ii+=bblock) {
         ss = comm_size-ii < bblock ? comm_size-ii : bblock;
         /* do the communication -- post ss sends and receives: */
@@ -116,11 +113,11 @@ int Coll_alltoall_mvapich2_scatter_dest::alltoall(
                                           COLL_TAG_ALLTOALL, comm);
 
         }
-        
+
         /* ... then wait for them to finish: */
         Request::waitall(2*ss,reqarray,starray);
-        
-       
+
+
         /* --BEGIN ERROR HANDLING-- */
         if (mpi_errno == MPI_ERR_IN_STATUS) {
                 for (j=0; j<2*ss; j++) {
@@ -131,10 +128,10 @@ int Coll_alltoall_mvapich2_scatter_dest::alltoall(
         }
     }
     /* --END ERROR HANDLING-- */
-    xbt_free(starray);
-    xbt_free(reqarray);
+    delete[] starray;
+    delete[] reqarray;
     return (mpi_errno);
-    
+
 }
 }
 }