CIRCT 20.0.0git
|
This class models a cyclic scheduling problem. More...
#include <Problems.h>
Public Member Functions | |
std::optional< unsigned > | getDistance (Dependence dep) |
The distance determines whether a dependence has to be satisfied in the same iteration (distance=0 or not set), or distance-many iterations later. | |
void | setDistance (Dependence dep, unsigned val) |
std::optional< unsigned > | getInitiationInterval () |
The initiation interval (II) is the number of time steps between subsequent iterations, i.e. | |
void | setInitiationInterval (unsigned val) |
virtual PropertyStringVector | getProperties (Dependence dep) override |
virtual PropertyStringVector | getProperties () override |
virtual LogicalResult | verify () override |
Return success if the computed solution is valid. | |
Problem (Operation *containingOp) | |
Construct an empty scheduling problem. | |
Problem ()=default | |
Public Member Functions inherited from circt::scheduling::Problem | |
Problem (Operation *containingOp) | |
Construct an empty scheduling problem. | |
virtual | ~Problem ()=default |
void | insertOperation (Operation *op) |
Include op in this scheduling problem. | |
LogicalResult | insertDependence (Dependence dep) |
Include dep in the scheduling problem. | |
void | insertOperatorType (OperatorType opr) |
Include opr in this scheduling problem. | |
OperatorType | getOrInsertOperatorType (StringRef name) |
Retrieves the operator type identified by the client-specific name . | |
Operation * | getContainingOp () |
Return the operation containing this problem, e.g. to emit diagnostics. | |
void | setContainingOp (Operation *op) |
Set the operation containing this problem, e.g. to emit diagnostics. | |
bool | hasOperation (Operation *op) |
Return true if op is part of this problem. | |
const OperationSet & | getOperations () |
Return the set of operations. | |
DependenceRange | getDependences (Operation *op) |
Return a range object to transparently iterate over op's incoming 1) implicit def-use dependences (backed by the SSA graph), and then 2) explictly added auxiliary dependences. | |
bool | hasOperatorType (OperatorType opr) |
Return true if opr is part of this problem. | |
const OperatorTypeSet & | getOperatorTypes () |
Return the set of operator types. | |
std::optional< OperatorType > | getLinkedOperatorType (Operation *op) |
The linked operator type provides the runtime characteristics for op . | |
void | setLinkedOperatorType (Operation *op, OperatorType opr) |
std::optional< unsigned > | getLatency (OperatorType opr) |
The latency is the number of cycles opr needs to compute its result. | |
void | setLatency (OperatorType opr, unsigned val) |
std::optional< unsigned > | getStartTime (Operation *op) |
Return the start time for op , as computed by the scheduler. | |
void | setStartTime (Operation *op, unsigned val) |
std::optional< unsigned > | getEndTime (Operation *op) |
Returns the end time for op , as computed by the scheduler. | |
StringAttr | getInstanceName () |
void | setInstanceName (StringAttr name) |
StringAttr | getLibraryName () |
void | setLibraryName (StringAttr name) |
StringAttr | getOperationName (Operation *op) |
void | setOperationName (Operation *op, StringAttr name) |
virtual PropertyStringVector | getProperties (Operation *op) |
virtual PropertyStringVector | getProperties (OperatorType opr) |
virtual LogicalResult | check () |
Return success if the constructed scheduling problem is valid. | |
Static Public Attributes | |
static constexpr auto | name = "CyclicProblem" |
Static Public Attributes inherited from circt::scheduling::Problem | |
static constexpr auto | name = "Problem" |
Protected Member Functions | |
CyclicProblem ()=default | |
virtual LogicalResult | verifyPrecedence (Dependence dep) override |
dep's source operation is available before dep's destination operation starts (dep's distance iterations later). | |
virtual LogicalResult | verifyInitiationInterval () |
This problem has a non-zero II. | |
Protected Member Functions inherited from circt::scheduling::Problem | |
Problem ()=default | |
virtual LogicalResult | checkLinkedOperatorType (Operation *op) |
op is linked to a registered operator type. | |
virtual LogicalResult | checkLatency (OperatorType opr) |
opr has a latency. | |
virtual LogicalResult | verifyStartTime (Operation *op) |
op has a start time. | |
Private Attributes | |
DependenceProperty< unsigned > | distance |
InstanceProperty< unsigned > | initiationInterval |
Additional Inherited Members | |
Public Types inherited from circt::scheduling::Problem | |
using | Dependence = detail::Dependence |
A thin wrapper to allow a uniform handling of def-use and auxiliary dependences. | |
using | OperatorType = mlir::StringAttr |
Operator types are distinguished by name (chosen by the client). | |
using | OperationSet = llvm::SetVector< Operation * > |
using | DependenceRange = llvm::iterator_range< detail::DependenceIterator > |
using | OperatorTypeSet = llvm::SetVector< OperatorType > |
using | PropertyStringVector = llvm::SmallVector< std::pair< std::string, std::string >, 2 > |
Protected Types inherited from circt::scheduling::Problem | |
using | AuxDependenceMap = llvm::DenseMap< Operation *, llvm::SmallSetVector< Operation *, 4 > > |
template<typename T > | |
using | OperationProperty = llvm::DenseMap< Operation *, std::optional< T > > |
template<typename T > | |
using | DependenceProperty = llvm::DenseMap< Dependence, std::optional< T > > |
template<typename T > | |
using | OperatorTypeProperty = llvm::DenseMap< OperatorType, std::optional< T > > |
template<typename T > | |
using | InstanceProperty = std::optional< T > |
This class models a cyclic scheduling problem.
Its solution can be used to construct a pipelined datapath with a fixed, integer initiation interval, in which the execution of multiple iterations/samples/etc. may overlap.
Definition at line 286 of file Problems.h.
|
protecteddefault |
|
inline |
The distance determines whether a dependence has to be satisfied in the same iteration (distance=0 or not set), or distance-many iterations later.
Definition at line 301 of file Problems.h.
References distance.
Referenced by circt::scheduling::ChainingCyclicProblem::checkDefUse(), getProperties(), circt::scheduling::scheduleLP(), and verifyPrecedence().
|
inline |
The initiation interval (II) is the number of time steps between subsequent iterations, i.e.
a new iteration is started every II time steps. The best possible value is 1, meaning that a corresponding pipeline accepts new data every cycle. This property is part of the cyclic problem's solution.
Definition at line 311 of file Problems.h.
References initiationInterval.
Referenced by getProperties(), verifyInitiationInterval(), verifyPrecedence(), and circt::scheduling::ModuloProblem::verifyUtilization().
|
overridevirtual |
Reimplemented from circt::scheduling::Problem.
Definition at line 164 of file Problems.cpp.
References getInitiationInterval(), and circt::scheduling::Problem::getProperties().
|
overridevirtual |
Reimplemented from circt::scheduling::Problem.
Definition at line 157 of file Problems.cpp.
References distance, getDistance(), and circt::scheduling::Problem::getProperties().
|
default |
|
inlineexplicit |
Construct an empty scheduling problem.
containingOp
is used for its MLIRContext and to emit diagnostics.
Definition at line 81 of file Problems.h.
|
inline |
Definition at line 304 of file Problems.h.
References distance.
Referenced by circt::analysis::CyclicSchedulingAnalysis::analyzeForOp().
|
inline |
Definition at line 312 of file Problems.h.
References initiationInterval.
Referenced by circt::scheduling::scheduleLP().
|
overridevirtual |
Return success if the computed solution is valid.
Reimplemented from circt::scheduling::Problem.
Reimplemented in circt::scheduling::ModuloProblem, and circt::scheduling::ChainingCyclicProblem.
Definition at line 198 of file Problems.cpp.
References circt::scheduling::Problem::verify(), and verifyInitiationInterval().
Referenced by circt::scheduling::ModuloProblem::verify(), and circt::scheduling::ChainingCyclicProblem::verify().
|
protectedvirtual |
This problem has a non-zero II.
Definition at line 192 of file Problems.cpp.
References circt::scheduling::Problem::getContainingOp(), and getInitiationInterval().
Referenced by verify().
|
overrideprotectedvirtual |
dep's
source operation is available before dep's
destination operation starts (dep's
distance iterations later).
Reimplemented from circt::scheduling::Problem.
Definition at line 171 of file Problems.cpp.
References circt::scheduling::Problem::getContainingOp(), circt::scheduling::detail::Dependence::getDestination(), getDistance(), getInitiationInterval(), circt::scheduling::Problem::getLatency(), circt::scheduling::Problem::getLinkedOperatorType(), circt::scheduling::detail::Dependence::getSource(), and circt::scheduling::Problem::getStartTime().
|
private |
Definition at line 295 of file Problems.h.
Referenced by getDistance(), getProperties(), and setDistance().
|
private |
Definition at line 296 of file Problems.h.
Referenced by getInitiationInterval(), and setInitiationInterval().
|
staticconstexpr |
Definition at line 288 of file Problems.h.