summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gpgpu-sim/gpu-cache.cc23
-rw-r--r--src/gpgpu-sim/gpu-cache.h11
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();
@@ -299,6 +300,16 @@ public:
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;