diff options
Diffstat (limited to 'src/gpgpu-sim/shader.h')
| -rw-r--r-- | src/gpgpu-sim/shader.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/gpgpu-sim/shader.h b/src/gpgpu-sim/shader.h index bb2ac33..01dd92c 100644 --- a/src/gpgpu-sim/shader.h +++ b/src/gpgpu-sim/shader.h @@ -1572,6 +1572,18 @@ class shader_core_config : public core_config { max_warps_per_shader = n_thread_per_shader / warp_size; assert(!(n_thread_per_shader % warp_size)); + // Validate and compute SIMD partitioning derived values + if (gpgpu_simd_partitioning) { + assert(gpgpu_num_simd_sets > 0 && gpgpu_num_simd_sets <= warp_size); + assert(warp_size % gpgpu_num_simd_sets == 0); + simd_set_width = warp_size / gpgpu_num_simd_sets; + printf("SIMD Partitioning: %u sets of %u lanes\n", gpgpu_num_simd_sets, + simd_set_width); + } else { + gpgpu_num_simd_sets = 1; + simd_set_width = warp_size; + } + set_pipeline_latency(); m_L1I_config.init(m_L1I_config.m_config_string, FuncCachePreferNone); @@ -1714,6 +1726,11 @@ class shader_core_config : public core_config { unsigned max_dp_latency; unsigned max_tensor_core_latency; + // SIMD lane partitioning + bool gpgpu_simd_partitioning; + unsigned gpgpu_num_simd_sets; + unsigned simd_set_width; // derived: warp_size / num_simd_sets + unsigned n_simt_cores_per_cluster; unsigned n_simt_clusters; unsigned n_simt_ejection_buffer_size; @@ -2630,6 +2647,7 @@ class exec_shader_core_ctx : public shader_core_ctx { virtual void checkExecutionStatusAndUpdate(warp_inst_t &inst, unsigned t, unsigned tid); virtual void func_exec_inst(warp_inst_t &inst); + void execute_warp_inst_per_set(warp_inst_t &inst); virtual unsigned sim_init_thread(kernel_info_t &kernel, ptx_thread_info **thread_info, int sid, unsigned tid, unsigned threads_left, |
