代码之家  ›  专栏  ›  技术社区  ›  Will

ARM上的预取指令

  •  3
  • Will  · 技术社区  · 16 年前

    较新的ARM处理器包括PLD和PLI指令。

    我正在编写紧内环(C++),它具有非顺序内存访问模式,但我的代码完全理解的模式。如果我可以在处理当前内存位置的同时预取下一个位置,那么我会预计速度会大大加快,并且我希望这样做足够快,可以尝试进行值得的实验!

    我使用的是来自ARM的新的昂贵编译器,它似乎不包括任何地方的PLD指令,更不用说在我关心的这个特殊循环中了。

    如何在C++代码中包含明确的预取指令?

    4 回复  |  直到 16 年前
        1
  •  5
  •   Ionut Anghelcovici    16 年前

    应该有一些特定于编译器的特性。对于C/C++来说,没有标准的方法。查看编译器参考指南。有关RealView编译器,请参见 this this .

        2
  •  0
  •   Loren Charnley    16 年前

    如果您试图从这些循环中提取真正最大的性能,那么我建议您在汇编程序中编写整个循环构造。您应该能够根据循环中涉及的数据结构使用内联程序集。如果可以展开循环的任何部分(比如使访问非顺序进行的部分),则效果会更好。

        3
  •  0
  •   Dan    16 年前

    冒着问显而易见的风险:您验证了编译器的目标体系结构吗?例如(幽默我),如果默认情况下编译器的目标是arm7,那么 从未 去看PLD指令。

        4
  •  0
  •   Matt J Jørgen Fogh    15 年前

    其他优化,如 software pipelining loop unrolling 可以实现与预取思想相同的效果(通过将加载延迟与有用的计算重叠来隐藏加载延迟),但不需要额外指令导致的额外指令缓存压力。我甚至会说,这种情况经常发生,因为紧凑的内部循环往往指令很少,控制流也很少。您的编译器是否改为执行这些类型的传统优化?如果是这样的话,也许值得查看管道图来开发一个更详细的处理器工作方式的成本模型,并更定量地评估预取是否有帮助。