From 7093fb34d72a218454bc09aff6f970d68442e0ce Mon Sep 17 00:00:00 2001 From: thiery Date: Fri, 23 Jun 2006 14:59:53 +0000 Subject: [PATCH] Detect when a task reaches a watch point. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@2427 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- src/simdag/private.h | 2 ++ src/simdag/sd_global.c | 4 ++-- src/simdag/sd_task.c | 7 ++++++- testsuite/simdag/sd_test.c | 10 ++++++---- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/simdag/private.h b/src/simdag/private.h index c2441984f0..d8bf9f7cdb 100644 --- a/src/simdag/private.h +++ b/src/simdag/private.h @@ -16,6 +16,7 @@ typedef struct SD_global { int workstation_count; /* number of workstations */ xbt_dict_t links; /* link list */ xbt_dynar_t tasks; /* task list */ + int watch_point_reached; /* has a task just reached a watch point? */ /* task state sets */ xbt_swag_t not_scheduled_task_set; @@ -23,6 +24,7 @@ typedef struct SD_global { xbt_swag_t running_task_set; xbt_swag_t done_task_set; xbt_swag_t failed_task_set; + } s_SD_global_t, *SD_global_t; extern SD_global_t sd_global; diff --git a/src/simdag/sd_global.c b/src/simdag/sd_global.c index 33149902df..254f7c0adf 100644 --- a/src/simdag/sd_global.c +++ b/src/simdag/sd_global.c @@ -16,6 +16,7 @@ void SD_init(int *argc, char **argv) { sd_global->workstation_count = 0; sd_global->links = xbt_dict_new(); sd_global->tasks = xbt_dynar_new(sizeof(SD_task_t), NULL); + sd_global->watch_point_reached = 0; s_SD_task_t task; sd_global->not_scheduled_task_set = xbt_swag_new(xbt_swag_offset(task, state_hookup)); @@ -68,7 +69,6 @@ SD_task_t* SD_simulate(double how_long) double total_time = 0.0; /* we stop the simulation when total_time >= how_long */ double elapsed_time = 0.0; - int watch_point_reached = 0; int i; SD_task_t task; surf_action_t surf_action; @@ -76,7 +76,7 @@ SD_task_t* SD_simulate(double how_long) surf_solve(); /* Takes traces into account. Returns 0.0 */ /* main loop */ - while (elapsed_time >= 0.0 && total_time < how_long && !watch_point_reached) { + while (elapsed_time >= 0.0 && total_time < how_long && !sd_global->watch_point_reached) { for (i = 0 ; i < xbt_dynar_length(sd_global->tasks); i++) { xbt_dynar_get_cpy(sd_global->tasks, i, &task); printf("Examining task '%s'...\n", SD_task_get_name(task)); diff --git a/src/simdag/sd_task.c b/src/simdag/sd_task.c index 66de4615fc..3ae2ab91ac 100644 --- a/src/simdag/sd_task.c +++ b/src/simdag/sd_task.c @@ -66,7 +66,7 @@ e_SD_task_state_t SD_task_get_state(SD_task_t task) { return SD_FAILED; } -/* Changes the state of a task and update the swags. +/* Changes the state of a task. Update the swags and the flag sd_global->watch_point_reached. */ static void __SD_task_set_state(SD_task_t task, e_SD_task_state_t new_state) { xbt_swag_remove(task, task->state_set); @@ -86,6 +86,11 @@ static void __SD_task_set_state(SD_task_t task, e_SD_task_state_t new_state) { default: /* SD_FAILED */ task->state_set = sd_global->failed_task_set; } + + if (task->watch_points & new_state) { + printf("Watch point reached with task '%s' in state %d!\n", SD_task_get_name(task), new_state); + sd_global->watch_point_reached = 1; + } } /* Sets the data of a task. diff --git a/testsuite/simdag/sd_test.c b/testsuite/simdag/sd_test.c index 384620c173..944565891c 100644 --- a/testsuite/simdag/sd_test.c +++ b/testsuite/simdag/sd_test.c @@ -74,7 +74,9 @@ int main(int argc, char **argv) { SD_task_unwatch(taskA, SD_SCHEDULED); SD_task_watch(taskA, SD_DONE); SD_task_watch(taskA, SD_SCHEDULED);*/ - + + SD_task_watch(taskA, SD_SCHEDULED); + /* let's launch the simulation! */ int workstation_number = 2; @@ -87,10 +89,10 @@ int main(int argc, char **argv) { }; double rate = 1; - printf("Scheduling task A (state = %d)...\n", SD_task_get_state(taskA)); + /* printf("Scheduling task A (state = %d)...\n", SD_task_get_state(taskA));*/ SD_task_schedule(taskA, workstation_number, workstation_list, - computation_amount, communication_amount, rate); - printf("Done. Task A state: %d\n", SD_task_get_state(taskA)); + computation_amount, communication_amount, rate); + /* printf("Done. Task A state: %d\n", SD_task_get_state(taskA));*/ printf("Launching simulation...\n"); SD_simulate(100); -- 2.20.1