都是arm 为什么用java,为什么内存指令在ARM汇编中需要4个周期?

ARM具有流水线架构 . 每个时钟周期使流水线前进一步(例如,获取/解码/执行/读取......) . 由于管道连续馈电,执行每条指令的总时间可以接近1个周期,但是从“获取”到完成的单个指令的实际时间可以是3个周期 . ARM在他们的网站上有一个很好的解释:

内存延迟为这个想法增加了另一层复杂性 . ARM采用多级缓存系统,旨在以最少的周期提供最常用的数据 . 即使从最快(L0)缓存中读取也会涉及几个延迟周期 . 如果不立即使用数据,该管道包括允许稍后完成读取请求的工具 . 通过示例更容易理解:

LDR R0,[R1]

MOV R2,R3 // Allow time for memory read to occur

ADD R4,R4,#200 // by interleaving other instructions

CMP R0,#0 // before trying to use the value

// By trying to access the data immediately, this will cause a pipeline

// 'stall' and waste time waiting for the data to become available.

LDR R0,[R1]

CMP R0,#0 // Wastes at least 1 cycle due to pipeline not having the data

我们的想法是隐藏管道中的固有延迟,如果可以的话,通过延迟对寄存器的依赖性(也就是指令交错)来隐藏内存访问中的额外延迟 .

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值