4

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

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

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

如何在我的 C++ 代码中包含显式预取指令?

4

4 回答 4

5

应该有一些编译器特定的功能。对于 C/C++,没有标准的方法可以做到这一点。查看您的编译器编译器参考指南。对于 RealView 编译器,请参见thisthis

于 2008-09-17T12:23:37.870 回答
1

如果您试图从这些循环中获得真正的最大性能,那么我建议您在汇编程序中编写整个循环结构。根据循环中涉及的数据结构,您应该能够使用内联汇编。如果您可以展开循环的任何部分(例如使访问不连续所涉及的部分),那就更好了。

于 2008-09-17T12:26:51.107 回答
0

冒着问显而易见的风险:您是否验证了编译器的目标架构?例如(幽默),如果默认情况下编译器针对 ARM7,您将永远不会看到 PLD 指令。

于 2008-10-28T13:52:40.330 回答
0

其他优化(如软件流水线循环展开)可能会达到与您的预取想法相同的效果(通过将加载的延迟与有用的计算重叠来隐藏加载的延迟),但不会导致额外的指令缓存压力。通过额外的说明。我什至会说这种情况经常发生,因为紧密的内部循环往往只有很少的指令和很少的控制流。您的编译器是否正在执行这些类型的传统优化。如果是这样,可能值得查看流水线图,以开发更详细的处理器工作成本模型,并更定量地评估预取是否有帮助。

于 2009-04-29T06:06:37.643 回答