Skip to content

Commit 636e592

Browse files
authored
Merge pull request #8476 from AcKoucher/mpl-redundant-connections
mpl: avoid redundant connections
2 parents 3a14b4d + a097a22 commit 636e592

File tree

3 files changed

+41
-29
lines changed

3 files changed

+41
-29
lines changed

src/mpl/src/clusterEngine.cpp

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1027,9 +1027,11 @@ void ClusteringEngine::buildDataFlowConnections()
10271027
for (int hops = 0; hops < max_num_of_hops_; hops++) {
10281028
std::set<int> sink_clusters = computeSinks(insts[hops]);
10291029
const float conn_weight = computeConnWeight(hops);
1030-
for (auto& sink : sink_clusters) {
1031-
Cluster* sink_cluster = tree_->maps.id_to_cluster.at(sink);
1032-
connect(driver_cluster, sink_cluster, conn_weight);
1030+
for (const int sink_id : sink_clusters) {
1031+
if (driver_id != sink_id) {
1032+
Cluster* sink_cluster = tree_->maps.id_to_cluster.at(sink_id);
1033+
connect(driver_cluster, sink_cluster, conn_weight);
1034+
}
10331035
}
10341036
}
10351037
}
@@ -1042,9 +1044,11 @@ void ClusteringEngine::buildDataFlowConnections()
10421044
for (int hops = 0; hops < max_num_of_hops_; hops++) {
10431045
std::set<int> sink_clusters = computeSinks(insts[hops]);
10441046
const float conn_weight = computeConnWeight(hops);
1045-
for (auto& sink : sink_clusters) {
1046-
Cluster* sink_cluster = tree_->maps.id_to_cluster.at(sink);
1047-
connect(driver_cluster, sink_cluster, conn_weight);
1047+
for (const int sink_id : sink_clusters) {
1048+
if (driver_id != sink_id) {
1049+
Cluster* sink_cluster = tree_->maps.id_to_cluster.at(sink_id);
1050+
connect(driver_cluster, sink_cluster, conn_weight);
1051+
}
10481052
}
10491053
}
10501054
}
@@ -1057,9 +1061,11 @@ void ClusteringEngine::buildDataFlowConnections()
10571061
for (int hops = 0; hops < max_num_of_hops_; hops++) {
10581062
std::set<int> sink_clusters = computeSinks(insts[hops]);
10591063
const float conn_weight = computeConnWeight(hops);
1060-
for (auto& sink : sink_clusters) {
1061-
Cluster* sink_cluster = tree_->maps.id_to_cluster.at(sink);
1062-
connect(driver_cluster, sink_cluster, conn_weight);
1064+
for (const int sink_id : sink_clusters) {
1065+
if (driver_id != sink_id) {
1066+
Cluster* sink_cluster = tree_->maps.id_to_cluster.at(sink_id);
1067+
connect(driver_cluster, sink_cluster, conn_weight);
1068+
}
10631069
}
10641070
}
10651071
}
@@ -1869,7 +1875,13 @@ bool ClusteringEngine::attemptMerge(Cluster* receiver, Cluster* incomer)
18691875
for (const auto& [cluster_id, connection_weight] : incomer_connections) {
18701876
Cluster* cluster = tree_->maps.id_to_cluster.at(cluster_id);
18711877
cluster->removeConnection(incomer_id);
1872-
cluster->addConnection(receiver, connection_weight);
1878+
1879+
// If the incomer and the receiver were connected, we forget that
1880+
// connection, otherwise we'll end up with the receiver connected
1881+
// to itself.
1882+
if (cluster_id != receiver->getId()) {
1883+
cluster->addConnection(receiver, connection_weight);
1884+
}
18731885
}
18741886
}
18751887

src/mpl/test/guides2.defok

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -339,16 +339,16 @@ TRACKS Y 140 DO 282 STEP 3200 LAYER metal9 ;
339339
TRACKS X 190 DO 282 STEP 3200 LAYER metal10 ;
340340
TRACKS Y 140 DO 282 STEP 3200 LAYER metal10 ;
341341
COMPONENTS 10 ;
342-
- U1 HM_100x400_4x4 + FIXED ( 665880 16610 ) S ;
343-
- U10 HM_100x100_1x1 + FIXED ( 233880 448450 ) S ;
344-
- U2 HM_100x100_1x1 + FIXED ( 17880 448450 ) S ;
345-
- U3 HM_100x100_1x1 + FIXED ( 233880 664610 ) S ;
346-
- U4 HM_100x100_1x1 + FIXED ( 233880 16550 ) FN ;
347-
- U5 HM_100x100_1x1 + FIXED ( 233880 232430 ) FN ;
342+
- U1 HM_100x400_4x4 + FIXED ( 665880 16590 ) FN ;
343+
- U10 HM_100x100_1x1 + FIXED ( 17880 448450 ) S ;
344+
- U2 HM_100x100_1x1 + FIXED ( 17880 16550 ) FN ;
345+
- U3 HM_100x100_1x1 + FIXED ( 17880 664470 ) FN ;
346+
- U4 HM_100x100_1x1 + FIXED ( 17880 232430 ) FN ;
347+
- U5 HM_100x100_1x1 + FIXED ( 233880 448450 ) S ;
348348
- U6 HM_100x400_4x4 + FIXED ( 449880 16590 ) N ;
349-
- U7 HM_100x100_1x1 + FIXED ( 17880 232430 ) N ;
350-
- U8 HM_100x100_1x1 + FIXED ( 17880 664610 ) S ;
351-
- U9 HM_100x100_1x1 + FIXED ( 17880 16550 ) FN ;
349+
- U7 HM_100x100_1x1 + FIXED ( 233880 16550 ) N ;
350+
- U8 HM_100x100_1x1 + FIXED ( 233880 664610 ) FS ;
351+
- U9 HM_100x100_1x1 + FIXED ( 233880 232430 ) N ;
352352
END COMPONENTS
353353
NETS 12 ;
354354
- w1 ( U2 I1 ) ( U1 O1 ) + USE SIGNAL ;

src/mpl/test/macro_only.defok

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -339,16 +339,16 @@ TRACKS Y 140 DO 282 STEP 3200 LAYER metal9 ;
339339
TRACKS X 190 DO 282 STEP 3200 LAYER metal10 ;
340340
TRACKS Y 140 DO 282 STEP 3200 LAYER metal10 ;
341341
COMPONENTS 10 ;
342-
- U1 HM_100x400_4x4 + FIXED ( 665880 16610 ) S ;
343-
- U10 HM_100x100_1x1 + FIXED ( 233880 16550 ) FN ;
344-
- U2 HM_100x100_1x1 + FIXED ( 449880 448450 ) S ;
345-
- U3 HM_100x100_1x1 + FIXED ( 449880 664610 ) S ;
346-
- U4 HM_100x100_1x1 + FIXED ( 449880 232430 ) FN ;
347-
- U5 HM_100x100_1x1 + FIXED ( 449880 16550 ) FN ;
348-
- U6 HM_100x400_4x4 + FIXED ( 17880 16610 ) S ;
349-
- U7 HM_100x100_1x1 + FIXED ( 233880 448450 ) S ;
350-
- U8 HM_100x100_1x1 + FIXED ( 233880 664610 ) S ;
351-
- U9 HM_100x100_1x1 + FIXED ( 233880 232430 ) FN ;
342+
- U1 HM_100x400_4x4 + FIXED ( 17880 16610 ) FS ;
343+
- U10 HM_100x100_1x1 + FIXED ( 449880 16550 ) N ;
344+
- U2 HM_100x100_1x1 + FIXED ( 233880 232430 ) N ;
345+
- U3 HM_100x100_1x1 + FIXED ( 233880 448450 ) FS ;
346+
- U4 HM_100x100_1x1 + FIXED ( 233880 664610 ) FS ;
347+
- U5 HM_100x100_1x1 + FIXED ( 233880 16550 ) N ;
348+
- U6 HM_100x400_4x4 + FIXED ( 665880 16610 ) FS ;
349+
- U7 HM_100x100_1x1 + FIXED ( 449880 232430 ) N ;
350+
- U8 HM_100x100_1x1 + FIXED ( 449880 448450 ) FS ;
351+
- U9 HM_100x100_1x1 + FIXED ( 449880 664610 ) FS ;
352352
END COMPONENTS
353353
NETS 12 ;
354354
- w1 ( U2 I1 ) ( U1 O1 ) + USE SIGNAL ;

0 commit comments

Comments
 (0)