CN116830080A - 经合并的机器级中间表示优化 - Google Patents
经合并的机器级中间表示优化 Download PDFInfo
- Publication number
- CN116830080A CN116830080A CN202180089654.4A CN202180089654A CN116830080A CN 116830080 A CN116830080 A CN 116830080A CN 202180089654 A CN202180089654 A CN 202180089654A CN 116830080 A CN116830080 A CN 116830080A
- Authority
- CN
- China
- Prior art keywords
- machine
- level
- code
- intermediate representation
- file
- 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
- 238000005457 optimization Methods 0.000 title claims abstract description 84
- 238000000034 method Methods 0.000 claims abstract description 75
- 230000008569 process Effects 0.000 claims abstract description 19
- 238000012545 processing Methods 0.000 claims description 13
- 230000003068 static effect Effects 0.000 claims description 7
- 230000008901 benefit Effects 0.000 description 25
- 238000004891 communication Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 8
- 230000000007 visual effect Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 2
- 238000005206 flow analysis Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 101000822695 Clostridium perfringens (strain 13 / Type A) Small, acid-soluble spore protein C1 Proteins 0.000 description 1
- 101000655262 Clostridium perfringens (strain 13 / Type A) Small, acid-soluble spore protein C2 Proteins 0.000 description 1
- 101000655256 Paraclostridium bifermentans Small, acid-soluble spore protein alpha Proteins 0.000 description 1
- 101000655264 Paraclostridium bifermentans Small, acid-soluble spore protein beta Proteins 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000007177 brain activity Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000001627 detrimental effect Effects 0.000 description 1
- 238000011982 device technology Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000005684 electric field Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000013515 script Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000026683 transduction Effects 0.000 description 1
- 238000010361 transduction 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/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
-
- 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/54—Link editing before load time
-
- 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
- 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/30098—Register arrangements
- G06F9/30101—Special purpose registers
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
提供了一种计算机设备,其包括处理器,该处理器被配置为接收针对包括至少两个代码文件的程序的源代码,以及处理针对该程序的源代码,以针对源代码的至少两个代码文件中的每个代码文件生成机器级代码文件。处理器还被配置为生成针对源代码的至少两个代码文件所生成的每个机器级代码文件的控制流图数据,使用机器级代码文件和针对该机器级代码文件生成的控制流图数据,生成针对每个机器级代码文件的机器级中间表示,将机器级中间表示合并为经合并的机器级中间表示,以及对经合并的机器级中间表示执行机器级优化以及输出经优化的经合并的机器级中间表示。
Description
背景技术
以逐个文件为基础编译程序的编程语言可以将源代码的每个文件分开地编译成目标文件,并且然后将分开的目标文件合并成可执行文件。在一些示例中,编译器可以采用链接时优化(LTO)技术来应用过程间优化以消除重复计算、存储器的低效使用以及对整个源代码的其他优化。
发明内容
本文公开了一种计算机设备,其包括处理器,被配置为执行指令,该指令包括编译器,该编译器被配置为接收针对程序的包括至少两个代码文件的源代码,以及处理针对该程序的源代码以针对源代码的至少两个代码文件中的每个代码文件生成机器级代码文件。该指令还包括控制流图生成器,该控制流图生成器被配置为生成针对源代码的至少两个代码文件所生成的每个机器级代码文件的控制流图数据。该指令还包括机器级中间表示生成器,该机器级中间表示生成器被配置为:使用相应的机器级代码文件和针对该机器级代码文件所生成的控制流图数据,生成针对每个机器级代码文件的机器级中间表示。该指令还包括机器级中间表示合并器工具,该机器级中间表示合并器工具被配置为将机器级中间表示合并为经合并的机器级中间表示。该指令还包括机器级优化工具,该机器级优化工具被配置为:对经合并的机器级中间表示执行机器级优化以及输出经优化的经合并的机器级中间表示。
提供本发明内容是为了以简化形式介绍概念的选择,这些概念将在下面的具体实施方式中进一步描述。本发明内容不旨在标识要求保护的主题的关键特征或基本特征,也不旨在用于限制要求保护的主题的范围。此外,要求保护的主题不限于解决本公开的任何部分中提到的任何或所有缺点的实现。
附图说明
图1示出了根据本主题公开的一个实施例的实现机器级中间表示(IR)优化过程的计算机设备。
图2示出了由图1的计算机设备实现的将源代码的代码文件编译成机器级代码文件的示例编译器流水线。
图3示出了由图1的计算机设备实现的用于机器级IR优化过程的数据流。
图4示出了使用机器级代码文件和针对该机器级代码文件的控制流图数据来生成机器级IR的示例,用于由图1的计算机设备实现的机器级IR优化过程。
图5示出了将两个机器级IR合并成经合并的机器级IR的示例,用于由图1的计算机设备实现的机器级IR优化过程。
图6示出了可以由图1的计算机设备实现的用于机器级IR优化过程的方法的流程图。
图7示出了图1的计算机设备可以在其中被执行的示例计算环境的示意图。
具体实施方式
编译器通常以逐个文件为基础分开优化每个源代码文件,将例如可以用C、C++或其他编程语言编写的源代码翻译成包括目标代码的可执行和可链接格式(ELF)文件。在链接时,编译器的链接器工具将所有ELF目标文件合并到一个可执行文件中。链接过程可以包括解析符号引用和重定位,以及其他过程。然而,以这种方式执行逐个文件编译可能会潜在地引起编译器错过链接后的程序作为整体中存在的优化机会,诸如跨模块内联和其他优化。
编译器可以实现链接时优化(LTO)技术以应用过程间优化来消除重复计算、存储器的低效使用以及应用对源代码作为整体的其他优化。然而,LTO通常需要比特码(也称为字节码)文件的生成,这些文件用于描述针对源代码文件中的每个源代码文件的高级中间表示
(IR)。这些比特码文件比可执行和可链接格式(ELF)对象或其他类型的可执行格式包含更多有关源代码文件的信息。编译器可以在链接时合并高级IR,以及对经合并的IR执行链接时优化。
通过对经合并的IR执行优化,编译器可以潜在地标识用于程序作为整体的优化机会,这在分开地分析和优化每个文件时将是不可标识的。然后经优化的经合并的IR可以被编译成用于可执行体的机器代码。然而,这些LTO技术需要针对每个源代码文件的高级IR的比特码文件的生成,这需要附加的后端流水线由编译器加载。此外,这些针对高级IR的额外比特码文件存储在存储器中,这使得编译期间存储器占用较大。针对LTO执行的附加代码生成和优化将引起附加的开销,这减慢链接时过程。虽然附加的开销、增加的存储器占用和增加的链接所需的时间对于非运行时编译来说可能是可以接受的,但这些问题可能会降低即时编译(例如,用于着色器程序编译)的性能。
为了解决这些问题,图1示出了实现机器级IR优化过程的计算机设备10,与传统的LTO技术相比,该过程可以提供减少用于执行优化的计算开销和存储器占用的潜在益处。如图所示,计算机设备10包括处理器12,处理器12被配置为执行由一个或多个存储设备14存储在存储器中的指令。该一个或多个存储设备14可以包括易失性和非易失性存储器设备。计算机设备10还可以包括输入设备16和其他合适的计算机组件。
由处理器12执行的指令包括用于以下项的程序模块:编译器18、控制流图(CFG)生成器20、机器级中间表示生成器22、机器级中间合并器工具24、优化工具26、以及可执行工具28。在一个示例中,这些程序模块可以彼此分开并且被布置在流水线中以执行本文中描述的功能。在另一示例中,这些程序模块中的一个或多个程序模块可以集成在一起。例如,CFG生成器20可以被包括在编译器18中,并且可以在编译器18的执行期间执行本文中描述的CFG生成器20的功能。
处理器12被配置为将包括两个或更多代码文件32的源代码30编译成可执行文件34,这将在下面更详细地讨论。在一个示例中,源代码30可以使用静态编译技术来编译。也就是说,源代码30可以在编译期间被编译成可执行文件34,并且所得可执行文件34可以在稍后的时间点被存储和被执行。
在另一个示例中,源代码30可以使用即时或动态编译技术来编译。在此示例中,编译器18、CFG生成器20、机器级IR生成器22、机器级IR合并器工具24、以及机器级优化工具26可以被包括在具有优化程序的即时(JIT)编译器36中。与静态编译相对照,具有优化程序的JIT编译器36可以被配置为在包括源代码30的应用程序的运行时间期间编译源代码30。在该示例中,处理器12被配置为执行应用程序38,该应用程序38在应用程序38的运行时生成针对程序的源代码30。处理器12还被配置为执行具有优化程序的JIT编译器36以在应用程序38的运行时编译源代码30,包括用于编译器18、CFG生成器20、机器级IR生成器22、机器级IR合并器工具24、机器级优化工具26和可执行工具28的执行指令。
作为具体示例,应用程序38可以采用游戏应用或另一种类型的应用的形式,其生成在运行时编译和执行的针对着色器程序的代码。在该示例中,源代码30针对在应用程序38的运行时生成的着色器程序。针对着色器程序的源代码30由具有优化程序的JIT编译器36编译,其生成可执行文件34。用于着色器程序的可执行文件34诸如例如由图形处理单元(GPU)执行,并且结果被发送回应用程序38。
在图1所示的示例中,源代码30包括至少两个代码文件32。然而,应当理解,源代码30可以包括更大数目的代码文件32,诸如一百个代码文件、一千个代码文件等。例如,用于着色器程序的源代码30可以包括多个代码文件32,这些代码文件将逐个文件地被编译成可执行文件34。
在静态和动态编译示例中,编译器18被配置为接收用于处理的源代码30。源代码30可以使用编译器18的编译器流水线40逐个文件地被编译。示例编译器流水线40在图2中示出。
在图2所示的示例中,源代码30的每个代码文件32由编译器18的编译器流水线40分开地处理。应当理解,图2所示的编译器流水线40仅仅是示例性的,并且编译器18可以实现用于计算机流水线40的其他架构。
每个相应的代码文件32由编译器18的前端42处理。前端42分析代码文件32并将程序划分为核心部分,以及检查句法、语法、词法和其他类型的错误。前端42还针对源代码30的代码文件32生成抽象语法树(AST)44。抽象语法树44被生成以表示程序代码的结构。通常,AST 44的每个节点表示源代码中出现的构造。
编译器中间表示(IR)生成器46可以使用AST 44来生成针对代码文件32的IR 48。示例IR格式可以包括用于Java的字节码,或独立于语言的格式,诸如三地址码,或其他类型的IR格式。与更接近可执行体将在其上运行的目标机器的较低级IR相比,这些IR通常接近源代码30的源语言本身。在某些示例中,IR 48可以采用在高级IR和低级IR之间的中间级IR的形式,并且独立于源代码的语言和程序将在其上被执行的目标机器。
在链接时优化(LTO)实现中,用于源代码30的每个代码文件32的IR 48通常将以逐个文件为基础地转储到存储器中。因此,在执行LTO时,用于源代码30的每个代码文件32的IR 48将被转储到存储器中,这将增加在源代码30的编译期间使用的存储器占用,并通过添加执行LTO功能所需的LTO流水线66而进一步增加资源消耗。LTO流水线66增加了源代码30的编译的开销。例如,LTO流水线66可能需要将针对源代码30的所有代码文件32的所有IR48连同可能由那些代码文件32使用的其他库68一起转储到存储器中。这些IR 48通常被生成为接近源语言,并且比更接近目标机器的机器级的较低级IR具有更大的存储器占用。通常,IR 48可以在LTO被执行之前单独被优化。
针对源代码30的每个代码文件32的IR 48和其他库68由LTO流水线66的链接时IR合并器70处理。链接时IR合并器70生成经合并的IR 72,经合并的IR 72包括来自所有IR 48的代码。经合并的IR 72被发送给LTO流水线66的链接时优化器74。链接时优化器74将程序作为整体分析和优化,并且可以执行不同的过程间优化,诸如例如,减少重复计算,减少存储器的低效使用,以及简化迭代循环。然后可以将得到的经优化的经合并的IR 76直接编译成经LTO优化的可执行体78。
然而,如上所述,以这种方式实现LTO可能会增加由编译器使用的存储器占用,并且需要用于LTO流水线66的额外开销,这可能会消耗附加的计算机资源。这些问题越来越不利于即时编译场景,诸如运行时着色器程序编译和执行。
为了解决关于由典型的LTO实现引起的增加的存储器占用和开销的这些问题,计算机设备10不实现LTO,而是在链接时模块实现机器级优化,这将在下面更详细地讨论。因此,由计算机设备10实现的编译器18不在存储器中存储源代码30的每个代码文件32的IR48,并且不使用源代码30的每个代码文件32的IR 48执行链接时优化78。如上所述,编译器的这些IR 48是高于机器级的高级IR或中间级IR,因此与机器级IR相比具有更大的存储器占用。代替地,计算机设备10将使用图2所示的编译器流水线40继续源代码30的每个代码文件32的逐个文件的编译。
针对每个代码文件32的IR 48可以由编译器IR优化器50以逐个文件为基础进行处理。即,编译器IR优化器50不将程序作为整体优化,而是以逐个文件为基础优化每个代码文件32。然而,由于分开地处理每个代码文件32,针对源30的每一个代码文件32的多个IR 48不需要并发地转储到存储器中,这与LTO技术相比将减少存储器占用。编译器IR优化器50通常将执行与代码本身相关的较高级的优化,而不是目标机器特定的优化。
经优化的IR 52被发送给编译器机器级IR生成器54,其针对该代码文件32生成编译器机器级IR 56。编译器机器级IR 56是高级IR的约简版本,其中高级语言特征被降低为较简单的构造。编译器机器级IR 56是低级IR,其较接近程序将在其上运行的目标机器的级别。
个体文件机器级IR优化器58可以针对每个代码文件32处理编译器机器级IR 56,并且可以执行更特定于机器代码和程序最终将在其上被执行的目标机器的架构的优化。个体文件机器级IR优化器58可以针对代码文件32生成经优化的编译器机器级IR 60。编译器流水线40然后可以使用寄存器分配器62来向经优化的编译器机器级IR 60分配寄存器,并且产生最终编译器机器级IR 64。最终编译器机器级IR 64然后可以被编译成针对该代码文件32的机器级代码文件80,其包括针对程序的操作码。源代码30的每个代码文件32可以以逐个文件为基础地编译成相应的机器级代码文件80。通常,这些机器级代码文件80将被链接成可执行文件,然后该可执行文件将在目标机器上被执行。
然而,如图1所示,计算机设备10实现链接时机器级优化模块82,以在链接时对机器级代码文件80执行另外的机器级优化。链接时机器级优化模块82将由编译器18生成的源代码30的每个代码文件32的机器级代码文件80作为输入。链接时机器级优化模块82还将针对源代码30的至少两个代码文件32所生成的每个机器级代码文件80的控制流图数据82作为输入。控制流图数据82可以由CFG生成器20生成。如上所述,在一个示例中,CFG生成器20可以使用由编译器18生成的AST 44来产生控制流图数据82。然而,应当理解,CFG生成器20可以实现其他类型的流敏感分析技术来生成控制流图数据82。通常,控制流图数据82可以定义针对机器级代码文件80的一组基本代码块的边。控制流图数据82可以定义代码块如何相互连接。
每个机器级代码文件80和对应的控制流图数据82被发送给链接时机器级优化模块82,其将链接和优化文件,以及使用可执行工具28针对源代码30作为整体生成可执行文件34。用于机器级优化的一个示例流水线在图3中示出。
如图3所示,源代码30的每个代码文件32可以由编译器18使用上述和图2所示的编译器流水线40编译成相应的机器级代码文件80。CFG生成器20可以对最终编译器机器级IR64执行流分析以针对机器级代码文件80中的每个机器级代码文件80生成控制流图数据82。
链接时机器级优化模块82的机器级IR生成器22被配置为接收针对代码文件32的机器级代码文件80、以及由CFG生成器20针对该机器级代码文件80生成的控制流程图数据82。机器级IR生成器22然后可以使用相应机器级代码文件80和针对该机器级代码文件80生成的控制流图数据82生成针对每个机器级代码文件80的机器级IR 84。
每个机器级代码文件80通常包括多个操作码,其是目标机器的指令集中的基本计算机操作。操作码(也称为指令机器代码、指令代码、指令音节、指令包或opstring)指定要被执行的操作。操作码也可以指定将以操作数的形式被处理的数据。机器级代码文件80可以包括机器级代码,其被模式化以适合代码将在其上被执行的特定处理器的架构。在一些示例中,操作码可以使用汇编语言,汇编语言中的指令与用于处理器的架构的机器代码指令之间具有强对应。
为了生成针对每个机器级代码文件80的机器级IR 84,机器级IR生成器22被配置为基于针对该机器级代码文件80生成的控制流图数据82,将该机器级代码文件80的多个操作码组织成一个或多个代码块。图4示出了使用机器级代码文件和用于那些机器级代码文件80的控制流图数据生成机器级IR的示例。如图所示,每个机器级代码文件80可以包括多个操作码81。然而,如果没有控制流图数据82,则将很难确定第一机器级代码文件的操作码81应该如何与第二机器级代码文件的操作码81合并。
如上所述,控制流图数据82可以定义用于机器级代码文件80的一组基本代码块83的边。控制流图数据82可以定义代码块83如何相互连接,并且可以标识每个代码块83的后继者和终止者。机器级IR生成器22可以使用该控制流图数据82来将第一机器级代码文件80的多组操作码81分组成一个或多个代码块83,代码块之间具有定义的次序(succession)。通常,机器级IR 84由机器级IR生成器22生成,具有单个静态指派,这需要每个变量被恰好指派一次,并且每个变量在它被使用之前被定义。
机器级IR生成器22被配置为以逐个文件为基础生成针对每个机器级代码文件80的机器级IR 84。通常,由编译器流水线40生成的机器级代码文件80将已经被指派物理或硬件寄存器以用于执行机器级代码文件80中的各种操作码。然而,由于那些物理寄存器是针对每个代码文件被分开地分配的,因此可能存在跨作为整体的程序的寄存器分配中的存储器效率低下。因此,在一个示例中,虚拟寄存器分配器88可以被配置为确定已经分配给机器级IR 84中的每个机器级IR的多个物理寄存器,并且为机器级IR 84的多个物理寄存器指派多个虚拟寄存器。这些虚拟寄存器是临时的,并且将有助于跨作为整体的源代码30
的程序来执行存储器优化。
该组机器级IR 84然后被发送给机器级IR合并器工具24。机器级IR合并器工具24被配置为将机器级IR 84合并成经合并的机器级IR 86,这可以包括将每个机器级IR 84的一个或多个代码块与每个其他机器级IR 84的对应一个或多个代码块合并。图5示出了将两个机器级IR 84合并成经合并的机器级IR 86的示例。如图所示,每个机器级IR 84的操作码81已经使用由CFG生成器20生成的控制流图数据82组织成代码块83。机器级IR合并器工具24可以合并每个代码块,诸如来自每个机器级IR 84的BLOCK0、BLOCK1和BLOCK2。也就是说,针对第一和第二机器级IR 84两者中BLOCK0的操作码81可以被合并,使得经合并的机器级IR 86的BLOCK0代码块包括来自两个机器级IR
84的操作码81。该合并过程可以跨所有机器级IR 84为每个代码块83被执行。图5示出了以这种方式从示例第一和第二机器级IR 84生成的示例经合并的机器级IR 86。
返回到图3,经合并的机器级IR 86将源代码30的整个程序链接在一起成为单个代码文件。因此,整个程序优化可以在经合并的机器级IR 86上被执行,与由上面讨论的由编译器流水线40执行的单独文件优化相比,这可以提供改进的优化。应当理解,机器级IR 86具有更小的存储器占用,并且通常比图2中用于LTO的高级IR 48更优化。通过不对高级IR执行LTO,而是优化经合并的机器级IR 86,计算机设备10可以减少编译所需的总存储器占用,并减少用于在链接时执行这些优化所产生的计算开销,同时仍然实现整个程序过程间优化,提高得到的可执行文件34的效率。
机器级优化工具26被配置为对经合并的机器级中间表示执行机器级优化以及输出经优化的经合并机器级中间表示。机器级优化工具26可以被配置为对经合并的机器级IR86执行任何合适的过程间优化,诸如例如减少重复计算、减少存储器的低效使用、以及简化迭代循环。
在这一点上,经优化的经合并的机器级IR 90包括虚拟寄存器,虚拟寄存器为由机器级优化工具26执行的存储器优化提供潜在改进。然而,在工作可执行文件可以被生成之前,物理寄存器基于IR的虚拟寄存器被指派。在一个示例中,寄存器分配器88还被配置为确定已被指派给经优化的经合并的机器级IR 90的一个或多个虚拟寄存器,以及基于所确定的一个或多个虚拟寄存器将一个或多个物理寄存器分配给经优化的经合并的机器级IR90。
已经分配了物理寄存器的经优化的经合并机器级IR 90然后可以被发送给可执行工具28,其可以被配置为从经优化的经合并的机器级IR 90生成可执行文件34。如上所述,源代码40可以是在运行时针对着色器程序生成的代码。计算机设备10可以实现上述具有优化程序的即时编译器36以在生成着色器程序的应用程序38的运行时将源代码30编译成可执行文件34。然后可执行文件34可以被运行,并且结果被返回给应用程序38。本文中描述的具有优化程序的即时编译器36提供跨作为整体的源代码30的程序的过程间优化,同时实现比在链接时对高级IR执行优化的传统LTO技术更低的存储器占用和计算开销。
图6示出了用于执行机器级IR优化过程的示例方法400的流程图,与传统的LTO技术相比,该方法可以提供减少用于执行优化的计算开销和存储器占用的潜在益处。方法400的以下描述是参考上面描述的和图1中所示的软件和硬件组件提供的。应该理解,方法400也可以在使用其他合适的硬件和软件组件的其他上下文中被执行。
在402,方法400可以包括接收针对程序的包括至少两个代码文件的源代码。在一个示例中,该程序是在应用程序的运行时被生成的着色器程序,并且方法400在生成用于该程序的源代码的应用程序的运行时被执行。其他程序类型也是可能的。在该示例中,方法400可以被实现为用于编译在运行时由应用程序生成的程序的即时编译器。
在404处,方法400可以包括处理针对程序的源代码以生成针对源代码的至少两个代码文件中的每个代码文件的机器级代码文件。步骤404可以包括使用编译器流水线,该编译器流水线包括编译器前端、高级IR生成器、高级IR优化器、中间级IR生成器、中间级IR优化器、寄存器分配器和用于将源代码的代码文件编译成机器级代码文件的其他合适的软件组件。上面参考图1描述了编译器流水线的示例。
在406处,方法400可以包括生成针对源代码的至少两个代码文件生成的每个机器级代码文件的控制流图数据。控制流图数据可以基于抽象语法树或在代码文件的编译期间生成的其他合适的流分析工具来生成。控制流图数据通常可以定义用于机器级代码文件的一组基本代码块的边。控制流图数据可以定义代码块如何相互连接。
在408处,方法400可以包括使用相应的机器级代码文件和针对该机器级代码文件生成的控制流图数据,生成针对每个机器级代码文件的机器级中间表示。每个机器级代码文件通常包括多个操作码。步骤408可以通过以下来执行:基于针对该机器级代码文件生成的控制流图数据将该机器级代码文件的多个操作码组织成一个或多个代码块。
在410处,方法400可以包括将机器级中间表示合并成经合并的机器级中间表示。步骤410可以通过将每个机器级中间表示的一个或多个代码块与每个其他机器级中间表示的对应的一个或多个代码块合并来执行。
在412处,方法400可以包括对经合并的机器级中间表示执行机器级优化以及输出经优化的经合并的机器级中间表示。步骤412可以包括任何合适的过程间优化,诸如例如减少重复计算、减少存储器的低效使用、以及简化迭代循环。
在414处,方法400可以包括从经优化的经合并的机器级中间表示生成可执行文件。该可执行文件然后可以在计算机设备10上被执行。
在一个示例中,方法400在不将源代码的每个代码文件的高级中间表示存储在存储器中的情况下被执行。另外,方法400在不使用源代码的每个代码文件的高级中间表示来执行链接时优化的情况下被执行。用于使用高级IR执行LTO的示例流水线如图2所示。由于方法400是在不使用LTO的情况下被执行的,而是通过在机器级跨源代码的整个程序执行过程间优化来执行,因此与在链接时对高级IR执行优化的传统LTO技术相比,方法400提供了实现更低的存储器占用和计算开销的潜在益处。由方法400提供的更低的存储器占用和计算开销可以提高用于着色器程序和在运行时编译的其他类型程序的即时编译的效率和性能。
在一些实施例中,本文描述的方法和过程可以被绑定到一个或多个计算设备的计算系统。特别地,这样的方法和过程可以被实现为计算机应用程序或服务、应用编程接口(API)、库和/或其他计算机程序产品。
图7示意性示出了计算系统500的非限制性实施例,该计算系统500可以执行上述方法和过程中的一个或多个方法和过程。计算系统500以简化形式示出。计算系统500可以体现上述和图1中所示的计算机设备10。计算系统500可以采用以下形式:一个或多个个人计算机、服务器计算机、平板计算机、家庭娱乐计算机、网络计算设备、游戏设备、移动计算设备、移动通信设备(例如智能手机)和/或其他计算设备,以及可穿戴计算设备,诸如智能手表和头戴式增强现实设备。
计算系统500包括逻辑处理器502、易失性存储器504和非易失性存储设备506。计算系统500可以可选地包括显示子系统508、输入子系统510、通信子系统512和/或图7中未示出的其他组件。
逻辑处理器502包括被配置为执行指令的一个或多个物理设备。例如,逻辑处理器可以被配置为执行作为一个或多个应用、程序、例程、库、对象、组件、数据结构或其他逻辑构造的一部分的指令。这样的指令可以被实现以执行任务、实现数据类型、转换一个或多个组件的状态、实现技术效果或以其他方式达到期望的结果。
逻辑处理器可以包括被配置为执行软件指令的一个或多个物理处理器(硬件)。另外地或备选地,逻辑处理器可以包括一个或多个硬件逻辑电路或固件设备,其被配置为执行硬件实现的逻辑或固件指令。逻辑处理器502的处理器可以是单核或多核的,并且在其上执行的指令可以被配置用于顺序、并行和/或分布式处理。逻辑处理器的各个组件可选地可以分布在两个或更多个分开的设备中,这些设备可以位于远程和/或被配置用于协调处理。逻辑处理器的各方面可以由配置在云计算配置中的远程可访问的联网计算设备虚拟化和执行。在这种情况下,这些虚拟化方面被运行在各种不同机器的不同物理逻辑处理器上,这将被理解。
非易失性存储设备506包括一个或多个物理设备,被配置为保存由逻辑处理器可执行以实现本文描述的方法和过程的指令。当这样的方法和过程被实现时,非易失性存储设备506的状态可以被转换——例如,以保存不同的数据。
非易失性存储设备506可以包括可移除和/或内置的物理设备。非易失性存储设备506可以包括光存储器(例如,CD、DVD、HD-DVD、蓝光光盘等)、半导体存储器(例如ROM、EPROM、EEPROM、FLASH存储器等)和/或磁存储器(例如硬盘驱动器、软盘驱动器、磁带驱动器、MRAM等),或其他大容量存储设备技术。非易失性存储设备506可以包括非易失性、动态、静态、读/写、只读、顺序访问、位置可寻址、文件可寻址和/或内容可寻址设备。将理解,非易失性存储设备506被配置为即使在非易失性存储设备506断电时也能保存指令。
易失性存储器504可以包括包含随机存取存储器的物理设备。易失性存储器504通常由逻辑处理器502用来在软件指令的处理期间临时存储信息。将理解,当易失性存储器504断电时,易失性存储器504通常不继续存储指令。
逻辑处理器502、易失性存储器504和非易失性存储设备506的各方面可以一起集成到一个或多个硬件-逻辑组件中。例如,这样的硬件逻辑组件可能包括现场可编程门阵列(FPGA)、程序和应用专用的集成电路(PASIC/ASIC)、程序和应用专用的标准产品(PSSP/ASSP)、片上系统(SOC)和复杂的可编程逻辑器件(CPLD)。
术语“模块”、“程序”和“引擎”可以用于描述通常由处理器以软件实现的计算系统500的方面,以使用易失性存储器的部分执行特定功能,该功能涉及专门配置处理器以执行该功能的转换处理。因此,模块、程序或引擎可以使用易失性存储器504的部分经由逻辑处理器502执行由非易失性存储设备506保存的指令来实例化。将理解,不同的模块、程序和/或引擎可以从相同的应用、服务、代码块、对象、库、例程、API、函数等实例化。同样,相同的模块、程序和/或引擎可以由不同的应用、服务、代码块、对象、例程、API、函数等实例化。术语“模块”、“程序”和“引擎”可以包含单个或一组可执行文件、数据文件、库、驱动器、脚本、数据库记录等。
当被包括时,显示子系统508可以用于呈现由非易失性存储设备506保存的数据的视觉表示。视觉表示可以采用图形用户接口(GUI)的形式。随着本文中描述的方法和过程改变了由非易失性存储设备保存的数据,并且因此转换了非易失性存储设备的状态,显示子系统508的状态同样可以被转换以可视化地表示底层数据的变化。显示子系统
508可以包括利用几乎任何类型的技术的一个或多个显示设备。这样的显示设备可以与共享外壳中的逻辑处理器502、易失性存储器504和/或非易失性存储设备506组合,或者这样的显示设备可以是外围显示设备。
当被包括时,输入子系统510可以包括一个或多个用户输入设备或与一个或多个用户输入设备(诸如键盘、鼠标、触摸屏或游戏控制器)接口。在一些实施例中,输入子系统可以包括或与选定的自然用户输入(NUI)组件接口。这样的组件可以是集成的或外围的,并且输入动作的转导和/或处理可以在机上或机外处理。示例NUI组件可以包括用于语音和/或话音识别的麦克风;用于机器视觉和/或手势识别的红外、彩色、立体和/或深度相机;用于运动检测和/或意图识别的头部跟踪器、眼动仪、加速度计和/或陀螺仪;以及用于评估大脑活动的电场传感组件;和/或任何其他合适的传感器。
当被包括时,通信子系统512可以被配置为将本文描述的各种计算设备彼此通信耦合,以及与其他设备通信耦合。通信子系统512可以包括与一种或多种不同通信协议兼容的有线和/或无线通信设备。作为非限制性示例,通信子系统可以被配置用于经由无线电话网络或者有线或无线局域网或广域网(诸如通过Wi-Fi连接的HDMI)进行通信。在一些实施例中,通信子系统可以允许计算系统500经由网络(诸如互联网)向其他设备发送消息和/或从其他设备接收消息。
以下段落为本申请的权利要求提供附加的支持。一个方面提供一种计算机设备(10),包括被配置为执行指令的处理器(12)。指令包括编译器(18),编译器(18)被配置为:接收针对程序的包括至少两个代码文件(32)的源代码(30),以及处理针对该程序的源代
码(30)以针对源代码(30)的至少两个代码文件(32)中的每个代码文件(32)生成机器级代码文件(80)。该指令还包括控制流图生成器(20),控制流图生成器(20)被配置为生成针对源代码(30)的至少两个代码文件(32)生成的每个机器级代码文件(80)的控制流图数据(82)。这些指令还包括机器级中间表示生成器(22),机器级中间表示生成器(22)被配置为:使用相应的机器级代码文件(80)和针对该机器级代码文件(80)生成的控制流图数据(82),生成针对每个机器级代码文件(80)的机器级中间表示(84)。该指令还包括机器级中间表示合并器工具(24),中间表示合并器工具(24)被配置为将机器级中间表示(84)合并成经合并的机器级中间表示(86)。
该指令还包括机器级优化工具(26),机器级优化工具(26)被配置为对经合并的机器级中间表示(86)执行机器级优化以及输出经优化的经合并的机器级中间表示(90)。
与在链接时对高级IR执行优化的传统LTO技术相比,该方面提供了实现更低存储器占用和计算开销的潜在益处。由该方面提供的更低存储器占用和计算开销可以提供可以用于着色器程序和在运行时编译的其他类型的程序的即时编译的提高的效率和性能的潜在益处。
在该方面,另外地或备选地,由处理器执行的指令还可以包括可执行工具,该可执行工具被配置为从经优化的经合并的机器级中间表示生成可执行文件。
该方面通过从已被过程间优化的经优化的经合并的机器级中间表示生成可执行体来提供提高可执行体的存储器利用和资源消耗的效率的潜在益处。
在该方面,另外地或备选地,处理器可以被配置为执行应用程序,该应用程序在运行时生成针对程序的源代码,并且处理器还可以被配置为在应用程序的运行时执行用于编译器、控制流图生成器、机器级中间表示生成器、机器级中间表示合并器工具和优化工具的指令。
该方面提供了减少与执行整个程序优化相关联的存储器占用的潜在益处,这使得整个程序优化能够在程序的即时编译期间被执行。
在该方面,另外地或备选地,程序可以是在应用程序的运行时生成的着色器程序。
该方面提供了改进包括着色器程序的应用(诸如例如视频游戏和其他视觉应用)的运行时性能的潜在益处。
在该方面,另外地或备选地,机器级中间表示可以由机器级中间表示生成器利用单个静态指派来生成。
该方面提供改进的整个程序优化的潜在益处,该程序优化可以由机器级优化工具在程序的经合并的机器级中间表示上执行。
在该方面,另外地或备选地,每个机器级代码文件可以包括多个操作码。
与使用更高级的中间表示的传统LTO技术相比,该方面通过针对包括用于目标机器的操作码的机器级中间表示执行整个程序优化来提供提高存储器利用和资源消耗的效率的潜在益处。
在该方面,另外地或备选地,为了生成针对每个机器级代码文件的机器级中间表示,机器级中间表示生成器可以被配置为基于针对该机器级代码文件生成的控制流图数据将该机器级代码文件的多个操作码组织成一个或多个代码块。
该方面提供了增加针对机器级优化工具的优化机会以通过生成机器级中间表示来优化机器级代码的潜在益处。
在该方面,另外地或备选地,为了合并机器级中间表示,机器级中间表示合并器工具可以被配置为将每个机器级中间表示的一个或多个代码块与每个其他机器级中间表示的对应的一个或多代码块合并。
该方面提供了改进由机器级优化工具执行的整个程序优化的潜在益处。
在该方面,另外地或备选地,由处理器执行的指令还可以包括寄存器分配器,寄存器分配器被配置为:确定已经被分配给机器级中间表示中的每个机器级中间表示的多个物理寄存器,以及为机器级中间表示的多个物理寄存器指派多个虚拟寄存器。
该方面提供了可以由机器级优化工具执行的改进的存储器管理优化的潜在益处。
在该方面,另外地或备选地,寄存器分配器还可以被配置为:确定已经被指派给经优化的经合并的机器级中间表示的一个或多个虚拟寄存器,以及基于所确定的一个或多个虚拟寄存器向经优化的经合并的机器级中间表示分配一个或多个物理寄存器。
该方面提供了可以由机器级优化工具执行的改进的存储器管理优化的潜在益处。
在该方面,另外地或备选地,编译器不在存储器中存储源代码的每个代码文件的高于机器级的中间表示,并且不使用源代码的每个代码文件的高于机器级的中间表示来执行链接时优化。
与使用较高级中间表示的传统LTO技术相比,该方面通过针对包括用于目标机器的操作码的机器级中间表示执行整个程序优化来提供提高存储器利用和资源消耗的效率的潜在益处。
另一方面提供了一种方法(400),该方法包括:在计算机设备的处理器处接收(402)针对程序的包括至少两个代码文件的源代码,处理(404)针对该程序的源代码以针对源代码的至少两个代码文件中的每个代码文件生成机器级代码文件,生成(406)针对源代码的至少两个代码文件生成的每个机器级代码文件的控制流图数据,使用相应的机器级代码文件和针对该机器级代码文件生成的控制流图数据,生成针对每个机器级代码文件的(408)机器级中间表示,将机器级中间表示合并(410)成经合并的机器级中间表示,以及对经合并的机器级中间表示执行(412)机器级优化以及输出经优化的经合并的机器级中间表示。
与在链接时对高级IR执行优化的传统LTO技术相比,该方面提供了实现更低的存储器占用和计算开销的潜在益处。该方面提供的更低的存储器占用和计算开销可以提供可以用于着色器程序和在运行时编译的其他类型的程序的即时编译的提高的效率和性能的潜在益处。
在该方面,另外地或备选地,该方法还可以包括从经优化的经合并的机器级中间表示生成可执行体。
该方面通过从已经被过程间优化的经优化的经合并的机器级中间表示生成可执行体,提供了提高可执行体的存储器利用和资源消耗的效率的潜在益处。
在该方面,另外地或备选地,该方法可以在生成针对程序的源代码的应用程序的运行时被执行。
该方面提供了减少与执行整个程序优化相关联的存储器占用的潜在益处,这使得整个程序优化能够在程序的即时编译期间被执行。
在此方面,另外地或备选地,程序可以是在应用程序的运行时生成的着色器程序。
该方面提供了改进包括着色器程序的应用(诸如例如视频游戏和其他视觉应用)的运行时性能的潜在益处。
在该方面,另外地或备选地,每个机器级代码文件可以包括多个操作码。
与使用高级中间表示的传统LTO技术相比,该方面通过针对包括用于目标机器的操作码的机器级中间表示执行整个程序优化来提供提高存储器利用和资源消耗的效率的潜在益处。
在该方面,另外地或备选地,生成针对每个机器级代码文件的机器级中间表示可以包括基于针对该机器级代码文件生成的控制流图数据,将机器级代码文件的多个操作码组织成一个或多个代码块。
在该方面,另外地或备选地,合并机器级中间表示可以包括将每个机器级中间表示的一个或多个代码块与每个其他机器级中间表示的对应的一个或多个代码块合并。
该方面提供增加针对机器级优化工具优化机会以通过生成机器级中间表示来优化机器级代码的潜在益处。
在该方面,另外地或备选地,该方法不包括在存储器中存储源代码的每个代码文件的高于机器级的中间表示,并且该方法不包括使用源代码的每个代码文件的高于机器级的中间表示来执行链接时优化。
与使用更高级的中间表示的传统LTO技术相比,该方面通过针对包括用于目标机器的操作码的机器级中间表示执行整个程序优化来提供提高存储器利用和资源消耗的效率的潜在益处。
另一方面提供了一种计算机设备(10),包括处理器(12),处理器(12)被配置为执行应用程序(38)和即时编译器(18),应用程序(38)生成针对程序的源代码(30),其中源代码(30)包括至少两个代码文件(32),该即时编译器(18)被配置为在应用程序(38)的运行时编译针对程序的源代码(30)。即时编译器(18)被配置为:接收针对程序的源代码(30),处理针对程序的源代码(30)以针对源代码(30)的至少两个代码文件(32)中的每个代码文件生成机器级代码文件(80),生成针对源代码(30)的至少两个代码文件(32)生成的每个机器级代码文件(80)的控制流图数据(82),使用相应的机器级代码文件(80)和针对该机器级代码文件(80)生成的控制流图数据(82),针对每个机器级代码(80)文件生成机器级中间表示(84),将机器级中间表示(84)合并成经合并的机器级中间表示(86),对经合并的机器级中间表示(86)执行机器级优化以及输出经优化的经合并的机器级中间表示(90),以及从经优化的经合并的机器级中间表示(90)生成可执行文件(34)。处理器(12)还被配置为在应用程序(38)的运行时间期间执行从程序的源代码(30)编译的可执行文件(34)。
与在链接时对高级IR执行优化的传统LTO技术相比,该方面提供了实现更低存储器占用和计算开销的潜在益处。由该方面提供的更低的存储器占用和计算开销可以提供可以用于着色器程序和在运行时被编译的其他类型的程序的即时编译的提高的效率和性能的潜在益处。
将理解,本文描述的配置和/或方法本质上是示例性的,并且这些具体实施例或示例不应被认为是限制性的,因为许多变化是可能的。本文中描述的具体例程或方法可以代表任何数目的处理策略中的一种或多种。因此,所示出和/或描述的各种动作可以按照所示出和/或描述的顺序、以其他顺序、并行或省略来执行。同样,上述过程的顺序可以被改变。
本公开的主题包括各种过程、系统和配置的所有新颖和非显而易见的组合和子组合,以及本文公开的其他特征、功能、行为和/或性质,以及任何及其所有等价物。
Claims (15)
1.一种计算机设备,包括:
处理器,被配置为执行指令,所述指令包括:
编译器,被配置为接收针对程序的、包括至少两个代码文件的源代码,以及处理针对所述程序的所述源代码,以针对所述源代码的所述至少两个代码文件中的每个代码文件生成机器级代码文件;
控制流图生成器,被配置为生成针对所述源代码的所述至少两个代码文件所生成的每个机器级代码文件的控制流图数据;
机器级中间表示生成器,被配置为使用相应的机器级代码文件和针对所述机器级代码文件所生成的所述控制流图数据,生成针对每个机器级代码文件的机器级中间表示;
机器级中间表示合并器工具,被配置为将所述机器级中间表示合并为经合并的机器级中间表示;以及
机器级优化工具,被配置为对所述经合并的机器级中间表示执行机器级优化以及输出经优化的经合并的机器级中间表示。
2.根据权利要求1所述的计算机设备,其中由所述处理器执行的所述指令还包括可执行工具,所述可执行工具被配置为从所述经优化的经合并的机器级中间表示生成可执行文件。
3.根据权利要求1所述的计算机设备,其中所述处理器被配置为执行在运行时生成针对所述程序的所述源代码的应用程序,并且所述处理器还被配置为在所述应用程序的运行时执行用于所述编译器、所述控制流程图生成器、所述机器级中间表示生成器、所述机器级中间表示合并器工具、以及所述优化工具的所述指令。
4.根据权利要求3所述的计算机设备,其中所述程序是在所述应用程序的运行时被生成的着色器程序。
5.根据权利要求1所述的计算机设备,其中所述机器级中间表示由所述机器级中间表示生成器利用单个静态指派生成。
6.根据权利要求1所述的计算机设备,其中每个机器级代码文件包括多个操作码。
7.根据权利要求6所述的计算机设备,其中为了生成针对每个机器级代码文件的所述机器级中间表示,所述机器级中间表示生成器被配置为基于针对所述机器级代码文件所生成的所述控制流图数据将所述机器级代码文件的所述多个操作码组织成一个或多个代码块。
8.根据权利要求7所述的计算机设备,其中为了合并所述机器级中间表示,所述机器级中间表示合并器工具被配置为将每个机器级中间表示的所述一个或多个代码块与每个其他机器级中间表示的对应的一个或多个代码块合并。
9.根据权利要求1所述的计算机设备,其中由所述处理器执行的所述指令还包括寄存器分配器,被配置为:
确定已经被分配给所述机器级中间表示中的每个机器级中间表示的多个物理寄存器;以及
为所述机器级中间表示的所述多个物理寄存器指派多个虚拟寄存器。
10.根据权利要求7所述的计算机设备,其中所述寄存器分配器还被配置为:
确定已经被指派给所述经优化的经合并的机器级中间表示的一个或多个虚拟寄存器;以及
基于所确定的所述一个或多个虚拟寄存器,向所述经优化的经合并的机器级中间表示分配一个或多个物理寄存器。
11.根据权利要求1所述的计算机设备,其中所述编译器不在存储器中存储所述源代码的每个代码文件的高于机器级的中间表示,并且不使用所述源代码的每个代码文件的所述高于机器级的中间表示执行链接时优化。
12.一种方法,包括:
在计算机设备的处理器处:
接收针对程序的、包括至少两个代码文件的源代码;
处理针对所述程序的所述源代码以针对所述源代码的所述至少两个代码文件中的每个代码文件生成机器级代码文件;
生成针对所述源代码的所述至少两个代码文件所生成的每个机器级代码文件的控制流图数据;
使用相应的机器级代码文件和针对所述机器级代码文件所生成的所述控制流图数据,生成针对每个机器级代码文件的机器级中间表示;
将所述机器级中间表示合并为经合并的机器级中间表示;以及
对所述经合并的机器级中间表示执行机器级优化以及输出经优化的经合并的机器级中间表示。
13.根据权利要求12所述的方法,还包括从所述经优化的经合并的机器级中间表示生成可执行文件。
14.根据权利要求12所述的方法,其中所述方法在生成针对所述程序的所述源代码的应用程序的运行时被执行,并且其中所述程序是在所述应用程序的运行时被生成的着色器程序。
15.根据权利要求12所述的方法,其中每个机器级代码文件包括多个操作码,并且其中生成针对每个机器级代码文件的所述机器级中间表示包括基于针对所述机器级代码文件所生成的所述控制流图数据将所述机器级代码文件的所述多个操作码组织成一个或多个代码块。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/144,065 US11550554B2 (en) | 2021-01-07 | 2021-01-07 | Merged machine-level intermediate representation optimizations |
US17/144,065 | 2021-01-07 | ||
PCT/US2021/060916 WO2022150109A1 (en) | 2021-01-07 | 2021-11-29 | Merged machine-level intermediate representation optimizations |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116830080A true CN116830080A (zh) | 2023-09-29 |
Family
ID=79024657
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180089654.4A Pending CN116830080A (zh) | 2021-01-07 | 2021-11-29 | 经合并的机器级中间表示优化 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11550554B2 (zh) |
EP (1) | EP4275115B1 (zh) |
CN (1) | CN116830080A (zh) |
WO (1) | WO2022150109A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US12013773B2 (en) * | 2021-12-10 | 2024-06-18 | International Business Machines Corporation | Generating debuggable executables based on optimizing different compiler options for source code modules |
US11847435B2 (en) * | 2021-12-20 | 2023-12-19 | International Business Machines Corporation | Feedback-directed pass pipeline optimization in static compilation |
US20230266950A1 (en) * | 2022-02-18 | 2023-08-24 | Huawei Technologies Co., Ltd. | Methods and devices for compiler function fusion |
Family Cites Families (47)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5966539A (en) | 1994-03-01 | 1999-10-12 | Digital Equipment Corporation | Link time optimization with translation to intermediate program and following optimization techniques including program analysis code motion live variable set generation order analysis, dead code elimination and load invariant analysis |
US6247174B1 (en) | 1998-01-02 | 2001-06-12 | Hewlett-Packard Company | Optimization of source code with embedded machine instructions |
US6751792B1 (en) * | 2000-10-04 | 2004-06-15 | Sun Microsystems, Inc. | Using value-expression graphs for data-flow optimizations |
US7530062B2 (en) * | 2003-05-23 | 2009-05-05 | Microsoft Corporation | Optimizing compiler transforms for a high level shader language |
US7146606B2 (en) | 2003-06-26 | 2006-12-05 | Microsoft Corporation | General purpose intermediate representation of software for software development tools |
US20050071827A1 (en) * | 2003-09-29 | 2005-03-31 | Lai Michael Y. | Method and apparatus for bit field optimization |
US7472382B2 (en) * | 2004-08-30 | 2008-12-30 | International Business Machines Corporation | Method for optimizing software program using inter-procedural strength reduction |
US8510727B2 (en) | 2008-03-18 | 2013-08-13 | Oracle America, Inc. | Link-time redundant code elimination using functional equivalence |
US8581912B2 (en) * | 2008-06-27 | 2013-11-12 | Microsoft Corporation | Dynamic subroutine linkage optimizing shader performance |
US8296748B2 (en) * | 2008-07-24 | 2012-10-23 | Intel Corporation | Method and system for intermediate representation of source code |
US9697021B2 (en) * | 2010-04-30 | 2017-07-04 | Microsoft Technology Licensing, Llc | Modifiable high-level intermediate representation of source code |
US8539463B2 (en) * | 2011-07-28 | 2013-09-17 | Qualcomm Innovation Center, Inc. | Apparatus and method for improving the performance of compilers and interpreters of high level programming languages |
US8806458B2 (en) * | 2012-02-16 | 2014-08-12 | Microsoft Corporation | Vectorization of shaders |
US9430199B2 (en) * | 2012-02-16 | 2016-08-30 | Microsoft Technology Licensing, Llc | Scalar optimizations for shaders |
US9529575B2 (en) * | 2012-02-16 | 2016-12-27 | Microsoft Technology Licensing, Llc | Rasterization of compute shaders |
WO2013187864A1 (en) * | 2012-06-11 | 2013-12-19 | Empire Technology Development Llc | Modulating dynamic optimizations of a computer program |
US8959495B2 (en) * | 2012-09-14 | 2015-02-17 | Oracle International Corporation | Unifying static and dynamic compiler optimizations in source-code bases |
US9411715B2 (en) * | 2012-12-12 | 2016-08-09 | Nvidia Corporation | System, method, and computer program product for optimizing the management of thread stack memory |
GB2505564B (en) * | 2013-08-02 | 2015-01-28 | Somnium Technologies Ltd | Software development tool |
WO2015047295A1 (en) | 2013-09-27 | 2015-04-02 | Hewlett-Packard Development Company, L.P. | Application control flow models |
GB201405755D0 (en) * | 2014-03-31 | 2014-05-14 | Irdeto Bv | Optimizing and protecting software |
US10025571B1 (en) * | 2014-07-17 | 2018-07-17 | Google Llc | Optimized execution of dynamic languages |
WO2016032362A1 (en) * | 2014-08-29 | 2016-03-03 | Huawei Technologies Co., Ltd. | Method for compiling a source code |
US10324741B2 (en) * | 2014-08-30 | 2019-06-18 | Oracle International Corporation | Speeding up dynamic language execution on a virtual machine with type speculation |
US20160357530A1 (en) * | 2015-06-05 | 2016-12-08 | Apple Inc. | Method and apparatus for intermediate representation of applications |
US10061571B2 (en) * | 2015-11-16 | 2018-08-28 | Qualcomm Innovation Center, Inc. | System and method for link time optimization |
US10191725B2 (en) * | 2015-12-15 | 2019-01-29 | Facebook, Inc. | Rearrangeable code optimization modules |
US10248545B2 (en) * | 2016-02-17 | 2019-04-02 | Parasoft Corporation | Method for tracking high-level source attribution of generated assembly language code |
JP6642738B2 (ja) * | 2016-06-02 | 2020-02-12 | 日本電気株式会社 | コンパイラのための命令選択に関連する、情報処理装置、情報処理方法及びプログラム |
JP6759851B2 (ja) * | 2016-08-22 | 2020-09-23 | 富士通株式会社 | プログラム生成プログラム、プログラム生成方法、プログラム生成装置及びコンパイルプログラム |
US10133560B2 (en) | 2016-09-22 | 2018-11-20 | Qualcomm Innovation Center, Inc. | Link time program optimization in presence of a linker script |
US20180129490A1 (en) * | 2016-11-09 | 2018-05-10 | Qualcomm Innovation Center, Inc. | Object ordering preservation during lto link stage |
JP6790869B2 (ja) | 2017-01-25 | 2020-11-25 | 富士通株式会社 | コンパイル方法、コンパイルプログラム及び情報処理装置 |
US20180275976A1 (en) * | 2017-03-22 | 2018-09-27 | Qualcomm Innovation Center, Inc. | Link time optimization in presence of a linker script using path based rules |
US10887235B2 (en) * | 2017-08-24 | 2021-01-05 | Google Llc | Method of executing a tuple graph program across a network |
US10402176B2 (en) * | 2017-12-27 | 2019-09-03 | Intel Corporation | Methods and apparatus to compile code to generate data flow code |
US10409571B1 (en) * | 2018-03-15 | 2019-09-10 | Intel Corporation | Apparatus and method for efficiently accessing memory when performing a horizontal data reduction |
US10776087B2 (en) * | 2018-06-25 | 2020-09-15 | Intel Corporation | Sequence optimizations in a high-performance computing environment |
US11106437B2 (en) * | 2019-01-14 | 2021-08-31 | Microsoft Technology Licensing, Llc | Lookup table optimization for programming languages that target synchronous digital circuits |
US11455153B2 (en) * | 2019-03-18 | 2022-09-27 | Advanced Micro Devices, Inc. | Dynamic instances semantics |
US10915305B2 (en) * | 2019-03-28 | 2021-02-09 | International Business Machines Corporation | Reducing compilation time for computer software |
US10884764B1 (en) * | 2019-07-18 | 2021-01-05 | International Business Machines Corporation | Optimizing managed runtime applications for serverless environments |
CN114945898A (zh) * | 2019-11-22 | 2022-08-26 | 华为技术有限公司 | 用于根据TensorFlow图构建编译器中间表示的方法和系统 |
US11379200B2 (en) * | 2020-01-30 | 2022-07-05 | Oracle International Corporation | Method for applying graph-specific compiler optimizations to graph analysis programs |
US11366647B2 (en) * | 2020-04-30 | 2022-06-21 | Intel Corporation | Automatic compiler dataflow optimization to enable pipelining of loops with local storage requirements |
US20210365253A1 (en) * | 2020-05-22 | 2021-11-25 | Alibaba Group Holding Limited | Heterogeneity-agnostic and topology-agnostic data plane programming |
US11327733B2 (en) * | 2020-05-27 | 2022-05-10 | Blaize, Inc. | Method of using multidimensional blockification to optimize computer program and device thereof |
-
2021
- 2021-01-07 US US17/144,065 patent/US11550554B2/en active Active
- 2021-11-29 WO PCT/US2021/060916 patent/WO2022150109A1/en active Application Filing
- 2021-11-29 CN CN202180089654.4A patent/CN116830080A/zh active Pending
- 2021-11-29 EP EP21831163.7A patent/EP4275115B1/en active Active
Also Published As
Publication number | Publication date |
---|---|
WO2022150109A1 (en) | 2022-07-14 |
EP4275115A1 (en) | 2023-11-15 |
EP4275115B1 (en) | 2024-10-23 |
US11550554B2 (en) | 2023-01-10 |
US20220214866A1 (en) | 2022-07-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8806463B1 (en) | Feedback-directed inter-procedural optimization | |
US11550554B2 (en) | Merged machine-level intermediate representation optimizations | |
JP6122493B2 (ja) | 適応的に移植性を有したライブラリ | |
US20130283250A1 (en) | Thread Specific Compiler Generated Customization of Runtime Support for Application Programming Interfaces | |
JP5893038B2 (ja) | ユーザ定義型のコンパイル時境界検査 | |
US8570333B2 (en) | Method and system for enabling managed code-based application program to access graphics processing unit | |
US10241766B2 (en) | Application binary interface cross compilation | |
EP3895022B1 (en) | Improving emulation and tracing performance using compiler-generated emulation optimization metadata | |
US8436862B2 (en) | Method and system for enabling managed code-based application program to access graphics processing unit | |
US10324693B2 (en) | Optimizing multiple invocations of graphics processing unit programs in Java | |
Chevalier-Boisvert et al. | Simple and effective type check removal through lazy basic block versioning | |
JP5719278B2 (ja) | 情報処理装置、プロファイル対象決定プログラム及び方法 | |
US10359971B2 (en) | Storing memory profile data of an application in non-volatile memory | |
ES2908651T3 (es) | Instrucciones reducidas para generar direcciones de variables globales | |
JP7410269B2 (ja) | テスト・ベクタを使用した高水準コンストラクトの最適化の自動検証 | |
US11573777B2 (en) | Method and apparatus for enabling autonomous acceleration of dataflow AI applications | |
JP7403465B2 (ja) | 短絡高速化のための複合条件の並べ替え | |
CN113721899A (zh) | 面向gpdsp的轻量级高效汇编代码编程方法及系统 | |
Fumero et al. | Using compiler snippets to exploit parallelism on heterogeneous hardware: a Java reduction case study | |
CN113260976A (zh) | 用于在编译源代码中调度指令技术 | |
Manilov et al. | Free rider: A source-level transformation tool for retargeting platform-specific intrinsic functions |
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 |