[鑫森淼焱垚] 发表于 2024-12-26 19:12

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

本帖最后由 [鑫森淼焱垚] 于 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倍左右,差异还是很明显的。


TimeRiddle 发表于 2025-3-25 11:27

关键点清晰,测试结果详细。
页: [1]
查看完整版本: 【AT-START-L021测评】3--Coremark