hpx/executors/parallel_executor.hpp#

Defined in header hpx/executors/parallel_executor.hpp.

See Public API for a list of names and headers that are part of the public HPX API.

namespace hpx
namespace execution

Typedefs

using parallel_executor = parallel_policy_executor<hpx::launch>#
using parallel_executor_spawn_hierarchically = parallel_policy_executor<hpx::launch, true>#

Functions

template<typename Policy> constexpr HPX_CXX_CORE_EXPORT parallel_policy_executor< Policy, true > to_hierarchical_spawning (parallel_policy_executor< Policy > &exec) noexcept
template<typename Policy> constexpr HPX_CXX_CORE_EXPORT parallel_policy_executor< Policy, true > to_hierarchical_spawning (parallel_policy_executor< Policy > &&exec) noexcept
template<typename Policy> constexpr HPX_CXX_CORE_EXPORT parallel_policy_executor< Policy, true > to_hierarchical_spawning (parallel_policy_executor< Policy > const &exec) noexcept
template<typename Executor> constexpr HPX_CXX_CORE_EXPORT Executor to_hierarchical_spawning (Executor &&exec) noexcept
template<typename Policy> constexpr HPX_CXX_CORE_EXPORT parallel_policy_executor< Policy > to_non_hierarchical_spawning (parallel_policy_executor< Policy, true > &exec) noexcept
template<typename Policy> constexpr HPX_CXX_CORE_EXPORT parallel_policy_executor< Policy > to_non_hierarchical_spawning (parallel_policy_executor< Policy, true > &&exec) noexcept
template<typename Policy> constexpr HPX_CXX_CORE_EXPORT parallel_policy_executor< Policy > to_non_hierarchical_spawning (parallel_policy_executor< Policy, true > const &exec) noexcept
template<typename Executor> constexpr HPX_CXX_CORE_EXPORT Executor to_non_hierarchical_spawning (Executor &&exec) noexcept
template<typename Tag, typename Policy, bool HierarchicalSpawning, typename Property>
HPX_CXX_CORE_EXPORT auto tag_invoke(Tag tag, parallel_policy_executor<Policy, HierarchicalSpawning> const &exec, Property &&prop) -> decltype(std::declval<parallel_policy_executor<Policy, HierarchicalSpawning>>().policy(std::declval<Tag>()(std::declval<Policy>(), std::declval<Property>())), parallel_policy_executor<Policy, HierarchicalSpawning>())#
template<typename Tag, typename Policy, bool HierarchicalSpawning>
HPX_CXX_CORE_EXPORT auto tag_invoke(Tag tag, parallel_policy_executor<Policy, HierarchicalSpawning> const &exec) -> decltype(std::declval<Tag>()(std::declval<Policy>()))#
template<typename Policy, bool HierarchicalSpawning = false>
struct parallel_policy_executor : public hpx::execution::parallel_policy_executor_base<Policy>#

Public Types

using base_type = parallel_policy_executor_base<Policy>#

Public Functions

inline explicit constexpr parallel_policy_executor(threads::thread_priority priority, threads::thread_stacksize stacksize = threads::thread_stacksize::default_, threads::thread_schedule_hint schedulehint = {}, Policy l = parallel::execution::detail::get_default_policy<Policy>::call()) noexcept#
inline explicit constexpr parallel_policy_executor(threads::thread_stacksize stacksize, threads::thread_schedule_hint schedulehint = {}, Policy l = parallel::execution::detail::get_default_policy<Policy>::call()) noexcept#
inline explicit constexpr parallel_policy_executor(threads::thread_schedule_hint schedulehint, Policy l = parallel::execution::detail::get_default_policy<Policy>::call()) noexcept#
inline explicit constexpr parallel_policy_executor(Policy l) noexcept#
constexpr parallel_policy_executor() noexcept = default#
inline explicit constexpr parallel_policy_executor(threads::thread_pool_base *pool, Policy l) noexcept#
inline explicit constexpr parallel_policy_executor(threads::thread_pool_base *pool, threads::thread_priority priority = threads::thread_priority::default_, threads::thread_stacksize stacksize = threads::thread_stacksize::default_, threads::thread_schedule_hint schedulehint = {}, Policy l = parallel::execution::detail::get_default_policy<Policy>::call()) noexcept#
parallel_policy_executor(parallel_policy_executor const&) = default#
parallel_policy_executor(parallel_policy_executor&&) = default#
parallel_policy_executor &operator=(parallel_policy_executor const&) = default#
parallel_policy_executor &operator=(parallel_policy_executor&&) = default#
~parallel_policy_executor() = default#

Private Functions

template<typename Executor_> inline  requires (std::is_convertible_v< Executor_, parallel_policy_executor >) friend auto tag_invoke(hpx
template<typename Parameters> inline  requires (hpx::traits::is_executor_parameters_v< Parameters >) friend const expr std
template<typename Executor_> inline  requires (std::is_convertible_v< Executor_, parallel_policy_executor >) friend const expr auto tag_invoke(hpx
template<typename F, typename ...Ts>
inline decltype(auto) friend tag_invoke(hpx::parallel::execution::sync_execute_t, parallel_policy_executor const &exec, F &&f, Ts&&... ts)#
template<typename F, typename ...Ts>
inline decltype(auto) friend tag_invoke(hpx::parallel::execution::async_execute_t, parallel_policy_executor const &exec, F &&f, Ts&&... ts)#
template<typename F, typename Future, typename ...Ts>
inline decltype(auto) friend tag_invoke(hpx::parallel::execution::then_execute_t, parallel_policy_executor const &exec, F &&f, Future &&predecessor, Ts&&... ts)#
template<typename F, typename S, typename Future, typename... Ts> inline  requires (!std::is_integral_v< S >) friend decltype(auto) tag_invoke(hpx
template<typename F, typename S, typename... Ts> inline  requires (!std::is_integral_v< S >) friend decltype(auto) tag_invoke(hpx
template<typename F, typename S, typename... Ts> inline  requires (!std::is_integral_v< S >) friend decltype(auto) tag_invoke(hpx
inline decltype(auto) friend tag_invoke(hpx::execution::experimental::to_non_par_t, parallel_policy_executor const &exec)#

Friends

inline friend auto tag_invoke(hpx::execution::experimental::get_cores_mask_t, parallel_policy_executor const &exec)#
template<typename F, typename ...Ts>
inline friend void tag_invoke(hpx::parallel::execution::post_t, parallel_policy_executor const &exec, F &&f, Ts&&... ts)#
template<typename Policy>
struct parallel_policy_executor<Policy, true> : public hpx::execution::parallel_policy_executor_base<Policy>#

Public Types

using base_type = parallel_policy_executor_base<Policy>#

Public Functions

inline explicit constexpr parallel_policy_executor(threads::thread_priority priority, threads::thread_stacksize stacksize = threads::thread_stacksize::default_, threads::thread_schedule_hint schedulehint = {}, Policy l = parallel::execution::detail::get_default_policy<Policy>::call(), std::size_t const hierarchical_threshold = hierarchical_threshold_default_) noexcept#
inline explicit constexpr parallel_policy_executor(threads::thread_stacksize stacksize, threads::thread_schedule_hint schedulehint = {}, Policy l = parallel::execution::detail::get_default_policy<Policy>::call()) noexcept#
inline explicit constexpr parallel_policy_executor(threads::thread_schedule_hint schedulehint, Policy l = parallel::execution::detail::get_default_policy<Policy>::call()) noexcept#
inline explicit constexpr parallel_policy_executor(Policy l) noexcept#
constexpr parallel_policy_executor() noexcept = default#
inline explicit constexpr parallel_policy_executor(threads::thread_pool_base *pool, Policy l, std::size_t const hierarchical_threshold = hierarchical_threshold_default_) noexcept#
inline explicit constexpr parallel_policy_executor(threads::thread_pool_base *pool, threads::thread_priority priority = threads::thread_priority::default_, threads::thread_stacksize stacksize = threads::thread_stacksize::default_, threads::thread_schedule_hint schedulehint = {}, Policy l = parallel::execution::detail::get_default_policy<Policy>::call(), std::size_t const hierarchical_threshold = hierarchical_threshold_default_) noexcept#
inline constexpr void set_hierarchical_threshold(std::size_t const threshold) noexcept#
parallel_policy_executor(parallel_policy_executor const&) = default#
parallel_policy_executor(parallel_policy_executor&&) = default#
parallel_policy_executor &operator=(parallel_policy_executor const&) = default#
parallel_policy_executor &operator=(parallel_policy_executor&&) = default#
~parallel_policy_executor() = default#

Private Functions

template<typename Executor_> inline  requires (std::is_convertible_v< Executor_, parallel_policy_executor >) friend auto tag_invoke(hpx
template<typename Parameters> inline  requires (hpx::traits::is_executor_parameters_v< Parameters >) friend const expr std
template<typename Executor_> inline  requires (std::is_convertible_v< Executor_, parallel_policy_executor >) friend const expr auto tag_invoke(hpx
template<typename F, typename ...Ts>
inline decltype(auto) friend tag_invoke(hpx::parallel::execution::sync_execute_t, parallel_policy_executor const &exec, F &&f, Ts&&... ts)#
template<typename F, typename ...Ts>
inline decltype(auto) friend tag_invoke(hpx::parallel::execution::async_execute_t, parallel_policy_executor const &exec, F &&f, Ts&&... ts)#
template<typename F, typename Future, typename ...Ts>
inline decltype(auto) friend tag_invoke(hpx::parallel::execution::then_execute_t, parallel_policy_executor const &exec, F &&f, Future &&predecessor, Ts&&... ts)#
template<typename F, typename S, typename Future, typename... Ts> inline  requires (!std::is_integral_v< S >) friend decltype(auto) tag_invoke(hpx
template<typename F, typename S, typename... Ts> inline  requires (!std::is_integral_v< S >) friend decltype(auto) tag_invoke(hpx
template<typename F, typename S, typename... Ts> inline  requires (!std::is_integral_v< S >) friend decltype(auto) tag_invoke(hpx
inline decltype(auto) friend tag_invoke(hpx::execution::experimental::to_non_par_t, parallel_policy_executor const &exec)#

Friends

inline friend auto tag_invoke(hpx::execution::experimental::get_cores_mask_t, parallel_policy_executor const &exec)#
template<typename F, typename ...Ts>
inline friend void tag_invoke(hpx::parallel::execution::post_t, parallel_policy_executor const &exec, F &&f, Ts&&... ts)#
template<typename Policy>
struct parallel_policy_executor_base#
#include <parallel_executor.hpp>

A parallel_executor creates groups of parallel execution agents which execute in threads implicitly created by the executor. This executor prefers continuing with the creating thread first before executing newly created threads.

This executor conforms to the concepts of a TwoWayExecutor, and a BulkTwoWayExecutor

Subclassed by hpx::execution::parallel_policy_executor< Policy, HierarchicalSpawning >, hpx::execution::parallel_policy_executor< Policy, true >, hpx::execution::parallel_policy_executor< Policy >

Public Types

using execution_category = std::conditional_t<std::is_same_v<Policy, launch::sync_policy>, sequenced_execution_tag, parallel_execution_tag>#

Associate the parallel_execution_tag executor tag type as a default with this executor, except if the given launch policy is sync.

using executor_parameters_type = experimental::default_parameters#

Associate the default_parameters executor parameters type as a default with this executor.

Public Functions

inline parallel_policy_executor_base(parallel_policy_executor_base const &rhs)#
inline parallel_policy_executor_base &operator=(parallel_policy_executor_base const &rhs)#
inline constexpr ~parallel_policy_executor_base()#
template<typename Parameters>
inline std::size_t processing_units_count(Parameters&&, hpx::chrono::steady_duration const& = hpx::chrono::null_duration, std::size_t = 0) const#

Protected Functions

inline explicit constexpr parallel_policy_executor_base(threads::thread_priority priority, threads::thread_stacksize stacksize = threads::thread_stacksize::default_, threads::thread_schedule_hint schedulehint = {}, Policy l = parallel::execution::detail::get_default_policy<Policy>::call()) noexcept#

Create a new parallel executor.

inline explicit constexpr parallel_policy_executor_base(threads::thread_stacksize stacksize, threads::thread_schedule_hint schedulehint = {}, Policy l = parallel::execution::detail::get_default_policy<Policy>::call()) noexcept#
inline explicit constexpr parallel_policy_executor_base(threads::thread_schedule_hint schedulehint, Policy l = parallel::execution::detail::get_default_policy<Policy>::call()) noexcept#
inline explicit constexpr parallel_policy_executor_base(Policy l) noexcept#
inline constexpr parallel_policy_executor_base() noexcept#
inline explicit constexpr parallel_policy_executor_base(threads::thread_pool_base *pool, Policy l) noexcept#
inline explicit constexpr parallel_policy_executor_base(threads::thread_pool_base *pool, threads::thread_priority priority = threads::thread_priority::default_, threads::thread_stacksize stacksize = threads::thread_stacksize::default_, threads::thread_schedule_hint schedulehint = {}, Policy l = parallel::execution::detail::get_default_policy<Policy>::call())#
namespace experimental
namespace parallel
namespace execution