CN117667223B - 一种数据冒险解决方法、计算引擎、处理器及电子设备 - Google Patents

一种数据冒险解决方法、计算引擎、处理器及电子设备 Download PDF

Info

Publication number
CN117667223B
CN117667223B CN202410139500.7A CN202410139500A CN117667223B CN 117667223 B CN117667223 B CN 117667223B CN 202410139500 A CN202410139500 A CN 202410139500A CN 117667223 B CN117667223 B CN 117667223B
Authority
CN
China
Prior art keywords
instruction
state
event
waiting
scoreboard
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
CN202410139500.7A
Other languages
English (en)
Other versions
CN117667223A (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.)
Shanghai Denglin Juzhen Technology Co ltd
Shanghai Denglin Technology Co ltd
Original Assignee
Shanghai Denglin Juzhen Technology Co ltd
Shanghai Denglin Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Denglin Juzhen Technology Co ltd, Shanghai Denglin Technology Co ltd filed Critical Shanghai Denglin Juzhen Technology Co ltd
Priority to CN202410139500.7A priority Critical patent/CN117667223B/zh
Publication of CN117667223A publication Critical patent/CN117667223A/zh
Application granted granted Critical
Publication of CN117667223B publication Critical patent/CN117667223B/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
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • 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/3802Instruction prefetching
    • G06F9/3816Instruction alignment, e.g. cache line crossing
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding

Landscapes

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

Abstract

本申请涉及一种数据冒险解决方法、计算引擎、处理器及电子设备,属于计算机领域。该方法包括:从指令缓存中读取指令;根据等待指令记分牌的状态,判断是否对读取的指令进行调度;在对读取的指令进行调度后,若读取的指令为等待指令,根据等待指令携带的指令ID,查询事件记录项中对应的事件状态,根据事件状态对等待指令进行冒险检测;在等待指令存在冒险时,更新等待指令记分牌的状态;若读取的指令为非等待指令,为非等待指令分配事件ID,并在事件记录项中添加当前分配的事件ID的事件状态,并更新事件状态为使用状态。采用本申请所示的方案,可以提高数据冒险解决方案的灵活性,减少不必要的阻塞,提升系统性能。

Description

一种数据冒险解决方法、计算引擎、处理器及电子设备
技术领域
本申请属于计算机技术领域,具体涉及一种数据冒险解决方法、计算引擎、处理器及电子设备。
背景技术
当存在数据依赖或者名依赖的两条指令在执行期间产生重叠,并且这种重叠会改变相关操作数的访问顺序时,会发生数据冒险。数据冒险主要分为写后读,写后写,读后写等类型,其在不同类型处理器内的处理方式不尽相同。高性能处理器通常采用复杂的控制技术来处理数据冒险,以尽可能缩短单指令延迟。
GPU(Graphics Processing Unit,图形处理器)或GPGPU(General Purposecomputing on Graphics Processing Units,通用图形处理器)因为具有显著的线程并行性而更注重吞吐率,通常采用记分牌技术来解决数据冒险。所谓记分牌技术,以寄存器为例,每个寄存器会对应记分牌的一个比特位,当指令发射时,相应的寄存器比特位被置为使用状态,如果后续指令想要读写的寄存器所对应的记分牌比特位为使用状态,则发生数据冒险。该后续指令的发射被阻塞直到相应的比特位变为未使用状态,数据冒险解除为止。显而易见,记分牌的规模随着寄存器的数量而变化,如果寄存器数量比较多,则记分牌的硬件开销相应也会比较大。
除寄存器以外,存储器也存在数据冒险,由于存储器的空间太大,给每个存储器位置分配一个记分牌比特位既不划算也不现实,因而通常对存储器操作进行分类,对不同类型的操作分配不同的记分牌比特位的方式来实现。或者,采用计数器来记录不同类型的操作的未完成数目,并通过插入特殊指令,等待相应计数器的值降到一定阈值的方式来解决数据冒险。对于存储器数据冒险,不管是按操作类型分配记分牌还是计数器配合特殊指令的方式,因为仅区分操作类型,而无法区分同类型的不同指令,从而带来不必要的阻塞,进而影响性能。
发明内容
鉴于此,本申请的目的在于提供一种数据冒险解决方法、计算引擎、处理器及电子设备,以改善现有数据冒险解决方案存在的灵活性差及容易产生不必要阻塞的问题。
本申请的实施例是这样实现的:
第一方面,本申请实施例提供了一种数据冒险解决方法,包括:从指令缓存中读取指令;根据等待指令记分牌的状态,判断是否对读取的指令进行调度;在对读取的指令进行调度后,若读取的指令为等待指令,根据所述等待指令携带的指令ID,查询事件记录项中对应的事件状态,根据所述事件状态对所述等待指令进行冒险检测,其中,若所述事件状态为使用状态,表征所述等待指令存在冒险,所述事件记录项中记录有各条指令的事件状态;在所述等待指令存在冒险时,更新所述等待指令记分牌的状态;若读取的指令为非等待指令,为所述非等待指令分配事件ID,并在事件记录项中添加当前分配的事件ID的事件状态,并更新事件状态为使用状态。
本申请实施例中,通过引入等待指令记分牌,以此判断是否对读取的指令进行调度,若等待指令记分牌的状态为未使用状态,对后续读取的指令进行调度,同时,在对读取的指令进行调度后,若读取的指令为等待指令,还要对等待指令进行冒险检测;在等待指令存在冒险时,更新等待指令记分牌的状态(如更新为使用状态),这样便可灵活高效的解决数据冒险问题。若读取的指令为非等待指令,为非等待指令分配事件ID,并在事件记录项中添加当前分配的事件ID的事件状态,并更新事件状态为使用状态,通过引入事件ID,使得在对等待指令进行冒险检测时,仅需要查询事件记录项中对应的事件状态,便可快速确定等待指令是否存在冒险,提高了方案的灵活性,从而改善现有数据冒险解决方案存在的灵活性差及容易产生不必要阻塞的问题。
结合第一方面实施例的一种可能的实施方式,在所述等待指令记分牌的状态为使用状态时,所述方法还包括:暂停对读取的指令进行调度,直至所述等待指令记分牌的状态更新为未使用状态。
本申请实施例中,在等待指令记分牌的状态为使用状态时,暂停对读取的指令进行调度,直至等待指令记分牌的状态更新为未使用状态,这样可以避免出现数据冒险。
结合第一方面实施例的一种可能的实施方式,为所述非等待指令分配事件ID,包括:为所述非等待指令分配未使用的事件ID,并更新事件记分牌中事件ID的分配状态,其中,所述事件记分牌用于记录各个事件ID的分配状态。
本申请实施例中,通过引入事件记分牌来记录并更新各个事件ID的分配状态(如将已分配的事件ID的状态更新为已分配状态),从而快速为非等待指令分配未使用的事件ID。
结合第一方面实施例的一种可能的实施方式,所述方法还包括:待所述非等待指令执行完成后,更新所述非等待指令对应的事件记录项的状态为未使用状态,并对应更新所述事件记分牌中所述非等待指令对应的事件ID的分配状态。
本申请实施例中,非等待指令执行完成后,更新非等待指令对应的事件记录项的状态为未使用状态,避免引起不必要的等待。并对应更新事件记分牌中非等待指令对应的事件ID的分配状态为未分配状态,使得事件ID可以重复使用,如之前的指令执行完后,为其分配的事件ID可回收重复利用,使得可以仅根据有限的事件ID完成数据冒险检测,而不需要引入大量的事件ID。
第二方面,本申请实施例还提供了一种计算引擎,包括:指令缓存、管理模块以及计算核;指令缓存,用于缓存指令;管理模块,用于从所述指令缓存中读取指令,根据等待指令记分牌的状态,判断是否对读取的指令进行调度;在对读取的指令进行调度后,若读取的指令为等待指令,根据所述等待指令携带的指令ID,查询所述事件记录项中对应的事件状态;根据所述事件状态对所述等待指令进行冒险检测,在所述等待指令存在冒险时,更新所述等待指令记分牌的状态,其中,若所述事件状态为使用状态,表征所述等待指令存在冒险,所述事件记录项中记录有各条指令的事件状态;若读取的指令为非等待指令,为所述非等待指令分配事件ID,并在事件记录项中添加当前分配的事件ID的事件状态,并更新事件状态为使用状态;计算核,用于对调度的指令进行处理。
结合第二方面实施例的一种可能的实施方式,所述管理模块,还用于在所述等待指令记分牌的状态为使用状态时,暂停对读取的指令进行调度,直至所述等待指令记分牌的状态更新为未使用状态。
结合第二方面实施例的一种可能的实施方式,所述管理模块包括:状态记录单元、调度单元以及冒险检测单元;状态记录单元,用于记录并更新所述等待指令记分牌的状态,以及记录并更新事件记录项的事件状态;调度单元,用于对读取的指令进行调度;冒险检测单元,与所述状态记录单元、所述调度单元连接,所述冒险检测单元,用于根据等待指令记分牌的状态,判断是否将读取的指令调度至所述调度单元;以及在对读取的指令进行调度后,若读取的指令为等待指令,根据所述等待指令携带的指令ID,查询所述事件记录项中对应的事件状态;根据所述事件状态对所述等待指令进行冒险检测,在所述等待指令存在冒险时,指示所述状态记录单元更新所述等待指令记分牌的状态;若读取的指令为非等待指令,指示所述状态记录单元为所述非等待指令分配事件ID,并在所述事件记录项中添加当前分配的事件ID的事件状态,并更新事件状态为使用状态。
结合第二方面实施例的一种可能的实施方式,所述状态记录单元包括:事件记分牌、事件循环缓冲、事件分配器以及等待指令记分牌;事件记分牌,用于记录并更新事件ID的分配状态;事件循环缓冲,用于记录并更新事件记录项中对应的事件状态;事件分配器,与所述事件记分牌和所述事件循环缓冲连接,所述事件分配器,用于为所述非等待指令分配未使用的事件ID,并更新所述事件记分牌中事件ID的分配状态;等待指令记分牌,用于记录并更新等待指令记分牌的状态。
结合第二方面实施例的一种可能的实施方式,所述冒险检测单元还用于待所述非等待指令执行完成后,指示所述状态记录单元更新所述非等待指令对应的事件记录项的状态为未使用状态,并对应更新所述事件记分牌中所述非等待指令对应的事件ID的分配状态。
本申请第二方面实施例的有益效果与前述第一方面实施例的有益效果相同,此处不在介绍。
第三方面,本申请实施例还提供了一种处理器,包括如上述第二方面实施例和/或结合第二方面实施例的任一种可能的实施方式提供的计算引擎。
第四方面,本申请实施例还提供了一种电子设备,包括:如第三方面实施例提供的处理器。
本申请的其他特征和优点将在随后的说明书阐述。本申请的目的和其他优点可通过在所写的说明书以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。通过附图所示,本申请的上述及其它目的、特征和优势将更加清晰。
图1示出了本申请实施例提供的一种计算引擎的结构示意图。
图2示出了本申请实施例提供的一种管理模块的结构示意图。
图3示出了本申请实施例提供的又一种管理模块的结构示意图。
图4示出了本申请实施例提供的一种状态记录单元的结构示意图。
图5示出了本申请实施例提供的一种事件循环缓冲记录事件记录项的原理示意图。
图6示出了了本申请实施例提供的一种基于事件的冒险检测的原理示意图。
图7示出了了本申请实施例提供的一种数据冒险解决方法的流程示意图。
图8示出了本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。以下实施例可作为示例,用于更加清楚地说明本申请的技术方案,而不能以此来限制本申请的保护范围。本领域技术人员可以理解的是,在不相冲突的情况下,下述实施例及实施例中的特征可以相互结合。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中诸如“第一”、“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
再者,本申请中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。
在本申请实施例的描述中,除非另有明确的规定和限制,技术术语“电连接”可以是直接电性连接,也可以是通过中间媒介间接电性连接。
为了提高数据冒险解决方案的灵活性,减少不必要的阻塞,提升系统(如处理器所在电子设备系统,或处理器所在系统)性能,本申请实施例提供了一种数据冒险解决方法、计算引擎、处理器及电子设备。
本申请所示的数据冒险解决方法可以灵活应用于多种不同类型的处理器,包括但不限于:中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)、数字信号处理器(Digital Signal Processor,DSP)、图形处理器(GraphicsProcessing Unit,GPU)、通用图形处理器(General Purpose computing on GraphicsProcessing Units,GPGPU)等。
其中,处理器包括计算引擎,计算引擎的数目可配置。下面结合图1对计算引擎的结构进行说明。计算引擎包括:指令缓存、管理模块以及计算核。指令缓存和计算核分别与管理模块连接。
指令缓存,用于缓存指令,其中,指令包括但不限于等待指令以及非等待指令。非等待指令又可以进一步分为运算指令、访存指令等。
管理模块,用于从指令缓存中读取指令,根据等待指令记分牌的状态,判断是否对读取的指令进行调度,在对读取的指令进行调度后,若读取的指令为等待指令,对等待指令进行冒险检测,在等待指令存在冒险时,更新等待指令记分牌的状态,如将其更新为使用状态。
计算核,用于对调度的指令进行处理,例如,计算核可以准备指令所需的源操作数,然后依据指令类型将源操作数发送至对应的执行单元执行,最后将执行结果写回指定位置。特别的,若为访存指令,还需进一步送至数据缓存进行处理。其中,计算核包括不同的执行单元。
其中,等待指令记分牌的状态用于判断是否对读取的指令进行调度,其包括使用状态和未使用状态,一些可能的实施方式下,使用状态可以用1表示,未使用状态可以用0表示,当然也可以反过来表示。若当前等待指令记分牌的状态为未使用状态,则对读取的指令进行调度,反之,若当前等待指令记分牌的状态为使用状态,则不对读取的指令进行调度。
一种可选实施方式下,可以是一个线程组对应一个等待指令记分牌,当计算引擎包含多个线程组时,相应的应包含多个等待指令记分牌。在一些可能的实施方式下,计算引擎还包括用于构建线程组的线程组构造模块。线程组构造模块可以根据输入的配置信息,例如,根据输入的工作组的维度以及每个维度的尺寸,构造出线程组并为其分配硬件资源。其中,一个工作组包括多个线程组,某一个周期内,同一个线程组中的各个线程执行同一条指令。
在等待指令记分牌的状态为未使用状态时,管理模块会对读取的指令进行调度,在对读取的指令进行调度后,若读取的指令为等待指令,对等待指令进行冒险检测。在对等待指令进行冒险检测时,其过程可以是:根据等待指令携带的指令ID (标识)查询事件记录项中对应的事件状态,根据事件状态对等待指令进行冒险检测,其中,若事件状态为使用状态,表征等待指令存在冒险,反之,若事件状态为未使用状态,表征等待指令不存在冒险。在等待指令存在冒险时,更新等待指令记分牌的状态。
其中,事件状态包括使用状态和未使用状态,可以用1表示事件状态的使用状态,用0表示事件状态的未使用状态,当然也可以反过来表示。
其中,事件记录项中记录有各条指令的事件状态,通过记录的事件状态可以获悉对应的指令的执行情况。可以根据等待指令中携带的指令ID,查询记录项中对应事件ID的事件状态,若事件状态为使用状态,表征等待指令存在冒险,若事件状态为未使用状态,表征等待指令不存在冒险。若存在冒险,后续指令(等待指令之后的指令)将被阻塞直到冒险解除为止,若不存在冒险,后续指令可参与后续的调度。
一种可选实施方式下,管理模块,还用于在对读取的指令进行调度后,若读取的指令为非等待指令,为非等待指令分配事件ID,并在事件记录项中添加当前分配的事件ID的事件状态,并更新事件状态为使用状态。其中,管理模块在为非等待指令分配事件ID,其分配的事件ID是唯一的,即同一时刻不同的指令不存在相同的事件ID。该事件ID可以重复使用,如之前的指令执行完后,为其分配的事件ID可回收重复利用。其中,事件记录项中记录的事件为非等待指令分配的事件。
本申请通过为指令分配不同事件,并结合等待指令等待相应指令的方式来灵活解决数据冒险。例如,若当前指令需要等待时,会发送等待指令,待当前指令执行完后,才执行之后与当前指令存在关联的指令。通过在等待指令中携带需要等待的指令ID,基于该指令ID对应的事件状态便可确定后续指令是否需要等待。
在为非等待指令分配事件ID时,可以为非等待指令分配未使用的事件ID,为了便于获悉事件ID的分配情况,一种可选实施方式下,管理模块,还会用事件记分牌来记录各个事件ID的分配状态,相应地,管理模块在为非等待指令分配未使用的事件ID后,还会更新事件记分牌中事件ID的分配状态。如对于事件记分牌中已分配的事件ID的分配状态进行更新,将其更新为已分配状态。
其中,分配状态包括已分配状态和未分配状态,可以用1表示已分配状态,用0表示未分配状态,当然,也可以反过来表示。例如,事件记分牌包括100个事件ID(并不限于此),对于已分配的事件ID,其对应的分配状态为1,对于未分配的事件ID,其对应的分配状态为0。一种可选实施方式下,待非等待指令执行完成后,更新非等待指令对应的事件记录项的状态为未使用状态,并对应更新事件记分牌中非等待指令对应的事件ID的分配状态,以保证本方案能够准确的执行,以及事件记分牌中事件ID可重复使用。
一种可选实施方式下,管理模块,还用于在等待指令记分牌的状态为使用状态时,暂停对读取的指令进行调度,直至等待指令记分牌的状态更新为未使用状态。此外,管理模块还会将指令记分牌的状态从使用状态更新为未使用状态,例如,当查询到事件记录项中等待指令携带的指令ID 对应的事件状态为未使用状态后,便可更新等待指令记分牌的状态为未使用状态。
在一些可能的实施方式中,如图2所示,管理模块包括:状态记录单元、调度单元、冒险检测单元,冒险检测单元与状态记录单元、调度单元连接。
状态记录单元,用于记录并更新等待指令记分牌的状态。例如,当根据等待指令携带的指令ID 查询到事件记录项中等待指令携带的指令ID 对应的事件状态为未使用状态后,便可更新等待指令记分牌的状态为未使用状态。
调度单元,用于对读取的指令进行调度。调度单元可以是在冒险检测单元的指示下,对冒险检测单元读取的指令进行调度。
冒险检测单元,用于根据等待指令记分牌的状态,判断是否将读取的指令调度至调度单元;以及在对读取的指令进行调度后,若读取的指令为等待指令,对等待指令进行冒险检测,在等待指令存在冒险时,指示状态记录单元更新等待指令记分牌的状态。
其中,当管理模块用于根据等待指令携带的指令ID 查询事件记录项中对应的事件状态,根据事件状态对等待指令进行冒险检测时,状态记录单元还用于记录事件记录项的状态,事件记录项中记录有各条指令的事件状态。冒险检测单元,具体用于根据等待指令携带的指令ID,查询事件记录项中对应的事件状态;根据所述事件状态对等待指令进行冒险检测;其中,若事件状态为使用状态,表征等待指令存在冒险。在等待指令存在冒险时,冒险检测单元指示状态记录单元更新等待指令记分牌的状态。
一种实施方式下,当管理模块还用于在对读取的指令进行调度后,若读取的指令为非等待指令,为非等待指令分配事件ID,并在事件记录项中添加当前分配的事件ID的事件状态,并更新事件状态为使用状态,状态记录单元还用于为非等待指令分配事件ID,并更新事件记录项的事件状态,冒险检测单元还用于在对读取的指令进行调度后,若读取的指令为非等待指令,指示状态记录单元为非等待指令分配事件ID,并在事件记录项中添加当前分配的事件ID的事件状态,并更新事件状态为使用状态。
一种实施方式下,当管理模块还用于待所述非等待指令执行完成后,更新所述非等待指令对应的事件记录项的状态为未使用状态,并对应更新所述事件记分牌中所述非等待指令对应的事件ID的分配状态,冒险检测单元还用于待非等待指令执行完成后,指示状态记录单元更新所述非等待指令对应的事件记录项的状态为未使用状态,并对应更新所述事件记分牌中所述非等待指令对应的事件ID的分配状态。
一种实施方式下,管理模块还包括:取指令单元、指令缓冲和指令译码单元,如图3所示。其中,取指令单元与指令缓存和指令缓冲连接,指令缓冲和指令译码单元连接,指令译码单元和冒险检测单元连接。
取指令单元用于从指令缓存读取指令并写回指令缓冲。一种实施方式下,指令缓冲的数量可以是多个,如与线程组的数量对应,一个线程组对应一个指令缓冲。每一个指令缓冲用于存储对应线程组的指令。
指令译码单元负责从指令缓冲中读取指令并进行译码,并经由冒险检测单元根据状态记录单元记录的状态对译码后的指令进行检测。若等待指令记分牌的状态为使用状态,则该指令会暂停调度,直至等待指令记分牌的状态更新为未使用状态为止。若等待指令记分牌的状态为未使用状态,则可以参与后续调度。一种实施方式下,指令译码单元的数量也可以是多个,与指令缓冲的数量一一对应。
调度单元基于一定的调度策略,对可以调度的指令进行调度,并将调度出的指令和状态信息(如对应的事件ID)分发至下游的计算核。一种实施方式下,状态记录单元包括:事件记分牌、事件循环缓冲、事件分配器和等待指令记分牌,如图4所示。事件分配器与事件记分牌、事件循环缓冲以及冒险检测单元连接。
事件记分牌,用于记录并更新事件ID的分配状态,已分配的事件ID对应的状态用1表示,未分配的事件ID对应的状态用0表示。若所有的事件ID对应的状态均为1,则会发生结构冒险,指令被阻塞。事件记分牌与冒险检测单元连接,用于在冒险检测单元的指示下,更新对应的分配状态。
事件循环缓冲,用于记录并更新事件记录项中对应的事件状态,例如,主要用于记录最近正在执行的N条指令的事件状态。事件记录项包含N个记录项和1个写指针,如图5所示,图5中灰色部分为已使用的记录项,其余部分的记录项未使用。N为可配置参数,以N为16为例,每个记录项包含一个事件状态位和事件ID,如1表示使用状态,0表示未使用状态。事件循环缓冲在收到事件分配器发送的事件ID时,先根据当前写指针将其写入对应的记录项,并将事件状态位置1,然后更新写指针至下一记录项。而在收到下游模块的反馈的指令执行完成后,则根据反馈数据里面的事件ID找到匹配的记录项并将其状态位置0。
事件分配器,与事件记分牌、事件循环缓冲以及冒险检测单元连接,事件分配器,用于在冒险检测单元的指示下为非等待指令分配未使用的事件ID,并更新事件记分牌中事件ID的分配状态。
等待指令记分牌,与冒险检测单元连接,等待指令记分牌用于记录并更新等待指令记分牌的状态。例如,当等待指令存在冒险时,将等待指令记分牌的状态更新为1。等待指令记分牌与冒险检测单元连接,用于在冒险检测单元的指示下,更新等待指令记分牌的状态。
本申请的等待指令可按需插入到指令中的特定位置,与硬件协同解决数据冒险。等待指令不仅可以指定需要等待的最近执行的多条指令(最多N条,与事件循环缓冲记录项数量相同),也可以指定等待所有指令。若配置为等待最近执行的两条指令(i,j),首先,将等待指令中指定的i映射到事件循环缓冲中的记录项I(当前记录项指针-i),查询事件循环缓冲中记录项I的状态位,若其状态位为未使用状态则进入下一流程,否则继续查询直到状态位为未使用状态。然后,将等待指令中指定的j映射到事件循环缓冲中的记录项J(J = 记录项指针- j),查询事件循环缓冲中记录项J的状态位,若其状态位为未使用状态则进入下一流程,否则继续查询直到状态位为未使用状态。最后结束等待流程,冒险解除。其原理图如图6所示。
其中,上述的i、j即为等待指令携带的指令ID,当指令ID为具体数值(如示例的i、j)时,表示需要等待最近发生的多条指令。
可以理解的是,图6仅示出了先检查指令i对应的事件状态,检查完后再检查指令j对应的事件状态的情形,在一些可能的实施方式中,也可以反过来,如先检查指令j对应的事件状态,检查完后再检查指令i对应的事件状态;或者,二者也可以同时检测,即同时检测检查指令i、指令j对应的事件状态。
若指定为等待所有指令,则查询对应的事件记分牌,若事件记分牌内任意一笔事件的对应状态为使用状态,则继续查询直至所有事件的状态位为未使用状态。最后结束等待流程,冒险解除。
为了更好理解,下面通过示例来比较基于计数器的方案与本申请所述方案。例如,假设涉及7条指令,前4条load指令分别从存储器地址a、b、c、d读取数据存至寄存器r0、r1、r2、r3,其后2条store指令分别从寄存器r4、r5读取数据存至存储器地址e、f,最后的add指令依赖于r0、r1做加法操作。
若采用按操作类型分别计数的方式,伪代码如下:
// load_counter==0, store_counter==0;
load r0, mem[a]// load_counter++;
load r1, mem[b]// load_counter++;
load r2, mem[c]// load_counter++;
load r3, mem[d]// load_counter++;
store mem[e], r4 // store_counter++;
store mem[f], r5 // store_counter++;
wait load_counter(n);
add r8, r0, r1。
每条load指令分别对load计数器加1,共加4,每条store指令分别对store计数器加1,共加2,则在一个按序执行的处理器内,可通过wait指令等待load计数器值降至2的方式来解决数据冒险。但存储器的访问延迟差异很大,按序执行会影响访存性能,因而一般采用乱序执行。在一个乱序执行的处理器内,因为load指令返回顺序的不确定,则只能通过wait指令等待load计数器值降至0的方式来解决数据冒险。
若采用本申请所述方案,如伪代码如下所示:
load r0, mem[a] // allocate event, pointer++;
load r1, mem[b] // allocate event, pointer++;
load r2, mem[c] // allocate event, pointer++;
load r3, mem[d] // allocate event, pointer++;
store mem[e], r4 // allocate event, pointer++;
store mem[f], r5 // allocate event, pointer++;
wait instruction(5,6) ;
add r8, r0, r1。
每条load或者store指令都会由硬件分配唯一的事件ID,并写入当前写指针所指向的事件循环缓冲的记录项,再递增写指针。通过wait指令指定等待最近执行的第5,6条指令(“store mem[f]”与“store mem[e]”为最近执行的第1、2条指令,依次类推,“load r1”与“load r0”指令为最近执行的第5、6条指令),并由硬件映射为事件循环缓冲内对应的记录项,即实现对相应数据冒险的检测。待“load r1”与“load r0”指令返回,根据携带的事件ID找到匹配的记录项,将其状态位更新为未使用状态,相应数据冒险即被解除。
基于上述比对可知,本发明所示的解决方案,可精准的建立数据依赖关系,避免不必要的等待(如不需要等待load计数器值降至0),具有极大的灵活性,从而提升处理器的性能。
本申请还提供了一种数据冒险解决方法,下面结合图7对本申请实施例提供的数据冒险解决方法进行说明。
S1:从指令缓存中读取指令。
指令缓存中存储有很多指令,包括非等待指令以及等待指令,在从指令缓存中读取指令时,按照顺序读取指令即可。
S2:根据等待指令记分牌的状态,判断是否对读取的指令进行调度。
读取到指令后,可以根据指令记分牌的状态,判断是否对读取的指令进行调度,若等待指令记分牌的状态为未使用状态,则对读取的指令进行调度。
可选地,在等待指令记分牌的状态为使用状态时,方法还包括:暂停对读取的指令进行调度,直至等待指令记分牌的状态更新为未使用状态。
S3:在对读取的指令进行调度后,若读取的指令为等待指令,对所述等待指令进行冒险检测。
其中,对等待指令进行冒险检测的过程可以是:根据等待指令携带的指令ID ,查询事件记录项中对应的事件状态,其中,事件记录项中记录有各条指令的事件状态(如1表示使用状态,0表示未使用状态);根据事件状态对等待指令进行冒险检测;其中,若事件状态为使用状态,表征等待指令存在冒险。若事件状态为未使用状态,表征等待指令不存在冒险。
在对读取的指令进行调度后,方法还包括:若读取的指令为非等待指令,为非等待指令分配事件ID,并在事件记录项中添加当前分配的事件ID的事件状态,并更新事件状态为使用状态。
其中,在为非等待指令分配事件ID的过程可以是:为非等待指令分配未使用的事件ID,并更新事件记分牌中事件ID的分配状态,其中,事件记分牌用于记录各个事件ID的分配状态,对于已分配的事件ID,其对应的分配状态为1,对于未分配的事件ID,其对应的分配状态为0。
一种实施方式下,待非等待指令执行完成后,更新非等待指令对应的事件记录项的状态为未使用状态,并对应更新事件记分牌中非等待指令对应的事件ID的分配状态,如将其更新为0,这样该事件ID便可重复分配。
S4:在所述等待指令存在冒险时,更新所述等待指令记分牌的状态。
在等待指令存在冒险时,更新等待指令记分牌的状态,如将等待指令记分牌的状态更新为1,之后会暂停对读取的指令进行调度,直至等待指令记分牌的状态更新为未使用状态,当查询到事件记录项中等待指令携带的指令ID 对应的事件状态为未使用状态后,便可更新等待指令记分牌的状态为未使用状态。
本申请实施例所提供的数据冒险解决方法,其实现原理及产生的技术效果和前述计算引擎实施例相同,为简要描述,方法实施例部分未提及之处,可参考前述计算引擎实施例中相应内容。
如图8所示,图8示出了本申请实施例提供的一种电子设备200的结构框图。所述电子设备200包括:收发器210、存储器220、通讯总线230以及处理器240。
所述收发器210、所述存储器220、处理器240各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线230或信号线实现电性连接。其中,收发器210用于收发数据。存储器220用于存储计算机程序,如计算机程序包括至少一个可以软件或固件(Firmware)的形式存储于所述存储器220中或固化在所述电子设备200的操作系统(Operating System,OS)中的软件功能模块。所述处理器240,用于执行存储器220中存储的计算机程序。例如,处理器240,用于执行上述的数据冒险解决方法。
其中,存储器220可以是,但不限于,随机存取存储器(RandomAccessMemory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-OnlyMemory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。
处理器240可能是一种集成电路芯片,具有信号的处理能力。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit, CPU)、网络处理器(NetworkProcessor,NP)、微处理器等;还可以是数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。或者该处理器240也可以是任何常规的处理器等。
其中,上述的电子设备200,包括但不限于手机、平板、电脑等。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。

Claims (11)

1.一种数据冒险解决方法,其特征在于,包括:
从指令缓存中读取指令;
根据等待指令记分牌的状态,判断是否对读取的指令进行调度,其中,等待指令记分牌的状态用于判断是否对读取的指令进行调度,其包括使用状态和未使用状态,若等待指令记分牌的状态为使用状态,则暂停对读取的指令进行调度,直至所述等待指令记分牌的状态更新为未使用状态,若等待指令记分牌的状态为使用状态,则对读取的指令进行调度;
在对读取的指令进行调度后,若读取的指令为等待指令,根据所述等待指令携带的指令ID,查询事件记录项中对应的事件状态,根据所述事件状态对所述等待指令进行冒险检测,其中,所述事件状态包括使用状态和未使用状态,若所述事件状态为使用状态,表征所述等待指令存在冒险,所述等待指令之后的指令将被阻塞直至冒险解除为止,若所述事件状态为未使用状态,表征所述等待指令不存在冒险,所述等待指令之后的指令可参与后续的调度;所述事件记录项中记录有各条指令的事件状态;
在所述等待指令存在冒险时,更新所述等待指令记分牌的状态;
若读取的指令为非等待指令,为所述非等待指令分配事件ID,并在事件记录项中添加当前分配的事件ID的事件状态,并更新事件状态为使用状态。
2.根据权利要求1所述的方法,其特征在于,在所述等待指令记分牌的状态为使用状态时,所述方法还包括:
暂停对读取的指令进行调度,直至所述等待指令记分牌的状态更新为未使用状态。
3.根据权利要求1所述的方法,其特征在于,为所述非等待指令分配事件ID,包括:
为所述非等待指令分配未使用的事件ID,并更新事件记分牌中事件ID的分配状态,其中,所述事件记分牌用于记录各个事件ID的分配状态。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
待所述非等待指令执行完成后,更新所述非等待指令对应的事件记录项的状态为未使用状态,并对应更新所述事件记分牌中所述非等待指令对应的事件ID的分配状态。
5.一种计算引擎,其特征在于,包括:
指令缓存,用于缓存指令;
管理模块,用于从所述指令缓存中读取指令,根据等待指令记分牌的状态,判断是否对读取的指令进行调度;在对读取的指令进行调度后,若读取的指令为等待指令,根据所述等待指令携带的指令ID,查询事件记录项中对应的事件状态;根据所述事件状态对所述等待指令进行冒险检测,在所述等待指令存在冒险时,更新所述等待指令记分牌的状态,其中,等待指令记分牌的状态用于判断是否对读取的指令进行调度,其包括使用状态和未使用状态,若等待指令记分牌的状态为使用状态,则暂停对读取的指令进行调度,直至所述等待指令记分牌的状态更新为未使用状态,若等待指令记分牌的状态为使用状态,则对读取的指令进行调度;所述事件状态包括使用状态和未使用状态,若所述事件状态为使用状态,表征所述等待指令存在冒险,所述等待指令之后的指令将被阻塞直至冒险解除为止,若所述事件状态为未使用状态,表征所述等待指令不存在冒险,所述等待指令之后的指令可参与后续的调度;所述事件记录项中记录有各条指令的事件状态;若读取的指令为非等待指令,为所述非等待指令分配事件ID,并在事件记录项中添加当前分配的事件ID的事件状态,并更新事件状态为使用状态;
计算核,用于对调度的指令进行处理。
6.根据权利要求5所述的计算引擎,其特征在于,所述管理模块,还用于在所述等待指令记分牌的状态为使用状态时,暂停对读取的指令进行调度,直至所述等待指令记分牌的状态更新为未使用状态。
7.根据权利要求6所述的计算引擎,其特征在于,所述管理模块包括:
状态记录单元,用于记录并更新所述等待指令记分牌的状态,以及记录并更新事件记录项的事件状态;
调度单元,用于对读取的指令进行调度;
冒险检测单元,与所述状态记录单元、所述调度单元连接,所述冒险检测单元,用于根据等待指令记分牌的状态,判断是否将读取的指令调度至所述调度单元;以及在对读取的指令进行调度后,若读取的指令为等待指令,根据所述等待指令携带的指令ID,查询所述事件记录项中对应的事件状态;根据所述事件状态对所述等待指令进行冒险检测,在所述等待指令存在冒险时,指示所述状态记录单元更新所述等待指令记分牌的状态;若读取的指令为非等待指令,指示所述状态记录单元为所述非等待指令分配事件ID,并在所述事件记录项中添加当前分配的事件ID的事件状态,并更新事件状态为使用状态。
8.根据权利要求7所述的计算引擎,其特征在于,所述状态记录单元包括:
事件记分牌,用于记录并更新事件ID的分配状态;
事件循环缓冲,用于记录并更新事件记录项中对应的事件状态;
事件分配器,与所述事件记分牌和所述事件循环缓冲连接,所述事件分配器,用于为所述非等待指令分配未使用的事件ID,并更新所述事件记分牌中事件ID的分配状态;
等待指令记分牌,用于记录并更新等待指令记分牌的状态。
9.根据权利要求8所述的计算引擎,其特征在于,所述冒险检测单元还用于待所述非等待指令执行完成后,指示所述状态记录单元更新所述非等待指令对应的事件记录项的状态为未使用状态,并对应更新所述事件记分牌中所述非等待指令对应的事件ID的分配状态。
10.一种处理器,其特征在于,包括如权利要求5-9任一项所述的计算引擎。
11.一种电子设备,其特征在于,包括:如权利要求10所述的处理器。
CN202410139500.7A 2024-02-01 2024-02-01 一种数据冒险解决方法、计算引擎、处理器及电子设备 Active CN117667223B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410139500.7A CN117667223B (zh) 2024-02-01 2024-02-01 一种数据冒险解决方法、计算引擎、处理器及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410139500.7A CN117667223B (zh) 2024-02-01 2024-02-01 一种数据冒险解决方法、计算引擎、处理器及电子设备

Publications (2)

Publication Number Publication Date
CN117667223A CN117667223A (zh) 2024-03-08
CN117667223B true CN117667223B (zh) 2024-04-12

Family

ID=90077318

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410139500.7A Active CN117667223B (zh) 2024-02-01 2024-02-01 一种数据冒险解决方法、计算引擎、处理器及电子设备

Country Status (1)

Country Link
CN (1) CN117667223B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103207776A (zh) * 2013-03-11 2013-07-17 浙江大学 一种gene乱序发射处理器内核
CN110297662A (zh) * 2019-07-04 2019-10-01 深圳芯英科技有限公司 指令乱序执行的方法、处理器及电子设备
CN110647362A (zh) * 2019-09-11 2020-01-03 上海高性能集成电路设计中心 一种基于记分牌原理的两级缓置发射装置
CN115576610A (zh) * 2022-11-18 2023-01-06 北京数渡信息科技有限公司 一种适用于通用顺序发射处理器的指令分发处理方法及装置
CN116028127A (zh) * 2023-02-14 2023-04-28 浙江大学 适用于多发射处理器指令重排的启发式方法及装置
CN116483443A (zh) * 2023-03-16 2023-07-25 电子科技大学 基于RISCV扩展指令的行人定位Soc系统及其方法
CN116521229A (zh) * 2023-02-15 2023-08-01 东南大学 一种基于risc-v向量指令扩展的低硬件开销向量处理器架构
CN116628023A (zh) * 2023-05-10 2023-08-22 云和恩墨(北京)信息技术有限公司 等待事件类型查询方法、装置、存储介质和电子设备

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8947254B2 (en) * 2012-06-15 2015-02-03 Fedex Corporate Services, Inc. Systems and methods for managing information associated with boxes used in the delivery of packages
US11275590B2 (en) * 2015-08-26 2022-03-15 Huawei Technologies Co., Ltd. Device and processing architecture for resolving execution pipeline dependencies without requiring no operation instructions in the instruction memory
US10191724B2 (en) * 2016-10-21 2019-01-29 Intel Corporation Compiler-based instruction scoreboarding
US10779032B2 (en) * 2018-06-28 2020-09-15 At&T Intellectual Property I, L.P. System and method for timing management for digital video recording

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103207776A (zh) * 2013-03-11 2013-07-17 浙江大学 一种gene乱序发射处理器内核
CN110297662A (zh) * 2019-07-04 2019-10-01 深圳芯英科技有限公司 指令乱序执行的方法、处理器及电子设备
CN110647362A (zh) * 2019-09-11 2020-01-03 上海高性能集成电路设计中心 一种基于记分牌原理的两级缓置发射装置
CN115576610A (zh) * 2022-11-18 2023-01-06 北京数渡信息科技有限公司 一种适用于通用顺序发射处理器的指令分发处理方法及装置
CN116028127A (zh) * 2023-02-14 2023-04-28 浙江大学 适用于多发射处理器指令重排的启发式方法及装置
CN116521229A (zh) * 2023-02-15 2023-08-01 东南大学 一种基于risc-v向量指令扩展的低硬件开销向量处理器架构
CN116483443A (zh) * 2023-03-16 2023-07-25 电子科技大学 基于RISCV扩展指令的行人定位Soc系统及其方法
CN116628023A (zh) * 2023-05-10 2023-08-22 云和恩墨(北京)信息技术有限公司 等待事件类型查询方法、装置、存储介质和电子设备

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
利用Tomasulo算法处理数据相关的流水线CPU设计;李山山等;《实验室研究与探索》;20141215;第90-95页 *
混合无等待流水线干扰管理调度方法研究;薄洪光;张鑫;潘裕韬;;运筹与管理;20160625(第03期);第246-254页 *
面向CPS的时间戳不确定事件调度算法;李芳芳;刘冲;于戈;;计算机科学与探索(第06期);第887-896页 *

Also Published As

Publication number Publication date
CN117667223A (zh) 2024-03-08

Similar Documents

Publication Publication Date Title
US8041928B2 (en) Information handling system with real and virtual load/store instruction issue queue
JP5474176B2 (ja) 依存行列を用いる割り当て解除されたロード命令の追跡
JP5295228B2 (ja) 複数のプロセッサを備えるシステム、ならびにその動作方法
US20090100249A1 (en) Method and apparatus for allocating architectural register resources among threads in a multi-threaded microprocessor core
US11204770B2 (en) Microprocessor having self-resetting register scoreboard
US20120265971A1 (en) Allocation of counters from a pool of counters to track mappings of logical registers to physical registers for mapper based instruction executions
US9378069B2 (en) Lock spin wait operation for multi-threaded applications in a multi-core computing environment
US20160026463A1 (en) Zero cycle move using free list counts
US10967813B2 (en) Vehicle control device
US20220413849A1 (en) Providing atomicity for complex operations using near-memory computing
US20090177868A1 (en) Apparatus, system, and method for discontiguous multiple issue of instructions
CN118295710B (zh) 多端口发射的空间回收方法、装置、设备和介质
CN115437691B (zh) 一种针对risc-v矢量与浮点寄存器的物理寄存器堆分配装置
CN117667223B (zh) 一种数据冒险解决方法、计算引擎、处理器及电子设备
US11995445B2 (en) Assignment of microprocessor register tags at issue time
JP4789269B2 (ja) ベクトル処理装置及びベクトル処理方法
US7529913B2 (en) Late allocation of registers
US20030182538A1 (en) Method and system for managing registers
JP7325437B2 (ja) リソースインデックス置換を実施するデバイス及びプロセッサ
CN118295711B (zh) 多端口发射的空间分配方法、装置、设备和介质
US6711655B1 (en) Finding available memory space by finding its associated memory transfer controller
JP4755232B2 (ja) コンパイラ
KR100490438B1 (ko) 연산/저장을 병행하여 처리하는 장치 및 방법
JP3473506B2 (ja) パイプライン処理装置
CN118747086A (zh) 双端口发射的空间分配方法、装置、设备和介质

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