Skip to content

Commit dbe7a4e

Browse files
authored
Merge pull request #6967 from AcKoucher/mpl-use-best-result
mpl: always use best valid result
2 parents 2ccbdc5 + 952779c commit dbe7a4e

15 files changed

+3622
-3615
lines changed

src/mpl/src/SimulatedAnnealingCore.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -717,7 +717,7 @@ void SimulatedAnnealingCore<T>::fastSA()
717717
notch_weight_ = 0.0;
718718

719719
if (isValid()) {
720-
updateBestValidResult();
720+
updateBestValidResult(cost);
721721
}
722722

723723
while (step <= max_num_step_) {
@@ -729,7 +729,7 @@ void SimulatedAnnealingCore<T>::fastSA()
729729
= cost < pre_cost
730730
|| best_valid_result_.sequence_pair.pos_sequence.empty();
731731
if (isValid() && keep_result) {
732-
updateBestValidResult();
732+
updateBestValidResult(cost);
733733
}
734734

735735
delta_cost = cost - pre_cost;
@@ -763,13 +763,14 @@ void SimulatedAnnealingCore<T>::fastSA()
763763
}
764764
calPenalty();
765765

766-
if (!isValid() && !best_valid_result_.sequence_pair.pos_sequence.empty()) {
766+
if (!best_valid_result_.sequence_pair.pos_sequence.empty()
767+
&& (!isValid() || best_valid_result_.cost < calNormCost())) {
767768
useBestValidResult();
768769
}
769770
}
770771

771772
template <class T>
772-
void SimulatedAnnealingCore<T>::updateBestValidResult()
773+
void SimulatedAnnealingCore<T>::updateBestValidResult(const float cost)
773774
{
774775
best_valid_result_.sequence_pair.pos_sequence = pos_seq_;
775776
best_valid_result_.sequence_pair.neg_sequence = neg_seq_;
@@ -780,6 +781,8 @@ void SimulatedAnnealingCore<T>::updateBestValidResult()
780781
best_valid_result_.macro_id_to_width[macro_id] = macro.getWidth();
781782
}
782783
}
784+
785+
best_valid_result_.cost = cost;
783786
}
784787

785788
template <class T>

src/mpl/src/SimulatedAnnealingCore.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ class SimulatedAnnealingCore
9090
protected:
9191
struct Result
9292
{
93+
float cost{std::numeric_limits<float>::max()};
9394
SequencePair sequence_pair;
9495
// [Only for SoftMacro] The same sequence pair can represent different
9596
// floorplan arrangements depending on the macros' shapes.
@@ -102,7 +103,7 @@ class SimulatedAnnealingCore
102103
const BoundaryRegionList& regions);
103104
void initSequencePair();
104105
void setDieArea(const Rect& die_area);
105-
void updateBestValidResult();
106+
void updateBestValidResult(float cost);
106107
void useBestValidResult();
107108

108109
virtual float calNormCost() const = 0;

src/mpl/test/boundary_push2.defok

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,8 @@ TRACKS Y 140 DO 282 STEP 3200 LAYER metal9 ;
183183
TRACKS X 190 DO 282 STEP 3200 LAYER metal10 ;
184184
TRACKS Y 140 DO 282 STEP 3200 LAYER metal10 ;
185185
COMPONENTS 54 ;
186-
- MACRO_1 HM_100x100_1x1 + FIXED ( 600 221810 ) S ;
187-
- MACRO_2 HM_100x100_1x1 + FIXED ( 600 20770 ) FS ;
186+
- MACRO_1 HM_100x100_1x1 + FIXED ( 600 20770 ) S ;
187+
- MACRO_2 HM_100x100_1x1 + FIXED ( 600 221810 ) FS ;
188188
- MACRO_3 HM_100x100_1x1 + FIXED ( 239440 221810 ) FS ;
189189
- MACRO_4 HM_100x100_1x1 + FIXED ( 239440 20770 ) FS ;
190190
- _001_ DFF_X1 + PLACED ( 15591 18600 ) N ;

src/mpl/test/boundary_push3.defok

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,10 +183,10 @@ TRACKS Y 140 DO 282 STEP 3200 LAYER metal9 ;
183183
TRACKS X 190 DO 282 STEP 3200 LAYER metal10 ;
184184
TRACKS Y 140 DO 282 STEP 3200 LAYER metal10 ;
185185
COMPONENTS 54 ;
186-
- MACRO_1 HM_100x100_1x1 + FIXED ( 220620 610 ) S ;
186+
- MACRO_1 HM_100x100_1x1 + FIXED ( 220620 241970 ) S ;
187187
- MACRO_2 HM_100x100_1x1 + FIXED ( 19420 241970 ) FS ;
188188
- MACRO_3 HM_100x100_1x1 + FIXED ( 19420 610 ) FS ;
189-
- MACRO_4 HM_100x100_1x1 + FIXED ( 220620 241970 ) FS ;
189+
- MACRO_4 HM_100x100_1x1 + FIXED ( 220620 610 ) FS ;
190190
- _001_ DFF_X1 + PLACED ( 15590 18601 ) N ;
191191
- _002_ DFF_X1 + PLACED ( 15590 18601 ) N ;
192192
- _003_ DFF_X1 + PLACED ( 15590 18601 ) N ;

0 commit comments

Comments
 (0)