Skip to content

Commit eb3857b

Browse files
authored
Merge pull request #7862 from The-OpenROAD-Project-staging/mpl-tree-size-and-mixed-split
mpl: simplify mixed leaves split and set tree level before level thresholds
2 parents bae244a + fc375cf commit eb3857b

File tree

7 files changed

+1620
-1658
lines changed

7 files changed

+1620
-1658
lines changed

src/mpl/src/clusterEngine.cpp

Lines changed: 17 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,21 @@ void ClusteringEngine::setBaseThresholds()
311311
{
312312
if (tree_->base_max_macro <= 0 || tree_->base_min_macro <= 0
313313
|| tree_->base_max_std_cell <= 0 || tree_->base_min_std_cell <= 0) {
314+
// From original implementation: Reset maximum level based on number
315+
// of macros.
316+
const int min_num_macros_for_multilevel = 150;
317+
if (design_metrics_->getNumMacro() <= min_num_macros_for_multilevel) {
318+
tree_->max_level = 1;
319+
debugPrint(
320+
logger_,
321+
MPL,
322+
"multilevel_autoclustering",
323+
1,
324+
"Number of macros is below {}. Resetting number of levels to {}",
325+
min_num_macros_for_multilevel,
326+
tree_->max_level);
327+
}
328+
314329
// Set base values for std cell lower/upper thresholds
315330
const int min_num_std_cells_allowed = 1000;
316331
tree_->base_min_std_cell
@@ -331,21 +346,6 @@ void ClusteringEngine::setBaseThresholds()
331346
}
332347
tree_->base_max_macro
333348
= tree_->base_min_macro * tree_->cluster_size_ratio / 2.0;
334-
335-
// From original implementation: Reset maximum level based on number
336-
// of macros.
337-
const int min_num_macros_for_multilevel = 150;
338-
if (design_metrics_->getNumMacro() <= min_num_macros_for_multilevel) {
339-
tree_->max_level = 1;
340-
debugPrint(
341-
logger_,
342-
MPL,
343-
"multilevel_autoclustering",
344-
1,
345-
"Number of macros is below {}. Resetting number of levels to {}",
346-
min_num_macros_for_multilevel,
347-
tree_->max_level);
348-
}
349349
}
350350

351351
// Set sizes for root
@@ -1978,14 +1978,7 @@ void ClusteringEngine::breakMixedLeaves(
19781978
// A1 A2 A3
19791979
void ClusteringEngine::breakMixedLeaf(Cluster* mixed_leaf)
19801980
{
1981-
Cluster* parent = mixed_leaf;
1982-
const float macro_dominated_cluster_ratio = 0.01;
1983-
1984-
// Split by replacement if macro dominated.
1985-
if (mixed_leaf->getNumStdCell() * macro_dominated_cluster_ratio
1986-
< mixed_leaf->getNumMacro()) {
1987-
parent = mixed_leaf->getParent();
1988-
}
1981+
Cluster* parent = mixed_leaf->getParent();
19891982

19901983
mapMacroInCluster2HardMacro(mixed_leaf);
19911984

@@ -2027,12 +2020,7 @@ void ClusteringEngine::breakMixedLeaf(Cluster* mixed_leaf)
20272020
// Never use SetInstProperty in the following lines for the reason above!
20282021
std::vector<int> virtual_conn_clusters;
20292022

2030-
// Deal with the std cells
2031-
if (parent == mixed_leaf) {
2032-
addStdCellClusterToSubTree(parent, mixed_leaf, virtual_conn_clusters);
2033-
} else {
2034-
replaceByStdCellCluster(mixed_leaf, virtual_conn_clusters);
2035-
}
2023+
replaceByStdCellCluster(mixed_leaf, virtual_conn_clusters);
20362024

20372025
// Deal with the macros
20382026
for (int i = 0; i < macro_class.size(); i++) {
@@ -2256,29 +2244,6 @@ void ClusteringEngine::groupSingleMacroClusters(
22562244
}
22572245
}
22582246

2259-
void ClusteringEngine::addStdCellClusterToSubTree(
2260-
Cluster* parent,
2261-
Cluster* mixed_leaf,
2262-
std::vector<int>& virtual_conn_clusters)
2263-
{
2264-
std::string std_cell_cluster_name = mixed_leaf->getName();
2265-
auto std_cell_cluster
2266-
= std::make_unique<Cluster>(id_, std_cell_cluster_name, logger_);
2267-
2268-
std_cell_cluster->copyInstances(*mixed_leaf);
2269-
std_cell_cluster->clearLeafMacros();
2270-
std_cell_cluster->setClusterType(StdCellCluster);
2271-
2272-
setClusterMetrics(std_cell_cluster.get());
2273-
2274-
virtual_conn_clusters.push_back(std_cell_cluster->getId());
2275-
2276-
tree_->maps.id_to_cluster[id_++] = std_cell_cluster.get();
2277-
std_cell_cluster->setParent(parent);
2278-
parent->addChild(std::move(std_cell_cluster));
2279-
}
2280-
2281-
// We don't modify the physical hierarchy when spliting by replacement
22822247
void ClusteringEngine::replaceByStdCellCluster(
22832248
Cluster* mixed_leaf,
22842249
std::vector<int>& virtual_conn_clusters)

src/mpl/src/clusterEngine.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -230,9 +230,6 @@ class ClusteringEngine
230230
const std::vector<int>& signature_class,
231231
std::vector<int>& interconn_class,
232232
std::vector<int>& macro_class);
233-
void addStdCellClusterToSubTree(Cluster* parent,
234-
Cluster* mixed_leaf,
235-
std::vector<int>& virtual_conn_clusters);
236233
void replaceByStdCellCluster(Cluster* mixed_leaf,
237234
std::vector<int>& virtual_conn_clusters);
238235

0 commit comments

Comments
 (0)