X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ee1477d33506867034463d4d790279340382d7cc..15f7e082b6a5831848150c7a95dab8b60b99ecce:/examples/cpp/network-ns3/s4u-network-ns3.cpp diff --git a/examples/cpp/network-ns3/s4u-network-ns3.cpp b/examples/cpp/network-ns3/s4u-network-ns3.cpp index ae6b990f15..e1c8b39399 100644 --- a/examples/cpp/network-ns3/s4u-network-ns3.cpp +++ b/examples/cpp/network-ns3/s4u-network-ns3.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2007-2022. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2007-2023. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -10,11 +10,18 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_test, "Messages specific for this s4u example"); namespace sg4 = simgrid::s4u; -double start_time; -std::unordered_map workernames; -std::unordered_map masternames; +struct MasterWorkerNames { + std::string master; + std::string worker; +}; +using MasterWorkerNamesMap = std::unordered_map; -static void master(std::vector args) +struct Payload { + double msg_size; + double start_time; +}; + +static void master(MasterWorkerNamesMap& names, const std::vector& args) { xbt_assert(args.size() == 4, "Strange number of arguments expected 3 got %zu", args.size() - 1); @@ -24,23 +31,18 @@ static void master(std::vector args) double msg_size = std::stod(args[1]); int id = std::stoi(args[3]); // unique id to control statistics - /* worker name */ - workernames[id] = args[2]; + /* master and worker names */ + names.try_emplace(id, MasterWorkerNames{sg4::Host::current()->get_name(), args[2]}); sg4::Mailbox* mbox = sg4::Mailbox::by_name(args[3]); - masternames[id] = sg4::Host::current()->get_name(); - - auto* payload = new double(msg_size); - - /* time measurement */ - start_time = sg4::Engine::get_clock(); + auto* payload = new Payload{msg_size, sg4::Engine::get_clock()}; mbox->put(payload, static_cast(msg_size)); XBT_DEBUG("Finished"); } -static void worker(std::vector args) +static void worker(const MasterWorkerNamesMap& names, const std::vector& args) { xbt_assert(args.size() == 2, "Strange number of arguments expected 1 got %zu", args.size() - 1); @@ -49,12 +51,12 @@ static void worker(std::vector args) XBT_DEBUG("Worker started"); - auto payload = mbox->get_unique(); + auto payload = mbox->get_unique(); - double elapsed_time = sg4::Engine::get_clock() - start_time; + double elapsed_time = sg4::Engine::get_clock() - payload->start_time; - XBT_INFO("FLOW[%d] : Receive %.0f bytes from %s to %s", id, *payload, masternames.at(id).c_str(), - workernames.at(id).c_str()); + XBT_INFO("FLOW[%d] : Receive %.0f bytes from %s to %s", id, payload->msg_size, names.at(id).master.c_str(), + names.at(id).worker.c_str()); XBT_DEBUG("FLOW[%d] : transferred in %f seconds", id, elapsed_time); XBT_DEBUG("Finished"); @@ -70,8 +72,9 @@ int main(int argc, char* argv[]) e.load_platform(argv[1]); - e.register_function("master", master); - e.register_function("worker", worker); + MasterWorkerNamesMap master_worker_names; + e.register_function("master", [&master_worker_names](auto args) { master(master_worker_names, args); }); + e.register_function("worker", [&master_worker_names](auto args) { worker(master_worker_names, args); }); e.load_deployment(argv[2]);