Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add collectives for allgather, allreduce, bcast and reduce
[simgrid.git] / src / simgrid / sg_config.c
index e647b9d..fffd34a 100644 (file)
@@ -18,7 +18,9 @@
 #include "instr/instr_interface.h"
 #include "simgrid/simix.h"
 #include "simgrid/sg_config.h"
-#include "mc/mc.h" 
+#include "smpi/smpi_interface.h"
+#include "mc/mc.h"
+#include "instr/instr.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_config, surf,
                                 "About the configuration of simgrid");
@@ -97,7 +99,6 @@ static void sg_config_cmd_line(int *argc, char **argv)
   }
 }
 
-
 /* callback of the workstation/model variable */
 static void _sg_cfg_cb__workstation_model(const char *name, int pos)
 {
@@ -225,6 +226,47 @@ static void _sg_cfg_cb__weight_S(const char *name, int pos)
   sg_weight_S_parameter = xbt_cfg_get_double(_sg_cfg_set, name);
 }
 
+/* callback of the mpi collectives */
+static void _sg_cfg_cb__coll(const char *category,
+                            s_mpi_coll_description_t * table,
+                            const char *name, int pos)
+{
+  char *val;
+
+  xbt_assert(_sg_init_status == 1,
+              "Cannot change the model after the initialization");
+
+  val = xbt_cfg_get_string(_sg_cfg_set, name);
+
+  if (!strcmp(val, "help")) {
+    coll_help(category, table);
+    exit(0);
+  }
+
+  /* New Module missing */
+  find_coll_description(table, val);
+}
+static void _sg_cfg_cb__coll_allgather(const char *name, int pos){
+  _sg_cfg_cb__coll("allgather", mpi_coll_allgather_description, name, pos);
+}
+static void _sg_cfg_cb__coll_allreduce(const char *name, int pos)
+{
+  _sg_cfg_cb__coll("allreduce", mpi_coll_allreduce_description, name, pos);  
+}
+static void _sg_cfg_cb__coll_alltoall(const char *name, int pos)
+{
+  _sg_cfg_cb__coll("alltoall", mpi_coll_alltoall_description, name, pos);  
+}
+static void _sg_cfg_cb__coll_bcast(const char *name, int pos)
+{
+  _sg_cfg_cb__coll("bcast", mpi_coll_bcast_description, name, pos);  
+}
+static void _sg_cfg_cb__coll_reduce(const char *name, int pos)
+{
+  _sg_cfg_cb__coll("reduce", mpi_coll_reduce_description, name, pos);  
+}
+
+
 /* callback of the inclusion path */
 static void _sg_cfg_cb__surf_path(const char *name, int pos)
 {
@@ -455,17 +497,16 @@ void sg_config_init(int *argc, char **argv)
     xbt_cfg_register(&_sg_cfg_set, "maxmin/precision",
                      "Numerical precision used when updating simulation models (epsilon in double comparisons)",
                      xbt_cfgelm_double, NULL, 1, 1, _sg_cfg_cb__maxmin_precision, NULL);
-    xbt_cfg_setdefault_double(_sg_cfg_set, "maxmin/precision", 0.00001); // FIXME use setdefault everywhere here!
+    xbt_cfg_setdefault_double(_sg_cfg_set, "maxmin/precision", 0.00001); 
 
     /* The parameters of network models */
 
-    double_default_value = 0.0;
     xbt_cfg_register(&_sg_cfg_set, "network/sender_gap",
                      "Minimum gap between two overlapping sends",
-                     xbt_cfgelm_double, &double_default_value, 1, 1,
+                     xbt_cfgelm_double, NULL, 1, 1, /* default is set in network.c */
                      _sg_cfg_cb__sender_gap, NULL);
 
-    double_default_value = 1.0;
+    double_default_value = 1.0; // FIXME use setdefault everywhere here!
     xbt_cfg_register(&_sg_cfg_set, "network/latency_factor",
                      "Correction factor to apply to the provided latency (default value set by network model)",
                      xbt_cfgelm_double, &double_default_value, 1, 1,
@@ -475,10 +516,10 @@ void sg_config_init(int *argc, char **argv)
                      "Correction factor to apply to the provided bandwidth (default value set by network model)",
                      xbt_cfgelm_double, &double_default_value, 1, 1,
                      _sg_cfg_cb__bandwidth_factor, NULL);
-    double_default_value = 0.0;
+
     xbt_cfg_register(&_sg_cfg_set, "network/weight_S",
-                     "Correction factor to apply to the weight of competing streams(default value set by network model)",
-                     xbt_cfgelm_double, &double_default_value, 1, 1,
+                     "Correction factor to apply to the weight of competing streams (default value set by network model)",
+                     xbt_cfgelm_double, NULL, 1, 1, /* default is set in network.c */
                      _sg_cfg_cb__weight_S, NULL);
 
     /* Inclusion path */
@@ -548,6 +589,13 @@ void sg_config_init(int *argc, char **argv)
                      xbt_cfgelm_int, NULL, 0, 1,
                      _mc_cfg_cb_visited, NULL);
     xbt_cfg_setdefault_int(_sg_cfg_set, "model-check/visited", 0);
+
+    /* Set file name for dot output of graph state */
+    xbt_cfg_register(&_sg_cfg_set, "model-check/dot_output",
+                     "Specify the name of dot file corresponding to graph state",
+                     xbt_cfgelm_string, NULL, 0, 1,
+                     _mc_cfg_cb_dot_output, NULL);
+    xbt_cfg_setdefault_string(_sg_cfg_set, "model-check/dot_output", "");
 #endif
 
     /* do verbose-exit */
@@ -663,6 +711,12 @@ void sg_config_init(int *argc, char **argv)
                      xbt_cfgelm_int, &default_small_messages_threshold, 1, 1, NULL,
                      NULL);
 
+    int default_send_is_detached_threshold = 65536;
+    xbt_cfg_register(&_sg_cfg_set, "smpi/send_is_detached_thres",
+                     "Threshold of message size where MPI_Send stops behaving like MPI_Isend and becomes MPI_Ssend",
+                     xbt_cfgelm_int, &default_send_is_detached_threshold, 1, 1, NULL,
+                     NULL);
+
     //For smpi/bw_factor and smpi/lat_factor
     //Default value have to be "threshold0:value0;threshold1:value1;...;thresholdN:valueN"
     //test is if( size >= thresholdN ) return valueN;
@@ -679,7 +733,57 @@ void sg_config_init(int *argc, char **argv)
                      xbt_cfgelm_string, NULL, 1, 1, NULL,
                      NULL);
     xbt_cfg_setdefault_string(_sg_cfg_set, "smpi/lat_factor", "65472:11.6436;15424:3.48845;9376:2.59299;5776:2.18796;3484:1.88101;1426:1.61075;732:1.9503;257:1.95341;0:2.01467");
-//END SMPI
+
+    xbt_cfg_register(&_sg_cfg_set, "smpi/os",
+                     "Small messages timings (MPI_Send minimum time for small messages)",
+                     xbt_cfgelm_string, NULL, 1, 1, NULL,
+                     NULL);
+    xbt_cfg_setdefault_string(_sg_cfg_set, "smpi/os", "1:0:0:0:0");
+
+    xbt_cfg_register(&_sg_cfg_set, "smpi/ois",
+                     "Small messages timings (MPI_Isend minimum time for small messages)",
+                     xbt_cfgelm_string, NULL, 1, 1, NULL,
+                     NULL);
+    xbt_cfg_setdefault_string(_sg_cfg_set, "smpi/ois", "1:0:0:0:0");
+
+    xbt_cfg_register(&_sg_cfg_set, "smpi/or",
+                     "Small messages timings (MPI_Recv minimum time for small messages)",
+                     xbt_cfgelm_string, NULL, 1, 1, NULL,
+                     NULL);
+    xbt_cfg_setdefault_string(_sg_cfg_set, "smpi/or", "1:0:0:0:0");
+
+    default_value = xbt_strdup("default");
+    xbt_cfg_register(&_sg_cfg_set, "smpi/allgather",
+                    "Which collective to use for allgather",
+                    xbt_cfgelm_string, &default_value, 1, 1, &_sg_cfg_cb__coll_allgather,
+                    NULL);
+
+    default_value = xbt_strdup("default");
+    xbt_cfg_register(&_sg_cfg_set, "smpi/allreduce",
+                    "Which collective to use for allreduce",
+                    xbt_cfgelm_string, &default_value, 1, 1, &_sg_cfg_cb__coll_allreduce,
+                    NULL);
+
+    default_value = xbt_strdup("ompi");
+    xbt_cfg_register(&_sg_cfg_set, "smpi/alltoall",
+                    "Which collective to use for alltoall",
+                    xbt_cfgelm_string, &default_value, 1, 1, &_sg_cfg_cb__coll_alltoall,
+                    NULL);
+
+
+    default_value = xbt_strdup("default");
+    xbt_cfg_register(&_sg_cfg_set, "smpi/bcast",
+                    "Which collective to use for bcast",
+                    xbt_cfgelm_string, &default_value, 1, 1, &_sg_cfg_cb__coll_bcast,
+                    NULL);
+
+
+    default_value = xbt_strdup("default");
+    xbt_cfg_register(&_sg_cfg_set, "smpi/reduce",
+                    "Which collective to use for reduce",
+                    xbt_cfgelm_string, &default_value, 1, 1, &_sg_cfg_cb__coll_reduce,
+                    NULL);
+    //END SMPI
 
 
     if (!surf_path) {