Skip to content

Commit 7792f58

Browse files
authored
Merge pull request #8685 from The-OpenROAD-Project-staging/rsz-wire-runtime
rsz: Measure 'wire stepping' runtime
2 parents 2292048 + 214d959 commit 7792f58

4 files changed

Lines changed: 24 additions & 115 deletions

File tree

src/rsz/src/Rebuffer.cc

Lines changed: 13 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
#include "sta/TimingArc.hh"
4141
#include "sta/Units.hh"
4242
#include "utl/Logger.h"
43+
#include "utl/timer.h"
4344

4445
namespace rsz {
4546

@@ -64,16 +65,6 @@ using BnetSeq = BufferedNetSeq;
6465
using BnetPtr = BufferedNetPtr;
6566
using BnetMetrics = BufferedNet::Metrics;
6667

67-
// from Rebuffer.cc
68-
void characterizeChoiceTree(dbNetwork* nwk,
69-
int level,
70-
const BufferedNetPtr& choice,
71-
int& buffer_count,
72-
int& load_count,
73-
int& wire_count,
74-
int& junction_count,
75-
std::set<odb::dbModule*>& load_modules);
76-
7768
// Template magic to make it easier to write algorithms descending
7869
// over the buffer tree in the form of lambdas; it allows recursive
7970
// lambda calling and it keeps track of the level number which is important
@@ -662,6 +653,7 @@ BnetPtr Rebuffer::bufferForTiming(const BnetPtr& tree,
662653
return opts1;
663654
}
664655

656+
utl::DebugScopedTimer timer(long_wire_stepping_runtime_);
665657
int round = 0;
666658
while (location != node->location()) {
667659
debugPrint(logger_,
@@ -1771,79 +1763,6 @@ std::vector<Instance*> Rebuffer::collectImportedTreeBufferInstances(
17711763
return insts;
17721764
}
17731765

1774-
void characterizeChoiceTree(dbNetwork* nwk,
1775-
int level,
1776-
const BufferedNetPtr& choice,
1777-
int& buffer_count,
1778-
int& load_count,
1779-
int& wire_count,
1780-
int& junction_count,
1781-
std::set<odb::dbModule*>& load_modules)
1782-
{
1783-
switch (choice->type()) {
1784-
case BufferedNetType::buffer: {
1785-
buffer_count++;
1786-
characterizeChoiceTree(nwk,
1787-
level + 1,
1788-
choice->ref(),
1789-
buffer_count,
1790-
load_count,
1791-
wire_count,
1792-
junction_count,
1793-
load_modules);
1794-
break;
1795-
}
1796-
case BufferedNetType::wire: {
1797-
wire_count++;
1798-
characterizeChoiceTree(nwk,
1799-
level + 1,
1800-
choice->ref(),
1801-
buffer_count,
1802-
load_count,
1803-
wire_count,
1804-
junction_count,
1805-
load_modules);
1806-
break;
1807-
}
1808-
case BufferedNetType::junction: {
1809-
junction_count++;
1810-
characterizeChoiceTree(nwk,
1811-
level + 1,
1812-
choice->ref(),
1813-
buffer_count,
1814-
load_count,
1815-
wire_count,
1816-
junction_count,
1817-
load_modules);
1818-
characterizeChoiceTree(nwk,
1819-
level + 1,
1820-
choice->ref2(),
1821-
buffer_count,
1822-
load_count,
1823-
wire_count,
1824-
junction_count,
1825-
load_modules);
1826-
break;
1827-
}
1828-
case BufferedNetType::load: {
1829-
const Pin* load_pin = choice->loadPin();
1830-
odb::dbITerm* load_iterm = nullptr;
1831-
odb::dbBTerm* load_bterm = nullptr;
1832-
odb::dbModITerm* load_moditerm = nullptr;
1833-
1834-
nwk->staToDb(load_pin, load_iterm, load_bterm, load_moditerm);
1835-
if (load_iterm) {
1836-
dbInst* load_inst = load_iterm->getInst();
1837-
if (load_inst) {
1838-
load_modules.insert(load_inst->getModule());
1839-
}
1840-
}
1841-
load_count++;
1842-
break;
1843-
}
1844-
}
1845-
}
1846-
18471766
// Martin (2024-04-18): This is copied over from original RepairSetup
18481767
// buffering mostly unchanged and is ripe for clean-up/rewrite later.
18491768
int Rebuffer::exportBufferTree(const BufferedNetPtr& choice,
@@ -2060,33 +1979,6 @@ int Rebuffer::fanout(Vertex* vertex) const
20601979
return fanout;
20611980
}
20621981

2063-
class ScopedTimer
2064-
{
2065-
public:
2066-
using Clock = std::chrono::steady_clock;
2067-
2068-
ScopedTimer(Logger* logger, double& accumulator)
2069-
: logger_(logger), accumulator_(accumulator)
2070-
{
2071-
if (logger_->debugCheck(RSZ, "rebuffer", 1)) {
2072-
start_ = Clock::now();
2073-
}
2074-
}
2075-
2076-
~ScopedTimer()
2077-
{
2078-
if (logger_->debugCheck(RSZ, "rebuffer", 1)) {
2079-
accumulator_
2080-
+= std::chrono::duration<double>{Clock::now() - start_}.count();
2081-
}
2082-
}
2083-
2084-
private:
2085-
Logger* logger_;
2086-
double& accumulator_;
2087-
std::chrono::time_point<Clock> start_;
2088-
};
2089-
20901982
void Rebuffer::setPin(Pin* drvr_pin)
20911983
{
20921984
// set rebuffering globals
@@ -2118,6 +2010,7 @@ void Rebuffer::setPin(Pin* drvr_pin)
21182010
void Rebuffer::fullyRebuffer(Pin* user_pin)
21192011
{
21202012
double sta_runtime = 0, bft_runtime = 0, ra_runtime = 0;
2013+
long_wire_stepping_runtime_ = 0;
21212014

21222015
init();
21232016
resizer_->ensureLevelDrvrVertices();
@@ -2193,7 +2086,7 @@ void Rebuffer::fullyRebuffer(Pin* user_pin)
21932086
Vertex* drvr = graph_->pinDrvrVertex(drvr_pin);
21942087

21952088
{
2196-
ScopedTimer timer(logger_, sta_runtime);
2089+
utl::DebugScopedTimer timer(sta_runtime);
21972090
search_->findRequireds(drvr->level());
21982091
}
21992092

@@ -2241,7 +2134,7 @@ void Rebuffer::fullyRebuffer(Pin* user_pin)
22412134
BnetPtr timing_tree = unbuffered_tree;
22422135

22432136
{
2244-
ScopedTimer timer(logger_, bft_runtime);
2137+
utl::DebugScopedTimer timer(bft_runtime);
22452138
for (int i = 0; i < 3; i++) {
22462139
timing_tree = bufferForTiming(timing_tree);
22472140
if (!timing_tree) {
@@ -2308,7 +2201,7 @@ void Rebuffer::fullyRebuffer(Pin* user_pin)
23082201

23092202
BnetPtr area_opt_tree = timing_tree;
23102203
{
2311-
ScopedTimer timer(logger_, ra_runtime);
2204+
utl::DebugScopedTimer timer(ra_runtime);
23122205
for (int i = 0; i < 5 && area_opt_tree; i++) {
23132206
area_opt_tree
23142207
= recoverArea(area_opt_tree, target_slack, ((float) (1 + i)) / 5);
@@ -2398,7 +2291,7 @@ void Rebuffer::fullyRebuffer(Pin* user_pin)
23982291
estimate_parasitics_->updateParasitics();
23992292

24002293
{
2401-
ScopedTimer timer(logger_, sta_runtime);
2294+
utl::DebugScopedTimer timer(sta_runtime);
24022295
sta_->findDelays(max_level);
24032296
search_->findArrivals(max_level);
24042297
}
@@ -2416,6 +2309,12 @@ void Rebuffer::fullyRebuffer(Pin* user_pin)
24162309
debugPrint(logger_, RSZ, "rebuffer", 1, "STA {:.2f}", sta_runtime);
24172310
debugPrint(
24182311
logger_, RSZ, "rebuffer", 1, "Buffer for timing {:.2f}", bft_runtime);
2312+
debugPrint(logger_,
2313+
RSZ,
2314+
"rebuffer",
2315+
1,
2316+
" of which long wire stepping {:.2f}",
2317+
long_wire_stepping_runtime_);
24192318
debugPrint(logger_, RSZ, "rebuffer", 1, "Recover area {:.2f}", ra_runtime);
24202319
}
24212320

src/rsz/src/Rebuffer.hh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,8 @@ class Rebuffer : public sta::dbStaState
172172
static constexpr float elmore_skew_factor_ = 1.39;
173173
static constexpr float relaxation_factor_ = 0.01;
174174

175+
double long_wire_stepping_runtime_ = 0;
176+
175177
friend class RepairSetup;
176178
friend class BufferMove;
177179
};

src/utl/include/utl/timer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class DebugScopedTimer : public Timer
4141
const char* group,
4242
int level,
4343
const std::string& msg);
44+
DebugScopedTimer(double& aggregate);
4445
~DebugScopedTimer() override;
4546

4647
private:

src/utl/src/timer.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,16 @@ DebugScopedTimer::DebugScopedTimer(double& aggregate,
6868
{
6969
}
7070

71+
DebugScopedTimer::DebugScopedTimer(double& aggregate)
72+
: Timer(), logger_(nullptr), aggregate_(&aggregate)
73+
{
74+
}
75+
7176
DebugScopedTimer::~DebugScopedTimer()
7277
{
73-
debugPrint(logger_, tool_, group_, level_, msg_, *this);
78+
if (logger_) {
79+
debugPrint(logger_, tool_, group_, level_, msg_, *this);
80+
}
7481
if (aggregate_) {
7582
*aggregate_ += elapsed();
7683
}

0 commit comments

Comments
 (0)