CPU性能测试_Dhrystone基准测试

一、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其实表示的是一个相对值。

二、源码获取

http://www.roylongbottom.org.uk/classic_benchmarks.tar.gz

下载后解压

tar -xvf classic_benchmarks.tar.gz

三、操作使用

在\classic_benchmarks\source_code\dhrystone2\下可找到源代码,其中

dhry.h --关于兼容性的原型定义,

dhry_1.c --主程序入口,

dhry_2.c --算法子程序,

根据README文件的内容提示,


admin@ubuntu2004:~/localization_shared/tools/classic_benchmarks/source_code/dhrystone2$ cat README
 Instructions 32 Bit Version

 Copy dhry_1.c, dhry_2.c and dhry.h to a new folder and the
 following cpuida.o, cpuidc.o and cpuidh.h from common_32bit.

 Line 31 in dhry_1.c change options to "No Opt", "Opt 2" or "Opt 3".

 Compile and link using one or more of the following
 commands in Terminal pointing to the new folder.

 gcc dhry_1.c dhry_2.c cpuidc.o cpuida.o -lrt -lc -lm -o dhry2
 gcc dhry_1.c dhry_2.c cpuidc.o cpuida.o -lrt -lc -lm -O2 -o dhry22
 gcc dhry_1.c dhry_2.c cpuidc.o cpuida.o -lrt -lc -lm -O3 -o dhry23

 Execute using ./dhry2, ./dhry22 or ./dhryt23.
 Results should be displayed and saved in Dhry.txt.


 Instructions 64 Bit Version

 Copy dhry_1.c, dhry_2.c and dhry.h to a new folder and the following
 cpuida64.o, cpuidc64.o and cpuidh.h from common_64bit.

 Line 31 in dhry_1.c change options to "No Opt 64", "Opt 2 64" or "Opt 3 64".

 Compile and link using one or more of the following
 commands in Terminal pointing to the new folder.

 gcc dhry_1.c dhry_2.c cpuidc64.o cpuida64.o -m64 -lrt -lc -lm -o dhry2_64
 gcc dhry_1.c dhry_2.c cpuidc64.o cpuida64.o -m64 -lrt -lc -lm -O2 -o dhry22_64
 gcc dhry_1.c dhry_2.c cpuidc64.o cpuida64.o -m64 -lrt -lc -lm -O3 -o dhry23_64

 Execute using ./dhry2_64, ./dhry22_64 or ./dhry23_64.
 Results should be displayed and saved in Dhry.txt.

 The execution files can be renamed later.

创建新的文件夹,例如/run,复制当前文件夹下的dhry_1.c,dhry_2.c,dhry.h到新创建的目录,复制common_64bit(64位系统)文件夹下的cpuida64.o,cpuidc64.o,cpuidh.h也到新创建的目录;

再切换到新创建的目录,修改dhry_1.c文件的第31行,修改引号中内容为"No Opt 64", 或者"Opt 2 64" ,或者 "Opt 3 64";

然后执行gcc dhry_1.c dhry_2.c cpuidc64.o cpuida64.o -m64 -lrt -lc -lm -o dhry2_64,或者
 gcc dhry_1.c dhry_2.c cpuidc64.o cpuida64.o -m64 -lrt -lc -lm -O2 -o dhry22_64,或者
 gcc dhry_1.c dhry_2.c cpuidc64.o cpuida64.o -m64 -lrt -lc -lm -O3 -o dhry23_64,分别生成dhry2_64,dhry22_64,dhry23_64文件;

在这里我运行的时候报错,

admin@ubuntu2004:~/localization_shared/tools/classic_benchmarks/source_code/dhrystone2/run$ gcc dhry_1.c dhry_2.c cpuidc64.o cpuida64.o -m64 -lrt -lc -lm -o dhry2
dhry_1.c: In function ‘main’:
dhry_1.c:158:5: warning: implicit declaration of function ‘getDetails’ [-Wimplicit-function-declaration]
  158 |     getDetails();
      |     ^~~~~~~~~~
dhry_1.c:184:27: warning: extra tokens at end of #endif directive [-Wendif-labels]
  184 |    #endif                 "Register option      Selected."
      |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dhry_1.c:222:8: warning: implicit declaration of function ‘start_time’; did you mean ‘strftime’? [-Wimplicit-function-declaration]
  222 |        start_time();
      |        ^~~~~~~~~~
      |        strftime
dhry_1.c:274:8: warning: implicit declaration of function ‘end_time’ [-Wimplicit-function-declaration]
  274 |        end_time();
      |        ^~~~~~~~
dhry_1.c:327:43: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  327 |    printf ("  Ptr_Comp:       *    %d\n", (int) Ptr_Glob->Ptr_Comp);
      |                                           ^
dhry_1.c:353:41: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  353 |    printf ("  Ptr_Comp:       *    %d", (int) Next_Ptr_Glob->Ptr_Comp);
      |                                         ^
dhry_1.c:448:4: warning: implicit declaration of function ‘local_time’; did you mean ‘localtime’? [-Wimplicit-function-declaration]
  448 |    local_time();
      |    ^~~~~~~~~~
      |    localtime
/usr/bin/ld: cpuidc64.o: relocation R_X86_64_32 against symbol `timeday' can not be used when making a PIE object; recompile with -fPIE
/usr/bin/ld: cpuida64.o: relocation R_X86_64_32 against symbol `eaxCode1' can not be used when making a PIE object; recompile with -fPIE
collect2: error: ld returned 1 exit status

需要改成gcc -no-pie dhry_1.c dhry_2.c cpuidc64.o cpuida64.o -m64 -lrt -lc -lm -o dhry2_64执行;

admin@ubuntu2004:~/localization_shared/tools/classic_benchmarks/source_code/dhrystone2/run$ gcc -no-pie dhry_1.c dhry_2.c cpuidc64.o cpuida64.o -m64 -lrt -lc -lm -o dhry2_64
dhry_1.c: In function ‘main’:
dhry_1.c:158:5: warning: implicit declaration of function ‘getDetails’ [-Wimplicit-function-declaration]
  158 |     getDetails();
      |     ^~~~~~~~~~
dhry_1.c:184:27: warning: extra tokens at end of #endif directive [-Wendif-labels]
  184 |    #endif                 "Register option      Selected."
      |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dhry_1.c:222:8: warning: implicit declaration of function ‘start_time’; did you mean ‘strftime’? [-Wimplicit-function-declaration]
  222 |        start_time();
      |        ^~~~~~~~~~
      |        strftime
dhry_1.c:274:8: warning: implicit declaration of function ‘end_time’ [-Wimplicit-function-declaration]
  274 |        end_time();
      |        ^~~~~~~~
dhry_1.c:327:43: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  327 |    printf ("  Ptr_Comp:       *    %d\n", (int) Ptr_Glob->Ptr_Comp);
      |                                           ^
dhry_1.c:353:41: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  353 |    printf ("  Ptr_Comp:       *    %d", (int) Next_Ptr_Glob->Ptr_Comp);
      |                                         ^
dhry_1.c:448:4: warning: implicit declaration of function ‘local_time’; did you mean ‘localtime’? [-Wimplicit-function-declaration]
  448 |    local_time();
      |    ^~~~~~~~~~
      |    localtime
admin@ubuntu2004:~/localization_shared/tools/classic_benchmarks/source_code/dhrystone2/run$ ls
cpuida64.asm  cpuida64.o  cpuidc64.c  cpuidc64.o  cpuidh.h  dhry_1.c  dhry2_64  dhry_2.c  dhry.h

最后执行./dhry2_64即可;

admin@ubuntu2004:~/localization_shared/tools/classic_benchmarks/source_code/dhrystone2/run$ ./dhry2_64
  ####################################################
  getDetails and MHz

  Assembler CPUID and RDTSC
  CPU GenuineIntel, Features Code 0F8BFBFF, Model Code 00050657
  Montage Jintide(R) C5218R
  Measured - Minimum 2100 MHz, Maximum 2100 MHz
  Linux Functions
  get_nprocs() - CPUs 8, Configured CPUs 8
  get_phys_pages() and size - RAM Size 15.58 GB, Page Size 4096 Bytes
  uname() - Linux, ubuntu2004, 5.8.0-43-generic
  #49~20.04.1-Ubuntu SMP Fri Feb 5 09:57:56 UTC 2021, x86_64

##########################################

Dhrystone Benchmark, Version 2.1 (Language: C or C++)

Optimisation    No Opt 64
Register option not selected

       10000 runs   0.00 seconds
      100000 runs   0.01 seconds
     1000000 runs   0.08 seconds
     2000000 runs   0.18 seconds
     4000000 runs   0.33 seconds
     8000000 runs   0.67 seconds
    16000000 runs   1.36 seconds
    32000000 runs   2.62 seconds

Final values (* implementation-dependent):

Int_Glob:      O.K.  5  Bool_Glob:     O.K.  1
Ch_1_Glob:     O.K.  A  Ch_2_Glob:     O.K.  B
Arr_1_Glob[8]: O.K.  7  Arr_2_Glob8/7: O.K.    32000010
Ptr_Glob->              Ptr_Comp:       *    21476480
  Discr:       O.K.  0  Enum_Comp:     O.K.  2
  Int_Comp:    O.K.  17 Str_Comp:      O.K.  DHRYSTONE PROGRAM, SOME STRING
Next_Ptr_Glob->         Ptr_Comp:       *    21476480 same as above
  Discr:       O.K.  0  Enum_Comp:     O.K.  1
  Int_Comp:    O.K.  18 Str_Comp:      O.K.  DHRYSTONE PROGRAM, SOME STRING
Int_1_Loc:     O.K.  5  Int_2_Loc:     O.K.  13
Int_3_Loc:     O.K.  7  Enum_Loc:      O.K.  1
Str_1_Loc:                             O.K.  DHRYSTONE PROGRAM, 1'ST STRING
Str_2_Loc:                             O.K.  DHRYSTONE PROGRAM, 2'ND STRING

Microseconds for one run through Dhrystone:         0.08
Dhrystones per Second:                        12202113
VAX  MIPS rating =                               6944.86

 Press Enter


admin@ubuntu2004:~/localization_shared/tools/classic_benchmarks/source_code/dhrystone2/run$

最后两行的值即为测算的Dhrystones/s和DMIPS,注意1757 Dhrystones/s定义为1 Dhrystone MIPS(百万条指令每秒)。

Dhrystones per Second:                        12202113
VAX  MIPS rating =                               6944.86

四、压缩包

附件中的_x86是在x86系统编译的,可以在run目录下直接运行./dhry2_64

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

streamlit通过子目录访问

运行命令: streamlit hello 系统默认使用8501端口启动服务: 如果想通过子目录访问服务,可以这么启动服务 streamlit hello --server.baseUrlPath "app" 也可以通过以下命令换端口 streamlit hello --server.port 9999 参考&…

2024最新CTF入门的正确路线

目录 前言 一、什么是CTF比赛? 二、CTF比赛的流程 三、需要具备的知识 四、总结 前言 随着网络安全意识的增强,越来越多的人开始涉足网络安全领域,其中CTF比赛成为了重要的学习和竞赛平台。本人从事网络安全工作多年,也参加过…

甲小姐对话柳钢:CEO对股东最大的责任,是对成功的概率负责|甲子光年

只有看见最微小的事物,才能洞悉伟大的定律。 来源|甲子光年 作者|甲小姐 刘杨楠 编辑|栗子 商业史上,职业经理人成为“空降CEO”的故事往往胜少败多。 “究其原因有三条——容易自嗨、喊口号;不顾公司历…

笔试强训Day19 数学知识 动态规划 模拟

[编程题]小易的升级之路 题目链接&#xff1a;小易的升级之路__牛客网 思路&#xff1a; 按题目写即可 注意辗转相除法。 AC code&#xff1a; #include<iostream> using namespace std; int gcd(int a, int b) {return b ? gcd(b, a % b) : a; } int main() {int n…

三步学会苹果手机怎么关震动的方法!

苹果手机的震动功能在某些情况下可能会被认为是不必要的&#xff0c;比如在会议、课堂或者晚间睡眠时。因此&#xff0c;学会如何关闭苹果手机的震动功能是非常实用的。苹果手机怎么关震动&#xff1f;在本文中&#xff0c;我们将介绍三个步骤&#xff0c;帮助你关闭苹果手机的…

openEuler 22.03 GPT分区表模式下磁盘分区管理

目录 GPT分区表模式下磁盘分区管理parted交互式创建分区步骤 1 执行如下步骤对/dev/sdc磁盘分区 非交互式创建分区步骤 1 输入如下命令直接创建分区。 删除分区步骤 1 执行如下命令删除/dev/sdc1分区。 GPT分区表模式下磁盘分区管理 parted交互式创建分区 步骤 1 执行如下步骤…

ThingsBoard版本控制配合Gitee实现版本控制

1、概述 2、架构 3、导出设置 4、仓库 5、同步策略 6、扩展 7、案例 7.1、首先需要在Giitee上创建对应同步到仓库地址 ​7.2、giit仓库只能在租户层面进行配置 7.3、 配置完成后&#xff1a;检查访问权限。显示已成功验证仓库访问&#xff01;表示配置成功 7.4、添加设…

喜报 | 擎创科技荣获NIISA联盟2023年度创新技术特等奖!

为深入实施创新驱动发展战略&#xff0c;紧紧把握全球科技革命和产业变革方向&#xff0c;密切跟踪前沿科技新趋势&#xff0c;经科技部中国民营促进会业务主管部门批准以及国家互联网数据中心产业技术创新战略联盟&#xff08;以下简称联盟&#xff09;总体工作安排&#xff0…

前端nginx(windows操作系统)学习配置开发验证

Nginx概述 Nginx 作为负载均衡在 Linux 系统上具备很好的并发性能&#xff0c;并且占用极小的内存。但是在 Windows 系统上并不支撑较高并发&#xff0c;所以在Windows系统上选用Nginx作为负载均衡&#xff0c;需要考虑并发情况。 若并发需求低于 300&#xff0c;部署集群仅以…

LMdeploy推理实践

在inter-studio平台上&#xff0c;下载模型&#xff0c;体验lmdeploy 下载模型 这里是因为平台上已经有了internlm2模型&#xff0c;所以建立一个符号链接指向它&#xff0c;没有重新下载 ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b /root/如…

四级英语翻译随堂笔记

降维表达&#xff1a;中译英&#xff0c;英译英 没有强调主语&#xff0c;没有说明主语&#xff1a;用被动 但如果实在不行&#xff0c;再增添主语 不会就不翻译&#xff0c;不要乱翻译 以xxx为背景&#xff1a;against the backdrop of the xxx eg:against the backdrop of…

关于执行CLAM的代码的一些需要记录的点

文章链接&#xff1a;[2004.09666] Data Efficient and Weakly Supervised Computational Pathology on Whole Slide Images (arxiv.org) 代码链接&#xff1a;GitHub - mahmoodlab/CLAM: Data-efficient and weakly supervised computational pathology on whole slide images…

如何将 ONLYOFFICE 协作空间服务器版更新至 2.5

最近我们发布了 ONLYOFFICE 协作空间 2.5 云端版。好消息&#xff0c;该文档协作平台的自托管版本也已推出。现在&#xff0c;您可以轻松更新协作空间的实例&#xff0c;在本地尝试所有新功能。阅读本文了解更多信息。 ONLYOFFICE 协作空间 2.5 新功能 更新到 ONLYOFFICE 协作…

暴雨发布大模型专用分布式全闪存储

近日&#xff0c;暴雨信息发布为大模型专门优化的分布式全闪存储AVERSE系列。该系列依托暴雨信息自研分布式文件系统&#xff0c;搭载新一代数据加速引擎Xdata&#xff0c;通过盘控协同、GPU直访存储、全局一致性缓存等技术为AI大模型数据归集、训练、数据归档与管理等阶段提供…

安卓玩机工具----一键备份手机分区 防止全檫除或者格机导致安全数据分区丢失

工具说明; 目前玩机root后有很多格机脚本。模块等等误刷会导致基带信号等等问题&#xff0c;在前面的博文中我有介绍过备份主要数据分区的重要性 。其实对于不了解root和不安装有些模块 外挂等等需要的友友不建议对手机进行root。root后对于手机安全性会有所降低。对于玩家来说…

Python 全栈体系【四阶】(四十一)

第五章 深度学习 九、图像分割 1. 基本介绍 1.1 什么是图像分割 图像分割&#xff08;Segmentation&#xff09;是图像处理和机器视觉一个重要分支&#xff0c;其目标是精确理解图像场景与内容。图像分割是在像素级别上的分类&#xff0c;属于同一类的像素都要被归为一类&a…

【GA】deap之个体和种群概览(一)

参考资料 1.《基于遗传算法&#xff08;deap库&#xff09;的一元函数寻优代码详解》 2.官方文档:http://deap.readthedocs.io/en/master/index.html 3.《 Deap: python中的遗传算法工具箱》 &#xff0c;⭐️666 —————— 文章目录 壹、overview一、Types1. Fitness 适应…

八.吊打面试官系列-Tomcat优化-深入源码剖析Tomcat如何打破双亲委派

前言 上篇文章《Tomcat优化-深入Tomcat底层原理》我们从宏观上分析了一下Tomcat的顶层架构以及核心组件的执行流程。本篇文章我们从源码角度来分析Tomcat的类加载机制&#xff0c;且看它是如何打破JVM的ClassLoader双亲委派的 Tomcat ClassLoader 初始化 Tomcat的启动类是在…

【热门话题】实用Chrome命令:提升前端开发效率的利器

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 实用Chrome命令&#xff1a;提升前端开发效率的利器引言目录1. 快速打开Chrome …

基于C语言的贪吃蛇小游戏(简易版)

这篇博客会是对学习C语言成果的检测&#xff0c;为了实现贪吃蛇小游戏&#xff0c;我们用到的“工具”有&#xff1a;C语言函数、枚举、结构体、动态内存管理、预处理指令、链表、Win32 API等。 目录 1.简易版游戏效果 1.1欢迎界面 1.2游戏规则提示页面 1.3游戏进行页面 …
最新文章