CN117055800A - 数据存储方法及装置、计算机可读介质和电子设备 - Google Patents
数据存储方法及装置、计算机可读介质和电子设备 Download PDFInfo
- Publication number
- CN117055800A CN117055800A CN202210480784.7A CN202210480784A CN117055800A CN 117055800 A CN117055800 A CN 117055800A CN 202210480784 A CN202210480784 A CN 202210480784A CN 117055800 A CN117055800 A CN 117055800A
- Authority
- CN
- China
- Prior art keywords
- data
- operation result
- result data
- storage
- ordinate
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 62
- 238000013500 data storage Methods 0.000 title claims abstract description 44
- 230000008521 reorganization Effects 0.000 claims description 29
- 238000013507 mapping Methods 0.000 claims description 19
- 230000008569 process Effects 0.000 claims description 19
- 238000013473 artificial intelligence Methods 0.000 claims description 13
- 230000004044 response Effects 0.000 claims description 6
- 238000004590 computer program Methods 0.000 claims description 3
- 238000012545 processing Methods 0.000 abstract description 17
- 238000010586 diagram Methods 0.000 description 15
- 238000003491 array Methods 0.000 description 14
- 238000004422 calculation algorithm Methods 0.000 description 11
- 238000004364 calculation method Methods 0.000 description 10
- 230000005540 biological transmission Effects 0.000 description 6
- 230000006798 recombination Effects 0.000 description 6
- 238000005215 recombination Methods 0.000 description 6
- 238000009825 accumulation Methods 0.000 description 4
- 238000011176 pooling Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000006978 adaptation Effects 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 2
- 238000013506 data mapping Methods 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013527 convolutional neural network Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- 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/0207—Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0685—Hybrid storage combining heterogeneous device types, e.g. hierarchical storage, hybrid arrays
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开提供一种数据存储方法及装置、计算机可读介质和电子设备,涉及数据处理技术领域。该方法包括:获取运算引擎输出的运算结果数据;确定运算结果数据对应的运算模式;基于运算模式设置运算结果数据的存储地址,并根据存储地址将所述运算结果数据错开存储在存储阵列。本公开能够有效提升数据的读取和存储的并行度,提升数据读写效率。
Description
技术领域
本公开涉及数据处理技术领域,具体涉及一种数据存储方法、数据存储装置、计算机可读介质和电子设备。
背景技术
随着人工智能(Artificial Intelligence,AI)应用的普及,以及对人工智能应用的用户体验要求越来越高,对于人工智能运算数据的读写能力提出了越来越高的要求。人工智能的算法网络由多个计算层相互级联组合而成,相邻算子之间的参数往往是不同的,例如相邻的算子可以是Conv3*3的卷积运算加上Conv1*1的卷积运算,也可以是Conv3*3加上激活函数,再或是卷积运算加池化运算。即使是相邻两个计算层是卷积运算,其参数也是不同的,参数的不同表现在卷积核窗口大小,卷积核的输入通道与输出通道以及输入特征图像以及输出特征图像的尺寸大小等。
目前,人工智能网络中的运算数据在存储的过程中使用了统一数据存储格式,导致不同计算层下的运算数据在存储和读取时的并行度较低,数据读写效率较低。
发明内容
本公开的目的在于提供一种数据存储方法、数据存储装置、计算机可读介质和电子设备,进而至少在一定程度上提高不同计算层下的运算数据在存储和读取的并行度,提升运算数据的读写效率。
根据本公开的第一方面,提供一种数据存储方法,由配置有至少一个运算引擎的终端设备执行,该方法包括:
获取所述运算引擎输出的运算结果数据;
确定所述运算结果数据对应的运算模式;
基于所述运算模式设置所述运算结果数据的存储地址,并根据所述存储地址将所述运算结果数据错开存储在存储阵列。
根据本公开的第二方面,提供一种数据存储装置,设置在配置有至少一个运算引擎的终端设备中,该装置包括:
数据获取模块,用于获取所述运算引擎输出的运算结果数据;
运算模式确定模块,用于确定所述运算结果数据对应的运算模式;
数据存储模块,用于基于所述运算模式设置所述运算结果数据的存储地址,并根据所述存储地址将所述运算结果数据错开存储在存储阵列。
根据本公开的第三方面,提供一种计算机可读介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述的方法。
根据本公开的第四方面,提供一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储一个或多个程序,当一个或多个程序被一个或多个处理器执行时,使得一个或多个处理器实现上述的方法。
本公开的一种实施例所提供的数据存储方法,在运算引擎输出运算结果数据时,确定运算结果数据对应的运算模式,并基于运算模式设置运算结果数据的存储地址,并根据存储地址将运算结果数据错开存储在存储阵列。一方面,根据运算结果数据对应的运算模式确定运算结果数据的存储格式即存储地址,使存储格式能够与运算结果数据的运算模式相对应,提升数据的存储效率以及读取效率,进而提高运算引擎的数据处理效率;另一方面,根据存储地址将运算结果数据错开存储在存储阵列,保证需要在同一时刻并行读取的数据存储在不同的存储阵列,能够有效提升运算结果数据在存储以及读取时的数据并行度,避免了数据在读取过程中的阻塞时延,保证数据的读取效率,进一步提升运算引擎的数据处理效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1示出了可以应用本公开实施例的一种示例性系统架构的示意图;
图2示意性示出本公开示例性实施例中一种数据存储方法的流程示意图;
图3示意性示出本公开示例性实施例中一种运算引擎的结构示意图;
图4示意性示出本公开示例性实施例中一种存储阵列的结构示意图;
图5示意性示出本公开示例性实施例中一种实现运算结果数据错开存储在存储阵列的流程示意图;
图6示意性示出本公开示例性实施例中一种错开存储运算结果数据的存储方式的示意图;
图7示意性示出本公开示例性实施例中一种错开存储运算结果数据的原理示意图;
图8示意性示出本公开示例性实施例中另一种错开存储运算结果数据的存储方式的示意图;
图9示意性示出本公开示例性实施例中一种数据重组的原理示意图;
图10示意性示出本公开示例性实施例中一种对输出数据重组得到运算结果数据的流程示意图;
图11示意性示出本公开示例性实施例中一种对输出数据重组得到运算结果数据的原理示意图;
图12示意性示出本公开示例性实施例中数据存储装置的组成示意图;
图13示出了可以应用本公开实施例的一种电子设备的示意图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。
此外,附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
图1示出了可以应用本公开实施例的一种数据存储方法及装置的示例性应用环境的系统架构的示意图。
如图1所示,系统架构100可以包括终端设备101、102、103中的一个或多个,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。终端设备101、102、103可以是各种配置有运算引擎的电子设备,包括但不限于台式计算机、便携式计算机、智能手机、可穿戴设备和平板电脑等等。应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。比如服务器105可以是多个服务器组成的服务器集群等。
本公开实施例所提供的数据存储方法一般由终端设备101、102、103中执行,相应地,数据存储装置一般设置于终端设备101、102、103中。但本领域技术人员容易理解的是,本公开实施例所提供的数据存储方法也可以由服务器105执行,相应的,数据存储装置也可以设置于服务器105中,本示例性实施例中对此不做特殊限定。举例而言,在一种示例性实施例中,可以是用户通过终端设备101、102、103将运算结果数据的运算模式上传至服务器105,服务器通过本公开实施例所提供的数据存储方法生成存储地址后,将存储地址传输给终端设备101、102、103,以使终端设备101、102、103根据接收到的存储地址将运算结果数据存储到存储阵列中。
人工智能算法在终端设备进行部署时,需要考虑人工智能算法执行的延时的问题。对于终端人工智能加速器来说,其硬件架构主要分为运算引擎和存储单元,运算引擎主要由乘累加器组成,存储单元按照存取的速度可以分为寄存器、静态随机存取存储器(Static Random-Access Memory,SRAM)、动态随机存取存储器(Dynamic Random-AccessMemory,DRAM),在实际应用过程中,发现人工智能算法在硬件加速器上执行时,数据的传输时间往往占据了较大比重,造成了运算引擎等待数据传输的情况,原因是由于数据在存储的过程中使用了统一数据存储格式,但是人工智能算法如卷积神经网络算法中每一个算子层的情况都不相同,每次需要读入的数据量和每次生成的数据量不同,数据格式也不同,因此统一的数据存储格式造成了每一个计算层在数据存储和读取时传输效率较低。
基于目前存在的问题,本公开实施例首先提供了一种数据存储方法,下面以终端设备执行该方法为例,对本公开示例性实施方式的数据存储方法进行具体说明,该终端设备配置有至少一个运算引擎。
图2示出了本示例性实施方式中一种数据存储方法的流程示意图,包括以下步骤S210至步骤S230:
在步骤S210中,获取所述运算引擎输出的运算结果数据。
在一示例性实施例中,运算引擎是指处理人工智能网络中相关运算任务的计算单元,例如,运算引擎可以是张量运算引擎(Tensor Engine),也可以是向量运算引擎(VectorEngine),还可以是其他类型的运算引擎,本示例实施例对此不做特殊限定。
运算引擎可以设置在终端设备的人工智能处理器中,如人工智能处理器可以是嵌入式神经网络处理器(Neural-network Processing Unit,NPU),运算引擎可以作为人工智能处理器的处理器核心,一个处理器核心对应一个运算引擎,因此,终端设备可以设置1个运算引擎,也可以设置2个运算引擎,本示例实施例不以此为限。
运算结果数据是指运算引擎在基于人工智能网络中某一网络层算子对输入数据进行运算后得到的运算结果,例如,网络层可以是卷积层,网络层算子可以是3*3卷积运算或者1*1卷积运算,运算结果数据可以是对输入数据进行3*3卷积运算或者1*1卷积运算得到的数据;当然,网络层也可以是池化层,网络层算子可以是池化计算数据,运算结果数据可以是对输入数据进行池化计算得到的数据,本示例实施例对此不做特殊限定。
在步骤S220中,确定所述运算结果数据对应的运算模式。
在一示例性实施例中,运算模式是指运算结果数据对应的网络层算子的计算方式,例如,运算模式可以是3*3卷积运算,也可以是1*1卷积运算,当然,还可以是池化运算、缩放运算等,本示例实施例不以此为限。
可以通过人工智能处理器中在执行人工智能网络的相关网络层的执行指令获取运算结果数据对应的运算模式,也可以通过运算结果数据的数据格式检测运算结果数据对应的运算模式,本示例实施例不以此为限。
在步骤S230中,基于所述运算模式设置所述运算结果数据的存储地址,并根据所述存储地址将所述运算结果数据错开存储在存储阵列。
在一示例性实施例中,错开存储是指将运算结果数据中需要在同一时刻并行读取的数据存储在不同的存储阵列中,以提升运算结果数据在写入以及读取时的并行度。例如,运算结果数据可以是特征图像,可以将特征图像分为多个部分,并将不同部分的特征图像存储在不同的存储阵列中,这样可以在同一时刻将完整的特征图像从多个存储阵列中一次性取出,有效提升数据写入以及读取时的并行度,提升数据的读写效率。
下面对步骤S210至步骤S230进行详细说明。
在一示例性实施例中,运算引擎至少可以包括张量运算引擎和存储阵列,图3示意性示出本公开示例性实施例中一种运算引擎的结构示意图。
参考图3所示,运算引擎300可以包括张量运算引擎310以及存储单元(Memory)320。其中,张量运算引擎310可以包括由多个处理单元(Processing Element,PE)330构成的阵列,例如,张量运算引擎310可以包括8*8的PE单元阵列,当然,也可以包括11*11的PE单元阵列,本示例实施例对此不做特殊限定。
每个PE单元330可以包括多条乘累加树(Adder trees),每条乘累加树可以包括多个乘法累加器(Multiplying Accumulator,MAC),例如,每个PE单元330可以包括32个乘累加树340,每个乘累加树340中可以包含9个乘法累加器,当然,每个PE单元330也可以设置其他数量的乘累加树以及乘法累加器,具体数量可以根据实际应用情况进行自定义设置,本示例实施例对此不做特殊限定。
对于单个PE单元来说,其乘累加树的总量是固定的32条,但是对于不同的卷积运算,其数据映射的方式有所不同,例如,对于3*3卷积来说,每条乘累加树完成单个3*3的单输入通道的乘累加操作,那么32条累加树就可以完成总共32个卷积窗口的3*3卷积运算,因此对应的输出张量Tensor在平面上的尺寸为16*2;纵向上,每列PE单元中的不同PE,在3*3卷积运算的情况下,分别对应不同输入通道的卷积运算,最终再做累加操作,对于不同列的PE单元,存储了不同的卷积核的数据。
存储单元320可以是静态随机存取存储器(Static Random-Access Memory,SRAM),也可以是动态随机存取存储器(Dynamic Random-Access Memory,DRAM),本示例实施例不以此为限。存储单元320可以被划分为多个存储阵列,例如,假设张量运算引擎310可以包括8*8的PE单元阵列,那么对应的可以将存储单元320分为8个存储阵列,每个存储阵列可以对应一行PE单元,每个存储阵列可以用于存储一个输入通道的数据,因此每行的PE阵列可以读入单个输入通道的输入特征数据进行计算;同理,若张量运算引擎310可以包括11*11的PE单元阵列,那么,可以将存储单元320分为11个存储阵列,本示例实施例对此不做特殊限定。
在一示例性实施例中,存储阵列可以包括多Bank存储器,可以根据存储地址将运算结果数据中需要在同一时刻并行读取的数据存储在不同的Bank中,以实现将运算结果数据错开存储在存储阵列。
图4示意性示出本公开示例性实施例中一种存储阵列的结构示意图。
参考图3和图4所示,存储单元320可以被划分为多个存储阵列,对于其中任意的存储阵列400,可以按照Bank的方式存储数据,例如,存储阵列400可以包括8个Bank,当然,也可以是其他数量的Bank,具体数量可以根据实际应用情况进行自定义设置,每个Bank的数据存储宽度是16byte,不同Bank的数据可以进行并行的读取或者存储操作。
对于存储阵列400中的Bank1、Bank2、Bank3、Bank4、Bank5、Bank6、Bank7和Bank8,每次数据在存储或者读取时,在一个时钟周期内仅可以从一个Bank中读取或者存储一块数据,例如,可以在T时刻,从存储阵列400中一次性读取或者存储数据块1-数据块8,可以在T+1时刻,从存储阵列400中读取或者存储数据块9,但是,在一个时钟周期内不能从Bank1中同时读取或者存储数据块1和数据块9。可以通过将数据块1和数据块9存储在不同的Bank中,实现数据块1和数据块9错开存储在存储阵列中,这样,数据块1和数据块9就可以在一个时钟周期内同时读取或者存储,有效提升数据的读取或者存储的并行度,提高数据传输效率。
下面以3*3卷积运算以及1*1卷积运算为例,对运算引擎的计算原理进行简单说明:
对于3*3卷积运算,数据映射到硬件架构上需要从两个维度来分析,首先是是输入数据的维度,需要考虑输入通道C、输入张量X尺寸Xin、输入张量Y尺寸Yin三个方面,那么输入张量的大小可以通过这三个数值的乘积表示为Xin*Yin*C,如18*4*8;从输出维度上考虑,其每次生成的数据张量的大小需要考虑输出张量X尺寸Xout、输出张量Y尺寸Yout和输出通道K,那么输出张量的大小可以通过这三个数值的乘积表示为Xout*Yout*K,如16*2*8。
继续参考图4所示,如果以整个PE阵列角度来看,也就是64个PE单元,其输入并行度定义为C=8(由于纵向8个PE单元处理8个输入通道的卷积运算),Xin=18,Yin=4,纵向上最右侧的PE列中每一个PE单元输入18*4个点,然后这个输入张量会按照脉动的方式自右向左流入每列的PE,与不同卷积核kernel进行卷积。从输出维度上来说,在输出的张量上,深度方向上整个PE阵列可以一次输出K个数据,在本示例中,平面上大小输出16*2个数据,也就是说每个PE单元有32条乘累加树,总共计算得到2*16=32个输出点。每一个PE单元中预先存储的权重数据也是不同的,分别对应了不同的卷积核和不同的卷积核中不同的通道,例如最右上角的PE单元预先存储了第一个卷积核中第一个输入通道的数据。
由于在3*3卷积的时候每条累加树可以计算一个3*3窗口大小的卷积结果,但对于1*1卷积运算,其卷积窗口在平面上只有一个点。所以需要改变其数据的映射方式,也就是说,对于1*1卷积来说,理想状态下,最好每一个PE单元内部的每条乘累加树可以对输入通道上的8个点与相应的权重数据进行乘累加操作。因此对于1*1卷积运算来说,每个PE单元中预先存储的权重数据有所不同,假设输入张量的尺寸为16*2*64,那么输出张量的尺寸可以是16*2*8,参考图4所示,最右上角的PE单元可以存储了1号卷积核的输入通道1至输入通道8的数据,对于最右上角这个PE单元来说,其输入的特征图像大小是16*2,总共对应32条乘累加树,每条乘累加树上对应了输入通道上8个点。
在一示例性实施例中,运算结果数据可以包括多个输入通道,每个输入通道包括不同纵坐标下的单行运算结果数据,举例而言,假设运算结果数据可以是18*4*8的特征图像数据,即该运算结果数据包括8个输入通道,每个输入通道下的特征图像的尺寸为18*4,那么,每个输入通道下的特征图像可以包含4行数据,每行数据有18个点,单行运算结果数据可以是每行中的18个点的数据。
具体的,以人工智能网络算法中临近两个网络层都是卷积层,且这两个卷积层均为3*3卷积运算的算子为例,可以根据图5中的步骤实现根据存储地址将运算结果数据错开存储在存储阵列中,参考图5所示,具体可以包括:
步骤S510,响应检测到所述运算模式为3*3卷积运算,则将第一纵坐标下的单行运算结果数据的存储头地址映射到第一Bank中;以及
步骤S520,将第二纵坐标下的单行运算结果数据的存储头地址映射到第二Bank中,实现将所述运算结果数据错开存储在存储阵列。
其中,第一纵坐标是指运算结果数据在任一输入通道下的特征图像中的纵坐标,例如,假设运算结果数据是18*4*8,那么,第一纵坐标可以是输入通道1下特征图像18*4中第一行数据对应的纵坐标,相应的,第一纵坐标下的单行运算结果数据可以是输入通道1下特征图像18*4中的第一行数据;第二纵坐标是与第一纵坐标属于同一输入通道的特征图像中的纵坐标,如第二纵坐标可以是输入通道1下特征图像18*4中第二行数据对应的纵坐标,相应的,第二纵坐标下的单行运算结果数据可以是输入通道1下特征图像18*4中的第二行数据。
需要说明的是,此处的“第一纵坐标”、“第二纵坐标”中的“第一”、“第二”仅是用于区分同一输入通道的特征图像中的不同纵坐标,没有任何特殊含义,并不应对本示例实施例造成任何特殊限定。
存储头地址是指单行运算结果数据中起始数据对应的存储地址,例如,某一纵坐标下的单行运算结果数据可以包括从左往右的18个数据点,存储头地址可以是左侧第一个数据点对应在存储阵列中的存储地址。
图6示意性示出本公开示例性实施例中一种错开存储运算结果数据的存储方式的示意图。
参考图6所示,假设运算结果数据可以包含64个通道的数据,存储单元可以划分为8个存储阵列,对于每个存储阵列可以存储8个输入通道的数据,以存储阵列Memory1为例,分别存储了输入通道1、输入通道9、输入通道17……的特征图像数据。其中,以不同粗细的线条代表同一输入通道中在不同纵坐标(Y方向)上的特征图像数据,例如,线条601、线条602、线条603可以分别表示输入通道1中在不同纵坐标(Y方向)上的单行运算结果数据,线条604、线条605、线条606可以分别表示输入通道9中在不同纵坐标(Y方向)上的单行运算结果数据,线条607、线条608、线条609可以分别表示输入通道17中在不同纵坐标(Y方向)上的单行运算结果数据;而相同粗细但不同线型的线条代表了不同输入通道在相同纵坐标上的数据,例如,线条601、线条604、线条607(或者线条602、线条605、线条608;或者线条603、线条606、线条609)可以分别表示相同纵坐标(Y方向)上在输入通道1、输入通道9、输入通道17中的单行运算结果数据。
对于单个输入通道上的特征图像数据,同一纵坐标上的数据在Bank间进行存储时,一旦选定了起点(即存储头地址),那么就按照Bank连续的方式进行存储,例如,对于单行运算结果数据601,圆点代表起点,按照Bank1、Bank2、Bank3……Bank8,Bank1、Bank2、Bank3……Bank8,……一直循环存储,直到单行运算结果数据601的终点,如三角代表终点。对于单行运算结果数据602,与单行运算结果数据601的区别在于,单行运算结果数据602的起点(即存储头地址)从Bank2开始进行存储,同理,单行运算结果数据603对应的数据从Bank3的位置开始进行存储,通过这种存储方式,由于每次需要读取的多行数据的X坐标都是对齐的,但是存储或者读取时访问的Bank并不同,可以保证单个PE单元能够一次性的读取或者存储单个输入通道下特征图像的多行数据,如一次性存储或者读取输入通道1中的单行运算结果数据601、单行运算结果数据602以及单行运算结果数据603,有效提升数据的读取或者存储的并行度,提升数据的读写效率。
图7示意性示出本公开示例性实施例中一种错开存储运算结果数据的原理示意图。
参考图7所示,以人工智能网络算法中相邻的两个网络层都是卷积层为例,假设卷积层A和卷积层B均为3*3卷积运算的算子。那么,对于卷积层A来说,其PE阵列每次生成的运算结果数据的张量大小是K=8,Xout=16,Yout=2,对于3*3的卷积运算来说,由于每一个存储阵列存储了单个输入通道上的数据,或者说,对于卷积层B来说,每一块存储阵列存储了其需要的单个输入通道上的数据,对于卷积层A来说,其结果数据返回存储阵列时,每一块存储阵列接收一个卷积层A输出通道上的数据。因此对于单个存储阵列来说,每次返回的结果数据的数据量为16*2个数据,那么每一组16比特(Byte)的数据存储位置是不同的Bank,如图6中线条601的起点和线条602的起点相差1个Bank,因此对于单个输出通道来说,卷积层A每次输出的2个16比特(Byte)的数据始终可以同时存入到不同的Bank中。
对于卷积层B来说,最右侧的PE列中的每一个PE单元需要读入一个18*4尺寸大小的张量数据,也就是4个18比特(Byte)的数据,或者说4行18比特(Byte)的数据,每行有18比特(Byte)的数据,在存储阵列中存储一块数据时可以位于两个Bank中,可以同时被读取,而四行数据,在Bank中每一行的起点实际上在Bank上也是错开一个。
具体的读取方式如图7所示,由于一个Bank的存储宽度是16比特,那么18比特的数据分布在两个Bank中,如第一个时钟周期取出1,8,15,22号数据,第二个时钟周期取出2,9,16,23号数据并与之前的1,8,15,22号数据进行拼接送出,与此同时,暂存3,10,17,24号数据,第三个时钟周期读取4,11,18,25号数据,与之前暂存的3,10,17,24号数据进行拼接送出,并暂存5,12,19,26号数据依次类推,所以,卷积层B始终可以一个时钟周期取得所需要的数据,数据存储或者读写的并行度高,有效提升运算引擎对数据的处理效率。
在一示例性实施例中,以人工智能网络算法中临近两个网络层都是卷积层,且卷积层A为3*3卷积运算的算子以及卷积层B为1*1卷积运算的算子为例,参考图6或者图7中的存储方式,卷积层A可以一次性将运算结果数据写入存储阵列中。但是对于卷积层B来说,1*1的卷积运算只能在输入通道上进行卷积并进行累加,但是按照图6的数据存储格式,在平面上的坐标相同、但是输入通道上不同的点位于同一个Bank内,所以在数据读取时并不能够同时取出,也就意味着,一个时钟周期内,对于一个PE单元上的一条乘累加树来说,有9个乘法器,但实际上只有一个乘法器在工作,也就是累加树的资源利用率是1/9,因此对于1*1的卷积运算需要采用不同的存储方式。
具体的,对于1*1卷积运算或者3*3卷积运算,可以响应检测到运算模式为1*1卷积运算,则将第一输入通道中处于第三纵坐标下的单行运算结果数据的存储头地址映射到第三Bank中;以及将第一输入通道中处于第四纵坐标下的单行运算结果数据的存储头地址映射到第四Bank中;同时将第二输入通道中处于第五纵坐标下的单行运算结果数据的存储头地址映射到第五Bank中;以及将第二输入通道中处于第六纵坐标下的单行运算结果数据的存储头地址映射到第六Bank中,实现将运算结果数据错开存储在存储阵列。
其中,第一输入通道和第二输入通道可以是运算结果数据中不同的输入通道,第三纵坐标和第四纵坐标可以是第一输入通道下特征图像数据中的不同纵坐标,第五纵坐标和第六纵坐标可以是第二输入通道下特征图像数据中的不同纵坐标。
需要说明的是,此处的“第一”、“第二”、“第三”、“第四”、“第五”、“第六”仅是用于区分不同的输入通道、纵坐标或者Bank的,没有任何特殊含义,并不应对本示例实施例造成任何特殊限定。
图8示意性示出本公开示例性实施例中另一种错开存储运算结果数据的存储方式的示意图。
参考图8所示,以单个存储阵列作为示例,在进行运算结果数据的存储时,不管是输入通道方向还是在高度(即不同纵坐标)方向上,均采用了Bank错开存储的机制,例如,在输入通道1的高度(即不同纵坐标)方向上的单行运算结果数据801、单行运算结果数据802以及单行运算结果数据803的起点(即存储头地址)分别处于Bank1、Bank2以及Bank3,在输入通道9的高度(即不同纵坐标)方向上的单行运算结果数据804、单行运算结果数据805以及单行运算结果数据806的起点(即存储头地址)分别处于Bank3、Bank4以及Bank5;在输入通道17的高度(即不同纵坐标)方向上的单行运算结果数据807、单行运算结果数据808以及单行运算结果数据809的起点(即存储头地址)分别处于Bank5、Bank6以及Bank7。在不同输入通道上纵坐标1处的单行运算结果数据801、单行运算结果数据804以及单行运算结果数据807的起点(即存储头地址)分别处于Bank1、Bank3以及Bank5;在不同输入通道上纵坐标2处的单行运算结果数据802、单行运算结果数据805以及单行运算结果数据808的起点(即存储头地址)分别处于Bank2、Bank4以及Bank6;在不同输入通道上纵坐标3处的单行运算结果数据803、单行运算结果数据806以及单行运算结果数据809的起点(即存储头地址)分别处于Bank3、Bank5以及Bank7。
这样,由于1*1的卷积运算只能在输入通道上进行卷积并进行累加,因此通过图8的存储方式,可以在一个时钟周期内一次性读取1*1的卷积运算所需要的多个数据,如可以在一个时钟周期内可以从Bank1、Bank3以及Bank5中取出相同XY坐标处在不同输入通道中的多个数据,充分利用PE单元的多个乘法器,在提高数据存储读取效率的同时,也提升了对运算引擎计算资源的利用率,进而提升运算任务的处理效率。
通过图8中的存储方式,对于3*3卷积运算来说,由于高度方向上采用了错开存储的机制,因此,卷积运算的运算结果数据可以一次输出到存储阵列,并且也可以一次从存储阵列中读入所需要的数据量。对于1*1卷积运算来说,由于需要一次性读入不同输入通道上的多个点并映射到乘累加树上的不同的位置,因此首先从Bank的错开存储机制上尽量能够取出多个输入通道上的不同点,所以在深度方向上,错开存储不同深度方向上的点。
因此通过在通道间存储时使用Bank错开和在高度方向上进行存储时使用Bank错开,3*3卷积运算的运算结果数据在输出的时候可以一次性进行存储,1*1卷积运算读取的时候也可以一次性的读出来。
但是随着网络中相邻的卷积层复杂度的增大,可能存在多种不同规格的相邻卷积的情况,不同的卷积参数可以导致不同的输入张量和输出张量的大小和形状,而这种差异性导致了在数据的存储和读取时,很难一个时钟周期写出或者读入PE阵列所需要的数据。
图9示意性示出本公开示例性实施例中一种数据重组的原理示意图。
参考图9所示,假设数据910可以表示卷积层A在一个时钟周期能够生成的输出数据维度,数据920可以表示卷积层B需要在一个时钟周期一次性读取的输入数据维度,卷积层A每生成4个输出的数据910,可以重组成2个完整的数据920供卷积层B进行消费。因此,任何两个不同维度的卷积算子之间的数据交互都可以概括为这种张量数据的数据重组。所以可以在PE阵列与存储阵列之间设置数据重组单元,用于输出数据的重组。
在一示例性实施例中,运算引擎可以用于执行人工智能网络中第一卷积层以及第二卷积层的运算过程,第一卷积层与第二卷积层为相邻网络层,运算引擎还可以包括数据重组单元。
具体的,可以获取由运算引擎执行第一卷积层的运算过程得到的输出数据,然后可以将输出数据输入到数据重组单元中进行数据拼接,得到符合第二卷积层的输入数据尺寸的运算结果数据,并且将数据重组得到的运算结果数据错开存储到存储阵列中,等待第二卷积层的消费。
可选的,数据重组单元可以包括至少两个数据重组寄存器(Reshuffle Buffer),输出数据包括第一输出数据以及第二输出数据;可以通过图10中的步骤实现对输出数据的重组,参考图10所示,具体可以包括:
步骤S1010,将所述第一输出数据输入到第一数据重组寄存器中进行数据拼接,得到第一运算结果数据,以使所述第二卷积层读取所述第一运算结果数据;以及
步骤S1020,在所述第二卷积层读取所述第一运算结果数据的同时,将所述第二输出数据输入到第二数据重组寄存器中进行数据拼接,得到第二运算结果数据。
其中,第一输出数据是指运算引擎执行第一卷积层的运算过程实时生成的一部分数据,第二输出数据是指运算引擎执行第一卷积层的运算过程实时生成的另一部分数据。
由于第一卷积层以及第二卷积层的卷积参数规格不同,导致第一卷积层输出的输出数据尺寸与第二卷积层所需要的输入数据尺寸不同,例如,假设第一卷积层在4个时钟周期内输出的4个运算结果数据可以在数据重组单元中重组成2个符合第二卷积层的输入数据尺寸的运算结果数据,但是,第二卷积层在读取运算结果数据的时候,第一卷积层如果继续在数据重组单元中写入数据,可能导致第二卷积层尚未读取完当前重组好的数据就被覆盖掉,因此,可以在数据重组单元中设置至少两个数据重组寄存器,这样,可以将第一输出数据输入到第一数据重组寄存器中进行数据拼接得到第一运算结果数据之后,在第二卷积层读取第一运算结果数据时,可以将第二输出数据输入到第二数据重组寄存器中进行数据拼接,得到第二运算结果数据,以此往复,有效提升第一卷积层以及第二卷积层之间的输出与输入的并行度,提升数据处理效率。
需要说明的是,本实施例中的“第一”、“第二”仅用于区分不同阶段的输出数据、运算结果数据以及不同的数据重组寄存器等,没有任何特殊含义,并不应对本示例实施例造成任何特殊限定。
图11示意性示出本公开示例性实施例中一种对输出数据重组得到运算结果数据的原理示意图。
参考图11所示,运算引擎中的PE阵列310以及存储阵列320之间可以设置数据重组单元,数据重组单元可以设置数据重组寄存器1110以及数据重组寄存器1120,数据重组寄存器可以包括多个多路选择器。
举例而言,首先运算引擎执行第一卷积层的运算过程得到的第一输出数据1130,然后将第一输出数据1130输入到第一数据重组寄存器1110中,通过第一数据重组寄存器1110中的多路选择器1140将所需要的数据进行数据拼接,得到符合第二卷积层的输入数据尺寸的第一运算结果数据1150,然后令第二卷积层读取第一运算结果数据1150并进行卷积运算;同时,运算引擎继续执行第一卷积层的运算过程得到的第二输出数据1160,然后将第二输出数据1160输入到第二数据重组寄存器1120中,通过第二数据重组寄存器1120中的多路选择器1170将所需要的数据进行数据拼接,得到符合第二卷积层的输入数据尺寸的第二运算结果数据1180,然后在第二卷积层读取完第一数据重组寄存器1110中的第一运算结果数据1150,并开始读取第二运算结果数据1180时,开始继续将后续运算引擎执行第一卷积层的运算过程得到的输出数据存储到第一数据重组寄存器1110进行数据拼接,以此往复,完成对第一卷积层以及第二卷积层的并行运算过程,有效提升人工智能网络的运算效率。
通过数据重组单元,前一网络层的卷积运算的运算结果数据可以保证一次性写入,也能够使得下一网络层的卷积运算可以一次性读出所需要的数据,有效提升了数据读取或者存储的并行度,提升数据的读写效率,提升对于人工智能网络算法的运算效率。
通过Bank错开存储结合数据重组单元的方案,能够在增加少数的存储资源(如数据重组单元)的情况下,极大地增加了数据读取和存储的并行度,减少了人工智能网络算法执行的延时,此外,由于数据传输过程中有效数据利用率提升,减少了数据传输的次数,一定程度上能够降低终端设备的功耗。
综上所述,本示例性实施方式中,在运算引擎输出运算结果数据时,确定运算结果数据对应的运算模式,并基于运算模式设置运算结果数据的存储地址,并根据存储地址将运算结果数据错开存储在存储阵列。一方面,根据运算结果数据对应的运算模式确定运算结果数据的存储格式即存储地址,使存储格式能够与运算结果数据的运算模式相对应,提升数据的存储效率以及读取效率,进而提高运算引擎的数据处理效率;另一方面,根据存储地址将运算结果数据错开存储在存储阵列,保证需要在同一时刻并行读取的数据存储在不同的存储阵列,能够有效提升运算结果数据在存储以及读取时的数据并行度,避免了数据在读取过程中的阻塞时延,保证数据的读取效率,进一步提升运算引擎的数据处理效率。
需要注意的是,上述附图仅是根据本公开示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
进一步的,参考图12所示,本示例的实施方式中还提供一种数据存储装置1200,包括数据获取模块1210、运算模式确定模块1220和数据存储模块1230。其中:
数据获取模块1210用于获取所述运算引擎输出的运算结果数据;
运算模式确定模块1220用于确定所述运算结果数据对应的运算模式;
数据存储模块1230用于基于所述运算模式设置所述运算结果数据的存储地址,并根据所述存储地址将所述运算结果数据错开存储在存储阵列。
在一示例性实施例中,存储阵列可以包括多Bank存储器,数据存储模块1230可以用于:
根据所述存储地址将所述运算结果数据中需要在同一时刻并行读取的数据存储在不同的Bank中。
在一示例性实施例中,运算结果数据可以包括多个输入通道,每个输入通道可以包括不同纵坐标下的单行运算结果数据;数据存储模块1130可以用于:
响应检测到所述运算模式为3*3卷积运算,则将第一纵坐标下的单行运算结果数据的存储头地址映射到第一Bank中;以及
将第二纵坐标下的单行运算结果数据的存储头地址映射到第二Bank中,实现将所述运算结果数据错开存储在存储阵列。
在一示例性实施例中,所述运算结果数据包括多个输入通道,所述每个输入通道包括不同纵坐标下的单行运算结果数据;数据存储模块1230可以用于:
响应检测到所述运算模式为1*1卷积运算,则将第一输入通道中处于第三纵坐标下的单行运算结果数据的存储头地址映射到第三Bank中;以及将第一输入通道中处于第四纵坐标下的单行运算结果数据的存储头地址映射到第四Bank中;同时
将第二输入通道中处于第五纵坐标下的单行运算结果数据的存储头地址映射到第五Bank中;以及将第二输入通道中处于第六纵坐标下的单行运算结果数据的存储头地址映射到第六Bank中,实现将所述运算结果数据错开存储在存储阵列。
在一示例性实施例中,运算引擎可以用于执行人工智能网络中第一卷积层以及第二卷积层的运算过程,第一卷积层与第二卷积层可以为相邻网络层,运算引擎可以包括数据重组单元;数据获取模块1210可以用于:
获取由所述运算引擎执行所述第一卷积层的运算过程得到的输出数据;
将所述输出数据输入到所述数据重组单元中进行数据拼接,得到符合所述第二卷积层的输入数据尺寸的运算结果数据。
在一示例性实施例中,数据重组单元可以包括至少两个数据重组寄存器,输出数据可以包括第一输出数据以及第二输出数据;数据存储装置1200还包括数据重组单元,数据重组单元可以用于:
将所述第一输出数据输入到第一数据重组寄存器中进行数据拼接,得到第一运算结果数据,以使所述第二卷积层读取所述第一运算结果数据;以及
在所述第二卷积层读取所述第一运算结果数据的同时,将所述第二输出数据输入到第二数据重组寄存器中进行数据拼接,得到第二运算结果数据。
在一示例性实施例中,运算引擎可以包括张量运算引擎,张量运算引擎可以包括8*8的PE单元阵列,每个PE单元可以包括32个乘累加树,每个乘累加树可以包括9个乘法累加器。
上述装置中各模块的具体细节在方法部分实施方式中已经详细说明,未披露的细节内容可以参见方法部分的实施方式内容,因而不再赘述。
所属技术领域的技术人员能够理解,本公开的各个方面可以实现为系统、方法或程序产品。因此,本公开的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
本公开的示例性实施方式提供一种用于实现数据存储方法的电子设备,其可以是图1中的终端设备101、102、103或者服务器105。该电子设备至少包括处理器和存储器,存储器用于存储处理器的可执行指令,处理器配置为经由执行可执行指令来执行数据存储方法。
下面以图13中的电子设备1300为例,对本公开中的电子设备的构造进行示例性说明。图13所示的电子设备1300仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图13所示,电子设备1300以通用计算设备的形式表现。电子设备1300的组件可以包括但不限于:至少一个处理单元1310、至少一个存储单元1320、连接不同系统组件(包括存储单元1320和处理单元1310)的总线1330、显示单元1340。
其中,存储单元1320存储有程序代码,程序代码可以被处理单元1310执行,使得处理单元1310执行本说明书中的数据存储方法。
存储单元1320可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)1321和/或高速缓存存储单元1322,还可以进一步包括只读存储单元(ROM)1323。
存储单元1320还可以包括具有一组(至少一个)程序模块1325的程序/实用工具1324,这样的程序模块1325包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线1330可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备1300也可以与一个或多个外部设备1370(例如传感器设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备1300交互的设备通信,和/或与使得该电子设备1300能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口1350进行。并且,电子设备1300还可以通过网络适配器1360与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器1360通过总线1330与电子设备1300的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备1300使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器、数据备份存储系统以及传感器模块(如陀螺仪传感器、磁传感器、加速度传感器、距离传感器、接近光传感器等)。
通过以上的实施例的描述,本领域的技术人员易于理解,这里描述的示例实施例可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开实施例的方法。
本公开的示例性实施方式还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施方式中,本公开的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在终端设备上运行时,程序代码用于使终端设备执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施方式的步骤。
需要说明的是,本公开所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
此外,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开操作的程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其他实施例。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限。
Claims (10)
1.一种数据存储方法,其特征在于,由配置有至少一个运算引擎的终端设备执行,所述方法包括:
获取所述运算引擎输出的运算结果数据;
确定所述运算结果数据对应的运算模式;
基于所述运算模式设置所述运算结果数据的存储地址,并根据所述存储地址将所述运算结果数据错开存储在存储阵列。
2.根据权利要求1所述的方法,其特征在于,所述存储阵列包括多Bank存储器,所述根据所述存储地址将所述运算结果数据错开存储在存储阵列中,包括:
根据所述存储地址将所述运算结果数据中需要在同一时刻并行读取的数据存储在不同的Bank中。
3.根据权利要求2所述的方法,其特征在于,所述运算结果数据包括多个输入通道,所述每个输入通道包括不同纵坐标下的单行运算结果数据;
所述基于所述运算模式设置所述运算结果数据的存储地址,并根据所述存储地址将所述运算结果数据错开存储在存储阵列中,包括:
响应检测到所述运算模式为3*3卷积运算,则将第一纵坐标下的单行运算结果数据的存储头地址映射到第一Bank中;以及
将第二纵坐标下的单行运算结果数据的存储头地址映射到第二Bank中,实现将所述运算结果数据错开存储在存储阵列。
4.根据权利要求2所述的方法,其特征在于,所述运算结果数据包括多个输入通道,所述每个输入通道包括不同纵坐标下的单行运算结果数据;
所述基于所述运算模式设置所述运算结果数据的存储地址,并根据所述存储地址将所述运算结果数据错开存储在存储阵列中,包括:
响应检测到所述运算模式为1*1卷积运算,则将第一输入通道中处于第三纵坐标下的单行运算结果数据的存储头地址映射到第三Bank中;以及将第一输入通道中处于第四纵坐标下的单行运算结果数据的存储头地址映射到第四Bank中;同时
将第二输入通道中处于第五纵坐标下的单行运算结果数据的存储头地址映射到第五Bank中;以及将第二输入通道中处于第六纵坐标下的单行运算结果数据的存储头地址映射到第六Bank中,实现将所述运算结果数据错开存储在存储阵列。
5.根据权利要求1所述的方法,其特征在于,所述运算引擎用于执行人工智能网络中第一卷积层以及第二卷积层的运算过程,所述第一卷积层与所述第二卷积层为相邻网络层,所述运算引擎包括数据重组单元;
所述获取所述运算引擎输出的运算结果数据,包括:
获取由所述运算引擎执行所述第一卷积层的运算过程得到的输出数据;
将所述输出数据输入到所述数据重组单元中进行数据拼接,得到符合所述第二卷积层的输入数据尺寸的运算结果数据。
6.根据权利要求5所述的方法,其特征在于,所述数据重组单元包括至少两个数据重组寄存器,所述输出数据包括第一输出数据以及第二输出数据;所述方法还包括:
将所述第一输出数据输入到第一数据重组寄存器中进行数据拼接,得到第一运算结果数据,以使所述第二卷积层读取所述第一运算结果数据;以及
在所述第二卷积层读取所述第一运算结果数据的同时,将所述第二输出数据输入到第二数据重组寄存器中进行数据拼接,得到第二运算结果数据。
7.根据权利要求1所述的方法,其特征在于,所述运算引擎包括张量运算引擎,所述张量运算引擎包括8*8的PE单元阵列,每个所述PE单元包括32个乘累加树,每个所述乘累加树包括9个乘法累加器。
8.一种数据存储装置,其特征在于,设置在配置有至少一个运算引擎的终端设备中,所述装置包括:
数据获取模块,用于获取所述运算引擎输出的运算结果数据;
运算模式确定模块,用于确定所述运算结果数据对应的运算模式;
数据存储模块,用于基于所述运算模式设置所述运算结果数据的存储地址,并根据所述存储地址将所述运算结果数据错开存储在存储阵列。
9.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述的方法。
10.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1至7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210480784.7A CN117055800A (zh) | 2022-05-05 | 2022-05-05 | 数据存储方法及装置、计算机可读介质和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210480784.7A CN117055800A (zh) | 2022-05-05 | 2022-05-05 | 数据存储方法及装置、计算机可读介质和电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117055800A true CN117055800A (zh) | 2023-11-14 |
Family
ID=88657711
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210480784.7A Pending CN117055800A (zh) | 2022-05-05 | 2022-05-05 | 数据存储方法及装置、计算机可读介质和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117055800A (zh) |
-
2022
- 2022-05-05 CN CN202210480784.7A patent/CN117055800A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3451162B1 (en) | Device and method for use in executing matrix multiplication operations | |
CN112214726B (zh) | 运算加速器 | |
JP6762352B2 (ja) | ニューラルネットワークにおける畳み込み計算のための方法および電子デバイス | |
JP6813561B2 (ja) | ニューラルネットワークにおける畳み込み計算のための方法および電子デバイス | |
CN107832843B (zh) | 一种信息处理方法及相关产品 | |
KR102443546B1 (ko) | 행렬 곱셈기 | |
EP3832499B1 (en) | Matrix computing device | |
CN109086877B (zh) | 一种用于执行卷积神经网络正向运算的装置和方法 | |
EP3944157A1 (en) | Device and method for performing training of convolutional neural network | |
CN104915322B (zh) | 一种卷积神经网络硬件加速方法 | |
US20180107630A1 (en) | Processor and method for executing matrix multiplication operation on processor | |
CN111338695B (zh) | 基于流水线技术的数据处理方法及相关产品 | |
CN107315716B (zh) | 一种用于执行向量外积运算的装置和方法 | |
JP2023513608A (ja) | アドレス生成方法及びユニット、深層学習処理器、チップ、電子機器並びにコンピュータプログラム | |
US9244886B1 (en) | Minimum resource fast fourier transform | |
CN109711540B (zh) | 一种计算装置及板卡 | |
CN107305486B (zh) | 一种神经网络maxout层计算装置 | |
EP3447690A1 (en) | Maxout layer operation apparatus and method | |
WO2022068328A1 (zh) | 数据迁移的方法、装置、处理器和计算设备 | |
CN113918233A (zh) | 一种ai芯片控制方法、电子设备及ai芯片 | |
CN117055800A (zh) | 数据存储方法及装置、计算机可读介质和电子设备 | |
CN111931937B (zh) | 图像处理模型的梯度更新方法、装置及系统 | |
CN116804915B (zh) | 基于存储器的数据交互方法、处理器、设备以及介质 | |
US20230252600A1 (en) | Image size adjustment structure, adjustment method, and image scaling method and device based on streaming architecture | |
WO2021179175A1 (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 |