Skip to content

Commit bffeed0

Browse files
committed
mpl: create struct and new functions to avoid code duplication
Signed-off-by: Arthur Koucher <[email protected]>
1 parent 6db0147 commit bffeed0

File tree

2 files changed

+50
-31
lines changed

2 files changed

+50
-31
lines changed

src/mpl/src/clusterEngine.cpp

Lines changed: 42 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2018,49 +2018,60 @@ void ClusteringEngine::clearConnections()
20182018

20192019
void ClusteringEngine::buildNetListConnections()
20202020
{
2021-
const float connection_weight = 1.0;
2022-
2023-
for (odb::dbNet* net : block_->getNets()) {
2024-
if (!isValidNet(net)) {
2021+
for (odb::dbNet* db_net : block_->getNets()) {
2022+
if (!isValidNet(db_net)) {
20252023
continue;
20262024
}
20272025

2028-
int driver_cluster_id = -1;
2029-
std::vector<int> load_clusters_ids;
2026+
Net net = buildNet(db_net);
2027+
connectClusters(net);
2028+
}
2029+
}
20302030

2031-
for (odb::dbITerm* iterm : net->getITerms()) {
2032-
odb::dbInst* inst = iterm->getInst();
2033-
const int cluster_id = tree_->maps.inst_to_cluster_id.at(inst);
2031+
ClusteringEngine::Net ClusteringEngine::buildNet(odb::dbNet* db_net) const
2032+
{
2033+
Net net;
20342034

2035-
if (iterm->getIoType() == odb::dbIoType::OUTPUT) {
2036-
driver_cluster_id = cluster_id;
2037-
} else {
2038-
load_clusters_ids.push_back(cluster_id);
2039-
}
2035+
for (odb::dbITerm* iterm : db_net->getITerms()) {
2036+
odb::dbInst* inst = iterm->getInst();
2037+
const int cluster_id = tree_->maps.inst_to_cluster_id.at(inst);
2038+
2039+
if (iterm->getIoType() == odb::dbIoType::OUTPUT) {
2040+
net.driver_id = cluster_id;
2041+
} else {
2042+
net.loads_ids.push_back(cluster_id);
20402043
}
2044+
}
20412045

2042-
if (tree_->io_pads.empty()) {
2043-
for (odb::dbBTerm* bterm : net->getBTerms()) {
2044-
const int cluster_id = tree_->maps.bterm_to_cluster_id.at(bterm);
2046+
if (tree_->io_pads.empty()) {
2047+
for (odb::dbBTerm* bterm : db_net->getBTerms()) {
2048+
const int cluster_id = tree_->maps.bterm_to_cluster_id.at(bterm);
20452049

2046-
if (bterm->getIoType() == odb::dbIoType::INPUT) {
2047-
driver_cluster_id = cluster_id;
2048-
} else {
2049-
load_clusters_ids.push_back(cluster_id);
2050-
}
2050+
if (bterm->getIoType() == odb::dbIoType::INPUT) {
2051+
net.driver_id = cluster_id;
2052+
} else {
2053+
net.loads_ids.push_back(cluster_id);
20512054
}
20522055
}
2056+
}
2057+
2058+
return net;
2059+
}
2060+
2061+
void ClusteringEngine::connectClusters(const Net& net)
2062+
{
2063+
if (net.driver_id == -1 || net.loads_ids.empty()
2064+
|| net.loads_ids.size() >= tree_->large_net_threshold) {
2065+
return;
2066+
}
20532067

2054-
if (driver_cluster_id != -1 && !load_clusters_ids.empty()
2055-
&& load_clusters_ids.size() < tree_->large_net_threshold) {
2056-
Cluster* driver_cluster = tree_->maps.id_to_cluster.at(driver_cluster_id);
2068+
const float connection_weight = 1.0;
2069+
Cluster* driver = tree_->maps.id_to_cluster.at(net.driver_id);
20572070

2058-
for (const int load_cluster_id : load_clusters_ids) {
2059-
if (load_cluster_id != driver_cluster_id) {
2060-
Cluster* load_cluster = tree_->maps.id_to_cluster.at(load_cluster_id);
2061-
connect(driver_cluster, load_cluster, connection_weight);
2062-
}
2063-
}
2071+
for (const int load_cluster_id : net.loads_ids) {
2072+
if (load_cluster_id != net.driver_id) {
2073+
Cluster* load = tree_->maps.id_to_cluster.at(load_cluster_id);
2074+
connect(driver, load, connection_weight);
20642075
}
20652076
}
20662077
}

src/mpl/src/clusterEngine.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,12 @@ class ClusteringEngine
169169
private:
170170
using UniqueClusterQueue = std::queue<std::unique_ptr<Cluster>>;
171171

172+
struct Net
173+
{
174+
int driver_id{-1};
175+
std::vector<int> loads_ids;
176+
};
177+
172178
void init();
173179
Metrics* computeModuleMetrics(odb::dbModule* module);
174180
std::string generateMacroAndCoreDimensionsTable(const HardMacro* hard_macro,
@@ -249,6 +255,8 @@ class ClusteringEngine
249255
void clearConnections();
250256
void buildNetListConnections();
251257
void buildDataFlowConnections();
258+
Net buildNet(odb::dbNet* db_net) const;
259+
void connectClusters(const Net& net);
252260
void connect(Cluster* a, Cluster* b, float connection_weight) const;
253261

254262
// Methods for data flow

0 commit comments

Comments
 (0)