Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
[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     } else if (*flavor != MPI_WIN_FLAVOR_CREATE) {
38       printf("%d: MPI_Win_create - Error, bad flavor (%d)\n", rank, *flavor);
39       errors++;
40     }
41
42     MPI_Win_get_attr(window, MPI_WIN_MODEL, &model, &flag);
43
44     if (!flag) {
45       printf("%d: MPI_Win_create - Error, no model\n", rank);
46       errors++;
47     } else if ( ! (*model == MPI_WIN_SEPARATE || *model == MPI_WIN_UNIFIED) ) {
48       printf("%d: MPI_Win_create - Error, bad model (%d)\n", rank, *model);
49       errors++;
50     }
51
52     MPI_Win_free(&window);
53
54     if (buf)
55       MPI_Free_mem(buf);
56
57     /** Create using MPI_Win_allocate() **/
58
59     MPI_Win_allocate(rank*ELEM_SIZE, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &buf, &window);
60
61     if (rank > 0 && buf == NULL) {
62       printf("%d: MPI_Win_allocate - Error, bad base pointer\n", rank);
63       errors++;
64     }
65
66     MPI_Win_get_attr(window, MPI_WIN_CREATE_FLAVOR, &flavor, &flag);
67
68     if (!flag) {
69       printf("%d: MPI_Win_allocate - Error, no flavor\n", rank);
70       errors++;
71     } else if (*flavor != MPI_WIN_FLAVOR_ALLOCATE) {
72       printf("%d: MPI_Win_allocate - Error, bad flavor (%d)\n", rank, *flavor);
73       errors++;
74     }
75
76     MPI_Win_get_attr(window, MPI_WIN_MODEL, &model, &flag);
77
78     if (!flag) {
79       printf("%d: MPI_Win_allocate - Error, no model\n", rank);
80       errors++;
81     } else if (*model != MPI_WIN_SEPARATE && *model != MPI_WIN_UNIFIED) {
82       printf("%d: MPI_Win_allocate - Error, bad model (%d)\n", rank, *model);
83       errors++;
84     }
85
86     MPI_Win_free(&window);
87
88     /** Create using MPI_Win_create_dynamic() **/
89
90     MPI_Win_create_dynamic(MPI_INFO_NULL, MPI_COMM_WORLD, &window);
91
92     MPI_Win_get_attr(window, MPI_WIN_CREATE_FLAVOR, &flavor, &flag);
93
94     if (!flag) {
95       printf("%d: MPI_Win_create_dynamic - Error, no flavor\n", rank);
96       errors++;
97     } else if (*flavor != MPI_WIN_FLAVOR_DYNAMIC) {
98       printf("%d: MPI_Win_create_dynamic - Error, bad flavor (%d)\n", rank, *flavor);
99       errors++;
100     }
101
102     MPI_Win_get_attr(window, MPI_WIN_MODEL, &model, &flag);
103
104     if (!flag) {
105       printf("%d: MPI_Win_create_dynamic - Error, no model\n", rank);
106       errors++;
107     } else if (*model != MPI_WIN_SEPARATE && *model != MPI_WIN_UNIFIED) {
108       printf("%d: MPI_Win_create_dynamic - Error, bad model (%d)\n", rank, *model);
109       errors++;
110     }
111
112     MPI_Win_free(&window);
113
114     MPI_Reduce(&errors, &all_errors, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
115
116     if (rank == 0 && all_errors == 0)
117         printf(" No Errors\n");
118
119     MPI_Finalize();
120
121     return 0;
122 }