X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/fa5c39e99f86a7d15686c09f5354f0f190ef6137..6d17036094433f0304c29b6f57922cee32b0c67c:/src/gras/Virtu/sg_emul.c diff --git a/src/gras/Virtu/sg_emul.c b/src/gras/Virtu/sg_emul.c index ad165ea8ab..65ac32ff5c 100644 --- a/src/gras/Virtu/sg_emul.c +++ b/src/gras/Virtu/sg_emul.c @@ -7,11 +7,12 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ +#include /* sprintf */ #include "gras/emul.h" #include "gras/Virtu/virtu_sg.h" #include "gras_modinter.h" -#include "xbt/xbt_portability.h" /* timers */ +#include "xbt/xbt_os_time.h" /* timers */ #include "xbt/dict.h" #include "xbt/ex.h" @@ -49,7 +50,7 @@ static void store_in_dict(xbt_dict_t dict, const char *key, double value) ir = xbt_dict_get_or_null(dict, key); if (!ir) { ir = xbt_new0(double,1); - xbt_dict_set(dict, key, ir, free); + xbt_dict_set(dict, key, ir, xbt_free_f); } *ir = value; } @@ -72,15 +73,31 @@ int gras_bench_always_begin(const char *location,int line) int gras_bench_always_end(void) { - m_task_t task = NULL; - + smx_action_t act; + smx_cond_t cond; + smx_mutex_t mutex; + xbt_assert0(benchmarking,"Not benchmarking yet"); benchmarking = 0; xbt_os_timer_stop(timer); duration = xbt_os_timer_elapsed(timer); - task = MSG_task_create("task", (duration)/reference, 0 , NULL); - MSG_task_execute(task); - MSG_task_destroy(task); + + cond = SIMIX_cond_init(); + mutex = SIMIX_mutex_init(); + + SIMIX_mutex_lock(mutex); + act = SIMIX_action_execute(SIMIX_host_self(), (char*) "task", (duration)/reference); + + SIMIX_register_action_to_condition(act,cond); + SIMIX_register_condition_to_action(act,cond); + SIMIX_cond_wait(cond, mutex); + + SIMIX_action_destroy(act); + SIMIX_mutex_unlock(mutex); + + SIMIX_cond_destroy(cond); + SIMIX_mutex_destroy(mutex); + return 0; } @@ -109,7 +126,9 @@ int gras_bench_once_begin(const char *location,int line) { int gras_bench_once_end(void) { - m_task_t task = NULL; + smx_action_t act; + smx_cond_t cond; + smx_mutex_t mutex; xbt_assert0(benchmarking,"Not benchmarking yet"); benchmarking = 0; @@ -121,9 +140,21 @@ int gras_bench_once_end(void) duration = get_from_dict(benchmark_set,locbuf); } DEBUG2("Simulate the run of a task of %f sec for %s",duration,locbuf); - task = MSG_task_create("task", (duration)/reference, 0 , NULL); - MSG_task_execute(task); - MSG_task_destroy(task); + cond = SIMIX_cond_init(); + mutex = SIMIX_mutex_init(); + + SIMIX_mutex_lock(mutex); + act = SIMIX_action_execute(SIMIX_host_self(), (char*)"task", (duration)/reference); + + SIMIX_register_action_to_condition(act,cond); + SIMIX_register_condition_to_action(act,cond); + SIMIX_cond_wait(cond, mutex); + + SIMIX_action_destroy(act); + SIMIX_mutex_unlock(mutex); + + SIMIX_cond_destroy(cond); + SIMIX_mutex_destroy(mutex); return 0; } @@ -138,4 +169,59 @@ int gras_if_SG(void) { return 1; } +void gras_global_init(int *argc,char **argv) { +return SIMIX_global_init(argc,argv); +} +void gras_create_environment(const char *file) { +return SIMIX_create_environment(file); +} +void gras_function_register(const char *name, xbt_main_func_t code) { + return SIMIX_function_register(name, code); +} +void gras_main() { + smx_cond_t cond = NULL; + smx_action_t smx_action; + xbt_fifo_t actions_done = xbt_fifo_new(); + xbt_fifo_t actions_failed = xbt_fifo_new(); + + + /* Clean IO before the run */ + fflush(stdout); + fflush(stderr); + + + while (SIMIX_solve(actions_done, actions_failed) != -1.0) { + + while ( (smx_action = xbt_fifo_pop(actions_failed)) ) { + + + DEBUG1("** %s failed **",smx_action->name); + while ( (cond = xbt_fifo_pop(smx_action->cond_list)) ) { + SIMIX_cond_broadcast(cond); + } + /* action finished, destroy it */ + // SIMIX_action_destroy(smx_action); + } + + while ( (smx_action = xbt_fifo_pop(actions_done)) ) { + + DEBUG1("** %s done **",smx_action->name); + while ( (cond = xbt_fifo_pop(smx_action->cond_list)) ) { + SIMIX_cond_broadcast(cond); + } + /* action finished, destroy it */ + //SIMIX_action_destroy(smx_action); + } + } + xbt_fifo_free(actions_failed); + xbt_fifo_free(actions_done); + return; + +} +void gras_launch_application(const char *file) { +return SIMIX_launch_application(file); +} +void gras_clean() { +return SIMIX_clean(); +}