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

Reply via email to