一种地址生成的方法、相关装置以及存储介质与流程

文档序号:21778970发布日期:2020-08-07 19:52阅读:275来源:国知局
一种地址生成的方法、相关装置以及存储介质与流程

本申请涉及芯片技术领域,尤其涉及一种地址生成的方法、相关装置以及存储介质。



背景技术:

伴随着半导体技术的发展,硬件的计算能力得到了迅速的增强,各种大数据的处理时间逐渐减少。基于此,人工神经网络技术也得到了进一步发展。而神经网络通常都非常庞大,这也意味着这些神经网络需要大量的计算资源和存储资源,而寻址是连接计算和存储的关键,数据是否能快速到达是决定计算效率的关键,因此,对深度学习处理器的处理效率也有更好地要求。

在向量处理器的设计中,可采用步长访问(strideaccess)模式来实现对规则数据的地址访问。即,通过当前数据的访问地址加上步长可计算出下一个数据的访问地址。使用strideaccess模式时,由地址生成单元(addressgenerationunit,agu)生成连续的访问地址,通过多次访存流水,还能够达到降低开销的目的。

在深度学习处理器中,需要执行大量的张量运算。然而,strideaccess模式是针对于向量运算而设计的,无法支持张量遍历过程中的多种参数,导致遍历过程经常被控制信号中断,降低了数据访存的效率。



技术实现要素:

本申请实施例提供了一种地址生成的方法、相关装置以及存储介质,基于张量的计算特征,对于张量在深度、滑窗和特征图等不同维度上配置对应的执行参数,根据执行参数以及数据在深度、滑窗和特征图等不同维度上的计数值,计算出数据所对应的目标地址,由此,实现在输入的张量上顺次读取数据的目的,从而提升了数据访存的效率。

有鉴于此,本申请一方面提供一种地址生成的方法,包括:

基于超长指令字解析得到执行参数,其中,执行参数用于确定滑窗宽度值范围、滑窗宽度步长、滑窗高度值范围、滑窗高度步长、特征图宽度值范围以及特征图高度值范围;

若第一目标数据对应的深度计数值超过深度计数范围,则获取第一目标数据对应的第一滑窗宽度计数值、第一滑窗高度计数值、第一特征图宽度计数值以及第一特征图高度计数值;

若第一滑窗宽度计数值在滑窗宽度值范围内,且第一滑窗高度计数值在滑窗高度值范围内,且第一特征图宽度计数值在特征图宽度值范围内,且第一特征图高度计数值在特征图高度值范围内,则根据第一滑窗宽度计数值、滑窗宽度步长、第一滑窗高度计数值、滑窗高度步长、第一特征图宽度计数值以及第一特征图高度计数值,确定第一目标数据的偏移量;

获取第一目标数据的起始地址;

对起始地址与偏移量进行求和,得到第一目标数据的第一目标地址。

本申请另一方面提供一种地址生成单元,包括:

解析模块,基于超长指令字解析得到执行参数,其中,执行参数用于确定滑窗宽度值范围、滑窗宽度步长、滑窗高度值范围、滑窗高度步长、特征图宽度值范围以及特征图高度值范围;

获取模块,用于若第一目标数据对应的深度计数值超过深度计数范围,则获取第一目标数据对应的第一滑窗宽度计数值、第一滑窗高度计数值、第一特征图宽度计数值以及第一特征图高度计数值;

确定模块,用于若第一滑窗宽度计数值在滑窗宽度值范围内,且第一滑窗高度计数值在滑窗高度值范围内,且第一特征图宽度计数值在特征图宽度值范围内,且第一特征图高度计数值在特征图高度值范围内,则根据第一滑窗宽度计数值、滑窗宽度步长、第一滑窗高度计数值、滑窗高度步长、第一特征图宽度计数值以及第一特征图高度计数值,确定第一目标数据的偏移量;

获取模块,还用于获取第一目标数据的起始地址;

计算模块,用于对起始地址与偏移量进行求和,得到第一目标数据的第一目标地址。

在一种可能的设计中,在本申请实施例的另一方面的一种实现方式中,

确定模块,具体用于对第一滑窗宽度计数值以及滑窗宽度步长进行求和,得到第二滑窗宽度计数值;

对第一滑窗高度计数值以及滑窗高度步长进行求和,得到第二滑窗高度计数值;

对第二滑窗宽度计数值以及第一特征图宽度计数值进行求和,得到宽度计数值;

对第二滑窗高度计数值以及第一特征图高度计数值进行求和,得到高度计数值;

对高度计数值以及行间距系数的乘积结果以及宽度计数值与列间距系数的乘积结果进行求和,得到第一目标数据的偏移量。

在一种可能的设计中,在本申请实施例的另一方面的另一种实现方式中,

获取模块,具体用于获取第一目标数据所对应的基础地址,其中,基础地址为基于超长指令字解析得到的配置参数;

获取第一目标数据所对应的切片计数值以及批量计数值;

对切片计数值以及切片地址增量的乘积结果以及批量计数值与批量地址增量的乘积结果进行求和,得到地址总增量,其中,切片地址增量以及批量地址增量均为基于超长指令字解析得到的配置参数;

对地址总增量以及基础地址进行求和,得到第一目标数据的起始地址。

在一种可能的设计中,在本申请实施例的另一方面的另一种实现方式中,地址生成单元还包括处理模块;

处理模块,用于若第一目标数据对应的深度计数值超过深度计数范围,则对第一滑窗宽度计数值执行进位操作,并对深度计数值进行重置处理。

在一种可能的设计中,在本申请实施例的另一方面的另一种实现方式中,执行参数还用于确定特征图宽度步长以及特征图高度步长;

处理模块,还用于若第一滑窗宽度计数值未在滑窗宽度值范围内,且第一滑窗高度计数值在滑窗高度值范围内,则对第一滑窗高度计数值执行进位操作,并对第一滑窗宽度计数值进行重置处理;

处理模块,还用于若第一滑窗宽度计数值未在滑窗宽度值范围内,且第一滑窗高度计数值未在滑窗高度值范围内,则对第一特征图宽度计数值执行进位操作,并对第一滑窗宽度计数值、第一滑窗高度计数值以及深度计数值进行重置处理;

处理模块,具体用于对第一特征图宽度计数值以及特征图宽度步长进行求和,得到第二特征图宽度计数值。

在一种可能的设计中,在本申请实施例的另一方面的另一种实现方式中,

处理模块,还用于若第一特征图宽度计数值不在特征图宽度值范围内,则对第一特征图宽度计数值执行进位操作,并对第一特征图宽度计数值进行重置处理;

处理模块,还用于若第一特征图高度计数值不在特征图高度值范围内,则对第一特征图高度计数值执行进位操作,并对第一特征图高度计数值进行重置处理;

处理模块,还用于若第一特征图高度计数值未在特征图高度值范围内,则对切片计数值执行进位操作,并对第一滑窗宽度计数值、第一滑窗高度计数值、第一特征图宽度计数值以及第一特征图高度计数值以及深度计数值进行重置处理;

处理模块,具体用于对第一特征图高度计数值以及特征图高度步长进行求和,得到第二特征图高度计数值。

在一种可能的设计中,在本申请实施例的另一方面的另一种实现方式中,

处理模块,还用于若切片计数值超过最大切片取值范围,则对批量计数值执行进位操作,并对切片计数值、第一滑窗宽度计数值、第一滑窗高度计数值、第一特征图宽度计数值以及第一特征图高度计数值以及深度计数值进行重置处理,其中,最大切片取值范围为根据第一目标数据对应的张量深度值和向量并行度确定的;

处理模块,还用于若批量计数值大于或等于最大批量取值,则对批量计数值、切片计数值、第一滑窗宽度计数值、第一滑窗高度计数值、第一特征图宽度计数值以及第一特征图高度计数值以及深度计数值进行重置处理,其中,最大批量取值为基于超长指令字解析得到的配置参数。

在一种可能的设计中,在本申请实施例的另一方面的另一种实现方式中,地址生成单元还包括读取模块以及发送模块;

读取模块,用于对起始地址与偏移量进行求和,得到第一目标数据的第一目标地址之后,基于第一目标地址,通过第一数据通道读取第一目标数据;

发送模块,用于通过第二数据通道向算术逻辑单元发送第一目标数据;

读取模块,还用于对起始地址与偏移量进行求和,得到第一目标数据的第一目标地址之后,当获取到第二目标数据的第二目标地址时,基于第二目标地址,通过第三数据通道读取第二目标数据,其中,第二目标地址为第一目标地址相邻的下一个物理地址;

发送模块,还用于通过第四数据通道向算术逻辑单元发送第二目标数据。

在一种可能的设计中,在本申请实施例的另一方面的另一种实现方式中,

读取模块,还用于对起始地址与偏移量进行求和,得到第一目标数据的第一目标地址之后,基于第一目标地址,通过第一数据通道读取第一目标数据;

发送模块,还用于通过第二数据通道向算术逻辑单元发送第一目标数据;

读取模块,还用于对起始地址与偏移量进行求和,得到第一目标数据的第一目标地址之后,当获取到第二目标数据的第二目标地址时,基于第二目标地址,通过第一数据通道读取第二目标数据,其中,第二目标地址为第一目标地址相邻的下一个物理地址;

发送模块,还用于通过第三数据通道向算术逻辑单元发送第二目标数据。

在一种可能的设计中,在本申请实施例的另一方面的另一种实现方式中,向量并行度对应于向量层级,滑窗宽度值范围对应于滑窗宽度层级,滑窗高度值范围对应于滑窗高度层级,特征图宽度值范围对应于特征图宽度层级,特征图高度值范围对应于特征图高度层级,最大切片取值范围对应于切片层级,最大批量取值对应于批量层级;

地址生成单元还包括禁用模块;

禁用模块,用于若向量层级所对应的起始计数值以及终止计数值相等,则禁用向量层级所对应的循环功能;

禁用模块,还用于若滑窗宽度层级所对应的起始计数值以及终止计数值相等,则禁用滑窗宽度层级所对应的循环功能;

禁用模块,还用于若滑窗高度层级所对应的起始计数值以及终止计数值相等,则禁用滑窗高度层级所对应的循环功能;

禁用模块,还用于若特征图宽度层级所对应的起始计数值以及终止计数值相等,则禁用特征图宽度层级所对应的循环功能;

禁用模块,还用于若特征图高度层级所对应的起始计数值以及终止计数值相等,则禁用特征图高度层级所对应的循环功能;

禁用模块,还用于若切片层级所对应的起始计数值以及终止计数值相等,则禁用切片层级所对应的循环功能;

禁用模块,还用于若批量层级所对应的起始计数值以及终止计数值相等,则禁用批量层级所对应的循环功能。

在一种可能的设计中,在本申请实施例的另一方面的另一种实现方式中,

向量层级对应于第一循环起始信号以及第一循环结束信号;

滑窗宽度层级对应于第二循环起始信号以及第二循环结束信号;

滑窗高度层级对应于第三循环起始信号以及第三循环结束信号;

特征图宽度层级对应于第四循环起始信号以及第四循环结束信号;

特征图高度层级对应于第五循环起始信号以及第五循环结束信号;

切片层级对应于第六循环起始信号以及第六循环结束信号;

批量层级对应于第七循环起始信号以及第七循环结束信号。

本申请的另一方面提供了一种计算机可读存储介质,计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面的方法。

本申请的另一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方面种各种可选实现方式所提供的方法。

从以上技术方案可以看出,本申请实施例具有以下优点:

本申请实施例中,提供了一种地址生成的方法,通过该方法可以基于超长指令字解析得到执行参数,该执行参数用于确定滑窗宽度值范围、滑窗宽度步长、滑窗高度值范围、滑窗高度步长、特征图宽度值范围以及特征图高度值范围,当第一目标数据对应的深度计数值小于向量并行度时,可以获取第一目标数据对应的第一滑窗宽度计数值、第一滑窗高度计数值、第一特征图宽度计数值以及第一特征图高度计数值,当若第一滑窗宽度计数值在滑窗宽度值范围内,且第一滑窗高度计数值在滑窗高度值范围内,且第一特征图宽度计数值在特征图宽度值范围内,且第一特征图高度计数值在特征图高度值范围内时,可以根据第一滑窗宽度计数值、滑窗宽度步长、第一滑窗高度计数值、滑窗高度步长、第一特征图宽度计数值以及第一特征图高度计数值,确定第一目标数据的偏移量,再由此获取第一目标数据的起始地址,最后对起始地址与偏移量进行求和,得到第一目标数据的第一目标地址。通过上述方式,基于张量的计算特征,对于张量在深度、滑窗和特征图等不同维度上配置对应的执行参数,根据执行参数以及数据在深度、滑窗和特征图等不同维度上的计数值,计算出数据所对应的目标地址,由此,实现在输入的张量上顺次读取数据的目的,从而提升了数据访存的效率。

附图说明

图1为本申请实施例中张量的一个实施例示意图;

图2为本申请实施例中张量运算过程的一个实施例示意图;

图3为本申请实施例中地址生成单元的一个架构示意图;

图4为本申请实施例中基于计数器级联的多级迭代一个实施例示意图;

图5为本申请实施例中地址生成的方法一个实施例示意图;

图6为本申请实施例中基于窗口进行计数的一个实施例示意图;

图7为本申请实施例中行间距系数的一个实施例示意图;

图8为本申请实施例中针对滑窗进行进位的一个实施例示意图;

图9为本申请实施例中数据使用不同访存地址的一个实施例示意图;

图10为本申请实施例中读取以及发送目标数据另一实施例示意图;

图11为本申请实施例中地址生成单元一个实施例示意图;

图12是本申请实施例中电子设备的一个结构示意图。

具体实施方式

本申请实施例提供了一种地址生成的方法、相关装置以及存储介质,基于张量的计算特征,对于张量在深度、滑窗和特征图等不同维度上配置对应的执行参数,根据执行参数以及数据在深度、滑窗和特征图等不同维度上的计数值,计算出数据所对应的目标地址,由此,实现在输入的张量上顺次读取数据的目的,从而提升了数据访存的效率。

本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“对应于”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

应理解,本申请提供了一种可针对张量生成地址的方法,具体应用于深度学习处理器中。为了便于更好地理解本申请,下面将对本申请中涉及到部分概念进行介绍。

一、关于张量(tensor);

1、批量(batch);

请参阅图1,图1为本申请实施例中tensor的一个实施例示意图,如图所示,图1中(a)图中示出的为一个tensor的一个batch,该batch的深度表示为c0,高度表示为h0,宽度表示为w0。

2、图块(tile);

请参阅图1中的(b)图,其中,a1所指示的为batch,对一个batch进行切割后,可以得到a2所指示的tile,tile对应的深度表示为m,高度表示为h,宽度w。需要说明的是,tile是片上存储器不能缓存全部tensor而进行切割后得到的,如果片上存储器可以缓存整个tensor时,则不进行tile维度的切分,即整个张量可视为一个tile。

3、切片(slice);

请参阅图1中的(b)图,其中,a3所指示的为slice,对一个tile进行切割后,可以得到a3所指示的slice,slice的高度表示为h,宽度表示为w,slice在宽度和高度的坐标为(x,y)时,得到对应的长度为m的向量(vector)。

4、特征图(featuremap);

请参阅图1中的(b)图,其中,a4所指示的为尺寸为h*w*1的featuremap,其中,“1”表示featuremap的深度,对一个slice进行切割后,可以得到a4所指示的featuremap,假设slice对应于128个数据通道(channel),则对该slice进行分割可以得到128个featuremap。

5、核窗口(kernel_window),也可简称为“窗口(window)”,本申请中涉及的“窗口”或“滑窗”即可理解为是“核窗口”;

请参阅图1中的(c)图,其中,a5所指示的为kernel_window,kernel_window在featuremap上以滑动的方式取值。

对于一个张量而言,可以包括vector、kernel_window、featuremap、slice、tile以及batch等概念。

二、关于tensor运算;

tensor运算的特定是,对于一种算子(或函数)而言,数据访问的地址往往是规则化且可以计算的。以池化(pool)运算作为示例,池化是以循环(loop)为核心的运算,在经过中央处理单元(centralprocessingunit,cpu)或者图形处理器(graphicsprocessingunit,gpu)编译后,从被执行的指令流来看,存在大量重复指令段,将重复的指令数量以kernel_window、slice以及batch为重复周期,确定的指令执行顺序,再确定数据排列格式(例如,nhwc(批量,高度,宽度,通道数)),最后确定数据访存地址,即优先顺次访问kernel_window内的数据,然后将kernel_window移动固定的步长(stride),获得下一个kernel_window,因此,数据访问的地址是规则化并且可计算的。基于上述特征,可根据tensor计算的特性,对深度学习处理器中的向量处理单元进行优化。当每一次操作都为可预知的确定性操作,则可最大利用访存接口的带宽,将所有访存操作流水起来,使每个时钟周期都有一组用于计算的向量数据到达运算单元,从而降低访存损耗。因此在处理三维的tensor时,根据vector、kernel_window、featuremap、slice、tile以及batch等不同维度的对应参数,在输入的一个或多个batch的tensor上顺次读取数据,发送至运算单元,例如,算术逻辑单元(arithmeticlogicunit,alu)。因此,深度学习处理器中芯片的地址生成单元(addressgenerationunit,agu)可以根据tensor访存特性简化设计,从而提升访存效率。

为了便于理解,请参阅图2,图2为本申请实施例中tensor运算过程的一个实施例示意图,如图所示,tensor中的每个slice对应多个kernel_window,kernel_window中也可以包括至少一个数据,其中,b1以及b2分别指示不同的kernel_window,b11至b12指示的数据均属于kernel_windowb1,b21至b22指示的数据均属于kernel_windowb2。需要说明的是,本申请不对图2中b11至b12之间的数量量以及b21至b22之间的数量量进行限定,将kernel_window以一个stride为单位在各个深度的featuremap上进行滑动,每滑动一个位置,将kernel_window内一个数据从片上存储器(onchip-memory)内顺次读出,多个kernel_window读出的数据形成连续不断的数据流。在每个时钟周期内对应一个kernel_window的二维坐标,索引出一个1*1*vep的向量数据,并将向量数据输入至多个alu中进行运算。具体地,为了区分不同kernel_window所对应的数据,可以在每个kernel_window中的第一个数据和最后一个数据中加入标识。例如,一个kernel_windowb1中的第一个数据b11中添加起始窗口标识,在kernel_windowb1中的最后一个数据b12中添加结束窗口标识,又例如,在下一个kernel_windowb2中的第一个数据b21中添加起始窗口标识,而在kernel_windowb2中的最后一个数据b22中添加结束窗口标识。将kernel_windowb1以及kernel_windowb2中的数据输入至alu,alu可以通过channel接收窗口标识(即起始窗口标识或结束窗口标识),因此,当将kernel_window的起始窗口标识和结束窗口标识配置为操作的触发条件时,在alu获取窗口b1中第一个数据b11携带的起始窗口标识的情况下,可以确定当前计算的为kernel_windowb1内的数据,当alu获取kernel_windowb1中最后一个数据b12携带的结束窗口标识时,可以确定当前kernel_windowb1内的数据已输入完成,以此类推。

三、关于深度学习处理器;

在深度学习处理器中可以进行计算和供数,供数则是在计算时,把待计算数据传递到计算单元,由于存储器常采用多级架构,因此供数通常包括芯片之外的存储器(offchip-memory)到片上存储器(onchip-memory),onchip-memory到专供alu使用的缓冲器(onchip-near-alu-buffer)或onchip-memory到专供alu使用的寄存器文件(onchip-near-alu-registerfile),以及onchip-near-alu-buffer到alu的三级传递,其中,offchip-memory到onchip-memory,以及onchip-memory到onchip-near-alu-buffer的传递主要为数据准备环节,而onchip-near-alu-buffer到alu为计算中的数据读入环节,本申请提供的agu用于解决从onchip-near-alu-buffer到alu的数据读入环节的问题,或者解决从onchip-memory到alu的数据读入环节的问题,所提供的地址生成的方法可以在agu中针对tensor访问进行参数化,从而实现一套参数支持多种访问模式,提升tensor访存的通用性,并对输入的tensor上顺次读取数据,从而提升数据访存的效率。

具体地,在agu的地址访问中,访问对象格式为实现尺寸为的tensor的顺次访问。其中,表示一个slice下,对输入tensor在c维度上进行截取后的子tensor,与单指令多数据(singleinstructionmultidata,simd)处理器中的alu在c维度的并行度一致。分别小于或等于输入tensor的,其取值取决于计算单元可以直接访问的存储器的容量。

为了便于理解,请参阅图3,图3为本申请实施例中agu的一个架构示意图,如图所示,在agu运行之前,指令解码器(instructiondecoder)对接受的simd进行解析,获得各个agu组件的执行参数,并发送到对应的agu。agu分为用于读取数据的agu(即agu_r)和用于写回数据的agu(即agu_w),图3中的agu_r0至agu_rn均为用于读取的agu,可读取数据缓冲区(databuffer)中的数据,图3中的agu_w0至agu_wn均为用于写入的agu,可将数据写回至databuffer,每个agu在每个时钟周期(clock,clk)下输出一个向量数据,经过多个clk得到数据流。可以理解的是,在实际应用中,agu_r和agu_w的数量可根据设计进行调整,agu_r和agu_w的数量可以相等也可以不等,此处不做限定。

在执行数据运算之前,需要先对agu_r和agu_w的执行参数进行配置,agu_r按照多级循环的数据访问顺序,在每个clk发送一个读取地址,并且接收一组包括k个clk前发出地址对应的数据,经过掩码(mask)选通后,屏蔽掉深度维度上未使能的通道后到达alu。由alu进行计算,再经过mask选通后,将结果发送到agu_w,触发agu_w以获得该数据的写回地址,通过多路选择器(mux)通路写回databuffer。当alu产生多个要写回的结果时,会触发agu_w模块输出对应的写回地址。可以理解的是,databuffer可为一个具备多个读端口和写端口的缓冲区,也可以由多个具备1读1写的缓冲区构成,此处不做限定。

对于agu_r而言,在数据流输入时,每个clk发出一个向量数据的读取地址,经过k个clk的读取延迟后数据到达计算单元,由于每个clk都可以发出一个读取地址,多个读取操作按照流水线并行的方式执行,因此,每个clk都有一个读取的向量数据达到计算单元。每个agu对应一个数据流,例如,一个agu对应tensora的数据流,另一个agu对应tensorb的数据流。在数据读写中,支持基于窗口内数据在计数范围内根据步长参数实现顺次访问的读取模式,支持基于窗口内数据的从右到左且从下到上读取模式,此处不对读取次序进行限定。基于滑窗的操作(如深度卷积(depthwisecov),最大池化(maxpool)、平均池化(avgpool)、上采样(upsampling)等)支持连续数据的重复读取,基于深度卷积中,支持权值数据顺序重复读取。

四、关于多级cnt(counter,cnt);

agu可以通过级联多级cnt构成,每一级cnt采用同一套设计,在应用中配置不同的参数,为了便于理解,请参阅图4,图4为本申请实施例中基于cnt级联的多级迭代一个实施例示意图,如图所示,有多个层级的cnt串联,即l0_cnt级联至l6_cnt,当下一层级的cnt计数达到上限值时,则向上一层级cnt进位。同时,更新当前输出的计数值。具体地,l0计数表示向量内循环(vectorloop)的计数,l1计数表示滑窗宽度循环(windowwidthloop)的计数,l2计数表示滑窗高度循环(windowheightloop)的计数,l3计数表示特征图宽度循环(featuremapwidthloop)的计数,l4计数表示特征图高度循环(featuremapheightloop)的计数,l5计数表示切片循环(sliceloop)的计数,而l6计数表示批量循环(batchloop)的计数,l5计数以及l6计数为控制部分,而l0计数至l4计数为是一次调用的循环,即l0计数至l4计数完成一次调用后才会向l5计数进位,在l0计数结束后会向databuffer发出一次读地址,若l0计数中的深度计数值取消使能,则每个agu都会向databuffer发送一组读地址,从而使得alu在运算时,从该读地址中获取对应的数据。

需要说明的是,每个l0_cnt至l6_cnt分别对应于一个层级,在后续实施例中,可将层级理解为“loop”,即一个层级对应于一个loop。

应理解,深度学习处理器广泛应用于人工智能(artificialintelligence,ai)领域,人工智能是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。换句话说,人工智能是计算机科学的一个综合技术,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。人工智能也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能。

人工智能技术是一门综合学科,涉及领域广泛,既有硬件层面的技术也有软件层面的技术。人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。其中,机器学习(machinelearning,ml)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。机器学习是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。机器学习和深度学习通常包括人工神经网络、置信网络、强化学习、迁移学习、归纳学习、式教学习等技术。

在实际应用中,可以在服务器侧或者终端设备侧对tensor进行存储和处理,当数据量较大时,还可以在云服务器侧实现对tensor的处理和存储。服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、即内容分发网络(contentdeliverynetwork,cdn)以及大数据和人工智能平台等基础云计算服务的云服务器。终端设备可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。

云技术(cloudtechnology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。云技术是基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,只能通过云计算来实现。

云计算(cloudcomputing)是一种计算模式,它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和信息服务。提供资源的网络被称为“云”。“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。

作为云计算的基础能力提供商,会建立云计算资源池(简称云平台,一般称为基础设施即服务(infrastructureasaservice,iaas))平台,在资源池中部署多种类型的虚拟资源,供外部客户选择使用。云计算资源池中主要包括:计算设备(为虚拟化机器,包含操作系统)、存储设备、网络设备。

按照逻辑功能划分,在基础设施即服务层上可以部署平台即服务(platformasaservice,paas)层,paas层之上再部署软件即服务(softwareasaservice,saas)层,也可以直接将saas部署在iaas上。paas为软件运行的平台,如数据库、web容器等。saas为各式各样的业务软件,如web门户网站、短信群发器等。一般来说,saas和paas相对于iaas是上层。

结合上述介绍,下面将对本申请中地址生成的方法进行介绍,请参阅图5,图5为本申请实施例中地址生成方法的一个实施例示意图,如图所示,本申请实施例中地址生成的方法一个实施例包括:

101、agu基于超长指令字解析得到执行参数,其中,执行参数用于确定滑窗宽度值范围、滑窗宽度步长、滑窗高度值范围、滑窗高度步长、特征图宽度值范围以及特征图高度值范围;

本实施例中,agu对超长指令字(verylonginstructionword,vliw)进行解析后,可得到执行参数。vliw的结构简单,因此基于vliw可以提升解析效率,从而提升执行参数的获取效率。

具体地,执行参数包括计数的起始值(counterstart,cnt_start),计数的终止值(counterend,cnt_end),计数时自加步长(counterstride,cnt_stride)以及计数模式(countermode,cnt_mode)。其中,cnt_mode设定了计数值到达或超过计数的终止值时的行为,本申请中,cnt_mode包括循环计数模式以及一次计数模式。例如,对于kernelwindow而言,执行的cnt_mode为循环计数模式,即用于kernelwindow内部的计数。对于featuremap而言,执行的cnt_mode为一次计数模式,即featuremap计数结束后进行下一个featuremap的计数。

获取到执行参数之后,可根据该执行参数确定滑窗宽度值范围、滑窗宽度步长、滑窗高度值范围、滑窗高度步长、特征图宽度值范围以及特征图高度值范围。其中,滑窗宽度值范围可表示为,滑窗宽度步长可表示为,滑窗高度值范围可表示为,滑窗高度步长可表示为,特征图宽度值范围可表示为,以及特征图高度值范围可表示为

102、若第一目标数据对应的深度计数值超过深度计数范围,则agu获取第一目标数据对应的第一滑窗宽度计数值、第一滑窗高度计数值、第一特征图宽度计数值以及第一特征图高度计数值;

本实施例中,agu获取第一目标数据对应的深度计数值(vector_cnt),并确定向量并行度(vectorparallelism,vep),可以理解的是,vep可以为8、16、32、64、128、256或2的n次方,其中,n为正整数,本申请以vep为128作为示例进行介绍,但不应理解为本申请的限定。本申请中的vector_cnt均从0开始,若vep为128,则vector_cnt的取值范围为0至127。其中,深度计数范围由深度计数的起始值和深度计数的终止值确定的,例如,深度计数的起始值为4,深度计数的终止值为16,那么vector_cnt超过16即表示超出深度计数范围。

第一滑窗宽度计数值、第一滑窗高度计数值、第一特征图宽度计数值以及第一特征图高度计数值分别为第一目标数据对应的各loop级cnt输出的当前计数值。在l0计数层中,若第一目标数据对应的vector_cnt小于vep,则表示第一目标数据还未完成所有的计数,无需进行进位操作,于是继续获取第一目标数据对应的第一滑窗宽度计数值,第一滑窗高度计数值,第一特征图宽度计数值以及第一特征图高度计数值。

具体地,可以采用如下公式获取宽度计数值以及高度计数值:

;(1)

;(2)

;(3)

其中,x可表示为第x个loop,可表示为第x个loop的高度计数值,可表示为第x个loop的宽度计数值,可表示为当前计数的vector_cnt。

对于一个kernel_window而言,第一滑窗宽度计数值在滑窗宽度值范围内,第一滑窗高度计数值在滑窗高度值范围内。对于一个featuremap而言,第一特征图宽度计数值在特征图宽度值范围内,第一特征图高度计数值在特征图高度值范围内。

为了便于理解,请参阅图6,图6为本申请实施例中基于窗口进行计数的一个实施例示意图,如图所示,图6中(a)图所示出的为1个kernel_window,1个kernel_window中可以包括多个元素位置,例如,c1、c2、c3以及c4用于指示不同的元素位置,以第一目标数据存储在元素位置中作为示例进行说明,其中,c11指示的为第一滑窗高度计数值,c12指示的为第一滑窗宽度计数值,因此。对于c1所指示的元素位置而言,第一滑窗高度计数值为0,第一滑窗宽度计数值为0。图6中(b)图所示出的为1个featuremap,1个featuremap可以包括多个kernel_window,c5指示的为featuremap中的1个kernel_window,以第一目标数据存储在c6所指示的元素位置为示例进一步地说明,对于元素位置c6而言,在featuremap中,c61指示的为第一特征图高度计数值,c62指示的为第一特征图宽度计数值,对于featuremap而言,第一特征图高度计数值c61为0,第一特征图宽度计数值c62为0。

103、若第一滑窗宽度计数值在滑窗宽度值范围内,且第一滑窗高度计数值在滑窗高度值范围内,且第一特征图宽度计数值在特征图宽度值范围内,且第一特征图高度计数值在特征图高度值范围内,则agu根据第一滑窗宽度计数值、滑窗宽度步长、第一滑窗高度计数值、滑窗高度步长、第一特征图宽度计数值以及第一特征图高度计数值,确定第一目标数据的偏移量;

本实施例中,agu可以对所获取的宽度计数值是否在宽度值范围,以及高度计数值是否在高度值范围进行判断,当第一滑窗宽度计数值在滑窗宽度值范围内,且第一滑窗高度计数值在滑窗高度值范围内,且第一特征图宽度计数值在特征图宽度值范围内,且第一特征图高度计数值在特征图高度值范围内时,说明不需要对计数值进行进位,因此可以采用如下公式确定第一目标数据的偏移量:

;(4)

;(5)

;(6)

其中,可表示为滑窗宽度计数值,如第一滑窗宽度计数值,可表示为特征图宽度计数值,如第一特征图宽度计数值,可表示为滑窗高度计数值,如第一滑窗高度计数值,可表示为特征图高度计数值,如第一特征图高度计数值,可表示为行间距系数,可表示为列间距系数,列间距系数为逻辑上共行,且相邻列的两个数据物理地址上的间距,可表示为偏移量,如第一目标数据的偏移量。

具体地,行间距系数为横向索引中,相邻两行的行首数据在存储器中的物理地址间隔,列间距系数为纵向索引中,相邻两个数据在存储器中的物理地址间隔。

104、agu获取第一目标数据的起始地址;

本实施例中,可以先获取到第一目标数据所对应的基础地址,切片计数值以及批量计数值,基础地址、切片计数值以及批量计数值均为基于所述超长指令字解析得到的配置参数。

具体可以采用如下公式获取第一目标数据的起始地址:

;(7)

其中,可表示为第一目标数据的起始地址,可表示为第一目标数据所对应的基础地址,可表示为第一目标数据所对应的切片计数值,可表示为第一目标数据所对应的切片地址增量,可表示为第一目标数据所对应的批量计数值,可表示为第一目标数据所对应的批量地址增量。

105、agu对起始地址与偏移量进行求和,得到第一目标数据的第一目标地址。

本实施例中,agu根据偏移量以及起始地址,可对起始地址与偏移量进行求和,从而得到第一目标数据的第一目标地址。

具体以采用如下公式得到第一目标数据的第一目标地址:

;(8)

其中,可表示为第一目标数据的第一目标地址,即表示输出到存储器的地址,可表示为第一目标数据的起始地址,可表示为第一目标数据的偏移量。

具体地,计算单元的核心运算为alu,对多batch的张量运算,通常存在6层循环,以计算单元中执行的深度卷积(depthwiseconvolution)作为示例进行说明,执行代码如下:

//操作数a为三维张量,size(a)=[nti,hti,wti,ci]

//操作数k为三维张量,size(k)=[1,hk,wk,ci]

//输出结果b为三维张量,size(b)=[nti,hto,wko,ci]

for(i_nti=0;i_nti<nti;i_nti++)//batchloop

for(i_ci=0;i_ci<ci;i_ci++)//channelloop

for(i_hti=0;i_hti<hti;i_hti++)//inputheightloop

for(i_wti=0;i_wti<wti;i_wti++)//inputwidthloop

for(i_hk=0;i_hk<hk;i_hk++)//kernellooponx

for(i_wk=0;i_wk<wk;i_wk++)//kernelloopony

b[i_nti][i_hti/hstride][i_wti/wstride][i_ci]+=

k[i_hk][i_wk][i_ci]*a[i_nti][i_hti+i_hk][i_wti+i_wk][i_ci];

//addbias

b[i_nti][i_hti/hstride][i_wti/wstride][i_ci]+=bias[i_ci];

其中,n表示batch,t表示张量,i表示输入(input),o表示输出(output),w表示宽度(width),h表示高度(height),k表示卷积核(kernel_window)。

在计算单元中,若vep为128,则表示以128为单位进行进一步切分,执行代码如下,其中,l0loop实现一个128元素的向量运算,可并行执行,由此计算单元的执行配置6层循环参数,即可使用一条指令执行:

//操作数a为三维张量,size(a)=[nti,hti,wti,ci]

//操作数k为三维张量,size(k)=[1,hk,wk,ci]

//输出结果b为三维张量,size(b)=b[nti,hto,wko,ci]

//vectorengine的并行度vep=128

for(i_nti=0;i_nti<nti;i_nti++)//l6

for(i_ci=0;i_ci<ceil(ci/vep);i_ci++)//l5

for(i_hti=0;i_hti<hti;i_hti++)//l4

for(i_wti=0;i_wti<wti;i_wti++)//l3

for(i_hk=0;i_hk<hk;i_hk++)//l2

for(i_wk=0;i_wk<wk;i_wk++)//l1

for(i_vep=0;i_vep<vep;i_vep++)//l0

b[i_nti][i_hti/hstride][i_wti/wstride][i_ci*vep+i_vep]+=

k[i_hk][i_wk][i_ci]*a[i_nti][i_hti+i_hk][i_wti+i_wk][i_ci*vep+i_vep];

//addbias

b[i_nti][i_hti/hstride][i_wti/wstride][i_ci*vep+i_vep]+=bias[i_ci*vep+i_vep];

其中,n表示batch,t表示张量,i表示输入,o表示输出,w表示宽度,h表示高度,k表示卷积核,l6表示batchloop,l5表示channelloop,l4表示inputheightloop,l3表示inputwidthloop,l2表示x方向上的kernelloop,l1表示y方向上的kernelloop,l0表示vectorloop。需要说明的是,在并行度为vep的simd运算单元中,l0对应的for循环在alu中是并行处理的。

由上述代码可知,在计算单元中对于alu的运算需要配置两部分,循环部分和运算部分。其中,循环部分需要实现多个“for循环”下数据的顺序读取,以及结果的顺序写回,因此除了支持前述示例中的6层循环外,也可支持vector内部的索引,因此计算单元支持7层“for循环”,分别对应vector内的索引、kernel_window的宽度、kernel_window的高度、featuremap的宽度、featuremap的高度、channel的维度以及batch的维度的循环,这些参数对应于agu的参数配置。而运算部分需要配置张量的数值运算的执行顺序和运算方式,再次以depthwiseconvolution作为示例进行说明,对于每个窗口的数据,先进行2操作数的对应向量相乘,再进行结果向量的累加,因此需要将两个数据源对应agu_r配置好,并且顺序读入两个张量到计算单元,如alu。执行完窗口内的所有乘法和加法运算后,将所得到的运算结果通过数据写回的agu_w写回。

本申请实施例中,提供了一种地址生成的方法,通过上述方式,基于张量的计算特征,对于张量在深度、滑窗和特征图等不同维度上配置对应的执行参数,根据执行参数以及数据在深度、滑窗和特征图等不同维度上的计数值,计算出数据所对应的目标地址,由此,实现在输入的张量上顺次读取数据的目的,从而提升了数据访存的效率。

可选地,在上述图5对应的实施例的基础上,本申请实施例提供的地址生成的方法一个可选实施例中,根据第一滑窗宽度计数值、滑窗宽度步长、第一滑窗高度计数值、滑窗高度步长、第一特征图宽度计数值以及第一特征图高度计数值,确定第一目标数据的偏移量,可以包括:

对第一滑窗宽度计数值以及滑窗宽度步长进行求和,得到第二滑窗宽度计数值;

对第一滑窗高度计数值以及滑窗高度步长进行求和,得到第二滑窗高度计数值;

对第二滑窗宽度计数值以及第一特征图宽度计数值进行求和,得到宽度计数值;

对第二滑窗高度计数值以及第一特征图高度计数值进行求和,得到高度计数值;

对高度计数值以及行间距系数的乘积结果以及宽度计数值与列间距系数的乘积结果进行求和,得到第一目标数据的偏移量。

本实施例中,介绍了一种确定第一目标数据的偏移量的方法,可以通过前述实施例中的公式(4)至公式(6)确定第一目标数据的偏移量,基于公式(4)计算得到宽度计数值,基于公式(5)计算得到高度计数值,基于公式(6)计算得到第一目标数据的偏移量。

具体地,行间距系数为横向索引中,相邻两行的行首数据在存储器中的物理地址间隔,列间距系数为纵向索引中,相邻两个数据在存储器中的物理地址间隔。为了便于理解,请参阅图7,图7为本申请实施例中行间距系数的一个实施例示意图,如图所示,d1表示窗口中的一个元素位置,d2表示与d1相邻的一个元素位置,因此,在列间距系数为1的情况下,元素位置d1与元素位置d2之间的行间距系数为10。假设一个slice的尺寸为32*32*1024,channel数量为128,若采用连续存放数据的方式,则列间距系数为1。

以第一滑窗宽度计数值为0(且0∈(0,2)),第一滑窗高度计数值为0(且0∈(0,2)),第一特征图宽度计数值为5(且5∈(0,9)),第一特征图高度计数值为5(且5∈(0,9)),滑窗宽度步长为1,滑窗高度步长为1,行间距系数为10,列间距系数为1作为一个示例进行说明。

采用公式(2)对第一滑窗宽度计数值以及滑窗宽度步长进行求和,即:

第二滑窗宽度计数值=0+1=1;

采用公式(1)对第一滑窗高度计数值以及滑窗高度步长进行求和,即:

第二滑窗高度计数值=0+1=1;

采用公式(4)对第二滑窗宽度计数值以及第一特征图宽度计数值进行求和,即:

宽度计数值=1+5=6;

采用公式(3)对第二滑窗高度计数值以及第一特征图高度计数值进行求和,即:

高度计数值=1+5=6;

采用公式(6)对高度计数值以及行间距系数的乘积结果以及宽度计数值与列间距系数的乘积结果进行求和,即:

第一目标数据的偏移量=6*10+6*1=66;

上述例子仅为一个示意,在实际计算中,根据具体数值进行处理。

本申请实施例中,提供了一种确定第一目标数据的偏移量的方法,通过上述方式,为方案的实现提供了可行的方式,从而提升方案的可行性和可操作性。

可选地,在上述图5对应的实施例的基础上,本申请实施例提供的地址生成的方法另一个可选实施例中,获取第一目标数据的起始地址,可以包括:

获取第一目标数据所对应的基础地址,其中,基础地址为基于超长指令字解析得到的配置参数;

获取第一目标数据所对应的切片计数值以及批量计数值;

对切片计数值以及切片地址增量的乘积结果以及批量计数值与批量地址增量的乘积结果进行求和,得到地址总增量,其中,切片地址增量以及批量地址增量均为基于超长指令字解析得到的配置参数;

对地址总增量以及基础地址进行求和,得到第一目标数据的起始地址。

本实施例中,介绍了一种获取第一目标数据的起始地址的方法,首先基于超长指令字解析得到的配置参数,该配置参数中包括基础地址,slice地址增量以及batch地址增量,基础地址为第一目标数据所属张量中首个数据对应的地址,slice地址增量为slice递增后的地址增量(增加的物理地址),batch地址增量为batch递增后的地址增量(增加的地址空间)。由此可以通过前述实施例中的公式(7)对切片计数值以及切片地址增量进行乘积得到对应的乘积结果,且对批量计数值与批量地址增量进行乘积得到对应的乘积结果,进一步地将两个乘积结果进行求和,得到地址总增量,最后对地址总增量以及基础地址进行求和,得到第一目标数据的起始地址

为了便于理解,以第一目标数据所对应的为a,第一目标数据所对应的为4,第一目标数据所对应的为1,第一目标数据所对应的为1024,第一目标数据所对应的为8192作为一个示例进行介绍,由此可以得到为4096,且为8192,对两个乘积结果进行求和可以得到12288,然后可以得到一目标数据的为a+12288。

本申请实施例中,提供了一种获取第一目标数据的起始地址的方法,通过上述方式,可以通过计算获取到数据对应的起始地址,从而提升本方案的可行性。

可选地,在上述图5对应的实施例的基础上,本申请实施例提供的地址生成的方法另一个可选实施例中,地址生成的方法还可以包括:

若第一目标数据对应的深度计数值超过深度计数范围,则对第一滑窗宽度计数值执行进位操作,并对深度计数值进行重置处理。

本实施例中,介绍了一种基于vector_cnt进行进位的方法,第一目标数据对应的vector_cnt大于或等于深度计数终止值时,说明对于一个vector而言已经完成了计数,因此可以向下一个vector进行进位。

为了便于理解,以深度计数终止值为128作为一个示例进行介绍,若vector_cnt为0,则表示第一目标数据在初始位置,若vector_cnt为127,那么说明第一目标数据在终点位置。若vector_cnt为128,即第一目标数据已不在该滑窗内,因此,需要对第一滑窗宽度计数值执行进位操作,并且对vector_cnt进行重置处理,即第一滑窗宽度计数值重置为cnt_start,由于第一滑窗宽度计数值已进位,因此,vector_cnt也需要重置为cnt_start。类似地,当vector_cnt超过边界值时,第一滑窗宽度计数值累加1,即为2,而vector_cnt经过重置处理后为0。其中,边界值表示为计数的终止值(cnt_end)。若计数的起始值(cnt_start)大于计数的终止值(cnt_end),则边界值为计数的终止值(cnt_end)的下界,即小于或等于计数的终止值(cnt_end)时,表示超过边界条件。若计数的起始值(cnt_start)小于计数的终止值(cnt_end),则边界值为计数的终止值(cnt_end)的上界,即大于或等于计数的终止值(cnt_end)时,表示超过边界条件。

可以理解的是,深度计数终止值还可以其他值,前述示例仅用于理解本方案,在实际应用中,具体对第一滑窗宽度计数值执行进位操作,并对vector_cnt进行重置处理的方式应当结合深度计数终止值的实际取值情况灵活确定。

本申请实施例中,提供了一种基于vector_cnt进行进位的方法,通过上述方式,通过判断vector_cnt大于或等于深度计数终止值确定是否需要进位操作,并且在满足进位条件时对第一滑窗宽度计数值进行进位操作,并且对vector_cnt进行置零,从而使得后续的进行操作能够顺利进行,从而提升本方案的可实施性。

可选地,在上述图5对应的实施例的基础上,本申请实施例提供的地址生成的方法另一个可选实施例中,执行参数还用于确定特征图宽度步长以及特征图高度步长;

地址生成的方法还可以包括:

若第一滑窗宽度计数值未在滑窗宽度值范围内,且第一滑窗高度计数值在滑窗高度值范围内,则对第一滑窗高度计数值执行进位操作,并对第一滑窗宽度计数值进行重置处理;

若第一滑窗宽度计数值未在滑窗宽度值范围内,且第一滑窗高度计数值未在滑窗高度值范围内,则对第一特征图宽度计数值执行进位操作,并对第一滑窗宽度计数值、第一滑窗高度计数值以及深度计数值进行重置处理;

其中,对第一特征图宽度计数值执行进位操作,可以包括:

对第一特征图宽度计数值以及特征图宽度步长进行求和,得到第二特征图宽度计数值。

本实施例中,介绍了一种针对滑窗进行进位的方法,对于滑窗而言,可以对第一滑窗宽度计数值是否在滑窗宽度值范围内,以及第一滑窗高度计数值是否在滑窗高度值范围内进行判断,具体包括四种情况。

第一种情况为第一滑窗宽度计数值在滑窗宽度值范围内,且第一滑窗高度计数值也在滑窗高度值范围内,此时不需要进行进位操作,可以通过前述实施例中所介绍的方式得到第一目标地址,此处不再赘述。

第二种情况为第一滑窗宽度计数值未在滑窗宽度值范围内,而第一滑窗高度计数值在滑窗高度值范围内。第三种情况为第一滑窗宽度计数值未在滑窗宽度值范围内,且第一滑窗高度计数值也未在滑窗高度值范围内,第二种情况和第三种情况均需要进行进位操作,因此下面分别对这两种情况分别进行介绍。

在第二种情况下,由于第一滑窗宽度计数值未在滑窗宽度值范围内,但第一滑窗高度计数值在滑窗高度值范围内,因此,在第一目标数据在滑窗中的横向已经完成计数,但在滑窗中的纵向还未完成计数,于是需要向纵向进位,即可对第一滑窗高度计数值以及滑窗高度步长进行求和,以得到第二滑窗高度计数值,若滑窗高度步长为1,就是对第一滑窗高度计数值进1位,并且对第一滑窗宽度计数值进行重置处理,即重置为cnt_start。以滑窗宽度值范围为[0,2],滑窗高度值范围为[0,2]作为示例进行介绍,请参阅图8,图8为本申请实施例中针对滑窗进行进位的一个实施例示意图,如图所示,d1以及d2均表示元素位置,对于元素位置d1而言,d11表示第一滑窗高度计数值,d12表示第一滑窗宽度计数值,当第一滑窗宽度计数值进位时,表示已经大于滑窗宽度值范围[0,2],因此第一滑窗高度计数值需要进位至1,而第一滑窗宽度计数值需要重置为cnt_start,其中,d21表示进位后的第二滑窗高度计数值(即为1),d22表示重置后的第一滑窗宽度计数值(即为0)。

在第三种情况下,由于第一滑窗宽度计数值未在滑窗宽度值范围内,并且第一滑窗高度计数值未在滑窗高度值范围内,因此,第一目标数据在滑窗中的横向以及纵向已经完成计数,可以向kernel_window层级进行进位,即需要对第一特征图宽度计数值以及特征图宽度步长进行求和,以得到第二特征图宽度计数值,并对第一滑窗宽度计数值、第一滑窗高度计数值以及深度计数值进行重置处理,即均重置为cnt_start,然后在kernel_window上重复前述实施例的操作。

本申请实施例中,提供了一种针对滑窗进行进位的方法,通过上述方式,对于滑窗层级而言,在不同的情况下采取不同的进位方式,提升本方案的可选择性以及多样性。

可选地,在上述图5对应的实施例的基础上,本申请实施例提供的地址生成的方法另一个可选实施例中,地址生成的方法还可以包括:

若第一特征图宽度计数值不在特征图宽度值范围内,则对第一特征图宽度计数值执行进位操作,并对第一特征图宽度计数值进行重置处理;

若第一特征图高度计数值不在特征图高度值范围内,则对第一特征图高度计数值执行进位操作,并对第一特征图高度计数值进行重置处理;

若第一特征图高度计数值未在特征图高度值范围内,则对切片计数值执行进位操作,并对第一滑窗宽度计数值、第一滑窗高度计数值、第一特征图宽度计数值以及第一特征图高度计数值以及深度计数值进行重置处理;

其中,对第一特征图高度计数值执行进位操作,还可以包括如下步骤:

对第一特征图高度计数值以及特征图高度步长进行求和,得到第二特征图高度计数值。

本实施例中,介绍了一种针对特征图进行进位的方法,对于特征图层级而言,可以对第一特征图宽度计数值是否在特征图宽度值范围内,以及第一特征图高度计数值是否在特征图高度值范围进行判断,并且可以得到三种情况,第一种情况为第一特征图宽度计数值在特征图宽度值范围内,且第一特征图高度计数值也在特征图高度值范围内,即在第一种情况下不需要进行进位操作,可以通过前述实施例中所介绍的方式得到第一目标地址,因此在此不再赘述。

第二种情况为第一特征图宽度计数值未在特征图宽度值范围内,而第一特征图高度计数值在特征图高度值范围内。第三种情况为第一特征图宽度计数值未在特征图宽度值范围内,且第一特征图高度计数值也未在特征图高度值范围内,第二种情况和第三种情况均需要进行进位操作,因此下面分别对这两种情况分别进行介绍。

在第二种情况下,由于第一特征图宽度计数值未在特征图宽度值范围内,但第一特征图高度计数值在特征图高度值范围内,因此,可以得知在第一目标数据在特征图中的横向已经完成计数,但在特征图中的纵向还未完成,于是需要向纵向进位,即可对第一特征图高度计数值以及特征图高度步长进行求和,以得到第二特征图高度计数值,若对第一特征图高度计数值进位,则对第一特征图宽度计数值进行重置处理,即重置为cnt_start。

在第三种情况下,由于第一特征图宽度计数值未在特征图宽度值范围内,并且第一特征图高度计数值未在特征图高度值范围内,因此可以得知在第一目标数据在特征图中的横向以及纵向已经完成计数,即在该特征图层级上已经完成计数,可以向slice层级进行进位,本申请中以向slice层级进1位作为实例进行说明,然后对第一滑窗宽度计数值、第一滑窗高度计数值、第一特征图宽度计数值以及第一特征图高度计数值以及深度计数值进行重置处理,即均重置为cnt_start。以特征图高度值范围为[0,8]作为示例进行介绍,当第一特征图宽度计数值进位后,第一特征图高度计数值自增,加上特征图高度步长得到9,则满足进位条件,于是需要将第一滑窗宽度计数值、第一滑窗高度计数值、第一特征图宽度计数值以及第一特征图高度计数值以及深度计数值均重置为cnt_start,切片计数值进行进位。

本申请实施例中,提供了一种针对特征图进行进位的方法,通过上述方式,对于特征图层级而言,在不同的情况下采取不同的进位方式,提升本方案的可选择性以及多样性。

可选地,在上述图5对应的实施例的基础上,本申请实施例提供的地址生成的方法另一个可选实施例中,地址生成的方法还可以包括:

若切片计数值超过最大切片取值范围,则对批量计数值执行进位操作,并对切片计数值、第一滑窗宽度计数值、第一滑窗高度计数值、第一特征图宽度计数值以及第一特征图高度计数值以及深度计数值进行重置处理,其中,最大切片取值范围为根据第一目标数据对应的张量深度值和向量并行度确定的;

若批量计数值大于或等于最大批量取值,则对批量计数值、切片计数值、第一滑窗宽度计数值、第一滑窗高度计数值、第一特征图宽度计数值以及第一特征图高度计数值以及深度计数值进行重置处理,其中,最大批量取值为基于超长指令字解析得到的配置参数。

本实施例中,介绍了一种针对slice以及批量进行进位的方法,需要根据第一目标数据对应的张量深度值和vep确定最大slice取值,具体地,最大slice取值为整数,因此,通过张量深度值与vep相除并且向上取整获取到最大slice取值。例如,张量深度值为256,而vep为128,那么可以确定最大slice取值为2(即256÷128),若张量深度值为300,而vep为128,那么可以确定最大slice取值为3(即300÷128后向上取整),因此,最大slice取值需要通过张量深度值和vep的实际情况灵活确定。

slice_cnt大于或等于最大slice时,表示所有slice都已完成计数,可以向该batch层级进行进位,并将vector_cnt、第一滑窗宽度计数值、第一滑窗高度计数值、第一特征图宽度计数值、第一特征图高度计数值以及slice计数值均进行重置处理,即全部重置为cnt_start,然后对下一个tile开始计数,具体计数方式与前述实施例类似,在此不再赘述。

假设最大批量取值为4,当批量计数值大于或等于最大批量取值时,可以对vector_cnt、第一滑窗宽度计数值、第一滑窗高度计数值、第一特征图宽度计数值、第一特征图高度计数值、slice计数值以及batch_cnt进行重置处理,即全部重置为cnt_start,若有下一个batch,则可以通过前述实施例所描述的方式对其进行计数,在此不再赘述。

本申请实施例中,提供了一种针对slice以及批量进行进位的方法,通过上述方式,实现对slice层级和batch层级的进位,从而提升本方案的可行性。

可选地,在上述图5对应的实施例的基础上,本申请实施例提供的地址生成的方法另一个可选实施例中,对起始地址与偏移量进行求和,得到第一目标数据的第一目标地址之后,地址生成的方法还可以包括:

基于第一目标地址,通过第一数据通道读取第一目标数据;

通过第二数据通道向算术逻辑单元发送第一目标数据;

地址生成的方法还可以包括:

当获取到第二目标数据的第二目标地址时,基于第二目标地址,通过第三数据通道读取第二目标数据,其中,第二目标地址为第一目标地址相邻的下一个物理地址;

通过第四数据通道向算术逻辑单元发送第二目标数据。

本实施例中,介绍了一种每个数据使用不同访存地址的读写方式。在向量读取中,每个数据对应一个channel,并采用一个agu。以vep为128作为示例进行说明,则需要使用128个agu,每个agu使用单独的一套配置参数。综上,位于不同channel的agu可以输出不同的地址,读取或写入对应数据。

为了便于理解,以vep为128作为示例进行说明,请参阅图9,图9为本申请实施例中数据使用不同访存地址的一个实施例示意图,如图所示,e1至e8均表示channel,在agu_r0中得到第一目标数据的第一目标地址之后,可以通过channele1向databuffer发送该第一目标地址,并且基于该第一目标地址,通过channele1从databuffer中读取第一目标地址对应的第一目标数据,再通过channele2向alu发送第一目标数据。类似地,在agu_r0中得到第二目标数据的第二目标地址之后,可以通过channele3向databuffer发送该第二目标地址,并且基于该第二目标地址,通过channele3从databuffer中读取第二目标地址对应的第二目标数据,再通过channele4向alu发送第二目标数据。在agu_r0中得到第三目标数据的第三目标地址之后,可以通过channele5向databuffer发送该第三目标地址,并且基于该第三目标地址,通过channele5从databuffer中读取第三目标地址对应的第三目标数据,再通过channele6向alu发送第三目标数据。以此类推,可以同时对128个数据进行读取,每个数据均通过不同的channel进行读取以及写入。可以理解的是,图9的示例仅用于理解本方案,在实际应用中,具体读取以及写入数据的方式应当结合实际情况灵活确定。

本申请实施例中,提供了一种每个数据使用不同访存地址的读写方式,通过上述方式,通过不同的channel对数据进行读取以及发送,可支持多种操作,由此提升数据处理的灵活性。

可选地,在上述图5对应的实施例的基础上,本申请实施例提供的地址生成的方法另一个可选实施例中,对起始地址与偏移量进行求和,得到第一目标数据的第一目标地址之后,地址生成的方法还可以包括:

基于第一目标地址,通过第一数据通道读取第一目标数据;

通过第二数据通道向算术逻辑单元发送第一目标数据;

地址生成的方法还可以包括:

当获取到第二目标数据的第二目标地址时,基于第二目标地址,通过第一数据通道读取第二目标数据,其中,第二目标地址为第一目标地址相邻的下一个物理地址;

通过第三数据通道向算术逻辑单元发送第二目标数据。

本实施例中,介绍了一种每个数据使用相同访存地址的读写方式,在以向量为单位的访存模式中,整个向量只需要使用一个访存地址,即例化一个agu,构成一个向量agu,配置一套参数即可。

为了便于理解,以vep为128作为示例进行说明,请参阅图10,图10为本申请实施例中数据使用相同访存地址的一个实施例示意图,如图所示,f1至f5均表示channel,在agu_r0中得到第一目标数据的第一目标地址之后,可以通过channelf1向databuffer发送该第一目标地址,并且基于该第一目标地址,通过channelf1从databuffer中读取第一目标地址对应的第一目标数据,再通过channelf2向alu发送第一目标数据。类似地,在agu_r0中得到第二目标数据的第二目标地址之后,依旧通过channelf1向databuffer发送该第二目标地址,并且基于该第二目标地址,通过channelf1从databuffer中读取第二目标地址对应的第二目标数据,然后通过channelf3向alu发送第二目标数据。以此类推,在得到第128个数据的目标地址之后,依旧通过channele1向databuffer发送该目标地址,并且基于该目标地址,通过channele1从databuffer中读取对应的数据,通过channelf5向alu发送数据。可以理解的是,图10的示例仅用于理解本方案,在实际应用中,具体读取以及发送目标数据的方式应当结合实际情况灵活确定。

本申请实施例中,提供了一种每个数据使用相同访存地址的读写方式,通过上述方式,通过同一个channel读取数据,这种情况下,只需要实例化一个agu即可,即配置一套参数,从而提升了参数配置效率。

进一步地,前述实施例所描述的读取以及发送目标数据的方法针对的为一个agu中的目标数据,而如图3所示,agu中包括多个向量agu,因此多个向量agu使用的配合方式包括但不限于以下四种:

第一种为一读一写,即agu_r0与agu_w0同时运行,agu_r0先启动,alu的结果驱动agu_w0启动执行;

第二种为多读一写,即多个agu_rx同时运行,其中运行模式可不同,例如agu_r0每个clk输入一个向量,agu_r1可间隔多个clk输出一次,第一次读入一个向量之后,每个clk由l0cnt选择向量中的一个元素输出,而后通过复制扩展为向量进行计算,在这种情况下的配合方式,可以支持二读一写;

第三种为一读多写,即一路输入产生多个结果,由多个agu_wx写回;

第四种为多读多写,即多路输入由多个agu_rx输入,计算后产生多个结果,由多个agu_wx写回。

可以理解的是,在实际应用中还可以包括其他配合方式,具体配合方式需根据结合实际需求情况灵活确定。虽然图3中包括可复用设计思路,一套架构多次调用,例如一个agu中调用多个cnt模块,一个计算单元中调用多个向量agu_r和向量agu_w,虽然设计中每块数量较多,但调试和验证功能的时候,只需验证基础cnt模块以及agu即可,由此可以降低设计和验证的工作量,提升验证的工作效率。需要说明的是,图3中每个agu_rn或者agu_wn均可采用如图9或图10所示的数据访存方法。

可选地,在上述图5对应的实施例的基础上,本申请实施例提供的地址生成的方法另一个可选实施例中,向量并行度对应于向量层级,滑窗宽度值范围对应于滑窗宽度层级,滑窗高度值范围对应于滑窗高度层级,特征图宽度值范围对应于特征图宽度层级,特征图高度值范围对应于特征图高度层级,最大切片取值范围对应于切片层级,最大批量取值对应于批量层级;

若向量层级所对应的起始计数值以及终止计数值相等,则禁用向量层级所对应的循环功能;

若滑窗宽度层级所对应的起始计数值以及终止计数值相等,则禁用滑窗宽度层级所对应的循环功能;

若滑窗高度层级所对应的起始计数值以及终止计数值相等,则禁用滑窗高度层级所对应的循环功能;

若特征图宽度层级所对应的起始计数值以及终止计数值相等,则禁用特征图宽度层级所对应的循环功能;

若特征图高度层级所对应的起始计数值以及终止计数值相等,则禁用特征图高度层级所对应的循环功能;

若切片层级所对应的起始计数值以及终止计数值相等,则禁用切片层级所对应的循环功能;

若批量层级所对应的起始计数值以及终止计数值相等,则禁用批量层级所对应的循环功能。

本实施例中,介绍了一种配置控制多级计数器使能的方法,对于l0_cnt至l6_cnt(向量层级、滑窗宽度层级、滑窗高度层级、特征图宽度层级、特征图高度层级、切片层级以及批量层级)而言,每个层级对应于一个loop。若某一层级不存在循环,则通过配置cnt_start=cnt_end禁用该层级。本申请中,层级以向量loop,滑窗宽度loop,滑窗高度loop,特征图宽度loop,特征图高度loop,切片loop至批量loop依次递增。

具体地,对于向量loop而言,向量loop所对应的起始计数值以及终止计数值相等,会禁用向量loop所对应的循环功能。对于滑窗宽度loop而言,滑窗宽度loop所对应的起始计数值以及终止计数值相等,会禁用滑窗宽度loop所对应的循环功能。对于滑窗高度loop而言,滑窗高度loop所对应的起始计数值以及终止计数值相等,会禁用滑窗高度loop所对应的循环功能。对于特征图宽度loop而言,特征图宽度loop所对应的起始计数值以及终止计数值相等,会禁用特征图宽度loop所对应的循环功能。对于特征图高度loop而言,特征图高度loop所对应的起始计数值以及终止计数值相等,会禁用特征图高度loop所对应的循环功能。对于切片loop而言,切片loop所对应的起始计数值以及终止计数值相等,会禁用切片loop所对应的循环功能。对于批量loop而言,批量loop所对应的起始计数值以及终止计数值相等,会禁用批量loop所对应的循环功能。

本申请实施例中,提供了一种配置控制多级计数器使能的方法,通过上述方式,可将某一loop所对应的计数的起始值与计数的终止值配置为相同值,从而禁用所对应的循环功能,并完成对多级计数器使能的控制,由此提升本方案的可行性。

可选地,在上述图5对应的实施例的基础上,本申请实施例提供的地址生成的方法另一个可选实施例中,

向量层级对应于第一循环起始信号以及第一循环结束信号;

滑窗宽度层级对应于第二循环起始信号以及第二循环结束信号;

滑窗高度层级对应于第三循环起始信号以及第三循环结束信号;

特征图宽度层级对应于第四循环起始信号以及第四循环结束信号;

特征图高度层级对应于第五循环起始信号以及第五循环结束信号;

切片层级对应于第六循环起始信号以及第六循环结束信号;

批量层级对应于第七循环起始信号以及第七循环结束信号。

本实施例中,介绍了一种产生控制信号的方法,agu中的多个loop对应cnt可产生多组控制信号,每组控制信号包含包括不同的loop所对对应的循环起始信号(lx_loop_start)以及循环结束信号(lx_loop_end)。对于l0_cnt至l6_cnt(向量层级、滑窗宽度层级、滑窗高度层级、特征图宽度层级、特征图高度层级、切片层级以及批量层级)而言,可以产生7组控制信号(即14个控制信号),该控制信息可作为alu中运算的起始和结束信号。例如,在alu中运算中需要通过数值之间的对比确定窗口内数据的最大值,但第一个clk没有数值进行比较,例如,第6个clk开始才能获取到两个数值进行比较,最后1个clk则不但需要进行数值比较,还要进行结果的输出。基于此,lx_loop_start对第1个clk进行控制,虽然第1个clk没有数据进行比较,但通过所对应的l1_loop_start可以使得第6个clk开始执行针对保存窗口内的第一个数据运算,对于最后1个clk而言,配置为将l1_loop_end信号作为最后一次比较的触发信号,并输出窗口内比较的最后结果。其中,控制信号是根据实际情况进行动态变化的,并且对于agu而言,agu只需要将每个loop对应的控制信号发送至alu,alu通过vliw中的配置参数选择对应的lx_loop_start的lx_loop_end即可完成所需运算。

需要说明的是,针对每个层级在每个clk,若计数值等于计数的起始值,或计数值超出计数范围,则会向alu控制信号,即循环起始信号与循环结束信号会随着数据同步传递至alu。

具体地,向量层级对应于第一循环起始信号以及第一循环结束信号,即在向量层级上,第一循环起始信号以及第一循环结束信号随着数据同步传递至alu。

滑窗宽度层级对应于第二循环起始信号以及第二循环结束信号,即在滑窗宽度层级上,第二循环起始信号以及第二循环结束信号随着数据同步传递至alu。

滑窗高度层级对应于第三循环起始信号以及第三循环结束信号,即在滑窗高度层级上,第三循环起始信号以及第三循环结束信号随着数据同步传递至alu。

特征图宽度层级对应于第四循环起始信号以及第四循环结束信号,即在特征图宽度层级上,第四循环起始信号以及第四循环结束信号随着数据同步传递至alu。

特征图高度层级对应于第五循环起始信号以及第五循环结束信号,即在特征图高度层级上,第五循环起始信号以及第五循环结束信号随着数据同步传递至alu。

切片层级对应于第六循环起始信号以及第六循环结束信号,即在切片层级上,第六循环起始信号以及第六循环结束信号随着数据同步传递至alu。

批量层级对应于第七循环起始信号以及第七循环结束信号,即在批量层级上,第七循环起始信号以及第七循环结束信号随着数据同步传递至alu。

本申请实施例中,提供了一种产生控制信号的方法,通过上述方式,当需要使用或者禁用某一各loop对应的循环功能时,可采用循环起始信号或者循环结束信号进行控制,由此提升控制的灵活性和。

下面对本申请中的地址生成单元进行详细描述,请参阅图11,图11为本申请实施例中地址生成单元一个实施例示意图,地址生成单元20包括:

解析模块201,基于超长指令字解析得到执行参数,其中,执行参数用于确定滑窗宽度值范围、滑窗宽度步长、滑窗高度值范围、滑窗高度步长、特征图宽度值范围以及特征图高度值范围;

获取模块202,用于若第一目标数据对应的深度计数值超过深度计数范围,则获取第一目标数据对应的第一滑窗宽度计数值、第一滑窗高度计数值、第一特征图宽度计数值以及第一特征图高度计数值;

确定模块203,用于若第一滑窗宽度计数值在滑窗宽度值范围内,且第一滑窗高度计数值在滑窗高度值范围内,且第一特征图宽度计数值在特征图宽度值范围内,且第一特征图高度计数值在特征图高度值范围内,则根据第一滑窗宽度计数值、滑窗宽度步长、第一滑窗高度计数值、滑窗高度步长、第一特征图宽度计数值以及第一特征图高度计数值,确定第一目标数据的偏移量;

获取模块202,还用于获取第一目标数据的起始地址;

计算模块204,用于对起始地址与偏移量进行求和,得到第一目标数据的第一目标地址。

可选地,在上述图11所对应的实施例的基础上,本申请实施例提供的地址生成单元20的另一实施例中,

确定模块203,具体用于对第一滑窗宽度计数值以及滑窗宽度步长进行求和,得到第二滑窗宽度计数值;

对第一滑窗高度计数值以及滑窗高度步长进行求和,得到第二滑窗高度计数值;

对第二滑窗宽度计数值以及第一特征图宽度计数值进行求和,得到宽度计数值;

对第二滑窗高度计数值以及第一特征图高度计数值进行求和,得到高度计数值;

对高度计数值以及行间距系数的乘积结果以及宽度计数值与列间距系数的乘积结果进行求和,得到第一目标数据的偏移量。

可选地,在上述图11所对应的实施例的基础上,本申请实施例提供的地址生成单元20的另一实施例中,

获取模块202,具体用于获取第一目标数据所对应的基础地址,其中,基础地址为基于超长指令字解析得到的配置参数;

获取第一目标数据所对应的切片计数值以及批量计数值;

对切片计数值以及切片地址增量的乘积结果以及批量计数值与批量地址增量的乘积结果进行求和,得到地址总增量,其中,切片地址增量以及批量地址增量均为基于超长指令字解析得到的配置参数;

对地址总增量以及基础地址进行求和,得到第一目标数据的起始地址。

可选地,在上述图11所对应的实施例的基础上,本申请实施例提供的地址生成单元20的另一实施例中,地址生成单元还包括处理模块;

处理模块205,用于若第一目标数据对应的深度计数值超过深度计数范围,则对第一滑窗宽度计数值执行进位操作,并对深度计数值进行重置处理。

可选地,在上述图11所对应的实施例的基础上,本申请实施例提供的地址生成单元20的另一实施例中,执行参数还用于确定特征图宽度步长以及特征图高度步长;

处理模块205,还用于若第一滑窗宽度计数值未在滑窗宽度值范围内,且第一滑窗高度计数值在滑窗高度值范围内,则对第一滑窗高度计数值执行进位操作,并对第一滑窗宽度计数值进行重置处理;

处理模块205,还用于若第一滑窗宽度计数值未在滑窗宽度值范围内,且第一滑窗高度计数值未在滑窗高度值范围内,则对第一特征图宽度计数值执行进位操作,并对第一滑窗宽度计数值、第一滑窗高度计数值以及深度计数值进行重置处理;

处理模块205,具体用于对第一特征图宽度计数值以及特征图宽度步长进行求和,得到第二特征图宽度计数值。

可选地,在上述图11所对应的实施例的基础上,本申请实施例提供的地址生成单元20的另一实施例中,

处理模块205,还用于若第一特征图宽度计数值未在特征图宽度值范围内,且第一特征图高度计数值在特征图高度值范围内,则对第一特征图高度计数值执行进位操作,并对第一特征图宽度计数值进行重置处理;

处理模块205,还用于若第一特征图高度计数值未在特征图高度值范围内,则对切片计数值执行进位操作,并对第一滑窗宽度计数值、第一滑窗高度计数值、第一特征图宽度计数值以及第一特征图高度计数值以及深度计数值进行重置处理;

处理模块205,具体用于对第一特征图高度计数值以及特征图高度步长进行求和,得到第二特征图高度计数值。

可选地,在上述图11所对应的实施例的基础上,本申请实施例提供的地址生成单元20的另一实施例中,

处理模块205,还用于若切片计数值超过最大切片取值范围,则对批量计数值执行进位操作,并对切片计数值、第一滑窗宽度计数值、第一滑窗高度计数值、第一特征图宽度计数值以及第一特征图高度计数值以及深度计数值进行重置处理,其中,最大切片取值范围为根据第一目标数据对应的张量深度值和向量并行度确定的;

处理模块205,还用于若批量计数值大于或等于最大批量取值,则对批量计数值、切片计数值、第一滑窗宽度计数值、第一滑窗高度计数值、第一特征图宽度计数值以及第一特征图高度计数值以及深度计数值进行重置处理,其中,最大批量取值为基于超长指令字解析得到的配置参数。

可选地,在上述图11所对应的实施例的基础上,本申请实施例提供的地址生成单元20的另一实施例中,地址生成单元还包括读取模块以及发送模块;

读取模块206,用于对起始地址与偏移量进行求和,得到第一目标数据的第一目标地址之后,基于第一目标地址,通过第一数据通道读取第一目标数据;

发送模块207,用于通过第二数据通道向算术逻辑单元发送第一目标数据;

读取模块206,还用于对起始地址与偏移量进行求和,得到第一目标数据的第一目标地址之后,当获取到第二目标数据的第二目标地址时,基于第二目标地址,通过第三数据通道读取第二目标数据,其中,第二目标地址为第一目标地址相邻的下一个物理地址;

发送模块207,还用于通过第四数据通道向算术逻辑单元发送第二目标数据。

可选地,在上述图11所对应的实施例的基础上,本申请实施例提供的地址生成单元20的另一实施例中,

读取模块206,还用于对起始地址与偏移量进行求和,得到第一目标数据的第一目标地址之后,基于第一目标地址,通过第一数据通道读取第一目标数据;

发送模块207,还用于通过第二数据通道向算术逻辑单元发送第一目标数据;

读取模块206,还用于对起始地址与偏移量进行求和,得到第一目标数据的第一目标地址之后,当获取到第二目标数据的第二目标地址时,基于第二目标地址,通过第一数据通道读取第二目标数据,其中,第二目标地址为第一目标地址相邻的下一个物理地址;

发送模块207,还用于通过第三数据通道向算术逻辑单元发送第二目标数据。

可选地,在上述图11所对应的实施例的基础上,本申请实施例提供的地址生成单元20的另一实施例中,向量并行度对应于向量层级,滑窗宽度值范围对应于滑窗宽度层级,滑窗高度值范围对应于滑窗高度层级,特征图宽度值范围对应于特征图宽度层级,特征图高度值范围对应于特征图高度层级,最大切片取值范围对应于切片层级,最大批量取值对应于批量层级;

地址生成单元还包括禁用模块208;

禁用模块208,用于若向量层级所对应的起始计数值以及终止计数值相等,则禁用向量层级所对应的循环功能;

禁用模块208,还用于若滑窗宽度层级所对应的起始计数值以及终止计数值相等,则禁用滑窗宽度层级所对应的循环功能;

禁用模块208,还用于若滑窗高度层级所对应的起始计数值以及终止计数值相等,则禁用滑窗高度层级所对应的循环功能;

禁用模块208,还用于若特征图宽度层级所对应的起始计数值以及终止计数值相等,则禁用特征图宽度层级所对应的循环功能;

禁用模块208,还用于若特征图高度层级所对应的起始计数值以及终止计数值相等,则禁用特征图高度层级所对应的循环功能;

禁用模块208,还用于若切片层级所对应的起始计数值以及终止计数值相等,则禁用切片层级所对应的循环功能;

禁用模块208,还用于若批量层级所对应的起始计数值以及终止计数值相等,则禁用批量层级所对应的循环功能。

可选地,在上述图11所对应的实施例的基础上,本申请实施例提供的地址生成单元20的另一实施例中,

向量层级对应于第一循环起始信号以及第一循环结束信号;

滑窗宽度层级对应于第二循环起始信号以及第二循环结束信号;

滑窗高度层级对应于第三循环起始信号以及第三循环结束信号;

特征图宽度层级对应于第四循环起始信号以及第四循环结束信号;

特征图高度层级对应于第五循环起始信号以及第五循环结束信号;

切片层级对应于第六循环起始信号以及第六循环结束信号;

批量层级对应于第七循环起始信号以及第七循环结束信号。

图12是本申请实施例中电子设备的一个结构示意图,如图所示,电子设备30可包括收发单元310、深度学习处理器320和存储器330。

并且该电子设备30可以包括但不限于为机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备交通工具、家用电器、和/或医疗设备。

存储器330可以包括只读存储器和随机存取存储器,并向深度学习处理器320提供指令和数据。存储器330的一部分还可以包括非易失性随机存取存储器(英文全称:non-volatilerandomaccessmemory,英文缩写:nvram)。

存储器330存储了如下的元素,可执行模块或者数据结构,或者它们的子集,或者它们的扩展集:

操作指令:包括各种操作指令,用于实现各种操作。

操作系统:包括各种系统程序,用于实现各种基础业务以及处理基于硬件的任务。

本发明实施例中深度学习处理器320用于:

基于超长指令字解析得到执行参数,其中,执行参数用于确定滑窗宽度值范围、滑窗宽度步长、滑窗高度值范围、滑窗高度步长、特征图宽度值范围以及特征图高度值范围;

若第一目标数据对应的深度计数值超过深度计数范围,则获取第一目标数据对应的第一滑窗宽度计数值、第一滑窗高度计数值、第一特征图宽度计数值以及第一特征图高度计数值;

若第一滑窗宽度计数值在滑窗宽度值范围内,且第一滑窗高度计数值在滑窗高度值范围内,且第一特征图宽度计数值在特征图宽度值范围内,且第一特征图高度计数值在特征图高度值范围内,则根据第一滑窗宽度计数值、滑窗宽度步长、第一滑窗高度计数值、滑窗高度步长、第一特征图宽度计数值以及第一特征图高度计数值,确定第一目标数据的偏移量;

获取第一目标数据的起始地址;

对起始地址与偏移量进行求和,得到第一目标数据的第一目标地址。

深度学习处理器320控制电子设备30的操作,深度学习处理器320还可以称为cpu。存储器330可以包括只读存储器和随机存取存储器,并向深度学习处理器320提供指令和数据。存储器330的一部分还可以包括nvram。具体的应用中,电子设备30的各个组件通过总线系统340耦合在一起,其中总线系统340除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线系统340。

上述本发明实施例揭示的方法可以应用于深度学习处理器320中,或者由深度学习处理器320实现。深度学习处理器320可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过深度学习处理器320中的硬件的集成逻辑电路或者软件形式的指令完成。上述的深度学习处理器320可以是通用处理器、数字信号处理器(digitalsignalprocessing,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器330,深度学习处理器320读取存储器330中的信息,结合其硬件完成上述方法的步骤。

在本申请实施例中,该电子设备30所包括的深度学习处理器320用于执行如图5对应的各个实施例,本处不做过多赘述。

本申请实施例中还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,当其在计算机上运行时,使得计算机执行如前述图5至图9所示实施例描述的方法中客户端所执行的步骤。

本申请实施例中还提供一种包括程序的计算机程序产品,当其在计算机上运行时,使得计算机执行如前述图5至图9所示实施例描述的方法中客户端所执行的步骤。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以在一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1