From: Clifford Wolf Date: Fri, 22 Nov 2013 13:08:10 +0000 (+0100) Subject: Added more performance measurement infrastructure X-Git-Tag: yosys-0.2.0~335 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=058ceda6a0e955539d4439fc8fcf53ebf2787331;p=yosys.git Added more performance measurement infrastructure --- diff --git a/Makefile b/Makefile index 3551723fd..06466fda5 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ all: top-all CXXFLAGS = -Wall -Wextra -ggdb -I"$(shell pwd)" -MD -D_YOSYS_ -fPIC LDFLAGS = -rdynamic -LDLIBS = -lstdc++ -lreadline -lm -ldl +LDLIBS = -lstdc++ -lreadline -lm -ldl -lrt QMAKE = qmake-qt4 YOSYS_VER := 0.0.x @@ -155,7 +155,7 @@ config-release: clean echo 'CONFIG := release' > Makefile.conf config-gprof: clean - echo 'CONFIG := release' > Makefile.conf + echo 'CONFIG := gcc-debug' > Makefile.conf echo 'ENABLE_GPROF := 1' >> Makefile.conf config-sudo: diff --git a/kernel/log.h b/kernel/log.h index dbfb6103e..d88dda889 100644 --- a/kernel/log.h +++ b/kernel/log.h @@ -22,6 +22,7 @@ #include "kernel/rtlil.h" #include +#include #include extern std::vector log_files; @@ -52,4 +53,44 @@ const char *log_signal(const RTLIL::SigSpec &sig, bool autoint = true); #define log_abort() log_error("Abort in %s:%d.\n", __FILE__, __LINE__) #define log_assert(_assert_expr_) do { if (_assert_expr_) break; log_error("Assert `%s' failed in %s:%d.\n", #_assert_expr_, __FILE__, __LINE__); } while (0) +// simple timer for performance measurements +// toggle the '#if 1' to get a baseline for the perormance penalty added by the measurement +struct PerformanceTimer +{ +#if 1 + int64_t total_ns; + + PerformanceTimer() { + total_ns = 0; + } + + static int64_t query() { + struct timespec ts; + clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts); + return int64_t(ts.tv_sec)*1000000000 + ts.tv_nsec; + } + + void reset() { + total_ns = 0; + } + + void add() { + total_ns += query(); + } + + void sub() { + total_ns -= query(); + } + + float sec() const { + return total_ns * 1e-9; + } +#else + void reset() { } + void add() { } + void sub() { } + float sec() const { return 0; } +#endif +}; + #endif