Hardware-controlled prefetching primarily offers two advantages over
software-controlled prefetching. First, old code does not need to be
recompiled to take advantage of prefetching. However, this dissertation has
demonstrated that the compiler technology for automatically inserting
prefetches can be quite successful and is straightforward to implement.
Therefore since prefetching compilers should be readily available in the
future, this does not appear to be a compelling argument. In particular,
scientific programmers usually care enough about performance that they are
willing to recompile their code. The second advantage of
hardware-controlled prefetching is that it adds no instruction overhead.
However, as we have already seen in Chapters and
, the instruction overhead of
software-controlled prefetching is typically quite small, so this also
appears not to be much of an advantage.
Hardware-controlled prefetching has some important disadvantages compared
to software-controlled prefetching. First, it is limited only to
constant-stride access patterns, and therefore cannot prefetch the indirect
references which our compiler can handle (as demonstrated in Section
). Since the compiler is also quite successful at
prefetching the constant-stride cases (as we have demonstrated),
software-controlled prefetching is likely to offer better coverage
than hardware-controlled prefetching. We would expect this trend to
continue in the future as the compiler becomes more sophisticated.
Second, although hardware-based schemes have no software cost, they
may have a significant hardware cost, consuming chip area and
possibly affecting cycle time. Therefore since software-controlled
prefetching has been shown to be quite effective, offers a broader coverage
of misses, and is much simpler to implement in the processor, it
appears to be a better solution than hardware-controlled prefetching.