《用于跨距剖析软件应用的方法和设备的制作方法》由会员分享,可在线阅读,更多相关《用于跨距剖析软件应用的方法和设备的制作方法(5页珍藏版)》请在金锄头文库上搜索。
1、用于跨距剖析软件应用的方法和设备的制作方法专利名称:用于跨距剖析软件应用的方法和设备的制作方法技术领域:本发明涉及软件编译器,并且尤其涉及用于跨距剖析(profiling)软件应用的方法和设备。背景技术:在处理器和存储器速度之间的距离继续加大。结果,计算机性能逐渐地用高速缓存器分级结构的有效性来确定。然而,处理器工作量典型地会招致显著的高速缓存未命中。预取是用于改进高速缓存器分级结构有效性的公知且有效的技术。用于改进预取准确性的一种编译器技术在于统计地发现具有恒定“跨距(stride) ”的存储器访问指令 (例如,加载、存储等)。例如,加载每第十六个字节的加载指令易于被预取,这是因为编译器提前
2、知道将需要什么字节。然而,由于直到运行时才被解析的间接数组引用和指针废弃,导致编译器不能统计地发现具有恒定跨距的许多存储器访问指令。为了解决此问题,可以把“工具”代码(即,测试码)添加到软件应用以便直接监视由一个或多个存储器访问指令所访问的实际数据地址。然而,工具代码给软件应用增加了显著的开销,这使所述应用慢了下来(例如,慢了 10倍)。发明内容根据本发明的第一方面,提供了一种方法,所述方法包括基于由第一指令地址的第一指令访问的第一和第二数据地址之间的第一差确定第一跨距积;基于由位于所述第一指令地址的第一指令访问的第三和第四数据地址之间的第二差确定第二跨距积;以及计算所述第一跨距积和第二跨距积
3、的最大公约数。根据本发明的第二方面,提供了一种设备,所述设备,包括用于基于由第一指令地址的第一指令访问的第一和第二数据地址之间的第一差确定第一跨距积的部件;用于基于由位于所述第一指令地址的第一指令访问的第三和第四数据地址之间的第二差确定第二跨距积的部件;以及用于计算所述第一跨距积和第二跨距积的最大公约数的部件。根据本发明的第三方面,提供了一种装置,所述装置包括确定模块,用于基于由第一指令地址的第一指令访问的第一和第二数据地址之间的第一差确定第一跨距积,以及基于由位于所述第一指令地址的第一指令访问的第三和第四数据地址之间的第二差确定第二跨距积;以及最大公约数模块,用于计算所述第一跨距积和第二跨距
4、积的最大公约数。图I是图示用于所公开系统环境的示例性计算机系统的框图。图2是图示用于所公开系统环境的另一示例性计算机系统的框图。图3是包括加载指令的代码部分的例子。图4是示例性的阶段图。 图5是表示示例性机器可读指令的流程图,所述机器可读指令可以由一设备执行来实现用于跨距剖析软件应用的示例性方法。具体实施例方式在总体上,所公开的系统使用硬件性能计数器来报告与由某个事件(诸如数据高速缓存器未命中)所触发的存储器访问指令相关联的数据地址和指令地址。当相同的指令地址被与一个以上的数据地址相关联时,记录在两个数据地址之间的差异。当对于相同的指令记录了这些数据地址差异中的两个或更多时,该系统确定与所述指
5、令相关联的跨距是所述两个或更多差异的最大公约数。此跨距可以由编译器用来优化数据高速缓存器预取。另外,通过在审查阶段和跳跃阶段之间循环可以降低与监视数据高速缓存器未命中的地址相关联的任何开销。在审查阶段期间比在跳跃阶段期间监视更多的数据高速缓存器未命中。在图I中图示了示例性计算机系统100的框图。计算机系统100可以是个人计算机(PC),也可以是任何其它计算装置。在一个例子中,计算机系统100包括由电源103供电的主处理单元102。主处理单元102可以包括处理器104,所述处理器104由系统互连106电耦合到主存储设备108和一个或多个接口电路110。在一个例子中,系统互连106是地址/数据总线
6、。当然,本领域内普通技术人员应当容易地理解到可以使用不同于总线的互连来把处理器104连接到主存储设备108。例如,一个或多个专用线路和/或交叉开关可以用来把处理器104连接到主存储设备108。处理器104可以是任何类型的公知处理器,诸如来自微处理器的Intel Pentium 系列、微处理器的Intel Itanium 系列、微处理器的Intel Centrin 系列和/或微处理器的Intel XScale 系列的处理器。另外,处理器104可以包括任何类型的公知高速缓冲存储器,诸如静态随机存取存储器(staticr andom access memory SRAM)。主存储设备108可以包括动
7、态随机存取存储器(dynamic random access memory DRAM)和/或任何其它形式的随机存取存储器。例如,主存储设备108可以包括双数据率随机存取存储器(doubledata rate random access memory DDRAM)。主存储设备108还可以包括非易失性存储器。在一个例子中,主存储设备108依照公知方式来存储由处理器104所执行的软件程序。接口电路(一个或多个)110可以使用任何类型的公知接口标准来实现,诸如以太网接口和/或通用串行总线(Universal Serial Bus USB)接口。一个或多个输入设备112可以被连接到接口电路110以便把数
8、据和命令输入到主处理单元102中。例如,输入设备112可以是键盘、鼠标、触摸屏、跟踪板、轨迹球、等电点(isopoint)和/或语音识别系统。个或多个显不器、打印机、扬声器和/或其它输出设备114也可以经由一个或多个接口电路Iio被连接到主处理单元102。显示器114可以是阴极射线管(cathode raytube CRT)、液晶显示器(liquid crystal displays LCD)或任何其它类型的显示器。显示器114可以产生在主处理单元102操作期间所产生数据的可见指示。可见指示可以包括对操作员输入、所计算的值、所检测的数据等的提示。计算机系统100还可以包括一个或多个存储设备11
9、6。例如,计算机系统100可以包括一个或多个硬盘驱动器、光盘(compact disk)驱动器、数字化多功能盘驱动器(digital versatile disk DVD)和/或其它计算机介质输入/输出(I/O)设备。计算机系统100还可以经由到网络118的连接来与其它设备交换数据。网络连接可以是任何类型的网络连接,诸如以太网连接、数字用户线路(digital subscriber lineDSL)、电话线路、同轴电缆等。网络118可以是任何类型的网络,诸如因特网、电话网络、有线电视网和/或无线网络。在图2中图示了另一示例性计算机系统200。在此例子中,计算机系统200包括按 照所示互相连接的
10、处理器202、高速缓存器204、主存储器206、硬件性能计数器208、跨距确定模块210、最大公约数模块212和阶段管理器214。处理器202也可以是任何类型的公知处理器,诸如来自微处理器的IntelPentium 系列、微处理器的Intel Itanium 系列、微处理器的Intel Centrin 系列和/或微处理器的Intel XScale 系列的处理器。另外,处理器202可以包括任何类型的公知高速缓冲存储器204,诸如静态随机存取存储器(SRAM)。主存储设备206可以包括动态随机存取存储器(DRAM)和/或任何其它形式的随机存取存储器。例如,主存储设备206可以包括双数据率随机存取存
11、储器(DRAM)。主存储设备206还可以包括非易失性存储器。在一个例子中,主存储设备206依照公知方式来存储由处理器202所执行的软件程序。典型情况下,当处理器202遇到需要来自主存储器206的数据值的指令(例如,力口载或存储指令)时,计算机系统200首先检查所需要的值是否存储在高速缓存器204中。如果所需要的值存储在了高速缓存器204中(即,出现高速缓存器命中),那么不必从主存储器206获取所需要的数据值。然而,如果所述数据值没有存储在高速缓存器204中(即,出现高速缓存器未命中),那么可以从主存储器206获取所述数据值。在此例子中,每当出现数据高速缓存器未命中时,硬件性能计数器208就捕获
12、导致数据高速缓存器未命中的指令(例如,加载或存储指令)的地址和所需要的数据值的地址。在图3中图示了包括加载指令302的代码部分300的例子。在所图示的例子中,把加载指令302与指令地址“ 1005”,304相关联。类似地,把加载指令302与数据地址“2000+X”,306相关联。用于保持由处理器202作为执行加载指令302的结果所获取的数据值的存储单元取决于变址变量“X”(308)的值。例如,如果X = 0,那么加载指令使位于存储单元2000的数据值被获取。如果X = 48,那么加载指令使位于存储单元2048的数据值被获取。换句话说,保持加载指令302的存储单元是“1005”,并且每当由处理器
13、202执行此指令时,地址“ 1005”将与操作相关联。然而,保持作为执行此指令的结果而获取的数据值的地址可能会从加载指令302的一次执行到所述加载指令302的下一次执行发生变化,这取决于X的值。例如,如果X在加载指令302的每次执行之间增量48,那么加载指令302将加载存储单元2000、2048、2096等。在此例子中,加载指令302的跨距为48。跨距确定模块210使用从硬件性能计数器208接收的数据地址和指令地址来确定某些指令的跨距(如果有的话)。例如,由于每当通过包括加载指令302的循环310时X增加48,所以图3中的加载指令302的跨距为48。如果硬件性能计数器208捕获每个指令地址和相
14、关联的数据地址,那么跨距确定模块210就可能要监视指令地址1005的两次连续出现,继而从第一次出现的数据地址中减去第二次出现的数据地址以便确定跨距(例如,2048-2000 = 48)。然而,如果当出现高速缓存器未命中时硬件性能计数器208只捕获指令和数据地址,那么在与相同指令地址相关联的两个连续数据地址之间的差异可能是实际跨距的某个倍数。例如,图3中的加载指令302的跨距为48。然而,如果只有加载指令302的第一次出现(例如,数据地址=2000)和加载指令302的第六次出现(例如,数据地址=2240)遭到高速缓存器未命中,那么在这两个数据地址之间的差异(即,2240-2000)将是240(即
15、,48*5)而不是48。在此例子中,值240是“跨距积”。由于未报告的指令的出现(例如,由于未由硬件性能计数器208报告的数据高速缓存器命中)所致,跨距积是跨距值(例如,48)乘以某个跨距倍数(例如,5)。可以通过 从与相同指令地址相关联的前一数据地址值中减去一个数据地址值来确定跨距积(例如,2240-2000 = 240)。为了根据跨距积来确定实际的跨距值,计算机系统200包括最大公约数模块212。最大公约数模块212依照公知方式取得两个或更多的输入并且确定所述输入的最大公约数。特别地是,最大公约数模块212取得两个或更多的跨距积并且确定跨距值。例如,假定硬件性能计数器208报告相同的加载指
16、令302遭受了三次数据高速缓存器未命中。在此例子中进一步假定与加载指令302的第一次报告相关联的数据地址是2000,与加载指令302的第二次报告相关联的数据地址是2240,并且与加载指令302的第三次报告相关联的数据地址是2576。与此例子相关联的第一跨距积是240 (即,2240-2000)。与此例子相关联的第二跨距积是336 (即2576-2240)。240和336的最大公约数是48,并且在此例子中48是加载指令302的实际跨距。在大部分计算系统200中,使用来自硬件性能计数器208的高速缓存器未命中数据来确定跨距值给计算机系统200增加了处理开销。为了降低此开销,计算机系统200包括阶段管理器214。阶段管理器214在两个或更多阶段之间转变跨距确定模块210。在图4中图示了示例性阶段图。在此例子中,阶段管理器214在跳跃阶段402和审查阶段404之间转变跨距确定模块210。在跳跃阶段402的每个实例期间,跨距确定模块210要比在审查阶段404期间处理来自硬件性能计数器208的、更少的高速缓存器未命中报告。例如,在跳跃阶段402期间,对于