X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/8d18cbc2b336bfe9a64a789e22c39f45a1cbd696..c5ad8ca1a68bbaa9152471c8d0eeb99d762f0d86:/src/gras/Virtu/sg_emul.c diff --git a/src/gras/Virtu/sg_emul.c b/src/gras/Virtu/sg_emul.c index cf38124083..1fce177fe0 100644 --- a/src/gras/Virtu/sg_emul.c +++ b/src/gras/Virtu/sg_emul.c @@ -1,8 +1,7 @@ -/* $Id$ */ - /* sg_emul - Emulation support (simulation) */ -/* Copyright (c) 2003-5 Arnaud Legrand, Martin Quinson. All rights reserved.*/ +/* Copyright (c) 2005, 2006, 2007, 2009, 2010. The SimGrid Team. + * All rights reserved. */ /* 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. */ @@ -19,30 +18,16 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(gras_virtu_emul, gras_virtu, "Emulation support"); /*** CPU burning */ -void gras_cpu_burn(double flops) { - smx_action_t act; - smx_cond_t cond; - smx_mutex_t mutex; - - if (flops>0) { - cond = SIMIX_cond_init(); - mutex = SIMIX_mutex_init(); - - SIMIX_mutex_lock(mutex); - act = - SIMIX_action_execute(SIMIX_host_self(), "task", flops); - - SIMIX_register_action_to_condition(act, cond); - SIMIX_cond_wait(cond, mutex); - SIMIX_unregister_action_to_condition(act, cond); - - SIMIX_action_destroy(act); - SIMIX_mutex_unlock(mutex); +void gras_cpu_burn(double flops) +{ + smx_action_t execution; - SIMIX_cond_destroy(cond); - SIMIX_mutex_destroy(mutex); + if (flops > 0){ + execution = simcall_host_execute("task", SIMIX_host_self(), flops, 1); + simcall_host_execution_wait(execution); } } + /*** Timing macros ***/ static xbt_os_timer_t timer; static int benchmarking = 0; @@ -56,15 +41,14 @@ static unsigned int locbufsize; void gras_emul_init(void) { if (!benchmark_set) { - benchmark_set = xbt_dict_new(); + benchmark_set = xbt_dict_new_homogeneous(xbt_free_f); timer = xbt_os_timer_new(); } } void gras_emul_exit(void) { - if (locbuf) - free(locbuf); + free(locbuf); xbt_dict_free(&benchmark_set); xbt_os_timer_free(timer); } @@ -77,7 +61,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, xbt_free_f); + xbt_dict_set(dict, key, ir, NULL); } *ir = value; } @@ -91,7 +75,7 @@ static double get_from_dict(xbt_dict_t dict, const char *key) int gras_bench_always_begin(const char *location, int line) { - xbt_assert0(!benchmarking, "Already benchmarking"); + xbt_assert(!benchmarking, "Already benchmarking"); benchmarking = 1; if (!timer) @@ -99,13 +83,14 @@ int gras_bench_always_begin(const char *location, int line) return 0; } -int gras_bench_always_end(void) { - xbt_assert0(benchmarking, "Not benchmarking yet"); +int gras_bench_always_end(void) +{ + xbt_assert(benchmarking, "Not benchmarking yet"); benchmarking = 0; xbt_os_timer_stop(timer); duration = xbt_os_timer_elapsed(timer); - gras_cpu_burn(duration/reference); + gras_cpu_burn(duration / reference); return 0; } @@ -113,7 +98,7 @@ int gras_bench_always_end(void) { int gras_bench_once_begin(const char *location, int line) { double *ir = NULL; - xbt_assert0(!benchmarking, "Already benchmarking"); + xbt_assert(!benchmarking, "Already benchmarking"); benchmarking = 1; if (!locbuf || locbufsize < strlen(location) + 64) { @@ -124,7 +109,7 @@ int gras_bench_once_begin(const char *location, int line) ir = xbt_dict_get_or_null(benchmark_set, locbuf); if (!ir) { - DEBUG1("%s", locbuf); + XBT_DEBUG("%s", locbuf); duration = 1; xbt_os_timer_start(timer); return 1; @@ -134,8 +119,9 @@ int gras_bench_once_begin(const char *location, int line) } } -int gras_bench_once_end(void) { - xbt_assert0(benchmarking, "Not benchmarking yet"); +int gras_bench_once_end(void) +{ + xbt_assert(benchmarking, "Not benchmarking yet"); benchmarking = 0; if (duration > 0) { xbt_os_timer_stop(timer); @@ -144,8 +130,8 @@ int gras_bench_once_end(void) { } else { duration = get_from_dict(benchmark_set, locbuf); } - DEBUG2("Simulate the run of a task of %f sec for %s", duration, locbuf); - gras_cpu_burn(duration/reference); + XBT_DEBUG("Simulate the run of a task of %f sec for %s", duration, locbuf); + gras_cpu_burn(duration / reference); return 0; }