-
Notifications
You must be signed in to change notification settings - Fork 0
/
InvalidArg-WildcardInPrecvInitError.cpp
100 lines (88 loc) · 2.54 KB
/
InvalidArg-WildcardInPrecvInitError.cpp
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/* Part of the MUST Project, under BSD-3-Clause License
* See https://hpc.rwth-aachen.de/must/LICENSE for license information.
* SPDX-License-Identifier: BSD-3-Clause
*/
// RUN: mpicxx -g %s -o %s.exe
// RUN: mustrun -np 2 %s.exe 2>&1 | %filecheck %s
// CHECK: [MUST-REPORT]{{.*has to be a rank in the given communicator or MPI_PROC_NULL, but is negative.*}}
/**
* @file InvalidArg-WildcardInPrecvInitError.cpp
* This is a test for the analysis group PartitionedP2PChecks.
*
* Description:
* Performs a partitioned send and recv where the Wildcard MPI_ANY_SOURCE is used in Prev_init,
* which is a usage error.
*
* @date 13.09.2022
* @author Niko Sakic
*/
#include <iostream>
#include <mpi.h>
#define PARTITIONS 8
#define COUNT 5
int main(int argc, char** argv)
{
double message[PARTITIONS * COUNT];
MPI_Count partitions = PARTITIONS;
int size, rank;
int dest = 1, tag = 1, flag = 0;
int i;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Request request;
//Enough tasks ?
if (size < 2) {
std::cerr << "This test needs at least 2 processes!" << std::endl;
MPI_Finalize();
return 1;
}
//Say hello
std::cout << "Hello, I am rank " << rank << " of " << size << " processes." << std::endl;
if (rank == 0) {
MPI_Psend_init(
message,
partitions,
COUNT,
MPI_DOUBLE,
dest,
tag,
MPI_COMM_WORLD,
MPI_INFO_NULL,
&request);
MPI_Start(&request);
for (i = 0; i < partitions; ++i) {
/* compute and fill partition #i, then mark ready: */
MPI_Pready(i, request);
}
while (!flag) {
/* do useful work #1 */
MPI_Test(&request, &flag, MPI_STATUS_IGNORE);
/* do useful work #2 */
}
MPI_Request_free(&request);
}
if (rank == 1) {
MPI_Precv_init(
message,
partitions,
COUNT,
MPI_DOUBLE,
MPI_ANY_SOURCE,
tag,
MPI_COMM_WORLD,
MPI_INFO_NULL,
&request);
MPI_Start(&request);
while (!flag) {
/* do useful work #1 */
MPI_Test(&request, &flag, MPI_STATUS_IGNORE);
/* do useful work #2 */
}
MPI_Request_free(&request);
}
//Say bye bye
std::cout << "Signing off, rank " << rank << "." << std::endl;
MPI_Finalize();
return 0;
}