o3: Fix occupancy checks for SMT
authorFaissal Sleiman <sleimanf@umich.edu>
Sat, 19 Apr 2014 14:00:30 +0000 (09:00 -0500)
committerFaissal Sleiman <sleimanf@umich.edu>
Sat, 19 Apr 2014 14:00:30 +0000 (09:00 -0500)
commita1570f544f7eb24d87a664038705ae6801862eab
tree653b636176ab47b13c6b4f87f21f457363f62c3e
parentd9fa950396e8f331bbfb1023348c8c680967b1be
o3: Fix occupancy checks for SMT
A number of calls to isEmpty() and numFreeEntries()
should be thread-specific.

In cpu.cc, the fact that tid is /*commented*/ out is a bug. Say the rob
has instructions from thread 0 (isEmpty() returns false), and none from
thread 1. If we are trying to squash all of thread 1, then
readTailInst(thread 1) will be called because rob->isEmpty() returns
false. The result is end_it is not in the list and the while
statement loops indefinitely back over the cpu's instList.

In iew_impl.hh, all threads are told they have the entire remaining IQ, when
each thread actually has a certain allocation. The result is extra stalls at
the iew dispatch stage which the rename stage usually takes care of.

In commit_impl.hh, rob->readHeadInst(thread 1) can be called if the rob only
contains instructions from thread 0. This returns a dummyInst (which may work
since we are trying to squash all instructions, but hardly seems like the right
way to do it).

In rob_impl.hh this fix skips the rest of the function more frequently and is
more efficient.

Committed by: Nilay Vaish <nilay@cs.wisc.edu>
src/cpu/o3/commit_impl.hh
src/cpu/o3/cpu.cc
src/cpu/o3/iew_impl.hh
src/cpu/o3/rob_impl.hh