Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge pull request #193 from Takishipp/signals
[simgrid.git] / examples / simdag / scheduling / sd_scheduling.c
index 726c701..bb53f2b 100644 (file)
@@ -8,7 +8,7 @@
 #include <string.h>
 #include "simgrid/simdag.h"
 
-#if HAVE_JEDULE
+#if SIMGRID_HAVE_JEDULE
 #include "simgrid/jedule/jedule_sd_binding.h"
 #endif
 
@@ -65,14 +65,14 @@ static xbt_dynar_t get_ready_tasks(xbt_dynar_t dax)
 static double finish_on_at(SD_task_t task, sg_host_t host)
 {
   double result;
-  unsigned int i;
-  double data_available = 0.;
-  double redist_time = 0;
-  double last_data_available;
 
   xbt_dynar_t parents = SD_task_get_parents(task);
 
   if (!xbt_dynar_is_empty(parents)) {
+    unsigned int i;
+    double data_available = 0.;
+    double redist_time    = 0;
+    double last_data_available;
     /* compute last_data_available */
     SD_task_t parent;
     last_data_available = -1.0;
@@ -171,13 +171,18 @@ int main(int argc, char **argv)
   xbt_dynar_get_cpy(dax, 0, &task);
   sg_host_t host = SD_task_get_best_host(task);
   SD_task_schedulel(task, 1, host);
+  xbt_dynar_t changed_tasks = xbt_dynar_new(sizeof(SD_task_t), NULL);
+  SD_simulate_with_update(-1.0, changed_tasks);
 
-  while (!xbt_dynar_is_empty(SD_simulate(-1.0))) {
+  while (!xbt_dynar_is_empty(changed_tasks)) {
     /* Get the set of ready tasks */
     ready_tasks = get_ready_tasks(dax);
+    xbt_dynar_reset(changed_tasks);
+
     if (xbt_dynar_is_empty(ready_tasks)) {
       xbt_dynar_free_container(&ready_tasks);
       /* there is no ready task, let advance the simulation */
+      SD_simulate_with_update(-1.0, changed_tasks);
       continue;
     }
     /* For each ready task:
@@ -219,17 +224,20 @@ int main(int argc, char **argv)
     xbt_dynar_free_container(&ready_tasks);
     /* reset the min_finish_time for the next set of ready tasks */
     min_finish_time = -1.;
+    xbt_dynar_reset(changed_tasks);
+    SD_simulate_with_update(-1.0, changed_tasks);
   }
 
   XBT_INFO("Simulation Time: %f", SD_get_clock());
   XBT_INFO("------------------- Produce the trace file---------------------------");
   XBT_INFO("Producing a jedule output (if active) of the run into %s", tracefilename?tracefilename:"minmin_test.jed");
-#if HAVE_JEDULE
+#if SIMGRID_HAVE_JEDULE
   jedule_sd_dump(tracefilename);
 #endif
   free(tracefilename);
 
   xbt_dynar_free_container(&ready_tasks);
+  xbt_dynar_free(&changed_tasks);
 
   xbt_dynar_foreach(dax, cursor, task) {
     SD_task_destroy(task);
@@ -242,7 +250,5 @@ int main(int argc, char **argv)
   }
 
   xbt_free(hosts);
-  /* exit */
-  SD_exit();
   return 0;
 }