Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Update RMA tests
[simgrid.git] / teshsuite / smpi / mpich3-test / rma / win_large_shm.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 and MPI_WIN_ALLOCATE_SHARED when allocating
8    SHM memory with size of 1GB per process */
9
10 #include "mpi.h"
11 #include <stdlib.h>
12 #include <stdio.h>
13
14 int main(int argc, char **argv)
15 {
16     int my_rank, shared_rank;
17     void *mybase = NULL;
18     MPI_Win win;
19     MPI_Info win_info;
20     MPI_Comm shared_comm;
21     int i;
22     int shm_win_size = 1024 * 1024 * 1024 * sizeof(char);       /* 1GB */
23
24     MPI_Init(&argc, &argv);
25
26     MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
27
28     for (i = 0; i < 2; i++) {
29         if (i == 0) {
30             MPI_Info_create(&win_info);
31             MPI_Info_set(win_info, (char *) "alloc_shm", (char *) "true");
32         }
33         else {
34             win_info = MPI_INFO_NULL;
35         }
36
37         MPI_Comm_split_type(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, my_rank, MPI_INFO_NULL,
38                             &shared_comm);
39
40         MPI_Comm_rank(shared_comm, &shared_rank);
41
42         /* every processes allocate 1GB window memory */
43         MPI_Win_allocate(shm_win_size, sizeof(char), win_info, MPI_COMM_WORLD, &mybase, &win);
44
45         MPI_Win_free(&win);
46
47         MPI_Win_allocate_shared(shm_win_size, sizeof(char), win_info, shared_comm, &mybase, &win);
48
49         MPI_Win_free(&win);
50
51         /* some processes allocate 1GB and some processes allocate zero bytes */
52         if (my_rank % 2 == 0)
53             MPI_Win_allocate(shm_win_size, sizeof(char), win_info, MPI_COMM_WORLD, &mybase, &win);
54         else
55             MPI_Win_allocate(0, sizeof(char), win_info, MPI_COMM_WORLD, &mybase, &win);
56
57         MPI_Win_free(&win);
58
59         if (shared_rank % 2 == 0)
60             MPI_Win_allocate_shared(shm_win_size, sizeof(char), win_info, shared_comm, &mybase,
61                                     &win);
62         else
63             MPI_Win_allocate_shared(0, sizeof(char), win_info, shared_comm, &mybase, &win);
64
65         MPI_Win_free(&win);
66
67         /* some processes allocate 1GB and some processes allocate smaller bytes */
68         if (my_rank % 2 == 0)
69             MPI_Win_allocate(shm_win_size, sizeof(char), win_info, MPI_COMM_WORLD, &mybase, &win);
70         else
71             MPI_Win_allocate(shm_win_size / 2, sizeof(char), win_info, MPI_COMM_WORLD, &mybase,
72                              &win);
73
74         MPI_Win_free(&win);
75
76         /* some processes allocate 1GB and some processes allocate smaller bytes */
77         if (shared_rank % 2 == 0)
78             MPI_Win_allocate_shared(shm_win_size, sizeof(char), win_info, shared_comm, &mybase,
79                                     &win);
80         else
81             MPI_Win_allocate_shared(shm_win_size / 2, sizeof(char), win_info, shared_comm, &mybase,
82                                     &win);
83
84         MPI_Win_free(&win);
85
86         MPI_Comm_free(&shared_comm);
87
88         if (i == 0)
89             MPI_Info_free(&win_info);
90     }
91
92     if (my_rank == 0)
93         printf(" No Errors\n");
94
95     MPI_Finalize();
96
97     return 0;
98 }