Skip to content

Commit 726f376

Browse files
store pointers to TimingInfo in PlacerSetupSlacks and PlacerCriticalities and NetPinTimingInvalidator
1 parent aa53d97 commit 726f376

File tree

10 files changed

+68
-49
lines changed

10 files changed

+68
-49
lines changed

vpr/src/place/annealer.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ e_move_result PlacementAnnealer::try_swap_(MoveGenerator& move_generator,
471471
*/
472472

473473
// Invalidates timing of modified connections for incremental timing updates.
474-
pin_timing_invalidator_->invalidate_affected_connections(blocks_affected_, timing_info_);
474+
pin_timing_invalidator_->invalidate_affected_connections(blocks_affected_);
475475

476476
/* Update the connection_timing_cost and connection_delay
477477
* values from the temporary values. */
@@ -532,7 +532,7 @@ e_move_result PlacementAnnealer::try_swap_(MoveGenerator& move_generator,
532532
/* Invalidates timing of modified connections for incremental
533533
* timing updates. These invalidations are accumulated for a
534534
* big timing update in the outer loop. */
535-
pin_timing_invalidator_->invalidate_affected_connections(blocks_affected_, timing_info_);
535+
pin_timing_invalidator_->invalidate_affected_connections(blocks_affected_);
536536

537537
/* Update the connection_timing_cost and connection_delay
538538
* values from the temporary values. */
@@ -588,7 +588,7 @@ e_move_result PlacementAnnealer::try_swap_(MoveGenerator& move_generator,
588588
/* Re-invalidate the affected sink pins since the proposed
589589
* move is rejected, and the same blocks are reverted to
590590
* their original positions. */
591-
pin_timing_invalidator_->invalidate_affected_connections(blocks_affected_, timing_info_);
591+
pin_timing_invalidator_->invalidate_affected_connections(blocks_affected_);
592592

593593
// Revert the timing update
594594
update_timing_classes(crit_params, timing_info_, criticalities_,

vpr/src/place/place_timing_update.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ void initialize_timing_info(const PlaceCritParams& crit_params,
4545
//by passing in all the clb sink pins
4646
for (ClusterNetId net_id : clb_nlist.nets()) {
4747
for (ClusterPinId pin_id : clb_nlist.net_sinks(net_id)) {
48-
pin_timing_invalidator->invalidate_connection(pin_id, timing_info);
48+
pin_timing_invalidator->invalidate_connection(pin_id);
4949
}
5050
}
5151

@@ -142,10 +142,10 @@ void update_timing_classes(const PlaceCritParams& crit_params,
142142
timing_info->update();
143143

144144
/* Update the placer's criticalities (e.g. sharpen with crit_exponent). */
145-
criticalities->update_criticalities(timing_info, crit_params, placer_state);
145+
criticalities->update_criticalities(crit_params, placer_state);
146146

147147
/* Update the placer's raw setup slacks. */
148-
setup_slacks->update_setup_slacks(timing_info);
148+
setup_slacks->update_setup_slacks();
149149

150150
/* Clear invalidation state. */
151151
pin_timing_invalidator->reset();

vpr/src/place/placer.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,16 +172,20 @@ void Placer::alloc_and_init_timing_objects_(const Netlist<>& net_list,
172172

173173
timing_info_ = make_setup_timing_info(placement_delay_calc_, placer_opts_.timing_update_type);
174174

175-
placer_setup_slacks_ = std::make_unique<PlacerSetupSlacks>(cluster_ctx.clb_nlist, netlist_pin_lookup_);
175+
placer_setup_slacks_ = std::make_unique<PlacerSetupSlacks>(cluster_ctx.clb_nlist,
176+
netlist_pin_lookup_,
177+
timing_info_);
176178

177-
placer_criticalities_ = std::make_unique<PlacerCriticalities>(cluster_ctx.clb_nlist, netlist_pin_lookup_);
179+
placer_criticalities_ = std::make_unique<PlacerCriticalities>(cluster_ctx.clb_nlist,
180+
netlist_pin_lookup_,
181+
timing_info_);
178182

179183
pin_timing_invalidator_ = make_net_pin_timing_invalidator(placer_opts_.timing_update_type,
180184
net_list,
181185
netlist_pin_lookup_,
182186
atom_ctx.nlist,
183187
atom_ctx.lookup,
184-
*timing_info_->timing_graph(),
188+
timing_info_,
185189
is_flat_);
186190

187191
// First time compute timing and costs, compute from scratch

vpr/src/place/placer.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,11 @@ class Placer {
130130
*
131131
* 3. Constructs `PlacerSetupSlacks` and `PlacerCriticalities` objects,
132132
* which translate arrival and required times into slacks and criticalities,
133-
* respectively.
133+
* respectively. These objects hold pointers to timing_info_.
134134
*
135135
* 4. Creates a `NetPinTimingInvalidator` object to mark timing edges
136-
* corresponding to the pins of moved blocks as invalid.
136+
* corresponding to the pins of moved blocks as invalid. This object
137+
* holds a pointer to timing_info_.
137138
*
138139
* 5. Performs a full timing analysis by marking all pins as invalid.
139140
*

vpr/src/place/timing_place.cpp

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,12 @@
1616
#include "timing_info.h"
1717

1818
///@brief Allocates space for the timing_place_crit_ data structure.
19-
PlacerCriticalities::PlacerCriticalities(const ClusteredNetlist& clb_nlist, const ClusteredPinAtomPinsLookup& netlist_pin_lookup)
19+
PlacerCriticalities::PlacerCriticalities(const ClusteredNetlist& clb_nlist,
20+
const ClusteredPinAtomPinsLookup& netlist_pin_lookup,
21+
std::shared_ptr<const SetupTimingInfo> timing_info)
2022
: clb_nlist_(clb_nlist)
2123
, pin_lookup_(netlist_pin_lookup)
24+
, timing_info_(std::move(timing_info))
2225
, timing_place_crit_(make_net_pins_matrix(clb_nlist_, std::numeric_limits<float>::quiet_NaN())) {
2326
}
2427

@@ -32,8 +35,7 @@ PlacerCriticalities::PlacerCriticalities(const ClusteredNetlist& clb_nlist, cons
3235
*
3336
* If the criticality exponent has changed, we also need to update from scratch.
3437
*/
35-
void PlacerCriticalities::update_criticalities(const SetupTimingInfo* timing_info,
36-
const PlaceCritParams& crit_params,
38+
void PlacerCriticalities::update_criticalities(const PlaceCritParams& crit_params,
3739
PlacerState& placer_state) {
3840
/* If update is not enabled, exit the routine. */
3941
if (!update_enabled) {
@@ -44,7 +46,7 @@ void PlacerCriticalities::update_criticalities(const SetupTimingInfo* timing_inf
4446

4547
/* Determine what pins need updating */
4648
if (!recompute_required && crit_params.crit_exponent == last_crit_exponent_) {
47-
incr_update_criticalities(timing_info);
49+
incr_update_criticalities();
4850
} else {
4951
recompute_criticalities();
5052

@@ -63,7 +65,7 @@ void PlacerCriticalities::update_criticalities(const SetupTimingInfo* timing_inf
6365
ClusterNetId clb_net = clb_nlist_.pin_net(clb_pin);
6466
int pin_index_in_net = clb_nlist_.pin_net_index(clb_pin);
6567
// Routing for placement is not flat (at least for the time being)
66-
float clb_pin_crit = calculate_clb_net_pin_criticality(*timing_info, pin_lookup_, ParentPinId(size_t(clb_pin)), /*is_flat=*/false);
68+
float clb_pin_crit = calculate_clb_net_pin_criticality(*timing_info_, pin_lookup_, ParentPinId(size_t(clb_pin)), /*is_flat=*/false);
6769

6870
float new_crit = pow(clb_pin_crit, crit_params.crit_exponent);
6971
/*
@@ -114,10 +116,10 @@ void PlacerCriticalities::set_recompute_required() {
114116
* atom pin criticalities.
115117
*/
116118

117-
void PlacerCriticalities::incr_update_criticalities(const SetupTimingInfo* timing_info) {
119+
void PlacerCriticalities::incr_update_criticalities() {
118120
cluster_pins_with_modified_criticality_.clear();
119121

120-
for (AtomPinId atom_pin : timing_info->pins_with_modified_setup_criticality()) {
122+
for (AtomPinId atom_pin : timing_info_->pins_with_modified_setup_criticality()) {
121123
ClusterPinId clb_pin = pin_lookup_.connected_clb_pin(atom_pin);
122124

123125
//Some atom pins correspond to connections which are completely
@@ -164,9 +166,12 @@ PlacerCriticalities::pin_range PlacerCriticalities::pins_with_modified_criticali
164166
/**************************************/
165167

166168
///@brief Allocates space for the timing_place_setup_slacks_ data structure.
167-
PlacerSetupSlacks::PlacerSetupSlacks(const ClusteredNetlist& clb_nlist, const ClusteredPinAtomPinsLookup& netlist_pin_lookup)
169+
PlacerSetupSlacks::PlacerSetupSlacks(const ClusteredNetlist& clb_nlist,
170+
const ClusteredPinAtomPinsLookup& netlist_pin_lookup,
171+
std::shared_ptr<const SetupTimingInfo> timing_info)
168172
: clb_nlist_(clb_nlist)
169173
, pin_lookup_(netlist_pin_lookup)
174+
, timing_info_(std::move(timing_info))
170175
, timing_place_setup_slacks_(make_net_pins_matrix(clb_nlist_, std::numeric_limits<float>::quiet_NaN())) {
171176
}
172177

@@ -180,7 +185,7 @@ PlacerSetupSlacks::PlacerSetupSlacks(const ClusteredNetlist& clb_nlist, const Cl
180185
* In this case, `recompute_required` would be true, and we update all setup slacks
181186
* from scratch.
182187
*/
183-
void PlacerSetupSlacks::update_setup_slacks(const SetupTimingInfo* timing_info) {
188+
void PlacerSetupSlacks::update_setup_slacks() {
184189
/* If update is not enabled, exit the routine. */
185190
if (!update_enabled) {
186191
/* re-computation is required on the next iteration */
@@ -190,7 +195,7 @@ void PlacerSetupSlacks::update_setup_slacks(const SetupTimingInfo* timing_info)
190195

191196
/* Determine what pins need updating */
192197
if (!recompute_required) {
193-
incr_update_setup_slacks(timing_info);
198+
incr_update_setup_slacks();
194199
} else {
195200
recompute_setup_slacks();
196201
}
@@ -200,7 +205,7 @@ void PlacerSetupSlacks::update_setup_slacks(const SetupTimingInfo* timing_info)
200205
ClusterNetId clb_net = clb_nlist_.pin_net(clb_pin);
201206
int pin_index_in_net = clb_nlist_.pin_net_index(clb_pin);
202207

203-
float clb_pin_setup_slack = calculate_clb_net_pin_setup_slack(*timing_info, pin_lookup_, clb_pin);
208+
float clb_pin_setup_slack = calculate_clb_net_pin_setup_slack(*timing_info_, pin_lookup_, clb_pin);
204209

205210
timing_place_setup_slacks_[clb_net][pin_index_in_net] = clb_pin_setup_slack;
206211
}
@@ -217,10 +222,10 @@ void PlacerSetupSlacks::update_setup_slacks(const SetupTimingInfo* timing_info)
217222
* Note we use the set of pins reported by the *timing_info* as having modified
218223
* setup slacks, rather than those marked as modified by the timing analyzer.
219224
*/
220-
void PlacerSetupSlacks::incr_update_setup_slacks(const SetupTimingInfo* timing_info) {
225+
void PlacerSetupSlacks::incr_update_setup_slacks() {
221226
cluster_pins_with_modified_setup_slack_.clear();
222227

223-
for (AtomPinId atom_pin : timing_info->pins_with_modified_setup_slack()) {
228+
for (AtomPinId atom_pin : timing_info_->pins_with_modified_setup_slack()) {
224229
ClusterPinId clb_pin = pin_lookup_.connected_clb_pin(atom_pin);
225230

226231
//Some atom pins correspond to connections which are completely

vpr/src/place/timing_place.h

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,9 @@ class PlacerCriticalities {
101101
typedef vtr::Range<net_iterator> net_range;
102102

103103
public: //Lifetime
104-
PlacerCriticalities(const ClusteredNetlist& clb_nlist, const ClusteredPinAtomPinsLookup& netlist_pin_lookup);
104+
PlacerCriticalities(const ClusteredNetlist& clb_nlist,
105+
const ClusteredPinAtomPinsLookup& netlist_pin_lookup,
106+
std::shared_ptr<const SetupTimingInfo> timing_info);
105107
PlacerCriticalities(const PlacerCriticalities&) = delete;
106108
PlacerCriticalities& operator=(const PlacerCriticalities&) = delete;
107109

@@ -125,8 +127,7 @@ class PlacerCriticalities {
125127
* If out of sync, then the criticalities cannot be incrementally updated on
126128
* during the next timing analysis iteration.
127129
*/
128-
void update_criticalities(const SetupTimingInfo* timing_info,
129-
const PlaceCritParams& crit_params,
130+
void update_criticalities(const PlaceCritParams& crit_params,
130131
PlacerState& placer_state);
131132

132133
///@bried Enable the recompute_required flag to enforce from scratch update.
@@ -151,6 +152,9 @@ class PlacerCriticalities {
151152
///@brief The lookup table that maps atom pins to clb pins.
152153
const ClusteredPinAtomPinsLookup& pin_lookup_;
153154

155+
///@brief A pointer to the setup timing analyzer
156+
std::shared_ptr<const SetupTimingInfo> timing_info_;
157+
154158
/**
155159
* @brief The matrix that stores criticality value for each connection.
156160
*
@@ -168,7 +172,7 @@ class PlacerCriticalities {
168172
vtr::vec_id_set<ClusterPinId> cluster_pins_with_modified_criticality_;
169173

170174
///@brief Incremental update. See timing_place.cpp for more.
171-
void incr_update_criticalities(const SetupTimingInfo* timing_info);
175+
void incr_update_criticalities();
172176

173177
///@brief Flag that turns on/off the update_criticalities() routine.
174178
bool update_enabled = true;
@@ -215,7 +219,9 @@ class PlacerSetupSlacks {
215219
typedef vtr::Range<net_iterator> net_range;
216220

217221
public: //Lifetime
218-
PlacerSetupSlacks(const ClusteredNetlist& clb_nlist, const ClusteredPinAtomPinsLookup& netlist_pin_lookup);
222+
PlacerSetupSlacks(const ClusteredNetlist& clb_nlist,
223+
const ClusteredPinAtomPinsLookup& netlist_pin_lookup,
224+
std::shared_ptr<const SetupTimingInfo> timing_info);
219225
PlacerSetupSlacks(const PlacerSetupSlacks& clb_nlist) = delete;
220226
PlacerSetupSlacks& operator=(const PlacerSetupSlacks& clb_nlist) = delete;
221227

@@ -232,14 +238,14 @@ class PlacerSetupSlacks {
232238
public: //Modifiers
233239
/**
234240
* @brief Updates setup slacks based on the atom netlist setup slacks provided
235-
* by timing_info.
241+
* by timing_info_.
236242
*
237243
* Should consistently call this method after the most recent timing analysis to
238244
* keep the setup slacks stored in this class in sync with the timing analyzer.
239245
* If out of sync, then the setup slacks cannot be incrementally updated on
240246
* during the next timing analysis iteration.
241247
*/
242-
void update_setup_slacks(const SetupTimingInfo* timing_info);
248+
void update_setup_slacks();
243249

244250
///@bried Enable the recompute_required flag to enforce from scratch update.
245251
void set_recompute_required() { recompute_required = true; }
@@ -256,6 +262,7 @@ class PlacerSetupSlacks {
256262
private: //Data
257263
const ClusteredNetlist& clb_nlist_;
258264
const ClusteredPinAtomPinsLookup& pin_lookup_;
265+
std::shared_ptr<const SetupTimingInfo> timing_info_;
259266

260267
/**
261268
* @brief The matrix that stores raw setup slack values for each connection.
@@ -268,7 +275,7 @@ class PlacerSetupSlacks {
268275
vtr::vec_id_set<ClusterPinId> cluster_pins_with_modified_setup_slack_;
269276

270277
///@brief Incremental update. See timing_place.cpp for more.
271-
void incr_update_setup_slacks(const SetupTimingInfo* timing_info);
278+
void incr_update_setup_slacks();
272279

273280
///@brief Incremental update. See timing_place.cpp for more.
274281
void recompute_setup_slacks();

vpr/src/route/route.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ bool route(const Netlist<>& net_list,
202202
netlist_pin_lookup,
203203
atom_ctx.nlist,
204204
atom_ctx.lookup,
205-
*timing_info->timing_graph(),
205+
timing_info,
206206
is_flat);
207207

208208
std::unique_ptr<NetlistRouter> netlist_router = make_netlist_router(

vpr/src/route/route_net.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ inline void update_net_delay_from_isink(float* net_delay,
9393
//Delay changed, invalidate for incremental timing update
9494
VTR_ASSERT_SAFE(timing_info);
9595
ParentPinId pin = net_list.net_pin(inet, isink);
96-
pin_timing_invalidator->invalidate_connection(pin, timing_info);
96+
pin_timing_invalidator->invalidate_connection(pin);
9797
}
9898

9999
net_delay[isink] = new_delay;

0 commit comments

Comments
 (0)