通过对指令序列的近似监控的运行时代码并行化的制作方法

文档序号:11333677阅读:216来源:国知局
通过对指令序列的近似监控的运行时代码并行化的制造方法与工艺

发明领域

本发明总体上涉及处理器设计,并具体地涉及用于运行时代码并行化的方法和系统。

发明背景

已经提出了用于在运行时动态地并行化软件代码的各种技术。例如,akkary和driscoll在1998年12月的第31届微体系结构年度国际研讨会的论文集“adynamicmultithreadingprocessor”中描述了实现单个程序的动态多线程执行的处理器架构,该文章通过引用并入本文。

marcuellu等人在1998年的第12届国际超级计算会议的论文集“speculativemultithreadedprocessors”中描述了一种处理器微架构,该微架构通过不需要编译器或用户支持的控制推测技术来同时执行从单个程序获得的多个控制线程,该文章通过引用并入本文。

marcuello和gonzales在1999年的13届国际超级计算会议的论文集“clusteredspeculativemultithreadedprocessors”中提出了在运行时从单线程应用中产生推测性线程的微架构,该文章通过引用并入本文。

在2000年的第14届并行与分布式处理国际研讨会的论文集“aquantitativeassessmentofthread-levelspeculationtechniques”(其通过引用并入本文)中,marcuello和gonzales分析了不同线程推测技术的益处以及线程单元中的值预测、分支预测、线程初始化开销和连接的影响。

ortiz-arroyo和lee在2003年的第16届并行与分布式计算系统的国际会议(pdcs'03)的论文集“dynamicsimultaneousmultithreadedarchitecture”中描述了被称为动态同时多线程(dsmt)的多线程架构,该多线程架构在同时多线程处理器核上执行来自单个程序的多个线程,该文章通过引用并入本文。

美国专利申请公开2014/0282601(其公开内容通过引用并入本文)描述了用于通过块组织的源视图数据结构的依赖性广播的方法。该方法包括使用全局前端来接收输入指令序列,并将指令分组以形成指令块。多个寄存器模板被用于通过用对应于指令块的块号填充寄存器模板来跟踪指令目的地和指令源,其中,对应于指令块的块号指示指令块之间的相互依赖关系。填充块组织的源视图数据结构,其中,源视图数据结构存储如由多个寄存器模板所记录的与指令块相对应的源。在分派指令块的一个块时,属于一个块的数字被广播到源视图数据结构中的与该块相关的列,并相应地标记该列。根据广播来更新剩余指令块的依赖性信息。

发明概述

本文描述的本发明的实施例提供了一种方法,其包括在执行程序代码的指令的处理器中,识别包含至少部分重复的一个或更多个指令段的代码区域。监控该区域中的指令,并为该区域构建所监控的指令的寄存器访问的近似规范。使用该规范来将对区域中的段的执行并行化。

在一些实施例中,识别区域包括选择在代码中具有公共起始点和公共结束点中的至少一个的多个段,并且构建近似规范包括构建相同的规范,以指定多个选定段中的寄存器访问。在实施例中,识别区域包括识别程序循环或函数。

在公开的实施例中,近似规范与由段中的指令遍历的流控制轨迹相关联。在另一个实施例中,近似规范与由段中的指令遍历的多个替代流控制轨迹相关联。

在示例实施例中,构建近似规范包括在规范中指示由指令访问的寄存器的标识,但不指示对寄存器的最后写入操作的位置。在另一个实施例中,构建近似规范包括:对于一个或更多个第一寄存器,指定对第一寄存器的相应最后写入操作在代码中的位置;以及对于一个或更多个第二寄存器,指定第二寄存器是否被写入,而不是对第二寄存器的最后写入操作的位置。在实施例中,第一寄存器包括被写入多达预定义的次数的寄存器,并且第二寄存器包括被写入多于预定义的次数的寄存器。

在又一个实施例中,构建近似规范包括基于嵌入在程序代码中的指示来选择至少第一寄存器和至少第二寄存器,对于至少第一寄存器,规范将是近似的,对于至少第二寄存器,规范将是精确的。在又一个实施例中,构建近似规范包括将被监控的段划分为节段,并且对于每个节段,指定在该节段中被写入并且未在随后的节段中写入的寄存器。在实施例中,构建近似规范包括将被监控的段划分为节段,并且使用两个或更多个硬件线程来监控该节段。

在一些实施例中,构建近似规范包括在规范中对于每个寄存器指定对寄存器的最后写入操作在代码中的近似位置,该近似位置不早于最后写入操作的精确位置。指定所述近似位置可以包括指定对寄存器的写入命令的近似数量,该近似数量不小于对寄存器的写入命令的精确数量。另外地或可替代地,指定近似位置可以包括基于在对指令的监控期间误预测的分支之后的一个或更多个指令来确定近似位置。

在公开的实施例中,构建近似规范包括收集寄存器访问,而不管区域中的段之间可能的重叠。在另一个实施例中,构建近似规范包括将寄存器访问与一个或更多个先前收集的规范进行合并。

在一些实施例中,构建近似规范包括将在两个或更多个段中收集的寄存器访问信息进行合并。在示例实施例中,合并寄存器访问信息包括对来自两个或更多个段的写入操作的相应的计数进行求和或者取其最大值。另外地或可替代地,合并寄存器访问信息可以包括合并来自两个或更多个段的寄存器的相应的分类。

在实施例中,该方法包括对近似规范进行校正以补偿在所监控的指令中发生的分支误预测。在另一实施例中,构建近似规范包括基于以下项中的至少一个来收集寄存器访问:处理器的执行流水线中被解码的指令;在执行流水线中执行的指令;以及在执行流水线中提交的指令。在又一个实施例中,监控指令包括基于以下项中的至少一个来生成所监控的指令的至少一个流控制轨迹:在处理器的执行流水线中从存储器提取的指令;在执行流水线中被解码的指令;以及在执行流水线中执行的指令,或者基于在执行流水线中提交的指令。

根据本发明的实施例,另外提供了包括执行流水线和监控单元的处理器。执行流水线被配置为执行程序代码的指令。监控单元被配置为识别包含至少部分重复的一个或更多个指令段的代码区域,监控该区域中的指令并且为该区域构建由所监控的指令的寄存器访问的近似规范,并使用规范来并行化对区域中的段的执行。

根据结合附图进行的本发明的实施例的以下详细描述,本发明将得到更完全地理解,其中:

附图简述

图1是根据本发明的实施例示意性地示出了执行运行时代码并行化的处理器的框图;

图2a-2c是根据本发明的实施例示意性地示出包含至少部分重复的段的代码区域的图;以及

图3是根据本发明的实施例示意性地示出用于使用不精确的指令监控来进行运行时代码并行化的方法的流程图。

实施例的详细描述

综述

本文描述的本发明的实施例提供了用于在处理器中对代码的运行时并行化的改进的方法和设备。在所公开的实施例中,处理器识别包含至少部分重复的一个或更多个指令段的代码区域。处理器使用“记分板”(由该区域中的指令对寄存器的访问的规范)来对所识别的区域的执行进行并行化。例如,处理器可以调用多个硬件线程来执行相应的段,并且决定如何以及何时基于记分板并行化线程。

在一些实施例中,处理器在记分板中指定近似而不是精确的寄存器访问信息。在各种实施例中,对于至少一个寄存器,在可以省略一些寄存器访问信息的意义上,规范是近似的。另外地或可替代地,在以降低的精度或分辨率指定寄存器访问信息的意义上,规范可以是近似的。此外,另外地或可替代地,在单个规范与多个不同流控制轨迹相关联的意义上,规范可以是近似的。这里描述了用于在性能很少或没有退化的情况下近似表示寄存器访问信息的各种技术。

例如,寄存器访问信息通常指示哪些寄存器被写入,并且可能指示对寄存器的最后写入操作在代码中的位置。在一些实施例中,通过仅针对寄存器的子集指定最后写入指示或者根本不指定最后写入指示来对寄存器访问信息进行近似。在其他实施例中,寄存器访问信息不一定指定最后写入操作发生的精确指令,而是以比单个指令更粗的粒度指定最后写入的位置。

例如,处理器可以将给定的段划分为节段,并指定在给定节段中被写入而没有在随后的节段中被写入的寄存器。作为另一示例,最后写入指示可能指示晚于最后写入操作的真正位置的代码位置。例如,处理器可以确定最后写入指示,而不管可能的分支误预测事件,即至少部分地基于随后将被清除的指令,因为它们在误预测的分支之后。

在其他示例实施例中,处理器通过为具有不同流控制轨迹的段生成单个记分板或者通过将当前收集的寄存器访问信息与一个或更多个先前构建的记分板合并来近似记分板。

在下文中描述了记分板近似技术的其他示例。所公开的技术容许流控制变化,简化记分板构建过程,并且减少存储记分板所需的存储器空间,其并行化性能只有很小的和可容忍的退化。

系统描述

图1是根据本发明的实施例示意性地示出处理器20的框图。处理器20运行预编译的软件代码,同时并行化代码执行。处理器在运行时通过在程序指令从存储器中被提取并被处理的时候对其进行分析来执行并行化决策。

在本示例中,处理器20包括执行流水线,该执行流水线包括一个或更多个提取单元24、一个或更多个解码单元28、乱序(ooo)缓冲器32和执行单元36。提取单元24从多级指令高速缓存存储器中提取程序指令,该高速缓存存储器在本示例中包括1级(l1)指令高速缓存40和2级(l2)指令高速缓存44。

分支预测单元48预测在执行期间预期由程序遍历的流控制轨迹(在本文中为了简短起见而被称为“轨迹”)。预测通常基于由提取单元24提取的先前指令的地址或程序计数器(pc)值。基于预测,分支预测单元48指示提取单元24将提取哪些新指令。

在一些实施例中,由解码单元28解码的指令存储在ooo缓冲器32中,以用于通过执行单元36进行乱序执行,即不是按照指令被编译和存储在存储器中的顺序。可替代地,缓冲指令可以按顺序执行。随后发出缓冲指令,以供各种执行单元36执行。在本示例中,执行单元36包括一个或更多个乘法累加(mac)单元、一个或更多个算术逻辑单元(alu)、一个或更多个加载/存储单元和分支执行单元(bra)。另外地或可替代地,执行单元36可以包括其他合适类型的执行单元,例如浮点单元(fpu)。

由执行单元36产生的结果被存储在寄存器文件和/或多级数据高速缓存存储器中,其在本示例中包括1级(l1)数据高速缓存52和2级(l2)数据高速缓存56。在一些实施例中,l2数据高速缓存存储器56和l2指令高速缓存存储器44被实现为相同物理存储器中独立的存储器区域或者在没有固定预分配的情况下简单地共享相同的存储器。

在一些实施例中,处理器20还包括负责运行时代码并行化的线程监控和执行单元60。下面详细说明单元60的功能。监控和执行单元60在本文中也称为“监控单元”或“监控电路”。在一些实施例中,单元60在硬件中被实现为处理器20中的独立单元或分布在各种硬件线程中。

在其他实施例中,可以使用运行时软件来执行单元60的一些或全部功能。这种运行时软件通常与由处理器20的执行流水线执行的软件代码分开,并且可以例如在单独的处理核上运行。

图1中所示的处理器20的配置是示例配置,其纯粹为了概念清楚起见而被选择。在替代的实施例中,可使用任何其他合适的处理器配置。例如,在图1的配置中,使用多个提取单元24和多个解码单元28来实现多线程。每个硬件线程可以包括被分配以提取用于线程的指令的提取单元以及被分配以对所提取的指令进行解码的解码单元。另外或可替代地,多线程可以以许多其他方式实现,例如使用每线程的多个ooo缓冲器、单独的执行单元和/或每线程的单独的寄存器文件。在另一个实施例中,不同的线程可以包括不同的相应处理核心。

作为又一个示例,处理器可以在没有高速缓存或有不同的高速缓存结构、在没有分支预测或者每线程有单独的分支预测的情况下实现。处理器可以包括附加元件,例如,仅举几个示例,重排序缓冲器(rob)、寄存器重命名。此外,可替代地,所公开的技术可以用具有任何其它合适的微架构的处理器执行。

处理器20可以使用任何合适的硬件例如使用一个或更多个专用集成电路(asic)、现场可编程门阵列(fpga)或其他设备类型来实现。另外或可替代地,可使用软件或使用硬件和软件元件的组合来实现处理器20的某些元件。可以使用诸如随机存取存储器(ram)的任何合适类型的存储器来实现指令和数据的高速缓存存储器。

处理器20可以用软件编程以执行本文描述的功能。该软件可通过网络以电子形式下载到处理器,例如,或者可替代地或另外,软件可以被提供和/或储存在非暂时性有形介质(诸如,磁存储器、光存储器或电子存储器)上。

基于段监控的运行时代码并行化

在一些实施例中,处理器20中的单元60识别包含至少部分重复的一个或更多个代码段的代码区域,并且使对这些代码段的执行并行化。在本专利申请的上下文中和权利要求书中,术语“并行化”是指全并行化和部分并行化两者,即任何不是纯顺序的执行方案。

在本专利申请的上下文中以及在权利要求书中,术语“至少部分重复的段”在广义上被使用,并且是指其中各个段具有一些共同性但并不一定都执行完全相同的指令序列的各种可能的情况。以下在图2a-2c中描述这种段的几个示例。

例如,考虑包括程序循环的相应迭代的段或函数或过程的相应执行的段。如果循环或函数不包含条件分支指令,则段通常是重复的,遵循相同的控制流轨迹并执行相同的指令序列。

通常,即使段仅是部分重复的,单元60也并行化段的执行。部分重复的段通常具有一些共同性,但不一定遵循完全相同的控制流轨迹。例如,部分重复的段可以在相同的指令处开始和/或在相同的指令处结束,但是在其他方面可以遵循不同的轨迹。这种类型的示例包括在不同指令下进入或退出循环或函数的段,或在循环或函数中采用不同分支的段。

作为又一个示例,除了整体上将对序列的执行并行化外,单元60还可以将重复(或部分重复的)指令序列划分为两个或更多个连续的段。这种段的集合也被认为是一组部分重复的段。这样情况的示例以下在图2c中被示出。

另外,可替代地,单元60可以识别并且并行化包括任何其它合适的一组部分重复段的任何其它合适的代码区域的执行。通常,数据值(例如,寄存器值)和/或流控制轨迹可能会在一个段执行和另一个段执行之间不同。

在所公开的实施例中,处理器20通过并行或半并行地调用多个硬件线程来并行化段的执行。每个线程执行相应的代码段,例如循环的相应迭代、多个(不一定是连续的)循环迭代、循环迭代的一部分、循环的延续、函数或其部分或延续或者任何其它合适类型的段。

在图1的示例中,尽管不是必然的,但每个线程包括已由单元60分配以执行一个或更多个段的相应提取单元24和相应解码单元28。在另一个示例实施例中,在两个或更多个线程之间共享给定的提取单元24。

实际上,数据依赖性存在于段之间。例如,在某个循环迭代中执行的计算可以取决于在先前迭代中执行的计算的结果。并行化段的能力在很大程度上取决于这种数据依赖性。

在一些实施例中,单元60通过监控处理器流水线中的指令来决定如何并行化代码。响应于识别包括至少部分重复的段的代码区域,单元60在指令被处理器提取、解码和执行时开始监控指令。

图2a-2c是根据本发明的实施例示意性地示出包含遵循一个或更多个控制流轨迹78的至少部分重复的段74的代码区域70的图。这些示例演示了可以使用单个近似记分板来表示和并行化的几种可能类型的代码区域。

在图2a中,代码区域70包含循环,其具有遵循单个内部流控制轨迹78的单一类型的段74。因此,各种循环迭代对应于完全重复的并且遵循相同轨迹的多个段。

在图2b中,代码区域70包含具有内部条件分支的循环。如在前面的示例中,每个循环迭代对应于相应的段74。然而,在本示例中,根据在每个段中采取的实际分支决策,不同的段可以遵循不同的流控制轨迹78a、78b。在这个示例中,段只是部分重复的。

在图2c中,单元60将代码区域70中的循环划分成多个连续的段类型74a-74c。除了并行化不同循环迭代的执行之外,单元60还可以调用不同的线程来执行相同循环迭代内的不同类型的段。

在图2c的示例中,整个循环遵循单个轨迹78,但不同的段类型遵循该轨迹的不同部分。换句话说,各种循环迭代的段74a是重复的,如同各种循环迭代的段74b和各种循环迭代的段74c一样。然而,不同的段类型遵循不同的轨迹。这种情况也被认为是一组部分重复的段。

另一个示例情况可以组合图2b和图2c的情况。在这种情况下,段74a、74b和/或74c可以包含一个或更多个条件分支指令。因此,给定类型的段可以在各种循环迭代中遍历不同的流控制轨迹。换句话说,段74a、74b和/或74c可以是部分重复的。

在图2c的示例中,段74a、74b和74c不重叠。然而,在替代实施例中,段74a、74b和/或74c可共享一个或更多个重叠指令。以下更详细地论述该情况。

仅仅通过示例的方式描绘了以上图2a-2c的情况。在替代实施例中,单元60可以监控包括至少部分重复的段的任何其他合适类型的代码区域中的指令。在一些实施例中,单元60分别监控各个段,并组合监控结果以产生整个代码区域(例如,整个循环)的记分板。

在一些实施方式中,单元60的功能可以分布在多个硬件线程之间,使得给定线程可以被视为在执行期间监控其指令。如上所述,监控单元在本文中也称为“监控电路”。然而,为了清楚起见,下面的描述假设监控功能由单元60执行。

如上所述,作为监控过程的一部分,单元60生成称为记分板的监控表。记分板通常包括寄存器的一些分类。此外,对于至少一些寄存器,记分板可指示对寄存器的最后写入操作在代码中的位置。

可以使用任何合适的指示来指示最后写入操作的位置,例如对寄存器的写入操作次数的计数或最后写入操作的地址。最后写入指示使单元60能够确定例如何时允许它执行依赖于寄存器的值的随后段中的指令。

在一些实施例中,作为监控过程的一部分,单元60还生成由所识别的代码区域的段中的指令遍历的流控制轨迹(或轨迹)。可在美国专利申请14/578,516、14/578,518和14/583,119中找到记分板生成的其他方面,它们被转让给本专利申请的受让人且其公开内容通过引用并入本文。

部分重复的代码段的近似规范

在一些实施例中,单元60为所识别的代码区域生成近似而不精确的记分板。该规范的近似提供了对代码区域中的流控制变化的容限,降低了生成记分板的计算复杂度,和/或减少了存储记分板所需的存储器空间。当存储和使用多个记分板以用于并行化多个代码区域时,近似特别有利。

下面的描述提出了用于生成近似记分板的几种示例技术。仅仅是通过示例的方式来描绘这些技术。在替代实施例中,单元60可以以任何其它合适的方式生成任何其它合适的寄存器访问信息。

在一些实施例中,单元60在记分板中针对至少一个寄存器仅仅指示寄存器是否被写入,而不指定对寄存器的最后写入操作的位置。例如,单元60可以指定对寄存器子集的最后写入操作的位置。对于剩余的寄存器,单元60可以仅指示每个寄存器是否被写入。

在示例实施例中,单元60对每个寄存器的写入操作的次数进行计数。如果对给定寄存器的写入操作次数不超过预定义的阈值,则单元60将该数记录在记分板中(或者记录对寄存器的最后写入操作的位置的一些其它指示)。如果对给定寄存器的写入操作次数超过预定义的阈值,则单元60仅指示寄存器被写入,而不指定最后写入操作的位置。在实施例中,单元60确保写入操作的近似次数高于实际写入次数。

在其他实施例中,单元60以比单个指令更粗的某个粗粒度来指定对寄存器的最后写入的位置,而不是指定最后写入操作发生的精确指令。在示例实施例中,单元60将给定的段划分成两个或更多个节段。对于每个节段,单元60可以指定在该节段中而不是在随后的节段中写入哪些寄存器。换句话说,对于至少给定寄存器,单元60可以指定其中寄存器被写入的最后的节段。

在其他实施例中,记分板中的最后写入指示中的一个或更多个指示可能晚于最后写入操作的实际位置的代码位置。例如,单元60可以基于可能遵循误预测分支的指令来确定最后写入操作的位置。在这种情况下,可以稍后刷新并且不执行记分板中指示的最后写入操作,因此真正的最后写入操作是某个较早的指令。

在替代实施例中,单元60构建记分板,同时仅考虑将被执行而不被清除的指令。例如,在执行后提交指令之后,单元60可以监控指令。作为另一示例,单元60可以识别误预测事件,并且校正记分板中的寄存器访问信息以补偿误预测。在上面引用的美国专利申请14/583,119中描述了示例校正技术。

在一些实施例中,单元60可以通过从部分重叠的段收集寄存器访问信息来构建记分板。由于重叠,一些寄存器访问信息可能是重复的,并因此是近似的。例如,当对给定寄存器的写入操作次数进行计数时,如果在两个监控段之间的重叠中发生对寄存器的写入命令,则该指令将被计数两次。

在实施例中,单元60将对寄存器的写入操作的精确次数进行计数,但在记分板中记录更大的数。该特性提供了一些防止流控制变化和误预测的保护。

在一些实施例中,单元60通过为具有不同流控制轨迹的段生成单个记分板来近似记分板。例如,在上面的图2b的情况中,单元60可以为遵循轨迹78a的段和遵循轨迹78b的段两者生成单个近似的记分板。在实施例中,单元60可以针对所有监控的轨迹生成单个记分板。在这些实施例中,记分板在其允许控制流轨迹中的某些变化而不是对应于单个轨迹的意义上是近似的。

在一些实施例中(例如,在图2c的示例中),单元60可以通过添加各个段的寄存器访问信息(例如,写入次数)来产生单个记分板。在其他实施例中(例如,在图2b的示例中),单元60可以通过采用各个段的寄存器访问信息的并集(例如,采用最大的写入次数)来产生单个记分板。

在这些实施例的一些实施例中,单元60将相同的近似记分板与两个或更多个不同的轨迹相关联。在替代实施例中,单元60生成包括多于一个分支选项的松弛轨迹(relaxedtrace),并且使松弛轨迹与近似记分板相关联。在一些实施例中,单元60可将当前收集的寄存器访问信息与一个或更多个先前构建的记分板合并。

当将所监控的段分成多个节段并分别监控每个节段(例如,在图2c中)时,可以使用两个或更多个硬件线程来监控各个节段。

在某些情况下,给定寄存器的分类可能在代码区域中的一个所监控的段和另一个所监控的段之间不同。单元60可以使用各种规则或逻辑来决定如何在为代码区域生成的复合记分板中对这样的寄存器进行分类。在图2b的情况中,例如,如果给定寄存器在一个段中被分类为全局(g),并且在另一个段中被分类为全局-局部(gl),则单元60通常将在组合记分板中将该寄存器分类为gl。作为另一个示例,在图2c的情况下,如果在一个段中完全没有使用给定的寄存器并在另一个段中将其分类为某个类别,则单元60通常将在组合记分板中使用同一类别来对寄存器进行分类。

在各种实施例中,单元60可以基于执行流水线的任何合适的级的输出来收集寄存器访问信息,并且基于执行流水线的任何合适的级的输出来生成对应的轨迹或多个轨迹。轨迹生成和寄存器访问信息的收集不需要在相同的流水线级处执行。一般来说,在流水线中较早地监控指令有助于更快速且更有效地调用并行执行,但另一方面更多地受到误预测的影响。在流水线中稍晚监控指令导致较慢的并行化,但另一方面对误预测较不敏感。

在一些实施例中,单元60在解码单元28的输出端处(即从被解码的指令)收集寄存器访问信息(例如,寄存器的分类和对寄存器的最后写入操作的位置)。在另一个实施例中,单元60基于在执行单元36中被执行的指令,但在最终提交指令和结果之前,收集寄存器访问信息。在替代实施例中,单元60仅基于所提交的指令来收集寄存器访问信息,即不考虑由于误预测而被清除的指令。

在一些实施例中,单元60根据被提取的分支指令,即基于提取单元24或分支预测单元48的输出端处的分支指令,来生成轨迹或多个轨迹。在替代实施例中,单元60根据被解码的分支指令,即基于解码单元28的输出端处的分支指令,来生成轨迹。在其他实施例中,单元60在通过分支执行(bra)单元评估条件分支指令的条件之后(即,在其中分支指令不再是有条件的级处)生成轨迹或多个轨迹。另外,可替代地,单元60可以基于所提交的分支指令来生成轨迹或多个轨迹。

在一些实施例中,程序代码指示记分板中关于其的寄存器访问信息被允许为近似的至少一个寄存器,以及关于其的寄存器访问信息应该是精确的至少一个寄存器。单元60可以基于这些指示来选择在记分板中要精确地指定哪些寄存器以及近似地指定哪些寄存器。

此外,另外地或可替代地,单元60可以基于任何其它合适的流水线级来生成流控制轨迹和/或收集寄存器访问信息。

图3是根据本发明的实施例示意性地示出用于使用不精确的指令监控进行运行时代码并行化的方法的流程图。该方法开始于单元60在区域识别步骤80处在运行时识别包含至少部分重复的代码段的程序代码区域。

在监控步骤84,单元60监控所识别的区域中的指令。基于所监控的指令,单元60在记分板构建步骤88处构建近似记分板,该近似记分板近似该区域中的段的寄存器访问信息。在并行化步骤92,单元60使用近似记分板来并行化该区域中的段的执行。

将认识到,以上描述的实施例是通过示例的方式引用的,并且本发明不限于上文中已经特别示出和描述的内容。相反,本发明的范围包括上文所描述的各种特征的组合及子组合以及本发明的变型和修改,所述变型和修改将在本领域的技术人员阅读上述描述之后想到的且在现有技术中未被公开。通过引用并入本专利申请中的文档被视为本申请的组成部分,除了任何术语在这些并入的文档中在某种程度上以与本说明书中明确地或隐含地作出的定义冲突的方式被定义之外,应该仅考虑本说明书中的定义。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1