Dhrystone基准测试程序在Google Pixel4上运行跑分教程

这篇具有很好参考价值的文章主要介绍了Dhrystone基准测试程序在Google Pixel4上运行跑分教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

记录一下实验过程,方便后续回顾

一、Dhrystone简介

Dhrystone是测量处理器运算能力的最常见基准程序之一,常用于处理器的整型运算性能的测量。程序是用C语言编写的,因此C编译器的编译效率对测试结果也有很大影响。

但其也有许多不足,Dhrystone不仅不适合于作为嵌入式系统的测试向量,甚至在其大多数场合下都不适合进行应用。Dhrystone还有许多漏洞,例如:易被非法利用、人为痕迹明显、代码长度太短、缺乏验证及标准的运行规则等。该程序是用C编写的,容易受到编译器影响,不同优化选项下,测试的性能并不一致。代码量小,在现代CPU中,它能够被放进指令缓存中,所以它并不能严格的测量取指性能。

Dhrystone标准的测试方法很简单,就是单位时间内跑了多少次Dhrystone程序,其指标单位为DMIPS/MHz。MIPS是Million Instructions Per Second的缩写,每秒处理的百万级的机器语言指令数。DMIPS中的D是Dhrystone的缩写,它表示了在Dhrystone标准的测试方法下的MIPS。

关于DMIPS有一个不得不注意的点,因为历史原因我们把在VAX-11/780机器上的测试结果1757 Dhrystones/s定义为1 DMIPS,因此在其他平台测试到的每秒Dhrystones数应除以1757,才是真正的DMIPS数值,故DMIPS其实表示的是一个相对值。

二、源码

可以直接移植官方版本的,但是如果移植官方的会有比较多的错误。
比如:

  • 常见C库函数的重定义(malloc等)
  • 没有包含使用到的C库的头文件
  • 一些系统定义的变量,如系统中断HZ变量没有包含
  • 函数没有声明等

网上有多个版本的,这里使用的是包含dry.h、dry1.c和dry2.c的源码。并且该版本修复了一些已知的错误。基于dhrystone2.2版本
https://github.com/iwannatto/dhrystone

三、编译

1.修改Makefile文件

需要做的就是简单修改Makefile文件即可编译代码:设置交叉工具链、把一些没有要的代码注释掉,下面是我简单修改后的Makefile文件。

注意:CTOOL:=arm-linux-gnueabi- 和 CCL:=/usr 要修改为自己的安装路径
安装32位gcc编译器 sudo apt-get install gcc-arm-linux-gnueabi

.PHONY: run clean
# Set compilation tool chain
CTOOL:=arm-linux-gnueabi-
CCL:=/usr
CC:=${CCL}/bin/${CTOOL}gcc
CFLAGS=-O3

run: dry2 dry2nr dry2o
#	./dry2 ${1-50000} 2>/dev/null
#	./dry2nr ${1-50000} 2>/dev/null
#	./dry2o ${1-50000} 2>/dev/null

dry2: dry.h dry1.c dry2.c
	${CC} -c ${CFLAGS} dry1.c -o dry1.o -static
	${CC} ${CFLAGS} dry2.c dry1.o ${LFLAGS} -o dry2 -static

dry2nr: dry.h dry1.c dry2.c
	${CC} -c -DREG ${CFLAGS} dry1.c -o dry1.o -static
	${CC} -DREG ${CFLAGS} dry2.c dry1.o ${LFLAGS} -o dry2nr -static

dry2o: dry.h dry1.c dry2.c
	${CC} -c -O ${CFLAGS} dry1.c -o dry1.o -static
	${CC} -O ${CFLAGS} dry2.c dry1.o ${LFLAGS} -o dry2o -static

clean:
	rm -f dry1.o dry2 dry2nr dry2o


使用make进行编译,多线程make -j8,这里可以根据电脑实际配置修改,不加-j也很快。

ps:其他编译方式

cc编译
cc -c  dry.c -o dry1.o
cc -DPASS2  dry.c dry1.o  -o dry2

gcc编译
gcc -c  dry.c -o dry1.o
gcc -DPASS2  dry.c dry1.o  -o dry2

sudo apt-get install gcc-arm-linux-gnueabi
sudo apt-get install gcc-aarch64-linux-gnu

arm32位编译(使用32位编译)
arm-linux-gnueabi-gcc -c  dry.c -o dry1.o
arm-linux-gnueabi-gcc -DPASS2  dry.c dry1.o  -o dry2 -static

arm64位编译
aarch64-linux-gnu-gcc -c  dry.c -o dry1.o
aarch64-linux-gnu-gcc -DPASS2  dry.c dry1.o  -o dry2 -static

通过上一步编译得到三个可执行文件,分别是dry2、dry2nr、dry2o

这三个文件的区别就是编译的时候使用了不同的参数。

Dhrystone基准测试程序在Google Pixel4上运行跑分教程,android,linux,kernel,Linux内核,汇编
dry2:普通的编译
dry2nr:编译加了-DREG
dry2o:编译添加了-O,优化了代码

四、运行

要运行在手机上,需要通过adb将编译得到的可执行程序push到手机上。然后给其增加权限。
我这里把一整个文件夹都传过来了。

adb push D:\xxx\Dry /data/local/tmp
chmod 777 dry2 dry2nr dry2o

通过adb shell进入文件系统,找到可执行程序,直接运行即可。

flame:/data/local/tmp/Dry # ./dry2o

Dhrystone Benchmark, Version C, Version 2.2
Program compiled without 'register' attribute
Using times(), HZ=100

Trying 50000 runs through Dhrystone:
Measured time too small to obtain meaningful results

Trying 500000 runs through Dhrystone:
Measured time too small to obtain meaningful results

Trying 5000000 runs through Dhrystone:
Measured time too small to obtain meaningful results

Trying 50000000 runs through Dhrystone:
Final values of the variables used in the benchmark:

Int_Glob:            5
        should be:   5
Bool_Glob:           1
        should be:   1
Ch_1_Glob:           A
        should be:   A
Ch_2_Glob:           B
        should be:   B
Arr_1_Glob[8]:       7
        should be:   7
Arr_2_Glob[8][7]:    50000010
        should be:   Number_Of_Runs + 10
Ptr_Glob->
  Ptr_Comp:          0x83e360
        should be:   (implementation-dependent)
  Discr:             0
        should be:   0
  Enum_Comp:         2
        should be:   2
  Int_Comp:          17
        should be:   17
  Str_Comp:          DHRYSTONE PROGRAM, SOME STRING
        should be:   DHRYSTONE PROGRAM, SOME STRING
Next_Ptr_Glob->
  Ptr_Comp:          0x83e360
        should be:   (implementation-dependent), same as above
  Discr:             0
        should be:   0
  Enum_Comp:         1
        should be:   1
  Int_Comp:          18
        should be:   18
  Str_Comp:          DHRYSTONE PROGRAM, SOME STRING
        should be:   DHRYSTONE PROGRAM, SOME STRING
Int_1_Loc:           5
        should be:   5
Int_2_Loc:           13
        should be:   13
Int_3_Loc:           7
        should be:   7
Enum_Loc:            1
        should be:   1
Str_1_Loc:           DHRYSTONE PROGRAM, 1'ST STRING
        should be:   DHRYSTONE PROGRAM, 1'ST STRING
Str_2_Loc:           DHRYSTONE PROGRAM, 2'ND STRING
        should be:   DHRYSTONE PROGRAM, 2'ND STRING

Microseconds for one run through Dhrystone:        0.0
Dhrystones per Second:                        24271844

最后的得分就是:24271844/1757/xxMHz文章来源地址https://www.toymoban.com/news/detail-527897.html

到了这里,关于Dhrystone基准测试程序在Google Pixel4上运行跑分教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 安卓逆向学习及APK抓包(二)--Google Pixel一代手机的ROOT刷入面具

    在手机选择上,优先选择谷歌系列手机,Nexus和Pixel系列,刚好手头有Pixel一代,就直接root了,大家感兴趣可以某宝几百块钱入手一台。Pixel手机花了本人一天,中间踩坑无数,终于还是root成功,感触颇深,所以先记录一下Pixel手机的root之旅。 安卓逆向学习及APK抓包(一)【Ka

    2024年02月11日
    浏览(62)
  • Linux服务器常见运维性能测试(1)综合跑分unixbench、superbench

    最近需要测试一批服务器的相关硬件性能,以及在常规环境下的硬件运行稳定情况,需要持续拷机测试稳定性。所以找了一些测试用例。本次测试包括在服务器的高低温下性能记录及压力测试,高低电压下性能记录及压力测试,常规环境下CPU满载稳定运行的功率记录。 这个系

    2024年02月04日
    浏览(75)
  • 谷歌Google Pixel6Pro/7pro手机刷入ROOT权限-开通Volte+破解5G网络高速刷机教程

    谷歌pixel6和pixel7系列,出厂并不带volte功能,也不支持完美的5G效果,对于我们这种 身处大陆,又想体验高清通话的小伙伴来说,并不友好,所以第三方破解实现就显得非常 重要了。通过实际测试,两款机型都是可以成功的。教程比较简单,跟着操作一般都能完 成,破解刷机

    2024年02月11日
    浏览(442)
  • Go语言测试——【单元测试 | Mock测试 | 基准测试】

    作者 :非妃是公主 专栏 :《Golang》 博客主页 :https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 软件测试 :软件测试(英语:Software Testing),描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。换句话说,软件测

    2024年02月10日
    浏览(56)
  • Go语言的单元测试与基准测试详解

    单元测试 以一个加法函数为例,对其进行单元测试。 首先编写add.go文件: 其次编写add_test.go文件,在go语言中,测试文件均已_test结尾,这里只需要在被测试的文件后加上_test即可。并且测试文件与要被测试的文件需要放在同一个包中,并不像 Java 那样需要将所有的测试文件

    2024年02月03日
    浏览(48)
  • go benchmark 基准测试

    目录 一、benchmark的使用 1.一个简单的例子 2.运行用例 3.benchmark 是如何工作的 4.提升准确度 5.内存分配情况 6.测试不同的输入 二、benchmark的注意事项 1.ResetTimer 2.StopTimer StartTimer go mod init test 创建项目test,创建目录bench/fib 创建fib.go 创建fib_test.go go 不管是单元测试还是基准测试,

    2024年02月02日
    浏览(61)
  • jmeter 基准测试

    在系统无压力时,分别对每个脚本用1个用户执行5分钟或循环100次操作,获得交易响应时间,通过此测试初步检查交易响应时间的量级,为后续测试提供对比基础。 通过基准测试,一是为了确认测试脚本的可用性,二是获取系统理论最快响应时间,为并发测试提供参考依据。

    2024年02月12日
    浏览(41)
  • Java-基准测试

    在软件开发中,性能优化是一个永恒的话题。为了确保代码在生产环境中运行得尽可能快,开发者需要一种准确的方法来度量和比较不同代码片段的性能。Java Microbenchmark Harness(JMH)是一个专门为Java和其他基于JVM的语言设计的工具,它允许开发者以高精度执行微基准测试。

    2024年01月15日
    浏览(35)
  • Java核心锁基准测试

    基于JMH基准测试库 测试代码 参数: 20个线程 1000w个枪锁任务 结果 ReentrantLock: 平均用时263毫秒 StampedLock: 平均用时263毫秒 synchronized: 平均用时454毫秒 参数: 50个线程 1000w个枪锁任务 结果 ReentrantLock: 平均用时271毫秒 StampedLock: 平均用时297毫秒 synchronized: 平均用时465毫秒 参数: 50个

    2024年02月06日
    浏览(40)
  • 【go语言】3.3.1 单元测试和基准测试

    Go 语言的 testing 包为编写单元测试和基准测试提供了强大的支持。单元测试用于验证代码的正确性,基准测试用于测量代码的性能。 在Go语言中,单元测试和基准测试是两种常用的测试方法,用于测试和评估代码的质量和性能。 单元测试是一种针对代码中最小可测试单元(函

    2024年02月08日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包