73 : coresPerCol(coresPerCol) {}
77 mlir::LogicalResult
place(DeviceOp device)
override;
79 llvm::StringRef
getName()
const override {
return "sequential_placer"; }
82 std::optional<int> coresPerCol;
83 int deviceCoresPerCol = 0;
87 void limitCoresPerColumn(
int maxCoresPerCol,
int numColumns);
89 void buildObjectFifoGroups(
90 llvm::SmallVector<ObjectFifoCreateOp> &objectFifos,
91 llvm::SmallVector<ObjectFifoLinkOp> &objectFifoLinks,
92 llvm::DenseMap<
int, llvm::SmallVector<ObjectFifoCreateOp>> &groupToFifos,
93 llvm::DenseMap<
int, llvm::SmallVector<LogicalTileOp>>
94 &groupToLogicalTiles);
96 std::optional<TileID> findTileWithCapacity(
int targetCol,
97 std::vector<TileID> &tiles,
98 int requiredInputChannels,
99 int requiredOutputChannels,
100 AIETileType requestedType);
102 void updateChannelUsage(
TileID tile,
bool isOutput,
int numChannels);
104 bool hasAvailableChannels(
TileID tile,
int inputChannels,
int outputChannels);
106 mlir::LogicalResult validateAndUpdateChannelUsage(
107 LogicalTileOp logicalTile,
TileID tile,
108 const llvm::DenseMap<mlir::Operation *, std::pair<int, int>>
109 &channelRequirements,
112 llvm::DenseMap<mlir::Operation *, std::pair<int, int>>
113 buildChannelRequirements(
114 llvm::SmallVector<ObjectFifoCreateOp> &objectFifos,
115 llvm::SmallVector<ObjectFifoLinkOp> &objectFifoLinks);