CN112558976A - 即时编译引擎自适应函数加载方法 - Google Patents
即时编译引擎自适应函数加载方法 Download PDFInfo
- Publication number
- CN112558976A CN112558976A CN201910903889.7A CN201910903889A CN112558976A CN 112558976 A CN112558976 A CN 112558976A CN 201910903889 A CN201910903889 A CN 201910903889A CN 112558976 A CN112558976 A CN 112558976A
- Authority
- CN
- China
- Prior art keywords
- function
- dynamic link
- link library
- symbol
- external
- 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
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
-
- 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/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开一种即时编译引擎自适应函数加载方法,面向异构众核平台,包括以下步骤:S1、对于一个函数符号,执行引擎检查其是否为外部函数;S2、对于一个S1中标记的外部函数符号,执行引擎检查其是否为从核函数,并使用对应的动态链接库加载函数加载包含该外部函数符号的动态链接库;S3、从步骤S2中加载的动态链接库中获取外部函数入口地址;S4、使用步骤S3中获取的外部函数入口地址,对用户程序代码段进行GOT表覆写和重定位回填。本发明实现了异构众核程序对核组空间的有效利用,完善了面向异构众核平台的即时编译引擎的功能。
Description
技术领域
本发明涉及一种即时编译引擎自适应函数加载方法,属于编译优化技术领域。
背景技术
即时编译(Just-In-Time)是一种动态编译中间代码的方式,根据需要,在程序执行时将代码翻译成机器码并且执行。Java语言,.net平台,LuaJIT等新兴语言的编译器均广泛使用即时编译技术。即时编译结合了静态编译和解释执行的优势,能够产生高效的机器码,并且具有足够的灵活性。即时编译调用内部函数和外部函数的方式不同。对于内部函数,执行引擎直接从程序代码段获取函数入口地址。对于外部函数,执行引擎从所有加载到内存的动态库中查找对应的符号。
LLVM(Lower Level Virtual Machine)是当今非常流行的一款编译器基础框架,在设计之初就考虑了即时编译的功能,其采用自创的代码优化机制,并且有着清晰的架构层次和详细的开发文档,结合了静态编译和解释执行的优势,正逐渐被越来越多的科研机构和商业项目所使用。
国产异构众核平台操作系统将可执行内存空间划分为两部分:容量受限的核组空间和容量不受限的系统空间。核组空间既可以加载主核函数,也可以加载从核函数,而系统空间只能够加载和执行主核函数。这种空间划分使得国产异构众核平台的主从核可执行地址空间具有非一致属性,从核函数需要加载到特定的核组空间才能正常运行,但是核组空间容量受限,无法满足所有用户程序外部函数的加载需求,导致国产众核处理器的即时编译引擎难以对内存空间进行有效利用。
发明内容
本发明的目的是提供一种即时编译引擎自适应函数加载方法,该即时编译引擎自适应函数加载方法实现了异构众核程序对核组空间的有效利用,完善了面向异构众核平台的即时编译引擎的功能。
为达到上述目的,本发明采用的技术方案是:一种即时编译引擎自适应函数加载方法,面向异构众核平台,包括以下步骤:
S1、对于一个函数符号,执行引擎检查其是否为外部函数,具体如下:
S11、对于一个函数符号,执行引擎在用户程序代码段查找该函数符号的定义,若找到,则标记该用户程序代码段中的函数符号为内部函数符号,执行引擎从用户程序代码段获取该内部函数入口地址,并跳转到S4;
S12、对于一个函数符号,若在用户程序代码段未找到该函数符号的定义,则标记该函数符号为外部函数符号,执行S2;
S2、对于一个S12中标记的外部函数符号,执行引擎检查其是否为从核函数,并使用对应的动态链接库加载函数加载包含该外部函数符号的动态链接库,具体如下:
S21、从操作系统环境变量指定的动态链接库查找路径中查找包含该外部函数符号的动态链接库;
S22、判断包含该外部函数符号的动态链接库中是否包含有从核函数;
S23、如果包含从核函数,则该动态链接库为混合链接,使用混合链接的动态链接库加载函数dlopen_hybrid加载该动态链接库;
S24、如果不包含从核函数,则该动态链接库为纯主核链接,使用主核链接的动态链接库加载函数dlopen加载该动态链接库;
S25、跳转到S3;
S3、从步骤S2中加载的动态链接库中获取外部函数入口地址,具体如下:
S31、通过获取动态链接库符号地址函数dlsym从步骤S2加载的动态链接库中获取外部函数入口地址;
S32、跳转到S4;
S4、使用步骤S3中获取的外部函数入口地址,对用户程序代码段进行GOT表覆写和重定位回填,具体如下:
S41、将步骤S11中获取的内部函数入口地址或者步骤S31中获取的外部函数入口地址传递给运行时链接器;
S42、运行时链接器使用步骤S41传入的入口地址,对用户程序代码段进行GOT表覆写和重定位回填。
由于上述技术方案的运用,本发明与现有技术相比具有下列优点:
本发明即时编译引擎自适应函数加载方法,其考虑异构众核程序的特点,在加载外部函数时自适应的区分主核函数和从核函数,将主核函数加载到容量不受限的系统空间,而将从核函数加载到特定的核组空间,实现了异构众核程序对核组空间的有效利用,完善了面向异构众核平台的即时编译引擎的功能。
附图说明
附图1为本发明即时编译引擎自适应函数加载方法流程示意图;
附图2为本发明即时编译引擎自适应函数加载方法流程图。
具体实施方式
实施例:一种即时编译引擎自适应函数加载方法,面向异构众核平台,包括以下步骤:
S1、对于一个函数符号,执行引擎检查其是否为外部函数,具体如下:
S11、对于一个函数符号,执行引擎在用户程序代码段查找该函数符号的定义,若找到,则标记该用户程序代码段中的函数符号为内部函数符号,执行引擎从用户程序代码段获取该内部函数入口地址,并跳转到S4;
S12、对于一个函数符号,若在用户程序代码段未找到该函数符号的定义,则标记该函数符号为外部函数符号,执行S2;
S2、对于一个S12中标记的外部函数符号,执行引擎检查其是否为从核函数,并使用对应的动态链接库加载函数加载包含该外部函数符号的动态链接库,具体如下:
S21、从操作系统环境变量指定的动态链接库查找路径中查找包含该外部函数符号的动态链接库;
S22、判断包含该外部函数符号的动态链接库中是否包含有从核函数;
S23、如果包含从核函数,则该动态链接库为混合链接,使用混合链接的动态链接库加载函数dlopen_hybrid加载该动态链接库;
S24、如果不包含从核函数,则该动态链接库为纯主核链接,使用主核链接的动态链接库加载函数dlopen加载该动态链接库;
S25、跳转到S3;
S3、从步骤S2中加载的动态链接库中获取外部函数入口地址,具体如下:
S31、通过获取动态链接库符号地址函数dlsym从步骤S2加载的动态链接库中获取外部函数入口地址;
S32、跳转到S4;
S4、使用步骤S3中获取的外部函数入口地址,对用户程序代码段进行GOT表覆写和重定位回填,具体如下:
S41、将步骤S11中获取的内部函数入口地址或者步骤S31中获取的外部函数入口地址传递给运行时链接器;
S42、运行时链接器使用步骤S41传入的入口地址,对用户程序代码段进行GOT表覆写和重定位回填。
实施例进一步解释如下:
本发明方法具体流程如图1所示。
主要包括判断函数是否外部函数、判断外部函数是否为从核函数、函数入口地址获取、重定位回填四个步骤。
(1)首先,对于一个函数符号,执行引擎检查其是否为外部函数,具体如下:
1、执行引擎在用户程序代码段查找该符号的定义,若找到,则该函数为内部函数,执行引擎从代码段获取该内部函数入口地址,并跳转到步骤(4);
2、若在用户程序代码段未找到该函数定义,则该函数为外部函数,执行步骤(2)。
(2)其次,对于一个外部函数符号,执行引擎检查其是否为从核函数,具体如下:
1、从指定的动态库查找路径中查找包含该外部函数符号的动态库;
2、判断包含该外部函数符号的动态库中是否包含有从核函数;
3、如果包含从核函数,则该动态库为混合链接,使用dlopen_hybrid加载该动态库;
4、如果不包含从核函数,则该动态库为纯主核链接,使用dlopen加载该动态库;
5、跳转到步骤(3)。
(3)再次,从加载的动态库中获取外部函数入口地址,具体如下:
1、通过dlsym获取外部函数入口地址;
2、跳转到步骤(4)。
(4)最后,使用函数入口地址进行重定位回填,具体如下:
1、将函数入口地址传递给运行时链接器;
2、运行时链接器使用该入口地址进行GOT表覆写和重定位回填。
采用上述即时编译引擎自适应函数加载方法时,其考虑异构众核程序的特点,在加载外部函数时自适应的区分主核函数和从核函数,将主核函数加载到容量不受限的系统空间,而将从核函数加载到特定的核组空间,实现了异构众核程序对核组空间的有效利用,完善了面向异构众核平台的即时编译引擎的功能。
为了便于更好的理解本发明,下面将对本文中使用的术语进行简要的解释:
LLVM:Lower Level Virtual Machine,由美国伊利诺伊大学开展的一个开源编译器项目;
即时编译:Just-In-Time Compilation,在程序执行时将代码翻译成机器码的编译方式;
内部函数:如果一个函数只能被本文件中的其他函数所调用,称为内部函数;
外部函数:除内部函数外,其余的函数都可以被其他文件中的函数所调用,称为外部函数;
动态链接库:一个作为共享函数库的可执行文件,它使进程可以调用不属于本身可执行代码中的函数。
上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。
Claims (1)
1.一种即时编译引擎自适应函数加载方法,其特征在于:面向异构众核平台,包括以下步骤:
S1、对于一个函数符号,执行引擎检查其是否为外部函数,具体如下:
S11、对于一个函数符号,执行引擎在用户程序代码段查找该函数符号的定义,若找到,则标记该用户程序代码段中的函数符号为内部函数符号,执行引擎从用户程序代码段获取该内部函数入口地址,并跳转到S4;
S12、对于一个函数符号,若在用户程序代码段未找到该函数符号的定义,则标记该函数符号为外部函数符号,执行S2;
S2、对于一个S12中标记的外部函数符号,执行引擎检查其是否为从核函数,并使用对应的动态链接库加载函数加载包含该外部函数符号的动态链接库,具体如下:
S21、从操作系统环境变量指定的动态链接库查找路径中查找包含该外部函数符号的动态链接库;
S22、判断包含该外部函数符号的动态链接库中是否包含有从核函数;
S23、如果包含从核函数,则该动态链接库为混合链接,使用混合链接的动态链接库加载函数dlopen_hybrid加载该动态链接库;
S24、如果不包含从核函数,则该动态链接库为纯主核链接,使用主核链接的动态链接库加载函数dlopen加载该动态链接库;
S25、跳转到S3;
S3、从步骤S2中加载的动态链接库中获取外部函数入口地址,具体如下:
S31、通过获取动态链接库符号地址函数dlsym从步骤S2加载的动态链接库中获取外部函数入口地址;
S32、跳转到S4;
S4、使用步骤S3中获取的外部函数入口地址,对用户程序代码段进行GOT表覆写和重定位回填,具体如下:
S41、将步骤S11中获取的内部函数入口地址或者步骤S31中获取的外部函数入口地址传递给运行时链接器;
S42、运行时链接器使用步骤S41传入的入口地址,对用户程序代码段进行GOT表覆写和重定位回填。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910903889.7A CN112558976B (zh) | 2019-09-24 | 2019-09-24 | 即时编译引擎自适应函数加载方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910903889.7A CN112558976B (zh) | 2019-09-24 | 2019-09-24 | 即时编译引擎自适应函数加载方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112558976A true CN112558976A (zh) | 2021-03-26 |
CN112558976B CN112558976B (zh) | 2022-07-12 |
Family
ID=75028965
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910903889.7A Active CN112558976B (zh) | 2019-09-24 | 2019-09-24 | 即时编译引擎自适应函数加载方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112558976B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114296699A (zh) * | 2021-12-31 | 2022-04-08 | 北京和利时系统工程有限公司 | 一种开放式工业实时控制平台 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120222010A1 (en) * | 2009-11-20 | 2012-08-30 | Zte Corporation | Loading and Debugging Method and Debugging System Thereof |
CN108037924A (zh) * | 2017-12-11 | 2018-05-15 | 中国电子科技集团公司第三十二研究所 | glibc和bionic的驱动自适配系统及方法 |
-
2019
- 2019-09-24 CN CN201910903889.7A patent/CN112558976B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120222010A1 (en) * | 2009-11-20 | 2012-08-30 | Zte Corporation | Loading and Debugging Method and Debugging System Thereof |
CN108037924A (zh) * | 2017-12-11 | 2018-05-15 | 中国电子科技集团公司第三十二研究所 | glibc和bionic的驱动自适配系统及方法 |
Non-Patent Citations (2)
Title |
---|
CHIA-YING TSENG 等: "《Dynamic Dispatching Tasks Management for H.264 Encoder on Heterogeneous Dual-Core Embedded System》", 《2010 INTERNATIONAL CONFERENCE ON COMMUNICATIONS AND MOBILE COMPUTING》 * |
伍明川 等: "《面向神威·太湖之光的国产异构众核处理器OpenCL编译系统》", 《计算机学报》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114296699A (zh) * | 2021-12-31 | 2022-04-08 | 北京和利时系统工程有限公司 | 一种开放式工业实时控制平台 |
Also Published As
Publication number | Publication date |
---|---|
CN112558976B (zh) | 2022-07-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8296745B2 (en) | Method and apparatus for portable stub generation | |
US20110307858A1 (en) | Pre-compiling hosted managed code | |
US20070294679A1 (en) | Methods and apparatus to call native code from a managed code application | |
US20040268301A1 (en) | Adding new compiler methods to an integrated development environment | |
EP2378413B1 (en) | Methods and systems to implement non-ABI conforming features across unseen interfaces | |
US20050028155A1 (en) | Java execution device and Java execution method | |
US11366684B2 (en) | Import mechanism for hardware intrinsics | |
CN111770204B (zh) | 一种执行智能合约的方法、区块链节点和存储介质 | |
US20140089905A1 (en) | Enabling polymorphic objects across devices in a heterogeneous platform | |
CN103838572A (zh) | 一种安卓开发包的打包系统和方法 | |
CN111770116B (zh) | 一种执行智能合约的方法、区块链节点、存储介质 | |
CN103309684A (zh) | 动态加载应用的方法及装置 | |
US20100218174A1 (en) | Dynamic compiling and loading at runtime | |
US20130311980A1 (en) | Selective compiling method, device, and corresponding computer program product | |
US8341613B2 (en) | Reducing stack space consumption via head-call optimization | |
CN111770202B (zh) | 一种执行智能合约的方法、区块链节点和存储介质 | |
WO2022237590A1 (zh) | 智能合约升级方法及区块链系统 | |
CN112558976B (zh) | 即时编译引擎自适应函数加载方法 | |
US7685565B1 (en) | Run time reconfiguration of computer instructions | |
CN114443052B (zh) | 一种il指令运行时的动态特例化方法和装置 | |
US20050246677A1 (en) | Native method invocation (NMI) custom marshalling stub service | |
Gregersen et al. | Towards a Dynamic-update-enabled JVM | |
CN104281443B (zh) | 利用tcm实现代码、数据替换的方法 | |
EP4204960A1 (en) | Thread-local return structure for asynchronous state machine | |
CN102819435B (zh) | 一种Java虚拟机的位置无关代码生成方法 |
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 |