是否与某些预取技术有关?或者具有DDR访问时序特性?
发布于 2013-03-19 21:31:38
从ARMv5TE开始,到写缓冲区和L1缓存的路径是64位宽,以容纳LDRD/STRD指令。这允许STM在每个周期写入两个寄存器。
您还将节省一点L1指令缓存,并在双发布内核上仅使用一个流水线,这也是一个额外的优势。
发布于 2013-03-19 21:54:55
更多的指令,更多的获取周期,更多的指令要执行,花费的时间更长。总线是或可以是64位宽,对于单个寄存器stm没有增益,但对于多个寄存器,可以减少移动数据的总线周期数,并且取决于存储器系统,如果64位宽,则没有读取-修改-写入,这也很慢。如果它必须读-修改-写到缓存中,而这通常是写通,那么你就会损失缓存空间,以及读取的成本。即使在缓存中命中,读-修改-写操作也可能会耗费您的成本。
你可以去arms网站下载amba/axi规范,看看总线事务是如何工作的,每个事务都涉及到一些时钟周期(多个事务可以同时运行,是的)一旦你通过了开销,它是每64位数据的一个时钟,所以128位需要比64位多一个时钟来传输。32位和64位需要相同数量的时钟来传输(如果对齐)。
我不能代表所有的体系结构,但我相信至少有一种体系结构,我看到只有读取才能完成超过64位的每次传输。写入被分成单独的64位传输。我可能记错了。
如果你移动4个字的数据,读或写,未对齐,我相信这就变成了4个单独的传输,每个奇数字一个,中间对齐的64位一个。因此,对齐可能很重要。
发布于 2013-03-19 21:16:45
什么时候是真的?
根据this handy table的说法,对于n> 1,STM指令存储单个寄存器需要2个周期,或者存储n个寄存器需要n个周期。
另一方面,STR总是需要1个单周期。
你什么时候知道STM比STR快?
STM更慢。另一方面,上面的参考是针对ARM9TDMI架构的,并且有许多武器。
https://stackoverflow.com/questions/15500308
复制相似问题