From 68a35219781b4270da94442f487479dcfbade4b7 Mon Sep 17 00:00:00 2001 From: ilgeco Date: Tue, 19 May 2026 14:52:54 +0200 Subject: [PATCH] Perft topological fix --- .../Scheduling/PeftScheduler.cpp | 97 +++++++++++++------ 1 file changed, 68 insertions(+), 29 deletions(-) diff --git a/src/PIM/Dialect/Spatial/Transforms/MergeComputeNodes/Scheduling/PeftScheduler.cpp b/src/PIM/Dialect/Spatial/Transforms/MergeComputeNodes/Scheduling/PeftScheduler.cpp index ef71f8b..d051f80 100644 --- a/src/PIM/Dialect/Spatial/Transforms/MergeComputeNodes/Scheduling/PeftScheduler.cpp +++ b/src/PIM/Dialect/Spatial/Transforms/MergeComputeNodes/Scheduling/PeftScheduler.cpp @@ -22,7 +22,7 @@ struct ScheduledTask { size_t slot = 0; }; -std::vector> buildReverseLevels(const ComputeGraph &graph) { +std::vector> buildReverseLevels(const ComputeGraph& graph) { std::vector remainingSuccessors(graph.nodes.size(), 0); std::queue readySinks; std::vector> reverseLevels; @@ -43,8 +43,7 @@ std::vector> buildReverseLevels(const ComputeGraph &graph) { readySinks.pop(); levelNodes.push_back(node); ++levelizedCount; - for (const auto &[pred, weight] : graph.predecessors[node]) { - (void) weight; + for (const auto& [pred, weight] : graph.predecessors[node]) { assert(remainingSuccessors[pred] > 0 && "remaining successor count underflow"); if (--remainingSuccessors[pred] == 0) readySinks.push(pred); @@ -79,7 +78,7 @@ void verifyOctTableSize(size_t nodeCount, size_t processorCount) { } // namespace -MergeScheduleResult runPeftScheduler(const ComputeGraph &graph, const PeftScheduleOptions &options) { +MergeScheduleResult runPeftScheduler(const ComputeGraph& graph, const PeftScheduleOptions& options) { const size_t nodeCount = graph.nodes.size(); const size_t processorCount = options.processorCount; if (processorCount == 0) @@ -88,18 +87,23 @@ MergeScheduleResult runPeftScheduler(const ComputeGraph &graph, const PeftSchedu verifyOctTableSize(nodeCount, processorCount); std::vector> reverseLevels = buildReverseLevels(graph); + // MOCK: Replace this with your actual heterogeneous cost lookup. + // If graph.nodes[task] is modified to hold a vector of weights per processor, access it here. + auto getComputeCost = [&](size_t task, size_t processor) -> Time { return graph.nodes[task].weight; }; + std::vector