本文主要介绍一些常用的CPU benchmark,分上下两篇,本篇主要介绍一些单点benchmark,下一篇将介绍一些系统级的benchmark
a. Dhrystone2.1
下载地址:GitHub - wuhanstudio/dhrystone: "DHRYSTONE" Benchmark Program by Reinhold P. Weicker
测试目标:测试处理器单核整形运算性能,用于评估编译器和CPU处理整数和控制指令的能力;主要测试内核流水线的执行效率
测试原理:通过测试整数指令和控制功能,如赋值、动态数据读写、控制语句、过程调用和参数 传送、整数和逻辑运算等操作,来评判CPU的性能。其中其整数类型的操作数占到 73.2%,字符18.6%,指针5%
分值计算:单位是DMIPS,以VAX100(规定为为1DMIPS的处理器)为基准,其他处理器相对它 (基线1757)的比值
DMIPS = Number_of_runs * CPU频率(MHz)/ (total_cycle_num*1757)
性能分析:CPU整形计算能力,编译器和优化选型,C库都会对性能产生影响
b. Whetstone1.1
下载地址:netlib.org/benchmark/whetstonec
测试目标:测试CPU处理浮点和控制指令的能力
测试原理:选择一些典型指令综合起来形成的测试程序。定义的数据类型包括整型、长整型和双 精度浮点型;整型变量用来控制循环,双精度变量用来执行具体浮点操作;主要是简 单四则运算、数组运算、数组赋值、三角函数运算等浮点操作
性能分析:CPU硬浮点单元、主频、编译器和优化选项均可对性能产生影响
c. CoreMark v1.0
测试目标:测试处理器单核/多核整型运算性能,用于评估处理器流水线微架构、基本读写操作、整数运算和控制指令执行的性能, 替代Dhryston
测试原理:包含读写操作、整数操作和控制指令,代码量不超过16KB。用于测试处理器流 水线效率、cache访问和整点运算性。针对最普通的操作构造包括矩阵操作(用 来评估数学运算)、链表操作(用于评估指针操作)、状态机(评估跳转)和 CRC计算(嵌入式中的常用算法)等;相比Dhrystone不会受到编译器和library性 能的较大影响
性能分析:CPU整型计算能力、编译器和优化选
d. LMbench-3.0-a9
下载地址:LMbench - Tools for Performance Analysis
测试目标:处理器单核/多核Cache/DDR带宽时延性能,Linux OS基本操作性能
测试原理:主要包括是三种类型benchmarks:
Bandwidth benchmarks:包括Cached file read/Memory copy/Memory read/Memory write/Pipe/TCP;
Latency benchmarks:包括Context switching/Networking: connection establishment, pipe, TCP, UDP, and RPC hot potato/File system creates and deletes/Process creation/Signal handling/System call overhead/Memory read latency
Miscellanious:测试主频的mhz
性能分析:受CPU本身硬件设计规格影响;OS基本操作性能受内核版本以及配置的影响;编译选项尽量不要优化,优 化等级使用默认的-O即可
e. Stream5.9
下载地址:https://www.cs.virginia.edu/stream/FTP/Code/
测试目标:适用于处理器单核/多核内存带宽性能评测,支持多节点集群系统,评估内存子系统(Memory)带宽性能和基本的vector操作性能
测试原理:Stream基本的思路:建立数据块,用四种不同的操作方式(COPY、SCALE、ADD、 TRIAD)搬移数据块,计算消耗的时间从而得到内存系统的带宽。
COPY:将a数组赋值给b数组,即b[j]=a[j]
SCALE:将a数组乘以常数后赋值给b数组,即b[j]=k*a[j]
ADD:将a数组与b数组相加后赋值给c数组,即c[j]=a[j]+b[j]
TRIAD:将a数组乘以常数,再加上b数组然后赋值给c数组,即c[j]=b[j]+k*a[j] 目前,已经支持OMP机制实现多核性能测试,HPC领域常选用
性能分析:受CPU本身硬件设计规格影响,特别是内存的通道数、内存速率的影响; 尽量采用更多编译优化选项等手段。