玩转X-CTR100 l STM32F4 l FPU单精度浮点性能测试

我造轮子,你造车,创客一起造起来!塔克创新资讯【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/ 】

本文介绍X-CTR100控制器如何开启STM32F4的硬件FPU,并对比使用硬件FPU和不使用硬件FPU的速度差别。
原理
FPU即浮点运算单元(Float Point Unit),浮点运算,对于定点CPU(没有FPU的CPU)来说必须要按照IEEE-754标准的算法来完成运算,是相当耗费时间的。而对于有FPU的CPU来说,浮点运算则只是几条指令的事情,速度相当快。
浮点运算一直是定点CPU的难题,比如一个简单的1.1+1.1,定点CPU必须要按照IEEE-754标准的算法来完成运算,对于8位单片机来说已经完全是噩梦,对32为单片机来说也不会有多大改善。虽然将浮点数进行Q化处理能充分发挥32位单片机的运算性能,但是精度受到限制而不会太高。对于有FPU(浮点运算单元)的单片机或者CPU来说,浮点加法只是几条指令的事情。
STM32F4属于Cortex M4F架构,带有32位单精度硬件FPU,支持浮点指令集,相对于Cortex M0和Cortex M3等,高出数十倍甚至上百倍的运算性能。
STM32F4硬件上要开启FPU是很简单的,通过一个叫:协处理器控制寄存器(CPACR)的寄存器设置即可开启STM32F4的硬件FPU。
有网友测试FPU性能对比数据。


根据ST官方文档,采用Julia集对FPU进行测试时,性能提升为14.57倍。
本文采用简单的重复乘法、除法方法测试,相同计算量测试计算时间。
例程
本例程通过计算重复乘法或除法,并测量计算时间,间接测量FPU性能。
硬件说明
硬件资源:
- 串口UART1
硬件连接:
使用MicroUSB数据线连接X-CTR100 COM接口。
软件说明
开启FPU,需要定义全局宏定义标识符__FPU_PRESENT以及__FPU_USED为1,__FPU_PRESENT用来确定处理器是否带FPU功能,标识符__FPU_USED用来确定是否开启FPU。
需要如下两步。
步骤一:__FPU_PRESENT
X-CTR100 处理器STM32F4是带FPU功能的,所以在我们的stm32f4xx.h头文件里面,我们默认是定义了__FPU_PRESENT为1。
打开文件搜索即可找到下面一行代码。
|
#define __FPU_PRESENT 1 /*!< FPU present */ |
步骤二:__FPU_USED
在MDK中做如下设置

测试代码如下,重复进行乘除计算,测量计算时间,时间越少性能越好。
|
int main(void) { uint32_t i, tmp; float a = 1.24, b = 34.456, c = 0;
/* X-CTR100初始化 */ AX_Init(115200); printf("***X-CTR100 FPU硬件浮点-性能测试例程***\r\n\r\n");
//模块初始化及配置 AX_TIMER_TIM6_Init(1);
while (1) { //乘法测试 AX_TIMER_TIM6_SetCounter(0); for (i = 0; i<20000; i++) { c = a*b; //防止编译器优化掉 if (c> 0) a = c; } tmp = AX_TIMER_TIM6_GetCountert(); printf("乘法计算时间:%d us | ", tmp);
//除法测试 AX_TIMER_TIM6_SetCounter(0); for (i = 0; i<20000; i++) { c = b / a; //防止编译器优化掉 if (c> 0) a = c; } tmp = AX_TIMER_TIM6_GetCountert(); printf("除法计算时间:%d us \r\n ", tmp);
AX_Delayms(1000); AX_LEDG_Toggle(); } } |
实现效果
首先上述方法开启FPU,测试性能,X工程模板默认开启FPU。
再次通过MDK设置页面关闭FPU功能,重新编译代码,测试性能。
测试结果如下图,乘法提升约5.7倍,除法提升约10.3倍。

总结
通过本文学习,可以了解FPU的开启方法,并通过实际实验了解FPU性能提升。
X工程模板默认开启FPU,建议在后续工程中开启硬件浮点,综合计算能力提升较大。
玩转X-CTR100 l STM32F4 l FPU单精度浮点性能测试的更多相关文章
- 玩转X-CTR100 l STM32F4 l ADC 模拟数字转换
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 AD转换接 ...
- 玩转X-CTR100 l STM32F4 l MPU6050加速度陀螺仪传感器
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 板载加速度 ...
- 玩转X-CTR100 l STM32F4 l DSP指令集性能测试
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 DSP库的 ...
- 玩转X-CTR100 l STM32F4 l X-CTR100与树莓派搭建机器人平台
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器与树莓派Linux系统 ...
- 玩转X-CTR100 l STM32F4 l 舵机控制
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器的舵机控制,X-CTR ...
- 玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器控制步进电机 ...
- 玩转X-CTR100 l STM32F4 l 基础例程printf、LED、蜂鸣器、拨码开关、位带操作
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器基础板载资源 ...
- 玩转X-CTR100 l STM32F4 l PS2无线手柄
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] SONY的PS2无线手柄是索尼游戏机的遥控手柄,控制 ...
- 玩转X-CTR100 l STM32F4 l RNG硬件随机数发生器
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 STM32F4硬件随 ...
随机推荐
- android------基础面试题
1. Android的四大组件是哪些,它们的作用? 答:Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态,做很多持 ...
- Confluence 6 配置边栏链接
选择图标来显示或者隐藏,页面(pages),博客页面(blogs),快捷键(shortcuts )或者导航选项(navigation options).例如,如果你希望i的这个公开主要用于博客用途,你 ...
- SVN入门使用
1.安装客户端:TortoiseSVN-1.9.7.27907-x64-svn-1.9.7 2.安装服务器:Setup-Subversion-1.8.5.msi 下载地址:http://sou ...
- 『TensorFlow』SSD源码学习_其八:网络训练
Fork版本项目地址:SSD 作者使用了分布式训练的写法,这使得训练部分代码异常臃肿,我给出了部分注释.我对于多机分布式并不很熟,而且不是重点,所以不过多介绍,简单的给出一点训练中作者的优化手段,包含 ...
- stl常用的查找算法
#include<iostream> using namespace std; #include"vector" #include"algorithm&quo ...
- windows开启Apache的mod_rewrite模块
windows下安装apache默认是没有开启mod_rewrite模块的,启用也很简单,修改apache配置文件httpd.conf,查找rewrite_module, 找到这行:#LoadModu ...
- hdu-6333-莫队
Problem B. Harvest of Apples Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K ...
- SQL Server跨服务器建立视图
create view View_AppCus as select dwmch,zjm from ksoa.dbo.mchk SQL Server跨服务器操作经常需要用到,下面就为你介绍的是SQL S ...
- tar打包时的排除选项
1. 在命令行排除文件时,用 --exclude, 可以用多个--exclude . 可以用=号,也可以不用 如 tar -cvf ./aaa.tar ./tvc --exclude ...
- Windows和Linux创建软链接和硬链接
1.Wondows创建软链接和硬链接 mklink [/d] [/h] link target /d--创建目录软链接:默认为文件软链接:创建目录链接时必须使用该选项不然创出的软链接无效 /h--创建 ...