打印
[AT32L021]

【AT-START-L021测评】3--Coremark

[复制链接]
2036|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 [鑫森淼焱垚] 于 2024-12-27 10:07 编辑

书接上文,有了 perf_counter 加持,无需再次移植 Coremark,因为 perf_counter 已经集成了 Coremark。我们仅需修改一些配置文件和代码即可运行 Coremark。

1 修改点

1.1 修改代码
main() 函数修改如下,在调用 init_cycle_counter() 初始化 perf_counter 之后,再使用 __cycleof__() 统计 LED2 翻转速度,最后调用 coremark_main() 开始运行Coremark。

int main(void)
{
        system_clock_config();

        at32_board_init();

        init_cycle_counter(false);

        button_exint_init();

        uart_print_init(115200);
        printf("at32 mcu initialize ok.\r\n");

        for (int i = 5; i > 0; i--) {
                __cycleof__("LED2 toggle")
                {
                        at32_led_toggle(LED2);
                }
        }

#ifdef __PERF_COUNTER_COREMARK__
        coremark_main();
#endif

while (1);
}


1.2 修改工程属性增加两个宏定义


按照如下操作,给工程增加两个宏定义


  • __PERF_COUNTER_COREMARK__ 只有定义了这个宏, perf_counter 组件才会使能 Coremark
  • MEM_METHOD=MEM_STATIC 设置 Coremark 运行过程中的数据分配形式,这里使用静态数组,编译时就能确定数组地址




2 Coremark 跑分
代码中修改 Coremark 编译器优化等级的字符串位置如下:



AT32IDE 修改优化等级,按如下步骤操作:


2.1 优化等级 Optimize for Debug -Og


Debug 版本配置编译(其他都是 Release 版本配置)


2.2 优化等级 None -O0


2.3 优化等级 Optimize -O1


2.4 优化等级 Optimize more -O2


2.5 优化等级 Optimize most -O3


2.6 优化等级 Optimize size -Os


2.7 优化等级 Optimize fast -Ofast


2.8 统计对比


这些测试都是在供电电压 1.8V 、处理器时钟 80MHz 时测试的,又追加了一轮供电电压 3.3V,测试结果无差异。


优化等级
LED2 Toggle 周期
Coremark 分数
-Og (Debug)
144.2
0.468221
-O0 (None)
138.4
0.468212
-O1 ()
53.6
1.605016
-O2 (more)
46.8
1.846440
-O3 (most)
69
1.811975
-Os (size)
62
1.132000
-Ofast (fast)
47.0
1.811990

从上面的数据可以看出 -Og Debug 模式速度最慢,而其他优化等级速度大约是它的4倍左右,差异还是很明显的。


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

105

帖子

0

粉丝