AIR32F103(四) 27倍频216MHz,CoreMark跑分测试
目录
- AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告
- AIR32F103(二) Linux环境和LibOpenCM3项目模板
- AIR32F103(三) Linux环境基于标准外设库的项目模板
- AIR32F103(四) 27倍频216MHz,CoreMark跑分测试
27倍频运行216MHz主频
合宙开发团队10月11日的提交中开源了AIR32F103的PLL倍频调节的代码, 使得在 Linux 下通过 GCC Arm 工具链也能编译运行216MHz.
代码示例
示例代码位于 Examples/NonFreeRTOS/RCC 下: https://gitee.com/iosetting/air32f103-template/tree/master/Examples/NonFreeRTOS/RCC
编译时遇到的问题
编译器对AIR_RCC_PLLConfig()这个函数的优化会造成PLL设置失败.
这个函数的源代码如下, 可以看到其中会对特定地址(例如 0x40016C00)进行连续的写操作, 编译时如果优化参数不是-O0, 就大概率会将这些写操作合并或调换位置.
uint32_t AIR_RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul, uint8_t Latency)
{
uint32_t sramsize = 0;
uint32_t pllmul = 0;
FunctionalState pwr_gating_state = 0;
/* Check the parameters */
assert_param(IS_RCC_PLL_SOURCE(RCC_PLLSource));
assert_param(IS_RCC_PLL_MUL(RCC_PLLMul));
*(uint32_t *)(0x400210F0) = BIT(0);//开启sys_cfg门控
*(uint32_t *)(0x40016C00) = 0xa7d93a86;//解一、二、三级锁
*(uint32_t *)(0x40016C00) = 0xab12dfcd;
*(uint32_t *)(0x40016C00) = 0xcded3526;
sramsize = *(uint32_t *)(0x40016C18);
*(uint32_t *)(0x40016C18) = 0x200183FF;//配置sram大小, 将BOOT使用对sram打开
*(uint32_t *)(0x4002228C) = 0xa5a5a5a5;//QSPI解锁
SysFreq_Set(RCC_PLLMul,Latency ,0,1);
RCC->CFGR = (RCC->CFGR & ~0x00030000) | RCC_PLLSource;
//恢复配置前状态
*(uint32_t *)(0x40016C18) = sramsize;
*(uint32_t *)(0x400210F0) = 0;//开启sys_cfg门控
*(uint32_t *)(0x40016C00) = ~0xa7d93a86;//加一、二、三级锁
*(uint32_t *)(0x40016C00) = ~0xab12dfcd;
*(uint32_t *)(0x40016C00) = ~0xcded3526;
*(uint32_t *)(0x4002228C) = ~0xa5a5a5a5;//QSPI解锁
return 1;
}
解决的方法
- 在Keil5下, 可以对 air32f10x_rcc_ex.c 这个文件右键单独设置 AC6 编译选项. AC5可以使用 注解, AC6不再支持文件内部单个函数的优化设置
- 在GCC Arm中, 可以通过 Makefile 对 air32f10x_rcc_ex.c 设置单独的-O0参数, 也可以在代码中增加屏障避免优化(例如在两行代码之间增加
__NOP();), 还可以通过int foo(int i) __attribute__((optimize("-O3")));这样的形式, 参考GNU GCC文档
这里采用最后一种, 将库函数修改为
__attribute__((optimize("-O0"))) uint32_t AIR_RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul, uint8_t Latency)
CoreMark跑分结果
示例中的 CoreMark_256MHz 项目, 可以将AIR32F103运行在最高256MHz主频下, 运行CoreMark性能测试. 以下是分别在 256MHz, 216MHz, 72MHz 不同编译器版本下的测试结果.
32倍频, 256MHz
编译器 GCC11.2.1
SYSCLK: 256000000, HCLK: 256000000, PCLK1: 128000000, PCLK2: 256000000, ADCCLK: 128000000␊
2K performance run parameters for coremark.␊
CoreMark Size : 666␊
Total ticks : 17054␊
Total time (secs): 17.054000␊
Iterations/Sec : 586.372698␊
Iterations : 10000␊
Compiler version : GCC11.2.1 20220111␊
Compiler flags : -O3␊
Memory location : STACK␊
seedcrc : 0xe9f5␊
[0]crclist : 0xe714␊
[0]crcmatrix : 0x1fd7␊
[0]crcstate : 0x8e3a␊
[0]crcfinal : 0x988c␊
Correct operation validated. See readme.txt for run and reporting rules.␊
CoreMark 1.0 : 586.372698 / GCC11.2.1 20220111 -O3 / STACK␊
IR32F103 CoreMark␊
编译器 GCC11.3.1, 256MHz
SYSCLK: 256000000, HCLK: 256000000, PCLK1: 128000000, PCLK2: 256000000, ADCCLK: 128000000␊
2K performance run parameters for coremark.␊
CoreMark Size : 666␊
Total ticks : 17054␊
Total time (secs): 17.054000␊
Iterations/Sec : 586.372698␊
Iterations : 10000␊
Compiler version : GCC11.3.1 20220712␊
Compiler flags : -O3␊
Memory location : STACK␊
seedcrc : 0xe9f5␊
[0]crclist : 0xe714␊
[0]crcmatrix : 0x1fd7␊
[0]crcstate : 0x8e3a␊
[0]crcfinal : 0x988c␊
Correct operation validated. See readme.txt for run and reporting rules.␊
CoreMark 1.0 : 586.372698 / GCC11.3.1 20220712 -O3 / STACK␊
编译器 GCC12.2.0 256MHz
SYSCLK: 256000000, HCLK: 256000000, PCLK1: 128000000, PCLK2: 256000000, ADCCLK: 128000000␊
2K performance run parameters for coremark.␊
CoreMark Size : 666␊
Total ticks : 15822␊
Total time (secs): 15.822000␊
Iterations/Sec : 632.031349␊
Iterations : 10000␊
Compiler version : GCC12.2.0␊
Compiler flags : -O3␊
Memory location : STACK␊
seedcrc : 0xe9f5␊
[0]crclist : 0xe714␊
[0]crcmatrix : 0x1fd7␊
[0]crcstate : 0x8e3a␊
[0]crcfinal : 0x988c␊
Correct operation validated. See readme.txt for run and reporting rules.␊
CoreMark 1.0 : 632.031349 / GCC12.2.0 -O3 / STACK␊
27倍频, 216MHz
GCC11.2.1 216MHz
SYSCLK: 216000000, HCLK: 216000000, PCLK1: 108000000, PCLK2: 216000000, ADCCLK: 108000000␊
2K performance run parameters for coremark.␊
CoreMark Size : 666␊
Total ticks : 20213␊
Total time (secs): 20.213000␊
Iterations/Sec : 494.731114␊
Iterations : 10000␊
Compiler version : GCC11.2.1 20220111␊
Compiler flags : -O3␊
Memory location : STACK␊
seedcrc : 0xe9f5␊
[0]crclist : 0xe714␊
[0]crcmatrix : 0x1fd7␊
[0]crcstate : 0x8e3a␊
[0]crcfinal : 0x988c␊
Correct operation validated. See readme.txt for run and reporting rules.␊
CoreMark 1.0 : 494.731114 / GCC11.2.1 20220111 -O3 / STACK␊
GCC11.3.1 216MHz
SYSCLK: 216000000, HCLK: 216000000, PCLK1: 108000000, PCLK2: 216000000, ADCCLK: 108000000␊
2K performance run parameters for coremark.␊
CoreMark Size : 666␊
Total ticks : 20213␊
Total time (secs): 20.213000␊
Iterations/Sec : 494.731114␊
Iterations : 10000␊
Compiler version : GCC11.3.1 20220712␊
Compiler flags : -O3␊
Memory location : STACK␊
seedcrc : 0xe9f5␊
[0]crclist : 0xe714␊
[0]crcmatrix : 0x1fd7␊
[0]crcstate : 0x8e3a␊
[0]crcfinal : 0x988c␊
Correct operation validated. See readme.txt for run and reporting rules.␊
CoreMark 1.0 : 494.731114 / GCC11.3.1 20220712 -O3 / STACK␊
GCC12.2.0 216MHz
SYSCLK: 216000000, HCLK: 216000000, PCLK1: 108000000, PCLK2: 216000000, ADCCLK: 108000000␊
2K performance run parameters for coremark.␊
CoreMark Size : 666␊
Total ticks : 18753␊
Total time (secs): 18.753000␊
Iterations/Sec : 533.248014␊
Iterations : 10000␊
Compiler version : GCC12.2.0␊
Compiler flags : -O3␊
Memory location : STACK␊
seedcrc : 0xe9f5␊
[0]crclist : 0xe714␊
[0]crcmatrix : 0x1fd7␊
[0]crcstate : 0x8e3a␊
[0]crcfinal : 0x988c␊
Correct operation validated. See readme.txt for run and reporting rules.␊
CoreMark 1.0 : 533.248014 / GCC12.2.0 -O3 / STACK␊
编译器 AC6 (GCCClang 15.0.0) 216MHz
SYSCLK: 216.0Mhz, HCLK: 216.0Mhz, PCLK1: 108.0Mhz, PCLK2: 216.0Mhz, ADCCLK: 108.0Mhz
2K performance run parameters for coremark.
CoreMark Size : 666
Total ticks : 16328
Total time (secs): 16.328000
Iterations/Sec : 612.444880
Iterations : 10000
Compiler version : GCCClang 15.0.0
Compiler flags : -O3
Memory location : STACK
seedcrc : 0xe9f5
[0]crclist : 0xe714
[0]crcmatrix : 0x1fd7
[0]crcstate : 0x8e3a
[0]crcfinal : 0x988c
Correct operation validated. See readme.txt for run and reporting rules.
CoreMark 1.0 : 612.444880 / GCCClang 15.0.0 -O3 / STACK
9倍频, 72MHz
编译器 GCC11.2.1 72MHz
SYSCLK: 72000000, HCLK: 72000000, PCLK1: 36000000, PCLK2: 72000000, ADCCLK: 36000000␊
2K performance run parameters for coremark.␊
CoreMark Size : 666␊
Total ticks : 60677␊
Total time (secs): 60.677000␊
Iterations/Sec : 164.807093␊
Iterations : 10000␊
Compiler version : GCC11.2.1 20220111␊
Compiler flags : -O3␊
Memory location : STACK␊
seedcrc : 0xe9f5␊
[0]crclist : 0xe714␊
[0]crcmatrix : 0x1fd7␊
[0]crcstate : 0x8e3a␊
[0]crcfinal : 0x988c␊
Correct operation validated. See readme.txt for run and reporting rules.␊
CoreMark 1.0 : 164.807093 / GCC11.2.1 20220111 -O3 / STACK␊
编译器 GCC11.3.1 72MHz
SYSCLK: 72000000, HCLK: 72000000, PCLK1: 36000000, PCLK2: 72000000, ADCCLK: 36000000␊
2K performance run parameters for coremark.␊
CoreMark Size : 666␊
Total ticks : 60677␊
Total time (secs): 60.677000␊
Iterations/Sec : 164.807093␊
Iterations : 10000␊
Compiler version : GCC11.3.1 20220712␊
Compiler flags : -O3␊
Memory location : STACK␊
seedcrc : 0xe9f5␊
[0]crclist : 0xe714␊
[0]crcmatrix : 0x1fd7␊
[0]crcstate : 0x8e3a␊
[0]crcfinal : 0x988c␊
Correct operation validated. See readme.txt for run and reporting rules.␊
CoreMark 1.0 : 164.807093 / GCC11.3.1 20220712 -O3 / STACK␊
编译器 GCC12.2.0 72MHz
SYSCLK: 72000000, HCLK: 72000000, PCLK1: 36000000, PCLK2: 72000000, ADCCLK: 36000000␊
2K performance run parameters for coremark.␊
CoreMark Size : 666␊
Total ticks : 56293␊
Total time (secs): 56.293000␊
Iterations/Sec : 177.641980␊
Iterations : 10000␊
Compiler version : GCC12.2.0␊
Compiler flags : -O3␊
Memory location : STACK␊
seedcrc : 0xe9f5␊
[0]crclist : 0xe714␊
[0]crcmatrix : 0x1fd7␊
[0]crcstate : 0x8e3a␊
[0]crcfinal : 0x988c␊
Correct operation validated. See readme.txt for run and reporting rules.␊
CoreMark 1.0 : 177.641980 / GCC12.2.0 -O3 / STACK␊
AIR32F103(四) 27倍频216MHz,CoreMark跑分测试的更多相关文章
- LINUX系统下跑分测试脚本:unixbench.sh
linux 系统跑分测试脚本: 一.下载脚本: wget http://teddysun.com/wp-content/uploads/unixbench.sh 二.更改权限: ...
- Mysql 如何实现全文检索,关键词跑分
一.前言 今天一个同事问我,如何使用 Mysql 实现类似于 ElasticSearch 的全文检索功能,并且对检索关键词跑分?我当时脑子里立马产生了疑问?为啥不直接用es呢?简单好用还贼快.但是听他 ...
- unixbench性能测试跑分工具
UnixBench是一个类unix系(Unix,BSD,Linux)统下的性能测试工具,一个开源工具,被广泛用与测试linux系统主机的性能 所谓跑分工具,不仅各项的测试有得分,最后跑完也会有一个综合 ...
- 【原创】CLEVO P157SM外接鼠标键盘失灵解决:更换硅脂(附带最新跑分数据)
作者批注:本文允许转载,并且希望给搜索未来人类.蓝天.CLEVO.更换硅脂或者任何有关关键字的朋友提供帮助. 原文地址:http://www.cnblogs.com/c4isr/p/3514140.h ...
- 魅蓝Note2跑分 MT6753性能究竟如何
MT6753实力究竟如何? 采用LP工艺的MT6753实际上在性能和功耗方面并不比MT6752高,相反,同频下功耗要高1/3左右.并且其内存带宽是5.3G/s,小于MT 6752的6.4G/s 而且没 ...
- VPS性能综合测试(6):UnixBench跑分工具测试
测试时间可能会比较长,请耐心等待.最后UnixBench会详细列出各个测试项目的得分情况,以及VPS性能的综合跑分结果 UinxBench 的使用 使用方法如下: Run [ -q | -v ] [- ...
- Azure 进阶攻略 | 电脑跑分你会,但虚拟机存储性能跑分的正确姿势你造吗?
想学生时代,小编最爱做的就是研究电脑硬件,然后给自己.朋友和童鞋装机.装好后呢?当然要第一时间跑分了!各种跑分软件运行一遍,不断优化,不断测试.终于得到一个满意成绩,截图分享到网上显摆一下.当年为啥就 ...
- [转帖]疑似兆芯开先KX-7000跑分曝光:IPC性能大幅提升
疑似兆芯开先KX-7000跑分曝光:IPC性能大幅提升 https://www.bilibili.com/read/cv4028300 数码 11-23 1589阅读28点赞22评论 尽管有ARM架构 ...
- AMD全新32核线程撕裂者GeekBench跑分曝光:超2950X近一倍
AMD全新32核线程撕裂者GeekBench跑分曝光:超2950X近一倍 2019年09月01日 09:36 1109 次阅读 稿源:快科技 1 条评论 https://www.cnbeta.com/ ...
随机推荐
- 乘风破浪,遇见最佳跨平台跨终端框架.Net Core/.Net生态 - 官方扩展集锦(Microsoft.Extensions on Nuget)
什么是Microsoft.Extensions .NET Platform Extensions是一套.Net官方的API集合,提供了一些常用的编程模式和实用工具,例如依赖项注入.日志记录.缓存.Ho ...
- 对Jmeter-基础线程组的一点解释
概述 线程组是一个测试计划的起点.测试计划中所有元件的运行都必须依托于线程组.每个线程组都会独立的运行测试计划,互不干扰 线程数 线程数在并发用户场景下表示用户数,比如100用户同时发起请求 线程数在 ...
- JZM 的套题(暴力,DP)
J Z M \rm JZM JZM 即将奔赴 N O I \rm NOI NOI 考场,为了让同学们赶上自己的千分之一水平,刻意出了两道水题给同学们练练. 1.曾经的代码 J Z M \rm JZM ...
- axios的content-type是自动设置的
一. axios参数的传递方式 首先我们要知道 参数传递一般有两种,一种是 使用 params, 另一种是 data的方式,有很多的时候我们看到的前端代码是这样的. 1. get请求: ...
- ZJU-199001 第三周练习 2 数字特征值 位运算算法
题目 对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值. 对于一个整数, 从个位开始对每一位数字编号, 个位是 \(1\) 号, 十位是 \(2\) 号, 以此类推. 这个整数在第位上的数字 ...
- django_day05
django_day05 内容回顾 内容回顾 对应关系 类-------表 对象-----数据行 属性------字段 django使用mysql数据库流程 创建一个mysql数据库 在setting ...
- Golang 动态脚本调研
一.技术背景 1.1 程序的动态链接技术 在实际开发过程中,我们经常需要动态地更新程序的功能,或者在不变更程序主体文件的情况下添加或者更新程序模块. 1.1.1 动态链接库 首先最常见的是window ...
- npm 和 maven 使用 Nexus3 私服 | 前后端一起学
前文<Docker 搭建 Nexus3 私服 >介绍了在 docker 环境下安装 nexus3 以及 nexus3 的基本操作和管理,本文分别介绍 npm(前端)和 maven(后端)如 ...
- Python实现XMind测试用例快速转Excel用例
转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/c2d10f21.html 你好,我是测试蔡坨坨. 今天分享一个Python编写的小工具,实现XMind测试用例转Excel用 ...
- KingbaseES R6 集群主库网卡down测试案例
数据库版本: test=# select version(); version ------------------------------------------------------------ ...