LLVM
17.0.0git
|
The goal of this scheduling strategy is to maximize kernel occupancy (i.e. More...
#include "Target/AMDGPU/GCNSchedStrategy.h"
Public Member Functions | |
GCNMaxOccupancySchedStrategy (const MachineSchedContext *C) | |
![]() | |
GCNSchedStrategy (const MachineSchedContext *C) | |
SUnit * | pickNode (bool &IsTopNode) override |
Pick the best node to balance the schedule. Implements MachineSchedStrategy. More... | |
void | initialize (ScheduleDAGMI *DAG) override |
Initialize the strategy after building the DAG for a new region. More... | |
unsigned | getTargetOccupancy () |
void | setTargetOccupancy (unsigned Occ) |
GCNSchedStageID | getCurrentStage () |
bool | advanceStage () |
bool | hasNextStage () const |
GCNSchedStageID | getNextStage () const |
![]() | |
GenericScheduler (const MachineSchedContext *C) | |
void | initPolicy (MachineBasicBlock::iterator Begin, MachineBasicBlock::iterator End, unsigned NumRegionInstrs) override |
Initialize the per-region scheduling policy. More... | |
void | dumpPolicy () const override |
bool | shouldTrackPressure () const override |
Check if pressure tracking is needed before building the DAG and initializing this strategy. More... | |
bool | shouldTrackLaneMasks () const override |
Returns true if lanemasks should be tracked. More... | |
void | schedNode (SUnit *SU, bool IsTopNode) override |
Update the scheduler's state after scheduling a node. More... | |
void | releaseTopNode (SUnit *SU) override |
When all predecessor dependencies have been resolved, free this node for top-down scheduling. More... | |
void | releaseBottomNode (SUnit *SU) override |
When all successor dependencies have been resolved, free this node for bottom-up scheduling. More... | |
void | registerRoots () override |
Notify this strategy that all roots have been released (including those that depend on EntrySU or ExitSU). More... | |
![]() | |
virtual | ~MachineSchedStrategy ()=default |
virtual bool | doMBBSchedRegionsTopDown () const |
virtual void | enterMBB (MachineBasicBlock *MBB) |
Tell the strategy that MBB is about to be processed. More... | |
virtual void | leaveMBB () |
Tell the strategy that current MBB is done. More... | |
virtual void | scheduleTree (unsigned SubtreeID) |
Scheduler callback to notify that a new subtree is scheduled. More... | |
Additional Inherited Members | |
![]() | |
enum | CandReason : uint8_t { NoCand, Only1, PhysReg, RegExcess, RegCritical, Stall, Cluster, Weak, RegMax, ResourceReduce, ResourceDemand, BotHeightReduce, BotPathReduce, TopDepthReduce, TopPathReduce, NextDefUse, NodeOrder } |
Represent the type of SchedCandidate found within a single queue. More... | |
![]() | |
static const char * | getReasonStr (GenericSchedulerBase::CandReason Reason) |
![]() | |
bool | HasHighPressure |
bool | KnownExcessRP = false |
unsigned | ErrorMargin = 3 |
const unsigned | HighRPSGPRBias = 7 |
const unsigned | HighRPVGPRBias = 7 |
unsigned | SGPRCriticalLimit |
unsigned | VGPRCriticalLimit |
unsigned | SGPRLimitBias = 0 |
unsigned | VGPRLimitBias = 0 |
![]() | |
SUnit * | pickNodeBidirectional (bool &IsTopNode) |
void | pickNodeFromQueue (SchedBoundary &Zone, const CandPolicy &ZonePolicy, const RegPressureTracker &RPTracker, SchedCandidate &Cand) |
void | initCandidate (SchedCandidate &Cand, SUnit *SU, bool AtTop, const RegPressureTracker &RPTracker, const SIRegisterInfo *SRI, unsigned SGPRPressure, unsigned VGPRPressure) |
![]() | |
void | checkAcyclicLatency () |
Set IsAcyclicLatencyLimited if the acyclic path is longer than the cyclic critical path by more cycles than it takes to drain the instruction buffer. More... | |
void | initCandidate (SchedCandidate &Cand, SUnit *SU, bool AtTop, const RegPressureTracker &RPTracker, RegPressureTracker &TempTracker) |
virtual bool | tryCandidate (SchedCandidate &Cand, SchedCandidate &TryCand, SchedBoundary *Zone) const |
Apply a set of heuristics to a new candidate. More... | |
SUnit * | pickNodeBidirectional (bool &IsTopNode) |
Pick the best candidate node from either the top or bottom queue. More... | |
void | pickNodeFromQueue (SchedBoundary &Zone, const CandPolicy &ZonePolicy, const RegPressureTracker &RPTracker, SchedCandidate &Candidate) |
Pick the best candidate from the queue. More... | |
void | reschedulePhysReg (SUnit *SU, bool isTop) |
![]() | |
GenericSchedulerBase (const MachineSchedContext *C) | |
void | setPolicy (CandPolicy &Policy, bool IsPostRA, SchedBoundary &CurrZone, SchedBoundary *OtherZone) |
Set the CandPolicy given a scheduling zone given the current resources and latencies inside and outside the zone. More... | |
void | traceCandidate (const SchedCandidate &Cand) |
![]() | |
std::vector< unsigned > | Pressure |
std::vector< unsigned > | MaxPressure |
unsigned | SGPRExcessLimit |
unsigned | VGPRExcessLimit |
unsigned | TargetOccupancy |
MachineFunction * | MF |
SmallVector< GCNSchedStageID, 4 > | SchedStages |
SmallVectorImpl< GCNSchedStageID >::iterator | CurrentStage = nullptr |
![]() | |
ScheduleDAGMILive * | DAG = nullptr |
MachineSchedPolicy | RegionPolicy |
SchedBoundary | Top |
SchedBoundary | Bot |
SchedCandidate | TopCand |
Candidate last picked from Top boundary. More... | |
SchedCandidate | BotCand |
Candidate last picked from Bot boundary. More... | |
![]() | |
const MachineSchedContext * | Context |
const TargetSchedModel * | SchedModel = nullptr |
const TargetRegisterInfo * | TRI = nullptr |
SchedRemainder | Rem |
The goal of this scheduling strategy is to maximize kernel occupancy (i.e.
maximum number of waves per simd).
Definition at line 123 of file GCNSchedStrategy.h.
GCNMaxOccupancySchedStrategy::GCNMaxOccupancySchedStrategy | ( | const MachineSchedContext * | C | ) |
Definition at line 369 of file GCNSchedStrategy.cpp.
References llvm::ClusteredLowOccupancyReschedule, llvm::OccInitialSchedule, llvm::PreRARematerialize, llvm::GCNSchedStrategy::SchedStages, and llvm::UnclusteredHighRPReschedule.