您的位置首页百科知识

推荐一下测试电脑硬件的软件(鲁大师什么的自觉走开)?

推荐一下测试电脑硬件的软件(鲁大师什么的自觉走开)?

的有关信息介绍如下:

推荐一下测试电脑硬件的软件(鲁大师什么的自觉走开)?

处理器性能评估测试程序的选择一直存在争议,因为很难确定哪些程序能够代表广泛的应用场景。早期,人们使用MIPS、MFLOPS或平均指令延迟等简单指标来评估系统性能。随后,性能评估转向执行小型测试程序,如从实际应用中提取的核心算法。随着时间的推移,出现了如SPEC和TPC等组织,它们致力于建立针对各种关键工作负载(包括通用、Java、数据库、服务器、多媒体和嵌入式工作负载)的合理基准测试程序集。基准测试程序集不仅要尽可能准确地反映实际工作负载的行为,还应提供易于理解和比较的数值结果。如果已经获得了一组测试程序的分值,可以通过算术平均、几何平均或调和平均等方法来确定这些数值的中心趋势。

接下来,将简单说明什么是微基准测试程序,并介绍几个广泛认知的与CPU内核,缓存以及内存相关的基准测试程序。

在处理器的设计阶段,特别是在微架构设计探索过程中,我们寻求一种小型测试程序,它们能够在极短的时间内完成执行,并可在模拟器、RTL(寄存器传输级)仿真模型或FPGA(现场可编程门阵列)平台上运行。这些测试程序旨在覆盖微架构的关键特性,例如分支预测器的准确性、缓存的行为、流水线的效率、各种队列的尺寸、重命名寄存器的数量以及功能单元的数量等。这种需求催生了微基准测试程序(简称微测试程序)的诞生。

在处理器性能的测试与分析中,常用的微基准测试程序包括但不限于microbench、bp_microbench、LMbench、STREAM、Coremark、Coremark-pro以及Unixbench等。

微基准测试程序(microbenchmarks)是一系列精简的测试程序或代码段,它们设计用来精确评估处理器的特定组件或功能。德克萨斯大学奥斯汀分校的R.Desikan和Doug Burger在开发Sim-alpha模拟器时,为了校准模拟器与实际的Alpha21264处理器的性能,创建了一系列微测试程序。这些测试程序专注于评估处理器核心的特定模块,同时排除其他模块的干扰,使其特别适合在处理器设计阶段对特定模块进行选择和优化。例如,它们可以用于评估分支预测器模块、执行单元模块和访存流水线模块的性能,这些模块是评估流水线效率的关键因素。

通过对这些微测试程序的执行结果进行分析,设计者可以对处理器的微架构进行细致的调整和优化,以期达到更高的性能和效率。微测试程序因其快速反馈和针对性强的特点,在处理器设计和性能分析中扮演着不可或缺的角色。

SPECCPU2017 是 SPEC 组织于2017 年再次更新的 CPU 基准测试程序集, 包含43个基准测试程序, 分为4个测试程序集, 两个定点程序集SPECrate2017 Integer 和 SPECspeed2017 Integer, 以及两个浮点程序集 SPECrate2017 Floating Point 和 SPECspeed2017 Floating Point。

CPU2017 的工作集变得更大了, 如SPECspeed需要最小16GB内存, SPECrate在64位系统中的 每份拷贝最小需要2GB内存。 为了便于比较, SPECCPU产生一个分值来归纳基准程序的测试结果。

具体方法是将被测 计算机的执行时间标准化, 即将被测计算机的执行时间除以一台参考计算机的执行时间, 结果 称为SPECratio, SPECratio 值越大, 表示性能越好。 综合测试结果是取所有程序SPECratio的几 何平均值, 所有定点程序的平均值称为SPECint, 所有浮点程序的平均值称为SPECfp。

为了测 试多核系统的吞吐能力, SPECCPU还可以测试多个CPU核同时执行多份程序拷贝时的性能, 并且把CPU的时间转换为SPECrate 分数。 SPECCPU2017 略有不同, SPECspeed2017 允许通 过OpenMP 或者自动并行化对单个程序进行多线程并行化的执行, 测试的是系统多线程的性 能, 而不仅仅是单核单线程的性能, 它的程序集也和SPECrate不完全相同。

LMbench是由惠普(HP)以色列海法实验室开发的一套综合性微基准测试程序集,它专门设计用来测量影响系统性能的多种关键因素。LMbench使用ANSI C语言编写,遵循POSIX接口标准,是一个跨平台的开源基准测试工具,能够对包括文件I/O、内存操作、进程生命周期管理、网络通信等在内的多个系统性能指标进行评估。

LMbench主要关注两个核心性能指标:延迟(Latency)和带宽(Bandwidth)。带宽指的是系统在单位时间内传输数据的能力,这可以是各级缓存、内存或I/O子系统的带宽。LMbench通过不同的测试方法来衡量带宽,包括使用bcopy库函数、手工优化的循环展开bcopy、直接内存访问、非拷贝写操作、管道通信、进程间通信(IPC)以及TCP套接字等。这些测试可以通过read和mmap等系统调用API来实现。

延迟则反映了系统对请求的响应时间或执行某项操作所需的时间,例如缓存访问延迟、内存访问延迟以及操作系统中特定功能调用的开销。LMbench可以测量信号处理延迟、进程创建时间、上下文切换时间、进程间通信开销、文件系统延迟以及磁盘I/O延迟等。

Sun公司在开发UltraSPARC处理器以及Intel公司在开发Pentium Pro处理器的过程中,都曾利用LMbench来识别微处理器设计中的性能瓶颈。Linux操作系统在内核开发和性能调优过程中,也广泛使用了这些工具来优化系统性能。

LMbench的功能强大,能够提供丰富的性能数据,帮助开发者和系统架构师深入理解系统的运行机制,从而进行有效的性能优化。通过这些基准测试,可以更加精确地定位性能瓶颈,并采取相应的措施进行改进。

STREAM基准测试程序是一个专门设计来测量计算机内存带宽的合成测试工具。由John McCalpin在特拉华大学开发,STREAM基准测试因其简洁性和有效性,迅速成为工业界评估内存性能的标准测试程序。它提供了Fortran和C语言的实现版本,并支持单处理器和多线程执行模式,其中多线程版本包括利用OpenMP和MPI进行并行处理。

STREAM基准测试由四个部分组成:Copy、Scale、Add和Triad,每个部分都执行一个循环,目的是测量在不同操作下内存的带宽峰值。其基本原则是测试中使用的数组大小至少应为最后一级缓存(Last Level Cache, LLC)的四倍或者至少包含100万个元素,取两者中的较大值,以确保测试不受缓存大小的限制。

通常,由于并行处理的影响,多线程执行的内存带宽会比单线程执行的值要高。为了达到内存的饱和带宽,可以采取以下两种方法:

基于标准的STREAM测试程序,可以派生出其他测试内存带宽的程序。这些衍生测试通过改变数组访问的步长(stride),例如从stride=1的简单循环变为stride=N(N取值范围从2到40),或者采用反向步长stride=-1的循环,以及基于索引的数组操作(例如,使用索引进行数据加载和存储),来模拟不同的内存访问模式和工作负载。

通过这些变体,可以更全面地评估内存系统在不同访问模式下的性能,从而为内存系统的设计和优化提供有价值的信息。例如,不同的步长可以模拟不同的内存访问模式,如连续访问、随机访问或混合访问模式,这对于理解内存系统在不同工作负载下的行为至关重要。反向步长和基于索引的操作则可以揭示内存访问模式对性能的影响,尤其是在现代处理器中,这些特性可能会受到缓存策略和预取机制的影响。

CoreMark是一个全面的性能基准测试程序,特别设计用于评估嵌入式系统中中央处理单元(CPU)的性能。自2009年由嵌入式微处理器基准测试协会(EEMBC)推出以来,CoreMark已经逐渐取代了老旧的Dhrystone测试程序。CoreMark使用C语言编写,它主要包含以下几个方面的操作:

CoreMark的优点在于其代码量小、可移植性高、易于理解,并且是免费的。测试结果以单一分值表示,即每秒钟可以执行的迭代次数,这使得不同处理器之间的性能比较变得简单直观。CoreMark的设计避免了Dhrystone测试中的一些问题,例如:

CoreMark-Pro是EEMBC组织推出的并行基准测试程序,它用于更深入地测试处理器的流水线、存储子系统和多核性能。CoreMark-Pro包含以下几类应用:

CoreMark-Pro的设计使得它可以更全面地评估现代多核处理器的性能,特别是在并行处理和多任务执行方面的能力。通过这些测试,开发者可以更好地了解处理器在实际应用场景中的表现,并据此进行优化。

Linpack基准测试是一个用于评估计算机性能的标准化测试程序,它主要关注浮点运算性能。Linpack的全称是"Linear Algebra Package",即线性代数包,它最初是由Jack Dongarra等人在1970年代开发的。Linpack基准测试通过执行一系列线性代数操作,如矩阵乘法、矩阵分解等,来测量计算机的浮点运算速率。

以下是Linpack基准测试的一些关键特点:

Linpack基准测试是评估计算机性能的重要工具,特别是在需要大量浮点运算的科学和工程计算领域。然而,为了全面评估计算机系统的性能,通常需要结合其他基准测试,如处理整数运算、I/O性能、内存带宽等方面的测试。

Intel Memory Latency Checker(MLC)是一款专业的性能分析工具,它专门设计用来评估内存延迟和带宽,以及这些性能指标如何随着系统负载的增加而变化。MLC不仅能够测量内存的性能,还能评估从特定处理器核心到缓存或内存的传输效率。

为了比较测试结果,我们一般会进行多次测量。这样,我们就有了基准程序的N次测量结果,以及修改后程序的N次测量结果。我们需要一种方法来比较这两组数据,以确定哪个性能更好。

比较两个标量数值是相对简单的,但如果要比较两组数据,问题就变得复杂了。然而,如果我们能够将每组测量结果聚合成一个单一的数值,问题就会简化为比较两个数值。那要如何比较测试结果并选择最佳方案呢?之前写过的这篇文章做了简单介绍。

参考: 《计算机体系结构基础》第三版,机械工业出版社。