CN116804915A - 基于存储器的数据交互方法、处理器、设备以及介质 - Google Patents

基于存储器的数据交互方法、处理器、设备以及介质 Download PDF

Info

Publication number
CN116804915A
CN116804915A CN202311089901.8A CN202311089901A CN116804915A CN 116804915 A CN116804915 A CN 116804915A CN 202311089901 A CN202311089901 A CN 202311089901A CN 116804915 A CN116804915 A CN 116804915A
Authority
CN
China
Prior art keywords
data
memory
instruction
execution unit
address
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
Application number
CN202311089901.8A
Other languages
English (en)
Other versions
CN116804915B (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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202311089901.8A priority Critical patent/CN116804915B/zh
Publication of CN116804915A publication Critical patent/CN116804915A/zh
Application granted granted Critical
Publication of CN116804915B publication Critical patent/CN116804915B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Advance Control (AREA)

Abstract

本申请实施例提供了一种基于存储器的数据交互方法、处理器、设备以及介质,该方法包括:从第一指令队列中获取第一操作指令,在第一存储器中获取与第一操作指令相关联的第一数据;对第一数据执行第一操作指令对应的第一类型操作,生成第二数据,将第二数据写入第二存储器中,根据第二数据在第二存储器中的写入进度,更新第二数据的数据状态;当第二数据的数据状态为准备完成时,在第二存储器中获取与第二操作指令相关联的第二数据;第二操作指令是从第二指令队列中获取到的;对第二数据执行第二操作指令对应的第二类型操作,生成第三数据,将第三数据写入第三存储器中。采用本申请实施例,可以降低不同操作之间的同步开销。

Description

基于存储器的数据交互方法、处理器、设备以及介质
技术领域
本申请涉及人工智能技术领域,尤其涉及一种基于存储器的数据交互方法、处理器、设备以及介质。
背景技术
AI(Artificial Intelligence,人工智能)处理器作为一种特殊的芯片,结合了人工智能技术和机器学习,使芯片的移动设备足够智能,可以模仿人类的大脑,用于优化深度学习AI的工作,也是使用多个具有特定功能的处理器的系统。其中,AI处理器涉及数据搬运操作、向量操作以及矩阵操作等操作,这些操作之间可能存在依赖关系,如向量操作可以依赖于数据搬运操作生成的结果数据等。
目前的AI处理器中,通过描述不同操作之间的等待关系来保证依赖条件得到满足,如向量操作可以等待数据搬运操作执行完成后再开始执行。在描述AI处理器中的不同操作的同步关系时,可以在具有等待关系的两个操作之间插入barrier(屏障),wait(等待)类型的指令;barrier(屏障),wait(等待)类型的指令可以在指令控制电路或指令队列中执行,这类指令可以阻塞后续指令下发到指令队列,直到所等待的条件被满足。由于指令下发到执行单元至执行单元发起数据传输之间存在时延,造成不同操作之间的同步开销过大。
发明内容
本申请实施例提供一种基于存储器的数据交互方法、处理器、设备以及介质,可以降低不同操作之间的同步开销。
本申请实施例一方面提供了一种基于存储器的数据交互方法,包括:
从第一指令队列中获取第一操作指令,在第一存储器中获取与第一操作指令相关联的第一数据;
对第一数据执行第一操作指令对应的第一类型操作,生成第二数据,将第二数据写入第二存储器中,根据第二数据在第二存储器中的写入进度,更新第二数据的数据状态;
当第二数据的数据状态为准备完成时,在第二存储器中获取与第二操作指令相关联的第二数据;第二操作指令是从第二指令队列中获取到的;
对第二数据执行第二操作指令对应的第二类型操作,生成第三数据,将第三数据写入第三存储器中;第二类型操作依赖于第一类型操作生成的第二数据。
本申请实施例一方面提供了一种处理器,处理器包括N个执行单元以及N个指令队列,一个执行单元对应一个指令队列,N个执行单元包括第一执行单元和第二执行单元,N个指令队列包括第一执行单元对应的第一指令队列,以及第二执行单元对应的第二指令队列,N为大于1的整数;
第一执行单元用于从第一指令队列中获取第一操作指令,在第一存储器中获取与第一操作指令相关联的第一数据;
第一执行单元还用于对第一数据执行第一操作指令对应的第一类型操作,生成第二数据,将第二数据写入第二存储器中,根据第二数据在第二存储器中的写入进度,更新第二数据的数据状态;
第二执行单元用于当第二数据的数据状态为准备完成时,在第二存储器中获取与第二操作指令相关联的第二数据;第二操作指令是从第二指令队列中获取到的;
第二执行单元还用于对第二数据执行第二操作指令对应的第二类型操作,生成第三数据,将第三数据写入第三存储器中;第二类型操作依赖于第一类型操作生成的第二数据。
其中,该处理器还包括指令控制单元;
指令控制单元用于获取第一初始指令和第二初始指令,对第一初始指令和第二初始指令进行译码处理,得到第一初始指令对应的第一操作指令,以及第二初始指令对应的第二操作指令;
指令控制单元还用于将第一操作指令传输至第一指令队列,将第二操作指令传输至第二指令队列。
本申请实施例一方面提供了一种计算机设备,包括存储器和处理器,存储器与处理器相连,存储器用于存储计算机程序,处理器用于调用计算机程序,以使得该计算机设备执行本申请实施例中上述一方面提供的方法。
本申请实施例一方面提供了一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序,计算机程序适于由处理器加载并执行,以使得具有处理器的计算机设备执行本申请实施例中上述一方面提供的方法。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述一方面提供的方法。
在本申请实施例中,从第一指令队列中获取第一操作指令,在第一存储器中获取与第一操作指令相关联的第一数据,对第一数据执行第一操作指令对应的第一类型操作,生成第二数据,将第二数据写入第二存储器中;当第二数据在第二存储器中的数据状态为准备完成时,在第二存储器中获取与第二操作指令相关联的第二数据,第二操作指令是从第二指令队列中获取到的;对第二数据执行第二操作指令对应的第二类型操作,生成第三数据,将第三数据写入第三存储器中。其中,第一操作指令和第二操作指令需要从存储器中读入数据,完成特定的操作,并将结果写回存储器中,第一操作指令和第二操作指令需要按照正确的顺序来执行,通过第二数据在第二存储器中的写入进度,更新第二数据的数据状态,当数据状态为准备完成时,立刻执行第二操作指令对应的操作,这样可以减少不同操作之间的同步开销。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种处理器的架构示意图一;
图2是本申请实施例提供的一种基于存储器的数据交互方法的流程示意图一;
图3是本申请实施例提供的一种采用数据标签标明数据状态的示意图;
图4是本申请实施例提供的一种处理器中的不同操作之间的执行流程示意图一;
图5是本申请实施例提供的一种处理器中的不同操作之间的操作拆分示意图一;
图6是本申请实施例提供的一种基于存储器的数据交互方法的流程示意图二;
图7是本申请实施例提供的一种采用地址存储空间标明数据状态的示意图;
图8是本申请实施例提供的一种处理器中的不同操作之间的操作拆分示意图二;
图9是本申请实施例提供的一种处理器的架构示意图二;
图10是本申请实施例提供的一种处理器中的不同操作之间的执行流程示意图二;
图11是本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
请参见图1,图1是本申请实施例提供的一种处理器的架构示意图一。该处理器可以为人工智能(AI)处理器,AI处理器是用于运行AI算法的专用处理器,与传统处理器的区别在于专用性或通用性的侧重上,AI处理器可以理解为通过牺牲一定通用性,换来特定业务的效率提升。AI的三大支撑是硬件、算法以及数据,其中硬件是指运行AI算法的芯片与相对应的计算平台;AI处理器可以包括GPU(Graphics Processing Unit,图形处理器)、ASIC(Application Specific Integrated Circuit,专用集成电路)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)等,本申请对此不做限定。为便于理解,本申请实施例以AI处理器为例,对处理器架构进行描述。
其中,AI处理器架构可以包括指令控制单元、N个指令队列、N个执行单元以及S个存储器(存储器也可以称为存储单元)等,一个指令队列可以对应一个执行单元,一个执行单元可以对应一个或两个存储器,当然,一个存储器可以对应一个或多个执行单元,N和S均可以为大于1的整数。例如,当一个执行单元需要读入的数据和最终写入的数据存放在同一个存储器中时,那么此时的一个执行单元对应一个存储器;当一个执行单元需要读入的数据和最终写入的数据存放在不同的存储器中时,那么此时的一个执行单元对应两个存储器。其中,N个指令队列可以是指AI处理器中用于接收不同操作指令的指令队列;N个执行单元可以是指AI处理器中用于执行不同操作的执行单元;S个存储器可以是指与AI处理器中的各个执行单元进行数据交互的存储器。应当理解,本申请实施例对AI处理器架构中的指令队列、执行单元以及存储器的数量不做限定。
如图1所示,AI处理器架构中的N个指令队列具体可以包括:DMA(Direct MemoryAccess,直接存储器访问,DMA是一种内存访问技术)指令队列、向量指令队列以及矩阵指令等,该DMA指令队列可以包括:DMA0指令队列、DMA1指令队列、DMA2指令队列以及DMA3指令队列等,为便于描述,可以简称为DMA0~3指令队列,此处的DMA0~3可以理解为DMA操作指令的优先级,如DMA0操作指令的优先级高于DMA1操作指令的优先级,DMA1操作指令的优先级高于DMA2操作指令的优先级等。
AI处理器架构中的N个执行单元具体可以包括:DMA0执行单元、向量执行单元、DMA1执行单元、DMA2执行单元、矩阵执行单元以及DMA3执行单元等。其中,DMA0执行单元用于执行DMA0指令队列中的DMA0操作指令,向量执行单元用于执行向量指令队列中的向量操作指令,DMA1执行单元用于执行DMA1指令队列中的DMA1操作指令,DMA2执行单元用于执行DMA2指令队列中的DMA2操作指令,矩阵执行单元用于执行矩阵指令队列中的矩阵操作指令,DMA3执行单元用于执行DMA3指令队列中的DMA3操作指令。
AI处理器架构中的S个存储器具体可以具体包括:存储器A、存储器B、存储器C、存储器D以及存储器E等。其中,存储器A可以与DMA0执行单元、DMA1执行单元进行数据交互,存储器B可以与DMA0执行单元、向量执行单元、DMA1执行单元进行数据交互,存储器C可以与DMA2执行单元、DMA3执行单元进行交互,存储器D可以与DMA2执行单元、矩阵执行单元进行数据交互,存储器E可以与矩阵执行单元、DMA3执行单元进行数据交互等。
AI处理器中的指令控制单元负责取指令以及指令译码处理。AI处理器中的DMA0~3指令队列、向量指令队列以及矩阵指令队列负责接收指令控制单元译码处理后的操作指令,并将译码处理后的操作指令下发至对应的执行单元。DMA0~3执行单元、向量执行单元以及矩阵执行单元负责接收对应指令队列下发的操作指令并执行相应的操作,不同的执行单元可以用于执行不同的操作。
如图1所示,AI处理器架构中的6个执行单元可以执行以下6种操作,该6种操作具体如下:
DMA0操作:由AI处理器架构中的DMA0执行单元执行,DMA0执行单元在执行DMA0操作的过程中,可以读入存储器A中的数据0,进而可以对该数据0执行DMA0操作,生成数据1,并将数据1写回到存储器B。
向量操作:由AI处理器架构中的向量执行单元执行,向量执行单元在执行向量操作的过程中,可以读入存储器B中的数据1,进而可以对数据1执行向量操作,生成数据2,并将数据2写回到存储器B。
DMA1操作:由AI处理器架构中的DMA1执行单元执行,DMA1执行单元在执行DMA1操作的过程中,可以读入存储器B中的数据2,进而可以对该数据2执行DMA1操作,生成数据3,并将数据3写回到存储器A。
DMA2操作:由AI处理器架构中的DMA2执行单元执行,DMA2执行单元在执行DMA2操作的过程中,可以读入存储器D中的数据4,进而可以对该数据4执行DMA2操作,生成数据5,并将数据5写回到存储器D。
矩阵操作:由AI处理器架构中的矩阵执行单元执行,矩阵执行单元在执行矩阵操作的过程中,可以读入存储器D中的数据5,进而可以对该数据4执行矩阵操作,生成数据6,并将数据6写回到存储器E。
DMA3操作:由AI处理器架构中的DMA3执行单元执行,DMA3执行单元在执行DMA3操作的过程中,可以读入存储器E中的数据6,并对该数据6执行DMA3操作,生成数据7,并将数据7写回到存储器C。
其中,DMA0~3操作可以包括但不限于线性拷贝,数据转置以及数据镶边等。向量操作可以包括但不限于向量之间的加、减、乘、除等数学运算,指数、对数等科学运算,移位,排序等操作;矩阵操作可以包括但不限于矩阵乘法、矩阵乘累加等操作。上述数据0至数据7可以为存储器中所存储的数据块,此处的数据块可以是一组或几组按顺序连续排列在一起的记录,是存储器与输入设备、输出设备或外寄存器之间进行传输的数据单位。
可以理解的是,上述6种操作中存在以下4种依赖性关系,该4种依赖性关系可以表示如下:
依赖关系1:向量操作依赖于DMA0操作生成的结果数据。
依赖关系2:DMA1操作依赖于向量操作生成的结果数据。
依赖关系3:矩阵操作依赖于DMA2操作生成的结果数据。
依赖关系4:DMA3操作依赖于矩阵操作生成的结果数据。
其中,AI处理器内部存多种硬件执行单元(例如,图1所示的DMA0~3执行单元、向量执行单元以及矩阵执行单元等),DMA0~3操作需要负责不同存储器之间的数据搬运,矩阵操作和向量操作等操作需要从存储器读入数据,完成特定的操作,并将结果写回存储器。不同的硬件执行单元的数据搬运和计算操作,需要根据生产消费者关系,存储器容量限制等要求同步,以保证不同硬件执行单元的操作按照正确的顺序来执行。本申请实施例提出了一种分布式同步硬件架构来保证不同操作的执行顺序的正确性,如处理器数据搬运操作的同步控制在硬件执行单元与存储器进行数据交互时进行。
需要说明的是,图1所示的AI处理器架构可以配置在服务器中,也可以配置在终端设备中,本申请对此不做限定。其中,终端设备可以包括智能手机、平板电脑、笔记本电脑、掌上电脑、移动互联网设备(mobile internet device,MID)、可穿戴设备(例如智能手表、智能手环等)、智能语音交互设备、智能家电(例如智能电视等)、车载设备、飞行器等电子设备,本申请对终端设备的类型不做限定。服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,本申请对服务器的类型不做限定。
请参见图2,图2是本申请实施例提供的一种基于存储器的数据交互方法的流程示意图一;可以理解的是,该基于存储器的数据交互方法可以由处理器执行,本申请实施例以AI处理器为例进行说明。如图2所示,该基于存储器的数据交互方法可以包括步骤S101至步骤S104:
步骤S101,从第一指令队列中获取第一操作指令,在第一存储器中获取与第一操作指令相关联的第一数据。
本申请实施例中,AI处理器可以包括指令控制单元、N个执行单元以及N个指令队列,一个执行单元对应一个指令队列;为便于理解,下面以N个执行单元中的第一执行单元和第二执行单元为例进行描述,此处第二执行单元所执行的操作依赖于第一执行单元所执行的操作生成的结果数据,N个指令队列中与第一执行单元对应的指令队列称为第一指令队列,N个指令队列中与第二执行单元对应的指令队列称为第二指令队列。
AI处理器中的指令控制单元可以获取第一初始指令和第二初始指令,对第一初始指令和第二初始指令进行译码处理,得到第一初始指令对应的第一操作指令,以及第二初始指令对应的第二操作指令;通过指令控制单元将第一操作指令传输至第一指令队列,将第二操作指令传输至第二指令队列。
其中,在指令执行过程中,可以提前预取后续指令,并一次读入多条指令进入指令缓存区,此处的指令缓存区可以是指AI处理器中用于缓存多条指令的存储区域。多条指令可以通过总线接口从系统内存进入AI处理器中的指令缓存区,该指令缓存区中的所有指令可以等待后续硬件(例如,AI处理器中的各个执行单元)快速自动解码或运算。AI处理器中的指令控制单元可以从指令缓存区中读取第一初始指令和第二初始指令。该第一初始指令和第二初始指令可以为指令缓存区中的原始指令,上述译码处理可以是指AI处理器中的指令控制单元将指令缓存区中的原始指令解析为AI处理器中的执行单元可识别的操作指令。
可以理解的是,本申请实施例中的第一操作指令可以为图1所对应实施例中的任意一种依赖关系中被依赖的操作指令,如第一操作指令可以为依赖关系1中的DMA0操作指令,或者可以为依赖关系2中的向量操作指令,或者可以为依赖关系3中的DMA2操作指令,或者可以为依赖关系3中的矩阵操作指令等。
需要说明的是,本申请实施例中的第二操作指令依赖于第一操作指令生成的结果数据,那么当第一操作指令为DMA0操作指令时,第一指令队列可以为DMA0指令队列,第二操作指令可以为向量操作指令,第二指令队列可以为向量指令队列。当第一操作指令为向量操作指令时,第一指令队列可以为向量指令队列,第二操作指令可以为DMA1操作指令,第二指令队列可以为DMA1指令队列。当第一操作指令为DMA2操作指令时,第一指令队列可以为DMA2指令队列,第二操作指令可以为矩阵操作指令,第二指令队列可以为矩阵指令队列。当第一操作指令为矩阵操作指令时,第一指令队列可以为矩阵指令队列,第二操作指令可以为DMA3操作指令,第二指令队列可以为DMA3指令队列等,本申请实施例对此不做限定。
应当理解,本申请实施例所涉及的各个指令队列均可以是指一种特殊的线性表,该线性表的前端(front)进行删除操作,而在线性表的后端(rear)进行插入操作,队列可以认为是一种操作受限的线性表;其中,进行插入操作的端可以称为队尾,进行删除操作的端可以称为队头。
进一步地,可以根据第一指令队列中的元素读取顺序,将第一指令队列中的第一操作指令下发至第一执行单元,清除第一指令队列中的第一操作指令;通过第一执行单元对第一操作指令进行解析处理,得到第一操作指令对应的指令解析信息,根据指令解析信息在第一存储器中获取第一数据。其中,第一执行单元可以是指用于执行第一指令队列中的操作指令的硬件执行单元,也就是说,第一执行单元可以用于执行上述第一操作指令。第一操作指令对应的指令解析信息可以用于指示第一执行单元从第一存储器中读入第一数据。
同理,可以根据第二指令队列中的元素读取顺序,将第二指令队列中的第二操作指令下发至第二执行单元,此时可以清除第二指令队列中的第二操作指令。第二执行单元在接收到第二指令队列下发的第二操作指令之后,可以对第二操作指令进行解析处理,得到第二操作指令对应的指令解析信息。应当理解,此时的第二操作指令暂时无法向其对应的第二存储器读入数据,而是需要在第二存储器关联的读接口进行等待,直至第一操作指令执行完成后所生成的结果数据写入至第二存储器。其中,第二执行单元可以是指用于执行第二指令队列中的操作指令的硬件执行单元,也就是说,第二执行单元可以用于执行上述第二操作指令。第二操作指令对应的指令解析信息可以用于指示第二执行单元从第二存储器中读取第一类型操作生成的结果数据。
举例来说,如图1所示,当第一操作指令为DMA0操作指令时,此时的第一执行单元可以为DMA0执行单元,第一存储器可以为存储器A,第一数据可以为存储器A中的数据0,DMA0操作指令在执行完成后所生成的结果数据可以为存储器B(此时的存储器B可以作为第二存储器)中的数据1;第二操作指令可以为向量操作指令,第二执行单元可以为向量执行单元。
步骤S102,对第一数据执行第一操作指令对应的第一类型操作,生成第二数据,将第二数据写入第二存储器中,根据第二数据在第二存储器中的写入进度,更新第二数据的数据状态。
具体的,AI处理器中的第一执行单元可以对第一数据执行第一操作指令对应的第一类型操作,生成新的数据,此时新的数据可以理解为第一类型操作所生成的结果数据,本申请实施例可以将第一类型操作所生成的结果数据称为第二数据,该第二数据可以写入第二存储器中。其中,第一存储器和第二存储器可以为相同的存储器,也可以为不同的存储器,这与第一操作指令和第二操作指令相关。
可选地,若第一类型操作包括数据搬运操作,则可以通过第一执行单元对第一数据执行第一操作指令对应的数据搬运操作,将第一数据复制为第二数据。例如,此处的数据搬运操作可以为图1所对应实施例的依赖关系1中的DMA0操作,或者可以为图1所对应实施例的依赖关系3中的DMA2操作,第二数据可以是对第一数据进行线性拷贝、数据转置以及数据镶边等操作后得到的结果数据,此时读入第一数据的第一存储器与写入第二数据的第二存储器可以为不同的存储器,如第一存储器可以为图1所示的存储器A,第二存储器可以为图1所示的存储器B。
可选地,若第一类型操作包括图1所对应实施例的依赖关系2中的向量操作,则可以通过第一执行单元对第一数据执行第一操作指令对应的向量操作,得到第一数据对应的向量运算结果,将向量运算结果确定为第二数据,此时第二数据写入的第二存储器与第一存储器可以为相同的存储器,如第一存储器和第二存储器均可以为图1所示的存储器B。
可选地,若第一类型操作包括图1所对应实施例的依赖关系4中的矩阵操作,则可以通过第一执行单元对第一数据执行第一操作指令对应的矩阵操作,得到第一数据对应的矩阵运算结果,将矩阵运算结果确定为第二数据,此时的第一存储器与第二数据写入的第二存储器可以为不同的存储器,如第一存储器可以为图1所示的存储器D,第二存储器可以为图1所示的存储器E。
进一步地,AI处理器中的第一执行单元可以将第二数据写入第二存储器中,并获取第二数据在第二存储器中的写入进度,进而可以根据第二数据的写入进度更新第二数据对应的数据状态。其中,写入存储器中的数据都可以对应一个数据状态,如写入第二存储器中的第二数据可以对应一个数据状态,第二数据对应的数据状态可以包括准备完成和准备未完成两种状态。每一个数据对应的数据状态都可以采用状态位(Status bit)来表示,此处的状态位可以无需占用第二存储器中的存储空间,而是采用第二存储器侧边的寄存器中的一个比特位(bit)来表示;例如,当寄存器中的比特位为0时,表示其对应的数据状态为准备未完成;当寄存器中的比特位为1时,表示其对应的数据状态为准备完成。寄存器是中央处理器(Central Processing Unit,CPU)内的组成部分,寄存器是有限存贮容量的高速存贮部件,可以用来暂存指令、数据和地址。通过寄存器来暂存AI处理器内的存储器中的数据对应的数据状态,可以节省存储器的存储空间。
在一种可行的实施方式中,第一执行单元可以为第二存储器中的第二数据配置数据标签,通过数据标签的标签状态来表征第二数据在第二存储器中的数据状态。例如,第一执行单元向第二存储器写入第二数据的过程中,可以获取第二数据在第二存储器中的写入进度,并为第二存储器中的第二数据配置数据标签,此时的数据标签可以与第二数据对应的数据状态进行绑定;当第二数据在第二存储器中的写入进度指示第二数据写入完成时,可以将数据标签对应的标签状态更新为准备完成,标签状态为准备完成意味着第二数据在第二存储器中的数据状态为准备完成。
可以理解的是,处于准备完成的数据标签表示第二数据在第二存储器中的数据状态为准备完成,即第二数据在第二存储器中写入完成,处于准备完成的数据标签用于指示第二执行单元可以开始读入第二数据;处于初始准备未完成的数据标签表示第二数据在第二存储器中的数据状态为准备未完成,即第二数据在第二存储器中未写入完成,处于准备未完成的数据标签表示第二执行单元还需等待,暂时无法从第二存储器中写入第二数据。其中,第二数据对应的数据标签可以存放在第二存储器侧边的寄存器中,第二数据对应的数据标签可以占用寄存器中的一个比特位,此处的比特位可以作为数据标签对应的状态位,该状态为可以用于表示第二数据对应的数据标签的标签状态;当状态位为0时,表示第二数据的数据标签对应的标签状态为准备未完成(也可以理解为第二数据对应的数据状态为准备未完成);当状态位为1时,表示第二数据的数据标签对应的标签状态为准备完成(也可以理解为第二数据对应的数据状态为准备完成)。
请参见图3,图3是本申请实施例提供的一种采用数据标签标明数据状态的示意图。如图3所示,AI处理器中的第一执行单元接收到第一指令队列下发的第一操作指令之后,可以向第一存储器读入该第一类型操作所指示的第一数据,对第一数据执行第一操作指令对应的第一类型操作,生成结果数据(第二数据)。第一执行单元可以向第二存储器写入第二数据,并为第二存储器中的第二数据配置数据标签,该数据标签可以占用第二存储器侧边的寄存器中的一个状态位(一个状态位可以对应一个寄存器中的一个比特位)。
在第一执行单元向第二存储器写入第二数据的过程中,第二数据对应的数据标签在寄存器中的状态位可以为“0”,此处的”0”表示第二数据还未完全写入至第二存储器,也可以理解为第一执行单元对第二数据的写操作还未完成,即第二数据在第二存储器中的数据状态为准备未完成,此时的第二执行单元暂时还不能向第二存储器读入第二数据,只能等待读入。当第二数据在第二存储器中写入完成时,可以将第二数据对应的数据标签在寄存器中的状态位更新为“1”,此处的”1”表示第一执行单元对第二数据的写操作已经完成,即第二数据在第二存储器中的数据状态为准备完成,此时的第二执行单元可以开始向第二存储器读入第二数据。
可选地,本申请实施例还可以采用存储器中的地址存储空间来标明第二数据在第二存储器中的数据状态,此时可以将数据状态与地址存储空间进行绑定,具体实现过程将在后续实施例中进行描述。
步骤S103,当第二数据的数据状态为准备完成时,在第二存储器中获取与第二操作指令相关联的第二数据;第二操作指令是从第二指令队列中获取到的。
具体的,当第二数据在第二存储器中的数据状态为准备完成(例如,第二数据对应的数据标签的标签状态为准备完成,如寄存器中的状态位为“1”)时,已接收到第二指令队列下发的第二操作指令的第二执行单元,可以在第二存储器中读取与第二操作指令相关联的第二数据。其中,第二执行单元读取第二数据的过程与前述第一执行单元读取第一数据的过程相同,此处不再进行赘述。
步骤S104,对第二数据执行第二操作指令对应的第二类型操作,生成第三数据,将第三数据写入第三存储器中;第二类型操作依赖于第一类型操作生成的第二数据。
具体的,AI处理器中的第二执行单元可以对第二数据执行第二操作指令对应的第二类型操作,生成新的数据,此时新的数据可以理解为第二类型操作所生成的结果数据,本申请实施例可以将第一类型操作所生成的结果数据称为第三数据,该第三数据可以写入第三存储器中。其中,第三数据写入第三存储器中的过程可以参见第二数据写入第二存储器中的过程,此处不再进行赘述;第二存储器和第三存储器可以为相同的存储器,也可以为不同的存储器,这与第一操作指令和第二操作指令相关。
可选地,当第一类型操作包括第一数据搬运操作(前述DMA0操作)时,第二类型操作包括向量操作,第一存储器和第二存储器为不同的存储器,第二存储器和第三存储器为相同的存储器;当第一类型操作包括向量操作时,第二类型操作包括第二数据搬运操作(前述DMA1操作),第一存储器和第二存储器为相同的存储器,第二存储器和第三存储器为不同的存储器;当第一类型操作包括第三数据搬运操作(前述DMA2操作)时,第二类型操作包括矩阵操作,第一存储器、第二存储器以及第三存储器均为不同的存储器;当第一类型操作包括矩阵操作时,第二类型操作包括第四数据搬运操作(前述DMA3操作),第一存储器、第二存储器以及第三存储器均为不同的存储器。
在一个或多个实施例中,为便于理解,下面以图1所对应实施例中的依赖关系1为例进行具体说明,此时的第一类型操作可以为DMA0操作,第二类型操作可以为向量操作;换言之,第一执行单元为DMA0执行单元,第二执行单元为向量执行单元。请参见图4,图4是本申请实施例提供的一种处理器中的不同操作之间的执行流程示意图一;如图4所示,依赖关系1是指向量操作依赖于DMA0操作生成的结果数据(前述第二数据,此处可以记为数据1)。
如图4所示,可以在DMA0操作中为写入完成的数据1配置准备完成的数据状态,在向量操作中加入检查数据1的数据状态是否为准备完成的配置,例如,可以检查数据1对应的数据标签在存储器B侧边寄存器中的状态位是否为“1”。具体地,DMA0执行单元开始向存储器B(第二存储器)写数据1,当DMA0执行单元完成写数据1时,可以更新数据1的数据状态为准备完成,例如,将数据1对应的数据标签在存储器B侧边寄存器中的状态位由“0”更新为“1”。
在向量执行单元执行向量操作的过程中,向量执行单元可以检查存储器B中的数据1的数据状态是否为准备完成,若数据1的数据状态为准备完成,那么此时的向量执行单元可以开始从存储器B中读入数据1;若数据1的数据状态不是准备完成(例如,存储器B侧边寄存器中的状态位为“0”),那么此时的向量执行单元还需要进行等待,直至数据1的数据状态更新为准备完成状态,向量执行单元再进行读数据操作,即开始向存储器B读入数据1。换言之,在AI处理器中,当采用数据标签标明数据1的数据状态时,对于需要同步的DMA0操作和向量操作,DMA0操作向存储器B写数据1与向量操作向存储器B读数据1可以连续进行;其中,向存储器B写数据1可以理解为写存储器B,向存储器B读数据1可以理解为读存储器B。
请一并参见图5,图5是本申请实施例提供的一种处理器中的不同操作之间的操作拆分示意图一。如图5所示的坐标图中的横坐标表示时间,纵坐标表示操作;以图1所对应实施例中的依赖关系1为例,DMA0操作的步骤可以拆分为指令控制单元发送指令、DMA0指令队列发送指令、DMA0执行单元解析指令、DMA0执行单元从存储器A读取数据0以及DMA0执行单元从存储器B写数据1;此处的指令可以是指DMA0操作指令。
向量操作的步骤可以拆分为指令控制单元同步控制和发送指令、向量指令队列发送指令、向量执行单元解析指令、向量执行单元从存储器B读取数据1以及向量执行单元从存储器B写数据2;此处的指令可以是指向量操作指令。
可以理解的是,当使用数据标签标明数据状态时,需要为DMA0操作写入的数据以及向量操作读入的数据配置数据标签,且需要确保对于同一个数据,配置相同的数据标签。采用数据标签的模式配置数据的数据状态时,向量操作读数据1时需要等待DMA0写数据1完全结束后才能开始。如图5所示,DMA0操作从存储器B写数据1完成结束的时间点与向量执行单元从存储器B中开始读数据1的时间点是相同的;换言之,当采用数据标签标明数据状态进行时,被同步的两个读、写存储器的操作可以连续进行。
在本申请实施例中,对于第一类型操作,以及依赖于第一类型操作生成的第二数据的第二类型操作,需要按照正确的顺序来执行,即需要先执行第一类型操作后执行第二类型操作。第一执行单元从第一存储器中读入第一数据后,可以对第一数据执行第一类型操作,生成第二数据;第一执行单元可以将第二数据写入第二存储器中,并根据第二数据在第二存储器中的写入进度,更新第二数据对应的数据状态(如可以采用数据标签来标明第二数据对应的数据状态),当第二数据对应的数据状态为准备完成时,第二执行单元可以立即从第二存储器中读入第二数据,并对第二数据执行第二类型操作,这样可以减少被同步的两个操作之间的读写时间间隔,进而减少不同操作之间的同步开销,提高AI处理器的数据处理效率;此外,AI处理器中的不同操作之间的同步控制可以在硬件执行单元(例如,前述第一执行单元和第二执行单元)与存储器进行数据交互时进行,这样可以避免在具有依赖关系的两个操作之间插入barrier(屏障),wait(等待)类型的指令来阻塞后续指令从指令控制单元下发到指令队列,或者阻塞后续指令从指令队列下发到对应的执行单元,也就是说,可以避免在AI处理器中的指令控制通路上进行不同操作之间的同步控制,进而可以减少AI处理器中的指令复杂度。
请参见图6,图6是本申请实施例提供的一种基于存储器的数据交互方法的流程示意图二;可以理解的是,该基于存储器的数据交互方法可以由处理器执行,本申请实施例以AI处理器为例进行说明。如图6所示,该基于存储器的数据交互方法可以包括步骤S201至步骤S208:
步骤S201,从第一指令队列中获取第一操作指令,在第一存储器中获取与第一操作指令相关联的第一数据。
步骤S202,对第一数据执行第一操作指令对应的第一类型操作,生成第二数据。
其中,步骤S201和步骤S202的具体实现过程可以参见图2所对应实施例的步骤S101至步骤S102中的相关描述,此处不再进行赘述。
步骤S203,在第二存储器中为第二数据分配地址存储空间,将第二数据写入地址存储空间所包含的地址段中,获取第二数据在第二存储器中的写入进度。
具体的,第一执行单元可以为第二数据分配第二存储器中的地址存储空间,并通过地址存储空间中的地址段对应的存储状态来表征第二数据在第二存储器中的数据状态,此时可以将地址存储空间中的地址段对应的存储状态与第二数据在第二存储器中的数据状态进行绑定。其中,AI处理器中的第一执行单元为第二数据分配第二存储器中的地址存储空间的过程可以包括但不限于:AI处理器中的第一执行单元可以获取第二数据对应的数据容量,以及获取第二存储器对应的硬件规则信息;进而可以根据硬件规则信息,在第二存储器中确定单位地址空间范围,该单位地址空间范围用于表征一个地址段的地址空间范围;根据数据容量和单位地址空间范围,确定第二数据在第二存储器中的地址存储空间。
其中,第二数据在第二存储器中的地址存储空间可以包括一个或多个地址段,该地址存储空间中所包含的地址段的数量可以由第二数据的数据容量和单位地址空间范围所确定,地址存储空间所包含的每一个地址段都可以用于存储第二数据中的部分数据信息,如每一个地址段都可以用于存储第二数据中的一个数据信息片段。
可以理解的是,第二数据在写入第二存储器的过程中,第二数据可以被拆分为多个数据信息片段,一个数据信息片段可以写入一个地址段中;每一个地址段都可以具有其对应的存储状态,该存储状态可以包括已存储状态和未存储状态。当一个地址段存储了数据信息片段时,表示该地址段对应的存储状态为已存储状态;当一个地址段为空,即还未存储数据信息片段时,表示地址段对应的存储状态为未存储状态。其中,第二数据在第二存储器中的地址存储空间所包含的每一个地址段对应的存储状态可以占用第二存储器侧边的寄存器中的状态位,此处的状态位可以为寄存器中的一个比特位;也就是说,地址存储空间中的每一个地址段可以维护一个状态位。
举例来说,假设第二数据在第二存储器中的地址存储空间包括M个地址段,那么可以在第二存储器侧边的寄存器中占用M个状态位(例如,M个比特位)来表示第二数据在第二存储器中的数据状态;M可以为正整数,如M可以取值为1,2,……。当第一执行单元还未向第二存储器写第二数据,或者第一执行单元还未完成地址存储空间中的第一个地址段的写操作时,地址存储空间中的M个地址段在第二存储器侧边寄存器中的M个状态均为“0”;也就是说,表示地址存储空间中的M个地址段的存储状态均为未存储状态。当第一执行单元完成了地址存储空间中的第一个地址段的写操作时,地址存储空间中的第一个地址段在第二存储器侧边寄存器中的状态位由“0”更新为“1”,M个地址段中除第一个地址段之外的剩余地址段在第二存储器侧边寄存器中的状态位仍为“0”;也就是说,地址存储空间中的第一个地址段的存储状态为存储状态,剩余地址段的存储状态为未存储状态。应当理解,当地址存储空间中的第一个地址段对应的存储状态更新为已存储状态时,可以表明第二存储器中的第二数据对应的数据状态为准备完成,此时的第二执行单元可以开始向第二存储器读第二数据,具体可以为向第二存储器读第一个地址段中所存储的数据信息片段。
可以理解的是,根据硬件规格信息的不同,可以灵活定义一个状态位对应的存储器中的单位地址空间范围,即可以灵活定义地址存储空间中的每一个地址段所包含的单位地址空间范围。举例来说,每512Byte(字节,一个字节等于8个比特)维护1个状态位,此时的一个地址段包含512 Byte;每1KB(千字节,一千字节等于1024字节)维护1个状态位,此时的一个地址段包括1KB等,本申请实施例对此不做限定。DMA0操作每完成地址存储空间中的一个地址段的写操作,就可以更新该地址段的存储状态,从地址存储空间中的第一个地址段的存储状态更新为已存储状态开始,第二执行单元就可以开始向第二存储器读第二数据。
步骤S204,当第二数据的写入进度指示地址存储空间中的第i个地址段写入完成时,将地址存储空间中的第i个地址段对应的存储状态更新为已存储状态;i为小于或等于M的正整数。
具体的,第一执行单元向第二存储器写第二数据的过程中,可以按照地址存储空间中的M个地址段的顺序进行数据写入,当地址存储空间中的任意一个地址段(例如,第i个地址段,i为小于或等于M的正整数)写入完成时,可以将地址存储空间中的第i个地址段对应的存储状态更新为已存储状态,即可以将第i个地址段在第二存储器侧边寄存器中的状态位更新为“1”。举例来说,当地址存储空间中的第一个地址段写入完成时,可以将第一个地址段对应的存储状态更新为已存储状态;第一执行单元可以继续向第二存储器写第二数据,当地址存储空间中的第二个地址段写入完成时,可以将第二个地址段对应的存储状态更新为已存储状态,直至地址存储空间中的最后一个地址段写入完成,即完整的第二数据在第二存储器中写入完成,地址存储空间中的M个地址段对应的存储状态均可以为已存储状态。
步骤S205,当地址存储空间中存在第i个地址段的存储状态为已存储状态时,确定第二数据在第二存储器中的数据状态为准备完成。
步骤S206,通过第二执行单元获取地址存储空间中的第i个地址段的数据,将第i个地址段的数据确定为与第二操作指令相关联的第二数据。
具体的,当AI处理器中的第二执行单元在等待第二数据在第二存储器中的数据状态更新为准备完成的过程中,当第二存储器中为第二数据所分配的地址存储空间中的第一个地址段的存储状态更新为已存储状态时,可以立即开始向第二存储器读第二数据,具体为向第二存储器读第一个地址段中所存储的数据(即前述提及的数据信息片段)。当第二数据在第二存储器内的地址存储空间中存在任意一个地址段(例如,第i个地址段)的存储状态为已存储状态时,都可以确定第二数据在第二存储器中的数据状态为准备完成。
例如,地址存储空间中的第一个地址段的存储状态为已存储状态时,第二执行单元可以开始向第二存储器读第一个地址段所存储的数据,若第二执行单元完成第一个地址段的读操作之后,此时地址存储空间的第二个地址段的存储状态已更新为已存储状态,那么第二执行单元可以继续读第二个地址段中的数据;若第二执行单元完成第一个地址段的读操作之后,此时地址存储空间中的第二个地址段的存储状态还未更新为已存储状态,那么第二执行单元需要等待第二个地址段的存储状态更新为已存储状态才会继续读第二个地址段中的数据;以此类推,直至第二执行单元完成地址存储空间中的最后一个地址段的写操作。
需要说明的是,当第二执行单元读完地址存储空间中的第一个地址段中的数据之后,可以释放地址存储空间中的第一个地址段,将第一个地址段对应的存储状态由已存储状态更新为未存储状态,如可以将第一个地址段在第二存储器侧边寄存器中的状态位由“1”更新为“0”;进而可以在地址存储空间中的第二个地址段的存储状态更新为已存储状态时,第二执行单元继续读取地址存储空间中的第二个地址段的数据,读操作完成后,可以释放地址存储空间中的第二个地址段,将第一个地址段对应的存储状态由已存储状态更新为未存储状态,如可以将第二个地址段在第二存储器侧边寄存器中的状态位由“1”更新为“0”;也就是说,第二执行单元每完成一个地址段的读操作,就可以释放地址存储空间中的一个地址段,以此类推,释放用于存储第二数据的地址存储空间中的所有地址段。可选地,可以在第二执行单元全部读完地址存储空间中的所有地址段中的数据,即读取了完整的第二数据时,将第二数据在第二存储器中的地址存储空间进行一次性释放,将地址存储空间中的所有地址段对应的存储状态均由已存储状态更新为未存储状态,如可以将地址存储空间中的所有地址段在第二存储器侧边寄存器中的状态位均由“1”更新为“0”,本申请实施例对此不做限定。
请参见图7,图7是本申请实施例提供的一种采用地址存储空间标明数据状态的示意图。如图7所示,AI处理器中的第一执行单元接收到第一指令队列下发的第一操作指令之后,可以向第一存储器读入第一操作指令所指示的第一数据,对第一数据执行第一操作指令对应的第一类型操作,生成第二数据。第一执行单元可以向第二存储器写入第二数据,并为该第二数据分配第二存储器中的地址存储空间;该地址存储空间可以包括M(M为正整数)个地址段,如可以依次为地址段1,地址段2,地址段3……,每一个地址段都可以用于存储第二数据中的部分数据信息(数据信息片段),地址存储空间中所包含的M个地址段可以用于存储第一执行单元向第二存储器写入的第二数据。地址存储空间中的每一个地址段均可以具备存储状态,每一个地址段对应的存储状态均可以使用第二存储器侧边的寄存器中的一个状态位来表示,一个状态位可以为寄存器中的一个比特位;也就是说,每一个地址段对应的存储状态均可以占用第二存储器侧边寄存器中的一个比特位,如地址段1、地址段2、地址段3等均可以对应寄存器中的一个状态位。
在第一执行单元向第二存储器开始写入第二数据的过程中,地址存储空间中所包含的各个地址段在寄存器中的状态位均可以为“0”,此处的“0”表示地址存储空间中的各个地址段对应的存储状态均为未存储状态,或者可以理解为地址存储空间中的地址段1的写操作还未完成,即第二数据在第二存储器中的数据状态为准备未完成,此时的第二执行单元暂时还不能向第二存储器读入第二数据,只能等待读入。
可以理解的是,当第一执行单元向第二存储器写入第二数据时,首先向第二存储器内的地址存储空间中的地址段1写入第二数据,地址段1写入完成后,可以将地址段在寄存器中的状态位由“0”更新为“1”,此处的“1”表示第一执行单元对地址段1的数据写操作已经完成(地址段1对应的存储状态为已存储状态,地址存储空间中除地址段1之外的剩余地址段对应的存储状态均为未存储状态),此时可以确定第二数据在第二存储器中的数据状态为准备完成,此时的第二执行单元可以开始向第二存储器读入第二数据,具体可以是指向第二存储器中的地址段1读入第二数据。
当第二执行单元完成对地址段1的读操作之后,地址段2在寄存器中的状态位已更新为“1”,那么第二执行单元可以继续向第二存储器中的地址段2读入第二数据。地址段2在寄存器中的状态位还未更新为“1”,那么第二执行单元可以等待地址段2在寄存器中的状态位更新为“1”再继续写入第二数据;以此类推,直至第二执行单元完成地址存储空间中所包含的所有地址段的写操作,即读完第二存储器中的完整第二数据。
为便于理解,下面以图1所对应实施例中的依赖关系1为例进行具体说明,此时的第一类型操作可以为DMA0操作,第二类型操作可以为向量操作;换言之,第一执行单元为DMA0执行单元,第二执行单元为向量执行单元。请参见图8,图8是本申请实施例提供的一种AI处理器中的不同操作之间的操作拆分示意图二;如图8所示的坐标图中的横坐标表示时间,纵坐标表示操作;DMA0操作的步骤可以拆分为指令控制单元发送指令、DMA0指令队列发送指令、DMA0执行单元解析指令、DMA0执行单元从存储器A读取数据0以及DMA0执行单元从存储器B写数据1;此处的指令可以是指DMA0操作指令。向量操作的步骤可以拆分为指令控制单元同步控制和发送指令、向量指令队列发送指令、向量执行单元解析指令、向量执行单元从存储器B读取数据1以及向量执行单元从存储器B写数据2;此处的指令可以是指向量操作指令。
可以理解的是,当使用地址存储空间标明数据状态时,需要DMA0执行单元更新数据1对应的数据状态,该数据状态通过地址存储空间中的地址段对应的存储状态来体现,或者可以理解为通过地址存储空间中的地址段在存储器侧边寄存器中的状态位来体现。采用地址存储空间的模式配置数据的数据状态时,向量操作读数据1时无需等待DMA0写数据1完全结束就可以开始;如图5所示,DMA0操作从存储器B完成地址存储空间中的第一个地址段的写操作后,向量执行单元就可以开始从存储器B读数据1了,即向量执行单元开始从存储器B中读数据1的时间点与DMA0操作从存储器B完成地址存储空间中的第一个地址段的写操作的时间点相同;换言之,在AI处理器中,当采用地址存储空间中的地址段对应的存储状态标明数据1对应的数据状态时,对于需要同步的DMA0操作和向量操作,DMA0操作向存储器B写数据1与向量操作向存储器B读数据1可以并行执行。
步骤S207,当第一执行单元生成第四数据,且第四数据与第二数据在第二存储器中具备相同的地址存储空间时,获取第二数据在第二存储器中的读取状态。
步骤S208,当第二数据的读取状态指示读取完成时,将第四数据写入第二存储器的地址存储空间中,在第二存储器中为第四数据配置与第二数据相同的数据标签。
可以理解的是,在实际的AI处理器业务中,每个执行单元都可以处理多笔数据,不同的数据可能存储在存储器的相同地址存储空间中。例如,当第一执行单元在执行后续操作的过程中生成新的数据,此时新的数据可以成为第四数据;并且该第四数据在第二存储器中配置的地址存储空间与第二数据的地址存储空间相同时,可以获取第二数据在第二存储器中的读取状态。其中,该读取状态可以为读取完成,或者可以为读取未完成;读取完成可以表明第二存储器中所存储的第二数据已被读取,进而可以在第二存储器中释放该第二数据对应的地址存储空间,即清除第二存储器中的第二数据;读取未完成可以表明第二存储器中所存储的第二数据还未被读取,暂时不能释放该第二数据在第二存储器中的地址存储空间。
进一步地,当第二数据在第二存储器中的读取状态指示读取完成时,将第四数据写入第二存储器的地址存储空间中,在第二存储器中为第四数据配置与第二数据相同的数据标签。应当理解,第四数据只能在第二数据读取完成,并释放了其对应的地址存储空间之后,才能写入相同的地址存储空间中。
可选地,第二存储器中所存储的第二数据可以被一个或多个操作(或者可以理解为执行单元)读取。若第二存储器所存储的第二数据只需要被第二执行单元读取,那么当第二执行单元对第二存储器中的第二数据读取完成时,可以确定第二数据在第二存储器中的读取状态指示读取完成,进而可以将第四数据写入第二存储器的地址存储空间中。若第二存储器所存储的第二数据需要被多个执行单元读取,那么当第二执行单元对第二存储器中的第二数据读取完成时,此时第二数据在第二存储器中的读取状态并不能指示读取完成,而是需要等到所有相关的执行单元全部读完第二存储器中的第二数据时,才能确定第二数据在第二存储器中的读取状态指示读取完成,进而可以将第四数据写入第二存储器的地址存储空间中。
请参见图9,图9是本申请实施例提供的一种处理器的架构示意图二。在实际的AI处理器业务中,每个执行单元可以处理多笔数据,不同的数据可能存储在存储器中相同的地址位置(地址存储空间)。如图9所示,该AI处理器的硬件结构可以参见图1所对应实施例中的相关描述,此处不再进行赘述;当数据1.1和数据1在存储器B的相同地址存储空间进行存储时,DMA0执行单元需要等向量执行单元将数据1读出后,再将数据1.1写入到存储器B。在实现该同步时,数据1和数据1.1可以使用相同的数据标签。同理,当数据2.1和数据2在存储器B的相同地址存储空间进行存储时,向量执行单元需要等DMA1执行单元将数据2读出后,再将数据2.1写入到存储器B。在实现该同步时,数据2和数据2.1可以使用相同的数据标签等。
请一并参见图10,图10是本申请实施例提供的一种AI处理器中的不同操作之间的执行流程示意图二;如图10所示,本申请实施例以图1所对应实施例中的依赖关系1为例进行说明,依赖关系1是指向量操作依赖于DMA0操作生成的结果数据(前述第二数据,此处可以记为数据1)。
如图10所示,可以在DMA0操作中为写入完成的数据1配置准备完成的数据状态,在向量操作中加入检查数据1的数据状态是否为准备完成的配置。具体地,DMA0执行单元开始向存储器B(第二存储器)写数据1,当DMA0执行单元完成写数据1时,可以更新数据1的数据状态为准备完成。在向量执行单元执行向量操作的过程中,向量执行单元可以检查存储器B中的数据1的数据状态是否为准备完成,若数据1的数据状态为准备完成,那么此时的向量执行单元可以开始从存储器B中读入数据1;该向量执行单元完成读数据1的操作时,可以将数据状态更新为没有数据,如可以清除存储器B中的数据1,释放存储器B中的地址存储空间;或者可以理解为清除数据1对应的数据标签或状态位(地址段的存储状态)。若数据1的数据状态不是准备完成,那么此时的向量执行单元还需要在其对应的读接口上进行等待,直至数据1的数据状态更新为准备完成状态,向量执行单元再进行读数据操作。
在DMA0执行单元写数据1.1时,可以检查数据1是否被读取,以及第二数据配置的准备完成的标志(数据标签,或者状态位)是否被清除,若第二数据对应的准备完成的标志没有清除,则在DMA0执行单元的写接口上进行等待,直到准备完成的标志被清除,DMA0执行单元再进行写数据1.1的操作。若第二数据对应的准备完成的标志已被清除,则该DMA0执行单元可以向存储器B开始写数据1.1。
本申请实施例中,当采用数据标签对数据状态进行标明时,被同步的两个读、写存储器的操作可以连续进行;也就是说,写操作在其等待的读操作完成后立刻开始执行,读操作在其等待的写操作后立刻开始执行。当采用地址存储空间进行标识时,被同步的两个读、写存储器操作可以并行执行;例如,读操作需要读10个地址段,写操作需要写10个地址段,写操作需要等待读操作完成,则读完第1个地址段后,写操作就可以开始执行。同样地,写操作需要写10个地址段,读操作需要读10个地址段,读操作需要等待写操作完成,则写完第1个地址段后,读操作就可以开始执行。可以降低AI处理器多个执行单元之间的同步开销。
在本申请实施例中,对于第一类型操作,以及依赖于第一类型操作生成的第二数据的第二类型操作,需要按照正确的顺序来执行,即需要先执行第一类型操作后执行第二类型操作。第一执行单元从第一存储器中读入第一数据后,可以对第一数据执行第一类型操作,生成第二数据;第一执行单元可以将第二数据写入第二存储器中,并根据第二数据在第二存储器中的写入进度,更新第二数据对应的数据状态(如可以采用数据的地址存储空间来标明第二数据对应的数据状态),当第二数据对应的数据状态为准备完成时,第二执行单元可以立即从第二存储器中读入第二数据,并对第二数据执行第二类型操作,这样可以减少被同步的两个操作之间的读写时间间隔,进而减少不同操作之间的同步开销,提高AI处理器的数据处理效率;此外,AI处理器中的不同操作之间的同步控制可以在硬件执行单元(例如,前述第一执行单元和第二执行单元)与存储器进行数据交互时进行,这样可以避免在具有依赖关系的两个操作之间插入barrier(屏障),wait(等待)类型的指令来阻塞后续指令从指令控制单元下发到指令队列,或者阻塞后续指令从指令队列下发到对应的执行单元,也就是说,可以避免在AI处理器中的指令控制通路上进行不同操作之间的同步控制,进而可以减少AI处理器中的指令复杂度。
请参见图11,图11是本申请实施例提供的一种计算机设备的结构示意图。如图11所示,该计算机设备1000可以为服务器,也可以为终端设备,这里将不对其进行限定。为便于理解,本申请实施例以终端设备为例,该计算机设备1000可以包括:处理器1001,网络接口1004和存储器1005,此外,该计算机设备1000还可以包括用户接口1003,和至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,用户接口1003可以包括显示屏(Display)、键盘(Keyboard),可选地,用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图11所示,作为一种计算机可读存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。
其中,在图11所示的计算机设备1000中,网络接口1004还可以提供网络通讯功能,而用户接口1003主要用于为用户提供输入的接口;而处理器1001可以用于调用存储器1005中存储的设备控制应用程序。
可选地,图11所示的计算机设备1000中的处理器1001可以为图1所示的处理器,该处理器1001可以包括N个执行单元以及N个指令队列,一个执行单元对应一个指令队列,N个执行单元包括第一执行单元和第二执行单元,N个指令队列包括第一执行单元对应的第一指令队列,以及第二执行单元对应的第二指令队列,N为大于1的整数;
第一执行单元用于从第一指令队列中获取第一操作指令,在第一存储器中获取与第一操作指令相关联的第一数据;
第一执行单元还用于对第一数据执行第一操作指令对应的第一类型操作,生成第二数据,将第二数据写入第二存储器中,根据第二数据在第二存储器中的写入进度,更新第二数据的数据状态;
第二执行单元用于当第二数据的数据状态为准备完成时,在第二存储器中获取与第二操作指令相关联的第二数据;第二操作指令是从第二指令队列中获取到的;
第二执行单元还用于对第二数据执行第二操作指令对应的第二类型操作,生成第三数据,将第三数据写入第三存储器中;第二类型操作依赖于第一类型操作生成的第二数据。
可选地,该处理器1001还包括指令控制单元;
指令控制单元用于获取第一初始指令和第二初始指令,对第一初始指令和第二初始指令进行译码处理,得到第一初始指令对应的第一操作指令,以及第二初始指令对应的第二操作指令;
指令控制单元还用于将第一操作指令传输至第一指令队列,将第二操作指令传输至第二指令队列。
应当理解,本申请实施例中所描述的计算机设备1000可执行前文图2和图6任一项所对应实施例中对基于存储器的数据交互方法的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
此外,这里需要指出的是:本申请实施例还提供了一种计算机可读存储介质,且计算机可读存储介质中存储有前文提及的处理器所执行的计算机程序,且计算机程序包括计算机指令,当处理器执行计算机指令时,能够执行前文图2和图6任一项所对应实施例中对基于存储器的数据交互方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。作为示例,计算机指令可被部署在一个计算机设备上执行,或者在位于一个地点的多个计算机设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算机设备上执行,分布在多个地点且通过通信网络互连的多个计算机设备可以组成区块链系统。
此外,需要说明的是:本申请实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或者计算机程序可以包括计算机指令,该计算机指令可以存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器可以执行该计算机指令,使得该计算机设备执行前文图2和图6任一项所对应实施例中对基于存储器的数据交互方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机程序产品或者计算机程序实施例中未披露的技术细节,请参照本申请方法实施例的描述。
需要说明的是,对于前述的各个方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某一些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
本申请实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,存储介质可为磁碟、光盘、只读存储器(Read-Only Memory,ROM)或随机存储器(Random Access Memory,RAM)等。
以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。

Claims (16)

1.一种基于存储器的数据交互方法,其特征在于,包括:
从第一指令队列中获取第一操作指令,在第一存储器中获取与所述第一操作指令相关联的第一数据;
对所述第一数据执行所述第一操作指令对应的第一类型操作,生成第二数据,将所述第二数据写入第二存储器中,根据所述第二数据在所述第二存储器中的写入进度,更新所述第二数据的数据状态;
当所述第二数据的数据状态为准备完成时,在所述第二存储器中获取与第二操作指令相关联的第二数据;所述第二操作指令是从第二指令队列中获取到的;
对所述第二数据执行所述第二操作指令对应的第二类型操作,生成第三数据,将所述第三数据写入第三存储器中;所述第二类型操作依赖于所述第一类型操作生成的第二数据。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
通过指令控制单元获取第一初始指令和第二初始指令,对所述第一初始指令和所述第二初始指令进行译码处理,得到所述第一初始指令对应的第一操作指令,以及所述第二初始指令对应的第二操作指令;
通过所述指令控制单元将所述第一操作指令传输至所述第一指令队列,将所述第二操作指令传输至所述第二指令队列。
3.根据权利要求1所述的方法,其特征在于,所述从第一指令队列中获取第一操作指令,在第一存储器中获取与所述第一操作指令相关联的第一数据,包括:
根据所述第一指令队列中的元素读取顺序,将所述第一指令队列中的第一操作指令下发至所述第一执行单元,清除所述第一指令队列中的所述第一操作指令;
通过第一执行单元对所述第一操作指令进行解析处理,得到所述第一操作指令对应的指令解析信息,根据所述指令解析信息在第一存储器中获取第一数据。
4.根据权利要求1所述的方法,其特征在于,所述对所述第一数据执行所述第一操作指令对应的第一类型操作,生成第二数据,包括:
若所述第一类型操作包括数据搬运操作,则通过第一执行单元对所述第一数据执行所述第一操作指令对应的数据搬运操作,将所述第一数据复制为第二数据;
若所述第一类型操作包括向量操作,则通过第一执行单元对所述第一数据执行所述第一操作指令对应的向量操作,得到所述第一数据对应的向量运算结果,将所述向量运算结果确定为第二数据;
若所述第一类型操作包括矩阵操作,则通过第一执行单元对所述第一数据执行所述第一操作指令对应的矩阵操作,得到所述第一数据对应的矩阵运算结果,将所述矩阵运算结果确定为第二数据。
5.根据权利要求1所述的方法,其特征在于,所述将所述第二数据写入第二存储器中,根据所述第二数据在所述第二存储器中的写入进度,更新所述第二数据的数据状态,包括:
通过第一执行单元将所述第二数据写入第二存储器中,获取所述第二数据在所述第二存储器中的写入进度,为所述第二存储器中的第二数据配置数据标签;
当所述第二数据的写入进度指示写入完成时,将所述数据标签对应的标签状态更新为准备完成;所述数据标签的标签状态用于表征所述第二数据在所述第二存储器中的数据状态。
6.根据权利要求1所述的方法,其特征在于,所述将所述第二数据写入第二存储器中,根据所述第二数据在所述第二存储器中的写入进度,更新所述第二数据的数据状态,包括:
通过第一执行单元为所述第二数据分配所述第二存储器中的地址存储空间,将所述第二数据写入所述地址存储空间所包含的地址段中,获取所述第二数据在所述第二存储器中的写入进度;
根据所述第二数据的写入进度,更新所述地址存储空间所包含的地址段对应的存储状态;所述存储状态用于表征所述第二数据在所述第二存储器中的数据状态。
7.根据权利要求6所述的方法,其特征在于,所述通过第一执行单元为所述第二数据分配所述第二存储器中的地址存储空间,包括:
获取所述第二数据对应的数据容量,以及获取第二存储器对应的硬件规则信息;
根据所述硬件规则信息,在所述第二存储器中确定单位地址空间范围;所述单位地址空间范围用于表征一个地址段的地址空间范围;
根据所述数据容量和所述单位地址空间范围,确定所述第二数据在所述第二存储器中的地址存储空间。
8.根据权利要求6所述的方法,其特征在于,所述地址存储空间所包含的地址段的数量为M个,M为正整数;
所述根据所述第二数据的写入进度,更新所述地址存储空间所包含的地址段对应的存储状态,包括:
当所述第二数据的写入进度指示所述地址存储空间中的第i个地址段写入完成时,将所述地址存储空间中的第i个地址段对应的存储状态更新为已存储状态;i为小于或等于M的正整数;
则所述当所述第二数据的数据状态为准备完成时,在所述第二存储器中获取与第二操作指令相关联的第二数据,包括:
当所述地址存储空间中存在第i个地址段的存储状态为已存储状态时,确定所述第二数据在所述第二存储器中的数据状态为准备完成;
通过第二执行单元获取所述地址存储空间中的第i个地址段的数据,将第i个地址段的数据确定为与第二操作指令相关联的第二数据。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
当所述第二执行单元从所述第二存储器中获取到所述第二数据时,清除所述第二存储器的地址存储空间中的第二数据,将所述地址存储空间所包含的地址段对应的存储状态由已存储状态更新为未存储状态。
10.根据权利要求5所述的方法,其特征在于,所述方法还包括:
当第一执行单元生成第四数据,且所述第四数据与所述第二数据在所述第二存储器中具备相同的地址存储空间时,获取所述第二数据在所述第二存储器中的读取状态;
当所述第二数据的读取状态指示读取完成时,将所述第四数据写入所述第二存储器的地址存储空间中,为所述第二存储器中的第四数据配置与所述第二数据相同的数据标签。
11.根据权利要求1所述的方法,其特征在于,当所述第一类型操作包括第一数据搬运操作时,所述第二类型操作包括向量操作,所述第一存储器和所述第二存储器为不同的存储器,所述第二存储器和所述第三存储器为相同的存储器;
当所述第一类型操作包括向量操作时,所述第二类型操作包括第二数据搬运操作,所述第一存储器和所述第二存储器为相同的存储器,所述第二存储器和所述第三存储器为不同的存储器;
当所述第一类型操作包括第三数据搬运操作时,所述第二类型操作包括矩阵操作,所述第一存储器、所述第二存储器以及所述第三存储器均为不同的存储器;
当所述第一类型操作包括矩阵操作时,所述第二类型操作包括第四数据搬运操作,所述第一存储器、所述第二存储器以及所述第三存储器均为不同的存储器。
12.一种处理器,其特征在于,所述处理器包括N个执行单元以及N个指令队列,一个执行单元对应一个指令队列,所述N个执行单元包括第一执行单元和第二执行单元,所述N个指令队列包括所述第一执行单元对应的第一指令队列,以及所述第二执行单元对应的第二指令队列,N为大于1的整数;
所述第一执行单元用于从所述第一指令队列中获取第一操作指令,在第一存储器中获取与所述第一操作指令相关联的第一数据;
所述第一执行单元还用于对所述第一数据执行所述第一操作指令对应的第一类型操作,生成第二数据,将所述第二数据写入第二存储器中,根据所述第二数据在所述第二存储器中的写入进度,更新所述第二数据的数据状态;
所述第二执行单元用于当所述第二数据的数据状态为准备完成时,在所述第二存储器中获取与第二操作指令相关联的第二数据;所述第二操作指令是从所述第二指令队列中获取到的;
所述第二执行单元还用于对所述第二数据执行所述第二操作指令对应的第二类型操作,生成第三数据,将所述第三数据写入第三存储器中;所述第二类型操作依赖于所述第一类型操作生成的第二数据。
13.根据权利要求12所述的处理器,其特征在于,所述处理器还包括指令控制单元;
所述指令控制单元用于获取第一初始指令和第二初始指令,对所述第一初始指令和所述第二初始指令进行译码处理,得到所述第一初始指令对应的第一操作指令,以及所述第二初始指令对应的第二操作指令;
所述指令控制单元还用于将所述第一操作指令传输至所述第一指令队列,将所述第二操作指令传输至所述第二指令队列。
14.一种计算机设备,其特征在于,包括存储器和处理器;
所述存储器与所述处理器相连,所述存储器用于存储计算机程序,所述处理器用于调用所述计算机程序,以使得所述计算机设备执行权利要求1至11任一项所述的方法。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,所述计算机程序适于由处理器加载并执行,以使得具有所述处理器的计算机设备执行权利要求1至11任一项所述的方法。
16.一种计算机程序产品,其特征在于,包括计算机程序/指令,所述计算机程序/指令被处理器执行时实现权利要求1至11任一项所述的方法。
CN202311089901.8A 2023-08-28 2023-08-28 基于存储器的数据交互方法、处理器、设备以及介质 Active CN116804915B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311089901.8A CN116804915B (zh) 2023-08-28 2023-08-28 基于存储器的数据交互方法、处理器、设备以及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311089901.8A CN116804915B (zh) 2023-08-28 2023-08-28 基于存储器的数据交互方法、处理器、设备以及介质

Publications (2)

Publication Number Publication Date
CN116804915A true CN116804915A (zh) 2023-09-26
CN116804915B CN116804915B (zh) 2023-12-15

Family

ID=88079744

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311089901.8A Active CN116804915B (zh) 2023-08-28 2023-08-28 基于存储器的数据交互方法、处理器、设备以及介质

Country Status (1)

Country Link
CN (1) CN116804915B (zh)

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6782445B1 (en) * 1999-06-15 2004-08-24 Hewlett-Packard Development Company, L.P. Memory and instructions in computer architecture containing processor and coprocessor
CN108268386A (zh) * 2016-12-30 2018-07-10 英特尔公司 加速硬件中的存储器排序
CN110825312A (zh) * 2018-08-10 2020-02-21 北京百度网讯科技有限公司 数据处理装置、人工智能芯片及电子设备
CN110865950A (zh) * 2018-08-28 2020-03-06 中科寒武纪科技股份有限公司 数据预处理方法、装置、计算机设备和存储介质
CN111090464A (zh) * 2018-10-23 2020-05-01 华为技术有限公司 一种数据流处理方法及相关设备
CN112817516A (zh) * 2019-11-15 2021-05-18 深圳市中兴微电子技术有限公司 数据读写控制方法、装置、设备和存储介质
CN112860320A (zh) * 2021-02-09 2021-05-28 山东英信计算机技术有限公司 基于risc-v指令集进行数据处理的方法、系统、设备及介质
CN116204121A (zh) * 2022-12-31 2023-06-02 深圳大普微电子科技有限公司 一种闪存控制系统及其闪存设备
CN116601616A (zh) * 2020-12-21 2023-08-15 华为技术有限公司 一种数据处理装置、方法及相关设备
CN116627867A (zh) * 2023-07-25 2023-08-22 苏州浪潮智能科技有限公司 数据交互系统、方法、大规模运算处理方法、设备及介质

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6782445B1 (en) * 1999-06-15 2004-08-24 Hewlett-Packard Development Company, L.P. Memory and instructions in computer architecture containing processor and coprocessor
CN108268386A (zh) * 2016-12-30 2018-07-10 英特尔公司 加速硬件中的存储器排序
CN110825312A (zh) * 2018-08-10 2020-02-21 北京百度网讯科技有限公司 数据处理装置、人工智能芯片及电子设备
CN110865950A (zh) * 2018-08-28 2020-03-06 中科寒武纪科技股份有限公司 数据预处理方法、装置、计算机设备和存储介质
CN111090464A (zh) * 2018-10-23 2020-05-01 华为技术有限公司 一种数据流处理方法及相关设备
CN112817516A (zh) * 2019-11-15 2021-05-18 深圳市中兴微电子技术有限公司 数据读写控制方法、装置、设备和存储介质
CN116601616A (zh) * 2020-12-21 2023-08-15 华为技术有限公司 一种数据处理装置、方法及相关设备
CN112860320A (zh) * 2021-02-09 2021-05-28 山东英信计算机技术有限公司 基于risc-v指令集进行数据处理的方法、系统、设备及介质
CN116204121A (zh) * 2022-12-31 2023-06-02 深圳大普微电子科技有限公司 一种闪存控制系统及其闪存设备
CN116627867A (zh) * 2023-07-25 2023-08-22 苏州浪潮智能科技有限公司 数据交互系统、方法、大规模运算处理方法、设备及介质

Also Published As

Publication number Publication date
CN116804915B (zh) 2023-12-15

Similar Documents

Publication Publication Date Title
EP3832499B1 (en) Matrix computing device
EP3407182B1 (en) Vector computing device
CN110825436B (zh) 应用于人工智能芯片的计算方法和人工智能芯片
CN111158756B (zh) 用于处理信息的方法和装置
CN109582231B (zh) 数据存储方法、装置、电子设备及存储介质
CN111104178A (zh) 一种动态库加载方法、终端装置及存储介质
CN110515872B (zh) 直接内存存取方法、装置、专用计算芯片及异构计算系统
CN112348182B (zh) 一种神经网络maxout层计算装置
CN109165723B (zh) 用于处理数据的方法和装置
EP3447690A1 (en) Maxout layer operation apparatus and method
CN110909527A (zh) 文本处理模型的运行方法、装置、电子设备、及存储介质
CN110413540B (zh) 一种fpga数据缓存的方法、系统、设备及存储介质
US11055100B2 (en) Processor, and method for processing information applied to processor
CN116804915B (zh) 基于存储器的数据交互方法、处理器、设备以及介质
CN111258950B (zh) 原子访存方法、存储介质、计算机设备、装置和系统
US10379899B2 (en) Systems and methods for frame presentation and modification in a networking environment
CN114995770B (zh) 一种数据处理方法、装置、设备、系统及可读存储介质
CN115543317A (zh) 前端页面开发方法及装置
CN113296788B (zh) 指令调度方法、装置、设备及存储介质
CN114493980A (zh) 内核函数传输方法、装置及设备
CN111258653B (zh) 原子访存方法、存储介质、计算机设备、装置和系统
CN110231983B (zh) 数据并发处理方法、装置及系统、计算机设备及可读介质
CN113961298A (zh) 一种页面切换方法、装置、设备及介质
CN111026463A (zh) 一种页面加载方法、装置、设备和存储介质
CN114244912A (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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40092296

Country of ref document: HK