Realm
A distributed, event-based tasking library
Loading...
Searching...
No Matches
Realm::GenEventImpl Class Reference

#include <event_impl.h>

Inheritance diagram for Realm::GenEventImpl:
Collaboration diagram for Realm::GenEventImpl:

Classes

struct  GenEventImplAllocator
 

Public Member Functions

 GenEventImpl (void)
 
 GenEventImpl (EventTriggerNotifier *_event_triggerer, EventCommunicator *_event_comm)
 
 ~GenEventImpl (void)
 
void init (ID _me, unsigned _init_owner)
 
Event current_event (void) const
 
virtual bool has_triggered (gen_t needed_gen, bool &poisoned)
 
virtual void subscribe (gen_t subscribe_gen)
 
void handle_remote_subscription (NodeID sender, gen_t subscribe_gen, gen_t previous_subscribe_gen)
 
virtual void external_wait (gen_t needed_gen, bool &poisoned)
 
virtual bool external_timedwait (gen_t needed_gen, bool &poisoned, long long max_ns)
 
virtual bool add_waiter (gen_t needed_gen, EventWaiter *waiter)
 
virtual bool remove_waiter (gen_t needed_gen, EventWaiter *waiter)
 
bool trigger (gen_t gen_triggered, int trigger_node, bool poisoned, TimeLimit work_until)
 
void process_update (gen_t current_gen, const gen_t *new_poisoned_generations, int new_poisoned_count, TimeLimit work_until)
 
void set_trigger_op (gen_t gen, Operation *op)
 
Operationget_trigger_op (gen_t gen)
 
bool is_generation_poisoned (gen_t gen) const
 
- Public Member Functions inherited from Realm::EventImpl
 EventImpl (void)
 
virtual ~EventImpl (void)
 
Event make_event (gen_t gen) const
 

Static Public Member Functions

static GenEventImplcreate_genevent (void)
 
static GenEventImplcreate_genevent (RuntimeImpl *runtime_impl)
 
static ID make_id (const GenEventImpl &dummy, int owner, ID::IDType index)
 
static Event merge_events (span< const Event > wait_for, bool ignore_faults)
 
static Event merge_events (Event ev1, Event ev2, Event ev3=Event::NO_EVENT, Event ev4=Event::NO_EVENT, Event ev5=Event::NO_EVENT, Event ev6=Event::NO_EVENT)
 
static Event ignorefaults (Event wait_for)
 
static void trigger (Event e, bool poisoned)
 
static void trigger (Event e, bool poisoned, TimeLimit work_until)
 
- Static Public Member Functions inherited from Realm::EventImpl
static bool add_waiter (Event needed, EventWaiter *waiter)
 
static bool detect_event_chain (Event search_from, Event target, int max_depth, bool print_chain)
 

Public Attributes

atomic< gen_tgeneration = atomic<gen_t>(0)
 
atomic< gen_tgen_subscribed = atomic<gen_t>(0)
 
atomic< int > num_poisoned_generations = atomic<int>(0)
 
bool has_local_triggers = false
 
GenEventImplnext_free {nullptr}
 
EventMerger merger
 
EventTriggerNotifierevent_triggerer {nullptr}
 
std::unique_ptr< EventCommunicatorevent_comm {nullptr}
 
Mutex mutex
 
Operationcurrent_trigger_op = nullptr
 
EventWaiter::EventWaiterList current_local_waiters
 
std::map< gen_t, EventWaiter::EventWaiterListfuture_local_waiters
 
bool has_external_waiters = false
 
KernelMutex external_waiter_mutex
 
KernelMutex::CondVar external_waiter_condvar
 
NodeSet remote_waiters
 
gen_tpoisoned_generations = 0
 
std::map< gen_t, bool > local_triggers
 
bool free_list_insertion_delayed = false
 
- Public Attributes inherited from Realm::EventImpl
ID me
 
ProcessorImplowning_processor
 
NodeID owner
 

Static Public Attributes

static const ID::ID_Types ID_TYPE = ID::ID_EVENT
 
static const int POISONED_GENERATION_LIMIT = 16
 

Friends

class EventMerger
 

Additional Inherited Members

- Public Types inherited from Realm::EventImpl
typedef unsigned gen_t
 

Constructor & Destructor Documentation

◆ GenEventImpl() [1/2]

Realm::GenEventImpl::GenEventImpl ( void  )

◆ GenEventImpl() [2/2]

Realm::GenEventImpl::GenEventImpl ( EventTriggerNotifier _event_triggerer,
EventCommunicator _event_comm 
)

◆ ~GenEventImpl()

Realm::GenEventImpl::~GenEventImpl ( void  )

Member Function Documentation

◆ add_waiter()

virtual bool Realm::GenEventImpl::add_waiter ( gen_t  needed_gen,
EventWaiter waiter 
)
virtual

Implements Realm::EventImpl.

◆ create_genevent() [1/2]

static GenEventImpl * Realm::GenEventImpl::create_genevent ( RuntimeImpl runtime_impl)
static

◆ create_genevent() [2/2]

static GenEventImpl * Realm::GenEventImpl::create_genevent ( void  )
static

◆ current_event()

Event Realm::GenEventImpl::current_event ( void  ) const

◆ external_timedwait()

virtual bool Realm::GenEventImpl::external_timedwait ( gen_t  needed_gen,
bool &  poisoned,
long long  max_ns 
)
virtual

Implements Realm::EventImpl.

◆ external_wait()

virtual void Realm::GenEventImpl::external_wait ( gen_t  needed_gen,
bool &  poisoned 
)
virtual

Implements Realm::EventImpl.

◆ get_trigger_op()

Operation * Realm::GenEventImpl::get_trigger_op ( gen_t  gen)

◆ handle_remote_subscription()

void Realm::GenEventImpl::handle_remote_subscription ( NodeID  sender,
gen_t  subscribe_gen,
gen_t  previous_subscribe_gen 
)

◆ has_triggered()

virtual bool Realm::GenEventImpl::has_triggered ( gen_t  needed_gen,
bool &  poisoned 
)
virtual

Implements Realm::EventImpl.

◆ ignorefaults()

static Event Realm::GenEventImpl::ignorefaults ( Event  wait_for)
static

◆ init()

void Realm::GenEventImpl::init ( ID  _me,
unsigned  _init_owner 
)

◆ is_generation_poisoned()

bool Realm::GenEventImpl::is_generation_poisoned ( gen_t  gen) const

◆ make_id()

static ID Realm::GenEventImpl::make_id ( const GenEventImpl dummy,
int  owner,
ID::IDType  index 
)
inlinestatic

◆ merge_events() [1/2]

static Event Realm::GenEventImpl::merge_events ( Event  ev1,
Event  ev2,
Event  ev3 = Event::NO_EVENT,
Event  ev4 = Event::NO_EVENT,
Event  ev5 = Event::NO_EVENT,
Event  ev6 = Event::NO_EVENT 
)
static

◆ merge_events() [2/2]

static Event Realm::GenEventImpl::merge_events ( span< const Event wait_for,
bool  ignore_faults 
)
static

◆ process_update()

void Realm::GenEventImpl::process_update ( gen_t  current_gen,
const gen_t new_poisoned_generations,
int  new_poisoned_count,
TimeLimit  work_until 
)

◆ remove_waiter()

virtual bool Realm::GenEventImpl::remove_waiter ( gen_t  needed_gen,
EventWaiter waiter 
)
virtual

Implements Realm::EventImpl.

◆ set_trigger_op()

void Realm::GenEventImpl::set_trigger_op ( gen_t  gen,
Operation op 
)

◆ subscribe()

virtual void Realm::GenEventImpl::subscribe ( gen_t  subscribe_gen)
virtual

Implements Realm::EventImpl.

◆ trigger() [1/3]

static void Realm::GenEventImpl::trigger ( Event  e,
bool  poisoned 
)
static

◆ trigger() [2/3]

static void Realm::GenEventImpl::trigger ( Event  e,
bool  poisoned,
TimeLimit  work_until 
)
static

◆ trigger() [3/3]

bool Realm::GenEventImpl::trigger ( gen_t  gen_triggered,
int  trigger_node,
bool  poisoned,
TimeLimit  work_until 
)

Friends And Related Symbol Documentation

◆ EventMerger

friend class EventMerger
friend

Member Data Documentation

◆ current_local_waiters

EventWaiter::EventWaiterList Realm::GenEventImpl::current_local_waiters

◆ current_trigger_op

Operation* Realm::GenEventImpl::current_trigger_op = nullptr

◆ event_comm

std::unique_ptr<EventCommunicator> Realm::GenEventImpl::event_comm {nullptr}

◆ event_triggerer

EventTriggerNotifier* Realm::GenEventImpl::event_triggerer {nullptr}

◆ external_waiter_condvar

KernelMutex::CondVar Realm::GenEventImpl::external_waiter_condvar

◆ external_waiter_mutex

KernelMutex Realm::GenEventImpl::external_waiter_mutex

◆ free_list_insertion_delayed

bool Realm::GenEventImpl::free_list_insertion_delayed = false

◆ future_local_waiters

std::map<gen_t, EventWaiter::EventWaiterList> Realm::GenEventImpl::future_local_waiters

◆ gen_subscribed

atomic<gen_t> Realm::GenEventImpl::gen_subscribed = atomic<gen_t>(0)

◆ generation

atomic<gen_t> Realm::GenEventImpl::generation = atomic<gen_t>(0)

◆ has_external_waiters

bool Realm::GenEventImpl::has_external_waiters = false

◆ has_local_triggers

bool Realm::GenEventImpl::has_local_triggers = false

◆ ID_TYPE

const ID::ID_Types Realm::GenEventImpl::ID_TYPE = ID::ID_EVENT
static

◆ local_triggers

std::map<gen_t, bool> Realm::GenEventImpl::local_triggers

◆ merger

EventMerger Realm::GenEventImpl::merger

◆ mutex

Mutex Realm::GenEventImpl::mutex

◆ next_free

GenEventImpl* Realm::GenEventImpl::next_free {nullptr}

◆ num_poisoned_generations

atomic<int> Realm::GenEventImpl::num_poisoned_generations = atomic<int>(0)

◆ POISONED_GENERATION_LIMIT

const int Realm::GenEventImpl::POISONED_GENERATION_LIMIT = 16
static

◆ poisoned_generations

gen_t* Realm::GenEventImpl::poisoned_generations = 0

◆ remote_waiters

NodeSet Realm::GenEventImpl::remote_waiters

The documentation for this class was generated from the following file: