From 5921d9d73d32e2eec38a4b154c4c71759ffb8a5f Mon Sep 17 00:00:00 2001 From: Ahmed El-Shafiey Date: Mon, 15 Apr 2013 12:19:36 -0800 Subject: make sure L1 cache is flushed at a configuration change between kernels, even if flushing L1 cache between kernels option is not set [git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 15834] --- src/gpgpu-sim/gpu-sim.cc | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'src/gpgpu-sim/gpu-sim.cc') diff --git a/src/gpgpu-sim/gpu-sim.cc b/src/gpgpu-sim/gpu-sim.cc index 2778077..39216f9 100644 --- a/src/gpgpu-sim/gpu-sim.cc +++ b/src/gpgpu-sim/gpu-sim.cc @@ -811,20 +811,27 @@ void gpgpu_sim::set_cache_config(std::string kernel_name) void gpgpu_sim::change_cache_config(FuncCache cache_config) { + if(cache_config != m_shader_config->m_L1D_config.get_cache_status()){ + printf("FLUSH L1 Cache at configuration change between kernels\n"); + for (unsigned i=0;in_simt_clusters;i++) { + m_cluster[i]->cache_flush(); + } + } + switch(cache_config){ case FuncCachePreferNone: - m_shader_config->m_L1D_config.init(m_shader_config->m_L1D_config.m_config_string); + m_shader_config->m_L1D_config.init(m_shader_config->m_L1D_config.m_config_string, FuncCachePreferNone); m_shader_config->gpgpu_shmem_size=m_shader_config->gpgpu_shmem_sizeDefault; break; case FuncCachePreferL1: if((m_shader_config->m_L1D_config.m_config_stringPrefL1 == NULL) || (m_shader_config->gpgpu_shmem_sizePrefL1 == (unsigned)-1)) { printf("WARNING: missing Preferred L1 configuration\n"); - m_shader_config->m_L1D_config.init(m_shader_config->m_L1D_config.m_config_string); + m_shader_config->m_L1D_config.init(m_shader_config->m_L1D_config.m_config_string, FuncCachePreferNone); m_shader_config->gpgpu_shmem_size=m_shader_config->gpgpu_shmem_sizeDefault; }else{ - m_shader_config->m_L1D_config.init(m_shader_config->m_L1D_config.m_config_stringPrefL1); + m_shader_config->m_L1D_config.init(m_shader_config->m_L1D_config.m_config_stringPrefL1, FuncCachePreferL1); m_shader_config->gpgpu_shmem_size=m_shader_config->gpgpu_shmem_sizePrefL1; } break; @@ -832,10 +839,10 @@ void gpgpu_sim::change_cache_config(FuncCache cache_config) if((m_shader_config->m_L1D_config.m_config_stringPrefShared == NULL) || (m_shader_config->gpgpu_shmem_sizePrefShared == (unsigned)-1)) { printf("WARNING: missing Preferred L1 configuration\n"); - m_shader_config->m_L1D_config.init(m_shader_config->m_L1D_config.m_config_string); + m_shader_config->m_L1D_config.init(m_shader_config->m_L1D_config.m_config_string, FuncCachePreferNone); m_shader_config->gpgpu_shmem_size=m_shader_config->gpgpu_shmem_sizeDefault; }else{ - m_shader_config->m_L1D_config.init(m_shader_config->m_L1D_config.m_config_stringPrefShared); + m_shader_config->m_L1D_config.init(m_shader_config->m_L1D_config.m_config_stringPrefShared, FuncCachePreferShared); m_shader_config->gpgpu_shmem_size=m_shader_config->gpgpu_shmem_sizePrefShared; } break; -- cgit v1.3