|
MLIR-AIE 1.4.5.dev
|
Which streams can deadlock against each other if they share an arbiter or a link. More...
#include "aie/Dialect/AIE/Transforms/AIEStreamDependencyAnalysis.h"
Public Member Functions | |
| StreamDeadlockAnalysis (DeviceOp device, llvm::ArrayRef< RoutedStream > streams) | |
| streams must outlive the analysis. | |
| bool | canBlock (size_t f, size_t g) const |
| Whether stream f, stalled at its receiver, can keep stream g from ever arriving: f carries more than its receiver takes in before waiting, and draining that receiver waits on g. | |
| bool | silent (size_t f) const |
| Whether stream f carries nothing, so it neither holds nor waits. | |
| std::string | explainBlock (size_t f, size_t g) const |
| Why f can block g: the chain of waits from f's receiver to g, and which links of it are assumed for lack of information. | |
| llvm::SmallVector< std::string > | assumptions (size_t f, size_t g) const |
| What explainBlock(f, g) takes on trust rather than reads off the design, one sentence each. | |
Which streams can deadlock against each other if they share an arbiter or a link.
A packet holds its arbiter grant until tlast, so a stream stalled at a full receiver holds up whatever else waits on that grant.
Definition at line 290 of file AIEStreamDependencyAnalysis.h.
| StreamDeadlockAnalysis::StreamDeadlockAnalysis | ( | DeviceOp | device, |
| llvm::ArrayRef< RoutedStream > | streams ) |
streams must outlive the analysis.
Definition at line 1215 of file AIEStreamDependencyAnalysis.cpp.
| SmallVector< std::string > StreamDeadlockAnalysis::assumptions | ( | size_t | f, |
| size_t | g ) const |
What explainBlock(f, g) takes on trust rather than reads off the design, one sentence each.
Requires canBlock(f, g).
Definition at line 1285 of file AIEStreamDependencyAnalysis.cpp.
References xilinx::AIE::describeStream(), xilinx::AIE::describeTilePort(), xilinx::AIE::RoutedStream::dst, xilinx::AIE::StreamEndpoint::port, xilinx::AIE::RoutedStream::src, and xilinx::AIE::StreamEndpoint::tile.
Referenced by explainBlock(), and xilinx::AIE::StreamConflicts::unavoidable().
| bool StreamDeadlockAnalysis::canBlock | ( | size_t | f, |
| size_t | g ) const |
Whether stream f, stalled at its receiver, can keep stream g from ever arriving: f carries more than its receiver takes in before waiting, and draining that receiver waits on g.
Definition at line 1252 of file AIEStreamDependencyAnalysis.cpp.
References silent().
Referenced by xilinx::AIE::StreamConflicts::explain(), and xilinx::AIE::StreamConflicts::unavoidable().
| std::string StreamDeadlockAnalysis::explainBlock | ( | size_t | f, |
| size_t | g ) const |
Why f can block g: the chain of waits from f's receiver to g, and which links of it are assumed for lack of information.
Requires canBlock(f, g).
Definition at line 1268 of file AIEStreamDependencyAnalysis.cpp.
References assumptions(), and xilinx::AIE::describeStream().
Referenced by xilinx::AIE::StreamConflicts::explain(), and xilinx::AIE::StreamConflicts::unavoidable().
| bool StreamDeadlockAnalysis::silent | ( | size_t | f | ) | const |
Whether stream f carries nothing, so it neither holds nor waits.
Definition at line 1261 of file AIEStreamDependencyAnalysis.cpp.
Referenced by canBlock().