它与某些预取技术有关吗? 或者具有DDR接入时序特性?
答案 0 :(得分:6)
IIRC从ARMv5TE开始,写缓冲区和L1高速缓存的路径为64位宽,以适应LDRD / STRD指令。这允许STM每个周期写入两个寄存器。
您还可以节省一些L1指令缓存,并且在双发布内核上只使用一个管道,这也是一个额外的收益。
答案 1 :(得分:4)
更多指令,更多提取周期,更多执行指令,需要更长时间。总线是或者可以是64位宽,对于单个寄存器stm没有增益但是有多个寄存器可以减少移动数据的总线周期数,并且取决于存储器系统,如果64位宽,你没有读 - 修改 - 写也很慢。如果它必须读取 - 修改 - 写入缓存,它通常是通过写入,您将丢失缓存空间,以及读取的成本。即使它是缓存中的命中,读取 - 修改写入也可能花费你。
你可以去武器网站并下载amba / axi规范并查看总线交易是如何工作的,每次交易都涉及多个时钟周期(多次交易可以一次飞行,是的)一旦你得到超过开销,它是每64位数据的时钟,因此128位比传输64位需要多一个时钟。 32位和64位需要相同数量的时钟进行传输(如果对齐)。
我无法代表所有体系结构,但我相信至少有一个我看到每次传输只有读取实际上会超过64位。写入被分解为单独的64位传输。我记得错了。
如果您移动4个字的数据,读取或写入,未对齐,我相信这将成为4个单独的传输,一个用于每个奇数字,一个用于中间对齐的64位。因此,调整很重要。
答案 2 :(得分:2)
什么时候是真的?
根据this handy table,STM
指令需要2个周期来存储单个寄存器,或 n 周期来存储 n 寄存器< em> n &gt; 1。
另一方面,STR
总是需要1个单循环。
你什么时候得到STM
比STR
更快?
STM
较慢。另一方面,上面的参考文献适用于ARM9TDMI架构,并且有许多ARM。