Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[smpi args cleanup] adapt replay examples
authorMillian Poquet <millian.poquet@inria.fr>
Fri, 16 Nov 2018 15:54:36 +0000 (16:54 +0100)
committerMillian Poquet <millian.poquet@inria.fr>
Wed, 21 Nov 2018 09:00:31 +0000 (10:00 +0100)
examples/s4u/replay-comm/s4u-replay-comm.cpp
examples/s4u/replay-storage/s4u-replay-storage.cpp
examples/smpi/replay/replay.cpp
examples/smpi/replay_multiple/replay_multiple.c
examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.cpp
examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual_mixed2_st_sr.tesh
examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual_mixed2_st_sr_noise.tesh
examples/smpi/smpi_msg_masterslave/deployment_masterslave_mailbox_smpi.xml

index 2152cb4..9eb3379 100644 (file)
@@ -30,16 +30,9 @@ class Replayer {
 public:
   explicit Replayer(std::vector<std::string> args)
   {
-    int argc;
-    char* argv[2];
-    argv[0] = &args.at(0)[0];
-    if (args.size() == 1) {
-      argc = 1;
-    } else {
-      argc    = 2;
-      argv[1] = &args.at(1)[0];
-    }
-    simgrid::xbt::replay_runner(argc, argv);
+    const char* actor_name     = args[0].c_str();
+    const char* trace_filename = args[1].c_str();
+    simgrid::xbt::replay_runner(actor_name, trace_filename);
   }
 
   void operator()()
@@ -97,7 +90,6 @@ int main(int argc, char* argv[])
              argv[0], argv[0], argv[0]);
 
   e.load_platform(argv[1]);
-  e.register_default(&simgrid::xbt::replay_runner);
   e.register_actor<Replayer>("p0");
   e.register_actor<Replayer>("p1");
   e.load_deployment(argv[2]);
index f1584eb..677f5be 100644 (file)
@@ -40,16 +40,8 @@ class Replayer {
 public:
   explicit Replayer(std::vector<std::string> args)
   {
-    int argc;
-    char* argv[2];
-    argv[0] = &args.at(0)[0];
-    if (args.size() == 1) {
-      argc = 1;
-    } else {
-      argc    = 2;
-      argv[1] = &args.at(1)[0];
-    }
-    simgrid::xbt::replay_runner(argc, argv);
+    const char* actor_name = args[0].c_str();
+    simgrid::xbt::replay_runner(actor_name, nullptr);
   }
 
   void operator()()
@@ -112,7 +104,6 @@ int main(int argc, char* argv[])
              argv[0], argv[0], argv[0]);
 
   e.load_platform(argv[1]);
-  e.register_default(&simgrid::xbt::replay_runner);
   e.register_actor<Replayer>("p0");
   e.load_deployment(argv[2]);
 
index 48923f9..807beb2 100644 (file)
@@ -4,7 +4,13 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "xbt/replay.hpp"
+#include "simgrid/s4u/Actor.hpp"
 #include "smpi/smpi.h"
+#include "xbt/asserts.h"
+#include "xbt/str.h"
+
+#include "xbt/log.h"
+XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test, "Messages specific for this msg example");
 
 /* This shows how to extend the trace format by adding a new kind of events.
    This function is registered through xbt_replay_action_register() below. */
@@ -22,20 +28,31 @@ static void overriding_send(simgrid::xbt::ReplayAction& args)
 
 int main(int argc, char* argv[])
 {
+  const char* instance_id = simgrid::s4u::Actor::self()->get_property("instance_id");
+  const int rank          = xbt_str_parse_int(simgrid::s4u::Actor::self()->get_property("rank"), "Cannot parse rank");
+  const char* trace_filename = argv[1];
+  double start_delay_flops   = 0;
+
+  if (argc > 2) {
+    start_delay_flops = xbt_str_parse_double(argv[2], "Cannot parse start_delay_flops");
+  }
+
   /* Setup things and register default actions */
-  smpi_replay_init(&argc, &argv);
+  smpi_replay_init(instance_id, rank, start_delay_flops);
 
   /* Connect your callback function to the "blah" event in the trace files */
   xbt_replay_action_register("blah", action_blah);
 
   /* The send action is an override, so we have to first save its previous value in a global */
-  int rank;
-  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+  int new_rank;
+  MPI_Comm_rank(MPI_COMM_WORLD, &new_rank);
+  if (new_rank != rank)
+    XBT_WARN("Rank inconsistency. Got %d, expected %d", new_rank, rank);
   if (rank == 0) {
     previous_send = xbt_replay_action_get("send");
     xbt_replay_action_register("send", overriding_send);
   }
   /* The regular run of the replayer */
-  smpi_replay_main(&argc, &argv);
+  smpi_replay_main(rank, trace_filename);
   return 0;
 }
index 2dc72e2..f7a8ef8 100644 (file)
 XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test, "Messages specific for this msg example");
 
 static int smpi_replay(int argc, char *argv[]) {
-  smpi_replay_run(&argc, &argv);
+  const char* instance_id    = argv[1];
+  int rank                   = xbt_str_parse_int(argv[2], "Cannot parse rank '%s'");
+  const char* trace_filename = argv[3];
+  double start_delay_flops   = 0;
+
+  if (argc > 4) {
+    start_delay_flops = xbt_str_parse_double(argv[4], "Cannot parse start_delay_flops");
+  }
+
+  smpi_replay_run(instance_id, rank, start_delay_flops, trace_filename);
   return 0;
 }
 
index 2fc978d..4ccbb8a 100644 (file)
@@ -56,26 +56,12 @@ static bool job_comparator(const Job* j1, const Job* j2)
 
 static void smpi_replay_process(Job* job, simgrid::s4u::BarrierPtr barrier, int rank)
 {
-  // Prepare data for smpi_replay_run
-  int argc    = 5;
-  char** argv = xbt_new(char*, argc);
-  argv[0]     = xbt_strdup("1");                                 // log only?
-  argv[1]     = xbt_strdup(job->smpi_app_name.c_str());          // application instance
-  argv[2]     = bprintf("%d", rank);                             // rank
-  argv[3]     = xbt_strdup(job->traces_filenames[rank].c_str()); // smpi trace file for this rank
-  argv[4]     = xbt_strdup("0");                                 // ?
-
   XBT_INFO("Replaying rank %d of job %d (smpi_app '%s')", rank, job->unique_job_number, job->smpi_app_name.c_str());
-  smpi_replay_run(&argc, &argv);
+  smpi_replay_run(job->smpi_app_name.c_str(), rank, 0, job->traces_filenames[rank].c_str());
   XBT_INFO("Finished replaying rank %d of job %d (smpi_app '%s')", rank, job->unique_job_number,
            job->smpi_app_name.c_str());
 
   barrier->wait();
-
-  // Memory clean-up — leaks can come from argc/argv modifications from smpi_replay_run
-  for (int i = 0; i < argc; ++i)
-    xbt_free(argv[i]);
-  xbt_free(argv);
 }
 
 // Sleeps for a given amount of time
index dca9faf..8eaaa2e 100644 (file)
@@ -7,17 +7,17 @@ $ ./replay_multiple_manual ${srcdir:=.}/../../platforms/small_platform_with_rout
 > [   0.000000] (maestro@) Job read: app='job1', file='mixed.txt', size=2, start=0, alloc='0,1'
 > [   0.000000] (workload@Bourassa) Launching the job executor of job 0 (app 'job0')
 > [   0.000000] (job_0000@Bourassa) Executing job 0 (smpi_app 'job0')
-> [   0.000000] (workload@Bourassa) Launching the job executor of job 1 (app 'job1')
-> [   0.000000] (job_0001@Bourassa) Executing job 1 (smpi_app 'job1')
 > [   0.000000] (rank_0_0@Bourassa) Replaying rank 0 of job 0 (smpi_app 'job0')
 > [   0.000000] (rank_0_1@Fafard) Replaying rank 1 of job 0 (smpi_app 'job0')
+> [   0.000000] (workload@Bourassa) Launching the job executor of job 1 (app 'job1')
+> [   0.000000] (job_0001@Bourassa) Executing job 1 (smpi_app 'job1')
 > [   0.000000] (rank_1_0@Bourassa) Replaying rank 0 of job 1 (smpi_app 'job1')
 > [   0.000000] (rank_1_1@Fafard) Replaying rank 1 of job 1 (smpi_app 'job1')
-> [1473.975664] (rank_1_0@Bourassa) Simulation time 1473.975664
-> [1473.975664] (rank_0_0@Bourassa) Finished replaying rank 0 of job 0 (smpi_app 'job0')
+> [1473.975664] (rank_0_0@Bourassa) Simulation time 1473.975664
 > [1473.975664] (rank_1_0@Bourassa) Finished replaying rank 0 of job 1 (smpi_app 'job1')
-> [1473.975664] (rank_0_1@Fafard) Finished replaying rank 1 of job 0 (smpi_app 'job0')
+> [1473.975664] (rank_0_0@Bourassa) Finished replaying rank 0 of job 0 (smpi_app 'job0')
 > [1473.975664] (rank_1_1@Fafard) Finished replaying rank 1 of job 1 (smpi_app 'job1')
+> [1473.975664] (rank_0_1@Fafard) Finished replaying rank 1 of job 0 (smpi_app 'job0')
 > [1474.975664] (job_0000@Bourassa) Finished job 0 (smpi_app 'job0')
 > [1474.975664] (job_0001@Bourassa) Finished job 1 (smpi_app 'job1')
 > [1474.975664] (maestro@) Simulation finished! Final time: 1474.98
index 9f2d990..d72130b 100644 (file)
@@ -13,11 +13,11 @@ $ ./replay_multiple_manual ${srcdir:=.}/../../platforms/small_platform_with_rout
 > [   0.000000] (job_0001@Bourassa) Executing job 1 (smpi_app 'job1')
 > [   0.000000] (rank_1_0@Bourassa) Replaying rank 0 of job 1 (smpi_app 'job1')
 > [   0.000000] (rank_1_1@Fafard) Replaying rank 1 of job 1 (smpi_app 'job1')
-> [1473.975664] (rank_1_0@Bourassa) Simulation time 1473.975664
-> [1473.975664] (rank_0_0@Bourassa) Finished replaying rank 0 of job 0 (smpi_app 'job0')
+> [1473.975664] (rank_0_0@Bourassa) Simulation time 1473.975664
 > [1473.975664] (rank_1_0@Bourassa) Finished replaying rank 0 of job 1 (smpi_app 'job1')
-> [1473.975664] (rank_0_1@Fafard) Finished replaying rank 1 of job 0 (smpi_app 'job0')
+> [1473.975664] (rank_0_0@Bourassa) Finished replaying rank 0 of job 0 (smpi_app 'job0')
 > [1473.975664] (rank_1_1@Fafard) Finished replaying rank 1 of job 1 (smpi_app 'job1')
+> [1473.975664] (rank_0_1@Fafard) Finished replaying rank 1 of job 0 (smpi_app 'job0')
 > [1474.975664] (job_0000@Bourassa) Finished job 0 (smpi_app 'job0')
 > [1474.975664] (job_0001@Bourassa) Finished job 1 (smpi_app 'job1')
 > [1474.975664] (maestro@) Simulation finished! Final time: 1474.98
index 88ae124..e9a3320 100644 (file)
     <argument value="0"/>
   </actor>
   <actor host="Ginette" function="master_mpi">
-    <argument value="master_mpi"/>
-    <argument value="0"/>
+    <prop id="instance_id" value="master_mpi"/>
+    <prop id="rank" value="0"/>
   </actor>
   <actor host="Bourassa" function="master_mpi">
-    <argument value="master_mpi"/>
-    <argument value="1"/>
+    <prop id="instance_id" value="master_mpi"/>
+    <prop id="rank" value="1"/>
   </actor>
   <actor host="Ginette" function="alltoall_mpi">
-    <argument value="alltoall_mpi"/>
-    <argument value="0"/>
+    <prop id="instance_id" value="alltoall_mpi"/>
+    <prop id="rank" value="0"/>
   </actor>
   <actor host="Bourassa" function="alltoall_mpi">
-    <argument value="alltoall_mpi"/>
-    <argument value="1"/>
+    <prop id="instance_id" value="alltoall_mpi"/>
+    <prop id="rank" value="1"/>
   </actor>
   <actor host="Jupiter" function="alltoall_mpi">
-    <argument value="alltoall_mpi"/>
-    <argument value="2"/>
+    <prop id="instance_id" value="alltoall_mpi"/>
+    <prop id="rank" value="2"/>
   </actor>
   <actor host="Fafard" function="alltoall_mpi">
-    <argument value="alltoall_mpi"/>
-    <argument value="3"/>
+    <prop id="instance_id" value="alltoall_mpi"/>
+    <prop id="rank" value="3"/>
   </actor>
 </platform>