From 6e9b61e6fdeb4b64458ffc8821e39822e0bbd747 Mon Sep 17 00:00:00 2001 From: Inderpreet Singh Date: Wed, 14 Sep 2011 14:03:49 -0800 Subject: Fix for Bug 110 - integrates in CL 10258 from tm-test branch [git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 10299] --- src/gpgpu-sim/shader.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/gpgpu-sim/shader.cc') diff --git a/src/gpgpu-sim/shader.cc b/src/gpgpu-sim/shader.cc index 5be7a9c..06e4c65 100644 --- a/src/gpgpu-sim/shader.cc +++ b/src/gpgpu-sim/shader.cc @@ -684,9 +684,11 @@ void scheduler_unit::cycle() unsigned warp_id = supervised_warps[supervised_id]; unsigned checked=0; unsigned issued=0; - while( !warp(warp_id).waiting() && !warp(warp_id).ibuffer_empty() && (checked < 2) && (issued < 2) ) { + unsigned max_issue = m_shader->m_config->gpgpu_max_insn_issue_per_warp; + while( !warp(warp_id).waiting() && !warp(warp_id).ibuffer_empty() && (checked < max_issue) && (checked <= issued) && (issued < max_issue) ) { const warp_inst_t *pI = warp(warp_id).ibuffer_next_inst(); bool valid = warp(warp_id).ibuffer_next_valid(); + bool warp_inst_issued = false; unsigned pc,rpc; m_simt_stack[warp_id]->get_pdom_stack_top_info(&pc,&rpc); if( pI ) { @@ -706,6 +708,7 @@ void scheduler_unit::cycle() m_shader->issue_warp(*m_mem_out,pI,active_mask,warp_id); issued++; issued_inst=true; + warp_inst_issued = true; } } else { bool sp_pipe_avail = (*m_sp_out)->empty(); @@ -715,11 +718,13 @@ void scheduler_unit::cycle() m_shader->issue_warp(*m_sp_out,pI,active_mask,warp_id); issued++; issued_inst=true; + warp_inst_issued = true; } else if ( (pI->op == SFU_OP) || (pI->op == ALU_SFU_OP) ) { if( sfu_pipe_avail ) { m_shader->issue_warp(*m_sfu_out,pI,active_mask,warp_id); issued++; issued_inst=true; + warp_inst_issued = true; } } } @@ -730,7 +735,8 @@ void scheduler_unit::cycle() warp(warp_id).set_next_pc(pc); warp(warp_id).ibuffer_flush(); } - warp(warp_id).ibuffer_step(); + if(warp_inst_issued) + warp(warp_id).ibuffer_step(); checked++; } if ( issued ) { -- cgit v1.3