summaryrefslogtreecommitdiff
path: root/src/gpgpu-sim/shader.h
diff options
context:
space:
mode:
authorDavit Grigoryan <[email protected]>2026-04-08 07:14:50 +0000
committerDavit Grigoryan <[email protected]>2026-04-08 07:14:50 +0000
commit6fe5349343b27a8919734fb4900dd2324cdf6c60 (patch)
treecdb60316dd273893375f876a367f9e17a7604f82 /src/gpgpu-sim/shader.h
parent56550cce3389357bf0bb2c1fdc7d9a6edbc319ab (diff)
add simple simd lane set partitioning
Diffstat (limited to 'src/gpgpu-sim/shader.h')
-rw-r--r--src/gpgpu-sim/shader.h18
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,