The history file, history.txt, is the branch history of a run of the gcc compiler (the first field is the address of the branch instruction, the second field is the target branch address and the third field is 1 for a branch taken and a 0 for a branch not taken).
Write a program that models a static branch predictor, a one-bit branch predictor, a two-bit branch predictor, and a two-bit correlating predictor. The static branch predictor predicts the branch is taken when the branch is backwards and it predicts the branch is not taken when the branch is forwards. The one-bit predictor predicts that the branch is taken the same way it was taken last time. The two-bit predictor is described on page C-28 of your text book, page 162 : Computer Architecture : A Quantitative Approach Henessy, J, Patterson Fifth Edition.
For the static predictor, calculate the percentage of times it correctly predicts the branch.
The accuracy of the one- and two-but predictors depends, in part, on the number of entries in the branch prediction table. The number of entries corresponds to powers of two. The specific entry used to predict a branch is indicated by the lower n bits of the address of the branch instruction where 2n is the number of entries in the table.
On the same graph, plot the accuracy (100 * correct predictions /total branches) of your one- and two-bit branch predictors for branch prediction table sizes from 4 to 65536 entries