Microprocessors use devices called branch predictors to predict the near-term behavior of a program so that work on future instructions may begin early, reducing the amount of time the program takes to run. Branch predictors must be highly accurate, and a small improvement in accuracy can give a large benefit for performance. This project is a principled approach to continuing the study of branch prediction. Several new ways to understand and improve branch prediction will be explored:
1) Exploring the limits of the potential of branch prediction to improve performance by developing a model of an idealistic branch predictor given reasonable assumptions;
2) Improving technologies for running computer programs on real computer systems so that these programs will have better branch prediction accuracy;
3) Discovering ways of improving the communication between computer programs and computer systems such that information available to a computer program can be used to improve the accuracy of branch prediction in a computer system; and
4) Working on new branch predictor designs for future computer systems, incorporating techniques from other disciplines such as machine learning, i.e., the study of how computer systems can learn by observing data.
In each of these areas, technological constraints on branch prediction will be taken into account. In particular, a branch predictor must act very quickly to deliver its prediction in time to improve performance, and it should do so in an energy-efficient way. This research will be brought to the classroom with a special seminar class on the interaction of research into computer systems and research on machine learning.