Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Reduce the amount of header files loading xbt/string.hpp
[simgrid.git] / src / smpi / colls / allgather / allgather-smp-simple.cpp
index b559ba4..cf4abb9 100644 (file)
@@ -1,19 +1,17 @@
-/* Copyright (c) 2013-2019. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2013-2022. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "../colls_private.hpp"
+#include "xbt/string.hpp"
 
-namespace simgrid{
-namespace smpi{
+namespace simgrid::smpi {
 
-
-int Coll_allgather_smp_simple::allgather(void *send_buf, int scount,
-                                         MPI_Datatype stype, void *recv_buf,
-                                         int rcount, MPI_Datatype rtype,
-                                         MPI_Comm comm)
+int allgather__smp_simple(const void *send_buf, int scount,
+                          MPI_Datatype stype, void *recv_buf,
+                          int rcount, MPI_Datatype rtype,
+                          MPI_Comm comm)
 {
   int src, dst, comm_size, rank;
   comm_size = comm->size();
@@ -27,7 +25,9 @@ int Coll_allgather_smp_simple::allgather(void *send_buf, int scount,
   }
 
   if(comm_size%num_core)
-     THROWF(arg_error,0, "allgather SMP simple algorithm can't be used with non multiple of NUM_CORE=%d number of processes ! ", num_core);
+    throw std::invalid_argument(xbt::string_printf(
+        "allgather SMP simple algorithm can't be used with non multiple of NUM_CORE=%d number of processes!",
+        num_core));
 
   rank = comm->rank();
   MPI_Aint rextent, sextent;
@@ -73,12 +73,10 @@ int Coll_allgather_smp_simple::allgather(void *send_buf, int scount,
 
 
   if (intra_rank == 0) {
-    MPI_Request *reqs, *req_ptr;
     int num_req = (inter_comm_size - 1) * 2;
-    reqs = (MPI_Request *) xbt_malloc(num_req * sizeof(MPI_Request));
-    req_ptr = reqs;
-    MPI_Status *stat;
-    stat = (MPI_Status *) xbt_malloc(num_req * sizeof(MPI_Status));
+    auto* reqs           = new MPI_Request[num_req];
+    MPI_Request* req_ptr = reqs;
+    auto* stat           = new MPI_Status[num_req];
 
     for (i = 1; i < inter_comm_size; i++) {
 
@@ -105,9 +103,8 @@ int Coll_allgather_smp_simple::allgather(void *send_buf, int scount,
       //MPIC_Irecv((recv_buf+recv_offset), (rcount * num_core), rtype, src, tag, comm, req_ptr++);
     }
     Request::waitall(num_req, reqs, stat);
-    free(reqs);
-    free(stat);
-
+    delete[] reqs;
+    delete[] stat;
   }
   //INTRA-BCAST (use flat tree)
 
@@ -126,6 +123,4 @@ int Coll_allgather_smp_simple::allgather(void *send_buf, int scount,
   return MPI_SUCCESS;
 }
 
-
-}
-}
+} // namespace simgrid::smpi