X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/9caf173e476622d309cc5653a83d224d05787cc7..84402e8e2ee2a2d0bef25fdceb0a263ed8b471f6:/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 0ea2afdb19..6da10d6c2a 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; @@ -42,12 +42,12 @@ public: unsigned int received_pieces = 0; unsigned int total_pieces = 0; - Peer() { me = simgrid::s4u::Mailbox::byName(simgrid::s4u::Host::current()->get_cname()); } + Peer() { me = simgrid::s4u::Mailbox::by_name(simgrid::s4u::Host::current()->get_cname()); } ~Peer() = default; void joinChain() { - ChainMessage* msg = static_cast(me->get()); + const ChainMessage* 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,9 +126,9 @@ 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::byName(name)); + mailboxes.push_back(simgrid::s4u::Mailbox::by_name(name)); } } @@ -159,12 +141,12 @@ static void peer() Peer* p = new Peer(); - double start_time = simgrid::s4u::Engine::getClock(); + double start_time = simgrid::s4u::Engine::get_clock(); p->joinChain(); p->forwardFile(); simgrid::s4u::Comm::wait_all(&p->pending_sends); - double end_time = simgrid::s4u::Engine::getClock(); + 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)); @@ -187,21 +169,21 @@ int main(int argc, char* argv[]) { simgrid::s4u::Engine e(&argc, argv); - e.loadPlatform(argv[1]); + e.load_platform(argv[1]); - simgrid::s4u::Actor::createActor("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::createActor("peer", simgrid::s4u::Host::by_name("node-1.acme.org"), peer); - simgrid::s4u::Actor::createActor("peer", simgrid::s4u::Host::by_name("node-2.acme.org"), peer); - simgrid::s4u::Actor::createActor("peer", simgrid::s4u::Host::by_name("node-3.acme.org"), peer); - simgrid::s4u::Actor::createActor("peer", simgrid::s4u::Host::by_name("node-4.acme.org"), peer); - simgrid::s4u::Actor::createActor("peer", simgrid::s4u::Host::by_name("node-5.acme.org"), peer); - simgrid::s4u::Actor::createActor("peer", simgrid::s4u::Host::by_name("node-6.acme.org"), peer); - simgrid::s4u::Actor::createActor("peer", simgrid::s4u::Host::by_name("node-7.acme.org"), peer); - simgrid::s4u::Actor::createActor("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::getClock()); + XBT_INFO("Total simulation time: %e", simgrid::s4u::Engine::get_clock()); return 0; }