会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
热词
    • 2. 发明授权
    • Incorporating register pressure into an inlining compiler
    • 将寄存器压力并入到内联编译器中
    • US06983459B1
    • 2006-01-03
    • US09286862
    • 1999-04-06
    • Edward Curtis ProsserWilliam Jon Schmidt
    • Edward Curtis ProsserWilliam Jon Schmidt
    • G06F9/45
    • G06F8/4443
    • A method, system, and program product for optimizing compilation. In the preferred embodiment, a compiler compiles a source-code file twice; once to gather register-pressure data, and a second time to apply the data. Thus, the compiler saves register-pressure data during the first compilation and uses it during the second compilation to make informed inlining decisions. The compiler saves two kinds of data during the first compilation: (1) the maximum register-pressure occurring in each procedure; and (2) within each procedure, the register pressure at each call site that is a potential inlining candidate. This data is then fed into the compiler during the second compilation. The compiler uses the data during the second compilation in two ways. First, when deciding whether to inline a child procedure into a parent procedure, the compiler determines whether the sum of the maximum register-pressure and the site register-pressure exceeds the number of available, physical registers. If so, the inlining is not done. Otherwise, inlining is permitted subject to other heuristics. Second, if the child procedure is chosen for inlining into the parent procedure, the maximum register-pressure of the parent procedure is set to be the maximum of its existing value or the sum of the maximum register-pressure of the child procedure and the site register-pressure. This assures that later consideration of the parent procedure for inlining into another procedure can be done with accurate register-pressure data available.
    • 一种用于优化编译的方法,系统和程序产品。 在优选实施例中,编译器编译源代码文件两次; 一次收集注册压力数据,并第二次应用数据。 因此,编译器在第一次编译期间保存注册表压力数据,并在第二次编译期间使用它来作出明确的内联决策。 编译器在第一次编译时保存两种数据:(1)每个过程中发生的最大寄存器压力; 和(2)在每个程序中,每个呼叫站点的注册压力是潜在的内联候选人。 然后在第二次编译期间将该数据提供给编译器。 编译器在第二次编译期间使用数据有两种方式。 首先,当决定是否将子程序嵌入到父程序中时,编译器确定最大寄存器压力和站点寄存器压力的总和是否超过可用的物理寄存器的数量。 如果是这样,内联没有完成。 否则,允许内联使用其他启发式。 第二,如果选择子程序来嵌入父级程序,父级程序的最大注册压力被设置为其现有值的最大值或子程序与站点的最大注册压力之和 记录压力。 这样做可以使用精确的寄存器压力数据来进行后续审核。
    • 3. 发明授权
    • Method and apparatus for allocating registers during code compilation using different spill strategies to evaluate spill cost
    • 在代码编译期间使用不同的溢出策略分配寄存器以评估溢出成本的方法和装置
    • US06523173B1
    • 2003-02-18
    • US09480978
    • 2000-01-11
    • Peter Edward BergnerEdward Curtis Prosser
    • Peter Edward BergnerEdward Curtis Prosser
    • G06F945
    • G06F8/441
    • Register allocation during computer program code compilation is accomplished by determining a set of spill candidates, by evaluating a cost function for each spill candidate using a plurality of spill strategies, and by selecting the spill candidate having the lowest cost function value. Preferably, the set of possible spill candidates is determined by the Chaitin method of constructing an interference graph of all live ranges of symbolic registers, and iteratively removing nodes and placing them on a stack. Preferably, multiple spill strategies are represented as varying numbers of deaths N of live ranges of other symbolic registers, a spill strategy N signifying that spill code is introduced whenever the number of deaths occurring between two successive uses of a symbolic register equals or exceeds N. In the preferred embodiment, the cost is a function of the number, type and frequency of each operation introduced by the spill, and is divided by a benefit factor represented as the degree of the node.
    • 在计算机程序代码编译期间的寄存器分配是通过使用多个溢出策略评估每个溢出候选者的成本函数,以及通过选择具有最低成本函数值的溢出候选来确定一组溢出候选。 优选地,可能的溢出候选的集合由构成符号寄存器的所有生存范围的干涉图的Chaitin方法确定,并迭代地去除节点并将其放置在堆栈上。 优选地,多个溢出策略被表示为其他符号寄存器的生存范围的死亡数N的变化数量,溢出策略N表示当符号寄存器的两个连续使用之间发生的死亡数等于或超过N时,溢出代码被引入。 在优选实施例中,成本是由溢出引入的每个操作的数量,类型和频率的函数,并且被表示为节点的程度的有益因子除以。
    • 4. 发明授权
    • Instruction cache alignment mechanism for branch targets based on predicted execution frequencies
    • 基于预测执行频率的分支目标的指令缓存对齐机制
    • US06301652B1
    • 2001-10-09
    • US08593309
    • 1996-01-31
    • Edward Curtis ProsserRobert Ralph RoedigerWilliam Jon Schmidt
    • Edward Curtis ProsserRobert Ralph RoedigerWilliam Jon Schmidt
    • G06F940
    • G06F8/4442
    • A compiler system and method is provided that can 1) generate a second instruction stream from a first instruction stream, 2) read in and process predetermined external information regarding the basic blocks that makes up the second instruction stream and 3) place certain of the basic blocks on cache line boundaries based on predicted execution frequencies. In particular, the compiler system and method utilize profile information containing predicted block execution or edge-weight execution frequencies to determine which of the basic blocks to align on cache line boundaries. One method for obtaining profile information includes precompiling the source code, creating an executable program, executing the program with test inputs, and outputting a profile containing execution frequency information. Once the profile information is obtained, the source code can then be recompiled using the profile information. The compiler can then selectively cache align those blocks identified as important.
    • 提供一种编译器系统和方法,其可以1)从第一指令流生成第二指令流,2)读入并处理关于组成第二指令流的基本块的预定外部信息,以及3)将某些基本 基于预测的执行频率在高速缓存线边界上的块。 特别地,编译器系统和方法利用包含预测块执行或边缘权重执行频率的简档信息来确定哪些基本块在高速缓存行边界上对齐。 用于获得简档信息的一种方法包括预编译源代码,创建可执行程序,使用测试输入执行程序,以及输出包含执行频率信息的简档。 一旦获得了简档信息,就可以使用简档信息重新编译源代码。 然后,编译器可以选择性地高速缓存将被标识为重要的块。
    • 8. 发明授权
    • Register allocation method and apparatus for truncating runaway
lifetimes of program variables in a computer system
    • 用于截断计算机系统中程序变量失控寿命的寄存器分配方法和装置
    • US5761514A
    • 1998-06-02
    • US522052
    • 1995-08-31
    • Nava Arela AizikowitzRoy Bar-HaimEdward Curtis ProsserRobert Ralph RoedigerWilliam Jon Schmidt
    • Nava Arela AizikowitzRoy Bar-HaimEdward Curtis ProsserRobert Ralph RoedigerWilliam Jon Schmidt
    • G06F9/45
    • G06F8/433G06F8/441
    • A method and apparatus for truncating runaway lifetimes of program variables calculates liveness for each variable based on upwardly exposed uses. Reaching definitions are then calculated for at least the program variables that have runaway lifetimes. The liveness information is compared to the reaching definition information to determine whether a variable that is live upon entry to a basic block has a definition that reaches the end of each predecessor block, or has a use within the basic block. If the reaching definition for a variable reaches the beginning of the block and if there is a predecessor block for which there is no reaching definition, the variable has a runaway lifetime. The variable also has a runaway lifetime if there is a use of the variable in a block without a reaching definition for the variable at the beginning of the block. The runaway lifetime is truncated by inserting an instruction such as a pseudo-definition of the variable into the instruction stream at an appropriate place. Once runaway lifetimes are truncated using this method, subsequent stages of the compiler may calculate liveness by performing a single dataflow analysis which calculates lifetimes based on upwardly exposed uses.
    • 用于截断程序变量的失效寿命的方法和装置根据向上暴露的使用来计算每个变量的活动性。 然后对至少具有失效寿命的程序变量计算达到定义。 将活动信息与达到的定义信息进行比较,以确定在输入到基本块时是否存在活动的变量具有到达每个前导块的结束的定义,或者在基本块内具有使用。 如果变量的到达定义到达块的开头,并且如果存在没有到达定义的前导块,则该变量具有失控的生命周期。 如果块中的变量使用块的开头处的变量没有达到定义,那么该变量也将失效。 通过在适当的地方将诸如伪变量的伪定义的指令插入指令流来截断失控生命周期。 一旦使用这种方法截断失效生命周期,编译器的后续阶段可以通过执行基于向上暴露的使用计算寿命的单个数据流分析来计算活动。
    • 10. 发明授权
    • Object-oriented compiler mechanism for automatically selecting among multiple implementations of objects
    • 面向对象的编译机制,用于在对象的多个实现之间进行自动选择
    • US06360360B1
    • 2002-03-19
    • US08598360
    • 1996-02-08
    • Cary Lee BatesEdward Curtis ProsserWilliam Jon Schmidt
    • Cary Lee BatesEdward Curtis ProsserWilliam Jon Schmidt
    • G06F945
    • G06F8/443
    • In an object-oriented or object-based computer system, a compiler mechanism allows a compiler to automatically select among multiple implementations of an object to optimize the performance of the compiled code. The selection may be made by assigning a weighted cost to each of the implementations, and selecting the implementation with the lowest weighted cost, where the weighted cost represents estimates of execution frequencies for each of the object's functions. In the alternative, for implementations that have different interfaces, the selection may be made based on an evaluation of the functions used in the program compared to the functions provided by the different implementations, and selecting an implementation that contains all functions issued against the object with a minimum of functions that are not issued against the object.
    • 在面向对象或基于对象的计算机系统中,编译器机制允许编译器在对象的多个实现中自动选择以优化编译代码的性能。 可以通过为每个实施方案分配加权成本并且以最低加权成本选择实现来进行选择,其中加权成本表示对象的每个功能的执行频率的估计。 在替代方案中,对于具有不同接口的实现,可以基于与由不同实现提供的功能相比较的程序中使用的功能的评估来进行选择,并且选择包含针对对象发布的所有功能的实现, 对对象不发出的最小功能。