Skip to content

Commit 8f716dc

Browse files
committed
mpl: skip random number generation when accepting an improvement
Slightly changes the results as the sequence of random numbers changes. Signed-off-by: Matt Liberty <[email protected]>
1 parent 6a23a4b commit 8f716dc

11 files changed

+850
-846
lines changed

src/mpl/src/SimulatedAnnealingCore.cpp

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -707,7 +707,6 @@ void SimulatedAnnealingCore<T>::fastSA()
707707
{
708708
float cost = calNormCost();
709709
float pre_cost = cost;
710-
float delta_cost = 0.0;
711710
int step = 1;
712711
float temperature = init_temperature_;
713712
const float min_t = 1e-10;
@@ -728,21 +727,24 @@ void SimulatedAnnealingCore<T>::fastSA()
728727
perturb();
729728
cost = calNormCost();
730729

731-
const bool keep_result
732-
= cost < pre_cost
733-
|| best_valid_result_.sequence_pair.pos_sequence.empty();
730+
const bool keep_result = cost < pre_cost || best_valid_result_.empty();
734731
if (isValid() && keep_result) {
735732
updateBestValidResult(cost);
736733
}
737734

738-
delta_cost = cost - pre_cost;
739-
const float num = distribution_(generator_);
740-
const float prob
741-
= (delta_cost > 0.0) ? std::exp((-1) * delta_cost / temperature) : 1;
742-
if (num < prob) {
735+
const float delta_cost = cost - pre_cost;
736+
if (delta_cost <= 0) {
737+
// always accept improvements
743738
pre_cost = cost;
744739
} else {
745-
restoreState();
740+
// probabilistically accept degradations for hill climbing
741+
const float num = distribution_(generator_);
742+
const float prob = std::exp(-delta_cost / temperature);
743+
if (num < prob) {
744+
pre_cost = cost;
745+
} else {
746+
restoreState();
747+
}
746748
}
747749
}
748750

@@ -766,7 +768,7 @@ void SimulatedAnnealingCore<T>::fastSA()
766768
}
767769
calPenalty();
768770

769-
if (!best_valid_result_.sequence_pair.pos_sequence.empty()
771+
if (!best_valid_result_.empty()
770772
&& (!isValid() || best_valid_result_.cost < calNormCost())) {
771773
useBestValidResult();
772774
}

src/mpl/src/SimulatedAnnealingCore.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ class SimulatedAnnealingCore
9292
protected:
9393
struct Result
9494
{
95+
bool empty() const { return sequence_pair.pos_sequence.empty(); }
96+
9597
float cost{std::numeric_limits<float>::max()};
9698
SequencePair sequence_pair;
9799
// [Only for SoftMacro] The same sequence pair can represent different

src/mpl/test/boundary_push1.defok

Lines changed: 4 additions & 4 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 4 ;
186-
- MACRO_1 HM_100x100_1x1 + FIXED ( 600 610 ) FS ;
187-
- MACRO_2 HM_100x100_1x1 + FIXED ( 600 241970 ) FS ;
188-
- MACRO_3 HM_100x100_1x1 + FIXED ( 239440 241970 ) FS ;
189-
- MACRO_4 HM_100x100_1x1 + FIXED ( 239440 610 ) FS ;
186+
- MACRO_1 HM_100x100_1x1 + FIXED ( 239440 610 ) S ;
187+
- MACRO_2 HM_100x100_1x1 + FIXED ( 600 241970 ) S ;
188+
- MACRO_3 HM_100x100_1x1 + FIXED ( 600 610 ) S ;
189+
- MACRO_4 HM_100x100_1x1 + FIXED ( 239440 241970 ) S ;
190190
END COMPONENTS
191191
PINS 4 ;
192192
- io_1 + NET io_1 + DIRECTION INPUT + USE SIGNAL ;

src/mpl/test/boundary_push2.defok

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,9 +183,9 @@ 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 20770 ) S ;
187-
- MACRO_2 HM_100x100_1x1 + FIXED ( 239440 221810 ) FS ;
188-
- MACRO_3 HM_100x100_1x1 + FIXED ( 600 221810 ) FS ;
186+
- MACRO_1 HM_100x100_1x1 + FIXED ( 600 20770 ) FS ;
187+
- MACRO_2 HM_100x100_1x1 + FIXED ( 600 221810 ) FS ;
188+
- MACRO_3 HM_100x100_1x1 + FIXED ( 239440 221810 ) FS ;
189189
- MACRO_4 HM_100x100_1x1 + FIXED ( 239440 20770 ) FS ;
190190
- _001_ DFF_X1 + PLACED ( 216790 219801 ) N ;
191191
- _002_ DFF_X1 + PLACED ( 216790 219801 ) N ;

src/mpl/test/boundary_push3.defok

Lines changed: 4 additions & 4 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 ;
187-
- MACRO_2 HM_100x100_1x1 + FIXED ( 19420 610 ) FS ;
188-
- MACRO_3 HM_100x100_1x1 + FIXED ( 19420 241970 ) FS ;
189-
- MACRO_4 HM_100x100_1x1 + FIXED ( 220620 241970 ) FS ;
186+
- MACRO_1 HM_100x100_1x1 + FIXED ( 220620 241970 ) FS ;
187+
- MACRO_2 HM_100x100_1x1 + FIXED ( 220620 610 ) FS ;
188+
- MACRO_3 HM_100x100_1x1 + FIXED ( 19420 610 ) FS ;
189+
- MACRO_4 HM_100x100_1x1 + FIXED ( 19420 241970 ) FS ;
190190
- _001_ DFF_X1 + PLACED ( 216790 219801 ) N ;
191191
- _002_ DFF_X1 + PLACED ( 216790 219801 ) N ;
192192
- _003_ DFF_X1 + PLACED ( 216790 219801 ) N ;

src/mpl/test/centralization1.defok

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ TRACKS Y 140 DO 282 STEP 3200 LAYER metal9 ;
241241
TRACKS X 190 DO 282 STEP 3200 LAYER metal10 ;
242242
TRACKS Y 140 DO 282 STEP 3200 LAYER metal10 ;
243243
COMPONENTS 1 ;
244-
- MACRO_1 HM_100x100_1x1 + FIXED ( 202100 202490 ) FS ;
244+
- MACRO_1 HM_100x100_1x1 + FIXED ( 202100 202490 ) S ;
245245
END COMPONENTS
246246
PINS 1 ;
247247
- io_1 + NET io_1 + DIRECTION INPUT + USE SIGNAL ;

src/mpl/test/clocked_macro.defok

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ 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 1 ;
342-
- U1 CLOCKED_MACRO + FIXED ( 17880 16610 ) FS ;
342+
- U1 CLOCKED_MACRO + FIXED ( 17880 16610 ) S ;
343343
END COMPONENTS
344344
NETS 3 ;
345345
- clk ( U1 CK ) + USE SIGNAL ;

src/mpl/test/guides2.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 ( 17880 232430 ) FN ;
344-
- U2 HM_100x100_1x1 + FIXED ( 233880 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 ( 17880 448450 ) S ;
348-
- U6 HM_100x400_4x4 + FIXED ( 449880 16590 ) N ;
349-
- U7 HM_100x100_1x1 + FIXED ( 233880 232430 ) N ;
350-
- U8 HM_100x100_1x1 + FIXED ( 17880 664610 ) S ;
351-
- U9 HM_100x100_1x1 + FIXED ( 17880 16550 ) FN ;
342+
- U1 HM_100x400_4x4 + FIXED ( 665880 16590 ) FN ;
343+
- U10 HM_100x100_1x1 + FIXED ( 233880 664610 ) S ;
344+
- U2 HM_100x100_1x1 + FIXED ( 449880 16550 ) FN ;
345+
- U3 HM_100x100_1x1 + FIXED ( 449880 448450 ) S ;
346+
- U4 HM_100x100_1x1 + FIXED ( 449880 232430 ) FN ;
347+
- U5 HM_100x100_1x1 + FIXED ( 449880 664610 ) S ;
348+
- U6 HM_100x400_4x4 + FIXED ( 17880 16590 ) FN ;
349+
- U7 HM_100x100_1x1 + FIXED ( 233880 16550 ) FN ;
350+
- U8 HM_100x100_1x1 + FIXED ( 233880 448450 ) S ;
351+
- U9 HM_100x100_1x1 + FIXED ( 233880 232430 ) FN ;
352352
END COMPONENTS
353353
NETS 12 ;
354354
- w1 ( U2 I1 ) ( U1 O1 ) + USE SIGNAL ;

0 commit comments

Comments
 (0)