CN104025049B - 生成指示寄存器活跃度的编译代码 - Google Patents
生成指示寄存器活跃度的编译代码 Download PDFInfo
- Publication number
- CN104025049B CN104025049B CN201280048816.0A CN201280048816A CN104025049B CN 104025049 B CN104025049 B CN 104025049B CN 201280048816 A CN201280048816 A CN 201280048816A CN 104025049 B CN104025049 B CN 104025049B
- Authority
- CN
- China
- Prior art keywords
- instruction
- register
- program
- liveness
- computer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000003860 storage Methods 0.000 claims description 48
- 238000000034 method Methods 0.000 claims description 46
- 238000005259 measurement Methods 0.000 claims description 16
- 238000004590 computer program Methods 0.000 claims description 13
- 230000001186 cumulative effect Effects 0.000 claims description 7
- 238000012986 modification Methods 0.000 claims description 6
- 230000004048 modification Effects 0.000 claims description 6
- 230000006870 function Effects 0.000 description 98
- 238000012545 processing Methods 0.000 description 47
- 230000015654 memory Effects 0.000 description 27
- 238000003780 insertion Methods 0.000 description 11
- 230000037431 insertion Effects 0.000 description 11
- 238000010586 diagram Methods 0.000 description 10
- 238000011068 loading method Methods 0.000 description 10
- 238000007726 management method Methods 0.000 description 8
- 230000008569 process Effects 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 230000009471 action Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 238000006073 displacement reaction Methods 0.000 description 4
- 238000009826 distribution Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 230000002829 reductive effect Effects 0.000 description 4
- 239000013589 supplement Substances 0.000 description 4
- 238000013459 approach Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 230000014509 gene expression Effects 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 230000001965 increasing effect Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000013508 migration Methods 0.000 description 3
- 230000005012 migration Effects 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 239000000047 product Substances 0.000 description 3
- 238000011084 recovery Methods 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 238000000151 deposition Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 238000007599 discharging Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 238000004321 preservation Methods 0.000 description 2
- 230000001052 transient effect Effects 0.000 description 2
- 102100036933 12-(S)-hydroxy-5,8,10,14-eicosatetraenoic acid receptor Human genes 0.000 description 1
- 241000208340 Araliaceae Species 0.000 description 1
- 101001071349 Homo sapiens 12-(S)-hydroxy-5,8,10,14-eicosatetraenoic acid receptor Proteins 0.000 description 1
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 1
- 235000003140 Panax quinquefolius Nutrition 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 239000012141 concentrate Substances 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 235000008434 ginseng Nutrition 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000036961 partial effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 108090000623 proteins and genes Proteins 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/441—Register allocation; Assignment of physical memory space to logical memory space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
- G06F9/3832—Value prediction for operands; operand history buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30054—Unconditional branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30185—Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
- G06F9/38585—Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
Abstract
根据内部表征生成目标代码,所述内部表征包括多个源操作数。所述生成包括对所述内部表征中的每个源操作数确定对所述源操作数是否出现最后使用。所述确定包括存取数据流图以确定是否已经发出了有效范围(live range)的所有使用。如果确定所述源操作数出现最后使用,标记与所述源操作数相关联的架构资源用于最后使用指示。随后为所述架构资源生成最后使用指示。将指令以及所述最后使用指示发出到所述目标代码中。
Description
技术领域
本发明涉及计算机系统,并且尤其涉及生成指示寄存器活跃度的编译代码。
背景技术
在计算机架构中,处理器寄存器作为中央处理器(CPU)或其他数字处理器的部分是一种小容量存储器。这种寄存器采用与主存储器不同的机制寻址,并且通常可比主存储器更快地被访问。几乎所有计算机都将数据从较大存储器加载到寄存器中,在这些寄存器中数据被一些机器指令用来进行运算、被一些机器指令操作或测试。随后被操作的数据通常被相同指令或随后的指令存回到主存储器中。现代处理器使用静态随机存取存储器(RAM)或动态RAM作为主存储器,后者通常隐含地经由一个或多个超高速缓存级被存取。计算机程序的共同特性是引用的本地性:相同值通常被反复存取并且将频繁使用的值保存在寄存器中改善性能。处理器寄存器通常处于存储器层级的顶部,并且为存储数据提供最快路径。术语处理器寄存器指的是一组寄存器,其直接被编码成部分指令,如被指令集限定的指令一样。将频繁使用的变量分配到寄存器对程序的性能非常重要。
在计算机软件中,应用二进制接口(ABI)描述应用程序和操作系统之间或应用程序和另一应用之间的低级接口。ABI涉及诸如数据类型、大小以及对齐(alignment)的明细(details);控制如何传递函数变量以及如何搜索返回值的调用规则;系统调用号以及应用应如何使得系统调用操作系统;以及在完整操作系统ABI的情况下涉及目标文件的二进制格式、程序库等等。如果存在必要的共享库以及满足相似的前提,几种ABI(例如,容许在用于Intel x86架构的各种Unix和Linux变化形式上运行的广泛程序的交互式Unix ABI)容许来自支持该ABI的一个操作系统的应用程序在不修改的情况下运行在任意其他这种系统上。
通常应用程序的程序开发周期包括写源代码、将源代码编译成目标文件、构建共享库以及将目标文件链接到主可执行程序。在特定硬件平台上执行该应用之前,还要进行额外准备,包括加载主可执行程序以及加载用于应用启动的共享库。
于2010年7月23日发布的并且通过引用被整体包含在本说明书中的“PowerISATMVersion 2.06Revision B”教导了一种示例性精简指令集计算机(RISC)指令集架构(ISA)。在此将使用所述Power ISA来解释例示实施例,不过,本发明并不限于Power ISA或RISC架构。本领域技术人员将容易理解到本发明能用于各种架构。
的并且通过引用被整体包含在本说明书中的“z/ArchitecturePrinciples of Operation”SA22-7832-08,第9版(2010年8月)教导了一种示例CISC(复杂指令集计算机)指令集架构。
IBM的并且通过引用被整体包含在本说明书中的“64-bit PowerPC ELFApplication Binary Interface Supplement 1.9”(2004)描述了可连接执行格式(ELF)ABI的64-比特补码(supplement)。
power.org的并且通过引用被整体包含在本说明书中的“Power32-bit Application Binary Interface Supplement 1.0”(2011年4月19日)以及“Power32-bit Application Binary Interface Supplement 1.0-Embedded”(2011年4月19日)描述了32-比特ABI。
发明内容
根据示例性实施例,一种计算机程序产品、系统和方法包括:通过计算机根据内部表征生成目标代码,所述内部表征包括多个源操作数。所述生成包括对所述内部表征中的每个源操作数执行确定是否出现对所述源操作数的最后使用。所述确定包括存取数据流图以确定有效范围(live range)的所有使用是否已经被发出。如果确定已经出现所述源操作数的最后使用,与所述源操作数相关联的架构资源被标记用于最后使用指示。随后生成为最后使用指示用于所述架构资源。将指令和所述最后使用指示发出到目标代码。
根据另一个实例实施例,一种计算机程序产品和系统包括:将序言程序插入被调函数,该被调函数被配置为从主调函数被调用。所述序言程序配置为在被调函数进入时执行并且包括用于存储寄存器的活跃度状态的指令。此外,将结尾程序插入所述被调函数。所述结尾程序配置为在被调函数退出时执行并且包含用于恢复由所述序言程序存储的寄存器的活跃度状态的指令。
通过本发明的技术可以实现额外的特征和优点。本发明的其它实施例和方面在此被详细描述并被认为是要求保护的发明的一部分。为了更好理解具有这些优点和特征的本发明,请参见本说明书以及附图。
附图说明
在本说明书的结尾处的权利要求书中特别指出并清楚要求保护关于本发明的主题。根据下面结合附图给出的详细描述,本发明的前述以及其他特征以及优点将更清楚。
图1表示根据本发明一实施例的云计算节点;
图2表示根据本发明一实施例的云计算环境;
图3表示根据本发明一实施例的抽象模型层;
图4表示根据本发明一实施例的由编译器执行的用于生成包括寄存器活跃度指示器的目标代码的处理的流程图;
图5表示根据本发明一实施例的由编译器执行的用于生成包括寄存器活跃额度指示符指令的目标代码的处理的流程图;
图6表示根据本发明一实施例的由编译器执行的用于生成包括最后使用指示符的目标代码的处理的流程图;
图7表示根据本发明一实施例的由编译器执行的利用未决列表确定何时插入用于多个指令的最后使用指示符的处理的流程图;
图8表示根据本发明一实施例的由编译器插入序言程序中的例示性指令的流程图;以及
图9表示根据本发明一实施例的由编译器插入结尾程序中的例示性指令的流程图。
具体实施方式
在当前的计算系统中,寄存器已经成为稀缺资源。具备从正执行的程序检测和释放未使用寄存器的能力将有助于确保仅有所需的寄存器被分配给程序。这可以导致对寄存器和/或对将存在寄存器中的额外数据项的碰头(contention)量减少(以便利用快速存取速度)。此外,可以将被标记为未使用的寄存器从备份和恢复操作中去除,并因此消除了与这些操作相关联的不必要的开销。
本发明的实施例是为了生成指示寄存器的活跃度状态的目标代码。如在此使用的术语“活跃度状态”指的是所架构的寄存器将是否再被运行的程序用作源操作数。活跃度状态“活跃”或“被使用”表示所述程序中的未来的指令可能会设法从寄存器处于“活跃”或“被使用”的点开始沿着至少一个程序执行路径检索存储在寄存器中的值。“未被使用”或“死亡”的活跃度状态表示所述程序内没有指令会需要从寄存器“未被使用”或“死亡”的点开始沿着任何程序执行路径检索存储在寄存器中的值。
在此处所描述的实施例中,编译器执行活跃度分析,以便确定何时将最后使用指示符插入目标代码,从而指示一旦指令完成寄存器将不再使用(即,寄存器将不被使用)。此外,目标代码指令可以被插入被调函数的前言程序中以便捕获正由被调函数更新的非易失性寄存器的调用程序活跃度状态;并且被插入被调函数的结尾程序中的对应目标代码指令以便在返回到调用程序时恢复所述调用程序活跃度状态。而且,目标代码指令在函数入口时可以被插入结尾程序,以便将非参数寄存器标记为不被使用。此外,还可以在函数出口时将目标代码指令插入结尾程序以便将易失性寄存器(不包括结果寄存器)标记为不被使用。
可以编制(tailor)最后使用指示符在被编辑代码中的插入以减少用于段代码间隔的不使用的指示符。例如,编译器可以在短时间周期内新值将被写入寄存器时决定不生成用于该寄存器的最后使用在指示符。该编译器可以在确定是否将最后使用指示符插入目标代码程序时采用代码膨胀(bloat)(例如,由于附加指令造成的代码膨胀)来平衡寄存器的短跨(short span)解除分配的逐渐减少的报酬(例如,就性能和可靠性方面来说)。
在此描述两个新目标代码,一个用于将活跃度矢量存储到存储器,另一个加载来自存储器的活跃度。这些新指令在输入被调函数时被用于存储寄存器的活跃度状态存以及在从被调函数出来时恢复寄存器的活跃度状态。
用于指示架构资源的活跃度状态的指令的生成可以在云计算环境中执行。首先应当理解,尽管本公开包括关于云计算的详细描述,但其中记载的技术方案的实现却不限于云计算环境,而是能够结合现在已知或以后开发的任何其它类型的计算环境而实现。
云计算是一种服务交付模式,用于对共享的可配置计算资源池进行方便、按需的网络访问。可配置计算资源是能够以最小的管理成本或与服务提供者进行最少的交互就能快速部署和释放的资源,例如可以是网络、网络带宽、服务器、处理、内存、存储、应用、虚拟机和服务。这种云模式可以包括至少五个特征、至少三个服务模型和至少四个部署模型。
特征包括:
按需自助式服务:云的消费者在无需与服务提供者进行人为交互的情况下能够单方面自动地按需部署诸如服务器时间和网络存储等的计算能力。
广泛的网络接入:计算能力可以通过标准机制在网络上获取,这种标准机制促进了通过不同种类的瘦客户机平台或厚客户机平台(例如移动电话、膝上型电脑、个人数字助理PDA)对云的使用。
资源池:提供者的计算资源被归入资源池并通过多租户(multi-tenant)模式服务于多重消费者,其中按需将不同的实体资源和虚拟资源动态地分配和再分配。一般情况下,消费者不能控制或甚至并不知晓所提供的资源的确切位置,但可以在较高抽象程度上指定位置(例如国家、州或数据中心),因此具有位置无关性。
迅速弹性:能够迅速、有弹性地(有时是自动地)部署计算能力,以实现快速扩展,并且能迅速释放来快速缩小。在消费者看来,用于部署的可用计算能力往往显得是无限的,并能在任意时候都能获取任意数量的计算能力。
可测量的服务:云系统通过利用适于服务类型(例如存储、处理、带宽和活跃用户帐号)的某种抽象程度的计量能力,自动地控制和优化资源效用。可以监测、控制和报告资源使用情况,为服务提供者和消费者双方提供透明度。
服务模型如下:
软件即服务(SaaS):向消费者提供的能力是使用提供者在云基础架构上运行的应用。可以通过诸如网络浏览器的瘦客户机接口(例如基于网络的电子邮件)从各种客户机设备访问应用。除了有限的特定于用户的应用配置设置外,消费者既不管理也不控制包括网络、服务器、操作系统、存储、乃至单个应用能力等的底层云基础架构。
平台即服务(PaaS):向消费者提供的能力是在云基础架构上部署消费者创建或获得的应用,这些应用利用提供者支持的程序设计语言和工具创建。消费者既不管理也不控制包括网络、服务器、操作系统或存储的底层云基础架构,但对其部署的应用具有控制权,对应用托管环境配置可能也具有控制权。
基础架构即服务(IaaS):向消费者提供的能力是消费者能够在其中部署并运行包括操作系统和应用的任意软件的处理、存储、网络和其他基础计算资源。消费者既不管理也不控制底层的云基础架构,但是对操作系统、存储和其部署的应用具有控制权,对选择的网络组件(例如主机防火墙)可能具有有限的控制权。
部署模型如下:
私有云:云基础架构单独为某个组织运行。云基础架构可以由该组织或第三方管理并且可以存在于该组织内部或外部。
共同体云:云基础架构被若干组织共享并支持有共同利害关系(例如任务使命、安全要求、政策和合规考虑)的特定共同体。共同体云可以由共同体内的多个组织或第三方管理并且可以存在于该共同体内部或外部。
公共云:云基础架构向公众或大型产业群提供并由出售云服务的组织拥有。
混合云:云基础架构由两个或更多部署模型的云(私有云、共同体云或公共云)组成,这些云依然是独特的实体,但是通过使数据和应用能够移植的标准化技术或私有技术(例如用于云之间的负载平衡的云突发流量分担技术)绑定在一起。
云计算环境是面向服务的,特点集中在无状态性、低耦合性、模块性和语意的互操作性。云计算的核心是包含互连节点网络的基础架构。
现在参考图1,其中显示了云计算节点的一个例子。图1显示的云计算节点10仅仅是适合的云计算节点的一个示例,不应对本发明实施例的功能和使用范围带来任何限制。总之,云计算节点10能够被用来实现和/或执行以上所述的任何功能。
云计算节点10具有计算机系统/服务器12,其可与众多其它通用或专用计算系统环境或配置一起操作。众所周知,适于与计算机系统/服务器12一起操作的计算系统、环境和/或配置的例子包括但不限于:个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统﹑大型计算机系统和包括上述任意系统的分布式云计算技术环境,等等。
计算机系统/服务器12可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括执行特定的任务或者实现特定的抽象数据类型的例程、程序、目标程序、组件、逻辑、数据结构等。计算机系统/服务器12可以在通过通信网络链接的远程处理设备执行任务的分布式云计算环境中实施。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。
如图1所示,云计算节点10中的计算机系统/服务器12以通用计算设备的形式表现。计算机系统/服务器12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机系统/服务器12典型地包括多种计算机系统可读介质。这些介质可以是能够被计算机系统/服务器12访问的任意可获得的介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机系统/服务器12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图1未显示,通常称为“硬盘驱动器”)。尽管图1中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在存储器28中,这样的程序模块42包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
计算机系统/服务器12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,计算机系统/服务器12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机系统/服务器12的其它模块通信。应当明白,尽管图中未示出,其它硬件和/或软件模块可以与计算机系统/服务器12一起操作,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
现在参考图2,其中显示了示例性的云计算环境50。如图所示,云计算环境50包括云计算消费者使用的本地计算设备可以与其相通信的一个或者多个云计算节点10,本地计算设备例如可以是个人数字助理(PDA)或移动电话54A,台式电脑54B、笔记本电脑54C和/或汽车计算机系统54N。云计算节点10之间可以相互通信。可以在包括但不限于如上所述的私有云、共同体云、公共云或混合云或者它们的组合的一个或者多个网络中将云计算节点10进行物理或虚拟分组(图中未显示)。这样,云的消费者无需在本地计算设备上维护资源就能请求云计算环境50提供的基础架构即服务(IaaS)、平台即服务(PaaS)和/或软件即服务(SaaS)。应当理解,图2显示的各类计算设备54A-N仅仅是示意性的,云计算节点10以及云计算环境50可以与任意类型网络上和/或网络可寻址连接的任意类型的计算设备(例如使用网络浏览器)通信。
现在参考图3,其中显示了云计算环境50(图2)提供的一组功能抽象层。首先应当理解,图3所示的组件、层以及功能都仅仅是示意性的,本发明的实施例不限于此。如图3所示,提供下列层和对应功能:
硬件和软件层60包括硬件和软件组件。硬件组件的例子包括:主机,例如系统;基于RISC(精简指令集计算机)体系结构的服务器,例如IBM系统;IBM系统;IBM系统;存储设备;网络和网络组件。软件组件的例子包括:网络应用服务器软件,例如IBM应用服务器软件;数据库软件,例如IBM数据库软件。(IBM,zSeries,pSeries,xSeries,BladeCenter,WebSphere以及DB2是国际商业机器公司在全世界各地的注册商标)。
虚拟层62提供一个抽象层,该层可以提供下列虚拟实体的例子:虚拟服务器、虚拟存储、虚拟网络(包括虚拟私有网络)、虚拟应用和操作系统,以及虚拟客户端。
在一个示例中,管理层64可以提供下述功能:资源供应功能:提供用于在云计算环境中执行任务的计算资源和其它资源的动态获取;计量和定价功能:在云计算环境内对资源的使用进行成本跟踪,并为此提供帐单和发票。在一个例子中,该资源可以包括应用软件许可。安全功能:为云的消费者和任务提供身份认证,为数据和其它资源提供保护。用户门户功能:为消费者和系统管理员提供对云计算环境的访问。服务水平管理功能:提供云计算资源的分配和管理,以满足必需的服务水平。服务水平协议(SLA)计划和履行功能:为根据SLA预测的对云计算资源未来需求提供预先安排和供应。
工作负载层66提供云计算环境可能实现的功能的示例。在该层中,可提供的工作负载或功能的示例包括:地图绘制与导航;软件开发及生命周期管理;虚拟教室的教学提供;数据分析处理;交易处理;以及数据集成工作流处理。
在示例性实施例中,工作负载层66中的增强编译器70执行此处所述的处理,不过,可以理解的是,增强编译器70可以实施在任何层,并且可以用于生成将在硬件和软件层60中的各种硬件平台上执行的代码。
在一个实施例中,增强编译器70生成用于在在云环境50上运行的计算机系统/服务器12的处理单元16上执行的或在适于开发用于云环境50的应用的系统54A、54B或54C上执行的代码。所生成的代码存储在存储介质中,诸如虚拟存储器62、外部设备14或诸如安装在内部的系统尚存的另一种方案。
现在转向图4,其总体上显示了由增强编译器70执行来生成包括寄存器活跃度指示符的目标代码的处理的流程图。图4中所示的处理将寄存器最后使用表示为现有指令的一部分。根据本实施例,编译器生成用于指令集的代码,其已经被增加包括了指示符,指示该指令的至少一个操作数在该指令之后将不被使用。该指示动作可以被执行成在被编码为所述指令的操作代码(操作码)的一部分,被编码为与寄存器相关联的标志,或者被编码为掩码,其中独立掩码比特对应于多个寄存器中的每一个,以便指示用于每个对应寄存器的最后使用。在一个实施例中,操作码、标志或掩码在指令中被直接指定。在另一个实施例中,操作码、标志或掩码被指定为前缀指令(即该指令之前的独立指令)、指令前缀(即该指令之前的指示符)、后缀指令(即该指令之后的独立指令)或为指令后缀(即该指令之后的指示符)。
参见图4,该处理始于块402,并且在块404处,根据编译器中的指令调度器选择将被写入目标代码中的下一个指令。所述下一指令从一个或多个指令的内部表征(representation)(IR)中选择。在块406处,确定下一指令中的源操作数是否表示数据流图(DFG)中活跃范围的最后使用(即,根据现有技术,根据由编译器执行的活跃范围的寄存器分配到寄存器的寄存器值)。如此处所使用的,术语“DFG”指的是用于捕对寄存器进行值的分配的任何类型的结构(或其它架构资源)。编译器查询DFG并且对指令的每个源操作数确定其是否对应于最后使用(即通过确定被分配到所架构的寄存器的用于具体符号值(即活跃范围)的所有其他用途的指令是否已经被发出)。确定寄存器的最后使用的处理可以与指令调度结合起来执行或者在如图4所示的指令调度之后的步骤中执行。
如果在块406中确定所述源操作数代表寄存器的最后使用,那么处理在块408处继续,其中在指令被发出(添加)到目标代码之前将最后使用指示符添加到所述指令中。在图4所示的实施例中,将一个或多个比特店家到现有指令中,以便指示包含源操作数的寄存器的最后使用。随后在块412处继续处理以便确定IR中是否有更多指令要包含在目标代码中。如果没有额外指令,可以在块414处完成处理。如果还有指令,则在块404处继续处理,其中选择下一指令。
如果在块406处确定所述源操作数不代表寄存器的最后使用,则在块410处继续处理,其中所选择的指令被发出到目标代码。随后在块412处继续处理,以便确定要包含在目标代码中的IR中是否有更多指令。如果没有额外指令,可以在块414处完成处理。如果还有指令,则在块404处继续处理,其中选择下一指令。
参见图5,其总体图释了根据本发明实施例的由增强编译器70执行的用来生成包括寄存器活跃度指示符指令的目标代码的处理的流程图。图5中所示的处理插入独立指令以便指示寄存器的最后使用,并且因此在被执行时使得目标代码招致与处理额外指令相关的额外成本(例如,超高速缓存、循环时间等等)。该方法优选是采用额外指示符扩展较大指令集,或者避免与指令前缀、前缀指令、指令后缀和后缀指令的实施相关联的架构或微架构的复杂化。有利的是,根据该指示方法,仅仅将用于指示一个或多个指令的最后使用的单一指令或较小指令集添加到所述指令集。
参见图5,在块502处开始处理。并且在块504处根据编译器中的指令调度器选择将被写入目标代码中的下一指令。所述下一指令从一个或多个指令的IR中选择。在块506处发出所述下一指令。在块508处确定在块506处所发出的下一指令中的源操作数是否代表DFG中的活跃范围的最后使用(即寄存器值)。在额外指令的发出将会对调度造成影响时,确定寄存器最后使用的处理优选结合指令调度执行。
如果在块508处确定所述源操作数代表寄存器的最后使用,那么处理在块510处继续,其中表示寄存器最后使用的指令被发出(添加)到目标代码。最后处理在块512处继续以便确定在用于包含在目标代码中的IR中是否有更多指令。如果没有更多指令,那么在块514处完成处理。如果有更多指令能够,那么在块504处继续处理,其中选择下一指令。
如果在块506处确定所述源操作数不代表最后使用,则在块512处继续处理以便确定在用于包含在目标代码中的IR中是否有更多指令。如果没有更多指令,那么在块514处完成处理。如果有更多指令能够,那么在块504处继续处理,其中选择下一指令。
现在参见图6,其中总体显示了根据实施例的由编译器执行的用于生成插入最后使用指示符的目标代码的处理的流程图。图6所示的处理可以由增强编译器70执行。如图6所示的处理,执行测试以便验证在将最后使用指示符指令添加到目标代码之前发出最后使用指示符指令呈现了有吸引力的折衷。所考虑到的折衷可以包括通过释放(解除分配)寄存器所实现的性能优势对比(versus)发起额外指令的成本和/或在再次使用所释放的寄存器时再分配所释放寄存器的成本。折衷还可以涉及到由于降低了恢复保存无用值的寄存器中的瞬时故障的成本而导致的改善的可靠性和可用性。可以由编译器通过比较期望度量(性能、可靠性)和阈值来进行折衷校验。所述度量可以是在块608中被识别为具有最后使用的架构资源(例如寄存器)进行下一写入为止时的指令的数量。可替代地或此外,该度量可以是通过以下方面但不限于以下方面所获得的性能改善的评估:寄存器高速缓存管理、重命名效率和/或解码时指令优化。所述阈值可以是基于目标处理器或多个不同目标处理器或编译器使用者所选的目标处理器的微架构的常量,其中所述常量代表发起额外指令的成本。所述阈值和度量是可编程的,并且在所述增强编译器70生成目标代码之前被固定,可由该增强编译器70基于IR的特征调节,和/或被编制(tailor)到所生成的目标代码的特定期望操作环境。
本领域技术人员将理解到,在替换实施例中,最后使用指示符的发出可以在完成调度之后执行。因此,可以将所述度量确定为周期数的函数,直到基于预先生成的调度对对被分配到见到最后使用的值的架构资源进行下一写入为止。所述阈值被确定为该调度的函数(例如插入所述指令是否会将额外延迟引入调度)。参见图6,在块602处开始处理,并且在块604处根据编译器中的指令调度器选择将被写入目标代码的下一指令。所述下一指令从一个或多个指令的IR中选择。所述下一指令在块606处被发出。在块608处确定在所述下一指令中的源操作数是否代表DFG中的活跃范围(即,寄存器值)的最后使用。
如果在块608处确定所述源操作数代表寄存器的最后使用,那么在块610处继续处理,其中确定与架构资源(例如寄存器)使用对应的成本度量(例如到对该架构资源的下一次写入的距离)是否大于成本阈值。在一个实施例中,所述成本度量通过计算直到出现所构架寄存器的下一次写入为止的指令或IR的数量推导出来。例如,在IR序列中:
(1)add r2,r4,r5
(2)mul r2,r2,r2
(3)add r2,r2,r5
(4)addi r2,r2,128
(5)li r4,0
根据编译器的一个实施例,在IR(1)处用于寄存器r4的成本度量为3,其中该成本度量对应于架构资源的最后使用和其随后写入之间的距离。
如果在块610处确定与架构资源使用对应的所述成本度量大于成本阈值,则在块612处继续处理,其中指示寄存器最后使用的指令被发出(添加)到目标代码。最后在块614处继续处理,以便确定在包含在目标代码中的IR中是否存在更多指令。如果没有更多指令,则在块616处完成处理。如果有更多指令,则在块604处继续处理,其中选择下一指令。如果在块610处确定到架构资源使用(在该实例中的度量)距离不大于成本阈值,那么在块614处继续执行,以便确定在包含在目标代码中的IR中是否存在更多指令。如果不存在更多指令,那么在块616处完成处理。如果存在更多指令,则在块604处继续处理,其中选择下一指令。
如果在块608处确定所述源操作数不代表寄存器最后使用,则在块614处继续处理,以便确定在包含在目标代码中的IR中是否存在更多指令。如果没有更多指令,则在块616处完成处理。如果有更多指令,则在块604处继续处理,其中选择下一指令。
如果在上述示例性IR序列中所述成本度量满足限定阈值,则与IR对应当采用最后使用指示指令lu<register-number>扩充过的指令的序列将按如下发出:
add r2,r4,r5
lu r4
mul r2,r2,r2
add r2,r2,r5
addi r2,r2,128
li r4,0
参见图7,其中总体显示了根据本发明一实施例的由编译器执行的利用未决列表确定何时插入用于多个寄存器的最后使用指示符的处理的流程图图7所示的处理可以由增强编译器70实施。与参照图6所描述的其中针对每个寄存器生成独立最后使用指示符指令的处理相比,图7所示的实施例降低了与插入最后使用指示符指令相关量的开销。在图7所示的处理中,维护已经见到最后使用的寄存器列表。该列表被称之为“未决最后使用寄存器列表”。执行测试,以便确定在将最后使用指示符指令添加到目标代码之前发出表示在未决最后使用寄存器列表上的寄存器最后使用的最后使用指示符指令呈现有吸引力折衷。该编译器所考虑到的折衷可以包括通过释放寄存器所实现的性能优势对比(versus)发起额外指令的成本和/或在再次使用所释放的寄存器时再分配所释放寄存器的成本。折衷还可以涉及到由于降低了恢复保存无用值的寄存器中的瞬时故障的成本而导致的改善的可靠性和可用性。可以通过比较期望度量(性能、可靠性)和阈值来进行折衷校验。所述度量可以通过对所述未决最后使用寄存器列表上的每个寄存器添加独立按来确定以便生成总和度量。用于每个单个寄存器的度量可以通过确定直到对看见最后使用的架构资源(例如寄存器)进行下一次写入为止的指令的数量来确定。该度量可以是通过以下方面但不限于以下方面所获得的性能改善的评估:寄存器高速缓存管理、重命名效率和/或解码时指令优化。此外,所述阈值可以是基于目标处理器的微架构的常量,其中所述常量代表发起额外指令的成本。所述阈值和度量是可编程的,并且在所述增强编译器70生成目标代码之前被固定,可由该增强编译器70基于IR的特征调节,和/或被编制(tailor)到所生成的目标代码的特定期望操作环境。
本领域技术人员将理解到,在替换实施例中,最后使用指示符的发出可以在完成调度之后执行。因此,可以将所述度量确定为直到基于预先生成的调度对对被分配到见到最后使用的值的架构资源进行下一写入为止的周期数的函数。所述阈值被确定为该调度的函数(例如插入所述指令是否会将额外延迟引入调度)。
参见图7,在块702处开始处理,并且在块704处根据编译器中的指令调度器选择将被写入目标代码的下一指令。所述下一指令从一个或多个指令的IR中选择。所述下一指令在块706处被发出。在块708处,在块706处的所发出的下一指令中指定的目标寄存器从未决最后使用寄存器列表中被去除。这对应于这样的事实,所发出的下一指令的目标寄存器的所架构急促其不再对应于已经变成不被使用(死亡)的先前活跃范围,而是对应于开始于对所发出的指令的目标寄存器进行写入时的新活跃范围。在块710处,确定在下一指令中的源操作数是否代表DFG(并且不包括所发出下一指令的所有目标寄存器)中的活跃范围的最后使用(即寄存器值)。如果在块710处确定所述源操作数代表寄存器的最后使用,那么在块712处继续处理,其中所述寄存器被添加到未决使用寄存器列表。在块714处,确定对在“未决最后使用寄存器”里表上的所有寄存器的累加成本度量(例如,到架构资源,例如寄存器,的距离的和,用于所述未决最后使用寄存器列表上的所有寄存器)是否大于成本阈值。
如果在块714处确定所述累积成本度量(例如,到架构资源的距离的和,用于所述未决最后使用寄存器列表上的所有寄存器)大于成本阈值,那么块716处继续处理,其中向目标代码发出指令表示所述未决最后使用寄存器列表上的寄存器的最后使用。块718被执行以便从所述未决最后使用寄存器列表中去除这些寄存器。随后在块720处继续处理,以便确定在包含在目标代码中的IR中是否存在更多指令。如果没有更多指令,则在块722处完成处理。如果有更多指令,则在块704处继续处理,其中选择下一指令。如果在块714处确定所述累积成本度量(例如,到架构资源的距离的和,用于所述未决最后使用寄存器列表上的所有寄存器)不大于成本阈值,随后在块720处继续处理,以便确定在包含在目标代码中的IR中是否存在更多指令。如果没有更多指令,则在块722处完成处理。如果有更多指令,则在块704处继续处理,其中选择下一指令。
如果在块710处确定所述源操作数不代表寄存器最后使用,则在块720处继续处理,以便确定在包含在目标代码中的IR中是否存在更多指令。如果没有更多指令,则在块722处完成处理。如果有更多指令,则在块704处继续处理,其中选择下一指令。
本领域技术人员将理解到,所描述用于说明发出指示最后使用的额外指令和由此获得出的利益之间的折衷的方法也可以用于与将寄存器最后指示为现有指令一部分的实施例相关联的模型开销。当例如使用其中通过指令前缀指定最后使用指示符的指令集这样执行时,诸如但不限于增加的取指令带宽和可能降低的解码带宽的开销可以被模型化。
本领域技术人员将理解到,尽管在此已经针对寄存器描述了一些实施例,但是也可以结合此处所包含的教导使用其它架构资源(例如超高速缓存中的可能被排除在写回超高速缓存中的写回之外的存储地址,或者已经出现最后使用并且可能被排除在超高速缓存一致协议探测之外或者使用探测过滤器被过滤出这种协议之外的超高速缓存线中的存储地址,例如如,e.g.,as taught by Salapura等人在2008年关于高新能计算机架构(High-Performance Computer Architecture)的会议的“Design and Implementation of theBlue Gene/P Snoop Filter”中所教导的那样)。
诸如增强编译器70的编译器还可以修改目标代码模块的前沿程序和结尾程序,以便在函数调用之间保持活跃度状态的完整性。所述修改使得编译器基于ABI协定生成具有活跃度状态的连接代码。用于PowerPC的ABI协定将寄存器分类为非易失性(例如GPR14-GPR31)、易失性(例如GPR3-GPR12)、专用(例如GPR1-GPR2)以及保留(GPR 13)寄存器。用于System的浮点ABI协定将f0-f7指定为易失性并将f8-f15指定为保留被调者(callee-saved)。
根据ABI协定,将几个寄存器定义为在函数返回间是易失性的(即被调函数可以覆写这些寄存器中的值),并且主调函数在执行函数调用之前需要在这些易失性寄存器中保存任何数据。这些易失性寄存器中的一些含有在函数入口上的定义值(如果存在对应的参数)。而且根据ABI协定,其它寄存器在函数返回间是非易失性的,并且非易失性寄存器的数据内容不需要在执行函数调用之前被保存。所述非易失性寄存器可以由被调用者(即被调函数或被调代码)使用,但是它们必须在使用前被保存并且在返回到主调者(即主调函数或主调代码)之前被恢复。如果非易失性寄存器在调用者中不被使用,则它们将保持不被使用直到由被调者使用为止。如果非易失性寄存器由调用者使用并且由被调者使用,则寄存器在前沿程序中保存值之后不被使用知道其首次由被调者使用为止。本领域技术人员将理解到,对于被调度前沿程序,所述值在其被存储时变成不被使用。如果非易失性寄存器由被调者(而不是主调者)使用,结尾程序恢复旧值将使得值变得活跃。
下面的实例包括被独立编译的函数F和G。函数F(主调者)包括用于调用函数G(被调者)的代码。与ABI协定一致,在调用函数G之前函数F保存当前正被函数F使用任何易失性寄存器的值。函数G的前沿程序(即在函数入口)包括用于保存函数G所更新的任何非易失性寄存器的指令。当函数G已经完成处理时,执行结尾程序代码以便恢复非易失性寄存器的值,使得他们具有在进入函数G时所具有的值相同的值在。在前言程序已经完成处理之后,函数G返回控制到函数F。一旦函数F从函数G接收到控制返回,其恢复易失性寄存器的值,使它们具有在调用函数G之前所具有的值相同能够的值。假设非易失性寄存器X被函数G使用而其不被函数F所使用。函数G不知晓函数F是否使用非易失性寄存器X并且函数G在进入时保存寄存器X的内容并且在出口时恢复寄存器X的值。在返回到函数F时,由于函数G的前言程序中执行的恢复,看起来寄存器X被使用。因此,由于寄存器X在进入函数G时未被是使用以及在函数G出口时被使用,因此导致不一致。因为这种不一致,未被使用的寄存器显得被使用并因此用光资源。消除这种不一致产生解除额外未使用寄存器的分配(或者考虑解除分配)的能力。
现在参见在函数调用间的寄存器活跃度状态的生成,可以通过编译器使用至少两个通常方法执行代码生成。第一种方法是根据ABI协定指示DFG中的活跃度(如上所述)并随后发出最后使用指示符。该第一途径解决了所有情况,除了处理所保存被调者(callee-saved)寄存器之外,所保存被调者有被调者保存并被恢复(以及在即使它们在主调者中未被使用而被恢复至显示为“活跃”之后)。此处描述的第二种方法生成作为调用位置的部分和/或前言程序和结尾程序,以便根据ABI标记未被使用寄存器,从而避免在函数返回时未被使用寄存器显得为被使用寄存器的问题。
第一种方法的实施例包括确保所有ABI寄存器都适当地根据ABI协定在前言程序的开始处和结尾程序的结束出被指示为活跃或易失性。前言程序和结尾程序由编译器插入IR中。可以由编译器添加代码以便执行用于保留用于被保存被调者寄存器的活跃度状态的特定处理,所述被保存被调者寄存器在主调者中未被使用(例如根据下面基于模板的方法的一个方面)。本领域技术人员将理解如何结合该途径使用上述概述方法。在结合基于IR函数调用进行处理的ABI的示例性实施例中,生成结尾程序和前言程序,在函数的开始处,对先前描述的未决最后使用寄存器列表初始化为易失性未使用(非参数)寄存器的列表,并且执行是否在函数入口立即发出最后使用指示符指令的测试。
类似地,本领域技术人员将理解如何生成代码以便执行用于保留用于被保存被调者寄存器的活跃度状态的特定处理,所述被保存被调者寄存器结合上述针对图7所描述的未决列表方法在主调者中未被使用(例如根据下面基于模板的方法的一个方面)。一个方法是了解关于主调者的额外信息(例如结合全局程序优化)并针对编译器生成与所有主调者的寄存器活跃度一致的附加最后使用指示符。在一个实施例中,前言程序通过指令序列被扩展,以便存储运行时未使用寄存器列表。此外,结尾程序通过指令被扩展,以便恢复在运行时未被使用寄存器的列表。根据该实施例,指令集支持两个额外指令:存储指令(例如:TORE LIVENESS D,B)以及加载指令(例如:LOAD LIVENESS D,B)。在一个实施例中,存储指令将活跃度矢量存储到存储器,加载指令从存储器中加载活跃度矢量,并且活跃度矢量包括与寄存器对应的比特。
示例性STORE LIVENESS指令存储与多个架构资源对应的活跃度数据。根据一个实施例,单个比特被用于指示每个架构资源的使用/未使用。在一个实施例中,活跃度矢量被存储到由与位移D和基址寄存器B(也被称之为Power ISA中的D-Form)的和对应的地址“D,B”–或“D(B)”所指定的存储器位置。本领域技术人员将理解到可以使用其他寻址形式,诸如Power ISA的X形式、根据诸如指定位移、基址和变址寄存器的“D(B,X)”的System z ISA的存储器形式,或者其他已知的寻址形式。
示例性LOAD LIVENSSS指令加载与多个架构资源对应的活跃度数据。根据一个实施例,单个比特被用于指示每个架构资源的使用/未使用。在一个实施例中,活跃度矢量从由与位移D和基址寄存器B(也被称之为Power ISA中的D-Form)的和对应的地址“D,B”–或“D(B)”所指定的存储器位置加载。本领域技术人员将理解到可以使用其他寻址形式,诸如Power ISA的X形式、根据诸如指定位移、基址和变址寄存器的“D(B,X)”的System z ISA的存储器形式,或者其他已知的寻址形式。当对应于先前活跃的所架构的寄存器,寄存器不活跃(即死亡或未被使用)的指示被加载时,可以解除对与架构资源相关联的物理资源的分配。当寄存器活跃(对应于先前不活跃(死亡、未被使用)的所架构的寄存器加载被使用时)的指示被加载时,会产生指定错误,该资源被位置为未被使用和被忽略或未被更新的对应活跃度指示,或者资源可以被分配和加载预定的或未被定义的值。
可能并不希望恢复所有寄存器的活跃度状态。例如,寄存器可以在进入函数时未被使用,但是在函数出口携带所计算的函数结果。简单恢复整个活跃度矢量可能或造成所计算函数结果丢失(例如,通过对保持所计算结果值的物理寄存器解除分配)。根据实施例,编译器在前言程序和结尾程序中生成额外代码以便更新所述活跃度矢量。在所述函数前言程序中,生成诸如STORE LIVENESS 40(SP);OI 40(SP),128的指令序列以便将活跃度存储到位置40+SP(即,在距离堆栈指针的40字节处),并随后OR-Immediate128到在所指定地址40+SP所存储值,以便通过将与架构资源对应的最左边(最高)比特设置为表示其根据活跃度矢量的一个定义正在被使用的“1”,使得架构资源在活跃度矢量被随后的LOAD LIVENESS指令重新加载时被加载“活跃”的活跃度状态,其中“1”表示资源被使用。在函数结尾程序中,生成诸如LOAD LIVENESS 40(SP)的指令序列,以便恢复由前言程序中的指令所保存的活跃度状态。注意,所述前言程序中的指令序列修改用于寄存器0的活跃度状态,以便在保存它之前显示其为活跃(例如,因为其可以携带结果值)。该实例假设矢量集比特被用于是指活跃寄存器。
本领域技术人员将理解到,无论主调者状态如何,可以类似地不定义其他寄存器,以及这可以通过在加载活跃度指令之后发出独立最后使用指示符或者通过修改活跃度矢量以迫使寄存器处于非活跃来实现。例如,下述代码序列存储来自主调者的活跃度状态并指示寄存器2是不活跃的。在函数前言程序中,由编译器生成STORE LIVENESS 40(SP);NI40(SP),(255-64),以便存储活跃度到位置40+SP(即,在距离堆栈指针40字节的位置),以及随后将191AND-Immediate到在所指定地址i 40+SP处的所存储的值中,以便通过将与架构资源对应的从最高比特开始的第二比特设置为表示其根据活跃度矢量的一个定义正不被使用的“0”,使得第二架构资源在活跃度矢量被随后的LOAD LIVENESS指令重新加载时被加载“不活跃”的活跃度状态,其中“1”表示资源被使用而“0”表示资源不被使用。在函数结尾程序中,生成诸如LOAD LIVENESS 40(SP)的指令序列,以便恢复由前言程序中的指令所把保存的活跃度状态。
在另一个实例中,寄存器被添加并从该失恋中去除。在函数前言程序中,有编译器生成STORE LIVENESS 40(SP);OI 40(SP),128;NI 40(SP),(255-64),以便修改由“STORELIVENESS”所存储的活跃度矢量,从而迫使与在活跃度矢量中的最高比特对应的第一资源在重新加载时被指示为被使用,以及迫使与在活跃度矢量中的第二最高比特对应的第二资源在重新加载时被指示为未被使用。在函数结尾程序中,生成诸如LOAD LIVENESS 40(SP)的指令序列,以便恢复由前言程序中的指令所保存的活跃度状态矢量。
在另一个实施例中,在代码生成器间,编译器生成用于进一步包括掩码比特的指令集的代码,以便自动地跨越(override)活跃或死亡的一个或多个寄存器。一个指令编码具有两个掩码字段:LOAD LIVENESS D(B),M1,M2,其中活跃度矢量被设置为值LIVENESS=((MEM[D+B])OR M1)AND M2。
另一方面,加载和存储每个具有一个掩码字段,并且在存储到存储器之前,存储指令执行掩码与LIVENESS寄存器值的OR,而在更新活跃度之前,加载指令执行所加载的存储器值与掩码的AND,如下:STORE LIVENESS D(B),M1,其中所述存储器被设置为值:MEM[B+D]=LIVENESS OR M,LOAD LIVENESS D(B),M;而活跃度矢量被设置为值:LIVENESS=MEM[D+B]AND M。本领域技术人员将理解到,相反地,可以结合存储活跃度执行AND,以及可以结合LOAD LIVENESS执行OR。在RISC架构中,STORE LIVENESS和LOAD LIVENESS可以采用来自SPR的迁移(move)和到SPR的迁移来替代(其中所指的SPR指的是一种指示活跃度的特殊用途的寄存器)。在至少一个实施例中,在活跃度寄存器为目标时到SPR的迁移表示通用寄存器的最后使用。
下面描述第二方法的实施例,所述第二方法根据ABI生成代码作为调用位置的部分和/或前言程序和结尾程序,以标记死亡寄存器。该第二方法是用于反映ABI性能(behavior)的代码生成的一种替代途径。在一个实施例中,其通常与代码生成相结合,否则不被更新以生成用于代码的活跃度状态。在另一个实施例中,其被用于生成模板,以便能够与代码生成方法一起生成活跃度指示指令,所述代码生成方法基于模板生成前言程序和结尾程序。函数调用边界捕获多个无效寄存器,并且是用于在代码生成中开发寄存器活跃度能力的有吸引力点。
图8描绘了根据示例性实施例的由编译器插入前言程序的指令的流程图。在实施例中,增强编译器将指令插入前言程序。在块802处,在代码模块的入口处,插入用于分配栈帧的指令。在块804处,向前言程序中插入用于存储寄存器活跃度状态的指令,该活跃度状态用于指示哪个非易失性寄存器当前被标记为活跃而哪个被标记为未被主调程序使用。在至少一个实施例中,活跃度矢量存储在栈帧中,其中描述了STORE LIVENESS指令。
在块806处,将指令插入前言程序,以便存储由被调用程序更新的非易失性寄存器。在实施例中,对非活跃寄存器的存取生成出错通知事件。编译器使用存储指令抑制用于溢出(spill)代码的通知,因为该代码可以从有必要存储的某些用户处调用和从没必要存储的其他用户处调用。为了在存储为不必要时避免出错通知和避免反映通常反映编程出错的情况,编译器使用新存储,在存储非活跃寄存器时该新存储抑制出错指示。
在块808处,插入指令以把所有易失性非参数寄存器标记为不被使用。在实施例中,编译器生成单一指示符指令以便加载该信息。例如,诸如“LOAD LIVENESS IMMEDIATE”或“LOAD LIVENESS from a constant pool”的指令可以被插入前言程序。
在块810处,插入指令以便将所有所存储的被保存被调者寄存器标记为不被使用。这可以通过在被保存被调者寄存器的每个存储中指示最后使用或者替代地通过加载掩码(例如采用LOAD LIVENESS,或作为另一个指令的一部分,所述另一个指令例如也可存储被保存被调者寄存器的CALL指令)来执行。在实施例中,LOAD LIVENESS IMMEDIATE或LOADLIVENESS指令被插入以便基于按照ABI的易失性以及针对已经被保存的被保存被调者寄存器更新活跃度。
在适于存储用于被保存被调者寄存器的活跃度的实施例中,活跃度寄存器存储为前言程序的部分(以及在指示已经由被调者保存的被保存被调者寄存器的非使用之前)。这可以按照前面的描述执行。
图9描绘了根据示例性实施例由编译器插入结尾程序中的指令的流程图。在实施例中,增强编译器70将指令插入结尾程序。在块902中,插入指令以恢复由被调者在前言程序中保存的非易失性寄存器。在块904处,编译器在结尾程序中插入指令以便恢复与在前言程序中保存的所保存非易失性寄存器相关联的活跃度状态。因此,该指令恢复用于被保存被调者寄存器的主调者的活跃度状态。在一个实施例中,当CALL指令已经被用于在堆栈上保存活跃度状态时,RET指令被用于自动从堆栈恢复。在块906处,插入指令以便标记为不包括返回值的未被使用的易失性寄存器。在块908处,编译器插入指令以便解除对帧栈的分配。
在一个实施例中,插入用于更新所有易失性寄存器(不包括函数返回寄存器)的指令(例如LOAD LIVENESS、LOADLIVENESS IMMEDIATE或执行子例程调用和执行共同与作为调用插入的部分的函数前言程序相关联的操作的CALL指令,或者是根据本发明的至少一个RISC实施例的MTSPR“迁移到SPR(专用寄存器)”指令,其中活跃度矢量首先被加载到GPR,并随后采用MTSPR指令被迁移到LIVENESS SPR。在一个实施例中,当函数没有返回值时,指令指定返回寄存器被指示为不活跃(不被使用)。在另一个实施例中,返回寄存器从来不被指示为不被使用。
在目标代码的实际执行过程中,在至少一种情形下,存储不活跃的寄存器的条件可以对应于编程差错。因此,微处理器的实施过程可以适于提出通知事件(例如调试器、操作系统、管理程序或另一种监控程序之一的例外)。
不过,并非对所有空闲寄存器的引用都是编程出错。程序在其不知道那些寄存器是否处于使用状态时需要保存寄存器。并且因此它们可以进行以便保存到存储器(“溢出(spill)”),并随后重新加载(“充满(fill)”)这些寄存器(例如在上下文语境转换或函数调用/返回期间)。在实施例的一个方面中,提供了配置寄存器和模式切换,以便超越可能的例外,并迫使返回默认值。在实施例的另一个方面,控制比特(例如,在PSW、CR或MSR状态寄存器中,或在受控实现的HID比特中)被设置为根据应用选择性能。在另一个方面中,前缀提供了表示可能出现未被使用引用的能力。在另一个方面中,具有较好定义操作码的指令具有存取因此被释放和被解除分配的寄存器的能力。
在该管理的另一个方面,提供了通知提出指令和非通知提出指令,其提出或抑制与非活跃的失能操作数对应的通知。编译器生成指令,该指令不提出编程出错指示符事件(例如,所述例外),但是在执行上下文语境转换或被调者-保存溢出/充满寄存器序列时返回默认值。根据一个创造性的方面,编译器使用所描述的手段之一(设置控制,前缀使用或特定操作码的使用)来执行可以引用未被使用寄存器的关键操作。这些实例包括在makecontext/getcontext(形成语境/获得语境)操作期间或在setjump/longjump(设置跳跃/长跳跃)操作期间在函数前言程序和结尾程序中的对被保存被调者寄存器(非易失性)寄存器的寄存器保存和恢复。在这些操作的另一个方面,编译器库或函数也选择性地适于发出和/或使用和/或执行代码以便保存寄存器活跃度状态的摘要(“STORE LIVENESS”),并在寄存器正被重新加载时恢复这种信息(“LOAD LIVENESS”)。
在其他方面,操作系统和管理程序使用指令的相似序列在上下文语境转换中保存和恢复上下文。在这种用途的一个方面中,期望操作系统和管理程序没有编程差错,并且从来不提出编程出错通知,而是总是替换默认值。这会是诸如z/OS和AIX的已知高可靠操作系统所期望的。在另一个方面,在操作系统(OS)预料在OS中有多个编程差错的情况下,可以使用与应用程序类似的方法,使得OS和管理程序适于指出编程差错(例如使用通知方法),以及使用适于对诸如语境转换的操作不提出编程出错通知的指令,这些指令已知正引用未被使用/空闲/被解除分配的寄存器。这些方法对相对不稳定的OS是所期望的。此外,诸如z/OS和AIX的非常稳定的OS的制造者可以选择在其长期指令保证周期中启用通知,以便有助于调试和维持z/OS和AIX操作系统中已知的工业领先稳定性。在另一个方面,该模式可以切换,例如在Linux操作系统中,其中更稳定的基本Linux操作系统可以调用外部模块和驱动器以便在OS环境中被执行,该操作系统可以切换到一种模式,其中在执行所述驱动器或模块之前启用编程出错通知。
此处已经使用具体代码实例来阐述了可以由增强编译器70执行的各种优化。这些实例并不是为了限制本发明的实施例,并且本领域技术人员将理解到,也可以利用其它代码序列来执行此处所描述的处理。
本领域技术人员将理解到,本发明的方法可以实施为一个系统、方法或计算机产品。因此,本发明的方面可以采取完全硬件实施例、完全软件实施例(包括固件、驻留软件、微-代码等等)、或者组合了可以全部被称之为“电路”、“模块”或“系统”的软件和硬件方面的实施例。而且,本发明的方法可以采用计算机程序产品形式,其被置入一个或多个其中置入有计算机可读程序代码的可读介质中。
可以使用一个或多个计算机可读介质的任何组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可读存储介质可以是例如但不限于:电子、磁性、光学、红外或半导体系统、装置或设备,或者前述任意适当组合。计算机可读存储介质的更具体实例(非排他性名单)可以包括:具有一条或多条线的电连接、便携式计算机软盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除只读存储器(EPROM或闪存)、光纤、便携式光盘制度存储器(CD-ROM)、光学存储设备、磁性存储设备、或前述存储器的任何适当的组合。在本文的上下文中,计算机可读存储介质可以是任何实体介质,其可以包含有或存储有由或结合指令执行系统、装置或设备使用的程序。
计算机可读信号介质可以包括具有置于例如基带计算机可读代码中的或作为载波一部分的被传播数据信号。这种被传播信号可以采用各种形式,包括但不限于:电磁、光学或其任何组合。计算机可读信号介质可以是任何计算机可读介质,其不是计算机可读存储介质并且能够通讯、传播或传送用于或与指令执行系统、装置或设备结合使用的程序
置于计算机可读介质上哦程序代码可以使用任何适当的介质传输,包括但不限于:无线、有线、光缆、RF等或其任何适当的组合。
用于执行本发明的方面的操作的计算机程序代码可以一种或多种编程语言的任何组合方式编写,包括但不限于:面向对象的编程语言,诸如Java、Smalltalk、C++等,以及传统程序化编程语言,诸如“C”编程语言或类似编程语言。程序代码可以完全在用户计算机上执行,作为独立于操作系统的软件包部分在用户计算机上执行、部分在用户计算机上部分在远程计算机上执行、或者在远程计算机或服务器上执行。在后一种情形中,远程计算机可以通过任何类型的网络连接到用户计算机上,所述网络包括局域网(LAN)或广域网(WAN)、或者可以(例如通过使用英特网服务提供商的英特网)连接到,外部计算机。
此处参照根据本发明的实施例的方法、装置(系统)和计算机程序产品的流程图图示和/或方块示意图描述的本发明的方面。将理解到,在流程图和/或方块示意图中的每个块和流程图和/或方块示意图中的块的组合可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机、或其他可编程数据处理装置的处理器,并以便产生机器使得经由计算机或其他可编程数据处理装置的处理器执行的指令创建用于实施流程图和/或方块图的一个或多个方块中执行的功能/动作。
这些计算机程序指令还可以存储在计算机可读介质中,其使得计算机、其他可编程数据处理装置或其他设备以一种特定方式其作用,以便存储在计算机可读介质中的指令产生一种制品,该制品包括实现流程图和/或方块图的一个或多个方块中执行的功能/动作的指令。
计算机程序指令也可以加载到计算机、其他可编程数据处理装置或其他设备,以便使得一系列操作步骤能在计算机、其他可编程数据处理装置或其他设备上执行的操作步骤能够产生一种计算机实施例的处理,以便指令在计算机、其他可编程数据处理装置或其他设备上执行,用于实现流程图和/或方块图的一个或多个方块中执行的功能/动。
图中的流程图和方块示意图图释了根据本发明各种实施例的系统、方法和计算机程序产品的可能实施方式的架构、功能以及操作。因此,流程图或方块示意图的每个块可以代表模块、分段或部分代码,其包括一个或多个可执行指令,用于实现所指定的逻辑函数。还需要指出的是,在一些可替换实施例中,方块中提到的功能可以不按照图中的顺序出现。例如,连续显示的两个块实际上可以基本同时被执行,或者有时候可以根据所涉及的功能而反向执行。还应该指出的是,方块示意图和/或流程图的每个块以及方块图和/或流程图中的多个块的组合可以由执行专门功能或动作的专用硬件系统、或由专门硬件和计算机指令的组合来实现。
此处所用的术语仅仅是为了描述特定实施例,并不是为了限制本发明。如在此所使用的单数形式“一”、“一个”以及“该”,其也意图包括复数形式,除非上下文中有清楚指明。还需要理解的是,在本说明书中使用的术语“包括”和/或“包含”指明了声称的所述特征、整数、步骤、操作、元件、和/或组件,但是并不排除存在或增加一个或多个其他特征、整数、步骤、操作、元件、和/或组件。
在下面的权利要求书中的所有装置或部分加功能元素的对应结构、材料以及等同物意图包括任何结构、素材或动作,其用于结合其他被要求保护元件来执行被具体要求保护的功能。为了阐述和说明目的已经给出了本发明的描述,但是其不是为了以所披露的形式穷尽或限定本发明。对本领域普通技术人员而言很清楚的是,在不脱离本发明的范围和构思的情况下可以有多种修改和变化形式。选择和描述这些实施例是为了更好地解释本发明的原理以及实践应用,并且使得其他本领域人员能够理解本发明在适应可想到的特定用途时用于具有各种修改方式的各种实施例。
此处描绘的流程图仅仅是一个实例。此处描绘的图或步骤(或操作)在不脱离本发明的精神的情况下可以有多种变化形式。例如,可以以不同的顺序执行这些步骤,或者可以增加、删除或修改步骤。所有这些变化形式都被认为是所要求保护的发明的一部分。
尽管已经描述了本发明的优选实施例,但是本领域技术人员将理解到,现在或将来可以作出落在后面权利要求范围内的各种改进和增强。这些权利要求将被认为保持对第一次描述的本发明的适当的保护。
Claims (21)
1.一种用于处理计算机程序的方法,包括:
通过计算机根据内部表征生成目标代码,所述内部表征包括多个源操作数,所述生成包括:
对所述内部表征中的每个源操作数执行:
确定对所述源操作数是否出现最后使用,所述确定包括存取数据流图以确定是否已经发出了有效范围(live range)的所有使用;
响应于确定所述源操作数出现最后使用并且满足与架构资源使用对应的成本度量,标记与所述源操作数相关联的架构资源用于最后使用指示;
响应于所述标记,为所述架构资源生成最后使用指示;以及
将指令以及所述最后使用指示发出到所述目标代码中。
2.根据权利要求1所述的方法,其中所述架构资源为寄存器。
3.根据权利要求1所述的方法,其中与所述源操作数的最后使用相关联的指令被修改为包括所述最后使用指示。
4.根据权利要求3所述的方法,其中所述与源操作数的最后使用相关联的指令被修改为包括在该指令中指定的修改指令操作码、标志以及掩码中的至少一个,其作为前缀指令、指令前缀、后缀指令或指令后缀。
5.根据权利要求1所述的方法,其中所述用于架构资源的最后使用指示为独立指令。
6.根据权利要求1所述的方法,其中,当所述架构资源的最后使用与下一次使用之间的距离大于一个阈值时,满足所述成本度量。
7.根据权利要求1所述的方法,其中所述成本度量为用于多个架构资源的累积成本度量,所述累积成本度量对应于多个最后使用指示。
8.根据权利要求1所述的方法,进一步包括:
通过计算机上执行的编译器将序言程序插入被调函数,该被调函数被配置将从主调函数被调用,所述序言程序配置为在被调函数进入时执行并且包括用于存储寄存器的活跃度状态的指令;以及
将结尾程序插入所述被调函数,所述结尾程序配置为在被调函数退出时执行并且包含用于恢复由所述序言程序存储的寄存器的活跃度状态的指令。
9.根据权利要求8所述的方法,其中所述序言程序还包括被配置为表示不包含参数的所有易失性寄存器的“未使用”的活跃度状态的指令,并且所述结尾程序还包括用于表示不包含返回值的所有易失性寄存器的“未使用”的活跃度状态的指令。
10.根据权利要求8所述的方法,其中所述寄存器的活跃度状态包括由所述被调函数更新的非易失性寄存器的活跃度状态。
11.一种用于处理计算机程序的系统,包括:
被配置为通过计算机根据内部表征生成目标代码的模块,所述内部表征包括多个源操作数,所述被配置为通过计算机根据内部表征生成目标代码的模块包括:
对所述内部表征中的每个源操作数执行如下操作的模块:
确定对所述源操作数是否出现最后使用,所述确定包括存取数据流图以确定是否已经发出了有效范围(live range)的所有使用;
响应于确定所述源操作数出现最后使用并且满足与架构资源使用对应的成本度量,标记与所述源操作数相关联的架构资源用于最后使用指示;
响应于所述标记,为所述架构资源生成最后使用指示;以及
将指令以及所述最后使用指示发出到所述目标代码中。
12.根据权利要求11所述的系统,其中所述架构资源为寄存器。
13.根据权利要求11所述的系统,其中与所述源操作数的最后使用相关联的指令被修改为包括所述最后使用指示。
14.根据权利要求13所述的系统,其中所述与源操作数的最后使用相关联的指令被修改为包括在该指令中指定的修改指令操作码、标志以及掩码中的至少一个,其作为前缀指令、指令前缀、后缀指令或指令后缀。
15.根据权利要求11所述的系统,其中所述用于架构资源的最后使用指示为独立指令。
16.根据权利要求11所述的系统,其中,当所述架构资源的最后使用与下一次使用之间的距离大于一个阈值时,满足所述成本度量。
17.根据权利要求11所述的系统,其中所述成本度量为用于多个架构资源的累积成本度量,所述累积成本度量对应于多个最后使用指示。
18.根据权利要求11所述的系统,进一步包括:
被配置为通过计算机上执行的编译器将序言程序插入被调函数的模块,该被调函数被配置将从主调函数被调用,所述序言程序配置为在被调函数进入时执行并且包括用于存储寄存器的活跃度状态的指令;以及
被配置为将结尾程序插入所述被调函数的模块,所述结尾程序配置为在被调函数退出时执行并且包含用于恢复由所述序言程序存储的寄存器的活跃度状态的指令。
19.根据权利要求18所述的系统,其中所述序言程序还包括被配置为表示不包含参数的所有易失性寄存器的“未使用”的活跃度状态的指令,并且所述结尾程序还包括用于表示不包含返回值的所有易失性寄存器的“未使用”的活跃度状态的指令。
20.根据权利要求18所述的系统,其中所述寄存器的活跃度状态包括由所述被调函数更新的非易失性寄存器的活跃度状态。
21.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序在计算机系统上被执行时用于执行根据前述权利要求1-10中的任何一个的方法的所有步骤。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/251,803 US8756591B2 (en) | 2011-10-03 | 2011-10-03 | Generating compiled code that indicates register liveness |
US13/251,803 | 2011-10-03 | ||
PCT/IB2012/055252 WO2013050922A1 (en) | 2011-10-03 | 2012-10-01 | Generating compiled code that indicates register liveness |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104025049A CN104025049A (zh) | 2014-09-03 |
CN104025049B true CN104025049B (zh) | 2017-12-22 |
Family
ID=47993900
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201280048816.0A Active CN104025049B (zh) | 2011-10-03 | 2012-10-01 | 生成指示寄存器活跃度的编译代码 |
Country Status (6)
Country | Link |
---|---|
US (2) | US8756591B2 (zh) |
JP (1) | JP5957084B2 (zh) |
CN (1) | CN104025049B (zh) |
DE (1) | DE112012003716B4 (zh) |
GB (1) | GB2510506B (zh) |
WO (1) | WO2013050922A1 (zh) |
Families Citing this family (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7350194B1 (en) * | 2001-09-24 | 2008-03-25 | Oracle Corporation | Techniques for debugging computer programs involving multiple computing machines |
WO2012025792A1 (en) * | 2010-08-26 | 2012-03-01 | Freescale Semiconductor, Inc. | Optimization method for compiler, optimizer for a compiler and storage medium storing optimizing code |
US9195501B2 (en) * | 2011-07-12 | 2015-11-24 | Qualcomm Incorporated | Instruction culling in graphics processing unit |
US9697002B2 (en) * | 2011-10-03 | 2017-07-04 | International Business Machines Corporation | Computer instructions for activating and deactivating operands |
US9348596B2 (en) | 2013-06-28 | 2016-05-24 | International Business Machines Corporation | Forming instruction groups based on decode time instruction optimization |
US9372695B2 (en) | 2013-06-28 | 2016-06-21 | Globalfoundries Inc. | Optimization of instruction groups across group boundaries |
US9619230B2 (en) | 2013-06-28 | 2017-04-11 | International Business Machines Corporation | Predictive fetching and decoding for selected instructions |
US10496433B2 (en) | 2014-11-24 | 2019-12-03 | Red Hat, Inc. | Modification of context saving functions |
US9250878B1 (en) * | 2014-11-24 | 2016-02-02 | Red Hat, Inc. | Function attribute for dynamic stack allocation |
US9753863B2 (en) * | 2014-12-27 | 2017-09-05 | Intel Corporation | Memory protection with non-readable pages |
US10055209B2 (en) | 2015-01-12 | 2018-08-21 | Red Hat, Inc. | Resource closing |
GB2543302B (en) * | 2015-10-14 | 2018-03-21 | Advanced Risc Mach Ltd | Vector load instruction |
US10452409B2 (en) * | 2015-10-23 | 2019-10-22 | Oracle International Corporation | Universal adapter for native calling |
US10275228B2 (en) * | 2016-03-29 | 2019-04-30 | International Business Machines Corporation | Relaxing user-specified register constraints for improving register allocation |
US10235177B2 (en) * | 2016-07-02 | 2019-03-19 | Intel Corporation | Register reclamation |
US10282182B2 (en) * | 2016-09-23 | 2019-05-07 | Intel Corporation | Technologies for translation cache management in binary translation systems |
US10488911B2 (en) * | 2016-11-01 | 2019-11-26 | National Taiwan University | Method and computing system of allocating registers |
US10838733B2 (en) | 2017-04-18 | 2020-11-17 | International Business Machines Corporation | Register context restoration based on rename register recovery |
US10552164B2 (en) | 2017-04-18 | 2020-02-04 | International Business Machines Corporation | Sharing snapshots between restoration and recovery |
US10545766B2 (en) | 2017-04-18 | 2020-01-28 | International Business Machines Corporation | Register restoration using transactional memory register snapshots |
US10740108B2 (en) | 2017-04-18 | 2020-08-11 | International Business Machines Corporation | Management of store queue based on restoration operation |
US10649785B2 (en) | 2017-04-18 | 2020-05-12 | International Business Machines Corporation | Tracking changes to memory via check and recovery |
US10540184B2 (en) | 2017-04-18 | 2020-01-21 | International Business Machines Corporation | Coalescing store instructions for restoration |
US10572265B2 (en) | 2017-04-18 | 2020-02-25 | International Business Machines Corporation | Selecting register restoration or register reloading |
US10489382B2 (en) | 2017-04-18 | 2019-11-26 | International Business Machines Corporation | Register restoration invalidation based on a context switch |
US11010192B2 (en) | 2017-04-18 | 2021-05-18 | International Business Machines Corporation | Register restoration using recovery buffers |
US10782979B2 (en) | 2017-04-18 | 2020-09-22 | International Business Machines Corporation | Restoring saved architected registers and suppressing verification of registers to be restored |
US10564977B2 (en) | 2017-04-18 | 2020-02-18 | International Business Machines Corporation | Selective register allocation |
US10963261B2 (en) | 2017-04-18 | 2021-03-30 | International Business Machines Corporation | Sharing snapshots across save requests |
US10445216B2 (en) | 2017-08-25 | 2019-10-15 | Microsoft Technology Licensing, Llc | Debugging program code at instruction level through emulation |
US10671363B2 (en) | 2018-10-31 | 2020-06-02 | International Business Machines Corporation | Generating code for function calls that use multiple addressing modes |
US10671362B2 (en) | 2018-10-31 | 2020-06-02 | International Business Machines Corporation | Generating code for function calls that use multiple addressing modes |
US10915320B2 (en) | 2018-12-21 | 2021-02-09 | Intel Corporation | Shift-folding for efficient load coalescing in a binary translation based processor |
US11188334B2 (en) | 2019-12-02 | 2021-11-30 | Microsoft Technology Licensing, Llc | Obsoleting values stored in registers in a processor based on processing obsolescent register-encoded instructions |
US11620116B2 (en) * | 2021-04-30 | 2023-04-04 | Saleforce, Inc. | Programming language interoperability engine and enforcement in multi-tenant environments |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101228514A (zh) * | 2005-06-23 | 2008-07-23 | 英特尔公司 | 存储器微块化请求重排序 |
Family Cites Families (82)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4763255A (en) | 1984-10-31 | 1988-08-09 | International Business Machines Corporation | Method for generating short form instructions in an optimizing compiler |
EP0423989A3 (en) | 1989-10-16 | 1992-09-23 | Hewlett-Packard Company | Software compiler and linker with improved line number table |
US5095526A (en) | 1990-01-26 | 1992-03-10 | Apple Computer, Inc. | Microprocessor with improved interrupt response with interrupt data saving dependent upon processor status |
US5303358A (en) | 1990-01-26 | 1994-04-12 | Apple Computer, Inc. | Prefix instruction for modification of a subsequent instruction |
JPH05173788A (ja) * | 1991-06-21 | 1993-07-13 | Toshiba Corp | 計算機装置 |
US5539911A (en) | 1991-07-08 | 1996-07-23 | Seiko Epson Corporation | High-performance, superscalar-based computer system with out-of-order instruction execution |
US5469572A (en) | 1992-12-01 | 1995-11-21 | Taylor; James M. | Post compile optimizer for linkable object code |
US5590352A (en) | 1994-04-26 | 1996-12-31 | Advanced Micro Devices, Inc. | Dependency checking and forwarding of variable width operands |
US5761514A (en) | 1995-08-31 | 1998-06-02 | International Business Machines Corporation | Register allocation method and apparatus for truncating runaway lifetimes of program variables in a computer system |
US5797014A (en) | 1995-12-14 | 1998-08-18 | International Business Machines Corporation | Method for reducing processor cycles used for global offset table address computation in a position independent shared library |
JP3711422B2 (ja) | 1995-12-20 | 2005-11-02 | セイコーエプソン株式会社 | 情報処理回路 |
US6059840A (en) | 1997-03-17 | 2000-05-09 | Motorola, Inc. | Automatic scheduling of instructions to reduce code size |
US6314511B2 (en) | 1997-04-03 | 2001-11-06 | University Of Washington | Mechanism for freeing registers on processors that perform dynamic out-of-order execution of instructions using renaming registers |
JPH10283188A (ja) * | 1997-04-03 | 1998-10-23 | Matsushita Electric Ind Co Ltd | プロセッサにおけるレジスタ保護方法 |
US6094719A (en) | 1997-06-25 | 2000-07-25 | Sun Microsystems, Inc. | Reducing data dependent conflicts by converting single precision instructions into microinstructions using renamed phantom registers in a processor having double precision registers |
JP3220055B2 (ja) | 1997-07-17 | 2001-10-22 | 松下電器産業株式会社 | 機械語命令列またはアセンブリ言語命令列を最適化する最適化装置、及び、高級言語で記載されたソースプログラムを機械語またはアセンブリ言語の命令列に変換するコンパイラ装置。 |
EP1071991A4 (en) | 1997-12-11 | 2002-03-13 | Digits Corp | OBJECT CODE ANALYSIS AND IMPROVEMENT SYSTEM AND METHOD |
US7565665B2 (en) | 1998-09-09 | 2009-07-21 | Microsoft Corporation | Efficient linking and loading for late binding and platform retargeting |
JP3837244B2 (ja) | 1998-10-23 | 2006-10-25 | 松下電器産業株式会社 | プログラムリンク装置及び方法 |
US20020073398A1 (en) | 1998-12-14 | 2002-06-13 | Jeffrey L. Tinker | Method and system for modifying executable code to add additional functionality |
US6189088B1 (en) | 1999-02-03 | 2001-02-13 | International Business Machines Corporation | Forwarding stored dara fetched for out-of-order load/read operation to over-taken operation read-accessing same memory location |
US6408433B1 (en) * | 1999-04-23 | 2002-06-18 | Sun Microsystems, Inc. | Method and apparatus for building calling convention prolog and epilog code using a register allocator |
GB2349485B (en) | 1999-04-23 | 2003-12-10 | Ibm | Application management |
GB9920916D0 (en) | 1999-09-03 | 1999-11-10 | Sgs Thomson Microelectronics | A relocation format for linking |
GB2358491A (en) | 1999-09-03 | 2001-07-25 | Sgs Thomson Microelectronics | A relocation format for linking |
GB9920911D0 (en) | 1999-09-03 | 1999-11-10 | Sgs Thomson Microelectronics | A relocation format for linking |
US6748589B1 (en) | 1999-10-20 | 2004-06-08 | Transmeta Corporation | Method for increasing the speed of speculative execution |
US7257806B1 (en) | 1999-10-21 | 2007-08-14 | Hewlett-Packard Development Company, L.P. | System and method for efficiently passing information between compiler and post-compile-time software |
US6449710B1 (en) | 1999-10-29 | 2002-09-10 | Stmicroelectronics, Inc. | Stitching parcels |
GB2363479B (en) | 1999-11-01 | 2004-03-17 | Sgs Thomson Microelectronics | A linker using relocation sequences |
US6721875B1 (en) | 2000-02-22 | 2004-04-13 | Hewlett-Packard Development Company, L.P. | Method and apparatus for implementing a single-syllable IP-relative branch instruction and a long IP-relative branch instruction in a processor which fetches instructions in bundle form |
US6687806B1 (en) | 2000-06-15 | 2004-02-03 | Advanced Micro Devices, Inc. | Apparatus and method for generating 64 bit displacement and immediate values |
US6748519B1 (en) | 2000-06-15 | 2004-06-08 | International Business Machines Corporation | Method and apparatus for utilizing renamed registers based upon a functional or defective operational status of the register |
US7168069B1 (en) | 2000-07-12 | 2007-01-23 | Stmicroelectronics, Inc. | Dynamic generation of multimedia code for image processing |
CA2321016A1 (en) | 2000-09-27 | 2002-03-27 | Ibm Canada Limited-Ibm Canada Limitee | Interprocedural dead store elimination |
EP1199629A1 (en) | 2000-10-17 | 2002-04-24 | STMicroelectronics S.r.l. | Processor architecture with variable-stage pipeline |
GB0029115D0 (en) | 2000-11-29 | 2001-01-10 | Sgs Thomson Microelectronics | Assembling an object code module |
JP2002182926A (ja) | 2000-12-12 | 2002-06-28 | Hitachi Ltd | コンパイル方法及びコンピュータ読み取り可能な記録媒体 |
US7228403B2 (en) | 2000-12-23 | 2007-06-05 | International Business Machines Corporation | Method for handling 32 bit results for an out-of-order processor with a 64 bit architecture |
US7162621B2 (en) | 2001-02-21 | 2007-01-09 | Mips Technologies, Inc. | Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration |
US6950926B1 (en) | 2001-03-02 | 2005-09-27 | Advanced Micro Devices, Inc. | Use of a neutral instruction as a dependency indicator for a set of instructions |
US7299462B2 (en) | 2001-05-07 | 2007-11-20 | Stmicroelectronics Limited | Relocation format for linking |
US20030009750A1 (en) | 2001-07-09 | 2003-01-09 | Robert Hundt | Optimizing an executable computer program having linkage functions |
US20030079210A1 (en) * | 2001-10-19 | 2003-04-24 | Peter Markstein | Integrated register allocator in a compiler |
US20030154419A1 (en) | 2002-01-10 | 2003-08-14 | Binyu Zang | Register renaming in binary translation using rollback and recovery |
JP3856737B2 (ja) | 2002-07-19 | 2006-12-13 | 株式会社ルネサステクノロジ | データ処理装置 |
US7131017B2 (en) | 2002-08-16 | 2006-10-31 | Carnegie Mellon University | Programmable pipeline fabric having mechanism to terminate signal propagation |
US6934830B2 (en) | 2002-09-26 | 2005-08-23 | Sun Microsystems, Inc. | Method and apparatus for reducing register file access times in pipelined processors |
US7500126B2 (en) | 2002-12-04 | 2009-03-03 | Nxp B.V. | Arrangement and method for controlling power modes of hardware resources |
US7310799B2 (en) | 2002-12-31 | 2007-12-18 | International Business Machines Corporation | Reducing load instructions via global data reordering |
US7543284B2 (en) | 2003-04-22 | 2009-06-02 | Transitive Limited | Partial dead code elimination optimizations for program code conversion |
US7769885B1 (en) | 2003-05-23 | 2010-08-03 | Juniper Networks, Inc. | Determining liveness of protocols and interfaces |
US7519951B2 (en) | 2003-09-30 | 2009-04-14 | International Business Machines Corporation | Multi-attribute dynamic link library packaging |
KR100531314B1 (ko) | 2004-03-16 | 2005-11-29 | 엘지전자 주식회사 | 영상표시장치 |
US20050251662A1 (en) | 2004-04-22 | 2005-11-10 | Samra Nicholas G | Secondary register file mechanism for virtual multithreading |
US7395419B1 (en) | 2004-04-23 | 2008-07-01 | Apple Inc. | Macroscalar processor architecture |
US7284092B2 (en) | 2004-06-24 | 2007-10-16 | International Business Machines Corporation | Digital data processing apparatus having multi-level register file |
US20060080682A1 (en) | 2004-10-12 | 2006-04-13 | Picsel Research Ltd. | Run time dynamic linking |
US7412710B2 (en) | 2004-11-12 | 2008-08-12 | Red Hat, Inc. | System, method, and medium for efficiently obtaining the addresses of thread-local variables |
US20060174089A1 (en) | 2005-02-01 | 2006-08-03 | International Business Machines Corporation | Method and apparatus for embedding wide instruction words in a fixed-length instruction set architecture |
US20060190710A1 (en) | 2005-02-24 | 2006-08-24 | Bohuslav Rychlik | Suppressing update of a branch history register by loop-ending branches |
US7757218B2 (en) | 2005-03-24 | 2010-07-13 | Microsoft Corporation | Method of instrumenting code having restrictive calling conventions |
US8296550B2 (en) | 2005-08-29 | 2012-10-23 | The Invention Science Fund I, Llc | Hierarchical register file with operand capture ports |
US7873952B2 (en) | 2006-03-09 | 2011-01-18 | Oracle America, Inc. | Code transformation to optimize fragments that implement constant loading |
US7380104B2 (en) | 2006-04-25 | 2008-05-27 | International Business Machines Corporation | Method and apparatus for back to back issue of dependent instructions in an out of order issue queue |
JP2007304663A (ja) | 2006-05-08 | 2007-11-22 | Univ Nagoya | プロセッサ及びそのデータ処理方法 |
JP4884297B2 (ja) | 2006-05-26 | 2012-02-29 | パナソニック株式会社 | コンパイラ装置、コンパイル方法およびコンパイラプログラム |
US7506139B2 (en) | 2006-07-12 | 2009-03-17 | International Business Machines Corporation | Method and apparatus for register renaming using multiple physical register files and avoiding associative search |
US20080148022A1 (en) | 2006-12-13 | 2008-06-19 | Arm Limited | Marking registers as available for register renaming |
US7676653B2 (en) | 2007-05-09 | 2010-03-09 | Xmos Limited | Compact instruction set encoding |
US7818543B2 (en) | 2007-07-10 | 2010-10-19 | Globalfoundries Inc. | Method and apparatus for length decoding and identifying boundaries of variable length instructions |
US7818542B2 (en) | 2007-07-10 | 2010-10-19 | Globalfoundries Inc. | Method and apparatus for length decoding variable length instructions |
US8180964B1 (en) | 2007-09-28 | 2012-05-15 | The Mathworks, Inc. | Optimization of cache configuration for application design |
US8108614B2 (en) | 2007-12-31 | 2012-01-31 | Eric Sprangle | Mechanism for effectively caching streaming and non-streaming data patterns |
US20090193400A1 (en) | 2008-01-30 | 2009-07-30 | Ivan Baev | Interprocedural register allocation for global variables |
KR101418969B1 (ko) | 2008-02-27 | 2014-08-13 | 삼성전자주식회사 | 프로세서 및 컴파일 방법 |
US20100312991A1 (en) | 2008-05-08 | 2010-12-09 | Mips Technologies, Inc. | Microprocessor with Compact Instruction Set Architecture |
US20100095286A1 (en) | 2008-10-10 | 2010-04-15 | Kaplan David A | Register reduction and liveness analysis techniques for program code |
JP5471082B2 (ja) | 2009-06-30 | 2014-04-16 | 富士通株式会社 | 演算処理装置および演算処理装置の制御方法 |
CN101630269B (zh) | 2009-07-03 | 2012-08-29 | 中国人民解放军国防科学技术大学 | 基于块对目标代码扫描并替换敏感指令的方法 |
US8683180B2 (en) | 2009-10-13 | 2014-03-25 | International Business Machines Corporation | Intermediate register mapper |
US8516465B2 (en) | 2009-12-04 | 2013-08-20 | Oracle America, Inc. | Register prespill phase in a compiler |
-
2011
- 2011-10-03 US US13/251,803 patent/US8756591B2/en active Active
-
2012
- 2012-10-01 JP JP2014532548A patent/JP5957084B2/ja active Active
- 2012-10-01 DE DE112012003716.2T patent/DE112012003716B4/de active Active
- 2012-10-01 CN CN201280048816.0A patent/CN104025049B/zh active Active
- 2012-10-01 WO PCT/IB2012/055252 patent/WO2013050922A1/en active Application Filing
- 2012-10-01 GB GB1406864.7A patent/GB2510506B/en active Active
- 2012-10-31 US US13/664,595 patent/US8713547B2/en not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101228514A (zh) * | 2005-06-23 | 2008-07-23 | 英特尔公司 | 存储器微块化请求重排序 |
Non-Patent Citations (2)
Title |
---|
Interprocedural Dataflow Analysis in an Executable Optimizer;David W. Goodwin;《Acm Sigplan Notices》;19970531;第32卷(第5期);正文第123页第2栏,第124页,第126-127页 * |
Software-Directed Register Deallocation for Simultaneous Multithreaded Processors;Jack L. Lo等;《IEEE TRANSACTIONS ON PARALLEL AND DISTRIBUTED SYSTEMS》;19990930;第10卷(第9期);正文第923页第2栏,第924页第2栏,第927-929页 * |
Also Published As
Publication number | Publication date |
---|---|
US8713547B2 (en) | 2014-04-29 |
US8756591B2 (en) | 2014-06-17 |
US20130086548A1 (en) | 2013-04-04 |
GB2510506A (en) | 2014-08-06 |
GB201406864D0 (en) | 2014-05-28 |
JP5957084B2 (ja) | 2016-07-27 |
DE112012003716B4 (de) | 2023-03-30 |
GB2510506B (en) | 2020-12-16 |
JP2014528603A (ja) | 2014-10-27 |
DE112012003716T5 (de) | 2014-07-31 |
CN104025049A (zh) | 2014-09-03 |
US20130086598A1 (en) | 2013-04-04 |
WO2013050922A1 (en) | 2013-04-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104025049B (zh) | 生成指示寄存器活跃度的编译代码 | |
CN103858100B (zh) | 优化编译用于增强应用二进制接口的代码的系统和方法 | |
JP7046098B2 (ja) | リネーム・レジスタ復旧に基づくレジスタ・コンテキスト復元 | |
CN103299274B (zh) | 确定运行图像的最佳计算环境的系统和方法 | |
CN103858101B (zh) | 代码处理方法和代码处理系统 | |
CN103814358B (zh) | 服务器群内的虚拟机放置 | |
CN103970607B (zh) | 使用等价集合来计算优化虚拟机分配的方法和装置 | |
CN106133682B (zh) | 用于能在多种架构中初始化的控制实用工具的公用引导序列 | |
US7774191B2 (en) | Virtual supercomputer | |
CN103348323B (zh) | 用于在计算机系统中执行目标程序的方法和系统 | |
DE112018003584B4 (de) | Vorhersagen eines inhaltsverzeichnis-zeigerwerts in reaktion auf ein verzweigen auf eine subroutine | |
CN108633309A (zh) | 协同程序的编译器优化 | |
CN103853596A (zh) | 公共相邻存储区域优化长距离虚拟机迁移方法和系统 | |
CN107526645A (zh) | 一种通信优化方法及系统 | |
CN108475223A (zh) | 在硬件管理的堆栈架构中受调用者保护的堆栈返回地址 | |
US10831457B2 (en) | Code generation relating to providing table of contents pointer values | |
US11003452B2 (en) | Effectiveness and prioritization of prefetches | |
CN105938525B (zh) | 虚拟机设备的基于目录的发现 | |
CN104995599A (zh) | 使用硬件与软件组合的路径概况分析 | |
CN106066812A (zh) | 基于应用的历史信息管理资源 | |
US20190087337A1 (en) | Table of contents cache entry having a pointer for a range of addresses | |
CN103294556B (zh) | 用于主机系统准入控制的方法和系统 | |
CN105359088A (zh) | 使用动态生成的虚拟磁盘内容优化供应时间的方法 | |
CN110352404A (zh) | 通过基于内联解码的微操作扩展的比较字符串处理 | |
CN110168510A (zh) | 用于延长私有高速缓存中的高速缓存行的独占持有的设施 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |