-/* Copyright (c) 2013-2017. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2013-2023. 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.h"
+#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();
}
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;
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++) {
//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)
return MPI_SUCCESS;
}
-
-}
-}
+} // namespace simgrid::smpi