CN117311595A - 数据处理方法、处理器、计算设备及装置 - Google Patents

数据处理方法、处理器、计算设备及装置 Download PDF

Info

Publication number
CN117311595A
CN117311595A CN202211103960.1A CN202211103960A CN117311595A CN 117311595 A CN117311595 A CN 117311595A CN 202211103960 A CN202211103960 A CN 202211103960A CN 117311595 A CN117311595 A CN 117311595A
Authority
CN
China
Prior art keywords
target data
data
processor
cache
instruction
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.)
Pending
Application number
CN202211103960.1A
Other languages
English (en)
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to PCT/CN2023/100767 priority Critical patent/WO2023246651A1/zh
Publication of CN117311595A publication Critical patent/CN117311595A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • 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

Abstract

一种数据处理方法、处理器、计算设备及装置,涉及计算机技术领域。该方法包括:处理器获取源代码编译后生成的可执行代码,该可执行代码中包括扩展指令对应的代码,扩展指令用于指示将目标数据需驻留在缓存,目标数据为执行可执行代码的过程中需多次调用的数据。处理器在获取该可执行代码后,执行该可执行代码,在执行到可执行代码中扩展指令对应的代码时,处理器获取目标数据并将目标数据存储在缓存中。处理器获取的可执行代码中直接携带了扩展指令,处理器通过执行该第一扩展指令对应的代码可将目标数据驻留在缓存中,能够使得缓存有效、准确的存储处理器会经常调用的数据,有效保证了处理器的数据读写速率。

Description

数据处理方法、处理器、计算设备及装置
相关申请的交叉引用
本申请要求在2022年6月23日提交中华人民共和国知识产权局、申请号为202210724755.0、发明名称为“一种高带宽内存HBM分配方法”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据处理方法、处理器、计算设备及装置。
背景技术
在传统的处理器架构中,在处理器和内存之间通常会设置有缓存,缓存作为处理器与内存之间数据访问的临时存储器,可以用于存储一些数据。
若该缓存中存储的数据为该处理器经常需要调用的数据,处理器可以直接从缓存访问数据,不再需要从内存中访问数据,这样能够加快数据访问速率,提升处理器的数据处理速度。
高带宽存储器(high bandwidth memory,HBM)能够作为缓存,尤其可以作为缓存中的最后一级缓存。HBM具备HBM旁路(bypass)特性,HBM借助该特性HBM可以分析确定哪些数据可以保留在HBM中,这样处理器在后续读取这些数据时,HBM可以将这些数据传输到上一级缓存中,在一定程度上能够加快数据访问速率。
但HBM的HBM bypass特性依靠的是HBM自身在短时间内的学习能力,最终分析确定的保留在该HBM中的数据可能并非一定是处理器会经常调用的数据,并不能有效的加快数据访问速率。
发明内容
本申请提供一种数据处理方法、处理器、计算设备及装置,用以使缓存存储处理器经常调用的数据。
第一方面,提供了一种数据处理方法,该方法可以由处理器执行,在该方法中,处理器获取源代码编译后生成的可执行代码,该可执行代码中包括扩展指令对应的代码,扩展指令用于指示将目标数据需驻留在缓存,目标数据为执行可执行代码的过程中需频繁调用的数据。处理器在获取该可执行代码后,执行该可执行代码,在执行到可执行代码中扩展指令对应的代码时,处理器获取目标数据并将目标数据存储在缓存中。为了与下文出现的扩展指令进行区分,将这里的扩展指令称为第一扩展指令。
通过上述方法,处理器获取的可执行代码中直接携带了第一扩展指令,处理器通过执行该第一扩展指令对应的代码可将目标数据驻留在缓存中,能够使得缓存有效、准确的存储处理器会经常调用的数据,有效保证了处理器的数据读写速率。
在一种可能的实施方式中,处理器为了获取可执行代码,先对源代码进行分析,从可执行代码在运行过程调用的数据中找到复用评分大于阈值的目标数据。目标数据的复用评分表征了该目标数据的复用程度,复用程度可以表征该目标数据被调用的次数或者频率。处理器在确定了目标数据后,在源代码中插入第一扩展指令,并对插入了第一扩展指令的源代码进行编译,生成可执行代码。
处理器中可以包括有具备编译能力的编译器,上述操作可以由编译器执行,该编译器可以是处理器运行的软件程序,也可以是处理器上的硬件模块。在这里仅是以编译器是处理器中的一部分为例进行说明,在一些可能的场景中,编译器也可以是独立于该处理器的软件程序或硬件模块,如部署在其他处理器上的软件程序或硬件模块。在这种场景下,编译器可以在编译生成可执行代码后,将该可执行代码发送给处理器,以使得该处理器执行该可执行代码。
通过上述方法,处理器能够通过分析源代码确定目标数据,使得最终确定的目标数据是该处理器在运行过程中会频繁调用的数据,相较于基于HBM的bypass特性所确定的数据,分析源代码所确定的目标数据更加准确。
在一种可能的实施方式中,处理器在将目标数据存储在缓存中时,可以向缓存发送驻留指令,驻留指令用于指示目标数据存储在缓存中,以指示缓存能够根据该驻留指令获取并存储该目标数据。
对于缓存,缓存在接收到该驻留指令后,获取目标数据,根据驻留指令存储目标数据。这里的缓存可是处理器与内存之间多级缓存中的任一级缓存。
通过上述方法,处理器通过发送驻留指令的方式,保证缓存能够有效的将目标数据保存在缓存中,避免处理器从内存获取该目标数据。
在一种可能的实施方式中,缓存的LLC为HBM,第一扩展指令指示目标数据驻留在LLC中。
通过上述方法,HBM具备高带宽、且支持大容量的数据存储,能够使得大量的目标数据存储在HBM中,处理器可以高速的从HBM获取该目标数据。
在一种可能的实施方式中,对于缓存,如对于任一级缓存,缓存中可以配置有数据替换策略,该数据替换策略指示优先剔除目标数据之外的其他数据。例如,当缓存中空闲空间小于阈值时,缓存需要剔除一些数据,缓存可以先剔除已存储的数据中除目标数据之外的其他数据。
通过上述方法,缓存配置有的数据替换策略,能够有效增大目标数据在缓存中的驻留时长。
在一种可能的实施方式中,处理器(如处理器中的编译器)还能够更新目标数据,并更新可执行代码。例如,处理器可以获取PMU记录的事件,如与缓存相关的事件、与处理器执行可执行代码的相关的事件。处理器根据PMU记录的事件更新目标数据,如增加新的目标数据、或删减一些目标数据。处理器在源代码中插入第二扩展指令,第二扩展指令用于指示更新后的目标数据需驻留在缓存。处理器对插入了第二扩展指令后的源代码进行重新编译,执行重新编译生成的可执行代码。处理器执行重新编译生成的可执行代码的方式与前述处理器执行可执行代码的方式类似,此处不再赘述。
通过上述方法,处理器能够更新目标数据,保证处理器经常调用的数据能够驻留在缓存中。
在一种可能的实施方式中,本申请并不限定处理器在源代码插入第一扩展指令或第二扩展指令的位置。这里以插入第一扩展指令为例,处理器可以在源代码中首次调用目标数据的代码的相邻行,插入第一扩展指令,如处理器在源代码中首次调用目标数据的代码的前一行或后一行插入该第一扩展指令。
通过上述方法,处理器在源代码中与首次调用目标数据的代码接近的位置插入该第一扩展指令,使得在后续执行可执行代码的过程中目标数据可以尽早驻留在缓存中。
在一种可能的实施方式中,处理器分析源代码确定目标数据时,可以从该源代码中确定一些包含有循环的函数,确定所源代码中各个函数的循环序列,函数的循环序列包括该函数的至少一个循环。对任一函数的循环序列,处理器计算函数的循环序列中各个循环包括的访问节点对应的数据的复用评分。处理器根据访问节点对应的数据的复用评分确定目标数据。
通过上述方法,函数中的循环是需要被频繁执行的,循环中访存节点对应的数据一定包括该处理器执行可执行代码过程经常调用的数据,处理器通过计算循环包括的访问节点对应的数据的复用评分可以有效确定出目标数据。
第二方面,提供了一种数据处理装置,该数据处理装置具有实现上述第以方面的方法实例中行为的功能,有益效果可以参见第一方面的描述此处不再赘述。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。在一个可能的设计中,所述数据处理装置的结构中包括编译模块、执行模块,这些模块可以执行上述第一方面方法示例中的相应功能,具体参见方法示例中的详细描述,此处不做赘述。
第三方面,本申请提供了一种处理器,所述处理器包括逻辑电路和供电电路,所述供电电路用于为所述逻辑电路供电,所述逻辑电路用于执行如第一方面或第一方面中任一种可能的实现方式所述的方法的操作步骤。
第四方面,本申请还提供一种芯片,所述芯片与存储器相连,所述芯片包括处理器以及缓存,该处理器用于读取并执行所述存储器中存储的计算机程序代码,执行上述第一方面以及第一方面的各个可能的实施方式中所述的方法。
第五方面,本申请还提供了一种计算设备,该计算设备包括第三方面提及的芯片,或该计算设备包括缓存和处理器。可选的,该计算设备还包括存储器,该存储器用于存储源代码以及可执行代码。处理器具有实现上述第一方面或第一方面任一种可能的实现方式所述的方法实例中行为的功能,有益效果可以参见第一方面的描述此处不再赘述。
第六方面,本申请还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面以及第一方面的各个可能的实施方式中所述的方法。
第七方面,本申请还提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面以及第一方面的各个可能的实施方式中所述的方法。
本申请在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。
附图说明
图1为本申请提供的一种系统的架构示意图;
图2为本申请提供的一种数据处理方法示意图;
图3为本申请提供的一种确定目标数据的方法示意图;
图4A为本申请提供的一种直接访存以及访问节点的追溯示意图;
图4B为本申请提供的一种间接访存以及访问节点的追溯示意图;
图5为本申请提供的一种数据处理装置的结构示意图;
图6为本申请提供的一种计算设备的示意图。
具体实施方式
在对本申请提供的一种数据处理方法说明之前,先对本申请涉及的一些概念进行说明。
(1)源代码、可执行代码。
源代码是由编程人员编写的文本文件。程序员以人类可读的语言编写代码为源代码,像Java、C++、C#等等。源代码是按照某种特定语言的惯例和规则编写的。源代码是人类可读的,但是机器(如处理器)是无法识别的。
可执行代码则是机器可以识别,且可以由机器执行的,其中包含了机器可识别的二进制的指令。编译器可以将源代码转换为可执行代码。
(2)性能监控单元(performance monitoring unit,PMU)。
PMU为一种硬件装置,PMU主要用于跟踪、计数系统的一些底层硬件事件,如与处理器有关的事件(如各指令的执行次数、处理器捕获异常情况的数量、处理器的时钟周期数等)、与缓存有关的事件(如缓存中各级缓存被访问的次数,缓存中发生的未命中(miss)次数等)。这些事件能够表征处理器在执行可执行代码的过程中的行为。
在本申请中,处理器(如处理器中的编译器)能够借助PMU采集到的事件,分析出包含有扩展指令的可执行代码的执行过程,如处理器能够分析该函数中各个分支的分支概率,还能够确定在执行该可执行代码过程对目标数据的复用程度。处理器可以根据分析获得的分支概率调整函数的关键循环序列,处理器还可以根据对数据的复用程度,更新目标数据,从目标数据中去除一些复用程度较低的数据,或增加一些复用程度较高的数据。
(3)函数、循环。
源代码在编写过程中需要满足一定编写规范,如面向对象程序编程(object-oriented programming,OOP)、面向过程程序编程(procedure-oriented programming,POP)等。面向对象程序编程的程序语言有C++,Java,C#等,面向过程程序编程的程序语言有fortran,C等。
采用一定编写规范所编写而成的源代码中可以包括函数/方法、域/变量等代码元素。
函数/方法(function/method)指的是类中的一种子程序。一个方法通常以一系列的语句所组成,并能够完成一个功能。在面向对象编程的编写规范中称为方法,在面向过程编程的编写规范中称为函数。在本申请实施例中统称为“函数”。
循环是函数中可能包含的一类程序。循环是指在满足条件的情况下需要多次执行的一段程序,在不满足条件时,可以跳出循环。
域/变量(field/variable)存储一些数据,如整数与字符,字符串、散列表、指针等。域/变量可以作为本申请实施例提及的目标数据。
(4)访存指令、访存节点。
访存节点是指源代码中需要执行数据访问或存储的操作,访问节点包括基地址以及索引。访存节点可以表示为[A,index],其中,A表示基地址,该基地址即为用于存储数据的地址,index指示索引,用于表征需要访问或存储数据在该基地址的位置。
访存指令是指包含有访问节点的指令。访存指令有很多种。这里列举其中一种。如赋值指令中将基地址A上索引I所指的位置处的数据赋予变量P。在执行该赋值指令中,需要从基地址A上索引I所指的位置读取数据,确定赋予变量P的值。具备不同语义的访存指令中所包括的访存节点不同,所包括的访存节点的数量也不同。
(5)基础块。
对于任一函数,编译器按照预设的标准将该函数拆分为多个独立的指令集合。任一独立的指令集合即为基础块。函数中第一个被执行的基础块为该函数的入口基础块,最后一个被执行的基础块为该函数的出口基础块。循环中第一个被执行的基础块为该循环的头部基础块。
(6)分支、分支概率。
函数存在一个位置,在该位置处可以跳转到多种执行路径上。该位置通常为if语句、while语句、else语句等存在判断情况的语句所在的位置。当在执行该位置处时,每次只能执行该多种执行路径中一个。任一执行路径可以称为一个分支。任一分支被执行的概率称为分支概率。分支概率与该位置处存在判断情况的语句有关。在本申请中,编译器能够分析该位置处存在判断情况的语句的具体语义估算各个分支的分支概率。例如,x的取值范围为从1到10的整数,若该位置处存在判断情况的语句为if x>8,那么可以说明此处将会被分为两个分支,一个分支为x>8的分支,一个分支为x<8的分支,基于x的取值范围可以x>8的分支的分支概率为20%,x<8的分支的分支概率为80%。
下面结合附图进一步介绍本申请所提供的数据处理方法。
为了提升缓存200中驻留数据的有效性,本申请提供一种数据处理方法,处理器100可以对源代码进行分析,确定目标数据,目标数据为该源代码对应的可执行代码在执行过程中需频繁调用的数据。处理器100能够在该源代码中插入针对该目标数据的扩展指令,该扩展指令用于指示将该目标数据驻留在缓存200中。处理器100将插入了扩展指令的源代码编译为可执行代码,并执行可执行代码。处理器100执行该可执行代码时,在执行到该扩展指令对应的代码时,获取该目标数据并将该目标数据存储在缓存200中。在本申请中,处理器100执行到该扩展指令对应的代码时,可以将目标数据提前写入到缓存200中,以提高处理器100的数据读写效率。
如图1所示,为本申请提供的一种系统结构示意图,该系统结构中包括处理器100、以及缓存200,可选的,还包括存储器300。该存储器300可理解为该处理器100的内存。该处理器100包括编译器110、以及PMU120。本申请并不限定该系统的具体形态,该系统可以为计算机芯片,如片上芯片(system on chip,SoC)。
对于编译器110,该编译器110可以为该处理器100上运行的软件程序,也可以为该处理器100的部分硬件模块。PMU120可以作为一个硬件模块位于处理器100内部。
图1所示仅是一种可能的系统结构,在一些示例中,编译器110、以及PMU120可以为独立于处理器100、位于处理器100之外的一个硬件模块或软件程序。在本申请实施例中仅是以图1所示的系统结构为例进行说明,对于编译器110、以及PMU120可以为独立于处理器100的场景中,从功能角度,处理器100、编译器110、以及PMU120相似,此处不再赘述。
本申请并不限定该处理器100的类型,凡是能够用于执行可执行代码的处理器100均适用于本申请实施例。处理器100可以为中央处理单元(central processing unit,CPU)、图像处理器(graphics processing unit,GPU)等。处理器100也可以通过专用集成电路(application-specific integrated circuit,ASIC)实现,或可编程逻辑器件(programmable logic device,PLD)实现,上述PLD可以是复杂程序逻辑器件(complexprogrammable logical device,CPLD),现场可编程门阵列(field-programmable gatearray,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。
本申请实施例,该系统中的缓存200包括多级缓存,其中,该多级缓存中最后一级缓存210可以为高带宽存储器(high bandwidth memory,HBM)。“多级缓存”将缓存200划分为多级,位置越靠近处理器100的内核的缓存级别越小,读写速度越快,容量也相对较小。也就是说,该多级缓存中最后一级缓存210(last level cache,LLC)是多级缓存中距离处理器100的内核最远,且容量最大的缓存。LLC210能够用于缓存200处理器100与内存之间的交互的数据。从处理器100的角度,该LLC可以理解为处理器100的缓存。从内存的角度,该LLC也可以被用作内存的缓存。
相较于静态随机存取存储器(static random-access memory,SRAM)作为最后一级缓存210的情况,HBM支持大容量的数据存储,能够有效扩展缓存200的容量。HBM还具备更高的带宽,能够有效提升缓存200的数据读写速率,更加适用于并发访问的场景。
编译器110为运行在该处理器100的软件程序或处理器100的硬件模块,也可以为运行在其他处理器100上的软件程序或处理器100的硬件模块。编译器110具备编译能力,能够将该处理器100需要执行的源代码编译为该处理器100能够识别的可执行代码。在本申请中,编译器110具有分析能力,能够通过分析源代码确定出该源代码需要经常调用的目标数据,在源代码中针对该目标数据的扩展指令,该扩展指令用于指示该目标数据需驻留在LLC中。之后,编译器110再对插入该扩展指令的源代码进行编译,生成该处理器100需执行的可执行代码。
需要说明的是,以扩展指令指示该目标数据需驻留在LLC210为例进行说,在一些场景中,该扩展指令也可以指示该目标数据驻留在缓存200包括的其他级缓存中。
处理器100能够获取编译器110编译后的可执行代码,并执行该可执行代码。处理器100在执行该可执行代码的过程中,处理器100可以将需要处理的数据从存储器300迁移到缓存200中,还可以将处理后的数据存储在缓存200中。当处理器100执行到该可执行代码中扩展指令对应的代码时,可以向LLC发起驻留指令,该驻留指令用于指示该LLC存储该目标数据。
在处理器100执行该可执行代码的过程中,PMU120可以监控该过程,记录与处理器100相关(尤其是处理器100在执行可执行代码过程中的事件),以及与缓存200相关的事件。
编译器110可以调取该PMU120记录的事件,对所确定的目标数据进行更新,并针对更新后的目标数据在源代码中加入扩展指令,并编译生成新的可执行代码。处理器100可以获取新的可执行代码,执行该新的可执行代码。
存储器300通常用来存放处理器100需要执行的计算机程序代码等。在本申请实施例中,存储器300可以用于存储编译器110的可执行代码,处理器100通过调用该可执行代码可以运行编译器110。存储器300还可以存储编译器110需要编译的源代码,编译器110可以从该存储器300中调用该源代码,对源代码进行分析编译。该存储器300还可以存储源代码编译后生成的可执行代码。编译器110在编译获得可执行代码后,可以将该可执行代码存储在该存储器300中,处理器100可以调用该可执行代码,执行该可执行代码。
存储器300通常采用动态随机存取存储器(dynamic random access memory,DRAM)作为存储器300。除了DRAM之外,存储器300还可以是其他随机存取存储器,例如SRAM等。另外,存储器300也可以是只读存储器(read only memory,ROM)。而对于只读存储器,举例来说,可以是可编程只读存储器(programmable read only memory,PROM)、可抹除可编程只读存储器(erasable programmable read only memory,EPROM)等,该存储器300还可以为是双列直插式存储器模块或双线存储器模块(dual in-line memory module,DIMM),即由动态随机存取存储器(DRAM)组成的模块,还可以是固态硬盘(Solid State Disk,SSD)。该存储器300也可以为上述存储器的组合,本申请实施例并不限定存储器300的数量以及类型。
在上述说明中,目标数据是编译器110通过分析该源代码中函数中的循环获取的,该目标数据可以是通过源代码中的函数在运行过程中需要调用的部分数据。在实际应用中,编程人员可以编写源代码的过程中,可以对一些需要经常调用的数据进行标注。编译器110可以能够识别该标注,将带有标注的数据作为目标数据。
区别与仅是具备编译能力的编译器110,本申请实施例中所提供的编译器110具备分析能力,能够确定目标数据,编译器110还具备扩展指令插入能力,能够在源代码插入针对该目标数据的扩展指令,并能够对该扩展指令进行编译。由于该编译器110的存在,使得处理器100所需执行的可执行代码中增加了指示目标数据驻留在缓存200中的相关代码(扩展指令对应的代码),使得处理器100能够提前将目标数据写入到缓存200中,避免了处理器100从内存多次读取目标数据,提高了数据读取速率。另外,编译器110还能够更新目标数据,进而生成新的可执行代码。更新后的目标数据更加符合处理器100执行可执行代码的实际情况。处理器100执行新的可执行代码的过程中,也能够将真正被经常调用到的数据提前写入到缓存200中,进一步保证了处理器100的数据读取速率。
下面结合图2对本申请提供的一种数据处理方法进行说明,该方法包括:
步骤201:处理器100获取源代码。处理器100可以从存储器300中获取需要编译的源代码。
步骤202:处理器100对该源代码进行分析,确定目标数据。该目标数据为该源代码编译后的可执行代码执行过程中需要频繁调用的数据,该目标数据的中复用评分大于阈值的数据。数据的复用评分用于表征该数据的复用程度。
步骤201~步骤202可以由处理器100中的编译器110执行,在下述说明中以处理器100执行该步骤201~步骤202进行说明。
本申请提供了两种目标数据的确定方式,下面分别进行说明:
方式一、识别源代码中带有标注的数据。
源代码是由编程人员利用人类可读的语言编写形成的,编程人员或者其他人员通过理解该源代码能够更加了解该源代码所需表征的意义,也能够明确该源代码中需要经常被调用的数据。为此,编程人员或者其他人员可以根据自身对源代码的理解确定经常被调用的数据,并对这些数据进行标注。例如,编程人员或者其他人员在首次引入该数据处,在该数据之前或之后增加标注,以指示该数据为经常调用的数据。该标注是以与处理器100预先约定的格式设置的。
处理器100在分析该源代码时,可以识别带有标注的数据,将带有标注的数据作为目标数据。
方式二、分析源代码,确定目标数据。
处理器100在执行由源代码所生成的可执行代码时,会按照源代码的逻辑执行该可执行代码。在源代码中能够被经常调用的数据通常是循环所涉及到的数据。循环是函数中可能包括的一段代码。处理器100在执行循环时,在满足循环条件(如某一变量的值是否满足小于阈值或大于阈值)的情况下,会一直多次执行该循环,直至不满足循环条件,在不满足循环条件时,会调出该循环,执行该循环之后的相关代码。
由于循环可能被多次执行,该循环中所调用的数据可能为目标数据。故而,处理器100可以对该源代码进行分析,确定该源代码中包括的循环。根据循环中所调用的数据确定目标数据。
处理器100可以直接将每个循环中所调用的数据均作为目标数据,处理器100也可以对该循环进行分析,确定循环次数或循环内部调用数据的次数大于阈值的目标循环,将目标循环所调用的数据作为目标数据。在这种情况下,目标循环的循环次数或循环内部调用数据的次数表征作为该目标数据的复用程度,也就是说,可以将目标循环的循环次数或循环内部调用数据的次数作为数据的复用评分,选择目标循环所涉及的数据即为目标数据。
本申请实施例并不限定处理器100根据源代码中各个循环所调用的数据确定目标数据的方式,凡是能够利用根据源代码中各个循环所调用的数据确定目标数据的方式均适用于本申请实施例。
针对方式2,如图3所示,本申请提供了一种确定目标数据的方式,具体可以参见如下步骤:
步骤2021:处理器100从源代码中筛选关键循环。该关键循环是指满足第一筛选条件的循环,该第一筛选条件包括下列的部分或全部:循环中访问节点大于节点阈值、循环中访问指令对该循环中所有指令的占比大于比例阈值。节点阈值以及比例阈值可以是预先设置的。
在执行步骤2021时,处理器100可以依次从不同粒度对该源代码进行筛选。
首先,处理器100可以从函数粒度对该源代码进行筛选,去除源代码中的复杂函数、以及一些仅执行一次的函数,从该源代码中找到第一候选函数。该第一候选函数满足下列的部分或全部:
1、函数中包括循环。
2、函数不属于库函数。
3、函数中并未定义新的运算。
之后,处理器100再从循环的粒度对该第一候选函数进行进一步筛选,去除包括多个分支的循环或需要与函数之外其他数据(如文件或函数)协同的函数,从中筛选出第二候选函数。该第二候选函数满足下列的部分或全部:
1、函数中的循环只包括单个退出边。
2、函数中的循环中不涉及多个分支。
3、函数中的循环不是由宏定义的循环。
4、函数中的循环中未调用除该源代码之外的文件。
5、函数中的循环中不调用其他函数。
6、函数中的循环中不调用该函数中自定义的运算。
最后,处理器100可以从第二候选函数,确定该第二候选函数中循环所包括的访存节点的数量,以及访问指令对该循环中所有指令的占比,进而确定出满足筛选条件的关键循环。
需要说明的是,在一些源代码中,存在嵌套的循环,例如,循环A内部还包括循环B,又例如,循环C内部还包括循环D,循环D中还包括循环E。由于最内层的循环(如循环B以及循环D)是执行次数最多的循环,处理器100筛选关键循环时可以只考虑最内层循环。也即关键循环是最内层的循环。当然,处理器100筛选关键循环时也可以考虑外层的循环,也即关键循环可以为最内层的循环,也可以为外层的循环。
步骤2022:处理器100确定源代码中每个函数的关键循环序列。函数的关键循环序列包括函数的至少一个关键循环,在该函数的关键循环序列中至少一个关键循环可以按照执行顺序排序。
在步骤2022中处理器100确定了关键循环。处理器100可以对源代码中的各个函数进行分析,从中确定出包括关键循环的目标函数,将该目标函数中的各个关键循环按照执行顺序排列生成该函数的关键循环序列。
需要说明的是,当函数中存在多个分支,该函数的关键循环分布在该多个分支上,处理器100可以选择该多个分支中分支概率最高的分支上分布的关键循环,将这些关键循环按照在该分支上的执行顺序排序,生成该函数的关键循环序列。也即该函数的关键循环序列为该函数中分支概率最高的分支的关键循环序列,该分支的关键循环序列中的关键循环为该分支上的关键循环。
处理器100也可以将每个分支上的关键循环按照所在分支的执行顺序进行排序,生成每个分支的关键循环序列,处理器100将每个分支的关键循环序列组合、生成函数的关键循环序列。也即该函数的关键循环序列包括各个分支的关键循环序列。
本申请提供了一种获取函数的关键循环序列的方法,具体方法如下:
对于任一函数,处理器100可以以基础块为粒度对该函数进行遍历,以获得该函数的关键循环序列。处理器100也可以针对该源代码以基础块为粒度从函数中入口基本块开始遍历,直至该函数的出口基础块。处理器100每遍历一个基础块,可以执行如下步骤:
步骤1、确定该基本块是否为循环的头部基本块。若是,则执行步骤2,否则执行步骤5。
步骤2、确定该循环是否未被遍历过,若是,则执行步骤3,否则,执行步骤5。
步骤3、确定该循环是否为关键循环。若是,执行步骤4,否则执行步骤5。
步骤4、将该循环加入到关键循环序列中,将该循环标注为已遍历过的循环。
步骤5、结束该基础块的遍历,提取下一个基础块,执行步骤1。
需要说明的是,在执行步骤5时,若函数中包括多个分支,该下一个基础块可以选择分支概率最高的分支上的基础块。
处理器100(具体为处理器中编译器)循环执行上述步骤1~步骤5,在从入口基础块遍历到出口基础块后,可以生成该函数的关键循环序列。
步骤2023:对于任一函数的关键循环序列,处理器100对该关键循环序列各个关键循环的访存指令的访存节点进行追溯,确定该访存节点所对应的数据。该访存节点所对应的数据即为该访存节点的基地址上所存储的数据。
步骤2024:处理器100计算各个访存节点所对应的数据的复用评分。处理器100可以根据各个访存节点所对应数据的调用方式对该计算各个访存节点所对应的数据的复用评分。
访存节点所对应数据的调用方式描述了在调用该数据时采用的方式。调用方式包括但不限于:数据复用方式、访存节点指示的访存方式、数据的读写方式。
1),数据复用方式。
其中,数据复用方式是指多次调用数据之间的执行关系。
在执行源代码对应的可执行代码时,可以同时对该数据进行调用,这类调用体现在源代码中通常具有表征并行计算的导语,在这类并行计算导语之后调用的数据,即为需要并行复用的数据,相应的,这种数据复用方式为并行的复用方式。当然,对数据的调用也可以是逐次调用的,这种数据调用复用方式为串行的复用方式。
不同数据复用方式,数据的复用次数也可能不同。数据的复用次数指示数据被调用的次数。
2),访存节点指示的访存方式。
访存节点指示的访存方式分为直接访存和间接访存。其中,直接访存是指访存节点中索引是直接指示的,也即访存节点中索引部分是索引的具体取值。
为了方便理解访存节点指示的访存方式,下面结合图4A以及图4B进行说明。
如图4A所示,为本申请提供的一种直接访存以及访问节点的追溯示意图。图4A中展示了包括了5个指令的源代码,每行代码即为一个指令,每行代码之前的数字为该指令的编号。图4A左侧的树状结构描述5个指令的关系,其中箭头指示的方式为追溯方向。该树状结构中节点中数字代表指令的编号,编号下的字符用于指示该指令的类型。其中,load表示加载指令、addr表示取地址上的数据、add表示加法指令、mult表示乘法指令、conv表示强转指令。节点中u用于表示指令3中出现的变量u。
其中,编号为4的指令即为访存指令,该访存指令中携带有访存节点,访存节点为“[]”中表示的部分。其中base之后的部分为基地址。Index之后的部分为索引。该访存节点直接指示了索引以及基地址,属于直接访存。
间接访存是指访存节点中索引是间接指示的,也即访存节点中的索引部分并非是具体取值,而是需要经过进一步解引。
如图4B所示,为本申请提供一种间接访存以及访问节点的追溯示意图。图4B中展示了包括了5个指令的源代码,每行代码即为一个指令,每行代码之前的数字为该指令的编号。图4B左侧的树状结构描述5个指令的关系,其中箭头指示的方式为追溯方向。该树状结构中节点中数字代表指令的编号,编号下的字符用于指示该指令代表的操作。其中,addr表示取地址上的数据、add表示加法指令、mult表示乘法指令、mem表示访存指令。节点中psi用于表示指令4中出现的变量psi。
其中,编号为5的指令即为访存指令,该访存指令中携带有访存节点,访存节点为“[]”中表示的部分。[]内部的并未直接指示基地址以及索引,需要进行进一步进行解引,属于间接访存。
3),数据的读写方式。
数据的读写方式指示写入数据或读取数据。通常认为写入数据时的功耗大于读取数据的功耗。
任一数据x的复用评分Level可以采用如下公式计算:
Level=parallel(x)*(reuse(x)+regular(x)+cost(x))
其中,parallel(x)表征数据x被并行复用或被串行复用,并行复用以及串行复用取不同的值,并行复用的取值可以大于串行复用的取值。reuse(x)用于指示数据x为串行复用的次数。regular(x)表征数据的访存方式,直接访存以及间接访存可以对应regular(x)不同的取值。cost(x)用于指示数据的读写方式,写入数据或读取数据可以对应cost(x)不同的取值。
各个访存节点所对应的数据的复用评分表征了该数据的复用程度,复用程度越大说明该数据的调用次数也就越多,相应的,该数据的复用评分也就越高。
步骤2025:处理器100将复用评分最大的N个数据作为目标数据,N为预设的正整数。
步骤203:处理器100在源代码中首次调用该目标数据的相关位置处插入扩展指令。该扩展指令用于指示该将该目标数据驻留在LLC中。
首次调用该目标数据的相关位置可以是源代码中首次调用该目标数据的代码的相邻行或前后几行。例如,首次调用该目标数据的相关位置可以位于首次调用该目标数据的代码之前,如首次调用该目标数据的代码的前一行,或前K行,K为正整数。又例如,首次调用该目标数据的相关位置也可以位于首次引入该目标数据的代码之后,如首次调用该目标数据的代码的后一行,或后K行,K为正整数。
步骤204:处理器100对插入扩展指令的源代码进行编译,生成包括有扩展指令对应代码的可执行代码。处理器100在生成该可执行代码后,可以将该可执行代码存储在存储器300中。
在本申请实施例中处理器100具备对扩展指令进行编译的能力,能够将该扩展指令编译为能够被机器识别的汇编指令。处理器100可以对该插入扩展指令的源代码中的指令进行编译,生成可执行代码。
步骤205:处理器100执行该可执行代码,处理器100在执行到扩展指令对应的代码(也即执行到扩展指令对应的汇编指令)时,处理器100可以向LLC210发送驻留指令,该驻留指令用于指示该LLC210存储该目标数据。
若可执行代码存储在存储器300中,处理器100可以先从该存储器300中获取该可执行代码,在获取该可执行代码后执行该可执行代码。
步骤206:LLC210在接收到该驻留指令后,获取该目标数据(如LLC210可以从内存中获取该数据),并存储该目标数据。
也就是说,处理器100针对任一目标数据,均会执行步骤205,这样LLC210中的数据可以分为两类,一类为驻留指令所指示的目标数据,另一类为其他数据。
为了能够进一步提高该目标数据在该LLC210中存储的时间(也即目标数据在LLC210中的驻留时间),LLC210中可以配置有数据替换策略,该数据替换策略指示在需要剔除LLC210中的数据(如LLC210中空闲空间小于阈值)时,优先剔除除目标数据之外的其他数据。
本申请实施例并不限定LLC210执行该数据替换策略的方式,下面列举其中两种可能的执行方式。
方式一:在LLC210,LLC210可以能够设置数据的类型,第一类型的数据为驻留指令所指示的目标数据,第二类型的数据为其他数据。例如,LLC210在接收到该驻留指令时,可以将该驻留指令所指示的数据的类型设置为第一类型。其他数据则相应的设置为第二类型。
LLC210还可以为不同类型的数据设置驻留值,驻留值有预设的取值范围,也即驻留值的最大值与最小值是确定的。第一类型的数据驻留值取最小值。
初始,第二类型的数据的驻留值可以设置为比第一类型的数据的驻留值大的值,也可以为设置为最小值。本申请并不限定第二类型的数据的驻留值的具体取值,不同的第二类型的数据的驻留值可以相同,也可以不同。
当LLC210中不存在空闲空间或者空闲空间小于阈值,无法继续存储新的数据时,LLC210可以剔除已存储的数据,LLC210可以优先剔除数据的驻留值等于最大值的数据。
若该LLC210中不存在驻留值等于最大值的数据,LLC210可以提高第二类型的数据的驻留值,并剔除数据的驻留值为最大值的数据。若提高第二类型的数据的驻留值,LLC210仍不存在驻留值为最大值的数据,可以继续提高第二类型的数据的驻留值。
方式二:在LLC210,LLC210可以能够设置数据的类型,第一类型的数据为驻留指令所指示的目标数据,第二类型的数据为其他数据。例如,LLC210在接收到该驻留指令时,可以将该驻留指令所指示的数据的类型设置为第一类型。其他数据则相应的设置为第二类型。
LLC210还可以为不同类型的数据设置驻留值,驻留值有预设的取值范围,也即驻留值的最大值与最小值是确定的。第一类型的数据驻留值取最小值。
LLC210还可以设置计数值,该计数值用于记录LLC210修改第二类型的数据的驻留值的次数。每修改一次第二类型的数据的驻留值,该计数值加一。
初始,第二类型的数据的驻留值可以设置为比第一类型的数据的驻留值大的值,也可以为设置为最小值。本申请并不限定第二类型的数据的驻留值的具体取值,不同的第二类型的数据的驻留值可以相同,也可以不同。
当LLC210中不存在空闲空间或者空闲空间小于阈值,无法继续存储新的数据时,LLC210可以剔除已存储的数据,LLC210可以优先剔除数据的驻留值等于最大值的数据。
若该LLC210中不存在驻留值等于最大值的数据,先判断计数值是否大于设定值,若计算值不大于设定值,LLC210可以提高第二类型的数据的驻留值,计数值加一,并剔除数据的驻留值为最大值的数据。若计数值大于设定值,LLC210可以统一提高第一类型的数据的驻留值,剔除数据的驻留值等于最大值的数据。
若提高第二类型或第二类型的数据的驻留值后,LLC210仍不存在驻留值为最大值的数据,可以继续执行前述操作,也即判断计数值是否大于设定值,若计数值不大于设定值,LLC210可以提高第二类型的数据的驻留值,计数值加一,并剔除数据的驻留值为最大值的数据。若计数值大于设定值,LLC210可以统一提高第一类型的数据的驻留值,剔除数据的驻留值等于最大值的数据。
在本申请实施例中,处理器100还可以更新目标数据,如增加目标数据或减少目标数据。处理器100可以在源代码中插入针对更新后的目标数据的扩展指令,并编译生成新的可执行代码。由该处理器100执行该新的可执行代码。处理器100更新目标数据的方式可以参见步骤206。
步骤207:处理器100获取PMU120记录的事件,根据PMU120记录的事件更新目标数据。
处理器100可以根据PMU120记录的事件(如各指令的执行次数、以及缓存200未命中数据的事件)分析源代码函数中各个分支的分支概率。举例来说,PMU120记录的事件中包缓存200中未命中数据的事件,当数据未在缓存200中命中时,调用该数据的分支将不会被执行,说明实际执行该可执行代码时各个分支的分支概率与分析源代码获得的分支概率会存在差别。PMU120记录的事件中包括各个指令的执行次数,不同分支中指令的执行次数能够表明各个分支的执行次数,进而确定各个分支的分支概率。
处理器100可以通过PMU120记录的事件确定实际执行该可执行代码时各个分支的分支概率。处理器100根据所确定的分支的分支概率,可以重新生成该函数的关键循环序列(适用于该函数的关键循环序列为函数中分支概率最大的分支的关键循环序列的场景)。
另外,处理器100在计算数据的复用评分时,还可以参考PMU120记录的事件,例如,当PMU120记录的、与缓存200相关的事件中显示某一数据多次在缓存200中未命中,说明该数据的复用程度较高,处理器100可以提高该数据的复用评分。具体的,处理器100可以在数据的复用评分的计算公式中加入一个与PMU120记录的、与缓存200相关的事件相关的权重值,当PMU120记录的、与缓存200相关的事件中显示某一数据在缓存200中未命中的次数大于某一特定值时,可以将该权重值的取值变为一个较大的值,以提高该数据的复用评分。
步骤208:处理器100在首次引入更新后的目标数据的相关位置处插入扩展指令。该扩展指令用于指示该将该更新后的目标数据驻留在LLC中。处理器100执行步骤207的方式与执行步骤203的方式类似,具体可以参见前述说明,此处不再赘述。
步骤209:处理器100对插入扩展指令的源代码进行编译,生成包括有扩展指令对应代码的可执行代码。处理器100执行步骤208的方式与执行步骤204的方式类似,具体可以参见前述说明,此处不再赘述。之后,处理器100可以将该可执行代码发送给处理器100,处理器100再执行该新的可执行代码。处理器100执行该可执行代码的方式可以参见步骤205~步骤206的相关说明,此处不再赘述。
在本申请中,处理器100能够对源代码进行分析进而确定出处理器100在执行可执行代码过程中会频繁调用的目标数据。从源代码本身出发所确定的目标数据更加准确,是真正意义上处理器100会频繁调用的数据。处理器100在确定目标数据后,可以在源代码中插入正规该目标数据的扩展指令,之后再对源代码进行编译生成可执行代码,这样可执行代码中包括了扩展指令对应的代码。在处理器100在执行该可执行代码的过程中,当执行到该扩展指令对应的代码时,处理器100可以依据该扩展指令获取目标数据,并将目标数据存储在缓存200中。这样缓存200中可以提前存储该目标数据,避免处理器100在需要调用该目标数据时需要从内存中调用该目标数据。有效提高了处理器100的数据读写速率。另外,由于处理器100能够根据执行可执行代码过程中PMU120记录的事件更新目标数据,进而更新可执行代码,提升了目标数据的准确性。能够保证将处理器100真正频繁调用的目标数据存储在缓存200中,进一步处理器100的数据读写速率。
基于与方法实施例同一发明构思,本申请还提供了一种数据处理装置,该数据处理装置用于执行上述如图2或图3所示的方法示例中所述处理器100执行的方法,相关特征可参见上述方法示例,此处不再赘述。如图5所示,数据处理装置500包括编译模块501、执行模块502。
编译模块501,用于获取可执行代码,可执行代码中包括第一扩展指令对应的代码,第一扩展指令用于指示将目标数据需驻留在缓存,目标数据为执行可执行代码的过程中需多次调用的数据。该第一扩展指令对于如图2所示的实施例中提及的扩展指令。
执行模块502,用于执行可执行代码中第一扩展指令对应的代码,获取目标数据并将目标数据存储在缓存中。
应理解的是,本发明本申请实施例的数据处理装置500可以通过中央处理单元(central processing unit,CPU)实现,也可以通过专用集成电路(application-specificintegrated circuit,ASIC)实现,或可编程逻辑器件(programmable logic device,PLD)实现,上述PLD可以是复杂程序逻辑器件(complex programmable logical device,CPLD),现场可编程门阵列(field-programmable gate array,FPGA),通用阵列逻辑(genericarray logic,GAL)、数据处理单元(data processing unit,DPU)、片上系统(system onchip,SoC)或其任意组合。也可以通过软件实现图2或图3所示的数据处理方法时,装置500及其各个模块也可以为软件模块。
在一种可能的实施方式中,编译模块501在获取该可执行代码时,可以分析源代码确定目标数据,目标数据的复用评分大于阈值,目标数据的复用评分用于指示目标数据的复用程度。编译模块501在源代码插入第一扩展指令,对插入了第一扩展指令的源代码编译生成可执行代码。
在一种可能的实施方式中,执行模块502在获取目标数据并将目标数据存储在缓存时,向缓存发送驻留指令,驻留指令用于指示目标数据存储在缓存中。这样,缓存在接收到驻留指令后,获取目标数据,根据驻留指令存储目标数据。
在一种可能的实施方式中,缓存的LLC为HBM,第一扩展指令指示目标数据驻留在LLC中。
在一种可能的实施方式中,编译模块501能够更新目标数据,进而更新可执行代码。编译模块501获取PMU记录的事件。编译模块501根据PMU记录的事件更新目标数据。编译模块501在源代码中插入第二扩展指令后,对插入了第二扩展指令的源代码重新编译生成可执行代码,第二扩展指令用于指示更新后的目标数据需驻留在缓存。该第二扩展指令对应图2中针对更新后的目标数据的扩展指令。执行模块502执行重新编译生成的可执行代码。
在一种可能的实施方式中,编译模块501在源代码插入第一扩展指令时,在源代码中首次调用目标数据的相邻行,插入第一扩展指令。
在一种可能的实施方式中,编译模块501分析源代码确定目标数据时,确定所源代码中各个函数的循环序列,函数的循环序列包括函数中的至少一个循环。对任一函数的循环序列,编译模块501计算函数的循环序列中循环包括的访问节点对应的数据的复用评分,复用评分指示了数据在源代码中的复用程度;编译模块501根据访问节点对应的数据的复用评分确定目标数据。
需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。在本申请的实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
本申请还提供一种计算设备。如图6所示,为计算设备的结构示意图,计算设备10包括处理器100、缓存200、存储器300、总线400、通信接口600。处理器100、缓存200、存储器300、通信接口600之间通过总线400通信。总线400可以为基于快捷外围部件互连标准(peripheral component interconnect express,PCIe)的线路,也可以为其他类型的总线。
关于处理器100、缓存200、存储器300的说明可以参照前述说明,此处不再赘述。
本申请还提供一种处理器,处理器包括逻辑电路和供电电路,供电电路用于为所述逻辑电路供电,所逻辑电路用于执行图2或图3中所述方法示例中处理器所实现的方法的操作步骤。为了简洁,在此不再赘述。
本申请还提供一种芯片,芯片与存储器相连,芯片包括处理器以及缓存,该处理器用于读取并执行所述存储器中存储的计算机程序代码,图2或图3中所述方法示例中处理器所实现的方法的操作步骤。为了简洁,在此不再赘述。
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机程序指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机程序指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机程序指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质。半导体介质可以是固态硬盘(solid state drive,SSD)。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
以上所述,仅为本申请的具体实施方式。熟悉本技术领域的技术人员根据本申请提供的具体实施方式,可想到变化或替换,都应涵盖在本申请的保护范围之内。

Claims (19)

1.一种数据处理方法,其特征在于,所述方法由处理器执行,包括:
获取可执行代码,所述可执行代码中包括第一扩展指令对应的代码,所述第一扩展指令用于指示将目标数据需驻留在缓存,所述目标数据为执行所述可执行代码的过程中需频繁调用的数据;
执行所述第一扩展指令对应的代码;
获取所述目标数据并将所述目标数据存储在所述缓存中。
2.如权利要求1所述的方法,其特征在于,所述处理器获取可执行代码,包括:
分析源代码确定目标数据,所述目标数据的复用评分大于阈值,所述目标数据的复用评分用于指示所述目标数据的复用程度;
在所述源代码插入第一扩展指令后,根据所述源代码编译生成所述可执行代码。
3.如权利要求1或2所述的方法,其特征在于,所述处理器获取所述目标数据并将所述目标数据存储在所述缓存中,包括:
向所述缓存发送驻留指令,所述驻留指令用于指示所述目标数据存储在所述缓存中,以指示所述缓存获取所述目标数据,根据所述驻留指令存储所述目标数据。
4.如权利要求1~3中任一项所述的方法,其特征在于,所述缓存的最后一级缓存LLC为高带宽存储器HBM,所述第一扩展指令指示所述目标数据驻留在所述LLC中。
5.如权利要求1~4中任一所述的方法,其特征在于,所述方法还包括:
所述缓存在所述缓存中空闲空间小于阈值时,清理所述缓存中除所述目标数据之外的数据。
6.如权利要求1~5中任一所述的方法,其特征在于,所述方法还包括:
获取性能监控单元PMU记录的事件;
根据所述事件更新所述目标数据;
在所述源代码中插入第二扩展指令后,重新编译生成可执行代码,并执行重新编译生成的所述可执行代码,所述第二扩展指令用于指示更新后的所述目标数据需驻留在所述缓存。
7.如权利要求1~6任一所述的方法,其特征在于,所述处理器在所述源代码插入第一扩展指令,包括:
在所述源代码中首次调用所述目标数据的代码的相邻行,插入所述第一扩展指令。
8.如权利要求1~7任一所述的方法,其特征在于,所述处理器分析源代码确定目标数据,包括:
确定所源代码中各个函数的循环序列,所述函数的循环序列包括所述函数的至少一个循环;
对任一函数的循环序列,计算所述函数的循环序列中各个循环包括的访问节点对应的数据的复用评分;
根据所述访问节点对应的数据的复用评分确定所述目标数据。
9.一种处理器,其特征在于,所述处理器包括逻辑电路和供电电路,所述供电电路用于为所述逻辑电路供电,所述逻辑电路用于执行如权利要求1~8中任一项所述的方法的操作步骤。
10.一种芯片,其特征在于,所述计算机芯片包括处理器和缓存,所述处理器用于执行如权利要求1~8中任一项所述的方法的操作步骤,以将目标数据存储至所述缓存。
11.一种计算设备,其特征在于,所述计算设备包括处理器、缓存和存储器,所述存储器用于存储计算机程序代码,所述处理器用于执行如权利要求1~8任一项所述的方法的操作步骤。
12.一种数据处理装置,其特征在于,所述装置包括:
编译模块,用于获取可执行代码,所述可执行代码中包括第一扩展指令对应的代码,所述第一扩展指令用于指示将目标数据需驻留在缓存,所述目标数据为执行所述可执行代码的过程中需频繁调用的数据;
执行模块,用于执行可执行代码中第一扩展指令对应的代码,获取所述目标数据并将所述目标数据存储在所述缓存中。
13.如权利要求12所述的装置,其特征在于,所述编译模块,用于:
分析源代码确定目标数据,所述目标数据的复用评分大于阈值,所述目标数据的复用评分用于指示所述目标数据的复用程度;
在所述源代码插入第一扩展指令后,根据所述源代码编译生成所述可执行代码。
14.如权利要求12或13所述的装置,其特征在于,所述执行模块在获取所述目标数据并将所述目标数据存储在所述缓存中,用于:
向所述缓存发送驻留指令,所述驻留指令用于指示所述目标数据存储在所述缓存中,以指示所述缓存获取所述目标数据,根据所述驻留指令存储所述目标数据。
15.如权利要求12~14中任一项所述的装置,其特征在于,所述缓存的最后一级缓存LLC为高带宽存储器HBM,所述第一扩展指令指示所述目标数据驻留在所述LLC中。
16.如权利要求12~15中任一所述的装置,其特征在于,
所述编译模块,还用于:获取性能监控单元PMU记录的事件;根据所述事件更新所述目标数据;在所述源代码中插入第二扩展指令后,重新编译生成可执行代码,所述第二扩展指令用于指示更新后的所述目标数据需驻留在所述缓存;
所述执行模块,具体用于执行重新编译生成的可执行代码。
17.如权利要求12~16中任一所述的装置,其特征在于,所述编译模块在所述源代码插入第一扩展指令,用于:
在所述源代码中首次调用所述目标数据的代码的相邻行,插入所述第一扩展指令。
18.如权利要求12~17中任一所述的装置,其特征在于,所述编译模块分析源代码确定目标数据,用于:
确定所源代码中各个函数的循环序列,所述函数的循环序列包括所述函数中的至少一个循环;
对任一函数的循环序列,计算所述函数的循环序列中循环包括的访问节点对应的数据的复用评分,所述复用评分指示了所述数据在所述源代码中的复用程度;
根据所述访问节点对应的数据的复用评分确定所述目标数据。
19.一种计算可读存储介质,其特征在于,所述计算机可读存储介质中包括指令,当其在计算机上运行时,使得计算机执行权利要求1至8中任一所述的方法的操作步骤。
CN202211103960.1A 2022-06-23 2022-09-09 数据处理方法、处理器、计算设备及装置 Pending CN117311595A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
PCT/CN2023/100767 WO2023246651A1 (zh) 2022-06-23 2023-06-16 数据处理方法、处理器、计算设备及装置

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN202210724755 2022-06-23
CN2022107247550 2022-06-23

Publications (1)

Publication Number Publication Date
CN117311595A true CN117311595A (zh) 2023-12-29

Family

ID=89245134

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211103960.1A Pending CN117311595A (zh) 2022-06-23 2022-09-09 数据处理方法、处理器、计算设备及装置

Country Status (2)

Country Link
CN (1) CN117311595A (zh)
WO (1) WO2023246651A1 (zh)

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101551783B (zh) * 2009-01-21 2010-10-20 北京海尔集成电路设计有限公司 一种高速缓存的映射方法
CN107562915A (zh) * 2017-09-12 2018-01-09 郑州云海信息技术有限公司 读取小文件的方法、装置和设备及计算机可读存储介质
CN108762976A (zh) * 2018-05-30 2018-11-06 郑州云海信息技术有限公司 一种读取纠删码数据的方法、装置和存储介质
CN109800184A (zh) * 2018-12-12 2019-05-24 平安科技(深圳)有限公司 针对小块输入的缓存方法、系统、装置及可存储介质
CN110147258B (zh) * 2019-04-19 2022-08-16 平安科技(深圳)有限公司 提高程序加载效率的方法、装置、计算机设备和存储介质
CN112527638A (zh) * 2020-12-01 2021-03-19 北京大米科技有限公司 程序监控系统、方法和计算机可读存储介质

Also Published As

Publication number Publication date
WO2023246651A1 (zh) 2023-12-28

Similar Documents

Publication Publication Date Title
JP5473768B2 (ja) マルチパス動的プロファイリングのためのコンピュータに実行させる方法、システム及びコンピュータ・プログラム
Bruening et al. Practical memory checking with Dr. Memory
US20130205285A1 (en) Methods and apparatuses for automatic type checking via poisoned pointers
US10241894B2 (en) Data-scoped dynamic data race detection
US7698690B2 (en) Identifying code that wastes time performing redundant computation
Bauman et al. Sound gradual typing: Only mostly dead
KR20120031834A (ko) 인스트루먼테이션 장치 및 방법
US11526433B2 (en) Data structure allocation into storage class memory during compilation
US20190079805A1 (en) Execution node selection method and information processing apparatus
Jensen et al. MemInsight: platform-independent memory debugging for JavaScript
JP5244421B2 (ja) 情報処理装置およびプログラム分割方法
EP1695212B1 (en) Methods and apparatus to dynamically insert prefetch instructions based on garbage collector analysis and layout of objects
US9250939B2 (en) Information processing device, profile target determining program, and method
KR102581849B1 (ko) 해제후 사용 메모리 손상 버그들의 근본 원인 식별 기술들
EP3391224A1 (en) Method and apparatus for data mining from core traces
EP4369207A1 (en) Compilation optimization method for program source code, and related product
US8612952B2 (en) Performance optimization based on data accesses during critical sections
Pagani et al. Back to the whiteboard: A principled approach for the assessment and design of memory forensic techniques
Oliveri et al. An os-agnostic approach to memory forensics
US10102099B2 (en) Performance information generating method, information processing apparatus and computer-readable storage medium storing performance information generation program
JP5871589B2 (ja) 情報処理装置、配列の初期サイズ調整プログラム及び方法
Mazaheri et al. Characterizing loop-level communication patterns in shared memory
CN117311595A (zh) 数据处理方法、处理器、计算设备及装置
Byma et al. Detailed heap profiling
Chiu et al. Run-time program-specific phase prediction for python programs

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