Hi,
I observed the following in the drain code.
if (drained && !fuPool->isDrained()) {
DPRINTF(Drain, "FU pool still busy.\n");
drained = false;
}
Consider a pipelined computation with op_latency > cycles(1).
By default, the functional units are freed in the next cycle and hence Drain
can be signalled (this is where the problem starts) , though the operation is
still in the FU pipeline ( op_latency > cycles(1) ). Thus the cpu's status can
be Drained before the computation completes. Though this is a squashed
computation, the instsToExecute queue still fills up when the FUCompletion
event gets processed and fails any consequent drainSanityCheck().
I am currently freeing units in the FUCompletion event, but this is not good
for performance. Please suggest a correct fix for this.
Thanks
Srini
_______________________________________________
gem5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users