summaryrefslogtreecommitdiff
path: root/src/gpgpu-sim/gpu-cache.h
diff options
context:
space:
mode:
authormkhairy <[email protected]>2021-05-19 22:26:33 -0400
committerGitHub <[email protected]>2021-05-19 22:26:33 -0400
commit2aef4e3d5a662d04da03ec782b116d16a5bcc012 (patch)
tree58910c0e1d58f9528f50affb1354ae072ffc4adf /src/gpgpu-sim/gpu-cache.h
parent604baaf59255776b4714c0270ce36ad823d34df4 (diff)
parent0d33266ff6ca9b880dff40f6338c8a5cae696438 (diff)
Merge pull request #16 from mkhairy/dev
Updating config files and code refactoring of Junuri's code
Diffstat (limited to 'src/gpgpu-sim/gpu-cache.h')
-rw-r--r--src/gpgpu-sim/gpu-cache.h59
1 files changed, 25 insertions, 34 deletions
diff --git a/src/gpgpu-sim/gpu-cache.h b/src/gpgpu-sim/gpu-cache.h
index d801528..6698d92 100644
--- a/src/gpgpu-sim/gpu-cache.h
+++ b/src/gpgpu-sim/gpu-cache.h
@@ -210,13 +210,13 @@ struct line_cache_block : public cache_block_t {
m_status = status;
}
virtual void set_byte_mask(mem_fetch *mf) {
- m_byte_mask = m_byte_mask | mf->get_access_byte_mask();
+ m_dirty_byte_mask = m_dirty_byte_mask | mf->get_access_byte_mask();
}
virtual void set_byte_mask(mem_access_byte_mask_t byte_mask) {
- m_byte_mask = m_byte_mask | byte_mask;
+ m_dirty_byte_mask = m_dirty_byte_mask | byte_mask;
}
virtual mem_access_byte_mask_t get_dirty_byte_mask() {
- return m_byte_mask;
+ return m_dirty_byte_mask;
}
virtual mem_access_sector_mask_t get_dirty_sector_mask() {
mem_access_sector_mask_t sector_mask;
@@ -270,7 +270,7 @@ struct line_cache_block : public cache_block_t {
bool m_set_readable_on_fill;
bool m_set_byte_mask_on_fill;
bool m_readable;
- mem_access_byte_mask_t m_byte_mask;
+ mem_access_byte_mask_t m_dirty_byte_mask;
};
struct sector_cache_block : public cache_block_t {
@@ -290,7 +290,7 @@ struct sector_cache_block : public cache_block_t {
m_line_alloc_time = 0;
m_line_last_access_time = 0;
m_line_fill_time = 0;
- m_byte_mask.reset();
+ m_dirty_byte_mask.reset();
}
virtual void allocate(new_addr_type tag, new_addr_type block_addr,
@@ -405,13 +405,13 @@ struct sector_cache_block : public cache_block_t {
}
virtual void set_byte_mask(mem_fetch *mf) {
- m_byte_mask = m_byte_mask | mf->get_access_byte_mask();
+ m_dirty_byte_mask = m_dirty_byte_mask | mf->get_access_byte_mask();
}
virtual void set_byte_mask(mem_access_byte_mask_t byte_mask) {
- m_byte_mask = m_byte_mask | byte_mask;
+ m_dirty_byte_mask = m_dirty_byte_mask | byte_mask;
}
virtual mem_access_byte_mask_t get_dirty_byte_mask() {
- return m_byte_mask;
+ return m_dirty_byte_mask;
}
virtual mem_access_sector_mask_t get_dirty_sector_mask() {
mem_access_sector_mask_t sector_mask;
@@ -492,7 +492,7 @@ struct sector_cache_block : public cache_block_t {
bool m_set_readable_on_fill[SECTOR_CHUNCK_SIZE];
bool m_set_byte_mask_on_fill;
bool m_readable[SECTOR_CHUNCK_SIZE];
- mem_access_byte_mask_t m_byte_mask;
+ mem_access_byte_mask_t m_dirty_byte_mask;
unsigned get_sector_index(mem_access_sector_mask_t sector_mask) {
assert(sector_mask.count() == 1);
@@ -575,14 +575,6 @@ class cache_config {
}
exit_parse_error();
}
-
- // set * assoc * cacheline size. Then convert Byte to KB
- unsigned original_size = m_nset * m_assoc * m_line_sz / 1024;
- if (m_unified_cache_size > 0) {
- max_cache_multiplier = m_unified_cache_size / original_size;
- } else {
- max_cache_multiplier = MAX_DEFAULT_CACHE_SIZE_MULTIBLIER;
- }
switch (ct) {
case 'N':
@@ -604,16 +596,6 @@ class cache_config {
default:
exit_parse_error();
}
- switch (rp) {
- case 'L':
- m_replacement_policy = LRU;
- break;
- case 'F':
- m_replacement_policy = FIFO;
- break;
- default:
- exit_parse_error();
- }
switch (wp) {
case 'R':
m_write_policy = READ_ONLY;
@@ -693,7 +675,6 @@ class cache_config {
m_sector_sz_log2 = LOGB2(SECTOR_SIZE);
original_m_assoc = m_assoc;
-
// For more details about difference between FETCH_ON_WRITE and WRITE
// VALIDAE policies Read: Jouppi, Norman P. "Cache write policies and
// performance". ISCA 93. WRITE_ALLOCATE is the old write policy in
@@ -785,13 +766,11 @@ class cache_config {
}
unsigned get_max_num_lines() const {
assert(m_valid);
- // gpgpu_unified_cache_size is in KB while original_sz is in B
- return max_cache_multiplier * m_nset * original_m_assoc;
+ return get_max_cache_multiplier() * m_nset * original_m_assoc;
}
unsigned get_max_assoc() const {
assert(m_valid);
- // gpgpu_unified_cache_size is in KB while original_sz is in B
- return max_cache_multiplier * original_m_assoc;
+ return get_max_cache_multiplier() * original_m_assoc;
}
void print(FILE *fp) const {
fprintf(fp, "Size = %d B (%d Set x %d-way x %d byte line)\n",
@@ -800,6 +779,8 @@ class cache_config {
virtual unsigned set_index(new_addr_type addr) const;
+ virtual unsigned get_max_cache_multiplier() const { return MAX_DEFAULT_CACHE_SIZE_MULTIBLIER;}
+
unsigned hash_function(new_addr_type addr, unsigned m_nset,
unsigned m_line_sz_log2, unsigned m_nset_log2,
unsigned m_index_function) const;
@@ -841,7 +822,6 @@ class cache_config {
char *m_config_stringPrefL1;
char *m_config_stringPrefShared;
FuncCache cache_status;
- unsigned m_unified_cache_size;
unsigned m_wr_percent;
write_allocate_policy_t get_write_allocate_policy() {
return m_write_alloc_policy;
@@ -868,7 +848,6 @@ class cache_config {
unsigned m_sector_sz_log2;
unsigned original_m_assoc;
bool m_is_streaming;
- unsigned max_cache_multiplier;
enum replacement_policy_t m_replacement_policy; // 'L' = LRU, 'F' = FIFO
enum write_policy_t
@@ -923,6 +902,18 @@ class l1d_cache_config : public cache_config {
unsigned l1_banks_byte_interleaving;
unsigned l1_banks_byte_interleaving_log2;
unsigned l1_banks_hashing_function;
+ unsigned m_unified_cache_size;
+ virtual unsigned get_max_cache_multiplier() const {
+ // set * assoc * cacheline size. Then convert Byte to KB
+ // gpgpu_unified_cache_size is in KB while original_sz is in B
+ if (m_unified_cache_size > 0) {
+ unsigned original_size = m_nset * original_m_assoc * m_line_sz / 1024;
+ assert(m_unified_cache_size % original_size == 0);
+ return m_unified_cache_size / original_size;
+ } else {
+ return MAX_DEFAULT_CACHE_SIZE_MULTIBLIER;
+ }
+ }
};
class l2_cache_config : public cache_config {