CN111143242B - 一种缓存预取方法和装置 - Google Patents
一种缓存预取方法和装置 Download PDFInfo
- Publication number
- CN111143242B CN111143242B CN201811437235.1A CN201811437235A CN111143242B CN 111143242 B CN111143242 B CN 111143242B CN 201811437235 A CN201811437235 A CN 201811437235A CN 111143242 B CN111143242 B CN 111143242B
- Authority
- CN
- China
- Prior art keywords
- prefetcher
- physical
- access
- request
- cache
- 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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请公开了一种缓存预取方法和装置,涉及芯片技术领域,能够解决手机SoC中不能对LLC进行预取的问题。该装置可以为芯片,芯片内的总线接口上连接有中央处理器CPU核、最后一级缓存以及最后一级缓存的预取器,其中:CPU核,用于向最后一级缓存发送访存请求,访存请求包括第一物理地址,第一物理地址对应第一物理页面中的第一数据块;预取器,用于在侦听到访存请求时,根据访存请求和预取器中记录的至少一个物理页面的访存历史生成预取请求,并向最后一级缓存发送预取请求;预取请求包括预取器预测的第一物理页面中待访问的数据的物理地址;最后一级缓存,用于根据预取请求从芯片的内存中预取数据。本申请实施例用于对手机SoC中的LLC进行数据预取。
Description
本申请要求于2018年11月2日提交中国专利局、申请号为201811299255.7、申请名称为“一种终端设备”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本申请涉及芯片技术领域,尤其涉及一种缓存(cache)预取方法和装置。
背景技术
用户对智能手机的性能需求不断提高,智能手机的处理器开始越来越多的采用一些提升性能的技术,例如乱序执行、多发射、分支预测以及cache预取技术等。其中cache预取技术是通过计算和访存的重叠,在cache可能会发生失效之前发出预取请求,以便在数据真正被使用到时已提前将数据块取入cache,从而避免cache失效造成的处理器停顿。cache预取技术是缓解“内存墙”问题的主要手段之一。
根据预取技术所处的cache层次的不同,可以分为L1cache预取技术、L2cache预取技术以及L3cache预取技术等,一般将最后一级的cache称为最后一级缓存(Last LevelCache,LLC),因此在LLC上的预取技术称为LLC预取技术。目前手机系统级芯片(System onChip,SoC)处理器中最广泛使用的ARM(Advanced(精简指令系统(Reduced InstructionSet Computer,RISC)Machines)公司提供的Cortex A系列处理器中均使用了L1cache预取技术,例如Cortex A53、Cortex A72以及Cortex A73,L2预取技术只在高性能核,比如Cortex A72和Cortex A73中被使用,但是L3预取技术还未出现。
目前,多个厂商生产的手机SoC上主要使用的均为ARM的Cortex A系列公版或增强版处理器。其中高性能核,例如Cortex A72、Cortex A73以及Cortex A75均带有L1硬件预取器和L2硬件预取器,而高能效核,例如Cortex A35、Cortex A53以及Cortex A55均只带有L1硬件预取器,没有L2硬件预取器。当前手机SoC上使用的L1/L2预取算法有如下特征:(1)L1硬件预取器嵌入在L1cache内部,L2硬件预取器嵌入在L2cache内部,L1硬件预取器和L2硬件预取器无法独立出来,且都是由ARM提供设计,其他厂商在没有获得专门授权的前提下无法介入L1和L 2硬件预取器的设计。此外,L1和L2硬件预取器均需要使用中央处理器(Central Processing Unit,CPU)的程序计数器(Program Counter,PC)值(虚拟地址)进行预取器训练与预取,且该PC值在LLC上是不可获取的,因此,L1和L2硬件预取器均无法以知识产权核/知识产权模块(Intellectual Property core,IP)的方式集成到SoC中,也无法直接将L1和L2硬件预取器移植到LLC上。而且,当前手机SoC上的预取算法只能对L1和L2缓存进行预取,没有对LLC进行预取设计。
发明内容
本申请实施例提供一种缓存预取方法和装置,能够解决手机SoC中不能对LLC进行预取的问题。
第一方面,提供一种芯片,芯片内的总线接口上连接有中央处理器CPU核、最后一级缓存以及最后一级缓存的预取器,其中:CPU核,用于向最后一级缓存发送访存请求,访存请求包括第一物理地址,第一物理地址对应第一物理页面中的第一数据块;预取器,用于在侦听到访存请求时,根据访存请求和预取器中记录的至少一个物理页面的访存历史生成预取请求,并向最后一级缓存发送预取请求;预取请求包括预取器预测的第一物理页面中待访问的数据的物理地址;最后一级缓存,用于根据预取请求从芯片的内存中预取数据。其中,最后一级缓存可以是芯片的LLC。芯片可以是手机中的SoC。本申请通过采用这种在芯片的系统总线的接口上以知识产权核(Intellectual Property core,IP核)的方式连接预取器的方式,可以侦听到芯片的CPU核发往LLC的每个访存请求,进而根据访存请求和预取器中记录的至少一个物理页面的访存历史生成预取请求,从而出发LLC根据该预取请求从SoC的内存中预取数据,不需要修改LLC,也不需要获得额外的授权在芯片中方便的集成LLC预取能力,解决了手机SoC中不能对LLC进行预取的问题。
在一种可能的设计中,预取器包括访存历史表和子预取器;访存历史表用于存储至少一个物理页面的访存历史;子预取器用于:检测至少一个物理页面的访存历史,以及在侦听到访存请求时根据访存请求和访存历史表中记录的至少一个物理页面的访存历史生成预取请求,并将预取请求发送至最后一级缓存。这样一来,由于芯片预取器中的访存历史表中存储有过往访问过的物理页面的访存历史,那么当预取器侦听到访存请求时,子预取器就可以根据访存请求在过往访问过的物理页面的访存历史中预测接下来可能会访问到的数据,以便在该数据真正被用到时已提前将数据取入最后一级缓存中,降低了数据访问的时延。
在一种可能的设计中,访存历史表包括全局历史表和局部历史表;全局历史表,用于存储不同的物理页面间的访存历史;局部历史表,用于存储同一物理页面的访存历史;预取请求包括第一预取请求和第二预取请求;子预取器包括局部子预取器和全局子预取器;局部子预取器,用于检测不同时间点下同一物理页面的访存历史,以及根据访存请求和不同时间点下第一物理页面的访存历史生成第一预取请求;其中,不同时间点下第一物理页面的访存历史相同;全局子预取器,用于检测不同的物理页面间的访存历史,以及根据访存请求和物理页面间的访存历史生成第二预取请求;其中,不同的物理页面间的访存历史相同。由于局部子预取器已经检测到了不同时间点下同一物理页面的访存历史,记录在了局部历史表中,那么当访存请求访问的第一物理页面中的数据块的与局部历史表中某一访存历史匹配时,可以预测第一物理页面的访问历史可能又要再次被访问了,就可以根据匹配的访存历史对第一物理页面进行数据预取。同样地,全局子预取器已经检测到了不同的物理页面的访存历史,记录在了全局历史表中,当访存请求访问的第一物理页面的数据块与全局历史表中任一物理页面的访存历史匹配,也可以认为第一物理页面将要被访问的数据块与任一物理页面的访问历史类似,可以根据任一物理页面的访问历史预测第一物理页面可能将要被访问到的数据块,以便从LLC中获取数据时缩短数据获取的时延。
在一种可能的设计中,局部历史表,用于存储同一物理页面的访存历史包括:局部历史表,用于存储同一物理页面的位图文件,位图文件中任一比特的比特值为第一数值时,表征任一比特在位图文件对应的物理页面中的数据块被访问过;局部子预取器,用于检测不同时间点下同一物理页面的访存历史包括:局部子预取器,用于检测不同时间点下同一物理页面的数据块是否被访问过,若检测到不同时间点下同一物理页面的任一数据块被访问过,则在同一物理页面对应的位图文件中记录任一数据块对应的比特值为第一数值;根据访存请求和不同时间点下第一物理页面的访存历史生成第一预取请求包括:若第一数据块在第一物理页面的位图文件中的比特值为第一数值,则获取第一物理页面的位图文件中除第一数据块以外比特值为第一数值的比特对应的数据块的物理地址,生成第一预取请求,第一预取请求包括的预测的待访问的数据的物理地址为:第一物理页面的位图文件中比特值为第一数值的比特对应的数据块的物理地址,且不包括第一物理地址。其中,第一数值例如可以为1。这种通过位图文件来记录物理页面的访存历史,可以很方便地将访存请求中请求的数据块与位图文件中比特值为第一数值的数据块进行比对,如果访存请求所请求的数据块与位图文件中比特值为第一数值的数据块的序号相同,那么可以根据该位图文件中比特值为第一数值的比特对应的物理地址生成预取请求,以便预测第一物理页面中将要可能被访问到的数据块。
在一种可能的设计中,全局历史表,用于存储不同的物理页面的访存历史包括:全局历史表,用于存储m个物理页面的位图文件,位图文件中任一比特的比特值为第一数值时,表征任一比特在位图文件对应的物理页面中的数据块被访问过,m为大于1的正整数;预取器还包括全局签名表,全局签名表用于存储m个物理页面中的n种访存历史的位图文件,每种访存历史为m个物理页面中至少两个物理页面相同的访存历史,n为大于1的正整数,且m大于n;全局子预取器,用于检测物理页面间的访存历史包括:全局子预取器,用于检测最近访问的m个物理页面的各个数据块是否被访问过,若检测到m个物理页面的任一数据块被访问过,则在全局历史表中记录任一数据块对应的比特值为第一数值;全局子预取器,还用于根据全局历史表的m个物理页面的访存历史检测m个物理页面中至少两个物理页面相同的访存历史,根据至少两个物理页面相同的访存历史在全局签名表中存储m个物理页面中的n种访存历史的位图文件;根据访存请求和物理页面间的访存历史生成预取请求包括:若第一数据块与全局签名表中存储的第一位图文件指示的访存历史匹配,则获取第一位图文件中比特值为第一数值的比特在第一物理页面中对应的数据块的物理地址,生成第二预取请求,第二预取请求中包括的预测的待访问的数据的物理地址为:第一位图文件中比特值为第一数值的比特在第一物理页面中对应的数据块的物理地址,且不包括第一物理地址。也就是说,
全局签名表记录的是全局历史表中某些物理页面间具有共同的访问历史的位图文件,具有共同的访问历史可以理解为两个物理页面的访问序列相同。那么当访存请求访问的第一物理页面的数据块的序号与全局签名表中某一位图文件比特值为第一数值的数据块的序号相同,那么可以认为第一物理页面与该位图文件的访存序列可能相同,那么就可以根据该位图文件比特值为第一数值的比特对第一物理页面进行数据预取,以便缩短数据访问的时延。
在一种可能的设计中,最后一级缓存包括第一缓存区、第二缓存以及第三缓存区;第一缓存区对应局部子预取器,第二缓存区对应全局子预取器;子预取器,还用于确定访存请求中的第一物理地址在最后一级缓存中对应的缓存区域;若第一物理地址对应第一缓存区,则确定由局部子预取器根据访存请求和不同时间点下同一物理页面的访存历史生成第一预取请求,并将最后一级缓存预取的数据存储于第一缓存区;若第一物理地址对应第二缓存区,则确定由全局子预取器根据访存请求和物理页面间的访存历史生成第二预取请求,并将最后一级缓存预取的数据存储于第二缓存区;预取器还包括仲裁器,仲裁器用于:比较预设时间段内第一缓存区和第二缓存区的缺失率,第一缓存区的缺失率为预设时间段内第一缓存区访问失败的访问量与第一缓存区总访问量的比值,第二缓存区的缺失率为预设时间段内第二缓存区访问失败的访问量与第二缓存区总访问量的比值;若第一缓存区的缺失率大于或等于第二缓存区的缺失率,则确定第三缓存区对应局部子预取器;若第一缓存区的缺失率小于第二缓存区的缺失率,则确定第三缓存区对应全局子预取器。也就是说,可以周期性的确定是局部子预取器预取的效果好还是全局子预取器预取的效果好,这样可以将剩余的第三缓存区交由局部子预取器或者全局子预取器接管,这样可以提高预取性能。
在一种可能的设计中,子预取器还包括固定步长子预取器,预取请求还包括第三预取请求;固定步长子预取器用于检测访存请求所请求的第一物理地址与第一物理页面的前p次访存请求所请求的物理地址是否存在固定步长,p为正整数,若确定是,则生成第三预取请求,第三预取请求包括第一物理页面中第一物理地址对应的数据之后根据固定步长获取的数据的物理地址,其中,根据固定步长获取的数据的物理地址中不包括第一物理页面在预取器中的访存历史对应的物理地址。也就是说,在局部子预取器和全局子预取器都执行预取操作的同时,固定步长子预取器如果检测到访问的数据块存在固定步长,就可以通过固定步长子预取器也对访存请求所请求的第一物理页码进行预取数据,以提高预取性能。
第二方面,提供一种芯片,该芯片包括中央处理器CPU核,缓存、预取器以及总线,CPU核、缓存以及预取器均连接在总线上,其中:预取器,用于在通过总线侦听到CPU核访问缓存时,生成预取请求,预取请求用于指示缓存从芯片的内存中预取数据。根据第一方面阐述的预取器对于芯片的最后一级缓存预取数据的原理,最后一级缓存也可以替换为第一级缓存L1或第二级缓存L2,这样区别于现有技术中预取器设计在L1或L2内部来达到对于L1或L2预取数据的目的。
在一种可能的设计中,缓存为芯片的最后一级缓存。
在一种可能的设计中,预取器,用于在通过总线侦听到CPU核发送给缓存的访存请求时,根据访存请求和预取器中记录的至少一个物理页面的访存历史生成预取请求,并向缓存发送预取请求;预取请求包括预取器预测的待访问的数据的物理地址。其中,第一方面中预取器如何生成预取请求的各种可能的设计也可以适用于L1或L2。
第三方面,提供一种终端,终端包括如第一方面所述的芯片。
第四方面,提供一种缓存预取方法,应用于终端,终端包括芯片,芯片内的总线接口上连接有中央处理器CPU核、最后一级缓存以及最后一级缓存的预取器,方法包括:终端控制CPU核向最后一级缓存发送访存请求,访存请求包括第一物理地址,第一物理地址对应第一物理页面中的第一数据块;终端控制预取器在侦听到访存请求时,根据访存请求和预取器中记录的至少一个物理页面的访存历史生成预取请求,并控制预取器向最后一级缓存发送预取请求;预取请求包括预取器预测的第一物理页面中待访问的数据的物理地址;终端控制最后一级缓存根据预取请求从芯片的内存中预取数据。
在一种可能的设计中,预取器包括访存历史表和子预取器;访存历史表用于存储至少一个物理页面的访存历史;该方法还包括:终端检测至少一个物理页面的访存历史;根据访存请求和预取器中记录的至少一个物理页面的访存历史生成预取请求包括:终端控制子预取器根据访存请求和访存历史表中记录的至少一个物理页面的访存历史生成预取请求。
在一种可能的设计中,访存历史表包括全局历史表和局部历史表;全局历史表,用于存储不同的物理页面间的访存历史;局部历史表,用于存储同一物理页面的访存历史;预取请求包括第一预取请求和第二预取请求;子预取器包括局部子预取器和全局子预取器;终端检测至少一个物理页面的访存历史包括:终端控制局部子预取器检测不同时间点下同一物理页面的访存历史;以及,终端控制全局子预取器检测不同的物理页面间的访存历史;终端控制子预取器根据访存请求和访存历史表中记录的至少一个物理页面的访存历史生成预取请求包括:终端控制局部子预取器根据访存请求和不同时间点下第一物理页面的访存历史生成第一预取请求;其中,不同时间点下第一物理页面的访存历史相同;以及,终端控制全局子预取器根据访存请求和物理页面间的访存历史生成第二预取请求;其中,不同的物理页面间的访存历史相同。
在一种可能的设计中,局部历史表,用于存储同一物理页面的访存历史包括:局部历史表,用于存储同一物理页面的位图文件,位图文件中任一比特的比特值为第一数值时,表征任一比特在位图文件对应的物理页面中的数据块被访问过;终端控制局部子预取器检测不同时间点下同一物理页面的访存历史包括:终端控制局部子预取器检测不同时间点下同一物理页面的数据块是否被访问过,若检测到不同时间点下同一物理页面的任一数据块被访问过,则在同一物理页面对应的位图文件中记录任一数据块对应的比特值为第一数值;根据访存请求和不同时间点下第一物理页面的访存历史生成第一预取请求包括:若第一数据块在第一物理页面的位图文件中的比特值为第一数值,则获取第一物理页面的位图文件中除第一数据块以外比特值为第一数值的比特对应的数据块的物理地址,生成第一预取请求,第一预取请求包括的预测的待访问的数据的物理地址为:第一物理页面的位图文件中比特值为第一数值的比特对应的数据块的物理地址,且不包括第一物理地址。
在一种可能的设计中,全局历史表,用于存储不同的物理页面的访存历史包括:全局历史表,用于存储m个物理页面的位图文件,位图文件中任一比特的比特值为第一数值时,表征任一比特在位图文件对应的物理页面中的数据块被访问过,m为大于1的正整数;预取器还包括全局签名表,全局签名表用于存储m个物理页面中的n种访存历史的位图文件,每种访存历史为m个物理页面中至少两个物理页面相同的访存历史,n为大于1的正整数,且m大于n;终端控制全局子预取器检测不同的物理页面间的访存历史包括:终端控制全局子预取器检测最近访问的m个物理页面的各个数据块是否被访问过,若检测到m个物理页面的任一数据块被访问过,则在全局历史表中记录任一数据块对应的比特值为第一数值;方法还包括:终端控制全局子预取器根据全局历史表的m个物理页面的访存历史检测m个物理页面中至少两个物理页面相同的访存历史,根据至少两个物理页面相同的访存历史在全局签名表中存储m个物理页面中的n种访存历史的位图文件;根据访存请求和物理页面间的访存历史生成预取请求包括:若第一数据块与全局签名表中存储的第一位图文件指示的访存历史匹配,则获取第一位图文件中比特值为第一数值的比特在第一物理页面中对应的数据块的物理地址,生成第二预取请求,第二预取请求中包括的预测的待访问的数据的物理地址为:第一位图文件中比特值为第一数值的比特在第一物理页面中对应的数据块的物理地址,且不包括第一物理地址。
在一种可能的设计中,最后一级缓存包括第一缓存区、第二缓存以及第三缓存区;第一缓存区对应局部子预取器,第二缓存区对应全局子预取器;在终端生成第一预取请求和第二预取请求之前,该方法还包括:终端控制子预取器确定访存请求中的第一物理地址在最后一级缓存中对应的缓存区域;若第一物理地址对应第一缓存区,则确定由局部子预取器根据访存请求和不同时间点下同一物理页面的访存历史生成第一预取请求,并将最后一级缓存预取的数据存储于第一缓存区;若第一物理地址对应第二缓存区,则确定由全局子预取器根据访存请求和物理页面间的访存历史生成第二预取请求,并将最后一级缓存预取的数据存储于第二缓存区;预取器还包括仲裁器,方法还包括:终端控制仲裁器比较预设时间段内第一缓存区和第二缓存区的缺失率,第一缓存区的缺失率为预设时间段内第一缓存区访问失败的访问量与第一缓存区总访问量的比值,第二缓存区的缺失率为预设时间段内第二缓存区访问失败的访问量与第二缓存区总访问量的比值;若第一缓存区的缺失率大于或等于第二缓存区的缺失率,则确定第三缓存区对应局部子预取器;若第一缓存区的缺失率小于第二缓存区的缺失率,则确定第三缓存区对应全局子预取器。
在一种可能的设计中,子预取器还包括固定步长子预取器,预取请求还包括第三预取请求;方法还包括:终端控制固定步长子预取器检测访存请求所请求的第一物理地址与第一物理页面的前p次访存请求所请求的物理地址是否存在固定步长,p为正整数,若确定是,则生成第三预取请求,第三预取请求包括第一物理页面中第一物理地址对应的数据之后根据固定步长获取的数据的物理地址,其中,根据固定步长获取的数据的物理地址中不包括第一物理页面在预取器中的访存历史对应的物理地址。
第五方面,本申请实施例提供了一种计算机存储介质,用于储存为上述芯片和/或终端所用的计算机软件指令,其包含用于执行上述方面所设计的程序。
第六方面,本申请实施例提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。
这样一来,采用这种在芯片的系统总线的接口上以IP核的方式连接预取器的方式,可以侦听到芯片的CPU核发往LLC的每个访存请求,进而根据访存请求和预取器中记录的至少一个物理页面的访存历史生成预取请求,从而出发LLC根据该预取请求从SoC的内存中预取数据,不需要修改LLC,也不需要获得额外的授权在芯片中方便的集成LLC预取能力,解决了手机SoC中不能对LLC进行预取的问题。
附图说明
图1A为一种4KB的物理页面示意图;
图1为本申请实施例提供的一种手机的架构示意图;
图2为本申请实施例提供的一种SoC硬件的部分结构示意图;
图3为本申请实施例提供的一种SoC硬件的部分结构示意图;
图4为本申请实施例提供的一种4KB物理页面的64个cache block的示意图;
图5为本申请实施例提供的一种预取器的结构示意图;
图6为本申请实施例提供的一种物理页面内非规则访存模式的示意图;
图7为本申请实施例提供的一种跨物理页面的访存模式的示意图;
图8为本申请实施例提供的一种缓存预取方法的流程示意图;
图9为本申请实施例提供的一种服务器的结构示意图;
图10为本申请实施例提供的一种终端设备的结构示意图;
图11为本申请实施例提供的一种网络设备的结构示意图。
具体实施方式
为了便于理解,示例地给出了部分与本申请相关概念的说明以供参考。如下所示:
SoC:即系统级芯片,也可称为片上系统,是一个有专用目标的集成电路,其中包含完整系统和嵌入软件的全部内容。
IP核(Intellectual Property core):也可称为知识产权核或知识产权模块,可将一些在数字电路中常用,但比较复杂的功能模块设计成可修改参数的模块,该模块如有限长单位冲激响应(Finite Impulse Response,FIR)滤波器、同步动态随机存储器(Synchronous Dynamic Random Access Memory,SDRAM)控制器、外设部件互连标准(Peripheral Component Interconnect,PCI)接口等。
cache:数据交换的缓冲区,在一个包含cache的存储链路中,当某一硬件要读取数据时,会首先从cache中查找需要的数据,若查找到则直接返回,若查找不到则从内存中查找。cache失效后往内存发送的数据请求通常以缓冲块(cache block)为单位获取数据。本申请实施例以64B大小的缓冲块为例进行说明,对于其他大小的配置,同样适用。由于cache的运行速度比内存快得多,可帮助硬件更快地运行。
物理页面:为分页存储管理方式中存储数据块的单元,如图1A所示为一个4KB物理页面的示意图,该物理页面包含64个缓存块,每个cache block对应一个访存请求,即根据一个访存请求的地址可以访问物理页面中的一个cache block。
本申请为了解决手机SoC中不能对LLC进行预取的问题,其设计思想为:通过采用一种IP核的设计模式,在手机SoC的系统总线上新增一个预取器,该预取器作为外设的IP核连接在该总线上。这是基于这样一种现状,SoC的系统总线当前有预留多组对接总线的接口,允许一些外设和加速器IP模块通过这些接口向LLC发送可缓冲(cacheable)的读请求。通过这类总线接口,该预取器不仅可以侦听访问LLC的请求,还可以通过该接口向LLC发送预取请求,由LLC来实施预取操作。
这种在SoC的系统总线上以IP核的模式新增预取器的设计,既不需要修改LLC内部的任何逻辑,也不需要修改手机中央处理器(Central Processing Unit,CPU)的核(core)内的任何逻辑,该预取器只需要在LLC外侧侦听各个核通过系统总线发往LLC的访存信息,根据该访存信息指示LLC进行预取,解决了手机SoC中不能对LLC进行预取的问题。
针对本申请解决上述技术问题的设计思想,本申请提供的实施例可应用于对终端中的LLC进行预取的场景中,该终端可以为手机。
在一个示例中,终端100可以通过如图1所示的结构实现。以终端100为手机为例,图1示出了手机的通用硬件架构进行说明。图1所示的手机可以包括:射频(radioFrequency,RF)电路110、存储器120、其他输入设备130、显示屏140、传感器150、音频电路160、I/O子系统170、处理器180、以及电源190等部件。本领域技术人员可以理解,图1所示的手机的结构并不构成对手机的限定,可以包括比图示更多或者更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。本领域技术人员可以理解显示屏140属于用户界面(user Interface,UI),显示屏140可以包括显示面板141和触摸面板142。且手机可以包括比图示更多或者更少的部件。尽管未示出,手机还可以包括摄像头、蓝牙模块等功能模块或器件,在此不再赘述。
进一步地,处理器180分别与RF电路110、存储器120、音频电路160、I/O子系统170、以及电源190均连接。I/O子系统170分别与其他输入设备130、显示屏140、传感器150均连接。其中,RF电路110可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,给处理器180处理。存储器120可用于存储软件程序以及模块。处理器180通过运行存储在存储器120的软件程序以及模块,从而执行手机的各种功能应用以及数据处理。其他输入设备130可用于接收输入的数字或字符信息,以及产生与手机的用户设置以及功能控制有关的键信号输入。显示屏140可用于显示由用户输入的信息或提供给用户的信息以及手机的各种菜单,还可以接受用户输入。传感器150可以为光传感器、运动传感器或者其他传感器。音频电路160可提供用户与手机之间的音频接口。I/O子系统170用来控制输入输出的外部设备,外部设备可以包括其他设备输入控制器、传感器控制器、显示控制器。处理器180是手机100的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器120内的软件程序和/或模块,以及调用存储在存储器120内的数据,执行手机100的各种功能和处理数据,从而对手机进行整体监控。电源190(比如电池)用于给上述各个部件供电,优选的,电源可以通过电源管理系统与处理器180逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗等功能。
本申请针对如何实现手机中的LLC预取的问题,对手机处理器180中SoC的硬件和软件进行设计。
下面对本申请设计的SoC硬件的部分结构进行说明。如图2所示,SoC的部分结构中包括多个CPU core,在本申请实施例中记为core21,还包括预取器22以及LLC23,图2中SoC未示出的部分还可以包括图形处理器(Graphics Processing Unit,GPU),神经网络处理器(Neural-network Processing Unit,NPU),图像信号处理(Image Signal Processing,ISP)等。预取器22为本申请在系统总线预留的接口上连接的一个IP核,通过对该SoC新增预取器22,本申请提供一种芯片20,该芯片20可以为上述SoC,其中:
core21,用于向所述LLC23发送访存请求。访存请求包括第一物理地址,第一物理地址对应第一物理页面中的第一数据块。即core21要访问第一物理页面中的第一数据块。Core21为SoC的CPU,即SoC的中央处理器,用于运行SoC的存储器中的指令以及处理软件中的数据等。该访存请求中可包括core21通过系统总线发往LLC的遵循标准协议的信息。该标准协议可以为AXI(Advanced eXtensible Interface)、加速器一致性接口(AcceleratorCoherency Port,ACP)或缓存一致性扩展接口(AXI Coherence Extensions,ACE)等。该信息可以包括coer21访存的物理地址,在本申请实施例中记为第一物理地址,还包括请求类型和来源核心号等。该请求类型可以为数据、指令、读操作、写操作以及预取操作等。来源核心号为多个CPU core中任一core的标识。
预取器22,用于在侦听到该访存请求时,根据访存请求和预取器22中记录的至少一个物理页面的访存历史生成预取请求,并向LLC23发送预取请求。这里的访存历史也可以称为访问记录,上述第一物理页面不特指某一物理页面,可以是任一物理页面,如果该任一物理页面在预取器22接收到该预取请求之前被访问过,预取器可获取该任一物理页面的访存历史。该访存历史能够指示任一物理页面中被访问过的cache block。例如,如果第一物理地址对应第一物理页面中访问过的第一cache block,那么第一物理页面的访存历史中除第一cacheblock以外被访问过的cache block可为LLC23应预取的数据,该预取请求包括子预取器22预测的第一物理页面中待访问的数据的物理地址,例如预取请求可以用于请求第一物理页面的访存历史中除第一cache block以外被访问过的cache block。
LLC23,用于根据预取请求从芯片的内存中预取数据。LLC23为SoC的缓存层次中的最后一层的缓冲区。该内存可以为SoC外部供SoC访问的内存颗粒或内存条(SoC上运行的操作系统和应用程序在内存条上运行)。例如该预取请求中可以包括第一物理页面的访问记录中除第一cache block以外被访问过的cache block对应的物理地址。
这样一来,本申请通过采用这种在SoC系统总线的接口上以IP核的方式连接预取器的方式,可以侦听到SoC的CPU core发往LLC的每个访存请求,进而根据访存请求和预取器中记录的至少一个物理页面的访存历史生成预取请求,从而出发LLC根据该预取请求从SoC的内存中预取数据,不需要修改LLC,也不需要获得额外的授权在SoC中方便的集成LLC预取能力,解决了手机SoC中不能对LLC进行预取的问题。
此外,在该SoC中,如图3所示,该SoC还可以包括系统电源管理单元(system powermanagement unit,system PMU)24,先入先出(First In First Out,FIFO)存储器25以及动态随机存取存储器(Dynamic Random Access Memory,DRAM)控制器26等。system PMU22用于为SoC供电;FIFO存储器用于对core21发送的连续的数据流进行缓存;DRAM控制器26用于负责SoC内部的访存请求与标准双倍速率(Double Data Rate,DDR)协议之间的相互转换,以便与SoC外接的DRAM存储芯片连接。
core21发往LLC的访问请求可以通过FIFO存储器25进行排队输出,当预取器22侦听到该访问请求时,可生成预取请求,将该预取请求发送给LLC23,LLC23可根据该预取请求从SoC的内存中预取数据缓存在LLC23中。
下面对本申请设计的预取器22如何解决技术问题进行说明。
在该预取器22中,可以包括访存历史表221和子预取器222。
访存历史表221用于存储至少一个物理页面的访存历史。例如如图4所示的一个4KB物理页面中有64个cache block,每个cache block对应有一个序列号,该物理页面的访存历史可指示其中多个序列号组成的访存序列对应的cache block,例如该物理页面的访存历史指示访存序列为{1,6,11,12,18,27,36,40,50,53}中的每个序列号对应的cacheblock都被访问过。鉴于访存历史表221不能存储所有被访问过的物理页面的访存历史,其存储大小是固定的,当访存历史表211存储一定数目的物理页面的访存历史,最新生成的物理页面的访存历史存储在访存历史表221中时,就可以将访存历史表221中存储时间最久的物理页面的访存历史删除。即访存历史表221是在实时进行更新的。
子预取器222用于检测至少一个物理页面的访存历史,以及在侦听到访存请求时,根据访存请求和访存历史表221中记录的至少一个物理页面的访存历史生成预取请求,预取请求包括子预取器222预测的待访问的数据的物理地址,并将预取请求发送至LLC23。例如,预取器22在接收到该访存信息时,可控制子预取器222根据访存历史表中第一物理地址访问的第一物理页面的访存历史中,除第一物理地址访问的cache block之外被访问过的cache block生成预取请求,每个被访问过的cache block都对应有各自的物理地址,第一物理页面的访存历史中除第一物理地址访问的cache block之外被访问过的cache block对应的物理地址即为子预取器预测的待访问的数据的物理地址。
具体来说,在一种可能的设计中,如图5所示,访存历史表221可以包括全局历史表(global history table,GTH)和局部历史表(local history table,LHT),子预取器222包括局部子预取器(local sub-prefether)和全局子预取器(cross-page sub-prefetcher)。预取请求可以包括第一预取请求和第二预取请求。
全局历史表,用于存储不同的物理页面间的访存历史。不同的物理页面可以是相邻的物理页面,也可以不是相邻的物理页面。访存历史也可以称为访存模式。例如全局历史表可存储最近访问过的32个物理页面中多个共同的访存历史。
局部历史表,用于存储同一物理页面的访存历史,或者说,用于存储同一个物理页面的访存模式。这里不是说局部历史表只针对一个物理页面来存储这一个物理页面访存历史,而是针对多个物理页面中的每个物理页面,单独存储每个物理页面在不同时间点下的访存历史,不涉及物理页面间的访存历史。
局部子预取器,用于检测不同时间点同一物理页面的访存历史,以及根据访存请求和不同时间点下第一物理页面的访存历史生成第一预取请求;其中,不同时间点下第一物理页面的访存历史相同。同样地,这里的局部子预取器并不是针对一个物理页面进行检测,而是检测多个物理页面中每个物理页面在不同时间点的访存历史。第一物理页面也不是特指,只是本申请用于说明如何针对一个物理地址和一个物理页面生成预取请求。
全局子预取器,用于检测不同的物理页面间的访存历史,以及根据访存请求和物理页面间的访存历史生成第二预取请求;其中,不同的物理页面间的访存历史相同。也可以说,多个不同的物理页面间的访存序列相同。这种情况下访存请求所访问的第一物理页面可以是与其他有相同的访存历史的物理页面间隔相同的物理页面,以根据该相同的访存历史对第一物理页面进行预取。
下面首先对局部子预取器以及局部历史表进行具体说明。
局部子预取器是针对物理页面内的非规则访存模式来设计的子预取器。物理页面内的非规则访存模式是一种空间上没有规律,但却具有很强的时间局部性的地址访存模式。如图6所示,时间轴一边的物理页面A与时间轴另一边的物理页面A是两个时间点下的同一个物理页面,即在不同的时间点都访问了物理页面A,两个时间点间隔10M个周期。可以看到,两个物理页面A的访存序列都为{1,6,11,12,18,27,36,40,50,53},只是间隔了一段时间访问。这种访存模式在空间上不存在明显的规律,但是在时间轴上呈现重复访问。
上述局部子预取器中介绍的访存模式可以应用于标准性能评估组织(StandardPerformance Evaluation Corporation,SPEC)CPU2006标准测试程序集中的429.mcf、403.gcc、459.GemsFDTD、471.omnetpp这几项程序中。例如在429.mcf中,一个包含64个cache block的4KB物理页面中,依次访问序列号为{25,29,17,57,49,62,23}的cacheblock,而后隔了一段时间后,例如隔了约10M个周期后,该物理页面又再次被访问,而且访存序列与上一次的访问编号完全一样,但是页面内的访问序列没有规律。
针对这种物理页面在间隔一定的时间又再次被访问,访存序列又没有规律的情况,本申请设计的局部子预取器利用一个物理页面访问的时间局部性来进行预取,具体地该局部子预取器可与LHT结合实现预取。在一种可能的设计中,LHT可以是一个用物理页号索引的8-way(路)组相联的512个条目(entry)的记录表,用于存储最近访问的512个物理页面中cacheblock的访存历史,即每一个entry对应一个物理页面。这里的512也可以替换为其它数值,本申请不做限定。针对每个物理页面,例如每一个4KB物理页面中有64个cacheblock,那么LHT的每一个entry可以包含一个64比特模式的位图文件(64-bit patternbitmap),如果任一个物理页面的某个cache block被访问过,则将物理页面对应的64-bitpattern bitmap中该cache block对应的bit的值置为1。相应的,未被访问过的cacheblock的对应的bit的值可以为0或为空。局部子预取器检测不同时间点下同一物理页面的访存历史,也就是根据每个物理页面的cache block的访存情况更新物理页面对应的64-bit pattern bitmap中bit的值。
这样通过设计每个物理页面对应的pattern bitmap,该局部历史表,可以用于存储同一物理页面的访存历史包括:局部历史表,用于存储同一物理页面的位图文件,位图文件中任一比特的比特值为第一数值时,表征任一比特在位图文件对应的物理页面中的数据块被访问过。例如第一数值可以为1。
局部子预取器,用于检测不同时间点下同一物理页面的访存历史包括:局部子预取器,用于检测不同时间点下同一物理页面的数据块是否被访问过,若检测到不同时间点下同一物理页面的任一数据块被访问过,则在同一物理页面对应的位图文件中记录任一数据块对应的比特值为所述第一数值。
根据访存请求和不同时间点下第一物理页面的访存历史生成第一预取请求可以包括:若第一数据块在第一物理页面的位图文件中的比特值为第一数值,则获取第一物理页面的位图文件中除第一数据块以外比特值为第一数值的比特对应的数据块的物理地址,生成第一预取请求,第一预取请求包括的预测的待访问的数据的物理地址为:第一物理页面的位图文件中比特值为第一数值的比特对应的数据块的物理地址,且不包括所述第一物理地址。
也就是说,局部子预取器可以通过查找LHT中相应的pattern bitmap来生成第一预取请求。举例来说,当序列号为{25,29,17,57,49,62,23}这样的访存序列在第一物理页面中第一轮出现,局部子预取器可以将该访存序列记录到第一物理页面对应的entry包含的pattern bitmap中,即将该访存序列在该pattern bitmap中对应的比特值置为1,这时局部子预取器并不生成第一预取请求去预取数据。如果过了一段时间,局部子预取器从CPUcore中接收到的访存请求中携带的第一物理地址与第一物理页面对应的访存序列中的任一序列号对应的物理地址匹配,例如第一物理地址对应访存序列中的25,那么可以认为相同的访存模式可能重复出现了,那么局部子预取器可以将该第一物理页面对应的bitmap中记录的访存历史对该访存序列中除序列号25以外的其余序列号{29,17,57,49,62,23}对应的cache block进行预取,生成的第一预取请求中包括的预测的待访问的数据的物理地址为序列号{29,17,57,49,62,23}对应的cache block的物理地址。
需要说明的是,前面说明只要一个第一物理地址与第一物理页面对应的访存序列中的任一序列号对应的物理地址匹配,就可以生成第一预取请求,但是为防止LLC可能出现大量无效的预取,可以在两个访存请求所访问的物理地址都与第一物理页面对应的访存序列中的两个序列号对应的物理地址匹配时,才生成第一预取请求。
在本申请实施例中,局部子预取器还可以考虑预取时机的选择,例如上述举例中对序列号为23的cache block的访存请求可能是访存序列中最后一个发送的,与访存序列中前面的序列号的cache block的访存请求可能会间隔上千万个周期,因此过早的预取序列号为23的cache block可能会造成无效预取。例如本来到1万周期时才访问该cacheblock,而在100个周期时就已将该cache block预取到了LLC中,那么在100个周期到9999个周期内预取的数据会占用该cache block,如果该cache block在这期间被剔除出LLC,那么该cache block还未被访问到就已经被除掉,就造成了无效预取,因此,过早的预取是不可取的。为了解决这个问题,可以在每个entry中设置一个迟访问过滤器位图文件(lateaccess filter bitmap),当接收某个cache block的访问请求的时间与前一个访问请求的时间间隔过长,或者是物理页面内一轮访问的最后一个cache block,可以将late accessfilter bitmap中该cache block对应的比特值置位,例如置为0,那么当局部子预取器根据pattern bitmap发送第一预取请求之前,可以先检查物理页面的entry对应的late accessfilter bitmap,过滤掉late access filter bitmap中的比特值置位的cache block,也就是在第一预取请求中不添加late access filter bitmap中的比特值置位的cache block的物理地址。
接下来对全局子预取器以及全局历史表进行说明。
全局子预取器是针对跨页规则的访存模式设计的子预取器。跨页规则的访存模式是一种在同一个物理页面内部的多次访问行为难以捕捉规律,但是物理页面之间会重复出现同样访问行为的访存模式。举例来说,如图7所示,物理页面A、物理页面B和物理页面C是间隔一定距离的3个物理页面,可以看到,每个物理页面内部的访存序列为{1,6,11,12,18,27,36,40,50,53},物理页面内部很难找到规律,但这3个物理页面的访存历史完全一致。这里的物理页面间可以是相邻的物理页面之间出现的同样访问行为的访存模式进行说明的,也可以是存在相同的间距的两个物理页面之间的访存模式相同,也可以为存在某种规律性的物理页面间的访存模式相同等,本申请不做限定。例如物理页面A与物理页面B之间间隔两个物理页面,物理页面B与物理页面C之间间隔两个物理页面,物理页面A、物理页面B与物理页面C之间的访存模式相同。
这种跨页规则的访存模式可在410.bwaves、470.lbm和433.milc这几个前述CPU2006标准测试程序集中普遍存在。以433.milc为例,例如连续访问某一物理页面内的访存序列为{0,14,13,2,3,4},页内访存行为没有规律可言,根据列号14和13可猜测接下来可能会是-1的访问步长,后续的{2,3,4}又切换到了+1的访问步长,且+1的访问步长只出现2次就终止该物理页面的访问。这种访存模式对于传统预取器来说很难处理,如果要猜测这种访存模式就要产生大量的无效预取,例如VLDP(Variable Length Delta Prefetcher)BOP(Best Offset Prefetcher)会在这种访存模式上产生高达70%比例的无效预取。但是在433.milc运行过程中有上万个物理页面连续重复了这一访存模式,因此,本申请通过对比物理页面间的访存模式,可以高度准确的预测当前物理页面的访问模式。
具体来说,针对这种不同的物理页面间有相同的访存模式的情况,本申请设计的全局子预取器利用不同物理页面间出现相同访存模式来进行预取,即全局子预取器可以从各个物理页面中学习共同的不规则访存历史或者说访存模式,并将这种访存历史应用到后续的物理页面中。该全局子预取器可与GHT结合实现预取。在一种可能的设计中,GHT用于记录不同的物理页面的访存历史。具体地,GHT可以是一张用物理页号索引的全相联32-entry的记录表,用于存储最近访存的32个物理页面中cache block的访问记录。当然,这里的32也可以替换为其他数值,本申请这里仅做举例说明。与LHT类似,GHT的每一个entry也可以包含一个64-bit pattern bitmap,如果任一个物理页面的某个cache block被访问过,则将物理页面对应的64-bit pattern bitmap中该cache block对应的bit的值可以置为1。相应的,未被访问过的cache block对应的bit的值可以为0或为空。另外,全局子预取器还配备有一个全局签名表(global signature table,GST),用于记录从各个物理页面中学习到的共同的访存历史。在一种可能的设计中,针对上述全相联32-entry的记录表,GST可以对应8种访存历史,即记录3最近访问的32个物理页面的8种访存模式(pattern),每一种pattern对应一个64位的pattern bitmap和一个3位的过往匹配可信度,过往匹配可信度可以理解为信任值(confidence counter),信任值越高,说明对应的访存模式被访问的频率越高。其中,GHT的结构可以如表1所示,GST的结构可以如表2所示。
表1
页面编号 | 36-bit |
访存历史 | 1bit counter*64 |
替换历史位 | 1-bit |
从表1可以看出,每个物理页面的GHT可以包括该物理页面的页面编号、页面访问历史和替换历史位。页面编号可以以36个比特表示;如果每个物理页面的entry包含一个64-bit pattern bitmap,那么该物理页面的访存历史可以以1bit counter*64,即以64个比特表示,对应该物理页面中的64个cache block,例如其值为1时表示该cache block被访问过;替换历史位可以以1比特表示,表示该物理页面最近是否被访问过,是否还属于GHT,例如其值为1时,表示该物理页面最近被访问过,该物理页面属于该GHT,为0时表示该物理页面最近未被访问过,该物理页面不属于该GHT。
表2
访存历史 | 64-bit |
过往匹配可信度 | 3-bit |
表2是GST的一种实施方式。GST为从GHT中学到的物理页面的共同访存历史,因此GST中的entry可以同GHT中的entry类似,GST中的entry存储有学习到的共同的访存历史,并在entry以1bit counter*64的bitmap表示,每种访存历史对应有过往匹配可信度,占用3bit。
表3
GST也可以是如表3所示的一种实施方式。从访存序列的分析来看,观察到一个访存序列最多只有16个cache block,因此GST可以采用一种分段匹配的方式来提高匹配的概率。segment编号是将每个物理页面中的64个cache block拆分成多个segment,每个segment对应一个编号,该编号可以占用2bit。例如将64个cache block拆分成4个segment,包括序列号[0-15]对应的cache block、序列号[16-31]对应的cache block、序列号[32-47]对应的cacheblock以及序列号[48-63]对应的cache block。此时,每个segment的访存历史只需占用16bit。每种访存历史对应有过往匹配可信度,占用3bit。
如果有新的物理页面被访问,那么GHT存储的最近访问的32个物理页面的访存历史将有一个要被挪出该GHT,将新的物理页面添加进GHT。当一个第二物理页面从GHT中被挪出时,将该第二物理页面的entry包含的64-bit pattern bitmap与GST中的8种pattern对应64位的pattern bitmap进行比对,如果该第二物理页面的entry包含的64-bit patternbitmap与GST中的8种pattern中任一种pattern对应64位的pattern bitmap匹配,则将该任一种pattern的过往匹配可信度的值累加1。如果该第二物理页面的entry包含的64-bitpattern bitmap与GST中的8种pattern对应64位的pattern bitmap都不匹配,可以将第二物理页面在GHT中的bitmap替换掉GST中过往匹配可信度最低的pattern bitmap,同时将GST中除过往匹配可信度最低的pattern以外其余不匹配的pattern的过往匹配可信度的值下调,例如减1。如果GST以表3形式实施,则第二物理页面的entry包含的64-bit patternbitmap可以分成4个segment,分别与GST中的8种pattern进行对比。
全局子预取器根据上述GHT和GST的设计,在生成第二预取请求时,其方法可以为:全局子预取器将访存请求中请求的cache block与GST中的8种pattern进行比对,如果访存请求中请求的cache block与某一种pattern中比特值为1的比特对应的cache block的bitmap匹配,即访存请求中请求的cache block的序列号与某种第一pattern的bitmap中比特值为1的第一比特的序列号相同,且该第一pattern的过往可信匹配度不为0,那么全局子预取器可以根据第一pattern的bitmap对访存请求中请求的cache block所在的第一物理页面进行预取,以预取该第一物理页面中除访存请求中请求的cache block以外第一pattern的bitmap中比特值为1的cache block。这里的某一种pattern对应的bitmap是对GHT中的物理页面的bitmap训练得到的。例如在GHT中有至少两个标识不同的物理页面对应的bitmap相同,如图6中的物理页面A和物理页面B的bitmap记录在GHT中,那么GST中就会保存有该bitmap,一旦访存请求中请求的第一物理页面的cache block的序列号与该bitmap中某一比特值为1的比特对应的cache block序列号相同,且该pattern的过往可信匹配度不为0,例如访存请求用于请求图6中的物理页面C中序号为01的cache block,那么全局子预取器可以生成预取请求,该预取请求中包括物理页面C对应第一pattern的bitmap中比特值为1的cache block中除访存请求中请求的cache block以外的cache block的物理地址。
需要说明的是,由于上述GST中可以包括segment编号,在全局子预取器将访存请求中请求的cache block与GST中的8种pattern进行比对时,由于一个访存请求中的访存序列最多只有16个cache block,全局子预取器可以以segment为单位对pattern bitmap进行记录和对比。
此外,上述LHT和GHT中64-bit pattern bitmap的bit值都可以使用最近未使用调度算法(Not Recently Used,NRU)进行替换。具体来说,当一物理页面的cache block被访问时,其相应的"cache block"位自动置"1",并周期性地(例如周期为T,其值通常为几百毫秒)将该物理页面所有的cache block的bit位重新置为"0"。在时间T内,某些被访问的cache block,其对应的访问位为"1",而未访问的cache block,其对应的访问位为"0"。
经过上述对全局子预取器、全局历史表和全局签名表的说明,全局子预取器、全局历史表和全局签名表可以具有如下特征。
全局历史表,用于存储不同的物理页面的访存历史包括:全局历史表,用于存储m个不同的物理页面的位图文件,位图文件中任一比特的比特值为第一数值时,表征该任一比特在位图文件对应的物理页面中的数据块被访问过。这里的m个不同的物理页面可以是最近访问的m个物理页面。也即,若最近访问的m个物理页面中的任一数据块被访问过,则任一数据块在对应位图文件中的比特值为第一数值,m为大于1的正整数;例如第一数值可以为1,m可以为上述举例中的32。
预取器还包括全局签名表,全局签名表用于存储m个物理页面中的n种访存历史的位图文件,每种访存历史为m个物理页面中至少两个物理页面相同的访存历史,n为大于1的正整数,且m大于n。n例如可以为上述举例中的8,即记录32个物理页面的8种访存历史。
全局子预取器,用于检测物理页面间的访存历史包括:全局子预取器,用于检测最近访问的m个物理页面的各个数据块是否被访问过,若检测到m个物理页面的任一数据块被访问过,则在全局历史表中记录任一数据块对应的比特值为第一数值。
全局子预取器,还用于根据全局历史表的m个物理页面的访存历史检测m个物理页面中至少两个物理页面相同的访存历史,根据至少两个物理页面相同的访存历史在全局签名表中存储m个物理页面中的n种访存历史的位图文件。
根据第一物理地址和物理页面间的访存历史生成第二预取请求包括:
若第一物理地址所访问的第一物理页面的数据块与全局签名表中存储的第一位图文件指示的访存历史匹配,则获取第一位图文件中比特值为第一数值的比特在第一物理页面中对应的数据块的物理地址,生成第二预取请求,第二预取请求中包括的预测的待访问的数据的物理地址为:第一位图文件中比特值为第一数值的比特在第一物理页面中对应的数据块的物理地址,且不包括第一物理地址。第一物理页面例如可以为上述举例中的物理页面C,预测的待访问的数据的物理地址为物理页面C中除序号01以外其余比特值为1的比特对应的数据块的物理地址。
这样一来,通过从LHT中获取GST,将访存请求所请求的cache block与GST进行对比,获取具有相同pattern的物理页面的访存历史的物理地址,通过预取请求携带这些物理地址可实现访存历史的跨页预取。
通过以上说明,预取器22可以通过全局子预取器核局部子预取器实现SoC中LLC的预取,但是如果一直同时使用这两种子预取器预取数据可能会产生大量的无效预取,因此,本申请可以将这两种子预取器进行协同工作来预取数据。
因此,本申请可以将LLC划分为3个区域,记为第一缓存区、第二缓存区和第三缓存区,第一缓存区对应局部子预取器,第二缓存区对应全局子预取器。可以通过对第一缓存区和第二缓存区访问失败的比率进行对比来确定第三缓存区应该由局部子预取器还是全局子预取器来接管。这里的第一缓存区和第二缓存区可以占用LLC中的小容量的缓存区先进行比对。本申请可以通过在预取器22中设置仲裁器223(arbitor)来实现这一比对过程,仲裁器223还可以称为系统性能监控模块(system performance monitor unit,systemPMU)。
具体来说,在全局子预取器和局部子预取器生成预取请求之前,子预取器222还用于确定访存请求中的第一物理地址在LLC中对应的缓存区域;若第一物理地址对应第一缓存区,则确定由局部子预取器根据访存请求和不同时间点下同一物理页面的访存历史生成第一预取请求,并将LLC预取的数据存储于第一缓存区;若第一物理地址对应第二缓存区,则确定由全局子预取器根据访存请求和物理页面间的访存历史生成第二预取请求,并将LLC预取的数据存储于第二缓存区。
举例来说,第一缓存区可以占用LLC容量的1/32,第二缓存区也可以占用LLC容量的1/32,第一缓存区永久绑定局部子预取器,第二缓存区永久绑定全局子预取器,LLC剩余的30/32的容量需要仲裁器223来裁定由局部子预取器还是全局子预取器来接管。当预取器22接收到core21发送的访存请求,可以控制子预取器222首先确定访存请求中的第一物理地址对应LLC中的哪个缓存区,具体可以从第一物理地址中提取出LLC set的bits,如果该bits值∈[0,32),则确定第一物理地址对应第一缓存区,由局部子预取器生成第一预取请求,局部子预取器将该第一预取请求发送至LLC进行数据预取,预取到的数据存储于第一缓存区。类似的,如果该bits值∈[32,64),则确定第一物理地址对应第二缓存区,由全局子预取器生成第二预取请求,全局子预取器将该第二预取请求发送至LLC进行数据预取,预取到的数据存储于第二缓存区。
仲裁器223用于比较预设时间段内第一缓存区和第二缓存区的缺失率,第一缓存区的缺失率为预设时间段内第一缓存区访问失败的访问量与第一缓存区总访问量的比值,第二缓存区的缺失率为预设时间段内第二缓存区访问失败的访问量与第二缓存区总访问量的比值。以第一缓存区为例,这里缺失率也可以理解为,预设时间段内,访存请求所请求获取的数据未能从第一缓存区中获取到的次数与第一缓存区的总访问次数的比值。
若第一缓存区的缺失率大于或等于第二缓存区的缺失率,则确定第三缓存区对应局部子预取器;若第一缓存区的缺失率小于第二缓存区的缺失率,则确定第三缓存区对应全局子预取器。这里的预设时间段可以为周期性的,例如预设时间段可以为4M(4millions)个周期。也可以说,仲裁器223每隔4M个周期比较下第一缓存区和第二缓存区的load miss率,即缺失率,从而选择load miss率最小的缓存区对应的子预取器接管剩余30/32的第三缓存区。例如第一缓存区和第三缓存区都对应局部子预取器,LLC根据局部子预取器生成的第一预取请求获取到的数据存储于第一缓存区和第三缓存区中,或者第二缓存区和第三缓存区都对应全局子预取器,LLC根据全局子预取器生成的第二预取请求获取到的数据存储于第二缓存区和第三缓存区中。其中,每个周期的时间与预取器的工作频率有关。假如以1Ghz频率工作,则每个周期为1ns(1纳秒)。
上述全局子预取器和局部子预取器协同工作的过程具有很好的扩展性,可以很方便的集成更多的子预取器。
本申请实施例中的预取器22还可以包括固定步长子预取器(fixed-stride sub-prefetcher)223,预取请求还可以包括第三预取请求;固定步长子预取器用于检测访存请求所请求的第一物理地址与第一物理页面的前p次访存请求所请求的物理地址是否存在固定步长,p为正整数,若确定是,则生成第三预取请求,第三预取请求包括第一物理页面中第一物理地址对应的数据之后根据固定步长获取的数据的物理地址,其中,根据固定步长获取的数据的物理地址中不包括第一物理页面在预取器中的访存历史对应的物理地址。举例来说,P为2,第一物理页面的前2次访存请求所请求的数据块的序号为01和03,如果本次发送的访存请求的第一物理地址对应第一物理页面的数据块的序号为05,可确定存在访问的固定步长,第三预取请求中可以包括07、09和11等序号的数据块的物理地址。
这种固定步长访存模式是一种规则的多个访存序列具有固定步长的访存模式,也就是说,如果固定步长子预取器检测到访存请求所请求的数据存在固定步长,固定步长子预取器可以绕过全局子预取器和局部子预取器系统工作的决策过程,直接生成第三预取请求。这是由于访存越规律,预取效果越好。实验表明,在芯片的第一级缓存L1中采用一个增强版的包含1024-entry的固定步长子预取器,尽可能的过滤固定步长模式的访存。同时在LLC上配备一个理想的固定步长预取器,来量化评估固定步长预取器在LLC上能获得的理想性能上界。评估结果表明LLC上的固定步长子预取器能为每一个正常访存请求发出预取,能够达到58.5%的加速比,在此基础上如果能识别出L1预取请求中的固定步长,并发出预取请求,则可以提供额外11.1%的性能提升。该实验证明了即便是在L1中配置有增强版的包含1024-entry的固定步长子预取器,LLC中的固定步长预取器仍然具备发展潜力。因此,本申请在LLC的预取器中配置了固定步长子预取器,用于捕捉这部分从L1中漏下的固定步长访存。
上述全局子预取器、局部子预取器和固定步长子预取器都工作时,可能使得子预取器222在短时间内生成大量的预取请求,而LLC入口处的接收队列容量有限(目前实现为8-entry),因此,可以在预取器22中设置一个预取缓存来存放接收队列无法容纳的预取请求,经过分析,可以只需要100-entry以内的容量就可以达到性能饱和。所有的预取请求都会缓存在预取缓存中,可以按照一定的速率和规则通过预取器在系统总线上的接口将预取缓存中的预取请求发送给LLC23,实现数据预取到LLC的效果。
通过上述实施例的说明,本申请在芯片内总线上设置LLC的预取器,可以通过随时侦听core发送给LLC的访存请求,并生成预取请求发送给LLC,具体可通过全局子预取器、局部子预取器和固定步长子预取器生成预取请求,且全局子预取器和局部子预取器可以协同切换地工作,解决了手机中SoC不能实现LLC预取的问题。
结合上述实施例提供的芯片20,本申请还提供一种缓存预取方法,应用于终端,终端包括上述芯片20,即芯片20内的总线接口上连接有CPU核、最后一级缓存以及最后一级缓存的预取器,如图8所示,该方法包括:
801、终端控制CPU核向最后一级缓存发送访存请求,访存请求包括第一物理地址,第一物理地址对应第一物理页面中的第一数据块。
802、终端控制预取器在侦听到访存请求时,根据访存请求和预取器中记录的至少一个物理页面的访存历史生成预取请求,并控制预取器向最后一级缓存发送预取请求;预取请求包括预取器预测的第一物理页面中待访问的数据的物理地址。
803、终端控制最后一级缓存根据预取请求从芯片的内存中预取数据。
该方法还可以包括:终端检测至少一个物理页面的访存历史;
根据访存请求和预取器中记录的至少一个物理页面的访存历史生成预取请求包括:终端控制子预取器根据访存请求和访存历史表中记录的至少一个物理页面的访存历史生成预取请求。
终端检测至少一个物理页面的访存历史包括:终端控制局部子预取器检测不同时间点下同一物理页面的访存历史;以及,终端控制全局子预取器检测不同的物理页面间的访存历史。
终端控制子预取器根据访存请求和访存历史表中记录的至少一个物理页面的访存历史生成预取请求包括:终端控制局部子预取器根据访存请求和不同时间点下第一物理页面的访存历史生成第一预取请求;其中,不同时间点下第一物理页面的访存历史相同;以及,终端控制全局子预取器根据访存请求和物理页面间的访存历史生成第二预取请求;其中,不同的物理页面间的访存历史相同。
终端控制局部子预取器检测不同时间点下同一物理页面的访存历史包括:终端控制局部子预取器检测不同时间点下同一物理页面的数据块是否被访问过,若检测到不同时间点下同一物理页面的任一数据块被访问过,则在同一物理页面对应的位图文件中记录任一数据块对应的比特值为第一数值。
根据访存请求和不同时间点下第一物理页面的访存历史生成第一预取请求包括:若第一数据块在第一物理页面的位图文件中的比特值为第一数值,则获取第一物理页面的位图文件中除第一数据块以外比特值为第一数值的比特对应的数据块的物理地址,生成第一预取请求,第一预取请求包括的预测的待访问的数据的物理地址为:第一物理页面的位图文件中比特值为第一数值的比特对应的数据块的物理地址,且不包括第一物理地址。
终端控制全局子预取器检测不同的物理页面间的访存历史包括:终端控制全局子预取器检测最近访问的m个物理页面的各个数据块是否被访问过,若检测到m个物理页面的任一数据块被访问过,则在全局历史表中记录任一数据块对应的比特值为第一数值。
该方法还包括:终端控制全局子预取器根据全局历史表的m个物理页面的访存历史检测m个物理页面中至少两个物理页面相同的访存历史,根据至少两个物理页面相同的访存历史在全局签名表中存储m个物理页面中的n种访存历史的位图文件。
根据访存请求和物理页面间的访存历史生成预取请求包括:若第一数据块与全局签名表中存储的第一位图文件指示的访存历史匹配,则获取第一位图文件中比特值为第一数值的比特在第一物理页面中对应的数据块的物理地址,生成第二预取请求,第二预取请求中包括的预测的待访问的数据的物理地址为:第一位图文件中比特值为第一数值的比特在第一物理页面中对应的数据块的物理地址,且不包括第一物理地址。
在终端生成第一预取请求和第二预取请求之前,该方法还包括:
终端控制子预取器确定访存请求中的第一物理地址在最后一级缓存中对应的缓存区域;
若第一物理地址对应第一缓存区,则确定由局部子预取器根据访存请求和不同时间点下同一物理页面的访存历史生成第一预取请求,并将最后一级缓存预取的数据存储于第一缓存区;
若第一物理地址对应第二缓存区,则确定由全局子预取器根据访存请求和物理页面间的访存历史生成第二预取请求,并将最后一级缓存预取的数据存储于第二缓存区;
预取器还包括仲裁器,方法还包括:
终端控制仲裁器比较预设时间段内第一缓存区和第二缓存区的缺失率,第一缓存区的缺失率为预设时间段内第一缓存区访问失败的访问量与第一缓存区总访问量的比值,第二缓存区的缺失率为预设时间段内第二缓存区访问失败的访问量与第二缓存区总访问量的比值;
若第一缓存区的缺失率大于或等于第二缓存区的缺失率,则确定第三缓存区对应局部子预取器;若第一缓存区的缺失率小于第二缓存区的缺失率,则确定第三缓存区对应全局子预取器。
该方法还可以包括:
终端控制固定步长子预取器检测访存请求所请求的第一物理地址与第一物理页面的前p次访存请求所请求的物理地址是否存在固定步长,p为正整数,若确定是,则生成第三预取请求,第三预取请求包括第一物理页面中第一物理地址对应的数据之后根据固定步长获取的数据的物理地址,其中,根据固定步长获取的数据的物理地址中不包括第一物理页面在预取器中的访存历史对应的物理地址。
通过该方法,本申请通过在终端内的芯片的总线上设置LLC的预取器,可以通过随时侦听core发送给LLC的访存请求,并生成预取请求发送给LLC,具体可通过全局子预取器、局部子预取器和固定步长子预取器生成预取请求,且全局子预取器和局部子预取器可以协同切换地工作,解决了手机中SoC不能实现LLC预取的问题。
上述在芯片总线上连接有LLC的预取器的方式也可以适用于L1或L2作为最后一级缓存时,区别于现有技术中预取器设计在L1或L2内部的实现方式。这样一来,本申请还提供一种芯片,芯片包括中央处理器CPU核、缓存、预取器以及总线,CPU核、缓存以及预取器均连接在总线上。预取器,用于在通过总线侦听到CPU核访问缓存时,生成预取请求,预取请求用于指示缓存从芯片的内存中预取数据。可选的,该缓存可以为L1或L2或LLC。
当缓存为L1或L2或LLC时,该预取器可以用于:在通过总线侦听到CPU核发送给缓存的访存请求时,根据访存请求和预取器中记录的至少一个物理页面的访存历史生成预取请求,并向缓存发送预取请求;预取请求包括预取器预测的待访问的数据的物理地址。具体的实现方式可以参见前述描述中预取器如何对LLC进行预取的实现方式,此处不再赘述。
在解决了手机中SoC不能实现LLC预取的问题的同时,实验表明,本申请通过在芯片总线上增加LLC的预取器的情况下,LLC的预取器可提升应用的进程间通信(Inter-ProcessCommunication,IPC)性能达15.3%。对比现有技术中的L2的预取器或者传统PC或服务器中的LLC的预取器,本申请的LLC的预取器性能可超越传统的预取器性能5%,并且基本在所有的场景下可实现性能最优。这种性能提升得益于本申请提供的预取器能够根据访存特征变化自动选择合适的预取器,例如通过仲裁器在全局子预取器和局部子预取器之间选择。
本申请提供的三个子预取器可以有效应对前述CPU2006标准测试程序集中不同的子项,以提升其性能。例如在437.leslie3d、470.lbm以及433.milc这几个benchmark上,全局子预取器依靠跨页模式的训练,超过了以往的预取器的设计。在429.mcf、471.omnetpp以及403.gcc上,跨页模式极少,而局部子预取器和固定步长子预取器性能更好。这说明,通过仲裁器的选择,本申请的预取器能够动态地适应不同场景的特征,以便启动不同的子预取器负责主要的预取工作。
另外,本申请设计的LLC的预取器能够使得访存开销更少。访存开销的主要来源是403.gcc、429.mcf以及471.omnetpp等几个模式不规则场景,以及真实手机应用场景。工业界数据显示,手机SoC中内存子系统功耗大约占据20%至40%,有时内存子系统功耗与CPU功耗一样多。因此,性能提升必须大于访存开销的提升幅度,才能让手机的性能功耗比获得正向收益。本申请提供的预取器通过全局子预取器和局部子预取器的切换,可以将433.milc的访存开销降到可以忽略的程度,而403.gcc、429.mcf以及471.omnetpp中内置该预取器,也可以大幅削减访存开销。
再者,本申请提供的预取器也可使手机SoC的性能和功耗收益得到提升。如表4所示,示出了3个提取自手机真实应用场景的测试程序,包括社交软件、游戏软件和浏览器。仿真结果显示,手机的LLC的缺失率(miss率)从原始没有本申请提供预取器时的16.78%-23.28%下降至8.49%-13.62%,下降了约40%-50%,从而使手机的CPU功耗下降了8.98-16.96mA,虽然访存开销引起了DDR功耗的恶化,评估结果显示,DDR功耗恶化可以控制在4.58-7.64mA之间,从而使预取器的综合功耗节省4.41-13.96mA。由此可见,本申请提供的预取器不仅提升了CPU的性能,同时对手机SoC芯片的功耗也是有益的。
表4
在安卓(Android)平台跑分软件(Geekbench4,GK4)的单线程测试下,手机LLC的miss率下降较为明显,达到70%-90%,从而使单线程跑分的跑分性能提升3.57%,如表5所示。
表5GK4跑分下的性能收益
在访存测试程序LMbench的bw_mem l6M rd子项下,本申请提供的预取器可以使LLC的缺失率降低46.53%,而仅产生0.14%的额外访存开销,使得带宽测试结果提升2.13%。如表6所示。
表6 yy LMbench下的DDR带宽测试评估
总的来说,在Specint与手机场景上,通过与过往方案对比,本申请提供的预取器对于手机实现了5%左右的性能提升,削减了2-3%的内存流量(memory traffic),并基本消除了性能倒退现象。在手机场景上,本申请提供的预取器对手机SoC的功耗不仅没有恶化,而且有明显收益,收益约占CPU+DDR功耗的5%。在手机测试程序GK4以及LMbench,均有性能收益。此外,本申请提供的预取器的开销也很小,约仅有13KB的存储容量。
图9示出了本申请提供的一种服务器的结构示意图。
如图9所示,服务器90包括处理器901和芯片20,其中,处理器901例如是CPU。
芯片20还可以与其它组件连接,例如,与第四代双倍速率(double data rata,DDR)存储器(简称为“DDR4”)、寄存器、闪存、视频接口和物理层芯片(例如,网卡)连接。
DDR4用于为芯片20或处理器901提供运行程序或者代码的空间。
闪存可以是存储芯片20自身固件和相关数据的闪存。
视频接口用于连接显示器等外部设备。物理层芯片连接网卡,用于为服务器90提供数据收发服务。
芯片20和处理器901都通过开关访问基本输入输出系统(Basic Input OutputSystem,BIOS),运行闪存中存储的BIOS,并通过切换开关的方式与芯片20通信。
上述服务器90的架构仅是举例说明,而不应被理解为对本申请提供的技术方案的应用限定,本申请提供的技术方案还可以应用于包含更多或者更少的组件的服务器中。
例如,服务器90可以是云计算服务器,此时,服务器90可以包括多个计算单元,计算单元可以是CPU、也可以是图形处理器(graphics processing unit,GPU),还可以是现场可编程门阵列(Field-Programmable Gate Array,FPGA)、特殊应用集成电路(ApplicationSpecific Integrated Circuit,ASIC)、数字信号处理(Digital Signal Processing,DSP)、神经网络处理器(neural-network process unit,NPU)或者其它类型的计算单元。该多个计算单元可以组成同构计算(homogenous computing)资源池和/或异构计算(heterogeneous computing)资源池为用户提供服务。
又例如,服务器90可以是存储服务器,此时,服务器90可以包括多个存储单元,存储单元可以是硬盘驱动器(hard disk drive,HDD)硬盘,也可以是固态硬盘(solid statedisk,SSD),还可以是小型计算机系统接口(small computer system interface,SCSI)硬盘或者其它类型的非易失性存储介质。当服务器90包括多个硬盘时,该多个硬盘可以组成磁盘阵列(redundant arrays of independent drives,RAID),作为服务器90的存储资源池为用户提供服务。
图10示出了本申请提供的一种终端设备的结构示意图。
终端设备可被称为接入终端、用户设备(user equipment,UE)、用户单元、用户站、移动站、移动台、远方站、远程终端、移动设备、用户终端、终端、无线通信设备、用户代理或用户装置。接入终端可以是蜂窝电话、具有无线通信功能的手持设备、计算设备或连接到无线调制解调器的其它处理设备、车载设备、可穿戴设备以及第五代移动通信技术(5-Generation,5G)通信系统中的用户设备。上述各个电子设备仅是对终端设备的举例说明,终端设备还可以是其它电子设备,例如包含芯片50的汽车或无人机。
如图10所示,当终端设备为手机时,手机10包括芯片20、闪存30、控制电路、天线以及输入输出装置。芯片20主要用于对通信协议以及通信数据进行处理,以及对整个终端设备进行控制,执行软件程序,处理软件程序的数据。闪存30主要用于存储软件程序和数据。芯片20和闪存30用于在手机11启动时为手机10提供安全启动保障。控制电路主要用于基带信号与射频信号的转换以及对射频信号的处理。控制电路和天线一起也可以叫做收发器,主要用于收发电磁波形式的射频信号。输入输出装置,例如触摸屏、显示屏或键盘,主要用于接收用户输入的数据以及对用户输出数据。
当终端设备开机后,芯片20可以按照图8所示的流程执行步骤,运行OS,随后读取闪存30中的软件程序,解释并执行软件程序的指令,处理软件程序的数据。芯片20可以包括基带芯片,当需要通过无线发送数据时,芯片20的基带芯片对待发送的数据进行基带处理后,输出基带信号至射频电路,射频电路将基带信号进行射频处理后将射频信号通过天线以电磁波的形式向外发送。当有数据发送到终端设备时,射频电路通过天线接收到射频信号,将射频信号转换为基带信号,并将基带信号输出至处理器,处理器将基带信号转换为数据并对该数据进行处理。
本领域技术人员可以理解,为了便于说明,图10仅示出了一个存储器(闪存30)和一个处理器(芯片20)。在实际的终端设备中,可以存在多个处理器和多个存储器。存储器也可以称为存储介质或者存储设备等,本申请对此不做限定。
图11示出了本申请提供的一种网络设备的结构示意图。
网络设备可以是码分多址(code division multiple access,CDMA)系统中的基站(base transceiver station,BTS),也可以是宽带码分多址(wideband code divisionmultiple access,WCDMA)系统中的基站(node B,NB),还可以是长期演进(long termevolution,LTE)系统中的演进型基站(evolutional node B,eNB),还可以是5G通信系统中的基站(gNB),上述基站仅是举例说明,网络设备还可以为中继站、接入点、车载设备、可穿戴设备以及包含芯片20的汽车或无人机。
如图11所示,当网络设备为基站时,基站11可包括一个或多个射频单元,如远端射频单元(remote radio unit,RRU)111和一个或多个基带单元(baseband unit,BBU)(也可称为数字单元(digital unit,DU))112。所述RRU111可以称为收发单元、收发机、收发电路、或者收发器等等,其可以包括至少一个天线1111和射频单元1112。RRU111主要用于射频信号的收发以及射频信号与基带信号的转换。BBU112主要用于进行基带处理,对基站11进行控制等。BBU112中的单板上集成有芯片20和闪存30,芯片20和闪存30用于在BBU112启动时为BBU112提供安全启动保障。RRU111与BBU112可以是物理上设置在一起的,也可以物理上分离设置的,即分布式基站。
BBU112为基站的控制中心,也可以称为处理单元,主要用于完成基带处理功能,如信道编码,复用,调制,扩频等等。
在一个示例中,BBU112可以由一个或多个单板构成,多个单板可以共同支持单一接入指示的无线接入网(如LTE网),也可以分别支持不同接入制式的无线接入网(如LTE网,5G网或其它网)。BBU122还包括闪存30和芯片20,闪存30和芯片20可以服务于一个或多个单板。也就是说,可以每个单板上单独设置存储器和处理器。也可以是多个单板共用相同的存储器和处理器。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本申请所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (12)
1.一种芯片,其特征在于,所述芯片内的总线接口上连接有中央处理器CPU核、最后一级缓存以及所述最后一级缓存的预取器,其中:
所述CPU核,用于向所述最后一级缓存发送访存请求,所述访存请求包括第一物理地址,所述第一物理地址对应第一物理页面中的第一数据块;
所述预取器,包括全局历史表和局部历史表,还包括局部子预取器和全局子预取器;所述全局历史表,用于存储不同的物理页面间的访存历史;所述局部历史表,用于存储同一物理页面的访存历史;
所述局部子预取器,用于检测不同时间点下同一物理页面的访存历史,以及根据所述访存请求和所述不同时间点下所述第一物理页面的访存历史生成第一预取请求;其中,所述不同时间点下所述第一物理页面的访存历史相同;所述第一预取请求包括所述预取器预测的所述第一物理页面中待访问的数据的物理地址;
所述全局子预取器,用于检测不同的物理页面间的访存历史,以及根据所述访存请求和所述物理页面间的访存历史生成第二预取请求;其中,所述不同的物理页面间的访存历史相同;所述第二预取请求包括所述预取器预测的所述第一物理页面中待访问的数据的物理地址;所述最后一级缓存,用于根据所述第一预取请求或所述第二预取请求从所述芯片的内存中预取数据。
2.根据权利要求1所述的芯片,其特征在于,所述局部历史表,用于存储所述同一物理页面的访存历史包括:所述局部历史表,用于存储所述同一物理页面的位图文件,所述位图文件中任一比特的比特值为第一数值时,表征所述任一比特在所述位图文件对应的物理页面中的数据块被访问过;
所述局部子预取器,用于检测不同时间点下同一物理页面的访存历史包括:所述局部子预取器,用于检测所述不同时间点下所述同一物理页面的数据块是否被访问过,若检测到所述不同时间点下所述同一物理页面的任一数据块被访问过,则在所述同一物理页面对应的所述位图文件中记录所述任一数据块对应的比特值为所述第一数值;
所述根据所述访存请求和所述不同时间点下所述第一物理页面的访存历史生成所述第一预取请求包括:若所述第一数据块在所述第一物理页面的位图文件中的比特值为所述第一数值,则获取所述第一物理页面的位图文件中除所述第一数据块以外比特值为所述第一数值的比特对应的数据块的物理地址,生成所述第一预取请求,所述第一预取请求包括的所述预测的待访问的数据的物理地址为:所述第一物理页面的位图文件中比特值为所述第一数值的比特对应的数据块的物理地址,且不包括所述第一物理地址。
3.根据权利要求1所述的芯片,其特征在于,所述全局历史表,用于存储不同的物理页面的访存历史包括:所述全局历史表,用于存储m个物理页面的位图文件,所述位图文件中任一比特的比特值为第一数值时,表征所述任一比特在所述位图文件对应的物理页面中的数据块被访问过,m为大于1的正整数;
所述预取器还包括全局签名表,所述全局签名表用于存储所述m个物理页面中的n种访存历史的位图文件,每种所述访存历史为所述m个物理页面中至少两个物理页面相同的访存历史,n为大于1的正整数,且m大于n;
所述全局子预取器,用于检测物理页面间的访存历史包括:所述全局子预取器,用于检测最近访问的所述m个物理页面的各个数据块是否被访问过,若检测到所述m个物理页面的任一数据块被访问过,则在所述全局历史表中记录所述任一数据块对应的比特值为所述第一数值;
所述全局子预取器,还用于根据所述全局历史表的所述m个物理页面的访存历史检测所述m个物理页面中至少两个所述物理页面相同的访存历史,根据所述至少两个所述物理页面相同的访存历史在所述全局签名表中存储所述m个物理页面中的n种访存历史的位图文件;
所述根据所述访存请求和所述物理页面间的访存历史生成所述预取请求包括:
若所述第一数据块与所述全局签名表中存储的第一位图文件指示的访存历史匹配,则获取所述第一位图文件中比特值为所述第一数值的比特在所述第一物理页面中对应的数据块的物理地址,生成所述第二预取请求,所述第二预取请求中包括的所述预测的待访问的数据的物理地址为:所述第一位图文件中比特值为所述第一数值的比特在第一物理页面中对应的数据块的物理地址,且不包括所述第一物理地址。
4.根据权利要求1-3任一项所述的芯片,其特征在于,所述最后一级缓存包括第一缓存区、第二缓存区以及第三缓存区;所述第一缓存区对应所述局部子预取器,所述第二缓存区对应所述全局子预取器;
所述子预取器,还用于确定所述访存请求中的所述第一物理地址在所述最后一级缓存中对应的缓存区域;
若所述第一物理地址对应所述第一缓存区,则确定由所述局部子预取器根据所述访存请求和所述不同时间点下所述同一物理页面的访存历史生成所述第一预取请求,并将所述最后一级缓存预取的数据存储于所述第一缓存区;
若所述第一物理地址对应所述第二缓存区,则确定由所述全局子预取器根据所述访存请求和所述物理页面间的访存历史生成所述第二预取请求,并将所述最后一级缓存预取的数据存储于所述第二缓存区;
所述预取器还包括仲裁器,所述仲裁器用于:
比较预设时间段内所述第一缓存区和所述第二缓存区的缺失率,所述第一缓存区的缺失率为所述预设时间段内所述第一缓存区访问失败的访问量与所述第一缓存区总访问量的比值,所述第二缓存区的缺失率为所述预设时间段内所述第二缓存区访问失败的访问量与所述第二缓存区总访问量的比值;
若所述第一缓存区的缺失率大于或等于所述第二缓存区的缺失率,则确定所述第三缓存区对应所述全局子预取器;若所述第一缓存区的缺失率小于所述第二缓存区的缺失率,则确定所述第三缓存区对应所述局部子预取器。
5.根据权利要求4所述的芯片,其特征在于,所述子预取器还包括固定步长子预取器,所述预取请求还包括第三预取请求;
所述固定步长子预取器用于检测所述访存请求所请求的第一物理地址与所述第一物理页面的前p次访存请求所请求的物理地址是否存在固定步长,p为正整数,若确定是,则生成所述第三预取请求,所述第三预取请求包括所述第一物理页面中所述第一物理地址对应的数据之后根据所述固定步长获取的数据的物理地址,其中,根据所述固定步长获取的数据的物理地址中不包括所述第一物理页面在所述预取器中的访存历史对应的物理地址。
6.一种芯片,其特征在于,所述芯片包括中央处理器CPU核、缓存、预取器以及总线,所述CPU核、所述缓存以及所述预取器均连接在所述总线上,其中:
所述预取器,用于在通过所述总线侦听到所述CPU核访问所述缓存时,生成预取请求,所述预取请求用于指示所述缓存从所述芯片的内存中预取数据;
所述预取器,包括全局历史表和局部历史表,还包括局部子预取器和全局子预取器;所述全局历史表,用于存储不同的物理页面间的访存历史;所述局部历史表,用于存储同一物理页面的访存历史;
所述局部子预取器,用于检测不同时间点下同一物理页面的访存历史,以及根据访存请求和所述不同时间点下第一物理页面的访存历史生成第一预取请求;其中,所述不同时间点下所述第一物理页面的访存历史相同;所述第一预取请求包括所述预取器预测的所述第一物理页面中待访问的数据的物理地址;
所述全局子预取器,用于检测不同的物理页面间的访存历史,以及根据所述访存请求和所述物理页面间的访存历史生成第二预取请求;其中,所述不同的物理页面间的访存历史相同;所述第二预取请求包括所述预取器预测的第一物理页面中待访问的数据的物理地址;
所述缓存为所述芯片的最后一级缓存,所述最后一级缓存,用于根据所述第一预取请求或所述第二预取请求从所述芯片的内存中预取数据。
7.一种终端,其特征在于,所述终端包括如权利要求1-5任一项所述的芯片,或所述终端包括如权利要求6所述的芯片。
8.一种缓存预取方法,应用于终端,所述终端包括芯片,其特征在于,所述芯片内的总线接口上连接有中央处理器CPU核、最后一级缓存以及所述最后一级缓存的预取器,所述方法包括:
所述终端控制所述CPU核向所述最后一级缓存发送访存请求,所述访存请求包括第一物理地址,所述第一物理地址对应第一物理页面中的第一数据块;
所述终端控制所述预取器在侦听到所述访存请求时,根据所述访存请求和所述预取器中记录的至少一个物理页面的访存历史生成预取请求,并控制所述预取器向所述最后一级缓存发送所述预取请求;所述预取请求包括所述预取器预测的所述第一物理页面中待访问的数据的物理地址;其中,所述预取器包括全局历史表和局部历史表、局部子预取器和全局子预取器;所述全局历史表,用于存储不同的物理页面间的访存历史;所述局部历史表,用于存储同一物理页面的访存历史;所述预取请求包括第一预取请求和第二预取请求;
所述终端检测所述至少一个物理页面的访存历史包括:
所述终端控制所述局部子预取器检测不同时间点下同一物理页面的访存历史;以及,所述终端控制所述全局子预取器检测不同的物理页面间的访存历史;
所述终端控制所述子预取器根据所述访存请求和所述访存历史表中记录的所述至少一个物理页面的访存历史生成所述预取请求包括:
所述终端控制所述局部子预取器根据所述访存请求和所述不同时间点下所述第一物理页面的访存历史生成所述第一预取请求;其中,所述不同时间点下所述第一物理页面的访存历史相同;以及,所述终端控制所述全局子预取器根据所述访存请求和所述物理页面间的访存历史生成所述第二预取请求;其中,所述不同的物理页面间的访存历史相同;
所述终端控制所述最后一级缓存根据所述第一预取请求或所述第二预取请求从所述芯片的内存中预取数据。
9.根据权利要求8所述的方法,其特征在于,所述局部历史表,用于存储所述同一物理页面的访存历史包括:所述局部历史表,用于存储所述同一物理页面的位图文件,所述位图文件中任一比特的比特值为第一数值时,表征所述任一比特在所述位图文件对应的物理页面中的数据块被访问过;
所述终端控制所述局部子预取器检测不同时间点下同一物理页面的访存历史包括:所述终端控制所述局部子预取器检测所述不同时间点下所述同一物理页面的数据块是否被访问过,若检测到所述不同时间点下所述同一物理页面的任一数据块被访问过,则在所述同一物理页面对应的所述位图文件中记录所述任一数据块对应的比特值为所述第一数值;
所述根据所述访存请求和所述不同时间点下所述第一物理页面的访存历史生成所述第一预取请求包括:若所述第一数据块在所述第一物理页面的位图文件中的比特值为所述第一数值,则获取所述第一物理页面的位图文件中除所述第一数据块以外比特值为所述第一数值的比特对应的数据块的物理地址,生成所述第一预取请求,所述第一预取请求包括的所述预测的待访问的数据的物理地址为:所述第一物理页面的位图文件中比特值为所述第一数值的比特对应的数据块的物理地址,且不包括所述第一物理地址。
10.根据权利要求9所述的方法,其特征在于,所述全局历史表,用于存储不同的物理页面的访存历史包括:所述全局历史表,用于存储m个物理页面的位图文件,所述位图文件中任一比特的比特值为第一数值时,表征所述任一比特在所述位图文件对应的物理页面中的数据块被访问过,m为大于1的正整数;
所述预取器还包括全局签名表,所述全局签名表用于存储所述m个物理页面中的n种访存历史的位图文件,每种所述访存历史为所述m个物理页面中至少两个物理页面相同的访存历史,n为大于1的正整数,且m大于n;
所述终端控制所述全局子预取器检测不同的物理页面间的访存历史包括:所述终端控制所述全局子预取器检测最近访问的所述m个物理页面的各个数据块是否被访问过,若检测到所述m个物理页面的任一数据块被访问过,则在所述全局历史表中记录所述任一数据块对应的比特值为所述第一数值;
所述方法还包括:所述终端控制所述全局子预取器根据所述全局历史表的所述m个物理页面的访存历史检测所述m个物理页面中至少两个所述物理页面相同的访存历史,根据所述至少两个所述物理页面相同的访存历史在所述全局签名表中存储所述m个物理页面中的n种访存历史的位图文件;
所述根据所述访存请求和所述物理页面间的访存历史生成所述预取请求包括:
若所述第一数据块与所述全局签名表中存储的第一位图文件指示的访存历史匹配,则获取所述第一位图文件中比特值为所述第一数值的比特在所述第一物理页面中对应的数据块的物理地址,生成所述第二预取请求,所述第二预取请求中包括的所述预测的待访问的数据的物理地址为:所述第一位图文件中比特值为所述第一数值的比特在第一物理页面中对应的数据块的物理地址,且不包括所述第一物理地址。
11.根据权利要求10所述的方法,其特征在于,所述最后一级缓存包括第一缓存区、第二缓存区以及第三缓存区;所述第一缓存区对应所述局部子预取器,所述第二缓存区对应所述全局子预取器;
在所述终端生成所述第一预取请求和所述第二预取请求之前,所述方法还包括:
所述终端控制所述子预取器确定所述访存请求中的所述第一物理地址在所述最后一级缓存中对应的缓存区域;
若所述第一物理地址对应所述第一缓存区,则确定由所述局部子预取器根据所述访存请求和所述不同时间点下所述同一物理页面的访存历史生成所述第一预取请求,并将所述最后一级缓存预取的数据存储于所述第一缓存区;
若所述第一物理地址对应所述第二缓存区,则确定由所述全局子预取器根据所述访存请求和所述物理页面间的访存历史生成所述第二预取请求,并将所述最后一级缓存预取的数据存储于所述第二缓存区;
所述预取器还包括仲裁器,所述方法还包括:
所述终端控制所述仲裁器比较预设时间段内所述第一缓存区和所述第二缓存区的缺失率,所述第一缓存区的缺失率为所述预设时间段内所述第一缓存区访问失败的访问量与所述第一缓存区总访问量的比值,所述第二缓存区的缺失率为所述预设时间段内所述第二缓存区访问失败的访问量与所述第二缓存区总访问量的比值;
若所述第一缓存区的缺失率大于或等于所述第二缓存区的缺失率,则确定所述第三缓存区对应所述全局子预取器;若所述第一缓存区的缺失率小于所述第二缓存区的缺失率,则确定所述第三缓存区对应所述局部子预取器。
12.根据权利要求11所述的方法,其特征在于,所述子预取器还包括固定步长子预取器,所述预取请求还包括第三预取请求;
所述方法还包括:
所述终端控制所述固定步长子预取器检测所述访存请求所请求的第一物理地址与所述第一物理页面的前p次访存请求所请求的物理地址是否存在固定步长,p为正整数,若确定是,则生成所述第三预取请求,所述第三预取请求包括所述第一物理页面中所述第一物理地址对应的数据之后根据所述固定步长获取的数据的物理地址,其中,根据所述固定步长获取的数据的物理地址中不包括所述第一物理页面在所述预取器中的访存历史对应的物理地址。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2018112992557 | 2018-11-02 | ||
CN201811299255 | 2018-11-02 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111143242A CN111143242A (zh) | 2020-05-12 |
CN111143242B true CN111143242B (zh) | 2022-05-10 |
Family
ID=70515310
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811437235.1A Active CN111143242B (zh) | 2018-11-02 | 2018-11-28 | 一种缓存预取方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111143242B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111639042B (zh) * | 2020-06-04 | 2023-06-02 | 中科芯集成电路有限公司 | 一种预取buffer数据一致性的处理方法及装置 |
CN112265650B (zh) * | 2020-10-28 | 2022-02-18 | 卓旺(安徽)航空科技产业股份有限公司 | 一种无人机水下250米定向采集水体系留系统 |
CN112685337B (zh) * | 2021-01-15 | 2022-05-31 | 浪潮云信息技术股份公司 | 一种存储集群中分级缓存读写数据的方法 |
CN113656332B (zh) * | 2021-08-20 | 2023-05-26 | 中国科学院上海高等研究院 | 基于合并地址差值序列的cpu缓存数据预取方法 |
CN114238167B (zh) * | 2021-12-14 | 2022-09-09 | 海光信息技术股份有限公司 | 信息预取方法、处理器、电子设备 |
CN114356588B (zh) * | 2022-03-18 | 2022-06-17 | 苏州云途半导体有限公司 | 一种数据预加载方法和装置 |
CN114817087B (zh) * | 2022-05-12 | 2022-11-11 | 郑州轻工业大学 | 基于缓存失效行为的预取距离自适应调整方法及装置 |
CN116055429A (zh) * | 2023-01-17 | 2023-05-02 | 杭州鸿钧微电子科技有限公司 | 基于pcie的通信数据处理方法、装置、设备及存储介质 |
CN117873931B (zh) * | 2024-03-11 | 2024-06-07 | 浪潮电子信息产业股份有限公司 | 一种数据处理系统、方法及介质 |
CN118012788B (zh) * | 2024-04-09 | 2024-06-28 | 北京壁仞科技开发有限公司 | 数据处理器、数据处理方法、电子设备和存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1604055A (zh) * | 2003-09-30 | 2005-04-06 | 国际商业机器公司 | 利用永久历史页表数据预取数据到高速缓存的装置和方法 |
CN101127008A (zh) * | 2006-08-18 | 2008-02-20 | 国际商业机器公司 | 用于预测性选择预取操作的范围的数据处理系统和方法 |
CN102866957A (zh) * | 2012-07-31 | 2013-01-09 | 中国人民解放军国防科学技术大学 | 面向多核多线程微处理器的虚拟活跃页缓冲方法及装置 |
CN102937937A (zh) * | 2012-06-27 | 2013-02-20 | 威盛电子股份有限公司 | 数据预取器及预取数据至高速缓存存储器的方法 |
CN103425502A (zh) * | 2012-05-15 | 2013-12-04 | 腾讯科技(深圳)有限公司 | 一种操作系统的预取启动方法和装置 |
CN103984640A (zh) * | 2014-05-14 | 2014-08-13 | 华为技术有限公司 | 实现数据预取方法及装置 |
CN106776371A (zh) * | 2015-12-14 | 2017-05-31 | 上海兆芯集成电路有限公司 | 跨距参考预取器、处理器和将数据预取到处理器的方法 |
CN107479860A (zh) * | 2016-06-07 | 2017-12-15 | 华为技术有限公司 | 一种处理器芯片以及指令缓存的预取方法 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7089370B2 (en) * | 2003-09-30 | 2006-08-08 | International Business Machines Corporation | Apparatus and method for pre-fetching page data using segment table data |
US7395406B2 (en) * | 2005-05-12 | 2008-07-01 | International Business Machines Corporation | System and method of large page handling in a virtual memory system |
US7640420B2 (en) * | 2007-04-02 | 2009-12-29 | Intel Corporation | Pre-fetch apparatus |
US8024545B2 (en) * | 2007-10-19 | 2011-09-20 | Inha-Industry Partnership Institute | Efficient prefetching and asynchronous writing for flash memory |
CN103513957B (zh) * | 2012-06-27 | 2017-07-11 | 上海芯豪微电子有限公司 | 高性能缓存方法 |
US9563562B2 (en) * | 2012-11-27 | 2017-02-07 | Nvidia Corporation | Page crossing prefetches |
CN104133780B (zh) * | 2013-05-02 | 2017-04-05 | 华为技术有限公司 | 一种跨页预取方法、装置及系统 |
CN107797760B (zh) * | 2016-09-05 | 2021-06-11 | 北京忆恒创源科技有限公司 | 一种访问缓存信息的方法、装置与固态驱动器 |
-
2018
- 2018-11-28 CN CN201811437235.1A patent/CN111143242B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1604055A (zh) * | 2003-09-30 | 2005-04-06 | 国际商业机器公司 | 利用永久历史页表数据预取数据到高速缓存的装置和方法 |
CN101127008A (zh) * | 2006-08-18 | 2008-02-20 | 国际商业机器公司 | 用于预测性选择预取操作的范围的数据处理系统和方法 |
CN103425502A (zh) * | 2012-05-15 | 2013-12-04 | 腾讯科技(深圳)有限公司 | 一种操作系统的预取启动方法和装置 |
CN102937937A (zh) * | 2012-06-27 | 2013-02-20 | 威盛电子股份有限公司 | 数据预取器及预取数据至高速缓存存储器的方法 |
CN102866957A (zh) * | 2012-07-31 | 2013-01-09 | 中国人民解放军国防科学技术大学 | 面向多核多线程微处理器的虚拟活跃页缓冲方法及装置 |
CN103984640A (zh) * | 2014-05-14 | 2014-08-13 | 华为技术有限公司 | 实现数据预取方法及装置 |
CN106776371A (zh) * | 2015-12-14 | 2017-05-31 | 上海兆芯集成电路有限公司 | 跨距参考预取器、处理器和将数据预取到处理器的方法 |
CN107479860A (zh) * | 2016-06-07 | 2017-12-15 | 华为技术有限公司 | 一种处理器芯片以及指令缓存的预取方法 |
Non-Patent Citations (3)
Title |
---|
Access map pattern matching for data cache prefetch;Yasuo lshii .etc;《ICS"09:Proceedings of the 23rd international conference on Supercomputing》;20090630;第499-500页 * |
一种基于页面级流缓存结构的流检测和预取算法;刘立等;《计算机研究与发展》;20091031;第1758-1767页 * |
一种支持并发访问流的文件预取算法;吴峰光等;《软件学报》;20100831;第1820-1833页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111143242A (zh) | 2020-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111143242B (zh) | 一种缓存预取方法和装置 | |
EP3920034A1 (en) | Systems and methods for scalable and coherent memory devices | |
US11487675B1 (en) | Collecting statistics for persistent memory | |
US10037280B2 (en) | Speculative pre-fetch of translations for a memory management unit (MMU) | |
RU2438165C2 (ru) | Устройство и способы для уменьшения вытеснений в многоуровневой иерархии кэша | |
EP3123338B1 (en) | Method, apparatus and system to cache sets of tags of an off-die cache memory | |
KR101456860B1 (ko) | 메모리 디바이스의 전력 소비를 감소시키기 위한 방법 및 시스템 | |
KR102290464B1 (ko) | 시스템 온 칩 및 그것의 주소 변환 방법 | |
EP2732374B1 (en) | Mobile memory cache read optimization | |
US8285926B2 (en) | Cache access filtering for processors without secondary miss detection | |
US20150143045A1 (en) | Cache control apparatus and method | |
TWI526832B (zh) | 用於減少執行硬體表搜尋(hwtw)所需的時間和計算資源量的方法和系統 | |
KR20240033123A (ko) | 캐시 삽입을 위한 기준으로서 데이터의 압축률을 사용하는 것에 의한 스토리지 캐시 성능 향상 | |
US10140219B2 (en) | Multi-port shared cache apparatus | |
EP3278228A1 (en) | Command-driven translation pre-fetch for memory management units | |
JP2010539598A (ja) | n−ウェイキャッシュを用いるシステムおよび方法 | |
CN112612728B (zh) | 缓存管理方法及装置、设备 | |
US8341355B2 (en) | Reducing energy consumption of set associative caches by reducing checked ways of the set association | |
US20200192818A1 (en) | Translation lookaside buffer cache marker scheme for emulating single-cycle page table entry invalidation | |
Chae et al. | CloudSwap: A cloud-assisted swap mechanism for mobile devices | |
CN105183668B (zh) | 缓存刷新方法及装置 | |
US9542318B2 (en) | Temporary cache memory eviction | |
JP6209573B2 (ja) | 情報処理装置および情報処理方法 | |
US20240111425A1 (en) | Tag and data configuration for fine-grained cache memory | |
CN117971731A (zh) | Lru近似算法的硬件实现装置、lru值的更新方法及装置 |
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 |