]> AND Public Git Repository - simgrid.git/blobdiff - src/surf/network_smpi.cpp
Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
make cluster routing a bit more flexible, to allow adding other kinds of clusters
[simgrid.git] / src / surf / network_smpi.cpp
index ee6e415d360fd489b9f4775361bba25bd96f3ac0..5e651cec32f7a31158bbb1540b46f5a546deefd3 100644 (file)
@@ -16,7 +16,8 @@ xbt_dict_t gap_lookup = NULL;
 
 static int factor_cmp(const void *pa, const void *pb)
 {
-  return (((s_smpi_factor_t*)pa)->factor > ((s_smpi_factor_t*)pb)->factor);
+ return (((s_smpi_factor_t*)pa)->factor > ((s_smpi_factor_t*)pb)->factor) ? 1 :
+         (((s_smpi_factor_t*)pa)->factor < ((s_smpi_factor_t*)pb)->factor) ? -1 : 0;
 }
 
 
@@ -79,9 +80,28 @@ void surf_network_model_init_SMPI(void)
   xbt_cfg_setdefault_double(_sg_cfg_set, "network/weight_S", 8775);
 }
 
-void NetworkSmpiModel::gapAppend(double size, const NetworkCm02LinkLmmPtr link, NetworkCm02ActionLmmPtr action)
+NetworkSmpiModel::NetworkSmpiModel()
+ : NetworkCm02Model() {
+       m_haveGap=true;
+}
+
+NetworkSmpiModel::~NetworkSmpiModel(){
+  if (gap_lookup) {
+    xbt_dict_free(&gap_lookup);
+  }
+  if (smpi_bw_factor) {
+    xbt_dynar_free(&smpi_bw_factor);
+    smpi_bw_factor = NULL;
+  }
+  if (smpi_lat_factor) {
+    xbt_dynar_free(&smpi_lat_factor);
+    smpi_lat_factor = NULL;
+  }
+}
+
+void NetworkSmpiModel::gapAppend(double size, const NetworkLinkPtr link, NetworkActionPtr action)
 {
-  const char *src = link->m_name;
+  const char *src = link->getName();
   xbt_fifo_t fifo;
   //surf_action_network_CM02_t last_action;
   //double bw;
@@ -116,11 +136,11 @@ void NetworkSmpiModel::gapAppend(double size, const NetworkCm02LinkLmmPtr link,
   }
 }
 
-void NetworkSmpiModel::gapRemove(ActionLmmPtr lmm_action)
+void NetworkSmpiModel::gapRemove(ActionPtr lmm_action)
 {
   xbt_fifo_t fifo;
   size_t size;
-  NetworkCm02ActionLmmPtr action = (NetworkCm02ActionLmmPtr)(lmm_action);
+  NetworkCm02ActionPtr action = static_cast<NetworkCm02ActionPtr>(lmm_action);
 
   if (sg_sender_gap > 0.0 && action->p_senderLinkName
       && action->p_senderFifoItem) {
@@ -160,6 +180,7 @@ double NetworkSmpiModel::bandwidthFactor(double size)
 
   return current;
 }
+
 double NetworkSmpiModel::latencyFactor(double size)
 {
   if (!smpi_lat_factor)