【问题标题】:assembler usage of prefetch commands预取命令的汇编器使用
【发布时间】:2010-01-28 14:36:24
【问题描述】:

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

处理器支持 PLD 预取命令。

如果我以连续顺序访问数据,如果我在开始处理当前结构之前使用 prefetch 命令加载数组中下一个结构的 startadress,是否会提高性能?还是我应该在每次迭代中预取下一个但一个?还是提前预取一定数量的字节?

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

谢谢!

【问题讨论】:

    标签: assembly arm prefetch


    【解决方案1】:

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

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

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

    【讨论】:

    • 您好,感谢您的回复!这种“将数据加载到处理器中与计算并行”的属性是如何调用的?我必须在手册中查找什么?
    • 处理器的块布局必须显示几个“砖块”,称为“算术运算单元”、“内存访问单元”等。还必须描述哪些单元可以并行工作以及在哪些条件下工作。例如,请查看此 AMD Athlon 指南:amd.com/us-en/assets/content_type/white_papers_and_tech_docs/…“附录 B”详细介绍了您应该感兴趣的主题。这就是您应该在处理器指南中寻找的内容。
    猜你喜欢
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 2013-02-22
    • 2013-03-06
    相关资源
    最近更新 更多