changeset 88cc2dc9472c in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=88cc2dc9472c
description:
inorder: tick scheduling
use nextCycle to calculate ticks after addition
diffstat:
src/cpu/inorder/cpu.cc | 11 ++++++-----
src/cpu/inorder/resource_pool.cc | 20 ++++++++++----------
2 files changed, 16 insertions(+), 15 deletions(-)
diffs (133 lines):
diff -r 6b72468fbad3 -r 88cc2dc9472c src/cpu/inorder/cpu.cc
--- a/src/cpu/inorder/cpu.cc Tue Jun 22 21:29:43 2010 -0700
+++ b/src/cpu/inorder/cpu.cc Wed Jun 23 18:14:59 2010 -0400
@@ -158,9 +158,9 @@
InOrderCPU::CPUEvent::scheduleEvent(int delay)
{
if (squashed())
- mainEventQueue.reschedule(this,curTick + cpu->ticks(delay));
+ mainEventQueue.reschedule(this, cpu->nextCycle(curTick +
cpu->ticks(delay)));
else if (!scheduled())
- mainEventQueue.schedule(this,curTick + cpu->ticks(delay));
+ mainEventQueue.schedule(this, cpu->nextCycle(curTick +
cpu->ticks(delay)));
}
void
@@ -671,10 +671,11 @@
CPUEvent *cpu_event = new CPUEvent(this, c_event, fault, tid, inst,
event_pri_offset);
+ Tick sked_tick = nextCycle(curTick + ticks(delay));
if (delay >= 0) {
DPRINTF(InOrderCPU, "Scheduling CPU Event (%s) for cycle %i,
[tid:%i].\n",
eventNames[c_event], curTick + delay, tid);
- mainEventQueue.schedule(cpu_event,curTick + delay);
+ mainEventQueue.schedule(cpu_event, sked_tick);
} else {
cpu_event->process();
cpuEventRemoveList.push(cpu_event);
@@ -1335,7 +1336,7 @@
while (!reqRemoveList.empty()) {
ResourceRequest *res_req = reqRemoveList.front();
- DPRINTF(Resource, "[tid:%i] [sn:%lli]: Removing Request "
+ DPRINTF(RefCount, "[tid:%i] [sn:%lli]: Removing Request "
"[stage_num:%i] [res:%s] [slot:%i] [completed:%i].\n",
res_req->inst->threadNumber,
res_req->inst->seqNum,
@@ -1400,7 +1401,7 @@
numCycles += extra_cycles;
- mainEventQueue.schedule(&tickEvent, curTick);
+ mainEventQueue.schedule(&tickEvent, nextCycle(curTick));
}
#if FULL_SYSTEM
diff -r 6b72468fbad3 -r 88cc2dc9472c src/cpu/inorder/resource_pool.cc
--- a/src/cpu/inorder/resource_pool.cc Tue Jun 22 21:29:43 2010 -0700
+++ b/src/cpu/inorder/resource_pool.cc Wed Jun 23 18:14:59 2010 -0400
@@ -259,7 +259,7 @@
inst->bdelaySeqNum,
inst->readTid());
mainEventQueue.schedule(res_pool_event,
- curTick + cpu->ticks(delay));
+ cpu->nextCycle(curTick +
cpu->ticks(delay)));
}
break;
@@ -278,7 +278,7 @@
tid);
mainEventQueue.schedule(res_pool_event,
- curTick + cpu->ticks(delay));
+ cpu->nextCycle(curTick +
cpu->ticks(delay)));
}
break;
@@ -287,7 +287,7 @@
{
DPRINTF(Resource, "Scheduling Suspend Thread Resource Pool Event
for tick %i.\n",
- curTick + delay);
+ cpu->nextCycle(cpu->nextCycle(curTick +
cpu->ticks(delay))));
ResPoolEvent *res_pool_event = new ResPoolEvent(this,
e_type,
inst,
@@ -295,7 +295,7 @@
inst->bdelaySeqNum,
tid);
- mainEventQueue.schedule(res_pool_event, curTick +
cpu->ticks(delay));
+ mainEventQueue.schedule(res_pool_event,
cpu->nextCycle(cpu->nextCycle(curTick + cpu->ticks(delay))));
}
break;
@@ -311,7 +311,7 @@
inst->seqNum,
inst->readTid());
mainEventQueue.schedule(res_pool_event,
- curTick + cpu->ticks(delay));
+ cpu->nextCycle(curTick +
cpu->ticks(delay)));
}
break;
@@ -327,7 +327,7 @@
inst->bdelaySeqNum,
inst->readTid());
mainEventQueue.schedule(res_pool_event,
- curTick + cpu->ticks(delay));
+ cpu->nextCycle(curTick +
cpu->ticks(delay)));
}
break;
@@ -343,7 +343,7 @@
inst->seqNum - 1,
inst->readTid());
mainEventQueue.schedule(res_pool_event,
- curTick + cpu->ticks(delay));
+ cpu->nextCycle(curTick +
cpu->ticks(delay)));
}
break;
@@ -356,7 +356,7 @@
inst->squashingStage,
inst->seqNum,
inst->readTid());
- mainEventQueue.schedule(res_pool_event, curTick +
cpu->ticks(delay));
+ mainEventQueue.schedule(res_pool_event, cpu->nextCycle(curTick +
cpu->ticks(delay)));
}
break;
@@ -544,9 +544,9 @@
ResourcePool::ResPoolEvent::scheduleEvent(int delay)
{
if (squashed())
- mainEventQueue.reschedule(this,curTick + resPool->cpu->ticks(delay));
+ mainEventQueue.reschedule(this,resPool->cpu->nextCycle(curTick +
resPool->cpu->ticks(delay)));
else if (!scheduled())
- mainEventQueue.schedule(this,curTick + resPool->cpu->ticks(delay));
+ mainEventQueue.schedule(this, resPool->cpu->nextCycle(curTick +
resPool->cpu->ticks(delay)));
}
/** Unschedule resource event, regardless of its current state. */
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev