返回列表 发新帖我要提问本帖赏金: 50.00元(功能说明)

[活动] 【APM32F411V Tiny Board测评】从sram和flash运行coremark不同性能数据

[复制链接]
 楼主| xhackerustc 发表于 2024-5-17 08:27 | 显示全部楼层 |阅读模式
移植了一下coremark,坛子里coremark移植比较多,移植步骤就简单说一说,重点在后面从sram运行coremark的性能数据比从flash执行的要差,是一件比较奇怪的事情。

先说说简单coremark移植,先clone代码
  1. git clone https://github.com/eembc/coremark

以Examples/GPIO/GPIO_Toggle/为模板创建coremark工程
  1. cp -a Examples/GPIO/GPIO_Toggle/ Examples/coremark

把第一步clone得到的coremark仓库里这几个文件拷贝到coremark工程目录
core_list_join.c  core_matrix.c  core_util.c       core_main.c      core_state.c      coremark.h

simple/core_portme.c                  simple/core_portme.h

修改Examples/coremark/Source/main.c如下
  1. extern volatile unsigned int ticks;
  2. int main(void)
  3. {
  4.     USART1_Init(115200);
  5.     /* Init delay function */
  6.     Delay_Init();
  7.     SysTick_Config(SystemCoreClock / 1000);

  8.     core_main(1, NULL);

  9.     for(;;) __WFI();
  10. }

修改Examples/coremark/Source/core_main.c的main函数名为core_main

修改Examples/coremark/Source/core_portme.c
增加如下两行:
  1. #define ITERATIONS      6000
  2. extern volatile uint32_t ticks;
时间相关的改成:
  1. #define NSECS_PER_SEC              1000
  2. #define CORETIMETYPE               clock_t
  3. #define GETMYTIME(_t)              (*_t = ticks)


修改Examples/coremark/Source/core_portme.h,加入
  1. #define COMPILER_FLAGS "-O3"


修改Makefile
  1. diff --git a/Makefile b/Makefile
  2. index abd688c..78559d0 100644
  3. --- a/Makefile
  4. +++ b/Makefile
  5. @@ -9,7 +9,7 @@ TARGET = apm32f411
  6. # debug build?
  7. DEBUG = 0
  8. # optimization for size, enable lto
  9. -OPT = -Os -flto
  10. +OPT = -O3 -flto


  11. #######################################
  12. @@ -24,7 +24,7 @@ BUILD_DIR = build
  13. # C sources
  14. C_SOURCES = $(wildcard Libraries/APM32F4xx_StdPeriphDriver/src/*.c)
  15. C_SOURCES += $(wildcard Boards/Board_APM32F411_TINY/src/*.c)
  16. -C_SOURCES += $(wildcard Examples/GPIO/GPIO_Toggle/Source/*.c)
  17. +C_SOURCES += $(wildcard Examples/coremark/Source/*.c)

  18. # ASM sources
  19. ASM_SOURCES = Libraries/Device/Geehy/APM32F4xx/Source/gcc/startup_apm32f411.S
  20. @@ -38,7 +38,7 @@ C_INCLUDES += -ILibraries/Device/Geehy/APM32F4xx/Include
  21. C_INCLUDES += -ILibraries/CMSIS/Include/
  22. C_INCLUDES += -IBoards/
  23. C_INCLUDES += -IBoards/Board_APM32F411_TINY/inc/
  24. -C_INCLUDES += -IExamples/GPIO/GPIO_Toggle/Include
  25. +C_INCLUDES += -IExamples/coremark/Include

  26. C_DEFS := -DAPM32F411 -DAPM32F411_TINY

  27. @@ -84,12 +84,12 @@ CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"
  28. # libraries
  29. LIBS = -lc -lm -lnosys
  30. LIBDIR =
  31. -LDFLAGS = $(MCU) -fsigned-char -ffunction-sections -fdata-sections -Wunused -Wuninitialized -T $(LDSCRIPT) -Wl,--gc-sections,--print-memory-usage,-Map=$(BUILD_DIR)/$(TARGET).map --specs=nano.specs $(LIBS) -flto -fuse-linker-plugin
  32. +LDFLAGS = $(MCU) -fsigned-char -ffunction-sections -fdata-sections -Wunused -Wuninitialized -T $(LDSCRIPT) -Wl,--gc-sections,--print-memory-usage,-Map=$(BUILD_DIR)/$(TARGET).map --specs=nano.specs -u_printf_float $(LIBS) -flto -fuse-linker-plugin




编译&烧录&运行
  1. make
  2. pyocd load -e sector -t apm32f411ve build/apm32f411.bin


这一步编译出来的是从flash启动运行的,运行结果如下图
1.jpg


利用帖子https://bbs.21ic.com/icview-3375412-1-1.html 里的方法改成从完全sram运行,结果如下:
2.jpg

由此可以看出完全从sram运行的性能只有flash启动运行75%左右,和理论期望不符合,百思不得其解,难度APM32F411硬件上有flash加速比如flash预取?软件透明的cache?大家有没有什么评论?

打赏榜单

Gfan 打赏了 50.00 元 2024-07-17
理由:APM32F411V Tiny测评活动优质测评帖

szt1993 发表于 2024-5-23 17:28 | 显示全部楼层
是不是跟读取的方式有关系导致的
 楼主| xhackerustc 发表于 2024-5-23 22:18 | 显示全部楼层
这个问题已经找到答案了:最近在玩stm32u0系列mcu,发现stm32有的有所谓art加速,翻了翻apm32f411的手册在框图里也看到ART了,就是ART的缘故导致flash反而比sram分数高
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

165

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部