【性能测评】DSP库,MDK5的AC5,AC6,IAR和Embedded Studio的三角函数性能

2023-12-17 02:32

本文主要是介绍【性能测评】DSP库,MDK5的AC5,AC6,IAR和Embedded Studio的三角函数性能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

测试条件:
1、IAR8.30开最高等级速度优化。
2、MDK5.27正式版使用AC5开最高等级优化3,开启时间优化,测试C标准库和微库MicroLib两种。
3、MDK5.27正式版使用AC6开最高等级的速度优化,测试C标准库和微库MicroLib两种。
4、Embedded Studio4.30版使用GCC开最高等级优化,开C库使用Fast模式。
5、Embedded Studio4.30版使用CLANG开最高等级优化,开C库使用Fast模式。
6、DSP库使用最新的CMSIS软件包里面的V5.6.0。
7、测试单位使用DWT时钟周期计数器。
8、DSP库使用函数arm_sin_f32测试,IAR,MDK和ES都使用各自带的C库测试。执行10次,求平均。
注意,IAR,MDK和ES都有各自的C库实现方案。

提供一个STM32H7的例程供大家测评:
MDKIARES-USART.rar 


1、MDK5 AC5 MicroLib
(1)DSP库函数第一次执行73个时钟周期,之后重复执行都是55个时钟周期左右。
(2)微库的sin函数259,之后重复执行是197个时钟周期左右。

2、MDK5 AC5 C Lib
(1)DSP库函数第一次执行71个时钟周期,之后重复执行都是55个时钟周期左右。
(2)C库的sin函数264,之后重复执行是200个时钟周期左右。

3、MDK5 AC6 MicroLib
(1)DSP库函数第一次执行81个时钟周期,之后重复执行都是58个时钟周期左右。
(2)C库的sin函数,使用DWT时钟周期计数器无法正常测量。

4、MDK5 AC6 C Lib
(1)DSP库函数第一次执行74个时钟周期,之后重复执行都是58个时钟周期左右。
(2)C库的sin函数,使用DWT时钟周期计数器无法正常测量。

5、IAR
(1)DSP库函数第一次执行83个时钟周期,之后重复执行都是58个时钟周期左右。
(2)C库的sin函数217,之后重复执行是194个时钟周期左右。

6、Embedded Studio GCC
(1)DSP库函数第一次执行79个时钟周期,之后重复执行都是49个时钟周期左右。
(2)C库的sin函数140,之后重复执行是129个时钟周期左右。

7、Embedded Studio CLANG
(1)DSP库函数第一次执行80个时钟周期,之后重复执行都是59个时钟周期左右。
(2)C库的sin函数141,之后重复执行是129个时钟周期左右。


MDK5的AC5开启的优化等级:


MDK5的AC6开启的优化等级:


MDK使用微库和C库通过这个对勾切换:


IAR开启的优化等级


Embedded Studio优化等级和C库选Fast模式




总结:
1、DSP库的三角函数计算在MDK,IAR和ES上的性能都差不多。
2、使用MDK的AC6时,使用DWT是周期计数器无法正常测量C库做三角函数运算的执行时间,时间非常短,感觉异常了,所以暂不加入比较。
3、MDK AC5和IAR的C库三角函数性能差不多,而ES的三角函数性能比较强劲,比MDK和IAR的强很多。
4、当前仅测试一个sin函数,后面有精力做一个全面的三角函数比较。

这篇关于【性能测评】DSP库,MDK5的AC5,AC6,IAR和Embedded Studio的三角函数性能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/502784

相关文章

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

Golang中拼接字符串的6种方式性能对比

《Golang中拼接字符串的6种方式性能对比》golang的string类型是不可修改的,对于拼接字符串来说,本质上还是创建一个新的对象将数据放进去,主要有6种拼接方式,下面小编就来为大家详细讲讲吧... 目录拼接方式介绍性能对比测试代码测试结果源码分析golang的string类型是不可修改的,对于拼接字

mysql线上查询之前要性能调优的技巧及示例

《mysql线上查询之前要性能调优的技巧及示例》文章介绍了查询优化的几种方法,包括使用索引、避免不必要的列和行、有效的JOIN策略、子查询和派生表的优化、查询提示和优化器提示等,这些方法可以帮助提高数... 目录避免不必要的列和行使用有效的JOIN策略使用子查询和派生表时要小心使用查询提示和优化器提示其他常

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

最便宜的8口2.5G网管交换机! 水星SE109 Pro拆机测评

《最便宜的8口2.5G网管交换机!水星SE109Pro拆机测评》水星SE109Pro价格很便宜,水星SE109Pro,外观、接口,和SE109一样,区别Pro是网管型的,下面我们就来看看详细拆... 听说水星SE109 Pro开卖了,PDD卖 220元,于是买回来javascript拆机看看。推荐阅读:水