From 4e542e84cc04fe3099015852fb5990fc4151d54b Mon Sep 17 00:00:00 2001 From: degomme Date: Mon, 10 Apr 2017 18:06:17 +0200 Subject: [PATCH] Add two new mpich tests. Taken from https://github.com/pmodels/mpich/commit/c4d2d5b88d530f1f8d3a74fe725b8fa30f57137e and https://github.com/pmodels/mpich/commit/cc7f28a1442f8bf731e174df334ab5e770fc88b9 . They are rather simple and useless for us, but I'm tracking all changes to mpich test tree now to ease updates. --- .../smpi/mpich3-test/pt2pt/CMakeLists.txt | 4 +- .../smpi/mpich3-test/pt2pt/huge_anysrc.c | 60 +++++++++++++++++++ .../smpi/mpich3-test/pt2pt/huge_underflow.c | 57 ++++++++++++++++++ teshsuite/smpi/mpich3-test/pt2pt/testlist | 2 + 4 files changed, 121 insertions(+), 2 deletions(-) create mode 100644 teshsuite/smpi/mpich3-test/pt2pt/huge_anysrc.c create mode 100644 teshsuite/smpi/mpich3-test/pt2pt/huge_underflow.c diff --git a/teshsuite/smpi/mpich3-test/pt2pt/CMakeLists.txt b/teshsuite/smpi/mpich3-test/pt2pt/CMakeLists.txt index 9496160941..b29fc890c0 100644 --- a/teshsuite/smpi/mpich3-test/pt2pt/CMakeLists.txt +++ b/teshsuite/smpi/mpich3-test/pt2pt/CMakeLists.txt @@ -9,7 +9,7 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite) include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi") include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/") - foreach(file anyall bottom eagerdt inactivereq isendself isendirecv isendselfprobe issendselfcancel cancelanysrc pingping probenull + foreach(file anyall bottom eagerdt huge_anysrc huge_underflow inactivereq isendself isendirecv isendselfprobe issendselfcancel cancelanysrc pingping probenull dtype_send probe-unexp sendall sendflood sendrecv1 sendrecv2 sendrecv3 waitany-null waittestnull many_isend manylmt recv_any) # not compiled files: big_count_status bsend1 bsend2 bsend3 bsend4 bsend5 bsendalign bsendfrag bsendpending mprobe # cancelrecv greq1 icsend large_message pscancel rcancel rqfreeb rqstatus scancel2 scancel sendself scancel_unmatch @@ -23,7 +23,7 @@ if (enable_smpi_MPICH3_testsuite AND HAVE_RAW_CONTEXTS) SET_TESTS_PROPERTIES(test-smpi-mpich3-pt2pt-raw PROPERTIES PASS_REGULAR_EXPRESSION "tests passed!") endif() -foreach(file anyall bottom eagerdt inactivereq isendself isendirecv isendselfprobe issendselfcancel pingping probenull +foreach(file anyall bottom eagerdt huge_anysrc huge_underflow inactivereq isendself isendirecv isendselfprobe issendselfcancel pingping probenull probe-unexp sendall sendflood sendrecv1 sendrecv2 sendrecv3 waitany-null waittestnull big_count_status bsend1 bsend2 bsend3 bsend4 bsend5 bsendalign bsendfrag bsendpending cancelrecv cancelanysrc dtype_send greq1 icsend large_message pscancel rcancel rqfreeb rqstatus scancel2 scancel sendself many_isend manylmt mprobe recv_any scancel_unmatch diff --git a/teshsuite/smpi/mpich3-test/pt2pt/huge_anysrc.c b/teshsuite/smpi/mpich3-test/pt2pt/huge_anysrc.c new file mode 100644 index 0000000000..4386c291a3 --- /dev/null +++ b/teshsuite/smpi/mpich3-test/pt2pt/huge_anysrc.c @@ -0,0 +1,60 @@ +/* + * (C) 2017 by Argonne National Laboratory. + * See COPYRIGHT in top-level directory. + * + * Portions of this code were written by Intel Corporation. + * Copyright (C) 2011-2017 Intel Corporation. Intel provides this material + * to Argonne National Laboratory subject to Software Grant and Corporate + * Contributor License Agreement dated February 8, 2012. + * + * This program checks if MPICH can correctly handle many outstanding large + * message transfers which use wildcard receives. + * + */ + +#include +#include +#include +#include + +#define N_TRY 16 +#define BLKSIZE (10*1024*1024) + +int main(int argc, char *argv[]) +{ + int size, rank; + int dest; + int i; + char *buff; + MPI_Request reqs[N_TRY]; + + MPI_Init(&argc, &argv); + + buff = malloc(N_TRY * BLKSIZE); + memset(buff, -1, N_TRY * BLKSIZE); + + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); + + dest = size - 1; + + if (rank == 0) { + for (i = 0; i < N_TRY; i++) + MPI_Isend(buff + BLKSIZE*i, BLKSIZE, MPI_BYTE, dest, 0, MPI_COMM_WORLD, &reqs[i]); + MPI_Waitall(N_TRY, reqs, MPI_STATUSES_IGNORE); + } + else if (rank == dest) { + for (i = 0; i < N_TRY; i++) + MPI_Irecv(buff + BLKSIZE*i, BLKSIZE, MPI_BYTE, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &reqs[i]); + MPI_Waitall(N_TRY, reqs, MPI_STATUSES_IGNORE); + } + + free(buff); + + if (rank == 0) + puts(" No Errors"); + + MPI_Finalize(); + + return 0; +} diff --git a/teshsuite/smpi/mpich3-test/pt2pt/huge_underflow.c b/teshsuite/smpi/mpich3-test/pt2pt/huge_underflow.c new file mode 100644 index 0000000000..34c0908595 --- /dev/null +++ b/teshsuite/smpi/mpich3-test/pt2pt/huge_underflow.c @@ -0,0 +1,57 @@ + +/* + * (C) 2017 by Argonne National Laboratory. + * See COPYRIGHT in top-level directory. + * + * Portions of this code were written by Intel Corporation. + * Copyright (C) 2011-2017 Intel Corporation. Intel provides this material + * to Argonne National Laboratory subject to Software Grant and Corporate + * Contributor License Agreement dated February 8, 2012. + * + * This program checks if MPICH can correctly handle a huge message receive + * when the sender underflows by sending a much smaller message + * + */ + +#include +#include +#include +#include + +#define HUGE_SIZE (10*1024*1024) + +int main(int argc, char *argv[]) +{ + int size, rank; + int dest; + char *buff; + + MPI_Init(&argc, &argv); + + buff = malloc(HUGE_SIZE); + buff[0] = 0; + + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); + + dest = size - 1; + + /* Try testing underflow to make sure things work if we try to send 1 byte + * when receiving a huge message */ + if (rank == 0) { + MPI_Send(buff, 1, MPI_BYTE, dest, 0, MPI_COMM_WORLD); + } else if (rank == dest) { + MPI_Recv(buff, HUGE_SIZE, MPI_BYTE, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); + } + + free(buff); + + MPI_Barrier(MPI_COMM_WORLD); + + if (rank == 0) + puts(" No Errors"); + + MPI_Finalize(); + + return 0; +} diff --git a/teshsuite/smpi/mpich3-test/pt2pt/testlist b/teshsuite/smpi/mpich3-test/pt2pt/testlist index 5cac6c438a..131ae7643b 100644 --- a/teshsuite/smpi/mpich3-test/pt2pt/testlist +++ b/teshsuite/smpi/mpich3-test/pt2pt/testlist @@ -53,6 +53,8 @@ mprobe 2 mpiversion=3.0 big_count_status 1 mpiversion=3.0 many_isend 3 manylmt 2 +huge_anysrc 2 +huge_underflow 2 #Needs MPI_Irsend #dtype_send 2 recv_any 2 -- 2.20.1