STM32F750 uClinux系统coremark跑分

2019-12-11 18:36发布

本帖最后由 htjgdw 于 2019-4-19 14:27 编辑

ST在发布每一款STM32时都会标出它的CoreMark跑分,这是一个测试单核CPU性能的跑分程序,有源码,支持多种平台(在Windows,Linux下都可以编译执行)。
在跑操作系统的情况下STM32F750的CoreMark得分会是多少呢?出于好奇本人试着交叉编译出了可以在uClinux系统下执行的coremark程序。
具体的操作如下:
1. 在Linux宿主机(或虚拟机)上下载CoreMark源码,https://github.com/eembc/coremark
2. 解压并进入coremark目录:cd coremark-master/
3. 修改coremark/linux/core_porme.mak文件
        #    Use this flag to define compiler to use
        #CC = gcc
        CC = arm-uclinuxeabi-gcc


        #CFLAGS = $(PORT_CFLAGS) -I$(PORT_DIR) -I. -DFLAGS_STR="$(FLAGS_STR)"
        CFLAGS = $(PORT_CFLAGS) -I$(PORT_DIR) -I. -DFLAGS_STR="$(FLAGS_STR)" -mcpu=cortex-m3 -mthumb -static
4. 编译 make PORT_DIR=linux, 成功后会在coremark目录生成一个名为coremark.exe的可执行文件(exe扩展名是脚本里写死的,不必在意,自己重命名一下就可以)
5. 把上一步生成的可执行文件拷贝到STM32F750板子上(拷贝的方法随意,nfs,tftp,scp,U盘,sd卡,甚至串口传送都可以)
6. 添加可执行属性并执行, 然后静待十几秒钟就可以看到测试结果了

  1. /tmp # chmod +x coremark
  2. /tmp # ./coremark
  3. 2K performance run parameters for coremark.
  4. CoreMark Size    : 666
  5. Total ticks      : 17049
  6. Total time (secs): 17.049000
  7. Iterations/Sec   : 645.199132
  8. Iterations       : 11000
  9. Compiler version : GCC4.4.1
  10. Compiler flags   : -O2 -DPERFORMANCE_RUN=1  -lrt
  11. Memory location  : Please put data memory location here
  12.                         (e.g. code in flash, data on heap etc)
  13. seedcrc          : 0xe9f5
  14. [0]crclist       : 0xe714
  15. [0]crcmatrix     : 0x1fd7
  16. [0]crcstate      : 0x8e3a
  17. [0]crcfinal      : 0x33ff
  18. Correct operation validated. See README.md for run and reporting rules.
  19. CoreMark 1.0 : 645.199132 / GCC4.4.1 -O2 -DPERFORMANCE_RUN=1  -lrt / Heap
复制代码

最后可以看到coremark实测得分为645,这和ST官方的1082 coremark还是有很大不同的(裸奔,只跑coremark)。
考虑到uClinux是一个多任务的操作系统,这个得分还是比较合理,而且有实际意义的。随着编译器的更新和优化这个成绩还有提升的空间
下面是STM32F750 uClinux跑分时后台运行的任务:
  1. /tmp # ps
  2.   PID USER       VSZ STAT COMMAND
  3.     1 root       420 S    init
  4.     2 root         0 SW   [kthreadd]
  5.     3 root         0 SW   [ksoftirqd/0]
  6.     4 root         0 SW   [kworker/0:0]
  7.     5 root         0 SW<  [kworker/0:0H]
  8.     6 root         0 SW   [kworker/u2:0]
  9.     7 root         0 SW<  [khelper]
  10.     8 root         0 SW   [kdevtmpfs]
  11.     9 root         0 SW<  [writeback]
  12.    10 root         0 SW<  [crypto]
  13.    11 root         0 SW<  [bioset]
  14.    12 root         0 SW<  [kblockd]
  15.    13 root         0 SW<  [cfg80211]
  16.    14 root         0 RW   [kworker/0:1]
  17.    15 root         0 SW<  [rpciod]
  18.    16 root         0 SW   [kswapd0]
  19.    17 root         0 SW   [fsnotify_mark]
  20.    18 root         0 SW<  [nfsiod]
  21.    40 root         0 SW   [irq/60-stm32-qu]
  22.    41 root         0 SW   [spi4]
  23.    42 root         0 SW<  [dwc2]
  24.    43 root         0 SW   [irq/64-40012c00]
  25.    44 root         0 SW   [kworker/u2:1]
  26.    45 root         0 SW<  [krfcommd]
  27.    46 root         0 SW<  [deferwq]
  28.    71 root       316 S    /usr/sbin/dropbear
  29.    79 root         0 SWN  [jffs2_gcd_mtd3]
  30.    80 root       464 S    -/bin/hush
  31.    96 root       428 R    ps
  32. /tmp #
复制代码


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。