提供关联关系并执行代码优化的方法和装置的制作方法

文档序号:6431874阅读:188来源:国知局
专利名称:提供关联关系并执行代码优化的方法和装置的制作方法
技术领域
本发明涉及计算机执行性能的优化,更具体而言,涉及跨物理平台进行的性能优化。
背景技术
信息技术的发展对计算机的执行性能提出了越来越高的要求。实践中,执行性能不仅依赖于计算机的物理平台,还取决于软件应用在执行时对物理平台的利用效率。如果软件和硬件之间具有良好的协同性(synergy),也就是,软件应用能够充分地利用物理平台的执行能力,才会获得比较高的执行性能。 为了提高执行性能,在开发和运行软件应用时,往往需要对软件应用进行优化,使其更好地适配于硬件平台。具体地,在软件代码执行过程中,处理器会对指令的执行情况进行采样和记录,形成性能采样数据。该性能采样数据可以反映出指令执行时发生的与硬件性能相关的行为和事件。通过分析这样的性能采样数据,可以获知特定指令在特定硬件平台上的执行状况。基于获得的执行状况,就可以对指令代码进行优化,消除引起性能缺陷的事件,从而提闻执行性能。具体而言,现有的多种处理器单元都可以提供硬件信号来指示出硬件性能事件。为了获取这些性能事件,可以在硬件平台上设置性能监视单元,该监视单元包含多种专用的硬件性能计数器,每个计数器通过转换器连接到一个硬件信号。OS内核中运行的采样器可以对这些计数器进行采样,上述采样可以周期性地进行或由性能监视器的溢出异常来触发。采样日志可以存储在内存缓冲之中,最后写入一个文档,由此形成性能采样数据。典型地,根据不同的硬件结构,在处理器中可能发生几十甚至上千种不同的硬件性能事件。这样的事件例如包括,指令高速缓存不命中(ICacheMiss),数据高速缓存不命中(DCacheMiss), TLB不命中(TLBMiss),指令流水线中止(Stall),流水线等待(Recycle),等等。事件的类型主要依赖于处理器的物理结构。这些事件会改变处理器的状态,是影响执行性能的重要因素。图I示出一个典型的性能采样数据的例子。在图I的例子中,性能采样数据被安排为一个表格,表格的每个条目,例如每行,示出一个指令的执行情况,包括指令的信息和与该指令相关的性能事件统计。指令的信息包括,例如,指令的模块名称(Mod),指令地址(Addr),(跳转指令的)目标地址(TargetAddr),指令操作码(Opcode),操作数(Operand),采样数(ticks)等;与该指令相关的性能事件统计包括发生如上所述的ICacheMiss,DCacheMiss, TLBMiss, Stall, Recycle等事件的采样信息。可以理解,根据物理平台的结构和性能监视单元的配置,性能采样数据可以包含更多的或不同的性能事件。一般地,所记录的至少一部分性能事件与指令执行时的性能缺陷有关。例如,图I中记录的各种高速缓冲不命中(CacheMiss)事件会使得处理器不能直接从高速缓冲中读取数据,流水线的Stall和Recycle事件会使得指令流的执行暂时地挂起或等待,等等。这些事件的发生都会使得处理器的执行速度和效率降低,引起性能缺陷,因此可以将这类事件称为性能缺陷事件。
因此,通过分析以上的性能采样数据,获得与性能缺陷相关的指令信息,就有可能克服这些缺陷,从而对代码进行优化,提高处理器的执行性能。图2示出现有技术中进行代码优化的示意图。如图所示,在同一物理平台上提供有优化器和执行单元。各种代码,包括软件应用的源代码、中间代码或转化之后的二进制代码,首先被输入到优化器中。如果代码是首次执行,那么优化器直接将代码转送到执行单元。在执行单元执行这些代码的过程中,如上所述,性能监视单元会生成与代码执行相关的性能采样数据。一旦获得这样的性能采样数据,优化器就可以通过分析性能采样数据而获得与性能缺陷相关的事件。基于性能缺陷事件,优化器可以对代码进行调整和优化,来试图消除或减小性能缺陷事件。接着,优化器将经过优化的代码再次传送到执行单元进行执行,从而再次生成性能采样数据。通过再次分析性能采样数据,优化器再次对代码进行优化,进一步去除性能缺陷。于是,经过这样的反复执行和调整,可以使得软件应用的代码更好地适合于执行平台。
在图2所示的优化过程中,代码的优化是基于对性能采样数据的分析,而性能采样数据是基于该代码在特定平台上的执行而生成的,因此,必须要在目标物理平台上首先对代码进行执行才可能对其进行优化,执行和优化须在同一物理平台上进行。然而,在实践中,软件应用的开发通常由技术人员在开发平台上进行,而其执行则通常在客户的硬件平台上进行。由于执行软件应用的硬件平台的物理特征各种各样,要针对每一硬件平台进行代码优化就需要在各种平台上进行代码执行,这必然产生非常昂贵的优化成本。另一方面,性能采样数据能够反映出物理平台上执行的指令信息,因此,由开发人员在客户的硬件平台上执行代码优化的方式有可能带来安全方面的隐患,例如泄漏源代码信息,或者泄漏客户方面的机密信息。因此,现有的性能优化方案在多方面存在不足。

发明内容
鉴于以上提出的问题,本发明提出一种跨平台进行性能优化的方案,旨在克服现有技术中存在的至少一项问题。具体地,根据本发明第一方面,提出一种提供关联关系的方法,包括获取与第一代码的执行相关的性能采样数据,该性能采样数据包括与所述第一代码对应的指令的信息和与所述指令对应的性能缺陷事件的信息;根据所述性能采样数据,构建至少一个指令序列,并确定所述至少一个指令序列与性能缺陷事件之间的关联关系;以及,将所述关联关系提供给其他物理平台,以供在该其他物理平台上基于所述关联关系执行第二代码的优化。根据本发明第二方面,提出一种执行代码优化的方法,包括获取如第一方面所提供的关联关系;根据所述关联关系,确定第~■代码对应的性能缺陷事件;以及基于确定的性能缺陷事件,优化第二代码。根据本发明第三方面,提出一种提供关联关系的装置,包括采样数据获取单元,配置为获取与第一代码的执行相关的性能采样数据,该性能采样数据包括与所述第一代码对应的指令的信息和与所述指令对应的性能缺陷事件的信息;关联关系确定单元,配置为根据所述性能采样数据,构建至少一个指令序列,并确定所述至少一个指令序列与性能缺陷事件之间的关联关系;以及,关联关系提供单元,配置为将所述关联关系提供给其他物理平台,以供在该其他物理平台上基于所述关联关系执行第二代码的优化。根据本发明第四方面,提出一种执行代码优化的装置,包括关联关系获取单元,配置为获取如第三方面的装置所提供的关联关系;缺陷确定单元,配置为根据所述关联关系,确定第二代码对应的性能缺陷事件;以及代码优化单元,配置为基于确定的性能缺陷事件,优化第二代码利用本发明的方法和装置,可以基于在目标物理平台上生成的指令序列与性能缺陷事件之间的关联关系,在开发平台上对开发代码进行优化,使其更好地适合于目标平台,从而实现跨平台的性能优化,并使得优化过程更加便利高效。


图I示出一个典型的性能采样数据的例子;图2示出现有技术中进行代码优化的示意图;图3示出根据本发明一个实施例的提供关联关系的方法的流程图;·
图4示出根据本发明一个实施例的执行代码优化的方法的流程图;图5A示出根据本发明一个实施例的确定关联关系的子步骤;图5B示出根据本发明另一实施例的确定关联关系的子步骤;图6示出根据本发明一个实施例对指令序列进行激烈和编码的例子;图7示出根据本发明一个实施例的关联关系的示意图;图8示出根据本发明一个实施例的确定性能缺陷事件的子步骤;图9A示出根据本发明一个实施例的提供关联关系的装置的示意框图;图9B示出根据本发明一个实施例的执行代码优化的装置的示意框图;图10示出适于用来实现本发明实施方式的示例性计算系统100的框图。
具体实施例方式下面对本发明的具体实施方式
进行详细描述。所属技术领域的技术人员知道,本发明的多个方面可以体现为系统、方法或计算机程序产品。因此,本发明的多个方面可以具体实现为以下形式,即,可以是完全的硬件、完全的软件(包括固件、驻留软件、微代码等)、或者本文一般称为“电路”、“模块”或“系统”的软件部分与硬件部分的组合。此外,本发明的多个方面还可以采取体现在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可用的程序码。可以使用一个或多个计算机可读的介质的任何组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是一但不限于——电的、磁的、光的、电磁的、红外线的、或半导体的系统、装置、器件或任何以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括以下有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPR0M或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任何合适的组合。在本文件的语境中,计算机可读存储介质可以是任何包含或存储程序的有形的介质,该程序被指令执行系统、装置或者器件使用或者与其结合使用。计算机可读的信号介质可包括在基带中或者作为载波一部分传播的、其中体现计算机可读的程序码的传播的数据信号。这种传播的信号可以采用多种形式,包括——但不限于一电磁信号、光信号或任何以上合适的组合。计算机可读的信号介质可以是并非为计算机可读存储介质、但是能发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序的任何计算机可读介质。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括一但不限于——无线、电线、光缆、RF等等,或者任何合 适的上述组合。用于执行本发明的操作的计算机程序码,可以以一种或多种程序设计语言的任何组合来编写,所述程序设计语言包括面向对象的程序设计语言-诸如Java、Smalltalk、C++之类,还包括常规的过程式程序设计语言-诸如“C”程序设计语言或类似的程序设计语言。程序码可以完全地在用户的计算上执行、部分地在用户的计算机上执行、作为一个独立的软件包执行、部分在用户的计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在后一种情形中,远程计算机可以通过任何种类的网络一包括局域网(LAN)或广域网(WAN)-连接到用户的计算机,或者,可以(例如利用因特网服务提供商来通过因特网)连接到外部计算机。以下参照按照本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明的多个方面。要明白的是,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得通过计算机或其它可编程数据处理装置执行的这些指令,产生实现流程图和/或框图中的方框中规定的功能/操作的装置。也可以把这些计算机程序指令存储在能指令计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令产生一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置(instruction means)的制造品。也可以把计算机程序指令加载到计算机或其它可编程数据处理装置上,使得在计算机或其它可编程数据处理装置上执行一系列操作步骤,以产生计算机实现的过程,从而在计算机或其它可编程装置上执行的指令就提供实现流程图和/或框图中的方框中规定的功能/操作的过程。下面参照附图,结合具体实施例对本发明进行描述。这样的描述仅仅出于说明目的,而不意图对本发明的范围进行限制。在本发明的多个实施例中,通过分析目标物理平台的性能采样数据,来获得指令序列与性能缺陷之间的关联关系,接着,在开发平台上利用获得的关联关系来优化代码,从而实现跨平台的性能优化。如前所述,性能采样数据可以反映出指令执行时发生的与硬件性能相关的行为和事件,其紧密地依赖于物理平台的硬件特征和该物理平台上执行的代码。也就是说,性能采样数据同时体现了物理平台的硬件特征和执行的代码特征。这也正是现有技术中必须先执行代码、产生对应的性能采样数据,才能根据该采样数据优化代码的原因。然而,在本发明的实施例中,通过分析性能采样数据,从中发掘出与指令序列和性能缺陷事件相关的统计规律,而获得指令序列和性能缺陷之间的关联关系,这样的关联关系仅仅反映出物理平台的硬件特征,而与所执行的代码无关。基于这样的关联关系,就可以在开发平台上进行代码优化,使得优化的代码更好地适合于目标物理平台,从而实现跨平台的性能优化。下面结合附图和例子具体描述本发明的实施例。根据本发明的实施例,跨平台进行性能优化的过程可以划分为两个阶段,S卩,在第一物理平台(例如目标物理平台)上执行的提供关联关系的方法,以及在第二物理平台(例如开发物理平台)上执行的基于关联关系进行代码优化的方法。图3示出根据本发明一个实施例的提供关联关系的方法的流程图。该流程图中的步骤可在第一物理平台上执行。具体地,如图所示,在步骤30,获取与第一代码的执行相关的性能采样数据,该性能采样数据包括与所述第一代码对应的指令的信息和与所述指令对应的性能缺陷事件的信息;在步骤32,根据所述性能采样数据,构建指令序列,并确定指令序列与性能缺陷事件之间的关联关系;以及,在步骤34,将所述关联关系提供给其他物理平台,以供在该其他物理平台上基于所述关联关系执行第二代码的优化。 基于如此提供的关联关系,就可以进行代码优化,从而提高执行性能。图4示出根据本发明一个实施例的执行代码优化的方法的流程图。该流程图中的步骤可在第二物理平台上执行。具体地,如图4所示,在步骤40,获取如图3方法所提供的关联关系;在步骤42,根据所述关联关系,确定第二代码对应的性能缺陷事件;以及在步骤44,基于确定的性能缺陷事件,优化第二代码,从而优化第二代码在第一物理平台上的执行性能。以下结合具体例子描述以上实施例的各个步骤。首先,在步骤30,在第一物理平台上获取与第一代码的执行相关的性能采样数据。第一物理平台可以是性能优化所针对的目标物理平台;第一代码可以是第一物理平台上执行的任意代码,包括各种软件、应用、程序的源代码、中间代码、二进制代码等。如前所述,现有的多种物理平台都提供有性能监视单元,用于对处理器产生的指示出硬件性能事件的信号进行采集和计数。同时,OS内核中运行的采样器可以对上述计数进行采样。在一个实施例中,为了获取性能采样数据,在步骤30中,在处理器执行第一代码期间,直接从上述采样器实时地读取采样结果,将采样结果进行汇聚和整理,从而获得性能采样数据。在另外的执行方式中,采样器会周期性地生成采样日志,并将其存储在内存缓冲之中,或者进一步地将采样日志从内存缓冲中读出,写入一个文档,并将其存储在硬盘特定位置。在此情况下,在步骤30中,可以直接从内存缓冲或硬盘的特定位置读取采样日志,将该采样日志形成为性能采样数据。如前所述,性能采样数据一般地包含有指令信息和相关的性能事件。相应地,通过以上的步骤30获得的性能采样数据会包括第一代码执行期间对应的指令,以及这些指令所导致的性能事件,包括性能缺陷事件。具体地,所获得的性能采样数据可以如图I的例子所示。然而,本领域技术人员可以理解,性能采样数据的内容依赖于物理平台的结构、物理平台上执行的指令代码、性能监视单元和采样器的配置等多种因素。随着这些因素的不同,步骤30中获取的性能采样数据相对于图I的示例可以包含更多的和/或不同的指令信息和性能事件。接着,基于获得的性能采样数据,在步骤32中对这些采样数据进行分析,从中构建指令序列,并发掘出指令序列导致性能缺陷的规律,也就是,确定出指令序列与性能缺陷事件之间的关联关系,使得这样的关联关系反映出第一物理平台的硬件特征而与其上执行的代码(例如,第一代码)无关。上述关联关系的分析和确定可以通过多种方式来实现。具体地,图5A示出根据本发明一个实施例的获取上述关联关系的步骤,也就是图3中步骤32的子步骤。在该实施例中,通过统计指令序列的出现次数和性能事件的出现次数来获得两者之间的关联关系。具体地,如图所示,在步骤3211中,根据性能采样数据构建指令序列。如上所述,性能采样数据一般按照指令的执行顺序记录了所执行的各个指令的信息,包括指令地址、操作码等等,如图I所示。对于没有按照一般顺序执行的跳转指令,性能采样数据会记录该指令的源地址和目标地址。因此,沿着性能采样数据的记录顺序进行回溯,必要时按照源地址和目标地址进行跳转,就可以获得指令的执行路径。根据这样的执行路径,就可以获得连续执行的多个指令,由此构建出由多个连续指令所构成的指令序列。在一个例子中,指令序列以指令的操作内容,更具体地,操作码进行识别。例如,图I的性能采样数据中连续出现的L (load,加载),MVC (move,移动),XC (or,或运算)和ST (Store,存储)就可以认为是一条指令序列。接着,在步骤3212中,统计各个指令序列在性能采样数据中的出现次数。然后,在步骤3213,统计各个指令序列对应的性能缺陷事件的出现次数。最后,在步骤3214,基于以上统计出的出现次数的比例,确定指令序列与性能缺陷事件之间的关联关系。具体地,在该步骤中,可以确定出各个性能缺陷事件的出现次数相对于指令序·列的出现次数的比例,并将得到的比例与预定阈值相比较,根据比较结果确定指令序列与性能缺陷之间的关联关系。例如,对于上述的L-MVC-XC-ST指令序列,假定在步骤3212中发现,该指令序列在性能采样数据中共出现了 100次。然后,在步骤3213中,通过核查性能采样数据发现,在执行该序列中最后一条指令ST时,85次发生了 TLBMiss事件,5次出现了流水线Stall状态,2次出现了 ICacheMiss事件。那么,在步骤3214中可以确定,在执行该指令序列时,有85 %的比例出现了 TLBMiss事件。假定预先设定的阈值比例为80 %,那么就可以确定,上述指令序列与TLBMiss这样的性能缺陷事件之间存在关联关系。在一个实施例中,还可以进一步引入关联度来表征关联关系的紧密程度。具体地,可以将上述出现次数的比例作为关联度的值。可见,图5A的实施例通过直接统计指令序列和性能缺陷事件的出现次数来确定其关联关系。在许多情况下,指令序列的数目极为庞大(尤其是在不限制序列长度的情况下),使得上述统计步骤的计算效率不够理想。因此,根据实际的计算资源,可以采用不同方式来实施步骤32,获取上述关联关系。在一个实施例中,在图5A的统计各个指令序列的出现次数的步骤3212之后,根据上述出现次数选择出频繁出现的指令序列。所述频繁出现的指令序列可以是出现次数超过特定阈值的指令序列。然后,在步骤3213,仅仅统计频繁出现的指令序列所对应的性能缺陷事件。这样,忽略掉出现频率不够高,因而不太具有代表性的指令序列,节省一部分统计计

ο在另一个实施例中,基于单个指令的性能事件来对指令序列进行初步筛选。具体地,对于性能采样数据中的每个单独的指令,获得执行该指令时出现的性能缺陷事件采样次数相对于该指令的采样次数的比例。如果该比例高于一预先设定的阈值,就把该指令作为可能导致性能缺陷事件的指令序列的结束指令。相应地,从该指令开始,沿着指令执行路径向前追溯一定数目的步数,从而得到候选的指令序列。例如,对于图I中的第6行的指令MVC来说,该指令的采样次数为14次,其中5次出现了 Recycle事件。假定这一比例高于预先设定的阈值,那么就可以认定,以MVC结尾的指令序列是有可能导致Recycle事件的序列。相应地,从该MVC出发,沿指令执行路径向前回溯就可以得到候选的可能导致Recycle的指令序列。另一方面,如果某个指令出现某种性能缺陷事件的比例低于上述阈值,就可以认为,该指令不太可能是导致该种性能缺陷事件的指令序列的结束指令,因而不必以该指令为起点进行回溯。由此,仅获取那些有可能导致性能缺陷事件的候选指令序列,从而节省一部分统计和计算。对于获取的候选指令序列,可以与图5A实施例类似地对其进行统计计数,从而最终确定指令序列与性能缺陷事件之间的关联关系。可以理解,本领域技术人员可以根据实际需要将以上几种实施例相结合,产生更多变体,来获得指令序列和性能缺陷事件之间的关联关系。替代地,与直接统计指令序列和性能缺陷事件的出现次数的方式不同地,在本发明另一实施例中,基于信息熵对指令序列进行聚类和分析,从而获得指令序列与性能缺陷事件之间的关联。图5B示出根据该实施例的确定关联关系的步骤。如图5B所示,在该实施例中,获取关联关系的步骤包括步骤3221,构建指令序列;步骤3222,选择出现频率较高的指令序列;步骤3223,基于信息熵对指令序列进行聚类和编码;步骤3224,结合性能事件的统计选择有辨识度的聚类;步骤3225,对选择的聚类进行进一步划分;在步骤3226,判断此时的聚类是否达到预定条件,在没有达到预定条件的情况下再次执行步骤3222-3225,直到达到预定的条件。下面具体描述上述各个步骤。 在步骤3221中,从性能采样数据中获得指令执行路径,根据指令执行路径获得多个指令序列。该步骤与图5A的步骤3211相类似,不再赘述。接着,在步骤3222,选择出现频率较高的指令序列。具体地,可以将指令序列的出现次数与预定阈值相比较,选择出那些出现次数超过阈值的指令序列;或者,可以将指令序列的出现次数进行排序,按照出现次数从高到低的顺序选择出特定数目的指令序列;还可以采用其他方式选择出现频率高的指令序列。接着,在步骤3223,基于信息熵对选择出的指令序列进行聚类和编码。信息熵是参考热力学中熵的概念而对信息的确定性、混乱度做出的度量。一般来说,一个系统越是混舌L其中变量的不确定性越大,信息熵就越大;反之,一个系统越是有序,信息熵就越低。现有技术中已经提出了多种方法在数学上对信息熵进行近似和估计。基于数学上估计的信息熵,可以对指令序列进行聚类,使得聚类之后指令序列所构成的系统的信息熵最小,也就是信息量最大。接着,对指令序列的聚类进行“编码”,也就是用不同代码来表示不同的类,从而便于后续的分析。在一个简单的例子中,基于指令序列中第一个指令是否为L或MVC,结束指令是否为ST对指令序列进行聚类。具体地,如果指令序列的第一个指令为L或MVC,将该指令序列的首指令特征标注为I,否则为O ;如果结束指令为ST,将该指令序列的结束指令标注为I,否则为O。同时,如果指令序列的结束指令处的Stall事件的比例超过20%,则将Stall事件标注为Y,否则为N。由此,可以获得图6所示的表格。可以看到,通过将指令序列进行聚类和编码,更容易示出并发掘出指令序列的规律。接着,在步骤3224,结合性能事件的统计选择有辨识度的聚类。具体地,统计以代码进行标注的聚类与性能事件之间的关联度,选择出关联度较大的聚类。仍以图6的表格为例,可以看到,标注为H的聚类出现了 8次,其中6次Stall事件的标注为Y。这时,可选择该聚类进行进一步分析,而不考虑其他聚类。可以理解,由于对指令序列进行了聚类和编码,我们损失了一部分的指令序列信息。例如,由于将所有首指令为L或MVC,结束指令为ST的指令序列都标注为1-1,我们损失了该聚类的其他特征。为此,在步骤3225,我们对选择的序列聚类进行进一步划分,恢复部分损失信息。例如,对步骤3224选择的聚类1-1,将其进行进一步划分,将首指令为L的指令序列分为一组,将首指令为MVC的指令分为另一组。对于每一组指令序列,在步骤3226,判断该组指令序列是否达到预定条件,在没有达到预定条件的情况下重复步骤3222-3224,再次进行聚类和选择,直到达到预定条件为止。上述的预定条件可以根据计算资源、所需精度等因素而进行设定,可以包括,例如每组中的指令序列的数量小于特定阈值、指令序列与性能事件的关联度达到特定阈值,等等。由此,通过先聚类再划分的方式,逐步从数量巨大的指令序列中提取出有辨识度的信息,获得指令序列与性能缺陷事件之间的关联关系。尽管以上结合具体例子描述了几种构建指令序列,并确定指令序列与性能缺陷事件之间的关联关系的实施例,但是,本 领域技术人员可以理解,以上实施例仅仅是示例性而非限制性的。在以上示例的基础上,本领域技术人员能够做出进一步的修改和变体,利用类似的或其他的方式提取出指令序列和性能事件之间的关联关系。这样的修改和变体也应包含在本发明范畴之内。图7示出根据本发明一个实施例获取的关联关系的示意图。在图7的例子中,关联关系以表格的形式示出。在该表格中,每一条目示出一个指令序列与一项性能缺陷事件之间的关联。例如,根据表格的第一行,指令序列{BNORC,(LTGR或LH),BERC}与性能缺陷事件Stall相关联,这意味着,连续执行这一指令序列会导致流水线出现Stall状态。在进一步的实施例中,还可以示出指令序列与性能缺陷事件之间的关联度,也就是,执行该指令序列会导致出现性能缺陷的概率。可以理解,关联关系也可以通过其他格式来存储和显示,而不限于图7的示例。对比图I所示的性能采样数据和图7示例的关联关系可以看到,性能采样数据中直接示出了各个指令的信息(例如,指令地址、执行次序、操作码、操作数,采样数等),因此,通过性能采样数据可以获得指令执行路径,进一步地,有可能通过解读指令执行路径(例如,利用反汇编工具)来获得物理平台上执行的代码信息,例如前述的第一代码的信息。然而,关联关系示出的是指令序列与性能缺陷事件之间的关联,该关联是基于指令序列与各种性能事件的统计而获得的,其中并不涉及各个指令的具体执行信息。因此,通过指令序列与性能缺陷事件之间的关联关系,并不能获知物理平台上执行的代码的信息。也就是说,上述关联关系仅与物理平台的特征相关,而与其上执行的代码无关,因而不会泄露代码信息。另一方面,在许多情况下,性能缺陷事件的发生并不是仅由单个指令的执行所导致,而是连续执行多个指令的结果。因此,发掘出连续执行的多个指令所构成的指令序列与性能缺陷事件之间的关联关系能更本质地反映出产生性能缺陷的规律,也更好地反映出物理平台的特征。鉴于以上所述的关联关系的特点,上述关联关系非常适合作为针对物理平台进行代码优化的参考准则。因此,接着,在步骤34,将这样的关联关系提供给其他物理平台,以供在该其他物理平台上基于所述关联关系执行第二代码的优化,所述第二代码可以不同于步骤30中的第一代码。具体地,在一个实施例中,可以将以上确定的关联关系存储在本地,并赋予特定的其他物理平台对该关联关系文件的访问权限。或者,在另一实施例中,在步骤34,可以将确定的关联关系直接发送到上述其他物理平台。在又一实施例中,还可以将确定的关联关系传输到一个关联关系共享平台,使得其他物理平台可以到这个共享平台获取关联关系。在第一物理平台根据图3的方法提供关联关系的基础上,可以在其他物理平台,例如第二物理平台上获取所述关联关系,并利用该关联关系进行代码优化,从而实现跨平台的性能优化,如图4的步骤所示。具体地,在步骤40,在第二物理平台获取上述关联关系。在一个实施例中,所提供的关联关系存储在第一物理平台上。这时,在步骤40中,通过第二物理平台直接向第一物理平台发出请求,请求读取产生的关联关系。在获得第一物理平台的授权响应之后,第二物理平台就可以从第一物理平台读取针对第一物理平台产生的关联关系。在另一实施例中,来自第一物理平台的关联关系存储在关联关系共享平台上,并添加有第一物理平台的标 签。在此情况下,在步骤40中,第二物理平台从共享平台读取针对第一物理平台的关联关系O可以理解,关联关系在各个物理平台之间的传递可以通过各种已知的和未来有可能采用的通信方式实现,包括利用无线、有线、光缆、RF等等各种介质,通过FTP,HTTP,POP3,SMTP等各种协议进行的传输。在第二物理平台获取了针对第一物理平台产生的关联关系的基础上,就可以在第二物理平台上进行针对第一物理平台的代码优化。具体地,在步骤42,根据所述关联关系,确定第二代码对应的性能缺陷事件;以及在步骤44,基于确定的性能缺陷事件,优化第二代码,从而消除或减小第二代码可能引起的性能缺陷事件。上述第二代码是有待在第一物理平台上执行的代码,也是有待进行优化的代码。图8示出根据本发明一个实施例的步骤42的子步骤,也就是确定性能缺陷事件的具体步骤。具体地,如图8所示,为了确定第二代码对应的性能缺陷事件,首先在步骤421,扫描第二代码,生成与第二代码对应的指令序列。接着,在步骤422,将生成的指令序列与获得的关联关系进行匹配,也就是,在获得的关联关系中查找是否存在对应的指令序列。如果找到匹配的指令序列,那么在步骤423中,根据指令序列与性能缺陷事件之间的关联关系,确定匹配的指令序列所对应的性能缺陷事件。可以理解,步骤423中确定的性能缺陷事件是假定当前的第二代码在第一物理平台上执行的情况下有可能出现的性能缺陷事件。基于如上确定或预测的性能缺陷,在图4的步骤44中,对第二代码进行优化,以消除和/或减少性能缺陷事件,从而优化第二代码在第一物理平台上的执行性能。步骤44的代码优化方式可以利用现有技术中通常采用的优化方式。例如,在一个实施例中,可以适当调整第二代码的执行顺序,从而减少可能导致性能缺陷事件的指令序列。例如,第二代码包含指令序列A,用于对多个操作数进行连续操作,但是该指令序列容易引起Stall事件。此时,如果指令序列A后面存在与时序不太相关的单独指令B,那么可以将指令B提前并插入在指令序列A中间,来打断有可能引起缺陷的序列A。在另个实施例中,通过添加附加代码进行代码优化。对于ICacheMiss, DCacheMiss, TLBMiss等高速缓存不命中事件,可以在扫描到导致这些事件的指令序列时,在这些指令之前添加一些额外的指令代码。这些额外的指令代码用于通知处理器将接下来可能使用的操作数、指令数据等预取到高速缓存中,由此避免在执行接下来的指令序列时出现高速缓存不命中事件。此外,本领域技术人员可以根据需要,对第二代码进行其他形式的修改和优化,从而使得第二代码能够在第一物理平台上闻效执行。由此,根据图4的实施例的方法,基于关联关系对第二代码进行了优化,提高了第二代码在第一物理平台上的执行性能。在以上描述的实施例中,首先在第一物理平台获取指令序列与性能缺陷事件之间的关联关系,然后在第二平台上基于上述关联关系来优化第二代码,从而实现跨平台的性能优化。如前所述,指令序列和性能缺陷事件之间的关联关系不涉及具体指令和代码,因此不会泄露第一平台上执行的代码信息,将这样的关联关系传递到第二物理平台也不会产生安全方面的风险。同时,上述关联关系更本质地反映出第一物理平台的硬件特征,因此,以关联关系为基础对有待执行的代码进行优化能够取得较好的优化效果。如此,如果技术人员想要针对目标平台优化所开发的软件应用,他不必像现有技术那样在目标平台执行该软件应用,而是可以直接在自己的开发平台上对软件应用的代码进行优化,从而使得性能优化的过程更加便利和高效。 基于同一发明构思,本发明还提供了执行性能优化的系统,该系统包括位于第一物理平台上的提供关联关系的装置和位于第二物理平台上的执行代码优化的装置。图9A示出根据本发明一个实施例的提供关联关系的装置的示意框图。如图9A所示,本实施例的提供关联关系的装置包括采样数据获取单元911,配置为获取与第一代码的执行相关的性能采样数据,该性能采样数据包括与所述第一代码对应的指令的信息和与所述指令对应的性能缺陷事件的信息;关联关系确定单元912,配置为根据所述性能采样数据,构建至少一个指令序列,并确定所述至少一个指令序列与性能缺陷事件之间的关联关系;以及关联关系提供单元913,配置为将所述关联关系提供给其他物理平台,以供在该其他物理平台上基于所述关联关系执行第二代码的优化。图9B示出根据本发明一个实施例的执行代码优化的装置的示意框图。如图9B所示,本实施例的执行代码优化的装置包括关联关系获取单元921,配置为获取图9A的装置所提供的关联关系;缺陷确定单元922,配置为根据所述关联关系,确定第二代码对应的性能缺陷事件;以及代码优化单元923,配置为基于确定的性能缺陷事件,优化第二代码。具体地,采样数据获取单元911从第一物理平台的性能监视器获取执行第一代码时记录的性能采样数据。所获得的性能采样数据可以如图I的例子所示,还可以包含更多的和/或不同的指令信息和性能事件。基于获得的性能采样数据,关联关系确定单元912对这些数据进行分析,从中构建指令序列,并发掘出指令序列导致性能缺陷的规律,也就是,确定出指令序列与性能缺陷事件之间的关联关系。在一个实施例中,关联关系确定单元912通过统计指令序列的出现次数和性能事件的出现次数来获得两者之间的关联关系。在另一实施例中,关联关系确定单元912进一步地对指令序列进行筛选,从而节省一部分统计计算。在又一实施例中,关联关系确定单元912基于信息熵对指令序列进行聚类和分析,从而获得指令序列与性能缺陷事件之间的关联。所获得的关联关系可以如图7所示例,也可以通过其他格式来存储和显示。进一步地,关联关系提供单元913通过多种方式将上述关联关系提供给其他物理平台,例如第二物理平台,以供在该其他物理平台上基于关联关系执行代码优化。在此基础上,第二物理平台中的关联关系获取单元921通过各种通信方式读取上述关联关系。然后,缺陷确定单元922将第二代码对应的指令与所述关联关系进行对比和匹配,确定第二代码对应的性能缺陷事件。于是,代码优化单元923可以基于确定的性能缺陷事件,优化第二代码,消除或减小第二代码可能引起的性能缺陷事件,从而优化第二代码在第一物理平台上的执行性能。对于以上各个单元的具体执行方式,可以参照之前结合方法流程和具体例子进行的详细描述,在此不再赘述。以上所述的性能优化方法和系统可以利用计算系统来实现。图10示出了适于用来实现本发明实施方式的示例性计算系统100的框图。如所示,计算机系统100可以包括〇卩^中央处理单元)101、狀1(随机存取存储器)102、1 01(只读存储器)103、系统总线104、硬盘控制器105、键盘控制器106、串行接口控制器107、并行接口控制器108、显示控制器109、硬盘110、键盘111、串行外部设备112、并行外部设备113和显示器114。在这些设备中,与系统总线104耦合的有CPU 10URAM 102, ROM 103、硬盘控制器105、键盘控制器106、串行控制器107、并行控制器108和显示控制器109。硬盘110与硬盘控制器105耦合,键盘111与键盘控制器106耦合,串行外部设备112与串行接口控制器107耦合,并行外部设备113与并行接口控制器108耦合,以及显示器114与显示控制器109耦合。应当理解,图·10所述的结构框图仅仅为了示例的目的而示出的,而不是对本发明范围的限制。在某些情况下,可以根据具体情况而增加或者减少某些设备。附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。虽然以上结合具体实施例,对本发明的方法、系统以及各个单元进行了详细描述,但本发明并不限于此。本领域普通技术人员能够在说明书教导之下对本发明进行多种变换、替换和修改而不偏离本发明的精神和范围。应该理解,所有这样的变化、替换、修改仍然落入本发明的保护范围之内。本发明的保护范围由所附权利要求来限定。
权利要求
1.一种提供关联关系以供代码优化的方法,包括 获取与第一代码的执行相关的性能采样数据,该性能采样数据包括与所述第一代码对应的指令的信息和与所述指令对应的性能缺陷事件的信息; 根据所述性能采样数据,构建至少一个指令序列,并确定所述至少一个指令序列与性能缺陷事件之间的关联关系;以及 将所述关联关系提供给其他物理平台,以供在该其他物理平台上基于所述关联关系执行第二代码的优化。
2.如权利要求I所述的方法,其中所述性能采样数据基于执行第一代码时产生的采样日志而形成。
3.如权利要求I所述的方法,其中所述确定至少一个指令序列与性能缺陷事件之间的关联关系包括 统计所述至少一个指令序列的出现次数; 统计所述至少一个指令序列对应的性能缺陷事件的出现次数;以及基于以上统计的指令序列的出现次数和性能缺陷事件的出现次数的比例,确定至少一个指令序列与性能缺陷事件之间的关联关系。
4.如权利要求3所述的方法,还包括:根据所述至少一个指令序列的出现次数选择出频繁出现的指令序列,并且所述统计至少一个指令序列对应的性能缺陷事件的出现次数具体为,仅仅统计所述频繁出现的指令序列所对应的性能缺陷事件的出现次数。
5.如权利要求I所述的方法,其中所述确定至少一个指令序列与性能缺陷事件之间的关联关系包括 选择出现频率较高的指令序列; 基于信息熵对指令序列进行聚类; 结合性能缺陷事件的统计选择有辨识度的聚类;以及 对选择的序列聚类进行进一步划分,直到达到预定的条件。
6.如权利要求5所述的方法,其中所述预定的条件包括以下中的至少一项所划分的组中的指令序列的数量小于第一特定阈值、指令序列与性能缺陷事件的关联度达到第二特定阈值。
7.一种执行代码优化的方法,包括 获取根据权利要求1-6中任一方法所提供的关联关系;以及 根据所述关联关系,确定第二代码对应的性能缺陷事件; 基于确定的性能缺陷事件,优化第二代码。
8.如权利要求7所述的方法,其中所述获取关联关系包括经由关联关系共享平台获取所述关联关系。
9.如权利要求7所述的方法,其中确定第二代码对应的性能缺陷事件包括 扫描第二代码,生成与第二代码对应的指令序列; 将生成的指令序列与获得的关联关系进行匹配; 根据所述关联关系,确定匹配的指令序列所对应的性能缺陷事件。
10.如权利要求7所述的方法,其中所述优化第二代码包括通过以下方式中的至少一项来消除或减少性能缺陷事件调整第二代码的执行顺序; 向第二代码添加额外的指令代码。
11.一种提供关联关系以供代码优化的装置,包括 采样数据获取单元,配置为获取与第一代码的执行相关的性能采样数据,该性能采样数据包括与所述第一代码对应的指令的信息和与所述指令对应的性能缺陷事件的信息;关联关系确定单元,配置为根据所述性能采样数据,构建至少一个指令序列,并确定所述至少一个指令序列与性能缺陷事件之间的关联关系;以及 关联关系提供单元,配置为将所述关联关系提供给其他物理平台,以供在该其他物理平台上基于所述关联关系执行第二代码的优化。
12.如权利要求11所述的装置,其中所述性能采样数据基于执行第一代码时产生的采样日志而形成。
13.如权利要求11所述的装置,其中所述关联关系确定单元配置为 统计所述至少一个指令序列的出现次数; 统计所述至少一个指令序列对应的性能缺陷事件的出现次数;以及基于以上统计的指令序列的出现次数和性能缺陷事件的出现次数的比例,确定至少一个指令序列与性能缺陷事件之间的关联关系。
14.如权利要求13所述的装置,其中所述关联关系确定单元还配置为根据所述至少一个指令序列的出现次数选择出频繁出现的指令序列,并且所述统计至少一个指令序列对应的性能缺陷事件的出现次数具体为,仅仅统计所述频繁出现的指令序列所对应的性能缺陷事件的出现次数。
15.如权利要求11所述的装置,其中所述关联关系确定单元配置为 选择出现频率较高的指令序列; 基于信息熵对指令序列进行聚类; 结合性能缺陷事件的统计选择有辨识度的聚类;以及 对选择的序列聚类进行进一步划分,直到达到预定的条件。
16.如权利要求15所述的装置,其中所述预定的条件包括以下中的至少一项所划分的组中的指令序列的数量小于第一特定阈值、指令序列与性能缺陷事件的关联度达到第二特定阈值。
17.一种执行代码优化的装置,包括 关联关系获取单元,配置为获取如权利要求11-16中任一项所述的装置所提供的关联关系;以及 缺陷确定单元,配置为根据所述关联关系,确定第二代码对应的性能缺陷事件;以及 代码优化单元,配置为基于确定的性能缺陷事件,优化第二代码。
18.如权利要求17所述的装置,其中所述关联关系获取单元配置为经由关联关系共享平台获取所述关联关系。
19.如权利要求17所述的方法,其中所述缺陷确定单元配置为 扫描第二代码,生成与第二代码对应的指令序列; 将生成的指令序列与获得的关联关系进行匹配; 根据所述关联关系,确定匹配的指令序列所对应的性能缺陷事件。
20.如权利要求17所述的方法,其中所述代码优化单元配置为通过以下方式中的至少一项来消除或减少性能缺陷事件 调整第二代码的执行顺序; 向第二代码添加额外的指令代码。
全文摘要
本发明提供了执行性能优化的方法和系统,所述方法包括在第一物理平台上获取与第一代码的执行相关的性能采样数据,根据所述性能采样数据确定指令序列与性能缺陷事件之间的关联关系,以及将所述关联关系提供给其他物理平台。在第二物理平台上可以获取所述关联关系,并利用所述关联关系优化第二代码,从而优化第二代码在第一物理平台上的执行性能。本发明提供的装置与上述方法对应。利用本发明的方法和装置,可以基于在目标物理平台上生成关联关系,在开发平台上对开发代码进行优化,从而实现跨平台的性能优化,并使得优化过程更加便利高效。
文档编号G06F9/45GK102955712SQ20111025235
公开日2013年3月6日 申请日期2011年8月30日 优先权日2011年8月30日
发明者邹嘉, 范伟, 侯锐, M·沃斯特, 王艳琦, 孙正雅 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1