X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/aa67057cbae409c22a57e9dcf4d82a2859e97f45..e6f836d79ad3def5358ceafe9c4640fbf163cc42:/examples/s4u/app-chainsend/s4u-app-chainsend.cpp diff --git a/examples/s4u/app-chainsend/s4u-app-chainsend.cpp b/examples/s4u/app-chainsend/s4u-app-chainsend.cpp index 79785f5122..d04d43e977 100644 --- a/examples/s4u/app-chainsend/s4u-app-chainsend.cpp +++ b/examples/s4u/app-chainsend/s4u-app-chainsend.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2007-2018. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2007-2020. 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. */ @@ -6,18 +6,18 @@ #include "simgrid/s4u.hpp" #include -#define PIECE_SIZE 65536 -#define MESSAGE_BUILD_CHAIN_SIZE 40 -#define MESSAGE_SEND_DATA_HEADER_SIZE 1 +constexpr unsigned PIECE_SIZE = 65536; +constexpr unsigned MESSAGE_BUILD_CHAIN_SIZE = 40; +constexpr unsigned MESSAGE_SEND_DATA_HEADER_SIZE = 1; XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_chainsend, "Messages specific for chainsend"); class ChainMessage { public: - simgrid::s4u::MailboxPtr prev_ = nullptr; - simgrid::s4u::MailboxPtr next_ = nullptr; + simgrid::s4u::Mailbox* prev_ = nullptr; + simgrid::s4u::Mailbox* next_ = nullptr; unsigned int num_pieces = 0; - explicit ChainMessage(simgrid::s4u::MailboxPtr prev, simgrid::s4u::MailboxPtr next, const unsigned int num_pieces) + explicit ChainMessage(simgrid::s4u::Mailbox* prev, simgrid::s4u::Mailbox* next, const unsigned int num_pieces) : prev_(prev), next_(next), num_pieces(num_pieces) { } @@ -32,9 +32,9 @@ public: class Peer { public: - simgrid::s4u::MailboxPtr prev = nullptr; - simgrid::s4u::MailboxPtr next = nullptr; - simgrid::s4u::MailboxPtr me = nullptr; + simgrid::s4u::Mailbox* prev = nullptr; + simgrid::s4u::Mailbox* next = nullptr; + simgrid::s4u::Mailbox* me = nullptr; std::vector pending_recvs; std::vector pending_sends; @@ -47,7 +47,7 @@ public: void joinChain() { - ChainMessage* msg = static_cast(me->get()); + const auto* msg = static_cast(me->get()); prev = msg->prev_; next = msg->next_; total_pieces = msg->num_pieces; @@ -90,42 +90,24 @@ public: class Broadcaster { public: - simgrid::s4u::MailboxPtr first = nullptr; - std::vector mailboxes; + simgrid::s4u::Mailbox* first = nullptr; + std::vector mailboxes; unsigned int piece_count; void buildChain() { - auto cur = mailboxes.begin(); - simgrid::s4u::MailboxPtr prev = nullptr; - simgrid::s4u::MailboxPtr last = nullptr; - /* Build the chain if there's at least one peer */ - if (cur != mailboxes.end()) { - /* init: prev=NULL, host=current cur, next=next cur */ - simgrid::s4u::MailboxPtr next = *cur; - first = next; - - /* This iterator iterates one step ahead: cur is current iterated element, but is actually next in the chain */ - do { - /* following steps: prev=last, host=next, next=cur */ - ++cur; - prev = last; - simgrid::s4u::MailboxPtr current_mailbox = next; - if (cur != mailboxes.end()) - next = *cur; - else - next = nullptr; - - XBT_DEBUG("Building chain--broadcaster:\"%s\" dest:\"%s\" prev:\"%s\" next:\"%s\"", - simgrid::s4u::Host::current()->get_cname(), current_mailbox->get_cname(), - prev ? prev->get_cname() : nullptr, next ? next->get_cname() : nullptr); - - /* Send message to current peer */ - current_mailbox->put(new ChainMessage(prev, next, piece_count), MESSAGE_BUILD_CHAIN_SIZE); - - last = current_mailbox; - } while (cur != mailboxes.end()); + if (not mailboxes.empty()) + first = mailboxes.front(); + + for (unsigned i = 0; i < mailboxes.size(); i++) { + simgrid::s4u::Mailbox* prev = i > 0 ? mailboxes[i - 1] : nullptr; + simgrid::s4u::Mailbox* next = i < mailboxes.size() - 1 ? mailboxes[i + 1] : nullptr; + XBT_DEBUG("Building chain--broadcaster:\"%s\" dest:\"%s\" prev:\"%s\" next:\"%s\"", + simgrid::s4u::Host::current()->get_cname(), mailboxes[i]->get_cname(), + prev ? prev->get_cname() : nullptr, next ? next->get_cname() : nullptr); + /* Send message to current peer */ + mailboxes[i]->put(new ChainMessage(prev, next, piece_count), MESSAGE_BUILD_CHAIN_SIZE); } } @@ -144,7 +126,7 @@ public: Broadcaster(int hostcount, unsigned int piece_count) : piece_count(piece_count) { for (int i = 1; i <= hostcount; i++) { - std::string name = std::string("node-") + std::to_string(i) + ".acme.org"; + std::string name = std::string("node-") + std::to_string(i) + ".simgrid.org"; XBT_DEBUG("%s", name.c_str()); mailboxes.push_back(simgrid::s4u::Mailbox::by_name(name)); } @@ -157,30 +139,26 @@ static void peer() { XBT_DEBUG("peer"); - Peer* p = new Peer(); + Peer p; double start_time = simgrid::s4u::Engine::get_clock(); - p->joinChain(); - p->forwardFile(); + p.joinChain(); + p.forwardFile(); - simgrid::s4u::Comm::wait_all(&p->pending_sends); + simgrid::s4u::Comm::wait_all(&p.pending_sends); double end_time = simgrid::s4u::Engine::get_clock(); - XBT_INFO("### %f %llu bytes (Avg %f MB/s); copy finished (simulated).", end_time - start_time, p->received_bytes, - p->received_bytes / 1024.0 / 1024.0 / (end_time - start_time)); - - delete p; + XBT_INFO("### %f %llu bytes (Avg %f MB/s); copy finished (simulated).", end_time - start_time, p.received_bytes, + p.received_bytes / 1024.0 / 1024.0 / (end_time - start_time)); } static void broadcaster(int hostcount, unsigned int piece_count) { XBT_DEBUG("broadcaster"); - Broadcaster* bc = new Broadcaster(hostcount, piece_count); - bc->buildChain(); - bc->sendFile(); - - delete bc; + Broadcaster bc(hostcount, piece_count); + bc.buildChain(); + bc.sendFile(); } int main(int argc, char* argv[]) @@ -189,16 +167,16 @@ int main(int argc, char* argv[]) e.load_platform(argv[1]); - simgrid::s4u::Actor::create("broadcaster", simgrid::s4u::Host::by_name("node-0.acme.org"), broadcaster, 8, 256); + simgrid::s4u::Actor::create("broadcaster", simgrid::s4u::Host::by_name("node-0.simgrid.org"), broadcaster, 8, 256); - simgrid::s4u::Actor::create("peer", simgrid::s4u::Host::by_name("node-1.acme.org"), peer); - simgrid::s4u::Actor::create("peer", simgrid::s4u::Host::by_name("node-2.acme.org"), peer); - simgrid::s4u::Actor::create("peer", simgrid::s4u::Host::by_name("node-3.acme.org"), peer); - simgrid::s4u::Actor::create("peer", simgrid::s4u::Host::by_name("node-4.acme.org"), peer); - simgrid::s4u::Actor::create("peer", simgrid::s4u::Host::by_name("node-5.acme.org"), peer); - simgrid::s4u::Actor::create("peer", simgrid::s4u::Host::by_name("node-6.acme.org"), peer); - simgrid::s4u::Actor::create("peer", simgrid::s4u::Host::by_name("node-7.acme.org"), peer); - simgrid::s4u::Actor::create("peer", simgrid::s4u::Host::by_name("node-8.acme.org"), peer); + simgrid::s4u::Actor::create("peer", simgrid::s4u::Host::by_name("node-1.simgrid.org"), peer); + simgrid::s4u::Actor::create("peer", simgrid::s4u::Host::by_name("node-2.simgrid.org"), peer); + simgrid::s4u::Actor::create("peer", simgrid::s4u::Host::by_name("node-3.simgrid.org"), peer); + simgrid::s4u::Actor::create("peer", simgrid::s4u::Host::by_name("node-4.simgrid.org"), peer); + simgrid::s4u::Actor::create("peer", simgrid::s4u::Host::by_name("node-5.simgrid.org"), peer); + simgrid::s4u::Actor::create("peer", simgrid::s4u::Host::by_name("node-6.simgrid.org"), peer); + simgrid::s4u::Actor::create("peer", simgrid::s4u::Host::by_name("node-7.simgrid.org"), peer); + simgrid::s4u::Actor::create("peer", simgrid::s4u::Host::by_name("node-8.simgrid.org"), peer); e.run(); XBT_INFO("Total simulation time: %e", simgrid::s4u::Engine::get_clock());