Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
+ MPI_Sendrecv()
[simgrid.git] / src / smpi / smpi_global.c
index cbe17a2..c5c0e43 100644 (file)
@@ -127,6 +127,8 @@ void smpi_mpi_land_func(void *a, void *b, int *length,
                         MPI_Datatype * datatype);
 void smpi_mpi_sum_func(void *a, void *b, int *length,
                        MPI_Datatype * datatype);
+void smpi_mpi_prod_func(void *a, void *b, int *length,
+                       MPI_Datatype * datatype);
 void smpi_mpi_min_func(void *a, void *b, int *length,
                        MPI_Datatype * datatype);
 void smpi_mpi_max_func(void *a, void *b, int *length,
@@ -194,6 +196,8 @@ void smpi_global_init()
   // mpi datatypes
   smpi_mpi_global->mpi_byte = xbt_new(s_smpi_mpi_datatype_t, 1);
   smpi_mpi_global->mpi_byte->size = (size_t) 1;
+  smpi_mpi_global->mpi_char = xbt_new(s_smpi_mpi_datatype_t, 1);
+  smpi_mpi_global->mpi_char->size = (size_t) 1;
   smpi_mpi_global->mpi_int = xbt_new(s_smpi_mpi_datatype_t, 1);
   smpi_mpi_global->mpi_int->size = sizeof(int);
   smpi_mpi_global->mpi_float = xbt_new(s_smpi_mpi_datatype_t, 1);
@@ -206,6 +210,8 @@ void smpi_global_init()
   smpi_mpi_global->mpi_land->func = smpi_mpi_land_func;
   smpi_mpi_global->mpi_sum = xbt_new(s_smpi_mpi_op_t, 1);
   smpi_mpi_global->mpi_sum->func = smpi_mpi_sum_func;
+  smpi_mpi_global->mpi_prod = xbt_new(s_smpi_mpi_op_t, 1);
+  smpi_mpi_global->mpi_prod->func = smpi_mpi_prod_func;
   smpi_mpi_global->mpi_min = xbt_new(s_smpi_mpi_op_t, 1);
   smpi_mpi_global->mpi_min->func = smpi_mpi_min_func;
   smpi_mpi_global->mpi_max = xbt_new(s_smpi_mpi_op_t, 1);
@@ -246,12 +252,14 @@ void smpi_global_destroy()
   xbt_free(smpi_mpi_global->mpi_comm_world);
 
   xbt_free(smpi_mpi_global->mpi_byte);
+  xbt_free(smpi_mpi_global->mpi_char);
   xbt_free(smpi_mpi_global->mpi_int);
   xbt_free(smpi_mpi_global->mpi_double);
   xbt_free(smpi_mpi_global->mpi_float);
 
   xbt_free(smpi_mpi_global->mpi_land);
   xbt_free(smpi_mpi_global->mpi_sum);
+  xbt_free(smpi_mpi_global->mpi_prod);
   xbt_free(smpi_mpi_global->mpi_max);
   xbt_free(smpi_mpi_global->mpi_min);
 
@@ -288,7 +296,6 @@ static void smpi_cfg_cb_host_speed(const char *name, int pos)
 
 int smpi_run_simulation(int *argc, char **argv)
 {
-  smx_cond_t cond = NULL;
   smx_action_t action = NULL;
 
   xbt_fifo_t actions_failed = xbt_fifo_new();
@@ -326,16 +333,12 @@ int smpi_run_simulation(int *argc, char **argv)
 
   while (SIMIX_solve(actions_done, actions_failed) != -1.0) {
     while ((action = xbt_fifo_pop(actions_failed))) {
-      DEBUG1("** %s failed **", action->name);
-      while ((cond = xbt_fifo_pop(action->cond_list))) {
-        SIMIX_cond_broadcast(cond);
-      }
+      DEBUG1("** %s failed **", SIMIX_action_get_name(action));
+      SIMIX_action_signal_all(action);
     }
     while ((action = xbt_fifo_pop(actions_done))) {
-      DEBUG1("** %s done **", action->name);
-      while ((cond = xbt_fifo_pop(action->cond_list))) {
-        SIMIX_cond_broadcast(cond);
-      }
+      DEBUG1("** %s done **", SIMIX_action_get_name(action));
+      SIMIX_action_signal_all(action);
     }
   }