程序性能数据获取与分析技术

更新时间:2023-07-01 19:07:11 阅读: 评论:0

程序性能数据获取与分析技术
*车永刚1  王正华1  李晓梅2
(1国防科大并行与分布处理国家重点实验室 长沙 410073
2怀柔装备技术指挥学院 北京 101416)
*light_
摘要分析比较了已有的各种程序性能获取与分析技术,重点考察了使用硬件计数器来获取性能数据的技术,并介绍了微机上可用的两种工具——Vtune和PAPI。arrows
关键词性能数据获取;硬件计数器;Profiling
1.前言日语口译
应用程序质量好坏的一个重要指标是它在目标计算机上的性能。高性能不仅意味着问题求解时间的减少和开销的节约,还使某些对时间紧迫的任务变得可能。因此,应用程序实际性能的提高是人们非常关心的问题,大规模科学计算程序更是需要针对目标平台进行高度的性能优化。
现代高性能微处理器广泛采用多流出、深度流水、乱序执行、自动动态前瞻(speculation,或称推测执行)等技术,再加上多级存储层次的使用,大大提高了性能。但是程序实际获得性能与机器峰值性能之间却相差很远。实际上,硬件优化的范围还很有限,更加高级和稳定的优化来自优化编译器,而编译器优化有赖于精确的轮廓(profile)信息来验证变换的代码,需要更加高级的性能数据获取与分析工具[1]。正是随着一些高级性能分析工具的出现,使得一些高级的性能优化技术能够实现,如动态优化(Dynamic Optimization)[2]等。
一般来说,性能分析工具应该能回答或帮助程序员回答以下问题[3]:
(1) 程序性能如何?即对程序性能的总体评价。
(2) 程序在性能方面的主要问题在哪里?将性能问题与程序单元(函数、循环或者基本块、指令地址等)相关联,即性能瓶颈的定位。
(3) 引起程序性能瓶颈的主要原因何在?找准原因,才能对症下药。
你见或不见我本文主要探讨获取性能数据的各种方法与系统,并重点介绍了Wintel平台上可用的上两个工具:Vtune和PAPI,并就它们的使用作了一些研究。
2.性能数据获取与分析技术
2.1 静态分析
静态分析就是从源程序出发,结合目标计算机的体系结构进行分析,预测程序的性能。这种方法的代表有:
Cache不命中方程(Cache Miss Equation,CME)[4]:Princeton大学的Somnash Ghosh等提出,他们从源程序出发,结合存储层次模型参数,得到一组丢番图方程,求解之得到循环嵌套的cache不命中次数等指标。他们将这种方法应用于循环置换、数组Pad和循环分块等优化方法选择及参数选取中。
Modal性能模型[5]:这种模型基于对Cache和TLB行为的静态统计分析程序的存储性能,并用于指导对C与Fortran程序的bucket分块优化。
Pure-C 开销模型[6]:由Katajainen等提出,开始只是简单地统计程序中的各种指令操作来估计程序的执行时间。经过Bojen、Katajainen、Mortenn等人的精化,能够预测cache不命中和分支预测错误数[7]。
此外,Xavier Vera等也提出了基于分析的方法来预测cache命中率[8],对Spec95中的applu 程序,其cache命中率预测取得了较好的准确性。Hanlon等建构了一个在矩阵相乘期间的cache
不命中的分析模型[9]。
静态分析方法的优点:在简单情况下能够获得具有一定准确性的结果;速度快,适合于在编译时使用;程序和机器的各种参数能方便地调整。
静态分析方法的缺点:由于性能函数依赖于很多变量(系统结构、数值算法、数组大小等),各变量之间关系复杂,分析的准确性难以保证;优化编译器一般要对源程序进行各种变换,静态分析很难反映这种情况,预测准确性更值得推敲。
2.2 简单计时
测定程序中指定部分或整个程序的执行时间,是最常见的性能分析方法。各种编程语言中一般都提供获取系统时间的例程,用户可以在应用程序中插入取时间函数调用来获得时间。使用UNIX系统上常见的time命令,也可以获得程序执行的墙上时间、CPU时间、系统时间等。
计时方法的优点是所获得的时间准确性较高,在进行优化前后性能对比时很有用,并且能够帮助程序员定位性能瓶颈。但是,它不能给出性能为何如此的原因。所以,在高级性能优化过程中,还需与其他工具配合使用。
2.3 基于时间的profiling
基于时间的profiling也是一种计时。在程序执行前(如编译时),对可执行程序进行instrumentation(在应用程序中插入特定代码),应用程序执行期间收集程序各个函数的执行时间。Gprof就是这样一种工具,在Linux上如下使用:
(1)编译时候使用 –pg 选项:f77 –pg –O –o app app.f
(2)以正常的方式执行程序app
(3)使用gprof创建profile:gprof app > app.prof
app.prof是一个文本文件,其中包含应用程序的性能数据。
另外,Compaq Visual Fortran中的profliler等也能进行基于时间的profiling。
2.4 模型模拟
模型模拟方法以经过某种编译变换得到的程序、程序执行获得的trace(踪迹)数据、或者直接是可执行程序为输入,在一个性能模拟器(通常实现了计算平台的微体系结构)上执行它,通过此模拟器收集性能数据,并进行分析。如威斯康星大学体系结构研究工具集WARTS中的Dinero Ⅲ是Trace-driven的模拟器,SimpleScalar[10]是一个Execution-driven的模拟器。在[11]中,采用模拟方法来对数据并行和消息传递并行程序进行性能预测。
模型模拟方法的优点是:使用灵活,允许在大范围内改变参数,能够在计算平台可用前就进行验证;可以进行反向映射,即将性能问题与程序代码相关联。
模型模拟的主要缺点是执行速度比真实程序慢得多,难以在编译时使用;另外,由于对计算机系统完全模拟的困难,性能数据的准确性也难以保证。
2.5 使用硬件性能计数器
(1)硬件性能计数器[12]
硬件性能计数器(hardware performance counter)是处理器中一组特殊的寄存器,这些计数器或者计数事件,或者测量事件持续的时间。这里事件指的是与处理器功能相联系的一些信号的发生,监视这些事件可获得应用程序性能的细节信息。
大多数现代微处理器上都提供了硬件性能计数器。如Intel Pentium和P6处理器都包含两个40位的性能计数器,使得能够同时监视两个事件。Intel体系结构处理器中还定义了一个时间戳计数器(time stamp counter,TSC),并提供RDTSC指令读取TSC,用来监视处理器事件发生的相对时间。AMD Athlon处理器也提供4个48位的性能计数器、TSC和RDTSC指令。在Intel IA-64架构的处理器中,至少提供4个性能计数器与4个性能计数器溢出状态寄存器,并在体系结构上为操作系统进行性能监视器上下文切换提供支持。
性能计数器监视的与处理器性能相关的事件分为以下几类:
• 基本事件:时钟周期、引退指令
•  指令执行:指令译码、流出、执行,数据与控制前瞻,存储操作
• 周期统计事件:停顿和执行周期细分
英语音标mp3•  分支事件:分支预测
• 存储层次:Cache的访问情况
• 系统事件:操作系统监视器、指令与数据TLB
(2)使用性能计数器的Profiling
使用性能计数器的profiling一般先对应用程序进行instrumentation,然后执应用程序。在执行期间,通过所instrumentation的代码配置、启动、停止、清除和读取性能计数器,获得详细的性能数据。此外,也可通过采样的方式来使用处理器的性能监视硬件,采样可以通过硬件计数器溢出、时钟中断等触发软件中断来实现,如在DCPI中,采样计数器溢出时候进行。
为了允许用户级别对性能计数器的访问(通常是禁止的),需要操作系统提供事件监视设备驱动程序来包含初始化、启动、停止和读取性能计数器。
已有的使用硬件性能计数器来进行profiling的系统有:
DCPI[13]:Digital公司的持续轮廓分析工具。
PAPI[14]:访问性能计数器的标准化的API。
PCL[15]:跨平台的访问性能计数器的接口,与PAPI的高级接口非常相似。
Vtune[16]:Intel的集成的性能优化环境,能够访问硬件计数器。
SvPablo[17]:对应用程序进行浏览其性能数据的图形环境,通过PAPI工具包实现到硬件性能计数器的接口。
Rabbit[18]:Linux上的性能计数器库,提供从C语言中访问x86处理器中性能计数器的例程。
(3)优缺点
优点:使用硬件计数器极大地增强了profiling数据的质量与可靠性,扩展了可以独立或者相关联测量的
事件集合[19];速度快,系统开销很小[20, 21];一般能进行全系统范围的profile,并能够对不同粒度的程序单元进行profiling。
基于硬件计数器的profiling是实现动态优化的基础。例如,cache优化经常要求程序数据访问的详细的时间信息,传统的获取这种信息的技术非常昂贵,在动态优化系统中难以使用,而基于硬件计数器的profiling开销很小且数据准确,能满足动态优化系统的要求。Intel公司的动态优化项目就依赖于使用性能计数器来紧密地监视应用程序执行时的运行时行为[2]。
缺点:所获得的数据与体系结构相关,体系结构参数不可调;由于计数器数量有限,限制了程序一次执行中可以获得的性能信息的数目,对大型应用程序,获得足够的性能信息需要很长时间,通过时分复用(multiplexing)计数器可以部分解决这一问题[12];事件打滑(event skid):由于指令多流出、乱序执行、深流水线等因素,所采样的程序计数器值会与引发事件的指令地址不一致,如在P6处理器上,Vtune的事件采样会被记录在距引发该事件的指令5~10条指令处。
3.Intel Vtune和PAPI介绍
3.1 Intel Vtune[16]
Vtune是Intel为在Intel处理器和Microsoft Windows平台上开发高性能软件而提供的集成性能优化调整
环境。Vtune收集、分析与提供体系结构相关的性能数据,将这些数据与应用程序或操作系统例程相关联,并图形化地显示。在NT上,它能够访问处理器的硬件计数器。Vtune能够在性能分析的基础上对C、C++、Java或者Fortran程序的优化提出建议。目前Intel已经发布了Vtune 6.0。
(1)基本的性能分析
电脑发传真Vtune通过下列四种方式来获得程序的基本性能数据:
基于时间的采样(Time-bad Sampling,TBS)
TBS以固定时间周期进行采样,监视系统上所有活跃的程序,收集其性能数据(主要是各个进程所占时间百分比及选定监视的程序中各个范围的指令执行时间的百分比),然后Vtune性能分析器(Performance Analyr)对其进行分析,并提供系统活动情况的详细视图。它对识别程序中的热区有用。
基于事件的采样(Event-bad Sampling,EBS)
EBS基于处理器事件(包括存储层次、流水线、外部总线等的事件),使用硬件计数器监视系统上所有的软件的活动,获得程序的各种性能信息。
调用图Profiling(Call graph profiling)
调用图profiling提供一个函数调用了其他函数多少次、从函数中的哪些地方发出了多少次调用、每次调用所花的时间等信息。
静态代码分析(Static Code Analysis)
上面三种方法都需要对应用程序进行instrumentation,然后实际执行它。而静态代码分析只对应用程序指令进行静态分析,估计应用程序的性能。该分析得到的pairing数据是函数或基本块中指令能够成对(paired)执行的百分比,Penalties数据是该函数因各种原因而受到的损失,可使用它们来分析程序中蕴含的ILP。另外,使用源程序/汇编视图能够看到各个语句的执行时间。
(2)高级性能分析
静态汇编分析(Static Asmbly Analysis)
Vtune静态汇编分析器将应用程序中的热区或者静态函数反汇编,分析影响其性能的与体系结构相关的问题,在相应的汇编语句后面加上性能信息的注释。
动态汇编分析(Dynamic Asmbly Analysis)
Vtune动态汇编分析器执行应用程序,模拟与监视所指定的代码的性能,并准确识别导致性能问题的指令。它能够给出精确的关于cache和BTB的信息。
(3)优化指导
Vtune还能对如何优化应用程序性能提出指导建议,主要通过下面两个工具:
源代码级:Code Coach
code coach检查用户指定的代码块或者函数,查找优化可能。如果找到合适的优化方法,会在一个分开的窗口中显示优化建议。
汇编代码级(Asmbly Coach)
Asmbly Coach基于用户所请求的优化类型来提供优化建议,包括指令选择、指令调度、窥孔优化(Peephole Optimization:识别应用程序中的特定指令串,用单个等价的指令代替)、部分停顿消除(Partial Stall Elimination:使用等价的其他代码串替换可能发生部分停顿的代码串)。有三种操作模式:
自动优化:自动综合实施各种优化,只有最终结果
单步优化:逐步实施选择的优化技术,看得见中间步骤
交互式调度:Asmbly Coach建议优化的指令调度,用户交互地进行建议的指令调度或者基于更深的知识进行更好的调度
程序员可以使用它来辅助优化汇编程序或者反汇编的C代码。
我心目中的语文老师3.2 PAPI[12, 14]
PAPI(Performance Application Programming Interface)田纳西大学创新计算实验室开发的一组与机器无关的可调用的例程,提供对性能计数器的访问,其研究目的是设计、标准化与实现可移植的、高效的性能计数器API。
(1)支持的性能计数器事件globalsat
PAPI支持本地事件和52个预设事件。其标准事件分为4类:存储层次访问事件;周期与指令计数;功能部件与流水线状态事件;Cache一致性事件,与SMP系统的cache一致性协议相关。
随PAPI参考实现包含一个工具程序avail,可以检测用户平台具有哪些事件。
(2)用户接口
PAPI为用户使用性能计数器提供3种接口:
低级接口:管理用户定义的事件组(称为EventSet)中的事件,完全可编程,线程安全,为工具开发人员和高级用户提供方便
高级接口:提供启动、停止和读取特定事件的能力
图形界面(Perfometer):PAPI性能数据可视化工具。
( )Windows + x86平台上的PAPI (WinPAPI )
PAPI 支持x86 + Windows NT ,2000,XP 平台,其中使用WinPMC 内核设备驱动程序控制从用户应用程序中访问性能监视计数器及使用RDPMC 汇编指令。2002年2月的发布版本(PAPI
2.1.0)包含了PAPI 库、Perfometer GUI 、Fortran 和C 例子程序,MatLab 接口和帮助系统。
(4)我们在WinPAPI 上做的工作
WinPAPI 主要以API 方式提供给用户,用户必须在应用程序中包含头文件、PAPI 库及在程序中进行PAPI 函数调用,使用起来很不方便,而且对每个应用程序进行的都是重复的工作。图形用户界面工具Perfometer 的使用虽然不需要用户程序中调用PAPI 函数,但是用户程序必须包含Perfometer 库(perfometer.lib )和对Perfometer 函数的调用;并且Perfometer 使用Java Applet 来可视化数据,需
公务员备考要用户机器额外安装JDK 。此外,WinAPI 获得的数据多数是未经过加工的原始数据,从中不能直接看出应用程序的存储层次与流水线利用情况的好坏。
根据上述情况,我们对WinPAPI 作了一些工作:
对WinPAPI 的封装。将对PAPI 函数的调用都封装在一个工具软件中,用户应用程序中不需要调用PAPI ,只要给出应用程序名并指定需要测试的PAPI 参数(通过配置文件),由工具软件执行应用程序并控制性能数据的获取。这使得可以对任意的合法程序进行测试,不需重新编译应用程序,而且也方便了使用批处理方式获取程序的性能数据。
数据分析。在文献[22]中有关于程序的访存影响率、流水线影响率、性能发挥比率的计算公式,通常这些公式中的参数很难得到。而从PAPI 测试数据出发,这种计算就变得很容易。
设C1为L1 cache 不命中但在L2 cache 命中的访存延迟(周期),C2为L1 cache 、L2 cache 都不命中的访存延迟,Frq 为机器的主频(Hz ),F peak 为机器的峰值浮点性能(FLOPS ),T real 为程序的实际执行时间(秒),则
cache 不命中导致的时间开销:
T ()()Frq
C TCM L PAPI C TCM L PAPI TCM L PAPI CacheMiss /2_2_1_2__1_×+×−=访存影响率:
real cachemiss T T actor /F mem =流水线影响率:)T T __1real cachemiss peak pipeline F INS FP PAPI Factor -(×
−=
性能发挥比率:()real T __×=peak e performanc
F INS FP PAPI R  此外,从PAPI 测试数据出发还可以计算应用程序的其他特征信息:
L1数据cache 命中率:1)____/(_1_0.INS SR PAPI INS LD PAPI DCM L PAPI +−
L2数据cache 命中率:1.0 M PAPI_L1_DC M/ PAPI_L2_DC -程序平衡(每浮点操作对应的访存数目):
INS A/PAPI_FP_PAPI_L1_DC PAPI 参数的具体含义见相关资料。
我们将上述分析集成到了上面的工具中,当测试完PAPI 参数后,也计算并输出上述分析数据。根据这些数据,可以找到影响程序性能的主要原因。
2011河北中考数学
用VC 实现了上述工具的Windows 图形用户界面。用户从界面上选择需要测试的程序和希望获得的PAPI 参数,设置机器参数(如上面的C1、C2等),系统完成自动测试与数据的收集处理,在界面上显示结果,并生成报告文件。
4.结束语
目前程序性能分析技术与工具很多,程序开发人员可灵活选用,对优化应用程序的性能,缩短开发周期能够起到很好的作用。
参考文献
[1] Matthew C. Mertend et al, An Architectural Framework for Run-Time Optimization, Center for Reliable and High-Performance Computing
clever的反义词[2] /rearch/mrl/rearch/compilers.htm
[3]都志辉,汪剑平,程旭,许卓群,石利霞,一种HPF 程序的监测与分析工具,软件学报,1999年第10卷第

本文发布于:2023-07-01 19:07:11,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/163939.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:性能   程序   优化   计数器   数据   应用程序
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图