STM32L476 FPU 执行效率之比较浅析

STM32L476 FPU 执行效率之比较浅析,第1张

STM32L476 FPU 执行效率之比较浅析, STM32L476 FPU 执行效率之比较浅析,第2张

1.前言
本应用笔记基于STM32L476平台,通过实际测量来评定使能FPU时浮点运算效率的情况。
2.测试工具
STM32L476 Nucleo,示波器
3.测试方法
MCU 运行频率设置为16MHz,根据下面公式1 做N次浮点运算,分使能FPU和禁止FPU两种情况,测试完成相同运算所需要的时间。在例程中通过翻转IO PB13 来标定完成运算所需要的时间。

STM32L476 FPU 执行效率之比较浅析,1,第3张

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.

STM32L476 FPU 执行效率之比较浅析,2,第4张

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

STM32L476 FPU 执行效率之比较浅析,3,第5张

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

STM32L476 FPU 执行效率之比较浅析,4,第6张


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

STM32L476 FPU 执行效率之比较浅析,5,第7张

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2592645.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-08
下一篇 2022-08-08

发表评论

登录后才能评论

评论列表(0条)

保存