aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/placer1.cc11
-rw-r--r--common/router1.cc4
-rw-r--r--common/timing.cc3
3 files changed, 14 insertions, 4 deletions
diff --git a/common/placer1.cc b/common/placer1.cc
index b42ef2ff..cec37847 100644
--- a/common/placer1.cc
+++ b/common/placer1.cc
@@ -24,6 +24,7 @@
#include "placer1.h"
#include <algorithm>
#include <boost/lexical_cast.hpp>
+#include <chrono>
#include <cmath>
#include <iostream>
#include <limits>
@@ -148,7 +149,7 @@ class SAPlacer
}
std::sort(autoplaced.begin(), autoplaced.end(), [](CellInfo *a, CellInfo *b) { return a->name < b->name; });
ctx->shuffle(autoplaced);
-
+ auto iplace_start = std::chrono::high_resolution_clock::now();
// Place cells randomly initially
log_info("Creating initial placement for remaining %d cells.\n", int(autoplaced.size()));
@@ -165,7 +166,9 @@ class SAPlacer
if (ctx->slack_redist_iter > 0)
assign_budget(ctx);
ctx->yield();
-
+ auto iplace_end = std::chrono::high_resolution_clock::now();
+ log_info("Initial placement time %.02fs\n", std::chrono::duration<float>(iplace_end - iplace_start).count());
+ auto saplace_start = std::chrono::high_resolution_clock::now();
log_info("Running simulated annealing placer.\n");
// Calculate metric after initial placement
@@ -283,6 +286,10 @@ class SAPlacer
// Let the UI show visualization updates.
ctx->yield();
}
+
+ auto saplace_end = std::chrono::high_resolution_clock::now();
+ log_info("SA placement time %.02fs\n", std::chrono::duration<float>(saplace_end - saplace_start).count());
+
// Final post-pacement validitiy check
ctx->yield();
for (auto bel : ctx->getBels()) {
diff --git a/common/router1.cc b/common/router1.cc
index cbc0df90..28a422c8 100644
--- a/common/router1.cc
+++ b/common/router1.cc
@@ -17,6 +17,7 @@
*
*/
+#include <chrono>
#include <cmath>
#include <queue>
@@ -752,6 +753,7 @@ bool router1(Context *ctx, const Router1Cfg &cfg)
log_break();
log_info("Routing..\n");
ctx->lock();
+ auto rstart = std::chrono::high_resolution_clock::now();
log_info("Setting up routing queue.\n");
@@ -803,7 +805,9 @@ bool router1(Context *ctx, const Router1Cfg &cfg)
router.arcs_with_ripup - last_arcs_with_ripup, router.arcs_without_ripup - last_arcs_without_ripup,
int(router.arc_queue.size()));
log_info("Routing complete.\n");
+ auto rend = std::chrono::high_resolution_clock::now();
ctx->yield();
+ log_info("Route time %.02fs\n", std::chrono::duration<float>(rend - rstart).count());
#ifndef NDEBUG
router.check();
diff --git a/common/timing.cc b/common/timing.cc
index 13f0e07b..8a48b761 100644
--- a/common/timing.cc
+++ b/common/timing.cc
@@ -930,8 +930,7 @@ void timing_analysis(Context *ctx, bool print_histogram, bool print_fmax, bool p
unsigned bar_width = 60;
auto min_slack = slack_histogram.begin()->first;
auto max_slack = slack_histogram.rbegin()->first;
- auto bin_size = std::max(1u, (max_slack - min_slack) / num_bins);
- num_bins = std::min((max_slack - min_slack) / bin_size, num_bins) + 1;
+ auto bin_size = std::max<unsigned>(1, ceil((max_slack - min_slack) / float(num_bins)));
std::vector<unsigned> bins(num_bins);
unsigned max_freq = 0;
for (const auto &i : slack_histogram) {