In this subsection, we examine cases where the overhead of processing a
prefetch may potentially be large enough that one might consider dropping
the prefetch instead. Since prefetches are performance hints, and have no
side-effects on user-visible program state, the processor can safely
ignore them without violating correctness. In fact, if code with
prefetching is run on a processor whose memory system does not support
prefetching, the prefetches can simply be treated as NOPs. Presumably the
software will be effective at issuing prefetches that improve performance,
and we have already seen evidence of this in Chapters
and
. However, there
may be cases where the hardware can determine that a prefetch should be
dropped because the penalty of processing it is too large. For
example, what if the prefetch takes a TLB exception, or what if the
prefetch issue buffer is already full? We will focus on such issues in this
subsection.