首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于ARM,为什么一条STM指令通常比多条STR指令更快?

对于ARM,为什么一条STM指令通常比多条STR指令更快?
EN

Stack Overflow用户
提问于 2013-03-19 21:03:38
回答 3查看 1.2K关注 0票数 3

是否与某些预取技术有关?或者具有DDR访问时序特性?

EN

回答 3

Stack Overflow用户

发布于 2013-03-19 21:31:38

从ARMv5TE开始,到写缓冲区和L1缓存的路径是64位宽,以容纳LDRD/STRD指令。这允许STM在每个周期写入两个寄存器。

您还将节省一点L1指令缓存,并在双发布内核上仅使用一个流水线,这也是一个额外的优势。

票数 7
EN

Stack Overflow用户

发布于 2013-03-19 21:54:55

更多的指令,更多的获取周期,更多的指令要执行,花费的时间更长。总线是或可以是64位宽,对于单个寄存器stm没有增益,但对于多个寄存器,可以减少移动数据的总线周期数,并且取决于存储器系统,如果64位宽,则没有读取-修改-写入,这也很慢。如果它必须读-修改-写到缓存中,而这通常是写通,那么你就会损失缓存空间,以及读取的成本。即使在缓存中命中,读-修改-写操作也可能会耗费您的成本。

你可以去arms网站下载amba/axi规范,看看总线事务是如何工作的,每个事务都涉及到一些时钟周期(多个事务可以同时运行,是的)一旦你通过了开销,它是每64位数据的一个时钟,所以128位需要比64位多一个时钟来传输。32位和64位需要相同数量的时钟来传输(如果对齐)。

我不能代表所有的体系结构,但我相信至少有一种体系结构,我看到只有读取才能完成超过64位的每次传输。写入被分成单独的64位传输。我可能记错了。

如果你移动4个字的数据,读或写,未对齐,我相信这就变成了4个单独的传输,每个奇数字一个,中间对齐的64位一个。因此,对齐可能很重要。

票数 4
EN

Stack Overflow用户

发布于 2013-03-19 21:16:45

什么时候是真的?

根据this handy table的说法,对于n> 1,STM指令存储单个寄存器需要2个周期,或者存储n个寄存器需要n个周期。

另一方面,STR总是需要1个单周期。

你什么时候知道STMSTR快?

  • 对于一个寄存器,STM更慢。
  • 对于n个寄存器(n > 1),它们是相同的。

另一方面,上面的参考是针对ARM9TDMI架构的,并且有许多武器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15500308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档