No extract no more
Validate Operations / validate-operations (push) Has been cancelled

This commit is contained in:
ilgeco
2026-05-25 18:19:43 +02:00
parent b79c333c6c
commit bdc4ca33f3
9 changed files with 160 additions and 81 deletions
@@ -5,6 +5,7 @@
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/FormatVariadic.h"
#include <functional>
#include <limits>
#include <queue>
#include <vector>
@@ -177,20 +178,25 @@ MergeScheduleResult runPeftScheduler(const ComputeGraph& graph, const PeftSchedu
Time bestEst = 0;
Time bestEft = 0;
Time bestOeft = std::numeric_limits<Time>::max();
unsigned int bestOverlapWeight = 0;
bool crossbarRejected = false;
auto crossbarsAreContainedInProcessor = [&processorCrossbars](mlir::Value nodeCrossbar, size_t processor) {
return llvm::is_contained(processorCrossbars[processor], nodeCrossbar);
};
for (size_t processor = 0; processor < processorCount; ++processor) {
auto crossbarsAreContained = std::bind(crossbarsAreContainedInProcessor, std::placeholders::_1, processor);
if (graph.nodes[task].crossbarUsage.size() != 0
&& !llvm::all_of(graph.nodes[task].crossbarUsage,
[&processorCrossbars, processor](mlir::Value nodeCrossbar) {
return llvm::is_contained(processorCrossbars[processor], nodeCrossbar);
})
&& !llvm::all_of(graph.nodes[task].crossbarUsage, crossbarsAreContained)
&& addOrMax(processorCrossbars[processor].size(), graph.nodes[task].crossbarUsage.size())
> options.crossbarCapacity) {
crossbarRejected = true;
continue;
}
crossbarRejected = true;
continue;
}
unsigned int overlapWeight =
llvm::count_if(graph.nodes[task].crossbarUsage, crossbarsAreContained);
Time dataReady = 0;
for (const auto& [pred, comm] : graph.predecessors[task]) {
@@ -224,12 +230,19 @@ MergeScheduleResult runPeftScheduler(const ComputeGraph& graph, const PeftSchedu
Time oeft = addOrMax(eft, oct[task * processorCount + processor]);
if (oeft < bestOeft || (oeft == bestOeft && eft < bestEft)
|| (oeft == bestOeft && eft == bestEft && est < bestEst)
|| (oeft == bestOeft && eft == bestEft && est == bestEst && processor < bestProcessor)) {
|| (oeft == bestOeft && eft == bestEft && est < bestEst)) {
bestProcessor = processor;
bestEst = est;
bestEft = eft;
bestOeft = oeft;
bestOverlapWeight = overlapWeight;
}
else if (oeft == bestOeft && eft == bestEft && est < bestEst && overlapWeight < bestOverlapWeight) {
bestProcessor = processor;
bestEst = est;
bestEft = eft;
bestOeft = oeft;
bestOverlapWeight = overlapWeight;
}
}