title: Non-temporal loads and the hardware prefetcher, do they work together?
body: <p>When executing a series of <code>_mm_stream_load_si128()</code> calls (<code>MOVNTDQA</code>) from consecutive memory locations, will the hardware pre-fetcher still kick-in, or should I use explicit software prefetching (with NTA hint) in order to obtain the benefits of prefetching while still avoiding cache pollution?</p>
  
  <p>The reason I ask this is because their objectives seem contradictory to me. A streaming load will fetch data bypassing the cache, while the pre-fetcher attempts to proactively fetch data into the cache. </p>
  
  <p>When sequentially iterating a large data structure (processed data won't be retouched in a long while), it would make sense to me to avoid polluting the chache hierarchy, but I do not want to incur in frequent ~100 cycle penalties because the pre-fetcher is idle.</p>
  
  <p>Target architecture is Intel SandyBridge</p>