_mm_prefetch是一条SSE的指令.用于指导CPU如何去预取内存中的数据.
具体在C/C++代码里, 先需要
#include <xmmintrin.h>
可以使用:
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
No comments:
Post a Comment