Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add two new mpich tests.
authordegomme <augustin.degomme@unibas.ch>
Mon, 10 Apr 2017 16:06:17 +0000 (18:06 +0200)
committerdegomme <augustin.degomme@unibas.ch>
Mon, 10 Apr 2017 16:06:17 +0000 (18:06 +0200)
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.

teshsuite/smpi/mpich3-test/pt2pt/CMakeLists.txt
teshsuite/smpi/mpich3-test/pt2pt/huge_anysrc.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/pt2pt/huge_underflow.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/pt2pt/testlist

index 9496160..b29fc89 100644 (file)
@@ -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 (file)
index 0000000..4386c29
--- /dev/null
@@ -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 <stdio.h>
+#include <stdlib.h>
+#include <memory.h>
+#include <mpi.h>
+
+#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 (file)
index 0000000..34c0908
--- /dev/null
@@ -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 <stdio.h>
+#include <stdlib.h>
+#include <memory.h>
+#include <mpi.h>
+
+#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;
+}
index 5cac6c4..131ae76 100644 (file)
@@ -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