X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0bfafcab47ae9cd7856bd8d129404c33079d6afe..8bf7ffc43ad5507982e924a7f05bbb13c89965cb:/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 f523fe9c1d..e1c8b39399 100644 --- a/examples/cpp/network-ns3/s4u-network-ns3.cpp +++ b/examples/cpp/network-ns3/s4u-network-ns3.cpp @@ -1,87 +1,62 @@ -/* Copyright (c) 2007-2021. 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. */ #include "simgrid/s4u.hpp" +#include +#include XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_test, "Messages specific for this s4u example"); +namespace sg4 = simgrid::s4u; -int timer_start; // set as 1 in the master actor +struct MasterWorkerNames { + std::string master; + std::string worker; +}; +using MasterWorkerNamesMap = std::unordered_map; -#define NTASKS 1500 -double start_time; -const char* workernames[NTASKS]; -const char* masternames[NTASKS]; -int count_finished = 0; +struct Payload { + double msg_size; + double start_time; +}; -static void master(int argc, char* argv[]) +static void master(MasterWorkerNamesMap& names, const std::vector& args) { - xbt_assert(argc == 4, "Strange number of arguments expected 3 got %d", argc - 1); + xbt_assert(args.size() == 4, "Strange number of arguments expected 3 got %zu", args.size() - 1); XBT_DEBUG("Master started"); /* data size */ - double msg_size = std::stod(argv[1]); - int id = std::stoi(argv[3]); // unique id to control statistics + double msg_size = std::stod(args[1]); + int id = std::stoi(args[3]); // unique id to control statistics - /* worker name */ - workernames[id] = xbt_strdup(argv[2]); + /* master and worker names */ + names.try_emplace(id, MasterWorkerNames{sg4::Host::current()->get_name(), args[2]}); - simgrid::s4u::Mailbox* mbox = simgrid::s4u::Mailbox::by_name(argv[3]); + sg4::Mailbox* mbox = sg4::Mailbox::by_name(args[3]); - masternames[id] = simgrid::s4u::Host::current()->get_cname(); - - auto* payload = new double(msg_size); - - count_finished++; - timer_start = 1; - - /* time measurement */ - start_time = simgrid::s4u::Engine::get_clock(); - mbox->put(payload, msg_size); - - XBT_DEBUG("Finished"); -} - -static void timer(int argc, char* argv[]) -{ - xbt_assert(argc == 3, "Strange number of arguments expected 2 got %d", argc - 1); - double first_sleep = std::stod(argv[1]); - double sleep_time = std::stod(argv[2]); - - XBT_DEBUG("Timer started"); - - if (first_sleep) - simgrid::s4u::this_actor::sleep_for(first_sleep); - - do { - XBT_DEBUG("Get sleep"); - simgrid::s4u::this_actor::sleep_for(sleep_time); - } while (timer_start); + auto* payload = new Payload{msg_size, sg4::Engine::get_clock()}; + mbox->put(payload, static_cast(msg_size)); XBT_DEBUG("Finished"); } -static void worker(int argc, char* argv[]) +static void worker(const MasterWorkerNamesMap& names, const std::vector& args) { - xbt_assert(argc == 2, "Strange number of arguments expected 1 got %d", argc - 1); + xbt_assert(args.size() == 2, "Strange number of arguments expected 1 got %zu", args.size() - 1); - int id = std::stoi(argv[1]); - simgrid::s4u::Mailbox* mbox = simgrid::s4u::Mailbox::by_name(argv[1]); + int id = std::stoi(args[1]); + sg4::Mailbox* mbox = sg4::Mailbox::by_name(args[1]); XBT_DEBUG("Worker started"); - auto payload = mbox->get_unique(); - - count_finished--; - if (count_finished == 0) { - timer_start = 0; - } + auto payload = mbox->get_unique(); - double elapsed_time = simgrid::s4u::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[id], workernames[id]); + 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"); @@ -89,7 +64,7 @@ static void worker(int argc, char* argv[]) int main(int argc, char* argv[]) { - simgrid::s4u::Engine e(&argc, argv); + sg4::Engine e(&argc, argv); xbt_assert(argc > 2, "Usage: %s platform_file deployment_file\n" "\tExample: %s platform.xml deployment.xml\n", @@ -97,9 +72,9 @@ int main(int argc, char* argv[]) e.load_platform(argv[1]); - e.register_function("master", master); - e.register_function("worker", worker); - e.register_function("timer", timer); + 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]);