Skip to content

Commit bc16015

Browse files
authored
Merge pull request #10143 from osamahammad21/drt-serialize
DRT: fix RouterConfiguration Serialization
2 parents 6e984d0 + 0cd177c commit bc16015

7 files changed

Lines changed: 93 additions & 62 deletions

File tree

src/drt/include/drt/TritonRoute.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ struct ParamStruct
6060
{
6161
std::string outputMazeFile;
6262
std::string outputDrcFile;
63-
std::optional<int> drcReportIterStep;
63+
int drcReportIterStep = 0;
6464
std::string outputGuideCoverageFile;
6565
std::string dbProcessNode;
6666
bool enableViaGen = false;
@@ -77,7 +77,7 @@ struct ParamStruct
7777
int minAccessPoints = -1;
7878
bool saveGuideUpdates = false;
7979
std::string repairPDNLayerName;
80-
int num_threads;
80+
int num_threads = 1;
8181
};
8282

8383
class TritonRoute

src/drt/src/TritonRoute.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1277,7 +1277,7 @@ void TritonRoute::setUnidirectionalLayer(const std::string& layerName)
12771277
"Non-routing layer {} can't be set unidirectional",
12781278
layerName);
12791279
}
1280-
router_cfg_->unidirectional_layers_.insert(dbLayer);
1280+
router_cfg_->unidirectional_layer_names_.insert(layerName);
12811281
}
12821282

12831283
void TritonRoute::setParams(const ParamStruct& params)

src/drt/src/TritonRoute.i

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,9 @@ void detailed_route_cmd(const char* outputMazeFile,
7070
{
7171
auto* router = ord::OpenRoad::openRoad()->getTritonRoute();
7272
const int num_threads = ord::OpenRoad::openRoad()->getThreadCount();
73-
std::optional<int> drcReportIterStepOpt;
74-
if (drcReportIterStep > 0) {
75-
drcReportIterStepOpt = drcReportIterStep;
76-
}
7773
router->setParams({outputMazeFile,
7874
outputDrcFile,
79-
drcReportIterStepOpt,
75+
drcReportIterStep,
8076
outputGuideCoverageFile,
8177
dbProcessNode,
8278
enableViaGen,

src/drt/src/dr/FlexDR.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -693,8 +693,8 @@ void FlexDR::reportIterationViolations() const
693693
}
694694
}
695695
}
696-
if ((router_cfg_->DRC_RPT_ITER_STEP && iter_ > 0
697-
&& iter_ % router_cfg_->DRC_RPT_ITER_STEP.value() == 0)
696+
if ((router_cfg_->DRC_RPT_ITER_STEP > 0 && iter_ > 0
697+
&& iter_ % router_cfg_->DRC_RPT_ITER_STEP == 0)
698698
|| logger_->debugCheck(DRT, "autotuner", 1)
699699
|| logger_->debugCheck(DRT, "report", 1)) {
700700
router_->reportDRC(

src/drt/src/global.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,15 @@
88
#include <limits>
99
#include <memory>
1010
#include <optional>
11+
#include <set>
1112
#include <string>
12-
#include <unordered_set>
1313

1414
#include "db/obj/frMarker.h"
1515
#include "frBaseTypes.h"
1616

1717
namespace odb {
1818
class Point;
1919
class Rect;
20-
class dbTechLayer;
2120
} // namespace odb
2221

2322
namespace drt {
@@ -27,7 +26,7 @@ struct RouterConfiguration
2726
std::string DBPROCESSNODE;
2827
std::string OUT_MAZE_FILE;
2928
std::string DRC_RPT_FILE;
30-
std::optional<int> DRC_RPT_ITER_STEP = std::nullopt;
29+
int DRC_RPT_ITER_STEP = 0; // 0 means disabled
3130
std::string GUIDE_REPORT_FILE;
3231

3332
// to be removed
@@ -95,8 +94,11 @@ struct RouterConfiguration
9594
frLayerNum REPAIR_PDN_LAYER_NUM = -1;
9695
frLayerNum GC_IGNORE_PDN_LAYER_NUM = -1;
9796

98-
// unidirectional layers
99-
std::unordered_set<odb::dbTechLayer*> unidirectional_layers_;
97+
// unidirectional layers (stored as layer names)
98+
std::set<std::string> unidirectional_layer_names_;
99+
100+
template <class Archive>
101+
void serialize(Archive& ar, unsigned int version);
100102
};
101103

102104
constexpr int DIRBITSIZE = 3;

src/drt/src/io/io.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1565,7 +1565,8 @@ void io::Parser::setRoutingLayerProperties(odb::dbTechLayer* layer,
15651565
getTech()->addUConstraint(std::move(uCon));
15661566
tmpLayer->addLef58SpacingWrongDirConstraint(rptr);
15671567
}
1568-
if (router_cfg_->unidirectional_layers_.contains(layer)) {
1568+
if (router_cfg_->unidirectional_layer_names_.find(layer->getName())
1569+
!= router_cfg_->unidirectional_layer_names_.end()) {
15691570
tmpLayer->setUnidirectional(true);
15701571
}
15711572
if (layer->isRectOnly()) {

src/drt/src/serialization.h

Lines changed: 78 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "boost/serialization/array.hpp"
1717
#include "boost/serialization/list.hpp"
1818
#include "boost/serialization/map.hpp"
19+
#include "boost/serialization/optional.hpp"
1920
#include "boost/serialization/set.hpp"
2021
#include "boost/serialization/split_member.hpp"
2122
#include "boost/serialization/unique_ptr.hpp"
@@ -747,52 +748,83 @@ void serializeViaDef(Archive& ar, const frViaDef*& viadef)
747748
template <class Archive>
748749
void serializeGlobals(Archive& ar, RouterConfiguration* router_cfg)
749750
{
750-
(ar) & router_cfg->DBPROCESSNODE;
751-
(ar) & router_cfg->OUT_MAZE_FILE;
752-
(ar) & router_cfg->DRC_RPT_FILE;
753-
(ar) & router_cfg->OR_SEED;
754-
(ar) & router_cfg->OR_K;
755-
(ar) & router_cfg->MAX_THREADS;
756-
(ar) & router_cfg->BATCHSIZE;
757-
(ar) & router_cfg->BATCHSIZETA;
758-
(ar) & router_cfg->MTSAFEDIST;
759-
(ar) & router_cfg->DRCSAFEDIST;
760-
(ar) & router_cfg->VERBOSE;
761-
(ar) & router_cfg->BOTTOM_ROUTING_LAYER;
762-
(ar) & router_cfg->TOP_ROUTING_LAYER;
763-
(ar) & router_cfg->ALLOW_PIN_AS_FEEDTHROUGH;
764-
(ar) & router_cfg->USENONPREFTRACKS;
765-
(ar) & router_cfg->USEMINSPACING_OBS;
766-
(ar) & router_cfg->ENABLE_BOUNDARY_MAR_FIX;
767-
(ar) & router_cfg->ENABLE_VIA_GEN;
768-
(ar) & router_cfg->VIAINPIN_BOTTOMLAYER_NAME;
769-
(ar) & router_cfg->VIAINPIN_TOPLAYER_NAME;
770-
(ar) & router_cfg->VIAINPIN_BOTTOMLAYERNUM;
771-
(ar) & router_cfg->VIAINPIN_TOPLAYERNUM;
772-
(ar) & router_cfg->VIA_ACCESS_LAYERNUM;
773-
(ar) & router_cfg->MINNUMACCESSPOINT_MACROCELLPIN;
774-
(ar) & router_cfg->MINNUMACCESSPOINT_STDCELLPIN;
775-
(ar) & router_cfg->ACCESS_PATTERN_END_ITERATION_NUM;
776-
(ar) & router_cfg->END_ITERATION;
777-
(ar) & router_cfg->NDR_NETS_RIPUP_HARDINESS;
778-
(ar) & router_cfg->CLOCK_NETS_TRUNK_RIPUP_HARDINESS;
779-
(ar) & router_cfg->CLOCK_NETS_LEAF_RIPUP_HARDINESS;
780-
(ar) & router_cfg->AUTO_TAPER_NDR_NETS;
781-
(ar) & router_cfg->TAPERBOX_RADIUS;
782-
(ar) & router_cfg->NDR_NETS_ABS_PRIORITY;
783-
(ar) & router_cfg->CLOCK_NETS_ABS_PRIORITY;
784-
(ar) & router_cfg->TAPINCOST;
785-
(ar) & router_cfg->TAALIGNCOST;
786-
(ar) & router_cfg->TADRCCOST;
787-
(ar) & router_cfg->TASHAPEBLOATWIDTH;
788-
(ar) & router_cfg->VIACOST;
789-
(ar) & router_cfg->GRIDCOST;
790-
(ar) & router_cfg->ROUTESHAPECOST;
791-
(ar) & router_cfg->MARKERCOST;
792-
(ar) & router_cfg->MARKERBLOATWIDTH;
793-
(ar) & router_cfg->BLOCKCOST;
794-
(ar) & router_cfg->GUIDECOST;
795-
(ar) & router_cfg->SHAPEBLOATWIDTH;
751+
router_cfg->serialize(ar, 0);
752+
}
753+
754+
template <class Archive>
755+
void RouterConfiguration::serialize(Archive& ar, const unsigned int /*version*/)
756+
{
757+
(ar) & DBPROCESSNODE;
758+
(ar) & OUT_MAZE_FILE;
759+
(ar) & DRC_RPT_FILE;
760+
(ar) & DRC_RPT_ITER_STEP;
761+
(ar) & GUIDE_REPORT_FILE;
762+
763+
// to be removed
764+
(ar) & OR_SEED;
765+
(ar) & OR_K;
766+
767+
(ar) & MAX_THREADS;
768+
(ar) & BATCHSIZE;
769+
(ar) & BATCHSIZETA;
770+
(ar) & MTSAFEDIST;
771+
(ar) & DRCSAFEDIST;
772+
(ar) & VERBOSE;
773+
(ar) & BOTTOM_ROUTING_LAYER;
774+
(ar) & TOP_ROUTING_LAYER;
775+
(ar) & ALLOW_PIN_AS_FEEDTHROUGH;
776+
(ar) & USENONPREFTRACKS;
777+
(ar) & USEMINSPACING_OBS;
778+
(ar) & ENABLE_BOUNDARY_MAR_FIX;
779+
(ar) & ENABLE_VIA_GEN;
780+
(ar) & CLEAN_PATCHES;
781+
(ar) & DO_PA;
782+
(ar) & SINGLE_STEP_DR;
783+
(ar) & SAVE_GUIDE_UPDATES;
784+
785+
(ar) & VIAINPIN_BOTTOMLAYER_NAME;
786+
(ar) & VIAINPIN_TOPLAYER_NAME;
787+
(ar) & VIAINPIN_BOTTOMLAYERNUM;
788+
(ar) & VIAINPIN_TOPLAYERNUM;
789+
790+
(ar) & VIA_ACCESS_LAYER_NAME;
791+
(ar) & VIA_ACCESS_LAYERNUM;
792+
793+
(ar) & MINNUMACCESSPOINT_MACROCELLPIN;
794+
(ar) & MINNUMACCESSPOINT_STDCELLPIN;
795+
(ar) & ACCESS_PATTERN_END_ITERATION_NUM;
796+
(ar) & CONGESTION_THRESHOLD;
797+
(ar) & MAX_CLIPSIZE_INCREASE;
798+
799+
(ar) & END_ITERATION;
800+
801+
(ar) & NDR_NETS_RIPUP_HARDINESS;
802+
(ar) & CLOCK_NETS_TRUNK_RIPUP_HARDINESS;
803+
(ar) & CLOCK_NETS_LEAF_RIPUP_HARDINESS;
804+
(ar) & AUTO_TAPER_NDR_NETS;
805+
(ar) & TAPERBOX_RADIUS;
806+
(ar) & NDR_NETS_ABS_PRIORITY;
807+
(ar) & CLOCK_NETS_ABS_PRIORITY;
808+
809+
(ar) & TAPINCOST;
810+
(ar) & TAALIGNCOST;
811+
(ar) & TADRCCOST;
812+
(ar) & TASHAPEBLOATWIDTH;
813+
814+
(ar) & VIACOST;
815+
(ar) & GRIDCOST;
816+
(ar) & ROUTESHAPECOST;
817+
(ar) & MARKERCOST;
818+
(ar) & MARKERBLOATWIDTH;
819+
(ar) & BLOCKCOST;
820+
(ar) & GUIDECOST;
821+
(ar) & SHAPEBLOATWIDTH;
822+
823+
(ar) & REPAIR_PDN_LAYER_NAME;
824+
(ar) & REPAIR_PDN_LAYER_NUM;
825+
(ar) & GC_IGNORE_PDN_LAYER_NUM;
826+
827+
(ar) & unidirectional_layer_names_;
796828
}
797829

798830
} // namespace drt

0 commit comments

Comments
 (0)