summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJin Wang <[email protected]>2014-11-14 20:01:10 -0500
committerJin Wang <[email protected]>2016-07-06 02:17:15 -0400
commitbbcb492c0f6d887c4034bd15adf57420dd735c5e (patch)
tree7fb1ea922b6aa290a439526240feeeaef26c3739 /src
parent8ef2e4eb13093c59190439800fdd0cc552a3779e (diff)
ADD: add separate cdp latency
Diffstat (limited to 'src')
-rw-r--r--src/cuda-sim/cuda-sim.cc16
-rw-r--r--src/cuda-sim/ptx_ir.cc6
-rw-r--r--src/gpgpu-sim/shader.cc7
3 files changed, 16 insertions, 13 deletions
diff --git a/src/cuda-sim/cuda-sim.cc b/src/cuda-sim/cuda-sim.cc
index 9ecd92b..c87e3e4 100644
--- a/src/cuda-sim/cuda-sim.cc
+++ b/src/cuda-sim/cuda-sim.cc
@@ -65,7 +65,7 @@ unsigned gpgpu_param_num_shaders = 0;
char *opcode_latency_int, *opcode_latency_fp, *opcode_latency_dp;
char *opcode_initiation_int, *opcode_initiation_fp, *opcode_initiation_dp;
char *cdp_latency_str;
-unsigned cdp_latency[4];
+unsigned cdp_latency[5];
void ptx_opcocde_latency_options (option_parser_t opp) {
option_parser_register(opp, "-ptx_opcode_latency_int", OPT_CSTR, &opcode_latency_int,
@@ -93,10 +93,11 @@ void ptx_opcocde_latency_options (option_parser_t opp) {
"Default 8,8,8,8,130",
"8,8,8,8,130");
option_parser_register(opp, "-cdp_latency", OPT_CSTR, &cdp_latency_str,
- "CDP API latency <cudaGetParameterBufferV2, cudaStreamCreateWithFlags, \
- cudaLaunchDeviceV2_initCTA, cudaLaunchDevicV2_perKernel>"
- "Default 1,7200,19320,1680",
- "1,7200,19320,1680");
+ "CDP API latency <cudaStreamCreateWithFlags, \
+cudaGetParameterBufferV2_init_perWarp, cudaGetParameterBufferV2_perKernel, \
+cudaLaunchDeviceV2_init_perWarp, cudaLaunchDevicV2_perKernel>"
+ "Default 7200,8000,100,12000,1600",
+ "7200,8000,100,12000,1600");
}
static address_type get_converge_point(address_type pc);
@@ -616,8 +617,9 @@ void ptx_instruction::set_opcode_and_latency()
sscanf(opcode_initiation_dp, "%u,%u,%u,%u,%u",
&dp_init[0],&dp_init[1],&dp_init[2],
&dp_init[3],&dp_init[4]);
- sscanf(cdp_latency_str, "%u,%u,%u,%u",
- &cdp_latency[0],&cdp_latency[1],&cdp_latency[2], &cdp_latency[3]);
+ sscanf(cdp_latency_str, "%u,%u,%u,%u,%u",
+ &cdp_latency[0],&cdp_latency[1],&cdp_latency[2],
+ &cdp_latency[3],&cdp_latency[4]);
if(!m_operands.empty()){
std::vector<operand_info>::iterator it;
diff --git a/src/cuda-sim/ptx_ir.cc b/src/cuda-sim/ptx_ir.cc
index 4931213..783c885 100644
--- a/src/cuda-sim/ptx_ir.cc
+++ b/src/cuda-sim/ptx_ir.cc
@@ -1241,12 +1241,12 @@ ptx_instruction::ptx_instruction( int opcode,
if (fname =="vprintf"){
m_is_printf = true;
}
- if(fname == "cudaGetParameterBufferV2")
- m_is_cdp = 1;
if(fname == "cudaStreamCreateWithFlags")
+ m_is_cdp = 1;
+ if(fname == "cudaGetParameterBufferV2")
m_is_cdp = 2;
if(fname == "cudaLaunchDeviceV2")
- m_is_cdp = 3;
+ m_is_cdp = 4;
}
}
diff --git a/src/gpgpu-sim/shader.cc b/src/gpgpu-sim/shader.cc
index e85c4a8..8ce2146 100644
--- a/src/gpgpu-sim/shader.cc
+++ b/src/gpgpu-sim/shader.cc
@@ -887,12 +887,13 @@ void scheduler_unit::cycle()
if(pI->m_is_cdp && !warp(warp_id).m_cdp_dummy) {
assert(warp(warp_id).m_cdp_latency == 0);
- extern unsigned cdp_latency[3];
- if(pI->m_is_cdp != 3)
+ extern unsigned cdp_latency[5];
+ if(pI->m_is_cdp == 1)
warp(warp_id).m_cdp_latency = cdp_latency[pI->m_is_cdp - 1];
- else //cudaLaunchDeviceV2
+ else //cudaLaunchDeviceV2 and cudaGetParameterBufferV2
warp(warp_id).m_cdp_latency = cdp_latency[pI->m_is_cdp - 1]
+ cdp_latency[pI->m_is_cdp] * active_mask.count();
+ printf("set latency %d\n", warp(warp_id).m_cdp_latency);
warp(warp_id).m_cdp_dummy = true;
break;
}