summaryrefslogtreecommitdiff
path: root/src/gpgpu-sim/scoreboard.cc
diff options
context:
space:
mode:
authornegargoli93 <[email protected]>2018-06-20 18:20:05 -0700
committernegargoli93 <[email protected]>2018-06-20 18:20:05 -0700
commit262663ac90d2aa801d6af1eb9bf8a75ee9a5bb18 (patch)
tree4d2d668571bc8e62e4c25f2a1fe9f0283ea0e5a5 /src/gpgpu-sim/scoreboard.cc
parentacc52418fe873712ed56a072190356ecc874a35b (diff)
Tensor core timing model
Diffstat (limited to 'src/gpgpu-sim/scoreboard.cc')
-rw-r--r--src/gpgpu-sim/scoreboard.cc40
1 files changed, 31 insertions, 9 deletions
diff --git a/src/gpgpu-sim/scoreboard.cc b/src/gpgpu-sim/scoreboard.cc
index b538fdf..4d1b43a 100644
--- a/src/gpgpu-sim/scoreboard.cc
+++ b/src/gpgpu-sim/scoreboard.cc
@@ -82,7 +82,7 @@ const bool Scoreboard::islongop (unsigned warp_id,unsigned regnum) {
void Scoreboard::reserveRegisters(const class warp_inst_t* inst)
{
- for( unsigned r=0; r < 4; r++) {
+ for( unsigned r=0; r < 8; r++) {
if(inst->out[r] > 0) {
reserveRegister(inst->warp_id(), inst->out[r]);
SHADER_DPRINTF( SCOREBOARD,
@@ -100,7 +100,7 @@ void Scoreboard::reserveRegisters(const class warp_inst_t* inst)
inst->space.get_type() == param_space_local ||
inst->space.get_type() == param_space_unclassified ||
inst->space.get_type() == tex_space)){
- for ( unsigned r=0; r<4; r++) {
+ for ( unsigned r=0; r<8; r++) {
if(inst->out[r] > 0) {
SHADER_DPRINTF( SCOREBOARD,
"New longopreg marked - warp:%d, reg: %d\n",
@@ -115,7 +115,7 @@ void Scoreboard::reserveRegisters(const class warp_inst_t* inst)
// Release registers for an instruction
void Scoreboard::releaseRegisters(const class warp_inst_t *inst)
{
- for( unsigned r=0; r < 4; r++) {
+ for( unsigned r=0; r < 8; r++) {
if(inst->out[r] > 0) {
SHADER_DPRINTF( SCOREBOARD,
"Register Released - warp:%d, reg: %d\n",
@@ -142,15 +142,37 @@ bool Scoreboard::checkCollision( unsigned wid, const class inst_t *inst ) const
if(inst->out[1] > 0) inst_regs.insert(inst->out[1]);
if(inst->out[2] > 0) inst_regs.insert(inst->out[2]);
if(inst->out[3] > 0) inst_regs.insert(inst->out[3]);
- if(inst->in[0] > 0) inst_regs.insert(inst->in[0]);
+ if(inst->out[4] > 0) inst_regs.insert(inst->out[4]);
+ if(inst->out[5] > 0) inst_regs.insert(inst->out[5]);
+ if(inst->out[6] > 0) inst_regs.insert(inst->out[6]);
+ if(inst->out[7] > 0) inst_regs.insert(inst->out[7]);
+
+ if(inst->in[0] > 0) inst_regs.insert(inst->in[0]);
if(inst->in[1] > 0) inst_regs.insert(inst->in[1]);
if(inst->in[2] > 0) inst_regs.insert(inst->in[2]);
if(inst->in[3] > 0) inst_regs.insert(inst->in[3]);
- if(inst->in[3] > 0) inst_regs.insert(inst->in[4]);
- if(inst->in[3] > 0) inst_regs.insert(inst->in[5]);
- if(inst->in[3] > 0) inst_regs.insert(inst->in[6]);
- if(inst->in[3] > 0) inst_regs.insert(inst->in[7]);
- if(inst->pred > 0) inst_regs.insert(inst->pred);
+ if(inst->in[4] > 0) inst_regs.insert(inst->in[4]);
+ if(inst->in[5] > 0) inst_regs.insert(inst->in[5]);
+ if(inst->in[6] > 0) inst_regs.insert(inst->in[6]);
+ if(inst->in[7] > 0) inst_regs.insert(inst->in[7]);
+ if(inst->in[8] > 0) inst_regs.insert(inst->in[8]);
+ if(inst->in[9] > 0) inst_regs.insert(inst->in[9]);
+ if(inst->in[10] > 0) inst_regs.insert(inst->in[10]);
+ if(inst->in[11] > 0) inst_regs.insert(inst->in[11]);
+ if(inst->in[12] > 0) inst_regs.insert(inst->in[12]);
+ if(inst->in[13] > 0) inst_regs.insert(inst->in[13]);
+ if(inst->in[14] > 0) inst_regs.insert(inst->in[14]);
+ if(inst->in[15] > 0) inst_regs.insert(inst->in[15]);
+ if(inst->in[16] > 0) inst_regs.insert(inst->in[16]);
+ if(inst->in[17] > 0) inst_regs.insert(inst->in[17]);
+ if(inst->in[18] > 0) inst_regs.insert(inst->in[18]);
+ if(inst->in[19] > 0) inst_regs.insert(inst->in[19]);
+ if(inst->in[20] > 0) inst_regs.insert(inst->in[20]);
+ if(inst->in[21] > 0) inst_regs.insert(inst->in[21]);
+ if(inst->in[22] > 0) inst_regs.insert(inst->in[22]);
+ if(inst->in[23] > 0) inst_regs.insert(inst->in[23]);
+
+ if(inst->pred > 0) inst_regs.insert(inst->pred);
if(inst->ar1 > 0) inst_regs.insert(inst->ar1);
if(inst->ar2 > 0) inst_regs.insert(inst->ar2);