]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
introduce new n_threads(), deprecate n_default_threads
authorheister <heister@0785d39b-7218-0410-832d-ea1e28bc413d>
Wed, 2 Oct 2013 17:40:15 +0000 (17:40 +0000)
committerheister <heister@0785d39b-7218-0410-832d-ea1e28bc413d>
Wed, 2 Oct 2013 17:40:15 +0000 (17:40 +0000)
git-svn-id: https://svn.dealii.org/trunk@31073 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/doc/news/changes.h
deal.II/include/deal.II/base/multithread_info.h
deal.II/source/base/multithread_info.cc

index bb840cebeb21fbfe1d8a043ecfd445f1ce4b6469..4cd8154509ab711d27f165cbd3cdea547a39e2f9 100644 (file)
@@ -61,6 +61,13 @@ inconvenience this causes.
 
 
 <ol>
+  <li>
+  Changed: if configured with TBB but the number of threads is set to 1,
+  do not bother to use TBB in workstream.
+  <br>
+  (Timo Heister, 2013/10/02)
+  </li>
+
   <li>
   New: step-51 demonstrates the use of hybridized discontinuous Galerkin
   methods in deal.II, using the face elements FE_FaceQ. The programs solves a
index 3b7297555679d3609373a77b81edc814309b4ff6..38a3f214649b47b7c50d29099ac05ea54e0362f7 100644 (file)
@@ -86,8 +86,17 @@ public:
    * At start time this is <tt>n_cpus</tt> or
    * one, if detection of the number
    * of CPUs is not possible.
+   *
+   * @deprecated: use set_thread_limit() instead.
+   */
+  unsigned int n_default_threads DEAL_II_DEPRECATED;
+
+  /*
+   * Returns the number of threads to use. This is governed by the number
+   * of cores the system has and can be further restricted by
+   * set_thread_limit().
    */
-  unsigned int n_default_threads;
+  unsigned int n_threads() const;
 
   /**
    * Determine an estimate for
index e79373d0aaffbd2be1062d7fa1ca568b632c552d..6ea0b132a673ce80ad2bb5dce51377346ca1b610 100644 (file)
@@ -101,6 +101,9 @@ unsigned int MultithreadInfo::get_n_cpus()
 
 void MultithreadInfo::set_thread_limit(const unsigned int max_threads)
 {
+  Assert(n_max_threads==numbers::invalid_unsigned_int,
+      ExcMessage("Calling set_thread_limit() more than once is not supported!"));
+
   unsigned int max_threads_env = numbers::invalid_unsigned_int;
   char *penv;
   penv = getenv ("DEAL_II_NUM_THREADS");
@@ -117,11 +120,13 @@ void MultithreadInfo::set_thread_limit(const unsigned int max_threads)
     }
 }
 
-bool MultithreadInfo::is_running_single_threaded()
+
+unsigned int MultithreadInfo::n_threads() const
 {
   if (n_max_threads == numbers::invalid_unsigned_int)
-    n_max_threads = tbb::task_scheduler_init::default_num_threads();
-  return n_max_threads == 1;
+    return tbb::task_scheduler_init::default_num_threads();
+  else
+    return n_max_threads;
 }
 
 
@@ -132,9 +137,9 @@ unsigned int MultithreadInfo::get_n_cpus()
   return 1;
 }
 
-bool MultithreadInfo::is_running_single_threaded()
+unsigned int MultithreadInfo::n_threads() const
 {
-  return true;
+  return 1;
 }
 
 void MultithreadInfo::set_thread_limit(const unsigned int)
@@ -144,10 +149,17 @@ void MultithreadInfo::set_thread_limit(const unsigned int)
 #endif
 
 
+bool MultithreadInfo::is_running_single_threaded()
+{
+  return n_threads() == 1;
+}
+
+
 MultithreadInfo::MultithreadInfo ()
   :
   n_cpus (get_n_cpus()),
-  n_default_threads (n_cpus)
+  n_default_threads (n_cpus),
+  n_max_threads (numbers::invalid_unsigned_int)
 {}
 
 

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.