Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Keep an int parameter to SIMIX_context_get_nthreads
authorChristophe Thiéry <christopho128@gmail.com>
Wed, 25 Jan 2012 13:27:27 +0000 (14:27 +0100)
committerChristophe Thiéry <christopho128@gmail.com>
Wed, 25 Jan 2012 13:27:27 +0000 (14:27 +0100)
include/simix/context.h
src/simix/smx_context.c
src/surf/surf_config.c

index ce4def0..137e374 100644 (file)
@@ -101,7 +101,7 @@ XBT_PUBLIC(smx_process_t) SIMIX_process_from_PID(int PID);
 /* parallelism */
 XBT_INLINE int SIMIX_context_is_parallel(void);
 XBT_INLINE int SIMIX_context_get_nthreads(void);
-XBT_INLINE void SIMIX_context_set_nthreads(char* str_nb_threads);
+XBT_INLINE void SIMIX_context_set_nthreads(int nb_threads);
 XBT_INLINE int SIMIX_context_get_parallel_threshold(void);
 XBT_INLINE void SIMIX_context_set_parallel_threshold(int threshold);
 XBT_INLINE e_xbt_parmap_mode_t SIMIX_context_get_parallel_mode(void);
index 01de34b..9faef0e 100644 (file)
@@ -132,21 +132,12 @@ XBT_INLINE int SIMIX_context_get_nthreads(void) {
  * for the user contexts.
  *
  * This function should be called before initializing SIMIX.
- * A value of 1 means no parallelism.
+ * A value of 1 means no parallelism (1 thread only).
  * If the value is greater than 1, the thread support must be enabled.
  *
  * \param nb_threads the number of threads to use
  */
-XBT_INLINE void SIMIX_context_set_nthreads(char* str_nb_threads) {
-
-  int nb_threads;
-
-  if(!strcmp(str_nb_threads,"auto")){
-      nb_threads = PROCESSOR_COUNT;
-      XBT_DEBUG("Auto-setting threads to %d",nb_threads);
-  }
-  else
-    nb_threads = atoi(str_nb_threads);
+XBT_INLINE void SIMIX_context_set_nthreads(int nb_threads) {
 
   xbt_assert(nb_threads > 0, "Invalid number of parallel threads: %d", nb_threads);
 
index 6cd40b2..7a39bc7 100644 (file)
@@ -226,7 +226,17 @@ static void _surf_cfg_cb_context_stack_size(const char *name, int pos)
 
 static void _surf_cfg_cb_contexts_nthreads(const char *name, int pos)
 {
-  SIMIX_context_set_nthreads(xbt_cfg_get_string(_surf_cfg_set, name));
+  unsigned int nthreads;
+  const char* value = xbt_cfg_get_string(_surf_cfg_set, name);
+  if (!strcmp(value, "auto")) {
+    XBT_DEBUG("Auto setting contexts/nthreads to %d", PROCESSOR_COUNT);
+    nthreads = PROCESSOR_COUNT;
+  }
+  else {
+    nthreads = atoi(value);
+    xbt_assert(nthreads > 0, "context/threads should be a positive number or 'auto'");
+  }
+  SIMIX_context_set_nthreads(nthreads);
 }
 
 static void _surf_cfg_cb_contexts_parallel_threshold(const char *name, int pos)