libjmmcg
build_2783
A C++ library containing an eclectic mix of useful, advanced components.
|
This pool has a specified size, and the worker pool_threads steal work from a centrally-held signalled_work_queue. More...
#include <thread_pool_workers.hpp>
Public Member Functions | |
BOOST_MPL_ASSERT ((std::is_same< typename std::is_same< typename PTT::os_traits::thread_traits::model_type, sequential_mode >::type, std::false_type >)) | |
__stdcall | thread_pool (const typename base_t::pool_type::size_type num_threads) noexcept(false) FORCE_INLINE |
Create the thread pool. More... | |
__stdcall | ~thread_pool () noexcept(false) FORCE_INLINE |
template<typename ExecT > | |
erase_states __fastcall FORCE_INLINE | erase (ExecT &ec) noexcept(false) |
Erase the specified, queued work. More... | |
const statistics_type __fastcall | statistics () const noexcept(true) override FORCE_INLINE |
Obtain access to any statistics data collected by the operation of the thread_pool. More... | |
This pool has a specified size, and the worker pool_threads steal work from a centrally-held signalled_work_queue.
To reduce calls to the global operator new, and enhance scalability, the parallel algorithms (for_each(), transform(), etc, except merge() and sort()) internally pre-allocate a contiguous buffer of memory for their internal operations. This buffer grows O(p.log(p)) for p processors, with a constant that is ~200 bytes, so for millions of processors, megabytes could be allocated per parallel algorithm. This buffer is guaranteed to be released after all mutations on the elements within the collection are complete, which is usually before any waiting execution_context, constructed by the call to the parallel algorithm, would be released, but is not guaranteed. For each parallel algorithm (except merge() and sort()) exactly 2 calls to the global operator new are made by the library. For merge() the internal buffer grows as O(p.log(p).log(n)) with O(log(n)) calls to the global operator new, and for sort(), O(p.log(p).log(n)^2)) and O(log(n)^2) respectively.
Definition at line 135 of file thread_pool_workers.hpp.
using jmmcg::ppd::thread_pool< pool_traits::work_distribution_mode_t::worker_threads_get_work< pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue >, pool_traits::size_mode_t::fixed_size, PTT >::api_params_type = typename base_t::api_params_type |
Definition at line 168 of file thread_pool_workers.hpp.
using jmmcg::ppd::thread_pool< pool_traits::work_distribution_mode_t::worker_threads_get_work< pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue >, pool_traits::size_mode_t::fixed_size, PTT >::base_t = private_::thread_pool_queue_model< pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>, pool_traits::size_mode_t::fixed_size, PTT, private_::fixed_pool_of_threads< PTT, pool::private_::thread_types::steal< PTT::result_traits_, typename PTT::os_traits, PTT, pool_traits::work_distribution_mode_t::worker_threads_get_work<pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue>::queue_model > > > |
Definition at line 164 of file thread_pool_workers.hpp.
using jmmcg::ppd::thread_pool< pool_traits::work_distribution_mode_t::worker_threads_get_work< pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue >, pool_traits::size_mode_t::fixed_size, PTT >::GSSk_batching_type = typename base_t::GSSk_batching_type |
Definition at line 173 of file thread_pool_workers.hpp.
using jmmcg::ppd::thread_pool< pool_traits::work_distribution_mode_t::worker_threads_get_work< pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue >, pool_traits::size_mode_t::fixed_size, PTT >::os_traits = typename base_t::os_traits |
Definition at line 166 of file thread_pool_workers.hpp.
using jmmcg::ppd::thread_pool< pool_traits::work_distribution_mode_t::worker_threads_get_work< pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue >, pool_traits::size_mode_t::fixed_size, PTT >::pool_traits_type = typename base_t::pool_traits_type |
Definition at line 165 of file thread_pool_workers.hpp.
using jmmcg::ppd::thread_pool< pool_traits::work_distribution_mode_t::worker_threads_get_work< pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue >, pool_traits::size_mode_t::fixed_size, PTT >::pool_type = typename base_t::pool_type |
Definition at line 169 of file thread_pool_workers.hpp.
using jmmcg::ppd::thread_pool< pool_traits::work_distribution_mode_t::worker_threads_get_work< pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue >, pool_traits::size_mode_t::fixed_size, PTT >::signalled_work_queue_type = typename base_t::signalled_work_queue_type |
Definition at line 172 of file thread_pool_workers.hpp.
using jmmcg::ppd::thread_pool< pool_traits::work_distribution_mode_t::worker_threads_get_work< pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue >, pool_traits::size_mode_t::fixed_size, PTT >::statistics_type = typename base_t::statistics_type |
Definition at line 170 of file thread_pool_workers.hpp.
using jmmcg::ppd::thread_pool< pool_traits::work_distribution_mode_t::worker_threads_get_work< pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue >, pool_traits::size_mode_t::fixed_size, PTT >::thread_traits = typename base_t::thread_traits |
Definition at line 167 of file thread_pool_workers.hpp.
using jmmcg::ppd::thread_pool< pool_traits::work_distribution_mode_t::worker_threads_get_work< pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue >, pool_traits::size_mode_t::fixed_size, PTT >::work_distribution_mode = typename base_t::work_distribution_mode |
Definition at line 171 of file thread_pool_workers.hpp.
Enumerator | |
---|---|
failed_to_erase | |
ignoring_result | |
erased_successfully |
Definition at line 177 of file thread_pool_workers.hpp.
|
inlineexplicitnoexcept |
Create the thread pool.
num_threads | The number of threads in the pool, which must be greater than zero. |
Definition at line 187 of file thread_pool_workers.hpp.
References jmmcg::ppd::control_flow_graph< OST >::add_cfg_details< Node >::params::params().
|
inlinenoexcept |
The destruction of the collection of threads is sequential, but the threads themselves can exit in parallel, thus speeding up the clean-up of the pool.
Definition at line 210 of file thread_pool_workers.hpp.
References jmmcg::ppd::control_flow_graph< OST >::add_cfg_details< Node >::params::params().
jmmcg::ppd::thread_pool< pool_traits::work_distribution_mode_t::worker_threads_get_work< pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue >, pool_traits::size_mode_t::fixed_size, PTT >::BOOST_MPL_ASSERT | ( | (std::is_same< typename std::is_same< typename PTT::os_traits::thread_traits::model_type, sequential_mode >::type, std::false_type >) | ) |
|
inlinenoexcept |
Erase the specified, queued work.
Note that if the work has started processing, it will not be erased.
ec | The execution context of the work to erase. |
Definition at line 230 of file thread_pool_workers.hpp.
|
inlineoverridenoexcept |
Obtain access to any statistics data collected by the operation of the thread_pool.
Algorithmic complexity when specialised with no_statistics: constant time, otherwise O(pool_size()). Note that the value computed for the statistics_type::total_vertical_work() is guaranteed to be accurate. The value computed for the statistics_type::total_hrz_work() is guaranteed not be more than the value as if it were computed atomically. Therefore the following holds: statistics_type::total_work_added()>=statistics_type::total_vertical_work()+statistics_type::total_hrz_work()
Definition at line 245 of file thread_pool_workers.hpp.
References jmmcg::ppd::control_flow_graph< OST >::add_cfg_details< Node >::params::params().