struct scheduler_base

Declaration

struct scheduler_base { /* full declaration omitted */ };

Description

//////////////////////////////////////////////////////////////////////// The scheduler_base defines the interface to be implemented by all scheduler policies

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:55

Member Variables

protected pika::concurrency::detail::cache_line_data< std::atomic<scheduler_mode>> mode_
protected pika::threads::policies::scheduler_base:: pu_mutex_type mtx_
protected std::condition_variable cond_
protected std::vector< pika::concurrency::detail::cache_line_data< idle_backoff_data>> wait_counts_
protected std::vector<pu_mutex_type> suspend_mtxs_
protected std::vector<std::condition_variable> suspend_conds_
protected std::vector<pu_mutex_type> pu_mtxs_
protected std::vector<std::atomic<pika::state>> states_
protected const char* description_
protected pika::threads::policies:: thread_queue_init_parameters thread_queue_init_
protected threads::thread_pool_base* parent_pool_
protected std::atomic<std::int64_t> background_thread_count_
protected std::atomic<polling_function_ptr> polling_function_mpi_
protected std::atomic<polling_function_ptr> polling_function_cuda_
protected std::atomic<polling_work_count_function_ptr> polling_work_count_function_mpi_
protected std::atomic<polling_work_count_function_ptr> polling_work_count_function_cuda_

Method Overview

Methods

virtual void abort_all_suspended_threads()

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:216

void add_remove_scheduler_mode(
    pika::threads::policies::scheduler_mode
        to_add_mode,
    pika::threads::policies::scheduler_mode
        to_remove_mode)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:147

Parameters

pika::threads::policies::scheduler_mode to_add_mode
pika::threads::policies::scheduler_mode to_remove_mode

void add_scheduler_mode(
    pika::threads::policies::scheduler_mode mode)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:141

Parameters

pika::threads::policies::scheduler_mode mode

virtual bool cleanup_terminated(
    std::size_t num_thread,
    bool delete_all)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:219

Parameters

std::size_t num_thread
bool delete_all

virtual bool cleanup_terminated(bool delete_all)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:218

Parameters

bool delete_all

void clear_cuda_polling_function()

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:330

void clear_mpi_polling_function()

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:314

virtual void create_thread(
    pika::threads::thread_init_data& data,
    pika::threads::thread_id_ref_type* id,
    pika::error_code& ec)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:222

Parameters

pika::threads::thread_init_data& data
pika::threads::thread_id_ref_type* id
pika::error_code& ec

detail::polling_status custom_polling_function()
    const

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:338

void decrement_background_thread_count()

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:208

virtual void destroy_thread(
    threads::thread_data* thrd)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:238

Parameters

threads::thread_data* thrd

void do_some_work(std::size_t)

Description

This function gets called by the thread-manager whenever new work has been added, allowing the scheduler to reactivate one or more of possibly idling OS threads

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:101

Parameters

std::size_t

std::size_t domain_from_local_thread_index(
    std::size_t n)

Description

////////////////////////////////////////////////////////////////////

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:161

Parameters

std::size_t n

std::vector<std::size_t> domain_threads(
    std::size_t local_id,
    const std::vector<std::size_t>& ts,
    util::function<bool(std::size_t, std::size_t)>
        pred)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:168

Parameters

std::size_t local_id
const std::vector<std::size_t>& ts
util::function<bool(std::size_t, std::size_t)> pred

virtual bool enumerate_threads(
    const util::function<bool(thread_id_type)>& f,
    pika::threads::thread_schedule_state state =
        thread_schedule_state::unknown) const

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:211

Parameters

const util::function<bool(thread_id_type)>& f
pika::threads::thread_schedule_state state = thread_schedule_state::unknown

std::int64_t get_background_thread_count()

Description

////////////////////////////////////////////////////////////////////////

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:206

const char* get_description() const

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:91

std::pair<pika::state, pika::state>
get_minmax_state() const

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:118

virtual bool get_next_thread(
    std::size_t num_thread,
    bool running,
    threads::thread_id_ref_type& thrd,
    bool enable_stealing)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:225

Parameters

std::size_t num_thread
bool running
threads::thread_id_ref_type& thrd
bool enable_stealing

threads::thread_pool_base* get_parent_pool() const

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:69

std::size_t get_polling_work_count() const

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:358

pika::threads::policies::scheduler_base::
    pu_mutex_type&
    get_pu_mutex(std::size_t num_thread)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:153

Parameters

std::size_t num_thread

virtual std::int64_t get_queue_length(
    std::size_t num_thread =
        unsigned long(-1)) const

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:193

Parameters

std::size_t num_thread = unsigned long(-1)

pika::threads::policies::scheduler_mode
get_scheduler_mode() const

Description

////////////////////////////////////////////////////////////////////

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:122

std::ptrdiff_t get_stack_size(
    threads::thread_stacksize stacksize) const

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:258

Parameters

threads::thread_stacksize stacksize

std::atomic<pika::state>& get_state(
    std::size_t num_thread)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:110

Parameters

std::size_t num_thread

const std::atomic<pika::state>& get_state(
    std::size_t num_thread) const

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:111

Parameters

std::size_t num_thread

virtual std::int64_t get_thread_count(
    pika::threads::thread_schedule_state state =
        thread_schedule_state::unknown,
    pika::threads::thread_priority priority =
        thread_priority::default_,
    std::size_t num_thread = unsigned long(-1),
    bool reset = false) const

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:196

Parameters

pika::threads::thread_schedule_state state = thread_schedule_state::unknown
pika::threads::thread_priority priority = thread_priority::default_
std::size_t num_thread = unsigned long(-1)
bool reset = false

inline std::size_t global_to_local_thread_index(
    std::size_t n)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:81

Parameters

std::size_t n

bool has_reached_state(pika::state s) const

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:116

Parameters

pika::state s

bool has_scheduler_mode(
    pika::threads::policies::scheduler_mode mode)
    const

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:128

Parameters

pika::threads::policies::scheduler_mode mode

void idle_callback(std::size_t num_thread)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:96

Parameters

std::size_t num_thread

void increment_background_thread_count()

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:207

virtual bool is_core_idle(
    std::size_t num_thread) const

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:203

Parameters

std::size_t num_thread

bool is_state(pika::state s) const

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:117

Parameters

pika::state s

inline std::size_t local_to_global_thread_index(
    std::size_t n)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:86

Parameters

std::size_t n

static detail::polling_status
null_polling_function()

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:296

static std::size_t
null_polling_work_count_function()

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:301

std::size_t num_domains(const std::size_t workers)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:164

Parameters

const std::size_t workers

virtual void on_error(std::size_t num_thread,
                      const std::exception_ptr& e)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:246

Parameters

std::size_t num_thread
const std::exception_ptr& e

virtual void on_start_thread(
    std::size_t num_thread)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:244

Parameters

std::size_t num_thread

virtual void on_stop_thread(
    std::size_t num_thread)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:245

Parameters

std::size_t num_thread

void remove_scheduler_mode(
    pika::threads::policies::scheduler_mode mode)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:144

Parameters

pika::threads::policies::scheduler_mode mode

virtual void reset_thread_distribution()

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:256

virtual void resume(std::size_t num_thread)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:104

Parameters

std::size_t num_thread

virtual void schedule_thread(
    threads::thread_id_ref_type thrd,
    threads::thread_schedule_hint schedulehint,
    bool allow_fallback = false,
    pika::threads::thread_priority priority =
        thread_priority::normal)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:228

Parameters

threads::thread_id_ref_type thrd
threads::thread_schedule_hint schedulehint
bool allow_fallback = false
pika::threads::thread_priority priority = thread_priority::normal

virtual void schedule_thread_last(
    threads::thread_id_ref_type thrd,
    threads::thread_schedule_hint schedulehint,
    bool allow_fallback = false,
    pika::threads::thread_priority priority =
        thread_priority::normal)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:233

Parameters

threads::thread_id_ref_type thrd
threads::thread_schedule_hint schedulehint
bool allow_fallback = false
pika::threads::thread_priority priority = thread_priority::normal

scheduler_base(
    std::size_t num_threads,
    const char* description = "",
    pika::threads::policies::
        thread_queue_init_parameters
            thread_queue_init = {},
    pika::threads::policies::scheduler_mode mode =
        nothing_special)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:63

Parameters

std::size_t num_threads
const char* description = ""
pika::threads::policies:: thread_queue_init_parameters thread_queue_init = {}
pika::threads::policies::scheduler_mode mode = nothing_special

std::size_t select_active_pu(
    std::unique_lock<pu_mutex_type>& l,
    std::size_t num_thread,
    bool allow_fallback = false)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:106

Parameters

std::unique_lock<pu_mutex_type>& l
std::size_t num_thread
bool allow_fallback = false

void set_all_states(pika::state s)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:112

Parameters

pika::state s

void set_all_states_at_least(pika::state s)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:113

Parameters

pika::state s

void set_cuda_polling_functions(
    pika::threads::policies::scheduler_base::
        polling_function_ptr cuda_func,
    pika::threads::policies::scheduler_base::
        polling_work_count_function_ptr
            cuda_work_count_func)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:322

Parameters

pika::threads::policies::scheduler_base:: polling_function_ptr cuda_func
pika::threads::policies::scheduler_base:: polling_work_count_function_ptr cuda_work_count_func

void set_mpi_polling_functions(
    pika::threads::policies::scheduler_base::
        polling_function_ptr mpi_func,
    pika::threads::policies::scheduler_base::
        polling_work_count_function_ptr
            mpi_work_count_func)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:306

Parameters

pika::threads::policies::scheduler_base:: polling_function_ptr mpi_func
pika::threads::policies::scheduler_base:: polling_work_count_function_ptr mpi_work_count_func

void set_parent_pool(threads::thread_pool_base* p)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:75

Parameters

threads::thread_pool_base* p

virtual void set_scheduler_mode(
    pika::threads::policies::scheduler_mode mode)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:138

Parameters

pika::threads::policies::scheduler_mode mode

virtual void suspend(std::size_t num_thread)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:103

Parameters

std::size_t num_thread

void update_scheduler_mode(
    pika::threads::policies::scheduler_mode mode,
    bool set)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:151

Parameters

pika::threads::policies::scheduler_mode mode
bool set

virtual bool wait_or_add_new(
    std::size_t num_thread,
    bool running,
    std::int64_t& idle_loop_count,
    bool enable_stealing,
    std::size_t& added)

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:240

Parameters

std::size_t num_thread
bool running
std::int64_t& idle_loop_count
bool enable_stealing
std::size_t& added

virtual ~scheduler_base()

Declared at: libs/pika/threading_base/include/pika/threading_base/scheduler_base.hpp:67