Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Various optimizations
authorthiery <thiery@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Thu, 3 Feb 2011 17:09:11 +0000 (17:09 +0000)
committerthiery <thiery@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Thu, 3 Feb 2011 17:09:11 +0000 (17:09 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@9572 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/simix/smx_context.c
src/simix/smx_context_raw.c
src/simix/smx_process.c
src/surf/surf_config.c
src/xbt/mallocator.c
src/xbt/swag.c

index fd93d16..f775099 100644 (file)
@@ -27,7 +27,7 @@ smx_context_t smx_current_context;
 #endif
 
 static int smx_parallel_contexts = 1;
-static int smx_parallel_threshold = 20;
+static int smx_parallel_threshold = 1;
 
 /** 
  * This function is called by SIMIX_global_init() to initialize the context module.
@@ -87,6 +87,13 @@ void SIMIX_context_mod_exit(void)
 XBT_INLINE void SIMIX_context_set_nthreads(int nb_threads) {
 
   xbt_assert1(nb_threads > 0, "Invalid number of parallel threads: %d", nb_threads);
+
+  if (nb_threads > 1) {
+#ifndef CONTEXT_THREADS
+    THROW0(arg_error, 0, "No thread support for parallel context execution");
+#endif
+  }
+
   smx_parallel_contexts = nb_threads;
 }
 
index f4a22c8..3f21edd 100644 (file)
@@ -280,7 +280,8 @@ static int smx_ctx_raw_get_thread_id(){
 
 static void smx_ctx_raw_runall(xbt_dynar_t processes)
 {
-  if (xbt_dynar_length(processes) > SIMIX_context_get_parallel_threshold()) {
+  if (SIMIX_context_is_parallel()
+      && xbt_dynar_length(processes) >= SIMIX_context_get_parallel_threshold()) {
     DEBUG1("Runall // %lu", xbt_dynar_length(processes));
     raw_factory->self = smx_ctx_raw_self_parallel;
     raw_factory->get_thread_id = smx_ctx_raw_get_thread_id;
@@ -306,18 +307,10 @@ void SIMIX_ctx_raw_factory_init(smx_context_factory_t *factory)
   (*factory)->suspend = smx_ctx_raw_suspend;
   (*factory)->name = "smx_raw_context_factory";
 
-  if (SIMIX_context_is_parallel()) {
-#ifdef CONTEXT_THREADS  /* To use parallel ucontexts a thread pool is needed */
-    parmap = xbt_parmap_new(2);
-    (*factory)->self = smx_ctx_raw_self_parallel;
-    (*factory)->get_thread_id = smx_ctx_raw_get_thread_id;
-    (*factory)->runall = smx_ctx_raw_runall;
-#else
-    THROW0(arg_error, 0, "No thread support for parallel context execution");
-#endif
-  } else {
-    (*factory)->runall = smx_ctx_raw_runall_serial;
-  }
+  parmap = xbt_parmap_new(2);
+  (*factory)->self = smx_ctx_raw_self_parallel;
+  (*factory)->get_thread_id = smx_ctx_raw_get_thread_id;
+  (*factory)->runall = smx_ctx_raw_runall;
 
   raw_factory = *factory;
 }
index 8a90a1e..070bfc3 100644 (file)
@@ -481,7 +481,6 @@ void SIMIX_post_process_sleep(smx_action_t action)
 void SIMIX_process_sleep_destroy(smx_action_t action)
 {
   DEBUG1("Destroy action %p", action);
-  xbt_free(action->name);
   if (action->sleep.surf_sleep)
     action->sleep.surf_sleep->model_type->action_unref(action->sleep.surf_sleep);
 #ifdef HAVE_TRACING
index e98f304..dd4c08c 100644 (file)
@@ -371,7 +371,7 @@ void surf_config_init(int *argc, char **argv)
                      _surf_cfg_cb_contexts_nthreads, NULL);
 
     /* minimal number of user contexts to be run in parallel */
-    default_value_int = 20;
+    default_value_int = 1;
     xbt_cfg_register(&_surf_cfg_set, "contexts/parallel_threshold",
         "Minimal number of user contexts to be run in parallel",
         xbt_cfgelm_int, &default_value_int, 1, 1,
index 60473a5..bf0d2c8 100644 (file)
@@ -110,17 +110,16 @@ void xbt_mallocator_free(xbt_mallocator_t m)
 void *xbt_mallocator_get(xbt_mallocator_t m)
 {
   void *object;
-  xbt_assert0(m != NULL, "Invalid parameter");
 
   if (m->current_size > 0) {
     /* there is at least an available object */
-    DEBUG3("Reuse an old object for mallocator %p (size:%d/%d)", m,
-           m->current_size, m->max_size);
+    /* DEBUG3("Reuse an old object for mallocator %p (size:%d/%d)", m,
+           m->current_size, m->max_size); */
     object = m->objects[--m->current_size];
   } else {
     /* otherwise we must allocate a new object */
-    DEBUG3("Create a new object for mallocator %p (size:%d/%d)", m,
-           m->current_size, m->max_size);
+    /* DEBUG3("Create a new object for mallocator %p (size:%d/%d)", m,
+           m->current_size, m->max_size); */
     object = (*(m->new_f)) ();
   }
   (*(m->reset_f)) (object);
@@ -142,18 +141,16 @@ void *xbt_mallocator_get(xbt_mallocator_t m)
  */
 void xbt_mallocator_release(xbt_mallocator_t m, void *object)
 {
-  xbt_assert0(m != NULL && object != NULL, "Invalid parameter");
-
   if (m->current_size < m->max_size) {
     /* there is enough place to push the object */
-    DEBUG3
+    /* DEBUG3
         ("Store deleted object in mallocator %p for further use (size:%d/%d)",
-         m, m->current_size, m->max_size);
+         m, m->current_size, m->max_size); */
     m->objects[m->current_size++] = object;
   } else {
     /* otherwise we don't have a choice, we must free the object */
-    DEBUG3("Free deleted object: mallocator %p is full (size:%d/%d)", m,
-           m->current_size, m->max_size);
+    /* DEBUG3("Free deleted object: mallocator %p is full (size:%d/%d)", m,
+           m->current_size, m->max_size); */
     (*(m->free_f)) (object);
   }
 }
index a5cc96d..bc2361a 100644 (file)
@@ -78,9 +78,7 @@ XBT_INLINE void xbt_swag_insert(void *obj, xbt_swag_t swag)
   }
 
   xbt_swag_getPrev(obj, swag->offset) = swag->tail;
-  xbt_swag_getNext(xbt_swag_getPrev(obj, swag->offset), swag->offset) =
-      obj;
-
+  xbt_swag_getNext(swag->tail, swag->offset) = obj;
   swag->tail = obj;
 }
 
@@ -106,9 +104,7 @@ XBT_INLINE void xbt_swag_insert_at_head(void *obj, xbt_swag_t swag)
   }
 
   xbt_swag_getNext(obj, swag->offset) = swag->head;
-  xbt_swag_getPrev(xbt_swag_getNext(obj, swag->offset), swag->offset) =
-      obj;
-
+  xbt_swag_getPrev(swag->head, swag->offset) = obj;
   swag->head = obj;
 }
 
@@ -134,9 +130,7 @@ XBT_INLINE void xbt_swag_insert_at_tail(void *obj, xbt_swag_t swag)
   }
 
   xbt_swag_getPrev(obj, swag->offset) = swag->tail;
-  xbt_swag_getNext(xbt_swag_getPrev(obj, swag->offset), swag->offset) =
-      obj;
-
+  xbt_swag_getNext(swag->tail, swag->offset) = obj;
   swag->tail = obj;
 }