void _mm_prefetch(char * p , int i );
p为要预取数据的内存地址, i可以为_MM_HINT_T0, _MM_HINT_T1, _MM_HINT_T2, 或者 _MM_HINT_NTA中的一个. 他们的区别为:
- PREFETCHT0 (T0): prefetch数据到所有级别cache, 包括L0 cache
- PREFETCHT1 (T1): prefetch数据到所有级别cache, 但是除去L0 cache
- PREFETCHT2 (T2): prefetch数据到所有级别cache, 但是除去L0和L1 cache
- PREFETCHNTA:
将给定内存地址的数据prefetch到L2 cache的某个特定column上,这样如果这个内存地址的数据只是一次性的使用,就不会导致其他有用的cacheline被替换出cache. 好处是可以可以防止non-temporal 数据污染cache