汇编程序使用预取命令

时间:2010-01-28 14:36:25

标签: assembly arm prefetch

我正在编写一些(arm)内联汇编代码,它在循环中处理大量C结构,并将一些数据存储到另一个数组中。

处理器支持PLD预取命令。

如果我按连续顺序访问数据,如果我在开始处理当前结构之前使用prefetch命令加载数组中下一个结构的startadress,那么性能会有提升吗?或者我应该在每次迭代中预取下一个但只有一个?或预取一定数量的字节?

在目标数组中预取地址是否也有意义?

谢谢!

1 个答案:

答案 0 :(得分:1)

这在很大程度上取决于处理器的内部工作原理。也许预取会提高性能,也许不会,你必须查看文档。

如果在处理器中加载与计算子单元并行工作的数据有单独的子单元,则可以提高性能。另外请记住,预取指令是另一条指令,所以你最好只为缓存行的每个块长度发出一次,而不是更频繁,否则你只会增加处理器负载和浪费时间。如果用于加载数据的子单元不是独立的,并且您仍然发出预取指令,您甚至可能面临性能下降 - 由于没有同时工作和处理器负载增加导致浪费时间而没有增加。

你不应该从你只写的数组中预取数据 - 这只是浪费时间。