CN113260976A - 用于在编译源代码中调度指令技术 - Google Patents
用于在编译源代码中调度指令技术 Download PDFInfo
- Publication number
- CN113260976A CN113260976A CN201980087208.2A CN201980087208A CN113260976A CN 113260976 A CN113260976 A CN 113260976A CN 201980087208 A CN201980087208 A CN 201980087208A CN 113260976 A CN113260976 A CN 113260976A
- Authority
- CN
- China
- Prior art keywords
- optimizations
- heuristic
- basic block
- instructions
- basic
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims description 28
- 238000005457 optimization Methods 0.000 claims abstract description 137
- 230000006870 function Effects 0.000 description 14
- 238000004891 communication Methods 0.000 description 8
- 238000011161 development Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 8
- 230000003287 optical effect Effects 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification 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/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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/01—Dynamic search techniques; Heuristics; Dynamic trees; Branch-and-bound
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本文描述的示例通常涉及从源代码的列表生成用于编译源代码成中间语言的多个基本块;针对多个基本块的第一基本块,确定与将第一多个优化应用于第一基本块有关的第一启发法;针对多个基本块的第二基本块,确定与将第二多个优化应用于第二基本块有关的第二启发法;并基于第一启发法和第二启发法,将第一多个优化中的一个优化应用于第一基本块以调度针对第一基本块的第一指令,将第二多个优化的一个优化应用于第二基本块以调度针对第二基本块的第二指令。
Description
背景技术
如今,计算设备的使用正变得日益普遍。计算设备的范围从标准台式计算机到游戏系统到可穿戴计算技术等。程序语言可以被用于开发用于计算设备的软件,并通常提供用于编写源代码指令的环境。通过使用编译器,源代码指令可以被编译为可以由计算设备操作系统或用于基于源代码执行指令的处理器理解的中间语言。在编译源代码时,编译器可以将代表源代码的中间语言指令分组为指令基本块,其被顺序执行且没有分支。当编译器遇到源代码中的分支语句时(诸如,循环、条件子句、函数或过程调用等),编译器可以生成针对该分支的另一指令基本块,并依此类推,直到所有源代码被编译。针对程序的指令基本块可以随后在中间语言中被调度以生成经编译的软件代码,其可以在计算设备操作系统或处理器上执行。
发明内容
以下呈现了一个或多个示例的简化概述,以提供这些示例的基本理解。本发明内容不是所有预期示例的广泛概述,也不旨在标识所有示例的关键或重要元素,也不旨在描绘任何或所有示例的范围。其唯一目的是以简化形式呈现一个或多个示例的一些概念,以作为后续呈现的具体实施方式的序言。
在示例中,提供了一种用于在编译源代码中调度指令的计算机实施方法。该方法包括从源代码列表生成用于编译成中间语言的多个基本块;针对多个基本块的第一基本块,确定与将第一多个优化应用于第一基本块有关的第一启发法(heuristic);针对多个基本块的第二基本块,确定与将第二多个优化应用于第二基本块有关的第二启发法;基于第一启发法和第二启发法,将第一多个优化中的一个优化应用于第一基本块以调度针对第一基本块的第一指令,并且将第二多个优化中的一个优化应用于第二基本块以调度针对第二基本块的第二指令。
在另一示例中,提供了一种用于在编译源代码中调度指令的计算设备。装置包括存储一个或多个用于编译源代码的参数或指令的存储器,以及至少一个耦合到存储器的处理器。该至少一个处理器被配置为从源代码列表生成用于编译成中间语言的多个基本块;针对多个基本块的第一基本块,确定与将第一多个优化应用于第一基本块有关的第一启发法;针对多个基本块的第二基本块,确定与将第二多个优化应用于第二基本块有关的第二启发法;并基于第一启发法和第二启发法,将第一多个优化中的一个优化应用于第一基本块以调度针对第一基本块的第一指令,并且将第二多个优化中的一个优化应用于第二基本块以调度针对第二基本块的第二指令。
在另一示例中,提供了一种非暂态计算机可读介质,其包括可由一个或多个处理器执行的用于在编译源代码中调度指令的代码。该代码包括:用于从源代码列表生成用于编译成中间语言的多个基本块的代码;用于针对多个基本块的第一基本块,确定与将第一多个优化应用于第一基本块有关的第一启发法的代码;用于针对多个基本块的第二基本块,确定与将第二多个优化应用于第二基本块有关的第二启发法的代码;用于基于第一启发法和第二启发法,将第一多个优化中的一个优化应用于第一基本块以调度针对第一基本块的第一指令,并且将第二多个优化中的一个优化应用于第二基本块以调度针对第二基本块的第二指令的代码。
为了实现上述和相关目的,一个或多个实例包括在下文中充分描述的并且在权利要求书中被特别指出的特征。以下描述和附图详细阐述了一个或多个示例的一些说明性特征。然而,这些特征仅指示可以采用各种示例的原理的各种方式中的一些,并且本描述旨在包括所有这样的示例及其等同。
附图说明
图1是根据本文所描述的示例的用于编译源代码的计算设备的示例的示意图。
图2是根据本文所描述的示例的用于优化源代码编译的选择指令的示例的流程图。
图3是根据本文所描述的示例的用于优化中间语言中的基本块的过程的流程图。
图4是用于执行本文所描述的功能的计算设备的示例的示意图。
具体实施方式
下面结合附图阐述的详细描述旨在作为对各种配置的描述并且不旨在表示可以实践本文描述的概念的唯一配置。详细描述包括用于提供对各种概念的透彻理解的特定细节。然而,对于本领域技术人员明显的是可以在没有这些具体细节的情况下实践这些概念。在一些情况下,公知组件以框图形式示出以避免混淆这些概念。
本文所描述的是与在编译源代码中优化指令调度有关的各种示例。在一个示例中,编译器可以在中间语言中生成指令的多个基本块,其中每个基本块可以包括与没有分支的源代码指令序列相对应的中间语言指令的集合。对于每个中间语言指令的基本块,编译器可确定一组启发法以调度基本块内的相应指令,该组启发法与可以针对给定基本块而被执行的多个可能优化中的每一个可能优化相对应。例如,该组启发法可以对应于基于针对基本块的给定优化的指令调度的估计性能度量。基于该组启发法,编译器可以调度每个基本块中指令序列。
一些编译器可以提供通过指令调度实现的优化,然而给定的优化被应用于针对软件应用的指令的所有基本块。根据本文所描述的示例,可以针对软件应用的多个基本块中的每一个基本块评估和应用优化,以获得更优化的软件应用。例如,利用针对多个基本块中的每一个基本块所确定的启发法,针对所有基本块(或至少多个基本块的子集)的启发法可以一起被考虑(例如,添加),以确定启发法的组合,来得到最期望的整体启发法,这可以用于整体软件应用的给定优化或其他。针对每个基本块确定的启发法的对应优化可以被应用于调度基本块的指令序列,以在编译针对软件应用的源代码中的整体优化。
现转向图1至图4,参考可执行本文所描述的动作和操作的一个或多个组件和一个或多个方法示例被描绘出,其中虚线中的组件和/或动作/操作是可选的。虽然图2所描述的操作以特别的顺序被呈现和/或由示例组件执行,在一些示例中,取决于实施方式,这些动作排列和执行动作的组件可以是变化的。此外,在一些示例中,以下动作、功能、和/或所描述的组件中的一项或多项可以被专门编程的处理器、执行专门编程的软件或计算机可读介质的处理器、或者通过能够执行所描述的动作或功能的硬件组件和/或软件组件的任何其他组合执行。
图1是根据本文所描述的各方面的用于在编译源代码中调度指令的示例计算设备100和/相关组件的示例的示意图。例如,计算设备100可以包括或可以以其他方式与处理器104和/或存储器106耦合,其中如本文所描述的,处理器104和/或存储器106可以被配置为执行或存储与将交互数据与媒体内容相关联有关的指令或其他参数。例如,处理器104和存储器106可以是通过总线通信耦合的独立组件(诸如,在主板或计算设备的其他部分上,在集成电路(如片上系统SOC)上等),彼此集成的组件(诸如,处理器104可以包括存储器106以作为板载组件101)等。存储器104可以存储指令、参数、数据结构等,以供处理器104使用/执行以执行本文所描述的功能。
在示例中,计算设备100可以执行操作系统108(诸如,经由处理器104和/或存储器106)以提供用于执行一个或多个应用的环境,诸如,用于提供支持源代码开发的接口的可选的开发环境110,用于编译使用开发环境110生成或以其他方式在计算设备100处接收的源代码的编译器112,和/或从基于源代码编译的中间语言生成的可选的应用114,其中该应用可以经由操作系统108执行和/或经由其他操作系统(未显示)在其他计算设备上执行。
编译器112可以包括基本块生成组件120,用于从源代码列表生成中间语言指令的基本块。例如,源代码可以包括根据指定语法以编程语言编写的文本,其中编译器112可以解释源代码并且生成由处理器104和/或操作系统108(或另一设备的处理器104和/或操作系统108,其中编译器112可以在计算设备上执行以生成针对其他类型设备的软件应用)理解的对应的机器语言。因此,基本块生成组件120可以使用可以处理源代码的编程语言的解释器来从源代码生成机器语言指令的基本块。
如上所述,每个基本块可以是在没有分支的情况下生成的机器语言指令的集合(诸如,与分支内源代码相对应的机器语言)。没有分支的源代码可以包括不引用或跳转到不同源代码位置的源代码的顺序列表,例如循环、条件子句、函数或过程调用内的源代码等。针对每个分支,基本块生成组件129可以生成新的机器语言指令基本块直到下一分支,并依此类推,直到源代码编译成机器语言指令的多个基本块。机器语言可以之后被用于创造应用114以在处理器104和/或操作系统108(或如上所述的另一处理器14和/或操作系统108)上执行。
编译器112还包括启发法确定组件122,用于确定与将优化应用于从源代码中生成的每个基本块相关联的启发法。例如,启发法确定组件122可以将启发法确定为与将多种可能优化中的一个优化应用于基本块以调度对应的机器语言指令有关的一个或多个性能度量。编译器112还可以包括指令调度组件124,用于基于确定给定基本块的哪些优化得到针对所有基本块(或至少多个基本块的子集)的最佳优化来调度基本块内的机器语言指令(诸如,调度基本块中的指令序列)。
图2是用于在编译源代码中调度指令的方法200的示例流程图。例如,方法200可以由计算设备100执行,并且因此参考图1被描述为用于实施方法200的环境的非限制性示例。
在方法200中,在动作202处,可以从源代码列表生成用于编译成中间语言的多个基本块。在示例中,基本块生成组件120(例如结合处理器104、存储器106、操作系统108、编译器112等)可以从源代码列表生成用于编译成中间语言的多个基本块。例如,源代码列表可以作为应用开发者使用开发环境110的接口编写的源代码而从开发环境110被接收。在另一示例中,可以从另一应用或计算设备接收源代码。源代码可以包括具有按编程语言的语法的命令列表的一个或多个文件。编译器112可以获得该列表并可以使用解释器解析源代码的列表。如上所述,基本块生成组件120可以通过将编程语言语法转换为机器语言指令,而从源代码生成一个或多个基本块,并且可以生成每个基本块以作为与源代码对应的指令序列,直到分支被到达,此时基本块生成组件120可以生成另一基本块,并依此类推。
在方法200中,在204处,可以针对第一基本块确定与将第一多个优化应用于第一基本块有关的第一启发法。在示例中,启发法确定组件122(例如,结合处理器104、存储器106、操作系统108、编译器112等)可以针对第一基本块确定与将第一多个优化应用于第一基本块有关的第一启发法。例如,启发法确定组件122可以确定第一启发法以包括针对第一基本块的每个可能优化的至少一个启发法。例如,优化可以涉及减少寄存器压力(例如,减少执行与基本块相对应的机器语言所需的寄存器的数量),减少与执行基本块的基本语言相关联的延迟,减少针对基本块的机器语言的大小等。在该示例中,启发法可以相应地包括针对每个可能优化的寄存器压力度量(例如,使用寄存器的数量或百分比)、针对每个可能优化的延迟度量、针对每个可能优化的代码大小等。在示例中,如本文进一步描述地,在这方面,编译器112可以最终在调度与源代码对应的机器语言指令应用不同优化以以实现所选择的优化。
在方法200中,在动作206处,可以针对第二基本块确定与将第二多个优化应用于第二基本块有关的第二启发法。在示例中,启发法确定组件122(例如,结合处理器104、存储器106、操作系统108、编译器112等)可以针对第二基本块确定与将第二多个优化应用于第二基本块有关的第二启发法。例如,启发法确定组件122可以确定第二启发法以包括针对第二基本块每个可能优化的至少一个启发法。例如,启发法确定组件122可以基于可能优化的相同集合或可能优化的不同集合确定第一启发法和第二启发法。
此外,试探确定组件122可以确定针对源代码列表的附加基本块和/或所有基本块的启发法。因此,在示例中,试探确定组件122可以生成基本块和可能优化的表,其中表中的值可以对应于表中每个基本块的每个可能优化的启发法。在该示例中,多个启发法可以被一起评估以确定将哪个优化应用于每个基本块以实现机器语言的特定优化。
在方法200,在208处,基于第一启发法和第二启发法,第一多个优化中的一个优化可以被应用于第一基本块以调度针对第一基本块的第一指令,并且第二多个优化中的一个优化可以被应用于第二基本块以调度针对第二基本块的第二指令。在示例中,指令调度组件124(例如,结合处理器104、存储器106、操作系统108、编译器112等)可以基于第一启发法和第二启发法来将第一多个优化中的一个优化应用于第一基本块以调度针对第一基本块的第一指令,并且将第二多个优化中的一个优化应用于第二基本块以调度针对第二基本块的第二指令。如上所述,在此方面,调度指令可以指调度在每个给定的基本块内要被执行的指令序列,其中调度指令的序列被调度以实现对应的优化。因此,例如,指令调度组件124可以通过生成实现第一多个优化中的一个优化的第一指令的序列来调度第一指令。此外,例如,指令调度指令组件124可以通过生成实现第二多个优化中的一个优化的第二指令的序列来调度第二指令。
在一个示例中,指令调度组件124可以一起分析第一启发法和第二启发法(例如,和/或针对其他基本块的其他启发法)以确定要应用于每个基本块的优化的组合。在一个特定示例中,指令调度124可以针对每个对应优化来对针对每个基本块的启发法求和,以确定哪个优化针对哪个特定基本块获得针对所有基本块的最期望的启发法(例如最小寄存器压力、最小延迟、最小代码大小等)。例如,应用于每个基本块的不同优化可能获得源代码的针对一个或多个目的的更好整体优化。
在示例中,在在动作208处将优化应用于基本块中,可选地在动作210处,第一多个优化中的该个优化可以被选择为与第二多个优化中的该个优化不同的优化。在示例中,指令调度组件124(例如,结合处理器104、存储器106、操作系统108、编译器112等)可以选择第一多个优化中的该个优化为与第二多个优化中的该个优化不同的优化。如上所述,例如,指令调度组件124可以将与减少寄存器压力有关的第一优化应用于第一基本块,并将与减少延迟有关的第二优化应用于第二基本块以实现针对源代码列表的整体优化。
在另一示例中,在在动作208处将优化应用于基本块中,可选地在动作212处,可以基于针对源代码列表所确定的优化目标来选择第一多个优化中的该个优化和第二多个优化中的该个优化。在示例中,指令调度组件124(如结合处理器104、存储器106、操作系统108、编译器112等)可以基于针对源代码列表所确定的优化目标来选择第一多个优化中的该个优化和第二多个优化中的该个优化。如上所述,针对源代码的整体优化目标可能不同于针对给定基本块所选择的目标,并且针对每个基本块选择不同的优化可以允许更好实现总体目标。因此指令调度组件124可以确定每个基本块的哪个优化的组合允许实现整体优化目标,并且可以相应地选择用于生成或重新排序针对基本块的调度指令的优化。
在方法200中,可选地在动作214处,中间语言可以被生成,其包括针对第一基本块的第一指令和针对第二基本块的第二指令。在示例中,编译器112(如结合处理器104、存储器106、操作系统108、编译器112等)可以生成中间语言,其包括针对第一基本块的第一指令和针对第二基本块的第二指令。在此方面,指令调度组件124可以将优化应用于每个基本块以生成调度指令序列以实现优化,并且编译器112可以将基本块组合到中间语言以用于执行对应的软件应用。
图3图示了根据本文所描述的方面,将源代码302编译成经优化的中间语言308中的流程图的示例。在示例中,源代码302可以被编译为初始中间语言304,如上所述,包括多个基本块(如基本块1、基本块2、…、基本块n)。如本文所述,多个启发法可以包括用于将可能的优化应用于每个基本块。如图所示,启发法可以包括针对基本块1的优化1的启发法、针对基本块1的优化2的启发法、……针对基本块1的优化m的启发法、……针对基本块1的优化m的启发法……针对基本块n的优化1的启发法、针对基本块n的优化2的启发法……针对基本块n的优化m的启发法,基本上对于n和m的任何值。
通过确定每个基本块的每个优化的所有启发法,可以确定应用于基本块的优化的组合(例如,针对每个基本块的一次优化),并且如在一个示例中所描述的,该确定可以基于针对软件应用的整体优化目标。在一个示例中,可以对启发法求和,并且可以确定求和的优化度量的哪个组合获得针对n个基本块的整个集合的最低期望优化度量。然后可以将这些优化应用于对应的基本块以生成经优化的中间语言308。在所显示的示例中,经优化的中间语言308可以包括应用了优化1的基本块1、应用了优化m的基本块2、……应用了优化1的基本块n。
图4示出了计算设备100的示例,其包括图1所示的附加可选的组件细节。在一个示例中,计算设备100可以包括用于实施与一个或多个本文所述的组件和功能相关的处理功能的处理器104。处理器104可以包括单组或多组处理器或多核处理器。此外,处理器104可以被实施为集成处理系统和/或分布式处理系统。
计算设备100还可以包括存储器106,例如用于存储应用程序的本地版本(该应用程序被处理器104执行)、相关指令、参数等。存储器106可以包括可由计算机使用的存储器类型,如随机存取存储器(RAM)、只读存储器(ROM)、磁带、磁盘、光盘、易失性存储器、非易失性存储器及其任意组合。此外,处理器104和存储器106可以包括执行在处理器104上执行的操作系统、一个或多个应用程序,例如开发环境110、编译器112、应用程序114和/或其组件,如本文所述,和/或其它计算设备100的组件。
进一步地,计算设备100可以包括通信组件402,其利用本文所述的硬件、软件、服务提供与一个或多个其他设备、参与方、实体等的建立和维护通信。通信组件402可以承载计算设备100组件之间以及计算设备100和外部设备间的通信,例如位于跨通信网络的设备和/或串行或本地连接到计算设备100的设备。例如,通信组件402可以包括一个或多个总线,并且还包括与无线或有线传输器和接收器关联的传输链组件和接收链组件,相应地可操作用于与外部设备接口。例如,通信组件402可在开发环境110、编译器112、在另一设备(或同一设备)上执行的应用程序114等之间运载通信,如本文的各种示例中所述。
附加地,计算设备100可以包括数据存储404,其可以是硬件和/或软件的任何合适的组合,其提供的信息、数据库和结合本文所描述的示例采用的程序的大容量存储。例如,数据存储404可以是或可以包括用于当前未被处理器104执行的应用和/或相关参数的数据储存库。此外,数据存储404可以是用于操作系统、应用的数据储存库,例如操作环境110、编译器112、应用114、和/或其中的组件等,在处理器104上执行,和/或计算设备100的一个或多个其他组件。
计算设备100也可以包括用户接口组件406,其可操作以从计算设备100的用户接收输入,并且进一步操作以生成输出以呈现给用户(如经由显示接口到显示设备100)。用户接口组件406可以包括一个或多个输入设备,包括但不限于键盘、数字键盘、鼠标、触敏显示器、导航键、功能键、麦克风、语音识别组件、手势识别组件、深度传感器、注视追踪传感器、能够接收来自用户的输入的任何其他装置、或其任何组合。此外,用户接口组件406可以包括一个或多个输出设备,包括但不限于显示界面、扬声器、触觉反馈装置、打印机、能够向用户呈现输出的任何其他装置、或其任何组合。
计算设备100还可以包括用于提供一个或多个用于开发应用源代码的接口的开发环境110、用于将源代码编译为机器代码以在计算设备100或其他设备上的编译器112、和/或应用114,该应用可以为经编译的源代码的软件表示,其可以在计算设备100上执行或发送给另一设备或媒体以供其中执行。
作为示例,元素、或元素的任何部分、或元素的任何组合可以由包括一个或多个处理器的“处理系统”来实施。处理器的示例包括微处理器、微控制器、数字信号处理器(DSP)、现场可编程门阵列(FPGA)、可编程逻辑装置(PLD)、状态机、门控逻辑、离散硬件电路,以及其他合适被配置为执行本发明所公开各种功能的硬件。在处理系统中一个或多个处理器可执行软件。软件应被广义地解释为意味着指令、指令集、代码、代码段、程序代码、程序、子程序、软件模块、应用、软件应用、软件包、例程、子例程、对象、可执行代码、执行线程、过程、函数等,无论是指软件、固件、中间件、微代码、硬件描述语言,或其它。
相应地,在一个或多个示例中,所描述的功能的一个或多个可以被实施在硬件、软件、固件、或其中任何组合。如果被实施在软件上,功能可被存储或编码为在计算机可读介质上的一个或多个指令或代码。计算机可读介质包括计算机存储介质。存储介质可以是由计算机访问的任何可用介质。作为示例而非限制,计算机可读媒体可以包括RAM、ROM、EEPROM、CD-ROM或其它光盘存储、磁盘存储或其它磁存储设备,或任何其他可用于以指令或数据结构的形式承载或存储所需程序代码且可由计算机访问的任何其他介质。本文所用的光盘和磁盘包括压缩盘(CD)、激光盘、光盘、数字多功能盘(DVD盘)和软盘,其中光盘通常磁性地复制数据,而盘使用激光光学地复制数据。上述组合也应被包括在计算机可读介质的范围内。
上述提供的描述以使本领域技术人员可以实施本文实施各种示例。对这些示例的各种修改对本领技术人员是明显的,且本文中所定义的一般原理可应用于其它示例。因此,权利要求书并不旨在限定于本文所示的示例,而是符合与语言权利要求一致的全部范围,其中以单数形式提及的元素,除非另有说明,并不旨在表示“一个且仅一个”,而是表示“一个或一个以上”。除非另有说明,否则术语“一些”是指一个或多个。本领域普通技术人员已知的或稍后将知道的本文描述的各种示例的元素的所有结构和功能等同物旨在被权利要求涵盖。此外,无论权利要求中是否明确引用了此类公开,本文所公开的任何内容均不旨在专供公众使用。除非使用短语“用于……的装置”明确叙述该元素,否则任何权利要求元素均不得被解释为方法加功能。
Claims (15)
1.一种用于在编译源代码中调度指令的计算机实施的方法,包括:
从源代码列表生成用于编译为中间语言的多个基本块;
针对所述多个基本块的第一基本块,确定与将第一多个优化应用于所述第一基本块有关的第一启发法;
针对所述多个基本块的第二基本块,确定与将第二多个优化应用于所述第二基本块有关的第二启发法;以及
基于所述第一启发法和所述第二启发法,将所述第一多个优化中的一个优化应用于所述第一基本块以调度针对所述第一基本块的第一指令,并且将所述第二多个优化中的一个优化应用于所述第二基本块以调度针对所述第二基本块的第二指令,其中应用包括:
选择针对所述第一基本块的所述第一多个优化中的所述一个优化,以实现基于所述第一启发法和所述第二启发法的整体优化;以及
选择针对所述第二基本块的所述第二多个优化中的所述一个优化,以实现基于所述第一启发法和所述第二启发法的所述整体优化。
2.根据权利要求1所述的计算机实施的方法,其中所述第一多个优化与所述第二多个优化相同。
3.根据权利要求1所述的计算机实施的方法,其中所述第一多个优化包括以下至少一项:最小化寄存器压力、最小化程序大小、或最小化存储器延迟。
4.根据权利要求1所述的计算机实施的方法,其中所述第一启发法各自对应于针对所述第一多个优化中的一个给定优化的估计优化度量,并且其中所述第二启发法各自对应于针对所述第二多个优化中的一个给定优化的估计优化度量。
5.根据权利要求1所述的计算机实施的方法,其中所述应用包括:将所述第一多个优化中的所述一个优化选择为与所述第二多个优化中的所述一个优化不同的优化。
6.根据权利要求1所述的计算机实施的方法,其中所述整体优化针对所述源代码列表的至少一部分而被确定。
7.根据权利要求1所述的计算机实施的方法,还包括:生成包括针对所述第一基本块的所述第一指令和针对所述第二基本块的所述第二指令的所述中间语言。
8.一种用于在编译源代码中调度指令的计算设备,包括:
存储器,存储用于编译源代码的一个或多个参数或指令;以及
被耦合到所述存储器的至少一个处理器,其中所述至少一个处理器被配置为:
从源代码列表生成用于编译为中间语言的多个基本块;
针对所述多个基本块的第一基本块,确定与将第一多个优化应用于所述第一基本块有关的第一启发法;
针对所述多个基本块的第二基本块,确定与将第二多个优化应用于所述第二基本块有关的第二启发法;以及
基于所述第一启发法和所述第二启发法,将所述第一多个优化中的一个优化应用于所述第一基本块以调度针对所述第一基本块的第一指令,并且将所述第二多个优化中的一个优化应用于所述第二基本块以调度针对所述第二基本块的第二指令,其中应用包括:
选择针对所述第一基本块的所述第一多个优化中的所述一个优化,以实现基于所述第一启发法和所述第二启发法的整体优化;以及
选择针对所述第二基本块的所述第二多个优化中的所述一个优化,以实现基于所述第一启发法和所述第二启发法的所述整体优化。
9.根据权利要求8所述的计算设备,其中所述第一多个优化与所述第二多个优化相同。
10.根据权利要求8所述的计算设备,其中所述第一多个优化包括以下至少一项:最小化寄存器压力、最小化程序大小、或最小化存储器延迟。
11.根据权利要求8所述的计算设备,其中所述第一启发法各自对应于针对所述第一多个优化中的给定优化的估计优化度量,并且其中所述第二启发法各自对应于针对所述第二多个优化中的给定优化的估计优化度量。
12.根据权利要求8所述的计算设备,其中所述至少一个处理器被配置为:将所述第一多个优化中的所述一个优化选择为与所述第二多个优化中的所述一个优化不同的优化。
13.根据权利要求8所述的计算设备,其中所述至少一个处理器还被配置为:针对所述源代码列表的至少一部分来确定所述整体优化。
14.根据权利要求8所述的计算设备,其中所述至少一个处理器还被配置为:生成包括针对所述第一基本块的所述第一指令和针对所述第二基本块的所述第二指令的所述中间语言。
15.一种计算机可读介质,包括由一个或多个处理器可执行的代码,所述代码用于执行根据权利要求1-7所述的计算机实施的方法中的一项或多项方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/237,012 | 2018-12-31 | ||
US16/237,012 US10949209B2 (en) | 2018-12-31 | 2018-12-31 | Techniques for scheduling instructions in compiling source code |
PCT/US2019/066678 WO2020142195A1 (en) | 2018-12-31 | 2019-12-17 | Techniques for scheduling instructions in compiling source code |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113260976A true CN113260976A (zh) | 2021-08-13 |
Family
ID=69182617
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980087208.2A Pending CN113260976A (zh) | 2018-12-31 | 2019-12-17 | 用于在编译源代码中调度指令技术 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10949209B2 (zh) |
EP (1) | EP3906470B1 (zh) |
CN (1) | CN113260976A (zh) |
WO (1) | WO2020142195A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11544642B2 (en) * | 2019-09-24 | 2023-01-03 | Shopify Inc. | Supplier recommendation engine |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105164641A (zh) * | 2012-12-31 | 2015-12-16 | 微软技术许可有限责任公司 | 扩展开发环境 |
CN105843660A (zh) * | 2016-03-21 | 2016-08-10 | 同济大学 | 一种编译器的代码优化调度方法 |
US20170123773A1 (en) * | 2015-11-04 | 2017-05-04 | International Business Machines Corporation | Optimized compilation using an auto-tuned compiler as a service |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5778233A (en) * | 1996-10-11 | 1998-07-07 | International Business Machines Corporation | Method and apparatus for enabling global compiler optimizations in the presence of exception handlers within a computer program |
US10198259B2 (en) * | 2016-06-23 | 2019-02-05 | Advanced Micro Devices, Inc. | System and method for scheduling instructions in a multithread SIMD architecture with a fixed number of registers |
-
2018
- 2018-12-31 US US16/237,012 patent/US10949209B2/en active Active
-
2019
- 2019-12-17 EP EP19839485.0A patent/EP3906470B1/en active Active
- 2019-12-17 WO PCT/US2019/066678 patent/WO2020142195A1/en unknown
- 2019-12-17 CN CN201980087208.2A patent/CN113260976A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105164641A (zh) * | 2012-12-31 | 2015-12-16 | 微软技术许可有限责任公司 | 扩展开发环境 |
US20170123773A1 (en) * | 2015-11-04 | 2017-05-04 | International Business Machines Corporation | Optimized compilation using an auto-tuned compiler as a service |
CN105843660A (zh) * | 2016-03-21 | 2016-08-10 | 同济大学 | 一种编译器的代码优化调度方法 |
Non-Patent Citations (2)
Title |
---|
TYREL RUSSELL等: "Learning Heuristics for the Superblock Instruction Scheduling Problem", IEEE TRANSACTIONS ON KNOWLEDGE AND DATA ENGINEERING, vol. 21, no. 10, 31 October 2009 (2009-10-31), pages 1489 - 1501, XP011267142, DOI: 10.1109/TKDE.2009.17 * |
敖琪等: "基于硬件cache锁机制的Java虚拟机即时编译器优化", 计算机研究与发展, 29 February 2012 (2012-02-29), pages 185 - 189 * |
Also Published As
Publication number | Publication date |
---|---|
US20200210194A1 (en) | 2020-07-02 |
US10949209B2 (en) | 2021-03-16 |
EP3906470B1 (en) | 2023-11-01 |
EP3906470A1 (en) | 2021-11-10 |
WO2020142195A1 (en) | 2020-07-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10409574B2 (en) | Incremental whole program compilation of code | |
US10942716B1 (en) | Dynamic computational acceleration using a heterogeneous hardware infrastructure | |
EP3161642B1 (en) | Techniques for edit-and-continue and enhanced optimized debugging on optimized code | |
US8935683B2 (en) | Inline function linking | |
US10540262B2 (en) | Using edit and continue to dynamically set and unset optimizations in source code while debugging | |
US9081586B2 (en) | Systems and methods for customizing optimization/transformation/ processing strategies | |
US8549502B2 (en) | Compiler with user-defined type inference rules | |
CN109313547B (zh) | 用于cpu利用率和代码重构的查询优化器 | |
JPH1097430A (ja) | 最適化のためにアセンブリコードルーチンをソースコードルーチンに挿入する方法およびそのシステム | |
EP2706459B1 (en) | Apparatus and method for validating a compiler for a reconfigurable processor | |
CN110058861B (zh) | 源码处理方法及装置、存储介质、电子设备 | |
KR20170057264A (ko) | 멀티 컨텍스트 지능형 지원 기능을 갖는 코드 개발 툴 | |
KR20170014613A (ko) | 전자 장치, 컴파일링 방법 및 컴퓨터 판독가능 기록매체 | |
US9141356B2 (en) | Process for generating dynamic type | |
CN113260976A (zh) | 用于在编译源代码中调度指令技术 | |
US9135027B1 (en) | Code generation and execution for dynamic programming languages | |
ES2908651T3 (es) | Instrucciones reducidas para generar direcciones de variables globales | |
JP7410269B2 (ja) | テスト・ベクタを使用した高水準コンストラクトの最適化の自動検証 | |
EP3688572B1 (en) | Interactive code optimizer | |
CN107562430B (zh) | 一种针对移动π演算语言的文件处理功能的编译方法 | |
US20050050517A1 (en) | Method, apparatus and computer program for executing a program |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |