Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid
[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     int my_rank, shared_rank;
16     void *mybase = NULL;
17     MPI_Win win;
18     MPI_Info win_info;
19     MPI_Comm shared_comm;
20     int shm_win_size = 1024 * 1024 * 1024 * sizeof(char); /* 1GB */
21
22     MPI_Init(&argc, &argv);
23
24     MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
25
26     MPI_Info_create(&win_info);
27     MPI_Info_set(win_info, (char*)"alloc_shm", (char*)"true");
28
29     MPI_Comm_split_type(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, my_rank, MPI_INFO_NULL, &shared_comm);
30
31     MPI_Comm_rank(shared_comm, &shared_rank);
32
33     /* every processes allocate 1GB window memory */
34     MPI_Win_allocate(shm_win_size, sizeof(char), win_info, MPI_COMM_WORLD, &mybase, &win);
35
36     MPI_Win_free(&win);
37
38     MPI_Win_allocate_shared(shm_win_size, sizeof(char), win_info, shared_comm, &mybase, &win);
39
40     MPI_Win_free(&win);
41
42     /* some processes allocate 1GB and some processes allocate zero bytes */
43     if (my_rank % 2 == 0)
44         MPI_Win_allocate(shm_win_size, sizeof(char), win_info, MPI_COMM_WORLD, &mybase, &win);
45     else
46         MPI_Win_allocate(0, sizeof(char), win_info, MPI_COMM_WORLD, &mybase, &win);
47
48     MPI_Win_free(&win);
49
50     if (shared_rank % 2 == 0)
51         MPI_Win_allocate_shared(shm_win_size, sizeof(char), win_info, shared_comm, &mybase, &win);
52     else
53         MPI_Win_allocate_shared(0, sizeof(char), win_info, shared_comm, &mybase, &win);
54
55     MPI_Win_free(&win);
56
57     /* some processes allocate 1GB and some processes allocate smaller bytes */
58     if (my_rank % 2 == 0)
59         MPI_Win_allocate(shm_win_size, sizeof(char), win_info, MPI_COMM_WORLD, &mybase, &win);
60     else
61         MPI_Win_allocate(shm_win_size/2, sizeof(char), win_info, MPI_COMM_WORLD, &mybase, &win);
62
63     MPI_Win_free(&win);
64
65     /* some processes allocate 1GB and some processes allocate smaller bytes */
66     if (shared_rank % 2 == 0)
67         MPI_Win_allocate_shared(shm_win_size, sizeof(char), win_info, shared_comm, &mybase, &win);
68     else
69         MPI_Win_allocate_shared(shm_win_size/2, sizeof(char), win_info, shared_comm, &mybase, &win);
70
71     MPI_Win_free(&win);
72
73     MPI_Comm_free(&shared_comm);
74
75     MPI_Info_free(&win_info);
76
77     if (my_rank == 0)
78         printf(" No Errors\n");
79
80     MPI_Finalize();
81
82     return 0;
83 }