Skip to content

Commit eafd19f

Browse files
authored
Merge pull request #6748 from gudeh/gpl-report-rsz-cells
gpl: report rsz cells
2 parents a709597 + 0f8fe0e commit eafd19f

37 files changed

+191
-87
lines changed

src/gpl/src/nesterovBase.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1007,7 +1007,8 @@ NesterovBaseCommon::NesterovBaseCommon(NesterovBaseVars nbVars,
10071007
nbVars_ = nbVars;
10081008
pbc_ = std::move(pbc);
10091009
log_ = log;
1010-
deltaArea_ = 0;
1010+
delta_area_ = 0;
1011+
new_gcells_count_ = 0;
10111012

10121013
// gCellStor init
10131014
gCellStor_.reserve(pbc_->placeInsts().size());
@@ -2731,7 +2732,7 @@ void NesterovBaseCommon::resizeGCell(odb::dbInst* db_inst)
27312732
int64_t newCellArea
27322733
= static_cast<int64_t>(gcell->dx()) * static_cast<int64_t>(gcell->dy());
27332734
int64_t areaChange = newCellArea - prevCellArea;
2734-
deltaArea_ += areaChange;
2735+
delta_area_ += areaChange;
27352736
}
27362737

27372738
void NesterovBase::updateGCellState(float wlCoeffX, float wlCoeffY)
@@ -2872,7 +2873,8 @@ size_t NesterovBaseCommon::createGCell(odb::dbInst* db_inst)
28722873

28732874
int64_t areaChange = static_cast<int64_t>(gcell_ptr->dx())
28742875
* static_cast<int64_t>(gcell_ptr->dy());
2875-
deltaArea_ += areaChange;
2876+
delta_area_ += areaChange;
2877+
new_gcells_count_++;
28762878
return gCellStor_.size() - 1;
28772879
}
28782880

src/gpl/src/nesterovBase.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -876,8 +876,10 @@ class NesterovBaseCommon
876876

877877
// TODO do this for each region? Also, manage this properly if other callbacks
878878
// are implemented.
879-
int64_t getDeltaArea() { return deltaArea_; }
880-
void resetDeltaArea() { deltaArea_ = 0; }
879+
int64_t getDeltaArea() { return delta_area_; }
880+
void resetDeltaArea() { delta_area_ = 0; }
881+
int64_t getNewGcellsCount() { return new_gcells_count_; }
882+
void resetNewGcellsCount() { new_gcells_count_ = 0; }
881883

882884
private:
883885
NesterovBaseVars nbVars_;
@@ -907,7 +909,8 @@ class NesterovBaseCommon
907909
std::deque<Pin> pb_pins_stor_;
908910

909911
int num_threads_;
910-
int64_t deltaArea_;
912+
int64_t delta_area_;
913+
uint new_gcells_count_;
911914
nesterovDbCbk* db_cbk_;
912915
};
913916

src/gpl/src/nesterovPlace.cpp

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -472,8 +472,30 @@ int NesterovPlace::doNesterovPlace(int start_iter)
472472
}
473473

474474
auto block = pbc_->db()->getChip()->getBlock();
475-
bool shouldTdProceed = tb_->updateGNetWeights(virtual_td_iter);
475+
int nb_total_gcells_delta = 0;
476+
int nb_gcells_before_td = 0;
477+
int nb_gcells_after_td = 0;
478+
int nbc_total_gcells_before_td = nbc_->getNewGcellsCount();
476479

480+
for (auto& nb : nbVec_) {
481+
nb_gcells_before_td += nb->gCells().size();
482+
}
483+
484+
bool shouldTdProceed = tb_->executeTimingDriven(virtual_td_iter);
485+
486+
for (auto& nb : nbVec_) {
487+
nb_gcells_after_td += nb->gCells().size();
488+
}
489+
490+
nb_total_gcells_delta = nb_gcells_after_td - nb_gcells_before_td;
491+
if (nb_total_gcells_delta != nbc_->getNewGcellsCount()) {
492+
log_->warn(GPL,
493+
92,
494+
"Mismatch in #cells between central object and all regions. "
495+
"NesterovBaseCommon: {}, Summing all regions: {}",
496+
nbc_->getNewGcellsCount(),
497+
nb_total_gcells_delta);
498+
}
477499
if (!virtual_td_iter) {
478500
for (auto& nesterov : nbVec_) {
479501
nesterov->updateGCellState(wireLengthCoefX_, wireLengthCoefY_);
@@ -501,11 +523,40 @@ int NesterovPlace::doNesterovPlace(int start_iter)
501523
"Timing-driven: repair_design delta area: {:.3f} um^2 ({:+.2f}%)",
502524
rsz_delta_area_microns,
503525
rsz_delta_area_percentage);
526+
527+
float new_gcells_percentage = 0.0f;
528+
if (nbc_total_gcells_before_td > 0) {
529+
new_gcells_percentage
530+
= (nbc_->getNewGcellsCount()
531+
/ static_cast<float>(nbc_total_gcells_before_td))
532+
* 100.0f;
533+
}
534+
log_->info(
535+
GPL,
536+
108,
537+
"Timing-driven: repair_design, gpl cells created: {} ({:+.2f}%)",
538+
nbc_->getNewGcellsCount(),
539+
new_gcells_percentage);
540+
541+
if (tb_->repairDesignBufferCount() != nbc_->getNewGcellsCount()) {
542+
log_->warn(GPL,
543+
93,
544+
"Buffer insertion count by rsz ({}) and cells created "
545+
"by gpl ({}) do not match.",
546+
tb_->repairDesignBufferCount(),
547+
nbc_->getNewGcellsCount());
548+
}
549+
log_->info(GPL,
550+
109,
551+
"Timing-driven: inserted buffers as reported by "
552+
"repair_design: {}",
553+
tb_->repairDesignBufferCount());
504554
log_->info(GPL,
505-
108,
555+
110,
506556
"Timing-driven: new target density: {}",
507557
nesterov->targetDensity());
508558
nbc_->resetDeltaArea();
559+
nbc_->resetNewGcellsCount();
509560
nesterov->updateAreas();
510561
nesterov->updateDensitySize();
511562
}

src/gpl/src/timingBase.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ void TimingBase::setTimingNetWeightMax(float max)
143143
net_weight_max_ = max;
144144
}
145145

146-
bool TimingBase::updateGNetWeights(bool run_journal_restore)
146+
bool TimingBase::executeTimingDriven(bool run_journal_restore)
147147
{
148148
rs_->findResizeSlacks(run_journal_restore);
149149

src/gpl/src/timingBase.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
#include <memory>
3737
#include <vector>
3838

39+
#include "rsz/Resizer.hh"
40+
3941
namespace rsz {
4042
class Resizer;
4143
}
@@ -67,10 +69,12 @@ class TimingBase
6769

6870
void setTimingNetWeightMax(float max);
6971

72+
int repairDesignBufferCount() { return rs_->repairDesignBufferCount(); }
73+
7074
// updateNetWeight.
7175
// True: successfully reweighted gnets
7276
// False: no slacks found
73-
bool updateGNetWeights(bool run_journal_restore);
77+
bool executeTimingDriven(bool run_journal_restore);
7478

7579
private:
7680
rsz::Resizer* rs_ = nullptr;

src/gpl/test/convergence01.ok

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,13 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining
5656
0 | +0.0% | 0 | 0 | 0 | 98
5757
final | -17.4% | 14 | 0 | 0 | 0
5858
---------------------------------------------------------------------
59+
[INFO RSZ-0039] Resized 14 instances.
5960
[INFO GPL-0106] Timing-driven: worst slack 6.35e-09
6061
[INFO GPL-0103] Timing-driven: weighted 4 nets.
6162
[INFO GPL-0107] Timing-driven: repair_design delta area: -1.021 um^2 (-6.57%)
62-
[INFO GPL-0108] Timing-driven: new target density: 0.49125
63+
[INFO GPL-0108] Timing-driven: repair_design, gpl cells created: 0 (+0.00%)
64+
[INFO GPL-0109] Timing-driven: inserted buffers as reported by repair_design: 0
65+
[INFO GPL-0110] Timing-driven: new target density: 0.49125
6366
[NesterovSolve] Iter: 10 overflow: 0.379 HPWL: 13036
6467
[NesterovSolve] Iter: 20 overflow: 0.522 HPWL: 6251
6568
[NesterovSolve] Iter: 30 overflow: 0.726 HPWL: 1966

src/gpl/test/simple01-td-tune.ok

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining
4444
0 | +0.0% | 0 | 0 | 0 | 356
4545
final | -11.5% | 31 | 0 | 0 | 0
4646
---------------------------------------------------------------------
47+
[INFO RSZ-0039] Resized 31 instances.
4748
[INFO GPL-0106] Timing-driven: worst slack 1.42e-09
4849
[INFO GPL-0103] Timing-driven: weighted 35 nets.
4950
[NesterovSolve] Iter: 10 overflow: 0.730 HPWL: 4005677
@@ -70,6 +71,7 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining
7071
0 | +0.0% | 0 | 0 | 0 | 356
7172
final | -16.3% | 29 | 0 | 0 | 0
7273
---------------------------------------------------------------------
74+
[INFO RSZ-0039] Resized 29 instances.
7375
[INFO GPL-0106] Timing-driven: worst slack 1.42e-09
7476
[INFO GPL-0103] Timing-driven: weighted 35 nets.
7577
[NesterovSolve] Iter: 180 overflow: 0.686 HPWL: 4116142
@@ -83,6 +85,7 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining
8385
0 | +0.0% | 0 | 0 | 0 | 356
8486
final | -17.3% | 29 | 0 | 0 | 0
8587
---------------------------------------------------------------------
88+
[INFO RSZ-0039] Resized 29 instances.
8689
[INFO GPL-0106] Timing-driven: worst slack 1.41e-09
8790
[INFO GPL-0103] Timing-driven: weighted 35 nets.
8891
[NesterovSolve] Iter: 220 overflow: 0.584 HPWL: 4328333
@@ -95,6 +98,7 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining
9598
0 | +0.0% | 0 | 0 | 0 | 356
9699
final | -17.3% | 29 | 0 | 0 | 0
97100
---------------------------------------------------------------------
101+
[INFO RSZ-0039] Resized 29 instances.
98102
[INFO GPL-0106] Timing-driven: worst slack 1.41e-09
99103
[INFO GPL-0103] Timing-driven: weighted 31 nets.
100104
[NesterovSolve] Iter: 250 overflow: 0.437 HPWL: 4448311
@@ -105,6 +109,7 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining
105109
0 | +0.0% | 0 | 0 | 0 | 356
106110
final | -20.7% | 30 | 0 | 0 | 0
107111
---------------------------------------------------------------------
112+
[INFO RSZ-0039] Resized 30 instances.
108113
[INFO GPL-0106] Timing-driven: worst slack 1.41e-09
109114
[INFO GPL-0103] Timing-driven: weighted 33 nets.
110115
[NesterovSolve] Iter: 260 overflow: 0.384 HPWL: 4438815
@@ -116,10 +121,13 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining
116121
0 | +0.0% | 0 | 0 | 0 | 356
117122
final | -23.1% | 29 | 0 | 0 | 0
118123
---------------------------------------------------------------------
124+
[INFO RSZ-0039] Resized 29 instances.
119125
[INFO GPL-0106] Timing-driven: worst slack 1.41e-09
120126
[INFO GPL-0103] Timing-driven: weighted 32 nets.
121127
[INFO GPL-0107] Timing-driven: repair_design delta area: -12.768 um^2 (-2.31%)
122-
[INFO GPL-0108] Timing-driven: new target density: 0.6866146
128+
[INFO GPL-0108] Timing-driven: repair_design, gpl cells created: 0 (+0.00%)
129+
[INFO GPL-0109] Timing-driven: inserted buffers as reported by repair_design: 0
130+
[INFO GPL-0110] Timing-driven: new target density: 0.6866146
123131
[NesterovSolve] Iter: 280 overflow: 0.305 HPWL: 2863594
124132
[NesterovSolve] Iter: 290 overflow: 0.290 HPWL: 2675862
125133
[NesterovSolve] Iter: 300 overflow: 0.242 HPWL: 2607478
@@ -132,10 +140,13 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining
132140
0 | +0.0% | 0 | 0 | 0 | 356
133141
final | -12.3% | 5 | 0 | 0 | 0
134142
---------------------------------------------------------------------
143+
[INFO RSZ-0039] Resized 5 instances.
135144
[INFO GPL-0106] Timing-driven: worst slack 1.41e-09
136145
[INFO GPL-0103] Timing-driven: weighted 35 nets.
137146
[INFO GPL-0107] Timing-driven: repair_design delta area: -6.650 um^2 (-1.23%)
138-
[INFO GPL-0108] Timing-driven: new target density: 0.67964303
147+
[INFO GPL-0108] Timing-driven: repair_design, gpl cells created: 0 (+0.00%)
148+
[INFO GPL-0109] Timing-driven: inserted buffers as reported by repair_design: 0
149+
[INFO GPL-0110] Timing-driven: new target density: 0.67964303
139150
[NesterovSolve] Iter: 330 overflow: 0.170 HPWL: 2651271
140151
[NesterovSolve] Iter: 340 overflow: 0.132 HPWL: 2674704
141152
[NesterovSolve] Iter: 350 overflow: 0.108 HPWL: 2692157

src/gpl/test/simple01-td.ok

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining
4444
0 | +0.0% | 0 | 0 | 0 | 356
4545
final | -11.5% | 31 | 0 | 0 | 0
4646
---------------------------------------------------------------------
47+
[INFO RSZ-0039] Resized 31 instances.
4748
[INFO GPL-0106] Timing-driven: worst slack 1.42e-09
4849
[INFO GPL-0103] Timing-driven: weighted 35 nets.
4950
[NesterovSolve] Iter: 10 overflow: 0.730 HPWL: 4005677
@@ -73,6 +74,7 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining
7374
0 | +0.0% | 0 | 0 | 0 | 356
7475
final | -16.3% | 29 | 0 | 0 | 0
7576
---------------------------------------------------------------------
77+
[INFO RSZ-0039] Resized 29 instances.
7678
[INFO GPL-0106] Timing-driven: worst slack 1.42e-09
7779
[INFO GPL-0103] Timing-driven: weighted 31 nets.
7880
[NesterovSolve] Iter: 210 overflow: 0.616 HPWL: 4268407
@@ -90,10 +92,13 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining
9092
0 | +0.0% | 0 | 0 | 0 | 356
9193
final | -25.5% | 28 | 0 | 0 | 0
9294
---------------------------------------------------------------------
95+
[INFO RSZ-0039] Resized 28 instances.
9396
[INFO GPL-0106] Timing-driven: worst slack 1.41e-09
9497
[INFO GPL-0103] Timing-driven: weighted 31 nets.
9598
[INFO GPL-0107] Timing-driven: repair_design delta area: -14.098 um^2 (-2.55%)
96-
[INFO GPL-0108] Timing-driven: new target density: 0.6852203
99+
[INFO GPL-0108] Timing-driven: repair_design, gpl cells created: 0 (+0.00%)
100+
[INFO GPL-0109] Timing-driven: inserted buffers as reported by repair_design: 0
101+
[INFO GPL-0110] Timing-driven: new target density: 0.6852203
97102
[NesterovSolve] Iter: 290 overflow: 0.292 HPWL: 2640138
98103
[NesterovSolve] Iter: 300 overflow: 0.263 HPWL: 2656033
99104
[NesterovSolve] Iter: 310 overflow: 0.228 HPWL: 2638435
@@ -104,10 +109,13 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining
104109
0 | +0.0% | 0 | 0 | 0 | 356
105110
final | -9.9% | 4 | 0 | 0 | 0
106111
---------------------------------------------------------------------
112+
[INFO RSZ-0039] Resized 4 instances.
107113
[INFO GPL-0106] Timing-driven: worst slack 1.41e-09
108114
[INFO GPL-0103] Timing-driven: weighted 29 nets.
109115
[INFO GPL-0107] Timing-driven: repair_design delta area: -5.320 um^2 (-0.99%)
110-
[INFO GPL-0108] Timing-driven: new target density: 0.67964303
116+
[INFO GPL-0108] Timing-driven: repair_design, gpl cells created: 0 (+0.00%)
117+
[INFO GPL-0109] Timing-driven: inserted buffers as reported by repair_design: 0
118+
[INFO GPL-0110] Timing-driven: new target density: 0.67964303
111119
[NesterovSolve] Iter: 320 overflow: 0.188 HPWL: 2622247
112120
[NesterovSolve] Iter: 330 overflow: 0.180 HPWL: 2655060
113121
[NesterovSolve] Iter: 340 overflow: 0.151 HPWL: 2683596
@@ -121,7 +129,9 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining
121129
[INFO GPL-0106] Timing-driven: worst slack 1.41e-09
122130
[INFO GPL-0103] Timing-driven: weighted 34 nets.
123131
[INFO GPL-0107] Timing-driven: repair_design delta area: 0.000 um^2 (+0.00%)
124-
[INFO GPL-0108] Timing-driven: new target density: 0.67964303
132+
[INFO GPL-0108] Timing-driven: repair_design, gpl cells created: 0 (+0.00%)
133+
[INFO GPL-0109] Timing-driven: inserted buffers as reported by repair_design: 0
134+
[INFO GPL-0110] Timing-driven: new target density: 0.67964303
125135
[NesterovSolve] Iter: 350 overflow: 0.128 HPWL: 2707448
126136
[NesterovSolve] Iter: 360 overflow: 0.102 HPWL: 2738598
127137
[NesterovSolve] Finished with Overflow: 0.098186

0 commit comments

Comments
 (0)