Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Update copyright lines.
[simgrid.git] / examples / smpi / ampi_test / ampi_test.cpp
1 /* Copyright (c) 2009-2021. The SimGrid Team. All rights reserved.          */
2
3 /* This program is free software; you can redistribute it and/or modify it
4  * under the terms of the license (GNU LGPL) which comes with this package. */
5
6 #include <simgrid/s4u/Actor.hpp>
7 #include "smpi/smpi.h"
8 #include "smpi/sampi.h"
9
10 int main(int argc, char* argv[])
11 {
12   MPI_Init(&argc, &argv);
13   // useless alocations for testing and coverage
14   void* pointer = malloc(100 * sizeof(int));
15   void* ptmp;
16   if ((ptmp = realloc(pointer, 50 * sizeof(int))) != nullptr)
17     pointer = ptmp;
18   if ((ptmp = realloc(pointer, 200 * sizeof(int))) != nullptr)
19     pointer = ptmp;
20   free(pointer);
21   pointer = calloc(100, sizeof(int));
22   int rank;
23   int err = MPI_Comm_rank(MPI_COMM_WORLD, &rank);   /* Get id of this process */
24   if (err != MPI_SUCCESS) {
25     fprintf(stderr, "MPI_Comm_rank failed: %d", err);
26     MPI_Abort(MPI_COMM_WORLD, EXIT_FAILURE);
27     exit(EXIT_FAILURE);
28   }
29   AMPI_Iteration_in(MPI_COMM_WORLD);
30   simgrid::s4u::this_actor::sleep_for(rank);
31   AMPI_Iteration_out(MPI_COMM_WORLD);
32
33   AMPI_Iteration_in(MPI_COMM_WORLD);
34   simgrid::s4u::this_actor::sleep_for(rank);
35   AMPI_Iteration_out(MPI_COMM_WORLD);
36   if (rank == 0) {
37     free(pointer);
38     pointer = nullptr;
39   }
40   AMPI_Migrate(MPI_COMM_WORLD);
41   if (rank != 0)
42     free(pointer);
43
44   MPI_Finalize();
45   return 0;
46 }
47