OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4298|回复: 3

STM32L476 FPU 执行效率之比较浅析

[复制链接]

172

主题

194

帖子

0

精华

高级会员

Rank: 4

积分
854
金钱
854
注册时间
2016-10-27
在线时间
52 小时
发表于 2016-12-21 18:07:30 | 显示全部楼层 |阅读模式
1.前言

本应用笔记基于STM32L476平台,通过实际测量来评定使能FPU时浮点运算效率的情况。

2.测试工具

STM32L476 Nucleo,示波器

3.测试方法
MCU 运行频率设置为16MHz,根据下面公式1 做N 次浮点运算,分使能FPU和禁止FPU两种情况,测试完成相同运算所需要的时间。在例程中通过翻转IO PB13 来标定完成运算所需要的时间。
1.webp.jpg
3.1 测试代码
根据公式1,分别定义A、B、C 三个常量,如下:
/* Private constants---------------------------------------------------------*/
#define A_CONSTANT(0.285f)
#define B_CONSTANT(0.443f)
#define C_CONSTANT(0.698f)
根据公式做对应的运算并通过GPIOC Pin0 输出,测定对应消耗时间:
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13, GPIO_PIN_SET);
temp = A_CONSTANT*x*x +B_CONSTANT*x + C_CONSTANT;
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13, GPIO_PIN_RESET);

3.2 代码分析
根据测试用的一元二次方程,经过IAR 编译后,汇编结果如下:

3.2.1 FPU 使能
从汇编代码可以看出,使能FPU 的情况下,完成一元二次方程的运算只需要7 条单周期指令,总共耗时为7 个Clock 周期。通过IAR 的方针模式运行,需要的CPU cycles 为7.
2.webp.jpg

3.2.2 FPU 禁止
从汇编代码可以看出,未使能FPU 的情况下,完成该一元二次方程的运算需要执行14 条指令,其中包括3 条两周期指令,6 条单周期指令,5 条程序跳转指令。通过IAR 的方针模式运行,需要的CPU cycles 为207.
3.webp.jpg

4.测试数据及结论
IO完成两次翻转耗时6.48 uS;
使能FPU 时,除去IO 翻转耗时,完成一次运算时间为6.52 uS(13 uS -6.48 uS),
如下图示:
4.webp.jpg

禁止FPU 时,除去IO 翻转耗时,完成一次运算时间为87.4 uS(93.88 uS -6.48 uS),如下图示:
5.webp.jpg

小结下,根据上面相关测试数据大致可得出如下结论:

• 完成同样的一元二次方程运算,禁止FPU时所消耗的时间约为使能FPU时消耗时间的13.4 倍左右。



文章来源:微信公众号   融创芯城(一站式电子元器件、PCB、PCBA购买服务平台,项目众包平台,方案共享平台)

微信公众号:融创芯城(电子元器件,PCB/PCBA购买,项目众包,方案共享平台)
平台网址:www.digiic.com
技术群:499391543
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

0

帖子

0

精华

新手入门

积分
1
金钱
1
注册时间
2023-7-13
在线时间
0 小时
发表于 2017-1-17 16:26:52 | 显示全部楼层
请问兄弟,L4系列的单片机,用什么仿真器烧录程序?以前给F103系列的Jlink V8能用吗?
回复 支持 反对

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2017-1-17 16:48:23 | 显示全部楼层
数据党,不错。不过二者实际差值小于理论差值,是不是因为浮点计算指令不是1个周期?或者是存在一些等待周期?
回复 支持 反对

使用道具 举报

172

主题

194

帖子

0

精华

高级会员

Rank: 4

积分
854
金钱
854
注册时间
2016-10-27
在线时间
52 小时
 楼主| 发表于 2017-1-19 13:57:58 | 显示全部楼层
yyx112358 发表于 2017-1-17 16:48
数据党,不错。不过二者实际差值小于理论差值,是不是因为浮点计算指令不是1个周期?或者是存在一些等待周 ...

可以加技术群499391543
微信公众号:融创芯城(电子元器件,PCB/PCBA购买,项目众包,方案共享平台)
平台网址:www.digiic.com
技术群:499391543
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-27 13:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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