summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSuchita Pati <[email protected]>2018-05-01 14:58:35 -0500
committerSuchita Pati <[email protected]>2018-05-01 14:58:35 -0500
commit70e036c6007135c43d213139e1a6963090721f59 (patch)
tree292bb9fd887f3481e7e6eb5fbd9344031f646557
parent32c6dd57e03987bec0e144efc86c08938c4f1460 (diff)
Added support for -gpgpu_registers_per_block config
-rw-r--r--libcuda/cuda_runtime_api.cc27
-rw-r--r--src/gpgpu-sim/gpu-sim.cc8
-rw-r--r--src/gpgpu-sim/gpu-sim.h1
-rw-r--r--src/gpgpu-sim/shader.h1
4 files changed, 18 insertions, 19 deletions
diff --git a/libcuda/cuda_runtime_api.cc b/libcuda/cuda_runtime_api.cc
index ef46f00..e3c2542 100644
--- a/libcuda/cuda_runtime_api.cc
+++ b/libcuda/cuda_runtime_api.cc
@@ -349,24 +349,13 @@ class _cuda_device_id *GPGPUSim_Init()
prop->maxGridSize[2] = 0x40000000;
prop->totalConstMem = 0x40000000;
prop->textureAlignment = 0;
- /*
-
- * TODO: Update the .config and xml files of all GPU config files with new value of sharedMemPerBlock.
-
- * Previously, this was thought as sharedMemPerMultiprocessor and is being used in many places.
-
- * Check whether all the instances of shared_mem_size(), gpgpu_shmem_size or sharedMemPerBlock are meant to use sharedMemPerBlock or sharedMemPerMultiprocessor.
-
- */
-
- prop->sharedMemPerBlock = the_gpu->shared_mem_per_block();
-
- #if (CUDART_VERSION > 5000)
-
- prop->sharedMemPerMultiprocessor = the_gpu->shared_mem_size();
-
- #endif
-
+// * TODO: Update the .config and xml files of all GPU config files with new value of sharedMemPerBlock and regsPerBlock
+ prop->sharedMemPerBlock = the_gpu->shared_mem_per_block();
+#if (CUDART_VERSION > 5000)
+ prop->regsPerMultiprocessor = the_gpu->num_registers_per_core();
+ prop->sharedMemPerMultiprocessor = the_gpu->shared_mem_size();
+#endif
+ prop->sharedMemPerBlock = the_gpu->shared_mem_per_block();
prop->regsPerBlock = the_gpu->num_registers_per_core();
prop->warpSize = the_gpu->wrp_size();
prop->clockRate = the_gpu->shader_clock();
@@ -912,7 +901,7 @@ __host__ cudaError_t CUDARTAPI cudaDeviceGetAttribute(int *value, enum cudaDevic
*value= prop->sharedMemPerMultiprocessor;
break;
case 82:
- *value= prop->regsPerBlock;
+ *value= prop->regsPerMultiprocessor;
break;
default:
printf("ERROR: Attribute number %d unimplemented \n",attr);
diff --git a/src/gpgpu-sim/gpu-sim.cc b/src/gpgpu-sim/gpu-sim.cc
index 5d63ab7..b283964 100644
--- a/src/gpgpu-sim/gpu-sim.cc
+++ b/src/gpgpu-sim/gpu-sim.cc
@@ -247,6 +247,9 @@ void shader_core_config::reg_options(class OptionParser * opp)
option_parser_register(opp, "-gpgpu_shader_registers", OPT_UINT32, &gpgpu_shader_registers,
"Number of registers per shader core. Limits number of concurrent CTAs. (default 8192)",
"8192");
+ option_parser_register(opp, "-gpgpu_registers_per_block", OPT_UINT32, &gpgpu_registers_per_block,
+ "Maximum number of registers per thread block. (default 8192)",
+ "8192");
option_parser_register(opp, "-gpgpu_shader_cta", OPT_UINT32, &max_cta_per_core,
"Maximum number of concurrent CTAs in shader (default 8)",
"8");
@@ -674,6 +677,11 @@ int gpgpu_sim::num_registers_per_core() const
return m_shader_config->gpgpu_shader_registers;
}
+int gpgpu_sim::num_registers_per_block() const
+{
+ return m_shader_config->gpgpu_registers_per_block;
+}
+
int gpgpu_sim::wrp_size() const
{
return m_shader_config->warp_size;
diff --git a/src/gpgpu-sim/gpu-sim.h b/src/gpgpu-sim/gpu-sim.h
index 8d1c4fc..5908fd5 100644
--- a/src/gpgpu-sim/gpu-sim.h
+++ b/src/gpgpu-sim/gpu-sim.h
@@ -391,6 +391,7 @@ public:
int shared_mem_size() const;
int shared_mem_per_block() const;
int num_registers_per_core() const;
+ int num_registers_per_block() const;
int wrp_size() const;
int shader_clock() const;
const struct cudaDeviceProp *get_prop() const;
diff --git a/src/gpgpu-sim/shader.h b/src/gpgpu-sim/shader.h
index fbddd18..6201840 100644
--- a/src/gpgpu-sim/shader.h
+++ b/src/gpgpu-sim/shader.h
@@ -1286,6 +1286,7 @@ struct shader_core_config : public core_config
unsigned max_barriers_per_cta;
char * gpgpu_scheduler_string;
unsigned gpgpu_shmem_per_block;
+ unsigned gpgpu_registers_per_block;
char* pipeline_widths_string;
int pipe_widths[N_PIPELINE_STAGES];