找回密码
 立即注册
查看: 377|回复: 11

【求助】关于long型右移时间非常长的问题

[复制链接]
  • 打卡等级:常住居民I
  • 打卡总天数:65
  • 最近打卡:2025-04-10 14:51:20
已绑定手机

9

主题

16

回帖

174

积分

注册会员

积分
174
发表于 2025-1-12 14:11:45 | 显示全部楼层 |阅读模式
使用AI8051U单片机,在写一条32位乘法运算发现时间特别长的问题
截图202501121407532314.jpg
图中右移12位相当于除以4096,但是用>>12时耗时3us,用/4096耗时1.多us(使用了MDU32库),很奇怪(两者得数都一样)。

按道理来说应该是右移更快呀
补充一下,重新写了一下代码,防止是我自己代码产生的干扰
截图202501122208254089.jpg 得到的结果是: 截图202501122209395844.jpg 截图202501122210236351.jpg 截图202501122210521626.jpg
还有一个问题,技术手册里面的DPU是怎么用的呀,还是说已经是用上了
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:65
  • 最近打卡:2025-04-10 14:51:20
已绑定手机

9

主题

16

回帖

174

积分

注册会员

积分
174
发表于 2025-1-12 22:00:46 | 显示全部楼层
没有人吗
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-01 23:18:33

15

主题

139

回帖

977

积分

高级会员

积分
977
发表于 2025-1-12 23:06:48 | 显示全部楼层
正常情况就是这样的。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-01 23:18:33

15

主题

139

回帖

977

积分

高级会员

积分
977
发表于 2025-1-12 23:31:59 | 显示全部楼层
和ARM具有桶形移位器不同,51和251每次只能移位一位。251最大只能对16位寄存器移位。
例子中是long型,右移12位,只能一位一位的移,循环12次。
且每移一位也不能硬件单次完成,需要高位低位分别完成再拼接,一大堆指令的。
long移位12位,消耗100多个周期,是比较合理的。
对于ARM来说,一个指令周期就可以完成了。
对于51系列,移位代替算术运算要慎重。

额外提一点:
(aaa>>12) 用 (aaa>>8) >> 4 代替有奇效,速度提升3倍。
(>>8)的时间相比 (>>4)几乎可以忽略不计。

点评

学到了,感谢  发表于 2025-1-13 15:50
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:349
  • 最近打卡:2025-05-01 23:44:45
已绑定手机

14

主题

145

回帖

494

积分

中级会员

积分
494
发表于 2025-1-13 00:04:34 | 显示全部楼层
hea*** 发表于 2025-1-12 23:31
和ARM具有桶形移位器不同,51和251每次只能移位一位。251最大只能对16位寄存器移位。
例子中是long型,右移 ...

这是什么原理,为什么都是右移12位,后面这样写速度提升3倍
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-01 23:18:33

15

主题

139

回帖

977

积分

高级会员

积分
977
发表于 2025-1-13 00:17:25 | 显示全部楼层
一笔*** 发表于 2025-1-13 00:04
这是什么原理,为什么都是右移12位,后面这样写速度提升3倍

一个是右移12位,一个是右移4位,时间不就是3倍吗?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:65
  • 最近打卡:2025-04-10 14:51:20
已绑定手机

9

主题

16

回帖

174

积分

注册会员

积分
174
发表于 2025-1-13 00:46:01 来自手机 | 显示全部楼层
health 发表于 2025-1-13 00:17
一个是右移12位,一个是右移4位,时间不就是3倍吗?

好的,非常感谢,明天我尝试一下。另外我在技术手册中看到DPU章节中有32位右移n位的指令,耗时3个指令周期。但是没有看到具体使用方法,不知道您是否有了解呢
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-01 23:18:33

15

主题

139

回帖

977

积分

高级会员

积分
977
发表于 2025-1-13 01:27:08 | 显示全部楼层
dem*** 发表于 2025-1-13 00:46
好的,非常感谢,明天我尝试一下。另外我在技术手册中看到DPU章节中有32位右移n位的指令,耗时3个指令周 ...

8051没有DPU
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:65
  • 最近打卡:2025-04-10 14:51:20
已绑定手机

9

主题

16

回帖

174

积分

注册会员

积分
174
发表于 2025-1-13 15:22:40 | 显示全部楼层

好的
刚刚实验了一下,用>>8再>>4确实要快一些,差不多快200ns
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-29 08:28:25
已绑定手机

17

主题

446

回帖

1173

积分

金牌会员

积分
1173
发表于 2025-1-13 15:58:32 | 显示全部楼层
MDU就是加速乘除的,所以/4096还快些
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 08:51 , Processed in 0.348652 second(s), 117 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表