/usr/include/deal.II/base/multithread_info.h is in libdeal.ii-dev 8.4.2-2+b1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | // ---------------------------------------------------------------------
//
// Copyright (C) 2000 - 2016 by the deal.II authors
//
// This file is part of the deal.II library.
//
// The deal.II library is free software; you can use it, redistribute
// it, and/or modify it under the terms of the GNU Lesser General
// Public License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
// The full text of the license can be found in the file LICENSE at
// the top level of the deal.II distribution.
//
// ---------------------------------------------------------------------
#ifndef dealii__multithread_info_h
#define dealii__multithread_info_h
//---------------------------------------------------------------------------
#include <deal.II/base/config.h>
#include <deal.II/base/types.h>
#include <deal.II/base/exceptions.h>
DEAL_II_NAMESPACE_OPEN
/**
* This class provides information about the system which may be of use in
* multithreaded programs. At the moment this is just the number of CPUs. If
* deal.II is compiled with multithreading support, some functions will use
* multiple threads for their action. Currently the library supports both
* thread-based and task-based parallelism.
* @ref threads
* describes the different uses of each. The default number of threads used
* for task-based parallel methods is selected automatically by the Threading
* Building Blocks library. See
* @ref threads
* for more information on this. Thread-based parallel methods need to
* explicitly create threads and may want to use a number of threads that is
* related to the number of CPUs in your system. The recommended number of
* threads can be queried using MultithreadInfo::n_threads(), while the number
* of cores in the system is returned by MultithreadInfo::n_cores().
*
* @ingroup threads
* @author Thomas Richter, Wolfgang Bangerth, 2000
*/
class MultithreadInfo
{
public:
/**
* The number of CPUs in the system. At the moment detection of CPUs is only
* implemented on Linux, FreeBSD, and Mac computers. It is one if detection
* failed or is not implemented on your system.
*
* If it is one, although you are on a multi-processor machine, please refer
* to the documentation in <tt>multithread_info.cc</tt> near to the
* <tt>error</tt> directive.
*/
static unsigned int n_cores ();
/**
* Returns the number of threads to use. This is initially set to the number
* of cores the system has (see n_cores()) but can be further restricted by
* set_thread_limit() and the environment variable DEAL_II_NUM_THREADS.
*/
static unsigned int n_threads ();
/**
* Return an estimate for the memory consumption, in bytes, of this object.
* This is not exact (but will usually be close) because calculating the
* memory usage of trees (e.g., <tt>std::map</tt>) is difficult.
*/
static std::size_t memory_consumption ();
/**
* Set the maximum number of threads to be used to the minimum of the
* environment variable DEAL_II_NUM_THREADS and the given argument (or its
* default value). This affects the initialization of the TBB. If neither is
* given, the default from TBB is used (based on the number of cores in the
* system).
*
* This routine is executed automatically with the default argument before
* your code in main() is running (using a static constructor). It is also
* executed by MPI_InitFinalize. Use the appropriate argument of the
* constructor of MPI_InitFinalize if you have an MPI based code.
*/
static void set_thread_limit (const unsigned int max_threads = numbers::invalid_unsigned_int);
/**
* Returns if the TBB is running using a single thread either because of
* thread affinity or because it is set via a call to set_thread_limit. This
* is used in the PETScWrappers to avoid using the interface that is not
* thread-safe.
*/
static bool is_running_single_threaded ();
/**
* Exception
*/
DeclException0(ExcProcNotPresent);
private:
/**
* Constructor made private because no instance of this class needs to be
* constructed as all members are static.
*/
MultithreadInfo ();
/**
* Private function to determine the number of CPUs. Implementation for
* Linux, OSF, SGI, and Sun machines; if no detection of the number of CPUs
* is supported, or if detection fails, this function returns one.
*/
static unsigned int get_n_cpus ();
/**
* Variable representing the maximum number of threads.
*/
static unsigned int n_max_threads;
/**
* Variable representing the number of cores in the system. This is computed
* by get_n_cpus() and is returned by n_cores().
*/
static const unsigned int n_cpus;
};
//---------------------------------------------------------------------------
DEAL_II_NAMESPACE_CLOSE
// end of #ifndef dealii__multithread_info_h
#endif
//---------------------------------------------------------------------------
|