PG中国电子技术有限公司-核异构体电池技术领军者

您好,欢迎访问PG电子官方网!20年专注核异构体电池研发,能量密度超传统电池1000倍

PG中国电子技术有限公司-核能电源专家

News技术前沿

您当前所在位置: 主页 > 技术前沿 > 企业新闻

一种异构众核程序动态调用树分析装置及分析方法与流程

发布日期:2026-09-10  浏览次数:

  

一种异构众核程序动态调用树分析装置及分析方法与流程(图1)

  导航:X技术最新专利计算;推算;计数设备的制造及其应用技术

  1.本发明涉及一种异构众核程序动态调用树分析装置及分析方法,属于代码逻辑分析领域。

  2.目前阅读代码进行代码逻辑分析时,获取程序调用树的方法主要有两种:一种是使用面向所采用编程语言的词法和语法分析工具,属于静态分析方法,对程序程序运行时动态改变一些行为无法获取;另一种是由用户在程序中插入代码(往往是打印语句)来获取,属于动态分析方法。

  3.程序执行过程中一些需动态确定的调用过程(如基于函数指针的调用等),是难以通过静态分析的方法获得的,而面对大型的应用程序,若是通过用户插桩代码来确定,显然极其费时费力。基于当前技术现状,在国产异构众核处理器上进行代码移植时,往往需要分两步走:先采用前一种获取程序的整体静态调用树,再结合后者对关键部分做深入分析。

  4.随着国产异构众核处理器的不断发展,以及国内外局势的影响,越来越多的应用软件有着面向国产异构众核处理器移植或者在其上重新开发的需求,在此过程中对相关代码的研读是首要环节,然而,高级语言的抽象给这一环节带来了巨大的困难,比如c++语言中的模板、继承等特性,以及c语言中的函数指针等。现有的代码逻辑分析手段主要是依赖于静态分析,难以理解程序运行过程中的一些动态特性。

  5.本发明的目的是提供一种异构众核程序动态调用树分析装置及分析方法,以解决现有的代码逻辑分析手段主要依赖于静态分析,难以理解程序运行过程中的一些动态特性的问题。

  6.为达到上述目的,本发明采用的技术方案是:提供一种异构众核程序动态调用树分析装置,包括以下功能模块:插桩库,用于记录程序执行过程中的动态调用树信息;结果展示模块,用于展示程序的动态调用树信息,将所记录的数据按照存放顺序进行展示,基于记录中的l值实现多叉树的分层展示,即l+1作为l的子节点进行展示;所述插桩库包含initfunc函数、entryfunc函数、leavefunc函数、stackpc数据结构和da数据结构,所述stackpc是栈结构,所述da是一个顺序存储结构,且所述stackpc和da均支持动态扩容;所述initfunc函数在所有用户程序最开始的地方调用,用于stackpc和da数据结构的初始存储空间申请及l值初始化;所述entryfunc函数用于将函数入口pc值入栈至stackpc,并负责记录数据,其中每条数据条目由当前的栈层l、当前栈层l存储的pc值(即当前所记录用户函数入口的pc值)以及l-1栈层存储的pc(即当前函数的调用者的的pc)组成,记为d(l,pc,cpc),当l=0时,即

  不存在当前函数的调用者,使cpc=0;所述leavefunc函数用于实现出栈操作,以及在栈为空时,输出da。

  7.还提供一种异构众核程序动态调用树分析方法,基于上述的异构众核程序动态调用树分析装置,包括以下步骤:s1、修改编译器源码,增加一个编译选项,功能是在用户main函数之前插装initfunc函数,在每个用户函数的入口插装entryfunc函数,在每个用户函数的出口插装leavefunc函数;s2、使用s1中新增加的编译选项编译程序;s3、运行s2中生成的程序;s4、在s3中程序运行至initfunc时,initfunc进行空间申请,并将运算控制核和运算的l值均初始化为-1。

  8.s5、当程序运行至enterfunc时,l值加1,检查d(l,pc,cpc)在stackpc中是否存在,若不存在,则在da中增加新的记录,若存在,则过滤掉该记录的记录,仅在da中保存一条(l,pcb,pca)记录;s6、当程序运行至leavefunc时,l值减1,若l值等于-1,则进行输出操作,此时,如果是在运算核中则通过dma将记录传输至运算控制核,如果是运算控制核则输出记录至文件,所述记录包括运算核和运算控制核;s7、在s6中所有记录输出至文件之后,调用结果展示模块进行展示。

  9.上述技术方案中进一步改进的方案如下:1. 上述方案中,s7中,展示模块按照记录的顺序对运算控制核和每个运算核的数据分别进行输出。

  10.2. 上述方案中,每一条记录的输出方法为:首先缩进l个空白字符,然后通过libbfd库将记录的pc值转换函数名进行输出,之后换行。

  11.由于上述技术方案的运用,本发明与现有技术相比具有下列优点:本发明一种异构众核程序动态调用树分析装置及分析方法,面向国产异构众核处理器,基于编译器的自动插桩,以简单的算法和较低开销,用户通过一次运行即可获取程序的动态调用树,能有效弥补静态分析的不足,提升代码逻辑分析效率。

  13.实施例:本发明提供一种异构众核程序动态调用树分析装置,包括以下功能模块:插桩库,用于记录程序执行过程中的动态调用树信息;结果展示模块,用于展示程序的动态调用树信息,将所记录的数据按照存放顺序进行展示,基于记录中的l值实现多叉树的分层展示,即l+1作为l的子节点进行展示;所述插桩库包含initfunc函数、entryfunc函数、leavefunc函数、stackpc数据结构和da数据结构,所述stackpc是栈结构,所述da是一个顺序存储结构,且所述stackpc和da均支持动态扩容;

  所述initfunc函数在所有用户程序最开始的地方调用,如c语言的main函数入口,用于stackpc和da数据结构的初始存储空间申请及l值初始化;所述entryfunc函数用于将函数入口pc值入栈至stackpc,并负PG电子责记录数据,其中每条数据条目由当前的栈层l、当前栈层l存储的pc值(即当前所记录用户函数入口的pc值)以及l-1栈层存储的pc(即当前函数的调用者的的pc)组成,记为d(l,pc,cpc),当l=0时,即不存在当前函数的调用者,使cpc=0;所述leavefunc函数用于实现出栈操作,以及在栈为空时(即用户所有函数结束时,这是由于enterfunc和leavefunc是成对出现的,结合栈结构的特点可知),输出da。

  14.还提供一种异构众核程序动态调用树分析方法,基于上述的异构众核程序动态调用树分析装置,包括以下步骤:s1、修改编译器源码,增加一个编译选项,功能是在用户main函数之前插装initfunc函数,在每个用户函数的入口插装entryfunc函数,在每个用户函数的出口插装leavefunc函数;s2、使用s1中新增加的编译选项编译程序;s3、运行s2中生成的程序;s4、在s3中程序运行至initfunc时,initfunc进行空间申请,并将运算控制核和运算的l值均初始化为-1。

  15.s5、当程序运行至enterfunc时,l值加1,检查d(l,pc,cpc)在stackpc中是否存在,若不存在,则在da中增加新的记录,若存在,则过滤掉该记录(用于过滤到掉程序中存在的循环调用记录,如a中循环调用了b,记a和b的入口pc分别为pca和pcb,记b中的栈层为l,则会连续存在多个(l,pcb,pca)的记录,仅在da中保存一条(l,pcb,pca)记录);s6、当程序运行至leavefunc时,l值减1,若l值等于-1(即stackpc栈为空,表明所有用户函数调用结束),则进行输出操作,此时,如果是在运算核中则通过dma将记录传输至运算控制核,如果是运算控制核则输出记录至文件,所述记录包括运算核和运算控制核的所有记录;s7、在s6中所有记录输出至文件之后,调用结果展示模块进行展示。

  16.上述技术方案中进一步改进的方案如下:1. 上述方案中,s7中,展示模块按照记录的顺序对运算控制核和每个运算核的数据分别进行输出。

  17.2. 上述方案中,每一条记录的输出方法为:首先缩进l个空白字符,然后通过libbfd库将记录的pc值转换函数名进行输出,之后换行。

  18.对上述实施例的进一步解释如下:通过编译器插桩接口在用户函数的入口和出口分别插入处理函数,实现了自动化的处理函数插桩,与用户手动插桩相比显著地提高效率;处理函数通过一个栈结构和顺序存储结构保存程序的动态调用栈信息,待运行完成后生成调用栈数据,对动态执行到的函数调用达到了静态分析的效果;提供函数名结合多叉树的直观展示形式。

  19.本发明所提出的装置,使用时分为三个步骤:(1)添加相关编译、链接选项,编译程序;(2)运行程序;(3)调用解析模块查看结果。

  20.该装置主要包含两部分内容:插桩库和结果展示模块。其中,插桩库是核心部件,用于记录程序执行过程中的动态调用树信息,核心原理如图1所示;结果展示模块用于展示程序的动态调用树信息。

  21.插桩库包含3个主要函数initfunc、entryfunc和leavefunc,涉及两个主要数据结构,其中stackpc是栈结构,da是一个顺序存储结构,两者均支持动态扩容。

  23.enterfunc实现将函数入口pc值入栈至stackpc,并负责记录数据,其中每条数据条目由当前的栈层l、当前栈层l存储的pc值(即当前所记录用户函数入口的pc值)以及l-1栈层存储的pc(即当前函数的调用者的的pc)组成,记为d(l,pc,cpc)。

  24.leavefunc负责实现出栈操作,以及在栈为空时(即用户所有函数结束时,这是由于enterfunc和leavefunc是成对出现的,结合栈结构的特点可知),输出da。

  25.在异构众核程序中,运算控制核和运算核会分别有类似main函数的用户函数主入口,为此我们需要分别实现上述中的enterfunc和leavefunc函数,initfunc仅需在运算控制核的用户函数主入口处插桩即可,此外,考虑到运算核上的输出效率较低我们将运算核上的数据通过dma手段传输至主核后再统一输出。

  26.考虑到在程序中经常会出现在一个循环中调用另一个函数的情况,我们通过在enterfunc中记录数据时加入一个过滤功能,即当已有的记录中存在一个与当前记录完全相同的数据项时,不再重复存储当前记录,这将大大减小da的开销。

  27.结果展示模块实现将所记录的数据按照存放顺序进行展示,基于记录中的l值实现多叉树的分层展示,即l+1作为l的子节点进行展示。此外,基于libbfd库实现pc值转化为函数名的功能,展示给用户具有较好可读性的结果。

  28.采用上述种异构众核程序动态调用树分析装置及分析方法时,其面向国产异构众核处理器,基于编译器的自动插桩,以简单的算法和较低开销,用户通过一次运行即可获取程序的动态调用树,能有效弥补静态分析的不足,提升代码逻辑分析效率。

  29.为了便于更好的理解本发明,下面将对本文中使用的术语进行简要的解释:代码逻辑分析:对代码的内在逻辑进行分析。

  31.调用树:对程序中各个过程(函数)间调用关系的一种描述,通常以多叉树的形式表达。

  33.pc值:program counter值,用于表示程序某一时刻所执行指令的位置。

  34.用户函数主入口:指程序中由用户进行编码的函数的入口,如c程序中的main函数等。

  35.libbfd:bfd(binary format descriptor),即二进制文件格式描述符,它是链接工具(ld)和二进制操作工具(bin-util)实现对二进制目标文件操作的标准接口,libbfd是实现bfd的接口的库,本发明中可以用来实现pc值转化为函数名。

  36.上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明

  针对ARM众核系统执行x86程序时,因架构差异导致的异常处理机制不兼容问题,提出通过构建x86到ARM异常类型映射表,为不同异常类型预设两种处理程序,并根据系统负载和异常数量动态选择单线、一种基于业务分析场景的组件化建模方法及系统与流程

  针对传统核电厂安全分析方法在时序动态响应处理上的不足,提出离散动态事件树(DET)与核仿真程序高效并行动态耦合方法。通过引入通用辅助trip变量、深度优先算法及多线程并行计算,优化了DET分支...

  针对GPU执行循环指令时难以高效检测数据依赖的问题,提出一种基于线程编号比较的检测方法。通过检测单元判断历史访问操作,记录单元存储线程编号,比较单元分析写/读操作与历史数据的线程编号关系,当检...

  针对异构众核环境下从核无法直接运行操作系统、难以支持POSIX系统调用的问题,提出通过主核代理机制实现从核系统调用的方法。利用主从共享交互区传递调用参数,从核通过中断通知主核代理线程执行系统调...

  针对GPU程序数据传输能耗难以在源码级精确估算的问题,提出一种基于程序状态的能耗建模方法。通过测量CPU+GPU平台基础参数,建立传输模式与带宽、功耗的映射关系,结合源码分析推断数据传输粒度,...

  针对静态程序分析精度不足、动态分析无法全面覆盖的问题,提出混合分析方法。通过静态分析识别需动态处理的代码结构,生成查询传递至动态分析器,动态分析器解析参数并调用代码,返回结果后继续静态分析,实...

  1.计算机网络安全 2.计算机仿线.网络安全;物联网安全 、大数据安全 2.安全态势感知、舆情分析和控制 3.区块链及应用

标签:异构众核
在线客服
服务热线

服务热线

13956963336

微信咨询
返回顶部
X

截屏,微信识别二维码

微信号:13956963336

(点击微信号复制,添加好友)

打开微信

微信号已复制,请打开微信添加咨询详情!