Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
remove gras from the main documentation
[simgrid.git] / src / gras / Virtu / sg_emul.c
index d7119f3..1fce177 100644 (file)
@@ -1,6 +1,7 @@
 /* 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. */
 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;
@@ -54,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);
 }
@@ -75,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;
 }
@@ -89,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)
@@ -97,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;
 }
@@ -111,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) {
@@ -122,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;
@@ -132,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);
@@ -142,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;
 }