用于基于硬件的边缘剖析的方法和系统的制作方法

文档序号:10552741阅读:212来源:国知局
用于基于硬件的边缘剖析的方法和系统的制作方法
【专利摘要】涉及用于基于硬件的边缘剖析的方法和系统。一种方法,包括:在目标程序代码的执行期间由硬件处理器中的性能监视计数器对硬件事件的每一次出现进行计数;在目标程序代码的执行期间将目标程序代码的预定义TBT尺寸的最后采纳分支依次且连续地存储在所述硬件处理器的采纳分支跟踪(TBT)设施的缓冲区中;每当所述计数等于采样速率时,触发对所述缓冲区的采样,以接收包括当前所述预定义TBT尺寸的最后采纳分支的TBT;基于所述目标程序代码构造每一个所述TBT的全分支跟踪;从每一个所述全分支跟踪中提取预定义截断分支跟踪(CBT)尺寸的最后分支,以接收所述每一个TBT的截断分支跟踪;以及递增地存储每一个所述截断分支跟踪以生成所述目标程序代码的边缘简档。
【专利说明】
用于基于硬件的边缘剖析的方法和系统
技术领域
[0001 ]本发明涉及反馈式代码优化的领域。
【背景技术】
[0002]反馈式代码优化(包括基本块重新排序、函数内联、循环展开等)是各种程序优化工具一一包括静态优化工具(例如,编译器和链路后优化器)以及动态优化工具一一所使用的有益程序优化。虽然边缘简档对于这种优化可能是极有效的,但是例如与基本块简档相反,收集边缘简档的任务可能是更加困难的。
[0003]相关技术的如述不例和与之有关的限制旨在是例不性而非排他性的。在阅读本说明书和研究附图之后,相关技术的其他限制对本领域技术人员将变得显而易见。

【发明内容】

[0004]以下实施例及其各方面结合旨在为示例性和例示性而非限制范围的系统、工具和方法而被描述和例示。
[0005]根据一个实施例,提供了一种方法,其包括:在目标程序代码的执行期间由硬件处理器中的性能监视计数器(PMC)对硬件事件的每一次出现进行计数;在所述目标程序代码的执行期间将所述目标程序代码的预定义采纳分支跟踪(TBT)尺寸的最后采纳分支依次且连续地存储在所述至少一个硬件处理器的采纳分支跟踪设施(TBTC)的缓冲区中;每当所述计数等于采样速率时,触发对所述缓冲区的采样,以接收包括当前所述预定义TBT尺寸的最后采纳分支的采纳分支跟踪;基于所述目标程序代码为每一个所述采纳分支跟踪构造全分支跟踪,其中所述全分支跟踪包括所述目标程序代码中在所述采纳分支跟踪的第一个采纳分支和最后一个米纳分支之间并且包括所述米纳分支跟踪的第一个米纳分支和最后一个采纳分支在内的所有已完成分支;从每一个所述全分支跟踪中提取最后分支的预定义截断分支跟踪(CBT)尺寸,以接收所述每一个采纳分支跟踪的截断分支跟踪;以及递增地存储每一个所述截断分支跟踪以生成所述目标程序代码的边缘简档。
[0006]根据另一个实施例,提供了一种计算机程序产品,其包括包含有操作程序代码的非暂时计算机可读存储介质,该操作程序代码可由至少一个硬件处理器执行,其中至少一个硬件处理器被配置为:在目标程序代码的执行期间对硬件事件的每一次出现进行计数;在所述目标程序代码的执行期间将所述目标程序代码的预定义TBT尺寸的最后采纳分支依次且连续地存储在缓冲区中;并且每当所述计数等于采样速率时,触发对所述缓冲区的采样,以接收包括当前所述预定义TBT尺寸的最后采纳分支的采纳分支跟踪,并且其中操作程序代码可由至少一个硬件处理器执行以:基于所述目标程序代码为每一个所述采纳分支跟踪构造全分支跟踪,其中所述全分支跟踪包括所述目标程序代码中在所述采纳分支跟踪的第一个采纳分支和最后一个采纳分支之间并且包括所述采纳分支跟踪的第一个采纳分支和最后一个采纳分支在内的所有已完成分支;从每一个所述全分支跟踪中提取预定义CBT尺寸的最后分支,以接收所述每一个采纳分支跟踪的截断分支跟踪;以及递增地存储每一个所述截断分支跟踪以生成所述目标程序代码的边缘简档。
[0007]根据另一个实施例,提供了一种包括至少一个硬件处理器的系统,这至少一个硬件处理器包括:采纳分支跟踪设施(TBTC),其包括缓冲区,该TBTC被配置为在目标程序代码的执行期间将该目标程序代码的预定义TBT尺寸的多个分支中的最后采纳分支依次且连续地存储在所述缓冲区中;性能监视计数器(PMC),其被配置为在所述目标程序代码的执行期间:a.对硬件事件的每一次出现进行计数,以及b.每当所述计数等于采样速率时,触发对所述BTF的采样,以接收包括当前所述预定义TBT尺寸的最后采纳分支的采纳分支跟踪,其中,硬件处理器通过执行操作程序代码而被配置为:基于所述目标程序代码为每一个采纳分支跟踪构造全分支跟踪,其中所述全分支跟踪包括所述目标程序代码中在所述采纳分支跟踪的第一个采纳分支和最后一个采纳分支之间并且包括所述采纳分支跟踪的第一个采纳分支和最后一个采纳分支在内的所有已完成分支,从每一个所述全分支跟踪中提取预定义CBT尺寸的最后分支,以接收所述每一个采纳分支跟踪的截断分支跟踪,以及将每一个所述截断分支跟踪递增地存储在存储设备中以生成所述目标程序代码的边缘简档。
[0008]在一些实施例中,所述预定义TBT尺寸的最后采纳分支的存储是以循环方式执行的。
[0009]在一些实施例中,所述采样速率是可变的,所述采样速率的值等于预定义数目与随机选择的德尔塔的求和,并且所述随机选择的德尔塔的值大大低于所述预定义数目的值。
[0010]在一些实施例中,一旦未采纳分支完成则所述计数等于所述采样速率,并且其中所述方法还包括将未采纳分支附加到全分支跟踪。
[0011]在一些实施例中,边缘简档是调用图简档,而分支是函数调用。
[0012]在一些实施例中,硬件事件的出现是目标程序代码的分支的完成。
[0013]在一些实施例中,硬件事件的出现是目标程序代码的指令的完成。
[0014]在一些实施例中,所述采样速率是预定义的。
[0015]在一些实施例中,缓冲区是循环的。
[0016]除了上面描述的示例性方面和实施例之外,另外的方面和实施例通过参考附图并且通过研究以下详细描述将变得显而易见。
【附图说明】
[0017]示例性实施例在参考的附图中被示出。在附图中示出的组件和特征的尺寸一般是为了演示的便利和清楚而选择的,而不一定是按比例示出的。附图在下面被列出。
[0018]图1示出了根据所公开的技术的一个实施例而构造且可操作的方法的流程图;
[0019]图2示出了根据图1中的方法的硬件(硬件处理器)和软件的操作的示例性方案的示意图;并且
[0020]图3示出了示例性程序的控制流程图(CFG)。
【具体实施方式】
[0021]所公开的方法、硬件处理器和计算机程序产品基于精确且轻量的方式而提供了可靠且均匀的边缘剖析,由于允许更快捷方式的软件优化。
[0022]边缘简档的关键属性是均匀性。均匀的边缘简档是简档中的任意两个边缘之间的比率与完整边缘简档的比率成比例(即,结果两个简档都呈现边缘分散的类似测量)的边缘简档。因为代码重新排序例如与边缘的相对执行计数(也称为“热度”)有关,因此均匀的边缘简档就代码重新排序而言可以具有与完整简档相同的质量。因此,可靠的均匀边缘简档对于像基本块代码重新排序和函数内联一样的许多反馈式优化而言可能是至关重要的。这种简档的可用性可以向底层平台提供竞争优势。
[0023]收集具有比完整简档更少的执行计数的均匀简档可能是优选的,因为其具有更低的开销并且因而其对程序执行的影响更小并且真实工作负载的更加精确模型可以被接收至IJ。近来的处理器配备有在这里叫做采纳分支跟踪设施(TBTF)的设施,该设施被配置为拍摄短采纳分支跟踪的快照。通常这些快照是按照指令的固定间隔或者周期来收集的。使用这些采纳分支来收集边缘简档是非均匀的,因为其由采纳分支组成故其跨度在完整分支流方面发生变化。当按照指令或者周期间隔进行采样时,由于分支的不同分布,产生附加的偏移。
[0024]所公开的边缘剖析提供了按照固定的(或者平均起来是固定的)分支相关间隔对固定数量信息的采样,这允许生成可靠的均匀边缘简档。
[0025]术语表
[0026]这里所提到的术语“分支”可以与程序代码(或者只是“程序”)中的指令有关,其当被计算机执行时可以使该计算机开始执行不同的指令序列,即分支到除当前指令序列中的下一指令之外的程序计数器。术语“分支”可以与任何类型的分支一一包括条件或非条件分支、函数调用和函数返回、直接或间接分支等一一有关。
[0027]术语“分支的完成”可以指代由计算机执行分支指令的动作。分支随后可以被采纳或者不被采纳。
[0028]这里所提到的术语“采纳分支”可以与使计算机开始执行除下一指令之外的程序的不同存储器位置中的不同指令序列(即,执行分支)的已执行分支有关。
[0029]这里所提到的术语“未采纳分支”可以与因为其条件未得到满足而未被采纳的已执行条件分支有关。反而,计算机可以继续执行当前指令序列,从而以继条件分支指令之后的指令开始。
[0030]这里所提到的术语“边缘简档”可以与记录程序中的分支被采纳或者未被采纳的次数的简档有关。
[0031]这里所使用的术语“全分支跟踪”可以与在程序的执行期间对该程序中的多个连续分支的记录有关,其中分支例如可以是采纳或者未采纳的。
[0032]这里所使用的术语“采纳分支跟踪”可以与对沿着程序中的特定执行路径的采纳分支的记录有关。
[0033]术语“采纳分支跟踪设施(Taken Branch Trace Facility,简称TBTC)”可以与在当代硬件处理器内构造的被配置为拍摄采纳分支跟踪的快照的设施有关。这种设施可以通过各种商业名称——像IBM公司的P0WER8处理器上的分支历史滚动缓冲区(BranchHistory Rolling Buffer,简称BHRB)或者英特尔公司的安腾2处理器上的分支跟踪缓冲区(Branch Trace Buffer,简称BTB)--获得。
[0034]术语“采纳分支跟踪(Taken Branch Trace,简称TBT)尺寸”和“截断分支跟踪(Chopped Branch Trace,简称CBT)尺寸”可以相应地与采纳分支跟踪和截断分支跟踪有关,其中尺寸按照分支的数目来衡量。
[0035]现在对图1进行参考,图1示出了根据所公开的技术的一个实施例而构造并且可操作的方法的流程图。在步骤100中,在目标程序代码的执行期间可以对硬件事件的每一次出现进行计数。硬件事件可以是目标程序代码中的分支的完成或者目标程序代码中的指令的完成。目标程序代码可以包括多个分支和多个指令。程序可以由用户提供以为了反馈式优化的目的而生成程序的边缘简档。目标程序代码可以指代在存储设备中存储的目标程序的二进制代码。
[0036]在一些实施例中,硬件事件可以是目标程序代码的指令的完成。在这种情况下由于目标程序代码的基本块的尺寸的差异而可能需要附加的规格化。相应地,曾在目标程序代码的每一个基本块中采样的样本(即,采纳分支跟踪)的数目随后可以按照基本块的尺寸来划分。
[0037]现在对图2进行参考,图2示出了按照图1中的方法的硬件(硬件处理器)和软件的操作的示例性方案的示意图。图1中的方法可以至少部分地由硬件处理器实现。硬件处理器220可以由底层系统提供。硬件处理器可以包括性能监视计数器(PMCUSOt3PMC 250可被配置为在程序二进制代码200的执行期间对程序二进制代码200中的采纳或者未被采纳的分支的每一次完成进行计数。程序二进制代码200可以包括待优化的目标程序代码。PMC 250可以是如在本领域中已知的硬件性能计数器。通常的硬件处理器可以包括可被连接到在执行期间发生的丰富事件集合(指令完成、分支完成等)的若干个PMC。
[0038]在一些实施例中,在程序的开始处,PMC事件处理器260可以(例如,通过运行程序二进制代码200的线程)被连接到程序二进制代码200以便被PMC 250应警告而调用。事件处理器260可以是可被PMC 250调用的子例程。程序二进制代码200随后可以经由硬件处理器而开始执行,同时硬件处理器通过PMC 250对程序二进制代码200的执行期间的分支(由B指示)的每一次出现进行计数。
[0039]在步骤110中,目标程序代码的预定义采纳分支跟踪(TBT)尺寸的最后采纳分支(即,预定义数目的最后采纳分支)在程序的执行期间可以被依次地并且连续地存储在缓冲区中。按照端到端相连的方式,TBT尺寸的最后采纳分支可以按照循环方式一一即通过使用尺寸与TBT尺寸相等的缓冲区——而被存储。参考图2,硬件处理器还可以包括TBTF 230。TBTF 230可以包括采纳分支循环缓冲区240,其尺寸与TBT尺寸相等。硬件处理器可以将TBT尺寸的最后采纳分支相应地存储在采纳分支循环缓冲区240中。
[0040]在步骤120中,每当计数(S卩,根据步骤100)等于采样速率(S卩,根据已完成分支数目的采样),缓冲区的采样就可以被触发以接收包括当前TBT尺寸的最后采纳分支的采纳分支跟踪。
[0041 ]参考图2,PMC 250可以被配置为根据采样速率(S卩,触发事件)来触发对TBTF 230的采样。当这种事件发生时,在采样速率分支指令B(即,第N个分支指令,而N等于采样速率)的完成之后,PMC250可以向PMC事件处理器260发出PMC警告。PMC 250可被预先设置为选中值(采样速率)并且可以每当分支被完成就被减小。当PMC 250达到零时,其可以生成中断,从而允许PMC事件处理器260对TBTF 230进行采样。PMC事件处理器260随后可以对TBTF 230进行采样,从而取回用T指示的采纳分支跟踪。T可以是TBT尺寸的最后采纳分支的有序列表——T[O: TBT尺寸-1 ],其中,例如,T[O]是在采纳分支循环缓冲区240中记录的最旧分支,而T[TBT尺寸-1]是最新分支。PMC事件处理器260可以将T传送到程序流跟踪器(PFT)270。PFT 270可以是作为线程执行的旨在生成程序流的跟踪的软件片段。PMC事件处理器260随后可以返回,从而向TBTF 230发信号以恢复操作。这是为了使程序执行中的干预最小化。TBTF 230在PMC事件处理器260的操作期间通常可被禁用,以使得其将不会对PMC事件处理器260的活动进行计数。
[0042]在一些实施例中,米样速率可以是预定义的。在一些实施例中,米样速率可以是可变的并且平均起来是固定的。通过将采样速率的值设置为等于预定义数目与随机选择的德尔塔的求和并且使得采样速率平均起来基本等于该预定义数目,采样速率可以平均起来是固定的。随机选择的德尔塔的值可以大大低于预定义数目的值以使采样保持均匀。因此,采样速率的值可以是可变的,但是大约为预定义数目的值。可以应用该方式以防止与可能导致偏倚的跟踪样本的目标程序代码片段同步。因此,PMC 250可被配置为每当采纳分支跟踪被生成时随机地选择德尔塔。另外,根据陈等人的、D(未注明日期)、可在http://www.australianscience.com.au/research/google/36358.pdf [访问于2014年10月30 日]处获得的 “Taiming Hardware Event Samples for FDO Compilat1n”,即使在缺乏同步的情况下,随机采样也可以改善采样的均匀性。
[0043]循环缓冲区的尺寸和采样的速率可以是硬件的软件设定,并且取决于可用硬件而可以是根据硬件线程或者硬件核心或者中央处理单元(CPU)的。
[0044]在步骤130处,可以基于目标程序代码为每一个采纳分支跟踪构造全分支跟踪。全分支跟踪可以包括目标程序代码中在采纳分支跟踪的第一个采纳分支和最后一个采纳分支之间并且包括采纳分支跟踪的第一个采纳分支和最后一个采纳分支在内的所有已完成分支。具体参考图2,针对每一个采纳分支跟踪T,PFT 270可以扫描程序二进制代码200中从采纳分支跟踪T中的最旧分支以后的代码。PFT 270随后在其检查如在采纳分支跟踪T中采样的程序执行流时可以记录其可以找到的所有已完成分支(包括采纳的和未被采纳的在内),从而为每一个采纳分支跟踪T构造全分支跟踪。
[0045]现在对图3进行参考,图3示出了示例性程序的CFG。说明文字bcl、bc2等指示条件分支(即,“be”代表“分支条件(branch condit1nal)” )。说明文字T指示采纳该分支的选项。说明文字NT指示不采纳该分支的选项。实线指示实际程序流,即哪些分支被完成以及它们被采纳与否。条纹线指示代码中的未执行路径。例如,在TBT尺寸等于4并且采样速率大于或者等于5的情况下,可以为该CFG生成全分支跟踪,其相应地可以包括四个采纳分支:bcl、bc2、bc4和触发分支(8卩,假定触发分支是采纳分支),以及五个已完成分支:bcl、bc2、bc3、bc4和触发分支。最旧采纳分支是bcl,而最新采纳分支是触发分支。所有采纳分支一一即bcl、bc2、bc4和触发分支一一可以是从采纳分支跟踪中提取的。全分支跟踪可以相应地在最旧采纳分支“bcl”与最新采纳分支“触发分支”之间延伸。未采纳分支--S卩bc3--可以是从目标程序代码中提取的。
[0046]在步骤140中,预定义截断分支跟踪(CBT)尺寸的最后分支(S卩,预定义数目的最后分支)可以是从每一个全分支跟踪中提取的,以接收每一个采纳分支跟踪的截断分支跟踪。CBT尺寸可以至多等于预定义TBT尺寸,以包括全分支跟踪中的分支都是采纳分支时的情况。
[0047]参考图2,PFT 270可以提取每一个全分支跟踪中的最后记录的CBT尺寸的分支,从而根据它们形成由F指示的截断分支跟踪。PFT270随后可以将截断分支跟踪F传送到边缘收集器(ECWSOt3EC 180可以为程序中的每一个执行边缘(即分支)保持计数器,以对其被采样的数目进行计数。这种计数器可以例如通过使用传统的散列、缓存方法或者边缘带有权重的CFG来访问。有利地,CBT尺寸可以被定义为尽可能地大,以允许在每一个采样实例处收集最多信息并且使得CBT尺寸是固定的,以实现均匀性。因此,CBT尺寸可以对应于可在每一个采纳分支跟踪中找到的分支的最大数目,因而CBT尺寸可以被定义为等于TBT尺寸。在一些实施例中,当造成警告(即,根据采样速率)的分支指令B是未采纳分支时,其可以被附加到全分支跟踪。参考图2,在这种情况下,PMC事件处理器260可以完成从最后采纳分支直到B的全分支跟踪。相应地,截断分支跟踪F在B中结束。如果B由于某种原因(例如,其不是被架构可靠地记录的)而无法被附加,那么因为采样跟踪中的最后一个分支总是采纳分支而可能存在朝向米纳分支的小偏倚。
[0048]在步骤150中,每一个截断分支跟踪可以被递增地存储,以生成目标程序代码的边缘简档。参考图2,EC 280可以将每一个截断分支跟踪递增地存储在存储设备(未示出)中。EC 280随后可以在程序二进制代码200完成时或者完成之后、或者在运行时期间当被请求时生成由此得到的简档。
[0049]根据所公开的边缘剖析,TBT尺寸的采纳分支的原始采纳分支跟踪T考虑到这种分支的最后CBT尺寸而被转化为CBT尺寸分支样本F。因此,当TBTF按照例如已执行分支的相等间隔而被采样时,每当对这种分支的恰好CBT尺寸采样时,可以接收均匀的边缘简档。可以将在运行期间执行的所有分支的完整跟踪看作一长串S的(采纳或未采纳)分支。根据采样速率(例如,每一个定义数目的分支)的采样和查看分支的最后CBT尺寸有效地以固定间隔(即,根据已执行分支)对S进行采样。因此分支在采样跟踪中出现的概率可以与其在S中的比例相同。
[0050]还公开了一种系统。该系统可以包括硬件处理器。该硬件处理器可以根据图1中的方法操作,并且可以类似于图2中的硬件处理器。硬件处理器可以包括TBTC和至少一个PMC。TBTC可以包括缓冲区。TBTC可被配置为在目标程序代码的执行期间将预定义TBT尺寸的最后采纳分支依次且连续地存储在缓冲区中。PMC可以被配置为在目标程序代码的执行期间对硬件事件的每一次出现进行计数,并且每当计数等于采样速率就触发对BTF的采样以接收采纳分支跟踪。采纳分支跟踪可以包括当前预定义TBT尺寸的最后采纳分支。该系统可以包括被配置为执行图1中的方法的一个或多个硬件处理器。
[0051]通过执行专用软件(S卩,包括在这里将被称作操作程序代码而不是目标程序代码的程序代码)硬件处理器可以被配置成基于目标程序代码为每一个采纳分支跟踪构造全分支跟踪,并且从每一个全分支跟踪中提取预定义CBT尺寸的最后分支,以接收每一个采纳分支跟踪的截断分支跟踪。另外,通过执行专用软件硬件处理器可以被配置成将每一个截断分支跟踪递增地存储在存储设备中,以生成目标程序代码的边缘简档。在一些实施例中,附加的单独硬件处理器可以执行专用软件以构造全分支跟踪、生成截断分支跟踪和边缘简档。在一些实施例中,如上所述的全分支跟踪、截断分支跟踪和边缘简档的构造也可以由诸如硬件处理器之类的硬件来执行。
[0052]在一些实施例中,边缘简档可以是调用图简档。调用图简档可以是仅包括函数调用边缘的边缘简档的子集。调用图简档可以是像函数内联一样的重要函数级优化的基础。因为其是一般边缘简档的更小子集,因此其可以被以更高频率采样以在没有附加开销的情况下接收更多详细调用简档。
[0053]调用图简档可以以与如在这里上面描述的边缘简档类似的方式利用所需修改来生成。例如,在这种实施例中,TBTF可被配置为仅记录直接和间接函数调用,并且PMC可被配置为对所有直接和间接函数调用进行计数。
[0054]本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。
[0055]计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是一一但不限于一一电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
[0056]这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
[0057]用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言一一诸如
Smalltalk、C++等,以及常规的过程式编程语言--诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络一一包括局域网(LAN)或广域网(WAN)—一连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。
[0058]这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
[0059]这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
[0060]也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
[0061]附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0062]对本发明的各种实施例的描述已经为了例示目的而被给出,但是并非旨在是穷尽无遗的或者局限于所公开的实施例。在不脱离所描述的实施例的范围和精神的情况下许多修改和变更对本领域普通技术人员而言将是显而易见的。这里所使用的术语是为了最好地说明实施例的原理、相对于在市场上找到的技术的实际应用或技术改进、或是为了使得本领域其他普通技术人员能够理解在这里公开的实施例而选择的。
【主权项】
1.一种方法,包括: 在目标程序代码的执行期间由至少一个硬件处理器中的性能监视计数器(PMC)对硬件事件的每一次出现进行计数; 在所述目标程序代码的执行期间将所述目标程序代码的预定义采纳分支跟踪(TBT)尺寸的最后采纳分支依次且连续地存储在所述至少一个硬件处理器的采纳分支跟踪设施(TBTC)的缓冲区中; 每当所述计数等于采样速率时,触发对所述缓冲区的采样,以接收包括当前所述预定义TBT尺寸的最后采纳分支的采纳分支跟踪; 基于所述目标程序代码为每一个所述采纳分支跟踪构造全分支跟踪,其中所述全分支跟踪包括所述目标程序代码中在所述采纳分支跟踪的第一个采纳分支和最后一个采纳分支之间并且包括所述采纳分支跟踪的第一个采纳分支和最后一个采纳分支在内的所有已完成分支; 从每一个所述全分支跟踪中提取预定义截断分支跟踪(CBT)尺寸的最后分支,以接收所述每一个采纳分支跟踪的截断分支跟踪;以及 递增地存储每一个所述截断分支跟踪以生成所述目标程序代码的边缘简档。2.根据权利要求1所述的方法,其中,所述预定义TBT尺寸的最后采纳分支的存储是以循环方式执行的。3.根据权利要求1所述的方法,其中: 所述采样速率是可变的, 所述采样速率的值等于预定义数目与随机选择的德尔塔的求和,并且 所述随机选择的德尔塔的值大大低于所述预定义数目的值。4.根据权利要求1所述的方法,其中,一旦未采纳分支完成则所述计数等于所述采样速率,并且其中所述方法还包括将所述未采纳分支附加到所述全分支跟踪。5.根据权利要求1所述的方法,其中,所述边缘简档是调用图简档,而分支是函数调用。6.根据权利要求1所述的方法,其中,硬件事件的出现是所述目标程序代码的分支的完成。7.根据权利要求1所述的方法,其中,硬件事件的出现是所述目标程序代码的指令的完成。8.—种计算机系统,包括用于实现权利要求1-7中任一项所述的方法的任何步骤的装置。9.一种包括至少一个硬件处理器的系统,所述至少一个硬件处理器包括: 包括缓冲区的采纳分支跟踪设施(TBTC),该TBTC被配置为在目标程序代码的执行期间将所述目标程序代码的多个分支中的预定义TBT尺寸的最后采纳分支依次且连续地存储在所述缓冲区中; 性能监视计数器(PMC),被配置为在所述目标程序代码的执行期间: a.对硬件事件的每一次出现进行计数,以及 b.每当所述计数等于采样速率时,触发对所述BTF的采样,以接收包括当前所述预定义TBT尺寸的最后采纳分支的采纳分支跟踪, 其中,所述硬件处理器通过执行操作程序代码而被配置为: 基于所述目标程序代码为每一个采纳分支跟踪构造全分支跟踪,其中所述全分支跟踪包括所述目标程序代码中在所述采纳分支跟踪的第一个采纳分支和最后一个采纳分支之间并且包括所述采纳分支跟踪的第一个采纳分支和最后一个采纳分支在内的所有已完成分支, 从每一个所述全分支跟踪中提取预定义CBT尺寸的最后分支,以接收所述每一个采纳分支跟踪的截断分支跟踪,以及 将每一个所述截断分支跟踪递增地存储在存储设备中以生成所述目标程序代码的边缘简档。10.根据权利要求9所述的系统,其中,所述缓冲区是循环的。11.根据权利要求9所述的系统,其中: 所述采样速率是可变的, 所述采样速率的值等于预定义数目与随机选择的德尔塔的求和,并且 所述随机选择的德尔塔的值大大低于所述预定义数目的值。12.根据权利要求9所述的系统,其中,一旦未采纳分支完成则所述计数等于所述采样速率,并且其中所述至少一个硬件处理器还被配置为通过执行所述操作程序代码而将所述未采纳分支附加到所述全分支跟踪。13.根据权利要求9所述的系统,其中,所述边缘简档是调用图简档,而所述多个分支是函数调用。14.根据权利要求9所述的系统,其中,硬件事件的出现是从由以下各项组成的组中选择的:所述目标程序代码的分支的完成和所述目标程序代码的指令的完成。
【文档编号】G06F9/45GK105912378SQ201610091582
【公开日】2016年8月31日
【申请日】2016年2月19日
【发明人】G·彻特拉斯贝格, M·克劳斯内尔, N·佩雷格, Y·雅瑞
【申请人】国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1