CN106383695B - 基于fpga的聚类算法的加速系统及其设计方法 - Google Patents

基于fpga的聚类算法的加速系统及其设计方法 Download PDF

Info

Publication number
CN106383695B
CN106383695B CN201610822554.9A CN201610822554A CN106383695B CN 106383695 B CN106383695 B CN 106383695B CN 201610822554 A CN201610822554 A CN 201610822554A CN 106383695 B CN106383695 B CN 106383695B
Authority
CN
China
Prior art keywords
algorithm
data
instruction
fpga
hardware
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
Application number
CN201610822554.9A
Other languages
English (en)
Other versions
CN106383695A (zh
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.)
Suzhou Institute for Advanced Study USTC
Original Assignee
Suzhou Institute for Advanced Study USTC
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 Suzhou Institute for Advanced Study USTC filed Critical Suzhou Institute for Advanced Study USTC
Priority to CN201610822554.9A priority Critical patent/CN106383695B/zh
Publication of CN106383695A publication Critical patent/CN106383695A/zh
Application granted granted Critical
Publication of CN106383695B publication Critical patent/CN106383695B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)

Abstract

本发明公开了一种基于FPGA的聚类算法的加速系统及其设计方法,包括:通过profiling技术获得各算法的关键代码;细化各算法的关键代码并提取相同的功能逻辑(公共算子);使用分块技术重新设计代码结构以提高数据局部性的利用率,减少片外的访存次数;设计扩展语义的指令集并实现指令集对应的各个功能逻辑部件,通过指令的取指、译码、执行的操作完成关键代码的功能;设计加速器的加速框架并生成IP核;移植操作系统到开发板,在操作系统下完成软硬件的协同工作。能够支持多种聚类算法,可以提高硬件加速器的灵活性和通用性;采用分块技术重构各个算法的代码的目的是减少片外访存的次数以降低片外访存的带宽对加速器加速效果的影响。

Description

基于FPGA的聚类算法的加速系统及其设计方法
技术领域
本发明涉及一种算法的硬件加速器,具体涉及一种通用性好和灵活性高的基于FPGA的聚类算法的加速系统及其设计方法。
背景技术
聚类算法是一类无监督的机器学习算法,目前被广泛应用于各个领域,例如:市场调研,模式识别,数据挖掘,图像处理,客户分割,web文档分类等。按照划分方式的不同,常用的聚类算法可以划分为如下几类:划分方法、层次方法、基于密度的方法、基于网格的方法以及基于模型的方法等。在不同的应用领域以及处理不同类型的数据时,需要使用不同的聚类算法来进行聚类分析才能够获得较好的聚类效果。例如对于球形分布的数据,K-Means算法可以获得很好的聚类结果,而且算法简单,运行时间很短。但是对于分布不规则的数据,K-Means算法就很难获得较好的聚类结果,特别是一些噪声严重的数据集,K-Means算法往往很难满足人们的需求,而DNSCAN算法可以达到很好的聚类效果。综上,在不同的应用领域中多类聚类算法被广泛使用。
随着互联网和电子商务的飞速发展,各行各业采集、积累或急需处理的数据呈现海量式的增长,数据的规模和维度也在不断地扩大。海量高维度的数据大大减慢了聚类分析的效率,有时需要一天或者几天的时间才能得到聚类分析的结果,这严重制约着各行各业的发展。特别是在这个高速发展的信息时代,信息提取速度的快慢成为了影响成功的关键因素。聚类算法应用的广泛性和信息提取速度的重要性使得聚类算法的加速具有重要的意义,聚类算法的加速已经成为当今社会迫切的需求。
目前聚类算法加速的手段主要有云计算平台加速和硬件加速。云计算平台加速大多采用Hadoop或者spark工具对应用程序进行功能和数据集的划分、然后将划分的结果分配(map)到每个PC节点进行计算,最后再将结果进行回收(reduce)。云计算平台加速的应用有很多,例如基因测序应用的加速、矩阵运算的加速等。硬件加速的方法主要有图形处理器GPU(Graphics Processing Unit)、现场可编程逻辑门阵列FPGA(Field ProgrammableGate Array)以及专用集成电路ASIC(Application Specific Integrated Circuit)。它们利用硬件自身速度快的特点,使用硬件来代替软件或者CPU来实现具体功能逻辑,而且大量的内置硬件逻辑部件使得硬件加速可以更好地采用并行和流水的方式加速算法的执行。云计算平台是由有多台CPU构成,由于CPU对通用性的支持和CPU之间的网络带宽的限制,使得云计算的加速效果不如硬件加速器好,而且云计算加速需要的硬件成本相对于硬件加速更高。综上,硬件加速是更为有效的加速手段。
硬件加速是利用硬件固有的特性,以硬件来替代软件算法或者CPU来实现相应的功能逻辑,常见的硬件加速技术有专用集成电路ASIC(Application Specific IntegratedCircuit)、现场可编程逻辑门阵列FPGA(Field Programmable Gate Array)和图形处理器GPU(Graphics Processing Unit)。ASIC处理的速度很快,但是由于是专制集成电路所以不够灵活;GPU虽然满足支持灵活性和通用性的要求,但是GPU加速的功耗非常大;FPGA采用了查找表的结构,使得FPGA能够被重构,解决了ASIC定制电路的不足,而内置的专用的DSP模块使得FPGA的功耗很低。本文选用了FPGA来实现一种支持四种聚类算法的加速平台的设计。
FPGA是为了解决定制电路而诞生的,是可编程器件发展的产物,它主要由查找表(LUT)、可配置的逻辑块(CLB)、时钟资源和时钟管理单元、块存储器RAM、互联资源、专用的DSP模块、输入输出块、吉比特收发器、PCI-E模块以及XADC模块组成。FPGA工作的主要原理是通过设置片内的RAM的状态,即对RAM进行编程来设置不同的功能逻辑。
FPGA加速的手段主要有并行计算,流水线设计和数据局部性等。并行计算主要是根据算法的特点,将算法中的可以并行的部分分配到不同的硬件逻辑单元中去执行。并行计算分为数据并行和计算并行。数据并行是指算法中的一些数据之间是无关联的,把这些各自独立的数据分配到逻辑功能相同的多个硬件执行单元PE中同时进行计算;计算并行是指数据不进行分割而是直接输入到一个硬件执行单元PE中,该PE自身具有并行计算的功能,如硬件逻辑单元加法树、向量减法、向量乘法等。流水线设计是FPGA的另外一种常用的并行优化方式,通过将一段功能逻辑块进行分割形成多段的逻辑小块,然后通过设置多个寄存器组来减少整个功能逻辑块的时间延迟。理想状态下的流水线在每个周期内都会完成一次功能逻辑的计算,使得FPGA具有极大的吞吐率,整个加速效果就非常可观。数据局部性指的是算法的特点,如果算法中数据之间具有局部性,FPGA内部就可以通过缓存数据来提高数据的利用率,减少数据的片外访存次数,从而达到加速的目的。
目前硬件加速器的设计大多是针对单一特定的算法,对加速器的通用性和灵活性的研究很少。虽然GPU提供了解决通用性和灵活性的方法,但是由于对通用性和灵活性的支持使得GPU带来了高能耗的问题,而FPGA也许会获得更好的节能效果。但是目前基于FPGA的加速器都是针对特定算法设计特定的硬件加速模块,使得该硬件加速器仅支持一种算法,大大限制了硬件加速器的通用性和灵活性。能否设计一种基于FPGA的硬件加速器使之能够支持多种聚类算法呢?这是本发明要解决的问题之一。目前的硬件加速方案较少考虑到片外访存对加速效果的影响,而现实中片外访存不可避免而且片外访存的速度很慢,使得带宽成为制约算法加速的重要因素。减少片外访存的次数,提高加速效果也是本发明要解决的问题。
发明内容
针对上述存在的技术问题,本发明目的是:提供了一种基于FPGA的聚类算法的加速系统及其设计方法,能够支持多种聚类算法,可以提高硬件加速器的灵活性和通用性;采用分块技术重构各个算法的代码的目的是减少片外访存的次数以降低片外访存的带宽对加速器加速效果的影响。
本发明的技术方案是:
一种基于FPGA的聚类算法的加速系统,其特征在于,包括:
CPU,与加速控制器进行通信;
DDR,用于数据交互;
加速控制器,用于控制指令的读取和执行;
多个执行单元,包括指令集硬件逻辑单元,以及相应的内存存储单元,所述指令集硬件逻辑单元包括I/O指令硬件逻辑单元和计算指令硬件逻辑单元;
指令缓冲区,用于存储从DDR传送的指令集合。
优选技术方案中,所述I/O指令包括:LOAD_OBJ、LOAD_CLU、LOAD_TMP、LOAD_PARA、STORE_TMP、STORE_ID、STORE_DIST、STORE_LOCA;所述计算指令包括:VECTOR_SUB、VECTOR_FAB、VECTOR_MULT、SCALAR_SUM、SQRT、FIND_MIN、CLUSTER_IN、VECTOR_ADD、VECTOR_DIV、VECTOR_UP;提供粗粒度的指令调用一组细粒度的指令集,所述粗粒度的指令包括:KMEANS、PAM_CLU、PAM_UPD、DBSCAN、SLINK。
本发明还公开了一种基于FPGA的聚类算法的加速系统的设计方法,其特征在于,包括以下步骤:
S01:获得各算法的关键代码,提取关键代码的相同功能逻辑;
S02:设计扩展语义的指令并实现指令对应的功能逻辑部件,为各个算法设计各自的指令集;
S03:设计加速器的加速框架并生成IP核;
S04:在操作系统下将硬件比特流式文件烧写到开发板中并编写IP核和硬件设备的驱动;
S05:编写用户层调用算法加速的接口。
优选技术方案中,所述步骤S01包括以下步骤:
针对每个算法测试不同数据集和不同簇的个数下算法中各个函数占用的时间比例;对测试的结果集进行统计,求出各个函数的平均占用的时间比例;将时间比例大的一个或者一组函数作为该算法的关键代码;
对各个算法的关键代码进行细化,细化后的功能单元能够刻画出不同算法采用不同相似度度量标准时代码的相同功能逻辑和不同的功能逻辑。
优选技术方案中,所述步骤S02包括以下步骤:
通过并行方案和流水方案实现指令对应的功能逻辑部件,根据各个算法的相同功能逻辑和不同的功能逻辑设计对应的指令集;所述并行方案包括,并行计算一个数据对象与多个簇的中心点之间的距离,流水计算一个数据对象与单个簇的中心点之间的距离;所述流水方案包括,流水计算一个数据对象与多个簇的中心点之间的距离,并行计算一个数据对象与单个簇的中心点之间的距离。
优选技术方案中,所述步骤S05包括,使用桥接模式分离算法和相似度度量标准;各个算法实现算法的接口,相似度度量标准实现相似度度量的接口,然后将两个接口之间以组合的方式完成采用具体相似度度量标准的具体算法的加速。
优选技术方案中,所述动作指令映射模块包括采用动态时间规整计算样本距离,对动作进行分类;将识别的动作映射成对应的计算机操作指令。
优选技术方案中,对各个算法中存在数据局部性的代码进行分块重新构建,将将N个数据对象和m个中心点分别划分成一定大小的块,以块为单位进行计算,块内的中心点数据会被另一个块内的数据对象重复使用。
优选技术方案中,所述步骤S04包括:
在驱动的编写中,采用访问Linux字符设备的方式访问各个硬件设备;在DMA的驱动编写中采用映射机制进行数据填充;所述映射机制为在内存中预留出一段连续的物理内存,将其映射到内核空间中的一段地址中,然后将该段内核空间地址映射到用户空间。
与现有技术相比,本发明的优点是:
本发明拓展了加速器的灵活性和通用性,它能够更广泛的解决聚类问题;通用加速框架采用软硬件结合的思想和并行、流水的方法进行设计,对用户透明,简单易用,性能良好;采用了tile技术解决了频繁的片外访存问题,能够更好的处理大规模数据的传输;在数据填充中采用映射机制来实现,减少了数据拷贝的次数。
附图说明
下面结合附图及实施例对本发明作进一步描述:
图1是本发明实施例的加速系统平台的设计流程图;
图2是本发明实施例的加速系统平台软硬件划分的流程图;
图3a-3d分别是本发明实施例的Kmeans算法、PAM算法、DBSCAN算法、SLINK算法软硬件划分后的协作流程图。
图4是本发明实施例的解决片外访存问题的任务流程图;
图5是本发明实施例的采用分块技术前后距离计算的流程对比图;
图6是本发明实施例的加速器的框架设计流程图;
图7是本发明实施例的并行设计方案的示意图;
图8是本发明实施例的流水设计方案的示意图;
图9是本发明实施例的加速器的整体结构框架的示意图;
图10是本发明实施例的加速器结构框架中执行单元的结构示意图;
图11是本发明实施例的加速器的指令数组的结构设计图;
图12是本发明实施例的IP核生成的任务流程图;
图13是本发明实施例的操作系统移植到开发板的工作流程图;
图14a和14b是本发明实施例的DMA传送数据的流程图;
图15是本发明实施例的用户层接口的设计类图。
具体实施方式
以下结合具体实施例对上述方案做进一步说明。应理解,这些实施例是用于说明本发明而不限于限制本发明的范围。实施例中采用的实施条件可以根据具体厂家的条件做进一步调整,未注明的实施条件通常为常规实验中的条件。
实施例:
本发明实施例中的加速平台加速的聚类算法是Kmeans、PAM、SLINK、DBSCAN算法,每种算法支持Manhattan和Euclidean两种相似度度量的标准;加速平台指的是现场可编程门阵列(Field Programmable Gate Arrays,简称为“FPGA”)和通用处理器(GeneralPurpose Processor,简称为“GPP”)组成的计算机系统,其中通用处理器包括中央处理器(Central Processing Unit,简称为“CPU”)、网络处理器(Network Processor,简称为“NP”)等。
图1是本发明实施例的加速系统平台的设计流程图;包括的设计步骤如下:
加速系统的软硬件的划分任务S110,具体的划分工作在图2中给出了详细的步骤。
算法关键代码中的公共算子的提取任务S120:通过不断细化各个算法的关键代码,分析比较其相同和不同的功能逻辑,直至细化后的功能逻辑单元不但能够刻画出各个算法的关键代码而且能够刻画出不同相似度度量标准的相同的功能逻辑。
采用分块技术设计代码结构的任务S130,该任务是为了解决频繁的片外访存的问题,具体的任务流程如图4所示。
加速器的结构框架的设计任务S140,该任务需要完成加速器的整体框架的设计以及内部执行单元的设计,图8给出了详细的设计流程。
指令的硬件实现的任务S150,该任务需要设计并实现不同的指令对应的硬件逻辑。
IP核和对应的硬件比特流生成的任务S160,该任务的最终目标是生成具有特定逻辑功能的硬件比特流文件。任务的具体实现步骤如图12所示。
操作系统的移植以及IP核和硬件设备的驱动的编写任务S170,图13给出了操作系统的移植详细步骤,图14a、14b给出了驱动编写中DMA数据传送的处理流程。
用户层接口的设计任务S180,该任务给出了加速系统平台调用的接口,应用程序通过调用该接口就可以实现相应算法的加速。
图2是本发明实施例的加速系统平台软硬件划分的流程图。首先测试不同数据集下各个算法中的函数占用的时间比例;然后测试簇的个数不同情况下各个算法中函数占用的时间比例;最后对测试的结果集进行统计,求出各个函数的平均占用的时间比例。根据各个函数的时间比例以及算法和FPGA的特性选择算法中比较费时的关键代码作为加速器加速的对象。具体的划分结果如图3a-3d所示。
图3a给出了Kmeans算法下CPU和FPGA的协作流程:
1)操作系统下CPU从DDR中读取数据并将数据传送到FPGA的BRAM中。
2)FPGA接收数据,并执行距离计算的操作。
3)在FPGA内部执行距离最小值的寻找操作并将数据划分到不同的簇中。
4)在FPGA内部判断迭代次数是否满足阈值:如果满足,将数据对象的簇的标号传送到操作系统下的DDR中,算法完成计算;反之,将数据对象和簇中数据进行相加,并执行5)和6)中的操作。
5)在FPGA内部使用平均值的方法更新簇的中心点。
6)FPGA将新的中心点传送到操作系统下的DDR中,完成算法的一次迭代,然后重复1~6中的步骤。
图3b给出的是操作系统和加速器之间的协作来完成PAM算法的加速的流程图,整个步骤如下:
1)操作系统下CPU从DDR中读取数据并将数据传送到FPGA的BRAM中。
2)FPGA接收数据,并执行距离计算的操作。
3)在FPGA内部执行距离最小值的寻找操作并将数据划分到不同的簇中。
4)FPGA将计算结果传输到操作系统下的DDR中。
5)操作系统下CPU从DDR中读取数据并统计每个簇中的数据对象。
6)CPU将每个簇中的数据对象传送到FPGA内部。
7)FPGA接收数据,并执行距离计算的操作。
8)在FPGA内部执行距离的累加操作。
9)FPGA从累加和的数组中找到最小得元素,即该簇新的中心点。
10)将每个簇的中心点的信息传送到操作系统下的DDR中,完成算法的一次迭代操作,然后按照1)~10)中的操作不断迭代直至迭代次数达到收敛的阈值。
图3c中给出了DBSCAN算法的详细划分以及处理器和硬件加速器之间的协作流程,步骤如下:
1)CPU从DDR中读取数据并将数据传送到FPGA的BRAM中。
2)FPGA接收数据,并执行距离计算的操作。
3)将计算得到的距离矩阵传送到DDR中。
4)CPU从DDR中获取距离矩阵并统计核心点数据。
5)统计核心点的邻居节点。
6)执行聚簇的操作,完成对数据对象的划分。
7)将聚簇的结果存储在DDR中。
图3d是SLINK算法软硬件协作的处理流程图,整个处理流程如下:
1)CPU从DDR中读取数据并将数据传送到FPGA的BRAM中。
2)FPGA接收数据,并执行距离计算的操作。
3)将计算得到的距离矩阵传送到DDR中。
4)FPGA内部在行最小值数组内查找最小值。
5)判断该最小值是否满足停止条件,如果满足,将数据对象的簇的标号传送到DDR中;反之,将聚簇的信息传送到DDR中,并在FPGA内部执行簇的更新,然后执行6),7),8)中的操作。
6)CPU从DDR中获得聚簇的信息并更新簇的距离矩阵。
7)计算需要更新的行的最小值并将数据传送到FPGA内部。
8)FPGA内部执行行最小值的更新操作,并重复4~8中的操作。
图4是本发明实施例的解决片外访存问题的任务流程图。首先对算法进行局部性分析,找出算法中含有数据局部性的代码;分析数据局部性与片外访存次数之间的关系;利用分块技术对含有数据局部性的代码进行重新设计;最后针对设计好的代码分析其与原始代码的差别。
从算法的局部性分析可知在计算距离矩阵的时候由于硬件资源有限,片内无法存储所有的数据,必然会导致片外访存的频繁发生。而数据从片外向片内传输的速度很慢,这使得带宽成为了制约加速器加速性能的一个因素。为了解决该问题,本文提出了一种称为分块(Tiled)的技术来减少片外访存的发生。原始的距离计算的代码如下:
每个数据对象需要依序和所有的中心点计算距离,即每个数据对象和所有的中心点相关联。假设数据个数N=60000,簇的个数m=600,而FPGA内部只能存储100个中心点数据,原始的代码结构在每个数据的划分操作中都会造成6次的片外访存,则N个数据共需要60000*6=360000次片外访存,每次片外访存都要读取100个簇的中心点数据。如此频繁的片外访存必然影响加速器的加速性能,成为加速器性能提升的瓶颈。
本发明实施例的tile分块后的代码如下:
原始的代码结构导致FPGA内部存储的中心点数据没有得到重复利用就被换出,数据的局部性没有得到任何的利用。如果FPGA内部的数据在被覆盖之前得到重复利用,则片外访存的次数会降低。因为算法本身决定了每个簇的中心点被使用的次数,而片内数据在覆盖之前得到重复的利用,则需要从片外读取数据的次数就会减少。为了充分利用算法的数据局部性,本文给出了分块的技术。分块技术指的是将N个数据对象和m个中心点分别划分成一定大小的块,每次的计算都是以块为单位,块内的中心点数据会被另一个块内的数据对象重复使用。这种方法使得存储在FPGA中的整块的簇中心点数据在被覆盖之前得到充分的利用,这大大提高了片内数据的利用率,减少了数据从片外向片内传输的次数。假设由于硬件资源的限制,FPGA片内能存储的簇中心点个数为S,则采用Tiled分块技术前后产生的片外访存的次数分别为(1.1)、(1.2)所示:
Num1=N*m/S (1.1)
Num2=N/T*m/S (1.2)
从上述等式(1.1)、(1.2)可以看出分片前的片外访存的次数是分片后的T倍,而且每次片外访存都要读取S个数据,由此可见,分片技术确实可以减少片外访存的次数。
图5是本发明实施例的采用分块技术前后距离计算的流程对比图。图中的形状代表了数据的类型,颜色代表了数据存储的方式。图中方块代表待划分的数据,圆圈代表簇的中心点;灰色代表的是数据存储在FPGA片内,白色代表的是数据存储在片外。原始的计算方式是针对每个待划分的数据按序计算它与所有的簇的中心点的距离,步骤如下:
1)计算待划分数据与片内中心点数据之间的距离。
2)将不在片内的簇的中心点数据通过片外访存加载到片内。
3)重复1,2操作直至所有的簇的中心点计算完毕。
4)针对每个待划分的数据重复上述三步操作。
由于上述步骤是针对每个待划分的数据,所以每个待划分数据的计算都需要很多次的片外访存才能完成,这导致了片外访存太过频繁,而分片技术很好的解决了这一问题。在分块技术中数据计算的中心不再是围绕着单个待划分的数据进行,而是针对多个待划分的数据,也称为以块为单位的计算,整个计算步骤如下:
1)将块内所有的待划分的数据依次与FPGA片内所有的簇的中心点计算距离,并将距离结果暂存。
2)将不在片内的簇的中心点数据从片外加载到片内。
3)重复1和2中的操作,直至所有的簇的中心点已经计算完毕。
4)将存储在片外的待划分的数据以块为单位加载到FPGA片内,然后重复上述三步操作,直至所有的待划分数据均已划分完毕。
由于Tile分块技术是以块为单位进行计算的,片内簇的中心点数据在被换出之前已经被待划分的数据充分利用,这大大提高了数据使用的局部性。算法中所有簇的中心数据被重复使用的次数是固定的,而Tile技术使得每次片外访存加载的簇中心点数据被重复使用的次数得到很大的提高,减少了数据从片外传输到片内的次数。
图6是本发明实施例的加速器的框架设计流程图;设计扩展语义的指令集;选择距离计算的加速方案,流水加速或者并行加速;设计加速器的整体的结构框架。指令包括I/O指令和计算指令,I/O指令包括:LOAD_OBJ、LOAD_CLU、LOAD_TMP、LOAD_PARA、STORE_TMP、STORE_ID、STORE_DIST、STORE_LOCA;计算指令包括:VECTOR_SUB、VECTOR_FAB、VECTOR_MULT、SCALAR_SUM、SQRT、FIND_MIN、CLUSTER_IN、VECTOR_ADD、VECTOR_DIV、VECTOR_UP。由于译码操作比较费时,在设计中我们设计了五中粗粒度的指令,每种指令的执行都会调用一组细粒度的指令集;五中粗粒度的指令包括:KMEANS、PAM_CLU、PAM_UPD、DBSCAN、SLINK。图7和图8给出了并行和流水的加速设计方案,图9给出了加速器的整体结构框架。
图7是本发明实施例的并行设计方案的示意图:多个处理单元(PE)之间能够并行执行,且PE的功能都是相同的。每个PE被划分成三个阶段,第一阶段是减法操作,第二阶段是绝对值操作,第三阶段是加法操作。三个阶段的顺序执行可以完成距离计算中一个维度上的计算操作,通过流水处理后PE能够将每个维度上的计算进行累加从而完成点对点的距离计算;而多个PE的并行操作能够完成一个数据对象与多个簇的中心点之间的距离计算。
由于处理的数据很大,在FPGA内部不可能将数据存储为register格式,只能将数据存储在BRAM上,而BRAM每个周期只支持两个端口的读写操作,所以要实现一个数据对象与多个簇的中心点之间的并行计算就要复制多份相同的数据对象,即并行操作的额外开销就是数据的冗余存储。如果数据Obj1要实现与8个簇的中心点并行计算,则要在不同的BRAM中存储四份Obj1的数据,这是以空间换时间的方法来加速数据与多个簇的中心点之间的距离计算。假设加速器最大支持的并行度是32,当簇的个数大于32,就要分批计算,每次计算与32个簇的中心点之间的距离,然后再将结果进行整合。
图8是根据本发明实施例的流水方案的示意图:流水方案的原理是点与所有簇的中心点之间的距离计算采用流水的方式,而点与单个簇的中心点之间的距离计算采用的是维度上的并行操作。整个距离计算划分为三个阶段:第一阶段是向量的减法操作,第二阶段是向量的绝对值操作,第三阶段是标量的累加操作,该阶段使用加法树来实现功能。三个阶段顺序执行一次就完成了一次点对点的距离计算,三个阶段流水执行就可以完成数据对象到所有簇的中心点之间的距离计算。在FPGA中只需要将数据按照维度划分到不同的BRAM上,就可以实现维度上的并行操作,然后给这三个阶段添加流水设计的指令就可完成该方案的设计。从图8可以看出,需要的硬件逻辑单元有向量的减法,向量求绝对值,还有加法树操作。假设加速器支持的并行度是8,则每8个不同维度上的计算操作可以并行处理处理;而且数据对象在每个周期内就可以完成与一个簇的中心点的计算操作。
图9是本发明实施例的加速器的结构框架图。用FPGA实现四种算法最简单的方法就是针对这四种算法直接进行硬件固化。但是这种方法大大降低了加速器的灵活性和扩展性。如果某种算法的关键代码与这四类算法基本相同或者只存在一些少量的差别,就不得不重新设计一个新的加速器。本文采用了为加速器设计指令集的方式,来实现四种不同算法的加速。在FPGA端通过执行扩展指令的语义来实现相应的硬件逻辑,通过指令执行的过程来实现算法的功能。这种方法大大提高了加速器的灵活性,如果某种应用能够根据指令集的重组来解决问题,那么只需要输入一些对应的指令集,加速器读取指令,译码,执行相应的操作即可。
从图9可以看到整个加速平台的基本结构,主要由CPU、DDR、加速器的控制器、执行单元、DMA、指令Buffer等组成。CPU负责与硬件加速器之间进行通信,通过相互协作来完成整个算法的加速;DDR是软件和硬件之间数据交互的纽带,加速器通过DMA从DDR传送数据到FPGA内部,然后FPGA将计算结果再通过DMA传送到DDR上,CPU通过数据总线读取DDR中的数据并进行计算;加速器的控制器主要是控制加速器指令读取和执行的控制单元;指令buffer是用来存储通过DMA从DDR传送的指令集合;执行单元内部包含有各条指令对应的硬件逻辑单元,以及相应的内存存储单元。整个加速器工作在SIMD模式下,即在不同的输入数据集上执行相同的指令操作。每个执行单元内部都是一些相同的硬件逻辑,执行单元之间是完全并行的,而执行单元的个数受限于实验平台的硬件资源。加速器一旦启动,CPU调用DMA将指令集合从DDR传送到FPGA内部的instruction buffer中,然后控制器从instruction buffer中按序读取指令并执行指令相应的硬件逻辑功能,例如数据加载、向量减法、向量求和、数据存储操作等,整个加速器的就像一个处理器一样,通过取指、译码、执行特定的指令集来完成算法的功能。执行单元S14370的内部逻辑结构如图10所示。
图10是根据本发明实施例的执行单元的内部结构图。从加速器的结构框架图中可以看到整个加速器的核心是加速器的执行单元,本节将对加速器执行单元的内部结构进行介绍。从图10可以看出整个执行单元由内存存储模块和功能的硬件逻辑模块组成。执行单元在内存存储方面设置了三个输入数组和两个输出数组:Objects是个二维数组用来存储待划分的数据对象,Means二维数组用来存储簇的中心点,Para数组是用来存储数据的类型,比如数据的个数、数据的维度等;ClusterID是一个一维数组用来存储各个数据对象所在簇的标号,Distance一维数组是用来存储点与点之间的距离。在本文的设计中还有一些其他的内存单元用来存储计算的中间结果。
指令集对应的硬件逻辑分为两块,一块为I/O指令对应的硬件逻辑单元,一块为计算的硬件逻辑单元。I/O指令分为输入模块和输出模块:前者含有多种数据加载的指令,后者包含多个数据存储的指令。计算指令包括向量减法、向量乘法、向量求绝对值、向量加法、标量数组求和、找出数组的最小值、向量除法等。整个执行单元的执行流程如下:
1)控制器从指令instruction buffer中读取第一条指令:Load指令。
2)控制器译码,并执行指令对应的硬件逻辑,即通过Input Module中相应的硬件逻辑单元调用DMA从DDR读取数据到片内指定的数组中。
3)控制器从instruction buffer中读取指令。
4)控制器译码、执行指令对应的硬件逻辑。
5)控制器重复3)和4)中的操作,直至最后从指令中读取最后一条指令:Store指令,译码然后调用Output Module中的相应的硬件逻辑单元,将计算结果从片内通过DMA输出到DDR中,至此整个执行单元的内部处理流程已经完成。
图11是本发明实施例的指令数组的结构示意图:设计指令数组的结构,减少重复指令在指令数组中占用的空间,整个指令数组可以实现两层循环嵌套的指令集。
1)Length代表指令的条数,即指令数组的有效长度。
2)start1代表指令集中的外层循环体内第一条指令的地址。
3)end1代表指令集中的外层循环体内最后一条指令的地址。
4)time1代表指令集中外层循环体执行的次数。
5)start2代表指令集中的内层循环体内第一条指令的地址。
6)end2代表指令集中的内层循环体内最后一条指令的地址。
7)time2代表指令集中内层循环体执行的次数。
8)S_flag标识指令集对应的是哪种算法,取值范围为{0,2,3,4,5},1到5分别代表应该执行KMEANS指令、PAM_CLU指令、PAM_UPD指令、SLINK指令、DBSCAN指令,0代表四种算法以外的指令集。
9)M_flag标识算法使用的是哪种相似度度量标准,取值范围为{0,1},分别代表两种相似度度量标准。
从图11给出的指令数组可以看出指令集的信息:外层循环体内的指令是VECTOR_SUB、VECTOR_FAB、SCALAR_SUM、FIND_MIN、CLUSTER_IN;内层循环体内的指令是VECTOR_SUB、VECTOR_FAB、SCALAR_SUM;内层循环体内的指令完成的是一个数据对象与所有簇的中心点之间的距离计算;外层循环完成的是所有的数据对象的簇的划分操作;整个指令集的功能是把N个数据对象分配到M个簇中。
图12是本发明实施例的IP核生成的任务流程图。S161代表的是使用硬件描述语言HDL设计IP核的功能逻辑;S162代表的是使用硬件编译器对IP核进行编译操作;S163代表的是对IP核进行集成综合,S164代表的是对集成后的IP核进行时序性和功能性仿真;如果仿真结果满足要求就执行S165,即使用工具生成硬件比特流文件,反之重新执行S161~S164中的操作。
图13是本发明实施例的操作系统移植到开发板的工作流程图。第一步就是格式化SD卡,生成两个分区:分区1是FAT格式,空间大小在1G以上;分区2是EXT-4格式,空间大小在3G以上。第二步准备四类文件:BOOT.BIN文件包含一些可编程逻辑和处理系统的配置信息,除此之外还包含有加载linux的u-boot信息;Device-tree文件包含有各个硬件相关的驱动信息,而且是内核启动的参数的home目录;这两个文件和内核镜像都存放在分区1中。文件系统是Linux下支持文件读取与存储的系统,目前在平台下支持的文件系统是linaro和BusyBox,该文件存放在分区2中。这四类文件包含了系统在硬件平台下运行所需要的所有的相关文件。第三步编写IP核和硬件设备的驱动:采用Linux字符设备访问的方式编写各个硬件设备的驱动。
图14a和14b是本发明实施例的DMA数据传输的示意图。本发明实施例采用的是驱动动态加载的方式,即将编写好的驱动模块以内核模块的方式动态加载到内核中,各个设备驱动都是采用Linux字符设备驱动模型实现。在操作系统中,分页的机制使得用户进程空间连续地址中存放的数据在物理地址中并不一定是连续的,而DMA传送数据需要连续的物理地址,所以在DMA将数据传送到FPGA片内之前,需要将用户层的数据拷贝到物理地址连续的空间内。
如图14a为DMA传送数据的流程图,如图所示:
首先在DMA驱动中利用Kmalloc函数分配一段连续的物理内存,并给出其对应的内核空间的逻辑地址;其次在用户执行应用程序时,将所需要的数据从用户进程空间读取出来并写入到Kmalloc分配的连续物理内存对应的内核空间地址中,写入完毕后数据就实现了在物理地址中的连续存储,最后DMA从连续的物理地址空间中读取数据传送到IP Core,IP Core读取数据进行计算。这就是DMA将数据从用户态传送到IP Core内部的整个流程。IPCore计算后的结果先通过DMA传送到物理地址连续的内存中,然后再从内核空间中将数据传送到用户进程的地址空间中。从图可以看出,完成一次计算需要两次的数据拷贝,而数据拷贝的速度是很慢的,无疑这会降低加速器的性能,为此本文采用了映射的方式来减少整个数据传送过程中的数据拷贝次数。
图14b是映射机制下DMA传送数据的示意图。首先在Linux系统中预先保留一段连续的物理内存(64M),并将它映射到内核空间的前896M中,则该段物理内存和内核地址空间中的一段虚拟地址是对应的,这些信息会保存在MMU PageTable中;然后将内核空间的这段虚拟地址映射到用户进程的某段地址空间中,这样该段用户进程地址空间就和物理地址完成了映射,该段用户进程地址内的数据是存储在地址连续的一段物理内存中。在映射机制下,DMA传送数据的整个流程如下:应用程序执行的过程中将所需要的数据填充到映射后的某段用户进程空间的地址中,然后DMA就可以操作与用户虚拟地址对应的物理地址进行数据的传送,IP Core读取数据进行计算,DMA将计算结果传送到指定的连续的物理内存中,而该物理内存已经映射到用户进程,所以不再需要数据的拷贝操作。由此可见一次计算只需要一次数据的拷贝操作,在数据量小的时候加速器性能的差别不是很明显,但是如果数据量非常大的时候,需要进行多次分片操作,涉及到的数据拷贝次数会非常多,加速器的性能也会出现明显的不同。
图15是本发明实施例的用户层接口的设计类图。将加速器的各个驱动进行封装之后,我们在linux的用户层编写了两个函数用于实现加速器的调用。这两个函数分别是函数void Set_instruction_buffer()以及函数void Run_Accelerator(),分别用于设置指令集和调用加速器。Set_instruction_buffer函数根据不同的算法设置不同的指令集,Run_Accelerator函数使用linux字符设备访问的方式访问各个硬件设备和IP核,加速器根据设置好的指令集运行从而实现算法的功能。由于加速平台实现了四种算法的加速,而每种算法又能够支持两种不同的距离测量方式,所以不熟悉加速器内部实现方式,很难配置加速器的指令集。为此,本文设计了加速器的软件子系统并给出了用户调用算法加速的接口,用户通过调用加速平台的接口并简单实例化调用的算法和相似度度量标准,加速平台就可以采用软硬件协作的方式实现具体算法的加速。
出于对系统的维护性和扩展性考虑,该类图设计采用了桥接模式,将具体算法和相似度度量标准以组合的形式实现具体的应用。整个加速系统执行的过程如下:客户端实例化Application类,然后通过Application类的对象实例化Cluster_Algorithm接口,Cluster_Algorithm接口的对象再实例化Cal_Metric接口,最后调用Run_Algorithm函数执行算法的计算。
上述实例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人是能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所做的等效变换或修饰,都应涵盖在本发明的保护范围之内。

Claims (6)

1.一种基于FPGA的聚类算法的加速系统,其特征在于,包括:
CPU,与加速控制器进行通信;
DDR,用于数据交互;
加速控制器,用于控制指令的读取和执行;
多个执行单元,包括指令集硬件逻辑单元以及相应的内存存储单元,所述指令集硬件逻辑单元包括I/O指令硬件逻辑单元和计算指令硬件逻辑单元;通过并行方案或流水方案实现指令对应的功能逻辑,根据各个算法的相同功能逻辑和不同的功能逻辑设计对应的指令集;所述并行方案包括,并行计算一个数据对象与多个簇的中心点之间的距离,流水计算一个数据对象与单个簇的中心点之间的距离;所述流水方案包括,流水计算一个数据对象与多个簇的中心点之间的距离,并行计算一个数据对象与单个簇的中心点之间的距离;
指令缓冲区,用于存储从DDR传送的指令集合。
2.一种基于FPGA的聚类算法的加速系统的设计方法,其特征在于,包括以下步骤:
S01:获得各算法的关键代码,提取关键代码的相同功能逻辑;
S02:设计加速器的加速框架并生成IP核;
S03:设计扩展语义的指令并实现指令对应的功能逻辑,为各个算法设计各自的指令集;具体包括,通过并行方案或流水方案实现指令对应的功能逻辑,根据各个算法的相同功能逻辑和不同的功能逻辑设计对应的指令集;所述并行方案包括,并行计算一个数据对象与多个簇的中心点之间的距离,流水计算一个数据对象与单个簇的中心点之间的距离;所述流水方案包括,流水计算一个数据对象与多个簇的中心点之间的距离,并行计算一个数据对象与单个簇的中心点之间的距离;
S04:在操作系统下将硬件比特流式文件烧写到开发板中并编写IP核和硬件设备的驱动;
S05:编写用户层调用算法加速的接口。
3.根据权利要求2所述的基于FPGA的聚类算法的加速系统的设计方法,其特征在于,所述步骤S01包括以下步骤:
测试不同数据集下各个算法中的函数占用的时间比例和簇的个数不同情况下各个算法中函数占用的时间比例;对测试的结果集进行统计,求出各个函数的平均占用的时间比例;将时间比例最大的一个或者一组函数作为该算法的关键代码;
对各个算法的关键代码进行细化,细化后的功能单元能够刻画出不同算法采用不同相似度度量标准时代码的相同功能逻辑和不同的功能逻辑。
4.根据权利要求2所述的基于FPGA的聚类算法的加速系统的设计方法,其特征在于,所述步骤S05包括,使用桥接模式实现各个算法的接口,使用相似度度量标准实现相似度度量的接口,然后将两个接口之间以组合的方式完成采用具体相似度度量标准的具体算法的加速。
5.根据权利要求2所述的基于FPGA的聚类算法的加速系统的设计方法,其特征在于,对各个算法中存在数据局部性的代码进行分块重新构建,将N个数据对象和m个中心点分别划分成一定大小的块,其中N、m为自然数,以块为单位进行计算,块内的中心点数据会被另一个块内的数据对象重复使用。
6.根据权利要求2所述的基于FPGA的聚类算法的加速系统的设计方法,其特征在于,所述步骤S04包括:
在驱动的编写中,采用访问Linux字符设备的方式访问各个硬件设备;在DMA的驱动编写中采用映射机制进行数据填充;所述映射机制为在内存中预留出一段连续的物理内存,将其映射到内核空间中的一段地址中,然后将内核空间中的该段地址映射到用户空间。
CN201610822554.9A 2016-09-14 2016-09-14 基于fpga的聚类算法的加速系统及其设计方法 Active CN106383695B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610822554.9A CN106383695B (zh) 2016-09-14 2016-09-14 基于fpga的聚类算法的加速系统及其设计方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610822554.9A CN106383695B (zh) 2016-09-14 2016-09-14 基于fpga的聚类算法的加速系统及其设计方法

Publications (2)

Publication Number Publication Date
CN106383695A CN106383695A (zh) 2017-02-08
CN106383695B true CN106383695B (zh) 2019-01-25

Family

ID=57935552

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610822554.9A Active CN106383695B (zh) 2016-09-14 2016-09-14 基于fpga的聚类算法的加速系统及其设计方法

Country Status (1)

Country Link
CN (1) CN106383695B (zh)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107330106B (zh) * 2017-07-07 2020-11-20 苏州浪潮智能科技有限公司 一种基于fpga的数据过滤方法及装置
CN107703507B (zh) * 2017-08-31 2020-04-10 西安空间无线电技术研究所 一种基于fpga的目标聚类实现方法及装置
CN109978575B (zh) * 2017-12-27 2021-06-04 中国移动通信集团广东有限公司 一种挖掘用户流量经营场景的方法及装置
CN108280514B (zh) * 2018-01-05 2020-10-16 中国科学技术大学 基于fpga的稀疏神经网络加速系统和设计方法
WO2019136758A1 (zh) * 2018-01-15 2019-07-18 深圳鲲云信息科技有限公司 人工智能处理装置硬件优化方法、系统、存储介质、终端
CN108932135A (zh) * 2018-06-29 2018-12-04 中国科学技术大学苏州研究院 基于fpga的分类算法的加速平台设计方法
CN109189747B (zh) * 2018-08-07 2022-03-15 浙江工业大学 基于Spark大数据平台的电瓶车用户行为习惯分析方法
CN109740730B (zh) * 2018-12-14 2020-10-23 安徽寒武纪信息科技有限公司 运算方法、装置及相关产品
CN109856610A (zh) * 2019-01-11 2019-06-07 中国船舶重工集团公司第七二四研究所 一种提高处理实时性的跨平台多波束并行检测凝聚方法
US11914448B2 (en) * 2019-02-06 2024-02-27 Tohoku University Clustering device and clustering method
CN111581441B (zh) * 2019-08-30 2022-06-17 上海忆芯实业有限公司 用于聚类计算的加速器
CN110717587B (zh) * 2019-10-11 2024-06-18 北京大学深圳研究生院 一种基于并行加速循环体的性能语义加速方法及其应用
CN112764669B (zh) * 2019-11-01 2021-12-21 北京忆芯科技有限公司 一种硬件加速器
CN111738703B (zh) * 2020-05-29 2023-06-02 中国科学院计算技术研究所 一种加速安全散列算法的加速器
CN113326479A (zh) * 2021-05-28 2021-08-31 哈尔滨理工大学 一种基于fpga的k均值算法的实现方法
CN116933106B (zh) * 2023-07-20 2024-01-26 中国海洋大学 基于无监督聚类的代码分块方法、存储介质和装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1526358A (zh) * 2003-09-23 2004-09-08 中国人民解放军第四军医大学 一种用于床旁图像监护的电阻抗断层成像方法及其装置
CN102694733A (zh) * 2012-06-06 2012-09-26 济南大学 一种获得具有准确应用类型标识的网络流量数据集的方法
CN102799563A (zh) * 2011-05-26 2012-11-28 上海红神信息技术有限公司 一种可重构计算阵列及构建方法
CN104850866A (zh) * 2015-06-08 2015-08-19 电子科技大学 基于SoC-FPGA的自重构K-means聚类技术实现方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9971862B2 (en) * 2014-08-26 2018-05-15 Ecole polytechnique fédérale de Lausanne (EPFL) Pattern-based FPGA logic block and clustering algorithm

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1526358A (zh) * 2003-09-23 2004-09-08 中国人民解放军第四军医大学 一种用于床旁图像监护的电阻抗断层成像方法及其装置
CN102799563A (zh) * 2011-05-26 2012-11-28 上海红神信息技术有限公司 一种可重构计算阵列及构建方法
CN102694733A (zh) * 2012-06-06 2012-09-26 济南大学 一种获得具有准确应用类型标识的网络流量数据集的方法
CN104850866A (zh) * 2015-06-08 2015-08-19 电子科技大学 基于SoC-FPGA的自重构K-means聚类技术实现方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
面向大数据应用的异构可重构平台关键技术研究;陈鹏;《中国博士学位论文全文数据库信息科技辑》;20150915;第I138-17页

Also Published As

Publication number Publication date
CN106383695A (zh) 2017-02-08

Similar Documents

Publication Publication Date Title
CN106383695B (zh) 基于fpga的聚类算法的加速系统及其设计方法
Shi et al. Graph processing on GPUs: A survey
Cecilia et al. Simulating a P system based efficient solution to SAT by using GPUs
US20230024035A1 (en) Zero-copy sparse matrix factorization synthesis for heterogeneous compute systems
CN108229670A (zh) 基于fpga的深度神经网络加速平台
Cano et al. Speeding up the evaluation phase of GP classification algorithms on GPUs
Jeon et al. Deep learning with GPUs
You et al. Spatial join query processing in cloud: Analyzing design choices and performance comparisons
Bhatotia Incremental parallel and distributed systems
Liu Parallel and scalable sparse basic linear algebra subprograms
CN103996216A (zh) 用于曲面细分和几何着色器的电力高效属性处置
JP2023048112A (ja) ツリー構造データ削減のための装置および方法
Alonso et al. doppioDB 1.0: Machine Learning inside a Relational Engine.
Roumelis et al. Parallel processing of spatial batch-queries using xBR+-trees in solid-state drives
Liu et al. G-Learned Index: Enabling Efficient Learned Index on GPU
Jiménez et al. Three‐dimensional thinning algorithms on graphics processing units and multicore CPUs
Davis et al. Paradigmatic shifts for exascale supercomputing
CN115756605A (zh) 一种基于多gpu的浅积云对流参数化方案异构计算方法
US11809849B1 (en) Global modulo allocation in neural network compilation
Zou et al. Supernodal sparse Cholesky factorization on graphics processing units
Angstadt et al. A virtual machine model for accelerating relational database joins using a general purpose GPU
Zhang et al. High-performance spatial join processing on gpgpus with applications to large-scale taxi trip data
Popov et al. Teragraph heterogeneous system for ultra-large graph processing
Possemiers et al. Fast OBJ file importing and parsing in CUDA
Ponce et al. Extension of a Task-based model to Functional programming

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant