【求助】关于long型右移时间非常长的问题
使用AI8051U单片机,在写一条32位乘法运算发现时间特别长的问题图中右移12位相当于除以4096,但是用>>12时耗时3us,用/4096耗时1.多us(使用了MDU32库),很奇怪(两者得数都一样)。
按道理来说应该是右移更快呀
补充一下,重新写了一下代码,防止是我自己代码产生的干扰
得到的结果是:
还有一个问题,技术手册里面的DPU是怎么用的呀,还是说已经是用上了 没有人吗
正常情况就是这样的。 和ARM具有桶形移位器不同,51和251每次只能移位一位。251最大只能对16位寄存器移位。
例子中是long型,右移12位,只能一位一位的移,循环12次。
且每移一位也不能硬件单次完成,需要高位低位分别完成再拼接,一大堆指令的。
long移位12位,消耗100多个周期,是比较合理的。
对于ARM来说,一个指令周期就可以完成了。
对于51系列,移位代替算术运算要慎重。
额外提一点:
(aaa>>12) 用 (aaa>>8) >> 4 代替有奇效,速度提升3倍。
(>>8)的时间相比 (>>4)几乎可以忽略不计。
health 发表于 2025-1-12 23:31
和ARM具有桶形移位器不同,51和251每次只能移位一位。251最大只能对16位寄存器移位。
例子中是long型,右移 ...
这是什么原理,为什么都是右移12位,后面这样写速度提升3倍 一笔长空 发表于 2025-1-13 00:04
这是什么原理,为什么都是右移12位,后面这样写速度提升3倍
一个是右移12位,一个是右移4位,时间不就是3倍吗? health 发表于 2025-1-13 00:17
一个是右移12位,一个是右移4位,时间不就是3倍吗?
好的,非常感谢,明天我尝试一下。另外我在技术手册中看到DPU章节中有32位右移n位的指令,耗时3个指令周期。但是没有看到具体使用方法,不知道您是否有了解呢 demon 发表于 2025-1-13 00:46
好的,非常感谢,明天我尝试一下。另外我在技术手册中看到DPU章节中有32位右移n位的指令,耗时3个指令周 ...
8051没有DPU health 发表于 2025-1-13 01:27
8051没有DPU
好的
刚刚实验了一下,用>>8再>>4确实要快一些,差不多快200ns
MDU就是加速乘除的,所以/4096还快些
页:
[1]
2