X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/9043e9c63c0d478e75129e378279d6a84a491d9a..1fa3f778c3669d0658cf13b6da1a5c35b452a678:/examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.cpp diff --git a/examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.cpp b/examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.cpp index ae6b7f6e3a..4d4d00ee96 100644 --- a/examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.cpp +++ b/examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2009-2018. The SimGrid Team. +/* Copyright (c) 2009-2019. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -56,31 +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"); // ? - - // Ugly double storage used for memory deallocation, as SMPI changes argc/argv without cleaning memory. - char* to_free[2] = {argv[0], argv[1]}; // <-- This ugly array should disappear. - 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 - for (int i = 0; i < 2; ++i) // <-- This ugly loop should disappear. - xbt_free(to_free[i]); - for (int i = 0; i < argc; ++i) - xbt_free(argv[i]); - xbt_free(argv); } // Sleeps for a given amount of time @@ -111,13 +92,14 @@ static int job_executor_process(Job* job) simgrid::s4u::BarrierPtr barrier = simgrid::s4u::Barrier::create(job->app_size + 1); for (int i = 0; i < job->app_size; ++i) { - char* str_pname = bprintf("%d_%d", job->unique_job_number, i); + char* str_pname = bprintf("rank_%d_%d", job->unique_job_number, i); simgrid::s4u::Actor::create(str_pname, hosts[job->allocation[i]], smpi_replay_process, job, barrier, i); xbt_free(str_pname); } barrier->wait(); + simgrid::s4u::this_actor::sleep_for(1); XBT_INFO("Finished job %d (smpi_app '%s')", job->unique_job_number, job->smpi_app_name.c_str()); return 0; @@ -144,9 +126,10 @@ static int workload_executor_process(std::vector* workload) } // Let's finally run the job executor - std::string job_process_name = "job_" + job->smpi_app_name; + char* str_pname = bprintf("job_%04d", job->unique_job_number); XBT_INFO("Launching the job executor of job %d (app '%s')", job->unique_job_number, job->smpi_app_name.c_str()); - simgrid::s4u::Actor::create(job_process_name.c_str(), hosts[job->allocation[0]], job_executor_process, job); + simgrid::s4u::Actor::create(str_pname, hosts[job->allocation[0]], job_executor_process, job); + xbt_free(str_pname); } return 0; @@ -260,7 +243,7 @@ int main(int argc, char* argv[]) } // Let's execute the workload - simgrid::s4u::Actor::create("workload_executor", hosts[0], workload_executor_process, &jobs); + simgrid::s4u::Actor::create("workload", hosts[0], workload_executor_process, &jobs); e.run(); XBT_INFO("Simulation finished! Final time: %g", e.get_clock());