CN109684237B - 基于多核处理器的数据访问方法和装置 - Google Patents
基于多核处理器的数据访问方法和装置 Download PDFInfo
- Publication number
- CN109684237B CN109684237B CN201811385741.0A CN201811385741A CN109684237B CN 109684237 B CN109684237 B CN 109684237B CN 201811385741 A CN201811385741 A CN 201811385741A CN 109684237 B CN109684237 B CN 109684237B
- Authority
- CN
- China
- Prior art keywords
- data
- cache
- core
- cores
- read
- 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/0893—Caches characterised by their organisation or structure
- G06F12/0897—Caches characterised by their organisation or structure with two or more cache hierarchy levels
-
- 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/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
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
本申请实施例提供了一种基于多核处理器的数据访问方法和装置。本申请实施例基于将两种缓存一致性协议(基于目录的缓存一致性协议以及基于侦听的缓存一致性协议)结合的形式,先采用基于目录的缓存一致性协议维护数据的一致性,若目录中未记录的数据,再采用基于侦听的缓存一致性协议维护数据的一致性,以减少通过总线发送侦听的次数。
Description
技术领域
本申请涉及信息技术领域,并且更具体地,涉及基于多核处理器的数据访问方法和装置。
背景技术
多核处理器是指在一枚处理器中集成两个或多个完整的计算引擎(又称“核”或“内核”),每个内核都有各自的二级缓存器来存储数据或者指令,每个内核的二级缓存器都属于该内核的私有缓存,即,二级缓存器的缓存空间仅仅提供给某一特定的内核使用。但是,不同的内核使用的数据中可能存在同一份数据,也就是说,不同内核的二级缓存器中可能分别存储有同一份数据的副本,这种数据被称为共享数据。
共享数据的存在引入了缓存一致性问题。目前,主要有两种保证缓存一致性的协议:基于侦听的缓存一致性协议(或称侦听协议)以及基于目录结构的缓存一致性协议(或称目录协议)。侦听协议的实现依赖于一个总线或者类总线形式的网络连接,基于此,某个内核发送的所有访存请求会被广播到多核处理器其它内核,其它内核可以基于接收到的访存请求修改私有缓存中的数据,以实现缓存一致性。但是,由于所有访存请求都是通过总线来进行传输的,而总线带宽资源有限,因此,上述基于侦听协议实现缓存一致性的方式会影响整个***的扩展性。目录协议则是采用一个目录结构来实现对缓存块的管理的,在目录协议中,此目录结构中记录了当前多核处理器中存储的共享数据的分布情况,某一内核的发出的访存请求,会基于目录结构被发送到拥有访存请求携带的相应数据的目标内核。但由于此协议的实现中,目录中需要记录多核处理器中全部数据的共享情况,以及共享数据的副本对应的内核,导致存储目录占用的存储空间较大。
由上可知,上述两种缓存一致性协议中各自有各自的缺陷,为了兼顾存储目录占用的存储空间的大小与发送访存请求占用的总线带宽资源两方面原因,本申请提供了一种新的缓存一致性的解决方案。
发明内容
本申请提供一种从多核处理器中读数据的方法和装置,有利于兼顾存储目录占用的存储空间的大小与发送访存请求占用的总线带宽资源。
第一方面,提供了一种从多核处理器中读数据的方法,所述多核处理器中包括多个内核以及三级缓存,每个内核的二级缓存器包括第一缓存区以及第二缓存区,所述第一缓存区中存储的数据的修改频率高于所述第二缓存区中存储的数据的修改频率,所述方法包括:所述多个内核中的第一内核向所述第一内核的二级缓存器发送读请求,所述读请求请求读取第一读数据;若所述第一读数据未存储在所述第一内核的二级缓存器以及所述三级缓存器中,所述第一内核通过查询目录从所述多个内核中确定目标内核,并向所述目标内核转发所述读请求,所述目录记录所述目标内核的缓存(例如,第一缓存区)中记录有所述第一读数据;若所述目录中未记录所述第一读数据,所述第一内核向所述多个内核中的其他内核发送所述读请求。
在本申请实施例中,通过将两种协议结合的形式,先采用基于目录的缓存一致性协议维护数据的一致性,若目录中未记录的数据,再采用基于侦听的缓存一致性协议维护数据的一致性,以减少通过总线发送侦听的次数。
可选地,所述目录用于记录所述多个内核中每个内核的所述第一缓存区中存储的数据,具体地,目录用于记录所述多个内核中每个内核的所述第一缓存区中存储的数据的索引。
需要说明的是,上述目录还可以存储多个内核的第二缓存区中的部分数据,并不限于是每个内核的所述第一缓存区中存储的数据。
在本申请实施例中,基于第二缓存区中存储的数据被修改的频率少于第一存储区域中存储的数据被修改的频率这一特性,对于存储在第一缓存区中的数据采用基于目录的缓存一致性协议维护数据的一致性,对于目录中未记录的数据,再采用基于侦听的缓存一致性协议维护数据的一致性。将两种协议结合的形式,相对于仅使用基于侦听的缓存一致性协议而言,减少了通过总线发送侦听的次数。相对于仅使用基于目录的缓存一致性协议而言,减少了存储目录占用的存储空间。
在一种可能的实现方式中,若所述目录中未记录所述第一读数据,所述第一内核向所述多个内核中的其他内核发送所述读请求,包括:所述第一内核向所述其他内核发送所述读请求,以从所述其他内核的所述第二缓存区中读取所述第一读数据,并将所述第一读数据加载到所述第一内核的所述第二缓存区。
在本申请实施例中,基于第二缓存区中存储的数据通常为不经常需要修改的数据,因此,将从其他内核的第二缓存区中读取的第一读数据,存储至第一内核的第二缓存区中,以节省第一缓存区的存储空间同时有利于减少在第二缓存区中执行的写操作,有利于延长第二缓存区的使用寿命。
在一种可能的实现方式中,所述第一缓存区位于静态随机存储器SRAM,所述第二缓存区位于非易失存储器NVM,其中NVM包括但不限于自旋转移力矩随机存储器
STT-RAM或磁性随机存储器MRAM。
在一种可能的实现方式中,若所述目录中未记录所述第一读数据,所述第一内核向所述多个内核中的其他内核发送所述读请求,包括:所述第一内核向所述其他内核发送所述读请求,以从所述其他内核的所述第一缓存区中读取所述第一读数据,并将所述第一读数据加载到所述第一内核的所述第一缓存区。
在本申请实施例中,基于第一缓存区中存储的数据通常为经常需要修改的数据,因此,将从其他内核的第一缓存区中读取的第一读数据,存储至第一内核的第一缓存区中,以减少在第二缓存区中执行的写操作,有利于延长第二缓存区的使用寿命。
在一种可能的实现方式中,所述第一缓存区用于存储脏数据,所述第二缓存区用于存储只读数据。
第二方面,提供一种向多核处理器中写数据的方法,所述多核处理器中包括多个内核以及三级缓存,每个内核的二级缓存器包括第一缓存区以及第二缓存区,所述第一缓存区中存储的数据的修改频率高于所述第二缓存区中存储的数据的修改频率,所述方法包括:所述多个内核中的第一内核向所述第一内核的二级缓存器发送写请求,所述写请求请求写目标写数据;若所述目标数据未存储在所述第一内核的二级缓存器以及所述三级缓存器中,所述第一内核通过查询目录从所述多个内核中确定目标内核,并向所述目标内核发送无效信号,其中,所述目录记录所述目标内核的二级缓存器中存储有所述目标数据,所述无效信号用于指示将所述目标数据标记为无效数据;若所述目录中未记录所述目标数据,所述第一内核向所述多个内核中的其他内核发送所述无效信号。
上述目标数据为写入目标写数据过程中需要标记为无效状态的数据,可以理解为目标数据是要被目标写数据修改的数据,或者目标数据是要被目标写数据替换的数据。
在本申请实施例中,通过将两种协议结合的形式,先采用基于目录的缓存一致性协议维护数据的一致性,若目录中未记录的数据,再采用基于侦听的缓存一致性协议维护数据的一致性,以减少通过总线发送侦听的次数。
可选地,所述目录用于记录所述多个内核中每个内核的所述第一缓存区中存储的数据,具体地,目录用于记录所述多个内核中每个内核的所述第一缓存区中存储的数据的索引。
需要说明的是,上述目录还可以存储多个内核的第二缓存区中的部分数据,并不限于是每个内核的所述第一缓存区中存储的数据。
在本申请实施例中,基于第二缓存区中存储的数据被修改的频率少于第一存储区域中存储的数据被修改的频率这一特性,对于存储在第一缓存区中的数据采用基于目录的缓存一致性协议维护数据的一致性,对于目录中未记录的数据,再采用基于侦听的缓存一致性协议维护数据的一致性。将两种协议结合的形式,相对于仅使用基于侦听的缓存一致性协议而言,减少了通过总线发送侦听的次数。相对于仅使用基于目录的缓存一致性协议而言,减少了存储目录占用的存储空间。
在一种可能的实现方式中,所述第一缓存区位于静态随机存储器SRAM,所述第二缓存区位于非易失存储器NVM,其中NVM包括但不限于自旋转移力矩随机存储器STT-RAM或磁性随机存储器MRAM。
在一种可能的实现方式中,所述第一缓存区用于存储脏数据,所述第二缓存区用于存储只读数据。
第三方面,提供一种从多核处理器中读数据的装置,其特征在于,所述多核处理器中包括多个内核以及三级缓存,每个内核的二级缓存器包括第一缓存区以及第二缓存区,所述第一缓存区中存储的数据的修改频率高于所述第二缓存区中存储的数据的修改频率,所述装置设置与所述多个核中的第一内核,所述装置包括用于执行第一方面中任一种可能实现方式中的各个模块。
第四方面,一种向多核处理器中写数据的装置,其特征在于,所述多核处理器中包括多个内核以及三级缓存,每个内核的二级缓存器包括第一缓存区以及第二缓存区,所述第一缓存区中存储的数据的修改频率高于所述第二缓存区中存储的数据的修改频率,所述装置设置于所述多个内核中的第一内核,所述装置包括用于执行第二方面中任一种可能实现方式中的各个模块。
第五方面,一种多核处理器,其特征在于,所述多核处理器中包括多个内核、三级缓存以及存储器,每个内核的二级缓存器包括第一缓存区以及第二缓存区,所述第一缓存区中存储的数据的修改频率高于所述第二缓存区中存储的数据的修改频率,所述存储器用于存储计算机程序,所述多个内核中的第一内核用于从存储器中调用并运行该计算机程序,执行上述各方面中的方法。
第六方面,提供了一种计算机程序产品,所述计算机程序产品包括:计算机程序代码,当所述计算机程序代码在计算机上运行时,使得计算机执行上述各方面中的方法。
需要说明的是,上述计算机程序代码可以全部或者部分存储在第一存储介质上,其中第一存储介质可以与多核处理器封装在一起的,也可以与多核处理器单独封装,本申请实施例对此不作具体限定。
第七方面,提供了一种计算机可读介质,所述计算机可读介质存储有程序代码,当所述计算机程序代码在计算机上运行时,使得计算机执行上述各方面中的方法。
第八方面,提供了一种芯片***,该芯片***包括多核处理器,用于实现上述方面中所涉及的功能,例如,生成,接收,发送,或处理上述方法中所涉及的数据和/或信息。在一种可能的设计中,所述芯片***还包括存储器,所述存储器,用于保存多核处理器必要的程序指令和数据。该芯片***,可以由芯片构成,也可以包括芯片和其他分立器件。
附图说明
图1是本申请实施例的多核处理器的架构的示意图。
图2示出了一种二级缓存器的架构。
图3是本申请实施例的基于多核处理器的数据读写的方法的流程图。
图4是本申请实施例的从多核处理器中读数据的方法的示意性流程图。
图5是本申请实施例的向多核处理器中写数据的方法的示意性流程图。
图6是本申请实施例的一种从多核处理器中读数据的装置的示意图。
图7是本申请实施例的一种向多核处理器中写数据的装置的示意图。
具体实施方式
下面将结合附图,对本申请中的技术方案进行描述。
为了便于理解,先结合图1介绍本申请实施例的多核处理器的架构。图1所示的多核处理器100中包括多个内核110,多个二级缓存器120,多个混合缓存管理模块130,多个一致性管理模块140、三级缓存器150以及内存160。
内核110,用于执行指令。
二级缓存器120(L2cache),用于为二级缓存器对应的内核提供缓存空间。每个二级缓存器对于内核而言属于私有缓存,也就是说,二级缓存器提供的存储资源仅仅可以被该二级缓存器对应的内核使用。
图2示出了一种二级缓存器的架构。图2所示的二级缓存器120可以包含多个缓存集(set)210,每个缓存集中包括多个缓存行(cache line)。上述缓存集可以理解为缓存地址到内存地址之间地址映射的单位,缓存行可以理解为缓存与内存之间进行数据交换的最小单位。为了满足市场对二级缓存器多方面的需求,可以使用由多种不同存储介质的存储器构成的二级缓存器,因此,二级缓存器又被称为混合二级缓存器。
例如,由非易失性存储介质(non-volatile memory,NVM)以及静态随机存取存储器(Static Random-Access Memory,SRAM)组成的二级缓存器就是其中一种典型的混合的二级缓存器。在由非易失性存储介质(non-volatile memory,NVM)以及静态随机存取存储器(Static Random-Access Memory,SRAM)组成的二级缓存器中,每个缓存集中都包含SRAM的缓存行220以及基于NVM的缓存行230。
混合缓存管理模块130,用于对二级缓存器中的存储空间进行管理。基于不同的存储介质的存储特性,存储具有不同修改频率的数据。
在NVM与SRAM构成的二级缓存器中,NVM包括可变电阻式内存(Resistive Random-Access Memory,ReRAM)、自旋转移力矩磁性存储器(Spin-Transfer Torque RAM,STT-RAM)、相变存储器(Phase-Change Memory,PCM)以及Intel的3D Xpoint,与传统的DRAM/SRAM相比具有更高的存储密度、更低的静态能耗以及非易失性。然而,由于NVM的固有特性其同样存在写延迟高、写寿命有限、写操作能耗高的缺点。SRAM具有功耗大,密度低、成本高的缺点,但是,SRAM的写寿命远远长于NVM的写寿命。
基于上述NVM的读/写能耗不均衡,以及写寿命有限的特性,可以减少在NVM上执行写操作的次数,相应地,增加在SRAM上执行写操作的次数。具体的实现方法在下文中结合图2详细描述。
一致性管理模块140,用于维护多个二级缓存器中存储的共享数据的一致性。例如,可以基于侦听协议、目录协议或者本申请提供的维护一致性的方法,维护多个二级缓存器中存储的数据的一致性。
下文基于图1所示的多核处理器的架构,结合图3介绍基于多核处理器的数据读写的方法。图3是本申请实施例的基于多核处理器的数据读写的方法的流程图。图3所示的方法可以由多核处理器中的任意一个内核执行,或者由内核中的混合缓存管理模块执行。图3所示的方法包括步骤301至步骤3。其中,步骤301至步骤303介绍写数据的方法流程,步骤321至步骤327介绍读数据的方法流程。
301,第一内核向第一内核的二级缓存发送写请求,写请求用于请求向第一内核的二级缓存器中写目标写数据。若上述写请求中的目标写数据为首次向第一内核的二级缓存器中写,则执行步骤302;若上述写请求为请求将第一内核中的目标数据修改为目标写数据,则执行步骤303。
需要说明的是,若上述目标写数据要写的缓存行的状态为独占(Exclusive,E)态,不需要发送侦听,若上述目标写数据要写的缓存行的状态是共享(Share,S)态,则可以理解为上述写请求是请求将缓存行中的目标数据修改为目标写请求,则执行步骤303。
上述独占态,可以理解为处于独占态的缓存行中的数据没有副本数据,即仅该数据存储在当前缓存行中,且缓存行中的数据与内存中存储的数据一致。上述共享态,可以理解为,处于独占态的缓存行中存储的数据,同时也在多个内核中的其他内核对应的二级缓存器,和/或三级缓存器中存储有该数据的副本数据,且缓存行中的数据与内存中存储的数据一致。
302,第一内核向将上述目标写数据存储至基于SRAM的缓存行中。
由于程序的“局部性原理”,可以认为新写入的数据被修改的概率较大,因此可以将数据存储至SRAM的缓存行,以减少对NVM的缓存行的修改的可能性。
303,第一内核将目标写数据存储至基于SRAM的缓存行中,并将目标数据的缓存地址到目标数据的内存地址之间的映射关系,修改为在目标写数据在基于SRAM的缓存行中的缓存地址到目标数据的内存地址之间的映射关系,以实现“将目标数据修改为目标写数据”。
需要说明的是,若多核处理器采用的是基于目录的一致性缓存协议,则可以通过查询目录确定存储有目标数据的副本的其他的二级缓存器对应的内核,这样,第一内核可以以“点对点”的方式直接向存储有目标数据的副本的其他的二级缓存器对应的内核发送无效信号,以将存储有目标数据的副本的缓存行标记为无效状态。
若多核处理器采用的是基于侦听的一致性缓存协议,那么第一内核由于无法获知目标数据的副本的存储情况,需要通过总线以广播的方式向其他内核都发送无效信号,其他内核通过监听通过总线发送的无效信号,获知需要标记为无效状态的数据为目标数据,并在存储有目标数据的情况下将存储有目标数据的缓存行标记为无效状态。
321,第一内核向第一内核的二级缓存发送读请求,读请求用于请求读取第一读数据。若第一内核的二级缓存命中,则执行步骤322;若第一内核的二级缓存未命中,则执行步骤323。
具体地,上述第一内核的二级缓存命中可以理解为,第一读数据存储在第一内核的二级缓存中。
322,第一内核的二级缓存将第一读数据发送至第一内核。
323,第一内核从三级缓存中读取第一读数据。若三级缓存器命中,则执行步骤324;若三级缓存器未命中,则执行步骤325。
上述三级缓存为多核处理器中的共享缓存,多核处理器中的每个内核都可以访问三级缓存。
324,三级缓存器将第一读数据发送给第一内核,并将第一读数据存储在第一内核的NVM缓存行中。
325,第一内核查看多核处理器的其他内核的二级缓存中是否存储有第一读数据,若存储有第一读数据,则执行步骤326;若未存储有第一读数据,执行步骤327。
326,从其他内核的二级缓存中读取第一读数据,并将第一读数据存储在第一内核的二级缓存中。
基于数据的写入流程,NVM中存储的数据通常为只读数据,SRAM中的数据通常为脏数据,即被修改的数据,因此,为了进一步减少对NVM的缓存行执行的写操作,增加NVM的使用寿命,若第一读数据在其他内核的二级缓存器中基于SRAM的缓存行中,则可以认为第一读数据属于脏数据,很有可能继续被修改,则可以直接将该数据存储至第一内核的二级缓存器中基于SRAM的缓存行;若第一读数据在其他内核的二级缓存器中基于NVM的缓存行中,则可以认为第一读数据为只读数据,后续被修改的可能性很小,可以直接将该数据存储至第一内核的二级缓存器中基于NVM的缓存行。
327,第一内核从内存中读取第一读数据。
基于上述写数据以及读数据的方法流程,可以发现最终二级缓存器中基于SRAM的缓存行中存储的数据的修改频率高于基于NVM的缓存行中数据的修改频率,或者说,二级缓存器中基于SRAM的缓存行中存储的数据通常为“脏数据”,基于NVM的缓存行中存储的数据通常为“只读数据”。
因此,基于上述不同缓存空间中存储的数据不同特性,本申请提供了一种新的维护缓存一致性的方法,即,基于“只读数据”在读写数据过程中需要通过总线发送访存请求的次数,少于“脏数据”在读写数据过程中需要通过总线发送访存请求这一特性,对存储脏数据的缓存区中的数据采用基于目录的缓存一致性协议,对于存储只读数据的缓存区中的数据采用基于侦听的缓存一致性协议。同时,由于目录中存储的仅仅是脏数据的索引,不再是多核处理器中全部数据的索引,大大减少了存储目录占用的存储空间。这种结合两种协议的方式,相对于现有技术的两种缓存一致性协议而言,兼顾了存储目录占用的存储空间的大小,以及发送访存请求(例如,无效请求或者转发的读请求)占用的总线的资源。下文结合图4和图5分别详细介绍本申请实施例在读数据和写数据的过程中维护缓存一致性方案。
图4是本申请实施例的从多核处理器中读数据的方法的示意性流程图。多核处理器的每个内核的二级缓存器包括第一缓存区以及第二缓存区,所述第一缓存区中存储的数据的修改频率高于所述第二缓存区中存储的数据的修改频率。图4所示的方法可以由图1所示的多核处理器中任意内核执行,具体地,可以由内核中的一致性管理模块执行,本申请实施例对此不作限定。图4所示的方法包括步骤410至步骤430。
410,多个内核中的第一内核向所述第一内核的二级缓存器发送读请求,所述读请求请求读取第一读数据。
420,若所述第一读数据未存储在所述第一内核的二级缓存器以及所述三级缓存器中,所述第一内核通过查询目录从多个内核中确定目标内核,并向所述目标内核转发所述读请求,所述目录记录所述目标内核的缓存中存储有所述第一读数据。
可选地,所述目录用于记录所述多个内核中每个内核的所述第一缓存区中存储的数据,具体地,目录用于记录所述多个内核中每个内核的所述第一缓存区中存储的数据的索引。
需要说明的是,上述目录还可以存储多个内核的第二缓存区中的部分数据,并不限于是每个内核的所述第一缓存区中存储的数据。
上述第一缓存区中存储的数据的修改频率相对于第二缓存区中存储的数据的修改频率较高,例如,可以包括上文中基于SRAM的缓存区。第二缓存区可以是上述存储只读数据的缓存区,例如基于NVM的缓存区。
上述目录用于记录所述多个内核中每个内核的第二缓存区中存储的数据的索引,可以理解为,目录中记录有多核处理器中全部数据,以及数据的副本在二级缓存器的第二缓存区中的分布情况,与上述基于目录的缓存一致性协议中的目录的作用相同。
上述第一内核通过查询目录确定目标内核,并向所述目标内核转发所述读请求,可以理解为若目录中记录有第一读数据的索引,则可以根据第一读数据的索引确定存储有第一读数据目标内核,向目标内核转发所述读请求,以从目标内核的二级缓存器中第一缓存区(即,基于SRAM缓存区)中读取第一读数据。
430,若所述目录中未记录所述第一读数据,所述第一内核向所述多个内核中的其他内核发送所述读请求。
上述第一内核可以采用基于侦听的缓存一致性协议,通过总线向其他内核发送读请求。相应地,其他内核通过监听总监上发送的读请求,以确定读请求请求读的数据,若存储有上述第一读数据,则可以向第一内核发送第一读数据。
上述通过向其他发送读请求的方式读回的第一读数据可以是存储在其他内核的二级缓存器中基于NVM的缓存区中的数据,还可以是存储在其他内核的二级缓存器中基于SRAM的缓存区中的数据,且该数据的索引没有记录在目录中。
需要说明的是,本申请提供的缓存一致性方案可以与图3所示的数据存储策略结合使用,也可以适用于任意一种按照数据的修改频率分区存储的缓存器中。
图5是本申请实施例的向多核处理器中写数据的方法的示意性流程图。多核处理器的每个内核的二级缓存器包括第一缓存区以及第二缓存区,所述第一缓存区中存储的数据的修改频率高于所述第二缓存区中存储的数据的修改频率。应理解,图5所示方法可以由图1所示的多核处理器中任意内核执行,具体地,可以由内核中的一致性管理模块执行,本申请实施例对此不作限定。每个内核的二级缓存器包括第一缓存区以及第二缓存区,所述第一缓存区中存储的数据的修改频率高于所述第二缓存区中存储的数据的修改频率,图5所述方法包括步骤510至步骤530。
510,所述多个内核中的第一内核向所述第一内核的二级缓存器发送写请求,所述写请求请求写目标写数据。
520,若目标数据未存储在所述第一内核的二级缓存器以及所述三级缓存器中,所述第一内核通过查询目录从多个内核中确定目标内核,并向所述目标内核发送无效信号,所述目录记录所述目标内核的二级缓存器中存储有目标数据,所述无效信号用于指示将所述目标数据标记为无效数据。
上述目标数据为写入目标写数据过程中需要标记为无效状态的数据,可以理解为目标数据是要被目标写数据修改的数据,或者目标数据是要被目标写数据替换的数据。
上述第一缓存区中存储的数据的修改频率相对于第二缓存区中存储的数据的修改频率较高,第一缓存区为可以是上述存储脏数据的缓存区,例如,基于SRAM的缓存区。第二缓存区可以是上述存储只读数据的缓存区,例如基于NVM的缓存区。
可选地,所述目录用于记录所述多个内核中每个内核的所述第一缓存区中存储的数据,具体地,目录用于记录所述多个内核中每个内核的所述第一缓存区中存储的数据的索引。
需要说明的是,上述目录还可以存储多个内核的第二缓存区中的部分数据,并不限于是每个内核的所述第一缓存区中存储的数据。
上述目录用于记录所述多个内核中每个内核的第一缓存区中存储的数据的索引,可以理解为,目录中记录有多核处理器中全部数据,以及数据的副本在二级缓存器的第一缓存区中的分布情况,与上述基于目录的缓存一致性协议中的目录的作用相同。
上述第一内核通过查询目录确定目标内核,并向所述目标内核转发所述读请求,可以理解为若目录中记录有目标数据的索引,则可以根据目标数据的索引确定存储有目标数据目标内核,向目标内核发送无效信号,以将目标数据标记为无效状态。
530,若所述目录中未记录所述目标数据,所述第一内核向所述多个内核中的其他内核发送所述无效信号。
上述第一内核可以采用基于侦听的缓存一致性协议,通过总线向其他内核发送读请求。相应地,其他内核通过监听通过总线发送的读请求,以确定读请求请求读的数据,若存储有上述第一读数据,则可以向第一内核发送第一读数据。
上述通过向其他发送无效信号的方式被标记为无效状态的目标数据可以是存储在其他内核的二级缓存器中基于NVM的缓存区中的数据,还可以是存储在其他内核的二级缓存器中基于SRAM的缓存区中的数据,且该数据的索引没有记录在目录中。
需要说明的是,本申请提供的缓存一致性方案可以与图3所示的数据存储策略结合使用,也可以适用于任意一种按照数据的修改频率分区存储的缓存器中。
上文结合图1至图5详细的介绍了本申请实施例提供的方法,下文结合图6和图7介绍本申请实施例的装置。应理解,图6和图7所示的装置可以实现上述方法中各个步骤,为了简洁,在此不再赘述。
图6是本申请实施例的一种从多核处理器中读数据的装置的示意图。所述多核处理器中包括多个内核以及三级缓存,每个内核的二级缓存器包括第一缓存区以及第二缓存区,所述第一缓存区中存储的数据的修改频率高于所述第二缓存区中存储的数据的修改频率,所述装置600设置于所述多个核中的第一内核,所述装置包括
所述装置包括:
发送模块610,用于向所述第一内核的二级缓存器发送读请求,所述读请求请求读取第一读数据;
处理模块620,用于若所述第一读数据未存储在所述第一内核的二级缓存器以及所述三级缓存器中,通过查询目录从所述多个内核中确定目标内核,并向所述目标内核转发所述读请求,所述目录记录所述目标内核的缓存中存储有所述第一读数据;
所述处理模块620,还用于若所述目录中未记录所述第一读数据,向所述多个内核中的其他内核发送所述读请求。
可选地,所述目录用于记录所述多个内核中每个内核的所述第一缓存区中存储的数据,具体地,目录用于记录所述多个内核中每个内核的所述第一缓存区中存储的数据的索引。
可选地,作为一个实施例,所述处理模块,具体还用于:向所述其他内核发送所述读请求,以从所述其他内核的缓存区中读取所述第一读数据,并将所述第一读数据加载到所述第一内核的所述第二缓存区。
可选地,作为一个实施例,所述第一缓存区位于静态随机存储器SRAM,所述第二缓存区位于非易失存储器NVM、自旋转移力矩随机存储器STT-RAM以及磁性随机存储器MRAM中的任一种存储器中。
可选地,作为一个实施例,所述第一缓存区用于存储脏数据,所述第二缓存区用于存储只读数据。
图7是本申请实施例的一种向多核处理器中写数据的装置的示意图。所述多核处理器中包括多个内核以及三级缓存,每个内核的二级缓存器包括第一缓存区以及第二缓存区,所述第一缓存区中存储的数据的修改频率高于所述第二缓存区中存储的数据的修改频率,所述装置设置于所述多个内核中的第一内核,所述装置包括:发送模块710以及处理模块720.
发送模块710,用于向所述第一内核的二级缓存器发送写请求,所述写请求请求写目标写数据。
处理模块720,用于若目标数据未存储在所述第一内核的二级缓存器以及所述三级缓存器中,通过查询目录从多个内核中确定目标内核,并向所述目标内核发送无效信号,其中,所述目录记录所述目标内核的二级缓存器(例如,第一缓存区)中存储有所述目标数据,所述无效信号用于指示将所述目标数据标记为无效数据。
所述处理模块720,还用于若所述目录中未记录所述目标数据,向所述多个内核中的其他内核发送所述无效信号。
可选地,所述目录用于记录所述多个内核中每个内核的所述第一缓存区中存储的数据,具体地,目录用于记录所述多个内核中每个内核的所述第一缓存区中存储的数据的索引。
可选地,作为一个实施例,所述第一缓存区位于静态随机存储器SRAM,所述第二缓存区位于非易失存储器NVM、第二缓存区位于非易失存储器NVM、自旋转移力矩随机存储器STT-RAM以及磁性随机存储器MRAM中的任一种存储器中。
可选地,作为一个实施例,所述第一缓存区用于存储脏数据,所述第二缓存区用于存储只读数据。
在可选的实施例中,上述发送模块可以为图1所示的多核处理器中第一内核的输入输出接口,上述处理模块可以为第一内核。第一内核位于的多核处理器的架构可以参见图1,为了简洁,在此不再赘述。
应理解,本申请实施例中,该处理器可以为中央处理单元(central processingunit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(digital signalprocessor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现成可编程门阵列(field programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
应理解,在本申请实施例中,“与A相应的B”表示B与A相关联,根据A可以确定B。但还应理解,根据A确定B并不意味着仅仅根据A确定B,还可以根据A和/或其它信息确定B。
应理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
在本申请所提供的几个实施例中,应该理解到,所揭露的***、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够读取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,数字通用光盘(digital video disc,DVD))或者半导体介质(例如,固态硬盘(solid state disk,SSD))等。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (19)
1.一种从多核处理器中读数据的方法,其特征在于,所述多核处理器中包括多个内核以及三级缓存,每个内核的二级缓存器包括第一缓存区以及第二缓存区,所述第一缓存区中存储的数据的修改频率高于所述第二缓存区中存储的数据的修改频率,
所述方法包括:
所述多个内核中的第一内核向所述第一内核的二级缓存器发送读请求,所述读请求请求读取第一读数据;
若所述第一读数据未存储在所述第一内核的所述二级缓存器以及所述三级缓存器中,所述第一内核通过查询目录从所述多个内核中确定目标内核,并向所述目标内核转发所述读请求,所述目录记录所述目标内核的所述第一缓存区中存储有所述第一读数据;
若所述目录中未记录有所述第一读数据,所述第一内核向所述多个内核中的其他内核发送所述读请求。
2.如权利要求1所述的方法,其特征在于,所述目录用于记录所述多个内核中每个内核的所述第一缓存区中存储的数据的索引。
3.如权利要求1或2所述的方法,其特征在于,若所述目录中未记录所述第一读数据,所述第一内核向所述多个内核中的其他内核发送所述读请求,包括:
所述第一内核向所述其他内核发送所述读请求,以从所述其他内核的所述第二缓存区中读取所述第一读数据,并将所述第一读数据加载到所述第一内核的所述第二缓存区。
4.如权利要求1或2所述的方法,其特征在于,所述第一缓存区位于静态随机存储器SRAM,所述第二缓存区位于非易失存储器NVM,其中,所述NVM包括自旋转移力矩随机存储器STT-RAM或磁性随机存储器MRAM。
5.如权利要求1或2所述的方法,其特征在于,所述第一缓存区用于存储脏数据,所述第二缓存区用于存储只读数据。
6.一种向多核处理器中写数据的方法,其特征在于,所述多核处理器中包括多个内核以及三级缓存,每个内核的二级缓存器包括第一缓存区以及第二缓存区,所述第一缓存区中存储的数据的修改频率高于所述第二缓存区中存储的数据的修改频率,
所述方法包括:
所述多个内核中的第一内核向所述第一内核的二级缓存器发送写请求,所述写请求请求写目标写数据;
若目标数据未存储在所述第一内核的所述二级缓存器以及所述三级缓存器中,所述第一内核通过查询目录确定目标内核,并向所述目标内核发送无效信号,所述无效信号用于将所述目标内核中的目标数据标记为无效数据,其中,所述目录用于记录所述目标内核的第一级缓存区中存储有所述目标数据;
若所述目录中未记录所述目标数据,所述第一内核向所述多个内核中的其他内核发送所述无效信号。
7.如权利要求6所述的方法,其特征在于,所述目录用于记录所述多个内核中每个内核的所述第一缓存区中存储的数据的索引。
8.如权利要求6或7所述的方法,其特征在于,所述第一缓存区位于静态随机存储器SRAM,所述第二缓存区位于非易失存储器NVM,其中,所述NVM包括自旋转移力矩随机存储器STT-RAM或磁性随机存储器MRAM。
9.如权利要求6或7所述的方法,其特征在于,所述第一缓存区用于存储脏数据,所述第二缓存区用于存储只读数据。
10.一种从多核处理器中读数据的装置,其特征在于,所述多核处理器中包括多个内核以及三级缓存,每个内核的二级缓存器包括第一缓存区以及第二缓存区,所述第一缓存区中存储的数据的修改频率高于所述第二缓存区中存储的数据的修改频率,所述装置设置与所述多个核中的第一内核,
所述装置包括:
发送模块,用于向所述第一内核的所述二级缓存器发送读请求,所述读请求请求读取第一读数据;
若所述第一读数据未存储在所述第一内核的二级缓存器以及所述三级缓存器中,处理模块,用于通过查询目录从所述多个内核中确定目标内核,并向所述目标内核转发所述读请求,所述目录用于记录所述目标内核的所述第一缓存区中存储有所述第一读数据;
若所述目录中未记录所述第一读数据,所述处理模块,还用于向所述多个内核中的其他内核发送所述读请求。
11.如权利要求10所述的装置,其特征在于,所述目录用于记录所述多个内核中每个内核的所述第一缓存区中存储的数据的索引。
12.如权利要求10或11所述的装置,其特征在于,所述处理模块,具体还用于:
向所述其他内核发送所述读请求,以从所述其他内核的缓存区中读取所述第一读数据,并将所述第一读数据加载到所述第一内核的所述第二缓存区。
13.如权利要求10或11所述的装置,其特征在于,所述第一缓存区位于静态随机存储器SRAM,所述第二缓存区位于非易失存储器NVM,其中,所述NVM包括自旋转移力矩随机存储器STT-RAM或磁性随机存储器MRAM。
14.如权利要求10或11所述的装置,其特征在于,所述第一缓存区用于存储脏数据,所述第二缓存区用于存储只读数据。
15.一种向多核处理器中写数据的装置,其特征在于,所述多核处理器中包括多个内核以及三级缓存,每个内核的二级缓存器包括第一缓存区以及第二缓存区,所述第一缓存区中存储的数据的修改频率高于所述第二缓存区中存储的数据的修改频率,所述装置设置于所述多个内核中的第一内核,
所述装置包括:
发送模块,用于向所述第一内核的二级缓存器发送写请求,所述写请求请求写目标写数据;
若目标数据未存储在所述第一内核的二级缓存器以及所述三级缓存器中,处理模块,用于通过查询目录从多个内核中确定目标内核,并向所述目标内核发送无效信号,其中,所述目录记录所述目标内核的所述第一缓存区中存储有所述目标数据,所述无效信号用于指示将所述目标数据标记为无效数据;
若所述目录中未记录所述目标数据,所述处理模块,还用于向所述多个内核中的其他内核发送所述无效信号。
16.如权利要求15所述的装置,其特征在于,所述目录用于记录所述多个内核中每个内核的所述第一缓存区中存储的数据的索引。
17.如权利要求15或16所述的装置,其特征在于,所述第一缓存区位于静态随机存储器SRAM,所述第二缓存区位于非易失存储器NVM,其中,所述NVM包括自旋转移力矩随机存储器STT-RAM或磁性随机存储器MRAM。
18.如权利要求15或16所述的装置,其特征在于,所述第一缓存区用于存储脏数据,所述第二缓存区用于存储只读数据。
19.一种多核处理器,其特征在于,所述多核处理器中包括多个内核、三级缓存,每个内核的二级缓存器包括第一缓存区以及第二缓存区,所述第一缓存区中存储的数据的修改频率高于所述第二缓存区中存储的数据的修改频率,所述多个内核中的第一内核用于从存储有计算机程序的存储器中调用并运行所述计算机程序,执行如权利要求1-9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811385741.0A CN109684237B (zh) | 2018-11-20 | 2018-11-20 | 基于多核处理器的数据访问方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811385741.0A CN109684237B (zh) | 2018-11-20 | 2018-11-20 | 基于多核处理器的数据访问方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109684237A CN109684237A (zh) | 2019-04-26 |
CN109684237B true CN109684237B (zh) | 2021-06-01 |
Family
ID=66184828
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811385741.0A Active CN109684237B (zh) | 2018-11-20 | 2018-11-20 | 基于多核处理器的数据访问方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109684237B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11669454B2 (en) | 2019-05-07 | 2023-06-06 | Intel Corporation | Hybrid directory and snoopy-based coherency to reduce directory update overhead in two-level memory |
WO2021155491A1 (en) * | 2020-02-04 | 2021-08-12 | Qualcomm Incorporated | Data transfer with media transfer protocol (mtp) over universal serial bus (usb) |
CN112885867B (zh) * | 2021-01-29 | 2021-11-09 | 长江先进存储产业创新中心有限责任公司 | 中央处理器的制造方法、中央处理器及其控制方法 |
CN113703958B (zh) * | 2021-07-15 | 2024-03-29 | 山东云海国创云计算装备产业创新中心有限公司 | 多架构处理器间的数据访问方法、装置、设备及存储介质 |
CN114116590B (zh) * | 2021-11-03 | 2023-10-31 | 中汽创智科技有限公司 | 数据获取方法、装置、车辆、存储介质和电子设备 |
CN116700629B (zh) * | 2023-08-01 | 2023-09-26 | 北京中电华大电子设计有限责任公司 | 数据处理方法和装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101958834A (zh) * | 2010-09-27 | 2011-01-26 | 清华大学 | 支持高速缓存一致的片上网络***及数据请求方法 |
CN102473140A (zh) * | 2009-07-17 | 2012-05-23 | 株式会社东芝 | 存储器管理装置 |
CN104252423A (zh) * | 2013-06-26 | 2014-12-31 | 华为技术有限公司 | 基于多内核处理器的一致性处理方法和装置 |
CN104508637A (zh) * | 2012-07-30 | 2015-04-08 | 华为技术有限公司 | 用于对等缓存转发的方法 |
CN105740164A (zh) * | 2014-12-10 | 2016-07-06 | 阿里巴巴集团控股有限公司 | 支持缓存一致性的多核处理器、读写方法、装置及设备 |
CN106775476A (zh) * | 2016-12-19 | 2017-05-31 | 中国人民解放军理工大学 | 混合内存***及其管理方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103729166B (zh) * | 2012-10-10 | 2017-04-12 | 华为技术有限公司 | 程序的线程关系确定方法、设备及*** |
CN109240945B (zh) * | 2014-03-26 | 2023-06-06 | 阿里巴巴集团控股有限公司 | 一种数据处理方法及处理器 |
CN105095116B (zh) * | 2014-05-19 | 2017-12-12 | 华为技术有限公司 | 缓存替换的方法、缓存控制器和处理器 |
SG11201706340TA (en) * | 2015-02-16 | 2017-09-28 | Huawei Tech Co Ltd | Method for accessing data visitor directory in multi-core system and device |
CN105045729B (zh) * | 2015-09-08 | 2018-11-23 | 浪潮(北京)电子信息产业有限公司 | 一种远端代理带目录的缓存一致性处理方法与*** |
-
2018
- 2018-11-20 CN CN201811385741.0A patent/CN109684237B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102473140A (zh) * | 2009-07-17 | 2012-05-23 | 株式会社东芝 | 存储器管理装置 |
CN101958834A (zh) * | 2010-09-27 | 2011-01-26 | 清华大学 | 支持高速缓存一致的片上网络***及数据请求方法 |
CN104508637A (zh) * | 2012-07-30 | 2015-04-08 | 华为技术有限公司 | 用于对等缓存转发的方法 |
CN104252423A (zh) * | 2013-06-26 | 2014-12-31 | 华为技术有限公司 | 基于多内核处理器的一致性处理方法和装置 |
CN105740164A (zh) * | 2014-12-10 | 2016-07-06 | 阿里巴巴集团控股有限公司 | 支持缓存一致性的多核处理器、读写方法、装置及设备 |
CN106775476A (zh) * | 2016-12-19 | 2017-05-31 | 中国人民解放军理工大学 | 混合内存***及其管理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109684237A (zh) | 2019-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109684237B (zh) | 基于多核处理器的数据访问方法和装置 | |
US8015365B2 (en) | Reducing back invalidation transactions from a snoop filter | |
US10402327B2 (en) | Network-aware cache coherence protocol enhancement | |
US7827357B2 (en) | Providing an inclusive shared cache among multiple core-cache clusters | |
US8949544B2 (en) | Bypassing a cache when handling memory requests | |
TWI391821B (zh) | 在互連結構上發佈請求而無參照基於標籤快取狀態的低階快取之處理單元及資料處理系統與方法 | |
US7774551B2 (en) | Hierarchical cache coherence directory structure | |
US7669010B2 (en) | Prefetch miss indicator for cache coherence directory misses on external caches | |
US7281092B2 (en) | System and method of managing cache hierarchies with adaptive mechanisms | |
TWI291651B (en) | Apparatus and methods for managing and filtering processor core caches by using core indicating bit and processing system therefor | |
US20120102273A1 (en) | Memory agent to access memory blade as part of the cache coherency domain | |
US20130073811A1 (en) | Region privatization in directory-based cache coherence | |
US20090006668A1 (en) | Performing direct data transactions with a cache memory | |
US9164910B2 (en) | Managing the storage of data in coherent data stores | |
US20190026225A1 (en) | Multiple chip multiprocessor cache coherence operation method and multiple chip multiprocessor | |
US7380068B2 (en) | System and method for contention-based cache performance optimization | |
CN107341114B (zh) | 一种目录管理的方法、节点控制器和*** | |
CN112256604B (zh) | 直接存储器访问***和方法 | |
KR20140098096A (ko) | 캐시-코히어런시를 갖춘 집적 회로들 | |
US20170364442A1 (en) | Method for accessing data visitor directory in multi-core system and device | |
CN106339330B (zh) | 高速缓存刷新的方法及*** | |
US20230100746A1 (en) | Multi-level partitioned snoop filter | |
CN103902470B (zh) | 读缺失时的处理方法、设备和*** | |
CN117971718B (zh) | 一种多核处理器的缓存替换方法及其装置 | |
US11954033B1 (en) | Page rinsing scheme to keep a directory page in an exclusive state in a single complex |
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 |