> I understand that a mispredicted branch should squash the pipeline when,
> in the Ex-stage, it is known which path to take. However, when a branch
> is predicted as "taken" there will allways be an additional squash (see
> cpu/inorder/resources/fetch_seq_unit.cc, function "execute", case
> "UpdateTargetPC").
Two cases for a branch causing squashes:
1. branch resolution
2. branch prediction

For 1, in the EX stage, yea you are correct that a mispredicted branch
will be squashed.

For 2,  if the branch is predicted taken, then that means the next
address to be fetched isnt PC+4.  So at that point you
want to speculate and start fetching down your predicted path.
Anything that was fetched before your branch prediction
needs to be squashed though.

Also, consider the case where there are multiple stages between where
fetch and the branch prediction stage (e.g. Decode). There are going
to be multiple instructions between those stages that need to be
squashed if predicted taken. Also consider how the issue is
exacerbated when you are fetching more than 1 instruction at a time.

Now, for the pipeline that you are executing you may or may not have
any stages between fetch and branch prediction.

in terms of a double squash scenario, that situation should happen if
say you predicted a taken branch but then when you resolved it it was
really not taken. So you get 2 squashes there. But if a taken branch
is predicted correctly then you should have no additional squash at
branch resolution. if it is always happening, that signifies a bug in
the branch prediction code.

The branch prediction code was borrowed from the O3 model so it looks
like in translation for the inorder things broke a bit. Thanks for
spotting the potential bug.

Lastly, the commands in "pipeline_traits.cc" should hopefully let you
model your pipeline in a general way, so if you want to change where
"updatetargetpc" is done or anything like that, hopefully it will just
*work*. Let us know if it doesnt though.

>
> A couple of weeks ago I posted a patch for the inorderCPU's branch
> predictor, where I also mentioned a problem with squashing.
> I mentioned that sometimes there were multiple squashes that tried to
> remove 2 times the same entry in the predHist-table.
I believe I updated the development repository with your branch patch.
I'll double check though.

- Korey
_______________________________________________
m5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/m5-users

Reply via email to