LLVM
8.0.1
|
This is a minimal scheduler strategy. More...
#include "Target/AMDGPU/GCNSchedStrategy.h"
Public Member Functions | |
GCNMaxOccupancySchedStrategy (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... | |
void | setTargetOccupancy (unsigned Occ) |
Public Member Functions inherited from llvm::GenericScheduler | |
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... | |
Public Member Functions inherited from llvm::MachineSchedStrategy | |
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... | |
Friends | |
class | GCNScheduleDAGMILive |
Additional Inherited Members | |
Public Types inherited from llvm::GenericSchedulerBase | |
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 Public Member Functions inherited from llvm::GenericSchedulerBase | |
static const char * | getReasonStr (GenericSchedulerBase::CandReason Reason) |
Protected Member Functions inherited from llvm::GenericScheduler | |
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 void | 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) |
Protected Member Functions inherited from llvm::GenericSchedulerBase | |
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) |
Protected Attributes inherited from llvm::GenericScheduler | |
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... | |
Protected Attributes inherited from llvm::GenericSchedulerBase | |
const MachineSchedContext * | Context |
const TargetSchedModel * | SchedModel = nullptr |
const TargetRegisterInfo * | TRI = nullptr |
SchedRemainder | Rem |
This is a minimal scheduler strategy.
The main difference between this and the GenericScheduler is that GCNSchedStrategy uses different heuristics to determine excess/critical pressure sets. Its goal is to maximize kernel occupancy (i.e. maximum number of waves per simd).
Definition at line 30 of file GCNSchedStrategy.h.
GCNMaxOccupancySchedStrategy::GCNMaxOccupancySchedStrategy | ( | const MachineSchedContext * | C | ) |
Definition at line 27 of file GCNSchedStrategy.cpp.
|
overridevirtual |
Initialize the strategy after building the DAG for a new region.
Reimplemented from llvm::GenericScheduler.
Definition at line 31 of file GCNSchedStrategy.cpp.
References assert(), llvm::GenericSchedulerBase::SchedCandidate::AtTop, llvm::SchedBoundary::Available, llvm::GenericScheduler::Bot, llvm::GenericScheduler::BotCand, llvm::GenericSchedulerBase::Context, llvm::RegPressureDelta::CriticalMax, llvm::SchedBoundary::DAG, llvm::GenericScheduler::DAG, llvm::dbgs(), llvm::RegPressureDelta::Excess, llvm::ScheduleDAGMILive::getBotRPTracker(), llvm::RegPressureTracker::getDownwardPressure(), llvm::SUnit::getInstr(), llvm::GCNSubtarget::getMaxNumSGPRs(), llvm::GCNSubtarget::getMaxNumVGPRs(), llvm::RegisterClassInfo::getNumAllocatableRegs(), llvm::SIRegisterInfo::getRegPressureSetLimit(), llvm::RegPressureTracker::getRegSetPressureAtPos(), llvm::SIRegisterInfo::getSGPRPressureSet(), llvm::MachineFunction::getSubtarget(), llvm::ScheduleDAGMILive::getTopRPTracker(), llvm::PressureChange::getUnitInc(), llvm::RegPressureTracker::getUpwardPressure(), llvm::SIRegisterInfo::getVGPRPressureSet(), llvm::GenericScheduler::initialize(), llvm::GenericSchedulerBase::SchedCandidate::initResourceDelta(), llvm::SUnit::isScheduled, llvm::SchedBoundary::isTop(), llvm::GenericSchedulerBase::SchedCandidate::isValid(), LLVM_DEBUG, llvm::ScheduleDAG::MF, llvm::GenericSchedulerBase::NoCand, llvm::SchedBoundary::pickOnlyChoice(), llvm::GenericSchedulerBase::SchedCandidate::Policy, llvm::GenericSchedulerBase::SchedCandidate::Reason, llvm::MachineSchedContext::RegClassInfo, llvm::GenericSchedulerBase::RegCritical, llvm::GenericSchedulerBase::RegExcess, llvm::GenericSchedulerBase::SchedCandidate::ResDelta, llvm::GenericSchedulerBase::SchedCandidate::reset(), llvm::GenericSchedulerBase::SchedCandidate::RPDelta, llvm::GenericSchedulerBase::SchedModel, llvm::GenericSchedulerBase::SchedCandidate::setBest(), llvm::GenericSchedulerBase::setPolicy(), llvm::PressureChange::setUnitInc(), llvm::ARM_MB::ST, llvm::GenericSchedulerBase::SchedCandidate::SU, llvm::GenericScheduler::Top, llvm::GenericScheduler::TopCand, llvm::GenericSchedulerBase::traceCandidate(), llvm::GenericSchedulerBase::TRI, and llvm::GenericScheduler::tryCandidate().
Pick the best node to balance the schedule. Implements MachineSchedStrategy.
Reimplemented from llvm::GenericScheduler.
Definition at line 251 of file GCNSchedStrategy.cpp.
References assert(), llvm::SchedBoundary::Available, llvm::GenericScheduler::Bot, llvm::GenericScheduler::BotCand, llvm::ScheduleDAGMI::bottom(), llvm::GenericScheduler::DAG, llvm::dbgs(), llvm::ReadyQueue::empty(), llvm::ScheduleDAGMILive::getBotRPTracker(), llvm::SUnit::getInstr(), llvm::ScheduleDAGMILive::getTopRPTracker(), llvm::SUnit::isBottomReady(), llvm::SUnit::isScheduled, llvm::SUnit::isTopReady(), LLVM_DEBUG, llvm::GenericSchedulerBase::NoCand, llvm::SUnit::NodeNum, llvm::MachineSchedPolicy::OnlyBottomUp, llvm::MachineSchedPolicy::OnlyTopDown, llvm::SchedBoundary::Pending, llvm::SchedBoundary::pickOnlyChoice(), llvm::GenericSchedulerBase::SchedCandidate::Reason, llvm::GenericScheduler::RegionPolicy, llvm::SchedBoundary::removeReady(), llvm::GenericSchedulerBase::SchedCandidate::reset(), llvm::GenericSchedulerBase::SchedCandidate::SU, llvm::ScheduleDAGMI::top(), llvm::GenericScheduler::Top, and llvm::GenericScheduler::TopCand.
|
inline |
Definition at line 60 of file GCNSchedStrategy.h.
Referenced by llvm::GCNScheduleDAGMILive::finalizeSchedule(), and llvm::GCNIterativeScheduler::scheduleLegacyMaxOccupancy().
|
friend |
Definition at line 31 of file GCNSchedStrategy.h.