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()()
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]);
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()()
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]);
* 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. */
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;
}
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;
}
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
> [ 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
> [ 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
<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>