Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
the smpi factor parsing was still returning wrong values
[simgrid.git] / src / surf / network.c
index d5b647e..5bc5bab 100644 (file)
@@ -77,6 +77,13 @@ static double constant_bandwidth_constraint(double rate, double bound,
 /**********************/
 /*   SMPI callbacks   */
 /**********************/
+
+static int factor_cmp(const void *pa, const void *pb)
+{
+  return (((s_smpi_factor_t*)pa)->factor > ((s_smpi_factor_t*)pb)->factor);
+}
+
+
 static xbt_dynar_t parse_factor(const char *smpi_coef_string)
 {
   char *value = NULL;
@@ -98,6 +105,12 @@ static xbt_dynar_t parse_factor(const char *smpi_coef_string)
     xbt_dynar_free(&radical_elements2);
   }
   xbt_dynar_free(&radical_elements);
+  iter=0;
+  xbt_dynar_sort(smpi_factor, &factor_cmp);
+  xbt_dynar_foreach(smpi_factor, iter, fact) {
+    XBT_DEBUG("ordered smpi_factor:\t%ld : %f", fact.factor, fact.value);
+
+  }
   return smpi_factor;
 }
 
@@ -109,9 +122,10 @@ static double smpi_bandwidth_factor(double size)
 
   unsigned int iter = 0;
   s_smpi_factor_t fact;
+
   xbt_dynar_foreach(smpi_bw_factor, iter, fact) {
-    if (size >= fact.factor) {
-      XBT_DEBUG("%lf >= %ld return %f", size, fact.factor, fact.value);
+    if (size < fact.factor) {
+      XBT_DEBUG("%lf < %ld return %f", size, fact.factor, fact.value);
       return fact.value;
     }
   }
@@ -127,11 +141,13 @@ static double smpi_latency_factor(double size)
 
   unsigned int iter = 0;
   s_smpi_factor_t fact;
+
   xbt_dynar_foreach(smpi_lat_factor, iter, fact) {
-    if (size >= fact.factor) {
-      XBT_DEBUG("%lf >= %ld return %f", size, fact.factor, fact.value);
+    if (size < fact.factor) {
+      XBT_DEBUG("%lf < %ld return %f", size, fact.factor, fact.value);
       return fact.value;
     }
+
   }
 
   return 1.0;