X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2a5d9a285cc2a553f5848b1389aaac65a9530b29..d5b29830df70e823202e384a7655e4371193ecd7:/examples/simdag/scheduling/sd_scheduling.c diff --git a/examples/simdag/scheduling/sd_scheduling.c b/examples/simdag/scheduling/sd_scheduling.c index eca4354bef..bb53f2b888 100644 --- a/examples/simdag/scheduling/sd_scheduling.c +++ b/examples/simdag/scheduling/sd_scheduling.c @@ -8,7 +8,7 @@ #include #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; @@ -84,8 +84,8 @@ static double finish_on_at(SD_task_t task, sg_host_t host) if (SD_task_get_amount(parent) <= 1e-6){ redist_time= 0; } else { - redist_time = SD_route_get_latency(parent_host[0], host) + - SD_task_get_amount(parent) / SD_route_get_bandwidth(parent_host[0], host); + redist_time = sg_host_route_latency(parent_host[0], host) + + SD_task_get_amount(parent) / sg_host_route_bandwidth(parent_host[0], host); } data_available = SD_task_get_start_time(parent) + redist_time; } @@ -134,7 +134,8 @@ int main(int argc, char **argv) { unsigned int cursor; double min_finish_time = -1.0; - SD_task_t task, selected_task = NULL; + SD_task_t task; + SD_task_t selected_task = NULL; xbt_dynar_t ready_tasks; sg_host_t selected_host = NULL; char * tracefilename = NULL; @@ -170,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: @@ -218,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); @@ -241,7 +250,5 @@ int main(int argc, char **argv) } xbt_free(hosts); - /* exit */ - SD_exit(); return 0; }