X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/40616078da72e823931c1fb884949054699ec39d..271068c7d949ed959313b055466e13539485bc2c:/src/smpi/colls/allgatherv/allgatherv-mpich-rdb.cpp diff --git a/src/smpi/colls/allgatherv/allgatherv-mpich-rdb.cpp b/src/smpi/colls/allgatherv/allgatherv-mpich-rdb.cpp index c224fbd7d8..0087dd73ed 100644 --- a/src/smpi/colls/allgatherv/allgatherv-mpich-rdb.cpp +++ b/src/smpi/colls/allgatherv/allgatherv-mpich-rdb.cpp @@ -1,19 +1,25 @@ -/* Copyright (c) 2013-2014. The SimGrid Team. - * All rights reserved. */ +/* Copyright (c) 2013-2019. 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. */ - /* Short or medium size message and power-of-two no. of processes. Use - * recursive doubling algorithm */ -#include "../colls_private.h" -int smpi_coll_tuned_allgatherv_mpich_rdb ( - void *sendbuf, +/* Short or medium size message and power-of-two no. of processes. Use + * recursive doubling algorithm */ + +#include "../colls_private.hpp" +#include "smpi_status.hpp" +#include + +namespace simgrid{ +namespace smpi{ + +int allgatherv__mpich_rdb( + const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, - int *recvcounts, - int *displs, + const int *recvcounts, + const int *displs, MPI_Datatype recvtype, MPI_Comm comm) { @@ -21,7 +27,6 @@ int smpi_coll_tuned_allgatherv_mpich_rdb ( MPI_Status status; MPI_Aint recvtype_extent, recvtype_true_extent, recvtype_true_lb; unsigned int curr_cnt, dst, total_count; - void *tmp_buf, *tmp_buf_rl; unsigned int mask, dst_tree_root, my_tree_root, position, send_offset, recv_offset, last_recv_cnt=0, nprocs_completed, k, offset, tmp_mask, tree_root; @@ -43,10 +48,10 @@ int smpi_coll_tuned_allgatherv_mpich_rdb ( recvtype->extent(&recvtype_true_lb, &recvtype_true_extent); - tmp_buf_rl= (void*)smpi_get_tmp_sendbuffer(total_count*(MAX(recvtype_true_extent,recvtype_extent))); + unsigned char* tmp_buf_rl = smpi_get_tmp_sendbuffer(total_count * std::max(recvtype_true_extent, recvtype_extent)); /* adjust for potential negative lower bound in datatype */ - tmp_buf = (void *)((char*)tmp_buf_rl - recvtype_true_lb); + unsigned char* tmp_buf = tmp_buf_rl - recvtype_true_lb; /* copy local data into right location in tmp_buf */ position = 0; @@ -54,20 +59,13 @@ int smpi_coll_tuned_allgatherv_mpich_rdb ( position += recvcounts[i]; if (sendbuf != MPI_IN_PLACE) { - Datatype::copy(sendbuf, sendcount, sendtype, - ((char *)tmp_buf + position* - recvtype_extent), - recvcounts[rank], recvtype); + Datatype::copy(sendbuf, sendcount, sendtype, tmp_buf + position * recvtype_extent, recvcounts[rank], recvtype); } else { /* if in_place specified, local data is found in recvbuf */ - Datatype::copy(((char *)recvbuf + - displs[rank]*recvtype_extent), - recvcounts[rank], recvtype, - ((char *)tmp_buf + position* - recvtype_extent), - recvcounts[rank], recvtype); + Datatype::copy(static_cast(recvbuf) + displs[rank] * recvtype_extent, recvcounts[rank], recvtype, + tmp_buf + position * recvtype_extent, recvcounts[rank], recvtype); } curr_cnt = recvcounts[rank]; @@ -96,16 +94,12 @@ int smpi_coll_tuned_allgatherv_mpich_rdb ( for (j=0; j>= 1; @@ -203,10 +192,8 @@ int smpi_coll_tuned_allgatherv_mpich_rdb ( if ((sendbuf != MPI_IN_PLACE) || (j != rank)) { /* not necessary to copy if in_place and j==rank. otherwise copy. */ - Datatype::copy(((char *)tmp_buf + position*recvtype_extent), - recvcounts[j], recvtype, - ((char *)recvbuf + displs[j]*recvtype_extent), - recvcounts[j], recvtype); + Datatype::copy(tmp_buf + position * recvtype_extent, recvcounts[j], recvtype, + static_cast(recvbuf) + displs[j] * recvtype_extent, recvcounts[j], recvtype); } position += recvcounts[j]; } @@ -214,3 +201,6 @@ int smpi_coll_tuned_allgatherv_mpich_rdb ( smpi_free_tmp_buffer(tmp_buf_rl); return MPI_SUCCESS; } + +} +}