better spat computes merging
All checks were successful
Validate Operations / validate-operations (push) Successful in 21m14s
All checks were successful
Validate Operations / validate-operations (push) Successful in 21m14s
This commit is contained in:
@@ -457,6 +457,10 @@ int testDCPGraphDiamondDependencies() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// crossbarSize=4, crossbarCount=2 => capacity = 4*4*2 = 32.
|
||||
// Each task with crossbarUsage=1 needs footprint = 4*4 = 16, so at most 1 task
|
||||
// can fit per CPU (16+16 = 32 >= capacity). The scheduler must open a fresh CPU
|
||||
// for each task; all three end up on separate CPUs with their base weight.
|
||||
int testDCPGraphCrossbarExhaustion() {
|
||||
std::cout << "testDCPGraphCrossbarExhaustion:" << std::endl;
|
||||
configureDcpDotOutput();
|
||||
@@ -474,36 +478,35 @@ int testDCPGraphCrossbarExhaustion() {
|
||||
const std::vector<Weight> nodeWeights = {10, 10, 10};
|
||||
const std::vector<CrossbarUsage> nodeCrossbarUsage = {1, 1, 1};
|
||||
GraphDCP graph(nodeWeights, {}, nodeCrossbarUsage);
|
||||
graph.setMaxCpuCount(1);
|
||||
graph.setMaxCpuCount(3);
|
||||
graph.runDcp();
|
||||
|
||||
if (graph.cpuCount() != 1) {
|
||||
if (graph.cpuCount() != 3) {
|
||||
restoreCrossbarOptions();
|
||||
std::cerr << "Expected exactly 1 CPU with maxCpuCount=1, got " << graph.cpuCount() << "\n";
|
||||
std::cerr << "Expected 3 CPUs (one per task due to crossbar limit), got " << graph.cpuCount() << "\n";
|
||||
dumpDcpFailureArtifacts();
|
||||
return 1;
|
||||
}
|
||||
|
||||
auto scheduledTasks = graph.getScheduledTasks(0);
|
||||
if (scheduledTasks.size() != 3) {
|
||||
restoreCrossbarOptions();
|
||||
std::cerr << "Expected all three tasks to be scheduled on CPU 0\n";
|
||||
printCpuSchedule(graph, 0);
|
||||
dumpDcpFailureArtifacts();
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (scheduledTasks[0].weight != 10 || scheduledTasks[1].weight != std::numeric_limits<Weight>::max()
|
||||
|| scheduledTasks[2].weight != std::numeric_limits<Weight>::max()) {
|
||||
restoreCrossbarOptions();
|
||||
std::cerr << "Unexpected effective weights under crossbar exhaustion\n";
|
||||
printCpuSchedule(graph, 0);
|
||||
dumpDcpFailureArtifacts();
|
||||
return 1;
|
||||
int failures = 0;
|
||||
for (CPU c = 0; c < 3; c++) {
|
||||
auto scheduledTasks = graph.getScheduledTasks(c);
|
||||
if (scheduledTasks.size() != 1) {
|
||||
std::cerr << "Expected exactly 1 task on CPU " << c << ", got " << scheduledTasks.size() << "\n";
|
||||
printCpuSchedule(graph, c);
|
||||
failures++;
|
||||
continue;
|
||||
}
|
||||
if (scheduledTasks[0].weight != 10) {
|
||||
std::cerr << "Expected weight=10 on CPU " << c << ", got " << scheduledTasks[0].weight << "\n";
|
||||
printCpuSchedule(graph, c);
|
||||
failures++;
|
||||
}
|
||||
}
|
||||
|
||||
restoreCrossbarOptions();
|
||||
return 0;
|
||||
if (failures) dumpDcpFailureArtifacts();
|
||||
return failures;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
Reference in New Issue
Block a user