Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[smpi] add smpireplayrun binary
[simgrid.git] / src / smpi / smpi_replay_main.cpp
1 #include "simgrid/s4u.hpp"
2 #include "smpi/smpi.h"
3 #include "xbt/asserts.h"
4 #include "xbt/replay.hpp"
5 #include "xbt/str.h"
6
7 int main(int argc, char* argv[])
8 {
9   if (simgrid::s4u::Actor::self().get() == nullptr) {
10     printf("smpireplaymain should not be called directly. Please use smpirun -replay instead.\n");
11     return 1;
12   }
13
14   auto properties = simgrid::s4u::Actor::self()->get_properties();
15   if (properties->find("smpi_replay") == properties->end()) {
16     printf("invalid smpireplaymain execution. Please use smpirun -replay instead.\n");
17     return 1;
18   }
19
20   const char* instance_id    = properties->at("instance_id").c_str();
21   const int rank             = xbt_str_parse_int(properties->at("rank").c_str(), "Cannot parse rank");
22   const char* trace_filename = argv[1];
23   double start_delay_flops   = 0;
24
25   if (argc > 2) {
26     start_delay_flops = xbt_str_parse_double(argv[2], "Cannot parse start_delay_flops");
27   }
28
29   /* Setup things and register default actions */
30   smpi_replay_init(instance_id, rank, start_delay_flops);
31
32   /* A small check, just to make sure SMPI ranks are consistent with input arguments */
33   int new_rank;
34   MPI_Comm_rank(MPI_COMM_WORLD, &new_rank);
35   xbt_assert(new_rank == rank, "Rank inconsistency. Got %d, expected %d", new_rank, rank);
36
37   /* The regular run of the replayer */
38   smpi_replay_main(rank, trace_filename);
39   return 0;
40 }