CN103106097A - 一种即时编译系统中的栈运算优化方法 - Google Patents
一种即时编译系统中的栈运算优化方法 Download PDFInfo
- Publication number
- CN103106097A CN103106097A CN2013100781514A CN201310078151A CN103106097A CN 103106097 A CN103106097 A CN 103106097A CN 2013100781514 A CN2013100781514 A CN 2013100781514A CN 201310078151 A CN201310078151 A CN 201310078151A CN 103106097 A CN103106097 A CN 103106097A
- Authority
- CN
- China
- Prior art keywords
- stack
- overflow
- optimization method
- new dimension
- vector registor
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供了一种即时编译系统中的栈运算优化方法。采用向量寄存器构成的全局操作数栈,剔除了栈帧中的局部操作数栈,节省了相关开销。为执行引擎的模板表引入了一个新维度,用于指示操作数栈栈顶在向量寄存器文件中位置;分配一个寄存器用来指示溢出区操作数栈的栈顶地址;在每个Java线程初始化时,为溢出区操作数栈分配一个页面存放溢出数据,并且将溢出页面尾地址记录在线程局部缓存中。
Description
技术领域
本发明涉及计算机技术领域,更具体地说,本发明涉及一种即时编译系统中的栈运算优化方法。
背景技术
在Java编程语言和环境中,即时编译(JIT compiler,just-in-timecompiler)系统是一个把Java的字节码(包括需要被解释的指令的程序)转换成可以直接发送给处理器的指令的程序。当写好一个Java程序后,源语言的语句将由Java编译器编译成字节码,而不是编译成与某个特定的处理器硬件平台对应的指令代码(比如,Intel的Pentium微处理器或IBM的System/390处理器)。字节码是可以发送给任何平台并且能在那个平台上运行的独立于平台的代码。
现有的即时编译系统,其运算过程的中间表示,一般都是基于操作数栈的,且将操作数栈实现为方法栈帧的一个部分。方法栈帧通常包含局部变量区、信息保留区和操作数栈三个部分,局部变量区存储方法的局部变量,信息保留区记录方法调用返回时需要保留恢复的寄存器内容,操作数栈为方法计算过程提供操作数。由于操作数栈属于方法栈帧,因此当发生方法调用时,首先需要将调用者(caller)传递给被调用者(callee)的参数从将调用者caller栈帧的操作数栈中弹出,存入被调用者callee栈帧的局部变量区,然后被调用者callee才能开始执行,且执行过程需要不断的对局部变量区和操作数栈进行访存操作。
上述栈帧设计存在大量的访存操作。具体来说,对方法调用类指令,需要将参数从将调用者caller的操作数栈拷贝到被调用者callee的局部变量区;对计算类指令,需要访问操作数栈以读取操作数,以及将计算结果写入操作数栈。
发明内容
本发明所要解决的技术问题是针对现有技术中存在上述缺陷,提供一种即时编译系统中的栈运算优化方法,其能够避免即时编译系统实现中计算类指令的访存操作,提高即时编译系统实现的执行效率。
根据本发明,提供了一种即时编译系统中的栈运算优化方法,其包括:
采用由变量区和方法信息保留区构成的全局操作数栈,所述全局操作数栈是线程相关的,且处于向量寄存器文件中;
为执行引擎的模板表引入了一个新维度,用于指示操作数栈栈顶在向量寄存器文件中位置;
分配一个寄存器用来指示溢出区操作数栈的栈顶地址;
在每个Java线程初始化时,为溢出区操作数栈分配一个页面存放溢出数据,并且将溢出页面尾地址记录在线程局部缓存中。
优选地,所述即时编译系统的压栈过程包括:
第一压栈步骤:初始化新维度值为向量寄存器能够提供的最大槽数,初始化寄存器为溢出页面尾地址;
第二压栈步骤:判断新维度值是否大于0;
第三压栈步骤:如果新维度不大于0,则将待压栈数据存入寄存器指向的地址,同时寄存器减一个槽大小,指向下一个可用位置;
第四压栈步骤:如果新维度大于0,则将待压栈数据存入新维度值指示的向量寄存器位置,同时新维度值递减,指向下一个可用的向量寄存器位置。
优选地,所述即时编译系统的弹栈过程的包括:
第一弹栈步骤:判断寄存器是否等于溢出页面尾地址;
第二弹栈步骤:如果寄存器与溢出页面尾地址相等,则从新维度值指示的向量寄存器位置弹出数据,同时新维度值递增;
第三弹栈步骤:如果寄存器与溢出页面尾地址不等,从寄存器指示的地址读出数据,同时将寄存器减一个槽大小。
根据本发明的即时编译系统中的栈运算优化方法能够避免即时编译系统实现中计算类指令的访存操作,提高即时编译系统实现的执行效率,同时避免数据从向量寄存器文件溢出的情况,因此本发明提出的基于向量寄存器文件的全局操作数栈的栈帧设计可以显著提高时编译系统的执行性能。
附图说明
结合附图,并通过参考下面的详细描述,将会更容易地对本发明有更完整的理解并且更容易地理解其伴随的优点和特征,其中:
图1示意性地示出了根据本发明优选实施例的即时编译系统的压栈过程的流程图。
图2示意性地示出了根据本发明优选实施例的即时编译系统的弹栈过程的流程图。
需要说明的是,附图用于说明本发明,而非限制本发明。注意,表示结构的附图可能并非按比例绘制。并且,附图中,相同或者类似的元件标有相同或者类似的标号。
具体实施方式
为了使本发明的内容更加清楚和易懂,下面结合具体实施例和附图对本发明的内容进行详细描述。
本发明提出了全局操作数栈的概念。基于全局操作数栈的栈帧结构只需要包括局部变量区和方法信息保留区两个部分,而不包括操作数栈这个部分。同时,本发明利用向量寄存器文件实现全局操作数栈。
现有技术一般不采用向量寄存器文件实现全局操作数栈,这是因为以向量寄存器文件实现全局操作数栈存在几个问题。
首先是执行引擎的实现问题。现有的执行引擎实现的是方法相关的操作数栈,且操作数栈在内存中。与之不同的是,本发明提出的全局操作数栈是线程相关的,且处于向量寄存器文件中。
第二个问题是溢出问题,当全局操作数栈的深度大于向量寄存器文件所能提供的槽(slot)数目时,就称为溢出,现有执行引擎不存在这个问题,因为它的操作数栈就在内存中,而本发明需要考虑。
下面将以Java虚拟机为例说明针对本发明提出方法的执行引擎的实现方法。
现有Java虚拟机执行引擎在初始化过程中为每条字节码创建一个模板,该模板有多个入口,对应操作数栈的栈顶状态(TosState)。所有模板构成一个模板表,该表以字节码序号和栈顶状态(TosState)构成二维索引。与之不同的是,本发明需要为执行引擎的模板表引入了一个新维度TosPos,用于指示操作数栈栈顶在向量寄存器文件中位置。具体地说,设向量寄存器文件构成的全局操作数栈有n个槽,则新维度TosPos的取值范围是n~0。其中,更具体地说,n表示向量寄存器还未使用,0表示向量寄存器已满,即将溢出。
为解决溢出问题,需分配一个寄存器(设为寄存器s0)用来指示溢出区操作数栈(当全局操作数栈的深度大于向量寄存器文件所能提供的槽数目时超出部分所处的数栈区域)的栈顶地址;并且在每个Java线程初始化时,为溢出区操作数栈分配一个页面存放溢出数据,并且将溢出页面尾地址(设为addSpillPage)记录在线程局部缓存中。
并且,在压栈过程的开始可将溢出页面尾地址设置为寄存器s0的初值,而且在压栈过程的开始可将化寄存器s0初始化为溢出页面尾地址addSpillPage;这将在下文予以描述。
图1示意性地示出了根据本发明优选实施例的即时编译系统的压栈过程的流程图。如图1所示,根据本发明优选实施例的即时编译系统的压栈过程包括:
第一压栈步骤S11:初始化新维度TosPos值为向量寄存器能够提供的最大槽数n,初始化寄存器s0为溢出页面尾地址addSpillPage;
第二压栈步骤S12:判断新维度TosPos值是否大于0;
第三压栈步骤S13:如果新维度TosPos不大于0(说明向量寄存器已满),则将待压栈数据存入寄存器s0指向的地址,同时寄存器s0减一个槽大小,指向下一个可用位置;
第四压栈步骤S14:如果新维度TosPos大于0(说明向量寄存器仍由可用空间),则将待压栈数据存入新维度TosPos值指示的向量寄存器位置,同时新维度TosPos值递减,指向下一个可用的向量寄存器位置。
随后执行后续处理。
图2示意性地示出了根据本发明优选实施例的即时编译系统的弹栈过程的流程图。如图1所示,根据本发明优选实施例的即时编译系统的弹栈过程的包括:
第一弹栈步骤S21:判断寄存器s0是否等于溢出页面尾地址addSpillPage;
第二弹栈步骤S22:如果寄存器与溢出页面尾地址相等(说明栈顶在向量寄存器中),则从新维度TosPos值指示的向量寄存器位置弹出数据,同时新维度TosPos值递增;
第三弹栈步骤S23:如果寄存器与溢出页面尾地址不等(说明栈顶在溢出页中),从寄存器s0指示的地址读出数据,同时将寄存器s0减一个槽大小。
随后执行后续处理。
根据本发明实施例的即时编译系统中的栈运算优化方法能够避免即时编译系统实现中计算类指令的访存操作,提高即时编译系统实现的执行效率,同时避免数据从向量寄存器文件溢出的情况,因此本发明提出的基于向量寄存器文件的全局操作数栈的栈帧设计可以显著提高时编译系统的执行性能。
此外,需要说明的是,除非特别指出,否则说明书中的术语“第一”、“第二”、“第三”等描述仅仅用于区分说明书中的各个组件、元素、步骤等,而不是用于表示各个组件、元素、步骤之间的逻辑关系或者顺序关系等。
可以理解的是,虽然本发明已以较佳实施例披露如上,然而上述实施例并非用以限定本发明。对于任何熟悉本领域的技术人员而言,在不脱离本发明技术方案范围情况下,都可利用上述揭示的技术内容对本发明技术方案作出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。
Claims (3)
1.一种即时编译系统中的栈运算优化方法,其特征在于包括:
由向量寄存器构成全局操作数栈,全局操作数栈是线程相关的;
采用由变量区和方法信息保留区构成的栈帧,剔除了局部操作数栈,避免了相关访存开销;
为执行引擎的模板表引入了一个新维度,用于指示操作数栈栈顶在向量寄存器文件中位置;
分配一个特定寄存器用来指示溢出区操作数栈的栈顶地址;
在每个Java线程初始化时,为溢出区操作数栈分配一个页面存放溢出数据,并且将溢出页面尾地址记录在线程局部缓存中。
2.根据权利要求1所述的即时编译系统中的栈运算优化方法,其特征在于,所述即时编译系统的压栈过程包括:
第一压栈步骤:初始化新维度值为向量寄存器能够提供的最大槽数,初始化特定寄存器为溢出页面尾地址;
第二压栈步骤:判断新维度值是否大于0;
第三压栈步骤:如果新维度不大于0,则将待压栈数据存入特定寄存器指向的地址,同时特定寄存器值减一个槽大小,指向下一个可用位置;
第四压栈步骤:如果新维度大于0,则将待压栈数据存入新维度值指示的向量寄存器位置,同时新维度值递减,指向下一个可用的向量寄存器位置。
3.根据权利要求1或2所述的即时编译系统中的栈运算优化方法,其特征在于,所述即时编译系统的弹栈过程的包括:
第一弹栈步骤:判断特定寄存器是否等于溢出页面尾地址;
第二弹栈步骤:如果特定寄存器与溢出页面尾地址相等,则从新维度值指示的向量寄存器位置弹出数据,同时新维度值递增;
第三弹栈步骤:如果特定寄存器与溢出页面尾地址不等,从寄存器指示的地址读出数据,同时将寄存器减一个槽大小。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310078151.4A CN103106097B (zh) | 2013-03-12 | 2013-03-12 | 一种即时编译系统中的栈运算优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310078151.4A CN103106097B (zh) | 2013-03-12 | 2013-03-12 | 一种即时编译系统中的栈运算优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103106097A true CN103106097A (zh) | 2013-05-15 |
CN103106097B CN103106097B (zh) | 2016-02-10 |
Family
ID=48313981
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310078151.4A Active CN103106097B (zh) | 2013-03-12 | 2013-03-12 | 一种即时编译系统中的栈运算优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103106097B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107222325A (zh) * | 2016-03-22 | 2017-09-29 | 中兴通讯股份有限公司 | 一种虚拟网络的生成方法和装置 |
CN110688329A (zh) * | 2019-09-06 | 2020-01-14 | 无锡江南计算技术研究所 | 一种可同时支持多套Cache数据私有段动态设置的方法 |
CN111580826A (zh) * | 2020-04-30 | 2020-08-25 | 腾讯科技(深圳)有限公司 | 机器学习模型的编译优化方法和装置 |
CN112882695A (zh) * | 2021-03-02 | 2021-06-01 | 百果园技术(新加坡)有限公司 | 传参方法、装置、计算机设备及存储介质 |
WO2022126710A1 (zh) * | 2020-12-14 | 2022-06-23 | 杭州趣链科技有限公司 | 一种字节码执行方法、字节码执行装置及终端设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020010733A1 (en) * | 2000-03-16 | 2002-01-24 | Yosuke Baba | Data processing device equipped with a thread switching circuit |
CN1348561A (zh) * | 1999-04-22 | 2002-05-08 | 关一 | 计算机系统 |
CN102681866A (zh) * | 2011-11-22 | 2012-09-19 | 飞天诚信科技股份有限公司 | 一种运行Java程序的方法和装置 |
-
2013
- 2013-03-12 CN CN201310078151.4A patent/CN103106097B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1348561A (zh) * | 1999-04-22 | 2002-05-08 | 关一 | 计算机系统 |
US20020010733A1 (en) * | 2000-03-16 | 2002-01-24 | Yosuke Baba | Data processing device equipped with a thread switching circuit |
CN102681866A (zh) * | 2011-11-22 | 2012-09-19 | 飞天诚信科技股份有限公司 | 一种运行Java程序的方法和装置 |
Non-Patent Citations (1)
Title |
---|
苏超云: "实时Java平台的配套软件工具包设计及实现", 《中国优秀硕士学位论文全文数据库》, no. 3, 15 March 2011 (2011-03-15) * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107222325A (zh) * | 2016-03-22 | 2017-09-29 | 中兴通讯股份有限公司 | 一种虚拟网络的生成方法和装置 |
CN110688329A (zh) * | 2019-09-06 | 2020-01-14 | 无锡江南计算技术研究所 | 一种可同时支持多套Cache数据私有段动态设置的方法 |
CN110688329B (zh) * | 2019-09-06 | 2021-08-10 | 无锡江南计算技术研究所 | 一种可同时支持多套Cache数据私有段动态设置的方法 |
CN111580826A (zh) * | 2020-04-30 | 2020-08-25 | 腾讯科技(深圳)有限公司 | 机器学习模型的编译优化方法和装置 |
CN111580826B (zh) * | 2020-04-30 | 2021-08-06 | 腾讯科技(深圳)有限公司 | 机器学习模型的编译优化方法和装置 |
WO2022126710A1 (zh) * | 2020-12-14 | 2022-06-23 | 杭州趣链科技有限公司 | 一种字节码执行方法、字节码执行装置及终端设备 |
CN112882695A (zh) * | 2021-03-02 | 2021-06-01 | 百果园技术(新加坡)有限公司 | 传参方法、装置、计算机设备及存储介质 |
CN112882695B (zh) * | 2021-03-02 | 2023-11-28 | 百果园技术(新加坡)有限公司 | 传参方法、装置、计算机设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103106097B (zh) | 2016-02-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101817397B1 (ko) | 하나의 아키텍처의 코드 모듈이 다른 아키텍처의 라이브러리 모듈을 사용할 수 있게 하는 아키텍처 간 호환성 모듈 | |
US20190042218A1 (en) | Sequence optimizations in a high-performance computing environment | |
US9292291B2 (en) | Instruction merging optimization | |
CN101630276B (zh) | 一种高效的内存访问方法 | |
CN103106097A (zh) | 一种即时编译系统中的栈运算优化方法 | |
US9513915B2 (en) | Instruction merging optimization | |
CN105408859A (zh) | 用于指令调度的方法和系统 | |
US10795997B2 (en) | Hardened safe stack for return oriented programming attack mitigation | |
US20170091088A1 (en) | Conditional stack frame allocation | |
CN109739824A (zh) | 日志获取方法及设备 | |
US20190187964A1 (en) | Method and Apparatus for Compiler Driven Bank Conflict Avoidance | |
JP5719278B2 (ja) | 情報処理装置、プロファイル対象決定プログラム及び方法 | |
CN109460237A (zh) | 代码的编译方法及装置 | |
CN107526622A (zh) | Linux的快速异常处理方法及装置 | |
CN104063329B (zh) | 64位立即数处理方法及装置 | |
CN105373414B (zh) | 支持MIPS平台的Java虚拟机实现方法及装置 | |
EP3783513A1 (en) | Apparatus, system and method to define memory information leak zones in a computing system | |
CN103049304B (zh) | 一种通过死代码移除来加快gpu运行速度的方法 | |
US20170337142A1 (en) | Compiler Global Memory Access Optimization In Code Regions Using Most Appropriate Base Pointer Registers | |
CN103389893A (zh) | 一种配置寄存器读写方法及装置 | |
CN102693150A (zh) | 基于计费专有领域的虚拟机的处理方法及装置 | |
CN109426702A (zh) | iOS平台文件读取保护方法、存储介质、电子设备及系统 | |
CN113849397A (zh) | 执行引擎、虚拟机、相关装置和相关方法 | |
CN106293873A (zh) | 一种准确获取虚拟机控制块(vmcs)中关键数据位置的方法 | |
US20030217356A1 (en) | Register allocation for program execution analysis |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |