A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Use proper timer; allow several timed sections per file (ie, use the 'line' argument...
[simgrid.git]
/
src
/
gras
/
Virtu
/
sg_chrono.c
diff --git
a/src/gras/Virtu/sg_chrono.c
b/src/gras/Virtu/sg_chrono.c
index
9b16b28
..
8e61e30
100644
(file)
--- 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 "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");
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 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 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)
{
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) {
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;
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;
}
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;
{
xbt_assert0(!benchmarking,"Already benchmarking");
benchmarking = 1;
- timer = xbt_os_time();
+ if (!timer)
+ xbt_os_timer_start(timer);
return 0;
}
return 0;
}
@@
-59,25
+63,31
@@
int gras_bench_always_end(void)
xbt_assert0(benchmarking,"Not benchmarking yet");
benchmarking = 0;
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);
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;
}
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;
{
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) {
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;
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) {
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 {
} 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);
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)
{
void gras_chrono_init(void)
{
- if(!benchmark_set)
+ if(!benchmark_set)
{
benchmark_set = xbt_dict_new();
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);
}
}