软件在x86上跨页边界预取

时间:2013-02-08 22:12:15

标签: x86 tlb prefetch nehalem

我的理解是硬件预取永远不会跨越页面边界。我想知道软件预取是否具有相同的限制,即我是否可以使用软件预取来避免未来的TLB未命中。从搜索周围看来,它似乎是可能的,但我在文档中找不到任何确定的内容,因此引用会很好。

我对Nehalem,Sandy Bridge和Westmere特别感兴趣。

2 个答案:

答案 0 :(得分:2)

根据英特尔的Optimization Reference Manual,它取决于处理器。从第7.4.3节:

  

有些情况下PREFETCH不会执行数据预取。其中包括:

     
      
  • PREFETCH导致DTLB(数据转换后备缓冲区)未命中。这适用于奔腾4   具有CPUID签名的处理器对应于系列15,型号0,1或2. PREFETCH   解决了DTLB未命中并在具有CPUID签名的Pentium 4处理器上获取数据   对应于15系列,型号3。
  •   
  • 访问导致错误/异常的指定地址。
  •   

软件预取可能会也可能不会避免TLB未命中,具体取决于处理器。如果数据导致页面错误,它将不会获取数据。

如果你想确保避免TLB未命中,你可以进行虚拟读取来加载数据而不是预取指令。这可能会导致页面错误在页面中交换,这可能是好的也可能是坏的,具体取决于您的用例。

答案 1 :(得分:2)

在现代处理器(Nehalem,Sandy Bridge和Westmere)中,软件预取确实会触发TLB查找。

来自英特尔优化指南:(第7.3.3节)

  

在较旧的微体系结构中,PREFETCH导致数据转换   Lookaside Buffer(DTLB)miss将被删除。在基于的处理器中   Nehalem,Westmere,Sandy Bridge和更新的微型架构,英特尔   Core 2处理器和Intel Atom处理器,PREFETCH导致DTLB   可以跨页边界获取miss。