用于高效动态二进制翻译的寄存器映射技术的制作方法

文档序号:6360889阅读:199来源:国知局
专利名称:用于高效动态二进制翻译的寄存器映射技术的制作方法
技术领域
本公开涉及动态二进制翻译,以及,更具体地说,涉及用于执行从具有较多寄存器的指令集架构(“ISA”)至具有较少寄存器的ISA的动态二进制翻译的高效技术。
背景技术
动态二进制翻译(DBT)作为在不同的ISA的顶部上运行为一个指令集架构(ISA)创建的应用程序的方式,已经被广泛使用。考虑到为PC开发的、基于x86 ISA的旧版软件的数量,人们已经关注将x86翻译到其他ISA。在更小的超级移动PC和更强大的嵌入式和移动互联网设备(例如,智能电话)这两个行业中最近的趋势是模糊这些不同的市场之间的边界。结果,这个市场趋同正创造对从当前支配嵌入式和移动互联网设备市场(例如,ARM (ARM 控股ARM Holdings)、MIPS (MIPS 科技MIPS Technologies)以及 PowerPC(Apple-IBM-Motorola 联盟AppIe-IBM-Motorola alliance))的 ISA 至 x86 (Intel 公司Intel Corporation)的 DBT 的很大关注。二进制翻译(“BT”)是将为一个源(“客体(guestDlSA构建的二进制翻译至另一个目标(“宿主(host)”)ISA的一般技术。使用BT,可能在具有不同的架构的处理器上执行为一个处理器ISA构建的应用程序二进制,而不需要重编译高级源代码或重写汇编代码。因为大多数旧版计算机应用程序仅以二进制格式可用,由于BT允许处理器执行不是为它构建并且对它不可用的应用程序的潜能,所以BT非常吸引人。在过去的几十年中若干成功的BT项目已推进了该技术的状态,包括数字设备公司(Digital Equipment Corporation)的(“DEC”)FX! 32、Intel 的 IA-32EL、Transmeta 的 CMS (“代码变形软件(Code MorphingSoftware)”)、Godson-3 (MIPS 架构)、以及 IBM 的 DAISY (“来自 Yorktown 的动态架构的指令集(Dynamically Architected Instruction Set from Yorktown)”)。这些工具中的大多数旨在在例如 Alpha (DEC)、Itanium (Intel)、Crusoe (Transmeta)、以及 MIPS (MIPS科技)的处理器上运行旧版x86应用程序。上面提及的工具中的大多数使用动态BT (DBT),其意味着当执行应用程序时(SP,在运行时),它们在运行中执行翻译。备选地,可以离线执行BT,S卩,静态BT (SBT)。通常优选动态运用模型,这是因为它更通用(例如,能够处理自修正代码)并且对于用户来说它透明地工作,利用简单的OS改变来自动地调用DBT用于非本地二进制。与SBT相比,DBT的主要缺点是开销。花费在翻译并且优化应用程序的周期是可以以别的方式用于实际上执行应用程序代码的周期。因此,DBT工具面临在花费在翻译/优化上的时间和结果代码的质量之间的权衡,该结果代码的质量又在经翻译的代码的执行时间中反映出来。DBT面临的挑战高度地取决于源和目标ISA。最近,已经存在对于扩展x86 ISA的使用到超级移动和嵌入式市场细分(例如,Intel的Atom处理器)的很大关注。从用户的角度看,这非常方便,因为它可以使旧版PC软件能够高效地在嵌入式和超级移动平台上运行。然而为了在这些新领域中采用x86,还必须使x86能够执行在这些细分中可用的巨大的软件基础(software base),其主要基于 ARM (ARM Holdings)、MIPS (MIPS 科技)、以及PowerPC (Apple-IBM-Motorola联盟)ISA。例如,在未来的基于x86的智能电话中,除了潜在地运行PC应用程序以外,有益的是,能够从例如Apple的iPhone App Store下载并且无缝地运行基于ARM的应用程序。使这个场景成为可能的挑战包括保持DBT的性能以及能量开销低。尽管已经提出了多种DBT系统,但它们的大多数遵循了相同的基本执行流。首先,将为源(客体)架构创建的二进制文件载入到存储器。接着将这个源二进制的区段翻译成目标(宿主)二进制代码。典型地“按命令(on-demand)”进行这个翻译。换句话说,当控制流到达源代码指令时,翻译源代码指令。典型地,在基本块的粒度上执行该翻译,该基本块是具有单个入口和潜在地多个出口的指令的序列。一旦翻译了基本块,则将该翻译保存在存储器中的翻译高速缓存(也被称为代码高速缓存)中供未来重新使用。最主动的DBT系统执行不同级别的优化。根据Transmeta的CMS和其他DBT系统,这些优化级别称为“档位(gear)”。首先,使用非常快的翻译(档位_1 )。这个档位旨在非常快速,其代价是经翻译的代码的质量差。对很少执行的代码(例如OS引导代码),这个权衡倾向于是理想的。在档位-I中,DBT还实现了检测“热门”(即,频繁地执行的)基本块的探测器(计数器)。一旦块变得热门,将它及其相关的周围的块合并到区域中。接着通过更高档位重新翻译这个区域,该档位将附加的优化应用于代码。可以对任意数量的档位重复这个相同的策略。例如,Transmeta的CMS使用四个档位。事实上,基于档位的系统保证了,代码区域对总的运行时贡献越大,则花费越多的时间来优化它以产生更快速的代码。所应用的优化的集合、数量和主动性极大地随着DBT的不同而变化。典型的优化包括指令调度、失效代码消除以及冗余消除。实际上,类似于静态编译器优化,最有关的优化的集合取决于目标架构。然而与编译器优化相反,在DBT中,这些优化具有精确的运行时信息,该信息可以用于获取更高质量的代码。与静态编译器相比DBT的主要劣势是更紧得多的优化-时间预算。


根据与其一致的实施例的随后详细的描述,要求保护的主题的特征和优势将显而易见,其中应当参考附图考虑该描述,其中
图I描绘了与本公开一致的存储器系统;
图2A描绘了与本公开一致的、用于动态二进制翻译器的示范性操作的流程图2B描绘了与本公开一致的、用于优化代码的示范性操作的流程图3描绘了包括频繁地执行的代码块的区域的示范性控制流图4描绘了与本公开一致的示范性经优化的目标二进制代码块,包括序言、主体、依据条件的跳转以及至少一个结尾;
图5描绘了与本公开一致的、用于执行包括优化的目标二进制代码块的示范性操作的流程图6描绘了对应于图3的控制流图的示范性经优化的控制流图;以及图7是示出与本公开一致的包括块级别寄存器映射和区域级别寄存器映射的动态二进制翻译的性能基准的对比的图。
具体实施例方式动态二进制翻译(“DBT”)面临的挑战是它引起的开销。这个开销主要来自在客体(“源”)-ISA中相对频繁地使用的特征,该特征不容易映射至宿主(“目标”)-ISA。例如,当源-ISA具有比目标-ISA更大的寄存器集合时,则重要的是,使用从源寄存器至目标寄存器的高效寄存器映射以便减少寄存器仿真开销,例如,存储器访问。这对于目标-ISA (例如x86和X86-64)特别重要,该目标-ISA与其他ISA (例如,具有32个寄存器的PowerPC、ARM和MIPS以及具有128个寄存器的Itanium)相比具有相对小数量的通用/整型寄存器(例如,8和16)。下列事实使寄存器映射问题恶化最佳映射(即,导致最小开销的映射)高度地取决于源二进制代码序列,并因此它随着代码的部分的不同而变化。理想地,每个代码区域应当使用对它最佳的寄存器映射。本公开提供了被配置为提供区域级别寄存器映射的系统和方法。该方法包括,对于区域中的每个二进制代码块,将区域中的最频繁地访问的源处理器寄存器中的至少一些映射至目标处理器寄存器。可以从包括计数器的探测器(probe)(—个或多个)确定最频繁地访问的源处理器寄存器,该探测器以对应于源二进制代码的块的目标二进制代码的块来实现。接着可以为在选择用于优化的区域中的源二进制代码的每个块生成经优化的目标二进制代码的块。经优化的目标二进制代码的块可以包括序言、包括经翻译的源二进制代码的主体、依据条件的跳转和至少一个结尾。序言被配置为载入该区域的映射的寄存器或映射的存入(live-in)寄存器。依据条件的跳转被配置为基于在源二进制代码的块的边界的分支是到区域中的下一个二进制块还是到不在区域中的下一个二进制块来控制流。结尾(一个或多个)被配置为如果下一个二进制块在区域中则跳转至块主体,或者如果下一个二进制块不在区域中则跳转至下一个二进制块的开始。开始可以对应于另一个区域中的经优化的目标二进制代码块的序言或对应于未经优化的目标二进制代码块。如果下一个二进制块不在区域中,则可以将该区域的存出(live-out)寄存器存储在存储器中。有利地,当跨越区域边界时,可以通过载入该区域的映射的寄存器或映射的存入寄存器来减少存储器访问,而不是每次执行目标二进制代码的经优化的块。与本公开一致的方法和/或系统被配置为提供区域级别寄存器映射。区域可以是相对复杂的。例如,区域可以包括任意的循环嵌套(一个或多个),即,循环的任意组合(一个或多个),例如,在父循环内的多个兄弟(sibling),正如本领域技术人员将理解到的。在另一个示例中,区域可以包括对应于不可缩减的流图的目标二进制代码块,例如,进入循环的多个可能的入口。区域可以由邻接和/或非邻接的目标二进制代码块形成。图I描绘了与本公开一致的系统100。系统100包括耦合至系统存储器104的处理器(“CPU”)102。系统100可以包括高速缓冲存储器105 (其可以包括在系统存储器104中)和/或类似于高速缓冲存储器但是通过软件管理的暂时存储器(scratch-pad memory)107。CPU 102可以包括多个处理器寄存器106-1、106-2、…,106-m,总称106。CPU 102可以包括多个核心处理单元(下文中的“多个核心”或单数的“核心”)并且每个核心可以被配置为执行多个线程。系统存储器104可以托管源二进制应用程序110、动态二进制翻译系统115以及宿主操作系统(“OS”)120。动态二进制翻译系统115可以包括目标二进制代码块(一个或多个)112、包括寄存器映射模块116的动态二进制翻译器代码114和/或源寄存器存储118。源二进制应用程序110可以包括对应于源ISA的多个源二进制代码块。目标二进制代码块(一个或多个)对应于目标ISA。源二进制代码块是一个或多个指令的序列,该序列包括分支指令,例如,以分支指令结束。目标二进制代码块被配置为包括对应的源二进制代码块的功能性。经优化的目标二进制代码块可以在经优化的目标二进制代码块的主体中包括对应的源二进制代码块的功能性。正如本文中所描述的,经优化的目标二进制代码块可以包括附加的功能性。目标二进制代码块(一个或多个)112可以存储在命名为“代码高速缓存”111的系统存储器的区域内。可以将代码高速缓存111理解为用于目标二进制代码块(一个或多个)112的存储,即,从对应的源二进制代码块(一个或多个)翻译过来的目标二进制代码块(一个或多个)112。系统存储器104可以托管源寄存器存储118,该源寄存器存储118被配置为存储数据到处理器寄存器106或者从处理器寄存器106载入数据。在一些实施例中,高速缓冲存储器105和/或暂时存储器107被配置为存储数据到处理器寄存器(一个或多个)106或者从处理器寄存器(一个或多个)106载入数据。可以通过一个或多个核心执行动态二进制翻译器代码114和寄存器映射模块116来对源二进制应用程序110进行操作,以将源二进制应用程序110的块(一个或多个)转化为目标二进制代码块(一个或多个)112。可以动态地将源二进制代码块翻译成目标二进制代码块。换句话说,可以响应于对执行二进制块的调用而不是静态地(即,在运行时前)将源二进制代码块翻译成目标二进制代码块。接着可以将目标二进制代码块存储在系统存储器104中的代码高速缓存111中并且将其提供至CPU 102用于执行。将源二进制代码110的块(一个或多个)转化为目标二进制代码块(一个或多个)112可以包括至少部分地基于区域的寄存器访问频率,将一个或多个源寄存器映射至一个或多个目标寄存器(例如,处理器寄存器(一个或多个)106)。例如,源-ISA可以包括Ns个源寄存器并且目标-ISA可以包括N,个目标寄存器(例如,寄存器106),其中N1小于Ns。图2A描绘了动态二进制翻译器的流程图200。可以通过动态二进制翻译器代码114执行流程图200的操作。程序流可以以收到对执行二进制代码块(一个或多个)202的调用开始。假定在对执行二进制代码块(一个或多个)202的调用之前,源二进制应用程序110已经载入到系统存储器104。在操作204,可以确定目标二进制代码块(一个或多个)是否在代码高速缓存(例如,代码高速缓存111)中。每个目标二进制代码块对应于源二进制应用程序110的源二进制代码块。如果目标二进制代码块(一个或多个)不在代码高速缓存中,则操作206可以包括将源二进制代码块(一个或多个)翻译为目标二进制块(一个或多个)、实现探测器(一个或多个)并且将目标二进制块(一个或多个)和探测器(一个或多个)存储在代码高速缓存中。这个翻译可以被配置为相对快速。例如,探测器(一个或多个)可以包括计数器(一个或多个),该计数器(一个或多个)被配置为维持执行二进制块的次数的计数。可以将源处理器寄存器(一个或多个)映射至在系统存储器104中的寄存器存储(例如,源寄存器存储118)、高速缓冲存储器105和/或暂时存储器107。程序流可以接着继续前进到操作211。在操作211,可以执行经翻译的代码块(一个或多个)。如果,在操作204,目标二进制代码块(一个或多个)在代码高速缓存中,则程序流可以继续前进到操作208。在操作208,可以确定是否已经达到阈值。可以至少部分基于在操作206实现的探测器(一个或多个),响应于对执行代码块(一个或多个)的先前的调用,来确定是否已经达到阈值。例如,每次执行二进制块时可以增加计数。如果计数到达预定阈值,则探测器可以被配置为返回程序流(S卩,分支)到动态二进制翻译器供进一步处理。预定阈值可以被配置为指示可以受益于优化的相对频繁地执行的二进制块。如果还没有达到阈值,则程序流可以继续前进到操作211,执行经翻译的代码块(一个或多个)。如果已经达到阈值,则程序流可以继续前进到操作210,优化代码。正如本文中所描述的,优化代码210被配置为包括区域形成和寄存器映射。程序流可以接着继续前进到操作211,执行经翻译的代码块(一个或多个)。图2B描绘了与本公开一致的用于优化代码的流程图210。程序流可以在起始212开始。可以通过包括寄存器映射模块116的动态二进制翻译器代码114,执行流程图210的操作。在操作214,可以进行对满足和/或超过亲合性阈值的邻近二进制块的搜索。邻近二进制块可以与触发了代码优化的二进制块有关。例如,邻近二进制块(一个或多个)可以被配置为正好在触发了代码优化的二进制块的之前或之后执行。邻近二进制块(一个或多个)可以与触发二进制块邻接和/或可以通过分支或跳转与触发二进制块关联。可以将二进制块之间或之内的亲合性理解为二进制块的执行的可能性中的相关性。例如,相关性可以是由于从一个二进制块至另一个二进制块的分支。在操作216,接着可以形成包括满足和/或超过亲合性阈值的邻近二进制块的区域。在操作218,可以为在区域中访问的每个源寄存器确定访问的数量。区域中的指令可以使用源寄存器,即从源寄存器读取,和/或可以定义源寄存器,即写入源寄存器。寄存器访问(即,寄存器运用)包括使用和/或定义寄存器。寄存器映射可以是基于区域中每个源寄存器的访问的总数的。例如,在操作216形成的区域可以包括二进制代码块(一个或多个)。包括二进制块的执行数量的计数的探测器可以与每个二进制代码块相关联。对于每个二进制块,可以基于二进制块的执行数量的计数、二进制块中的指令以及每个指令访问的寄存器,来确定寄存器访问的数量。接着可以通过对于在区域中每个二进制块中的每个寄存器的访问数量进行求和,来确定在区域中访问的每个寄存器的访问的总数。图3描绘了包括代码的示范性区域305的示范性控制流图300。控制流图300包括五个代码块块A 310、块B 320、块C 330、块D 340以及块E 350。每个块具有对应于块的执行数量的相关联的计数312、322、332、342、352,该计数是基于例如在操作206 (图2A)实现的探测器(一个或多个)来确定的。例如,块A、块C和块E每个具有为十的相关联的计数,块B具有为一千的相关联的计数以及块D具有为九百九十的相关联的计数。在这个示例中,相对于图2A的操作208来描述,块B可以已经满足预定阈值,即,块B是频繁地执行的源二进制代码块。块A、块C和块D可以是相对于块B的邻近块。图2B的操作214 (对满足/超过亲合性阈值的邻近块的搜索)可以获得块D。块D是相对于块B的、满足或超过亲合性阈值的邻近源二进制代码块。亲合性对应于频繁地执行的源二进制代码块和邻近源二进制代码块的执行的可能性中的相关性。换句话说,块B具有相对较高的执行的可能性(计数=1000)。块D也具有相对较高执行的可能性(计数=990)。因为计数信息是历史的并且未来的执行频率可能改变,所以使用“执行的可能性”。例如,基于块B和块D之间的分支,块D的执行的可能性与块B的执行的可能性有关。换句话说,块D的执行的可能性与块B的执行的可能性相关。
在这个示例中,五个代码块中,分别具有相对更高执行频率(即,计数)1000和990并且满足或超过亲合性阈值的块B和块D包括在区域305中。块B中的指令访问寄存器rl、r2、r3、r4和r5。寄存器rl和r4被定义(写入)并且寄存器rl、r2、r3、r4和r4被使用(从中读取)。换句话说,对块B的每个执行,访问rl和r4两次并且剩余寄存器每个访问一次。因此,对于具有执行频率1000的块B,访问rl和r4每个2000次并且访问每个剩余寄存器1000次。块D包括访问寄存器r2两次(一次读取和一次写入)和寄存器r5 —次(读取)的一个指令。因此,对于具有990的执行频率的块D,访问r2 1980次并且访问r5 990次。因此,对于包括块B和块D的区域305,总共访问rl 2000次,总共访问r2 2980次,总共访问r3 1000次,总共访问r4 2000次以及总共访问r5 1990次。按寄存器访问的数量,从最频繁地访问的寄存器到最不频繁地访问的寄存器排序寄存器,获得r2、rl和r4、r5以及接着r3。再次转向图2B,在操作220,可以将源寄存器映射至目标寄存器。可以将对应于区域的访问的最高数量(即,最频繁地访问)的源寄存器(一个或多个)映射至目标寄存器(一个或多个)。例如,目标ISA可以具有N,个目标处理器寄存器并且源ISA可以具有N、个源处理器寄存器,其中Nt小于Ns。在N1个目标处理器寄存器其中,N个可以对于映射可用,其中N小于或等于风。继续图3中示出的示例,如果N为三,则可以将寄存器rl、r2和r4映射至区域的目标处理器寄存器。可以不将寄存器r3和r5映射至目标处理器寄存器并且因此可以根据需要将其从存储器中取回。在一些实施例中,对映射可用的目标处理器寄存器的数量(N)可以小于目标ISA的处理器寄存器的数量(风)。换句话说,可以保留一个或多个目标处理器寄存器用于例如使用或定义未映射的源寄存器的指令。例如,可以保留一个或两个目标处理器寄存器用于这样的指令。表I包括对应于一个示例的伪代码,该示例用于确定对于区域中的每个源寄存器的寄存器访问的总数并且映射N个源寄存器至N个目标寄存器。
权利要求
1.一种方法,所述方法包括 载入源二进制应用程序,所述源二进制应用程序包括用于通过计算机系统执行的多个源二进制代码±夹,所述计算机系统包括存储器和包括N,个目标寄存器的处理单元,其中所述源二进制应用程序被配置为在具有民个源寄存器的环境中执行,其中凡小于Ns;在所述源二进制应用程序的运行时期间,识别所述源二进制应用程序内的频繁地执行的源二进制代码块;定义包括所述频繁地执行的源二进制代码块和超过亲合性阈值的至少一个邻近源二进制代码块的区域,所述频繁地执行的源二进制代码块和所述至少一个邻近源二进制代码块两者包括访问至少一个源寄存器的指令;确定对于所述区域中访问的每个源寄存器的访问的频率;以及将所述区域中的N个最频繁地访问的源寄存器的每一个映射到所述Ni个目标寄存器中的相应的一个,其中N小于或等于1%。
2.如权利要求I所述的方法,所述方法还包括至少部分基于所述寄存器映射,生成对应于区域中的每个源二进制代码块的经优化的目标二进制代码块,其中每个经优化的目标二进制代码块包括被配置为将与每个映射的源寄存器相关联的数据从存储器载入到对应目标寄存器的序言、包括对应于所述源二进制代码块的经翻译的源二进制代码和依据条件的跳转的主体以及至少一个结尾,所述依据条件的跳转和所述至少一个结尾被配置为至少部分基于第二目标二进制代码块是否在所述区域中,控制从所述区域中的第一经优化的目标二进制代码块至所述第二目标二进制代码块的流。
3.如权利要求2所述的方法,其中所述多个结尾包括第一结尾和第二结尾,所述第一结尾被配置为如果所述第二目标二进制代码块是在所述区域中的第二经优化的目标二进制代码块,则执行所述第一结尾,所述第一结尾包括跳转到所述第二经优化的目标二进制代码块的主体的第一指令,并且所述第二结尾被配置为如果所述第二目标二进制代码块不在所述区域中,则执行所述第二结尾,所述第二结尾包括将对应于相应映射的源寄存器的每个目标寄存器存储到存储器的第二指令,以及跳转到所述第二目标二进制代码块的开始的第三指令。
4.如权利要求I所述的方法,所述方法还包括识别所述区域的存入和存出寄存器,其包括识别所述区域中的每个源二进制代码块的存入和存出寄存器。
5.如权利要求4所述的方法,所述方法还包括至少部分基于所述寄存器映射,生成对应于所述区域中的每个源二进制代码块的经优化的目标二进制代码块,其中每个经优化的目标二进制代码块包括被配置为将与每个映射且存入的源寄存器相关联的数据从存储器载入到对应目标寄存器的序言、包括对应于所述源二进制代码块的经翻译的源二进制代码和依据条件的跳转的主体以及至少一个结尾,所述依据条件的跳转和所述至少一个结尾被配置为至少部分基于第二目标二进制代码块是否在所述区域中,控制从所述区域中的第一经优化的目标二进制代码块到所述第二目标二进制代码块的流。
6.如权利要求2所述的方法,所述方法还包括执行所述区域中的第一经优化的目标二进制代码块的序言,所述执行包括将对应于所述区域的所述N个映射的源寄存器的相应的一个的数据载入到N个目标寄存器的每一个;执行所述第一经优化的目标二进制代码块的主体,所述第一经优化的目标二进制代码块包括被配置为跳转到第二目标二进制代码块的第一分支指令;确定所述第二目标二进制代码块是否在所述区域中;以及如果所述第二目标代码块在所述区域中,则执行第一结尾以跳转到对应于所述第二目标二进制代码块的第二经优化的目标代码块的主体,或如果所述第二目标代码块不在所述区域中,则执行第二结尾以跳转到所述第二目标代码块的开始。
7.如权利要求5所述的方法,所述方法还包括执行在所述区域中的第一经优化的目标二进制代码块的序言,所述执行包括,对于在所述区域中的每个映射的存入源寄存器,将来自对应于所述映射的存入源寄存器的存储器的数据载入到一个目标寄存器;执行所述第一经优化的目标二进制代码块的主体,所述第一经优化的目标二进制代码块包括被配置为跳转到第二目标二进制代码块的第一分支指令;确定所述第二目标二进制代码块是否在所述区域中;以及如果所述第二目标代码块在所述区域中,则执行第一结尾以跳转到所述第二目标代码块的主体,或如果所述第二目标代码块不在所述区域中,则执行第二结尾以将所述区域的所述映射的存出寄存器存储在存储器中并且跳转到所述第二目标代码块的开始。
8.如权利要求I所述的方法,其中亲合性对应于所述频繁地执行的源二进制代码块和所述至少一个邻近源二进制代码块的执行的可能性中的相关性。
9.如权利要求I所述的方法,其中所述频繁地执行的源二进制代码块和所述至少一个邻近源二进制代码块每个以分支指令为界。
10.一种制品,所述制品包括其上存储有指令的有形存储介质,当通过处理器执行所述指令时,导致下面的操作,包括载入包括用于执行的多个源二进制代码块的源二进制应用程序,其中所述处理器包括恥个目标寄存器,其中所述源二进制应用程序被配置为在具有爲个源寄存器的环境中执行,其中凡小于Ns;在所述源二进制应用程序的运行时期间,识别所述源二进制应用程序内的频繁地执行的源二进制代码块;定义包括所述频繁地执行的源二进制代码块和超过亲合性阈值的至少一个邻近源二进制代码块的区域,其中亲合性对应于所述频繁地执行的源二进制代码块和所述至少一个邻近源二进制代码块的执行的可能性中的相关性,所述频繁地执行的源二进制代码块和所述至少一个邻近源二进制代码块两者包括访问至少一个源寄存器的指令并且每个以分支指令为界;确定对于在所述区域中访问的每个源寄存器的访问的频率;以及将所述区域中的N个最频繁地访问的源寄存器的每一个映射为所述N1个目标寄存器的相应的一个,其中N小于或等于汍。
11.如权利要求10所述的制品,其中当通过所述处理器执行所述指令时导致下面附加的操作,包括至少部分基于所述寄存器映射,生成对应于所述区域中的每个源二进制代码块的经优化的目标二进制代码块,其中每个经优化的目标二进制代码块包括被配置为将与每个映射的源寄存器相关联的数据从存储器载入到对应目 标寄存器的序言、包括对应于所述源二进制代码块的经翻译的源二进制代码和依据条件的跳转的主体以及至少一个结尾,所述依据条件的跳转和所述至少一个结尾被配置为至少部分基于第二目标二进制代码块是否在所述区域中,控制从所述区域中的第一经优化的目标二进制代码块到所述第二目标二进制代码块的流。
12.如权利要求11所述的制品,其中所述多个结尾包括第一结尾和第二结尾,所述第一结尾被配置为如果所述第二目标二进制代码块是在所述区域中的第二经优化的目标二进制代码块,则执行所述第一结尾,所述第一结尾包括跳转到所述第二经优化的目标二进制代码块的主体的第一指令,以及所述第二结尾被配置为如果所述第二目标二进制代码块不在所述区域中,则执行所述第二结尾,所述第二结尾包括将对应于相应映射的源寄存器的每个目标寄存器存储到存储器的第二指令和跳转到所述第二目标二进制代码块的开始的第三指令。
13.如权利要求10所述的制品,其中当通过所述处理器执行所述指令时导致下面附加的操作,包括识别所述区域的存入和存出寄存器,其包括识别所述区域中的每个源二进制代码块的存入和存出寄存器。
14.如权利要求13所述的制品,其中当通过所述处理器执行所述指令时导致下面附加的操作,包括至少部分基于所述寄存器映射,生成对应于所述区域中的每个源二进制代码块的经优化的目标二进制代码块,其中每个经优化的目标二进制代码块包括被配置为将与每个映射且存入的源寄存器相关联的数据从存储器载入到对应目标寄存器的序言、包括对应于所述源二进制代码块的经翻译的源二进制代码和依据条件的跳转的主体以及至少一个结尾,所述依据条件的跳转和所述至少一个结尾被配置为至少部分基于所述第二目标二进制代码块是否在所述区域中,控制从所述区域中的第一经优化的目标二进制代码块到第二目标二进制代码块的流。
15.如权利要求11所述的制品,其中当通过所述处理器执行所述指令时导致下面附加的操作,包括执行在所述区域中的第一经优化的目标二进制代码块的序言,所述执行包括将对应于所述区域的所述N个映射的源寄存器的相应的一个的数据载入到N个目标寄存器的每一个;执行所述第一经优化的目标二进制代码块的主体,所述第一经优化的目标二进制代码块包括被配置为跳转到第二目标二进制代码块的第一分支指令;确定所述第二目标二进制代码块是否在所述区域中;以及如果所述第二目标代码块在所述区域中,则执行第一结尾以跳转到对应于所述第二目标二进制代码块的第二经优化的目标代码块的主体,或如果所述第二目标代码块不在所述区域中,则执行第二结尾以跳转到所述第二目标代码块的开始。
16.如权利要求14所述的制品,其中当通过所述处理器执行所述指令时导致下面附加的操作,包括执行所述区域中的第一经优化的目标二进制代码块的序言,所述执行包括,对于在所述区域中的每个映射的存入源寄存器,将来自对应于所述映射的存入源寄存器的存储器的数据载入到一个目标寄存器;执行所述第一经优化的目标二进制代码块的主体,所述第一经优化的目标二进制代码块包括被配置为跳转到第二目标二进制代码块的第一分支指令;确定所述第二目标二进制代码块是否在所述区域中;以及如果所述第二目标代码块在所述区域中,则执行第一结尾以跳转到所述第二目标代码块的主体,或如果所述第二目标代码块不在所述区域中,则执行第二结尾以将所述区域的所述映射的存出寄存器存储在存储器中并且跳转到所述第二目标代码块的开始。
17.—种系统,所述系统包括处理器,所述处理器包括风个目标寄存器;以及存储器,所述存储器被配置为存储动态二进制翻译器、寄存器映射模块和被配置为在具有Ns个源寄存器的环境中执行的源二进制应用程序,其中风小于Ns,所述源二进制应用程序包括将要在所述处理器上执行的多个源二进制代码块,其中当在所述处理器上执行所述动态二进制翻译器和寄存器映射模块时,所述动态二进制翻译器和寄存器映射模块中的至少一个引起所述处理器以在所述源二进制应用程序的运行时期间,识别所述源二进制应用程序内的频繁地执行的源二进制代码块;定义包括所述频繁地执行的源二进制代码块和超过亲合性阈值的至少一个邻近源二进制代码块的区域,所述频繁地执行的源二进制代码块和所述至少一个邻近源二进制代码块两者包括访问至少一个源寄存器的指令;确定对于所述区域中访问的每个源寄存器的访问的频率;以及将所述区域中的N个最频繁地访问的源寄存器的每一个映射为所述Nt个目标寄存器中的相应的一个,其中N小于或等于義。
18.如权利要求所述的系统17,其中所述寄存器映射模块还引起所述处理器至少部分基于所述寄存器映射,生成对应于所述区域中的每个源二进制代码块的经优化的目标二进制代码块,其中每个经优化的目标二进制代码块包括被配置为将与每个映射的源寄存器相关联的数据从存储器载入到对应目标寄存器的序言、包括对应于所述源二进制代码块的经翻译的源二进制代码和依据条件的跳转的主体以及至少一个结尾,所述依据条件的跳转和所述至少一个结尾被配置为至少部分基于所述第二目标二进制代码块是否在所述区域中, 控制从所述区域中的第一经优化的目标二进制代码块到第二目标二进制代码块的流。
19.如权利要求18所述的系统,其中所述多个结尾包括第一结尾和第二结尾,所述第一结尾被配置为如果所述第二目标二进制代码块是在所述区域中的第二经优化的目标二进制代码块,则执行所述第一结尾,所述第一结尾包括跳转到所述第二经优化的目标二进制代码块的主体的第一指令,并且所述第二结尾被配置为如果所述第二目标二进制代码块不在所述区域中,则执行所述第二结尾,所述第二结尾包括将对应于相应映射的源寄存器的每个目标寄存器存储到存储器的第二指令以及跳转到所述第二目标二进制代码块的开始的第三指令。
20.如权利要求17所述的系统,其中所述寄存器映射模块还引起所述处理器识别所述区域的存入和存出寄存器,其包括识别所述区域中的每个源二进制代码块的存入和存出寄存器。
21.如权利要求10所述的制品,其中亲合性对应于所述频繁地执行的源二进制代码块和所述至少一个邻近源二进制代码块的执行的可能性中的相关性。
22.如权利要求10所述的制品,其中所述频繁地执行的源二进制代码块和所述至少一个邻近源二进制代码块每个以分支指令为界。
23.如权利要求17所述的系统,其中亲合性对应于所述频繁地执行的源二进制代码块和所述至少一个邻近源二进制代码块的执行的可能性中的相关性。
24.如权利要求17所述的系统,其中所述频繁地执行的源二进制代码块和所述至少一个邻近源二进制代码块每个以分支指令为界。
全文摘要
通常来说,本公开提供用于将寄存器从具有较多寄存器的系统映射到具有较少寄存器的系统的系统和方法。可以形成区域,该区域包括具有相对频繁的寄存器访问的一个或多个代码块。可以将最频繁地访问的源寄存器映射至目标寄存器。区域中的每个块可以以序言和至少一个结尾为界。该序言可以被配置为实现寄存器映射并且结尾(一个或多个)可以被配置为管理从区域中的块到区域中的另一个块或到不在区域中的块的程序流。
文档编号G06F9/30GK102934082SQ201180029387
公开日2013年2月13日 申请日期2011年6月14日 优先权日2010年6月14日
发明者G.D.奥托尼, H.王, W.李 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1