0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【试用报告】龙芯先锋板:CPU性能测试—CoreMark和计算质数

电子发烧友论坛 来源:未知 2023-02-21 16:35 次阅读

一、CoreMark简介

什么是CoreMark?

来自CoreMark首页的解释是:

CoreMark is a simple, yet sophisticated benchmark that is designed specifically to test the functionality of a processor core. Running CoreMark produces a single-number score allowing users to make quick comparisons between processors.

翻译一下就是:

CoreMark是一个简单而又精密的基准测试程序,是专门为测试处理器核功能而设计的。运行CoreMark会产生一个“单个数字”的分数,(从而)允许用户在(不同)CPU之间进行快速比较。

简单来说,就是一个测试CPU性能的程序,类似PC上的Cinebench、CPU-Z之类的CPU性能测试工具。

了解了CoreMark是什么之后,接下来我们尝试在龙芯2K0500先锋板上跑一下CoreMark,看看分数是多少。

二、在龙芯2K0500上运行CoreMark

2.1 下载CoreMark源码

Linux编译主机上,执行如下命令,将CoreMark源码下载到本地:

git clone https://github.com/eembc/coremark.git

(左右移动查看全部内容)


	

下载完成后,可以看到有这些文件和目录:

cf658466-b1c1-11ed-bfe3-dac502259ad0.png

2.2 交叉编译CoreMark

接着编译CoreMark,这里假设你已经正确设置了龙芯交叉编译工具链,也就是可以直接运行loongarch64-linux-gnu-gcc命令。

在Linux编译主机上,执行如下命令:

cd coremark
make CC=loongarch64-linux-gnu-gcc link

(左右移动查看全部内容)


	

其中:

  • CC用于指定编译器,这里指定的是龙芯GNU交叉编译器(loongarch64-linux-gnu-gcc);

  • link是make命令的构建目标,具体定义在Makefile文件中,link是只链接不运行;

编译完成后,可以看到生成了coremark.exe:

cf7e2d40-b1c1-11ed-bfe3-dac502259ad0.png

2.3 运行CoreMark

通过FTP或U盘,将coremark.exe拷贝到龙芯2K0500先锋板上,使用如下命令运行coremark.exe:

# 添加可执行权限
chmod +x coremark.exe


# 运行
./coremark.exe

	

运行结束后,输出如下:

cfa5990c-b1c1-11ed-bfe3-dac502259ad0.png

可以看到,龙芯2K0500上CoreMark跑分为2213.205459分。

三、和树莓派3B+上CoreMark结果对比

我这里测试使用的树莓派3B+开发板,系统版本信息是:

cfc44c9e-b1c1-11ed-bfe3-dac502259ad0.png

由于树莓派3B+上运行的是Debian系统,有完整的编译工具链。因此,在树莓派3B+上,我们可以直接在开发板上编译源码。

在树莓派3B+上运行CoreMark之前,也需要下载CoreMark源码,和前面类似:

git clone https://github.com/eembc/coremark.git

(左右移动查看全部内容)


	

不过这次我们直接将CoreMark源码下载到了树莓派上。

3.1 编译CoreMark

树莓派上编译CoreMark之前,需要先安装编译构建工具链,如果还没有的话,可以使用如下命令:

sudo apt install build-essential

(左右移动查看全部内容)

PS:如果已经有gcc、make命令,则可以跳过此步骤。

使用如下命令,编译CoreMark源码:

cd coremark
make link

	

3.2 运行CoreMark

使用如下命令运行coremark.exe:

./coremark.exe

(左右移动查看全部内容)

PS:这里由于我们是直接在树莓派3B+开发板上编译的CoreMark,所以直接运行即可。

运行结束后,输出如下:

cff13380-b1c1-11ed-bfe3-dac502259ad0.png

可以看到,树莓派3B+上CoreMark跑分为1914.486280。

龙芯2K0500和树莓派3B+的CoreMark跑分对比:

龙芯2K0500 树莓派3B+
跑分 2213.205459 1914.486280

可以看到,龙芯2K0500上的CoreMark跑分高于树莓派3B+。

3.3 其他编译选项跑分对比

查看CoreMark的Makefile和相关源码,我们可以知道,通过编译时添加XCFLAGS参数,可以指定CoreMark的编译参数。

下面是几组不同XCFLAGS参数下,龙芯2K0500和树莓派3B+的CoreMark跑分:

XCFLAGS 龙芯2K0500 树莓派3B+
2213.205459 1914.486280
"-DPERFORMANCE_RUN=1" 2213.532059 1916.198263
"-DPERFORMANCE_RUN=1 MEM_METHOD=MEM_STACK" 2218.278616 1915.219612
"-DPERFORMANCE_RUN=1 MEM_METHOD=MEM_STATIC" 2216.475803 1916.687963

可以看到,几种不同XCFLAGS参数条件下,龙芯2K0500上的CoreMark跑分都要高于树莓派3B+。

添加XFLAGS参数后,树莓派上的编译命令为(以表格最后一行参数为例):

make XCFLAGS="-DPERFORMANCE_RUN=1 -DMEM_METHOD=MEM_STATIC" link

(左右移动查看全部内容)


	

响应的,Linux编译服务器上,交叉编译命令为:

make CC=loongarch64-linux-gnu-gcc XCFLAGS="-DPERFORMANCE_RUN=1 -DMEM_METHOD=MEM_STATIC" link

(左右移动查看全部内容)


	

3.4 CoreMark的主要算法

CoreMark项目README的Key Algorithms描述了CoreMark主要用到了那些算法:

  • 链表(主要是指针操作)

  • 矩阵乘法(主要是乘法和加法运算)

  • 状态机(主要是switch-case操作)

说明在这几种计算场景下,龙芯2K0500的速度都是比树莓派3B+要快的。

四、额外的CPU测试

接下来我们看看另外一种场景下的测试结果。

我们知道,生成一个较大的大质数,或者判断一个大整数是否为质数是比较复杂的。

所以,这里我们准备用生成质数在两个开发板上再次进行测试。

4.1 第n个质数

我们使用如下C程序代码,计算第n个质数:

#include 
#include 
#include 
#include 
#include 
#include 
#include 


// 判断n是否为质数
bool isprime(uint64_t n)
{
    assert(n > 0);


    if (n == 2) return true;
    if ((n % 2) == 0) return false;


    for (uint64_t i = 3, up = n / 2; i < up; i += 2) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
}


// 计算第n个质数,例如:1 => 2, 2 => 3, 3 => 5
uint64_t prime(int n)
{
    assert(n > 0);


    if (n == 1) return 2;


    int count = 1;
    for (uint64_t i = 3; i < UINT64_MAX; i += 2) {
        if (isprime(i)) {
            if (++count == n) {
                return i;
            }
        }
    }
    return 0;
}


int main(int argc, char* argv[])
{
    int n = argc > 1 ? atoi(argv[1]) : 10;


    clock_t start = clock();
    uint64_t prim = prime(n);
    clock_t end = clock();
    float costs = (end - start) / (float) CLOCKS_PER_SEC;


    printf("%10d	%.6f	%" PRIu64 "
", n, costs, prim);
    return 0;
}

(左右移动查看全部内容)


	

这里为了忽略两块开发板内存差异的影响,我们不保存前面得到的质数(虽然保存前面得到的质数,可以加速后续的isprime判断)。

这里假设保存的文件名为p1.c,树莓派3B+上使用如下命令编译:

gcc -O2 -o p1 p1.c

	

Linux编译主机上,使用如下命令交叉编译:

loongarch64-linux-gnu-gcc -O2 -o p1 p1.c

(左右移动查看全部内容)


	

接下来,分别在龙芯2K0500和树莓派3B+上运行,得到如下耗时数据(编译选项:-O2):

n 龙芯2K0500耗时 树莓派3B+耗时
1000 0.018571 0.014308
2000 0.080962 0.061902
3000 0.191983 0.146851
4000 0.353578 0.271425
5000 0.567774 0.435833
6000 0.831575 0.640650
7000 1.153037 0.890962
8000 1.533347 1.172405
9000 1.965950 1.517557

这里得到的结论是——树莓派3B+计算质数更快。此前的TFLM测试结果和这里比较类似,同样显示,龙芯2K0500成绩要稍差一些。

d00624d4-b1c1-11ed-bfe3-dac502259ad0.png

这里龙芯2K500比树莓派3B+慢的主要原因,很可能是因为求质数算法过程中包含了大量除法运算,而龙芯2K0500的除法运算速度要比树莓派3B+慢。

4.2 isprime修改

验证方法也很简单,我们可以直接修改前面的isprime函数:

// 判断n是否为质数
bool isprime(uint64_t n)
{
    assert(n > 0);


    if (n == 2) return true;
    if ((n & 1) == 0) return false; // n % 2  =>  n & 0x1


    for (uint64_t i = 3, up = (n >> 1); i < up; i += 2) {  // n / 2  =>  n >> 1
        for (uint64_t j = 3; j < up; j += 2) { // 暴力枚举另外一个因数,不用除法
            if (i * j == n) {
                return false;
            }
        }
    }
    return true;
}

(左右移动查看全部内容)


	

这里假设保存的文件名为p2.c,树莓派3B+上使用如下命令编译:

gcc -O2 -o p2 p2.c

	

Linux编译主机上,使用如下命令交叉编译:

loongarch64-linux-gnu-gcc -O2 -o p1 p1.c

(左右移动查看全部内容)


	

接下来,分别在龙芯2K0500和树莓派3B+上运行,得到如下耗时数据(编译选项:-O2):

n 龙芯2K0500耗时 树莓派3B+耗时
400 0.293424 0.302985
500 0.616077 0.634836
600 1.123482 1.162557

这里可以看到,龙芯2K500比树莓派3B+计算要快。

所以,这里验证了前面的猜想——龙芯2K500比树莓派3B+的整数除法要慢。

五、参考链接

  1. CoreMark项目:https://github.com/eembc/coremark

  2. 龙芯GNU编译工具链下载页面:http://www.loongnix.cn/zh/toolchain/GNU/

  3. 加入龙芯小组:https://bbs.elecfans.com/group_1650

本文由电子发烧友社区发布,转载请注明以上来源。如需社区合作及入群交流,请添加微信EEFans0806,或者发邮箱liuyong@huaqiu.com

d02749c0-b1c1-11ed-bfe3-dac502259ad0.png

热门推荐干货好文

1、社区精选!PCB多层板设计挑战赛作品集合

2、超强性能AI芯片OpenHarmony多系统支持,可定制高性能AP(附10+开发Demo)

3、从零入门物联网OH开源平台,从简单到高阶项目,创客电子爱好者都爱用!

4、低成本ESP32方案,支持OpenHarmony系统开发(附10+项目样例Demo)

5、从0到1玩转瑞萨RA4系列开发板,教你变着花样玩板子

6、四核64位,超强CPU ,看RK3568“竞”开发板DEMO!

7、人工智能也能这么玩, 简单快速入手,还能自定义AI运算

8、全部开源 | 基于全志V85X的运动相机,工业网关,可穿戴式摄像头

9、高性能双核RISC-V,满足大多数开发,这款国产MCU工程师


原文标题:【试用报告】龙芯先锋板:CPU性能测试—CoreMark和计算质数

文章出处:【微信公众号:电子发烧友论坛】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

原文标题:【试用报告】龙芯先锋板:CPU性能测试—CoreMark和计算质数

文章出处:【微信号:gh_9b9470648b3c,微信公众号:电子发烧友论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【RA-Eco-RA4E2-64PIN-V1.0开发试用CoreMark测试RA4E2 单片机CPU性能分数

    CoreMark是一个专门用来测试CPU性能的程序。类似电脑上面的鲁大师测试电脑跑分多少。 本期测评就是来讲解
    发表于 12-14 12:05

    BQ24040应用报告

    电子发烧友网站提供《BQ24040应用报告.pdf》资料免费下载
    发表于 10-14 09:28 0次下载
    BQ24040应<b class='flag-5'>用报告</b>

    龙芯2K0300蜂鸟试用报告

    龙芯2K0300蜂鸟试用报告 一、试用环境 操作系统和框架:Linux+QT5.15 交叉编译工具链
    发表于 09-13 18:00

    【作品合集】龙芯2K0300蜂鸟开发试用精选

    :@jf_99374259【龙芯2K0300蜂鸟试用】适配opencv-mobile 作者:@tinnu【龙芯2K0300蜂鸟
    发表于 09-10 18:17

    高速数据转换应用报告

    电子发烧友网站提供《高速数据转换应用报告.pdf》资料免费下载
    发表于 09-09 14:57 0次下载
    高速数据转换应<b class='flag-5'>用报告</b>

    龙芯2K0300蜂鸟试用试用开箱体验及调试

    龙芯2K0300蜂鸟试用开箱: 龙芯2K0300蜂鸟开发是一块集成度很高的板卡,龙芯2K03
    发表于 09-08 12:08

    龙芯2K0300蜂鸟试用龙芯2K0300蜂鸟开发上电测试

    。无论是进行硬件调试、软件开发还是系统集成,都能显著提升开发效率,优化产品设计流程。 市场潜力 :龙芯2K0300蜂鸟的发布,预示着国产嵌入式开发在体积、性能、能效比等方面的新突破,对于推动国产芯片
    发表于 09-05 20:46

    龙芯2K0300蜂鸟试用报告

    龙芯2K0300蜂鸟试用报告 概述 龙芯2K0300蜂鸟龙芯中科推出的一款面向嵌入式领域的
    发表于 09-03 08:32

    用于测试POL稳压器的HS负载/线路瞬态测试夹具和应用报告

    电子发烧友网站提供《用于测试POL稳压器的HS负载/线路瞬态测试夹具和应用报告.pdf》资料免费下载
    发表于 08-26 10:06 0次下载
    用于<b class='flag-5'>测试</b>POL稳压器的HS负载/线路瞬态<b class='flag-5'>测试</b>夹具和应<b class='flag-5'>用报告</b>

    龙芯2K0300蜂鸟试用】+5.CoreMark跑分

    越大则说明测试性能越好。   目前在嵌入式CPU行业中普遍公认的性能测试指标的标准主要使用以下三种,MIPS、Dhrystone、
    发表于 08-18 22:06

    龙芯2K0300蜂鸟试用】开箱体验

    本帖最后由 ele2022 于 2024-8-13 19:54 编辑 首先感谢电子发烧友和龙芯中科提供的试用机会。 今天开箱体验龙芯中科的一款2K0300蜂鸟开发
    发表于 08-12 19:59

    龙芯2K0300蜂鸟试用】第一篇 龙芯2K0300蜂鸟开箱python点灯测试

    首先感谢电子发烧友社区(测试福利群)举办的活动,让我有幸参与此次龙芯2K0300蜂鸟开发试用活动(之前的2K0500先锋
    发表于 08-10 23:19

    龙芯2K0300蜂鸟试用龙芯2K0300蜂鸟试用报告

    龙芯2K0300蜂鸟试用报告 1.拆箱、上电开机 2.自带CH340串口通讯芯片,不需要再用串口工具,已经板载了 3.主要由JW5079A、SW34201B、FORESEE
    发表于 08-09 11:58

    智能嵌入式系统设计大赛--龙芯2K500先锋

    (插针形式)2个SPI,2个I2C,6路串口,2路CAN,4路PWM, 8个GPIO等接口。 更多资料详见: [用户手册], [先锋详细资料], [用户试用报告等板卡使用资料]。 完成注册并核验资质成功的队伍,
    发表于 05-14 21:15

    龙芯:自主研发CPU提升性能,单核通用性能提高20倍

    张戈强调,龙芯CPU的主要IP核均为自主研发,这使得其性价比得到显著提升。他指出,国产CPU与主流CPU的差距主要体现在单核性能上,而非多核
    的头像 发表于 04-25 15:26 845次阅读