Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Update RMA tests
[simgrid.git] / teshsuite / smpi / mpich3-test / rma / win_flavors.c
1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
2 /*
3  *
4  *  (C) 2003 by Argonne National Laboratory.
5  *      See COPYRIGHT in top-level directory.
6  */
7 #include <mpi.h>
8 #include <stdio.h>
9 #include "mpitest.h"
10
11 #define ELEM_SIZE 8
12
13 int main(int argc, char *argv[])
14 {
15     int rank;
16     int errors = 0, all_errors = 0;
17     int *flavor, *model, flag;
18     void *buf;
19     MPI_Win window;
20
21     MPI_Init(&argc, &argv);
22     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
23
24     /** Create using MPI_Win_create() **/
25
26     if (rank > 0)
27         MPI_Alloc_mem(rank * ELEM_SIZE, MPI_INFO_NULL, &buf);
28     else
29         buf = NULL;
30
31     MPI_Win_create(buf, rank * ELEM_SIZE, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &window);
32     MPI_Win_get_attr(window, MPI_WIN_CREATE_FLAVOR, &flavor, &flag);
33
34     if (!flag) {
35         printf("%d: MPI_Win_create - Error, no flavor\n", rank);
36         errors++;
37     }
38     else if (*flavor != MPI_WIN_FLAVOR_CREATE) {
39         printf("%d: MPI_Win_create - Error, bad flavor (%d)\n", rank, *flavor);
40         errors++;
41     }
42
43     MPI_Win_get_attr(window, MPI_WIN_MODEL, &model, &flag);
44
45     if (!flag) {
46         printf("%d: MPI_Win_create - Error, no model\n", rank);
47         errors++;
48     }
49     else if (!(*model == MPI_WIN_SEPARATE || *model == MPI_WIN_UNIFIED)) {
50         printf("%d: MPI_Win_create - Error, bad model (%d)\n", rank, *model);
51         errors++;
52     }
53
54     MPI_Win_free(&window);
55
56     if (buf)
57         MPI_Free_mem(buf);
58
59     /** Create using MPI_Win_allocate() **/
60
61     MPI_Win_allocate(rank * ELEM_SIZE, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &buf, &window);
62
63     if (rank > 0 && buf == NULL) {
64         printf("%d: MPI_Win_allocate - Error, bad base pointer\n", rank);
65         errors++;
66     }
67
68     MPI_Win_get_attr(window, MPI_WIN_CREATE_FLAVOR, &flavor, &flag);
69
70     if (!flag) {
71         printf("%d: MPI_Win_allocate - Error, no flavor\n", rank);
72         errors++;
73     }
74     else if (*flavor != MPI_WIN_FLAVOR_ALLOCATE) {
75         printf("%d: MPI_Win_allocate - Error, bad flavor (%d)\n", rank, *flavor);
76         errors++;
77     }
78
79     MPI_Win_get_attr(window, MPI_WIN_MODEL, &model, &flag);
80
81     if (!flag) {
82         printf("%d: MPI_Win_allocate - Error, no model\n", rank);
83         errors++;
84     }
85     else if (*model != MPI_WIN_SEPARATE && *model != MPI_WIN_UNIFIED) {
86         printf("%d: MPI_Win_allocate - Error, bad model (%d)\n", rank, *model);
87         errors++;
88     }
89
90     MPI_Win_free(&window);
91
92     /** Create using MPI_Win_create_dynamic() **/
93
94     MPI_Win_create_dynamic(MPI_INFO_NULL, MPI_COMM_WORLD, &window);
95
96     MPI_Win_get_attr(window, MPI_WIN_CREATE_FLAVOR, &flavor, &flag);
97
98     if (!flag) {
99         printf("%d: MPI_Win_create_dynamic - Error, no flavor\n", rank);
100         errors++;
101     }
102     else if (*flavor != MPI_WIN_FLAVOR_DYNAMIC) {
103         printf("%d: MPI_Win_create_dynamic - Error, bad flavor (%d)\n", rank, *flavor);
104         errors++;
105     }
106
107     MPI_Win_get_attr(window, MPI_WIN_MODEL, &model, &flag);
108
109     if (!flag) {
110         printf("%d: MPI_Win_create_dynamic - Error, no model\n", rank);
111         errors++;
112     }
113     else if (*model != MPI_WIN_SEPARATE && *model != MPI_WIN_UNIFIED) {
114         printf("%d: MPI_Win_create_dynamic - Error, bad model (%d)\n", rank, *model);
115         errors++;
116     }
117
118     MPI_Win_free(&window);
119
120     MPI_Reduce(&errors, &all_errors, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
121
122     if (rank == 0 && all_errors == 0)
123         printf(" No Errors\n");
124
125     MPI_Finalize();
126
127     return 0;
128 }