如何处理地址不对齐指令?

连续不断是处理器取指的另一个目标。如果处理器在每一个时钟周期都能取一条指令,就可以源源不断的为处理器提供后续指令流,而不会出现空闲的时钟周期。

地址不对齐导致问题:

不管是从指令缓存,还是从ITCM中取指令,若处理器遇到了一条地址不对齐的指令,则会给连续不断取指造成困难,因为ITCM和指令缓存的存储单元往往使用SRAM,而SRAM的读端口往往具有固定宽度。以位宽为32位的SRAM为例,它在一个时钟周期只能读出一个(地址与32位对齐)32位的数据。假设一条32位长的指令处于地址不对齐的位置,则意味着需要分两个时钟周期读出两个32位的数据,然后各取其一部分并拼接成真正需要的32位指令,这样就需要花费至少两个时钟周期才能取出一条指令。

如何才能使处理器将地址不对齐的指令在一个时钟周期内取出?

1. 普通指令的地址不对齐

 对于普通指令按顺序取指(地址连续增长)的情形,使用剩余缓冲区(leftover buffer)保存上次取指后没用完的位,供下次使用。假设从ITCM中取出一个32位的指令字,但是只用了它的低16位,这种情况出现可能是以下两种原因造成。

(1)只需要使用此处取出的32位中的低16位和上一次取出的高16位来组成一条32位指令;

(2)这条指令的长度本身就是16位,因此只需要取出低16位。

此次没有使用到的高16位则可以暂存于剩余缓冲区,待下一个时钟周期取出下一个32位指令字后,拼接出新的32位指令字。

2. 分支跳转指令的地址不对齐(取指令不连续)

 对于分支跳转指令而言,如果跳转的目标地址与32位地址不对齐,且需要取出一个32位的指令字,上述剩余缓存就无济于事了(因为剩余缓冲区只有在顺序取指时,才能预存上次么有用完的指令字)。因此,常见的实现方式是使用多媒体(bank)化的SARM进行指令存储。以常见的奇偶交错方式为例,使用两块32位宽的SARM交错地进行存储,两个连续的32位指令字将会分别存储在两块不同SRAM中。这样对于地址不与32位地址对齐的指令,则在一个时钟周期可以访问两块SRAM,取出两个连续的32位指令字,然后各取其一部分并拼接成真正需要的32位指令字。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 如果循环需要处理的float类型数据长度不是4的倍数,那么最后剩余的不足4个float类型数据,可以将其视为一个128位的数据块进行处理。可以采用以下两种方式之一: 1. 使用一个临时的数据缓冲区,将不足4个float类型数据拷贝到缓冲区中,然后将缓冲区中的数据补齐为4个float类型,再通过NEON指令进行处理。 2. 直接将不足4个float类型数据拷贝到一个128位的数据块中,将多余的位补0,然后通过NEON指令进行处理。 需要注意的是,在使用第二种方式时,由于多余的位补0可能会影响到计算结果,因此在计算时需要对结果进行修正。 ### 回答2: 如果一个循环需要处理的float类型数据长度不是4的倍数,那么剩下的不足4个float数据该如何处理取决于具体情况和需求。 一种处理方式是将剩下的数据全部填充到一个临时的128 bit内存位置中,然后使用NEON指令对这些数据进行处理。在实际操作中,可以使用零填充或者复制前面的数据进行填充,以便能够满足128 bit的对齐要求。 另一种处理方式是将剩下的数据作为特殊情况单独处理。例如,可以根据实际需要选择性地使用NEON指令对剩下的不足4个float数据进行处理,或者使用其他处理方法,如普通的ARM指令进行处理。这样虽然可能会增加额外的计算成本,但可以保证计算的正确性。 当然,还有其他处理方式,如将剩下的不足4个float数据作为整体进行处理,而不使用NEON指令。这需要根据具体情况和需求来选择合适的处理方式。 总之,当一个循环需要处理的float类型数据长度不是4的倍数时,可以根据实际需求和性能要求选择合适的处理方式,保证数据的正确性和计算效率。 ### 回答3: 如果一个循环需要处理的 float 类型数据长度不是 4 的倍数,那就需要进行特殊处理。一种方法是使用 zero-padding,即向数据的末尾添加 0,使得数据长度变成 4 的倍数。这样,NEON 指令就可以正常处理了。 另一种方法是使用截断处理,如果数据长度不是 4 的倍数,就舍弃多余的数据。这种情况下,需要根据具体的应用需求来决定舍弃数据的策略,例如可以选择舍弃最后几个数据,或者将不足一个 128 bit 的数据舍弃掉。 除了以上两种方法,还可以利用 NEON 指令的逻辑运算来处理不是 4 的倍数的数据。可以使用比较指令,对每一个数据进行比较,然后根据比较结果决定是否进行计算。 需要注意的是,这些处理方法都会对原有数据造成一定程度的影响。因此,在实际应用中,需要根据具体情况选择合适的处理策略,以保证计算结果的准确性和有效性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狮子座硅农(Leo ICer)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值