summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMahmoud <[email protected]>2018-11-06 19:48:52 -0500
committerMahmoud <[email protected]>2018-11-06 19:48:52 -0500
commit7d42f5849aa1abb4f081803843ea78009d5b20ce (patch)
tree11bb1f976894d593e6ee0a918c943e0ab15840d4
parentaea51499825e8493f6e4ae1cae7c763797704dc8 (diff)
adding tensor cores config
-rw-r--r--configs/tested-cfgs/SM7_TITANV/gpgpusim.config5
-rw-r--r--src/abstract_hardware_model.h4
-rw-r--r--src/gpgpu-sim/shader.cc11
-rw-r--r--src/gpgpu-sim/shader.h4
4 files changed, 17 insertions, 7 deletions
diff --git a/configs/tested-cfgs/SM7_TITANV/gpgpusim.config b/configs/tested-cfgs/SM7_TITANV/gpgpusim.config
index 5ac734d..7b0369a 100644
--- a/configs/tested-cfgs/SM7_TITANV/gpgpusim.config
+++ b/configs/tested-cfgs/SM7_TITANV/gpgpusim.config
@@ -12,7 +12,6 @@
-gpgpu_ptx_instruction_classification 0
-gpgpu_ptx_sim_mode 0
-gpgpu_ptx_force_max_capability 70
--gpgpu_tensor_core_avail 1
# SASS execution (only supported with CUDA >= 4.0)
-gpgpu_ptx_convert_to_ptxplus 0
@@ -45,10 +44,12 @@
# ID_OC_SP,ID_OC_DP,ID_OC_SFU,ID_OC_MEM,OC_EX_SP,OC_EX_DP,OC_EX_SFU,OC_EX_MEM,EX_WB,ID_OC_TENSOR_CORE,OC_EX_TENSOR_CORE
## Volta GV100 has 4 SP SIMD units, 4 SFU units, 4 DP units per core
## we need to scale the number of pipeline registers to be equal to the number of SP units
--gpgpu_pipeline_widths 4,4,4,4,4,4,4,4,8,1,1
+-gpgpu_pipeline_widths 4,4,4,4,4,4,4,4,8,4,4
-gpgpu_num_sp_units 4
-gpgpu_num_sfu_units 4
-gpgpu_num_dp_units 4
+-gpgpu_tensor_core_avail 1
+-gpgpu_num_tensor_core_units 4
# Instruction latencies and initiation intervals
# "ADD,MAX,MUL,MAD,DIV"
diff --git a/src/abstract_hardware_model.h b/src/abstract_hardware_model.h
index 5543a71..edd48a1 100644
--- a/src/abstract_hardware_model.h
+++ b/src/abstract_hardware_model.h
@@ -1269,6 +1269,10 @@ public:
return NULL;
}
+ unsigned get_size(){
+ return regs.size();
+ }
+
private:
std::vector<warp_inst_t*> regs;
const char* m_name;
diff --git a/src/gpgpu-sim/shader.cc b/src/gpgpu-sim/shader.cc
index 78facbd..c52ba35 100644
--- a/src/gpgpu-sim/shader.cc
+++ b/src/gpgpu-sim/shader.cc
@@ -90,6 +90,15 @@ shader_core_ctx::shader_core_ctx( class gpgpu_sim *gpu,
for (int j = 0; j<N_PIPELINE_STAGES; j++) {
m_pipeline_reg.push_back(register_set(m_config->pipe_widths[j],pipeline_stage_name_decode[j]));
}
+ if(m_config->sub_core_model) {
+ //in subcore model, each scheduler should has its own issue register, so num scheduler = reg width
+ assert(m_config->gpgpu_num_sched_per_core == m_pipeline_reg[ID_OC_SP].get_size() );
+ if(m_config->gpgpu_num_dp_units > 0)
+ assert(m_config->gpgpu_num_sched_per_core == m_pipeline_reg[ID_OC_DP].get_size() );
+ assert(m_config->gpgpu_num_sched_per_core == m_pipeline_reg[ID_OC_SFU].get_size() );
+ assert(m_config->gpgpu_num_sched_per_core == m_pipeline_reg[ID_OC_MEM].get_size() );
+ assert(m_config->gpgpu_num_sched_per_core == m_pipeline_reg[ID_OC_TENSOR_CORE].get_size() );
+ }
m_threadState = (thread_ctx_t*) calloc(sizeof(thread_ctx_t), config->n_thread_per_shader);
@@ -1045,7 +1054,7 @@ void scheduler_unit::cycle()
}
else if ( (pI->op == TENSOR_CORE_OP) ) {
if( tensor_core_pipe_avail ) {
- m_shader->issue_warp(*m_tensor_core_out,pI,active_mask,warp_id);
+ m_shader->issue_warp(*m_tensor_core_out,pI,active_mask,warp_id,m_id);
issued++;
issued_inst=true;
warp_inst_issued = true;
diff --git a/src/gpgpu-sim/shader.h b/src/gpgpu-sim/shader.h
index fcd134d..7b33c14 100644
--- a/src/gpgpu-sim/shader.h
+++ b/src/gpgpu-sim/shader.h
@@ -1378,10 +1378,6 @@ struct shader_core_config : public core_config
max_sp_latency = 32;
max_tensor_core_latency = 64;
- gpgpu_num_tensor_core_units=4;//It will be (#TENSORCORE INSIDE SM)/2 (One warp is allocated to 2 Tensor Core)
- gpgpu_operand_collector_num_units_tensor_core=24;
- gpgpu_operand_collector_num_in_ports_tensor_core=8;
- gpgpu_operand_collector_num_out_ports_tensor_core=8;
m_L1I_config.init(m_L1I_config.m_config_string,FuncCachePreferNone);
m_L1T_config.init(m_L1T_config.m_config_string,FuncCachePreferNone);