gem5  [DEVELOP-FOR-23.0]
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
base.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011-2013, 2017, 2020 ARM Limited
3  * All rights reserved
4  *
5  * The license below extends only to copyright in the software and shall
6  * not be construed as granting a license to any other intellectual
7  * property including but not limited to intellectual property relating
8  * to a hardware implementation of the functionality of the software
9  * licensed hereunder. You may use the software subject to the license
10  * terms below provided that you ensure that this notice is replicated
11  * unmodified and in its entirety in all distributions of the software,
12  * modified or unmodified, in source code or in binary form.
13  *
14  * Copyright (c) 2002-2005 The Regents of The University of Michigan
15  * Copyright (c) 2011 Regents of the University of California
16  * All rights reserved.
17  *
18  * Redistribution and use in source and binary forms, with or without
19  * modification, are permitted provided that the following conditions are
20  * met: redistributions of source code must retain the above copyright
21  * notice, this list of conditions and the following disclaimer;
22  * redistributions in binary form must reproduce the above copyright
23  * notice, this list of conditions and the following disclaimer in the
24  * documentation and/or other materials provided with the distribution;
25  * neither the name of the copyright holders nor the names of its
26  * contributors may be used to endorse or promote products derived from
27  * this software without specific prior written permission.
28  *
29  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
30  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
31  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
32  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
33  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
34  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
35  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
36  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
37  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
38  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
39  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40  */
41 
42 #ifndef __CPU_BASE_HH__
43 #define __CPU_BASE_HH__
44 
45 #include <memory>
46 #include <vector>
47 
49 #include "base/statistics.hh"
50 #include "debug/Mwait.hh"
51 #include "mem/htm.hh"
52 #include "mem/port_proxy.hh"
53 #include "sim/clocked_object.hh"
54 #include "sim/eventq.hh"
55 #include "sim/full_system.hh"
56 #include "sim/insttracer.hh"
57 #include "sim/probe/pmu.hh"
58 #include "sim/probe/probe.hh"
59 #include "sim/signal.hh"
60 #include "sim/system.hh"
61 
62 namespace gem5
63 {
64 
65 class BaseCPU;
66 struct BaseCPUParams;
67 class CheckerCPU;
68 class ThreadContext;
69 
71 {
73  bool doMonitor(PacketPtr pkt);
74 
75  bool armed;
78  uint64_t val;
79  bool waiting; // 0=normal, 1=mwaiting
80  bool gotWakeup;
81 };
82 
83 class CPUProgressEvent : public Event
84 {
85  protected:
90 
91  public:
92  CPUProgressEvent(BaseCPU *_cpu, Tick ival = 0);
93 
94  void process();
95 
96  void interval(Tick ival) { _interval = ival; }
97  Tick interval() { return _interval; }
98 
99  void repeatEvent(bool repeat) { _repeatEvent = repeat; }
100 
101  virtual const char *description() const;
102 };
103 
104 class BaseCPU : public ClockedObject
105 {
106  protected:
107 
111 
112  // every cpu has an id, put it in the base cpu
113  // Set at initialization, only time a cpuId might change is during a
114  // takeover (which should be done from within the BaseCPU anyway,
115  // therefore no setCpuId() method is provided
116  int _cpuId;
117 
123  const uint32_t _socketId;
124 
127 
130 
136  uint32_t _taskId;
137 
140  uint32_t _pid;
141 
144 
146  const unsigned int _cacheLineSize;
147 
150  {
152 
155 
158  };
159 
164  static std::unique_ptr<GlobalStats> globalStats;
165 
167 
168  public:
169 
176  virtual Port &getDataPort() = 0;
177 
184  virtual Port &getInstPort() = 0;
185 
187  int cpuId() const { return _cpuId; }
188 
190  uint32_t socketId() const { return _socketId; }
191 
196 
207  Port &getPort(const std::string &if_name,
208  PortID idx=InvalidPortID) override;
209 
211  uint32_t taskId() const { return _taskId; }
213  void taskId(uint32_t id) { _taskId = id; }
214 
215  uint32_t getPid() const { return _pid; }
216  void setPid(uint32_t pid) { _pid = pid; }
217 
220  // @todo remove me after debugging with legion done
221  Tick instCount() { return instCnt; }
222 
223  protected:
225 
226  public:
229  {
230  if (interrupts.empty())
231  return NULL;
232 
233  assert(interrupts.size() > tid);
234  return interrupts[tid];
235  }
236 
237  virtual void wakeup(ThreadID tid) = 0;
238 
239  void postInterrupt(ThreadID tid, int int_num, int index);
240 
241  void
242  clearInterrupt(ThreadID tid, int int_num, int index)
243  {
244  interrupts[tid]->clear(int_num, index);
245  }
246 
247  void
249  {
250  interrupts[tid]->clearAll();
251  }
252 
253  bool
255  {
256  return FullSystem && interrupts[tid]->checkInterrupts();
257  }
258 
259  protected:
261 
263 
264  public:
265 
266 
269  static const uint32_t invldPid = std::numeric_limits<uint32_t>::max();
270 
273 
275  virtual void activateContext(ThreadID thread_num);
276 
279  virtual void suspendContext(ThreadID thread_num);
280 
282  virtual void haltContext(ThreadID thread_num);
283 
285  int findContext(ThreadContext *tc);
286 
288  virtual ThreadContext *getContext(int tn) { return threadContexts[tn]; }
289 
291  unsigned
293  {
294  return static_cast<unsigned>(threadContexts.size());
295  }
296 
298  ThreadID
300  {
301  return static_cast<ThreadID>(cid - threadContexts[0]->contextId());
302  }
303 
304  public:
305  PARAMS(BaseCPU);
306  BaseCPU(const Params &params, bool is_checker = false);
307  virtual ~BaseCPU();
308 
309  void init() override;
310  void startup() override;
311  void regStats() override;
312 
313  void regProbePoints() override;
314 
315  void registerThreadContexts();
316 
317  // Functions to deschedule and reschedule the events to enter the
318  // power gating sleep before and after checkpoiting respectively.
321 
329  virtual void switchOut();
330 
342  virtual void takeOverFrom(BaseCPU *cpu);
343 
355  virtual void setReset(bool state);
356 
366  void flushTLBs();
367 
373  bool switchedOut() const { return _switchedOut; }
374 
384  virtual void verifyMemoryMode() const { };
385 
391 
393 
397  inline unsigned int cacheLineSize() const { return _cacheLineSize; }
398 
409  void serialize(CheckpointOut &cp) const override;
410 
421  void unserialize(CheckpointIn &cp) override;
422 
429  virtual void serializeThread(CheckpointOut &cp, ThreadID tid) const {};
430 
437  virtual void unserializeThread(CheckpointIn &cp, ThreadID tid) {};
438 
439  virtual Counter totalInsts() const = 0;
440 
441  virtual Counter totalOps() const = 0;
442 
456  void scheduleInstStop(ThreadID tid, Counter insts, std::string cause);
457 
468 
477  void scheduleInstStopAnyThread(Counter max_insts);
478 
486  uint64_t getCurrentInstCount(ThreadID tid);
487 
488  public:
501  virtual void probeInstCommit(const StaticInstPtr &inst, Addr pc);
502 
503  protected:
511  probing::PMUUPtr pmuProbePoint(const char *name);
512 
523 
528 
531 
534 
537 
549  enum CPUState
550  {
554  };
555 
558 
560  inline void
562  {
563  uint32_t delta = curCycle() - previousCycle;
564 
565  if (previousState == CPU_STATE_ON) {
566  ppActiveCycles->notify(delta);
567  }
568 
569  switch (state) {
570  case CPU_STATE_WAKEUP:
571  ppSleeping->notify(false);
572  break;
573  case CPU_STATE_SLEEP:
574  ppSleeping->notify(true);
575  break;
576  default:
577  break;
578  }
579 
580  ppAllCycles->notify(delta);
581 
584  }
585 
586  // Function tracing
587  private:
589  std::ostream *functionTraceStream;
593  void enableFunctionTrace();
595 
596  private:
598 
599  public:
600  void
602  {
605  }
606 
607  static int numSimulatedCPUs() { return cpuList.size(); }
608  static Counter
610  {
611  Counter total = 0;
612 
613  int size = cpuList.size();
614  for (int i = 0; i < size; ++i)
615  total += cpuList[i]->totalInsts();
616 
617  return total;
618  }
619 
620  static Counter
622  {
623  Counter total = 0;
624 
625  int size = cpuList.size();
626  for (int i = 0; i < size; ++i)
627  total += cpuList[i]->totalOps();
628 
629  return total;
630  }
631 
632  public:
634  {
636  // Number of CPU insts and ops committed at CPU core level
639  // Number of CPU cycles simulated
641  /* CPI/IPC for total cycle counts and macro insts */
646  } baseStats;
647 
648  private:
650 
651  public:
652  void armMonitor(ThreadID tid, Addr address);
653  bool mwait(ThreadID tid, PacketPtr pkt);
654  void mwaitAtomic(ThreadID tid, ThreadContext *tc, BaseMMU *mmu);
657  {
658  assert(tid < numThreads);
659  return &addressMonitor[tid];
660  }
661 
663 
672  virtual void
673  htmSendAbortSignal(ThreadID tid, uint64_t htm_uid,
674  HtmFailureFaultCause cause)
675  {
676  panic("htmSendAbortSignal not implemented");
677  }
678 
679  // Enables CPU to enter power gating on a configurable cycle count
680  protected:
681  void enterPwrGating();
682 
684  const bool powerGatingOnIdle;
686 
687 
688  public:
690  {
691  FetchCPUStats(statistics::Group *parent, int thread_id);
692 
693  /* Total number of instructions fetched */
695 
696  /* Total number of operations fetched */
698 
699  /* Number of instruction fetched per cycle. */
701 
702  /* Total number of branches fetched */
704 
705  /* Number of branch fetches per cycle. */
707 
708  /* Number of cycles stalled due to an icache miss */
710 
711  /* Number of times fetch was asked to suspend by Execute */
713 
714  };
715 
717  {
718  ExecuteCPUStats(statistics::Group *parent, int thread_id);
719 
720  /* Stat for total number of executed instructions */
722  /* Number of executed nops */
724  /* Number of executed branches */
726  /* Stat for total number of executed load instructions */
728  /* Number of executed store instructions */
730  /* Number of instructions executed per cycle */
732 
733  /* Number of cycles stalled for D-cache responses */
735 
736  /* Number of condition code register file accesses */
739 
740  /* number of float alu accesses */
742 
743  /* Number of float register file accesses */
746 
747  /* Number of integer alu accesses */
749 
750  /* Number of integer register file accesses */
753 
754  /* number of simulated memory references */
756 
757  /* Number of misc register file accesses */
760 
761  /* Number of vector alu accesses */
763 
764  /* Number of predicate register file accesses */
767 
768  /* Number of vector register file accesses */
771 
772  /* Number of ops discarded before committing */
774  };
775 
777  {
778  CommitCPUStats(statistics::Group *parent, int thread_id);
779 
780  /* Number of simulated instructions committed */
783 
784  /* Number of instructions committed that are not NOP or prefetches */
787 
788  /* CPI/IPC for total cycle counts and macro insts */
791 
792  /* Number of committed memory references. */
794 
795  /* Number of float instructions */
797 
798  /* Number of int instructions */
800 
801  /* number of load instructions */
803 
804  /* Number of store instructions */
806 
807  /* Number of vector instructions */
809 
810  /* Number of instructions committed by type (OpClass) */
812 
813  /* number of control instructions committed by control inst type */
815  void updateComCtrlStats(const StaticInstPtr staticInst);
816 
817  };
818 
822 };
823 
824 } // namespace gem5
825 
826 #endif // __CPU_BASE_HH__
gem5::BaseCPU::FetchCPUStats::numBranches
statistics::Scalar numBranches
Definition: base.hh:703
gem5::statistics::Scalar
This is a simple scalar statistic, like a counter.
Definition: statistics.hh:1929
gem5::BaseCPU::BaseCPUStats::cpi
statistics::Formula cpi
Definition: base.hh:642
gem5::CPUProgressEvent::CPUProgressEvent
CPUProgressEvent(BaseCPU *_cpu, Tick ival=0)
Definition: base.cc:88
gem5::BaseCPU::CommitCPUStats::numInsts
statistics::Scalar numInsts
Definition: base.hh:781
gem5::BaseCPU::CommitCPUStats::numInstsNotNOP
statistics::Scalar numInstsNotNOP
Definition: base.hh:785
gem5::PortID
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
Definition: types.hh:245
gem5::BaseCPU::ExecuteCPUStats::instRate
statistics::Formula instRate
Definition: base.hh:731
gem5::BaseCPU::ExecuteCPUStats::numVecRegReads
statistics::Scalar numVecRegReads
Definition: base.hh:769
gem5::CPUProgressEvent::lastNumInst
Counter lastNumInst
Definition: base.hh:87
gem5::BaseCPU::currentFunctionStart
Addr currentFunctionStart
Definition: base.hh:590
gem5::BaseCPU::armMonitor
void armMonitor(ThreadID tid, Addr address)
Definition: base.cc:242
gem5::BaseCPU::ExecuteCPUStats::dcacheStallCycles
statistics::Scalar dcacheStallCycles
Definition: base.hh:734
gem5::BaseCPU::functionTraceStream
std::ostream * functionTraceStream
Definition: base.hh:589
gem5::ProbePointArg::notify
void notify(const Arg &arg)
called at the ProbePoint call site, passes arg to each listener.
Definition: probe.hh:312
gem5::BaseCPU::FetchCPUStats::numInsts
statistics::Scalar numInsts
Definition: base.hh:694
gem5::BaseCPU::switchedOut
bool switchedOut() const
Determine if the CPU is switched out.
Definition: base.hh:373
gem5::BaseCPU::interrupts
std::vector< BaseInterrupts * > interrupts
Definition: base.hh:224
gem5::BaseCPU::BaseCPUStats::numWorkItemsCompleted
statistics::Scalar numWorkItemsCompleted
Definition: base.hh:645
gem5::BaseCPU::getInstPort
virtual Port & getInstPort()=0
Purely virtual method that returns a reference to the instruction port.
gem5::BaseCPU::scheduleInstStop
void scheduleInstStop(ThreadID tid, Counter insts, std::string cause)
Schedule an event that exits the simulation loops after a predefined number of instructions.
Definition: base.cc:742
gem5::BaseCPU::ExecuteCPUStats::numCCRegWrites
statistics::Scalar numCCRegWrites
Definition: base.hh:738
gem5::BaseCPU::mwaitAtomic
void mwaitAtomic(ThreadID tid, ThreadContext *tc, BaseMMU *mmu)
Definition: base.cc:277
system.hh
gem5::BaseCPU::ppSleeping
ProbePointArg< bool > * ppSleeping
ProbePoint that signals transitions of threadContexts sets.
Definition: base.hh:546
gem5::BaseCPU::htmSendAbortSignal
virtual void htmSendAbortSignal(ThreadID tid, uint64_t htm_uid, HtmFailureFaultCause cause)
This function is used to instruct the memory subsystem that a transaction should be aborted and the s...
Definition: base.hh:673
gem5::BaseCPU::ExecuteCPUStats::numFpRegWrites
statistics::Scalar numFpRegWrites
Definition: base.hh:745
gem5::Clocked::curCycle
Cycles curCycle() const
Determine the current cycle, corresponding to a tick aligned to a clock edge.
Definition: clocked_object.hh:195
gem5::BaseCPU::startup
void startup() override
startup() is the final initialization call before simulation.
Definition: base.cc:349
gem5::HtmFailureFaultCause
HtmFailureFaultCause
Definition: htm.hh:47
gem5::BaseCPU::BaseCPUStats::BaseCPUStats
BaseCPUStats(statistics::Group *parent)
Definition: base.cc:408
gem5::BaseCPU::enableFunctionTrace
void enableFunctionTrace()
Definition: base.cc:221
gem5::BaseCPU::ExecuteCPUStats::numMemRefs
statistics::Scalar numMemRefs
Definition: base.hh:755
gem5::BaseCPU::unserializeThread
virtual void unserializeThread(CheckpointIn &cp, ThreadID tid)
Unserialize one thread.
Definition: base.hh:437
gem5::CPUProgressEvent::process
void process()
Definition: base.cc:97
gem5::BaseCPU::getInterruptController
BaseInterrupts * getInterruptController(ThreadID tid)
Definition: base.hh:228
gem5::BaseCPU::ExecuteCPUStats
Definition: base.hh:716
gem5::BaseCPU::numContexts
unsigned numContexts()
Get the number of thread contexts available.
Definition: base.hh:292
gem5::MipsISA::index
Bitfield< 30, 0 > index
Definition: pra_constants.hh:47
gem5::BaseCPU::ExecuteCPUStats::numFpRegReads
statistics::Scalar numFpRegReads
Definition: base.hh:744
gem5::BaseCPU::GlobalStats::hostOpRate
statistics::Formula hostOpRate
Definition: base.hh:157
insttracer.hh
gem5::BaseCPU::unserialize
void unserialize(CheckpointIn &cp) override
Reconstruct the state of this object from a checkpoint.
Definition: base.cc:725
gem5::BaseCPU::ExecuteCPUStats::numStoreInsts
statistics::Formula numStoreInsts
Definition: base.hh:729
gem5::BaseCPU::ExecuteCPUStats::numMiscRegReads
statistics::Scalar numMiscRegReads
Definition: base.hh:758
gem5::BaseCPU::ppRetiredInsts
probing::PMUUPtr ppRetiredInsts
Instruction commit probe point.
Definition: base.hh:521
gem5::BaseInterrupts
Definition: interrupts.hh:41
gem5::BaseCPU::pmuProbePoint
probing::PMUUPtr pmuProbePoint(const char *name)
Helper method to instantiate probe points belonging to this object.
Definition: base.cc:365
gem5::BaseCPU::cacheLineSize
unsigned int cacheLineSize() const
Get the cache line size of the system.
Definition: base.hh:397
gem5::CheckpointIn
Definition: serialize.hh:68
gem5::AddressMonitor::AddressMonitor
AddressMonitor()
Definition: base.cc:756
gem5::AddressMonitor::doMonitor
bool doMonitor(PacketPtr pkt)
Definition: base.cc:764
gem5::BaseCPU::updateCycleCounters
void updateCycleCounters(CPUState state)
base method keeping track of cycle progression
Definition: base.hh:561
gem5::BaseCPU::GlobalStats
Global CPU statistics that are merged into the Root object.
Definition: base.hh:149
gem5::BaseCPU::BaseCPU
BaseCPU(const Params &params, bool is_checker=false)
Definition: base.cc:129
gem5::CPUProgressEvent::interval
Tick interval()
Definition: base.hh:97
gem5::trace::InstTracer
Definition: insttracer.hh:289
htm.hh
gem5::BaseCPU::CommitCPUStats::cpi
statistics::Formula cpi
Definition: base.hh:789
gem5::BaseCPU::init
void init() override
init() is called after all C++ SimObjects have been created and all ports are connected.
Definition: base.cc:310
gem5::BaseCPU::ExecuteCPUStats::numIntAluAccesses
statistics::Scalar numIntAluAccesses
Definition: base.hh:748
gem5::BaseCPU::invldPid
static const uint32_t invldPid
Invalid or unknown Pid.
Definition: base.hh:269
gem5::BaseCPU::FetchCPUStats
Definition: base.hh:689
gem5::BaseCPU::system
System * system
Definition: base.hh:392
gem5::BaseCPU::ExecuteCPUStats::ExecuteCPUStats
ExecuteCPUStats(statistics::Group *parent, int thread_id)
Definition: base.cc:901
gem5::statistics::Vector
A vector of scalar stats.
Definition: statistics.hh:2005
gem5::BaseCPU::enterPwrGating
void enterPwrGating()
Definition: base.cc:582
gem5::AddressMonitor::vAddr
Addr vAddr
Definition: base.hh:76
gem5::BaseCPU::cpuList
static std::vector< BaseCPU * > cpuList
Static global cpu list.
Definition: base.hh:597
gem5::statistics::Formula
A formula for statistics that is calculated when printed.
Definition: statistics.hh:2538
gem5::BaseCPU::numSimulatedOps
static Counter numSimulatedOps()
Definition: base.hh:621
std::vector
STL vector class.
Definition: stl.hh:37
gem5::BaseCPU::commitStats
std::vector< std::unique_ptr< CommitCPUStats > > commitStats
Definition: base.hh:821
gem5::BaseCPU::FetchCPUStats::numFetchSuspends
statistics::Scalar numFetchSuspends
Definition: base.hh:712
gem5::BaseCPU::CommitCPUStats::committedInstType
statistics::Vector committedInstType
Definition: base.hh:811
gem5::BaseCPU::previousCycle
Cycles previousCycle
Definition: base.hh:556
gem5::BaseCPU::getPid
uint32_t getPid() const
Definition: base.hh:215
gem5::BaseCPU::instCount
Tick instCount()
Definition: base.hh:221
gem5::InvalidPortID
const PortID InvalidPortID
Definition: types.hh:246
gem5::ArmISA::i
Bitfield< 7 > i
Definition: misc_types.hh:67
gem5::BaseCPU::socketId
uint32_t socketId() const
Reads this CPU's Socket ID.
Definition: base.hh:190
gem5::BaseCPU::schedulePowerGatingEvent
void schedulePowerGatingEvent()
Definition: base.cc:502
gem5::BaseCPU::CommitCPUStats::numFpInsts
statistics::Scalar numFpInsts
Definition: base.hh:796
gem5::BaseCPU::modelResetPort
SignalSinkPort< bool > modelResetPort
Definition: base.hh:166
gem5::BaseCPU::setPid
void setPid(uint32_t pid)
Definition: base.hh:216
gem5::BaseCPU::_taskId
uint32_t _taskId
An intrenal representation of a task identifier within gem5.
Definition: base.hh:136
gem5::BaseCPU::BaseCPUStats::numOps
statistics::Scalar numOps
Definition: base.hh:638
gem5::BaseCPU::totalInsts
virtual Counter totalInsts() const =0
gem5::BaseCPU::ExecuteCPUStats::numDiscardedOps
statistics::Scalar numDiscardedOps
Definition: base.hh:773
gem5::RefCountingPtr< StaticInst >
gem5::BaseMMU
Definition: mmu.hh:53
gem5::BaseCPU::ppAllCycles
probing::PMUUPtr ppAllCycles
CPU cycle counter even if any thread Context is suspended.
Definition: base.hh:533
gem5::AddressMonitor
Definition: base.hh:70
gem5::Cycles
Cycles is a wrapper class for representing cycle counts, i.e.
Definition: types.hh:78
pmu.hh
gem5::BaseCPU::ExecuteCPUStats::numNop
statistics::Scalar numNop
Definition: base.hh:723
gem5::BaseCPU::numThreads
ThreadID numThreads
Number of threads we're actually simulating (<= SMT_MAX_THREADS).
Definition: base.hh:384
gem5::BaseCPU::serializeThread
virtual void serializeThread(CheckpointOut &cp, ThreadID tid) const
Serialize a single thread.
Definition: base.hh:429
gem5::BaseCPU::_cpuId
int _cpuId
Definition: base.hh:116
gem5::BaseCPU::regStats
void regStats() override
Callback to set stat parameters.
Definition: base.cc:431
gem5::BaseCPU::ppRetiredInstsPC
probing::PMUUPtr ppRetiredInstsPC
Definition: base.hh:522
gem5::BaseCPU::wakeup
virtual void wakeup(ThreadID tid)=0
gem5::BaseCPU::CommitCPUStats::numMemRefs
statistics::Scalar numMemRefs
Definition: base.hh:793
gem5::BaseCPU::getDataPort
virtual Port & getDataPort()=0
Purely virtual method that returns a reference to the data port.
gem5::BaseCPU::deschedulePowerGatingEvent
void deschedulePowerGatingEvent()
Definition: base.cc:494
gem5::BaseCPU::ExecuteCPUStats::numVecPredRegReads
statistics::Scalar numVecPredRegReads
Definition: base.hh:765
gem5::CPUProgressEvent::description
virtual const char * description() const
Return a C string describing the event.
Definition: base.cc:124
gem5::BaseCPU::suspendContext
virtual void suspendContext(ThreadID thread_num)
Notify the CPU that the indicated context is now suspended.
Definition: base.cc:550
gem5::BaseCPU::baseStats
gem5::BaseCPU::BaseCPUStats baseStats
gem5::BaseCPU::taskId
void taskId(uint32_t id)
Set cpu task id.
Definition: base.hh:213
gem5::BaseCPU::CommitCPUStats::CommitCPUStats
CommitCPUStats(statistics::Group *parent, int thread_id)
Definition: base.cc:989
gem5::BaseCPU::registerThreadContexts
void registerThreadContexts()
Definition: base.cc:471
gem5::BaseCPU::PARAMS
PARAMS(BaseCPU)
gem5::BaseCPU::ExecuteCPUStats::numIntRegWrites
statistics::Scalar numIntRegWrites
Definition: base.hh:752
gem5::BaseCPU::FetchCPUStats::fetchRate
statistics::Formula fetchRate
Definition: base.hh:700
gem5::System
Definition: system.hh:74
gem5::BaseCPU::taskId
uint32_t taskId() const
Get cpu task id.
Definition: base.hh:211
gem5::BaseCPU::GlobalStats::simInsts
statistics::Value simInsts
Definition: base.hh:153
gem5::BaseCPU::ppRetiredStores
probing::PMUUPtr ppRetiredStores
Retired store instructions.
Definition: base.hh:527
gem5::BaseCPU::_dataRequestorId
RequestorID _dataRequestorId
data side request id that must be placed in all requests
Definition: base.hh:129
gem5::ThreadContext
ThreadContext is the external interface to all thread state for anything outside of the CPU.
Definition: thread_context.hh:88
gem5::BaseCPU::CommitCPUStats::numVecInsts
statistics::Scalar numVecInsts
Definition: base.hh:808
gem5::Named::name
virtual std::string name() const
Definition: named.hh:47
gem5::BaseCPU::flushTLBs
void flushTLBs()
Flush all TLBs in the CPU.
Definition: base.cc:690
gem5::SimObject::params
const Params & params() const
Definition: sim_object.hh:176
gem5::probing::PMUUPtr
std::unique_ptr< PMU > PMUUPtr
Definition: pmu.hh:60
gem5::BaseCPU::pwrGatingLatency
const Cycles pwrGatingLatency
Definition: base.hh:683
gem5::BaseCPU::ExecuteCPUStats::numCCRegReads
statistics::Scalar numCCRegReads
Definition: base.hh:737
gem5::BaseCPU::CommitCPUStats::numOps
statistics::Scalar numOps
Definition: base.hh:782
gem5::Event
Definition: eventq.hh:254
gem5::Packet
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Definition: packet.hh:294
gem5::BaseCPU::CommitCPUStats::numStoreInsts
statistics::Scalar numStoreInsts
Definition: base.hh:805
gem5::BaseCPU::CPUState
CPUState
Definition: base.hh:549
gem5::BaseCPU::BaseCPUStats::numCycles
statistics::Scalar numCycles
Definition: base.hh:640
gem5::BaseCPU::CPU_STATE_WAKEUP
@ CPU_STATE_WAKEUP
Definition: base.hh:553
gem5::BaseCPU::ExecuteCPUStats::numIntRegReads
statistics::Scalar numIntRegReads
Definition: base.hh:751
gem5::BaseCPU::CommitCPUStats::committedControl
statistics::Vector committedControl
Definition: base.hh:814
gem5::BaseCPU::FetchCPUStats::FetchCPUStats
FetchCPUStats(statistics::Group *parent, int thread_id)
Definition: base.cc:866
statistics.hh
gem5::BaseCPU::scheduleSimpointsInstStop
void scheduleSimpointsInstStop(std::vector< Counter > inst_starts)
Schedule simpoint events using the scheduleInstStop function.
Definition: base.cc:809
gem5::Tick
uint64_t Tick
Tick count type.
Definition: types.hh:58
gem5::BaseCPU::haltContext
virtual void haltContext(ThreadID thread_num)
Notify the CPU that the indicated context is now halted.
Definition: base.cc:576
gem5::BaseCPU::GlobalStats::hostInstRate
statistics::Formula hostInstRate
Definition: base.hh:156
gem5::BaseCPU::functionEntryTick
Tick functionEntryTick
Definition: base.hh:592
gem5::BaseCPU::scheduleInstStopAnyThread
void scheduleInstStopAnyThread(Counter max_insts)
Schedule an exit event when any threads in the core reach the max_insts instructions using the schedu...
Definition: base.cc:818
gem5::BaseCPU::instRequestorId
RequestorID instRequestorId() const
Reads this CPU's unique instruction requestor ID.
Definition: base.hh:195
gem5::BaseCPU::clearInterrupt
void clearInterrupt(ThreadID tid, int int_num, int index)
Definition: base.hh:242
gem5::BaseCPU::BaseCPUStats::ipc
statistics::Formula ipc
Definition: base.hh:643
port_proxy.hh
gem5::BaseCPU::regProbePoints
void regProbePoints() override
Register probe points for this object.
Definition: base.cc:374
gem5::BaseCPU::CommitCPUStats::ipc
statistics::Formula ipc
Definition: base.hh:790
gem5::BaseCPU::serialize
void serialize(CheckpointOut &cp) const override
Serialize this object to the given output stream.
Definition: base.cc:704
gem5::BaseCPU::CPU_STATE_ON
@ CPU_STATE_ON
Definition: base.hh:551
gem5::BaseCPU::previousState
CPUState previousState
Definition: base.hh:557
gem5::BaseCPU::CommitCPUStats::numIntInsts
statistics::Scalar numIntInsts
Definition: base.hh:799
gem5::BaseCPU::_instRequestorId
RequestorID _instRequestorId
instruction side request id that must be placed in all requests
Definition: base.hh:126
gem5::BaseCPU::setReset
virtual void setReset(bool state)
Set the reset of the CPU to be either asserted or deasserted.
Definition: base.cc:668
gem5::BaseCPU
Definition: base.hh:104
gem5::BaseCPU::totalOps
virtual Counter totalOps() const =0
gem5::BaseCPU::findContext
int findContext(ThreadContext *tc)
Given a Thread Context pointer return the thread num.
Definition: base.cc:519
gem5::AddressMonitor::val
uint64_t val
Definition: base.hh:78
gem5::BaseCPU::numSimulatedInsts
static Counter numSimulatedInsts()
Definition: base.hh:609
gem5::BaseCPU::contextToThread
ThreadID contextToThread(ContextID cid)
Convert ContextID to threadID.
Definition: base.hh:299
gem5::BaseCPU::functionTracingEnabled
bool functionTracingEnabled
Definition: base.hh:588
gem5::BaseCPU::_socketId
const uint32_t _socketId
Each cpu will have a socket ID that corresponds to its physical location in the system.
Definition: base.hh:123
gem5::BaseCPU::~BaseCPU
virtual ~BaseCPU()
Definition: base.cc:226
gem5::BaseCPU::BaseCPUStats
Definition: base.hh:633
gem5::BaseCPU::getContext
virtual ThreadContext * getContext(int tn)
Given a thread num get tho thread context for it.
Definition: base.hh:288
gem5::BaseCPU::ExecuteCPUStats::numInsts
statistics::Scalar numInsts
Definition: base.hh:721
gem5::BaseCPU::postInterrupt
void postInterrupt(ThreadID tid, int int_num, int index)
Definition: base.cc:231
gem5::BaseCPU::getCpuAddrMonitor
AddressMonitor * getCpuAddrMonitor(ThreadID tid)
Definition: base.hh:656
gem5::BaseCPU::enterPwrGatingEvent
EventFunctionWrapper enterPwrGatingEvent
Definition: base.hh:685
gem5::BaseCPU::probeInstCommit
virtual void probeInstCommit(const StaticInstPtr &inst, Addr pc)
Helper method to trigger PMU probes for a committed instruction.
Definition: base.cc:390
gem5::Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:147
gem5::AddressMonitor::gotWakeup
bool gotWakeup
Definition: base.hh:80
gem5::BaseCPU::ExecuteCPUStats::numBranches
statistics::Scalar numBranches
Definition: base.hh:725
gem5::BaseCPU::instCnt
Tick instCnt
Instruction count used for SPARC misc register.
Definition: base.hh:110
gem5::BaseCPU::executeStats
std::vector< std::unique_ptr< ExecuteCPUStats > > executeStats
Definition: base.hh:820
gem5::BaseCPU::ExecuteCPUStats::numVecPredRegWrites
statistics::Scalar numVecPredRegWrites
Definition: base.hh:766
gem5::BaseCPU::GlobalStats::GlobalStats
GlobalStats(statistics::Group *parent)
Definition: base.cc:826
gem5::CPUProgressEvent::_repeatEvent
bool _repeatEvent
Definition: base.hh:89
gem5::ClockedObject
The ClockedObject class extends the SimObject with a clock and accessor functions to relate ticks to ...
Definition: clocked_object.hh:234
gem5::BaseCPU::_switchedOut
bool _switchedOut
Is the CPU switched out or active?
Definition: base.hh:143
full_system.hh
gem5::SignalSinkPort< bool >
gem5::BaseCPU::ExecuteCPUStats::numLoadInsts
statistics::Scalar numLoadInsts
Definition: base.hh:727
gem5::BaseCPU::CommitCPUStats
Definition: base.hh:776
gem5::CPUProgressEvent::repeatEvent
void repeatEvent(bool repeat)
Definition: base.hh:99
gem5::BaseCPU::CPU_STATE_SLEEP
@ CPU_STATE_SLEEP
Definition: base.hh:552
gem5::ProbePointArg< bool >
gem5::BaseCPU::currentFunctionEnd
Addr currentFunctionEnd
Definition: base.hh:591
gem5::BaseCPU::workItemEnd
void workItemEnd()
Definition: base.hh:219
gem5::EventFunctionWrapper
Definition: eventq.hh:1136
gem5::FullSystem
bool FullSystem
The FullSystem variable can be used to determine the current mode of simulation.
Definition: root.cc:220
gem5::BaseCPU::FetchCPUStats::numOps
statistics::Scalar numOps
Definition: base.hh:697
gem5::CPUProgressEvent::interval
void interval(Tick ival)
Definition: base.hh:96
state
atomic_var_t state
Definition: helpers.cc:188
gem5::BaseCPU::threadContexts
std::vector< ThreadContext * > threadContexts
Definition: base.hh:260
gem5::BaseCPU::takeOverFrom
virtual void takeOverFrom(BaseCPU *cpu)
Load the state of a CPU from the previous CPU object, invoked on all new CPUs that are about to be sw...
Definition: base.cc:602
gem5::BaseCPU::BaseCPUStats::numWorkItemsStarted
statistics::Scalar numWorkItemsStarted
Definition: base.hh:644
gem5::BaseCPU::activateContext
virtual void activateContext(ThreadID thread_num)
Notify the CPU that the indicated context is now active.
Definition: base.cc:530
gem5::BaseCPU::traceFunctions
void traceFunctions(Addr pc)
Definition: base.hh:601
gem5::Port
Ports are used to interface objects to each other.
Definition: port.hh:61
gem5::BaseCPU::ExecuteCPUStats::numMiscRegWrites
statistics::Scalar numMiscRegWrites
Definition: base.hh:759
gem5::BaseCPU::getPort
Port & getPort(const std::string &if_name, PortID idx=InvalidPortID) override
Get a port on this CPU.
Definition: base.cc:455
gem5::BaseCPU::cpuId
int cpuId() const
Reads this CPU's ID.
Definition: base.hh:187
gem5::BaseCPU::workItemBegin
void workItemBegin()
Definition: base.hh:218
clocked_object.hh
gem5::BaseCPU::BaseCPUStats::numInsts
statistics::Scalar numInsts
Definition: base.hh:637
gem5::statistics::Value
Definition: statistics.hh:1981
interrupts.hh
gem5::BaseCPU::verifyMemoryMode
virtual void verifyMemoryMode() const
Verify that the system is in a memory mode supported by the CPU.
Definition: base.hh:384
gem5::BaseCPU::checkInterrupts
bool checkInterrupts(ThreadID tid) const
Definition: base.hh:254
gem5::BaseCPU::ppRetiredLoads
probing::PMUUPtr ppRetiredLoads
Retired load instructions.
Definition: base.hh:525
gem5::ContextID
int ContextID
Globally unique thread context ID.
Definition: types.hh:239
signal.hh
gem5::MipsISA::pc
Bitfield< 4 > pc
Definition: pra_constants.hh:243
gem5::statistics::Counter
double Counter
All counters are of 64-bit values.
Definition: types.hh:46
gem5::BaseCPU::traceFunctionsInternal
void traceFunctionsInternal(Addr pc)
Definition: base.cc:780
gem5::BaseCPU::switchOut
virtual void switchOut()
Prepare for another CPU to take over execution.
Definition: base.cc:588
gem5::BaseCPU::syscallRetryLatency
Cycles syscallRetryLatency
Definition: base.hh:662
gem5::statistics::Group
Statistics container.
Definition: group.hh:92
gem5::ArmISA::id
Bitfield< 33 > id
Definition: misc_types.hh:305
gem5::BaseCPU::GlobalStats::simOps
statistics::Value simOps
Definition: base.hh:154
gem5::BaseCPU::getCurrentInstCount
uint64_t getCurrentInstCount(ThreadID tid)
Get the number of instructions executed by the specified thread on this CPU.
Definition: base.cc:751
gem5::BaseCPU::ExecuteCPUStats::numFpAluAccesses
statistics::Scalar numFpAluAccesses
Definition: base.hh:741
gem5::CheckpointOut
std::ostream CheckpointOut
Definition: serialize.hh:66
gem5::AddressMonitor::pAddr
Addr pAddr
Definition: base.hh:77
gem5::BaseCPU::tracer
trace::InstTracer * tracer
Definition: base.hh:262
gem5::BaseCPU::getTracer
trace::InstTracer * getTracer()
Provide access to the tracer pointer.
Definition: base.hh:272
gem5::BaseCPU::ExecuteCPUStats::numVecAluAccesses
statistics::Scalar numVecAluAccesses
Definition: base.hh:762
gem5::RequestorID
uint16_t RequestorID
Definition: request.hh:95
gem5::BaseCPU::fetchStats
std::vector< std::unique_ptr< FetchCPUStats > > fetchStats
Definition: base.hh:819
gem5::BaseCPU::dataRequestorId
RequestorID dataRequestorId() const
Reads this CPU's unique data requestor ID.
Definition: base.hh:193
gem5::BaseCPU::ExecuteCPUStats::numVecRegWrites
statistics::Scalar numVecRegWrites
Definition: base.hh:770
gem5::ClockedObject::Params
ClockedObjectParams Params
Parameters of ClockedObject.
Definition: clocked_object.hh:240
gem5::AddressMonitor::waiting
bool waiting
Definition: base.hh:79
gem5::BaseCPU::mwait
bool mwait(ThreadID tid, PacketPtr pkt)
Definition: base.cc:254
gem5::BaseCPU::_cacheLineSize
const unsigned int _cacheLineSize
Cache the cache line size that we get from the system.
Definition: base.hh:146
gem5::BaseCPU::ppActiveCycles
probing::PMUUPtr ppActiveCycles
CPU cycle counter, only counts if any thread contexts is active.
Definition: base.hh:536
gem5::CPUProgressEvent::cpu
BaseCPU * cpu
Definition: base.hh:88
gem5::BaseCPU::numSimulatedCPUs
static int numSimulatedCPUs()
Definition: base.hh:607
probe.hh
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: gpu_translation_state.hh:37
gem5::statistics::total
const FlagsType total
Print the total.
Definition: info.hh:59
gem5::BaseCPU::FetchCPUStats::icacheStallCycles
statistics::Scalar icacheStallCycles
Definition: base.hh:709
gem5::BaseCPU::ppRetiredBranches
probing::PMUUPtr ppRetiredBranches
Retired branches (any type)
Definition: base.hh:530
gem5::CPUProgressEvent
Definition: base.hh:83
gem5::BaseCPU::clearInterrupts
void clearInterrupts(ThreadID tid)
Definition: base.hh:248
gem5::BaseCPU::_pid
uint32_t _pid
The current OS process ID that is executing on this processor.
Definition: base.hh:140
gem5::AddressMonitor::armed
bool armed
Definition: base.hh:75
gem5::BaseCPU::powerGatingOnIdle
const bool powerGatingOnIdle
Definition: base.hh:684
gem5::BaseCPU::globalStats
static std::unique_ptr< GlobalStats > globalStats
Pointer to the global stat structure.
Definition: base.hh:164
gem5::BaseCPU::CommitCPUStats::updateComCtrlStats
void updateComCtrlStats(const StaticInstPtr staticInst)
Definition: base.cc:1048
gem5::ThreadID
int16_t ThreadID
Thread index/ID type.
Definition: types.hh:235
gem5::BaseCPU::addressMonitor
std::vector< AddressMonitor > addressMonitor
Definition: base.hh:649
panic
#define panic(...)
This implements a cprintf based panic() function.
Definition: logging.hh:188
gem5::BaseCPU::CommitCPUStats::numLoadInsts
statistics::Scalar numLoadInsts
Definition: base.hh:802
gem5::CPUProgressEvent::_interval
Tick _interval
Definition: base.hh:86
gem5::BaseCPU::CommitCPUStats::numOpsNotNOP
statistics::Scalar numOpsNotNOP
Definition: base.hh:786
gem5::BaseCPU::FetchCPUStats::branchRate
statistics::Formula branchRate
Definition: base.hh:706
eventq.hh

Generated on Sun Jul 30 2023 01:56:51 for gem5 by doxygen 1.8.17