summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMahmoud <[email protected]>2018-08-27 16:13:13 -0400
committerMahmoud <[email protected]>2018-08-27 16:13:13 -0400
commit5e7bd910c07c066d5d1cc4b12f8aa7abefcdb411 (patch)
tree77794f85142daed7ef280765b567038a3e180f16 /src
parentc4832599f549c40dd48b4a6fabf496b1c369e7d9 (diff)
improving code quality
Diffstat (limited to 'src')
-rw-r--r--src/gpgpu-sim/gpu-cache.cc72
-rw-r--r--src/gpgpu-sim/gpu-cache.h8
-rw-r--r--src/gpgpu-sim/l2cache.cc9
-rw-r--r--src/gpgpu-sim/mem_fetch.h10
4 files changed, 57 insertions, 42 deletions
diff --git a/src/gpgpu-sim/gpu-cache.cc b/src/gpgpu-sim/gpu-cache.cc
index 9d81de9..f181f20 100644
--- a/src/gpgpu-sim/gpu-cache.cc
+++ b/src/gpgpu-sim/gpu-cache.cc
@@ -916,8 +916,8 @@ void baseline_cache::cycle(){
void baseline_cache::fill(mem_fetch *mf, unsigned time){
if(m_config.m_mshr_type == SECTOR_ASSOC) {
- assert(mf->original_mf);
- extra_mf_fields_lookup::iterator e = m_extra_mf_fields.find(mf->original_mf);
+ assert(mf->get_original_mf());
+ extra_mf_fields_lookup::iterator e = m_extra_mf_fields.find(mf->get_original_mf());
assert( e != m_extra_mf_fields.end() );
e->second.pending_read--;
@@ -927,7 +927,7 @@ void baseline_cache::fill(mem_fetch *mf, unsigned time){
return;
} else {
mem_fetch *temp = mf;
- mf = mf->original_mf;
+ mf = mf->get_original_mf();
delete temp;
}
}
@@ -1294,45 +1294,45 @@ data_cache::wr_miss_wa_lazy_fetch_on_read( new_addr_type addr,
new_addr_type mshr_addr = m_config.mshr_addr(mf->get_addr());
- //if the request writes to the whole cache line/sector, then, write and set cache line Modified.
- //and no need to send read request to memory or reserve mshr
+ //if the request writes to the whole cache line/sector, then, write and set cache line Modified.
+ //and no need to send read request to memory or reserve mshr
- if(miss_queue_full(0)) {
- m_stats.inc_fail_stats(mf->get_access_type(), MISS_QUEUE_FULL);
- return RESERVATION_FAIL; // cannot handle request this cycle
- }
+ if(miss_queue_full(0)) {
+ m_stats.inc_fail_stats(mf->get_access_type(), MISS_QUEUE_FULL);
+ return RESERVATION_FAIL; // cannot handle request this cycle
+ }
- bool wb = false;
- evicted_block_info evicted;
+ bool wb = false;
+ evicted_block_info evicted;
- cache_request_status m_status = m_tag_array->access(block_addr,time,cache_index,wb,evicted,mf);
- assert(m_status != HIT);
- cache_block_t* block = m_tag_array->get_block(cache_index);
- block->set_status(MODIFIED, mf->get_access_sector_mask());
- if(m_status == HIT_RESERVED) {
- block->set_ignore_on_fill(true, mf->get_access_sector_mask());
- block->set_modified_on_fill(true, mf->get_access_sector_mask());
- }
+ cache_request_status m_status = m_tag_array->access(block_addr,time,cache_index,wb,evicted,mf);
+ assert(m_status != HIT);
+ cache_block_t* block = m_tag_array->get_block(cache_index);
+ block->set_status(MODIFIED, mf->get_access_sector_mask());
+ if(m_status == HIT_RESERVED) {
+ block->set_ignore_on_fill(true, mf->get_access_sector_mask());
+ block->set_modified_on_fill(true, mf->get_access_sector_mask());
+ }
- if(mf->get_access_byte_mask().count() == m_config.get_atom_sz())
- {
- block->set_m_readable(true, mf->get_access_sector_mask());
- } else
- {
- block->set_m_readable(false, mf->get_access_sector_mask());
- }
+ if(mf->get_access_byte_mask().count() == m_config.get_atom_sz())
+ {
+ block->set_m_readable(true, mf->get_access_sector_mask());
+ } else
+ {
+ block->set_m_readable(false, mf->get_access_sector_mask());
+ }
- if( m_status != RESERVATION_FAIL ){
- // If evicted block is modified and not a write-through
- // (already modified lower level)
- if( wb && (m_config.m_write_policy != WRITE_THROUGH) ) {
- mem_fetch *wb = m_memfetch_creator->alloc(evicted.m_block_addr,
- m_wrbk_type,evicted.m_modified_size,true);
- send_write_request(wb, cache_event(WRITE_BACK_REQUEST_SENT, evicted), time, events);
- }
- return MISS;
+ if( m_status != RESERVATION_FAIL ){
+ // If evicted block is modified and not a write-through
+ // (already modified lower level)
+ if( wb && (m_config.m_write_policy != WRITE_THROUGH) ) {
+ mem_fetch *wb = m_memfetch_creator->alloc(evicted.m_block_addr,
+ m_wrbk_type,evicted.m_modified_size,true);
+ send_write_request(wb, cache_event(WRITE_BACK_REQUEST_SENT, evicted), time, events);
}
- return RESERVATION_FAIL;
+ return MISS;
+ }
+ return RESERVATION_FAIL;
}
/// No write-allocate miss: Simply send write request to lower level memory
diff --git a/src/gpgpu-sim/gpu-cache.h b/src/gpgpu-sim/gpu-cache.h
index 96b9a6d..dee43f2 100644
--- a/src/gpgpu-sim/gpu-cache.h
+++ b/src/gpgpu-sim/gpu-cache.h
@@ -355,15 +355,18 @@ struct sector_cache_block : public cache_block_t {
return m_status[sidx];
}
+
virtual void set_status(enum cache_block_state status, mem_access_sector_mask_t sector_mask)
{
unsigned sidx = get_sector_index(sector_mask);
m_status[sidx] = status;
}
+
virtual unsigned get_last_access_time()
{
return m_line_last_access_time;
}
+
virtual void set_last_access_time(unsigned time, mem_access_sector_mask_t sector_mask)
{
unsigned sidx = get_sector_index(sector_mask);
@@ -371,25 +374,30 @@ struct sector_cache_block : public cache_block_t {
m_last_sector_access_time[sidx] = time;
m_line_last_access_time = time;
}
+
virtual unsigned get_alloc_time()
{
return m_line_alloc_time;
}
+
virtual void set_ignore_on_fill(bool m_ignore, mem_access_sector_mask_t sector_mask)
{
unsigned sidx = get_sector_index(sector_mask);
m_ignore_on_fill_status[sidx] = m_ignore;
}
+
virtual void set_modified_on_fill(bool m_modified, mem_access_sector_mask_t sector_mask)
{
unsigned sidx = get_sector_index(sector_mask);
m_set_modified_on_fill[sidx] = m_modified;
}
+
virtual void set_m_readable(bool readable, mem_access_sector_mask_t sector_mask)
{
unsigned sidx = get_sector_index(sector_mask);
m_readable[sidx] = readable;
}
+
virtual bool is_readable(mem_access_sector_mask_t sector_mask) {
unsigned sidx = get_sector_index(sector_mask);
return m_readable[sidx];
diff --git a/src/gpgpu-sim/l2cache.cc b/src/gpgpu-sim/l2cache.cc
index 359d3c8..f42610f 100644
--- a/src/gpgpu-sim/l2cache.cc
+++ b/src/gpgpu-sim/l2cache.cc
@@ -362,10 +362,11 @@ void memory_sub_partition::cache_cycle( unsigned cycle )
}else{
if(m_config->m_L2_config.m_write_alloc_policy == FETCH_ON_WRITE)
{
- assert(mf->original_wr_mf);
- mf->original_wr_mf->set_reply();
- mf->original_wr_mf->set_status(IN_PARTITION_L2_TO_ICNT_QUEUE,gpu_sim_cycle+gpu_tot_sim_cycle);
- m_L2_icnt_queue->push(mf->original_wr_mf);
+ mem_fetch* original_wr_mf = mf->get_original_wr_mf();
+ assert(original_wr_mf);
+ original_wr_mf->set_reply();
+ original_wr_mf->set_status(IN_PARTITION_L2_TO_ICNT_QUEUE,gpu_sim_cycle+gpu_tot_sim_cycle);
+ m_L2_icnt_queue->push(original_wr_mf);
}
m_request_tracker.erase(mf);
delete mf;
diff --git a/src/gpgpu-sim/mem_fetch.h b/src/gpgpu-sim/mem_fetch.h
index 278cf32..da67d49 100644
--- a/src/gpgpu-sim/mem_fetch.h
+++ b/src/gpgpu-sim/mem_fetch.h
@@ -115,8 +115,10 @@ public:
const memory_config *get_mem_config(){return m_mem_config;}
unsigned get_num_flits(bool simt_to_mem);
- mem_fetch* original_mf;
- mem_fetch* original_wr_mf;
+
+ mem_fetch* get_original_mf() { return original_mf; }
+ mem_fetch* get_original_wr_mf() { return original_wr_mf; }
+
private:
// request source information
unsigned m_request_uid;
@@ -148,6 +150,10 @@ private:
const class memory_config *m_mem_config;
unsigned icnt_flit_size;
+
+ mem_fetch* original_mf; //this pointer is set up when a request is divided into sector requests at L2 cache (if the req size > L2 sector size), so the pointer refers to the original request
+ mem_fetch* original_wr_mf; //this pointer refers to the original write req, when fetch-on-write policy is used
+
};
#endif