- if (comm->is_uniform() != 1) {
-
- int *displs = NULL;
- int *recvcnts = NULL;
- int *node_sizes = NULL;
- int i = 0;
-
- node_sizes = comm->get_non_uniform_map();
-
- displs = static_cast<int *>(xbt_malloc(sizeof (int) * leader_comm_size));
- recvcnts = static_cast<int *>(xbt_malloc(sizeof (int) * leader_comm_size));
- if (not displs || not recvcnts) {
- return MPI_ERR_OTHER;
- }
- recvcnts[0] = node_sizes[0] * recvcnt;
- displs[0] = 0;
-
- for (i = 1; i < leader_comm_size; i++) {
- displs[i] = displs[i - 1] + node_sizes[i - 1] * recvcnt;
- recvcnts[i] = node_sizes[i] * recvcnt;
- }
-
-
- void* sendbuf=((char*)recvbuf)+recvtype->get_extent()*displs[leader_comm->rank()];
-
- mpi_errno = Colls::allgatherv(sendbuf,
- (recvcnt*local_size),
- recvtype,
- recvbuf, recvcnts,
- displs, recvtype,
- leader_comm);
- xbt_free(displs);
- xbt_free(recvcnts);
+ if (not comm->is_uniform()) {
+
+ int* node_sizes = nullptr;
+ int i = 0;
+
+ node_sizes = comm->get_non_uniform_map();
+
+ int* displs = new int[leader_comm_size];
+ int* recvcnts = new int[leader_comm_size];
+ recvcnts[0] = node_sizes[0] * recvcnt;
+ displs[0] = 0;
+
+ for (i = 1; i < leader_comm_size; i++) {
+ displs[i] = displs[i - 1] + node_sizes[i - 1] * recvcnt;
+ recvcnts[i] = node_sizes[i] * recvcnt;
+ }
+
+ void* sendtmpbuf = ((char*)recvbuf) + recvtype->get_extent() * displs[leader_comm->rank()];
+
+ mpi_errno = colls::allgatherv(sendtmpbuf, (recvcnt * local_size), recvtype, recvbuf, recvcnts, displs,
+ recvtype, leader_comm);
+ delete[] displs;
+ delete[] recvcnts;