diff options
| author | Andrew M. B. Boktor <[email protected]> | 2012-07-02 22:11:33 -0800 |
|---|---|---|
| committer | Andrew Boktor <[email protected]> | 2014-08-14 13:47:33 -0700 |
| commit | dadb44ad16727623476a1e6947453da81ed682c7 (patch) | |
| tree | 095da91d5386468dbf28e3512ba8e02b2f5d110d /src/gpgpu-sim/scoreboard.cc | |
| parent | bb96888d31d37760c86fa1aed3bbf203792185e7 (diff) | |
Adding a two level scheduler as described in the ISCA 2012 tutorial
[git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 13261]
Diffstat (limited to 'src/gpgpu-sim/scoreboard.cc')
| -rw-r--r-- | src/gpgpu-sim/scoreboard.cc | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/gpgpu-sim/scoreboard.cc b/src/gpgpu-sim/scoreboard.cc index 4935715..e2379fd 100644 --- a/src/gpgpu-sim/scoreboard.cc +++ b/src/gpgpu-sim/scoreboard.cc @@ -32,10 +32,12 @@ //Constructor Scoreboard::Scoreboard( unsigned sid, unsigned n_warps ) +: longopregs() { m_sid = sid; //Initialize size of table reg_table.resize(n_warps); + longopregs.resize(n_warps); } // Print scoreboard contents @@ -69,10 +71,24 @@ void Scoreboard::releaseRegister(unsigned wid, unsigned regnum) reg_table[wid].erase(regnum); } +const bool Scoreboard::islongop (unsigned warp_id,unsigned regnum) { + return longopregs[warp_id].find(regnum) != longopregs[warp_id].end(); +} + void Scoreboard::reserveRegisters(const class warp_inst_t* inst) { for( unsigned r=0; r < 4; r++) if(inst->out[r] > 0) reserveRegister(inst->warp_id(), inst->out[r]); + + //Keep track of long operations + if (inst->is_load() && + ( inst->space.get_type() == global_space || + inst->space.get_type() == local_space || + inst->space.get_type() == tex_space)){ + for ( unsigned r=0; r<4; r++) { + if(inst->out[r] > 0) longopregs[inst->warp_id()].insert(r); + } + } } // Release registers for an instruction @@ -80,6 +96,7 @@ void Scoreboard::releaseRegisters(const class warp_inst_t *inst) { for( unsigned r=0; r < 4; r++) if(inst->out[r] > 0) releaseRegister(inst->warp_id(), inst->out[r]); + longopregs[inst->warp_id()].clear(); } /** |
