@@ -110,17 +110,8 @@ static vtr::Point<T> closest_point_in_rect(const vtr::Rect<T>& r, const vtr::Poi
110
110
}
111
111
}
112
112
113
- // resize internal data structures
114
- void CostMap::set_counts (size_t seg_count, size_t box_count) {
115
- cost_map_.clear ();
116
- offset_.clear ();
117
- penalty_.clear ();
118
- cost_map_.resize ({seg_count, box_count});
119
- offset_.resize ({seg_count, box_count});
120
- penalty_.resize ({seg_count, box_count});
121
- seg_count_ = seg_count;
122
- box_count_ = box_count;
123
-
113
+ // build the segment map
114
+ void CostMap::build_segment_map () {
124
115
const auto & device_ctx = g_vpr_ctx.device ();
125
116
segment_map_.resize (device_ctx.rr_nodes .size ());
126
117
for (size_t i = 0 ; i < segment_map_.size (); ++i) {
@@ -133,6 +124,18 @@ void CostMap::set_counts(size_t seg_count, size_t box_count) {
133
124
}
134
125
}
135
126
127
+ // resize internal data structures
128
+ void CostMap::set_counts (size_t seg_count, size_t box_count) {
129
+ cost_map_.clear ();
130
+ offset_.clear ();
131
+ penalty_.clear ();
132
+ cost_map_.resize ({seg_count, box_count});
133
+ offset_.resize ({seg_count, box_count});
134
+ penalty_.resize ({seg_count, box_count});
135
+ seg_count_ = seg_count;
136
+ box_count_ = box_count;
137
+ }
138
+
136
139
// cached node -> segment map
137
140
int CostMap::node_to_segment (int from_node_ind) const {
138
141
return segment_map_[from_node_ind];
@@ -638,6 +641,7 @@ void ConnectionBoxMapLookahead::compute(const std::vector<t_segment_inf>& segmen
638
641
auto & device_ctx = g_vpr_ctx.device ();
639
642
cost_map_.set_counts (segment_inf.size (),
640
643
device_ctx.connection_boxes .num_connection_box_types ());
644
+ cost_map_.build_segment_map ();
641
645
642
646
VTR_ASSERT (REPRESENTATIVE_ENTRY_METHOD == util::SMALLEST);
643
647
RoutingCosts all_delay_costs;
@@ -1053,22 +1057,13 @@ static void FromFloat(VprFloatEntry::Builder* out, const float& in) {
1053
1057
}
1054
1058
1055
1059
void CostMap::read (const std::string& file) {
1060
+ build_segment_map ();
1056
1061
MmapFile f (file);
1057
1062
1058
1063
::capnp::ReaderOptions opts = default_large_capnp_opts ();
1059
1064
::capnp::FlatArrayMessageReader reader (f.getData (), opts);
1060
1065
1061
1066
auto cost_map = reader.getRoot <VprCostMap>();
1062
-
1063
- {
1064
- const auto & segment_map = cost_map.getSegmentMap ();
1065
- segment_map_.resize (segment_map.size ());
1066
- auto dst_iter = segment_map_.begin ();
1067
- for (const auto & src : segment_map) {
1068
- *dst_iter++ = src;
1069
- }
1070
- }
1071
-
1072
1067
{
1073
1068
const auto & offset = cost_map.getOffset ();
1074
1069
ToNdMatrix<2 , VprVector2D, std::pair<int , int >>(
@@ -1093,13 +1088,6 @@ void CostMap::write(const std::string& file) const {
1093
1088
1094
1089
auto cost_map = builder.initRoot <VprCostMap>();
1095
1090
1096
- {
1097
- auto segment_map = cost_map.initSegmentMap (segment_map_.size ());
1098
- for (size_t i = 0 ; i < segment_map_.size (); ++i) {
1099
- segment_map.set (i, segment_map_[i]);
1100
- }
1101
- }
1102
-
1103
1091
{
1104
1092
auto offset = cost_map.initOffset ();
1105
1093
FromNdMatrix<2 , VprVector2D, std::pair<int , int >>(
0 commit comments