CN101918917A - 基于块计数的过程布局和拆分 - Google Patents
基于块计数的过程布局和拆分 Download PDFInfo
- Publication number
- CN101918917A CN101918917A CN2008801253240A CN200880125324A CN101918917A CN 101918917 A CN101918917 A CN 101918917A CN 2008801253240 A CN2008801253240 A CN 2008801253240A CN 200880125324 A CN200880125324 A CN 200880125324A CN 101918917 A CN101918917 A CN 101918917A
- Authority
- CN
- China
- Prior art keywords
- code block
- chain
- block chain
- action
- code
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 95
- 230000009471 action Effects 0.000 claims description 88
- 230000008569 process Effects 0.000 claims description 26
- 230000014509 gene expression Effects 0.000 claims description 7
- 238000004590 computer program Methods 0.000 abstract description 3
- 230000005540 biological transmission Effects 0.000 description 9
- 238000004422 calculation algorithm Methods 0.000 description 8
- 238000005194 fractionation Methods 0.000 description 7
- 230000007246 mechanism Effects 0.000 description 6
- 239000000523 sample Substances 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 230000001143 conditioned effect Effects 0.000 description 2
- 235000008694 Humulus lupulus Nutrition 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 230000009897 systematic effect Effects 0.000 description 1
Images
Classifications
-
- 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
-
- 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/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44557—Code layout in executable memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及用于基于块计数的过程布局和拆分的方法、系统和计算机程序产品。本发明的各实施例利用代码块计数来通过最小化沿较频繁执行的路径的分支来提供改进所生成的过程代码的执行时间的代码块总体排序。该总体排序是使用区分了优先级的优先次序关系来优化的。例如,优化该总体排序以最大化代码块链在其他代码块链之后的适当放置。该总体排序还被优化来将零计数(未触碰)代码块置于任何非零(已触碰)代码块之后。
Description
背景
1.背景和相关技术
计算机系统和相关技术影响社会的许多方面。的确,计算机系统处理信息的能力已转变了人们生活和工作的方式。计算机系统现在通常执行在计算机系统出现以前手动执行的许多任务(例如,文字处理、日程安排和会计等)。最近,计算机系统彼此耦合并耦合到其他电子设备以形成计算机系统和其他电子设备可以在其上传输电子数据的有线和无线计算机网络。因此,许多计算任务的执行分布在多个不同的计算机系统和/或多个不同的计算组件上。
随着计算机化的系统日益普及,此类系统内采用的软件和硬件的复杂度也日益增加。一般而言,对看起来愈加复杂的软件的需求持续增长,这进一步趋向于成为推动硬件更大开发的动力之一。然而,即使对于复杂软件而言,在执行期间通过代码的一些路径走得相对(并且可能显著地)更频繁。相反,通过代码的其他路径走得相对不频繁或根本不走。软件代码可包括导致在执行期间走特定代码路径的各种条件或其他分支语句。
不幸的是,在执行软件代码时,各代码块在存储器中的布置可能不会考虑较频繁或较不频繁走的路径。即,相对不频繁执行的代码块可能置于较频繁执行的代码块之前,造成执行在非连续存储器部分之间跳转。
此外,典型的处理器具有在遇到条件分支时在何处寻找下一指令的自然偏好。例如,许多处理器具有用于标识在到达条件分支时要执行的下一指令的算法。这些算法通常包括关于指令通常是如何执行的各种假定和/或预测。例如,许多这样的算法假定如果条件分支是前向的(即,到在系统存储器内被置于当前代码块之后的代码块),则不采取该分支。另一方面,这些算法还假定如果分支是后向的(即,到在系统存储器内被置于当前代码块之前的代码块),则采取该分支。
然而,不论代码块被置于何处,该算法必须放置适当的分支(条件或非条件)以确保以正确的次序来执行代码块。不幸的是,编译器在可执行码内安排代码块时通常不能考虑处理器算法功能。例如,编译器可以输出基本上使源代码中的指令的安排并行的可执行码。这一编译器功能可导致不及最优执行。例如,可执行码可包括到频繁利用的代码块的前向分支和/或到较不频繁利用的代码的后向分支。
结果,一些机制尝试优化代码块布局。这些机制通常用探头来操纵代码以确定一个代码块被从其他代码块调用有多频繁(通常被称为“弧计数”)。基于弧计数,将代码块排序以用于更高效的执行。还有一些机制操纵代码来计算代码块实际上执行的次数(通常被称为“块计数”)。然而,这些机制通常使用从代码块的局部观点来放置代码块的贪婪算法。这造成一些代码块的更高效的操作,但可能牺牲方法或代码的其他更大部分的总体效率。
此外,块计数的计算不必提供采取特定弧的次数的精确表示。即,代码块的代码块执行的指示不必指示哪些其他代码块在该代码块之前或之后执行。此外,在代码块递归地调用本身时,收集精确的弧计数是困难的。
虽然如此,但一些机制收集块计数并尝试计算精确的弧计数。然而,对于块和弧的所有可能组合,从块计数导出精确的弧计数即使不是不可能也是非常困难的。如此,使用这些机制计算弧计数或者是近似值或者具有某种程度的不精确性。
简要概述
本发明涉及用于基于块计数的过程布局和拆分的方法、系统和计算机程序产品。计算机系统访问包括多个不同的代码块的可执行过程。该可执行过程具有起始代码块和将该过程的执行分成其他代码块的一个或多个条件语句。计算机系统访问该可执行过程的块计数数据。该块计数数据包括对于每一代码块的、指示在该可执行过程的一次或多次先前执行期间执行该代码块的次数的块计数。计算机系统基于所访问的块计数来创建该可执行过程的一个或多个代码块的一条或多条代码块链。
在一些实施例中,一条或多条代码块链中的每一个的代码块链创建包括访问具有最高块计数的尚未包括在代码块链中的代码块。对于所访问的每一代码块,确定所访问的代码块是否是已有链中的最后代码块的后继。对于所访问的每一代码块,还确定所访问的代码块是否是已有链中的第一代码块的前导。基于确定所访问的块是否是后继和/或前导的结果来将所访问的代码块分配给一条或多条代码块链。将代码块分配给一条或多条代码块链可包括:A)创建新代码块链并将所访问的代码块分配给该新代码块链或B)将所访问的代码块分配给已有代码块链。在适当时,两个已有代码块链还可合并成单条代码块链。例如,当代码块是一条代码块链的前导并且是另一代码块链的后继时。
在其他实施例中,对于每一代码块链,至少收集链的后集(并可能也收集前集)。对于指定的代码块链,后集指示该指定的代码块链在该一条或多条代码块链的排序内继一组其他代码块链之后的偏好。对于指定的代码块链,链的前集指示该指定的代码块链在该一条或多条代码块链的排序内先于一组其他代码块链的偏好。
计算机系统将该一条或多条代码块链进行排序以供置于系统存储器中来优化可执行过程的后续执行。对代码块链进行排序可包括创建任何非零计数代码块链的排序,包括根据优先次序关系将任何非零计数代码块链彼此连接。对代码块链进行排序还可包括创建任何零计数代码块链的排序,包括根据优先次序关系将任何零计数代码块链彼此连接。对代码块链进行排序可包括随后将零计数代码块链的排序追加到非零计数代码块链排序的末尾以创建一条或多条代码块链的总体排序。因此,在将总体排序置于系统存储器中时,任何非零计数块在系统存储器内都被置于所有零计数块之前。
代码块链排序可以基于优先次序关系。优先次序关系可包括对最小化后集违反的排序给予优先级。
提供本概述是为了以简化的形式介绍将在以下详细描述中进一步描述的一些概念。本概述不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。
本发明的附加特征和优点将在以下描述中叙述,且其一部分根据本描述将是显而易见的,或可通过对本发明的实践来获知。本发明的特征和优点可通过在所附权利要求书中特别指出的工具和组合来实现和获得。本发明的这些和其他特征将通过以下描述和所附权利要求书变得更加显而易见,或可通过对下文中所述的本发明的实践来领会。
附图简述
为了描述可获得本发明的上述和其他优点和特征的方法,将通过引用附图中示出的本发明的具体实施例来呈现以上简要描述的本发明的更具体描述。可以理解,这些附图仅描述本发明的典型实施例,从而不被认为是对其范围的限制,本发明将通过使用附图用附加特征和细节来描述和说明,附图中:
图1示出便于基于块计数的过程布局和拆分的示例计算机体系结构。
图2A示出可执行过程的示例块图。
图2B示出来自图2A的块图的各代码块的链。
图2C示出没有传递闭包的来自图2B的代码块的链的后集和前集。
图2D示出具有传递闭包的来自图2B的代码块的链的后集和前集。
图2E示出来自图2B的代码块的链的总体链排序。
图3示出用于优化软件过程的执行的示例方法的流程图。
图4示出用于优化软件过程的执行的示例方法的流程图。
图5示出代码块链之间的连接的示例。
详细描述
本发明涉及用于基于块计数的过程布局和拆分的方法、系统和计算机程序产品。计算机系统访问包括多个不同的代码块的可执行过程。该可执行过程具有起始代码块和将该过程的执行分成其他代码块的一个或多个条件语句。计算机系统访问该可执行过程的块计数数据。该块计数数据包括对于每一代码块的、指示在该可执行过程的一次或多次先前执行期间执行该代码块的次数的块计数。计算机系统基于所访问的块计数来创建该可执行过程的一个或多个代码块的一条或多条代码块链。
在一些实施例中,一条或多条代码块链中的每一个的代码块链创建包括访问具有最高块计数的尚未包括在代码块链中的代码块。对于所访问的每一代码块,确定所访问的代码块是否是已有链中的最后代码块的后继。对于所访问的每一代码块,还确定所访问的代码块是否是已有链中的第一代码块的前导。基于确定所访问的块是否是后继和/或前导的结果来将所访问的代码块分配给一条或多条代码块链。将代码块分配给一条或多条代码块链可包括:A)创建新代码块链并将所访问的代码块分配给该新代码块链或B)将所访问的代码块分配给已有代码块链。在适当时,两个已有代码块链还可合并成单条代码块链。例如,当代码块是一条代码块链的前导并且是另一代码块链的后继时。
在其他实施例中,对于每一代码块链,至少收集链的后集(并可能也收集前集)。对于指定的代码块链,后集指示该指定的代码块链在该一条或多条代码块链的排序内继一组其他代码块链之后的偏好。对于指定的代码块链,链的前集指示该指定的代码块链在该一条或多条代码块链的排序内先于一组其他代码块链的偏好。
计算机系统将该一条或多条代码块链进行排序以供置于系统存储器中来优化可执行过程的后续执行。对代码块链进行排序可包括创建任何非零计数代码块链的排序,包括根据优先次序关系将任何非零计数代码块链彼此连接。对代码块链进行排序还可包括创建任何零计数代码块链的排序,包括根据优先次序关系将任何零计数代码块链彼此连接。对代码块链进行排序可包括随后将零计数代码块链的排序追加到非零计数代码块链排序的末尾以创建一条或多条代码块链的总体排序。因此,在将总体排序置于系统存储器中时,任何非零计数块在系统存储器内都被置于所有零计数块之前。
代码块链排序可以基于优先次序关系。优先次序关系可包括对虑最小化后集违反情况的排序给予优先级。
本发明的各实施例可以包括或利用含有计算机硬件的专用或通用计算机,这将在以下做出进一步讨论。本发明范围内的各实施例还包括用于承载或储存计算机可执行指令和/或数据结构的物理和其他计算机可读介质。这样的计算机可读介质可以是可由通用或专用计算机系统访问的任何可用介质。存储计算机可执行指令的计算机可读介质是物理存储介质。携带计算机可执行指令的计算机可读介质是传输介质。由此,作为示例而非限制,本发明的各实施例可包括至少两种完全不同的计算机可读介质:物理存储介质和传输介质。
物理存储介质包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储、磁盘存储或其他磁存储设备、或可用于存储计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的任何其他介质。
“网络”被定义为允许在计算机系统和/或模块和/或其他电子设备之间传输电子数据的一个或多个数据链路。当信息通过网络或另一通信连接(硬连线、无线或硬连线或无线的组合)传输或提供给计算机时,该计算机将该连接适当地视为传输介质。传输介质可包括可用于携带计算机可执行指令或数据结构形式的所需程序代码装置并可由通用或专用计算机访问的网络和/或数据链路。上述的组合也应被包括在计算机可读介质的范围内。
此外,应当理解,在到达各种计算机系统组件之后,计算机可执行指令或数据结构形式的程序代码装置可从传输介质自动转移到物理存储介质(或者相反)。例如,通过网络或数据链路接收到的计算机可执行指令或数据结构可被缓存在网络接口模块(例如,“NIC”)内的RAM中,然后最终被传送到计算机系统RAM和/或计算机系统处的较不易失性的物理存储介质。由此,应当理解,物理存储介质可被包括在同样(或甚至主要)利用传输介质的计算机系统组件中。
计算机可执行指令例如包括,使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。计算机可执行指令可以是例如二进制代码、诸如汇编语言等中间格式指令、或甚至源代码。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述特征或动作。相反,上述特征和动作是作为实现权利要求的示例形式而公开的。
本领域的技术人员将理解,本发明可以在具有许多类型的计算机系统配置的网络计算环境中实践,这些计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持式设备、多处理器系统、基于微处理器的或可编程消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA、寻呼机、路由器、交换机等等。本发明也可以在其中通过网络链接(或者通过硬连线数据链路、无线数据链路,或者通过硬连线和无线数据链路的组合)的本地和远程计算机系统两者都执行任务的分布式系统环境中实践。在分布式系统环境中,程序模块可以位于本地和远程存储器存储设备中。
图1A示出便于基于块计数的过程布局和拆分的示例计算机体系结构100。参考图1,计算机体系结构100包括代码安排模块。一般而言,代码安排模块101被配置成接收可执行过程和该可执行过程的块计数数据。从该块计数数据,代码安排模块101优化可执行过程内的代码块的安排以供置于系统存储器中。优化可包括定位代码块以用于更高效的执行,降低存储器开销等。
如图所示,代码安排模块101包括链创建模块102、集合收集模块103、以及链排序模块104。所描绘的组件中的每一个可通过系统总线和/或诸如例如局域网(“LAN”)、广域网(“WAN”)或甚至因特网等网络(或作为网络的一部分)彼此连接。因此,所描绘的组件中的每一个以及任何其他连接的组件都可以创建消息相关数据并通过网络交换消息相关数据(例如,网际协议(“IP”)数据报和利用IP数据报的其他更高层协议,诸如传输控制协议(“TCP”)、超文本传输协议(“HTTP”)、简单邮件传输协议(“SMTP”)等)。
一般而言,链创建模块102被配置成接收可执行过程和块计数数据,如包括代码块201、202等(例如,较长软件应用程序的各部分)的方法111以及块计数数据112。可执行过程可包括造成在执行期间采取各种不同代码块路径的条件和其他语句。块计数数据是指示每一代码块在该过程的先前(非优化)执行期间的执行次数的数据。
可执行过程可被配置成生成代码块数据。例如,可以用在每次执行代码块时进行计数的探头来操纵该代码块。随后,所操纵的可执行过程可以使用不同输入值来执行多次。对于每一次执行,如果代码块被执行,则探头可递增该代码块的块计数。因此,可以在使用不同输入值的多次先前执行上累积块计数数据。在先前执行期间每次执行代码块时,可以递增该代码块的块计数。然而,特定代码块被执行的次数可能与可执行过程在程序分析(profiling)期间被执行的实际次数具有(如果有的话)有限的对应关系。也可生成并使用其他程序分析引导数据。
因此,从可执行过程和块计数数据,链创建模块102可以制定该可执行过程的块图。例如,如图2A所示,链创建模块102可以制定方法111的块图200。块图200指示代码块201到213彼此的相对位置以及每一代码块在程序分析期间被执行的次数的“计数”。“计数”值指示对应的探头检测到其对应的代码块被执行多少次。因此,链创建模块102可从方法111和块计数数据112制定块图200以便于稍后在方法111内标识代码块链。
从块图,链创建模块102可以标识一条或多条代码块链,诸如例如代码块链121。代码块链包括要被编组在一起来优化可执行过程在系统存储器中的放置的一个或多个连接代码块(即,一条链的代码块)。一般而言,链创建模块102尝试将具有较高计数的代码块链接在一起(使得较高计数代码块在系统存储器中靠近)。链创建模块102可以沿着各邻近的较高计数代码块之间的路径,直至到达块图的末尾或直至没有其他邻近代码块可用为止(例如,下一邻近代码块已经被包括在另一代码块链中或是零计数代码块)。
图2B描绘从块图200中的代码块标识的代码块链121的示例。代码块201具有最高计数并且在原始可执行码次序中位于具有相同计数的任何其他块之前,所以本发明的算法首先选择它。因为没有用于添加它的链,所以它被添加到新空链292。代码块202具有下一最高计数。因为它是链292的最后块的后继,所以其被追加到链292。
代码块213具有下一最高计数。它不是任何已有链中的任何块的后继或前导,并且所以其被添加到新的(并且根本上是临时的)链298。接着,与代码块202类似,代码块203被追加到链292。接下来选择代码块212,因为其在剩余块中具有最高计数。因为它是代码块213(链298的第一块)的前导,所以其被加到链298的开头之前。接下来选择代码块205。它是链292的后继以及链298的前导,所以代码块205被追加到链292,并且随后追加链298的各个块并且丢弃链298。
代码块204不是任何链(此时只有链292)的最后块的后继或任何链的第一块的前导,所以其被添加到新链293。接着代码块208被追加到链293,因为其是该链的最后代码块(代码块204)的后继。与代码块204类似,代码块206成为新链294的一部分,随后代码块209被添加到链294。代码块207和210不能被添加到任何已有链,并且因此它们分别形成新链295和296。要处理的最后代码块是代码块211。其是链293的最后块(代码块208)的后继,但该链包含非零计数块而代码块293具有计数零,所以其只被添加到具有零计数块的链中。因为不存在具有零计数块的链,所以其被添加到新链297。
集合收集模块103被配置成接收代码块链,如代码块链121。从代码块链,集合收集模块可以创建代码块链中的每一条链的后集和前集,如后集115和前集116。指定代码块链的后集指示在链的总体排序中指定代码块链跟在后集中的代码块链之后的偏好。指定代码块链的前集指示在链的总体排序中指定代码块链在前集中的代码块链之前的偏好。图2C描绘不具有传递闭包的代码块链121的示例后集115和前集116。图2D描绘具有传递闭包的代码块链121的示例后集115和前集116。
链排序模块104被配置成接收代码块链、任何后集和前集、以及优先次序关系,分别诸如代码块链121、后集115和前集116、以及优先次序关系117。从代码块链、任何后集和前集、以及优先次序关系,链排序模块104可以创建可执行过程的代码块链的总体排序,如总体链排序118。总体链排序可被优化以供置于系统存储器中。图2E描绘代码块链121的总体链排序118的更详细表示。
图3示出用于基于块计数的过程布局和拆分的示例方法300的流程图。方法300将参考计算机体系结构100、块图200、代码块链121、以及总体链排序118中的组件和数据来描述。
方法300包括访问包括多个不同代码块的可执行过程的动作,该可执行过程具有起始代码块和将该过程的执行分成其他代码块的一个或多个条件语句(动作301)。例如,链创建模块102可以访问方法111。方法300包括访问可执行过程的块计数数据的动作,该块计数数据包括每一代码块的块计数,每一个块计数指示在该可执行过程的一次或多次先前执行期间代码块被执行的次数(动作302)。例如,链创建模块102可以访问块计数数据112。
方法300包括基于所访问的块计数数据来创建可执行过程的一个或多个代码块的一条或多条链的动作(动作303)。例如,链创建模块102可以基于块计数数据112创建代码块链121。在一些实施例中,各代码块链是同时创建的。
一条或多条代码块链的链创建包括访问具有最高块计数的尚未包括在代码块链中的代码块的动作(动作304)。例如,最初,链创建模块102可访问代码块201。如果代码块201已经被包括在链中,则链创建模块201可访问块202。接着,链创建模块102可按这一次序来访问块213、203、212、205、204、208、206、209、207、210以及211。然而,具有相同块计数的块(例如201、202、与213,203与212,以及207与210)的排序可以变化。
可以考虑或不考虑代码块在块图200内的位置。例如,当代码块具有相同的块计数时,可以首先处理较靠近块图200的顶部的代码块。然而,除用于对具有相同块计数的代码块进行排序之外,代码块在块图200内的位置对处理代码块以被包括在代码快链中的次序具有(如果有的话)有限的影响。例如,即使代码块213在块图200中处于代码块203下方,代码块213也可以在代码块203之前被处理。
对于所访问的每一个块,方法300包括确定所访问的块是否是已有代码块链中的最后块的后继的动作(动作305)。例如,在访问代码块201时,链创建模块102可以确定块201不是已有链中的最后块的后继(因为尚不存在任何链)。
对于所访问的每一个块,方法300包括确定所访问的块是否是已有代码块链中的第一块的前导的动作(动作306)。例如,在访问块201时,链创建模块102可以确定块201不是已有链中的第一块的前导(因为尚不存在任何链)。
对于所访问的每一个块,方法300包括至少基于确定所访问的代码块是否是后继和/或前导的结果来将所访问的代码块分配给一条或多条代码块链的动作(动作307)。将代码块分配给一条或多条代码块链可包括为代码块创建新链和/或将代码块分配给(例如,追加或加在前面)已有链。例如,因为代码块201既不是已有链的后继也不是前导,所以创建新链292。将代码块201分配给链292。
可以对所访问的每一代码块重复动作305、306和307。例如,在处理代码块201后,链创建模块102可以处理代码块202。链创建模块102可以确定代码块202是代码块201(链292中的最后代码块)的后继并且不是已有链中的第一块的前导。因此,将代码块202追加到链292。
将代码块分配给代码块链还可包括合并代码块链。例如,在处理代码块201后,链创建模块102可以处理代码块213。代码块213既不是已有链的后继也不是前导。因为代码块201既不是已有链的后继也不是前导,所以创建新链298。将代码块213分配给链298。
在处理代码块213后,链创建模块102可以处理代码块203并将代码块202追加到链292。在处理代码块203后,链创建模块102可以处理代码块212并将代码块212加到链298之前。
在处理代码块212后,链创建模块102可以处理代码块205。链创建模块102可以确定代码块205既是链292中的最后代码块(代码块203)的后继也是链298中的第一代码块(代码块212)的前导。如此,将代码块205追加到链292或加到链298之前。随后,合并链292和298,从而得到单条链(如图2A所示,保留链292并且丢弃链298,然而相反的情况也可发生)。
代码块链创建可包括将非零计数代码块的链与零计数代码块的链分开。因此,方法300还可包括在将代码块分配给代码块链之前确定代码块是零还是非零计数代码块的动作。如此,将所访问的代码块分配给一条或多条代码块链可包括确定是否有零计数块是已有代码块链中的非零块的前导或后继。因此,即使在零计数块是非零计数块的前导或后继时,也创建新链并将零计数块分配给该新链。例如,在处理代码块211时,可以确定代码块211是代码块链293中的最后代码块(代码块208)的后继。然而,因为代码块211是零计数代码块,所以创建新代码块链297。将代码块211分配给代码块链297而非代码块链293。
链创建模块102可以将代码块链121(包括非零计数链113(例如,非零链292、293、294、295及296)和零计数链114(例如,零链297))发送到集合收集模块143和/或链排序模块104。
方法300包括基于优先次序关系来对一条或多条代码块链进行排序以供置于系统存储器中来优化可执行过程的后续执行的动作(动作309)。例如,链排序模块104可以基于优先次序关系117来对代码块链121进行排序以供置于系统存储器中来优化方法111的执行。优先次序关系117可以指示非零链要排在零链之前。
因此,对一条或多条代码块链进行排序可包括创建任何非零计数代码块链的排序的动作,包括根据优先次序关系将任何非零计数代码块链彼此连接(动作310)。例如,参考图2E,链排序模块104可以创建非零链292到296的非零排序119,包括根据优先次序关系117将非零链292到296彼此连接。
对一条或多条代码块链进行排序还可包括创建任何零计数代码块链的排序的动作,包括根据优先次序关系将任何零计数代码块链彼此连接(动作311)。例如,虽然未明确示出,但其他零计数代码块链也可根据优先次序关系来连接到零链297。
对一条或多条代码块链进行排序还可包括将任何零计数代码块链追加到非零计数代码块链的排序的末尾以创建该一条或多条代码块链的总体排序以使得在该总体排序被置于系统存储器中时任何非零计数块都在系统存储器内被置于所有零计数块之前的动作(动作311)。例如,链排序模块104可以将零链297追加到非零排序119的末尾以创建总体链排序118。
因此,在总体链排序118被置于系统存储器中时,任何非零计数块(即,292-296)都被置于所有零计数块(即,297)之前。在系统存储器中将非零计数块置于零计数块之前优化了方法111的执行。在执行期间,非零块被编组在一起,从而显著降低了非零块之间的转移必须跳过存储器中的任何零块的概率。此外,在一些实施例中,零计数块甚至不被加载到存储器中。
图4示出用于基于块计数的过程布局和拆分的示例方法400的流程图。方法400将参考计算机体系结构100、块图200、代码块链121、后集115、前集116、以及总体链排序118中的组件和数据来描述。
方法400包括访问包括多个不同代码块的可执行过程的动作,该可执行过程具有起始代码块和将该过程的执行分成其他代码块的一个或多个条件语句(动作401)。方法400包括访问可执行过程的块计数数据的动作,该块计数数据包括每一代码块的块计数,每一个块计数指示在该可执行过程的一次或多次先前执行期间代码块被执行的次数(动作402)。例如,如上所述,链创建模块102可以访问方法111和块计数数据112。
方法400包括基于所访问的块计数数据来创建可执行过程的一个或多个代码块的一条或多条链的动作(动作403)。例如,同样如上所述,链创建模块102可以基于块计数数据112创建代码块链121。
对于该一条或多条代码块链中的每一代码块链,方法400包括至少收集该代码块链的链的后集的动作,该链的后集指示该链在一条或多条代码块链的排序内继一组其他链之后的偏好(动作404)。例如,集合收集模块143可以收集代码块链121的后集115。指定链的后集指示该链继一组其他链之后的偏好。在一起来看时,多个后集表达了链的总体排序的偏好。因此,虽然指定的后集指示相反的偏好,但仍然可以生成基于一个或多个所表达的偏好的总体排序。
例如,后集115指示在链的总体排序中链293跟在链292之后且链292跟在链293之后是偏好的。然而,满足任一偏好的总体排序可能降低无条件分支的总体数量,帮助预测剩余条件分支,并将频繁执行的代码块更近地放在一起。因此,虽然偏好是相反的,但满足任一偏好都提供方法111的更高效执行。
同样,集合收集模块143可以收集前集116。指定链的前集指示该链先于一组其他链的偏好。在一起来看时,多个前集也表达了链的总体排序的偏好。因此,与后集类似,虽然指定前集可指示相反的偏好,但仍然可以生成基于一个或多个所表达的偏好的总体排序。
对前集和后集的收集可以基于代码块在一条链内相对于代码块在块图200中的另一条链内的位置的位置。例如,在总体排序中,非零链294偏好在非零链296之前,从而导致从非零链294到非零链296的前向分支。将非零链294安排在非零链296之前可优化执行。即,例如,因为处理器可以假定/预测不采取前向分支,所以从代码块206外出的最少走的分支被指示为前向分支。
各种优先次序关系可以将前集和后集用作输入来确定如何将代码块链相对于彼此进行排序。在一些实施例中,向包含入口块(即,可执行码的开头)的代码块链被给予最高优先级并且因而将其添加作为第一排序链。接着,将具有最高优先级的每一条链添加到链的排序列表中。在其他链被添加到排序链的列表中时,未排序链的优先级可以改变。
例如,方法400包括基于优先次序关系来对一条或多条代码块链进行排序以供置于系统存储器中来优化可执行过程的后续执行的动作,该优先次序关系包括对最小化一条或多条代码块链的后集违反情况的总体排序给予优先次序(动作405)。例如,链排序模块104可以基于优先次序关系117来对代码块链121进行排序以供置于系统存储器中来优化方法111的后续执行。优先次序关系117可以指示一个或多个区分了优先级的优先次序关系。优先次序关系117中的较高优先级的优先次序关系可以最小化后集违反情况。例如,将非零链295置于非零链293之前违反了后集115。因此,链排序模块104尝试在总体链排序118中将非零链295置于非零链293之后。
当多条代码块链的后集违反情况对于所有其他未排序代码块链相同时,下一较低优先级优先次序关系可以最大化去往和/或来自先前排序的代码块链的连接的计数。图5示出代码块的链之间的连接500的示例。
如图所示,链501包括代码块511、512、513、514和515。链502包括代码块516,并且链503包括代码块517和518。连接521表示链501和503之间存在三条连接。类似地,连接522表示链501和502之间存在两条连接。在将链502或503中的任一个置于链501之后时的后集违反情况对于其他未排序代码块链相同。因此,放置下一条链以最大化去往和来自链501(先前排序的代码块)的连接。因此,因为连接521表示三条连接而连接522表示两条连接,所以代码块链503在链501、502、和503的总体排序中被置于代码块501之后并且在链502之前。
在多条代码块链的后集违反情况和连接计数对于所有其他未排序代码块链相同时,下一较低优先级优先次序关系可以最大化应当处于先前排序的代码块链之后但尚未排序的代码块链的集合。例如,在放置了非零链293后,可以放置非零链294和295中的任一个而都不造成任何后集违反情况。此外,非零链295和294中的每一个都具有到先前排序的非零链292和293的两条连接。非零链295具有空前集,意味着不存在任何其他代码块链处于其后的偏好,或换言之,代码块链295没有处于任何其他代码块链之前的偏好。非零链294在其前集中具有非零链296,意味着偏好非零链296跟在非零链294之后,或换言之偏好非零链294位于非零链296之前。因此,通过将非零链294添加到非零排序119,其增加了应当处于排序代码块链之后的代码块链的集合,而添加链295不增加该集合。
在后集违反情况、连接计数、以及应当处于先前排序的链之后的代码块链的集合对于所有其他未排序代码块链相同时,将下一较低优先级优先次序关系给予具有最高执行计数的代码块链。这一关系保证所有零计数代码块链都排在所有非零计数代码块链之后。
在后集违反情况、连接计数、应当处于先前排序的代码块链之后的代码块链的集合对于先前排序的链相同,并且执行计数相对于所有其他未排序代码块链相同时,下一较低优先级优先次序关系尊重每一代码块链中的初始块的词法顺序。即,如果在方法111中代码块207在代码块210之前,则非零链295被置于非零链296之前。另一方面,如果在方法111中代码块210在代码块207之前,则链296被置于链295之前。出于完成该示例的目的,确定在方法111中代码块210在代码块207之前。因此,将链296置于链295之前。
其余非零链(非零链295)随后被置于链296之后。非零链295的放置完成了方法111(块图200)的非零排序119。随后遵循相同的优先次序关系来将任何零链追加到非零排序119之后。例如零链297被追加到非零链295之后以创建方法111(块图200)的总体排序118。
总体排序118可以与在程序分析期间使用的方法111的代码块排序不同(可能显著不同)。总体排序118被优化来将较频繁执行的代码块置于存储器的顶部附近。总体排序118还被优化来将较频繁执行的代码块在存储器中彼此靠近地编组在一起。总体排序还被优化来将零计数(未触碰)代码块置于任何非零(已触碰)代码块之后。这些优化以自顶向下方式来便于存储器利用并减轻在执行期间存储器的各非连续部分之间的跳转次数,从而得到方法111的更高效执行。
因此,本发明的各实施例利用代码块计数来通过最小化沿较频繁执行的路径的分支来提供改进所生成的过程代码的执行时间的代码块布局。各实施例还利用对其余分支的硬件分支预测,其预测采取后向分支并且不采取前向分支。各实施例还通过降低从盘读出的未执行代码的量来改进具有增加的盘输入/输出的程序的起动时间。
本发明可具体化为其他具体形式而不背离其精神或本质特征。所描述的实施例在所有方面都应被认为仅是说明性而非限制性的。从而,本发明的范围由所附权利要求书而非前述描述指示。落入权利要求书的等效方案的含义和范围内的所有改变应被权利要求书的范围所涵盖。
Claims (20)
1.一种在包括系统存储器的计算机系统(100)处的用于优化软件过程(111)的执行的方法,所述方法包括:
访问包括多个不同代码块(201、202)的可执行过程(111)的动作,所述可执行过程(111)具有起始代码块(201)和将所述过程的执行分成其他代码块(202、203、204)的一个或多个条件语句;
访问所述可执行过程(111)的块计数数据(112)的动作,所述块计数数据(112)包括每一代码块的块计数,每一个块计数指示在所述可执行过程(111)的一次或多次先前执行期间代码块被执行了多少次;
基于所访问的块计数数据(112)来创建所述可执行过程(111)的一个或多个代码块的一条或多条代码块链(292、293)的动作,创建所述一条或多条代码块链(292、293)包括将任何零计数代码块(211)分成单独的零计数链(297);以及
基于优先次序关系(117)来对所述一条或多条代码块链(292、293)进行排序以供置于系统存储器中来优化所述可执行过程(111)的后续执行的动作,包括:
创建任何非零计数代码块链的排序(119)的动作,包括根据优先次序关系(117)将任何非零计数代码块链彼此连接;
创建任何零计数代码块链的排序的动作,包括根据优先次序关系(117)将任何零计数代码块链(297)彼此连接;
随后将零计数代码块链的排序追加到非零计数代码块链的排序的末尾以创建所述一条或多条代码块链的总体排序(118)以使得在所述总体排序被置于系统存储器中时任何非零计数块在系统存储器内都被置于所有零计数块之前的动作。
2.如权利要求1所述的方法,其特征在于,基于所访问的块计数数据来创建所述可执行过程的一个或多个代码块的一条或多条代码块链的动作对于一条或多条代码块链包括:
访问具有最高块计数的尚未包括在代码块链中的代码块的动作;
对于所访问的每一个块:
确定所访问的代码块是否是已有代码块链中的最后块的后继的动作;
确定所访问的代码块是否是已有代码块链中的第一块的前导的动作;以及
至少基于确定所访问的代码块是否是已有代码块链的后继的结果和确定所访问的代码块是否是已有代码块链的前导的结果来将所访问的代码块分配给所述一条或多条代码块链的动作。
3.如权利要求1所述的方法,其特征在于,还包括在对所述一条或多条代码块链进行排序之前:
对于每一代码块链:
收集所述代码块链的链的后集的动作,所述链的后集指示所述代码块链在所述一条或多条代码块链的排序中要处于其后的其他代码块链的集合。
4.如权利要求3所述的方法,其特征在于,还包括在对所述一条或多条代码块链进行排序之前:
对于每一代码块链:
收集所述代码块链的链的前集的动作,所述链的前集指示所述代码块链在所述一条或多条代码块链的排序中要处于其前的其他代码块链的集合。
5.如权利要求4所述的方法,其特征在于,基于优先次序关系对所述一条或多条代码块链进行排序以供置于系统存储器中的动作包括基于利用所述后集和前集作为输入的优先次序关系来对非零代码块链进行排序的动作。
6.如权利要求3所述的方法,其特征在于,基于优先次序关系对所述一条或多条代码块链进行排序以供置于系统存储器中的动作包括对非零代码块链进行排序以最小化后集违反情况的动作。
7.如权利要求6所述的方法,其特征在于,基于优先次序关系来对所述一条或多条代码块链进行排序以供置于系统存储器中的动作包括:
确定多条未排序代码块链中的任一条的放置将造成等效的后集违反情况的动作;以及
响应于所述判定对所述多条未排序非零代码块链进行排序以最大化到先前排序的非零代码块链的连接的计数的动作。
8.如权利要求6所述的方法,其特征在于,基于优先次序关系来对所述一条或多条代码块链进行排序以供置于系统存储器中的动作包括:
确定多条未排序代码块非零链中的任一条的放置将造成等效的后集违反情况的动作;
确定多条未排序代码块非零链中的任一条的放置将造成到先前排序的非零代码块链的连接的相等计数的动作;以及
响应于所述判定对所述多条代码块链进行排序以最大化应处于先前排序的代码块链之后但尚未排序的代码块链的集合的动作。
9.如权利要求6所述的方法,其特征在于,基于优先次序关系来对所述一条或多条代码块链进行排序以供置于系统存储器中的动作包括:
确定多条未排序代码块链中的任一条的放置将造成等效的后集违反情况的动作;
确定多条未排序代码块非零链中的任一条的放置将造成到先前排序的非零代码块链的连接的相等计数的动作;
确定多条未排序代码块非零链中的任一条的放置将造成应跟在先前排序的代码块链之后的代码块链的等效集合的动作;以及
响应于所述判定对所述多条代码块链进行排序以尊重每一代码块链中的初始块的词法顺序的动作。
10.如权利要求1所述的方法,其特征在于,基于优先次序关系对所述一条或多条代码块链进行排序以供置于系统存储器中的动作包括对所述一条或多条代码块链进行排序以最小化沿较频繁执行的路径的前向分支以便改进所述可执行过程的执行效率。
11.一种在计算机系统(100)处的用于优化软件过程(111)的执行的方法,所述方法包括:
访问包括多个不同代码块(201、202)的可执行过程(111)的动作,所述可执行过程(111)具有起始代码块(201)和将所述过程的执行分成其他代码块(202、203、204)的一个或多个条件语句;
访问所述可执行过程(111)的块计数数据(112)的动作,所述块计数数据(112)包括每一代码块的块计数,每一个块计数指示在所述可执行过程(111)的一次或多次先前执行期间代码块被执行了多少次;
基于所访问的块计数数据(112)来创建所述可执行过程(101)的一个或多个代码块(201、202、203、204)的一条或多条代码块链(292、293)的动作;
对于所述一条或多条代码块链中的每一代码块链:
至少收集所述代码块链的链的后集(115)的动作,所述链的后集(115)指示所述代码块链在所述一条或多条代码块链的排序内要继一组其他代码块链之后的偏好;
基于优先次序关系(117)来对所述一条或多条代码块链(292、293)进行排序以供置于系统存储器中来优化所述可执行过程(111)的后续执行的动作,所述优先次序关系包括对最小化所述一条或多条代码块链的后集违反情况的总体排序给予优先次序。
12.如权利要求11所述的方法,其特征在于,基于所访问的块计数数据来创建所述可执行过程的一个或多个代码块的一条或多条代码块链的动作包括创建一条或多条非零代码块链和单独的一条或多条零代码块链的动作。
13.如权利要求11所述的方法,其特征在于,对于所述一条或多条代码块链中的每一代码块链:至少收集所述代码块链的链的后集的动作包括:
收集所述代码块链的链的后集的动作;以及
收集所述代码块链的链的前集的动作。
14.如权利要求13所述的方法,其特征在于,基于优先次序关系对所述一条或多条代码块链进行排序以供置于系统存储器中的动作包括基于利用所述后集和前集作为输入的优先次序关系来对一条或多条代码块链进行排序的动作。
15.如权利要求11所述的方法,其特征在于,基于优先次序关系来对所述一条或多条代码块链进行排序以供置于系统存储器中的动作包括:
确定多条未排序代码块链中的任一条的放置将造成等效的后集违反情况的动作;以及
响应于所述判定对所述多条未排序代码块链进行排序以最大化到先前排序的代码块链的连接的计数的动作。
16.如权利要求15所述的方法,其特征在于,基于优先次序关系来对所述一条或多条代码块链进行排序以供置于系统存储器中的动作包括:
确定多条未排序代码块链中的任一条的放置具有到先前排序的代码块链的连接的相等计数的动作;以及
响应于所述判定对所述多条未排序代码块链进行排序以最大化应处于先前排序的代码块链之后但尚未排序的代码块链的集合的动作。
17.如权利要求16所述的方法,其特征在于,基于优先次序关系来对所述一条或多条代码块链进行排序以供置于系统存储器中的动作包括:
确定多条未排序代码块链中的任一条的放置将造成应处于先前排序的代码块链之后但尚未排序的链的等效集合的动作;以及
对所述多条未排序代码块链进行排序以尊重每一代码块链中的初始块的词法顺序的动作。
18.如权利要求11所述的方法,其特征在于,基于优先次序关系对所述一条或多条代码块链进行排序以供置于系统存储器中的动作包括对所述一条或多条代码块链进行排序以最小化沿较频繁执行的路径的前向分支以便改进所述可执行过程的执行效率。
19.一种计算机系统(100),所述计算机系统包括:
一个或多个处理器;
系统存储器;
一个或多个计算机可读介质,所述计算机可读介质存储有表示链创建模块(102)、集合收集模块(113)、以及链排序模块(104)的计算机可执行指令,其中所述链创建模块(102)被配置成:
访问包括多个不同代码块(201、202)的可执行过程(111),所述可执行过程(111)具有起始代码块(201)和将所述过程的执行分成其他代码块(202、203、204)的一个或多个条件语句;
访问所述可执行过程(111)的块计数数据(112),所述块计数数据(112)包括每一代码块的块计数,每一个块计数指示在所述可执行过程(111)的一次或多次先前执行期间代码块被执行了多少次;以及
基于所访问的块计数数据(112)来创建所述可执行过程(111)的一个或多个代码块的一条或多条代码块链(292、293),对于所述一条或多条代码块链包括:
访问具有最高块计数的尚未包括在代码块链中的代码块;
对于所访问的每一个块:
确定所访问的代码块是否是已有代码块链中的最后块的后继;
确定所访问的代码块是否是已有代码块链中的第一块的前导;
至少基于确定所访问的代码块是否是已有代码块链的后继的结果和确定所访问的代码块是否是已有代码块链的前导的结果来将所访问的代码块分配给所述一条或多条代码块链;
其中所述集合收集模块(113)被配置成:
收集所述代码块链的链的后集(115),所述链的后集指示所述代码块链在所述一条或多条代码块链的排序内要继一组其他代码块链之后的偏好;
收集所述代码块链的链的前集(116),所述链的后集指示所述代码块链在所述一条或多条代码块链的排序内要先于一组其他代码块链的偏好;
其中所述链排序模块(114)被配置成:
基于优先次序关系(117)来对所述一条或多条代码块链(292、293)进行排序以供置于系统存储器中来优化所述可执行过程的后续执行,所述优先次序关系包括:
将非零计数代码块链排在零代码块计数链之前;以及
对代码块链进行排序以最小化后集违反情况。
20.如权利要求19所述的系统,其特征在于,所述链创建模块、集合收集模块、以及链排序模块还被配置成互操作以对所述一条或多条代码块链进行排序来最小化沿着较频繁执行的路径的前向分支以便改进所述可执行过程的执行效率。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/016,099 US8677336B2 (en) | 2008-01-17 | 2008-01-17 | Block count based procedure layout and splitting |
US12/016,099 | 2008-01-17 | ||
PCT/US2008/088483 WO2009091493A2 (en) | 2008-01-17 | 2008-12-29 | Block count based procedure layout and splitting |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101918917A true CN101918917A (zh) | 2010-12-15 |
CN101918917B CN101918917B (zh) | 2017-08-08 |
Family
ID=40877462
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200880125324.0A Active CN101918917B (zh) | 2008-01-17 | 2008-12-29 | 基于块计数的过程布局和拆分 |
Country Status (5)
Country | Link |
---|---|
US (1) | US8677336B2 (zh) |
EP (1) | EP2250551A4 (zh) |
CN (1) | CN101918917B (zh) |
BR (1) | BRPI0821772A2 (zh) |
WO (1) | WO2009091493A2 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108027735A (zh) * | 2015-09-19 | 2018-05-11 | 微软技术许可有限责任公司 | 隐式程序次序 |
US11681531B2 (en) | 2015-09-19 | 2023-06-20 | Microsoft Technology Licensing, Llc | Generation and use of memory access instruction order encodings |
US11977891B2 (en) | 2015-09-19 | 2024-05-07 | Microsoft Technology Licensing, Llc | Implicit program order |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8793602B2 (en) | 2004-01-15 | 2014-07-29 | The Mathworks, Inc. | System and method for scheduling the execution of model components using model events |
US10652319B2 (en) * | 2015-12-16 | 2020-05-12 | Dell Products L.P. | Method and system for forming compute clusters using block chains |
US10452428B2 (en) * | 2016-03-14 | 2019-10-22 | International Business Machines Corporation | Application execution with optimized code for use profiles |
US10585648B2 (en) | 2016-06-01 | 2020-03-10 | The Mathworks, Inc. | Systems and methods for aggregating implicit and explicit event code of executable models |
CN106878528A (zh) * | 2017-01-23 | 2017-06-20 | 北京思特奇信息技术股份有限公司 | 一种基于区块链技术的骚扰来电短信拦截方法及系统 |
US10581621B2 (en) * | 2017-05-18 | 2020-03-03 | International Business Machines Corporation | Enhanced chaincode analytics provenance in a blockchain |
US10719970B2 (en) * | 2018-01-08 | 2020-07-21 | Apple Inc. | Low latency firmware command selection using a directed acyclic graph |
US11336455B2 (en) | 2019-09-25 | 2022-05-17 | International Business Machines Corporation | Consensus protocol for blockchain DAG structure |
US11221835B2 (en) * | 2020-02-10 | 2022-01-11 | International Business Machines Corporation | Determining when to perform and performing runtime binary slimming |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5212794A (en) * | 1990-06-01 | 1993-05-18 | Hewlett-Packard Company | Method for optimizing computer code to provide more efficient execution on computers having cache memories |
US20050044538A1 (en) * | 2003-08-18 | 2005-02-24 | Srinivas Mantripragada | Interprocedural computing code optimization method and system |
CN1591335A (zh) * | 2003-08-26 | 2005-03-09 | 微软公司 | 事务型处理过程的数据流分析 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5732273A (en) | 1995-08-11 | 1998-03-24 | Digital Equipment Corporation | System for monitoring compute system performance |
US6006033A (en) | 1994-08-15 | 1999-12-21 | International Business Machines Corporation | Method and system for reordering the instructions of a computer program to optimize its execution |
US5768592A (en) | 1994-09-27 | 1998-06-16 | Intel Corporation | Method and apparatus for managing profile data |
US5778232A (en) | 1996-07-03 | 1998-07-07 | Hewlett-Packard Company | Automatic compiler restructuring of COBOL programs into a proc per paragraph model |
US5999738A (en) * | 1996-11-27 | 1999-12-07 | Hewlett-Packard Company | Flexible scheduling of non-speculative instructions |
US5950009A (en) | 1997-03-10 | 1999-09-07 | International Business Machines Coporation | Method and apparatus for profile-based reordering of program portions in a computer program |
US6073230A (en) | 1997-06-11 | 2000-06-06 | Advanced Micro Devices, Inc. | Instruction fetch unit configured to provide sequential way prediction for sequential instruction fetches |
US5966541A (en) * | 1997-12-04 | 1999-10-12 | Incert Software Corporation | Test protection, and repair through binary-code augmentation |
US6481008B1 (en) | 1999-06-30 | 2002-11-12 | Microsoft Corporation | Instrumentation and optimization tools for heterogeneous programs |
US6976260B1 (en) * | 1999-09-24 | 2005-12-13 | International Business Machines Corporation | Method and apparatus for serializing a message queue in a multiprocessing environment |
US7100157B2 (en) * | 2002-09-24 | 2006-08-29 | Intel Corporation | Methods and apparatus to avoid dynamic micro-architectural penalties in an in-order processor |
US7155708B2 (en) * | 2002-10-31 | 2006-12-26 | Src Computers, Inc. | Debugging and performance profiling using control-dataflow graph representations with reconfigurable hardware emulation |
US7386838B2 (en) | 2003-04-03 | 2008-06-10 | International Business Machines Corporation | Method and apparatus for obtaining profile data for use in optimizing computer programming code |
US7661095B2 (en) | 2005-04-14 | 2010-02-09 | Hewlett-Packard Development Company, L.P. | System and method to build a callgraph for functions with multiple entry points |
US7792666B2 (en) * | 2006-05-03 | 2010-09-07 | Sony Computer Entertainment Inc. | Translation block invalidation prehints in emulation of a target system on a host system |
-
2008
- 2008-01-17 US US12/016,099 patent/US8677336B2/en active Active
- 2008-12-29 CN CN200880125324.0A patent/CN101918917B/zh active Active
- 2008-12-29 BR BRPI0821772-6A patent/BRPI0821772A2/pt not_active IP Right Cessation
- 2008-12-29 WO PCT/US2008/088483 patent/WO2009091493A2/en active Application Filing
- 2008-12-29 EP EP08870630A patent/EP2250551A4/en not_active Withdrawn
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5212794A (en) * | 1990-06-01 | 1993-05-18 | Hewlett-Packard Company | Method for optimizing computer code to provide more efficient execution on computers having cache memories |
US20050044538A1 (en) * | 2003-08-18 | 2005-02-24 | Srinivas Mantripragada | Interprocedural computing code optimization method and system |
CN1591335A (zh) * | 2003-08-26 | 2005-03-09 | 微软公司 | 事务型处理过程的数据流分析 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108027735A (zh) * | 2015-09-19 | 2018-05-11 | 微软技术许可有限责任公司 | 隐式程序次序 |
CN108027735B (zh) * | 2015-09-19 | 2021-08-27 | 微软技术许可有限责任公司 | 用于操作处理器的装置、方法和计算机可读存储介质 |
US11681531B2 (en) | 2015-09-19 | 2023-06-20 | Microsoft Technology Licensing, Llc | Generation and use of memory access instruction order encodings |
US11977891B2 (en) | 2015-09-19 | 2024-05-07 | Microsoft Technology Licensing, Llc | Implicit program order |
Also Published As
Publication number | Publication date |
---|---|
EP2250551A4 (en) | 2012-06-13 |
EP2250551A2 (en) | 2010-11-17 |
CN101918917B (zh) | 2017-08-08 |
WO2009091493A3 (en) | 2009-10-08 |
US20090187887A1 (en) | 2009-07-23 |
BRPI0821772A2 (pt) | 2015-06-16 |
WO2009091493A2 (en) | 2009-07-23 |
US8677336B2 (en) | 2014-03-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101918917A (zh) | 基于块计数的过程布局和拆分 | |
Baker et al. | Principles of sequencing and scheduling | |
Schultz-Møller et al. | Distributed complex event processing with query rewriting | |
CN109902105B (zh) | 用于微服务架构的数据查询系统、方法、设备及存储介质 | |
Li et al. | A heuristic-search genetic algorithm for multi-stage hybrid flow shop scheduling with single processing machines and batch processing machines | |
Chakraborty et al. | FOGSAA: Fast optimal global sequence alignment algorithm | |
US8745607B2 (en) | Reducing branch misprediction impact in nested loop code | |
JP2004054680A (ja) | 並列効率計算方法 | |
CN102436505A (zh) | 导出文档相似性索引 | |
CN1956454B (zh) | 基于加权成本捆绑并发送工作单元到服务器的方法和系统 | |
Grötschel et al. | Combinatorial online optimization in real time | |
CN109871311A (zh) | 一种推荐测试用例的方法和装置 | |
CN111221575A (zh) | 一种乱序高性能处理器的寄存器重命名方法及系统 | |
Wang et al. | An adaptive data placement architecture in multicloud environments | |
Deitrich et al. | Speculative hedge: Regulating compile-time speculation against profile variations | |
Wu et al. | Dynamic parcel pick-up routing problem with prioritized customers and constrained capacity via lower-bound-based rollout approach | |
CN108985805A (zh) | 一种选择性执行推送任务的方法和装置 | |
CN111159355A (zh) | 客户投诉单处理方法及装置 | |
CN102289364A (zh) | 实现具有串行语义的并行循环 | |
Chiang et al. | A bi-objective metaheuristic approach to unpaced synchronous production line-balancing problems | |
CN116109348A (zh) | 优惠信息推送方法、系统、设备及存储介质 | |
CN113094602B (zh) | 酒店推荐方法、系统、设备及介质 | |
Dick et al. | COWLS: Hardware-software cosynthesis of wireless low-power distributed embedded client-server systems | |
CN111124678A (zh) | 内存调度处理方法及装置 | |
AU2018206850A1 (en) | Computer implemented technologies configured to enable efficient processing of data in a transportation network based on generation of directed graph data derived from transportation timetable data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
ASS | Succession or assignment of patent right |
Owner name: MICROSOFT TECHNOLOGY LICENSING LLC Free format text: FORMER OWNER: MICROSOFT CORP. Effective date: 20150727 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20150727 Address after: Washington State Applicant after: Micro soft technique license Co., Ltd Address before: Washington State Applicant before: Microsoft Corp. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |