CN112558976B - 即时编译引擎自适应函数加载方法 - Google Patents

即时编译引擎自适应函数加载方法 Download PDF

Info

Publication number
CN112558976B
CN112558976B CN201910903889.7A CN201910903889A CN112558976B CN 112558976 B CN112558976 B CN 112558976B CN 201910903889 A CN201910903889 A CN 201910903889A CN 112558976 B CN112558976 B CN 112558976B
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.)
Active
Application number
CN201910903889.7A
Other languages
English (en)
Other versions
CN112558976A (zh
Inventor
沈莉
周文浩
王飞
吴伟
武文浩
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.)
Wuxi Jiangnan Computing Technology Institute
Original Assignee
Wuxi Jiangnan Computing Technology Institute
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 Wuxi Jiangnan Computing Technology Institute filed Critical Wuxi Jiangnan Computing Technology Institute
Priority to CN201910903889.7A priority Critical patent/CN112558976B/zh
Publication of CN112558976A publication Critical patent/CN112558976A/zh
Application granted granted Critical
Publication of CN112558976B publication Critical patent/CN112558976B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • 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/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy 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)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (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表覆写和重定位回填。
CN201910903889.7A 2019-09-24 2019-09-24 即时编译引擎自适应函数加载方法 Active CN112558976B (zh)

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 CN112558976A (zh) 2021-03-26
CN112558976B true 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)

Citations (2)

* Cited by examiner, † Cited by third party
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的驱动自适配系统及方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Title
《Dynamic Dispatching Tasks Management for H.264 Encoder on Heterogeneous Dual-Core Embedded System》;Chia-Ying Tseng 等;《2010 International Conference on Communications and Mobile Computing》;20101231;全文 *
《面向神威·太湖之光的国产异构众核处理器OpenCL编译系统》;伍明川 等;《计算机学报》;20181031;第41卷(第10期);全文 *

Also Published As

Publication number Publication date
CN112558976A (zh) 2021-03-26

Similar Documents

Publication Publication Date Title
US8924922B2 (en) Pre-compiling hosted managed code
EP3039536B1 (en) Concurrent accesses of dynamically typed object data
US8296745B2 (en) Method and apparatus for portable stub generation
EP2378413B1 (en) Methods and systems to implement non-ABI conforming features across unseen interfaces
US20140089905A1 (en) Enabling polymorphic objects across devices in a heterogeneous platform
JP2006092544A (ja) プリオペレーティングシステム環境におけるモジュールの動的リンク
US11366684B2 (en) Import mechanism for hardware intrinsics
CN103309684A (zh) 动态加载应用的方法及装置
US9134973B2 (en) Dynamic compiling and loading at runtime
CN111770204B (zh) 一种执行智能合约的方法、区块链节点和存储介质
CN103838572A (zh) 一种安卓开发包的打包系统和方法
US20130311980A1 (en) Selective compiling method, device, and corresponding computer program product
US8341613B2 (en) Reducing stack space consumption via head-call optimization
CN111770116A (zh) 一种执行智能合约的方法、区块链节点、存储介质
WO2022237590A1 (zh) 智能合约升级方法及区块链系统
CN112558976B (zh) 即时编译引擎自适应函数加载方法
CN111770202B (zh) 一种执行智能合约的方法、区块链节点和存储介质
US7685565B1 (en) Run time reconfiguration of computer instructions
Franz Run-time code generation as a central system service
CN114443052A (zh) 一种il指令运行时的动态特例化方法和装置
CN104281443B (zh) 利用tcm实现代码、数据替换的方法
Pedersen et al. Resumable Java Bytecode–Process Mobility for the JVM
CN102819435A (zh) 一种Java虚拟机的位置无关代码生成方法
Mukherjee et al. Develop once deploy anywhere achieving adaptivity with a runtime linker/loader framework
KR20110080768A (ko) C언어 기반의 프로그래밍 언어로 작성된 애플리케이션의 배포 시스템 및 방법

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