X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3080c6b0d097d6b3b7d5b3dda0592154ce438f64..ccafe2d8af6c598a53ab9a6fa588ce39c776555d:/src/surf/network_ib.hpp diff --git a/src/surf/network_ib.hpp b/src/surf/network_ib.hpp index b7d17157c5..ee3367768e 100644 --- a/src/surf/network_ib.hpp +++ b/src/surf/network_ib.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2014. The SimGrid Team. +/* Copyright (c) 2014-2019. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -7,37 +7,59 @@ #ifndef SURF_NETWORK_IB_HPP_ #define SURF_NETWORK_IB_HPP_ -class NetworkIBModel : public NetworkModel { -private: +#include "src/surf/network_smpi.hpp" +#include "xbt/base.h" + +#include +#include + +namespace simgrid { +namespace kernel { +namespace resource { + +class XBT_PRIVATE IBNode; + +class XBT_PRIVATE ActiveComm { public: - NetworkIBModel(); - NetworkIBModel(const char *name); - ~NetworkModel(); - virtual ActionPtr communicate(RoutingEdgePtr src, RoutingEdgePtr dst, - double size, double rate); - virtual NetworkLinkPtr createNetworkLink(const char *name, - double bw_initial, - tmgr_trace_t bw_trace, - double lat_initial, - tmgr_trace_t lat_trace, - e_surf_resource_state_t state_initial, - tmgr_trace_t state_trace, - e_surf_link_sharing_policy_t policy, - xbt_dict_t properties); + IBNode* destination; + NetworkAction* action; + double init_rate; + ActiveComm() : destination(nullptr), action(nullptr), init_rate(-1){}; + virtual ~ActiveComm() = default; }; -class NetworkIBLink : public NetworkLink { -private: +class IBNode { public: - NetworkIBLink(NetworkModelPtr model, const char *name, xbt_dict_t props); - NetworkIBLink(NetworkModelPtr model, const char *name, xbt_dict_t props, - lmm_constraint_t constraint, - tmgr_history_t history, - tmgr_trace_t state_trace); - ~NetworkIBLink(); - virtual void updateLatency(double value, double date=surf_get_clock()); - virtual void updateBandwidth(double value, double date=surf_get_clock()); + int id; + // store related links, to ease computation of the penalties + std::vector ActiveCommsUp; + // store the number of comms received from each node + std::map ActiveCommsDown; + // number of comms the node is receiving + int nbActiveCommsDown; + explicit IBNode(int id) : id(id), nbActiveCommsDown(0){}; + virtual ~IBNode() = default; +}; + +class XBT_PRIVATE NetworkIBModel : public NetworkSmpiModel { + double Bs; + double Be; + double ys; + void updateIBfactors_rec(IBNode* root, std::vector& updatedlist); + void computeIBfactors(IBNode* root); + +public: + NetworkIBModel(); + explicit NetworkIBModel(const char* name); + NetworkIBModel(const NetworkIBModel&) = delete; + NetworkIBModel& operator=(const NetworkIBModel&) = delete; + void updateIBfactors(NetworkAction* action, IBNode* from, IBNode* to, int remove); + std::unordered_map active_nodes; + std::unordered_map> active_comms; }; +} // namespace resource +} // namespace kernel +} // namespace simgrid #endif