Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在编写一些(arm)内联汇编代码,这些代码在循环中处理大量 C 结构并将一些数据存储到另一个数组中。
处理器支持 PLD 预取命令。
如果我以连续顺序访问数据,如果我在开始处理当前结构之前使用 prefetch 命令加载数组中下一个结构的 startadress,是否会提高性能?还是我应该在每次迭代中预取下一个但一个?还是提前预取一定数量的字节?
预取目标数组中的地址是否也有意义?
谢谢!
这在很大程度上取决于处理器的内部工作。也许预取会提高性能,也许不会,你必须查看文档。
如果处理器中有一个单独的子单元用于加载与计算子单元并行工作的数据,则可以提高性能。另请记住,预取指令是另一条指令,因此您最好只为缓存行的每个块长度发出一次,而不是更频繁,否则只会增加处理器负载并浪费时间。如果用于加载数据的子单元不是独立的并且您仍然发出预取指令,您甚至可能会面临性能下降 - 由于没有同时工作和处理器负载增加导致浪费时间而不会增加。
您不应该从只写入的数组中预取数据——这只是浪费时间。