force selected pipeline stages in throughput mode
Validate Operations / validate-operations (push) Has been cancelled
Validate Operations / validate-operations (push) Has been cancelled
increase throughput scheduler budget add experimental throughput auto mode
This commit is contained in:
@@ -290,7 +290,8 @@ static void testTransposeCost() {
|
||||
auto graph = buildCheckedComputeGraph(function, target);
|
||||
MergeScheduleResult schedule;
|
||||
std::string error;
|
||||
assert(succeeded(runPipelineScheduler(graph, schedule, 2, target, error)));
|
||||
assert(succeeded(packPipelineSchedule(graph, std::vector<size_t>(graph.nodes.size()),
|
||||
{target.processorCount}, target, schedule, error)));
|
||||
assert(schedule.costs.totalWorkNs == expected);
|
||||
assert(schedule.costs.maximumCoreWorkNs == expected);
|
||||
}
|
||||
@@ -610,14 +611,15 @@ static void testPipelinePackingCapacity() {
|
||||
target.interProcessorLatencyNs.assign(16, 0);
|
||||
MergeScheduleResult schedule;
|
||||
std::string error;
|
||||
assert(succeeded(runPipelineScheduler(graph, schedule, 2, target, error)));
|
||||
assert(succeeded(packPipelineSchedule(graph, std::vector<size_t>(graph.nodes.size()),
|
||||
{target.processorCount}, target, schedule, error)));
|
||||
std::vector<Cost> loads(4);
|
||||
for (const auto &node : graph.nodes) {
|
||||
size_t core = schedule.computeToCpuMap.lookup(node.instance);
|
||||
assert(schedule.processorStages[core] == 0);
|
||||
loads[core] += node.cost;
|
||||
}
|
||||
assert(*std::max_element(loads.begin(), loads.end()) == 20);
|
||||
assert(*std::max_element(loads.begin(), loads.end()) == 10);
|
||||
}
|
||||
|
||||
static void testRepeatedResidentWeightPacking() {
|
||||
@@ -659,7 +661,10 @@ static void testRepeatedResidentWeightPacking() {
|
||||
target.interProcessorLatencyNs[core * target.processorCount + core] = 0;
|
||||
MergeScheduleResult schedule;
|
||||
std::string error;
|
||||
assert(succeeded(runPipelineScheduler(graph, schedule, stages, target, error)));
|
||||
assert(failed(runPipelineScheduler(graph, schedule, stages, target, error)));
|
||||
assert(error.find("compute operation groups") != std::string::npos);
|
||||
assert(succeeded(packPipelineSchedule(graph, std::vector<size_t>(graph.nodes.size()),
|
||||
{target.processorCount}, target, schedule, error)));
|
||||
assert(schedule.dominanceOrderCompute.size() == graph.nodes.size());
|
||||
std::vector<ResidentWeightSet> residents(target.processorCount);
|
||||
for (const auto &node : graph.nodes) {
|
||||
@@ -1747,7 +1752,9 @@ static void testPipelineSharedMemory() {
|
||||
graph.publicationTransfers.push_back({0, 3, {}, 0, {}, 4096, 1});
|
||||
MergeScheduleResult constrained;
|
||||
std::string error;
|
||||
assert(mlir::succeeded(runPipelineScheduler(graph, constrained, 4, target, error)));
|
||||
assert(mlir::failed(runPipelineScheduler(graph, constrained, 4, target, error)));
|
||||
assert(error.find("requested depth domain") != std::string::npos);
|
||||
assert(mlir::succeeded(runPipelineScheduler(graph, constrained, 2, target, error)));
|
||||
auto assignment = stages(constrained);
|
||||
for (size_t task = 0; task < graph.nodes.size(); ++task)
|
||||
for (const auto &[predecessor, transfer] : graph.predecessors[task])
|
||||
@@ -1969,10 +1976,10 @@ int main() {
|
||||
ComputeGraph emptyGraph;
|
||||
MergeScheduleResult emptySchedule;
|
||||
emptySchedule.processorCount = 4;
|
||||
assert(mlir::succeeded(runPipelineScheduler(
|
||||
assert(mlir::failed(runPipelineScheduler(
|
||||
emptyGraph, emptySchedule, 2, physical, pipelineError)));
|
||||
assert(emptySchedule.processorCount == physical.processorCount);
|
||||
assert(emptySchedule.processorStages == std::vector<size_t>({0, 0, 1, 1}));
|
||||
assert(pipelineError.find("compute operation groups") != std::string::npos);
|
||||
|
||||
MergeScheduleResult pipelineSchedule = physicalSchedule;
|
||||
assert(mlir::succeeded(runPipelineScheduler(
|
||||
@@ -2005,6 +2012,10 @@ int main() {
|
||||
fourStagePhysical.interProcessorLatencyNs[core * 8 + core] = 0;
|
||||
MergeScheduleResult fourStageSchedule = physicalSchedule;
|
||||
fourStageSchedule.processorCount = 8;
|
||||
assert(mlir::failed(runPipelineScheduler(
|
||||
graph, fourStageSchedule, 4, fourStagePhysical, pipelineError)));
|
||||
graph.successors[0].pop_back();
|
||||
graph.predecessors[5].pop_back();
|
||||
assert(mlir::succeeded(runPipelineScheduler(
|
||||
graph, fourStageSchedule, 4, fourStagePhysical, pipelineError)));
|
||||
for (size_t task = 0; task < graph.nodes.size(); ++task)
|
||||
|
||||
Reference in New Issue
Block a user