summaryrefslogtreecommitdiff
path: root/src/gpgpu-sim/l2cache.cc
diff options
context:
space:
mode:
authorAkshay Jain <[email protected]>2018-03-22 04:20:13 -0400
committerAkshay Jain <[email protected]>2018-03-22 04:20:13 -0400
commit777ab7fd6761a6250bc8e4f37994125a3f8d331b (patch)
treebdd53057d454ba5b84d951e2444b71ee5141a93d /src/gpgpu-sim/l2cache.cc
parent2d8d4455aa710914e87c5611cbb71f9330cdbc73 (diff)
Change 252 by jain156@akshayj-lt1 on 2017/05/29 10:51:32
Checking in the data footprint stats as reported in the micro paper. The implementation uses gpgpu pointer, due to which I don't feel fine pushing to mainline. May be I can do the stats check and increment in l2cache.cc through a public function to avoid exposing gpgpu pointer to public
Diffstat (limited to 'src/gpgpu-sim/l2cache.cc')
-rw-r--r--src/gpgpu-sim/l2cache.cc20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/gpgpu-sim/l2cache.cc b/src/gpgpu-sim/l2cache.cc
index b1465a8..a4aaf28 100644
--- a/src/gpgpu-sim/l2cache.cc
+++ b/src/gpgpu-sim/l2cache.cc
@@ -62,15 +62,16 @@ mem_fetch * partition_mf_allocator::alloc(new_addr_type addr, mem_access_type ty
memory_partition_unit::memory_partition_unit( unsigned partition_id,
const struct memory_config *config,
- class memory_stats_t *stats )
-: m_id(partition_id), m_config(config), m_stats(stats), m_arbitration_metadata(config)
+ class memory_stats_t *stats,
+ class gpgpu_sim *gpu)
+: m_id(partition_id), m_config(config), m_stats(stats), m_arbitration_metadata(config), m_gpu(gpu)
{
m_dram = new dram_t(m_id,m_config,m_stats,this);
m_sub_partition = new memory_sub_partition*[m_config->m_n_sub_partition_per_memory_channel];
for (unsigned p = 0; p < m_config->m_n_sub_partition_per_memory_channel; p++) {
unsigned sub_partition_id = m_id * m_config->m_n_sub_partition_per_memory_channel + p;
- m_sub_partition[p] = new memory_sub_partition(sub_partition_id, m_config, stats);
+ m_sub_partition[p] = new memory_sub_partition(sub_partition_id, m_config, stats, m_gpu);
}
}
@@ -310,11 +311,13 @@ void memory_partition_unit::print( FILE *fp ) const
memory_sub_partition::memory_sub_partition( unsigned sub_partition_id,
const struct memory_config *config,
- class memory_stats_t *stats )
+ class memory_stats_t *stats ,
+ class gpgpu_sim *gpu)
{
m_id = sub_partition_id;
m_config=config;
m_stats=stats;
+ m_gpu=gpu;
m_memcpy_cycle_offset = 0;
assert(m_id < m_config->m_n_mem_sub_partition);
@@ -410,6 +413,15 @@ void memory_sub_partition::cache_cycle( unsigned cycle )
bool read_sent = was_read_sent(events);
MEM_SUBPART_DPRINTF("Probing L2 cache Address=%llx, status=%u\n", mf->get_addr(), status);
+ if ( (mf->get_access_type() == GLOBAL_ACC_R) ||
+ (mf->get_access_type() == GLOBAL_ACC_W) ||
+ (mf->get_access_type() == LOCAL_ACC_R) ||
+ (mf->get_access_type() == LOCAL_ACC_W) ||
+ (mf->get_access_type() == CONST_ACC_R) ) {
+ if (!m_gpu->data_footprint_stats.count(mf->get_addr()))
+ m_gpu->data_footprint_stats.insert(mf->get_addr());
+ }
+
if ( status == HIT ) {
if( !write_sent ) {
// L2 cache replies