From e8b9773363a5543374d0951877f345fc4e7f917c Mon Sep 17 00:00:00 2001 From: Tim Rogers Date: Sat, 9 Feb 2013 08:00:44 -0800 Subject: Addin in a protected constructor that can be used by derived classes of the tag_array so they can allocate their own type of lines [git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 15214] --- src/gpgpu-sim/gpu-cache.cc | 23 +++++++++++++++++++++-- src/gpgpu-sim/gpu-cache.h | 11 +++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/gpgpu-sim/gpu-cache.cc b/src/gpgpu-sim/gpu-cache.cc index a09c92e..0b91727 100644 --- a/src/gpgpu-sim/gpu-cache.cc +++ b/src/gpgpu-sim/gpu-cache.cc @@ -50,12 +50,31 @@ tag_array::~tag_array() delete m_lines; } -tag_array::tag_array( const cache_config &config, int core_id, int type_id ) -: m_config(config), m_access(0), m_miss(0), m_pending_hit(0) +tag_array::tag_array( const cache_config &config, + int core_id, + int type_id, + cache_block_t* new_lines) + : m_config( config ), + m_lines( new_lines ) +{ + init( core_id, type_id ); +} + +tag_array::tag_array( const cache_config &config, + int core_id, + int type_id ) + : m_config( config ) { //assert( m_config.m_write_policy == READ_ONLY ); Old assert m_lines = new cache_block_t[ config.get_num_lines()]; + init( core_id, type_id ); +} +void tag_array::init( int core_id, int type_id ) +{ + m_access = 0; + m_miss = 0; + m_pending_hit = 0; // initialize snapshot counters for visualizer m_prev_snapshot_access = 0; m_prev_snapshot_miss = 0; diff --git a/src/gpgpu-sim/gpu-cache.h b/src/gpgpu-sim/gpu-cache.h index 2d50e67..dabcc18 100644 --- a/src/gpgpu-sim/gpu-cache.h +++ b/src/gpgpu-sim/gpu-cache.h @@ -278,6 +278,7 @@ private: class tag_array { public: + // Use this constructor tag_array( const cache_config &config, int core_id, int type_id ); ~tag_array(); @@ -298,6 +299,16 @@ public: float windowed_miss_rate( ) const; void get_stats(unsigned &total_access, unsigned &total_misses) const; +protected: + // This constructor is intended for use only from derived classes that wish to + // avoid unnecessary memory allocation that takes place in the + // other tag_array constructor + tag_array( const cache_config &config, + int core_id, + int type_id, + cache_block_t* new_lines ); + void init( int core_id, int type_id ); + protected: const cache_config &m_config; -- cgit v1.3