Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Revert "make MSG_comm_waitany use dynar"
[simgrid.git] / examples / msg / actions / actions.c
index dab03cd..20d67e8 100644 (file)
@@ -256,6 +256,7 @@ static void action_barrier(const char *const *action)
 
 static void action_reduce(const char *const *action)
 {
+  int i;       
   char *reduce_identifier;
   char mailbox[80];
   double comm_size = parse_double(action[2]);
@@ -276,32 +277,25 @@ static void action_reduce(const char *const *action)
 
   if (!strcmp(process_name, "p0")) {
     XBT_DEBUG("%s: %s is the Root", reduce_identifier, process_name);
-
-    xbt_dynar_t comms = xbt_dynar_new(sizeof(msg_comm_t), NULL);
-    msg_task_t *tasks = xbt_new0(msg_task_t, communicator_size - 1);
-    int i;
-
-    for (i = 1; i < communicator_size; i++) {
-      sprintf(mailbox, "%s_p%d_p0", reduce_identifier, i);
-      xbt_dynar_push_as(comms, msg_comm_t,
-                        MSG_task_irecv(&(tasks[i - 1]), mailbox));
-    }
-    MSG_comm_waitall(comms, -1);
-
-    msg_comm_t comm;
-    unsigned int cursor;
-    xbt_dynar_foreach(comms, cursor, comm) {
-      MSG_comm_destroy(comm);
-      MSG_task_destroy(tasks[cursor]);
-    }
-    free(tasks);
-    xbt_dynar_free(&comms);
-
-    comp_task = MSG_task_create("reduce_comp", comp_size, 0, NULL);
-    XBT_DEBUG("%s: computing 'reduce_comp'", reduce_identifier);
-    MSG_task_execute(comp_task);
-    MSG_task_destroy(comp_task);
-    XBT_DEBUG("%s: computed", reduce_identifier);
+    
+    msg_comm_t *comms = xbt_new0(msg_comm_t,communicator_size-1);
+      msg_task_t *tasks = xbt_new0(msg_task_t,communicator_size-1);
+      for (i = 1; i < communicator_size; i++) {
+        sprintf(mailbox, "%s_p%d_p0", reduce_identifier, i);
+        comms[i-1] = MSG_task_irecv(&(tasks[i-1]),mailbox);
+      }
+      MSG_comm_waitall(comms,communicator_size-1,-1);
+      for (i = 1; i < communicator_size; i++) {
+        MSG_comm_destroy(comms[i-1]);
+        MSG_task_destroy(tasks[i-1]);
+      }
+      free(tasks);
+
+      comp_task = MSG_task_create("reduce_comp", comp_size, 0, NULL);
+      XBT_DEBUG("%s: computing 'reduce_comp'", reduce_identifier);
+      MSG_task_execute(comp_task);
+      MSG_task_destroy(comp_task);
+      XBT_DEBUG("%s: computed", reduce_identifier);
 
   } else {
     XBT_DEBUG("%s: %s sends", reduce_identifier, process_name);
@@ -338,27 +332,21 @@ static void action_bcast(const char *const *action)
   if (!strcmp(process_name, "p0")) {
     XBT_DEBUG("%s: %s is the Root", bcast_identifier, process_name);
 
-    xbt_dynar_t comms = xbt_dynar_new(sizeof(msg_comm_t), NULL);
+      msg_comm_t *comms = xbt_new0(msg_comm_t,communicator_size-1);
 
+      for (i = 1; i < communicator_size; i++) {
+        sprintf(mailbox, "%s_p0_p%d", bcast_identifier, i);
+        comms[i-1] =
+            MSG_task_isend(MSG_task_create(mailbox,0,comm_size,NULL),
+                mailbox);
+      }
+      MSG_comm_waitall(comms,communicator_size-1,-1);
+    for (i = 1; i < communicator_size; i++)
+         MSG_comm_destroy(comms[i-1]);
+      free(comms);
 
-    for (i = 1; i < communicator_size; i++) {
-      sprintf(mailbox, "%s_p0_p%d", bcast_identifier, i);
-      xbt_dynar_push_as(comms, msg_comm_t,
-                        MSG_task_isend(MSG_task_create
-                                       (mailbox, 0, comm_size, NULL), mailbox));
-    }
-    MSG_comm_waitall(comms, -1);
-
-    msg_comm_t comm;
-    unsigned int cursor;
-    xbt_dynar_foreach(comms, cursor, comm) {
-      MSG_comm_destroy(comm);
-    }
-    xbt_dynar_free(&comms);
-
-
-    XBT_DEBUG("%s: all messages sent by %s have been received",
-              bcast_identifier, process_name);
+      XBT_DEBUG("%s: all messages sent by %s have been received",
+             bcast_identifier, process_name);
 
   } else {
     sprintf(mailbox, "%s_p0_%s", bcast_identifier, process_name);
@@ -390,6 +378,7 @@ static void action_sleep(const char *const *action)
 
 static void action_allReduce(const char *const *action)
 {
+  int i;
   char *allreduce_identifier;
   char mailbox[80];
   double comm_size = parse_double(action[2]);
@@ -411,21 +400,16 @@ static void action_allReduce(const char *const *action)
   if (!strcmp(process_name, "p0")) {
     XBT_DEBUG("%s: %s is the Root", allreduce_identifier, process_name);
 
-    xbt_dynar_t comms = xbt_dynar_new(sizeof(msg_comm_t), NULL);
-    msg_task_t *tasks = xbt_new0(msg_task_t, communicator_size - 1);
-    int i;
+    msg_comm_t *comms = xbt_new0(msg_comm_t,communicator_size-1);
+    msg_task_t *tasks = xbt_new0(msg_task_t,communicator_size-1);
     for (i = 1; i < communicator_size; i++) {
       sprintf(mailbox, "%s_p%d_p0", allreduce_identifier, i);
-      xbt_dynar_push_as(comms, msg_comm_t,
-                        MSG_task_irecv(&(tasks[i - 1]), mailbox));
+      comms[i-1] = MSG_task_irecv(&(tasks[i-1]),mailbox);
     }
-    MSG_comm_waitall(comms, -1);
-
-    msg_comm_t comm;
-    unsigned int cursor;
-    xbt_dynar_foreach(comms, cursor, comm) {
-      MSG_comm_destroy(comm);
-      MSG_task_destroy(tasks[cursor]);
+    MSG_comm_waitall(comms,communicator_size-1,-1);
+    for (i = 1; i < communicator_size; i++) {
+      MSG_comm_destroy(comms[i-1]);
+      MSG_task_destroy(tasks[i-1]);
     }
     free(tasks);
 
@@ -435,18 +419,16 @@ static void action_allReduce(const char *const *action)
     MSG_task_destroy(comp_task);
     XBT_DEBUG("%s: computed", allreduce_identifier);
 
-    xbt_dynar_reset(comms);
     for (i = 1; i < communicator_size; i++) {
       sprintf(mailbox, "%s_p0_p%d", allreduce_identifier, i);
-      xbt_dynar_push_as(comms, msg_comm_t,
-                        MSG_task_isend(MSG_task_create
-                                       (mailbox, 0, comm_size, NULL), mailbox));
-    }
-    MSG_comm_waitall(comms, -1);
-    xbt_dynar_foreach(comms, cursor, comm) {
-      MSG_comm_destroy(comm);
+      comms[i-1] =
+          MSG_task_isend(MSG_task_create(mailbox,0,comm_size,NULL),
+              mailbox);
     }
-    xbt_dynar_free(&comms);
+    MSG_comm_waitall(comms,communicator_size-1,-1);
+    for (i = 1; i < communicator_size; i++)
+       MSG_comm_destroy(comms[i-1]);
+    free(comms);
 
     XBT_DEBUG("%s: all messages sent by %s have been received",
               allreduce_identifier, process_name);