include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
foreach(file anyall bottom eagerdt huge_anysrc huge_dupcomm huge_ssend huge_underflow inactivereq isendself isendrecv isendrecv_replace isendirecv isendselfprobe issendselfcancel large_tag multi_psend_derived cancelanysrc pingping probenull
- dtype_send greq1 probe-unexp rqstatus sendall sendflood sendrecv1 sendrecv2 sendrecv3 waitany-null waittestnull many_isend manylmt recv_any sendself scancel scancel2 rcancel bsend1 bsend2 bsend3 bsend4 bsend5 bsendalign bsendfrag bsendpending rqfreeb)
+ dtype_send greq1 probe-unexp rqstatus sendall sendflood sendrecv1 sendrecv2 sendrecv3 waitany-null waittestnull many_isend manylmt recv_any sendself scancel scancel2 rcancel bsend1 bsend2 bsend3 bsend4 bsend5 bsendalign bsendfrag bsendpending rqfreeb pssend)
# not compiled files: big_count_status mprobe
# cancelrecv icsend large_message pscancel scancel_unmatch
add_executable(${file} EXCLUDE_FROM_ALL ${file}.c)
isendself isendirecv isendselfprobe issendselfcancel large_tag multi_psend_derived 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
+ cancelrecv cancelanysrc dtype_send greq1 icsend large_message pscancel pssend
+ rcancel rqfreeb rqstatus scancel2 scancel sendself many_isend manylmt mprobe recv_any scancel_unmatch
)
set(examples_src ${examples_src} ${CMAKE_CURRENT_SOURCE_DIR}/${file}.c)
endforeach()
--- /dev/null
+/*
+ * Copyright (C) by Argonne National Laboratory
+ * See COPYRIGHT in top-level directory
+ */
+
+/*
+ * This program checks the semantics of persistent synchronous send
+ */
+#include "mpi.h"
+#include "mpitest.h"
+
+int main(int argc, char *argv[])
+{
+ int errs = 0;
+ int size, rank;
+ MPI_Request req;
+ int flag;
+
+ MTest_Init(&argc, &argv);
+
+ MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+ MPI_Comm_size(MPI_COMM_WORLD, &size);
+
+ if (size < 2) {
+ fprintf(stderr, "Launch with two processes\n");
+ MPI_Abort(MPI_COMM_WORLD, 1);
+ }
+
+ if (rank == 0) {
+ MPI_Ssend_init(NULL, 0, MPI_INT, 1, 0, MPI_COMM_WORLD, &req);
+ MPI_Start(&req);
+
+ /* ssend cannot be complete at this point */
+ MPI_Test(&req, &flag, MPI_STATUS_IGNORE);
+ if (flag != 0) {
+ errs++;
+ fprintf(stderr, "ERROR: synchronous send completed before matching recv was posted\n");
+ }
+ }
+
+ MPI_Barrier(MPI_COMM_WORLD);
+
+ if (rank == 0) {
+ MPI_Wait(&req, MPI_STATUS_IGNORE);
+ MPI_Request_free(&req);
+ } else if (rank == 1) {
+ MPI_Recv(NULL, 0, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+ }
+
+ MTest_Finalize(errs);
+
+ return 0;
+}