CN114428653B - 使用不同编译设置的代码的即时jit编译实例 - Google Patents

使用不同编译设置的代码的即时jit编译实例 Download PDF

Info

Publication number
CN114428653B
CN114428653B CN202110390847.5A CN202110390847A CN114428653B CN 114428653 B CN114428653 B CN 114428653B CN 202110390847 A CN202110390847 A CN 202110390847A CN 114428653 B CN114428653 B CN 114428653B
Authority
CN
China
Prior art keywords
jit
code
instances
program
compiled
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110390847.5A
Other languages
English (en)
Other versions
CN114428653A (zh
Inventor
B·J·克恩
P·J·孟德格雷尔
E·E·爱勒特逊
K·D·李
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hewlett Packard Enterprise Development LP
Original Assignee
Hewlett Packard Enterprise Development LP
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hewlett Packard Enterprise Development LP filed Critical Hewlett Packard Enterprise Development LP
Publication of CN114428653A publication Critical patent/CN114428653A/zh
Application granted granted Critical
Publication of CN114428653B publication Critical patent/CN114428653B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • G06F9/4552Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3616Software analysis for verifying properties of programs using software metrics
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • G06F8/434Pointers; Aliasing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)

Abstract

本公开涉及使用不同编译设置的代码的即时JIT编译实例。在一些示例中,即时JIT控制指令在执行时使系统启动由程序调用的第一代码的JIT编译的多个实例,其中,对第一代码的JIT编译的多个实例的启动是在程序外部的JIT控制指令的控制下进行的,并且第一代码的JIT编译的多个实例使用相应的不同的编译设置并要产生第一代码的相应JIT编译实例。

Description

使用不同编译设置的代码的即时JIT编译实例
背景技术
程序可以包括调用函数以执行各种任务的指令。“函数”可以指在被启用时执行的任何计算机代码。诸如在大规模并行计算环境中执行的程序等大型程序可以进行大量的函数调用。
附图说明
关于以下附图描述了本公开的一些实施方式。
图1是根据一些示例的包括即时JIT控制器的布置的框图,所述即时控制器用于控制对代码的JIT编译的多个实例的启动。
图2是根据一些示例的存储有机器可读指令的存储介质的框图。
图3是根据一些示例的系统的框图。
图4是根据一些示例的过程的流程图。
在所有附图中,相同的附图标记指代相似但不一定相同的元件。附图不一定成比例,并且可以放大一些零件的尺寸以更清楚地图示所示出的示例。此外,附图提供了与描述一致的示例和/或实施方式;然而,描述不限于附图中提供的示例和/或实施方式。
具体实施方式
在本公开中,除非上下文另外明确指示,否则使用术语“一个/一种(a/an)”或“所述(the)”旨在同样包括复数形式。同样地,当在本公开中使用时,术语“包括(includes/including/comprises/comprising)”、“具有(have/having)”指明存在所述元件,但不排除存在或添加其他元件。
即时(JIT)编译是指在程序执行期间(即在运行时)、而不是在程序执行之前启动的对计算机代码的编译。在一些示例中,JIT编译是基于程序中的内联决策来触发的。例如,程序包括在满足相应条件的情况下可以触发对函数的JIT编译的指令。在程序中包含指令以进行关于是否执行对函数的JIT编译的内联决策可能会增加与开发程序相关联的开销,因为程序员将必须向程序中函数被调用的特定点添加用于控制是否启动JIT编译的指令。如果程序包括大量的函数调用,诸如在大规模并行计算环境或另一计算环境中使用的程序,则与向所述程序的源代码添加指令以支持JIT编译相关联的编程和执行开销可能很大。另外,如果程序是并行程序,其中并行执行的程序实例彼此要频繁同步,则由一个实例决定启动JIT编译并等待结果导致的并行实例之间的执行时间变化将减慢所有其他实例的执行,这构成了另一个开销源。
根据本公开的一些实施方式,与其中函数被调用的程序分离的JIT控制器可以控制是否要将JIT编译应用于正由程序调用的函数。另外,JIT控制器可以触发由程序调用的给定函数的JIT编译的多个实例,其中,所述给定函数的JIT编译的所述多个实例使用相应不同的编译设置。所述给定函数的JIT编译的所述多个实例产生所述给定函数的相应不同的JIT编译实例。每当程序调用给定函数时,JIT控制器可以在运行时选择给定函数的多个JIT编译实例中的哪个来使用。实际上,可以在程序中的不同调用点处选择给定函数的不同JIT编译实例,其中,每个调用点是程序中调用给定函数的点。
图1是包括JIT控制器102的示例布置的框图。JIT控制器102可以采用可在计算机系统中执行的机器可读指令的形式,所述计算机系统可以与在其中执行程序106的计算机系统104分离或相同。程序106包括机器可读指令,所述机器可读指令在处理器上执行时使处理器执行相应的任务。可在处理器上执行的机器可读指令可以指可在单个处理器上执行的指令或可在多个处理器上执行的指令。
在一些示例中,计算机系统104可以包括大规模并行计算机系统,所述大规模并行计算机系统包括相对大量的处理器,所述处理器可能分布在一个数据中心或多个数据中心中的多个计算节点上、在云中实施等。“计算节点”可以指计算机,诸如服务器计算机或另一种类型的计算机。在其他示例中,计算机系统104可以包括可以具有或可以不具有多个核的单个处理器。“处理器”可以包括微处理器、多核微处理器的核心、微控制器、可编程集成电路、可编程门阵列、或另一硬件处理电路。
在JIT控制器102在其中执行程序106的同一计算机系统104中运行的示例中,JIT控制器102在与程序106在其上运行的(多个)处理器不同的(多个)处理器上执行,以免由于JIT控制器102所执行的JIT操作而减慢程序106的执行。
注意,在计算机系统104中,可以执行程序106的单个实例,或者替代性地,可以执行程序106的多个实例。程序106的“实例”可以指程序106的线程或程序106的进程。
在一些示例中,程序106是应用程序。在其他示例中,程序106可以是操作系统(OS)、固件、或任何其他类型的机器可读指令的一部分。
根据本公开的一些实施方式,JIT控制器102可以在进程间链路120上与具有例程(routines)的支持库108进行通信,所述例程可以由JIT控制器102启用,作为管理程序106中的函数的JIT编译的部分。作为支持库108的一部分的例程包括修补例程110和测量例程112。修补例程110和测量例程112在被JIT控制器102启用时可以被执行为修补例程110或测量例程112的相应实例(线程或进程)。
如本文所使用的,术语“库”是指预写代码的任何集合。
“进程间链路”可以指代码实例能够在其上彼此通信的任何通信路径。例如,进程间链路可以包括进程间通信套接字(socket)。作为另一示例,进程间链路可以包括代码实例能够与其相互通信的共享存储器。存在进程间链路的其他示例。
在图1的示例中,程序106的机器可读指令包括用于调用诸如func0和func1等相应函数的指令。尽管图1描绘了程序106调用两个函数,但是注意的是,在其他示例中,程序106可以包括用于调用更多数量的函数的指令。
如图1进一步描绘的,程序106的指令可以多次调用函数func0。在程序106中的第一调用点114处,程序106第一次调用函数func0。在第二调用点116处,程序106调用函数func1。在第三调用点118处,程序106第二次调用函数func0。
“调用点”是指程序106中提供指令以调用函数的位置。
在程序106中的调用点(例如,114、116或118)处,相应的指令不直接调用相应的函数(例如,func0或func1)。而是,调用点处的指令通过调用作为补丁点数组的一部分的指针条目来间接调用相应的函数,所述补丁点数组在图1中表示为数据结构*PP[]。补丁点数组(采用数据结构*PP[]的形式)包括多个指针条目,其中,每个指针条目都可以用指向存储函数的JIT编译实例的存储位置的指针来填充。在一些示例中,数据结构*PP[]采用指针条目数组的形式。在其他示例中,数据结构*PP[]可以具有不同的格式。
“指针”可以包括地址、统一资源定位符(URL)、或可以用于确定存储装置中存储位置的任何其他信息。“存储”可以使用一个存储设备(或多个存储设备)和/或一个存储器设备(或多个存储器设备)来实施。存储设备可以包括基于磁盘的存储设备、固态驱动器等。存储器设备可以包括动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪速存储器设备等。
通过使用指针条目来间接调用函数,可以由JIT控制器102基于使用修补例程110对(在补丁点数组中的)指针条目的动态填充(称为“自适应修补”)来控制被启用的函数的特定JIT编译实例。以这种方式,JIT控制器102可以在程序106运行时控制启用已调用函数的哪个JIT编译实例(在一些情况下其可以从函数的多个JIT编译实例中进行选择)。
在一些示例中,支持库108被链接到修改后的程序(例如,106)(其已被修改为添加有用于通过调用指针条目来间接调用函数的指令。在将程序修改为包括函数指针条目并链接到支持库108之后,程序和支持库108的所得组合可以针对PP[]中的指针条目自适应地链接新的项(即,函数的JIT编译实例)。
根据本公开的一些实施方式,垫片模块121与程序106相关联。“垫片模块”是指这样的代码:所述代码拦截调用(在这种情况下为程序106中的函数调用)并更改随调用传递的自变量,在这种情况下为针对已调用函数的JIT编译实例的指针。垫片模块121是指补丁点数组(数据结构*PP[])。修补例程110在被JIT控制器102启用时可以用相应的一个指针(或多个指针)来填充(也称为“修补”)(在123处)补丁点数组中的一个指针条目(或多个指针条目)。
JIT控制器102在进程间链路120上提供要由修补例程110接收的补丁有效载荷122。补丁有效载荷122包含要放置到补丁点数组中的相应一个指针条目(或多个指针条目)中的(多个)指针的值。JIT控制器102可以与计算机系统104的操作系统(OS)124交互,以将补丁有效载荷122的内容写入到计算机系统104的存储器126。写入到存储器126的补丁有效载荷122的内容可以由修补例程110读取并写入到补丁点数组中的相应一个指针条目(或多个指针条目)。在补丁点数组存储在存储器(诸如存储器126)中的示例中,将一个指针(或多个指针)写入到补丁点数组中的对应一个指针条目(或多个指针条目)可以使用原子存储器读取和写入操作来完成。原子存储器读取和写入操作防止在读取和写入期间损坏补丁点数组中的补丁点条目,从而使补丁点条目中的指针不会被恶意或以其他方式修改为指向无效的可执行代码;即,原子性属性确保了补丁点条目中的指针指向函数的有效JIT编译实例。
在程序106的调用点114处,为了间接调用函数func0,程序106调用作为*PP[]的一部分的指针条目*PP[0]。响应于由JIT控制器102提供的补丁有效载荷122,由修补例程110对指针条目*PP[0]中的实际指针进行修补。
注意,响应于在调用点114处调用func0时来自JIT控制器102的补丁有效载荷122由修补例程110写入到指针条目*PP[0]的指针可以不同于响应于在另一调用点118处调用func0时来自JIT控制器102的另一补丁有效载荷122由修补例程110写入到指针条目*PP[2]的指针。由修补例程110(响应于来自JIT控制器102的补丁有效载荷122)填充到指针条目*PP[0]和*PP[2]中的指针指向函数func0的不同版本。以这种方式,函数func0的多个不同的JIT编译实例(使用不同的编译设置进行编译)可以同时存在。
更一般地,在程序106中给定函数的多个调用点处,可以在所述多个调用点中的每个调用点处包括对应的指针条目。在一些情况下,可以在所述多个调用点中的每个调用点处提供相同的指针条目(例如,PP[X]),在这种情况下,在程序106的所有调用点处对给定函数的每次调用都在写入到PP[X]中的指针处进入经修补函数(给定函数的JIT编译实例)。
在其他情况下,给定函数的每个不同调用点都可以具有不同的指针条目(例如,PP[Xj],其中,j标识相应的调用点),使得可以使用与调用点一样多的不同指针来允许单独选择要在每个调用点处使用的经修补函数。最初,可以为所有的PP[Xj]值(j=1,2,……)分配相同的指针值,以指向给定函数的一个JIT编译实例。稍后,JIT控制器102可以改变PP[Xj]值以指向给定函数的不同JIT编译实例,这取决于给定函数在程序的哪个调用点处被调用。
在一些示例中,当程序106调用与给定函数(例如,func0或func1)相关联的指针条目时,垫片模块121拦截调用并读取指针条目中的指针(其由修补例程110在JIT控制器102的控制下进行修补)。然后,垫片模块121转到由指针所指向的相应存储位置,并在针对给定函数的相应存储位置处启用对给定JIT编译实例的执行。在其他示例中,不必存在诸如垫片模块121等中间模块,并且硬件可以跳转到由指针条目中的指针所指向的函数的JIT编译实例,所述实例可以开始执行。
在一些示例中,函数144的JIT编译实例可以存储在数据存储库142(例如,数据库)中。数据存储库142可以存储在存储介质(未示出)中(使用(多个)存储设备和/或(多个)存储器设备来实施。函数144的JIT编译实例存储在填充补丁指针数组(*PP[])中的指针条目的指针所指向的相应存储位置处。
一旦执行了相应存储位置处的给定JIT编译实例,垫片模块121还启用(在125处)支持库108中的测量例程112,以使测量例程112在程序106运行时测量对给定函数的给定JIT编译实例的执行。测量数据140由测量例程112通过进程间链路120提供回JIT控制器102。例如,可以将测量数据140写入到存储器126,然后由JIT控制器102读取。测量数据140可以与函数的给定JIT编译实例(诸如在数据存储库142中)相关联。
在进一步示例中,代替使用外部检查技术(诸如使用测量例程112),在JIT控制器102的控制下,经修补函数(即,系统跳转到PP[i]中的指针时的函数,i=1至N,其中,N表示PP[]中的指针条目的数量)可以使测量指令添加到所述经修补函数。每当调用经修补函数时,所添加的测量指令都可以使经修补函数填充或更新测量结果。结果,使用作为经修补函数的JIT编译实例的一部分的内部测量指令来执行对所述函数的执行的测量。
如果未调用经修补函数,则所述经修补函数的另一个实例可能没有将测量指令添加到所述经修补函数中。从经修补函数内进行测量的该内部技术允许仅在实际调用经修补函数的时间和地点处应用执行测量的开销。另外,通过使用内部测量技术,从经修补函数内控制测量结果,从而不必使用外部测量技术,在所述外部测量技术中,可以使用程序剖析(profiling),其中,通过停止执行程序来建立测量配置文件以确定程序在函数上花费了多少时间,这在仅需要对特定经修补函数进行测量时可能是不高效的。
对于程序106对给定函数的每次调用,JIT控制器102可以根据与给定函数的相应JIT编译实例相关联的测量数据基于哪个执行得更好,从给定函数的多个JIT编译实例(如果可用)中选择给定函数的JIT编译实例。
可以在测量数据140中指示的测量结果的示例包括函数被调用多少次、函数执行花费了多长时间、函数的JIT编译实例的大小、对函数调用中函数的变量值的统计等。对函数的变量值(诸如f(x,y),其中,x和y是变量)的统计可以提供对哪些常数值更频繁地被分配给变量的指示,使得可以将所述变量设置为在请求函数f(x,y)的JIT编译时更频繁使用的常数值(或常数值范围)。
尽管图1示出了其中使用垫片模块121以允许将指针修补到补丁点数组中的指针条目中并执行对函数的JIT编译实例的执行测量的示例,但是注意,在其他示例中,可以使用其他机制来允许JIT控制器102将指针修补到补丁点数组中的指针条目中并执行对函数的JIT编译实例的执行测量。
注意,最初,当程序106开始运行时,数据存储库142中可能没有函数的JIT编译实例。在其他示例中,可以在启动时用指向使用默认编译设置编译的相应函数的JIT编译实例的默认指针来初始化补丁指针数组(PP[])中的指针条目。当在程序106中进行函数调用时,使用默认编译设置编译的相应函数的这种JIT编译实例可以最初用于对程序106中函数的调用,直到JIT控制器102开始触发对函数的更多JIT编译为止。在另一示例中,可以在启动时用指向存根例程(其不执行任何任务)的指针来初始化补丁指针数组(PP[])中的指针条目,以使函数调用暂停,直到JIT控制器102可以在指向函数的实际JIT编译实例的指针中进行修补为止。
在数据存储库142中没有由程序106调用的给定函数的JIT编译实例的示例中,JIT控制器102可以使用例如默认编译设置来请求给定函数的JIT编译。默认编译设置可以指在不满足将指示使用特定编译设置的其他标准的情况下预定义要使用的任何编译设置。
在其他示例中,JIT控制器102可以根据是否满足一个标准(或多个标准)使用编译设置来请求给定函数的JIT编译。例如,所使用的编译设置可以基于给定函数将要执行的位置。给定函数将要执行的位置可以指多个处理器中的特定处理器、多个计算节点中的特定计算节点、多个地理位置中的地理位置等。在处理器的布置(例如,处理器的网格)中,其中一些处理器与其他处理器相比对存储器的访问更快,这可能会影响要使用哪个编译设置。如果计算机系统104具有多个计算节点,则其中一些计算节点与网络的连接可能比其他计算节点具有更高的速度或更高的带宽,这可能会影响要使用哪个编译设置。如果计算机系统104具有分布在多个地理位置上的计算节点,则要执行给定函数的地理位置可能会影响要使用哪个编译设置。
前述提供了(由JIT控制器102)基于位置相关标准从多个编译设置中选择编译设置的示例。在其他示例中,JIT控制器可以基于处理器状态相关标准从多个编译设置中选择编译设置,所述处理器状态相关标准是基于处理器状态的标准。处理器的状态可能涉及处理器中的队列有多满。处理器的另一状态可能涉及处理器有多繁忙(例如,处理器的多少个核正在被积极使用,和/或处理器的多少个核处于空闲状态)。
作为另一示例,JIT控制器102可以基于计算机系统104的物理资源的物理布局来选择编译设置。例如,物理资源可以包括在特定函数的执行期间要访问的队列。队列可以处于附接到计算机系统104的特定处理器或特定计算节点的一部分的存储器中。
在其他示例中,当请求编译器130执行对函数的JIT编译时,JIT控制器102在从多个编译设置中选择编译设置时可以使用其他标准。
在进一步示例中,可以用作为程序106的另一执行实例的一部分而被创建的函数的JIT编译实例来填充数据存储库142。注意,程序106可以在不同的时间被启用,这会产生程序106的多个实例。包含在数据存储库142中的函数的JIT编译实例可以由程序106的多个实例共享。
“编译设置”可以指所请求用于编译函数的是哪个编译器选项。注意,编译器130具有多个不同的编译器选项。在一些情况下,编译设置可以包括多个编译器选项。
编译器选项的示例包括用于执行函数代码中循环展开的选项。展开循环是指用将执行循环的任务达指定次数的一系列指令替换循环,使得程序代码不必检查循环条件。不必检查循环条件可以降低处理开销,因为执行程序代码的处理器将不必执行指令并执行存储器访问以针对循环的每次迭代检查循环条件。然而,处理器必须从存储器加载以用于执行的不同指令的数量会增加,这占用了处理器内部更多的存储器空间和带宽。
其他编译器选项包括在函数的编译版本中是否使用特定类型的指令,诸如一次对多个值进行操作的向量指令。当要处理较大数量的项时,这样的指令可以加速执行,但是这种情况通常在编译时是未知的,而在运行时可以是已知的。另外,这样的指令在处理器的每个其他兼容版本上不可用,或者在处理器中的每个并行核上不可用。编译器选项的另一示例是是否针对大小进行优化,这尝试使用占用存储器中最小空间的指令来提供函数的实施方式,当程序受到存储器带宽的约束时,这可以提高整体执行速度。
对于由程序106调用的每个函数(例如,func0和func1),JIT控制器102可以请求函数的JIT编译(或JIT编译的多个实例)。
用于函数的源代码150可以存储在存储介质(未示出)中。响应于由JIT控制器102通过进程间链路134发送到编译器130的编译请求132,编译器130能够执行函数的源代码150的JIT编译。编译器130可以在与JIT控制器102相同的计算机系统或不同的计算机系统中执行。尽管图1示出了一个编译器130,但是注意,在其他示例中可以存在多个编译器130。多个编译器130可以在相应的不同处理器上并行执行,以例如使用不同的编译设置来执行给定函数的JIT编译的多个实例。
当JIT编译函数的源代码150时,编译请求132可以指定编译器130要使用的编译设置。
一旦编译器130响应于来自JIT控制器102的编译请求132而编译函数的源代码150,编译器130就通过进程间链路134向JIT控制器102发送编译响应136。编译响应136可以包括由编译器130编译的函数的JIT编译实例。
JIT控制器102可以向编译器130发送多个编译请求132,以使用相应的不同编译设置来启动函数的JIT编译的多个实例。响应于这样的编译请求132,编译器130可以使用不同的编译设置来编译函数的源代码150,以产生函数的相应的不同的JIT编译实例。
可以由JIT控制器102将由编译器130产生并由编译器130发送到JIT控制器102的函数144的JIT编译实例添加到数据存储库142中。
在一些示例中,JIT编译可能不会在由程序106调用的所有函数上执行。例如,函数选择信息152可以仅标识要对其执行JIT编译的函数的子集。函数选择信息152可以基于用户输入,或者替代性地,函数选择信息152可以包括在配置文件中。
根据本公开的一些实施方式,启动由程序106调用的函数的JIT编译的决定是由JIT控制器102相对于程序106不同步地执行的(即,JIT编译不是由程序106中的指令启动的)。结果,由于无需执行程序106的指令即可做出关于JIT编译的决定,因此可以减少从程序106进行函数调用的时间和处理资源的成本。减少所涉及的时间和所消耗的处理资源的量可以提高函数的JIT编译的效率,并且还可以减少大型计算环境中多个计算节点之间的可变性。
用于执行自适应修补的基础设施开销(包括用于JIT控制器102的资源)分摊在可以在计算节点中执行的程序106的多个实例上。换句话说,在计算节点内,程序106的每个实例不必具有一个JIT控制器102。JIT控制器102的任务、修补例程110的任务、以及测量例程112的任务可以在与程序106在其上执行的处理器分离的处理器上执行。
在一些示例中,可以使用包括与用于执行程序106的处理器分离的处理器的系统资源来找到函数的最佳JIT编译实例,诸如通过使用优化算法。优化算法可以确定给定的函数执行满足哪些标准(例如,上面所讨论的),并且可以选择函数的最佳JIT编译实例(如果先前创建了的话)或最佳编译设置。以这种方式,JIT编译操作不会减慢程序106的工作。
JIT控制器102可以通过其链接到程序的自适应链接机制支持多线程。注意,可以存在在计算机系统104中执行的程序106的多个实例(线程或进程)。由于程序106的实例数可以是动态的(即,可以随时间变化),因此对程序106的每个实例执行补丁点数组的修补可能是具有挑战性的。根据本公开的一些实施方式,在存在程序106的多个线程的示例中,程序106可以使用便携式操作系统接口(POSIX)线程应用程序编程接口(API)。POSIX线程API允许JIT控制器102知晓何时创建程序106的新实例。程序106具有在调用程序106的特定线程的情况下存在的线程局部变量(补丁点数组的指针条目)。程序106的不同线程使用不同的线程局部变量。
如上所述,程序106可以使用补丁点数组中的指针条目来调用函数。在一些示例中,不对调用执行程序106的分支,即,不停止程序106以确定跟随指针条目中的指针执行函数的JIT编译实例是否安全。程序106也不会由于测量例程112进行测量或修补例程110更新补丁指针数组中的指针条目而阻塞。
在一些示例中,补丁更新(对指针条目的修补)和测量收集可以以多种方式发生。例如,可以在不保护补丁点数组且没有阻塞(即,不获取用于更新补丁点数组的锁定)的情况下执行盲读取和写入。而且,可以在没有阻塞的情况下执行对由测量例程112获取的存储器126中的测量数据140的读取和写入。
在其他示例中,可以由辅助例程(修补例程110或测量例程112)触发处理程序,其中,所述处理程序可以执行以下任务中的任一项或某种组合:接收存储器126中补丁指针数组中的指针条目中的指针、将测量数据140写入到存储器126、将修补例程110或测量例程112的变量重定位到不同的存储器位置等。
在一些示例中,可以将函数的JIT编译实例放置在可执行的映射存储器(例如,用于存储可执行代码的存储器)中,从而使程序106的工作保持不同步。
由JIT控制器102执行的OS操作被分摊到计算节点中的程序106的多个实例上。JIT控制器102可以与OS 124交互以请求分配用于执行函数的JIT编译实例的存储器。用于这种存储器分配的OS操作执行一次,因为JIT编译实例可以在计算节点处由程序106的任意数量的实例使用。
在一些示例中,可以通过将由函数使用的输入变量设置为常数值来实现函数的更优的定制实施方式。例如,假定函数的形式为f(x,y),其中,x是输入或输出变量,并且y是在调用函数时设置的输入变量。在一些示例中,JIT控制器102可以请求编译器130编译函数f(x,K),其中,K是为y设置的常数值(或常数值范围)。如果将y设置为等于K(或常数值范围),则函数f()的JIT编译实例可以运行得更快。这在以下示例中可能是有利的:程序多次调用f(x,y),其中,y设置为等于K(或常数值范围)。然而,如果程序多次调用f(x,y)并且每次调用时y都不同,则对y设置为等于K(或常数值范围)的函数f()进行JIT编译可能不是有益的。例如,JIT控制器102可以基于函数f()的过去执行来选择K的值(或常数值范围)。注意,更一般地,可以将函数的多于一个变量设置为相应的常数值或相应的常数值范围。
更一般而言,可以在输入变量满足逻辑谓词的情况下生成函数f()的JIT编译实例。例如,满足“逻辑谓词”可以是y等于K或常数值范围的情况。作为另一示例,在上面进一步讨论的向量指令的上下文中,如果函数要处理大量元素(例如,大于阈值数)的数组,则利用使用向量指令的编译设置来编译函数可能是有益的。另一方面,如果函数要处理具有较少数量的元素(小于或等于阈值数)的数组,则使用向量指令可能会不利于执行。在该示例中,逻辑谓词将为“函数的自变量是否指示要处理的元素数量超过指定阈值?”如果满足该逻辑谓词,则可以执行使用使得产生向量指令的编译设置的JIT编译。
图2是存储有机器可读指令的非暂态机器可读或计算机可读存储介质200的框图,所述机器可读指令在执行时使系统(例如,在其中执行JIT控制器102的计算机系统)执行各种任务。
存储介质200存储有(例如,图1的JIT控制器的)JIT控制指令202。JIT控制指令202包括多个JIT编译启动指令204,所述多个JIT编译启动指令用于启动由程序调用的第一代码(例如,函数代码)的JIT编译的多个实例。对所述第一代码的JIT编译的所述多个实例的启动是在所述JIT控制指令202的控制下进行的,所述JIT控制指令在所述程序外部。所述第一代码的JIT编译的所述多个实例使用相应的不同的编译设置,并使得产生所述第一代码的相应JIT编译实例。
在一些示例中,所述JIT控制指令202在执行时使所述系统:接收与所述第一代码的所述JIT编译实例的执行有关的测量结果,并且响应于所述程序对所述第一代码的调用,基于所述测量结果来选择所述第一代码的所述JIT编译实例中的编译实例。
在一些示例中,所述程序包括用于通过调用与所述第一代码相关联的指针条目来间接调用所述第一代码的第一指令,并且其中,JIT控制指令在执行时使所述系统在所述JIT控制指令的控制下在所述程序运行时将针对所述第一代码的第一指针添加到所述指针条目中,其中,所述第一指针指向存储所述第一代码的第一JIT编译实例的存储位置。
在一些示例中,所述程序包括不同于所述第一指令的、用于通过调用与所述第一代码相关联的所述指针条目来间接调用所述第一代码的第二指令,并且其中,所述JIT控制指令在执行时使所述系统在所述JIT控制指令的控制下在所述程序运行时将针对所述第一代码的第二指针添加到所述指针条目中,其中,所述第二指针指向存储所述第一代码的第二JIT编译实例的存储位置,所述第一代码的所述第二JIT编译实例不同于所述第一代码的所述第一JIT编译实例。
在一些示例中,所述程序的执行不会因响应于所述程序对所述第一代码的调用测量所述第一代码的JIT编译实例的执行或修补针对所述第一代码的JIT编译实例的指针而被阻塞。
在一些示例中,所述JIT控制指令在执行时使所述系统:对于所述程序中对所述第一代码的调用,基于要响应于所述调用而在多个位置(例如,处理器、计算节点、地理位置等)中的哪个位置上执行所述第一代码,从所述第一代码的多个JIT编译实例中选择所述第一代码的JIT编译实例。
在一些示例中,所述JIT控制指令在执行时使所述系统:对于所述程序中对所述第一代码的调用,基于要响应于所述调用而执行所述第一代码的处理器的状态,从所述第一代码的多个JIT编译实例中选择所述第一代码的JIT编译实例。
在一些示例中,所述JIT控制指令在执行时使所述系统:对于所述程序中对所述第一代码的调用,基于在其中执行所述程序的计算机系统的物理资源的物理布局,从所述第一代码的多个JIT编译实例中选择所述第一代码的JIT编译实例。
图3是包括一个处理器302(或多个处理器)的系统300的框图。所述系统进一步包括存储介质304,所述存储介质存储有与要多次调用函数的程序308分离的JIT控制指令306。JIT控制指令306可在处理器302上执行,以便对于程序对函数的第一调用,使得执行由编译器使用第一编译设置编译的函数的第一JIT编译实例。JIT控制指令306可在处理器302上执行,以便对于程序对函数的第二调用,使得执行由编译器使用不同于第一编译设置的第二编译设置编译的函数的第二JIT编译实例。
图4是根据一些示例的过程400的流程图。例如,过程400可以由JIT控制器102执行。过程400包括维护(在402处)补丁指针数据结构(例如,图1所示的*PP[]),所述补丁指针数据结构包括与要由程序启用的相应不同函数相对应的多个指针条目。
过程400包括:对于所述程序对所述不同函数中的第一函数的调用,由与所述程序分离的控制器用指向所述第一函数的JIT编译实例的存储位置的第一指针来填充(在404处)所述指针条目中的第一指针条目。例如,这可以通过控制器将补丁有效载荷(例如,图1中的122)发送到修补例程110来执行。
过程400包括:对于所述程序对所述不同函数中的第二函数的调用,由所述控制器用指向所述第二函数的JIT编译实例的存储位置的第二指针来填充(在406处)所述指针条目中的第二指针条目。在任务404和406的每一个任务中,控制器可以基于如上进一步讨论的测量结果从相应函数(第一或第二函数)的多个JIT编译实例中选择所述相应函数的JIT编译实例。
存储介质(例如,图2中的200或图3中的304)可以包括以下各项中的任一项或某种组合:半导体存储器设备,诸如动态或静态随机存取存储器(DRAM或SRAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)和闪速存储器或其他类型的非易失性存储器设备;磁盘,诸如固定的软盘和可移动盘;另一种磁介质,包括磁带;光学介质,诸如光盘(CD)或数字视频盘(DVD);或另一类型的存储设备。注意,上文讨论的指令可以在一个计算机可读或机器可读存储介质上提供,或者可替代地,可以在分布在具有可能多个节点的大型系统中的多个计算机可读或机器可读存储介质上提供。这样的一个或多个计算机可读或机器可读存储介质被认为是物品(或制品)的一部分。物品或制品可以指任何制造的单个部件或多个部件。一个或多个存储介质可以位于运行机器可读指令的机器中、或者位于远程站点处,可以通过网络从所述远程站点下载机器可读指令以供执行。
在前述描述中,阐述了许多细节以使得理解本文中所公开的主题。然而,可以在没有这些细节中的一些细节的情况下实践实施方式。其他实施方式可以包括上文所讨论的细节的修改和变化。所附权利要求旨在覆盖这样的修改和变化。

Claims (20)

1.一种非暂态机器可读存储介质,包括即时(JIT)控制指令,所述JIT控制指令在执行时使系统进行以下操作:
启动由程序调用的第一代码的JIT编译的多个实例,其中,对所述第一代码的JIT编译的所述多个实例的启动是在所述程序外部的所述JIT控制指令的控制下进行的,所述第一代码的JIT编译的所述多个实例使用相应的不同的编译设置,并要产生所述第一代码的相应的多个JIT编译实例;
在数据存储库中存储使用各自不同的编译设置产生的所述第一代码的多个JIT编译实例;以及
响应于所述程序中的对所述第一代码的调用,从存储在所述数据存储库中的第一代码的多个JIT编译实例中选择所述第一代码的JIT编译实例,所述选择基于标准。
2.如权利要求1所述的非暂态机器可读存储介质,其中,所述JIT控制指令在执行时使所述系统进行以下操作:
接收与所述第一代码的所述多个JIT编译实例的执行有关的测量结果;并且
响应于所述程序中的对所述第一代码的调用,基于所述测量结果来,从所述第一代码的所述多个JIT编译实例当中选择所述第一代码的所述JIT编译实例。
3.如权利要求2所述的非暂态机器可读存储介质,其中,所述测量结果是在所述程序运行时获取的,并且是通过响应于基于所述程序调用所述第一代码而执行所述第一代码的JIT编译实例所启用的测量指令来获取的。
4.如权利要求1所述的非暂态机器可读存储介质,其中,所述程序包括用于通过调用在数据结构中的第一指针条目来间接调用所述第一代码的第一指令,并且其中,所述JIT控制指令在执行时使所述系统进行以下操作:
在所述JIT控制指令的控制下,在所述程序运行时,将针对所述第一代码的第一指针添加到所述第一指针条目中,其中,所述第一指针指向存储所述第一代码的第一JIT编译实例的位置。
5.如权利要求2所述的非暂态机器可读存储介质,其中,所述基于所述测量结果进行选择包括:
根据所述测量结果,基于确定所述第一代码的所述多个JIT编译实例中的哪一个提供更好的性能,从所述第一代码的所述多个JIT编译实例当中选择所述第一代码的所述JIT编译实例。
6.如权利要求4所述的非暂态机器可读存储介质,其中,所述程序包括不同于所述第一指令的、用于通过调用所述数据结构中的第二指针条目来间接调用所述第一代码的第二指令,并且其中,所述JIT控制指令在执行时使所述系统进行以下操作:
在所述JIT控制指令的控制下,在所述程序运行时,将针对所述第一代码的第二指针添加到所述第二指针条目中,其中,所述第二指针指向存储所述第一代码的第二JIT编译实例的位置,所述第一代码的所述第二JIT编译实例不同于所述第一代码的所述第一JIT编译实例。
7.如权利要求5所述的非暂态机器可读存储介质,其中,所述测量结果指示所述多个JIT编译实例中的每个JIT编译实例执行所需要的时间或者所述多个JIT编译实例中的每个JIT编译实例的大小。
8.如权利要求7所述的非暂态机器可读存储介质,其中,所述测量结果进一步指示所述多个JIT编译实例中的每个JIT编译实例被调用多少次。
9.如权利要求1所述的非暂态机器可读存储介质,其中,所述程序没有任何与所述第一代码的JIT编译有关的指令。
10.如权利要求1所述的非暂态机器可读存储介质,其中,所述程序的执行不会因响应于所述程序中的对所述第一代码的调用测量所述第一代码的JIT编译实例的执行或修补针对所述第一代码的JIT编译实例的指针而被阻塞。
11.如权利要求1所述的非暂态机器可读存储介质,其中,所述第一代码的JIT编译的所述多个实例能由所述程序的多个实例使用。
12.如权利要求1所述的非暂态机器可读存储介质,其中,所述第一代码具有输入变量,并且其中,启动所述第一代码的JIT编译的所述多个实例包括:
在所述输入变量满足逻辑谓词的情况下,启动所述第一代码的JIT编译的多个实例。
13.如权利要求1所述的非暂态机器可读存储介质,其中,所述JIT控制指令在执行时使所述系统进行以下操作:
对于所述程序中对所述第一代码的调用,基于要响应于所述调用而在多个位置中的哪个位置上执行所述第一代码,从所述第一代码的所述多个JIT编译实例当中选择所述第一代码的所述JIT编译实例。
14.如权利要求1所述的非暂态机器可读存储介质,其中,所述JIT控制指令在执行时使所述系统进行以下操作:
对于所述程序中对所述第一代码的调用,基于要响应于所述调用而执行所述第一代码的处理器的状态,从所述第一代码的所述JIT编译实例中选择所述第一代码的所述JIT编译实例。
15.如权利要求1所述的非暂态机器可读存储介质,其中,所述JIT控制指令在执行时使所述系统进行以下操作:
对于所述程序中对所述第一代码的调用,基于在其中执行所述程序的计算机系统的物理资源的物理布局,从所述第一代码的所述多个JIT编译实例当中选择所述第一代码的所述JIT编译实例。
16.一种系统,包括:
处理器;以及
非暂态存储介质,所述非暂态存储介质存储有与要多次调用函数的程序分离的即时JIT控制指令,所述JIT控制指令能在所述处理器上执行以进行以下操作:
对于所述程序对所述函数的第一调用,选择由编译器使用第一编译设置编译的所述函数的第一JIT编译实例,并且使得执行存储在存储所述函数的多个JIT编译实例的数据存储库中的所述函数的所述第一JIT编译实例;以及
对于所述程序对所述函数的第二调用,选择由所述编译器使用不同于所述第一编译设置的第二编译设置编译的所述函数的第二JIT编译实例,并且使得执行存储在所述数据存储库中的所述函数的所述第二JIT编译实例。
17.如权利要求16所述的系统,其中,所述JIT控制指令能在所述处理器上执行以进行以下操作:
对于所述函数的所述第一调用,将第一指针修补到补丁指针数据结构的第一指针条目,所述第一指针指向所述函数的所述第一JIT编译实例的存储位置,并且
对于所述函数的所述第二调用,将第二指针修补到补丁指针数据结构的所述第一指针条目,所述第二指针指向所述函数的所述第二JIT编译实例的存储位置。
18.如权利要求16所述的系统,其中,所述JIT控制指令能在所述处理器上执行以进行以下操作:
接收与所述函数的所述第一JIT编译实例和所述函数的所述第二JIT编译实例的执行测量相关联的测量数据,
基于所述测量数据为所述函数的所述第一调用选择所述函数的所述第一JIT编译实例,其中基于所述测量数据进行所述选择包括:基于根据所述测量结果确定所述函数的所述多个JIT编译实例中的哪一个提供更好的性能,从所述函数的所述多个JIT编译实例当中选择所述函数的所述第一JIT编译实例;以及
基于所述测量数据为所述函数的所述第二调用选择所述函数的所述第二JIT编译实例。
19.一种方法,包括:
通过在系统的硬件处理器上执行的即时(JIT)控制指令启动由程序调用的第一代码的多个JIT编译实例,其中,所述启动所述第一代码的多个JIT编译实例是在所述程序外部的JIT控制指令的控制下的,所述第一代码的多个JIT编译实例使用各自不同的编译设置,并且,所述第一代码的多个JIT编译实例产生所述第一代码的各自的多个JIT编译实例;
在数据存储库中存储使用各自不同的编译设置产生的所述第一代码的所述多个JIT编译实例;以及
响应于所述程序中的对所述第一代码的调用,通过所述JIT控制指令,从存储在所述数据存储库中的所述第一代码的所述多个JIT编译实例中选择所述第一代码的JIT编译实例,所述选择基于标准。
20.如权利要求19所述的方法,还包括:
通过所述JIT控制指令,接收与执行所述第一代码的多个JIT编译实例有关的测量结果,
其中,基于根据所述测量结果确定所述第一代码的所述多个JIT编译实例中的哪一个提供更好的性能,从所述第一代码的所述多个JIT编译实例当中选择所述第一代码的所述JIT编译实例。
CN202110390847.5A 2020-10-29 2021-04-12 使用不同编译设置的代码的即时jit编译实例 Active CN114428653B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/083,769 US11487565B2 (en) 2020-10-29 2020-10-29 Instances of just-in-time (JIT) compilation of code using different compilation settings
US17/083,769 2020-10-29

Publications (2)

Publication Number Publication Date
CN114428653A CN114428653A (zh) 2022-05-03
CN114428653B true CN114428653B (zh) 2024-01-02

Family

ID=81184004

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110390847.5A Active CN114428653B (zh) 2020-10-29 2021-04-12 使用不同编译设置的代码的即时jit编译实例

Country Status (3)

Country Link
US (1) US11487565B2 (zh)
CN (1) CN114428653B (zh)
DE (1) DE102021108814A1 (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104321745A (zh) * 2012-02-07 2015-01-28 泰利瑞克股份公司 用于软件应用程序的跨平台开发的环境及方法
CN105009082A (zh) * 2013-03-06 2015-10-28 高通股份有限公司 减少过多的编译时间
CN109564540A (zh) * 2016-07-31 2019-04-02 微软技术许可有限责任公司 用于jit编译器的调试工具

Family Cites Families (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7370321B2 (en) * 2002-11-14 2008-05-06 Microsoft Corporation Systems and methods to read, optimize, and verify byte codes for a multiplatform jit
US7219329B2 (en) * 2003-06-13 2007-05-15 Microsoft Corporation Systems and methods providing lightweight runtime code generation
US20070006178A1 (en) * 2005-05-12 2007-01-04 Microsoft Corporation Function-level just-in-time translation engine with multiple pass optimization
US8397225B2 (en) * 2008-04-24 2013-03-12 International Business Machines Corporation Optimizing just-in-time compiling for a java application executing on a compute node
US8539464B2 (en) * 2008-10-30 2013-09-17 International Business Machines Corporation Distributed just-in-time compilation
US8370822B2 (en) * 2008-11-20 2013-02-05 Apple Inc. Compiling techniques for providing limited accuracy and enhanced performance granularity
US9645912B2 (en) * 2008-12-01 2017-05-09 Microsoft Technology Licensing, Llc In-place function modification
US10698708B2 (en) 2009-08-04 2020-06-30 International Business Machines Corporation Optimizing just-in-time compilation in a network of nodes
US20110138374A1 (en) 2009-12-09 2011-06-09 Suprio Pal Downtime reduction for enterprise manager patching
US9038038B1 (en) 2010-06-01 2015-05-19 Google Inc. Just in time cloud compilation
US8522222B2 (en) * 2010-06-21 2013-08-27 Microsoft Corporation Tracing just-in-time compilation with pointers to local variables
US8819649B2 (en) * 2011-09-09 2014-08-26 Microsoft Corporation Profile guided just-in-time (JIT) compiler and byte code generation
US8924944B2 (en) * 2012-06-29 2014-12-30 Microsoft Corporation Implementation of distributed methods that support generic functions
US8959495B2 (en) * 2012-09-14 2015-02-17 Oracle International Corporation Unifying static and dynamic compiler optimizations in source-code bases
US9003382B2 (en) 2013-02-18 2015-04-07 Red Hat, Inc. Efficient just-in-time compilation
US9251071B2 (en) * 2013-08-30 2016-02-02 Apple Inc. Concurrent inline cache optimization in accessing dynamically typed objects
US9524178B2 (en) * 2013-12-30 2016-12-20 Unisys Corporation Defining an instruction path to be compiled by a just-in-time (JIT) compiler
US9529610B2 (en) * 2013-12-30 2016-12-27 Unisys Corporation Updating compiled native instruction paths
US9183018B2 (en) * 2013-12-30 2015-11-10 Andrew T Jennings Dynamic on/off just-in-time compilation in a dynamic translator using instruction code translation
US9213563B2 (en) * 2013-12-30 2015-12-15 Unisys Corporation Implementing a jump instruction in a dynamic translator that uses instruction code translation and just-in-time compilation
US9459849B2 (en) 2014-01-17 2016-10-04 International Business Machines Corporation Adaptive cloud aware just-in-time (JIT) compilation
US9292270B2 (en) * 2014-03-27 2016-03-22 Microsoft Technology Licensing, Llc Supporting dynamic behavior in statically compiled programs
US9286085B2 (en) * 2014-06-27 2016-03-15 International Business Machines Corporation Correlating class loader objects across execution environments
US20160026484A1 (en) * 2014-07-25 2016-01-28 Soft Machines, Inc. System converter that executes a just in time optimizer for executing code from a guest image
US9733909B2 (en) * 2014-07-25 2017-08-15 Intel Corporation System converter that implements a reordering process through JIT (just in time) optimization that ensures loads do not dispatch ahead of other loads that are to the same address
US9298432B1 (en) * 2015-03-12 2016-03-29 STEALTHbits Technologies, Inc. Systems and methods for performing hooking in a jitted environment
US10747511B2 (en) * 2015-04-28 2020-08-18 Microsoft Technology Licensing, Llc Compiler optimization of coroutines
US9916142B2 (en) * 2015-10-15 2018-03-13 International Business Machines Corporation Reducing call overhead through function splitting
US10303885B2 (en) * 2016-03-02 2019-05-28 Apple Inc. Methods and systems for securely executing untrusted software
US10795989B2 (en) * 2017-03-05 2020-10-06 Fortinet, Inc. Secure just-in-time (JIT) code generation
US10628188B2 (en) * 2017-08-24 2020-04-21 Apptimize Llc Disabling just-in-time translation for application functions
US20190079972A1 (en) * 2017-09-13 2019-03-14 Electronics And Telecommunications Research Institute System and method for parallel query processing based on jit compilation
US10108442B1 (en) * 2017-09-18 2018-10-23 International Business Machines Corporation Optimization and affinity for hypervisor-based just-in-time translator
US10289395B2 (en) * 2017-10-17 2019-05-14 International Business Machines Corporation Performing a compiler optimization pass as a transaction
US10877757B2 (en) * 2017-11-14 2020-12-29 Nvidia Corporation Binding constants at runtime for improved resource utilization
US11029929B2 (en) * 2019-01-24 2021-06-08 Red Hat, Inc. Using emulation to improve startup time for just-in-time compilation

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104321745A (zh) * 2012-02-07 2015-01-28 泰利瑞克股份公司 用于软件应用程序的跨平台开发的环境及方法
CN105009082A (zh) * 2013-03-06 2015-10-28 高通股份有限公司 减少过多的编译时间
CN109564540A (zh) * 2016-07-31 2019-04-02 微软技术许可有限责任公司 用于jit编译器的调试工具

Also Published As

Publication number Publication date
CN114428653A (zh) 2022-05-03
US20220137994A1 (en) 2022-05-05
DE102021108814A1 (de) 2022-05-05
US11487565B2 (en) 2022-11-01

Similar Documents

Publication Publication Date Title
US9280338B1 (en) Dynamic application updates
Virouleau et al. Evaluation of OpenMP dependent tasks with the KASTORS benchmark suite
US7805582B2 (en) Method of managing memory in multiprocessor system on chip
US20110307858A1 (en) Pre-compiling hosted managed code
US20130332711A1 (en) Systems and methods for efficient scheduling of concurrent applications in multithreaded processors
US8069311B2 (en) Methods for prefetching data in a memory storage structure
Tillenius Superglue: A shared memory framework using data versioning for dependency-aware task-based parallelization
US20140101278A1 (en) Speculative prefetching of remote data
JP2019049843A (ja) 実行ノード選定プログラム、実行ノード選定方法及び情報処理装置
US8954969B2 (en) File system object node management
US8510529B2 (en) Method for generating program and method for operating system
US10459702B2 (en) Flow control for language-embedded programming in general purpose computing on graphics processing units
US20150081988A1 (en) Method and system for parallel program execution
US10496433B2 (en) Modification of context saving functions
CN102117224B (zh) 一种面向多核处理器的操作系统噪声控制方法
CN114428653B (zh) 使用不同编译设置的代码的即时jit编译实例
US11645124B2 (en) Program execution control method and vehicle control device
Prokopec et al. Near optimal work-stealing tree scheduler for highly irregular data-parallel workloads
US20090320036A1 (en) File System Object Node Management
WO2022048191A1 (en) Method and apparatus for reusable and relative indexed register resource allocation in function calls
KR101334189B1 (ko) 멀티 프로세서 시스템 온 칩에서의 메모리 관리 방법
Tousimojarad et al. A parallel task-based approach to linear algebra
Avni et al. Abort free semantictm by dependency aware scheduling of transactional instructions
Sbîrlea et al. The flexible preconditions model for macro-dataflow execution
Menshchikov Scalable semantic virtual machine framework for language-agnostic static analysis

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
GR01 Patent grant
GR01 Patent grant