CPU性能测试工具coremark使用 您所在的位置:网站首页 coremark测试原理 CPU性能测试工具coremark使用

CPU性能测试工具coremark使用

2023-10-23 14:59| 来源: 网络整理| 查看: 265

CoreMark是由EEMBC(Embedded Microprocessor Benchmark Consortium)的Shay Gla-On于2009年提出的一项基准测试程序,CoreMark的主要目标是简化操作,并提供一套测试多核处理器核心的方法。测试标准是在配置参数的组合下单位时间内运行的CoreMark程序次数(单位:CoreMark/MHz),该数字值越大则说明测试的性能越好。 操作步骤如下: 一、获取源码

[root@ecs ~]# git clone https://github.com/eembc/coremark.git 或者直接下载zip格式皆可,本次测试用的是zip格式

二、解压查看目录结构

[root@ecs coremark-main]# tree . ├── barebones │ ├── core_portme.c │ ├── core_portme.h │ ├── core_portme.mak │ ├── 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 ├── cygwin #### --x86 cygwin和gcc的测试代码 │ └── core_portme.mak ├── docs │ ├── balance_O0_joined.png │ ├── coremark_profile_o0_joined.png │ ├── html │ │ ├── files │ │ │ ├── core_list_join-c.html │ │ │ ├── core_main-c.html │ │ │ ├── coremark-h.html │ │ │ ├── core_matrix-c.html │ │ │ ├── core_state-c.html │ │ │ ├── core_util-c.html │ │ │ ├── docs │ │ │ │ └── core_state.png │ │ │ ├── linux │ │ │ │ ├── core_portme-c.html │ │ │ │ ├── core_portme-h.html │ │ │ │ └── core_portme-mak.html │ │ │ ├── PIC32 │ │ │ │ └── core_portme-mak.html │ │ │ ├── readme-txt.html │ │ │ └── release_notes-txt.html │ │ ├── index │ │ │ ├── BuildTargets.html │ │ │ ├── Configuration.html │ │ │ ├── Configurations.html │ │ │ ├── Files.html │ │ │ ├── Functions.html │ │ │ ├── General2.html │ │ │ ├── General.html │ │ │ ├── Types.html │ │ │ └── Variables.html │ │ ├── index.html │ │ ├── javascript │ │ │ ├── main.js │ │ │ └── searchdata.js │ │ ├── search │ │ │ ├── BuildTargetsP.html │ │ │ ├── ConfigurationC.html │ │ │ ├── ConfigurationH.html │ │ │ ├── ConfigurationM.html │ │ │ ├── ConfigurationsH.html │ │ │ ├── ConfigurationS.html │ │ │ ├── ConfigurationsM.html │ │ │ ├── ConfigurationsS.html │ │ │ ├── ConfigurationsT.html │ │ │ ├── ConfigurationT.html │ │ │ ├── ConfigurationU.html │ │ │ ├── FilesC.html │ │ │ ├── FilesR.html │ │ │ ├── FunctionsC.html │ │ │ ├── FunctionsG.html │ │ │ ├── FunctionsI.html │ │ │ ├── FunctionsM.html │ │ │ ├── FunctionsP.html │ │ │ ├── FunctionsS.html │ │ │ ├── FunctionsT.html │ │ │ ├── GeneralB.html │ │ │ ├── GeneralC.html │ │ │ ├── GeneralD.html │ │ │ ├── GeneralF.html │ │ │ ├── GeneralG.html │ │ │ ├── GeneralH.html │ │ │ ├── GeneralI.html │ │ │ ├── GeneralL.html │ │ │ ├── GeneralM.html │ │ │ ├── GeneralO.html │ │ │ ├── GeneralP.html │ │ │ ├── GeneralR.html │ │ │ ├── GeneralS.html │ │ │ ├── GeneralT.html │ │ │ ├── GeneralU.html │ │ │ ├── GeneralV.html │ │ │ ├── GeneralW.html │ │ │ ├── NoResults.html │ │ │ ├── TypesS.html │ │ │ ├── VariablesC.html │ │ │ ├── VariablesD.html │ │ │ ├── VariablesL.html │ │ │ ├── VariablesO.html │ │ │ ├── VariablesP.html │ │ │ ├── VariablesR.html │ │ │ └── VariablesS.html │ │ └── styles │ │ ├── 1.css │ │ ├── 2.css │ │ └── main.css │ └── READM.md ├── freebsd │ └── core_portme.mak ├── LICENSE.md ├── linux │ └── core_portme.mak ├── macos │ └── core_portme.mak ├── Makefile ├── posix │ ├── core_portme.c │ ├── core_portme.h │ ├── core_portme.mak │ └── core_portme_posix_overrides.h ├── README.md ├── rtems │ ├── core_portme.mak │ └── init.c └── simple ├── core_portme.c ├── core_portme.h └── core_portme.mak 18 directories, 105 files [root@ecs coremark-main]#

三、编译生成coremark.exe文件

可以直接执行make 命令,默认为单线层 如果要使用多线程,可以使用如下命令: make XCFLAGS='-g -DMULTITHREAD=N -DUSE_FORK=1' ##N为要执行的线程数 如下: [root@ecs coremark-main]# make XCFLAGS='-g -DMULTITHREAD=1 -DUSE_FORK=1' make XCFLAGS="-g -DMULTITHREAD=1 -DUSE_FORK=1 -DPERFORMANCE_RUN=1" load run1.log make[1]: Entering directory `/root/coremark-main' make port_prebuild make[2]: Entering directory `/root/coremark-main' make[2]: Nothing to be done for `port_prebuild'. make[2]: Leaving directory `/root/coremark-main' make link make[2]: Entering directory `/root/coremark-main' cc -O2 -Ilinux -Iposix -I. -DFLAGS_STR=\""-O2 -g -DMULTITHREAD=1 -DUSE_FORK=1 -DPERFORMANCE_RUN=1 -lrt"\" -DITERATIONS=0 -g -DMULTITHREAD=1 -DUSE_FORK=1 -DPERFORMANCE_RUN=1 core_list_join.c core_main.c core_matrix.c core_state.c core_util.c posix/core_portme.c -o ./coremark.exe -lrt Link performed along with compile make[2]: Leaving directory `/root/coremark-main' make port_postbuild make[2]: Entering directory `/root/coremark-main' make[2]: Nothing to be done for `port_postbuild'. make[2]: Leaving directory `/root/coremark-main' make port_preload make[2]: Entering directory `/root/coremark-main' make[2]: Nothing to be done for `port_preload'. make[2]: Leaving directory `/root/coremark-main' echo Loading done ./coremark.exe Loading done ./coremark.exe make port_postload make[2]: Entering directory `/root/coremark-main' make[2]: Nothing to be done for `port_postload'. make[2]: Leaving directory `/root/coremark-main' make port_prerun make[2]: Entering directory `/root/coremark-main' make[2]: Nothing to be done for `port_prerun'. make[2]: Leaving directory `/root/coremark-main' ./coremark.exe 0x0 0x0 0x66 0 7 1 2000 > ./run1.log make port_postrun make[2]: Entering directory `/root/coremark-main' make[2]: Nothing to be done for `port_postrun'. make[2]: Leaving directory `/root/coremark-main' make[1]: Leaving directory `/root/coremark-main' make XCFLAGS="-g -DMULTITHREAD=1 -DUSE_FORK=1 -DVALIDATION_RUN=1" load run2.log make[1]: Entering directory `/root/coremark-main' make port_preload make[2]: Entering directory `/root/coremark-main' make[2]: Nothing to be done for `port_preload'. make[2]: Leaving directory `/root/coremark-main' echo Loading done ./coremark.exe Loading done ./coremark.exe make port_postload make[2]: Entering directory `/root/coremark-main' make[2]: Nothing to be done for `port_postload'. make[2]: Leaving directory `/root/coremark-main' make port_prerun make[2]: Entering directory `/root/coremark-main' make[2]: Nothing to be done for `port_prerun'. make[2]: Leaving directory `/root/coremark-main' ./coremark.exe 0x3415 0x3415 0x66 0 7 1 2000 > ./run2.log make port_postrun make[2]: Entering directory `/root/coremark-main' make[2]: Nothing to be done for `port_postrun'. make[2]: Leaving directory `/root/coremark-main' make[1]: Leaving directory `/root/coremark-main' Check run1.log and run2.log for results. See README.md for run and reporting rules. [root@ecs coremark-main]#

四、查看结果

执行完上述命令之后,该目录下会生成coremark.exe run1.log run2.logw文件: [root@ecs coremark-main]# ll total 240 drwxr-xr-x 2 root root 4096 Nov 18 02:50 barebones -rw-r--r-- 1 root root 18219 Nov 18 02:50 core_list_join.c -rw-r--r-- 1 root root 15788 Nov 18 02:50 core_main.c -rwxr-xr-x 1 root root 69720 Dec 24 15:26 coremark.exe -rw-r--r-- 1 root root 4759 Nov 18 02:50 coremark.h -rw-r--r-- 1 root root 283 Nov 18 02:50 coremark.md5 -rw-r--r-- 1 root root 9598 Nov 18 02:50 core_matrix.c -rw-r--r-- 1 root root 9707 Nov 18 02:50 core_state.c -rw-r--r-- 1 root root 6004 Nov 18 02:50 core_util.c drwxr-xr-x 2 root root 4096 Dec 23 12:59 cygwin drwxr-xr-x 3 root root 4096 Nov 18 02:50 docs drwxr-xr-x 2 root root 4096 Nov 18 02:50 freebsd -rw-r--r-- 1 root root 18582 Nov 18 02:50 LICENSE.md drwxr-xr-x 2 root root 4096 Nov 18 02:50 linux drwxr-xr-x 2 root root 4096 Nov 18 02:50 macos -rw-r--r-- 1 root root 3576 Nov 18 02:50 Makefile drwxr-xr-x 2 root root 4096 Dec 23 13:06 posix -rw-r--r-- 1 root root 19484 Nov 18 02:50 README.md drwxr-xr-x 2 root root 4096 Nov 18 02:50 rtems -rw-r--r-- 1 root root 752 Dec 24 15:27 run1.log -rw-r--r-- 1 root root 615 Dec 24 15:27 run2.log drwxr-xr-x 2 root root 4096 Nov 18 02:50 simple ########################################################## 查看run1.log文件 [root@ecs coremark-main]# cat run1.log 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 12158 Total time (secs): 12.158000 Iterations/Sec : 16450.074025 ####此为跑的分数,该值越大代表性能越好 Iterations : 200000 Compiler version : GCC4.8.5 20150623 (Red Hat 4.8.5-44) Compiler flags : -O2 -g -DMULTITHREAD=1 -DUSE_FORK=1 -DPERFORMANCE_RUN=1 -lrt Memory location : Please put data memory location here (e.g. code in flash, data on heap etc) seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0x4983 Correct operation validated. See README.md for run and reporting rules. CoreMark 1.0 : 16450.074025 / GCC4.8.5 20150623 (Red Hat 4.8.5-44) -O2 -g -DMULTITHREAD=1 -DUSE_FORK=1 -DPERFORMANCE_RUN=1 -lrt / Heap

五、可以跑多次计算平均值以或得最佳性能

提供脚本如下: # -*- coding: UTF-8 -*- import subprocess import numpy as np file_path = "/root/coremark-main" ####解压后的coremark目录路径 data_list = [] def make_core(): command = "make XCFLAGS='-g -DMULTITHREAD=N -DUSE_FORK=1'" ###修改N的值 for i in range(3): ###修改range的值,代表跑多少次 res1 = subprocess.check_output("rm -rf run* coremark.exe", shell=True, cwd=file_path) a res2 = subprocess.check_output(command, shell=True, cwd=file_path) res3 = subprocess.check_output("sed -n 5p run1.log | awk -F [:] '{print $2}'", shell=True, cwd=file_path) data_list.append(int(res3.split(".")[0].strip())) return data_list data_res = make_core() def arr_max(): arr = data_res arr_mean = np.mean(arr) ####获得多次的平均值 arr_std = np.std(arr) ####获得标准方差 arr_res = format(float(arr_std)/float(arr_mean) * 100,'.6f') ###获得StdDev% 值 print("arr_mean %f" % arr_mean) print("arr_std %f" % arr_std) print(arr_res) if __name__=="__main__": arr_max() 执行脚本如下: [root@ecs ~]# python make_coremark.py arr_mean 32236.000000 ####平均值 arr_std 341.321940 ###标准方差 1.058822 ###StdDev% 值,为1.06%

对比不同cpu多次测试结果如下: 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有