Having described the basic architectural support for prefetching in the previous section, we now consider techniques which may further improve the performance offered by prefetching. Although many of these techniques involve compiler support as well as architectural support, we have included them in this chapter because of their relevance to the architecture.
To provide a framework for examining all aspects of prefetching performance, let us briefly review the key performance issues. To begin with, since prefetching involves a cost as well as a benefit, maximizing overall performance requires both maximizing the latency-hiding benefit and minimizing the cost. Maximizing the latency-hiding benefit involves maximizing the coverage factor and maximizing the effectiveness of prefetches that are issued. Minimizing the cost involves avoiding unnecessary prefetches and minimizing the overheads of prefetches that are issued.
The goal of the analysis phase of the compiler algorithm is to maximize coverage and minimize unnecessary prefetches by predicting which dynamic references should be prefetched. We will consider ways to improve this decision-making process in Section . The other two goals of maximizing prefetching effectiveness and minimizing prefetching overheads are handled by the scheduling phase of the compiler. We will discuss ways to improve prefetching effectiveness in Section , and ways to minimize overheads in Section .