From 65fa5368ce444c71b473d9cf2ffc8e7ed29a2ea6 Mon Sep 17 00:00:00 2001 From: mquinson Date: Tue, 10 May 2005 11:10:19 +0000 Subject: [PATCH] Use proper timer; allow several timed sections per file (ie, use the 'line' argument to build the dictionary tag); cleanup our mess on exit; use proper logs git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@1257 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- src/gras/Virtu/rl_chrono.c | 18 +++++-------- src/gras/Virtu/sg_chrono.c | 54 ++++++++++++++++++++++++++------------ 2 files changed, 44 insertions(+), 28 deletions(-) diff --git a/src/gras/Virtu/rl_chrono.c b/src/gras/Virtu/rl_chrono.c index 2fd46400b4..e7b2597da4 100644 --- a/src/gras/Virtu/rl_chrono.c +++ b/src/gras/Virtu/rl_chrono.c @@ -12,30 +12,26 @@ #include "gras/chrono.h" #include "msg/msg.h" #include "portable.h" +#include "gras_modinter.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(chrono,gras,"Benchmarking used code"); -int gras_bench_always_begin(const char *location, int line) -{ +int gras_bench_always_begin(const char *location,int line) { return 0; } -int gras_bench_always_end(void) -{ +int gras_bench_always_end(void) { return 0; } -int gras_bench_once_begin(const char *location, int line) -{ +int gras_bench_once_begin(const char *location,int line) { return 0; } -int gras_bench_once_end(void) -{ +int gras_bench_once_end(void) { return 0; } -void gras_chrono_init(void) -{ -} +void gras_chrono_init(void) {} +void gras_chrono_exit(void) {} diff --git a/src/gras/Virtu/sg_chrono.c b/src/gras/Virtu/sg_chrono.c index 9b16b28970..8e61e30321 100644 --- a/src/gras/Virtu/sg_chrono.c +++ b/src/gras/Virtu/sg_chrono.c @@ -13,15 +13,18 @@ #include "msg/msg.h" #include "xbt/xbt_portability.h" #include "portable.h" +#include "gras_modinter.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(chrono,gras,"Benchmarking used code"); -static double timer = 0.0; +static xbt_os_timer_t timer; static int benchmarking = 0; static xbt_dict_t benchmark_set = NULL; -static double reference = .00523066250047108838; +static double reference = .00523066250047108838; /* FIXME: we should benchmark host machine to set this */ static double duration = 0.0; -static const char* __location__ = NULL; + +static char* locbuf = NULL; +static int locbufsize; static void store_in_dict(xbt_dict_t dict, const char *key, double value) { @@ -29,7 +32,7 @@ static void store_in_dict(xbt_dict_t dict, const char *key, double value) xbt_dict_get(dict, key, (void *) &ir); if (!ir) { - ir = calloc(1, sizeof(double)); + ir = xbt_new0(double,1); xbt_dict_set(dict, key, ir, free); } *ir = value; @@ -44,12 +47,13 @@ static double get_from_dict(xbt_dict_t dict, const char *key) return *ir; } -int gras_bench_always_begin(const char *location, int line) +int gras_bench_always_begin(const char *location,int line) { xbt_assert0(!benchmarking,"Already benchmarking"); benchmarking = 1; - timer = xbt_os_time(); + if (!timer) + xbt_os_timer_start(timer); return 0; } @@ -59,25 +63,31 @@ int gras_bench_always_end(void) xbt_assert0(benchmarking,"Not benchmarking yet"); benchmarking = 0; - duration = xbt_os_time()-timer; + xbt_os_timer_stop(timer); + duration = xbt_os_timer_elapsed(timer); task = MSG_task_create("task", (duration)/reference, 0 , NULL); MSG_task_execute(task); - /* printf("---> %lg <--- \n", xbt_os_time()-timer); */ MSG_task_destroy(task); return 0; } -int gras_bench_once_begin(const char *location, int line) +int gras_bench_once_begin(const char *location,int line) { double *ir = NULL; xbt_assert0(!benchmarking,"Already benchmarking"); benchmarking = 1; - __location__=location; - xbt_dict_get(benchmark_set, __location__, (void *) &ir); + if (!locbuf || locbufsize < strlen(location) + 64) { + locbufsize = strlen(location) + 64; + locbuf = xbt_realloc(locbuf,locbufsize); + } + sprintf(locbuf,"%s:%d",location, line); + + xbt_dict_get(benchmark_set, locbuf, (void *) &ir); if(!ir) { -/* printf("%s:%d\n",location,line); */ - duration = xbt_os_time(); + DEBUG1("%s",locbuf); + duration = 1; + xbt_os_timer_start(timer); return 1; } else { duration = -1.0; @@ -92,11 +102,13 @@ int gras_bench_once_end(void) xbt_assert0(benchmarking,"Not benchmarking yet"); benchmarking = 0; if(duration>0) { - duration = xbt_os_time()-duration; - store_in_dict(benchmark_set, __location__, duration); + xbt_os_timer_stop(timer); + duration = xbt_os_timer_elapsed(timer); + store_in_dict(benchmark_set, locbuf, duration); } else { - duration = get_from_dict(benchmark_set,__location__); + 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); @@ -105,6 +117,14 @@ int gras_bench_once_end(void) void gras_chrono_init(void) { - if(!benchmark_set) + if(!benchmark_set) { benchmark_set = xbt_dict_new(); + timer = xbt_os_timer_new(); + } +} + +void gras_chrono_exit(void) { + if (locbuf) free(locbuf); + xbt_dict_free(&benchmark_set); + xbt_os_timer_free(timer); } -- 2.20.1