CN112925632A - 处理方法及装置、处理器、电子设备及存储介质 - Google Patents
处理方法及装置、处理器、电子设备及存储介质 Download PDFInfo
- Publication number
- CN112925632A CN112925632A CN202110497973.0A CN202110497973A CN112925632A CN 112925632 A CN112925632 A CN 112925632A CN 202110497973 A CN202110497973 A CN 202110497973A CN 112925632 A CN112925632 A CN 112925632A
- Authority
- CN
- China
- Prior art keywords
- target
- cache
- coroutine
- fetched
- stored
- 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.)
- Granted
Links
- 238000003672 processing method Methods 0.000 title abstract description 27
- 238000000034 method Methods 0.000 claims abstract description 69
- 230000008569 process Effects 0.000 claims abstract description 37
- 230000006870 function Effects 0.000 description 11
- 238000010586 diagram Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 3
- 230000006872 improvement Effects 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
-
- 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/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
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)
- Advance Control (AREA)
Abstract
本说明书一个或多个实施例提供一种处理方法,包括:在执行第一协程时,对执行过程中的待取对象确定是否存储在目标缓存中;若确定所述待取对象未存储在所述目标缓存中,对所述待取对象进行预取,并将当前执行的所述第一协程切换到第二协程。本说明书实施例提供的处理方法,可以提升CPU的吞吐能力。
Description
技术领域
本说明书一个或多个实施例涉及计算机技术领域,尤其涉及一种处理方法及装置、处理器、电子设备及计算机可读存储介质。
背景技术
CPU的基本工作是执行存储的指令序列,即程序。程序的执行过程即CPU不断重复取指令、解码指令、执行指令的过程。CPU在获取指令或者获取需要的数据时,首先会访问缓存,若缓存中未存储有要获取的指令或数据,CPU则会访问内存,从内存获取需要的指令或数据。由于内存的读写速度远远低于缓存的读写速度,因此当缓存中未存储有CPU所需的指令或数据时,CPU需要花费大量的时间从内存中获取指令或数据,导致CPU的吞吐能力下降。
发明内容
有鉴于此,本说明书一个或多个实施例提供了一种处理方法及装置、处理器、电子设备及计算机可读存储介质,目的是为了提升处理器的吞吐能力。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种处理方法,包括:
在执行第一协程时,对执行过程中的待取对象确定是否存储在目标缓存中;
若确定所述待取对象未存储在所述目标缓存中,对所述待取对象进行预取,并将当前执行的所述第一协程切换到第二协程。
根据本说明书一个或多个实施例的第二方面,提出了一种处理装置,包括:
确定模块,用于在执行第一协程时,对执行过程中的待取对象确定是否存储在目标缓存中;
切换模块,用于若确定所述待取对象未存储在所述目标缓存中,对所述待取对象进行预取,并将当前执行的所述第一协程切换到第二协程。
根据本说明书一个或多个实施例的第三方面,提出了一种处理器,所述处理器在执行存储器存储的可执行指令时,实现本说明书实施例提供的任一种处理方法。
根据本说明书一个或多个实施例的第四方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现本说明书实施例提供的任一种处理方法。
根据本说明书一个或多个实施例的第四方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现本说明书实施例提供的任一种处理方法。
本说明书实施例提供的处理方法,CPU可以在确定待取对象未存储在目标缓存时不作任何的等待,而是对待取对象进行预取,并立刻切换至第二协程,对第二协程的指令进行处理。由于待取对象的预取和CPU处理第二协程的指令是并行的,因此最大幅度的提升了CPU的吞吐能力。
附图说明
图1是本说明书实施例提供的处理方法的第一流程图。
图2是本说明书实施例提供的处理方法的第二流程图。
图3是本说明书实施例提供的处理方法的第三流程图。
图4是本说明书实施例提供的协程链的示意图。
图5是本说明书实施例提供的处理装置的结构示意图。
图6是本说明书实施例提供的电子设备的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
CPU的基本工作是执行存储的指令序列,即程序。程序的执行过程即CPU不断重复取指令、解码指令、执行指令的过程。CPU在获取指令或者获取需要的数据时,首先会访问缓存,若缓存中未存储有要获取的指令或数据,CPU则会访问内存,从内存获取需要的指令或数据。由于内存的读写速度远远低于缓存的读写速度,因此当缓存中未存储有CPU所需的指令或数据时,CPU需要花费大量的时间从内存中获取指令或数据,导致CPU的吞吐能力下降。
为提高CPU的吞吐能力,本说明书实施例提供了一种处理方法,可以参考图1,图1是本说明书实施例提供的处理方法的第一流程图,该方法包括以下步骤:
步骤102、在执行第一协程时,对执行过程中的待取对象确定是否存储在目标缓存中。
步骤104、若确定所述待取对象未存储在所述目标缓存中,对所述待取对象进行预取,并将当前执行的所述第一协程切换到第二协程。
进程是CPU执行程序的过程,在一个进程中可以引入多个独立的协程,每个协程可以包括多条指令,CPU在执行一个协程时,即在处理该协程中的指令。
在执行第一协程时,CPU在执行过程中需要获取的对象可以包括指令和/或数据,这里,可以将要获取的对象统称为待取对象。CPU在开始一条指令的处理时,首先需要先获取该条指令。具体而言,CPU可以通过访问缓存或内存以获取该条指令,将该条指令取到CPU内的指令寄存器中。而CPU是否需要获取数据取决于当前处理的指令,若当前处理的指令要求CPU获取数据,则CPU可以在该指令的执行阶段通过访问缓存或内存以获取该数据。
缓存是CPU和内存之间的临时交换器,其读写速度要比内存快很多。缓存通常包括多个级别,在一个例子中,缓存可以包括一级缓存、二级缓存和三级缓存,当然,也有可能包括四级缓存或者其他类型的缓存。
不同级别的缓存的读取速度不同,通常而言,一级缓存的读取速度最快,二级缓存的读取速度次之,三级缓存的读取速度比二级缓存更慢。CPU对不同级别的缓存的访问优先级也不同,在获取待取对象时,CPU会先访问一级缓存,若一级缓存未存储有所述待取对象,则CPU将对二级缓存进行访问,若二级缓存也未存储有所述待取对象,则CPU将对三级缓存进行访问……若所有缓存均未存储有所述待取对象,则在CPU将访问内存,从内存中获取所述待取对象。
为更直观的了解不同级别的缓存和内存之间在读取速度上的差异,这里提供一个例子,该例子给出不同级别的缓存和内存的访问延时。在该例子中,一级缓存对应的访问延时可以是4个周期,即CPU从一级缓存获取数据需要花费4个时钟周期,二级缓存对应的访问延时可以是14个周期,三级缓存对应的访问延时可以是50个周期,内存对应的访问延时可以在300个周期以上。可见,访问内存花费的时间远多于访问缓存花费的时间。
由于缓存中存储的只是内存中少部分内容的复制品,因此,当CPU访问缓存以获取待取对象时,缓存中可能存储有所述待取对象,也可能未存储所述待取对象。对于缓存中存储有所述待取对象的情况,可以称为缓存命中,对于缓存中未存储有所述待取对象的情况,可以称为缓存缺失。
若确定待取对象未存储在目标缓存中(即发生缓存缺失,这里,包括预计会发生缓存缺失和实际发生缓存缺失,具体在后文说明),可以对待取对象进行预取。在一种实施方式中,对待取对象进行预取,可以包括发出预取指令Prefetch。所谓预取,即预先从内存中将待取对象取入缓存,以使后续使用待取对象时可以直接从读写速度较快的缓存中获取,减少获取数据的延迟。可以理解的,进行预取的待取对象可以存入任一级别的缓存,但为了最大幅度的减少后续CPU获取待取对象的延时,在一个例子中,对待取对象进行预取可以包括将待取对象预取到一级缓存。
除对待取对象进行预取以外,CPU还可以进行协程的切换,即从当前执行的第一协程切换到第二协程,从而可以对第二协程的指令进行处理。这里,第二协程可以是区别于第一协程的其它协程。
如前所述,CPU在处理一条指令时首先需要获取该指令,而在指令的执行过程中还可能需要获取数据。在相关技术中,CPU只有在获取到需要的指令或数据后才会继续后面的流程,那么,如果在获取指令或数据发生缓存缺失,则CPU只能访问内存以获取指令或数据,获取指令或数据的速度大大降低,导致CPU的吞吐能力大打折扣。
而本说明书实施例提供的处理方法,CPU可以在确定待取对象未存储在目标缓存时不作任何的等待,而是对待取对象进行预取,并立刻切换至第二协程,对第二协程的指令进行处理。由于待取对象的预取和CPU处理第二协程的指令是并行的,因此最大幅度的提升了CPU的吞吐能力。
对于待取对象是否存储在目标缓存中,可以有多种确定方式。在一种实施方式中,可以通过预测的方式确定待取对象是否存储在目标缓存中。在一种实施方式中,也可以通过实际访问目标缓存的方式确定待取对象是否存储在目标缓存中。
在一种实施方式中,若待取对象是目标指令,则在实际访问目标缓存以获取该目标指令之前,可以先根据目标指令的地址对目标指令是否存储在目标缓存中进行预测。CPU在获取目标指令时,CPU中的程序计数器可以指出要获取的指令的地址,因此,目标指令的地址对CPU而言是已知的,根据该目标指令的地址可以对目标缓存是否会发生缓存缺失进行预测。
若预测结果指示目标指令存储在目标缓存中,则可以实际访问目标缓存以获取该目标指令。若预测结果指示目标指令未存储在目标缓存中,即S104中确定待取对象未存储在目标缓存中的条件成立,则可以对待取对象进行预取,并进行协程的切换。
需要注意的是,在一种实施方式中,可以通过协程切换函数(如yield_thread函数)来实现协程的切换,即在进行协程切换时,可以跳转到协程切换函数,对协程切换函数中的指令进行处理。由于协程切换函数在CPU处理过程中的使用频率很高,因此缓存中大概率存储有协程切换函数的指令,CPU在获取协程切换函数的指令时基本不会发生缓存缺失。
可以理解的是,目标缓存可以是任一级别的缓存,比如可以是一级缓存或二级缓存或三级缓存。若目标缓存是一级缓存以外的其它缓存,比如二级缓存,则在一种实施方式中,在预计目标指令是否存储在二级缓存中的同时,可以对一级缓存进行访问以获取目标指令。若通过访问一级缓存获取到了目标指令,则可以利用目标指令进行后续的流程,对目标指令是否存储在二级缓存中的预测结果可以丢弃或不作任何处理;若访问一级缓存发生了缓存缺失,则可以根据预测结果确定是否对二级缓存进行访问,若预测结果指示目标指令存储在二级缓存中,则可以对二级缓存进行访问,若预测结果指示目标数据未存储在二级缓存中,则不对二级缓存进行访问,发出目标指令的预取指令,并切换到下一个协程。
在一种实施方式中,确定待取的目标指令是否存储在目标缓存中,还可以通过访问目标缓存的方式来确定。若通过访问目标缓存发现目标指令存储在目标缓存中,则发生了缓存命中,可以将目标指令取入CPU的指令寄存器中;若通过访问目标缓存发现目标指令未存储在目标缓存中,则发生了缓存缺失,可以对目标指令进行预取,并进行协程的切换。
在确定目标指令是否存储在目标缓存中时,可以通过预测的方式确定,也可以通过实际访问目标缓存确定,可以理解的,在实际应用时,这两种方式可以使用其中的任意一种,也可以两种组合使用。
在一种实施方式中,待取对象可以是待取的目标数据。具体的,在对第一协程中的指令进行处理时,可以先获取第一协程的一条指令后,根据该指令的类型,可以确定是否需要进行数据的获取,若需要进行数据的获取,则要获取的数据可以称为目标数据。在一种实施方式中,在完成指令的获取后,可以在进入该指令的解码阶段之前,对待取的目标数据是否存储在目标缓存中进行第一预测。
对待取的目标数据是否存储在目标缓存中进行第一预测可以有多种方式。在一种实施方式中,可以根据当前处理的指令的地址,预测目标数据是否存储在目标缓存中。在一种实施方式中,可以根据当前处理的指令的地址和类型,预测目标数据是否存储在目标缓存中。可以理解的,由于当前处理的指令还未进入执行阶段,因此无法计算得出准确的目标数据的地址,但此时指令的地址和类型已知,因此可以至少根据当前处理的指令的地址预测目标数据是否存储在目标缓存。
若第一预测的结果指示目标数据未存储在目标缓存中,则可以对目标数据进行预取,并切换到下一个协程;若第一预测的结果指示目标数据存储在目标缓存中,则可以进入当前处理的指令的解码阶段,对当前处理的指令进行解码,并在获得解码结果后进入当前处理的指令的执行阶段。
需要说明的是,在第一预测的结果指示目标数据未存储在目标缓存中时,对目标数据进行预取,具体可以包括:对当前处理的指令进行解码和执行,并在执行该指令的过程中计算得到目标数据的地址,利用该地址发出目标数据的预取指令。在一个例子中,在第一预测结果为缓存缺失时,还可以对当前处理的指令进行标记,对被标记的指令,CPU可以进行解码和执行,但在该指令的执行阶段,CPU并不会执行该指令对应的所有操作,仅利用在执行过程中计算出的数据地址进行预取指令的发出。
在一种实施方式中,可以在当前处理的指令的执行阶段,对待取的目标数据是否存储在目标缓存中进行第二预测。由于当前已经进入了指令的执行阶段,因此CPU可以计算得出待取的目标数据的地址,从而在对待取的目标数据是否存储在目标缓存中进行第二预测时,在一种实施方式中,可以根据计算出的待取的目标数据的地址,预测目标数据是否存储在目标缓存中。
若第二预测的结果指示目标数据未存储在目标缓存中,则可以利用目标数据的地址发出目标数据的预取指令,并切换到下一个协程;若第二预测的结果指示目标数据存储在目标缓存中,则可以实际对目标缓存进行访问,以获取目标数据。
需要注意的是,即便第二预测的结果指示目标数据存储在目标缓存中,在一些情况中,也不一定需要对目标缓存进行访问。如前所述,目标缓存可以是任一级别的缓存,比如可以是一级缓存或二级缓存或三级缓存。若目标缓存是一级缓存以外的其它缓存,比如二级缓存,则在一种实施方式中,在进入当前处理的指令的执行阶段后,CPU可以直接访问一级缓存以获取目标数据,而在访问一级缓存的同时,可以对目标数据是否存储在二级缓存中进行所述二次预测。若通过访问一级缓存获取到了目标数据,则可以直接利用该目标数据进行后续运算,对二级缓存的预测结果可以丢弃或不作任何处理;若访问一级缓存发生了缓存缺失,则可以根据第二预测的结果确定是否对二级缓存进行访问,若第二预测的结果指示目标数据存储在二级缓存中,则可以对二级缓存进行访问,若第二预测的结果指示目标数据未存储在二级缓存中,则不对二级缓存进行访问,发出目标数据的预取指令,并切换到下一个协程。
如前所述,在一种实施方式中,还可以通过实际访问目标缓存的方式确定待取的目标数据是否存储在目标缓存中。而在访问目标缓存时,仍然存在缓存缺失和缓存命中两种情况。若目标数据未存储在目标缓存中,则可以对目标数据进行预取,并进行协程切换;若目标数据存储在目标缓存中,则CPU能够实际获取到目标数据,从而可以利用该目标数据进行后续的运算,完成当前的当前处理的指令的处理。
以上提供了三种确定待取的目标数据是否存储在目标缓存中的方式(第一预测、第二预测和实际访问目标缓存),需要说明的是,这三种方式可以使用其中的任意一种,也可以任意选择其中的至少两种组合使用。
参考前文可知,目标缓存可以是一级缓存、二级缓存或三级缓存等任一级别的缓存。在一种实施方式中,为更大幅度的提升CPU的吞吐能力,目标缓存可以是二级缓存。
可以理解的,无论是通过预测的方式还是通过实际访问的方式,只要确定待取对象未存储在目标缓存中,CPU将直接进行协程切换。由于协程不是***作***内核所管理的,完全由程序所控制,因此协程切换的***开销较小,在一个例子中,协程切换的***开销可以控制在20个周期以内。但即便是20个周期,协程切换仍然造成了开销,因此,在提升CPU的吞吐能力时,需要尽可能使协程切换对CPU的总体吞吐量带来正面影响。
在通过预测的方式确定待取对象是否存储在目标缓存中时,预测的结果并不一定是100%正确的。在前文的一个例子中,一级缓存对应的访问延时是4个周期,二级缓存对应的访问延时是14个周期,三级缓存对应的访问延时是50个周期,内存对应的访问延时在300个周期以上。若目标缓存是二级缓存,预测结果指示待取对象未存储在二级缓存中,但真实情况是待取对象存储在二级缓存中,即发生了预测错误,此时,协程切换耗费了20个周期,比不切换仅仅多花费了6个周期,预测错误的代价较低。但若目标缓存是一级缓存,则在真实情况是缓存命中而预测结果是缓存缺失时,协程切换将多花费16个周期,预测错误的代价较高。若目标缓存是三级缓存,即便真实情况是缓存命中且预测结果也是缓存命中,但由于访问三级缓存本身就要花费50个周期,因此对CPU的吞吐能力的提升相对有限。因此,综合考虑上面的因素,将目标缓存设置为二级缓存可以更大幅度的提升CPU的吞吐能力。
在一种实施方式中,可以参考图2,图2是本说明书实施例提供的处理方法的第二流程图,其中待取对象可以是目标数据,目标缓存可以是二级缓存。具体的,在获取第一协程的的指令(步骤202)后,若确定该指令需要获取数据,则可以在进入该指令(当前处理的指令)的解码阶段之前,对待取的目标数据是否存储在二级缓存中进行第一预测(步骤204)。若第一预测的结果指示目标数据存储在二级缓存中,可以对当前处理的指令进行解码(步骤206),进入当前处理的指令的执行阶段(步骤208)。在当前处理的指令的执行阶段,可以对待取的目标数据是否存储在二级缓存中进行第二预测(步骤214),同时可以访问一级缓存以获取目标数据(步骤210),确定一级缓存是否产生缓存缺失(步骤212)。若第二预测的结果指示目标数据存储在二级缓存中,且通过访问一级缓存也未获取到目标数据(步骤212的判断结果为是),则可以对二级缓存进行访问(步骤216)。通过对二级缓存进行实际的访问,若目标数据存储在二级缓存(步骤218的判断结果为否时),则可以获取到目标数据,利用该目标数据完成对当前处理的指令的处理(步骤220),从而可以获取第一协程的下一条指令,进入该下一条指令的处理流程。
如图2所示,无论是第一预测的结果指示目标数据未存储在二级缓存中,还是第二预测的结果指示目标数据未存储在二级缓存中,CPU都可以对目标数据进行预取(步骤222),并切换到第二协程(步骤224)。而在实际访问二级缓存时,若目标数据未存储在二级缓存中,CPU可以不等待指令的返回,直接切换到第二线程(步骤224),此时获取数据的指令可以自动转化为预取指令,实现对目标数据的预取(步骤222)。
可以参考图3,图3是本说明书实施例提供的处理方法的第三流程图,其中,待取对象可以是目标指令,目标缓存可以是二级缓存。具体的,在对第一协程中的目标指令进行处理时,可以获取目标指令的地址(步骤302),利用该目标指令的地址可以预测目标指令是否存储在二级缓存中(步骤308)。而在进行预测的同时,可以对一级缓存进行访问以获取目标指令(步骤304),确定一级缓存是否发生缓存缺失(步骤306)。若一级缓存发生了缓存缺失(步骤306的判断结果为是时)且预测二级缓存发生缓存命中(步骤308的判断结果为否时),则可以对二级缓存进行访问(步骤310)。若通过访问二级缓存获取到了目标指令(步骤312的判断结果为否时),则可以对目标指令进行解码(步骤314)和执行(步骤316);若访问二级缓存时发生缓存缺失(S312的判断结果为是时),可以对目标指令进行预取(步骤318),并切换到下一个协程(步骤320)。若一级缓存发生缓存缺失且预测结果指示二级缓存发生缓存缺失,也可以对目标指令进行预取(步骤318),并切换到下一个协程(步骤320)。
可以理解的,上述图2和图3提供的处理方法也可以进行结合,在结合后的方案中,CPU在取指令的阶段,若预测发生缓存缺失或者实际访问时发生缓存缺失,可以对待取的目标指令进行预取,进行协程的切换,而在完成指令的获取后,若指令要求CPU获取数据,则CPU也可以在预测或者实际发生缓存缺失时,对待取的目标数据进行预取,进行协程的切换。
在一种实施方式中,第一协程和第二协程可以是协程链中的两个协程,其中,第二协程可以是第一协程在协程链中的下一个协程。具体而言,若CPU在执行第一协程的过程中进行了协程的切换,则切换后的协程可以是第二协程。协程链可以用于指示协程切换的顺序,并且协程链可以是闭环链,即从协程链的第一个协程开始,通过多次切换可以切换至最后一个协程,而在最后一个协程的执行过程再次进行切换,则可以切换回第一个协程。可以参考图4,图4示出一种可能的协程链,该协程链包括5个协程,在第5个协程的执行过程进行协程切换则会切换会第1个协程。
在一种实施方式中,当根据协程链进行多次切换并再次切换回第一协程时,对上一次已经进行预取的待取对象可以不再预测其是否存储在目标缓存中。由于在上一次执行第一协程时已经对待取对象进行了预取,因此当再次切换回第一协程时,待取对象较大概率已经存储在缓存中,可以不再预测是否会发生缓存缺失,可以直接访问缓存以获取该待取对象。但在一种情况中,若协程链包含的协程数量较少,或者连续的进行了多次协程切换,则可能在待取对象预取至缓存之前已经切换回第一协程,此时,若直接访问缓存以获取待取对象将发生缓存缺失。对于此情况,在一种实施方式中,可以再次进行协程的切换,但由于之前已经发出了该待取对象的预取指令,因此可以无需二次发出。
在一种实施方式中,由于第一协程在上一次执行时已经完成部分指令的处理,因此,当根据协程链进行多次切换又重新切换回第一协程时,可以从第一协程的上一个处理流程被协程切换中断的指令开始处理。比如在上一次执行第一协程的过程中,在处理第一协程的第N条指令时,因预测发生或实际发生缓存缺失而进行了协程切换,导致第N条指令的处理流程中断,则在此次切换回第一协程时,可以直接开始第N条指令的处理流程(即取指、解码和执行),无需对第N条指令之前的指令重复处理。
在一种实施方式中,将当前执行的第一协程切换到第二协程时,具体的,可以保存当前执行的第一协程的上下文信息,加载第二协程的上下文信息。这里,协程的上下文信息可以是CPU的寄存器中存储的信息,这些信息可以包括以下一种或多种:用于指示从哪一条指令开始运行的信息、栈顶的位置信息、当前栈帧的位置信息以及CPU其它的中间状态或结果。
在一种实施方式中,CPU在进行协程切换时,还可以清空当前指令以及当前协程后续的其它指令,并可以跳转到前文所述的yield_thread函数,通过执行yield_thread函数中的指令实现协程的切换。yield_thread函数可以用于对一个进程中的多个协程进行切换的函数,其可以保存当前协程的上下文信息,加载下一个协程的上下文信息,从而实现协程的切换。
在一种实施方式中,CPU在获取到第一协程的指令后,可以进行跳转预测,即预测该当前处理的指令是否需要进行跳转,若预测结果是要进行跳转,则可以获取跳转后对应的指令,对跳转后对应的指令进行处理。若预测结果是不需要进行跳转,且当前处理的指令包括取数据指令,则可以对待取的目标数据是否存储在目标缓存中进行第一预测。在进入当前处理的指令的执行阶段后,可以根据计算的结果判断是否需要执行跳转,若需要执行跳转,即之前的跳转预测结果错误,则进行跳转,获取跳转后对应的指令;若不需要进行跳转,则可以对待取的目标数据是否存储在目标缓存中进行第二预测。通过设置跳转预测,可以使CPU在指令处理的前端即可进行跳转,提高了CPU处理指令的速度。
由前文内容可知,可以通过预测的方式确定待取对象是否存储在目标缓存中,换言之,可以通过预测***对待取对象是否存储在目标缓存中进行预测。在一种实施方式中,在每一次进行预测后(至少在对所述目标数据进行所述第一预测后),可以根据待取对象是否存储在目标缓存中的真实结果,对预测***进行更新,以提高预测***的预测准确性。这里,待取对象是否存储在目标缓存中的真实结果可以通过实际访问目标缓存确定。例如,当预测结果对应缓存缺失时,CPU可以对待取对象进行预取,而在预取时,CPU可以实际访问目标缓存,从而可以得知待取对象是否存储在目标缓存中的真实结果。而无论预测结果与真实结果一致还是预测结果与真实结果不同,都可以根据真实结果对预测***进行更新。
本说明书实施例提供的处理方法,CPU可以在确定待取对象未存储在目标缓存时不作任何的等待,而是对待取对象进行预取,并立刻切换至第二协程,对第二协程的指令进行处理。由于待取对象的预取和CPU处理第二协程的指令是并行的,因此最大幅度的提升了CPU的吞吐能力。
本说明书实施例提供了一种处理装置,可以参考图5,图5是本说明书实施例提供的处理装置的结构示意图,该装置可以包括:
确定模块510,用于在执行第一协程时,对执行过程中的待取对象确定是否存储在目标缓存中;
切换模块520,用于若确定所述待取对象未存储在所述目标缓存中,对所述待取对象进行预取,并将当前执行的所述第一协程切换到第二协程。
本说明书实施例提供的处理装置,其可以实现本说明书实施例提供的任一种处理方法,具体的实现方式可以参考前文中的相关说明,在此不再赘述。
本说明书实施例提供的处理装置,CPU可以在确定待取对象未存储在目标缓存时不作任何的等待,而是对待取对象进行预取,并立刻切换至第二协程,对第二协程的指令进行处理。由于待取对象的预取和CPU处理第二协程的指令是并行的,因此最大幅度的提升了CPU的吞吐能力。
本说明书实施例还提供了一种处理器,所述处理器在执行存储器存储的可执行指令时,实现可以实现本说明书实施例提供的任一种处理方法。
在一种实施方式中,还可以根据本说明书实施例提供的处理方法对处理器中的晶体管进行重新印刷,使处理器中的逻辑电路更新为新的逻辑电路,从而处理器可以通过该新的逻辑电路实现本说明书实施例提供的处理方法。
本说明书实施例还提供了一种电子设备,可以参考图6,图6是本说明书实施例提供的电子设备的结构示意图,该设备可以包括:
处理器610、内存620和缓存630。
在一个例子中,缓存可以包括一级缓存、二级缓存和三级缓存,缓存可以集成在CPU中,也可以不集成在CPU中。
处理器与内存可以通过总线640进行数据的交换。
内存和缓存都可以存储可执行指令,当处理器在执行可执行指令时,可以实现本说明书实施例提供的任一种处理方法。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现本说明书实施例提供的任一种处理方法。
上述实施例阐明的装置、模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器 (CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器 (RAM) 和/或非易失性内存等形式,如只读存储器 (ROM) 或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存 (PRAM)、静态随机存取存储器 (SRAM)、动态随机存取存储器 (DRAM)、其他类型的随机存取存储器 (RAM)、只读存储器 (ROM)、电可擦除可编程只读存储器 (EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘 (DVD) 或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。
Claims (19)
1.一种处理方法,其特征在于,包括:
在执行第一协程时,对执行过程中的待取对象确定是否存储在目标缓存中;
若确定所述待取对象未存储在所述目标缓存中,对所述待取对象进行预取,并将当前执行的所述第一协程切换到第二协程。
2.根据权利要求1所述的方法,其特征在于,所述待取对象包括待取的目标指令,所述对执行过程中的待取对象确定是否存储在目标缓存中,包括:
根据所述目标指令的地址,预测所述目标指令是否存储在目标缓存中。
3.根据权利要求2所述的方法,其特征在于,所述目标缓存是二级缓存,所述方法还包括:
在预测所述目标指令是否存储在所述二级缓存中的同时,访问一级缓存以获取所述目标指令。
4.根据权利要求1所述的方法,其特征在于,所述待取对象包括待取的目标指令,所述对执行过程中的待取对象确定是否存储在目标缓存中,包括:
通过访问所述目标缓存以确定所述目标指令是否存储在所述目标缓存中。
5.根据权利要求1所述的方法,其特征在于,所述待取对象包括待取的目标数据,所述目标数据是当前处理的指令要求获取的数据,所述对执行过程中的待取对象确定是否存储在目标缓存中,包括:
在进入所述当前处理的指令的解码阶段之前,对所述目标数据是否存储在所述目标缓存中进行第一预测。
6.根据权利要求5所述的方法,其特征在于,所述对所述目标数据是否存储在所述目标缓存中进行第一预测,包括:
根据所述当前处理的指令的地址,预测所述目标数据是否存储在所述目标缓存中。
7.根据权利要求5所述的方法,其特征在于,在所述第一预测的结果指示所述目标数据未存储在所述目标缓存中时,所述对所述待取对象进行预取,包括:
对所述当前处理的指令进行解码和执行,根据在所述当前处理的指令的执行过程中计算得到的所述目标数据的地址,对所述目标数据进行预取。
8.根据权利要求1所述的方法,其特征在于,所述待取对象包括待取的目标数据,所述目标数据是当前处理的指令要求获取的数据,所述对执行过程中的待取对象确定是否存储在目标缓存,包括:
在所述当前处理的指令的执行阶段,对所述目标数据是否存储在所述目标缓存中进行第二预测。
9.根据权利要求8所述的方法,其特征在于,所述对所述目标数据是否存储在所述目标缓存中进行第二预测,包括:
根据所述目标数据的地址,预测所述目标数据是否存储在目标缓存中,所述目标数据的地址是在所述当前处理的指令的执行过程中计算得到的。
10.根据权利要求8所述的方法,其特征在于,所述目标缓存是二级缓存,所述方法还包括:
在对所述目标数据进行所述第二预测的同时,访问一级缓存以获取所述目标数据。
11.根据权利要求1所述的方法,其特征在于,所述待取对象包括待取的目标数据,所述目标数据是当前处理的指令要求获取的数据,所述对执行过程中的待取对象确定是否存储在目标缓存,包括:
通过访问所述目标缓存以确定所述目标数据是否存储在所述目标缓存中。
12.根据权利要求1-11任一项所述的方法,其特征在于,所述第二协程是所述第一协程在协程链中的下一协程,所述协程链是包括多个协程的闭环链,所述方法还包括:
当根据所述协程链进行多次切换并再次切换回所述第一协程时,对上一次已经进行预取的待取对象不再预测其是否存储在所述目标缓存中。
13.根据权利要求1-11任一项所述的方法,其特征在于,所述第二协程是所述第一协程在协程链中的下一协程,所述协程链是包括多个协程的闭环链,所述方法还包括:
当根据所述协程链进行多次切换并再次切换回所述第一协程时,从所述第一协程的上一个处理流程被协程切换中断的指令开始处理。
14.根据权利要求1所述的方法,其特征在于,所述将当前执行的所述第一协程切换到第二协程,包括:
保存当前执行的所述第一协程的上下文信息,加载所述第二协程的上下文信息。
15.根据权利要求1所述的方法,其特征在于,所述对执行过程中的待取对象确定是否存储在目标缓存中,包括:
通过预测***预测所述待取对象是否存储在所述目标缓存中;
所述方法还包括:
根据所述待取对象是否存储在所述目标缓存中的真实结果,对所述预测***进行更新。
16.一种处理装置,其特征在于,包括:
确定模块,用于在执行第一协程时,对执行过程中的待取对象确定是否存储在目标缓存中;
切换模块,用于若确定所述待取对象未存储在所述目标缓存中,对所述待取对象进行预取,并将当前执行的所述第一协程切换到第二协程。
17.一种处理器,其特征在于,所述处理器在执行存储器存储的可执行指令时,实现如权利要求1-15任一项所述的方法。
18.一种电子设备,其特征在于,包括:
处理器;
用于存储处理器可执行指令的存储器,所述存储器包括内存和缓存;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1-15中任一项所述的方法。
19.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该指令被处理器执行时实现如权利要求1-15中任一项所述方法的步骤。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210307601.1A CN114661442B (zh) | 2021-05-08 | 处理方法及装置、处理器、电子设备及存储介质 | |
CN202110497973.0A CN112925632B (zh) | 2021-05-08 | 2021-05-08 | 处理方法及装置、处理器、电子设备及存储介质 |
PCT/CN2022/090295 WO2022237585A1 (zh) | 2021-05-08 | 2022-04-29 | 处理方法及装置、处理器、电子设备及存储介质 |
US18/558,869 US20240231887A1 (en) | 2021-05-08 | 2022-04-29 | Processing method and apparatus, processor, electronic device, and storage medium |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110497973.0A CN112925632B (zh) | 2021-05-08 | 2021-05-08 | 处理方法及装置、处理器、电子设备及存储介质 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210307601.1A Division CN114661442B (zh) | 2021-05-08 | 处理方法及装置、处理器、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112925632A true CN112925632A (zh) | 2021-06-08 |
CN112925632B CN112925632B (zh) | 2022-02-25 |
Family
ID=76174813
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110497973.0A Active CN112925632B (zh) | 2021-05-08 | 2021-05-08 | 处理方法及装置、处理器、电子设备及存储介质 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20240231887A1 (zh) |
CN (1) | CN112925632B (zh) |
WO (1) | WO2022237585A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113626348A (zh) * | 2021-07-22 | 2021-11-09 | 支付宝(杭州)信息技术有限公司 | 业务执行方法、装置和电子设备 |
WO2022237585A1 (zh) * | 2021-05-08 | 2022-11-17 | 支付宝(杭州)信息技术有限公司 | 处理方法及装置、处理器、电子设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050182907A1 (en) * | 2004-02-17 | 2005-08-18 | International Business Machines Corporation | Cache residence prediction |
CN102346714A (zh) * | 2011-10-09 | 2012-02-08 | 西安交通大学 | 用于多核处理器的一致性维护装置及一致***互方法 |
US20120102269A1 (en) * | 2010-10-21 | 2012-04-26 | Oracle International Corporation | Using speculative cache requests to reduce cache miss delays |
US20190018772A1 (en) * | 2017-07-13 | 2019-01-17 | International Business Machines Corporation | Selective downstream cache processing for data access |
CN109298922A (zh) * | 2018-08-30 | 2019-02-01 | 百度在线网络技术(北京)有限公司 | 并行任务处理方法、协程框架、设备、介质和无人车 |
US20190278858A1 (en) * | 2018-03-08 | 2019-09-12 | Sap Se | Access pattern based optimization of memory access |
US20190278608A1 (en) * | 2018-03-08 | 2019-09-12 | Sap Se | Coroutines for optimizing memory access |
CN111078632A (zh) * | 2019-12-27 | 2020-04-28 | 珠海金山网络游戏科技有限公司 | 一种文件数据的管理方法及装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005129001A (ja) * | 2003-09-30 | 2005-05-19 | Toshiba Corp | プログラム実行装置、マイクロプロセッサ及びプログラム実行方法 |
US20080147977A1 (en) * | 2006-07-28 | 2008-06-19 | International Business Machines Corporation | Design structure for autonomic mode switching for l2 cache speculative accesses based on l1 cache hit rate |
US20180173631A1 (en) * | 2016-12-21 | 2018-06-21 | Qualcomm Incorporated | Prefetch mechanisms with non-equal magnitude stride |
CN112199400B (zh) * | 2020-10-28 | 2024-07-16 | 支付宝(杭州)信息技术有限公司 | 用于数据处理的方法和装置 |
CN112925632B (zh) * | 2021-05-08 | 2022-02-25 | 支付宝(杭州)信息技术有限公司 | 处理方法及装置、处理器、电子设备及存储介质 |
-
2021
- 2021-05-08 CN CN202110497973.0A patent/CN112925632B/zh active Active
-
2022
- 2022-04-29 WO PCT/CN2022/090295 patent/WO2022237585A1/zh active Application Filing
- 2022-04-29 US US18/558,869 patent/US20240231887A1/en active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050182907A1 (en) * | 2004-02-17 | 2005-08-18 | International Business Machines Corporation | Cache residence prediction |
US20120102269A1 (en) * | 2010-10-21 | 2012-04-26 | Oracle International Corporation | Using speculative cache requests to reduce cache miss delays |
CN102346714A (zh) * | 2011-10-09 | 2012-02-08 | 西安交通大学 | 用于多核处理器的一致性维护装置及一致***互方法 |
US20190018772A1 (en) * | 2017-07-13 | 2019-01-17 | International Business Machines Corporation | Selective downstream cache processing for data access |
US20190278858A1 (en) * | 2018-03-08 | 2019-09-12 | Sap Se | Access pattern based optimization of memory access |
US20190278608A1 (en) * | 2018-03-08 | 2019-09-12 | Sap Se | Coroutines for optimizing memory access |
CN109298922A (zh) * | 2018-08-30 | 2019-02-01 | 百度在线网络技术(北京)有限公司 | 并行任务处理方法、协程框架、设备、介质和无人车 |
CN111078632A (zh) * | 2019-12-27 | 2020-04-28 | 珠海金山网络游戏科技有限公司 | 一种文件数据的管理方法及装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022237585A1 (zh) * | 2021-05-08 | 2022-11-17 | 支付宝(杭州)信息技术有限公司 | 处理方法及装置、处理器、电子设备及存储介质 |
CN113626348A (zh) * | 2021-07-22 | 2021-11-09 | 支付宝(杭州)信息技术有限公司 | 业务执行方法、装置和电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN112925632B (zh) | 2022-02-25 |
CN114661442A (zh) | 2022-06-24 |
WO2022237585A1 (zh) | 2022-11-17 |
US20240231887A1 (en) | 2024-07-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11416256B2 (en) | Selectively performing ahead branch prediction based on types of branch instructions | |
US8683129B2 (en) | Using speculative cache requests to reduce cache miss delays | |
US9886385B1 (en) | Content-directed prefetch circuit with quality filtering | |
WO2022237585A1 (zh) | 处理方法及装置、处理器、电子设备及存储介质 | |
WO1998041923A1 (en) | Penalty-based cache storage and replacement techniques | |
JP7513527B2 (ja) | 予測ミス回復の待ち時間を短縮するための偶発的な分岐予測の格納 | |
US8601240B2 (en) | Selectively defering load instructions after encountering a store instruction with an unknown destination address during speculative execution | |
CN111324556B (zh) | 用于将预定数目的数据项预取到高速缓存的方法和*** | |
KR20150110337A (ko) | 미스 후 미스의 검색을 가속화하기 위해 레벨2 캐시에서 레벨2 분기 목적지 버퍼를 분리하는 장치 및 그 방법 | |
JP2008186233A (ja) | 命令キャッシュプリフェッチ制御方法及びその装置 | |
US10719441B1 (en) | Using predictions of outcomes of cache memory access requests for controlling whether a request generator sends memory access requests to a memory in parallel with cache memory access requests | |
KR102571623B1 (ko) | 초기 리턴 예측을 갖는 분기 타겟 버퍼 | |
CN106649143B (zh) | 一种访问缓存的方法、装置及电子设备 | |
CN114661442B (zh) | 处理方法及装置、处理器、电子设备及存储介质 | |
US20170364357A1 (en) | Fetching Instructions in an Instruction Fetch Unit | |
EP2348399B1 (en) | System and method for processing interrupts in a computing system | |
US11204771B2 (en) | Methods and apparatus for handling processor load instructions | |
JP2007293814A (ja) | プロセッサ装置とその処理方法 | |
CN114358179A (zh) | 处理器的预取训练方法、处理装置、处理器和计算设备 | |
JP2007293815A (ja) | プロセッサ装置とその処理方法 |
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 |