X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/af72ee01a6a0c01b1a67dc3095f952fd8ab1dd42..3d162cea6ff3405edc06c1d7f85494eb15f35d82:/examples/cpp/comm-ready/s4u-comm-ready.cpp diff --git a/examples/cpp/comm-ready/s4u-comm-ready.cpp b/examples/cpp/comm-ready/s4u-comm-ready.cpp index f3a25853a7..689729815e 100644 --- a/examples/cpp/comm-ready/s4u-comm-ready.cpp +++ b/examples/cpp/comm-ready/s4u-comm-ready.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2010-2021. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2010-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. */ @@ -22,37 +22,30 @@ #include #include #include +namespace sg4 = simgrid::s4u; XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_async_ready, "Messages specific for this s4u example"); -static void peer(int argc, char** argv) +static void peer(int my_id, int messages_count, size_t payload_size, int peers_count) { - xbt_assert(argc == 5, "Expecting 4 parameters from the XML deployment file but got %d", argc); - int my_id = std::stoi(argv[1]); /* - my id */ - long messages_count = std::stol(argv[2]); /* - number of message */ - long msg_size = std::stol(argv[3]); /* - message size in bytes */ - long peers_count = std::stol(argv[4]); /* - number of peers */ - /* Set myself as the persistent receiver of my mailbox so that messages start flowing to me as soon as they are put * into it */ - simgrid::s4u::Mailbox* my_mbox = simgrid::s4u::Mailbox::by_name(std::string("peer-") + std::to_string(my_id)); - my_mbox->set_receiver(simgrid::s4u::Actor::self()); + sg4::Mailbox* my_mbox = sg4::Mailbox::by_name("peer-" + std::to_string(my_id)); + my_mbox->set_receiver(sg4::Actor::self()); - std::vector pending_comms; + std::vector pending_comms; /* Start dispatching all messages to peers others that myself */ for (int i = 0; i < messages_count; i++) { for (int peer_id = 0; peer_id < peers_count; peer_id++) { if (peer_id != my_id) { - std::string mboxName = std::string("peer-") + std::to_string(peer_id); - simgrid::s4u::Mailbox* mbox = simgrid::s4u::Mailbox::by_name(mboxName); - std::string msgName = - std::string("Message ") + std::to_string(i) + std::string(" from peer ") + std::to_string(my_id); - auto* payload = new std::string(msgName); // copy the data we send: - // 'msgName' is not a stable storage location - XBT_INFO("Send '%s' to '%s'", msgName.c_str(), mboxName.c_str()); + sg4::Mailbox* mbox = sg4::Mailbox::by_name("peer-" + std::to_string(peer_id)); + std::string message = "Message " + std::to_string(i) + " from peer " + std::to_string(my_id); + auto* payload = new std::string(message); // copy the data we send: + // 'message' is not a stable storage location + XBT_INFO("Send '%s' to '%s'", message.c_str(), mbox->get_cname()); /* Create a communication representing the ongoing communication */ - pending_comms.push_back(mbox->put_async(payload, msg_size)); + pending_comms.push_back(mbox->put_async(payload, payload_size)); } } } @@ -60,10 +53,9 @@ static void peer(int argc, char** argv) /* Start sending messages to let peers know that they should stop */ for (int peer_id = 0; peer_id < peers_count; peer_id++) { if (peer_id != my_id) { - std::string mboxName = std::string("peer-") + std::to_string(peer_id); - simgrid::s4u::Mailbox* mbox = simgrid::s4u::Mailbox::by_name(mboxName); - auto* payload = new std::string("finalize"); // Make a copy of the data we will send - pending_comms.push_back(mbox->put_async(payload, msg_size)); + sg4::Mailbox* mbox = sg4::Mailbox::by_name("peer-" + std::to_string(peer_id)); + auto* payload = new std::string("finalize"); // Make a copy of the data we will send + pending_comms.push_back(mbox->put_async(payload, payload_size)); XBT_INFO("Send 'finalize' to 'peer-%d'", peer_id); } } @@ -74,9 +66,9 @@ static void peer(int argc, char** argv) long pending_finalize_messages = peers_count - 1; while (pending_finalize_messages > 0) { if (my_mbox->ready()) { - double start = simgrid::s4u::Engine::get_clock(); + double start = sg4::Engine::get_clock(); auto received = my_mbox->get_unique(); - double waiting_time = simgrid::s4u::Engine::get_clock() - start; + double waiting_time = sg4::Engine::get_clock() - start; xbt_assert( waiting_time == 0, "Expecting the waiting time to be 0 because the communication was supposedly ready, but got %f instead", @@ -87,25 +79,24 @@ static void peer(int argc, char** argv) } } else { XBT_INFO("Nothing ready to consume yet, I better sleep for a while"); - simgrid::s4u::this_actor::sleep_for(.01); + sg4::this_actor::sleep_for(.01); } } XBT_INFO("I'm done, just waiting for my peers to receive the messages before exiting"); - simgrid::s4u::Comm::wait_all(&pending_comms); + sg4::Comm::wait_all(pending_comms); XBT_INFO("Goodbye now!"); } int main(int argc, char* argv[]) { - xbt_assert(argc > 2, "Usage: %s platform_file deployment_file\n", argv[0]); - - simgrid::s4u::Engine e(&argc, argv); - e.register_function("peer", &peer); - + sg4::Engine e(&argc, argv); e.load_platform(argv[1]); - e.load_deployment(argv[2]); + + sg4::Actor::create("peer", e.host_by_name("Tremblay"), peer, 0, 2, 5e7, 3); + sg4::Actor::create("peer", e.host_by_name("Ruby"), peer, 1, 6, 2.5e5, 3); + sg4::Actor::create("peer", e.host_by_name("Perl"), peer, 2, 0, 5e7, 3); e.run();