CN107729053B - 一种实现高速缓存表的方法 - Google Patents
一种实现高速缓存表的方法 Download PDFInfo
- Publication number
- CN107729053B CN107729053B CN201710965568.0A CN201710965568A CN107729053B CN 107729053 B CN107729053 B CN 107729053B CN 201710965568 A CN201710965568 A CN 201710965568A CN 107729053 B CN107729053 B CN 107729053B
- Authority
- CN
- China
- Prior art keywords
- cache
- simd register
- simd
- result
- register
- 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
- 238000000034 method Methods 0.000 title claims abstract description 31
- 238000000605 extraction Methods 0.000 claims abstract 2
- 238000006243 chemical reaction Methods 0.000 claims description 2
- 230000008569 process Effects 0.000 description 7
- 238000012217 deletion Methods 0.000 description 6
- 230000037430 deletion Effects 0.000 description 6
- 229910052754 neon Inorganic materials 0.000 description 3
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 3
- 230000008520 organization Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000007429 general method Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000010845 search algorithm Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30138—Extension of register space, e.g. register cache
-
- 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/0877—Cache access modes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
一种实现高速缓存表的方法,提供一种低成本实现高速缓存表的方法。选取支持SIMD指令的通用处理器,包括以下步骤:步骤一:缓存表的存储,使用一个或多个SIMD寄存器用于关键字的匹配,位长根据处理器自带能力选择;使用SIMD寄存器保存结果或者使用内存数组保存结果;步骤二:缓存的查找,使用SIMD的指令来进行一对多的匹配,查出的索引提取结果返回;步骤三:缓存的添加,选取第一个无效的表项号,键值SIMD寄存器对应表项如果为无效值则认为该表项无效,修改键值SIMD寄存器对应表项保存缓存键值,并且修改结果数据中对应表项保存缓存结果。本发明的高速缓存表查找速度较快,命中时会比查直接表命中甚至还会更快,因为不访存。
Description
技术领域
本发明涉及多核通用处理器查表转发技术领域,具体涉及一种实现高速缓存表的方法。
背景技术
一台网络通讯设备,其处理器在处理报文时,会经历多次查表过程,每次查表会从前一查表过程取得,或从报文中取得,或其他途径取得查表关键字,也可以从多种渠道组合得到查表关键字,查表关键字和被查表的每个表项的关键字部分进行匹配,匹配有相等匹配,掩码后相等匹配,以及最长匹配等,最简单的就是相等匹配,相等匹配是如果表项的关键字和查表关键字相等,则认为匹配成功,匹配成功后,该表项中保存的结果被提取出来用于处理报文。这种表其实就是SDN中的流表(FLOW TABLE)。表的添加,删除,查找的速度以及表的容量都是设备性能比较重要的指标。为了提高查表速度等,通常会牺牲内存,使用直接索引表,是申请一大块内存,等于最大关键字的值乘以表项大小,以关键字作为索引去访问每个表项。关键字直接就是索引,一次找到结果,查找速度快,缺点耗内存大。
比直接索引表速度慢一点的耗内存相对较少的是哈希索引表。从关键字计算出一个索引,这个索引不能唯一确定到查表结果,需要遍历冲突链表,逐个匹配查找,查表速度慢,耗内存小。
直接索引表和哈希索引表是两种最重要的表组织方法,还有trie表,二叉树等等其他的表组织方法,特点就是比较复杂,速度慢。
对于任何表的查找速度需要提高,可以为这个原始表配套建立一个高速缓存表,查表算法改进为先根据关键字查高速缓存表,查找如果命中,过程结束。如果查找不到结果,根据关键字查原始表获得结果,如果原始表查找结果是查找命中,结果和关键字根据某种原则过滤后放入高速缓存。
表项需要变动时,导致缓存失效,需要清除缓存相关表项或清除整个表项。
上述是构建高速缓存表的通用方法。
高速缓存表的操作包括查找,添加,指定删除或全删除。
高速缓存表常需要在通用cpu外增加额外硬件例如TCAM来实现,成本较高,但效果比较好。
发明内容
本发明提出的一种实现高速缓存表的方法,提供一种低成本实现高速缓存表的方法。
为实现上述目的,本发明采用了以下技术方案:
一种实现高速缓存表的方法,硬件需要选取支持SIMD指令的通用处理器,包括以下步骤:
1)使用一个或多个SIMD寄存器用于关键字的匹配, 使用一个或多个SIMD寄存器或内存保存缓存条目的结果;
使用SIMD指令操作SIMD寄存器,以及配合使用内存来实现缓存查找,缓存添加,缓存指定删除,缓存全删除。
支持关键字大小包括,1字节,2字节,4字节,8字节等,即通用CPU携带的SIMD寄存器支持的单元大小,如果是128位SIMD寄存器这样对应每个寄存器支持的单元数量为16,8,4,2。
2)高速缓存的查找,将查表关键字放入SIMD寄存器B,通过SIMD指令,将关键字复制到SIMD寄存器B的各个单元。通过SIMD寄存器B去和保存在SIMD寄存器A中的表关键字信息匹配结果放到SIMD寄存器B,SIMD寄存器B某个单元的值如果是1表示匹配,是0表示不匹配,获取SIMD寄存器B 最高位连续为0 的个数(这是可使用方式之一,也可其他方式),经过换算,得到匹配单元的单元号n。再用n去内存或另一个SIMD寄存器D中提取结果。
3)高速缓存添加,使用上述高速缓存查找方法查找SIMD寄存器A中无效单元n,将待添加关键字替换该单元中无效值,结果写入n相应于内存或另一个SIMD寄存器D相应单元。
4)高速缓存指定删除,对于需要删除的单元n,修改SIMD寄存器A中对应单元值为无效值。
5)高速缓存全删除,SIMD寄存器A所有单元设置为无效值。
由上可知,本发明的一种实现高速缓存表的方法,有益效果如下:
本发明的高速缓存表查找速度较快,命中时会比查直接表命中甚至还会更快,因为不访存;各个核的缓存相独立,在流分发时,缓存容量相当于各个核的缓存容量叠加;不命中时代价低,查找的时间就是代价,查找速度快,不命中代价低;添加时速度快,关键字匹配的SIMD寄存器某个表项如果为无效值那么,添加到该表项,查找无效值表项使用SIMD一对多的匹配非常快,存缓存关键字也就非常快,因为不访存,如果SIMD寄存器保存结果,速度非常快,保存到内存会稍慢一点;最好的情况下查表均能命中高速缓存表,性能大幅度提升。
附图说明
图1是本发明的高速缓存的查找示意图;
图2是一个ipv4路由表的高速缓存表;
图3是一个ipv4路由表支持地址+掩码的高速缓存表的实现高速缓存表;
图4是一个ipv4路由表支持地址+vpnid的高速缓存表的实现高速缓存表。
具体实施方式
下面结合附图对本发明做进一步说明:
如图2所示:是一个ipv4路由表的高速缓存表实现,ipv4路由表(后通称为原始表)的关键字是目的IP地址,原始表的查表结果是一个索引值,该表查找方式为目的地址的相等匹配。该表中有10.1.1.1,11.1.1.1,192.8.1.1等多个条目,高速缓存表占用两个NEONSIMD寄存器,一个寄存器A,用于保存关键字,另一个寄存器D保存查表结果,该缓存表已经添加了一条有效的条目11.1.1.1,查表结果是123,其他3个条目为无效。查找时如图1所示,先复制查找关键字目的地址11.1.1.1到SIMD register B各个单元,如图1所示register B中得到复制后结果,接下来匹配操作,用SIMD指令进行匹配B = (B == A),如图1所示register B中得到匹配后结果 ,register B中有效项是第一个条目,然后从D提取结果123到寄存器B中。
如图3所示:是一个ipv4路由表支持地址+掩码的高速缓存表的实现,由于匹配使用了掩码,高速缓存可以支持更多的流,但因为路由表是最长匹配,只有叶子路由才能放入该缓存。原始表的关键字是目的IP地址和掩码,原始表的查表结果是一个索引值,该表查找方式为目的地址和掩码算术与操作后的的相等匹配。该表中有10.1.1.0/24,11.0.0.0/8,192.8.1.1/32等多个条目,高速缓存表占用三个NEON SIMD寄存器,其中寄存器A,用于保存目的地址关键字,寄存器C保存掩码关键字寄存器,寄存器D保存查表结果,该缓存表已经添加了三条有效的条目,有1个条目为无效。查找也是经过复制 ,匹配,取结果的过程,所不同的是,SIMD指令进行匹配算法换为B =((B & C) == A),如果是11.1.1.2的目的地址来查找这张表,匹配后结果会是B{0,1,0,0},然后从寄存器D中提取到单元2的数值:123。如果是192.8.1.1的目的地址来查找这张表,匹配后结果会是B{0,0,1,0},然后从寄存器D中提取到单元3的数值:1026。
如图4所示:是一个ipv4路由表支持地址+vpnid的高速缓存表的实现。原始表的关键字是目的IP地址和vpnid,原始表的查表结果是一个索引值,该表查找方式为目的地址和vpn id 同表项中条目同时相等的匹配。该表中有10.1.1.1(1),10.1.1.1(2)11.1.1.1(1),192.8.1.1(1)4个条目,高速缓存表占用2个NEON SIMD寄存器,其中寄存器A,用于保存目的地址关键字,寄存器D同时保存查表结果和vpnid关键字,(各占16bits),该缓存表已经添加了4条有效的条目。查找时,复制 ,匹配,取结果的过程都有,查表的输入数据这里使用了AC两个寄存器进行,复制过程如图4右下表所示。匹配过程中,SIMD指令进行匹配算法为B=((B==A)&&((D&0xff)==C),如果是10.1.1.2(1)的目的地址来查找这张表,匹配后结果会是B{1,0,0,0},然后从寄存器D中提取到单元2的数值:128、1(各占16bit),右移16bit得到结果128。如果是10.1.1.2(2)的目的地址来查找这张表,匹配后结果会是B{0,1,0,0},然后从寄存器D中提取到单元2的数值:1028、1(各占16bit),右移16bit得到结果1028。
以上所述的实施例仅仅是对本发明的优选实施方式进行描述,并非对本发明的范围进行限定,在不脱离本发明设计精神的前提下,本领域普通技术人员对本发明的技术方案作出的各种变形和改进,均应落入本发明的保护范围内。
Claims (7)
1.一种实现高速缓存表的方法,其特征在于:选取支持SIMD指令的通用处理器,包括以下步骤:
步骤一:缓存表的存储,使用一个或多个SIMD寄存器用于关键字的匹配,位长根据处理器自带能力选择;使用SIMD寄存器保存结果或者使用内存数组保存结果;
步骤二:缓存的查找,使用SIMD的指令来进行一对多的匹配,查出的索引提取结果返回;
步骤三:缓存的添加,选取第一个无效的表项号,关键字匹配的SIMD寄存器对应表项如果为无效值则认为该表项无效,修改关键字匹配的SIMD寄存器对应表项,保存缓存关键字,并且修改结果数据中对应表项保存缓存结果;
所述步骤二具体为将查表关键字放入SIMD寄存器B,通过SIMD指令,将关键字复制到SIMD寄存器B的各个单元,通过SIMD寄存器B去和保存在SIMD寄存器A中的表关键字信息匹配,结果放到SIMD寄存器B,SIMD寄存器B某个单元的值如果是1表示匹配,是0表示不匹配,获取SIMD寄存器B 最高位连续为0 的个数,经过换算,得到匹配单元的单元号n,再用n去内存或另一个SIMD寄存器D中提取结果。
2.如权利要求1所述的一种实现高速缓存表的方法,其特征在于:还包括步骤四:缓存的删除指定项,修改关键字匹配的SIMD寄存器对应表项为无效值,结果数据可不清除。
3.如权利要求2所述的一种实现高速缓存表的方法,其特征在于:还包括步骤五:缓存的清空,修改关键字匹配的SIMD寄存器为全无效。
4.如权利要求3所述的一种实现高速缓存表的方法,其特征在于:所述步骤一支持关键字大小包括,1字节,2字节,4字节,8字节等,即通用CPU携带的SIMD寄存器支持的单元大小,如果是128位SIMD寄存器这样对应每个寄存器支持的单元数量为16,8,4,2。
5.如权利要求4所述的一种实现高速缓存表的方法,其特征在于:所述步骤三中具体还包括步骤二中查找SIMD寄存器A中无效单元n,将待添加关键字替换该单元中无效值,结果写入n相应于内存或另一个SIMD寄存器D相应单元。
6.如权利要求2所述的一种实现高速缓存表的方法,其特征在于:所述步骤四具体为对于需要删除的单元n,修改SIMD寄存器A中对应单元值为无效值。
7.如权利要求3所述的一种实现高速缓存表的方法,其特征在于:所述步骤五具体为SIMD寄存器A所有单元设置为无效值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710965568.0A CN107729053B (zh) | 2017-10-17 | 2017-10-17 | 一种实现高速缓存表的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710965568.0A CN107729053B (zh) | 2017-10-17 | 2017-10-17 | 一种实现高速缓存表的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107729053A CN107729053A (zh) | 2018-02-23 |
CN107729053B true CN107729053B (zh) | 2020-11-27 |
Family
ID=61211852
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710965568.0A Active CN107729053B (zh) | 2017-10-17 | 2017-10-17 | 一种实现高速缓存表的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107729053B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109918225B (zh) * | 2019-02-18 | 2023-05-09 | 麒麟软件有限公司 | 基于飞腾平台的raid6数据恢复优化方法 |
CN110321161B (zh) * | 2019-06-26 | 2021-03-02 | 中国人民解放军国防科技大学 | 使用simd指令的向量函数快速查表法、系统及介质 |
CN114124887B (zh) * | 2021-11-29 | 2023-09-05 | 牙木科技股份有限公司 | Dns服务器的视图查询方法、dns服务器及可读存储介质 |
CN114449046B (zh) * | 2022-02-14 | 2023-04-11 | 江苏新质信息科技有限公司 | 一种网络数据处理方法及系统 |
Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1863169A (zh) * | 2006-03-03 | 2006-11-15 | 清华大学 | 基于网络处理器的路由查找结果缓存方法 |
CN1912870A (zh) * | 2006-09-05 | 2007-02-14 | 四川南山之桥微电子有限公司 | 一种哈希表查表方法 |
CN101350771A (zh) * | 2008-07-07 | 2009-01-21 | 中国人民解放军国防科学技术大学 | 三态内容可寻址存储器条目免排序存储方法及其系统 |
CN101692651A (zh) * | 2009-09-27 | 2010-04-07 | 中兴通讯股份有限公司 | 一种哈希查找表的方法和装置 |
CN101692653A (zh) * | 2009-09-25 | 2010-04-07 | 中兴通讯股份有限公司 | 路由表的管理方法和装置 |
CN102291296A (zh) * | 2011-08-04 | 2011-12-21 | 中兴通讯股份有限公司 | 一种路由表的更新方法及系统 |
CN103248579A (zh) * | 2013-04-19 | 2013-08-14 | 中山大学 | 基于FPGA的UDP/IPv6硬件协议栈及实现方法 |
CN104331497A (zh) * | 2014-11-19 | 2015-02-04 | 中国科学院自动化研究所 | 一种利用向量指令并行处理文件索引的方法及装置 |
CN104424129A (zh) * | 2013-08-19 | 2015-03-18 | 上海芯豪微电子有限公司 | 基于指令读缓冲的缓存系统和方法 |
CN104424158A (zh) * | 2013-08-19 | 2015-03-18 | 上海芯豪微电子有限公司 | 基于通用单元的高性能处理器系统和方法 |
CN104731718A (zh) * | 2013-12-24 | 2015-06-24 | 上海芯豪微电子有限公司 | 一种缓存系统和方法 |
CN104809179A (zh) * | 2015-04-16 | 2015-07-29 | 华为技术有限公司 | 访问哈希表的装置和方法 |
US9218319B2 (en) * | 2006-08-07 | 2015-12-22 | International Characters, Inc. | Method and apparatus for regular expression processing with parallel bit streams |
CN105700859A (zh) * | 2014-11-25 | 2016-06-22 | 中兴通讯股份有限公司 | 一种基于网络处理器实现硬件表遍历的方法及装置 |
CN107003840A (zh) * | 2014-12-23 | 2017-08-01 | 英特尔公司 | 用于执行检查以优化指令流的装置和方法 |
-
2017
- 2017-10-17 CN CN201710965568.0A patent/CN107729053B/zh active Active
Patent Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1863169A (zh) * | 2006-03-03 | 2006-11-15 | 清华大学 | 基于网络处理器的路由查找结果缓存方法 |
US9218319B2 (en) * | 2006-08-07 | 2015-12-22 | International Characters, Inc. | Method and apparatus for regular expression processing with parallel bit streams |
CN1912870A (zh) * | 2006-09-05 | 2007-02-14 | 四川南山之桥微电子有限公司 | 一种哈希表查表方法 |
CN101350771A (zh) * | 2008-07-07 | 2009-01-21 | 中国人民解放军国防科学技术大学 | 三态内容可寻址存储器条目免排序存储方法及其系统 |
CN101692653A (zh) * | 2009-09-25 | 2010-04-07 | 中兴通讯股份有限公司 | 路由表的管理方法和装置 |
CN101692651A (zh) * | 2009-09-27 | 2010-04-07 | 中兴通讯股份有限公司 | 一种哈希查找表的方法和装置 |
CN102291296A (zh) * | 2011-08-04 | 2011-12-21 | 中兴通讯股份有限公司 | 一种路由表的更新方法及系统 |
CN103248579A (zh) * | 2013-04-19 | 2013-08-14 | 中山大学 | 基于FPGA的UDP/IPv6硬件协议栈及实现方法 |
CN104424129A (zh) * | 2013-08-19 | 2015-03-18 | 上海芯豪微电子有限公司 | 基于指令读缓冲的缓存系统和方法 |
CN104424158A (zh) * | 2013-08-19 | 2015-03-18 | 上海芯豪微电子有限公司 | 基于通用单元的高性能处理器系统和方法 |
CN104731718A (zh) * | 2013-12-24 | 2015-06-24 | 上海芯豪微电子有限公司 | 一种缓存系统和方法 |
CN104331497A (zh) * | 2014-11-19 | 2015-02-04 | 中国科学院自动化研究所 | 一种利用向量指令并行处理文件索引的方法及装置 |
CN105700859A (zh) * | 2014-11-25 | 2016-06-22 | 中兴通讯股份有限公司 | 一种基于网络处理器实现硬件表遍历的方法及装置 |
CN107003840A (zh) * | 2014-12-23 | 2017-08-01 | 英特尔公司 | 用于执行检查以优化指令流的装置和方法 |
CN104809179A (zh) * | 2015-04-16 | 2015-07-29 | 华为技术有限公司 | 访问哈希表的装置和方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107729053A (zh) | 2018-02-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107729053B (zh) | 一种实现高速缓存表的方法 | |
US7019674B2 (en) | Content-based information retrieval architecture | |
US6665297B1 (en) | Network routing table | |
US9672234B2 (en) | Database and database processing methods | |
JP5960863B1 (ja) | 検索装置、検索方法、プログラム、及び記録媒体 | |
US10515015B2 (en) | Hash table-based mask length computation for longest prefix match caching | |
JPH03194632A (ja) | 変換予見にもとづくキャッシュアクセス | |
US20080133494A1 (en) | Method and apparatus for searching forwarding table | |
CN110908931B (zh) | Tlb模块的更新方法 | |
CN102045412B (zh) | IPv6地址前缀压缩存储方法及设备 | |
JP7436712B2 (ja) | パケットマッチング方法、装置、ネットワークデバイスおよび媒体 | |
WO2010076628A1 (en) | Content assembly memory and method | |
Chen et al. | Investigating route cache in named data networking | |
CN115086221B (zh) | 一种报文处理方法、装置、转发设备和存储介质 | |
CN113824814B (zh) | 一种转发表的地址匹配方法、装置、网络设备及介质 | |
KR101587756B1 (ko) | 블룸 필터 선-검색을 이용한 스트링 정보 검색 장치 및 방법 | |
US11354270B2 (en) | Searching for a hash string stored in an indexed array | |
Liu et al. | Longest prefix matching with pruning | |
CN107204926B (zh) | 预处理cache的路由快速查找方法 | |
JP2013037750A (ja) | 内容参照メモリ | |
Li et al. | Optimized hash lookup for bloom filter based packet routing | |
JP6205463B2 (ja) | 検索装置、検索方法、プログラム、及び記録媒体 | |
Zhian et al. | Parallel processing priority trie-based IP lookup approach | |
Kim et al. | Bitmap-based prefix caching for fast IP lookup | |
Kashansky et al. | Application of TRIE data structure and corresponding associative algorithms for process optimization in GRID environment |
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 |