From: Augustin Degomme Date: Tue, 11 Jun 2013 15:53:17 +0000 (+0200) Subject: add test for gather collectives X-Git-Tag: v3_9_90~276^2~12 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/be7ef7ac1f3f0daf1ced88e55c149e6f43912ce6 add test for gather collectives --- diff --git a/buildtools/Cmake/AddTests.cmake b/buildtools/Cmake/AddTests.cmake index bef08edd8d..3ec061dff0 100644 --- a/buildtools/Cmake/AddTests.cmake +++ b/buildtools/Cmake/AddTests.cmake @@ -371,35 +371,46 @@ if(NOT enable_memcheck) ADD_TEST(smpi-replay ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi --cd ${CMAKE_BINARY_DIR}/examples/smpi ${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/smpi_replay.tesh) endif() + + FOREACH (GATHER_COLL default ompi ompi_basic_linear ompi_linear_sync ompi_binomial) + ADD_TEST(smpi-gather-coll-${GATHER_COLL} ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg smpi/gather:${GATHER_COLL} --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/gather_coll.tesh) + ENDFOREACH() + FOREACH (ALLGATHER_COLL default 2dmesh 3dmesh bruck GB loosely_lr lr NTSLR NTSLR_NB pair rdb rhv ring SMP_NTS smp_simple spreading_simple ompi ompi_neighborexchange) 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 GB pair ring ompi ompi_neighborexchange) 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 rab_rsag rdb smp_binomial smp_binomial_pipeline smp_rdb smp_rsag smp_rsag_lr smp_rsag_rab redbcast ompi ompi_ring_segmented) ADD_TEST(smpi-allreduce-coll-${ALLREDUCE_COLL} ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg smpi/allreduce:${ALLREDUCE_COLL} --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/allreduce_coll.tesh) ENDFOREACH() + FOREACH (ALLTOALL_COLL 2dmesh 3dmesh pair pair_one_barrier pair_light_barrier pair_mpi_barrier rdb ring ring_light_barrier ring_mpi_barrier ring_one_barrier simple bruck basic_linear ompi) ADD_TEST(smpi-alltoall-coll-${ALLTOALL_COLL} ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg smpi/alltoall:${ALLTOALL_COLL} --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/alltoall_coll.tesh) ENDFOREACH() + FOREACH (ALLTOALLV_COLL default pair pair_light_barrier pair_mpi_barrier pair_one_barrier ring ring_light_barrier ring_mpi_barrier ring_one_barrier bruck ompi) ADD_TEST(smpi-alltoallv-coll-${ALLTOALLV_COLL} ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg smpi/alltoallv:${ALLTOALLV_COLL} --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/alltoallv_coll.tesh) ENDFOREACH() + FOREACH (BCAST_COLL default arrival_nb arrival_pattern_aware arrival_pattern_aware_wait arrival_scatter binomial_tree flattree flattree_pipeline NTSB NTSL NTSL_Isend scatter_LR_allgather scatter_rdb_allgather SMP_binary SMP_binomial SMP_linear ompi ompi_split_bintree ompi_pipeline) ADD_TEST(smpi-bcast-coll-${BCAST_COLL} ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg smpi/bcast:${BCAST_COLL} --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/bcast_coll.tesh) ENDFOREACH() + FOREACH (REDUCE_COLL default arrival_pattern_aware binomial flat_tree NTSL scatter_gather ompi ompi_chain ompi_binary ompi_basic_linear ompi_binomial ompi_in_order_binary) ADD_TEST(smpi-reduce-coll-${REDUCE_COLL} ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg smpi/reduce:${REDUCE_COLL} --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/reduce_coll.tesh) ENDFOREACH() diff --git a/teshsuite/smpi/CMakeLists.txt b/teshsuite/smpi/CMakeLists.txt index e74b5a56e6..78de3f413f 100644 --- a/teshsuite/smpi/CMakeLists.txt +++ b/teshsuite/smpi/CMakeLists.txt @@ -10,7 +10,7 @@ if(enable_smpi) set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") include_directories("${CMAKE_HOME_DIRECTORY}/include/smpi") - + add_executable(gather_coll gather_coll.c) add_executable(allgather_coll allgather_coll.c) add_executable(allgatherv_coll allgatherv_coll.c) add_executable(alltoall2 alltoall2.c) @@ -36,6 +36,7 @@ if(enable_smpi) add_executable(indexed_test indexed_test.c) add_executable(struct_test struct_test.c) + target_link_libraries(gather_coll simgrid) target_link_libraries(allgather_coll simgrid) target_link_libraries(allgatherv_coll simgrid) target_link_libraries(alltoall2 simgrid) @@ -73,6 +74,7 @@ endif() set(tesh_files ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/gather_coll.tesh ${CMAKE_CURRENT_SOURCE_DIR}/allgather_coll.tesh ${CMAKE_CURRENT_SOURCE_DIR}/allgatherv_coll.tesh ${CMAKE_CURRENT_SOURCE_DIR}/allreduce_coll.tesh @@ -96,6 +98,7 @@ set(xml_files ) set(examples_src ${examples_src} + ${CMAKE_CURRENT_SOURCE_DIR}/gather_coll.c ${CMAKE_CURRENT_SOURCE_DIR}/allgather_coll.c ${CMAKE_CURRENT_SOURCE_DIR}/allgatherv_coll.c ${CMAKE_CURRENT_SOURCE_DIR}/allreduce_coll.c diff --git a/teshsuite/smpi/gather_coll.c b/teshsuite/smpi/gather_coll.c new file mode 100644 index 0000000000..a6111b46de --- /dev/null +++ b/teshsuite/smpi/gather_coll.c @@ -0,0 +1,65 @@ +/* Copyright (c) 2009, 2010. 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 +#include +#include +#include +#include "mpi.h" + +#ifndef EXIT_SUCCESS +#define EXIT_SUCCESS 0 +#define EXIT_FAILURE 1 +#endif + +int main(int argc, char *argv[]) +{ + int rank, size; + int i; + int *sb; + int *rb; + int status; + + int root = 0; + + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); + + int count = 2; + sb = (int *) xbt_malloc(count * sizeof(int)); + rb = (int *) xbt_malloc(count * size * sizeof(int)); + + for (i = 0; i < count; ++i) + sb[i] = rank * count + i; + for (i = 0; i < count * size; ++i) + rb[i] = 0; + + printf("[%d] sndbuf=[", rank); + for (i = 0; i < count; i++) + printf("%d ", sb[i]); + printf("]\n"); + + status = MPI_Gather(sb, count, MPI_INT, rb, count, MPI_INT, root, MPI_COMM_WORLD); + + if (rank == root) { + printf("[%d] rcvbuf=[", rank); + for (i = 0; i < count * size; i++) + printf("%d ", rb[i]); + printf("]\n"); + + + if (status != MPI_SUCCESS) { + printf("allgather returned %d\n", status); + fflush(stdout); + } + } + free(sb); + free(rb); + MPI_Barrier(MPI_COMM_WORLD); + MPI_Finalize(); + return (EXIT_SUCCESS); +} diff --git a/teshsuite/smpi/gather_coll.tesh b/teshsuite/smpi/gather_coll.tesh new file mode 100644 index 0000000000..c4b40fe684 --- /dev/null +++ b/teshsuite/smpi/gather_coll.tesh @@ -0,0 +1,42 @@ +# Smpi Alltoall collectives tests +! setenv LD_LIBRARY_PATH=../../lib +! output sort + +p Test all to all +$ ../../bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ./gather_coll +> You requested to use 16 processes, but there is only 5 processes in your hostfile... +> [rank 0] -> Tremblay +> [rank 1] -> Jupiter +> [rank 2] -> Fafard +> [rank 3] -> Ginette +> [rank 4] -> Bourassa +> [rank 5] -> Tremblay +> [rank 6] -> Jupiter +> [rank 7] -> Fafard +> [rank 8] -> Ginette +> [rank 9] -> Bourassa +> [rank 10] -> Tremblay +> [rank 11] -> Jupiter +> [rank 12] -> Fafard +> [rank 13] -> Ginette +> [rank 14] -> Bourassa +> [rank 15] -> Tremblay +> [0.000000] [surf_config/INFO] Switching workstation model to compound since you changed the network and/or cpu model(s) +> [0] rcvbuf=[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ] +> [0] sndbuf=[0 1 ] +> [1] sndbuf=[2 3 ] +> [2] sndbuf=[4 5 ] +> [3] sndbuf=[6 7 ] +> [4] sndbuf=[8 9 ] +> [5] sndbuf=[10 11 ] +> [6] sndbuf=[12 13 ] +> [7] sndbuf=[14 15 ] +> [8] sndbuf=[16 17 ] +> [9] sndbuf=[18 19 ] +> [10] sndbuf=[20 21 ] +> [11] sndbuf=[22 23 ] +> [12] sndbuf=[24 25 ] +> [13] sndbuf=[26 27 ] +> [14] sndbuf=[28 29 ] +> [15] sndbuf=[30 31 ] +