summaryrefslogtreecommitdiff
path: root/src/gpgpu-sim/shader.cc
diff options
context:
space:
mode:
authormkhairy <[email protected]>2019-09-23 15:29:49 -0400
committerGitHub <[email protected]>2019-09-23 15:29:49 -0400
commite5264f1dbcdadfb7614797ebff013f163dd10a6a (patch)
tree156f3b64414a0a8cf6a6619852c392ad80c77d6e /src/gpgpu-sim/shader.cc
parentdba877b45fe11187d56904bbd169f4e0a5ad0586 (diff)
parentcaea1a724ebd32a9c11e2af25e79862f84baf9d6 (diff)
Merge pull request #32 from mkhairy/dev
Dev
Diffstat (limited to 'src/gpgpu-sim/shader.cc')
-rw-r--r--src/gpgpu-sim/shader.cc61
1 files changed, 40 insertions, 21 deletions
diff --git a/src/gpgpu-sim/shader.cc b/src/gpgpu-sim/shader.cc
index c7738c0..ef38593 100644
--- a/src/gpgpu-sim/shader.cc
+++ b/src/gpgpu-sim/shader.cc
@@ -3082,35 +3082,54 @@ unsigned int shader_core_config::max_cta(const kernel_info_t &k) const {
abort();
}
- if (adaptive_volta_cache_config && !k.volta_cache_config_set) {
- // For Volta, we assign the remaining shared memory to L1 cache
- // For more info, see
+ if (adaptive_cache_config && !k.cache_config_set) {
+ // For more info about adaptive cache, see
// https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#shared-memory-7-x
unsigned total_shmed = kernel_info->smem * result;
assert(total_shmed >= 0 && total_shmed <= gpgpu_shmem_size);
- assert(gpgpu_shmem_size == 98304); // Volta has 96 KB shared
- assert(m_L1D_config.get_nset() == 4); // Volta L1 has four sets
+ // assert(gpgpu_shmem_size == 98304); //Volta has 96 KB shared
+ // assert(m_L1D_config.get_nset() == 4); //Volta L1 has four sets
if (total_shmed < gpgpu_shmem_size) {
- if (total_shmed == 0)
- m_L1D_config.set_assoc(256); // L1 is 128KB ans shd=0
- else if (total_shmed > 0 && total_shmed <= 8192)
- m_L1D_config.set_assoc(240); // L1 is 120KB ans shd=8KB
- else if (total_shmed > 8192 && total_shmed <= 16384)
- m_L1D_config.set_assoc(224); // L1 is 112KB ans shd=16KB
- else if (total_shmed > 16384 && total_shmed <= 32768)
- m_L1D_config.set_assoc(192); // L1 is 96KB ans shd=32KB
- else if (total_shmed > 32768 && total_shmed <= 65536)
- m_L1D_config.set_assoc(128); // L1 is 64KB ans shd=64KB
- else if (total_shmed > 65536 && total_shmed <= gpgpu_shmem_size)
- m_L1D_config.set_assoc(64); // L1 is 32KB and shd=96KB
- else
- assert(0);
+ switch (adaptive_cache_config) {
+ case FIXED:
+ break;
+ case VOLTA: {
+ // For Volta, we assign the remaining shared memory to L1 cache
+ // For more info about adaptive cache, see
+ // https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#shared-memory-7-x
+ assert(gpgpu_shmem_size == 98304); // Volta has 96 KB shared
+
+ // To Do: make it flexible and not tuned to 9KB share memory
+ unsigned max_assoc = m_L1D_config.get_max_assoc();
+ if (total_shmed == 0)
+ m_L1D_config.set_assoc(max_assoc); // L1 is 128KB and shd=0
+ else if (total_shmed > 0 && total_shmed <= 8192)
+ m_L1D_config.set_assoc(0.9375 *
+ max_assoc); // L1 is 120KB and shd=8KB
+ else if (total_shmed > 8192 && total_shmed <= 16384)
+ m_L1D_config.set_assoc(0.875 *
+ max_assoc); // L1 is 112KB and shd=16KB
+ else if (total_shmed > 16384 && total_shmed <= 32768)
+ m_L1D_config.set_assoc(0.75 * max_assoc); // L1 is 96KB and
+ // shd=32KB
+ else if (total_shmed > 32768 && total_shmed <= 65536)
+ m_L1D_config.set_assoc(0.5 * max_assoc); // L1 is 64KB and shd=64KB
+ else if (total_shmed > 65536 && total_shmed <= gpgpu_shmem_size)
+ m_L1D_config.set_assoc(0.25 * max_assoc); // L1 is 32KB and
+ // shd=96KB
+ else
+ assert(0);
+ break;
+ }
+ default:
+ assert(0);
+ }
- printf("GPGPU-Sim: Reconfigure L1 cache in Volta Archi to %uKB\n",
+ printf("GPGPU-Sim: Reconfigure L1 cache to %uKB\n",
m_L1D_config.get_total_size_inKB());
}
- k.volta_cache_config_set = true;
+ k.cache_config_set = true;
}
return result;