CN111989655B - 一种soc芯片、确定热点函数的方法及终端设备 - Google Patents
一种soc芯片、确定热点函数的方法及终端设备 Download PDFInfo
- Publication number
- CN111989655B CN111989655B CN201980014028.1A CN201980014028A CN111989655B CN 111989655 B CN111989655 B CN 111989655B CN 201980014028 A CN201980014028 A CN 201980014028A CN 111989655 B CN111989655 B CN 111989655B
- Authority
- CN
- China
- Prior art keywords
- function
- module
- instruction
- soc chip
- calling information
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
Abstract
一种SOC芯片、确定热点函数的方法及终端设备,其中SOC芯片包括处理模块和记录模块,处理模块用于确定需要进行热点函数统计后,在执行程序的过程中,若读取到函数进入或返回的指令,则执行函数进入或返回的操作以及向记录模块发送第一控制信号;记录模块用于接收到第一控制信号后,记录函数的调用信息;函数的调用信息用于确定函数是否为热点函数。本申请实施例中,处理模块在读取到函数进入或返回的指令后,通过向记录模块发送控制信号,即可实现记录函数的调用信息,从而后续可基于记录的函数的调用信息来确定热点函数;由于控制信号不影响函数的执行,因此处理模块进入函数后,可继续执行函数,从而对程序运行的影响较小。
Description
技术领域
本申请涉及集成电路技术领域,特别涉及一种SOC芯片、确定热点函数的方法及终端设备。
背景技术
近年来,片上系统(system of chip,SOC)芯片获得了巨大的发展,在通信领域、航空航天、工业生产、机器人领域、智能家居等领域都有广泛应用,已经成为人们日常生活生产中不可缺少的一部分。与此同时,SOC芯片的设计和开发逐渐成为一个重要研究领域。
对于SOC芯片来说,除了功能的实现和性能的提高,其生产成本和功耗也是至关重要的。通常情况下,一款SOC芯片的生产成本和功耗除了与该SOC芯片的制程相关外,还与该SOC芯片的面积相关,比如面积越大,生产成本和功耗越大。当前的SOC芯片中,由于片上存储(on-chip memory,OCMEM)所占的面积比例非常高,因此,减少SOC芯片的片上存储,可以大幅降低SOC芯片的面积,进而降低SOC芯片的生产成本和功耗。
程序是由一个个函数构成的,SOC芯片上的中央处理器(central processingunit,CPU)在运行程序的过程中,程序中的各个函数执行次数是不同的,而且有可能不同的函数执行的次数千差万别。在程序运行过程中,被调用和执行频率较高的函数可以称为热点函数,热点函数的访问效率严重影响整个程序的执行性能。通常情况下,SOC芯片的片上存储的访问效率大大高于SOC芯片的外部存储器的访问效率,但为了降低SOC芯片的面积,导致片上存储的存储空间有限,只能放一部分函数在片上存储中,因此可以将热点函数放在片上存储,以使得收益较高。然而,如何确定热点函数,仍需进一步研究。
发明内容
本申请实施例的目的在于提供一种SOC芯片、确定热点函数的方法及终端设备,用于在不引入系统额外负载的情形下,记录函数的调用信息,从而实现基于记录的函数的调用信息来确定热点函数。
第一方面,本申请实施例提供一种SOC芯片,该SOC芯片可以包括处理模块和记录模块;其中,处理模块用于确定需要进行热点函数统计后,在执行程序的过程中,若读取到函数进入或返回的指令,则执行函数进入或返回的操作以及向记录模块发送第一控制信号;相应地,记录模块用于接收到第一控制信号后,记录函数的调用信息;函数的调用信息用于确定函数是否为热点函数。
如此,处理模块在读取到函数进入或返回的指令后,通过向记录模块发送控制信号,即可实现记录函数的调用信息,从而后续可基于记录的函数的调用信息来确定热点函数;由于控制信号并不影响函数的执行,因此处理模块进入函数后,可继续执行函数,从而对程序运行的影响较小。相比于通过软件插桩技术来确定热点函数来说,本申请实施例中无需进行软件插桩,亦无需跳转到桩函数后再返回执行函数,从而能够在不引入系统额外负载的情形下,准确记录函数的调用信息,以便于确定热点函数。
在一种可能的设计中,记录模块为先进先出FIFO存储器。
在一种可能的设计中,记录模块中设置有环形队列;记录模块记录函数的调用信息,具体为:记录模块将函数的调用信息写入环形队列中。
由于环形队列采用数组的线性空间,数据组织简单,并且能够以较快的速度来存取数据,因此,采用环形队列能够有效提高函数的调用信息的存储效率。
在一种可能的设计中,SOC芯片还包括硬件搬移模块;硬件搬移模块,用于在环形队列中函数的调用信息的数据量大于预设阈值后,将环形队列中函数的调用信息搬移到预设存储模块。
如此,通过将环形队列中函数的调用信息搬移到预设存储模块,一方面,能够有效避免环形队列中存储的数据量过大,而导致无法有效存储数据的问题,另一方面,采用此种方法,由于环形队列中函数的调用信息可以搬移到预设存储模块,从而使得环形队列能够存储的数据量无需设置得较大,能够有效节省硬件成本。
在一种可能的设计中,硬件搬移模块为直接内存访问DMA控制器。
在一种可能的设计中,处理模块为中央处理器CPU,CPU包括第一指令译码模块和算术逻辑单元ALU;
第一指令译码模块,用于若读取到函数进入或返回的指令,则向ALU发送第二控制信号以及向记录模块发送第一控制信号;
ALU,用于接收到第二控制信号后,执行函数进入或返回的操作。
如此,通过在指令译码模块中新增对函数进出标识的判断,并在读取到函数进入或返回的指令后,向ALU发送第二控制信号以及向记录模块发出第一控制信号,从而使得ALU可以执行函数进入或返回的操作且记录模块可以记录函数的调用信息,如此,在执行函数的过程中,无需跳转到桩函数,对函数运行的影响较小,并能够在不引入系统额外负载的情形下,准确记录函数的调用信息,以便于确定热点函数。
在一种可能的设计中,处理模块包括中央处理器CPU和与CPU连接的第二指令译码模块,CPU中包括程序计数器PC;
CPU,用于在执行程序的过程中,读取到PC的PC值对应的指令后,执行指令对应的操作以及将PC值输出给第二指令译码模块;
第二指令译码模块,用于根据PC值读取PC值对应的指令,若读取到函数进入或返回的指令,则向记录模块发送第一控制信号。
如此,通过为CPU新增一个外挂的第二指令译码模块,第二指令译码模块能够对函数的进出进行判断,并在读取到函数进入或返回的指令后,向记录模块发送第一控制信号,如此,在执行函数的过程中,无需跳转到桩函数,对函数运行的影响较小,并能够在不引入系统额外负载的情形下,准确记录函数的调用信息,以便于确定热点函数。
在一种可能的设计中,函数的调用信息包括函数运行的地址信息。可选地,函数的调用信息还可以包括cache miss信息。
第二方面,本申请实施例提供一种终端设备,包括第一方面的任一种可能的设计所述的SOC芯片;进一步地,该终端设备还可以包括至少一个外部存储器。
第三方面,本申请实施例提供一种确定热点函数的方法,该方法包括:确定需要进行热点函数统计后,在执行程序的过程中,若读取到函数进入或返回的指令,则执行函数进入或返回的操作以及调用FIFO存储器记录所述函数的调用信息;所述函数的调用信息用于确定所述函数是否为热点函数。
如此,在读取到函数进入或返回的指令后,通过调用FIFO存储器,即可实现记录函数的调用信息,从而后续可基于记录的函数的调用信息来确定热点函数;由于调用FIFO存储器并不影响函数的执行,从而对程序运行的影响较小。相比于通过软件插桩技术来确定热点函数来说,本申请实施例中无需进行软件插桩,亦无需跳转到桩函数后再返回执行函数,从而能够在不引入系统额外负载的情形下,准确记录函数的调用信息,以便于确定热点函数。
在一种可能的设计中,所述FIFO存储器中设置有环形队列;
所述调用FIFO存储器记录所述函数的调用信息,包括:调用所述FIFO存储器将所述函数的调用信息写入所述环形队列中。
在一种可能的设计中,所述方法还包括:确定所述环形队列中函数的调用信息的数据量大于预设阈值后,调用DMA控制器将所述环形队列中函数的调用信息搬移到预设存储模块。
在一种可能的设计中,所述函数的调用信息包括所述函数运行的地址信息。
第四方面,本申请实施例提供一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行如上述第三方面的任一种可能的设计所述的方法。
第五方面,本申请实施例提供一种计算机程序产品,当其在计算机上运行时,使得计算机执行如上述第三方面的任一种可能的设计所述的方法。
本申请的这些方面或其他方面在以下实施例的描述中会更加简明易懂。
附图说明
图1a为一种示例性的SOC芯片的结构示意图;
图1b为软件插桩技术的实现过程示意图;
图1c为本申请实施例提供的SOC芯片的实现过程示意图;
图2为本申请实施例提供的一种SOC芯片的结构示意图;
图3为本申请实施例提供的一种设备的结构示意图;
图4为本申请实施例提供的一种终端设备的结构示意图;
图5为本申请实施例提供的又一种终端设备的结构示意图;
图6为本申请实施例提供的确定热点函数的方法所对应的流程示意图。
具体实施方式
为了使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施例作进一步地详细描述。
本申请实施例中涉及的第一、第二等各种数字编号仅为描述方便进行的区分,并不用来限制本申请实施例的范围,也不表示先后顺序。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。“至少一个”是指一个或者多个。至少两个是指两个或者多个。“至少一个”、“任意一个”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个、种),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。
SOC芯片是将多个电子系统集成在同一芯片的集成电路,其广泛应用于多种设备中,比如手机、掌上电脑。SOC通常由多个知识产权(intellectual property,IP)核组成,多个IP核通过总线与外部存储器连接,从而进行程序和数据的交互。每个IP核可以视为一个预先设计好的电路功能模块,用于实现相应功能。其中,IP核可以是中央处理器(centralprocessing unit,CPU)、应用处理器(application processor,AP)、图形处理器(graphicsprocessing unit,GPU)、多媒体子系统(video subsystem)、相机子系统(camerasubsystem)、无线接入模块(modem)、显示子系统(display subsystem)等。
示例性地,一种SOC芯片的结构可以如图1a所示。在图1a中,CPU、多媒体子系统、相机子系统、显示子系统、GPU和无线接入模块通过总线与外部存储器连接。此外,如图1a所示,SOC中还可以包含系统缓存(system cache,SC),SC是系统的最后一级缓存(last levelcache,LLC)。
具体来说,IP核(以CPU为例)在运行某个应用程序的软件程序时,可以从外部存储器中找到相应的软件程序,然后运行该软件程序。为了提升CPU的运行速度,可以引用缓存(cache)技术来提升CPU运行速度。CPU缓存技术,即当CPU读取数据时,先从缓存中查找需要的数据,如果该缓存中存在CPU需要的数据,则CPU可以直接从缓存中读取数据,如果在缓存中不存在CPU需要的数据,CPU再从外部存储器中查找。以外部存储器为双倍速率动态随机存取存储器(double data rate synchronous dynamic random access memory,DDRSDRAM)为例。由于CPU缓存的运行速度比DDR SDRAM快得多,所以CPU从CPU缓存中读取数据比从DDR SDRAM中读取数据要快很多。举个例子,CPU缓存可以分为一级缓存(L1 Cache)、二级缓存(L2 Cache),如此,CPU在运行过程中,先从一级缓存中读取数据,当一级缓存中没有需要的数据时,再从二级缓存中读取数据,当二级缓存中也没有需要的数据时,再从DDRSDRAM中读取数据;此种情形下,SC可以理解为二级缓存。在其它可能的示例中,CPU缓存也可以分为一级缓存(L1 Cache)、二级缓存(L2 Cache)和三级缓存(L3 Cache),此种情形下,SC可以理解为三级缓存。
也就是说,IP核对外部存储器进行访问时,可以先访问SC,如果访问命中了SC中的某个缓存行(cache line),则可以直接从SC返回数据或响应;如果未命中(cache miss),则可以访问外部存储器。由于片内带宽大、数据交换速率高,因而在片内对访问命令进行响应时,响应速度较快;而IP核在片外进行数据访问时,由于数据交换要经过输入/输出(input/output,I/O)接口,I/O口的带宽小,因而对访问命令的响应速度较慢。
然而,由于片上存储(比如上述所描述的CPU缓存,可以包括一级缓存和二级缓存,或者也可以包括一级缓存、二级缓存和三级缓存,上述图1a中仅示意出SC)占用芯片面积,为了降低芯片的生产成本和功耗,芯片面积不宜太大,因此片上存储的容量不会太大,即存储的数据量较少。为保证软件的功能和性能,研发人员在设计和开发一款芯片时,需要从众多函数中确定出热点函数,并将确定出的热点函数存储到片上存储,从而实现程序的优化部署。
目前,确定热点函数的一种可能的实现方式为,通过软件插桩技术来确定热点函数,即每次进入函数后,先跳转到桩函数记录当前的函数调用,然后再返回继续执行,最后程序运行完成再将记录的结果导出进行分析,进而确定热点函数。举个例子,参见图1b所示,左侧函数(FUNCTION)所列出的为函数入口,第一条进入(entry)指令是进入函数后的处理指令(压栈、修改当前栈指针等),当前方法是通过插桩,在进入函数后,调用一个钩子函数(HOOK),记录当前函数的进入,以及进入的时间信息等。钩子函数执行结束后返回原函数继续执行。最后,通过钩子函数的记录信息来统计热点信息。
采用上述方法,一方面,引入巨大的系统额外负载,导致软件性能下降,进而约束了测试场景,造成确定出的热点函数与实际热点函数不符。比如,按照设计的参数规格,一款SOC芯片需求的处理能力为A,考虑到有可能有突发的负载等因素,实际SOC芯片的处理能力可能会设置为110%*A。但是,由于每个处理函数都要进行插桩处理,需求的处理能力可能就达到为150%*A,超过了芯片规格无法测试,只能降低规格测试。但对于函数来说,调用次数可能是随规格成倍增长的,也可能是不随规格增长的。这就造成了低规格测试和高规格测试中,热点函数结果不一致的问题。而通常情况下,优化的目标场景是极限满规格测试,用低规格的测试结果来代替高规格测试,会导致优化效果不明显或者方向性的错误。
另一方面,对于一个规模庞大的软件系统而言,对所有函数进行软件插桩本身也是个巨大的工程。所有函数都调用同一个函数,涉及修改整个项目的makefile(一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作)及工程配置的修改。除此之外,由于部分编程语言支持用宏定义的方式定义函数,或者还有一些其他的函数定义方式,对脚本自动插桩也带来了很大难度。软件插桩后也会带来编译出的代码空间使用的增大,会导致空间不够用,也会导致无法运行全规格。
基于此,本申请实施例提供一种SOC芯片、确定热点函数的方法及终端设备,用于在不引入系统额外负载的情形下,记录函数的调用信息,从而实现基于记录的函数的调用信息来确定热点函数。
本申请实施例可以适用于多种可能的场景,尤其可以适用于SOC芯片的设计阶段,具体来说,在SOC芯片的设计过程中,可以对SOC芯片进行改进,比如在SOC芯片中添加记录模块(以及,还可以为CPU增加一个外挂的指令译码模块),进而通过执行本申请实施例所描述的方法,可得到SOC芯片的片上存储和外部存储器中所存储的各个函数的调用信息(此处,SOC芯片的片上存储和外部存储器中所存储的各个函数可以理解为操作系统所包括的各个函数);后续通过对各个函数的调用信息进行分析,可以确定出热点函数,从而可以将确定出的热点函数部署在SOC芯片的片上存储,实现对程序的优化部署。如此,在完成优化部署后,可以将改进后的SOC芯片投入使用。
参见图2,为本申请实施例提供的一种SOC芯片的结构示意图。如图2所示,该SOC芯片中包括处理模块和记录模块,其中,处理模块用于接收到热点函数统计指令后,在执行程序的过程中,若读取到函数进入或返回的指令,则向所述记录模块发送控制信号;记录模块用于接收到所述控制信号后,记录所述函数的调用信息;所述函数的调用信息用于确定所述函数是否为热点函数。
本申请实施例中,处理模块在读取到函数进入或返回的指令后,通过向记录模块发送控制信号,即可实现记录函数的调用信息,从而后续可基于记录的函数的调用信息来确定热点函数;由于控制信号并不影响函数的执行,因此处理模块进入函数后,可继续执行函数,从而对程序运行的影响较小。相比于通过软件插桩技术来确定热点函数来说,本申请实施例中无需进行软件插桩,亦无需跳转到桩函数后再返回执行函数,从而能够在不引入系统额外负载的情形下,准确记录函数的调用信息,以便于确定热点函数。
参见图3,为本申请实施例提供的一种设备的结构示意图。该设备包括图2所示的SOC芯片。可选地,该设备还可以包括至少一个外部存储器。
在一个示例中,该设备可以为终端设备,终端设备可以部署在陆地上,包括室内或室外、手持或车载;也可以部署在水面上(如轮船等);还可以部署在空中(例如飞机、气球和卫星上等)。终端设备可以是手机(mobile phone)、平板电脑(pad)、带无线收发功能的电脑、虚拟现实(virtual reality,VR)终端、增强现实(augmented reality,AR)终端、工业控制(industrial control)中的无线终端、无人驾驶(self driving)中的无线终端、远程医疗(remote medical)中的无线终端、智能电网(smart grid)中的无线终端、运输安全(transportation safety)中的无线终端、智慧城市(smart city)中的无线终端、智慧家庭(smart home)中的无线终端等。在又一个示例中,该设备也可以为用于测试芯片的测试机台。
下面结合图4和图5,主要以该设备为终端设备为例对本申请实施例进行描述。
如图4所示,终端设备可以包括一个或多个IP核(图4中仅示意出一个IP核,即CPU)、总线、记录模块、SC以及至少一个外部存储器。CPU通过总线与外部存储器和SC连接,SC与外部存储器连接。此种情形下,图4中的CPU可以理解为图2中的处理模块。
其中,CPU为SOC芯片的内核,可以从外部存储器或片上存储中读取指令,对指令译码,进而把指令分解成一系列的微操作,并完成指令的执行。具体来说,CPU可以包括运算逻辑部件和控制部件,其中,运算逻辑部件可以包括算术逻辑单元(arithmetic and logicunit,ALU),用于执行定点或浮点的算术运算操作、移位操作以及逻辑操作,也可执行地址的运算和转换。控制部件可以包括第一指令译码模块,主要用于对指令译码,并且发出为完成每条指令所要执行的各个操作的控制信号,比如向ALU发出控制信号b。
需要说明的是,CPU除包括上述所描述的运算逻辑部件和控制部件外,还可以包括其它部件,比如寄存器部件,寄存器部件可以包括通用寄存器、专用寄存器和控制寄存器,通用寄存器是CPU的重要组成部分,大多数指令都要访问到通用寄存器;专用寄存器是为了执行一些特殊操作所需用的寄存器;控制寄存器通常用来指示执行的状态,或者保持某些指针。可选地,CPU中还可以有一些缓存,用来暂时存放一些指令,缓存越大,CPU的运算速度越快。
总线为SOC芯片的桥梁,用于支持SOC芯片中CPU与SC、外部存储器之间的数据传输。比如,总线可以为先进微控制器总线体系结构(advanced microcontroller busarchitecture,AMBA)总线。
记录模块可以理解为具有存储功能的硬件,用于记录函数的调用信息,比如记录模块可以为存储器、进一步地,可以为先进先出(first input first output,FIFO)存储器。
片上存储包括SC,SC是系统的最后一级缓存;SC可以被所有IP核访问,是SOC芯片的系统共享缓存(system shareable cache)。SC可以采用静态随机存取存储器(staticrandom-access memory,SRAM)实现。
外部存储器包括但不限于动态随机存取存储器(dynamic random accessmemory,DRAM)、同步动态随机存储器(synchronous dynamic random access memory,SDRAM)、双倍速率同步动态随机存储器(double data rate synchronous dynamic randomaccess memory,DDR SDRAM)。
在图4所示的终端设备中,外部存储器可以视为片外系统,除外部存储器之外的部分可以视为图2中的SOC芯片。
基于图4所示意的终端设备,具体实施中,当CPU确定进行热点函数统计后,启动记录模块;CPU从外部存储器和/或片上存储中读取指令,并通过指令译码模块对指令译码,并判断该指令是否为函数进入或返回的指令,若是,则向ALU发出第二控制信号(比如控制信号b)以及向记录模块发送第一控制信号(比如控制信号a)。相应地,ALU在接收到控制信号b后,可以执行函数进入或返回的操作,记录模块在接收到控制信号a后,可以记录函数的调用信息。其中,CPU可以是在接收到热点函数统计指令后,确定需要进行热点函数统计,热点函数统计指令可以是由用户(比如研发人员)触发的,具体不做限定。
根据上述内容可知,本申请实施例通过对SOC芯片的硬件结构进行改进,比如在SOC芯片中添加记录模块(或者也可以称为热点函数统计实体),该记录模块可以用于记录函数的调用信息;以及,考虑到指令译码模块可以通过判断指令的类型来生成其它各模块(比如ALU)的控制信号,因此,本申请实施例通过对指令译码模块的功能进行改进,比如在指令译码模块中新增对函数进出标识的判断,并在读取到函数进入或返回的指令后,向记录模块发出控制信号a,控制信号a用于指示记录模块记录函数的调用信息。如此,在执行函数的过程中,无需跳转到桩函数,对函数运行的影响较小,并能够在不引入系统额外负载的情形下,准确记录函数的调用信息,以便于确定热点函数。
如图5所示,终端设备可以包括一个或多个IP核(图5中仅示意出一个IPR核,即CPU)、总线、与CPU(CPU中包括第一指令译码模块)连接的第二指令译码模块、记录模块、SC以及至少一个外部存储器。其中,CPU还可以包括程序计数器(program counter,PC),用于存放当前执行的指令的地址。此种情形下,图5中的CPU和第二指令译码模块可以理解为图2中的处理模块。
需要说明的是,图5相比于图4的差异在于:图5具有第二指令译码模块,而图4不具有第二指令译码模块,除此差异之外的其它内容可以参照图4的描述。
基于图5所示意的终端设备,具体实施中,当CPU接收到热点函数统计指令后,启动记录模块;CPU从外部存储器和/或片上存储中读取指令,并通过第一指令译码模块对指令译码,进而生成其它各模块(比如ALU、程序计数器)的控制信号(比如控制信号c、控制信号d)。相应地,ALU接收到控制信号c后,可以执行该指令对应的操作(若该指令为函数进入或返回的指令,则该指令对应的操作为函数进入或返回的操作);程序计数器接收到第一指令译码模块发送的控制信号d后,根据控制信号d,将PC值更新为当前执行的指令的地址;进一步地,程序计数器还可以将PC值输出给第二指令译码模块,如此,第二指令译码模块可以根据PC值读取PC值对应的指令,若读取到函数进入或返回的指令,则向记录模块发送第一控制信号(比如控制信号e)。相应地,记录模块在接收到控制信号e后,可以记录函数的调用信息。
根据上述内容可知,本申请实施例通过对SOC芯片的硬件结构进行改进,比如在SOC芯片中添加记录模块,该记录模块可以用于记录函数的调用信息;以及,为CPU新增一个外挂的第二指令译码模块,第二指令译码模块能够对函数的进出进行判断,并在读取到函数进入或返回的指令后,向记录模块发送控制信号e,控制信号e用于指示记录模块记录函数的调用信息。如此,在执行函数的过程中,无需跳转到桩函数,对函数运行的影响较小,并能够在不引入系统额外负载的情形下,准确记录函数的调用信息,以便于确定热点函数。
也就是说,图4中是对CPU中的指令译码模块的功能进行改进,从而使得改进后的指令译码模块能够在读取到函数进入或返回的指令后,向记录模块发出控制信号,以达到记录函数的调用信息的目的;考虑到可能存在无法对CPU中的指令译码模块的功能进行改进的情形(比如SOC芯片中的CPU为外购CPU),因此,图5中为CPU新增一个外挂的第二指令译码模块,新增的第二指令译码模块能够在读取到函数进入或返回的指令后,向记录模块发出控制信号,以达到记录函数的调用信息的目的。
本申请实施例中,函数的调用信息可以包括函数运行的地址信息(比如函数运行的首地址)。示例性地,函数的调用信息还可以包括cache miss信息,cache miss信息用于指示该函数是否在CPU缓存(比如一级缓存、二级缓存)中命中。示例性地,参见图4所示,SOC芯片中还可以设置有时间模块,如此,记录模块在接收到第一指令译码模块发送的控制信号a后,还可以从时间模块获取时间戳(该时间戳即为函数的运行时间戳),因此,函数的调用信息还可以包括函数的运行时间戳;可以看出,在图4所示意的实现方式中,函数的调用信息中可以包括函数运行的地址信息(比如函数运行的首地址)、cache miss信息以及函数的运行时间戳。由于图5中记录模块接收到的控制信号e是由第二指令译码模块触发的,此种情形下,记录模块无法准确从时间模块中获取函数的运行时间戳,因此,在图5所示意的实现方式中,函数的调用信息中可以包括函数运行的地址信息(比如函数运行的首地址)、cache miss信息。
上述图2至图5所示意的记录模块中可以设置有环形队列,如此,记录模块可以将函数的调用信息写入环形队列中。其中,环形队列可以理解为一个首尾相连的FIFO的数据结构,其采用数组的线性空间,数据组织简单,并且能够以较快的速度来存取数据。因此,采用环形队列能够有效提高函数的调用信息的存储效率。
进一步地,图2至图5所示意的SOC芯片还可以包括硬件搬移模块,用于在环形队列中函数的调用信息的数据量大于预设阈值后,将环形队列中函数的调用信息搬移到预设存储模块,如此,后续可以通过多种方式对预设存储模块中函数的调用信息进行分析以确定出热点函数,进而可以将确定出的热点函数存储到片上存储,实现程序的优化部署,本申请实施例对此不做限定。
具体实施中,记录模块可以在确定环形队列中函数的调用信息的数据量大于预设阈值后,自动触发硬件信号给硬件搬移模块,如此,硬件搬移模块可以将环形队列中函数的调用信息从环形队列中搬移到预设存储模块,参见图1c所示。其中,预设阈值可以是由本领域技术人员根据经验设置,具体不做限定;进一步地,预设阈值可以参考环形队列能够存储的数据量来设置,比如预设阈值可以小于环形队列能够存储的数据量。在一个示例中,硬件搬移模块可以为直接内存访问(direct memory access,DMA)控制器,预设存储模块可以为至少一个外部存储器中的任一外部存储器。在其它可能的示例中,也可以通过通用串行总线(universal serial bus,USB)将环形队列中函数的调用信息输出到其它可能的存储介质中,具体不做限定。
需要说明的是,CPU在接收到热点函数统计停止指令后,可关闭记录模块,并不再执行上述所描述的记录函数的调用信息的过程,此时CPU可以依旧运行程序,也就是说,本申请实施例中,关闭热点函数统计功能可以不影响程序的正常运行。
基于同一发明构思,本申请实施例提供一种确定热点函数的方法。参见图6,该方法包括如下步骤:
步骤601,确定需要进行热点函数统计。在一个示例中,可以是在接收热点函数统计指令后,确定需要进行热点函数统计。其中,热点函数统计指令可以是由用户(比如测试人员)触发的,具体不做限定。
步骤602,在执行程序的过程中,若读取到函数进入或返回的指令,则执行函数进入或返回的操作以及调用FIFO存储器记录所述函数的调用信息;所述函数的调用信息用于确定所述函数是否为热点函数。
在一种可能的设计中,所述FIFO存储器中设置有环形队列;所述调用FIFO存储器记录所述函数的调用信息,包括:调用所述FIFO存储器将所述函数的调用信息写入所述环形队列中。
在一种可能的设计中,该方法还包括:确定环形队列中的调用信息的数据量大于预设阈值后,调用DMA控制器将环形队列中的调用信息搬移到预设存储模块。
在一种可能的设计中,所述函数的调用信息包括所述函数运行的地址信息。
此外,图6所示方法中的其他实现方式还可参见上述图2至图5中的相关描述,此处不再赘述。
本申请实施例中所描述的方法或算法的步骤可以直接嵌入硬件、处理器执行的软件单元、或者这两者的结合。软件单元可以存储于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可移动磁盘、CD-ROM或本领域中其它任意形式的存储媒介中。示例性地,存储媒介可以与处理器连接,以使得处理器可以从存储媒介中读取信息,并可以向存储媒介存写信息。可选地,存储媒介还可以集成到处理器中。处理器和存储媒介可以设置于ASIC中,ASIC可以设置于终端设备中。可选地,处理器和存储媒介也可以设置于终端设备中的不同的部件中。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管结合具体特征及其实施例对本申请进行了描述,显而易见的,在不脱离本申请的精神和范围的情况下,可对其进行各种修改和组合。相应地,本说明书和附图仅仅是所附权利要求所界定的本申请的示例性说明,且视为已覆盖本申请范围内的任意和所有修改、变化、组合或等同物。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包括这些改动和变型在内。
Claims (14)
1.一种片上系统SOC芯片,其特征在于,所述SOC芯片包括处理模块和记录模块;
所述处理模块,用于确定需要进行热点函数统计后,在执行程序的过程中,若读取到函数进入或返回的指令,则执行函数进入或返回的操作以及向所述记录模块发送第一控制信号;
所述记录模块,用于接收到所述第一控制信号后,记录所述函数的调用信息;所述函数的调用信息用于确定所述函数是否为热点函数。
2.根据权利要求1所述的SOC芯片,其特征在于,所述记录模块为先进先出FIFO存储器。
3.根据权利要求2所述的SOC芯片,其特征在于,所述记录模块中设置有环形队列;
所述记录模块记录所述函数的调用信息,具体为:所述记录模块将所述函数的调用信息写入所述环形队列中。
4.根据权利要求3所述的SOC芯片,其特征在于,所述SOC芯片还包括硬件搬移模块;
所述硬件搬移模块,用于在所述环形队列中函数的调用信息的数据量大于预设阈值后,将所述环形队列中函数的调用信息搬移到预设存储模块。
5.根据权利要求4所述的SOC芯片,其特征在于,所述硬件搬移模块为直接内存访问DMA控制器。
6.根据权利要求1至5中任一项所述的SOC芯片,其特征在于,所述处理模块为中央处理器CPU,所述CPU包括第一指令译码模块和算术逻辑单元ALU;
所述第一指令译码模块,用于若读取到所述函数进入或返回的指令,则向所述ALU发送第二控制信号以及向所述记录模块发送所述第一控制信号;
所述ALU,用于接收到所述第二控制信号后,执行所述函数进入或返回的操作。
7.根据权利要求1至5中任一项所述的SOC芯片,其特征在于,所述处理模块包括中央处理器CPU和与所述CPU连接的第二指令译码模块,所述CPU中包括程序计数器PC;
所述CPU,用于在执行程序的过程中,读取到所述PC的PC值对应的指令后,执行所述指令对应的操作以及将所述PC值输出给所述第二指令译码模块;
所述第二指令译码模块,用于根据所述PC值读取所述PC值对应的指令,若读取到函数进入或返回的指令,则向所述记录模块发送所述第一控制信号。
8.根据权利要求1至5中任一项所述的SOC芯片,其特征在于,所述函数的调用信息包括所述函数运行的地址信息。
9.一种终端设备,其特征在于,包括如权利要求1至8任一项所述的SOC芯片。
10.一种确定热点函数的方法,其特征在于,包括:
确定需要进行热点函数统计;
在执行程序的过程中,若读取到函数进入或返回的指令,则执行函数进入或返回的操作以及调用FIFO存储器记录所述函数的调用信息;所述函数的调用信息用于确定所述函数是否为热点函数。
11.根据权利要求10所述的方法,其特征在于,所述FIFO存储器中设置有环形队列;
所述调用FIFO存储器记录所述函数的调用信息,包括:
调用所述FIFO存储器将所述函数的调用信息写入所述环形队列中。
12.根据权利要求11所述的方法,其特征在于,所述方法还包括:
确定所述环形队列中函数的调用信息的数据量大于预设阈值后,调用DMA控制器将所述环形队列中函数的调用信息搬移到预设存储模块。
13.根据权利要求10至12中任一项所述的方法,其特征在于,所述函数的调用信息包括所述函数运行的地址信息。
14.一种计算机可读存储介质,其特征在于,包括指令,当其在计算机上运行时,使得计算机执行如权利要求10至13任一项所述的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2019/079344 WO2020191549A1 (zh) | 2019-03-22 | 2019-03-22 | 一种soc芯片、确定热点函数的方法及终端设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111989655A CN111989655A (zh) | 2020-11-24 |
CN111989655B true CN111989655B (zh) | 2022-03-29 |
Family
ID=72610472
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980014028.1A Active CN111989655B (zh) | 2019-03-22 | 2019-03-22 | 一种soc芯片、确定热点函数的方法及终端设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN111989655B (zh) |
WO (1) | WO2020191549A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113886250B (zh) * | 2021-09-30 | 2023-04-11 | 四川大学 | 函数调用动态热力图的绘制方法 |
CN114328345A (zh) * | 2021-12-10 | 2022-04-12 | 北京泽石科技有限公司 | 控制信息的处理方法、装置以及计算机可读存储介质 |
CN114356804A (zh) * | 2021-12-28 | 2022-04-15 | 北京奕斯伟计算技术有限公司 | 通信方法、装置、设备、计算机可读存储介质及程序产品 |
CN114770514A (zh) * | 2022-05-11 | 2022-07-22 | 北京睿知文峰教育科技有限公司 | 基于stm32的人工智能机器人控制方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103713933A (zh) * | 2013-12-31 | 2014-04-09 | 华为技术有限公司 | 计算机程序中热点函数、变量的汇聚方法、装置及系统 |
CN106502876A (zh) * | 2016-10-26 | 2017-03-15 | 腾讯科技(深圳)有限公司 | 一种热点函数确定的方法及相关设备 |
CN109446740A (zh) * | 2018-12-20 | 2019-03-08 | 湖南国科微电子股份有限公司 | 一种片上系统架构性能仿真平台 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7181599B2 (en) * | 2004-01-14 | 2007-02-20 | International Business Machines Corporation | Method and apparatus for autonomic detection of cache “chase tail” conditions and storage of instructions/data in “chase tail” data structure |
CN101441564B (zh) * | 2008-12-04 | 2011-07-20 | 浙江大学 | 为程序定制的可重构加速器实现方法 |
US9360523B2 (en) * | 2014-04-18 | 2016-06-07 | Breker Verification Systems | Display in a graphical format of test results generated using scenario models |
CN107038108B (zh) * | 2015-08-20 | 2020-11-03 | 腾讯科技(深圳)有限公司 | 软件的测试方法和装置 |
CN105930209B (zh) * | 2016-04-11 | 2019-06-25 | 天津职业技术师范大学 | 一种自适应的帮助线程预取质量控制方法 |
CN106020950B (zh) * | 2016-05-12 | 2019-08-16 | 中国科学院软件研究所 | 基于复杂网络分析的函数调用图关键节点识别和标识方法 |
-
2019
- 2019-03-22 WO PCT/CN2019/079344 patent/WO2020191549A1/zh active Application Filing
- 2019-03-22 CN CN201980014028.1A patent/CN111989655B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103713933A (zh) * | 2013-12-31 | 2014-04-09 | 华为技术有限公司 | 计算机程序中热点函数、变量的汇聚方法、装置及系统 |
CN106502876A (zh) * | 2016-10-26 | 2017-03-15 | 腾讯科技(深圳)有限公司 | 一种热点函数确定的方法及相关设备 |
CN109446740A (zh) * | 2018-12-20 | 2019-03-08 | 湖南国科微电子股份有限公司 | 一种片上系统架构性能仿真平台 |
Also Published As
Publication number | Publication date |
---|---|
WO2020191549A1 (zh) | 2020-10-01 |
CN111989655A (zh) | 2020-11-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111989655B (zh) | 一种soc芯片、确定热点函数的方法及终端设备 | |
US10067813B2 (en) | Method of analyzing a fault of an electronic system | |
US8527812B2 (en) | Information processing device | |
US11694299B2 (en) | Methods and apparatus to emulate graphics processing unit instructions | |
US8769504B2 (en) | Method and apparatus for dynamically instrumenting a program | |
US20110154299A1 (en) | Apparatus and method for executing instrumentation code | |
US20140149078A1 (en) | Performance measurement unit, processor core including the same and process profiling method | |
CN103562870A (zh) | 异构核心的自动加载平衡 | |
US9460032B2 (en) | Apparatus and method for processing an interrupt | |
TWI461908B (zh) | 於即時指令追蹤紀錄中之除錯動作的選擇性紀錄技術 | |
CN111124926B (zh) | 模糊测试方法、装置、电子设备及存储介质 | |
US9836379B2 (en) | Method and system for generating a memory trace of a program code executable on a programmable target | |
US20120266029A1 (en) | Arrangement for processing trace data information, integrated circuits and a method for processing trace data information | |
US20110016455A1 (en) | Power Profiling for Embedded System Design | |
CN112597064B (zh) | 对程序进行仿真的方法、电子设备及存储介质 | |
US20160378636A1 (en) | Software-Initiated Trace Integrated with Hardware Trace | |
US9372773B2 (en) | User-level hardware branch records | |
US20140156978A1 (en) | Detecting and Filtering Biased Branches in Global Branch History | |
US9959191B2 (en) | Dynamic library profiling method and dynamic library profiling system | |
CN115656788B (zh) | 一种芯片测试系统、方法、设备及存储介质 | |
CN106095631B (zh) | 一种基于有限状态机实现的多周期非流水线cpu动态调试方法 | |
KR102210544B1 (ko) | 전자 시스템의 결함 분석 방법 | |
CN113407350A (zh) | 指令处理装置、处理器、芯片、计算设备及相应的方法 | |
CN112445855A (zh) | 用于图形处理器芯片的可视化分析方法和可视化分析装置 | |
JP2009217385A (ja) | プロセッサ及びマルチプロセッサ |
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 |