CN115048184A - 一种解释器指令的优化执行方法和装置 - Google Patents
一种解释器指令的优化执行方法和装置 Download PDFInfo
- Publication number
- CN115048184A CN115048184A CN202210696227.9A CN202210696227A CN115048184A CN 115048184 A CN115048184 A CN 115048184A CN 202210696227 A CN202210696227 A CN 202210696227A CN 115048184 A CN115048184 A CN 115048184A
- Authority
- CN
- China
- Prior art keywords
- instruction
- branch
- interpreter
- code
- instructions
- 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
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/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
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)
Abstract
本申请提供了一种解释器指令的优化执行方法、装置、计算设备和计算机可读存储介质,在该方法中,在自定义解释器中为每个需要初始化的解释器指令在解释分支中生成两个分支指令,其中第一分支指令的代码逻辑包括初始化代码,第二分支指令的代码逻辑不包括初始化代码;当第一分支指令执行完毕进入下一条指令之前,将解释器的当前指令号修改为第二分支指令的指令号,因此当解释器再次对热更新的相同代码进行解释执行时,将直接执行没有初始化代码的指令,从而极大的加快了解释器的执行速度。
Description
技术领域
本申请涉及计算机编译技术领域,特别涉及一种解释器指令的优化执行方法、装置、计算设备和计算机可读存储介质。
背景技术
在申请人的在先申请CN 202210078151.3中,提出了一种用于Unity平台的热更新方法和装置,在该申请中通过对IL2CPP工具进行自定义改造以及为IL2CPP工具增加自定义解释器,从而实现了一种新的热更新架构,将热更新程序集和主程序加载到同一运行时中。在该方案中,还存在如下场景,在传统的解释器中,部分指令在执行时需要进行初始化操作,这些解释器并未对此类型的指令进行优化,导致再次执行时需要重复初始化,造成了无谓的开销。
发明内容
有鉴于此,本申请例提供了一种解释器指令的优化执行方法、装置、计算设备和计算机可读存储介质,以解决现有技术中存在的技术缺陷。
根据本申请实施例的第一方面,提供了一种解释器指令的优化执行方法,包括:
获取需要进行初始化的解释器指令;
为每个所述需要初始化的解释器指令在解释分支中生成两个分支指令,其中第一分支指令的代码逻辑包括初始化代码,第二分支指令的代码逻辑不包括初始化代码;
当第一分支指令执行完毕进入下一条指令之前,将解释器的当前指令号修改为第二分支指令的指令号。
根据本申请实施例的第二方面,提供了一种解释器指令的优化执行装置,包括:
获取单元,用于获取需要进行初始化的解释器指令;
分支单元,用于为每个所述需要初始化的解释器指令在解释分支中生成两个分支指令,其中第一分支指令的代码逻辑包括初始化代码,第二分支指令的代码逻辑不包括初始化代码;
替换单元,用于当第一分支指令执行完毕进入下一条指令之前,将解释器的当前指令号修改为第二分支指令的指令号。
根据本申请实施例的第三方面,提供了一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现所述解释器指令的优化执行方法的步骤。
根据本申请实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现所述解释器指令的优化执行方法的步骤。
通过本申请实施例中的方法和装置,在自定义解释器的解释分支中对需要进行初始化的指令定义了2个分支,当具有初始化的指令的分支执行完毕后,将当前的指令号修改为没有初始化代码的另一个指令的指令号。因此当解释器再次对热更新的相同代码进行解释执行时,将直接执行没有初始化代码的指令,从而极大的加快了解释器的执行速度。
附图说明
图1是本申请实施例提供的计算设备的结构框图;
图2是本申请实施例提供的一种程序优化执行方法的流程示意图;
图3是本申请实施例提供的一种程序优化执行装置的结构示意图;
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
在本申请一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请一个或多个实施例。在本申请一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本申请一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“响应于确定”。
在本申请中,提供了一种程序优化执行方法及装置、计算设备和计算机可读存储介质,在下面的实施例中逐一进行详细说明。
图1示出了根据本申请一实施例的计算设备100的结构框图。该计算设备100的部件包括但不限于存储器110和处理器120。处理器120与存储器110通过总线130相连接,数据库150用于保存数据。
计算设备100还包括接入设备140,接入设备140使得计算设备100能够经由一个或多个网络160通信。这些网络的示例包括公用交换电话网(PSTN)、局域网(LAN)、广域网(WAN)、个域网(PAN)或诸如因特网的通信网络的组合。接入设备140可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC))中的一个或多个,诸如IEEE802.11无线局域网(WLAN)无线接口、全球微波互联接入(Wi-MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC)接口,等等。
在本申请的一个实施例中,计算设备100的上述部件以及图1中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图1所示的计算设备结构框图仅仅是出于示例的目的,而不是对本申请范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
计算设备100可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或PC的静止计算设备。计算设备100还可以是移动式或静止式的服务器。
在Unity开发平台中,IL2CPP是一种新的脚本后处理(Scripting Backend)方式,针对平台编译输出的IL(中间语言)进行处理,将IL语言转换为静态的C++代码,然后再由各个平台的C++编译器直接编译成能执行的原生汇编代码,从而实现Unity的跨平台开发。这种方式除了执行效率快以外,还可以利用各个平台的C++编译器对代码执行编译期优化,这样可以进一步减小最终游戏的尺寸并提高游戏运行速度,因此,几乎所有基于Unity的开发过程都使用了IL2CPP工具。
其中,IL2CPP主要由两部分组成:
·AOT(Ahead Of Time)静态编译编译器(il2cpp.exe);
·运行时库(libil2cpp);
AOT编译器将IL转换为C++代码,再交给各平台的C++编译器进行编译,由于使用的是AOT静态编译,因此在编译时就必须完全确定需要用到的类型;运行时库则会提供诸如垃圾回收、线程/文件获取、内部调用直接修改托管数据结构的原生代的服务与抽象。
在申请的人在先申请CN 202210078151.3中,通过为IL2CPP工具添加IL解释器的方式使得IL2CPP工具具备了AOT编译器、运行时环境和IL解释器功能,具有了多个不同平台的编译和热更新基础。其中,对于无需更新的代码使用AOT静态编译成C++代码,进而被目标平台编译为本地可执行程序;对于热更新程序集中的代码,则通过解释器进行解释执行。
在传统的解释器方案中,部分指令,例如stsfld,在第一次执行的时候需要做某些初始化操作,当再次执行这些指令时,其实不再需要执行这些操作。但在这些解释器中,并未对这类指令进行优化,这些指令再次执行时还需要进行重复的初始化检查工作,影响了解释器的执行效率。
因此,在本申请实施例中,为了解决上述问题,提出了一种解释器指令的优化执行方法和装置,使得解释器后续再次执行这些指令时,不再需要执行重复的操作。
说明书附图1中的处理器120可以执行图2所示的程序优化执行方法中的步骤。图2中示出了实现解释器指令的优化执行方法的流程图,包括步骤202至步骤206。
步骤202:获取需要进行初始化的解释器指令;
在该步骤中,获取解释器指令中常见的需要进行初始化的指令,例如ldsfld指令、stsfld指令等。其中,ldsfld指令负责将静态字段的值推送到计算堆栈上,stsfld指令负责用来自计算堆栈的值替换静态字段的值。
本领域技术人员应当知晓,上述指令仅为例举而非穷举,解释器中存在多种需要进行初始化的指令,在此不一一列举。
步骤204:为每个需要初始化的解释器指令在解释分支中生成两个分支指令,其中第一分支指令的代码逻辑包括初始化代码,第二分支指令的代码逻辑不包括初始化代码。
在解释器中,switch-case结构是常见的,通常解释器在switch进行分支判断。在一种可行的实施方式中,根据指令号的类型进入对应的case,其类型根据指令的类型进行自定义,包括但不限于:
在一种可行的实施方式中,为每个需要初始化的解释器指令在解释分支中生成两个指令。例如,对于ldsfld指令,在解释器分支中生成两个分支指令,
其中,switch语句的表达式为对热更新程序集代码进行指令翻译后的当前指令号。
进一步的,在上述第一分支指令Ldsfld_check_init中,进行常规的指令执行过程,其具有完整的带检查初始化的代码逻辑。
在上述第二分支指令Ldsfld_not_check中,在完整的代码逻辑中去掉初始化代码。
本领域技术人员应当知晓,除了可以使用switch-case结构进行指令的判断外,还可以使用诸如if-else语句等,在此不一一列举。
步骤206:当第一分支指令执行完毕进入下一条指令之前,将解释器的当前指令号修改为第二分支指令的指令号。
在一种可行的实施方式中,当上述第一指令执行完毕进入到下一条指令之前,将解释器的当前指令号修改为第二分支指令。
即通过上述下划线所指示的代码将当前指令号ip从Ldsfld_check_init替换为Ldsfld_not_check。由于指令集是根据热更新代码中的函数转化而来,因此,当下次解释执行热更新代码中的相同函数时,解释器将根据指令号执行第二分支指令Ldsfld_not_check,从而不再需要进行初始化操作。
在上述实施方式中,热更新的代码与主程序代码在同一运行时中无缝运行,其中,对于无需更新的主程序代码通过AOT静态编译本地可执行程序,热更新程序集中的代码则通过解释器进行解释执行;传统的解释器在执行指令时并不对指令中的初始化过程进行优化,每执行一次指令都进行一次初始化过程,降低了解释器的执行速度,为了对此进行改进,在本申请的实施例中,在自定义解释器的解释分支中对需要进行初始化的指令定义了2个分支,当具有初始化的指令的分支执行完毕后,将当前的指令号修改为没有初始化代码的另一个指令的指令号。因此当解释器再次对热更新的相同代码进行解释执行时,将直接执行没有初始化代码的指令,从而很大程度上提高了解释器的执行性能,例如,避免了初始化检查可能来带的CPU分支预测失败对性能的大幅拖累。
与上述方法实施例相对应,本申请还提供了一种解释器指令的优化执行装置的实施例,图3示出了本申请一个实施例的一种解释器指令的优化执行装置的结构示意图。如图3所示,该装置包括:
获取单元,用于获取需要进行初始化的解释器指令;
分支单元,用于为每个所述需要初始化的解释器指令在解释分支中生成两个分支指令,其中第一分支指令的代码逻辑包括初始化代码,第二分支指令的代码逻辑不包括初始化代码;
替换单元,用于当第一分支指令执行完毕进入下一条指令之前,将解释器的当前指令号修改为第二分支指令的指令号。
上述为本实施例的一种解释器指令的优化执行装置的示意性方案。需要说明的是,该解释器指令的优化执行装置的技术方案与上述的解释器指令的执行方法的技术方案属于同一构思,该解释器指令的优化执行装置的技术方案未详细描述的细节内容,均可以参见上述解释器指令的优化执行方法的技术方案的描述。
本申请一实施例中还提供一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现所述的解释器指令的优化执行方法的步骤。
上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的解释器指令的优化执行方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述解释器指令的优化执行方法的技术方案的描述。
本申请一实施例还提供一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现如前所述解释器指令的优化执行方法的步骤。
上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的解释器指令的优化执行方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述解释器指令的优化执行方法的技术方案的描述。
上述对本申请特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上公开的本申请优选实施例只是用于帮助阐述本申请。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本申请的内容,可作很多的修改和变化。本申请选取并具体描述这些实施例,是为了更好地解释本申请的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本申请。本申请仅受权利要求书及其全部范围和等效物的限制。
Claims (10)
1.一种解释器指令的优化执行方法,其特征在于,包括:
获取需要进行初始化的解释器指令;
为每个所述需要初始化的解释器指令在解释分支中生成两个分支指令,其中第一分支指令的代码逻辑包括初始化代码,第二分支指令的代码逻辑不包括初始化代码;
当第一分支指令执行完毕进入下一条指令之前,将解释器的当前指令号修改为第二分支指令的指令号。
2.根据权利要求1所述的方法,其中,所述解释分支为switch-case结构的分支。
3.根据权利要求2所述的方法,其中,所述switch语句的表达式为对热更新程序集代码进行指令翻译后的当前指令号。
4.根据权利要求3所述的方法,其中,在对热更新程序集代码进行指令翻译时,将所述热更新程序集代码首先翻译为与之对应的第一分支指令。
5.根据权利要求1所述的方法,其中,在为所述需要初始化的解释器指令在解释分支中生成两个分支指令后,对热更新程序集中的代码进行解释执行。
6.一种解释器指令的优化执行装置,其特征在于,包括:
获取单元,用于获取需要进行初始化的解释器指令;
分支单元,用于为每个所述需要初始化的解释器指令在解释分支中生成两个分支指令,其中第一分支指令的代码逻辑包括初始化代码,第二分支指令的代码逻辑不包括初始化代码;
替换单元,用于当第一分支指令执行完毕进入下一条指令之前,将解释器的当前指令号修改为第二分支指令的指令号。
7.根据权利要求5所述的装置,其中,所述解释分支为switch-case结构的分支。
8.根据权利要求6所述的装置,其中,所述switch语句的表达式为对热更新程序集代码翻译后的当前指令号。
9.一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,其特征在于,所述处理器执行所述指令时实现权利要求1-4任意一项所述方法的步骤。
10.一种计算机可读存储介质,其存储有计算机指令,其特征在于,该指令被处理器执行时实现权利要求1-4任意一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210696227.9A CN115048184A (zh) | 2022-06-20 | 2022-06-20 | 一种解释器指令的优化执行方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210696227.9A CN115048184A (zh) | 2022-06-20 | 2022-06-20 | 一种解释器指令的优化执行方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115048184A true CN115048184A (zh) | 2022-09-13 |
Family
ID=83163955
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210696227.9A Pending CN115048184A (zh) | 2022-06-20 | 2022-06-20 | 一种解释器指令的优化执行方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115048184A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116467221A (zh) * | 2023-06-16 | 2023-07-21 | 荣耀终端有限公司 | 一种基于解释器的插桩方法、系统及相关电子设备 |
-
2022
- 2022-06-20 CN CN202210696227.9A patent/CN115048184A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116467221A (zh) * | 2023-06-16 | 2023-07-21 | 荣耀终端有限公司 | 一种基于解释器的插桩方法、系统及相关电子设备 |
CN116467221B (zh) * | 2023-06-16 | 2024-04-02 | 荣耀终端有限公司 | 一种基于解释器的插桩方法、系统及相关电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP0718760B1 (en) | Method and apparatus for generating platform-standard object files containing machine-independent code | |
US8239823B2 (en) | Generating libraries for reflection without project compilation | |
CN107193544B (zh) | 一种应用程序组件化开发方法及装置 | |
US10175965B2 (en) | Multiphased profile guided optimization | |
CN105100191A (zh) | 一种云编译实现Java应用安装的方法、装置及系统 | |
CN107077379B (zh) | 一种虚拟机创建方法和装置 | |
CN113283613B (zh) | 深度学习模型的生成方法、优化方法、装置、设备及介质 | |
CN109739508B (zh) | 源代码编译方法、装置、系统及存储介质 | |
CN114816417B (zh) | 一种交叉编译方法、装置、计算设备及存储介质 | |
CN114115964B (zh) | 一种用于Unity的热更新方法、装置、计算设备及计算机可读存储介质 | |
US20220172044A1 (en) | Method, electronic device, and computer program product for deploying machine learning model | |
CN111625279A (zh) | 基于动态链接库的动静融合二进制翻译方法及系统 | |
CN115048184A (zh) | 一种解释器指令的优化执行方法和装置 | |
CN105988854A (zh) | 动态编译方法及装置 | |
CN116594622A (zh) | 基于类型推导与数据流分析的Python程序编译方法及系统 | |
CN113934632A (zh) | 代码检测方法及装置 | |
US7685565B1 (en) | Run time reconfiguration of computer instructions | |
CN111596970B (zh) | 动态库延迟加载方法、装置、设备和存储介质 | |
CN114443052B (zh) | 一种il指令运行时的动态特例化方法和装置 | |
CN115794162A (zh) | 一种用于在热更新时对差分更新进行优化的方法和装置 | |
KR102702067B1 (ko) | 모바일 애플리케이션의 다유형 호출 그래프 생성 방법, 이를 수행하기 위한 기록매체 및 장치 | |
CN113626035B (zh) | 基于tvm面向risc-v设备的神经网络编译方法 | |
CN113220327B (zh) | 智能合约升级方法及区块链系统 | |
CN114594981B (zh) | 一种用于在热更新时解决泛型兼容性问题的方法和装置 | |
CN114461343A (zh) | 一种il指令的静态优化方法和装置 |
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 |