玩转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硬件随 ...
随机推荐
- Lab 5-1
Analyze the malware found in the file Lab05-01.dll using only IDA Pro. The goal of this lab is to gi ...
- android -------- 混淆打包报错(warning - InnerClass annotations are missing corresponding EnclosingMember annotations)
最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations ...
- python记录_day07
一.基本数据类型补充 1.列表的拼接用join()方法 li = ["hello","world"] s = "_".join(li) pr ...
- GPLT L2-014 列车调度
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805063166312448 分析:明显从右到左列车的序号需要依 ...
- Mac OS下安装和配置MongoDB
安装和配置教程: 参考地址:https://blog.csdn.net/yibowanbo/article/details/80233030 可视化管理工具: 地址:https://blog.csdn ...
- C++笔试题总结
1.C和C++的特点与区别? 答:(1)C语言特点:1.作为一种面向过程的结构化语言,易于调试和维护: 2.表现能力和处理能力极强,可以直接访问内存的物理地址: 3.C语言实现了对硬件的编程操作,也适 ...
- Windows下Python3.6安装第三方模块
一 安装pip 一般需要用pip进行安装,不过我安装p3.6的时候pip已经有了. 如果没有的话,可以用在以下http://www.lfd.uci.edu/~gohlke/pythonlibs/#pi ...
- 2017-6-6&6-8/大型网站架构总结
一.WikiPedia(维基百科) WikiPedia是非盈利网站,因此尽可能地使用免费的软件和廉价的服务器.截止到2012年,这个只有区区数百台服务器和十余个技术人员开发.维护的网站,成为流量全球排 ...
- IO多路复用和协程
1.IO多路复用 作用:检测多个socket是否已经发生变化(是否连接成功/是否已经获取数据) 什么是进程.线程.协程以及它们的区别? 进程是资源分配的最小单元,其作用是进行数据隔离, 线程是cpu调 ...
- [NOIP 2015TG D2T3] 运输计划
题目背景 公元 2044 年,人类进入了宇宙纪元. 题目描述 L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 n-1 条航道连通了 L 国的所有星球. 小 P 掌管一家 ...