CPU性能测试——CoreMark篇

在这里插入图片描述


本文将介绍使用CoreMark测试程序对我们小组自研芯片进行性能的测试,记录了CoreMarK工具的使用以及对其测试结果进行分析
测试环境:
PC OS: Ubuntu20.04 LTS
CPU: 自研CPU(ARCH=riscv64,ISA=rv64imafdc)
Kernel: CPU使用的内核为Linux4.15
CoreMark: CoreMark v1.01
GNU: riscv64-unknown-linux-gnu

1、CoreMark简介

  CoreMark是由EEMBC(Embedded Microprocessor Benchmark Consortium)的Shay Gla-On于2009年提出的一项基准测试程序,CoreMark的主要目标是简化操作,并提供一套测试单核处理器核心的方法。测试标准是在配置参数的组合下单位时间内运行的CoreMark程序次数(单位:CoreMark/MHz),该数字值越大则说明测试的性能越好。
  目前在嵌入式CPU行业中普遍公认的性能测试指标的标准主要使用以下三种,MIPS、Dhrystone、Coremark,而CoreMark与Dhrystone一样,拥有体积小、方便移植、易于理解、免费并且显示单个数字基准分数。与Dhrystone不同的是,Dhrystone的主要部分实际上暴露了编译器优化工作负载的能力,而不是实际MCU或CPU的能力,的性能,而CoreMark具有特定的运行和报告规则,从而可以避免由于所使用的编译库不同而导致的测试结果难以比较。

2、获取源码

  EEMBC在将CoreMark源码托管在GitHub上可以访问github.com/eembc/coremark直接点击下载获得源码;也可以通过git命令下载到本地。

imaginemiracle@:Download$ git clone https://github.com/eembc/coremark.git imaginemiracle@:Download$ cd coremark/ imaginemiracle@:coremark$ ls barebones core_main.c coremark.md5 core_state.c cygwin freebsd linux macos README.md simple core_list_join.c coremark.h core_matrix.c core_util.c docs LICENSE.md linux64 Makefile rtems

CoreMark项目的详细介绍,可以查阅当前目录下“coremark/docs/html/index.html”。该项目以下是当前目录的个文件介绍:

#在tree命令的输出中,作了部分删除(不影响分析整个CoreMark工程) imaginemiracle@:coremark$ tree . ├── barebones --移植到裸机环境下需要修改的目录 │ ├── core_portme.c --移植的目标平台配置信息 │ ├── core_portme.h --计时以及板级初始化实现 │ ├── core_portme.mak --该子目录的makefile │ ├── cvt.c │ └── ee_printf.c --打印函数串口发送实现 ├── core_list_join.c --列表操作程序 ├── core_main.c --主程序 ├── coremark.h --项目配置与数据结构的定义头文件 ├── coremark.md5 ├── core_matrix.c --矩阵运算程序 ├── core_state.c --状态机控制程序 ├── core_util.c --CRC计算程序 ├── cygwin --x86 cygwin和gcc 3.4(四核,双核和单核系统)的测试代码 │ ├── core_portme.c │ ├── core_portme.h │ └── core_portme.mak ├── freebsd --以下同理,是在不同操作系统下的测试代码 │ ├── ... ├── LICENSE.md ├── linux │ ├── ... ├── linux64 │ ├── ... ├── macos │ ├── ... ├── Makefile ├── README.md --自述文件,CoreMark项目的基本介绍 ├── rtems │ ├── ... └── simple ├── ... └── 3、移植到riscv64架构

[注]:若移植的平台是ARM Cortex-M系列的裸机系统,只需要修改“coremark/barebones”目录下的文件即可。
将当前目录下linux64目录拷贝一份为riscv64分支:

imaginemiracle@:coremark$ cp -rf linux64/ riscv64 imaginemiracle@:coremark$ vim riscv64/core_portme.mak

修改CC为riscv64-unknown-linux-gnu-gcc即可(默认已经配置好riscv64-linux-gnu工具链,有很多优秀的博客介绍了riscv chaintool的编译安装过程可以自行查阅参考):

#core_portme.mak文件 OUTFLAG= -o # Flag: CC # Use this flag to define compiler to use # ===========================Alter by me=========================== CC = riscv64-unknown-linux-gnu-gcc # ============================End Alter============================ # Flag: CFLAGS # Use this flag to define compiler options. Note, you can add compiler options from the command line using XCFLAGS="other flags" PORT_CFLAGS = -O2 FLAGS_STR = "$(PORT_CFLAGS) $(XCFLAGS) $(XLFLAGS) $(LFLAGS_END)" CFLAGS = $(PORT_CFLAGS) -I$(PORT_DIR) -I. -DFLAGS_STR=\"$(FLAGS_STR)\" #Flag: LFLAGS_END # Define any libraries needed for linking or other flags that should come at the end of the link line (e.g. linker scripts). # Note: On certain platforms, the default clock_gettime implementation is supported but requires linking of librt. LFLAGS_END += -lrt # Flag: PORT_SRCS # Port specific source files can be added here PORT_SRCS = $(PORT_DIR)/core_portme.c LOAD = echo Loading done RUN = OEXT = .o # ===========================Alter by me=========================== EXE = .rvexe # ============================End Alter============================ 4、编译生成coremark.rvexe

编译命令:

imaginemiracle@:coremark$ make PORT_DIR=riscv64

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgjpx.html