Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Python: Add Comm.wait_any
[simgrid.git] / src / surf / network_ib.hpp
index b7d1715..f15fcfd 100644 (file)
@@ -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,61 @@
 #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 <map>
+#include <vector>
+
+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 {
+class IBNode {
+public:
+  int id;
+  // store related links, to ease computation of the penalties
+  std::vector<ActiveComm*> ActiveCommsUp;
+  // store the number of comms received from each node
+  std::map<IBNode*, int> 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 {
 private:
+  void updateIBfactors_rec(IBNode* root, std::vector<bool>& updatedlist);
+  void computeIBfactors(IBNode* root);
+
 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());
+  NetworkIBModel();
+  explicit NetworkIBModel(const char* name);
+  NetworkIBModel(const NetworkIBModel&) = delete;
+  NetworkIBModel& operator=(const NetworkIBModel&) = delete;
+  ~NetworkIBModel() override;
+  void updateIBfactors(NetworkAction* action, IBNode* from, IBNode* to, int remove);
 
+  std::unordered_map<std::string, IBNode*> active_nodes;
+  std::unordered_map<NetworkAction*, std::pair<IBNode*, IBNode*>> active_comms;
 
+  double Bs;
+  double Be;
+  double ys;
 };
+}
+} // namespace kernel
+} // namespace simgrid
 #endif