From ddde26b916c99078421992100849101455756415 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Wed, 23 May 2018 20:23:10 +0200 Subject: Add cache statistics --- qtmips_machine/cache.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'qtmips_machine/cache.h') diff --git a/qtmips_machine/cache.h b/qtmips_machine/cache.h index d7bd967..6cf3a2c 100644 --- a/qtmips_machine/cache.h +++ b/qtmips_machine/cache.h @@ -11,7 +11,7 @@ namespace machine { class Cache : public MemoryAccess { Q_OBJECT public: - Cache(Memory *m, const MachineConfigCache *c); + Cache(Memory *m, const MachineConfigCache *c, unsigned memory_access_penalty_r = 1, unsigned memory_access_penalty_w = 1); void wword(std::uint32_t address, std::uint32_t value); std::uint32_t rword(std::uint32_t address) const; @@ -21,6 +21,9 @@ public: unsigned hit() const; // Number of recorded hits unsigned miss() const; // Number of recorded misses + unsigned stalled_cycles() const; // Number of wasted cycles in memory waitin statistic + double speed_improvement() const; // Speed improvement in percents in comare with no used cache + double usage_efficiency() const; // Usage efficiency in percents void reset(); // Reset whole state of cache @@ -29,11 +32,13 @@ public: signals: void hit_update(unsigned) const; void miss_update(unsigned) const; + void statistics_update(unsigned stalled_cycles, double speed_improv, double usage_effic) const; void cache_update(unsigned associat, unsigned set, bool valid, bool dirty, std::uint32_t tag, const std::uint32_t *data) const; private: MachineConfigCache cnf; Memory *mem; + unsigned access_pen_r, access_pen_w; struct cache_data { bool valid, dirty; @@ -47,11 +52,12 @@ private: unsigned **lfu; // Access count } replc; // Data used for replacement policy - mutable unsigned hitc, missc; // Hit and miss counters + mutable unsigned hit_read, miss_read, hit_write, miss_write; // Hit and miss counters void access(std::uint32_t address, std::uint32_t *data, bool write, std::uint32_t value = 0) const; void kick(unsigned associat_indx, unsigned row) const; std::uint32_t base_address(std::uint32_t tag, unsigned row) const; + void update_statistics() const; }; } -- cgit v1.2.3