浮点操作的改善以及相关的改善的制作方法

文档序号:6476808阅读:168来源:国知局
专利名称:浮点操作的改善以及相关的改善的制作方法
技术领域
本发明一般涉及计算机和计算机系统领域,更具体地,涉及例如在转换
程序代码的代码翻译器(translator )、仿真器和加速器中有用的程序代码转换 方法和装置。更具体地,本发明涉及用于从由主(subject)计算平台可执行 的二进制代码转换为由目标计算平台可执行的目标代码的转换的方法和装 置。 '
背景技术
中央处理单元(CPU)或处理器位于所有现代计算系统的中心。处理器 执行计算机程序的指令,并因此使计算机能够执行有用的工作-以该工作可 能采取的任何形式。CPU在现代生活的所有形式的数字设备中都很普遍,而 不仅仅在专用计算机器(如个人计算机、便携式计算机和PDA)中。现代微 处理器出现在从汽车到蜂窝电话到儿童玩具的每件事物中。在现代计算系统 中,可以在CPU旁边或内部提供额外的硬件以执行作为计算系统工作一部分 的算术操作。这样的硬件可以包含用于执行整数操作的整数单元(IU)和/或 用于执行浮点操作的浮点单元(FPU)。
问题在于,由一种类型处理器可执行的程序代码经常不能在任何其它类 型的处理器中执行,因为每种类型的处理器具有它自己独特的指令集合架构 (ISA)。因此,程序代码转换已经发展为自动地将为一种类型处理器编写的 程序代码转换为由另一种类型的处理器可执行的代码,或者将旧的、低效率 的代码优化为用于相同类型处理器的新的、更快的版本。就是说,在嵌入式 和非嵌入式的CPU中,存在最主要的ISA,对于该ISA已经存在大量的软件, 其可以为了性能加速或"翻译"到呈现更好价格/性能优势的处理器。还发现 了在时间上锁定到它们的ISA并且在性能或市场影响力上不能发展的占优势 的CPU。这个问题在各级别的计算工业中适用,从单机的便携式计算设备一 直到具有数十或数百强大服务器的大规模网络。
作为程序代码转换这个领域中的背景信息,标题为"Program CodeConversion"的WO2000/22521、标题为"Method and Apparatus for Performing Interpreter Optimizations during Program Code Conversion"的WO2004/095264 以及才示题为 "Improved Architecture for Generating Intermediate Representations for Program Code Conversion"的WO2004/097631 PCT公开,公开了方法和装 置以便利这样的程序代码转换能力,该程序代码转换能力可以在于此讨论的 示例实施例中^f吏用,在此通过引用并入其全部。
在程序代码转换期间, 一个特定的问题领域涉及以浮点符号表示的数值 的处理。已经根据特定类型的处理器编写的原始程序代码(这里称为"主代 码")期望特定类型的执行环境。特别地,主代码期望对以浮点符号表示的浮 点数值的操作的硬件支持到特定的数值精度级别。该硬件支持由主FPU提供。
但是,在程序代码转换期间,主代码转换为在目标计算平台上执行的目 标代码。目标计算平台可能包含这样的FPU,该FPU支持关于在比由主FPU 支持的精度低的精度的数值的操作。在这种情况下,在主计算平台和目标计 算平台之间存在基本的硬件不兼容。
响应上述问题,PCT公开WO2005/003959描述了这样的机制,其用于使 用目标计算平台上的目标FPU和整数硬件的组合,在目标计算平台上执行浮 点操作。但是,利用使用目标计算系统上的整数硬件以提供浮点操作的结果 的机制通常很慢。
因此,在程序代码转换期间遇到两个问题。第一,存在这样的问题目 标计算平台的硬件可能不提供对主代码期待的精度级别的浮点硬件支持。第
二,存在这样的问题使用目标计算平台的整数硬件来提供在主代码希望的 精度、以及高于由目标FPU支持的精度的浮点操作的结果可能是低效率的。问题。

发明内容
根据本发明,提供了如权利要求所述的装置和方法。从从属权利要求和 下面的说明,本发明的其它特征将是明显的。
下面是根据本发明的实施例可实现的各个方面和优势的总结。它作为介 绍提供以帮助那些本领域的一般技术人员更迅速地吸收详细的设计说明,该 说明追求并且不是和不打算以任何方式限制权利要求的范围。特别地,发明人已经开发了指引程序代码转换的方法,该方法连同运行 时间翻译器特别有用,该运行时间翻译器提供主代码到目标代码的动态二进 制翻i奪。
在本发明的一个示例性方面,提供了一种计算系统,包含处理器;所 述处理器内的浮点单元和整数单元;翻译器单元,被安排来接收包括至少一 个涉及浮点操作的指令的主代码指令,并且作为响应产生用于在所述处理器 上执行的相应的目标代码;翻译器内的浮点状态单元,被安排为根据接收的 主代码指令产生浮点状态信息;以及翻译器单元内的浮点控制单元,被安排 来从浮点状态单元接收浮点状态信息,并且作为响应控制翻译器单元产生 用于在浮点单元上执行浮点操作的目标代码;或者用于使用整数单元和浮点 单元的组合执行浮点操作的目标代码。
在本发明的另一个示例性方面,提供了一种计算系统,包含处理器; 所述处理器内的浮点单元和整数单元;翻译器单元,被安排来接收包括至少 一个涉及浮点操作的指令的主代码指令,并且作为响应产生用于在所述处理 器上执行的相应的目标代码;翻译器内的浮点状态单元,被安排来根据接收 的主代码指令产生浮点状态信息;以及翻译器单元内的浮点控制单元,被安 排来从浮点状态单元接收浮点状态信息,并且作为响应控制翻译器单元产生 用于在浮点单元上直接执行浮点操作的目标代码;或者用于使用整数单元和 浮点单元之一或两者间接执行浮点操作的目标代码。
在本发明的另 一个示例性方面,提供了 一种在动态二进制翻译器中使用 的解码器单元,该解码器单元包含浮点状态单元,被安排来根据由解码器 单元接收的主代码指令中的浮点指令产生浮点状态信息;以及浮点控制单元, 被安排来从浮点状态接收浮点状态信息,并且作为响应产生指示用于浮点指 令输出的期望的数值精度级别的控制信号。
在本发明的另一个示例性方面,提供了一种处理计算系统中的浮点指令 的方法,包含计算机实现的以下步骤接收包括至少一个涉及浮点操作的指 令的主代码指令;根据接收的主代码指令产生浮点状态信息;以及响应该浮 点状态信息,产生用于在计算系统的浮点单元上执行浮点操作的目标代码; 或者用于使用计算系统的整数单元和计算系统的浮点单元的组合执行浮点操 作的目标代码。 .
在本发明的另 一个示例性方面,提供了 一种处理计算系统中的浮点指令的方法,包含计算机实现的以下步骤接收包括至少一个涉及浮点操作的指 令的主代码指令;根据接收的主代码指令产生浮点状态信息;以及响应该浮 点状态信息,产生用于在计算系统的浮点单元上直接执行浮点操作的目标 代码;或者用于使用计算系统的整数单元和计算系统的浮点单元的组合间接 执行浮点操作的目标代码。
本发明也扩展到安排来执行在这里说明的本发明的实施例翻译器装置。. 同样地,本发明扩充到计算机可读存储介质,在其上具有记录的指令,该指 令可以由计算机实现以执行在这里定义的任何方法。
造。在这里使用的术语如"组件"、"模块"或"单元,,可以包括但不限于硬 件设备,如场可编程门阵列(FPGA )或执行某些任务的专用集成电路(ASIC )。 可替代地,本发明的要素可以配置为驻留在可寻址的存储介质上,并且可以 配置为在一个或多个处理器上执行。因此,在一些实施例中,本发明的功能 性要素作为例子可以包括组件,如软件组件、面向对象的软件组件、类组
件和任务组件;进程;函数;属性;过程;子程序;程序代码的段;驱动;
固件;微代码;电路;数据;数据库;数据结构;表;阵列和变量。进一步 地,虽然已经参考下面说明的组件、模块和单元说明了优选实施例,但是这 样的功能性要素可以结合为更少的要素或者分开为额外的要素。


并入并且构成说明书一部分的附图目前图示了优选实现并且描述如下 图l是图示本发明的实施例找到应用的装置的方框图; 图2是由本发明的实施例使用的程序代码转换过程的原理性纵览; 图3显示图示根据本发明的示例性实施例的计算机系统的方框图; 图4显示图示由图3的实施例中的浮点状态单元、浮点控制单元和浮点 计算单元执行的步骤的流程图5显示一段示例性主代码、如图3的实施例中所示的翻译器以及由翻 译器单元产生的四个目标代码基本块;
图6显示另外一段示例性主代码、如图3的实施例中所示的翻译器以及 由翻译器单元产生的四个目标代码基本块;
图7显示第二个另外一段示例性主代码、如图3的实施例中所示的翻译器以及由翻译器单元产生的两个目标代码基本块;
图8显示第三个另外一段示例性主代码、如图3的实施例中所示的翻译 器以及由翻译器单元产生的两个目标代码基本块;
图9显示第四个另外一段示例性主代码、如图3的实施例中所示的翻译 器以及由翻译器单元产生的三个目标代码基本块;
图10显示根据本发明的实施例的流程图,该流程示当产生在低精度 进入条件下进入的基本块时,由图3的实施例中的浮点状态单元、浮点控制 单元和浮点计算单元执行的步骤;以及
图11显示根据本发明的实施例的流程图,该流程图说明当产生在高精卑 进入条件下进入的基本块时,由图3的实施例中的浮点状态单元、浮点控制 单元和浮点计算单元执行的步骤。
具体实施例方式
提供下面的说明以使本领域的一般技术人员能够进行和使用本发明,并 且提出发明人预期的执行他们发明的最好模式。但是,各种修正将对那些本 领域的技术人员保持显而易见,因为本发明的一般原理已经在此具体定义以 提供改善的程序代码转换方法和装置。
图1给出本发明的示例性实施例可以找到应用的系统和环境的纵览,以 便介绍下面将更详细说明的组件、模块和单元。参考图1,主程序17意图在 包含至少一个主处理器3的主计算平台l上执行。但是,通过执行程序代码 转换的翻译器单元19,改为使用目标计算平台10执行主程序17。翻译器单 元19执行从主代码17到目标代码21的代码转换,使得目标代码21在目标 计算平台10上可^l行。
如那些本领域的技术人员熟悉的,主处理器3包含一组主寄存器5。在 其它的事务中,主存储器8保持主代码17和主才喿作系统2。主计算平台l在 主处理器3内进一步包括用于计算浮点操作的FPU 4和用于执行整数操作的 整数单元6。如那些本领域的技术人员已知的,FPU 4和IU 6可以包含任何 各种类型硬件单元。这里,作为例子,FPU4根据标题为"IEEE Standard for Binary Floating Point Arithmetic (ANSI/IEEE Std 754-1985),,的正EE 754 Standard才喿作。
这个标准由很多FPU使用,并且定义了用于表示浮点数的格式、特殊值(例如无穷大)的表示、异常、取整模式以及在任何一致系统上将相同地工
作的一组浮点操作。IEEE 754 Standard还指定了用于表示具有单精度(32位)、 双精度(64位)和双扩展精度(典型为80位)的浮点数值的格式。
类似地,图1中示例性的目标计算平台10包含至少一个目标处理器 13,该目标处理器13包含多个目标寄存器15;以及存储器18,用于存储多 个操作组件,包括目标操作系统20、主代码17、翻译器代码19和翻译的目 标代码21。目标计算平台10典型地是基于微处理器的计算机或其它适合的 计算机。目标计算平台10包括用于计算浮点操作的FPU 14和用于执行整数 操作的IU 16。
在一个实施例中,翻译器代码19是仿真器,用于优化或不优化地将主指 令集合架构(ISA)的主代码翻译为另一个ISA的翻译的目标代码。在另一 个实施例中,翻译器单元19用作加速器,用于通过执行程序代码优化将主代 码翻译为目标代码,主代码和目标代码中的每个属于相同ISA。
翻译器代码19是实现翻译器的源代码的适合的编译版本,并且在目标处
理器13上与操作系统20—起运行。应该意识到图1中说明的结构只是示
例性的,并且例如根据本发明的实施例的软件、方法和过程可以以驻留在操
作系统20内或之下的代码实现。如本领域的技术人员已知的,主代码17、
翻译器代码19、操作系统20和存储器18的存储机制可以是各种类型中的任 何一个。
在根据图1的装置中,在目标代码21正在运行同时,在运行时间动态地 执行程序代码转换以在目标架构IO上执行。也就是说,翻译器单元19与翻 译的目标代码21内联(inline)运行。通过翻译器单元19运行主程序17涉 及以交织方式执行的两种不同类型的代码翻译器代码19;以及目标代码 因此,根椐存储的正在被翻译的程序的主代码17,贯穿运行时间由翻译器代 码19产生目标代码21。
在一个实施例中,翻译器单元19仿真主架构1的有关部分,如主处理器 3以及特别是主寄存器5,同时实际上在目标处理器13上执行作为目标代码 21的主程序17。在优选实施例中,至少提供一个全局寄存器存储27 (也称 为主寄存器组(bank) 27或抽象寄存器组27)。在多处理器环境中,根据主 处理器的架构可选地提供多于一个抽象寄存器组27。主状态的表示由翻译器 单元19和目标代码21的组件提供。也就是说,翻译器单元19以各种显式的编程语言设备(如变量和/或对象)存储主状态。翻译的目标代码21通过比 较,在通过目标代码21的目标指令搡纵的目标寄存器15和存储器位置18中 隐式地提供主处理器状态。例如,全局寄存器存储27的低级别表示是筒单的 分配的存储器区域。但是,在翻译器单元19的源代码中,全局寄存器存储 27是可以在更高级别访问和操纵的数据阵列或对象。
术语"基本块,,对那些本领域的技术人员将是熟悉的。基本块是代码的 一部分,该部分正好具有一个进入点以及正好一个退出点,这将块代码限制 为单个控制路径。因为这个原因,基本块是控制流的有用的基本单元。翻译 器单元19合适地将主代码17分割为多个基本块,其中每个基本块是在单一 入口点的第一条指令和单一退出点的最后一条指令之间的顺序的指令集合 (如jump、 call或branch )。翻译器单元19可以选择这些基本块之一 (块模 式)或选择一组基本块(组块模式)。组块适当地包含两个或更多基本块,它 们一起被当作单个单元。此外,翻译器可以形成iso-block,其表示主代码的 相同基本块但是在不同进入条件下。
在优选实施例中,基于主指令序列产生中间表示(IR)的树,作为从原 始主程序17产生目标代码21的过程的一部分。IR树是计算的表达式和由主 程序执行的操作的抽象表示。随后,基于IR树产生("种植(plant)")目标 代码21 。IR节点的集合实际上是定向非循环图(directed acyclic graphs, DAG),
但是通俗地称为"树"。
如那些本领域的技术人员意识到的,在一个实施例中,使用面向对象的
编程语言(如C+十)实现翻译器单元19。例如,IR节点实现为C+十对象,并
且对其它节点的引用实现为对相应于那些其它节点的C"H+对象的C"H+引用。
因此IR树实现为IR节点对象的集合,包含相互间的各种引用。
此外,在讨论中的实施例中,IR产生使用一组对应于主架构的特定特征 的寄存器定义,主程序17意图在该主架构上运行。例如,对于主架构上的每 个物理寄存器(即,图1的主寄存器5)存在唯一的寄存器定义。因此,翻 译器中的寄存器定义可以实现为包含对IR节点对象(即,IR树)的引用的 C+十对象。由该组寄存器定义引用的所有IR树的集合体称为工作IR森林("森 林"是因为它包含多个抽象寄存器根,每个根称为IR树)。这些IR树和其它 过程适合地形成翻译器单元19的一部分。
图1更进一步显示了目标架构10的存储器18中的本地代码28。目标代码21和本地代码28存在区别,该目标代码21从主代码17的运行时间翻译 得到,该本地代码28直接为目标架构编写或编译。在一些实施例中,当翻译 器单元19检测到主程序的控制流进入到主代码17的一部分(如主库)时, 通过翻译器单元19实现本地绑定(binding),对于该主库存在主代码的本地 版本。不同于翻译主代码,翻译器单元19替代地使得等价的本地代码28在 目标处理器13上执行。在示例性实施例中,翻译器单元19使用定义的接口 (如本地代码或目标代码调用存根(stub)),将产生的目标代码21绑定到本 地代码28,如在7>开的PCT申请WO2005/008478中更详细地说明的,在此 通过引用并入其公开内容。
图2在翻译器单元19运行在目标计算平台IO上时更详细地说明它。如 上所述,翻译器单元19的前端包括解码器单元191,它对主程序17的当 前需要的部分解码以提供多个主代码块171a、 171b、 171c(它们通常每个包 含主代码的一个基本块),并且也可以提供解码器信息172,该解码器信息172 与每个主块和其中包含的主指令有关,这些将帮助解码器单元19的随后操 作。在一些实施例中,翻译器单元19的核心192中的IR单元从解码的主指 令产生中间表示(IR),并且及时地执行与中间表示有关的优化。作为翻译器 单元19的后端的编码器193产生(种植)由目标处理器13可执行的目标代 码21。在这个筒化的例子中,产生三个目标代码块211a-211c以在目标平台 IO上执行工作,等价于在主平台1上执行主代码块171a-171c。同样地,编 码器193可以产生控制代码212用于一些或所有目标代码块211a-211c,该控 制代码212执行如设置目标块将运行的环境以及在适当时将控制传回给翻译 器单元19的功能。这样安排翻译器单元19以使目标代码21的执行与目标操 作系统20连接。
图3显示图示根据本发明的示例性实施例的计算机系统10的方框图。在 图3中,主代码17期待对以浮点符号表示的数值的操作的硬件支持到特定的 数值精度级别。但是,在图3的计算机系统10中,主代码17由翻译器19转 换为目标代码21。目标代码21由目标处理器13执行。目标处理器13包含 IU 16和FPU 14,该FPU 14支持对低于主代码17期望的精度的数值的浮点 操作。在这种情况下,主代码和目标处理器13的硬件之间存在基本的不兼容。
术语高精度指高于由目标处理器13的FPU 14的硬件提供的数值精度的 级别。低精度指低于或等于由目标处理器13的FPU 14的硬件提供的数值精度的级别。可以认为高精度是高于上面的目标精度,即数值上比由目标处理
器13本地满足的精度更精确。当由主代码17期望的硬件中出现比目标FPU 14 中出现的更多的数据位时,产生高精度问题。
翻译器单元19的解码器191内是浮点状态单元195。安排浮点状态单元 以确定浮点状态信息。根据由翻译器单元19接收的主代码17中的指令确定 浮点状态信息。浮点状态信息指示是否要直接使用FPU 14来提供主代码17 中的浮点操作的结果,或者是否例如通过单独地或与FPU 14组合地使用IU 16来间接地提供结果。
浮点控制单元196显示在翻译器19内。浮点控制单元196从浮点状态单 元195接收浮点状态信息。浮点控制单元196从接收到主代码指令检查浮点 操作,并且当识别出浮点操作时,检查浮点状态信息。浮点控制单元196然 后控制翻译器单元19产生目标代码21。
在这个实施例中,浮点控制单元发送控制信号给核心192中的浮点计算 单元197。浮点计算单元197根据从浮点控制单元196接收到的控制信号产 生并优化适合的中间表示。从此,代码产生器193产生相应的目标代码21。 目标代码21包含在目标处理器13上直接运行时、在FPU 14上执行由主代 码17要求的浮点操作的代码;或者包含代码,该代码在目标处理器13上运 行时,使用IU 16和/或FPU 14间接地产生由主代码17要求的浮点操作的结 果。在另一个实施例中,浮点计算单元197促使代码产生器193种植目标代 码21以执行浮点操作,而不需要例如通过利用翻译器单元19可用的目标代 码推理地产生特定的IR。
讨论图3中显示的实施例,主代码17例如可以包含Intel x86指令,包 括要在x87 FPU上执行的来自x87指令子集的there-within指令。x87 FPU根 据控制寄存器中设置的值,提供准确到32、 64或80位精度之一的输出。如 果图3中显示的目标处理器13是PowerPC,那么以32或64位的精度提供 FPU 14的输出。PowerPC的FPU不支持80位扩展精度操作以及更高精度的 操作。
为允许PowerPC以80位精度产生结果,FPU 14可以与IU 16组合使用。 但是,由翻译器单元19产生的目标代码21用于组合地使用FPU 14和IU 16 来评估80位浮点操作的结果很慢。因此希望的是通过减少分配给IU的工 作量来改善目标处理器中的效率,并且最好地利用目标处理器的FPU。现在更详细说明浮点状态单元195、浮点控制单元196和浮点计算单元 197。浮点状态单元195根据由翻译器单元19接收的主代码17中的指令确定 浮点状态信息。浮点状态单元195识别提供数据给主FPU的主代码中的指令, 并且确定这样的数据的精度。具体地,作为源操作数提供给主FPU的数据用 于设置浮点状态信息。
当在主代码17中遇到装载数据到主FPU中的指令时,浮点状态单元195 根据数据的精度和FPU 14的精度确定是否直接使用FPU 14提供主代码17 中的浮点操作的结果,或者是否应该单独地或与FPU 14组合地使用IU 16以 间接地提供结果。然后,浮点状态单元195因此设置浮点状态信息。
现在说明在这里使用的术语直接和间接,该术语与目标代码利用目标 FPU 14和IU 16产生主代码的浮点操作的结果有关。直接使用目标FPU 14 是在由目标FPU支持的精度级别使用目标FPU硬件。当提供来自主代码的源 操作数给目标FPU时,该主代码在目标FPU能够支持的数值精度的级别,目 标FPU可以直接利用其硬件来使用源操作数产生浮点操作的结果。间接使用 FPU 14和/或IU 16是使用FPU 14和/或IU 16以对源操作数执行中间运算, 作为产生主代码中指定的浮点操作的输出的工作的一部分。间接使用FPU 14 和/或IU 16允许低精度的硬件产生高精度的结果,但是以执行一组合适的中 间计算为代价。在示例性实施例中,间接使用FPU 14和/或IU 16以比目标硬
件提供的精度更高的精度产生主代码中浮点操作的结果涉及浮点仿真算法的 使用。适合的仿真算法包含SoftFloat算法。适合的仿真算法典型地将在高精 度浮点操作的结果的间接计算中使用目标IU 16,但是可以额外使用目标FPU 16。但是在一些实施例中,可能的是在以高精度间接评估指定主浮点操作 的结果中,只^使用FPU 16。
浮点控制单元196从浮点状态单元195接收浮点状态信息,并且从接收 的主代码指令检查浮点操作。浮点控制单元196识别出主代码17中的浮点操 作,并且记录浮点状态信息。浮点控制单元196传递控制信号给浮点计算单 元197。作为响应,浮点计算单元197产生并优化适合的中间表示。从此, 代码产生器193产生相应的目标代码21,该目标代码21直接使用FPU 14, 以要求的精度级別提供主代码17中的浮点操作的结果;或者间接使用IU 16 和/或FPU14以提供结果。
在一个实施例中,安排浮点状态单元195以产生与每条数据相关联的标志,该数据是用于浮点操作的可使用的源操作数。例如,用于浮点操作的源
操作数可以从存储器装载到FPU中,或者通过直接将寄存器内容设置为预先 确定的数学或其它常数(如pi)的主指令。标志包含浮点状态信息,并且指 示数据的精度。安排浮点状态单元195以识别和区分装载指令和指定相关联 数据的并fr度的主代码17中的其它指令。
浮点控制单元196在接收到的主代码中识别出用于浮点操作的操作数, 并且4佥查从浮点状态单元195接收到的标志。浮点控制单元196控制浮点计 算单元197以确保正确使用目标处理器中的硬件产生浮点操作的结果。适合 地安排浮点状态单元195以产生指示浮点操作的结果的精度的标志,然后在 适合的目标代码的产生中,浮点控制单元196和浮点计算单元197也使用该 标志。在一个示例性实施例中,确定对高精度源操作数执行的操作的结果自 己为高精度,并且将它们自己标志为高精度数据,还要求以高精度对该结果 执行随后的操作。
图4显示图示由上面所述实施例中的浮点状态单元、浮点控制单元和浮 点计算单元197执行的步骤的流程图。在步骤901,对主指令解码,然后在 步骤902由浮点控制单元196分析以确定是否它是浮点操作。如果它是,那 么右手分支前进到步骤904。在这个步骤,检查操作数的标志。
如下面更详细说明的,当数据装载到主FPU的数据结构中、或者变为主 浮点源操作数时,由浮点状态单元195根据数据的精度设置标志。
在步骤904,如果一个或多个搡作数的标志指示高精度,那么浮点控制 单元196促使浮点计算单元197产生IR,该IR将导致由编码器193产生目 标代码,在该编码器193中在目标FPU 14和IU 16的组合上执行才喿作(步骤 卯6)。然后在步骤908,浮点计算单元197设置用于浮点操作的结果的标志 以指示高精度。在步骤904如果浮点控制单元确定操作数的标志指示低精度, 那么浮点控制单元196促使浮点计算单元197产生IR,该IR将导致由编码 器193产生目标代码,在该编码器193中在目标FPU 14上执行正在讨论的操 作,而不涉及目标IU16 (步骤907)。此后,流程继续到步骤909,其中浮点 状态单元195为浮点操作的结果设置标志以指示低精度。
在步骤902,如果浮点控制单元确定下一个指令不是浮点搡作,那么左 手分支前进到步骤903。在这个步骤,由浮点状态单元195分析指令以确定 是否它是数据的装载。如果它不是,那么浮点控制单元196和浮点状态单元195的工作就完成了 ,直到下一个主代码指令在步骤901被解码。在步骤903 如果浮点状态单元195确定指令是装载,那么浮点状态单元195根据由装载 指令指定的精度为装载的数据设置标志,并且浮点控制单元196和浮点状态 单元195的工作就完成了 ,直到下一个主代码指令在步骤卯l被解码。
上面说明的实施例使用由浮点状态单元195产生的标志,允许数据精度 的精确跟踪。但是,所迷标志的产生引入了管理开销。
作为上面实施例的替换,该实施例在浮点状态信息的产生中使用与每条 装载的数据相关联的标志,本发明的第二个实施例利用由主代码17期望的 FPU 4的特性,特别是使用与FPU 4相关联的数据结构的特性。在第二个实 施例中,浮点状态单元195产生浮点状态信息而不增添显著的管理负担。在 第二个实施例中,浮点状态信息单元基于每个基本块产生浮点状态信息。浮
点状态单元在目标代码的基本块的开始,根据与FPU 4相关联的数据结构的 特性产生浮点状态信息。然后对整个基本块只使用目标FPU直接执行主代码 17要求的浮点操作,或者用于整个基本块在目标FPU14和/或目标IU 16中使 用间接计算,产生目标代码的基本块。 ' 图5图示如转换为目标代码21之前存储在目标处理器13的存储器18 中的一段示例性主代码17。图5中也显示了四个目标代码基本块21a、 21bl、 21c和21b2以及翻译器单元19。当主代码17转换为目标代码21时,由翻译 器单元19产生目标代码基本块。目标代码基本块21bl和21b2是iso-block, 表示主代码的相同基本块但是在不同的进入条件下。图5中也显示翻译器可 访问的存储位置27a和27b,并且它形成与主FPU 4相关联的主数据结构的 表示。
基本块21bl和21b2之间不同的进入条件涉及与主FPU4相关联的存储 27a内的数据的精度。进入条件描述存储27a内的哪些数据表示高精度数据。 在开始块的翻译时,这个数据装载到浮点状态单元195中作为浮点状态信息。 当指令由翻译器单元19翻译时,浮点状态单元195更新这个信息。当装载巧 精度数据到FPU中的指令由解码器191翻译为块时,更新浮点状态信息以反 应这个。在翻译接收到的主代码中的浮点指令时,浮点控制单元196检查浮 点状态信息。如果用于指令的操作数是低精度,那么在浮点控制单元196的 控制下由浮点计算单元197产生IR,从而以低精度执行操作,并且更新浮点 状态信息以跟踪低精度的结果。在指令的操作数是高精度的情况下,在浮点控制单元196的控制下由浮点计算单元197产生IR,从而以高精度执行操作, 并且更新浮点状态信息以跟踪结果为高精度值。在块的结尾,将浮点状态信 息从浮点状态单元195复制回去;这个数据将形成随后执行的块的进入条件 的一部分。
特殊精度的基本块/iso-block的建立帮助IR中的块优化。
再参考图5,主代码17包括从对应于主代码程序计数器0x2000的存储 器地址开始的块B (420),并且包括浮点操作。但是,当翻译器对块B解码 时,事先不知道这个块将包含什么指令。特别地,不知道是否该块将装载任 何数据到与FPU4相关联的数据结构中,是否该块将包含任何浮点操作,以 及将为任何这样的浮点操作的结果指定什么精度级別。
从在0x1000开始的块A ( 410 )或者从在0x4000开始的块C ( 430 )的 任一到达块B。在块A的结尾,高精度数据装载到与FPU4相关联的数据结 构的表示中。当从块A到达块B时,产生专用于高精度数据的进入条件的基 本块21bl。在这些进入条件下,间接使用目标处理器13的FPU 14和/或目标 处理器13的IU 16来评估在块B中指定的浮点操作的结果。
在块C的结尾,低精度数据装载到与主FPU4相关联的数据结构的表示 中。当从块C的结尾到达主代码块B时,产生专用于低精度数据的进入条件 的基本块。在这些进入条件下,直接使用目标处理器13的FPU 14来评估垛 B中指定的浮点操作的结果。
例如,主代码17可以包含Intel x86指令,包括要在x87 FPU上执行的 来自x87指令子集的there-wkhin指令。x87 FPU利用堆栈数据结构以保持用 于FPU的源操作数,并且保持FPU的输出。x87将用于FPU的源操作数和 FPU的输出存储在寄存器堆栈中。x87 FPU寄存器堆栈包含8个寄存器,每 个是80位宽。数据从存储器压到堆栈上,以及从堆栈弹回存储器。与浮点操 作有关的指令通常将从堆栈的顶部弹出两个源操作数,对它们操作,并且将 FPU操作的结果压回到堆栈的顶部。
通过监视主FPU堆栈的表示的内容,当该块开始时,浮点状态单元195 可以确定块中FPU操作的结果要求的可能的精度。监视主FPU堆栈的表示提 供产生浮点状态信息的特别方便的方法。
安排翻译器单元19以维持作为如参照图1所述的主寄存器组27的一部 分的主FPU寄存器堆栈的表示。这个表示包括主FPU寄存器堆栈中数据位置的表示、以及主FPU堆栈指针的表示,它们例如显示为图5中的存储位置27a 和27b。
现在说明这样的例子,其中主代码17包含来自x87指令子集的80位指 令,并且目标处理器的FPU只精确到64位精度。当在基本块的开始处主寄 存器堆栈的表示只包含64位数据时,浮点状态单元195设置浮点状态信息, 使得目标处理器13的FPU 14用于对块中数据执行浮点操作。主浮点状态单 元195监视块中的主代码指令,并且如果它识別出将高精度数据压到主FPU 堆栈的指令,那么它对浮点状态信息执行两个操作。第一,设置浮点状态信 息,使得浮点控制单元196结束基本块。第二,设置浮点状态信息,使得浮 点控制单元195建立新的基本块。
响应如上所述的浮点状态信息的改变,浮点控制单元196促使目标代码 产生,以便重新格式化主FPU堆栈27a的表示中存在的任何64位数据,使 得它根据80位数据的协定存在。这个过程称为上转换。浮点控制单元196促 使要产生的目标代码对新的基本块内的主FPU堆栈27a的表示中存在的数据 执行浮点操作,在该目标代码中间接使用FPU 14和/或IU 16。
通过监^f见主FPU堆栈指针27b的表示,浮点状态单元195确定什么时候 主FPU堆栈27a是空。当这个发生时,浮点状态单元195设置浮点状态信息 以指示对任何以前装载的高精度数据的所有操作完成。然后,在浮点控制单 元196的控制下产生目标代码块,该浮点控制单元196只直接使用目标FPU 14 产生主代码17中的浮点操作的结果。
监视与为FPU提供源操作数的指令(如主代码FPU装载指令)相关联 的精度,以及监视主FPU堆栈指针27b的表示以确定从上次堆栈指针27b指 示堆栈27a为空以来是否已经执行了任何高精度指令,为浮点状态单元195 提供信息以有效地设置浮点状态信息。使用浮点状态信息允许直接利用目标 处理器13的FPU14、或者间接使用目标处理器的FPU14和/或IU16,选择 性产生该目标代码,从而产生目标代码17中指定的浮点操作的结果。这个实 施例在监视数据中只引入最小的开销,并且提供产生浮点状态信息的方便的 方法,该浮点状态信息用于产生接收的主代码的翻译。
图6图示如转换为目标代码21之前目标处理器13的存储器18中存储的 一段示例性的主代码17。主代码17由分别标为410、 420和430的块D、 E 和F组成。在图6中还显示四个目标代码基本块21d、 21el、 21f和21e2和翻译器单元19。当主代码17转换为目标代码21时,由翻译器单元19产生目标代码基本块。目标代码基本块21el和21f2是iso-block,表示主代码的相同基本块,但是在不同的进入条件下。图6说明了类似于图5的情形,但是其中产生的目标代码块21el和21fl分別表示用低精度和高精度进入条件产生的iso-block。
图7说明响应操作结束块和开始新块的过程,该操作要求比在块开始时由浮点状态信息所指示的精度更高的精度。主代码块G(410)以低精度进入条件开始。翻译器单元19中的浮点状态单元195识别出块G的主代码17中的指令,该指令取高精度操作数或者要求比块开始时由浮点状态信息所指示的精度更高精度的输出。当前基本块21gl结束。在高精度进入条件下建立新的基本块21g2,而不包括要求高精度的指令的翻译。 .
图8图示响应操作结束块和开始新块的过程,该操作要求比在块开始时由浮点状态信息所指示的精度更低的精度。以高精度进入条件开始主代码块H(410)。翻译器单元19中的浮点状态单元195识别出在某个时间点,与主FPU相关联的数据结构中没有数据是高精度。当前基本块21hl结束。在高精度进入条件下建立新的基本块21h2。
在一些情况下,上述浮点状态单元195和浮点控制单元196将响应接收到的主代码指令操作,从而产生目标代码的基本块,其唯一功能是执行主FPU堆栈27a、 27b的表示中存储的数据的上转换。
图9显示在低精度条件下建立的主代码块I (410)。低精度条件持续,直到响应图示的Jump指令结束块。但是,当执行Jump指令时,下一个指令(即,块J (420)中的第一个指令)与高精度数据有关。当目标代码块21jl建立时,块中的第一个指令还未由翻译器单元19解码。在这种情况下,建立低精度块21jl,上转换FPU堆栈27a的主代码表示中的装栽数据,然后建立高精度块21j2。
图10显示图示在低精度进入条件下进入的基本块的产生的流程图。对要转换的一段主代码17中的第一个基本块,可以假定这些进入条件为默认条件,因为如果可能,希望在评估主代码浮点操作的结果时只使用目标处理器13的FPU 14。由浮点状态单元195执行设置要求的精度。如上所述,浮点状态单元195建立浮点状态信息,优选指示块的精度是目标处理器13的FPU 14支持的最高精度级别。在这个例子中,在步骤501将块建立为低精度块,并且开始主指令的解码。在步骤502,分析第一个主指令以确定是否要求高精度。如果不要求高精度,那么在步骤503将指令添加到块中。然后分析在步骤503添加的主指令以确定是否它包含结束块的指令。如果它不结束块,那么过程返回到步骤503,并且分析下一个指令以确定是否要求高精度。如果在步骤505确定指令结束块,那么结束块,并且将用于下面的块的进入条件设置为低精度进入条件(步骤506 )。
如果在步骤502确定下一个指令要求高精度,例如因为指令涉及80位数据的装载,或者涉及对64位数据的浮点操作但输出要取整为80位,那么在步骤504, FPU寄存器堆栈中存储的值上转换为高精度。其后在步骤507,结束块,并且将用于下面的块的进入条件设置为高精度进入条件。要求更高精度的指令形成下面的块中的第一个指令。
根据图5的方法作为低精度块产生的块,不要求目标处理器13的IU 16以要求的精度级别产生主代码17中的浮点4喿作的结果。 '
图11显示在通过高精度进入条件下建立的块工作时执行的步骤。在步骤601,作为高精度块建立块。在步骤602,作为高精度指令添加第一个主指令。这个指令将导致产生目标代码,其中使用FPU 14和IU 16计算主代码中指定的浮点操作的结果。在步骤603,分析下一个主指令以确定是否仍然要求高精度。如果仍然要求高精度,那么分析在步骤602添加的指令以确定是否它包含结束块的指令(步骤605 )。如果它不结束块,那么过程返回到步骤602,并且添加下一个指令到块。
如果在步骤605确定指令结束块,那么结束块,并且用于下面的块的进入条件设置为高精度进入条件(步骤606)。
如果在步骤603确定可以以低精度执行下一个指令,例如因为在主FPU27a的表示中不存在高精度数据,例如通过检查主FPU堆栈指针27b的表示的状态指示,那么方法前进到步骤607,其中块结束,并且用于下面的块的进入条件设置为低精度进入条件。导致块结束的64位指令形成下面的块的第一个指令,才艮据图IO的方法产生下面的块。
如由前面的说明已经显示的,上面的各种实施例提供目标机器上主程序代码的有效处理,其中主代码操作数或主代码操作的结果要求的精度与由目标机器所提供的不同。此外,当对不同精度的数据操作时,快速和有效地识别和处理主程序代码指令,该主程序代码指令涉及比由目标机器结构所支持的精度更高的精度。
在上面的每个实施例中分别说明翻译器单元的不同结构和本发明的方
法。但是,本发明的发明者的完整意图是在这里说明的每个实施例的各方面可以与在这里说明的其它实施例合并。那些本领域的技术人员将意识到'可以配置刚刚说明的优选实施例的各种适应和修改,而不背离本发明的范围和精神。因此,要理解的是在权利要求的范围内,本发明可以不同于在这里说明的来实践。
尽管已经示出和描述了若干优选实施例,但是本领域技术人员将意识到可以进行各种改变和修改,而不偏离由权利要求定义的本发明的范围。
注意与本申请的本说明书同时提交或先于本申请提交的、并且它们与本说明书一起向公众审查^Hf的所有文章和文献,并且在此通过引用并入所有这种文章和文献的内容。
本说明书(包括任何附属权利要求、摘要和附图)中公开的所有特征和/或这样公开的任何方法或过程的所有步骤,可以以任何组合合并,除了其中至少 一 些这样的特征和/或步骤互相排斥的组合。
本说明书(包括任何附属权利要求、摘要和附图)中公开的每个特征可以由用作相同、等效或类似目的的替换特征代替,除非另外明确说明。因此,除非另外明确说明,公开的每个特征只是一般的一系列的等效或相似特征的一个例子。 '
本发明不限于前述(各)实施例的细节。本发明扩展到在本说明书(包括任何附属权利要求、摘要和附图)中公开的特征的任何新颖的一个或任何新颖的组合,或者扩展到这样公开的任何方法或过程的步骤的任何新颖的一个或任何新颖的组合。
权利要求
1.一种计算系统,包含处理器;所述处理器内的浮点单元和整数单元;翻译器单元,被安排来接收包括至少一个涉及浮点操作的指令的主代码指令,并且作为响应产生用于在所述处理器上执行的相应的目标代码;翻译器内的浮点状态单元,被安排为根据接收的主代码指令产生浮点状态信息;以及翻译器单元内的浮点控制单元,被安排来从浮点状态单元接收浮点状态信息,并且作为响应控制翻译器单元产生用于在浮点单元上执行浮点操作的目标代码;或者用于使用整数单元和浮点单元的组合执行浮点操作的目标代码。
2. 根据权利要求1所述的计算系统,其中安排浮点状态单元以响应接收 的主代码指令中引用的数据的精度产生浮点状态信息。
3. 根据权利要求1所述的计算系统,其中接收的主代码指令引用主浮点 单元,并且其中安排浮点状态单元以响应接收的主代码中的指令产生浮点状 态信息,该指令提供数据给主浮点单元。
4. 根据权利要求3所述的计算系统,其中安排浮点状态单元以响应接收 的主代码中的指令产生浮点状态信息,该指令提供指定数值精度的数据给主 浮点单元。
5. 根据权利要求1所述的计算系统,其中安排浮点状态单元以响应接收 态信息。
6. 根据权利要求1所述的计算系统,其中安排浮点状态单元以响应通过 接收的主代码中的指令从存储器装载到主FPU的数据的数值精度,产生浮点 状态信息。
7. 根据权利要求1所述的计算系统,其中安排浮点状态单元以便为浮点 操作的结果产生浮点状态信息。
8. 根据权利要求7所述的计算系统,其中安排浮点状态单元以便为接收 的主代码中的每个浮点操作的结果产生 一条浮点状态信息。
9. 根据权利要求1所述的计算系统,其中安排浮点状态单元以产生一条 浮点状态信息,其指示在FPU的数据结构中存在至少一条高精度数据。
10. 根据权利要求1所述的计算系统,其中安排浮点状态单元以基于每 个基本块产生浮点状态信息。
11. 根据权利要求IO所述的计算系统,其中安排浮点状态单元以根据与 主FPU相关联的数据结构的特性,在目标代码的基本块的开始处产生浮点状 态信息。
12. 根据权利要求ll所述的计算系统,其中安排翻译器单元以保持作为 主寄存器组的一部分的、由接收的主代码指令引用的主浮点单元堆栈的表示, 并且其中安排浮点状态单元以监视主浮点单元堆栈的表示的内容,以产生浮 点状态信息。
13. 根据权利要求12所述的计算系统,其中如果一条或多条高精度数据 包含在主浮点单元堆栈的表示中,则安排浮点状态单元以产生指示在浮点单 元堆栈的表示中存在高精度数据的浮点状态信息。
14. 根据权利要求12所述的计算系统,其中主浮点单元堆栈的表示包含 主浮点单元寄存器堆栈中的数据位置的表示、以及主浮点单元堆栈指针的表 示。
15. 根据权利要求13或14所述的计算系统,其中安排浮点状态单元以 响应接收的主代码指令产生浮点状态信息,其指示在主浮点单元寄存器堆栈 的表示中的数据位置中放置的数据的数值精度。
16. 根据权利要求15所述的计算系统,其中安排浮点状态单元以当主浮 点单元寄存器堆栈指针的表示指示主浮点单元寄存器堆栈的表示中的数据位 置是空时,清除以前产生的浮点状态信息。
17. 根据权利要求1所述的计算系统,其中安排浮点控制单元以识别接 收的主代码中涉及浮点操作的指令,响应这种指令检查接收的浮点状态信息, 并且作为响应产生浮点控制信号。
18. 根据权利要求17所述的计算系统,其中翻译器单元进而包含浮点计 算单元,其被安排来根据从浮点控制单元接收的控制信号产生用于要产生的目标代码的适合的中间表示,以及其中该中间表示由翻译器用来产生目标代码。
19. 根据权利要求18所述的计算系统,其中还安排浮点控制单元以识别由接收的主代码中的浮点指令指定的精度,并且产生用于浮点计算单元的浮 点控制信号。
20. 根据权利要求1所述的计算系统,其中主代码是由处理器直接可执 行的二进制程序代码。
21. 根据权利要求1所述的计算系统,其中目标代码是由处理器单元直 接可执行的二进制程序代码。
22. 根据权利要求1所述的计算系统,其中安排翻译器单元以将主代码 转换为目标代码,该主代码是由第一类型的处理器直接可执行的二进制程序 代码,该目标代码是由处理器单元直接可执行的二进制程序代码。
23. 根据权利要求1所述的计算系统,其中安排翻译器单元以将主代码 翻译为目标代码,编写该主代码由第一类型的处理器执行,该目标代码由不 同的不兼容的第二类型的处理器单元执4亍。
24. 根据权利要求1所述的计算系统,其中处理器包含PowerPC处理器, 以及其中安排翻译器单元以接收为x87处理器编写的主代码指令。
25. 根据权利要求1所述的计算系统,其中安排翻译器单元以将主代码 优化为目标代码,编写该主代码由第一类型的处理器执行,该目标代码由相 同的第一类型的处理器单元更有效地执行。
26. —种计算系统,包含 处理器;所述处理器内的浮点单元和整数单元;翻译器单元,被安排来接收包括至少一个涉及浮点操作的指令的主代码 指令,并且作为响应产生用于在所述处理器上执行的相应的目标代码;翻译器内的浮点状态单元,被安排来根据接收的主代码指令产生浮点状 态信息;以及翻译器单元内的浮点控制单元,被安排来从浮点状态单元接收浮点状态 信息,并且作为响应控制翻译器单元产生用于在浮点单元上直接执行浮点 操作的目标代码;或者用于使用整数单元和浮点单元之一或两者间接执行浮 点操作的目标代码。
27. 根据权利要求26所述的计算系统,其中以下的一个或多个如权利要 求1到25的任何一个要求保护的翻译器单元、浮点状态单元、浮点控制单 元和浮点计算单元。
28. —种在动态二进制翻译器中使用的解码器单元,该解码器单元包含 浮点状态单元,被安排来根据由解码器单元接收的主代码指令中的浮点指令产生浮点状态信息;以及浮点控制单元,被安排来从浮点状态接收浮点状态信息,并且作为响应 产生指示用于浮点指令输出的期望的数值精度级别的控制信号。
29. —种处理计算系统中的浮点指令的方法,包含计算机实现的以下步骤接收包括至少 一个涉及浮点操作的指令的主代码指令;根据接收的主代码指令产生浮点状态信息;以及响应该浮点状态信息,产生用于在计算系统的浮点单元上执行浮点操 作的目标代码;或者用于使用计算系统的整数单元和计算系统的浮点单元的 组合执行浮点操作的目标代码。
30. —种处理计算系统中的浮点指令的方法,包含计算机实现的以下步骤接收包括至少 一个涉及浮点操作的指令的主代码指令;根据接收的主代码指令产生浮点状态信息;以及响应该浮点状态信息,产生用于在计算系统的浮点单元上直接执行浮 点操作的目标代码;或者用于使用计算系统的整数单元和计算系统的浮点单 元的组合间接执行浮点操作的目标代码。
31. —种计算机可读的记录介质,具有在其上记录的指令,该指令在由 计算系统执行时执行以下步骤接收包括至少 一个涉及浮点操作的指令的主代码指令;根据接收的主代码指令产生浮点状态信息;以及响应该浮点状态信息,产生用于在计算系统的浮点单元上执行浮点操 作的目标代码;或者用于使用计算系统的整数单元和计算系统的浮点单元的 组合执行浮点操作的目标代码。
32. —种计算机可读的记录介质,具有在其上记录的指令,该指令在由 计算系统执行时执行以下步骤接收包括至少 一个涉及浮点操作的指令的主代码指令; 根据接收的主代码指令产生浮点状态信息;以及 响应该浮点状态信息,产生用于在计算系统的浮点单元上直接执行浮点操作的目标代码;或者用于使用计算系统的整数单元和计算系统的浮点单 元的组合间接执行浮点操作的目标代码。
全文摘要
描述了一种在程序代码转换期间能够处理浮点操作的计算机系统,包含处理器,该处理器包括浮点单元和整数单元。该计算系统还包含翻译器单元,被安排来接收包括至少一个涉及浮点操作的指令的主代码指令,以及作为响应产生用于在所述处理器上执行的相应的目标代码。为了处理浮点操作,在翻译器内提供浮点状态单元和浮点控制单元。这些单元使得翻译器产生用于在计算系统的浮点单元上直接执行浮点操作的目标代码;或者用于例如使用计算系统的整数单元和计算系统的浮点单元的组合间接执行浮点操作的目标代码。以此方式,改善了计算系统的效率。
文档编号G06F9/318GK101652746SQ200880011116
公开日2010年2月17日 申请日期2008年3月12日 优先权日2007年3月30日
发明者加文·巴勒克洛, 戴维·J·O·里格比, 詹姆斯·R·H·马尔凯西 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1