Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
fix+activate rma test
[simgrid.git] / teshsuite / smpi / mpich3-test / rma / win_zero.c
1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
2 /*
3  *  (C) 2001 by Argonne National Laboratory.
4  *      See COPYRIGHT in top-level directory.
5  */
6
7 /* test MPI_WIN_ALLOCATE_SHARED when size of total shared memory region is 0. */
8
9 #include "mpi.h"
10 #include <stdio.h>
11 #include <stdlib.h>
12
13 int main(int argc, char **argv)
14 {
15     MPI_Win win;
16     void *win_buf = NULL;
17     int world_rank, shm_rank;
18     MPI_Comm shm_comm;
19
20     MPI_Init(&argc, &argv);
21     MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
22
23     MPI_Comm_split_type(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, world_rank, MPI_INFO_NULL, &shm_comm);
24
25     MPI_Comm_rank(shm_comm, &shm_rank);
26
27     /* Some ranks allocate zero bytes */
28     if (shm_rank % 2 == 0)
29         MPI_Win_allocate_shared(0, sizeof(char), MPI_INFO_NULL, shm_comm, &win_buf, &win);
30     else
31         MPI_Win_allocate_shared(1, sizeof(char), MPI_INFO_NULL, shm_comm, &win_buf, &win);
32     MPI_Win_free(&win);
33
34     if (world_rank % 2 == 0)
35         MPI_Win_allocate(0, sizeof(char), MPI_INFO_NULL, MPI_COMM_WORLD, &win_buf, &win);
36     else
37         MPI_Win_allocate(1, sizeof(char), MPI_INFO_NULL, MPI_COMM_WORLD, &win_buf, &win);
38     MPI_Win_free(&win);
39
40     win_buf = NULL;
41     if (world_rank % 2 == 0)
42         MPI_Win_create(NULL, 0, sizeof(char), MPI_INFO_NULL, MPI_COMM_WORLD, &win);
43     else {
44         win_buf = (void *) malloc(sizeof(char));
45         MPI_Win_create(win_buf, 1, sizeof(char), MPI_INFO_NULL, MPI_COMM_WORLD, &win);
46     }
47     MPI_Win_free(&win);
48     if (win_buf)
49         free(win_buf);
50
51     /* All ranks allocate zero bytes */
52     MPI_Win_allocate_shared(0, sizeof(char), MPI_INFO_NULL, shm_comm, &win_buf, &win);
53     MPI_Win_free(&win);
54     MPI_Win_allocate(0, sizeof(char), MPI_INFO_NULL, MPI_COMM_WORLD, &win_buf, &win);
55     MPI_Win_free(&win);
56     MPI_Win_create(NULL, 0, sizeof(char), MPI_INFO_NULL, MPI_COMM_WORLD, &win);
57     MPI_Win_free(&win);
58
59     MPI_Comm_free(&shm_comm);
60
61     if (world_rank == 0)
62         printf(" No Errors\n");
63
64     MPI_Finalize();
65
66     return 0;
67
68 }