From: Paul Bédaride Date: Fri, 12 Apr 2013 14:25:00 +0000 (+0200) Subject: Add mpi allgatherv GB X-Git-Tag: v3_9_90~412^2~2 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/645128cb5c244346bc2723e88da128723c327621?hp=f070773e633fc07bb6be25b23b7ded7657479e7f Add mpi allgatherv GB --- diff --git a/buildtools/Cmake/AddTests.cmake b/buildtools/Cmake/AddTests.cmake index db3a149160..55ef3ea74c 100644 --- a/buildtools/Cmake/AddTests.cmake +++ b/buildtools/Cmake/AddTests.cmake @@ -375,7 +375,7 @@ if(NOT enable_memcheck) smp_simple spreading_simple) ADD_TEST(smpi-allgather-coll-${ALLGATHER_COLL} ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg smpi/allgather:${ALLGATHER_COLL} --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/allgather_coll.tesh) ENDFOREACH() - FOREACH (ALLGATHERV_COLL default pair ring) + FOREACH (ALLGATHERV_COLL default GB pair ring) ADD_TEST(smpi-allgatherv-coll-${ALLGATHERV_COLL} ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg smpi/allgatherv:${ALLGATHERV_COLL} --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/allgatherv_coll.tesh) ENDFOREACH() FOREACH (ALLREDUCE_COLL default lr NTS rab1 rab2 rab_rdb diff --git a/buildtools/Cmake/DefinePackages.cmake b/buildtools/Cmake/DefinePackages.cmake index 0fd308c88b..3e9cb61cef 100644 --- a/buildtools/Cmake/DefinePackages.cmake +++ b/buildtools/Cmake/DefinePackages.cmake @@ -126,6 +126,7 @@ set(SMPI_SRC src/smpi/colls/allgather-SMP-NTS.c src/smpi/colls/allgather-smp-simple.c src/smpi/colls/allgather-spreading-simple.c + src/smpi/colls/allgatherv-GB.c src/smpi/colls/allgatherv-pair.c src/smpi/colls/allgatherv-ring.c src/smpi/colls/allreduce-lr.c diff --git a/src/smpi/colls/allgatherv-GB.c b/src/smpi/colls/allgatherv-GB.c new file mode 100644 index 0000000000..5c643faeae --- /dev/null +++ b/src/smpi/colls/allgatherv-GB.c @@ -0,0 +1,20 @@ +#include "colls_private.h" + +// Allgather - gather/bcast algorithm +int smpi_coll_tuned_allgatherv_GB(void *send_buff, int send_count, + MPI_Datatype send_type, void *recv_buff, + int *recv_counts, int *recv_disps, MPI_Datatype recv_type, + MPI_Comm comm) +{ + smpi_mpi_gatherv(send_buff, send_count, send_type, recv_buff, recv_counts, + recv_disps, recv_type, 0, comm); + int num_procs, i, current, max = 0; + num_procs = smpi_comm_size(comm); + for (i = 0; i < num_procs; i++) { + current = recv_disps[i] + recv_counts[i]; + if (current > max) max = current; + } + mpi_coll_bcast_fun(recv_buff, current, recv_type, 0, comm); + + return MPI_SUCCESS; +} diff --git a/src/smpi/colls/colls.h b/src/smpi/colls/colls.h index a2ceb932cf..17c245db9d 100644 --- a/src/smpi/colls/colls.h +++ b/src/smpi/colls/colls.h @@ -57,6 +57,7 @@ COLL_ALLGATHERS(COLL_PROTO, COLL_NOsep) MPI_Datatype recv_type, MPI_Comm comm) #define COLL_ALLGATHERVS(action, COLL_sep) \ +COLL_APPLY(action, COLL_ALLGATHERV_SIG, GB) COLL_sep \ COLL_APPLY(action, COLL_ALLGATHERV_SIG, pair) COLL_sep \ COLL_APPLY(action, COLL_ALLGATHERV_SIG, ring)