From 6bc7709aa4bf8c4b6df01a72b55bfd5484b193d8 Mon Sep 17 00:00:00 2001 From: ilgeco Date: Tue, 21 Jul 2026 15:43:22 +0200 Subject: [PATCH] slighlty faster --- .../Scheduling/ComputeGraph.cpp | 9 ++- .../Scheduling/PeftScheduler.cpp | 60 ++++++++++++++++++- 2 files changed, 63 insertions(+), 6 deletions(-) diff --git a/src/PIM/Dialect/Spatial/Transforms/MergeComputeNodes/Scheduling/ComputeGraph.cpp b/src/PIM/Dialect/Spatial/Transforms/MergeComputeNodes/Scheduling/ComputeGraph.cpp index 25fbefd..93f80c4 100644 --- a/src/PIM/Dialect/Spatial/Transforms/MergeComputeNodes/Scheduling/ComputeGraph.cpp +++ b/src/PIM/Dialect/Spatial/Transforms/MergeComputeNodes/Scheduling/ComputeGraph.cpp @@ -195,9 +195,9 @@ struct PimsimSchedulerCostModel { }; std::optional getStaticTripCount(scf::ForOp loop); -[[maybe_unused]] Cost getOperationCost(Operation& op); +Cost getOperationCost(Operation& op); -[[maybe_unused]] Cost getRegionCost(Region& body) { +Cost getRegionCost(Region& body) { Cost cost = 0; for (Block& block : body) for (Operation& op : block) @@ -205,7 +205,7 @@ std::optional getStaticTripCount(scf::ForOp loop); return cost; } -[[maybe_unused]] Cost getOperationCost(Operation& op) { +Cost getOperationCost(Operation& op) { if (auto loop = dyn_cast(&op)) { std::optional tripCount = getStaticTripCount(loop); if (!tripCount) @@ -271,8 +271,7 @@ std::optional getStaticTripCount(scf::ForOp loop) { } Cost getComputeBodyCost(Region& body) { - constexpr Cost kOperationCost = 100; - return checkedMultiply(static_cast(countComputeBodyOperationInstances(body)), kOperationCost); + return getRegionCost(body); } uint64_t countOperationInstances(Operation& op) { diff --git a/src/PIM/Dialect/Spatial/Transforms/MergeComputeNodes/Scheduling/PeftScheduler.cpp b/src/PIM/Dialect/Spatial/Transforms/MergeComputeNodes/Scheduling/PeftScheduler.cpp index 6011cec..ef381d8 100644 --- a/src/PIM/Dialect/Spatial/Transforms/MergeComputeNodes/Scheduling/PeftScheduler.cpp +++ b/src/PIM/Dialect/Spatial/Transforms/MergeComputeNodes/Scheduling/PeftScheduler.cpp @@ -6,7 +6,9 @@ #include #include +#include #include +#include #include #include "PeftScheduler.hpp" @@ -133,6 +135,58 @@ void verifyOctTableSize(size_t nodeCount, size_t processorCount) { } } +std::vector planCrossbarReservations(const ComputeGraph& graph, + size_t processorCount, + size_t crossbarCapacity, + const MeshModel& mesh) { + std::vector weightedTasks; + for (size_t task = 0; task < graph.nodes.size(); ++task) + if (!graph.nodes[task].crossbarUsage.empty()) + weightedTasks.push_back(task); + llvm::sort(weightedTasks, [&](size_t lhs, size_t rhs) { + if (graph.nodes[lhs].crossbarUsage.size() != graph.nodes[rhs].crossbarUsage.size()) + return graph.nodes[lhs].crossbarUsage.size() > graph.nodes[rhs].crossbarUsage.size(); + return graph.nodes[lhs].originalOrder < graph.nodes[rhs].originalOrder; + }); + + std::vector reservations(processorCount); + std::vector