gem5
|
Common base class for GlobalEvent and GlobalSyncEvent. More...
#include <global_event.hh>
Classes | |
class | BarrierEvent |
The base class for the local events that will synchronize threads to perform the global event. More... | |
Public Member Functions | |
BaseGlobalEvent (Priority p, Flags f) | |
virtual | ~BaseGlobalEvent () |
virtual void | process ()=0 |
virtual const char * | description () const =0 |
void | schedule (Tick when) |
bool | scheduled () const |
Tick | when () const |
void | deschedule () |
void | reschedule (Tick when) |
Protected Attributes | |
Barrier | barrier |
The barrier that all threads wait on before performing the global event. More... | |
std::vector< BarrierEvent * > | barrierEvent |
The individual local event instances (one per thread/event queue). More... | |
Static Private Attributes | |
static std::mutex | globalQMutex |
Mutex variable for providing exculsive right to schedule global events. More... | |
Additional Inherited Members | |
Public Types inherited from EventBase | |
typedef int8_t | Priority |
Static Public Attributes inherited from EventBase | |
static const Priority | Minimum_Pri = SCHAR_MIN |
Event priorities, to provide tie-breakers for events scheduled at the same cycle. More... | |
static const Priority | Debug_Enable_Pri = -101 |
If we enable tracing on a particular cycle, do that as the very first thing so we don't miss any of the events on that cycle (even if we enter the debugger). More... | |
static const Priority | Debug_Break_Pri = -100 |
Breakpoints should happen before anything else (except enabling trace output), so we don't miss any action when debugging. More... | |
static const Priority | CPU_Switch_Pri = -31 |
CPU switches schedule the new CPU's tick event for the same cycle (after unscheduling the old CPU's tick event). More... | |
static const Priority | Delayed_Writeback_Pri = -1 |
For some reason "delayed" inter-cluster writebacks are scheduled before regular writebacks (which have default priority). More... | |
static const Priority | Default_Pri = 0 |
Default is zero for historical reasons. More... | |
static const Priority | DVFS_Update_Pri = 31 |
DVFS update event leads to stats dump therefore given a lower priority to ensure all relevant states have been updated. More... | |
static const Priority | Serialize_Pri = 32 |
Serailization needs to occur before tick events also, so that a serialize/unserialize is identical to an on-line CPU switch. More... | |
static const Priority | CPU_Tick_Pri = 50 |
CPU ticks must come after other associated CPU events (such as writebacks). More... | |
static const Priority | Stat_Event_Pri = 90 |
Statistics events (dump, reset, etc.) come after everything else, but before exit. More... | |
static const Priority | Progress_Event_Pri = 95 |
Progress events come at the end. More... | |
static const Priority | Sim_Exit_Pri = 100 |
If we want to exit on this cycle, it's the very last thing we do. More... | |
static const Priority | Maximum_Pri = SCHAR_MAX |
Maximum priority. More... | |
Protected Types inherited from EventBase | |
typedef unsigned short | FlagsType |
typedef ::Flags< FlagsType > | Flags |
Static Protected Attributes inherited from EventBase | |
static const FlagsType | PublicRead = 0x003f |
static const FlagsType | PublicWrite = 0x001d |
static const FlagsType | Squashed = 0x0001 |
static const FlagsType | Scheduled = 0x0002 |
static const FlagsType | Managed = 0x0004 |
static const FlagsType | AutoDelete = Managed |
static const FlagsType | Reserved0 = 0x0008 |
This used to be AutoSerialize. More... | |
static const FlagsType | IsExitEvent = 0x0010 |
static const FlagsType | IsMainQueue = 0x0020 |
static const FlagsType | Initialized = 0x7a40 |
static const FlagsType | InitMask = 0xffc0 |
Common base class for GlobalEvent and GlobalSyncEvent.
Definition at line 62 of file global_event.hh.
Definition at line 36 of file global_event.cc.
|
virtual |
Definition at line 43 of file global_event.cc.
References barrierEvent, ArmISA::i, and numMainEventQueues.
void BaseGlobalEvent::deschedule | ( | ) |
Definition at line 84 of file global_event.cc.
References barrierEvent, curEventQueue(), ArmISA::i, mainEventQueue, numMainEventQueues, ArmISA::q, and scheduled().
Referenced by Stats::periodicStatDump(), and simulate().
|
pure virtual |
Implemented in Stats::StatEvent, GlobalSyncEvent, GlobalSimLoopExitEvent, and DebugBreakEvent.
|
pure virtual |
Implemented in DistIface::SyncEvent, GlobalSyncEvent, Stats::StatEvent, GlobalEvent, GlobalSimLoopExitEvent, and DebugBreakEvent.
void BaseGlobalEvent::reschedule | ( | Tick | when | ) |
Definition at line 97 of file global_event.cc.
References barrierEvent, globalQMutex, ArmISA::i, mainEventQueue, numMainEventQueues, and scheduled().
Referenced by simulate(), and Stats::updateEvents().
void BaseGlobalEvent::schedule | ( | Tick | when | ) |
Definition at line 53 of file global_event.cc.
References barrierEvent, globalQMutex, ArmISA::i, mainEventQueue, and numMainEventQueues.
Referenced by GlobalEvent::GlobalEvent(), GlobalSyncEvent::GlobalSyncEvent(), GlobalSimLoopExitEvent::process(), and GlobalSyncEvent::process().
|
inline |
Definition at line 128 of file global_event.hh.
References barrierEvent, ArmISA::i, and numMainEventQueues.
Referenced by deschedule(), Stats::periodicStatDump(), DistIface::readyToExit(), reschedule(), DistIface::toggleSync(), and Stats::updateEvents().
|
inline |
Definition at line 138 of file global_event.hh.
References barrierEvent, and numMainEventQueues.
Referenced by DistIface::toggleSync(), and Stats::updateEvents().
|
protected |
The barrier that all threads wait on before performing the global event.
Definition at line 112 of file global_event.hh.
Referenced by BaseGlobalEvent::BarrierEvent::globalBarrier().
|
protected |
The individual local event instances (one per thread/event queue).
Definition at line 115 of file global_event.hh.
Referenced by BaseGlobalEventTemplate< GlobalSyncEvent >::BaseGlobalEventTemplate(), deschedule(), reschedule(), schedule(), scheduled(), when(), BaseGlobalEvent::BarrierEvent::~BarrierEvent(), and ~BaseGlobalEvent().
|
staticprivate |
Mutex variable for providing exculsive right to schedule global events.
This is necessary so that a total order can be maintained amongst the global events. Without ensuring the total order, it is possible that threads execute global events in different orders, which can result in a deadlock.
Definition at line 70 of file global_event.hh.
Referenced by reschedule(), and schedule().