Lichee_RV学习系列--CoreMark-Pro移植

news2025/1/24 22:40:46

Lichee_RV学习系列文章目录

Lichee_RV学习系列—认识Lichee Rv Dock、环境搭建和编译第一个程序
Lichee_RV学习系列—移植dhrystone


文章目录

  • Lichee_RV学习系列文章目录
  • 一、CoreMark-Pro简介
  • 二、获取源码
  • 三、编译coremark-pro
    • 1、配置coremark-pro
    • 2、编译coremark-pro
  • 四、开发板中简单运行coremark-pro
  • 五、小问题


一、CoreMark-Pro简介

它也是和dhrystone一样,是一个测试CPU处理能力的一个程序,俗称跑分,CPU能跑多少分,CPU的处理能力就多高。

它可以在8位到64位的CPU上运行,而且跑分的可信度比dhrystone要高。

CoreMark-Pro是一个先进的市场处理器测试基准,跑分可信度高。EEMBC CoreMark和CoreMarkPRO共同提供了涵盖从低端微控制器到高性能计算处理器的标准基准测试。EEMBC CoreMark PRO基准测试包含五个常见的整数工作负载和四个常见的浮点工作负载。

CoMark-Pro分别会生成9个测试文件,分别对于一下测试

cjpeg-rose7-preset.exe  linear_alg-mid-100x100-sp.exe  parser-125k.exe     zip-test.exe
core.exe                loops-all-mid-10k-sp.exe       radix2-big-64k.exe
nnet_test.exe                  sha-test.exe

这些文件的测试内容包括:

  • JPEG压缩
  • ZIP压缩
  • XML解析
  • CoreMark版本的密集内存测试
  • Radix-2 快速傅里叶变换(FFT)
  • A simple neural-net
  • Livermore循环基准测试的一个大大改进的版本
  • LINPACK软件包导出的旋转高斯消去法

CoreMark官方链接

二、获取源码

github官方链接

gitee:xiaojie开源的riscv版本

详细的文档源码里面有,在docx目录中,简单的入门在官网github简介下面也有介绍,本文主要是参考github简介和core mark prou移植和xiaojie开源的代码去跑的

三、编译coremark-pro

1、配置coremark-pro

配置两个文件就行,一个是交叉工具链编译的文件,一个是操作系统配置的文件

首先我们需要先进入源码目录,进入配置文件的目录

cd util/make
复制交叉编译工具链的文件
cp gcc-cross-linux.mak gcc-cross-riscv.mak
复制操作系统配置
cp linux64.mak riscv64.mak


配置交叉工具 gcc-cross-riscv.mak文件,配置好TOOLS和TPREF变量即可,这两个你的是交叉编译工具链所在的位置

TOOLS	= /home/allwinner/workspace/tina-D1-H/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702
TPREF = riscv64-unknown-linux-gnu-
#  File : util/make/gcc-cross-linux.mak
#	GCC Tool Definitions, Host Compile and Run, cross from host to a linux target
#
#  EEMBC : Technical Advisory Group (TechTAG)
#------------------------------------------------------------------------------
# Copyright (c) 1998-2007 by the EDN Embedded Microprocessor 
# Benchmark Consortium (EEMBC), Inc. All Rights Reserved.
#==============================================================================

# RUN OPTIONS SECTION
# Build or run options (i.e. profiling, simulation)

# SYSTEM ENVIRONMENT SECTION

# Tools Root Directory
# This example uses a cross compiler built with crosstool targeting x86 linux.

#***********fixme sajid ******
#TOOLS	= /opt/crosstool/gcc-3.3.6-glibc-2.3.2/i386-unknown-linux-gnu
#TPREF = i386-unknown-linux-gnu-
# compiler path is = /opt/riscv/bin/riscv64-unknown-linux-gnu-gcc
TOOLS	= /home/allwinner/workspace/tina-D1-H/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702
TPREF = riscv64-unknown-linux-gnu-
#********************
# And this shows compiling to a big endian mips linux
# TOOLS	= /opt/crosstool/gcc-3.3.6-glibc-2.3.2/mips-unknown-linux-gnu
# TPREF = mips-unknown-linux-gnu-
# * remember to set big endian flags below for this setting!
#SHELL	= /bin/bash

# Tools Executables, Output File Flag and Output File Types

# Variable: CC
#	name of the compiler
CC		= $(TOOLS)/bin/$(TPREF)gcc
# Solaris: /usr/ccs/bin/as requires space after -o passed from gcc.
OBJOUT	= -o 
COBJT	= -c 
CINCD	= -I 
CDEFN	= -D 
OEXT = .o

AS		= $(TOOLS)/bin/$(TPREF)as

LD		= $(TOOLS)/bin/$(TPREF)gcc
EXEOUT	= -o 
EXE		= .exe

AR		= $(TOOLS)/bin/$(TPREF)ar
LIBTYPE	= .a
LIBOUT	= 

# Some Tool Chains require specific perl version. 
# makefile default setting can be overridden here.
#PERL=`which perl`

# COMPILER SECTION

INCLUDE = $(TOOLS)/include

COMPILER_FLAGS	= -g -O2 $(CDEFN)NDEBUG $(CDEFN)HOST_EXAMPLE_CODE=1
COMPILER_NOOPT	= -O0 $(CDEFN)NDEBUG $(CDEFN)HOST_EXAMPLE_CODE=1
COMPILER_DEBUG	= -O0 -g $(CDEFN)HOST_EXAMPLE_CODE=1 -DBMDEBUG=1 -DTHDEBUG=1
PACK_OPTS = 

#Variable: CFLAGS 
#	Options for the compiler.
ifdef DDB
 CFLAGS = $(COMPILER_DEBUG) $(COMPILER_DEFS) $(PLATFORM_DEFS) $(PACK_OPTS)
else
 ifdef DDN
  CFLAGS = $(COMPILER_NOOPT) $(COMPILER_DEFS) $(PLATFORM_DEFS) $(PACK_OPTS) 
 else
  CFLAGS = $(COMPILER_FLAGS) $(COMPILER_DEFS) $(PLATFORM_DEFS) $(PACK_OPTS)
 endif
endif
ifdef DDT
 CFLAGS += -DTHDEBUG=1
endif

WARNING_OPTIONS	=	\
        -Wall -Wno-long-long -fno-asm -fsigned-char 

# Additional include files not in dependancies or system include.
COMPILER_INCLUDES = 
# Override harness thincs, make sure you take care of the harness paths
#THINCS=

#Variable: COMPILER_DEFINES
# Optional - Passed to compiler, here or in makefile to override THCFG defines.
COMPILER_DEFINES += HAVE_SYS_STAT_H=1 USE_NATIVE_PTHREAD=1 GCC_INLINE_MACRO=1
# For Big Endian Targets, using 0/1 also allows support for
# files that do not have EEMBC includes. (Don't quote the string)
#COMPILER_DEFINES += EE_BIG_ENDIAN=1 EE_LITTLE_ENDIAN=0
COMPILER_DEFS = $(addprefix $(CDEFN),$(COMPILER_DEFINES))
PLATFORM_DEFS = $(addprefix $(CDEFN),$(PLATFORM_DEFINES))

# ASSEMBLER SECTION

ASSEMBLER_FLAGS		= 
ASSEMBLER_INCLUDES	=

# LINKER SECTION
# -lm is optional. Some linkers (linux gcc) do not include math library by default.
LINKER_FLAGS	+= -lm -lpthread  

LINKER_INCLUDES	= 
# Some linkers do not re-scan libraries, and require some libraries 
# to be placed last on the command line to resolve references.
# some linkers require -lrt since they do not include realtime clock functions by default.
LINKER_LAST 	+= -lrt
#LINKER_LAST 	+= 

# LIBRARIAN SECTION
LIBRARY_FLAGS	= scr

# SIZE SECTION
SIZE	= $(TOOLS)/bin/$(TPREF)size
SIZE_FLAGS		= 

# CONTROL SECTION

ARFLAGS = $(LIBRARY_FLAGS)
LIBRARY     = $(AR) $(ARFLAGS)
LIBRARY_LAST =

配置操作系统riscv64.mak文件
这里我们需要配置PLATFORM和TOOLCHAIN

PLATFORM=riscv64 #分别是存放文件的目录名称
TOOLCHAIN=gcc-cross-riscv #交叉编译工具链
# File: util/make/linux64.mak
# Optional specific files for specialized run and results extraction
PLATFORM=riscv64
SHELL=/bin/bash

ifndef TOOLCHAIN
#TOOLCHAIN=gcc64
TOOLCHAIN=gcc-cross-riscv
endif

# Flag: LOAD
#	Use LOAD to define command used for loading the image to the target
LOAD =

# Flag: RUN
#	Use this flag to define a command needed to run the image
#
#	Example: if you need to run the image with a simulator, set this flag to point to the simulator executable
RUN			=
# Flag: RUN
#	Use this flag to supply flags before the image name and parameters
#
#	Example: if you need want to run the image using gdb, you probably need to set this flag to --args
RUN_FLAGS	=

ifeq ($(DO_PROFILE),yes)
	RUN_FLAGS			= 
	RUN = function dorun() { \
	BENCHNAME=`basename $$1 .exe` && \
	$$@ &&\
	gprof $$1 gmon.out > $(DIR_LOG)/$$BENCHNAME.gprof && \
	mv gmon.out $(DIR_LOG)/$$BENCHNAME.gmon ;\
	} && dorun 
endif
ifeq ($(DO_VALGRIND),yes)
	RUN_FLAGS		= 
	RUN			= valgrind --log-fd=1 --tool=memcheck -v --leak-check=yes --show-reachable=yes
endif
ifeq ($(DO_MICA),yes)
	RUN_FLAGS			= 
	RUN = function dorun() { \
	BENCHNAME=`basename $$1 .exe` && echo "will do $$@" && \
	pin -t mica -controller-start-int3 1 -controller-stop-int3 2 -- $$@ $$DATA_CMD &&\
	mkdir -p $(DIR_LOG)/mica/$$BENCHNAME && mv *pin.out $(DIR_LOG)/mica/$$BENCHNAME ;\
	} && dorun 
endif
ifeq ($(DO_APROF),yes)
	RUN_FLAGS			= 
	RUN = function dorun() { \
	BENCHNAME=`basename $$1 .exe` && \
	/opt/valgrind/bin/valgrind --tool=aprof $$@ &&\
	mkdir -p $(DIR_LOG)/aprof/$$BENCHNAME && mv *.aprof $(DIR_LOG)/aprof/$$BENCHNAME ;\
	} && dorun 
endif

#Flag: PLATFORM_DEFINES 
#	Use PLATFORM_DEFINES to set platform specific compiler flags. E.g. set the timer resolution to millisecs with TIMER_RES_DIVIDER=1000
#	Or add HAVE_PTHREAD_SETAFFINITY_NP=1 HAVE_PTHREAD_SELF=1 to enable affinity (must port the relevant functions in <mith/al/src/al_smp.c>.
PLATFORM_DEFINES = EE_SIZEOF_INT=4 EE_SIZEOF_LONG=8

# Flag: CMD_SEP
#	Use CMD_SEP if a separator is required before run flags (e.g. --)
CMD_SEP=
# Flag: XCMD
#	Define XCMD on command line to pass flag at run time to workloads, or here if you want to override the default in <util/make/common.mak>

#FLAG: COPY_DATA
#	How should data be copied so that it is available for the executable?
#	Common ways include: 
#	- scp <target_ip>:<target_dir>(if target allows ssh connection)
#	- invoking a special command line tool to transfer the data
#	- copy (for file systems that do not support links)
#	- link (for file systems where a simple symbolic link will work)
COPY_DATA=cp -Ru --remove-destination 

2、编译coremark-pro

回到源码目录
在这里插入图片描述
执行编译命令
make TARGET=riscv64 build
编译完成后,九个可执行文件保存在builds目录下,可执行文件在builds/riscv64/gcc-cross-riscv/bin中

在这里插入图片描述

如果是这个命令 make TARGET=linux64 XCMD='-c4' certify-all,将运行9个测试,但是前提是开发板中已经有编译工具链和perl脚本,Lichee Rv Docv中并没有,这里仅仅在虚拟机中简单运行跑一跑

下面是我跑的分

WORKLOAD RESULTS TABLE

                                                 MultiCore SingleCore           
Workload Name                                     (iter/s)   (iter/s)    Scaling
----------------------------------------------- ---------- ---------- ----------
cjpeg-rose7-preset                                   56.18      29.85       1.88
core                                                  0.79       0.32       2.47
linear_alg-mid-100x100-sp                            89.45      43.14       2.07
loops-all-mid-10k-sp                                  3.42       1.55       2.21
nnet_test                                             3.70       1.77       2.09
parser-125k                                          10.36       4.10       2.53
radix2-big-64k                                      263.30     114.89       2.29
sha-test                                             74.63      41.32       1.81
zip-test                                             71.43      29.41       2.43

MARK RESULTS TABLE

Mark Name                                        MultiCore SingleCore    Scaling
----------------------------------------------- ---------- ---------- ----------
CoreMark-PRO                                       2393.66    1096.18       2.18

四、开发板中简单运行coremark-pro

将bin中的文件上传到开发板,下面是我运行每一个文件输出的信息

cjpeg-rose7-preset.exe

-- Items:total(ticks)=83
-- Items:total(secs)=   0.083
-- Done:cjpeg-rose7-preset=236760500

core.exe

-- Items:total(ticks)=10267
-- Items:total(secs)=  10.267
-- Done:core=490760323

linear_alg-mid-100x100-sp.exe

-- Items:total(ticks)=170
-- Items:total(secs)=    0.17
-- Done:linear_alg-mid-100x100-sp=1046644201

loops-all-mid-10k-sp.exe

-- Items:total(ticks)=10927
-- Items:total(secs)=  10.927
-- Done:loops-all-mid-10k-sp=1814569103

nnet_test.exe

-- Items:total(ticks)=3047
-- Items:total(secs)=   3.047
-- Done:nnet_test=549578576

parser-125k.exe

-- Items:total(ticks)=1996
-- Items:total(secs)=   1.996
-- Done:parser-125k=780641437

radix2-big-64k.exe

-- Items:total(ticks)=133
-- Items:total(secs)=   0.133
-- Done:radix2-big-64k=1862946660

sha-test.exe

-- Items:total(ticks)=155
-- Items:total(secs)=   0.155
-- Done:sha-test=1050863061

zip-test.exe

-- Items:total(ticks)=280
-- Items:total(secs)=    0.28
-- Done:zip-test=946108807

五、小问题

小问题就自己记录,以后如果还记得如何解决的话,会回来更新的

问题一:复制交叉编译工具链的文件gcc-cross-linux.mak,用这个编译出来的core.exe不能执行,出现一下错误,但是用gcc64.mak这个文件来配置交叉编译工具链编译的core.exe却能执行

root@MaixLinux:/mnt/gcc-cross-riscv/bin# ./core.exe
ERROR: ee_ptr_int is not a datatype that holds an int pointer!
ERROR: Please modify the datatypes in core_portme.h!
-  Info: Starting Run...
Segmentation fault

问题二:用官方的源代码去编译,缺少cjpeg-rose7-preset.exe这个文件,但是使用gitee xiaojie 的代码去编译却没问题,我查看宏也是正常设置好的,不知道为啥

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/156054.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

各种树的总结

1.B树和B树 数据库的大量数据用什么存储&#xff1f;为什么是B树和B树&#xff1f;使用二叉树不行吗&#xff1f;先来说说他们的演变吧&#xff0c;首先如果用二叉树的话都为排好序的树查询起来是不是效率不高&#xff1f;所以此时我们提出了对树排序&#xff0c;就变成了二叉…

联想拯救者屏幕亮度无法调节,监视器和显卡驱动问题,经过多种测试

主要的问题位置 1&#xff0c;设备管理器中的监视器部分 2&#xff0c;设备管理器的显卡适配器部分 个人电脑出现这种情况的原因 自己拆一下机器加装固态&#xff0c;但这种感觉不应该导致问题。但导致这种问题的原因可能是装固态时候把电池拔了。 一些网上常说的方法 更新…

数字化转型对企业有什么意义?有哪些案例可以分享?

如何看待制造企业数字化转型&#xff1f;制造业企业数字化转型有哪些思路和案例&#xff1f; 一提到制造企业数字化转型&#xff0c;大多数人都认为&#xff0c;这是专属于大型制造企业的行为。其实不然&#xff0c;对于中小型制造企业&#xff0c;数字化转型也应该从易到难&a…

interview

1.PyTorch1.1 Conv2d1.2 dataset&#xff0c;dataloader1.3 训练pipeline1.4 梯度归零1.5 torch保存模型种类及区别2.目标检测2.1 yolo3,4,5,7区别2.2 yolo使用的loss(ciou,BCE等等)ciouBCElossL1,L2,CE,BCE2.3 图像增强2.4 IOU计算公式3.深度学习基础3.1 卷积公式4.TensorRT5.…

Niantic:未来AR重要场景,VPS众包3D地图到底是啥?

几个世纪以来&#xff0c;人们使用指南针、地图、星盘和象限仪来找路&#xff0c;而在过去二十年里&#xff0c;GPS成为了主流的定位系统&#xff0c;并且与手机结合后&#xff0c;让人们的出行越来越方便。而随着摄像头等技术发展&#xff0c;我们也开始看到视觉定位技术的崛起…

(almalinux,rockylinux,openeuler,openanolis,centos,ubuntu)云原生容器镜像漏洞trivy扫描对比

一、下载并安装trivy漏洞扫描工具 下载&#xff1a; https://github.com/aquasecurity/trivy/releases/download/v0.31.3/trivy_0.31.3_Linux-64bit.rpm 以下为centos平台的安装&#xff1a; [rootlocalhost ~]# rpm -ivh trivy_0.31.3_Linux-64bit.rpm Preparing... …

【算法刷题 DAY03】剑指offer树相关算法题总结2

JZ7 重建二叉树 描述 给定节点数为 n 的二叉树的前序遍历和中序遍历结果&#xff0c;请重建出该二叉树并返回它的头结点。 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}&#xff0c;则重建出如下图所示。 提示: 1.vin.length pre.length 2.pre 和…

CSS入门二、美化页面元素

零、文章目录 文章地址 个人博客-CSDN地址&#xff1a;https://blog.csdn.net/liyou123456789个人博客-GiteePages&#xff1a;https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee&#xff1a;https://gitee.com/bluecusliyou/TechLearnGithub&#xff1a;https:…

【高速数字化仪应用案例系列】虹科数字化仪在光纤领域的应用

光纤应用 光纤越来越多地应用于各种领域。它们能够以光速长距离传输信息&#xff0c;并且损耗低&#xff0c;这使它们成为大容量远程数据通信的主要媒介。因此&#xff0c;光纤网络可以在电信系统中找到&#xff0c;它们用于传输和接收的目的。它们还用于提供各种数字服务&…

Docker命令-常用命令讲解

Docker常用命令 一&#xff1a;帮助命令二&#xff1a;镜像命令1. docker images 查看所有本地的主机上的镜像2. docker search 镜像名3. docker pull 下载镜像4. docker rmi三&#xff1a;容器命令1.docker run 新建容器并启动2.从容器返回到主机&#xff1a;3.docker ps 列出…

收银软件哪家强?2023年收银软件排行榜新鲜出炉!

每家实体店都少不了收银的程序&#xff0c;每个实体店老板都离不开收银的工具。随着信息技术的发展&#xff0c;收银的工具不再只有收银机&#xff0c;更高效、更方便的收银软件&#xff0c;已经成为了零售店老板们的新宠。收银机和收银软件有什么区别&#xff1f;收银机只能对…

1.11 LED灯点亮串口解析器

LED点灯实验 一&#xff0e;电路图&#xff1a; 三极管&#xff1a; NPN类型&#xff1a; PNP类型&#xff1a; NPN类型当基极为高电平时&#xff0c;集电极和发射极导通 PNP类型当基极为低电平时&#xff0c;集电极和发射极导通 由电路图可知LED电路图中三极管为NPN类型&am…

我在CSDN的2022---2023Flag

一、加入CSDN我是在2020年12月注册的CSDN&#xff0c;大一上学期就听同学给我讲了这个软件&#xff0c;然后就下载了&#xff0c;里面确实很多优质文章&#xff0c;对于当时向我们这样的初学者来说就是很实用。还记得都是搜什么&#xff0c;求最大值&#xff0c;最小值&#xf…

Redis热点数据处理

1、概念热点数据就是访问量特别大的数据。2、热点数据引起的问题流量集中&#xff0c;达到物理网卡上限。请求过多&#xff0c;缓存分片服务被打垮。redis作为一个单线程的结构&#xff0c;所有的请求到来后都会去排队&#xff0c;当请求量远大于自身处理能力时&#xff0c;后面…

RabbitMQ消息可靠性问题、死信交换机、延迟消息、惰性队列

目录消息可靠性生产者确保将消息成功送入队列消息确认消息回执消费者确保消息成功从队列中取出并成功消费消费确认机制消费失败重试机制失败策略使用第三种方式&#xff1a;消费者指定失败后转发的交换机使用第一种方式&#xff1a;在队列中指定死信交换机消息持久化问题交换机…

软件测试常见性能问题案例分析

在用户场景不确定的情况下&#xff0c;我们为了保障软件的正常运行就必须对软件的性能进行测试。下面我们一起来看看在软件测试中常见的性能问题&#xff0c;希望大家可以通过这七个比较典型的案例分析&#xff0c;充分掌握各种性能问题的解决方法。 案例一&#xff1a;某次压…

Spring Cloud 03 --- Nacos注册中心

前言 注册中心以Map形式存储消费者与生产者的IP和端口 基本概念 &#xff08;1&#xff09;Nacos 是阿里巴巴推出来的一个新开源项目&#xff0c;是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供…

2023年使用率会很高的9个SSH远程连接工具有这些!网工、运维你们用的是哪个?

网络工程师和运维工程师我想每天做的最多的一件事就是远程连接了&#xff0c;例如远程连接网络设备、远程连接服务器&#xff08;物理服务器或者云服务器&#xff09;&#xff0c;这个时候大多数用的工具都是基于SSH协议的&#xff0c;每位工程我想都有自己熟悉或者青睐的SSH工…

时序图文献精度——5.2019-IJCIA-Node Embedding over Temporal Graphs

Node Embedding over Temporal Graphs Abstract 作者提出了一种在时间图中嵌入节点的方法。学习时间图的节点和边随时间的演变&#xff0c;并将这种动态整合到时间节点嵌入框架中&#xff0c;用于不同的图预测任务。作者也提出了一个联合损失函数&#xff0c;它通过学习组合节…

【java算法】稀疏数组/队列/单双链表

文章目录线性和非线性结构稀疏数组前言代码刷类型题队列非环形队列环形队列刷题单链表单链表的定义案例演示--代码1.按照顺序添加2.按英雄排名插入3.根据no编号来修改节点信息4.删除节点单链表刷题1.求单链表中有效节点的个数2.查找单链表中的倒数第k个节点3.单链表的反转4.从尾…