diff options
author | Michael Maitland <michaeltmaitland@gmail.com> | 2023-08-22 17:00:50 -0700 |
---|---|---|
committer | Michael Maitland <michaeltmaitland@gmail.com> | 2023-08-24 15:25:42 -0700 |
commit | 5b854f2c23ea1b000cb4cac4c0fea77326c03d43 (patch) | |
tree | 23444e77a4d203d6b50ec60430c34e8f18a28ad4 /llvm/lib/MCA | |
parent | 8c249c44d41f69c867fcf47f65e4646b626368d7 (diff) | |
download | llvm-5b854f2c23ea1b000cb4cac4c0fea77326c03d43.zip llvm-5b854f2c23ea1b000cb4cac4c0fea77326c03d43.tar.gz llvm-5b854f2c23ea1b000cb4cac4c0fea77326c03d43.tar.bz2 |
[TableGen] Rename ResourceCycles and StartAtCycle to clarify semantics
D150312 added a TODO:
TODO: consider renaming the field `StartAtCycle` and `Cycles` to
`AcquireAtCycle` and `ReleaseAtCycle` respectively, to stress the
fact that resource allocation is now represented as an interval,
relatively to the issue cycle of the instruction.
This patch implements that TODO. This naming clarifies how to use these
fields in the scheduler. In addition it was confusing that `StartAtCycle` was
singular but `Cycles` was plural. This renaming fixes this inconsistency.
This commit as previously reverted since it missed renaming that came
down after rebasing. This version of the commit fixes those problems.
Differential Revision: https://reviews.llvm.org/D158568
Diffstat (limited to 'llvm/lib/MCA')
-rw-r--r-- | llvm/lib/MCA/HardwareUnits/ResourceManager.cpp | 6 | ||||
-rw-r--r-- | llvm/lib/MCA/HardwareUnits/Scheduler.cpp | 4 | ||||
-rw-r--r-- | llvm/lib/MCA/InstrBuilder.cpp | 8 | ||||
-rw-r--r-- | llvm/lib/MCA/Stages/ExecuteStage.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/MCA/Stages/InstructionTables.cpp | 5 | ||||
-rw-r--r-- | llvm/lib/MCA/Support.cpp | 10 |
6 files changed, 18 insertions, 17 deletions
diff --git a/llvm/lib/MCA/HardwareUnits/ResourceManager.cpp b/llvm/lib/MCA/HardwareUnits/ResourceManager.cpp index 393548d..8d99695 100644 --- a/llvm/lib/MCA/HardwareUnits/ResourceManager.cpp +++ b/llvm/lib/MCA/HardwareUnits/ResourceManager.cpp @@ -346,7 +346,7 @@ uint64_t ResourceManager::checkAvailability(const InstrDesc &Desc) const { void ResourceManager::issueInstruction( const InstrDesc &Desc, - SmallVectorImpl<std::pair<ResourceRef, ResourceCycles>> &Pipes) { + SmallVectorImpl<std::pair<ResourceRef, ReleaseAtCycles>> &Pipes) { for (const std::pair<uint64_t, ResourceUsage> &R : Desc.Resources) { const CycleSegment &CS = R.second.CS; if (!CS.size()) { @@ -359,8 +359,8 @@ void ResourceManager::issueInstruction( ResourceRef Pipe = selectPipe(R.first); use(Pipe); BusyResources[Pipe] += CS.size(); - Pipes.emplace_back(std::pair<ResourceRef, ResourceCycles>( - Pipe, ResourceCycles(CS.size()))); + Pipes.emplace_back(std::pair<ResourceRef, ReleaseAtCycles>( + Pipe, ReleaseAtCycles(CS.size()))); } else { assert((llvm::popcount(R.first) > 1) && "Expected a group!"); // Mark this group as reserved. diff --git a/llvm/lib/MCA/HardwareUnits/Scheduler.cpp b/llvm/lib/MCA/HardwareUnits/Scheduler.cpp index 31ea751..a9bbf69 100644 --- a/llvm/lib/MCA/HardwareUnits/Scheduler.cpp +++ b/llvm/lib/MCA/HardwareUnits/Scheduler.cpp @@ -69,7 +69,7 @@ Scheduler::Status Scheduler::isAvailable(const InstRef &IR) { void Scheduler::issueInstructionImpl( InstRef &IR, - SmallVectorImpl<std::pair<ResourceRef, ResourceCycles>> &UsedResources) { + SmallVectorImpl<std::pair<ResourceRef, ReleaseAtCycles>> &UsedResources) { Instruction *IS = IR.getInstruction(); const InstrDesc &D = IS->getDesc(); @@ -98,7 +98,7 @@ void Scheduler::issueInstructionImpl( // Release the buffered resources and issue the instruction. void Scheduler::issueInstruction( InstRef &IR, - SmallVectorImpl<std::pair<ResourceRef, ResourceCycles>> &UsedResources, + SmallVectorImpl<std::pair<ResourceRef, ReleaseAtCycles>> &UsedResources, SmallVectorImpl<InstRef> &PendingInstructions, SmallVectorImpl<InstRef> &ReadyInstructions) { const Instruction &Inst = *IR.getInstruction(); diff --git a/llvm/lib/MCA/InstrBuilder.cpp b/llvm/lib/MCA/InstrBuilder.cpp index bddd370..1a82e45 100644 --- a/llvm/lib/MCA/InstrBuilder.cpp +++ b/llvm/lib/MCA/InstrBuilder.cpp @@ -69,7 +69,7 @@ static void initializeUsedResources(InstrDesc &ID, for (unsigned I = 0, E = SCDesc.NumWriteProcResEntries; I < E; ++I) { const MCWriteProcResEntry *PRE = STI.getWriteProcResBegin(&SCDesc) + I; const MCProcResourceDesc &PR = *SM.getProcResource(PRE->ProcResourceIdx); - if (!PRE->Cycles) { + if (!PRE->ReleaseAtCycle) { #ifndef NDEBUG WithColor::warning() << "Ignoring invalid write of zero cycles on processor resource " @@ -89,11 +89,11 @@ static void initializeUsedResources(InstrDesc &ID, AllInOrderResources &= (PR.BufferSize <= 1); } - CycleSegment RCy(0, PRE->Cycles, false); + CycleSegment RCy(0, PRE->ReleaseAtCycle, false); Worklist.emplace_back(ResourcePlusCycles(Mask, ResourceUsage(RCy))); if (PR.SuperIdx) { uint64_t Super = ProcResourceMasks[PR.SuperIdx]; - SuperResources[Super] += PRE->Cycles; + SuperResources[Super] += PRE->ReleaseAtCycle; } } @@ -156,7 +156,7 @@ static void initializeUsedResources(InstrDesc &ID, // is reserved. For example (on target x86; cpu Haswell): // // SchedWriteRes<[HWPort0, HWPort1, HWPort01]> { - // let ResourceCycles = [2, 2, 3]; + // let ReleaseAtCycles = [2, 2, 3]; // } // // This means: diff --git a/llvm/lib/MCA/Stages/ExecuteStage.cpp b/llvm/lib/MCA/Stages/ExecuteStage.cpp index 6d36c4a..7714d4f 100644 --- a/llvm/lib/MCA/Stages/ExecuteStage.cpp +++ b/llvm/lib/MCA/Stages/ExecuteStage.cpp @@ -196,7 +196,7 @@ Error ExecuteStage::execute(InstRef &IR) { // Reserve a slot in each buffered resource. Also, mark units with // BufferSize=0 as reserved. Resources with a buffer size of zero will only - // be released after MCIS is issued, and all the ResourceCycles for those + // be released after MCIS is issued, and all the ReleaseAtCycles for those // units have been consumed. bool IsReadyInstruction = HWS.dispatch(IR); const Instruction &Inst = *IR.getInstruction(); diff --git a/llvm/lib/MCA/Stages/InstructionTables.cpp b/llvm/lib/MCA/Stages/InstructionTables.cpp index a842b52..937cc7d 100644 --- a/llvm/lib/MCA/Stages/InstructionTables.cpp +++ b/llvm/lib/MCA/Stages/InstructionTables.cpp @@ -38,7 +38,7 @@ Error InstructionTables::execute(InstRef &IR) { for (unsigned I = 0, E = NumUnits; I < E; ++I) { ResourceRef ResourceUnit = std::make_pair(Index, 1U << I); UsedResources.emplace_back( - std::make_pair(ResourceUnit, ResourceCycles(Cycles, NumUnits))); + std::make_pair(ResourceUnit, ReleaseAtCycles(Cycles, NumUnits))); } continue; } @@ -53,7 +53,8 @@ Error InstructionTables::execute(InstRef &IR) { for (unsigned I2 = 0, E2 = SubUnit.NumUnits; I2 < E2; ++I2) { ResourceRef ResourceUnit = std::make_pair(SubUnitIdx, 1U << I2); UsedResources.emplace_back(std::make_pair( - ResourceUnit, ResourceCycles(Cycles, NumUnits * SubUnit.NumUnits))); + ResourceUnit, + ReleaseAtCycles(Cycles, NumUnits * SubUnit.NumUnits))); } } } diff --git a/llvm/lib/MCA/Support.cpp b/llvm/lib/MCA/Support.cpp index 517738c..f8b8a2d 100644 --- a/llvm/lib/MCA/Support.cpp +++ b/llvm/lib/MCA/Support.cpp @@ -21,7 +21,7 @@ namespace mca { #define DEBUG_TYPE "llvm-mca" -ResourceCycles &ResourceCycles::operator+=(const ResourceCycles &RHS) { +ReleaseAtCycles &ReleaseAtCycles::operator+=(const ReleaseAtCycles &RHS) { if (Denominator == RHS.Denominator) Numerator += RHS.Numerator; else { @@ -92,18 +92,18 @@ double computeBlockRThroughput(const MCSchedModel &SM, unsigned DispatchWidth, // The number of available resource units affects the resource pressure // distribution, as well as how many blocks can be executed every cycle. for (unsigned I = 0, E = SM.getNumProcResourceKinds(); I < E; ++I) { - unsigned ResourceCycles = ProcResourceUsage[I]; - if (!ResourceCycles) + unsigned ReleaseAtCycles = ProcResourceUsage[I]; + if (!ReleaseAtCycles) continue; const MCProcResourceDesc &MCDesc = *SM.getProcResource(I); - double Throughput = static_cast<double>(ResourceCycles) / MCDesc.NumUnits; + double Throughput = static_cast<double>(ReleaseAtCycles) / MCDesc.NumUnits; Max = std::max(Max, Throughput); } // The block reciprocal throughput is computed as the MAX of: // - (NumMicroOps / DispatchWidth) - // - (NumUnits / ResourceCycles) for every consumed processor resource. + // - (NumUnits / ReleaseAtCycles) for every consumed processor resource. return Max; } |