STM32开启浮点运算单元FPU与DSP运算库,附性能测试+加减乘除耗时测试

 STM32F4xx属于Cortex M4F架构,自带FPU硬件,可以加速float类型数据的加减乘除运算。

观察启动文件,发现,要启用FPU,需要启动满足两个宏:(__FPU_PRESENT == 1) && (__FPU_USED == 1)

在keil的魔术棒中,如上图所示,直接选中单精度浮点运算器,keil就会自动把所需的宏给定义出来。如何验证是否开启成功?

验证方法1:

我们把F407主频设为168M,不选中/选中FPU,分别做10万次乘法:发现耗时分别为32153us、5954us,发现耗时缩短为1/6.性能提升显著,说明开启FPU成功了。

验证方法2:

进入debug模式,或者直接查看汇编文件,发现C语言乘法运算,被编译成了V打头的汇编乘法命令,说明开启成功。

FPU只能加速float的基本运算,还有一些数学函数,不是光靠FPU就能加速的,例如sin、cos、等函数,ST和ARM提供了优化过的三角函数等,使用插值方法加速运算,要想使用这些优化过的函数

-------------后记--------------------

再做几项计算耗时对比

图 A,耗时5952 us

图B 以上耗时7738us。该图比图A多了10万次乘法, 时间多了1786us。

图C 耗时5952

图D 7738 us

图E 11309 us

图F 9524 us

图G 6547 us。和图A比,多了10万次赋值,时间多了595us

图H 15476 us

图I 9524us


图J 7143

图K 7738

图L 7143

总结:

图AG对比:10万次float赋值:595us (float赋值速度)
图AB对比:10万次float乘法、赋值:1786us
                   10万次float乘法:1786us-595us=1191us (float乘法速度)
图AC对比:10万次float加法和10万次乘法相同:1191us (float加法速度)
图AF对比:10万次float比较大小、赋值:9524-5952=5357us
图AH对比:10万次float除法、赋值:15476-5952=9524us
                    10万次float除法:=9524us-595=8929 (float除法速度)
图AI对比:10万次整数取模、赋值:9524-5952=3572us
图AJ对比:10万次整数加法、赋值:7143-5952=1191us
图JK对比:10万次整数赋值:7738-7143=595 (int赋值速度)
图AJK对比:10万次整数加法:1191-595=596 (int加法)
图JL对比:10万次整数加法和乘法,耗时相同=595us (int乘法法)

根据以上结果,得到以下重要的几个结论:

(1)float赋值和int32赋值速度相同

(2)float乘法和float加法,速度相同

(3)float乘法耗时是float加法的2倍;int乘法和int加法,速度相同

(4)float除法耗时是乘法的8倍,是加法的16倍

(5)float乘法耗时是int乘法的2倍

注意:以上测试赋值的过程中,使用了volatile,所以赋值时存在写内存的过程,如果没有volatile,赋值会被写入CPU寄存器,会比写内存稍微快一点点。所以以上测试是保守的,实际会更快。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值