Software-controlled prefetching relies upon some form of support for
inserting prefetches into the code. While having the compiler insert the
prefetches automatically is the preferred approach, another possibility is
for the programmer to insert the prefetches by hand. Comparing
compiler-based prefetching with hand-inserted prefetching is a useful
exercise because hand-inserted prefetching is not constrained by the
limitations of the compiler technology; it provides a rough ``upper bound''
on the performance we might expect from the compiler. In this section, we
examine applications with hand-inserted prefetching, discussing cases where
the compiler was successful (Section ), and
also cases where the compiler failed (Section
).