1218|0

82

帖子

0

TA的资源

一粒金砂(高级)

【VisionFive 2:集成3D GPU RISC-V单板计算机】+02.CPU/DDR功能测试(zmj) [复制链接]

【VisionFive 2:集成3D GPU RISC-V单板计算机】+02.CPU/DDR功能测试(zmj)

赛昉科技的“昉·星光 2”开发板采用“昉·惊鸿7110(JH7110)”处理器,它是RISC-V 四核,指令集ISA为64位RV64GC ISA SoC,并且搭载2MB的L2缓存和协处理器,工作频率最高可达1.5 GHz(GPU是IMG BXE-4-32 MC1,工作频率最高可达600 MHz,本节内容不做展开)。系统内存配置为4GB-LPDDR4 SDRAM,数据传输速率最高可达 2800 Mbps(DDR内存可选2GB/4GB/8GB)。

本章节测试“昉·星光 2”开发板的CPU/DDR功能。

1. CPU性能测试

1.1 查看CPU信息

赛昉科技的“昉·星光 2”开发板采用“昉·惊鸿7110(JH7110)”处理器,指令集ISA架构为RSIC-V 64位,搭载2MB大小的L2-Cache缓存和协处理器,工作频率范围是312.5MHz~1.5GHz;搭载GPU是IMG BXE-4-32 MC1,工作频率最高可达600 MHz。

通过查看CPU信息的反馈结果可以确认CPU是四核RSIC-V(64-bit模式),L2-Cache大小为2MB。

//------查看CPU信息:lscpu
//---指令
lscpu
cat /proc/cpuinfo
//---结果
指令集:RSIC-V 64bit
4核CPU:编号0~3
//------查看CPU频率:
//---指令
sudo cat /sys/bus/cpu/devices/cpu0/cpufreq/cpuinfo_cur_freq
sudo cat /sys/bus/cpu/devices/cpu0/cpufreq/cpuinfo_max_freq
sudo cat /sys/bus/cpu/devices/cpu0/cpufreq/cpuinfo_min_freq
//---结果
工作频率:312.5MHz~1.5GHz
当前频率:750MHz

//------log信息(示例)
user@starfive:~/zmj_ws/5_coremark/coremark$ lscpu
Architecture:          riscv64
  Byte Order:          Little Endian
CPU(s):                4
  On-line CPU(s) list: 0-3
user@starfive:~/zmj_ws/5_coremark/coremark$ cat /proc/cpuinfo
processor       : 0
hart            : 1
isa             : rv64imafdc
mmu             : sv39
isa-ext         :
uarch           : sifive,u74-mc
                  
processor       : 1
hart            : 2
isa             : rv64imafdc
mmu             : sv39
isa-ext         : 
uarch           : sifive,u74-mc

processor       : 2
hart            : 3
isa             : rv64imafdc
mmu             : sv39
isa-ext         : 
uarch           : sifive,u74-mc
                               
processor       : 3
hart            : 4
isa             : rv64imafdc
mmu             : sv39
isa-ext         : 
uarch           : sifive,u74-mc
                  
user@starfive:~/zmj_ws/5_coremark/coremark$ sudo cat /sys/bus/cpu/devices/cpu0/cpufreq/cpuinfo_cur_freq
750000
user@starfive:~/zmj_ws/5_coremark/coremark$ sudo cat /sys/bus/cpu/devices/cpu0/cpufreq/cpuinfo_max_freq
1500000
user@starfive:~/zmj_ws/5_coremark/coremark$ sudo cat /sys/bus/cpu/devices/cpu0/cpufreq/cpuinfo_min_freq
312500
user@starfive:~/zmj_ws/5_coremark/coremark$ hostnamectl
 Static hostname: starfive
       Icon name: computer
      Machine ID: b0c15c2d3a1843d486fe35272f9f72ef
         Boot ID: e9058acac80f4749a9d9c875710167ba
Operating System: Debian GNU/Linux bookworm/sid
          Kernel: Linux 5.15.0-starfive
    Architecture: riscv64
user@starfive:~/zmj_ws/5_coremark/coremark$

 

image-20230711142919432.png

1.2 CoreMark性能测试

1.2.1 CoreMark简介

//------CoreMark简介

CoreMark是用来衡量嵌入式系统中心处理单元(CPU,或叫做微控制器MCU)性能的标准。

该标准于2009年由EEMBC组织的Shay Gla-On提出,并且试图将其发展成为工业标准,从而代替陈旧的Dhrystone标准。代码使用C语言写成,包含如下的运算法则:列举(寻找并排序),数学矩阵操作(普通矩阵运算)和状态机(用来确定输入流中是否包含有效数字),最后还包括CRC(循环冗余校验)。

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具有特定的运行和报告规则,从而可以避免由于所使用的编译库不同而导致的测试结果难以比较。

1.2.2 CoreMark源码获取

//------CoreMark源码获取

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

//------CoreMark源码获取
//---直接下载
https://github.com/eembc/coremark
//---Git下载
git clone https://github.com/eembc/coremark.git
//---编译
make run

 

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
   ├── ...
   └── core_portme.mak

 

1.2.3 运行coremark.exe测试性能

运行coremark.exe测试性能,测试得分666分,性能高于4核A53。

//------CoreMark性能测试
user@starfive:~/zmj_ws/5_coremark/coremark$ ./coremark.exe
2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 22792
Total time (secs): 22.792000
Iterations/Sec   : 4826.254826
Iterations       : 110000
Compiler version : GCC12.2.0
Compiler flags   : -O2 -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      : 0x33ff
Correct operation validated. See README.md for run and reporting rules.
CoreMark 1.0 : 4826.254826 / GCC12.2.0 -O2 -DPERFORMANCE_RUN=1  -lrt / Heap
user@starfive:~/zmj_ws/5_coremark/coremark$

 

image-20230716200013193.png

2. DDR内存性能测试

赛昉科技的“昉·星光 2”开发板采用4GB的LPDDR4-SDRAM, 数据传输速率最高可达 2800 Mbps(DDR内存可选2GB/4GB/8GB)。

2.1 DDR内存基本信息

通过“free -h”指令读取内存DDR的使用情况;通过/proc/meminfo 文件读取系统中的内存的参数信息。

//------测试工具
free
//---测试指令
free -h
或者
free -m
//---参数解析
-h 参数代表单位为 GByte
-m 参数代表单位为 MByte
total :内存总量
used :被使用的内存量
free :可使用的内存量
//------查看系统内存信息文件
cat /proc/meminfo

//------
user@starfive:~/zmj_ws/5_coremark/coremark$ free -h
               total        used        free      shared  buff/cache   available
Mem:           3.8Gi       500Mi       2.8Gi       5.9Mi       555Mi       3.3Gi
Swap:             0B          0B          0B
user@starfive:~/zmj_ws/5_coremark/coremark$ free -m
               total        used        free      shared  buff/cache   available
Mem:            3891         500        2884           5         555        3391
Swap:              0           0           0
user@starfive:~/zmj_ws/5_coremark/coremark$ cat /proc/meminfo
MemTotal:        3985220 kB
MemFree:         2953620 kB
MemAvailable:    3473068 kB
Buffers:           30840 kB
Cached:           501556 kB
SwapCached:            0 kB
Active:           177500 kB
Inactive:         729168 kB
Active(anon):       4748 kB
Inactive(anon):   375576 kB
Active(file):     172752 kB
Inactive(file):   353592 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                20 kB
Writeback:             0 kB
AnonPages:        374344 kB
Mapped:           174228 kB
Shmem:              6044 kB
KReclaimable:      36704 kB
Slab:              68452 kB
SReclaimable:      36704 kB
SUnreclaim:        31748 kB
KernelStack:        5632 kB
PageTables:        10524 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1992608 kB
Committed_AS:    2967436 kB
VmallocTotal:   67108863 kB
VmallocUsed:        9916 kB
VmallocChunk:          0 kB
Percpu:              480 kB
CmaTotal:         524288 kB
CmaFree:          520128 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
user@starfive:~/zmj_ws/5_coremark/coremark$

 

image-20230716200423192.png

2.2 STREAM内存带宽测试

STREAM内存带宽测试

//------使用stream测试:
//---下载
git clone https://gitee.com/spacemit/STREAM.git
//---编译
cd STREAM
make stream_c.exe
//---执行
./stream_c.exe
//------log信息(示例)
user@starfive:~/zmj_ws/5_STREAM$ ./stream_c.exe                         
-------------------------------------------------------------           
STREAM version : 5.10 $                                                 
-------------------------------------------------------------           
This system uses 8 bytes per array element.                             
-------------------------------------------------------------           
Array size = 10000000 (elements), Offset = 0 (elements)                 
Memory per array = 76.3 MiB (= 0.1 GiB).                                
Total memory required = 228.9 MiB (= 0.2 GiB).                          
Each kernel will be executed 10 times.                                  
 The *best* time for each kernel (excluding the first iteration)        
 will be used to compute the reported bandwidth.                        
-------------------------------------------------------------           
Number of Threads requested = 4                                         
Number of Threads counted = 4                                           
-------------------------------------------------------------           
Your clock granularity/precision appears to be 1 microseconds.          
Each test below will take on the order of 94540 microseconds.           
   (= 94540 clock ticks)                                                
Increase the size of the arrays if this shows that                      
you are not getting at least 20 clock ticks per test.                   
-------------------------------------------------------------           
WARNING -- The above is only a rough guideline.                         
For best results, please be sure you know the                           
precision of your system timer.                                         
-------------------------------------------------------------           
Function    Best Rate MB/s  Avg time     Min time     Max time          
Copy:            3047.2     0.061636     0.052508     0.079905          
Scale:           3056.4     0.065006     0.052349     0.097500          
Add:             3838.6     0.070985     0.062523     0.095684          
Triad:           3714.4     0.081544     0.064614     0.116189          
-------------------------------------------------------------           
Solution Validates: avg error less than 1.000000e-13 on all three arrays
-------------------------------------------------------------           
user@starfive:~/zmj_ws/5_STREAM$
//------各测试项含义
a.Copy-复制操作
从内存单元中读取一个数,并复制到其他内存单元中,两次访问内存操作
b.Scale-乘法操作
从内存单元中读取一个数,与常数相乘,得到的记过存到其他内存单元,两次访问内存操作
c.Add-加法操作
从两个内存单元中分别读取两个数,将其进行加法操作后,得到的结果写入另一个内存单元中,3次访问
内存操作
d.Triad-前面三种的结合
先从内存中读取一个数,与一个常数相乘得到一个乘积,然后从另一个内存单元中读取一个数与刚才乘积
结果相加,得到的结果写入内存。
共计3次访问内存操作。
测试结果一般的规律是Add > Triad > Copy > Scale。一次Add操作需要访问三次内存(两个读操作,一
个写操作),Triad操作也需要三次访问内存, Copy和Scale操作需要两次访问内存。单位操作内,访问内
存次数越多,越能够掩盖访存延迟,带宽越大。
单核Stream测试,影响的因素除了内存控制器能力外,还有Core的ROB、Load/Store对其影响,因此不是
单纯的内存带宽性能测试。
而多核Stream测试,通过多核同时发出大量内存访问请求,能够更加饱和地访问内存,从而测试到内存带宽的
极限性能。

 

2.3 内存功能压力测试-memtester

内存功能压力测试-memtester需要安装:

//------安装内存功能压力测试工具memtester
sudo apt install memtester -y
或者
sudo apt-get install memtester -y

memtester通过给定测试内存的大小和次数, 可以对系统现有的内存进行压力上的测试。例如指定内存大小 512MB,测试次数为 10,则测试命令为“memtester 512M 10"。

下列以使用 512MB 内存空间,单次测试为例(需要切换到root用户进行测试):

//------测试工具(MYD-YG2LX系统已带)
memtester
//------测试指令
memtester 512M 1
//---指令说明
指定内存大小 512MB,测试次数为 1
//---示例
user@starfive:/home/user# sudo apt install memtester -y
root@starfive:/home/user# sudo su
root@starfive:/home/user# memtester 512M 1                      
memtester version 4.6.0 (64-bit)                                
Copyright (C) 2001-2020 Charles Cazabon.                        
Licensed under the GNU General Public License version 2 (only). 
                                                                
pagesize is 4096                                                
pagesizemask is 0xfffffffffffff000                              
want 512MB (536870912 bytes)                                    
got  512MB (536870912 bytes), trying mlock ...locked.           
Loop 1/1:                                                       
  Stuck Address       : ok                                      
  Random Value        : ok                                      
  Compare XOR         : ok                                      
  Compare SUB         : ok                                      
  Compare MUL         : ok                                      
  Compare DIV         : ok                                      
  Compare OR          : ok                                      
  Compare AND         : ok                                      
  Sequential Increment: ok                                      
  Solid Bits          : ok                                      
  Block Sequential    : ok                                      
  Checkerboard        : ok                                      
  Bit Spread          : ok                                      
  Bit Flip            : ok                                      
  Walking Ones        : ok                                      
  Walking Zeroes      : ok                                      
  8-bit Writes        : ok                                      
  16-bit Writes       : ok                                      
                                                                
Done.                                                           
root@starfive:/home/user#

 

image-20230716201326486.png

//------end


回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表