剖析代码部分以生成转译的制作方法

文档序号:6540656阅读:101来源:国知局
剖析代码部分以生成转译的制作方法
【专利摘要】本发明提供了剖析代码部分以生成转译。本公开提供可在硬件解码器模式和转译模式中操作的微处理系统。在硬件解码器模式中,硬件解码器接收非本地ISA指令并且将其解码成本地指令用于在处理管线中执行。在转译模式中,非本地ISA指令的本地转译在处理管线中执行而不使用硬件解码器。系统包括存储在硬件中的代码部分简档,其响应于硬件解码器的使用以执行非本地ISA代码的部分而动态地改变。代码部分简档然后用来动态地形成可在转译模式中执行的新的本地转译。
【专利说明】剖析代码部分以生成转译

【技术领域】
[0001]本公开总地涉及代码,并且更具体地,涉及剖析代码部分以生成转译。

【背景技术】
[0002]一些微处理系统支持非本地(non-native) ISA指令的本地(native)转译的使用。典型地,这些本地转译覆盖数个非本地指令,也许甚至成百上千个非本地指令。本地转译可采用各种优化或其他技术来提供相对于通过相应的非本地ISA指令的非转译执行可达到的性能优势。经优化的本地转译的性能优势与非转译代码在没有转译的情况下已被执行的次数成比例。因为存在用于创建转译的性能开销,所以瞄准频繁执行的代码使得开销可被摊销是可取的。


【发明内容】

[0003]本公开提供具有处理器核心的微处理系统,包括:处理管线,其具有在处理器核心上的硬件解码器,处理管线可操作在硬件解码器模式以及转译模式中,在硬件解码器模式中硬件解码器接收非本地ISA指令并且将其解码成本地指令用于执行,在转译模式中非本地ISA指令的本地转译在处理管线中执行但不使用硬件解码器;以及代码部分简档,其存储在处理器核心上的微架构硬件结构中,代码部分简档包含响应于硬件解码器的使用以执行非本地ISA代码的部分而动态地改变的信息,其中微处理系统可操作为使用代码部分简档来动态地形成在转译模式中由处理管线可执行的新的本地转译。

【专利附图】

【附图说明】
[0004]图1和图2是根据本描述的微处理系统的示意性描绘,其中代码部分剖析可被采用以协助形成覆盖一个或多个非本地代码部分的本地转译。
[0005]图3-5描绘可在图1和2的微处理系统中被记录和处理的数据记录的示例。
[0006]图6描绘可被采用以协助本地转译的形成的经剖析代码部分的控制流表示的示例。
[0007]图7描绘使用代码剖析来形成本地转译的示范性方法。

【具体实施方式】
[0008]本公开提供可用来支持非本地ISA代码的部分的转译的创建的系统和方法。在本文中示范性微处理系统可使用具有核心上(on-core)硬件解码器(HWD)的处理管线,该HWD接收非本地指令并将其解码成本地指令用于执行。当以这种方式使用HWD时,本公开将其称为执行的“硬件解码器模式”。
[0009]在本文中示例也可以采用执行的“转译模式”。在该模式中,例如通过将转译调度并且分派到一个或多个执行单元来检索并且执行本地转译而不使用HWD。本地转译可覆盖相应的非本地ISA代码的任何数目的部分并且为其提供大致等同的功能性。相应的本地转译典型地被优化到相对于如果相应的非本地代码使用HWD执行则将达到的某一程度。可以采用各种优化和优化级别。
[0010]当系统正在硬件解码器模式中进行操作时,系统可响应于HWD的使用以执行非本地ISA代码的部分而动态地改变并且更新代码部分简档。在某些实施例中,代码部分简档存储在核心上微架构硬件结构中以使能正利用HWD处理的代码的快速和轻量的剖析。然后可以以各种方式使用代码部分简档以协助动态地形成新的本地转译的过程。
[0011]在一些示例中,代码部分简档包括每个与已使用HWD加以执行的非本地ISA代码的一部分相关联的多个记录。记录可随着代码部分由HWD所处理而动态地添加。这些记录可不时地例如通过使用在本文中被称为“摘要器(smnmarizer)”的软件来进行采样和处理。结果是涉及HWD的代码部分控制流的经摘要表示,其可以用来指导新的本地转译的形成。在一些示例中,经摘要表示反映在控制流图中。在任何情况下,当被适当采用时,本文中的系统和方法改进标识应该在新的转译中被覆盖的代码部分的过程。换句话说,任何份额(quantum)的非本地ISA代码可以包括作为用于转译的欠佳候选的部分以及作为用于转译的良好候选的部分。本文中的示例改进标识代码部分相对于可能包括在转译中的其他代码部分是否是用于转译的良好候选的过程。
[0012]图1以简化形式示意性地描绘微处理系统100,其为本文所描述的系统和方法示例提供合适的操作环境。微处理器核心/裸片102不同地包括各种存储器和存储位置110和/或可与其通信,所述各种存储器和存储位置110可以包括LI处理器高速缓存114、L2处理器高速缓存116、L3处理器高速缓存118、主存储器120 (例如一个或多个DRAM芯片)、二级存储122 (例如磁性和/或光学存储单元)和/或三级存储124 (例如磁带群)。核心102还包括若干处理器寄存器112,其可以包括通用寄存器和专用寄存器二者。虽然在许多情况下至少LI高速缓存将在处理器核心上,但是L1-L3高速缓存可以或可以不在处理器裸片/核心上。将理解的是,虽然上文以访问时间和容量的递增次序列出了存储器/存储部件,但是存在可能的例外。存储器控制器126可以用来处置协议并且提供主存储器120所要求的信号接口,并且典型地用来调度存储器访问。存储器控制器可以实现在处理器裸片或分开的裸片上。将理解的是,上文所阐述的位置是非限制性的并且可以使用其他存储器/存储位置而不脱离本公开的范围。如所指示的,微处理系统100可以实现为具有一个或多个附加核心104的多核心系统。
[0013]微处理器进一步包括处理管线,其典型地包括下列中的一个或多个:获取逻辑128、HWD130、执行逻辑132、mem逻辑134以及回写逻辑136。获取逻辑128从位置110中的一个或多个(但典型地从主存储器和L2-L3高速缓存所支持的统一或专用LI高速缓存)检索指令。
[0014]当系统在上文所提及的硬件解码器模式中时,HWD130例如通过解析操作码、操作数和寻址模式来解码非本地ISA指令。HWD的输出是之后由执行逻辑所执行的本地指令。在转译模式中,检索并且执行本地转译而不需要使用HWD。在一些情况下,由HWD所输出的本地指令将被称为非转译指令,以将其与在不使用HWD的转译模式中被执行的本地转译相区别。可以以各种方式生成本地转译。在一些示例中,采用动态二进制转译器来动态地生成转译,但是本公开适用于其他转译方法。
[0015]应该理解,以上5个级某种程度上特定于并且包括在典型RISC实现方案中。更一般地,微处理器可以包括获取、解码以及执行逻辑,mem和回写功能性由执行逻辑实行。本公开同样适用于这些和其他微处理器实现方案。
[0016]图2示意性地、更详细地描绘了系统200以及用于剖析代码部分以标识那些代码部分是否应该以及如何被包括在新转译中的相关联的方法。在本文的示例中,经剖析代码部分典型地由所采取的分支来标识和定义。然而,这仅是示例,任何合适类型的代码部分或代码部分定义可连同本文所描述的系统和方法加以使用。除了其他方面,替代实现方案也可以依据未采取的分支来标识代码部分。更进一步地,除分支之外的特性和特征可以用来标识并且剖析代码部分用于在将形成的转译中使用。
[0017]系统200包括核心上处理管线202,其包括HWD204以及执行逻辑206。在硬件解码器模式中,非本地ISA指令208由HWD来解码,所述HWD依次输出非转译本地指令210用于由执行逻辑执行。在转译模式中,本地转译212从指令存储器被检索并被执行而不使用HWD0
[0018]系统200包括分支计数表220和分支历史表222,这二者典型地作为微架构硬件结构(例如在同一核心上作为HWD204和执行逻辑206)实现在处理器核心或裸片上。分支计数表和分支历史表的内容随着非本地代码部分由HWD所处理而改变。除了其他方面,分支历史表可以包括代码部分简档224,其具有随着HWD处理非本地指令的部分而动态地改变的信息。该代码部分简档用来形成新的本地转译。
[0019]分支计数表和分支历史表每个包括多个记录(即记录226和228)。在这两种情况下,记录包含关于随着分支指令被处理由HWD204所遭遇的非本地代码部分的信息。一般而言,分支计数表跟踪分支目标地址被遭遇的次数,而分支历史表记录关于当分支目标地址被遭遇时所采取的分支的信息。
[0020]系统200典型地将包括用于添加并且更新分支计数表和分支历史表中的记录的微架构逻辑。该逻辑可以是各异的组件或者分布在图1和2所示出的各种示范性管线级(pipestage)内。在许多情况下,因为HWD的使用导致分支计数表和分支历史表的改变,所以该逻辑将与HWD可操作地紧密耦连。箭头218 —般指示HWD204和执行逻辑206的操作使分支历史表和分支计数表中的记录被填充、更新等。
[0021]图3更详细地示出分支计数表的示范性记录226。记录包括分支目标地址226a。分支目标地址以某种方式标识随着HWD处理并且产生所采取的分支而至少部分地由HWD所执行的非本地代码部分。在一个示例中,HWD处理导向并且退出到与分支目标地址相对应的本地转译的代码的非本地部分。在另一个示例中,分支指令及其目标二者都不是相应的本地转译的一部分。在又一个示例中,分支目标地址与以从本地转译退出开始的代码部分相对应。将理解的是,在所有三个示例中HWD在某些方面被涉及,并且因此收集关于HWD的这类使用的信息是可取的。
[0022]如图3所示,分支计数表记录可以包括计数226b。如将更详细描述的,计数226b响应于HWD遭遇分支目标地址226a而改变(例如增量或减量)。如下文所更详细解释的,当计数器饱和(下溢、上溢等)时可采取事件。
[0023]应该理解,图3所描绘的记录仅是一个非限制性示例,并且可以采用大量变化以跟踪使用硬件解码器的代码执行。记录可以用来对多个目标地址而非单个分支目标地址进行计数。也可以采用部分地址。更一般地,并且如其他地方所描述的,所跟踪的代码部分可以除由分支目标之外被标识。
[0024]图4示出了分支历史表222的示范性记录228。与分支计数表类似,记录包括分支目标地址228a。对于产生目标的分支,记录中的附加信息包括顺序地下一个指令信息228b、分支是直接还是间接的指示228c、分支类型的指示228d。下文将详细地描述该附加信息。顺序地下一个指令信息228b在本文中被用作用于对产生目标的分支加以区别的机制的示例;将理解的是,其他机制可以用来达到该相同目的。如下文所描述的,信息228b也可以用来确定代码执行的控制流图表示中的落空路径、偏移以及出站边缘的排序。作为一个替代示例,可通过使用分支自身的地址随同附加的位一起描述分支指令的长度来确定边缘排序和落空。然而,将理解的是,可以观察其他/不同信息以构造有意义的控制流表示。记录228中的具体信息仅是一个非限制性示例;可采集关于代码部分的各种各样的其他信息用于在确定是否以及如何将这些代码部分合并到本地转译时使用。
[0025]分支计数表和分支历史表的功能是在HWD以某种方式涉及分支指令的处理的情况下收集关于所采取的分支的目标的信息。因此,在一些示例中,记录将不针对具有或是相应的本地转译的一部分的目标地址而被记录,因为该环境中的执行典型地将不涉及HWD,并且因此因为转译已经存在所以不需要或者较少需要剖析执行。例如,如果系统具有用于起始于给定的分支目标地址的代码的非转译部分的本地转译,那么系统可经配置使得该分支目标地址不具有分支计数表或分支历史表中的相关联的记录。
[0026]在一些示例中,转译的存在可使用也称为THASH的核心上硬件重定向器282来确定。硬件重定向器是包括地址信息的微架构结构,所述地址信息足以允许处理管线经由地址映射检索并且执行与代码的非本地部分相关联的转译。具体地,当处理管线分支到ISA代码的非本地部分的目标地址时,在硬件重定向器中查找地址。如所指示的,可经由由执行逻辑206所实施的计算来生成提供到硬件重定向器的地址。如果命中,那么查找将相关联的转译的地址返回,其之后在转译模式中被获取并且执行而无需HWD。因此THASH查找可充当关于是否添加/更新分支计数表和分支历史表中的记录的筛选(screen)。具体来讲,THASH命中意指已经存在用于非本地目标IP的转译,并且因此不需要剖析目标代码的该部分的硬件解码器执行。
[0027]在任何情况下,当HWD在代码部分的执行中首先遭遇分支目标地址时,用于分支目标地址的记录被添加到分支计数表并且初始值被插入计数226b。可替代地,如果对于目标地址来说记录已经存在,那么计数226b视实现方案的情况而增量或减量。当在分支计数表中添加或更新记录时,用于该相同分支目标地址的记录被添加到分支历史表222。
[0028]在一个示例中,分支历史表实现为循环缓冲区。每个记录包含如上文所指示的所采取的分支的属性。当缓冲区是满的时,随后的写仅擦除最旧的条目,并且栈顶指针回绕(wrap around)ο另外,应该注意,在下面三个情况中的一个或多个中可以更新并且插入记录:(I)在分支目标地址是转译的出口的情况下;(2)在分支目标地址是转译的入口的情况下;以及(3)在分支从非转译部分(HWD模式)跳到另一非转译部分的情况下。重申,在通过分支定义代码部分的系统中,令人感兴趣的可能是剖析从HWD模式到转译模式的分支,并且反之亦然,以及代码的非转译部分之间的分支(即管线保持在HWD模式中用于源代码部分和目标代码部分这二者的情况)。
[0029]再次参考图2,示例描绘与采样并且处理来自分支历史表的信息以生成并且完善本地转译相关联的各种附加的代码和数据。为了帮助理解,这些组件标示为与由该代码所产生或消耗的数据不同的代码(例如处理例程)。具体来讲,如根据下文的论述将显而易见的,摘要器240a、摘要器240b、区域形成器270和转译器272是代码,而队列242、MBHT260和追踪高速缓存280是数据结构。
[0030]继续图2,可以采用摘要过程来对分支历史表中的记录进行采样和处理以帮助形成新的本地转译。如下文所描述的,典型地将摘要活动实现为分开的前台处理线程和后台处理线程是可取的。如本文所使用的,前台处理是指对正被仿真的非本地ISA指令取得架构上的进展负责的操作。相反,后台线程可实施不直接涉及在架构上前进的操作,并且那些线程可在其他核心上运行。一般而言,本文中的示例预期对关于使用硬件解码器所执行的代码的信息的轻量前台采样,该信息经排队用于由运算量更大的后台线程进行最终处理。
[0031]在所描绘的示例中,摘要器包括前台摘要器240a,其可实现为当分支计数表中的记录产生事件(例如用于记录的计数器饱和)时被触发的轻量事件处置器。换句话说,分支计数表220产生事件,摘要器240a处置事件。分支计数表中所维持的、用于目标地址的计数用来控制相关联的代码部分在事件针对该代码部分被采取之前将被遭遇多少次。如下文所更详细描述的,摘要器之一可以控制用于分支计数表的记录的计数器值。
[0032]在所描绘的示例中,前台摘要器240a通过对来自分支历史表的一个或多个记录228进行采样以及将关于那些记录的信息放置在队列242中用于由后台摘要器240b进行随后的处理来处置事件。例如,如果当上溢针对分支目标发生时分支计数表触发事件,那么之后前台摘要器可对用于该分支目标的相应记录进行采样,所述记录被添加到分支历史表。在一些情况下,前台摘要器还将对分支历史表中的一个或多个相邻条目进行采样。例如,前台摘要器可对紧接在前的记录进行采样以标识分支为起始于各自的分支目标地址的部分的代码部分。前台摘要器还可以对随后的条目进行采样以标识从部分流出的控制流。
[0033]在所描绘的示例中,队列242包含记录244,并且如图5的示范性记录244所示,经排队的记录可以包括记录在分支历史表的记录中的相同信息,诸如分支目标地址244a、顺序地下一个指令信息244b、直接/间接指示244c以及分支类型的指示244d。此外,前台摘要器可以插入TLB信息244e。摘要过程的最终结果之一是标识要包括在新的本地转译中的非转译代码部分。在所描绘的示例中,分支计数表和分支历史表中的记录使用线性地址,并且TLB信息使能到物理地址的转换,使得系统知道在何处检索要优化的指令。
[0034]为了帮助前台采样的轻量操作,分支计数表和分支历史表典型地将实现为允许对来自分支计数表的触发的快速读取和快速识别。在一个示例中,提供流式64位读取能力以允许前台摘要器迅速获得关于分支历史的必要信息并且将它进行排队用于例如由后台摘要器进行随后的处理。一般地,实现前台摘要器以便在最低限度地阻碍向前的架构进度的同时从分支历史表获得所期望的信息,这将是可取的。
[0035]后台摘要器240b实现为后台处理线程,其处理队列242的记录244。在一些情况下,在另一核心上运行后台摘要器将是可取的,所述核心例如图1的核心104。实施示例中的处理以生成和更新进入、离开以及在由HWD所处理的非本地代码部分之间的控制流的表示。该表示在图2中标识为元分支历史表(ΜΒΗ?260。关于代码部分的信息和控制流可以以任何合适的方式、数据结构等加以表示。MBHT中的信息由区域形成器270所消耗,所述区域形成器270对形成将被处理以形成新的本地转译的区域负责。转译的实际过程由标识为转译器272的软件来实施。一旦形成,转译就可以存储在一个或多个位置中。在本示例中,转译存储在追踪高速缓存280中。转译器272可以在创建转译中采用各种技术,包括重新排序指令、重新命名寄存器、巩固指令等。
[0036]在一些情况下,将系统存储器的一部分分配为安全的和私有的以使得它对用户/ISA不可见,这将是可取的。各种数据和软件可以运行并且存储在安全存储器分配中。在一些实施例中,例如,下列中的一个或多个驻留在存储器的私有/安全部分中和/或从存储器的私有/安全部分运行:摘要器240a和240b、队列242、MBHT260、区域形成器270、转译器272和追踪高速缓存280。
[0037]图6以控制流图600的形式描绘关于代码部分的信息和部分之中的控制流可如何存储在MBHT260中。所描绘的图明确地示出两个示范性节点602 (节点A和节点B),并且还示出了当将新的边缘(边缘B到E)引入控制流图表示中时如何更新那些节点。示例包括若干边缘,其表示进入、离开以及节点之间的控制流。示范性图是在其中存在用于每个节点的单个进入点以及潜在地多个退出点的“超级块”表示。示例中的“进入点”是指构成特征部分的起始点的分支目标地址。“退出点”与进入点地址偏移某个量,并且表示离开代码部分分支到其他分支目标。
[0038]控制流图中的每个节点与关于非本地ISA代码的一部分的信息相对应并且包含关于非本地ISA代码的一部分的信息,所述非本地ISA代码的一部分起始于在来自队列242(图2)的、被处理的记录之一中所指定的分支目标地址。首先参考图左上方的节点A,后台摘要器通过队列242 (图2)中的条目的处理来构造并且更新节点。具体地,节点A是以分支目标地址LIP X (线性地址)起始的非本地ISA代码部分的表征/表示。
[0039]每个节点可具有到其进入点的多个入站边缘604。进入节点A中的边缘是从BHT所处理的两个相邻的经排队记录的结果。参考图5,经排队记录的示例假定具有分支目标地址LIP x-100的记录紧接在具有分支目标地址LIP X,即节点A的分支目标地址的记录之前。这定义从具有LIP x-100的起始地址的节点(未示出)到节点A的入站边缘。随着执行随时间推移而继续,可以从BHT对具有节点A的分支目标地址的附加的记录进行排队用于处理,并且因为节点A的分支目标地址随时间推移而反复地被遭遇,所以紧接在前的经排队记录将导致进入节点A中的附加的边缘。
[0040]每个节点也可以具有由出站边缘606的发生所定义的若干退出点。正如入站边缘,出站边缘作为处理来自BHT的时间上相邻的记录的结果而发生。例如,节点A示出了到节点D的出站边缘。节点D未在图中明确示出,但是节点作为处理用于D的分支目标地址的BHT记录的结果而存在。类似地,图隐含但未示出节点E和F。
[0041]继续A到D (A-to-D)边缘,当用于D的所处理的BHT记录紧接地跟随在用于A的所处理的BHT记录之后时,出站边缘被添加到节点A或被更新,这反映从代码的与节点A相关联的部分到与代码的节点D相关联的部分的所采取的分支。类似地,到E的出站边缘作为用于A和E的相邻记录的结果而发生或被更新,这反映从代码的以A的目标地址起始的部分到代码的以E的目标地址起始的部分的控制流。
[0042]如节点A的示例所示,控制流图中的每个节点可以被给予分数610。分数的一个组成部分是节点被遭遇的次数。随着涉及节点A的更多记录被处理,分数可以增加。这一般与HWD连同节点A的代码部分的经增加的使用相关,因此增加使代码部分由新本地转译所覆盖的潜在价值以将处理转移远离硬件解码器模式。一般而言,较高分数反映代码部分相对较高地被优先化用于包括在要形成的新的本地转译中。
[0043]用于节点的分数和优先化也可以基于通过其进入节点的分支的类型。返回参考图4和5,BHT记录可以包括分支的类型的编码。分支类型可以以任何合适的方式来编码。在所描绘的示例中,如字段228c、228d、244c和244d所示,编码用来指示分支是直接还是间接的、分支是调用还是返回、和/或分支是否是转变,其意指进入或离开现有的本地转译的转变。这些仅是示例,可以采用用于其他代码部分类型的编码。一般地,与在对部分进行转译是否可取中发挥作用的代码部分相关联的任何特性可以被采用并且被作为因素计入节点的分数/优先权。
[0044]分支类型可以以各种方式对得分启发式起作用。调用和返回的跟踪可以在摘要过程期间帮助嵌套(nesting)的跟踪。这可能有助于避免在本地转译的形成或涉及本地转译的其他处理期间拥塞MBHT。在一些情况下,即使返回目标是间接的分支,它们也可能较低地得分/优先化。在一些情况下,这是因为本地目标典型地在硬件返回栈上可用并且将不要求对硬件重定向器282的引用。调用分支可以与频繁调用的子例程相对应,并且为此或其他原因使经由调用所进入的节点得分较高是可取的。
[0045]标识分支是否是转变可以用来抑制MBHT中的边缘的创建。如果控制流是从本地转译退出到硬件解码器模式,那么可能不存在任何从前一 BHT入口到当前入口的直接路径。因此,出于剖析由HWD所处理的代码部分之间的控制流的目的,在所插入的本地转译在进入第二节点之前执行的情况下创建节点之间的边缘可能是不可取的。
[0046]如图4和5所见,BHT记录还可以包括顺序地下一个指令信息(图4中的228b和图5中的244b)。在示范性实现方案中,该信息反映紧接地跟随在产生所采取的分支的指令之后的指令的地址。使用顺序地下一个指令地址可以使将落空路径(如果分支未被采取的路径)进行连接更容易,特别是在具有可变长度指令的设定中。只要采用分支指令的地址,每指令的字节数目的差异将留下不足以容易地推断来源于未被采取的分支的落空路径的信息。
[0047]在一个示例中,顺序地下一个指令信息包括分支指令之后的下一个指令的全地址。在另一个示例中,信息仅包括下一个指令地址的一部分。具体地,可以包括下一个指令的地址的最低有效位。然后这些可以与前一分支目标的高位组合以推断跟随分支指令之后的顺序地下一个指令的全地址。以该方式使用较低位可以降低BHT记录的占用空间(footprint)并且允许BHT记录的较快排队和处理。
[0048]可以以各种方式使用落空路径的知识。落空路径的一种使用是简单地使路径清楚地已知,使得区域形成器可以检索用于将被转译的路径的指令。另一种使用是计算控制流图中的每个边缘的偏移。具体来讲,图6中的节点A示出了用于到节点D的边缘以及到节点E的边缘的边缘偏移。图6假定h〈i〈j〈k。到节点D的出站边缘与节点A的分支目标地址偏移h字节,到节点E的出站边缘与A的分支目标地址偏移j字节。这些偏移的知识允许出站边缘以他们相对于节点的入口地址的适当次序来放置。
[0049]如A到D边缘所示,来自节点的每个出站边缘可以包括权重620。权重可以基于相关联的分支被遭遇的次数和/或它被采取的次数,或者任何其他合适的度量。这些边缘权重提供流出一个代码部分和进入另一个代码部分的控制流的表示,并且单独加权可以由区域形成器用来形成新的本地转译,并且更具体地用来决定将什么代码路径进行转译。
[0050]先前所论述的边缘的排序通过允许边缘被遭遇但未被采取的次数的计数来帮助确定边缘权重。例如,如果所处理的BHT记录包括A到E边缘,则将意指与A到D边缘相关联的分支指令被遭遇但未被采取。如果所处理的记录包括A到D边缘,则将意指分支被遭遇并且被采取。如果A到D边缘比A到E边缘更频繁地被遭遇并采取,那么A到D边缘可比A到E边缘更重地加权。例如,与从节点A流到节点E的转译相反,区域形成器可使用该信息来优先地形成以节点A起始的、流通到节点D的转译。
[0051 ] 在另一个示例中,假定A到D边缘相对于其他出站边缘非常频繁地被遭遇,但是仅一半时间被采取。在这类环境中,区域形成器可操作以创建覆盖到节点D的所采取的路径和落空路径的转译。
[0052]图6还示出了当节点共享公共分支时系统可如何调和节点之间的潜在重叠。示例中的BHT处理在下一个线性指令指针(NLIP) x+j处产生新的B到E边缘。将理解的是,NLIP指派顺序地跟随在分支指令之后的指令的地址。由于落空地址x+j处的共享分支,所以x+j处的NLIP隐含节点A和B之间的重叠。如图的底部所示,该重叠可通过更新节点A以包括到NLIPx+i处的节点B的落空边缘以及更新节点B以包括到NLIP x+j处的E的边缘来解决。经更新的节点B还示出了边缘排序的另一个示例,其中B到E边缘由于各自的NLIP偏移而领先B到F边缘。此外,分支NLIP的使用允许在可变长度的分支指令存在的情况下对落空位置的精确标识。
[0053]再次参考图2,前台摘要器240a和/或后台摘要器240b可以用来控制分支计数表220如何以及何时触发事件。一种类型的控制包括确定何时事件被采取的所维持的计数(即图3中的计数226b)的控制。当新的目标地址被放置在分支计数表中时,可以设定初始计数阈值。在另一个示例中,阈值可针对已被剖析的代码部分而增加,以增加暴露以及剖析新的代码部分的可能性。摘要器还可以控制分支计数表以抑制用于在分支计数表中正被跟踪的一个或多个部分的事件的采取。
[0054]参考图3-5,将理解的是,记录中的具体类型的信息是非限制性示例。例如,取代关于顺序地下一个指令的信息(图4和5),可结合少量附加的位使用分支自身的地址来描述指令的长度。更广泛地,本描述包括那些包含任何相关信息的记录,所述信息关于至少部分地利用硬件解码器执行的相关联的代码部分,着眼于处理该信息以生成控制流表示来协助新的转译的形成。
[0055]图7示出用于剖析代码部分的硬件解码器执行以形成新的转译的方法700的高级示例。在可以在上文所描述的硬件解码器和执行的转译模式中进行操作的系统的上下文中采用该方法。虽然可以如上文所描述的实现步骤,但是应该理解方法可连同不同于关于上文所描述的图1到6所论述的示例的硬件/软件配置加以采用。
[0056]在702,方法包括使用HWD来执行非本地ISA的代码部分的部分。代码部分可由如上文示例中(所采取或未采取的)分支或使用任何其他合适的特性或定义来定义和标识。目的一般是表征在硬件解码器模式中所执行的代码部分以标识用于转译的最佳代码部分。在所描绘的方法中,在704,将代码部分简档存储在硬件中,并且响应于以及基于在步骤702硬件解码器的使用而动态地更新该代码部分简档。在706,方法然后包括基于代码部分简档形成新的本地转译。
[0057]步骤702的代码部分简档可以包括多个记录,如上文所描述的。每个记录可以与正使用HWD执行的代码部分相关联。这些记录然后可被采样并被处理以生成那些部分如何利用硬件解码器执行以及程序控制流如何将那些代码部分进行链接的经摘要表示。经摘要表示可使用摘要软件生成,如在上文示例中,并且可采取控制流图的形式,诸如关于图6所描述的图。如在上文示例中,得分和加权可以用来将代码部分和部分间控制流优先化,并且可根据那些优先权生成新的转译。
[0058]将理解的是,本文所描述的方法仅出于示例性目的而提供并且不旨在是限制性的。因此,将理解的是,在一些实施例中,本文所描述的方法可以包括附加的或可替代的过程,而在一些实施例中,本文所描述的方法可以包括一些可被重新排序、并行实施或省略的过程而不脱离本公开的范围。进一步地,将理解的是,本文所描述的方法可以使用任何合适的软件和硬件来实施,所述软件和硬件包括本文所描述的具体示例。
[0059]本书面描述使用示例来公开本发明,包括最佳模式,并且还使相关领域普通技术人员能够实践本发明,包括制作并且使用任何设备或系统以及实施任何所包含的方法。本发明的专利保护范围由权利要求所定义,并且可以包括如本领域普通技术人员所理解的其他示例。这类其他示例旨在处于权利要求的范围内。
【权利要求】
1.一种具有处理器核心的微处理系统,包括: 处理管线,其具有在所述处理器核心上的硬件解码器,所述处理管线可操作在硬件解码器模式以及转译模式中,在所述硬件解码器模式中所述硬件解码器接收非本地ISA指令并且将其解码成本地指令用于执行,在所述转译模式中非本地ISA指令的本地转译在所述处理管线中执行但不使用所述硬件解码器;以及 代码部分简档,其存储在所述处理器核心上的微架构硬件结构中,所述代码部分简档包含响应于所述硬件解码器的使用以执行非本地ISA代码的部分而动态地改变的信息,其中所述微处理系统可操作为使用所述代码部分简档来动态地形成在所述转译模式中由所述处理管线可执行的新的本地转译。
2.根据权利要求1所述的系统,其中所述代码部分简档包括在执行期间动态地添加到所述代码部分简档的多个记录,每个记录包含与已至少部分地利用所述硬件解码器执行的代码部分相关联的信息。
3.根据权利要求1所述的系统,进一步包括摘要器,所述摘要器配置为反复地对所述代码部分简档进行采样并且处理经采样的信息以生成一个或多个代码部分已如何由所述硬件解码器所执行的表示,其中所述微处理系统配置为基于所述表示动态地形成新的本地转译。
4.根据权利要求3所述的系统,其中所述摘要器包括配置为对所述代码部分简档进行采样的前台摘要器线程,以及配置为处理所述经采样的信息以生成所述表示的后台摘要器线程,并且其中所述微处理系统配置为与所述前台摘要器线程相比在不同处理器核心上运行所述后台摘要器线程。
5.根据权利要求3所述的系统,其中所述摘要器配置为生成用于已由所述硬件解码器所执行的所述代码部分的分数,其中用于代码部分的相对较高分数反映该代码部分被相对较高地优先化作为待由要由所述微处理系统所形成的新的本地转译所覆盖的候选。
6.根据权利要求5所述的系统,其中用于代码部分的分数是基于那些代码部分经由所述硬件解码器的使用被遭遇的次数的。
7.根据权利要求5所述的系统,其中用于代码部分的分数是基于与那些代码部分相关联的分支指令的类型的。
8.根据权利要求5所述的系统,进一步包括计数表,所述计数表存储在所述处理器核心上的微架构结构中并且针对在所述代码部分简档中具有记录的所述代码部分的至少一些包含跟踪该代码部分经由所述硬件解码器的使用被遭遇多少次的计数器,并且其中所述计数器的饱和触发所述摘要器的操作以对所述代码部分简档中的、与该代码部分有关的所述信息进行采样和处理。
9.根据权利要求5所述的系统,其中所述摘要器配置为反复地对所述记录中的所述信息进行采样和处理以针对所述代码部分中的给定代码部分生成从该代码部分外出到多个其他代码部分的控制流的表示,并且其中到所述其他代码部分的所述控制流由所述摘要器单独地加权,并且其中这类加权由所述微处理系统用来形成覆盖所述给定代码部分的新的转译。
10.根据权利要求2所述的系统,其中所述代码部分简档中的每个记录与分支指令相关联,所述分支指令已至少部分地由所述硬件解码器针对相关联的代码部分来执行。
【文档编号】G06F9/30GK104049942SQ201410096292
【公开日】2014年9月17日 申请日期:2014年3月14日 优先权日:2013年3月14日
【发明者】纳瑟·塔克, 亚历山大·克莱贝尔, 罗斯·泽格尔肯, 戴维·邓恩, 本·赫兹伯格, 鲁珀特·布劳赫, 托马斯·基斯特勒, 吉列尔莫·J·罗扎斯, 马杜·斯沃尔那 申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1