Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add a new Infiniband network model, based on the works of Jerome Vienne.
[simgrid.git] / src / surf / network_ib.hpp
index b7d1715..8adaf4a 100644 (file)
@@ -7,37 +7,46 @@
 #ifndef SURF_NETWORK_IB_HPP_
 #define SURF_NETWORK_IB_HPP_
 
-class NetworkIBModel : public NetworkModel {
-private:
-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);
+#include "network_smpi.hpp"
+class IBNode;
+
+
+class ActiveComm{
+public :
+  //IBNode* origin;
+  IBNode* destination;
+  NetworkActionPtr action;
+  double init_rate;
+  ActiveComm() : destination(NULL),action(NULL),init_rate(-1){};
+  ~ActiveComm(){};
 };
 
-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;
+  IBNode(int id) : id(id),nbActiveCommsDown(0){};
+  ~IBNode(){};
+};
+
+class NetworkIBModel : public NetworkSmpiModel {
 private:
+  void updateIBfactors_rec(IBNode *root, 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();
+  NetworkIBModel(const char *name);
+  ~NetworkIBModel();
+  void updateIBfactors(NetworkActionPtr action, IBNode *from, IBNode * to, int remove);
+  
+  xbt_dict_t active_nodes;
+  std::map<NetworkActionPtr , std::pair<IBNode*,IBNode*> > active_comms;
 
 };
+
 #endif