Friday, September 16, 2011

Cacheline prefetch

_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: