张量卷积计算方法及系统与流程

文档序号:18743084发布日期:2019-09-21 02:01阅读:679来源:国知局
张量卷积计算方法及系统与流程

本发明涉及计算机技术领域,尤其涉及一种张量卷积计算方法及系统。



背景技术:

张量卷积计算是人工智能领域和高性能计算领域普遍应用的计算方法,高性能地实现张量卷积计算,对提高计算性能以及计算密度具有重大意义。

目前通用的张量卷积计算方法,需要对输入的张量数据进行展开,然后,利用矩阵乘法或向量乘法对展开后的张量数据进行计算。但此类方法需要占用数倍于原张量数据大小的中间内存,以存储展开后的张量数据,并产生相应的数据处理延时,无法有效地支持高密度并行计算。



技术实现要素:

有鉴于此,本发明实施例提供一种张量卷积计算方法,用以解决现有技术无法有效地支持高密度并行计算的问题。

一种张量卷积计算方法,所述方法应用于处理器,所述处理器中设置有多个张量运算单元,所述方法包括:

接收待计算的张量数据;

调用预先设定的各个卷积核,并应用所述预先设定的各个卷积核组成与所述待计算的张量数据对应的运算卷积核;

依据各个所述张量运算单元的算力,对所述运算卷积核进行第一格式转换处理,并将经过第一格式转换处理的所述运算卷积核装载至预先建立的第一寄存器组;对所述待计算的张量数据进行第二格式转换处理,以使所述待计算的张量数据经过所述第二格式转换处理后,与所述经过第一格式转换处理的所述运算卷积核相匹配,并将经过所述第二格式转换处理的所述待计算的张量数据装载至预先建立的第二寄存器组;

调用预设的编程指令,选取目标滑动窗口,并确定所述目标滑动窗口的窗口格式及所述目标滑动窗口的步进步长;所述目标滑动窗口的窗口格式包括所述目标滑动窗口的窗口维度及所述目标滑动窗口的元素容量;

重复执行第一操作,所述第一操作包括:应用所述目标滑动窗口,按所述目标滑动窗口的步进步长,从所述第二寄存器组中的经过所述第二格式转换处理的所述待计算的张量数据中,选取多个张量数据子集;并依据每个所述张量运算单元的算力,从所述第一寄存器组中的经过所述第一格式转换处理的所述运算卷积核中,确定第一集合,所述第一集合中包括多个运算卷积核子集,所述多个运算卷积核子集与所述预先设定的各个卷积核一一对应,且每个所述运算卷积核子集属于与其对应的卷积核;为所述第一集合中的每个运算卷积核子集分配与其对应的张量运算单元组,每个所述张量运算单元组中包括多个张量运算单元,每个所述张量运算单元组中包含张量运算单元的个数相同;将所述第一集合中的每个运算卷积核子集分别发送至其对应的张量运算单元组中的每一个张量运算单元中,并将每个所述张量数据子集,分别发送至每个所述运算卷积核子集对应的张量运算单元组中的与该张量数据子集对应的张量运算单元中;在每个所述张量运算单元中,对该张量运算单元中的运算卷积核子集及张量数据子集进行点积运算,获得该张量运算单元对应的部分积;

当已执行的各个第一操作中分别选取的各个张量数据子集的总和为经过第二格式转换处理的所述待计算的张量数据时,停止执行所述第一操作,将已执行的各个第一操作中每个张量运算单元对应的部分积进行累加,以确定所述待计算的张量数据与各个所述卷积核的运算结果;所述已执行的各个第一操作中每个所述卷积核为其对应的各个运算卷积核子集的总和;已执行的每个第一操作中,所有所述运算卷积核子集对应的张量运算单元组中的各个张量运算单元的总个数不大于所述处理器中张量运算单元的个数;所述已执行的每个所述第一操作中分别选取的各个张量数据子集各不相同。

上述的方法,可选的,所述对所述运算卷积核进行第一格式转换处理,包括:

依据所述张量运算单元的算力,将维数为N的所述运算卷积核,按照所述张量运算单元的算力的整数倍,延所述运算卷积核的最高维,将所述运算卷积核切分成多个第一N维立方子块,所述多个第一N维立方子块的个数为所述运算卷积核的最高维除以所述第一N维立方子块的最高维的商值;N为正整数;

对每个所述第一N维立方子块进行多维矩阵变换,将所述第一N维立方子块的最高维转换到最低维,并与所述第一N维立方子块的初始最低维进行合并,将所述第一N维立方子块,降维为多个N-1维矩阵,并将所述多个N-1维矩阵组成与其对应的第一N维卷积核;

将每个所述第一N维立方子块对应的所述第一N维卷积核,按最低2维或1维的拼接方式进行拼接,获得与所述运算卷积核对应的经过第一格式转换处理的新的运算卷积核。

上述的方法,可选的,所述对所述待计算的张量数据进行第二格式转换处理,包括:

依据所述张量运算单元的算力,将维数为N的所述待计算的张量数据,按照所述张量运算单元的算力的整数倍,延所述待计算的张量数据的最高维,将所述待计算的张量数据切分成多个第二N维立方子块,所述多个第二N维立方子块的个数为所述待计算的张量数据的最高维除以所述第二N维立方子块的最高维的商值;

对每个所述第二N维立方子块进行多维矩阵变换,将所述第二N维立方子块的最高维转换到最低维,并与所述N维立方子块的初始最低维进行合并,将所述第二N维立方子块,降维为多个N-1维矩阵,并将所述多个N-1维矩阵组成与其对应的待计算的第一张量数据;

将每个所述第二N维立方子块对应的所述待计算的第一张量数据,按最低2维或1维的拼接方式进行拼接,获得与所述待计算的张量数据对应的经过第二格式转换处理的新的待计算的张量数据。

上述的方法,可选的,所述对所述运算卷积核进行第一格式转换处理,包括:

依据所述张量运算单元的算力,将维数为N的所述运算卷积核,按照所述张量运算单元的算力的整数倍,延所述运算卷积核中的第M维子卷积核,将所述运算卷积核切分为多个第一M维立方子块,所述多个第一M维立方子块的个数为所述运算卷积核的第M维子卷积核除以所述第一M维立方子块的最高维的商值;N为正整数;

对每个所述第一M维立方子块进行多维矩阵变换,将所述第一M维立方子块的最高维转换到最低维,并与所述第一M维立方子块的初始最低维进行合并,将所述第一M维立方子块,降维为多个M-1维矩阵,并将所述多个M-1维矩阵组成与其对应的第一M维卷积核;

将每个所述第一M维立方子块对应的所述第一M维卷积核,按最低2维或1维的拼接方式进行拼接,获得与所述运算卷积核对应的经过第一格式转换处理的新的运算卷积核,其中,所述M为正整数,M小于等于N。

上述的方法,可选的,所述对所述待计算的张量数据进行第二格式转换处理,包括:

依据所述张量运算单元的算力,将维数为N的所述待计算的张量数据,按照所述张量运算单元的算力的整数倍,延所述待计算的张量数据的第M维子张量数据,将所述待计算的张量数据切分成多个第二M维立方子块,所述多个第二M维立方子块的个数为所述待计算的张量数据的第M维除以所述第二M维立方子块的最高维的商值;

对每个所述第二M维立方子块进行多维矩阵变换,将所述第二M维立方子块的最高维转换到最低维,并与所述M维立方子块的初始最低维进行合并,将所述第二M维立方子块,降维为多个M-1维矩阵,并将所述多个M-1维矩阵组成与其对应的待计算的第一张量数据;

将每个所述第二M维立方子块对应的所述待计算的第一张量数据,按最低2维或1维的拼接方式进行拼接,获得与所述待计算的张量数据对应的经过第二格式转换处理的新的待计算的张量数据,其中,所述M为正整数,所述M小于等于N。

上述的方法,可选的,所述将经过第一格式转换处理的所述运算卷积核装载至预先建立的第一寄存器组,包括:

确定经过第一格式转换处理的所述运算卷积核所需占用的存储空间大小;

确定所述第一寄存器组中包含的各个寄存器的存储能力;

依据所述第一寄存器组中各个寄存器的存储能力,在所述第一寄存器组中选取多个第一目标寄存器;

依据各个所述第一目标寄存器的存储能力及所述张量运算单元的算力,对经过第一格式转换处理的所述运算卷积核进行切分,获得与经过第一格式转换处理的所述运算卷积核对应的多个子运算卷积核;

将各个所述子运算卷积核按预设的第一存储方式,分别存储至与其对应的第一目标寄存器中。

上述的方法,可选的,所述将经过所述第二格式转换处理的所述待计算的张量数据装载至预先建立的第二寄存器组,包括:

确定经过第二格式转换处理的所述待计算的张量数据所需占用的存储空间大小;

确定所述第二寄存器组中包含的各个寄存器的存储能力;

依据所述第二寄存器组中各个寄存器的存储能力,在所述第二寄存器组中选取多个第二目标寄存器;

依据各个所述第二目标寄存器的存储能力及所述张量运算单元的算力,对经过第二格式转换处理的所述待计算的张量数据进行切分,获得与经过第二格式转换处理的所述待计算的张量数据对应的多个子张量数据;

将各个所述子张量数据按预设的第二存储方式,分别存储至与其对应的第二目标寄存器中。

上述的方法,可选的,所述对该张量运算单元中的运算卷积核子集及张量数据子集进行点积运算,获得该张量运算单元对应的部分积,包括:

确定所述运算卷积核子集中每个卷积元素与所述张量运算单元中每个乘加器的对应关系,并将每个所述卷积元素,分别发送至该卷积元素对应的乘加器中;确定所述张量数据子集中每个张量数据子集元素与所述张量运算单元中每个乘加器的对应关系,并将每个所述张量数据子集元素,分别发送至该张量数据子集元素对应的乘加器中;

在每个所述乘加器中,对该乘加器中的卷积元素及张量数据子集元素进行乘法运算,并累加每个所述乘加器所得的乘法运算结果,得到所述张量运算单元对应的部分积。

上述的方法,可选的,所述在每个所述乘加器中,对该乘加器中的卷积元素及张量数据子集元素进行乘法运算,包括:

判断该乘加器中的卷积元素或张量数据子集元素是否为零元素;

当该乘加器中的卷积元素或张量数据子元素为零元素时,跳过对该乘加器中的卷积元素及张量数据子集元素的乘法运算;

当该乘加器中的卷积元素及张量子集元素均不为零元素时,对该乘加器中的卷积元素及张量数据子集元素进行乘法运算。

一种张量卷积计算系统,所述系统应用于处理器,所述处理器中设置有多个张量运算单元,所述系统包括:

接收单元,用于接收待计算的张量数据;

处理单元,用于调用预先设定的各个卷积核,并应用所述预先设定的各个卷积核组成与所述待计算的张量数据对应的运算卷积核;

第一转换单元,用于依据各个所述张量运算单元的算力,对所述运算卷积核进行第一格式转换处理,并将经过第一格式转换处理的所述运算卷积核装载至预先建立的第一寄存器组;

第二转换单元,用于对所述待计算的张量数据进行第二格式转换处理,以使所述待计算的张量数据经过所述第二格式转换处理后,与所述经过第一格式转换处理的所述运算卷积核相匹配,并将经过所述第二格式转换处理的所述待计算的张量数据装载至预先建立的第二寄存器组;

选取单元,用于调用预设的编程指令,选取目标滑动窗口,并确定所述目标滑动窗口的窗口格式及所述目标滑动窗口的步进步长;所述目标滑动窗口的窗口格式包括所述目标滑动窗口的窗口维度及所述目标滑动窗口的元素容量;

执行单元,用于重复执行第一操作,所述第一操作包括:应用所述目标滑动窗口,按所述目标滑动窗口的步进步长,从所述第二寄存器组中的经过所述第二格式转换处理的所述待计算的张量数据中,选取多个张量数据子集;并依据每个所述张量运算单元的算力,从所述第一寄存器组中的经过所述第一格式转换处理的所述运算卷积核中,确定第一集合,所述第一集合中包括多个运算卷积核子集,所述多个运算卷积核子集与所述预先设定的各个卷积核一一对应,且每个所述运算卷积核子集属于与其对应的卷积核;为所述第一集合中的每个运算卷积核子集分配与其对应的张量运算单元组,每个所述张量运算单元组中包括多个张量运算单元,每个所述张量运算单元组中包含张量运算单元的个数相同;将所述第一集合中的每个运算卷积核子集分别发送至其对应的张量运算单元组中的每一个张量运算单元中,并将每个所述张量数据子集,分别发送至每个所述运算卷积核子集对应的张量运算单元组中的与该张量数据子集对应的张量运算单元中;在每个所述张量运算单元中,对该张量运算单元中的运算卷积核子集及张量数据子集进行点积运算,获得该张量运算单元对应的部分积;

累加单元,用于在当已执行的各个第一操作中分别选取的各个张量数据子集的总和为所述经过第二格式转换处理的所述待计算的张量数据时,停止执行所述第一操作,将已执行的各个第一操作中每个张量运算单元对应的部分积进行累加,以确定所述待计算的张量数据与各个所述卷积核的运算结果;所述已执行的各个第一操作中每个所述卷积核为其对应的各个运算卷积核子集的总和;已执行的每个第一操作中,所有所述运算卷积核子集对应的张量运算单元组中的各个张量运算单元的总个数不大于所述处理器中张量运算单元的个数;所述已执行的每个所述第一操作中分别选取的各个张量数据子集各不相同。

上述的系统,可选的,所述第一转换单元包括:

第一确定子单元,用于确定经过第一格式转换处理的所述运算卷积核所需占用的存储空间大小;

第二确定子单元,用于确定所述第一寄存器组中包含的各个寄存器的存储能力;

第一选取子单元,用于依据所述第一寄存器组中各个寄存器的存储能力,在所述第一寄存器组中选取多个第一目标寄存器;

第一切分子单元,用于依据各个所述第一目标寄存器的存储能力及所述张量运算单元的算力,对经过第一格式转换处理的所述运算卷积核进行切分,获得与经过第一格式转换处理的所述运算卷积核对应的多个子运算卷积核;

第一存储子单元,用于将各个所述子运算卷积核按预设的第一存储方式,分别存储至与其对应的第一目标寄存器中。

上述的系统,可选的,所述第二转换单元包括:

第三确定子单元,用于确定经过第二格式转换处理的所述待计算的张量数据所需占用的存储空间大小;

第四确定子单元,用于确定所述第二寄存器组中包含的各个寄存器的存储能力;

第二选取子单元,用于依据所述第二寄存器组中各个寄存器的存储能力,在所述第二寄存器组中选取多个第二目标寄存器;

第二切分子单元,用于依据各个所述第二目标寄存器的存储能力及所述张量运算单元的算力,对经过第二格式转换处理的所述待计算的张量数据进行切分,获得与经过第二格式转换处理的所述待计算的张量数据对应的多个子张量数据;

第二存储单元,用于将各个所述子张量数据按预设的第二存储方式,分别存储至与其对应的第二目标寄存器中。

上述的系统,可选的,所述执行单元包括:

第五确定子单元,用于确定所述运算卷积核子集中每个卷积元素与所述张量运算单元中每个乘加器的对应关系,并将每个所述卷积元素,分别发送至该卷积元素对应的乘加器中;确定所述张量数据子集中每个张量数据子集元素与所述张量运算单元中每个乘加器的对应关系,并将每个所述张量数据子集元素,分别发送至该张量数据子集元素对应的乘加器中;

乘累加子单元,用于在每个所述乘加器中,对该乘加器中的卷积元素及张量数据子集元素进行乘法运算,并累加每个所述乘加器所得的乘法运算结果,得到所述张量运算单元对应的部分积。

上述的系统,可选的,所述乘累加子单元具体用于:

判断该乘加器中的卷积元素或张量数据子集元素是否为零元素;

当该乘加器中的卷积元素或张量数据子元素为零元素时,跳过对该乘加器中的卷积元素及张量数据子集元素的乘法运算;

当该乘加器中的卷积元素及张量子集元素均不为零元素时,对该乘加器中的卷积元素及张量数据子集元素进行乘法运算。

本发明提供一种张量卷积计算方法,包括:接收待计算的张量数据,调用预先设定的多个卷积核,应用各个卷积核组成运算卷积核;依据各个张量运算单元的运算能力对运算卷积核进行第一格式转换处理,然后装载至第一寄存器组;对张量数据进行第二格式转换处理,然后装载至第二寄存器组;选取目标滑动窗口,确定目标滑动窗口的窗口格式及目标窗口的步进步长;重复执行第一操作;当已执行的各个第一操作中分别选取的各个张量数据子集的总和为经过第二格式转换处理的张量数据时,停止执行第一操作,将已执行的各个第一操作中每个张量运算单元对应的部分积进行累加,确定完整运算结果。应用本发明提供的张量卷积计算方法,可实现高利用率的高密度并行计算。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例提供的一种张量卷积计算方法的方法流程图;

图2为本发明实施例提供的张量运算单元的结构示意图;

图3为本发明实施例提供的一种实例图;

图4为本发明实施例提供的又一实例图;

图5为本发明实施例提供的又一实例图;

图6为本发明实施例提供的又一实例图;

图7为本发明实施例提供的又一实例图;

图8为本发明实施例提供的又一实例图;

图9为本发明实施例提供的一种张量卷积计算方法的的一原理示意图;

图10为本发明实施例提供的又一实例图;

图11为本发明实施例提供的又一实例图;

图12为本发明实施例提供的又一实例图;

图13为本发明实施例提供的又一实例图;

图14为本发明实施例提供的又一实例图;

图15为本发明实施例提供的一种张量卷积计算系统的系统结构图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

在本申请中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本发明提供了一种张量卷积计算方法,该方法可用于众多通用或专用的计算装置环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器装置、包括以上任何装置或设备的分布式计算环境等等。本发明提供的张量卷积计算方法,其执行主体可以为上述计算装置中的处理器,所述处理器可以为张量计算引擎,所述处理器中设置有多个张量运算单元。

参考图1,示出了本发明实施例提供的张量卷积计算方法的方法流程图,包括:

本发明实施例提供的张量卷积计算方法,其方法流程图如图1所示,具体可以包括:

S101:接收待计算的张量数据;

本发明实施例提供的方法中,当需要对张量数据进行卷积运算时,将待计算的张量数据发送至处理器中,所述处理器接收所述待计算的张量数据并执行步骤S102。

S102:调用预先设定的各个卷积核,并应用所述预先设定的各个卷积核组成与所述待计算的张量数据对应的运算卷积核;

本发明实施例提供的方法中,运算张量数据的过程中,往往需要同多个卷积核进行卷积计算,卷积核的大小一般较小且远小于同其进行卷积计算的张量数据。本发明实施例提供的方法,将需要同张量数据进行计算的多个卷积核抽象为更高维度的运算卷积核,即在接收到待计算的张量数据后,调用预先设定的各个卷积核,并应用调用的各个卷积核组成与该张量数据对应的运算卷积核;预先设定的各个卷积核的维度及大小均相同,组成的运算卷积核的维度比预先设定的各个卷积核的维度大1维,且大出的1维的维度值为预先设定的各个卷积核的个数。

本发明实施例提供的方法中,所述调用预先设定的各个卷积核,优选的,调用预先设定的多个卷积核。

S103:依据各个所述张量运算单元的算力,对所述运算卷积核进行第一格式转换处理,并将经过第一格式转换处理的所述运算卷积核装载至预先建立的第一寄存器组;对所述待计算的张量数据进行第二格式转换处理,以使所述待计算的张量数据经过所述第二格式转换处理后,与所述经过第一格式转换处理的所述运算卷积核相匹配,并将经过所述第二格式转换处理的所述待计算的张量数据装载至预先建立的第二寄存器组;

本发明实施例提供的方法中,对运算卷积核进行第一格式转换处理后,经过第一格式转换处理的所述运算卷积核的窗口近似为原窗口和所述张量运算单元的容量的最小公倍数。

本发明实施例提供的方法,依据各个张量运算单元的算力,对运算卷积核进行第一格式转换处理,并将经过第一格式转换处理的运算卷积核装载至预先建立的第一寄存器组;对接收到的张量数据进行第二格式转换处理,使得经过第二格式转换处理的张量数据与经过第一格式转换处理的运算卷积核相匹配,并将经过第二格式转换处理的转换处理的所述待计算的张量数据装载至预先建立的第二寄存器组;经过第一格式转换处理的运算卷积核以及经过第二格式转换处理的张量数据得以更好地匹配张量运算单元的算力,使得各个张量运算单元可以支持张量数据与不同格式的卷积核的高密度并行计算,并在高密度并行计算时充分利用各个张量运算单元的算力,提高计算效率;

本发明实施例提供的方法中,优选的,算力也可以理解为张量运算单元的运算能力。其计算单位可以用基本的高性能计算中的定义,Tflops,即每秒完成10万亿次浮点操作。

需要说明的是,设置于处理器中的张量运算单元,包含多个乘加器,该张量运算单元在一次点积运算进程中可以对一定数量的元素执行乘法运算,例如4对元素、8对元素、16对元素等,每次点积运算进程可执行乘法运算的元素对数量由张量运算单元中的乘加器数量决定;工作人员可根据需求灵活对张量运算的运算能力以及处理器中的张量运算单元数量进行拓展。

S104:调用预设的编程指令,选取目标滑动窗口,并确定所述目标滑动窗口的窗口格式及所述目标滑动窗口的步进步长;

本发明实施例提供的方法中,通过指令或编程的方式指定当前滑动窗口。

本发明实施例提供的方法,在分别将经过第一格式转换处理的运算卷积核装载至第一寄存器组以及将经过第二格式转换处理的张量数据装载至第二寄存器组后,选取目标滑动窗口,并确定目标滑动窗口的窗口格式以及该目标滑动窗口的步进步长,其中目标滑动窗口的窗口格式包括所述目标滑动窗口的窗口维度及所述目标滑动窗口的元素容量。

需要说明的是,本发明实施例提供的方法,目标滑动窗口的窗口维度可以为一维、二维或三维三种窗口维度中的任意一种,目标滑动窗口的元素容量可以为张量运算单元在一次点积运算进程中所能计算的元素对的数量,也可以大于张量运算单元在一次点积运算进程中所能计算的元素对的数量,例如,可以为张量运算单元在一次点积运算进程中所能计算的元素对的倍数,由张量运算单元计算进行数次点积运算后完成对该目标窗口内各个元素的计算。

本发明实施例提供的方法中,选取的目标窗口为原始窗口经过格式变换后的格式,步长也为变换后的结果,具体的转换过程,通过指令或编程的方式进行实现。

本发明实施例提供的方法中,目标窗口及其步长为原始窗口及其步长经过变换后的新值,在具体的实现过程中,可以选取相应的原始窗口,对所述原始窗口进行变换后得到计算用的目标滑动窗口及其步进步长。

S105:执行第一操作;

本发明实施例提供的方法,第一操作包括:应用所述目标滑动窗口,按所述目标滑动窗口的步进步长,从所述第二寄存器组中的经过所述第二格式转换处理的所述待计算的张量数据中,选取多个张量数据子集;并依据每个所述张量运算单元的算力,从所述第一寄存器组中的经过所述第一格式转换处理的所述运算卷积核中,确定第一集合,所述第一集合中包括多个运算卷积核子集,所述多个运算卷积核子集与所述预先设定的各个卷积核一一对应,且每个所述运算卷积核子集属于与其对应的卷积核;为所述第一集合中的每个运算卷积核子集分配与其对应的张量运算单元组,每个所述张量运算单元组中包括多个张量运算单元,每个所述张量运算单元组中包含张量运算单元的个数相同;将所述第一集合中的每个运算卷积核子集分别发送至其对应的张量运算单元组中的每一个张量运算单元中,并将每个所述张量数据子集,分别发送至每个所述运算卷积核子集对应的张量运算单元组中的与该张量数据子集对应的张量运算单元中;在每个所述张量运算单元中,对该张量运算单元中的运算卷积核子集及张量数据子集进行点积运算,获得该张量运算单元对应的部分积;

需要说明的是,本发明实施例提供方法,可以采取一维、二维或三维的目标滑动窗口从经过第二格式转换处理的张量数据中选取该张量数据的部分数据,即多个张量数据子集,对应的,在经过第一格式转换处理的运算卷积核中选取运算卷积核子集;生成处理器中的各个张量运算单元进行一次点积运算所需的张量数据子集以及运算卷积核子集;并将每个张量数据子集,分别发送至每个运算卷积核子集对应的张量运算单元组中的与该张量数据子集对应的张量运算单元中;然后在每个张量运算单元中,对该张量运算单元中的运算卷积核子集及张量数据子集进行点积运算,获得该张量运算单元对应的部分积;实现多个运算卷积核子集与多个张量数据子集的高密度并行计算。

本发明实施例提供的方法,采用寄存器访问的方式分别从第一寄存器组中选取运算卷积核子集以及从第二寄存器组中选取张量数据子集进行卷积计算,加快了数据读取速度,并可在数据读取过程中实现对数据的复用,降低数据读取所需的带宽及功耗,更好地支持高密度并行计算,使得数据读取带宽不会成为高密度并行计算的瓶颈。

本发明实施例提供的方法中,每一次从第一寄存器组中选取的运算卷积核子集可以各不相同,最终选取的各个运算卷积核子集的总和可以为经过第二格式转换处理的所述待计算的张量数据。每一次从所述第二寄存器组中选取的张量数据子集可以各不相同。

本发明实施例提供的方法中,每一次从第一寄存器中选取的运算卷积核子集也可以有交叉相同的内容。

S106:判断已执行的各个第一操作中分别选取的各个张量数据子集的总和是否为所述经过第二格式转换处理的所述待计算的张量数据;若是,则执行步骤S107。

本发明实施例提供的方法,在每次执行第一操作后,判断已执行的各个第一操作中分别选取的各个张量数据子集是否可构成完整的经过第二格式转换处理的所述待计算的张量数据,即判断是否已经完成了对经过第二格式转换张量数据的卷积计算;当判断结果为否时,返回S105,重新执行第一操作,选取新的张量数据子集进行计算;当判断结果为是时,进入S107。

S107:停止执行所述第一操作,将已执行的各个第一操作中每个张量运算单元对应的部分积进行累加,以确定所述待计算的张量数据与各个所述卷积核的运算结果;所述已执行的各个第一操作中每个所述卷积核为其对应的各个运算卷积核子集的总和;已执行的每个第一操作中,所有所述运算卷积核子集对应的张量运算单元组中的各个张量运算单元的总个数不大于所述处理器中张量运算单元的个数;所述已执行的每个所述第一操作中分别选取的各个张量数据子集各不相同。

本发明实施例提供的方法,重复执行第一操作,直至该张量数据选取完毕,且选取出的各部分数据均已完成与对应的运算卷积核子集的计算时,停止执行第一操作,对已执行的各个第一操作中每个张量运算单元对应的部分积进行累加,确定张量数据与各个卷积核的运算结果。

需要说明的是,当已执行的各个第一操作中分别选取的各个张量数据子集的总和为所述经过第二格式转换处理的张量数据时,已执行的各个第一操作中预先设定的每个卷积核为其对应的各个运算卷积核子集的总和,即该卷积核对应的各个运算卷积核子集可构成该卷积核;在已执行的每个第一操作中,所有运算卷积核子集对应的张量运算单元组中的各个张量运算单元的总个数不大于所述处理器中张量运算单元的个数,即在高密度并行计算过程中,执行每个第一操作的过程中所采用的张量运算单元的数量不大于处理器中设置有的张量运算单元的数量;已执行的每个第一操作选取的各个张量数据子集各不相同。

应用本发明实施例提供的方法,在接收到待计算的张量数据时,调用预先设定的各个卷积核,应用各个卷积核组成运算卷积核;依据各个张量运算单元的运算能力对运算卷积核进行第一格式转换处理,然后装载至第一寄存器组;对张量数据进行第二格式转换处理,使其与所述经过第一格式转换处理的所述运算卷积核相匹配,然后装载至第二寄存器组;选取目标滑动窗口,确定目标滑动窗口的窗口格式及目标窗口的步进步长;重复执行第一操作;当已执行的各个第一操作中分别选取的各个张量数据子集的总和为经过第二格式转换处理的张量数据时,停止执行第一操作,将已执行的各个第一操作中每个张量运算单元对应的部分积进行累加,确定完整运算结果;在实现高密度并行计算的同时,充分应用各个张量运算单元的运算能力,保障了计算效率。

本放提供的张量卷积计算方法,与现有技术相比,本发明还具有以下优点:

(1)无需对张量数据进行展开,节约了大量用于存储展开后的张量数据的中间存储空间,并免去了相应的处理延时;

(2)应用预设的各个卷积核组成运算卷积核,支持张量数据同多个卷积核的并行计算;

(3)依据各个张量运算单元的运算能力,对运算卷积核进行第一格式转换处理;并对待计算的张量数据进行第二格式转换处理,以使所述待计算的张量数据经过所述第二格式处理后,与所述经过第一格式转换处理的所述运算卷积核相匹配;经过第一格式转换处理的运算卷积核以及经过第二格式转换处理的张量数据得以更好地贴合张量运算单元的运算能力,各个张量运算单元可以支持张量数据与不同格式的卷积核的高密度并行计算,并在高密度并行计算中充分利用各个张量运算单元的运算能力,提高计算效率;

(4)分别将经过第一格式转换处理的运算卷积核以及经过第二格式转换处理的张量数据装载至预先建立的第一寄存器组;在进行卷积计算时,寄存器的数据访问速度更快,且可以采用数据复用的方式,降低数据读取所需的带宽以及功耗,进一步加快数据读取速度,以支持高密度并行计算;

(5)重复执行第一操作,选取的运算卷积核分别发送至与其对应的张量运算单元组,选取的张量运算子集分别发送至与每个运算卷积核子集对应的张量运算单元组中的与其对应的张量运算单元,在每个所述张量运算单元中,对该张量运算单元中的运算卷积核子集及张量数据子集进行卷积运算,获得该张量运算单元对应的部分积。该部分积继续参与下一次运算,直到得到该卷积的全部结果。在实现高密度并行计算的同时,避免了中间结果(部分积)频繁地存储到寄存器或内存中然后再读取的过程,减少了数据访问带宽及功耗。

(6)跳过对零元素的计算,在减少处理功耗的同时,进一步提高运算速度。

本发明实施例提供的方法中,通过转换单元将任意大小的卷积核转换为适应卷积运算单元处理能力的形状,从而提高计算利用率。

本发明实施例提供的张量卷积计算方法中,所述对所述运算卷积核进行第一格式转换处理的过程,可选的,可以包括:

依据所述张量运算单元的算力,将维数为N的所述运算卷积核,按照所述张量运算单元的算力的整数倍,延所述运算卷积核的最高维,将所述运算卷积核切分成多个第一N维立方子块,所述多个第一N维立方子块的个数为所述运算卷积核的最高维除以所述第一N维立方子块的最高维的商值;N为正整数;

对每个所述第一N维立方子块进行多维矩阵变换,将所述第一N维立方子块的最高维转换到最低维,并与所述第一N维立方子块的初始最低维进行合并,将所述第一N维立方子块,降维为多个N-1维矩阵,并将所述多个N-1维矩阵组成与其对应的第一N维卷积核;

将每个所述第一N维立方子块对应的所述第一N维卷积核,按最低2维或1维的拼接方式进行拼接,获得与所述运算卷积核对应的经过第一格式转换处理的新的运算卷积核。

本发明实施例提供的方法中,在对每个所述第一N维立方子块进行多维矩阵变换的过程中,将所述第一N维立方子块,降维为与所述第一N维立方子块对应的多个N-1维矩阵,并将所述第一N维立方子块对应的多个N-1维矩阵组成与其对应的第一N维卷积核。

本发明实施例提供的方法中,在对每个所述第一N维立方子块进行多维矩阵变换的过程中,将所述第一N维立方子块,降维为与所述第一N维立方子块对应的多个N-1维矩阵,并将所述第一N维立方子块对应的多个N-1维矩阵组成与其对应的第一N维卷积核。

为了更加清楚的对上述过程进行说明,本发明实施例提供了一具体实例,假设N=3,则根据张量运算单元算力,将原始3维卷积核按照运算单元算力整数倍,延最高维切分成多个3维立方子块,子块个数为最高维的值除以3维子块的最高维值;例如一个8*3*3的三维卷积核,8为维数最高的最高维。

将3维立方子块通过多维矩阵变换,将最高维转换到最低维并与原有最低维合并,降维为2维矩阵;

降维后的所有2维矩阵组成一个新的3维卷积核;

将多个新3维卷积核按照最低2维或1维拼接为一个新3维卷积核;

例如:需要计算的Co个3维卷积核Ci×R×S,记为Co×Ci×R×S;需要说明的是,本发明实施例中的x为矩阵维度的分割,例如8x4x3,表示一个维度从高到低大小为8、4、3的3维矩阵。

从每个3维卷积核Ci×R×S中切分成3维卷积核子块 e.g. C*×R×S , 其中C=M×C*,且C*×R×S为张量运算单元算力的整倍数; 通过多维矩阵变换和降维将每个3维子块C*×R×S转换并降维为R×(S×C*)的2维卷积核子块。最后3维卷积核Ci×R×S被转换为M×R×S*,S*=(S×C*);其中,“×”表示矩阵维度的分割,S*=(S×C*)表示将2维矩阵(S×C*)抽象为一个元素S*。

此时卷积窗和滑动步长也通过变换,转变为M×R×S*;对应的滑动步长在最低维也变为原步长的C*倍;

将多个计算卷积核Co×M×R×S通过拼合成一个3维卷积核M×R×(Co×S*)或M×(Co×R)×S*。

上述对所述运算卷积核进行第一格式转换处理的过程,在延所述运算卷积核的最高维进行切分的过程,为实现本发明中对所述运算卷积核进行第一格式转换处理的一个最优实现过程。

可选的,本发明实施例提供的对所述运算卷积核进行第一格式转换处理的过程,还可以为:

依据所述张量运算单元的算力,将维数为N的所述运算卷积核,按照所述张量运算单元的算力的整数倍,延所述运算卷积核中的第M维子卷积核,将所述运算卷积核切分为多个第一M维立方子块,所述多个第一M维立方子块的个数为所述运算卷积核的第M维子卷积核除以所述第一M维立方子块的最高维的商值;N为正整数;

对每个所述第一M维立方子块进行多维矩阵变换,将所述第一M维立方子块的最高维转换到最低维,并与所述第一M维立方子块的初始最低维进行合并,将所述第一M维立方子块,降维为多个M-1维矩阵,并将所述多个M-1维矩阵组成与其对应的第一M维卷积核;

将每个所述第一M维立方子块对应的所述第一M维卷积核,按最低2维或1维的拼接方式进行拼接,获得与所述运算卷积核对应的经过第一格式转换处理的新的运算卷积核,其中所述M为正整数,M小于等于N。

本发明实施例提供的方法中,在对所述运算卷积核进行第一格式转换处理的基础上,与所述第一格式转换相对应的,对所述待计算的张量数据进行第二格式转换处理,具体可以包括:

依据所述张量运算单元的算力,将维数为N的所述待计算的张量数据,按照所述张量运算单元的算力的整数倍,延所述待计算的张量数据的最高维,将所述待计算的张量数据切分成多个第二N维立方子块,所述多个第二N维立方子块的个数为所述待计算的张量数据的最高维除以所述第二N维立方子块的最高维的商值;

对每个所述第二N维立方子块进行多维矩阵变换,将所述第二N维立方子块的最高维转换到最低维,并与所述N维立方子块的初始最低维进行合并,将所述第二N维立方子块,降维为多个N-1维矩阵,并将所述多个N-1维矩阵组成与其对应的待计算的第一张量数据;

将每个所述第二N维立方子块对应的所述待计算的第一张量数据,按最低2维或1维的拼接方式进行拼接,获得与所述待计算的张量数据对应的经过第二格式转换处理的新的待计算的张量数据。

本发明实施例提供的方法中,所述对待计算的张量数据进行第二格式转换处理的过程中,将所述第二N维立方子块,降维为与所述第二N维立方子块对应的多个N-1维矩阵,并将所述第二N维立方子块对应的多个N-1维矩阵组成与其对应的待计算的第一张量数据。

本发明实施例提供的方法中,对所述待计算的张量数据进行转换的过程,与对运算卷积核进行转换的过程,在原理上一致,可以根据第一格式变换,对应的将待计算的张量数据,按照第一变换所用的切分方式,按相同的维度切分成多个子块;将子块的最高维变换到最低维并降维1维;降维后的所有子块组成一个新的多维张量。

例如,当N=3时,

3维输入Ci×H×W,与第一格式转换对应,按照(M×C*)×H×W,(C=M×C*)转换成M×H×(W×C*),记为M×H×W*,(W*=W×C*)。

上述对待计算张量数据进行第二格式转换处理的过程,在延待计算张量数据的最高维对所述待计算张量数据进行切分的过程,为实现本发明实施例提供的对所述待计算的张量数据进行第二格式转换处理的最优实现过程。

可选的,本发明实施例提供的方法中,在对所述待计算的张量数据进行第二格式转换处理的过程中,还可以为:

依据所述张量运算单元的算力,将维数为N的所述待计算的张量数据,按照所述张量运算单元的算力的整数倍,延所述待计算的张量数据的第M维子张量数据,将所述待计算的张量数据切分成多个第二M维立方子块,所述多个第二M维立方子块的个数为所述待计算的张量数据的第M维除以所述第二M维立方子块的最高维的商值;

对每个所述第二M维立方子块进行多维矩阵变换,将所述第二M维立方子块的最高维转换到最低维,并与所述M维立方子块的初始最低维进行合并,将所述第二M维立方子块,降维为多个M-1维矩阵,并将所述多个M-1维矩阵组成与其对应的待计算的第一张量数据;

将每个所述第二M维立方子块对应的所述待计算的第一张量数据,按最低2维或1维的拼接方式进行拼接,获得与所述待计算的张量数据对应的经过第二格式转换处理的新的待计算的张量数据,其中,所述M为正整数,所述M小于等于N。

本发明实施例提供的方法中,对所述待计算的张量数据进行第二格式转换处理的过程,与对所述运算卷积核进行第一格式转换处理的过程,相对应,优选的,对所述运算卷积核进行第一格式转换处理的过程中M的取值,与对所述待计算的张量数据进行第二格式转换处理的过程中的M取值相同。

基于上述方案,本发明实施例提供的方法中,在确定立方子块数目的过程中,采用求商取整的方式对立方子块的数目进行确定。

基于前述实施例提供的张量卷积计算方法,本发明实施例提供的张量卷积计算方法,示意了将经过第一格式转换处理的运算卷积核装载至预先建立的第一寄存器组的具体过程,所述将经过第一格式转换处理的所述运算卷积核装载至预先建立的第一寄存器组,包括:

S201:确定经过第一格式转换处理的所述运算卷积核所需占用的存储空间大小;

本发明实施例提供的方法,在将经过第一格式转换处理的运算卷积核装载至预先建立的第一寄存器组前,首先确定该经过第一格式转换处理的运算卷积核所需占用的存储空间大小。

S202:确定所述第一寄存器组中包含的各个寄存器的存储能力;

S203:依据所述第一寄存器组中各个寄存器的存储能力及所述张量运算单元的算力,在所述第一寄存器组中选取多个第一目标寄存器;

本发明实施例提供的方法,依据第一寄存器组中各个寄存器的存储能力,在第一寄存器组中选取多个第一目标寄存器;需要说明的是,选取的多个第一目标寄存器的存储能力之和,不小于该经过第一格式转换处理的运算卷积核所需占用的存储空间大小。

S204:依据各个所述第一目标寄存器的存储能力及所述张量运算单元的算力,对经过第一格式转换处理的所述运算卷积核进行切分,获得与经过第一格式转换处理的所述运算卷积核对应的多个子运算卷积核;

本发明实施例提供的方法,依据选取的各个第一目标寄存器的存储能力,对经过第一格式转换处理的运算卷积核进行切分,获得与经过第一格式转换处理的运算卷积核对应的多个子运算卷积核,每个子运算卷积核包含该运算卷积核的部分数据,且每个子运算卷积核包含的部分数据各不相同。

本发明实施例提供的方法中,先根据张量运算单元的算力对运算卷积核进行切分,寄存器的存储能力是与张量运算单元的算力相匹配的。因此本发明实施例提供的方法中,依据各个第一目标寄存器的存储能力及张量运算单元的算力,对经过第一格式转换处理的所述运算卷积核进行切分。

S205:将各个所述子运算卷积核按预设的第一存储方式,分别存储至与其对应的第一目标寄存器中。

应用本发明实施例提供的方法,将经过第一格式转换处理的运算卷积核装载至预先建立的第一寄存器组中,采用寄存器访问的方式能够更加快速地读取运算卷积核数据,且在读取过程中可对读取的数据进行复用,降低数据读取所需的带宽以及功耗,进一步加快数据读取速度,以支持高密度并行计算。本发明实施例提供的方法中,所述预设的第一存储方式可以为直接装载的方式。

基于前述实施例提供的张量卷积计算方法,本发明实施例提供的张量卷积计算方法,示意了将经过第二格式转换处理的张量数据存储至预先建立的第二寄存器组的具体过程,所述将经过所述第二格式转换处理的所述待计算的张量数据装载至预先建立的第二寄存器组,包括:

S301:确定经过第二格式转换处理的所述待计算的张量数据所需占用的存储空间大小;

本发明实施例提供的方法,在将经过第二格式转换处理的张量数据装载至预先建立的第二寄存器组前,首先确定该经过第二格式转换处理的张量数据所需占用的存储空间大小。

S302:确定所述第二寄存器组中包含的各个寄存器的存储能力;

S303:依据所述第二寄存器组中各个寄存器的存储能力及所述张量运算单元的算力,在所述第二寄存器组中选取多个第二目标寄存器;

本发明实施例提供的方法,依据第二寄存器组中各个寄存器的存储能力,在第二寄存器组中选取多个第二目标寄存器;需要说明的是,选取的多个第二目标寄存器的存储能力之和,不小于该经过第二格式转换处理的张量数据所需占用的存储空间大小。

S304:依据各个所述第二目标寄存器的存储能力及所述张量运算单元的算力,对经过第二格式转换处理的所述待计算的张量数据进行切分,获得与经过第二格式转换处理的所述待计算的张量数据对应的多个子张量数据;

本发明实施例提供的方法,依据选取的各个第二目标寄存器的存储能力,对经过第二格式转换处理的张量数据进行切分,获得与经过第二格式转换处理的张量数据对应的多个子张量数据,每个子张量数据包含该张量数据的部分数据,且每个子张量数据包含的部分数据各不相同。

本发明实施例提供的方法中,先根据张量运算单元的算力对待计算的张量数据进行切分,寄存器的存储能力是与张量运算单元的算力相匹配的。

S305:将各个所述子张量数据按预设的第二存储方式,分别存储至与其对应的第二目标寄存器中。

应用本发明实施例提供的方法,将经过第二格式转换处理的张量数据装载至预先建立的第二寄存器组中,采用寄存器访问的方式能够更加快速地读取张量数据,且在读取过程中可对读取的数据进行复用,降低数据读取所需的带宽以及功耗,进一步加快数据读取速度,以支持高密度并行计算。

本发明实施例提供的方法中,所述预设的第二存储方式可以为直接装载的方式。

基于前述实施例提供的张量卷积计算方法,本发明实施例提供的张量卷积计算方法,示意了对该张量运算单元中的运算卷积核子集及张量数据子集进行点积运算,获得该张量运算单元对应的部分积的具体过程,所述对该张量运算单元中的运算卷积核子集及张量数据子集进行点积运算,获得该张量运算单元对应的部分积,包括:

S401:确定所述运算卷积核子集中每个卷积元素与所述张量运算单元中每个乘加器的对应关系,并将每个所述卷积元素,分别发送至该卷积元素对应的乘加器中;确定所述张量数据子集中每个张量数据子集元素与所述张量运算单元中每个乘加器的对应关系,并将每个所述张量数据子集元素,分别发送至该张量数据子集元素对应的乘加器中;

本发明实施例提供的方法中,可以通过广播的方式,对卷积元素进行发送。具体的,将每组(共N组)所述卷积核的元素,分别广播到对应的N行张量运算单元的对应运算单元的对应元素上;将所述张量数据子集中的每个(M个)窗的各个元素,分别广播到对应的M列张量运算单元的对应运算单元的对应元素上。

本发明实施例提供的方法,在对张量运算单元中的运算卷积核子集以及张量数据子集进行点积运算时,首先确定运算卷积核子集中每个卷积元素与该张量运算单元中每个乘加器的对应关系,并将每个卷积元素,分别发送至其对应的乘加器中;确定张量数据子集中每个张量数据子集元素与该张量运算单元中每个乘加器的对应关系,并将每个张量数据子集元素,分别发送至与其对应的乘加器中。

S402:在每个所述乘加器中,对该乘加器中的卷积元素及张量数据子集元素进行乘法运算,累加每个所述乘加器所得的乘法运算结果,得到所述张量运算单元对应的部分积。

本发明实施例提供的方法,每个乘加器在接收到与其对应的卷积元素以及张量数据子集元素后,对接收到的卷积元素以及张量数据子集元素进行乘法运算,累加每个乘加器所得的乘法运算结果,得到该张量运算单元对应的部分积。

需要说明的是,当目标滑动窗口的容量大于张量运算单元在一次点积运算进程中所能计算的元素对数量时,可由张量运算单元计算进行数次点积运算后完成对该目标窗口内各个元素的计算,即该张量运算单元中的乘加器执行对不同的张量数据子集元素进行乘加计算,直至完成对张量数据子集内各个元素同对应的卷积元素的乘法运算,累加每个乘加器的所得乘法运算结果,得到该张量运算单元对应的部分积。需要说明的是,最终经变换的目标窗口的容量为接近张量运算单元一次点积元素对的整倍数,从而最大效率的利用张量运算单元。

应用本发明实施例提供的方法,张量运算单元在对接收到张量数据子集以及运算卷积核子集进行点积运算时,将张量数据子集中的张量数据子集元素分别发送至该张量运算单元内部与该张量数据子集元素对应的乘加器,并将运算卷积核子集中的卷积元素分别发送至该张量运算单元内部与该卷积数据对应的乘加器,同时在每个乘加器中,对乘加器接收到的张量数据子集元素以及卷积元素进行乘法运算,累加每个乘加器所得的乘法运算结果,得到该张量运算单元对应的部分积,充分利用张量运算单元中每个乘加器,进一步提高高密度并行卷积计算的计算效率。

基于前述实施例提供的张量卷积计算方法,本发明实施例提供的张量卷积计算方法,示意了在每个所述乘加器中,对该乘加器中的卷积元素及张量数据子集元素进行乘法运算的具体过程,所述每个所述乘加器中,对该乘加器中的卷积元素及张量数据子集元素进行乘法运算,包括:

S501:判断该乘加器中的卷积元素或张量数据子集元素是否为零元素;

本发明实施例提供的方法,在对乘加器中的卷积元素及张量数据子集元素进行乘法运算前,首先判断该乘加器中的卷积元素或张量数据子集元素是否为零元素,即判断该乘加器中的卷积元素及张量数据子集元素,是否至少一方为零元素。

S502:当该乘加器中的卷积元素或张量数据子集元素为零元素时,则跳过对该乘加器中的卷积元素及张量数据子集元素的乘法运算。

本发明实施例提供的方法中,当判断乘加器中的卷积元素或张量数据子集元素为零元素时,即该乘加器中的卷积元素及张量数据子集元素,至少一方为零元素时,则跳过对该乘加器中的卷积元素及张量数据子集元素的乘法运算,后续也不需要参与对乘法运算结果的累加过程。

S503:当该乘加器中的卷积元素及张量子集元素均不为零元素时,对该乘加器中的卷积元素及张量数据子集元素进行乘法运算。

应用本发明实施例提供的方法,在对乘加器中的卷积元素及张量数据子集元素进行乘法运算前,首先判断该乘加器中的卷积元素或张量数据子集元素是否为零元素,并在该乘加器中的卷积元素或张量数据子集元素为零元素时,跳过对该乘加器中的卷积元素及张量数据子集元素的乘法运算及后续的累加运算,在减少处理器功耗的同时,进一步提高运算速度。

此处举例对本发明实施例提供的张量卷积计算方法进行说明。假设张量运算单元的运算能力可满足一次对4对元素的点积计算,预先设定的卷积核格式为8×2×2(Cin×R×S),个数为4个(Cout=4),接收到的张量数据格式为8×8×8(Cin×H×W);

本发明实施例提供的张量运算单元的结构示意图如图2所示。

在接收到张量数据后,首先将预设的各个卷积核组织为运算卷积核,即将4个格式为8×2×2(Cin×R×S)的三维卷积核组织为格式为4×8×2×2(Cout×Cin×R×S)的四维运算卷积核,所组成的四维运算卷积核如图3所示。

依据各个张量运算单元的运算能力,对运算卷积核进行第一格式转换处理,以支持张量数据与多个卷积核的计算;将格式为4×8×2×2(Cout×Cin×R×S)的四维运算卷积核转换为4×2×(4×2×2)[C*×R×(Cout×S×2)]的三维运算卷积核,其中,处理得到的三维运算卷积核的一维一行中包括各个卷积的部分数据,即该三维卷积核一维一行4×2×2(Cout×S×2)中,包含4(Cout)个卷积核的部分数据(S×2),且每个卷积核的部分数据恰好满足张量运算单元的运算能力;并将该格式为4×2×(4×2×2)[C*×R×(Cout×S×2)]的三维运算卷积核装载至预设的第一寄存器组;经过第一格式转换处理的运算卷积核如图4所示。

接收到的张量数据格式为8×8×8(Cin×H×W),具体如图5所示。

对张量数据进行第二格式转换处理,将格式为8×8×8(Cin×H×W)的张量数据转换为格式为4×8×(8×2)[C*×H×(W×2)]以同经过第一格式转换处理的运算卷积核相匹配;并将格式为4×8×(8×2)[C*×H×(W×2)]的张量数据装载至预设的第二寄存器组,经过第二格式转换处理的张量数据如图6所示。

选取目标滑动窗口,并确定所述目标滑动窗口的窗口格式及所述目标滑动窗口的步进步长;选取目标滑动窗口维度为一维,滑动窗口的元素容量为4个元素,即该目标滑动窗口为1×4的滑动窗口,步进步长为2,滑动窗口每次滑动时在一维一行中步进两个元素;

重复执行第一操作,第一操作可以包括:

(1)采取1×4的滑动窗口按照步进步长为2进行滑动的方式,从第二寄存器组中存储的格式4×8×(8×2)[C*×H×(W×2)]的经过第二格式转换处理的张量数据的一维(8×2)中,确定8(边缘自动填充0,8×2/2=8)个张量数据子集(l0~l7),确定的8个张量数据子集,如图7所示。

(2)并依据每个张量运算单元的运算能力,从第一寄存器组中存储的格式为4×2×(4×2×2) [C*×R×(Cout×S×2)]的经过第一格式转换处理的3维运算卷积核中,确定第一集合(4×2×2)[Cout×S×2],第一集合中包含4个运算卷积核子集(2×2)[S×2],4个运算卷积核子集(w0~w3)与预先设定的4个卷积核一一对应,每个运算卷积核子集属于与其对应的卷积核;所确定的第一集合中包含的4个卷积核子集,如图8所示。

(3)如图9所示,分别为第一集合中的4个运算卷积核子集分配与其对应的张量运算单元组(4组),将每个运算卷积核子集分别发送至其对应的张量运算单元组中的每一个张量运算单元中,并将每个张量数据子集,分别发送至其每个运算卷积核子集对应的张量运算单元组中的与该张量数据子集对应的张量运算单元中;确定所述运算卷积核子集中每个卷积元素与所述张量运算单元中每个乘加器的对应关系,并将每个所述卷积元素,分别发送至该卷积元素对应的乘加器中;确定所述张量数据子集中每个张量数据子集元素与所述张量运算单元中每个乘加器的对应关系,并将每个所述张量数据子集元素,分别发送至该张量数据子集元素对应的乘加器中;在每个所述乘加器中,对该乘加器中的卷积元素及张量数据子集元素进行乘法运算,累加每个所述乘加器所得的乘法运算结果,得到所述张量运算单元对应的部分积。

重复执行第一操作,在选取了格式为4×8×(8×2)[C*×H×(W×2)]了第一维一行(8×2)[(W×2)]进行计算后,沿第二维方向步进,重复选取一维一行(8×2)进行计算(8次),直至得到二维计算结果,再沿第三维方向步进(4次),重复上述操作,直至完成对格式为4×8×(8×2)的张量数据与各个卷积核的卷积计算。将已执行的各个第一操作中每个张量运算单元对应的部分积进行累加,确定张量数据与各个预设的卷积核的完整计算结果,格式为E×Cout×F[8×(4×8)],对应Cout×E×F(4×8×8),所得的完整计算结果具体如图10所示。

本发明实施例提供一种适用于张量处理器的通用的张量卷积计算架构, 其特点为:

由高密度的张量运算(点积)单元组成,具体如本发明实施例提供的图2所示。

张量运算单元的实现可由任意确定个数的“乘加器”组成,比如4个、8个、16个等(即单位算力可扩展)。

应用本发明实施例提供的张量卷积计算架构,可以高效的支持不同大小的卷积核,例如C×1×1, C×3×3, C×4×4,而不会因为张量运算单元能力的与卷积核大小不匹配而浪费运算单元的算力。

本设计通过“数据变化引擎”(也可由软件实现),从3维卷积核C×R×S中一次截取并计算一个匹配张量运算单元算力大小的3维卷积核 e.g. C*×R×S,其中C=N×C*,且C*×R×S或C*×S等于张量运算单元算力,或不大于但接近运算单元算力。

将N×C*×R×S转换为N×R×(S×C*)的卷积核,其中截取的3维部分卷积核C*×R×S被降维成2维(R×(S×C*));同时也将3维输入C×H×W,转换成N×H×(W×C*)。

分别计算降维后的2维卷积核(R×(S×C*))与2维卷积输入(H×(W×C*)),再循环N次迭代得到3维卷积(N×H×(W×C*)卷积(N×R×(S×C*))的结果;

计算2维卷积时,通过滑动窗在输入H×(W×C*)的2维输入上,同时选取多个窗,每个窗对应的元素 和降维后的2维卷积核R×(S×C*)并行输入不同的张量运算单元,同时得到一组对应元素的卷积部分积。这里需注意新滑动窗的步长为原始步长的C*倍。

特别的,当截取的卷积核心与张量运算单元算力L匹配为L=C*×S时,滑动窗一次仅在输入3维一行中(W×C*)选取对应大小的窗,并同卷积核的对应一行元素点积得到部分积;循环计算R次并累加后得到对应系列元素在2维平面上的部分积。

本设计支持同时计算多个卷积窗同多个卷积核的计算(以2维阵列的方式)。

本设计支持对稀疏的性能和功耗优化,通过跳过0元素(不管来源于卷积核或者输入多维张量)。

本发明实施例提供的张量卷积计算方法,具有灵活高效的特性,通过编程,可以使得同一硬件支持不同卷积核形状。在具体的计算过程中,硬件算力无浪费,张量运算单元的计算能力可扩展,张量运算单元个数可扩展,进而实现了高密度并行计算。并且在计算过程中,可以同时计算多个卷积核的多个卷积窗,具有高能耗比,且支持稀疏优化,可以执行跳过0元素的“乘”、“加”运算。

为了进一步说明本发明实施例提供的张量卷积计算方法,下面进行举例说明,其中,图11为本发明实施例提供的又一实例图,用于对下述符号进行解释说明。

假定实施例中张量运算单元一次可以完成4对元素的对应点积操作, ACC += (A0*B0+ A1*B1+ A2*B2+ A3*B3)。

将预设的卷积核进行数据格式变换及将输入张量进行数据格式变换的过程如下:

假定预设的三维卷积核为Cin×R×S(8×2×2);输入张量为Cin×H×W(8×8×8);此时将三维卷积核Cin×R×S(8×2×2)的卷积核分成4个2×2×2的小核C*×R×(S×2),C*=Cin /2=4,并通过“数据变换引擎”展开降维成4个2×4的2维卷积核。同时也将输入张量Cin×H×W(8×8×8),变换成C*×H×(W×2);使得变换后的输入张量与变换后的卷积核匹配。

每个张量运算单元正好一次可以完成其中1个维度(X方向)窗口(1x4)的卷积操作。

为了能同时计算多个卷积核,将Cout个3维卷积核抽象为一个4维卷积核,Cout×Cin×R×S,同时进一步通过“数据变换引擎”将其变换为C*×R×Cout×(S×2)。

卷积核变换:将Cout×Cin×R×S(4×8×2×2)变换为C*×R×Cout×(S×2),其中,变换前的卷积核为:(Cout×Cin×R×S(4×8×2×2))。

输入张量变换:将Cin×H×W(8×8×8)变换为C*×H×(W×2),其中,变换前的输入张量为:Cin×H×W(8×8×8)。

寄存器数据装载的过程如下:

通过装载指令,将变换后的输入张量C*×H×(W×2)和卷积核组C*×R×Cout×(S×2)分别装载到向量寄存器组A和B中。

输入张量装载到向量寄存器组A,每个向量寄存器装载W×2=16个元素,共C*×H=32个;

卷积核组装载到向量寄存器组B,每个向量寄存器装载Cout×(S×2)=16个元素,共C*×R=8个。

卷积计算的过程如下:

步骤a1:从向量寄存器组A中选取第一个寄存器VRA0,即输入张量C*×H×(W×2)的最低1维,通过1维滑动窗(1×4,步长U‘=U*2=1*2)在 (W×2)上一次性得到F=W*2/(U*2) = 8个窗(边缘自动padding 0)。

步骤a2:从向量寄存器组A中选取一个寄存器VRB0,包含Cout个卷积核的第一维元素;

步骤a3:将步骤a1中得到的F个窗和步骤a2中得到的Cout个一维卷积核,两两对应卷积,累加到向量VACC0上,得到Cout×F个部分积;

将步骤a1~a2记为指令 VACC0 += Conv.L.U.O.P(VRA0, VRB0), 其中:

L=4, 运算单元点积执行的”乘累加个数”;

U=2,卷积窗步长;

O=4, 并行计算的卷积核个数Cout;

P=Yes, padding or not;

VACC0 += Conv.L.U.O.P(VRA0, VRB0);

即VACC0,0 += Dot(I0,W0), VACC0,1 += Dot(I1,W0), …, VACC0,7 += Dot(I7,W0), …, VACC0,31 += Dot(I7,W3);

如下,再延Y方向步进计算卷积核(R=2),并累加到部分积VACC中,得到:VACC0 += Conv.L.U.O.P(VRA1, VRB1);

再延Z方向步进,完成第一行输出元素的卷积核计算;

再延Y方向步进,重复上述操作,最终得到3维卷积的全部结果。

本发明实施例提供的伪代码如下:

For(c=0, c<4, c++) //C*=4

{

For (i=0, i<8, i++) //E=H=8

{

For (j=0, j<2, j++) //R=2

{VACCi+= Conv.L.U.O.P (VRAc+i+j, VRBc+j) ; }

}

}

输出3维张量 Cout x E x F (4x8x8), 在VACC中以 E x Cout x F (8x (4x8)) 格式存储

上述实施例中的张量运算单元也可以一次完成一个2x2窗大小的2维卷积,这时不需要将输入张量和卷积核分块并降维,可以跳过这部分“数据变换引擎”,直接计算2x2的卷积窗。此时注意需要采用2维滑动窗(2x2), 其他部分如前推导,就不再累述。

特别的,如果变换(降维)后的一维窗口大于“张量运算单元”的计算能力L,这里可以将窗口变换为接近L的整数倍N(以得到最佳的硬件利用效率),然后在X方向计算N次,每次计算该窗口的1/N,计算的结果累加到同一VACC中,得到该窗口卷积的部分积。

为了更加详细清楚的对上述实施过程进行阐述,以下进行详细说明,具体如下:

本发明实施例提出了一种通用的多维张量卷积计算架构,以及与该架构对应的向量处理器指令。该架构可以灵活、高效的支持人工智能应用和高性能计算中的不同尺度的卷积运算。

本发明实施例所涉及的多维张量卷积,通常是指2维以上的张量卷积,但不限于2维,如:常见3维卷积如下(更高维的卷积可以由基础的低维卷积构成):

其中:I 为输入张量,W为卷积核。

)

其中,各个字符的含义,如图12所示。

显而易见的,基础算子为一个3维张量点积,即计算得到一个输出 O[n][m][x][y] 需要计算一个3维张量的点积,如下:

此时每次张量运算中n,m为常量。

利用向量点积模块ACC=ACC+A0*B0 + A0*B0 + … + Ak-1*Bk-1 可以快速计算上述点积的部分积,再通过数次循环得到完整结果。

为了得到上述完整的结果,一共需要计算 N*M*E*F 个上述三维点积运算。

上述N*M*E*F点积运算可以分配给同构的点积单元并行计算。

上述N*M*E*F点积运算的所需的输入数据I 和 W 重复性强,优化数据结构后和并行方式后,可以使得数据读取带宽不会成为并行计算的瓶颈。

依旧以上述的实例为依据,一个点积单元计算8个元素(K=8)的点积,每个单元需要读取8*2=16个元素(2K个元素)。

不考虑数据复用,并行执行P=256个点积运算,需要读取4096个元素(P*K*2)。

考虑下面数据复用方式降低数据读取带宽到小于*K*2,只需要读取小于256个元素,这里记p=,从(寄存器或存储中)读取向量(I0,… IW-1), ,通过滑动窗从中选择p组向量,每个向量包含K=8个元素:

考虑步进U (U<=K),则选取

{I0,…IK-1},{IU,…IK+U-1},…{Ip*U,…IK+(p-1)*U-1};考虑步进U=1则为:{I0,…IK-1},{I1,…IK+U-1},…,{Ip-1,…IK+p-2}。

从(寄存器或存储中)读取向量W0,… W(p-1)*K-1,通过分组器分成p组,{ W0,… WK-1}, {WK,… W2K-1}, … {W(p-1}*K,… Wp*K-1}。

本发明实施例中,将上述张量公式变形为 ,其结果不变。

本发明实施例提供的方法中,可以通过以下几步实现高密度多维张量卷积:

数据准备:通过“数据格式变换引擎”将输入多维张量和卷积核整理成下面格式,可以参考本发明实施例提供的图2及图3。

输入多维张量:I[n][y][x][k]或I[n][k][y][x];

卷积核: W[j][m][k][i]或 W[k][j][m][i];

将多维张量和卷积核装载到寄存器组中,假设寄存器组中包括寄存器组A和寄存器组B。

多维张量按最低两维或者最低一维装载到寄存器组A中,例如I[k][x]或I[x];

卷积核按最低三维或者最低两维装载到寄存器组B中,例如W[m][k][i] 或W[m][i];

举例Implicit GEMM对2x2卷积的实现,是把图13示出的输入矩阵(4x5)展开如图14示出的(20x4)的2维向量,再与2x2卷积核的1维{F1,F2,F3,F4}展开做点积后得到。

由此可见,此时输入数据被展开成原有4倍大的新向量,需要额外的存储空间。

本发明实施例提供的方法中,通过将i或者k*i满足接近或大于张量运算单元(点积单元)的最小处理能力L,以保障较高的硬件有效处理效率。

本发明实施例提供的方法中,基于上述实施过程,可以将计算过程扩展成更高维度:

将寄存器A中的多维张量按照滑动窗展开,通过级联的选通器(MUX) 选出步进U对应的卷积向量 I[0], I[1],…. I[x-1],

将寄存器B中的卷积核按照维度m分成m组,记为Q[m], 这里是指将输出通道对应的M个卷积核分成M组。

这里需要注意的是,在具体组织这M个卷积核[M,Z,Y,X]时,本设计会按照[Y,M,X,Z]来组织以配合3维卷积计算,同时简化硬件设计。

I[x] 与 Q[m] 两两组合,并发的分配给 x * m 个张量运算单元(向量点积)则可以得到n * m个部分积。

向量点积单元由L个乘累加器 和输入0检测单元构成。

L的值可以为1、4、8等,在本发明实施例中不作限制,在后继的样例中为8。

如果L小于该向量点积所需的乘累加操作R,则通过重复执行J次,J为大于等于R/N的最小整数。

如果J*L >R, 则在最后一次循环自动补入r个0 使得J*L= R + r。这里在描述当最后一次循环时,因为输入数据不够充满大小为L的向量点积单元时,不足的部分不需要计算(补充0)。此时输出结果为非0的部分的点积累加值,此处可参见上述本发明实施例提供的点积的计算方法,此处不再赘述。

输入0检测单元检测到输入的I[k]或W[k]元素中有0元素,则跳过对应的乘累加运算以节省功耗。

上述步骤可以合并为一条SIMD向量处理器指令;

循环执行上述步骤,得到。

本发明实施例提供的方法中,各实施例可以为独立的实施例,也可以为相互关联的实施例;在各实施例独立的情况下,本领域技术人员可通过各实施例的语境,明确各实施例中说明各个执行过程及各个实施例包含的符号意义;例如,“C*”在各独立的实施例中有着不同的含义,可依据各实施例的语境确定“C*”的含义。在各个实施例互相关联的情况下,各个实施例之间相同相似的部分可以互相参见。其中,在本发明实施例应用的描述中,“延”与“沿”在语义上,为相同语义,可进行互相替换。

本发明实施例还提供了一种张量卷积计算系统,该张量卷积系统的结构示意图如图15所示,具体可以包括:

接收单元601,用于接收待计算的张量数据;

处理单元602,用于调用预先设定的各个卷积核,并应用所述预先设定的各个卷积核组成与所述张量数据对应的运算卷积核;所述预先设定的各个卷积核的维度相同,所述运算卷积核的维度比所述预先设定的各个卷积核的维度大1维,所述运算卷积核比所述预先设定的各个卷积核大出的1维的维度值为所述预先设定的各个卷积核的个数;

第一转换单元603,用于依据各个所述张量运算单元的运算能力,对所述运算卷积核进行第一格式转换处理,并将经过第一格式转换处理的所述运算卷积核装载至预先建立的第一寄存器组;

第二转换单元604,用于对所述待计算的张量数据进行第二格式转换处理,以使所述待计算的张量数据经过所述第二格式处理后,与所述经过第一格式转换处理的所述运算卷积核相匹配,并将经过所述第二格式转换处理的所述张量数据装载至预先建立的第二寄存器组;

选取单元605,用于选取目标滑动窗口,并确定所述目标滑动窗口的窗口格式及所述目标滑动窗口的步进步长;所述目标滑动窗口的窗口格式包括所述目标滑动窗口的窗口维度及所述目标滑动窗口的元素容量;

执行单元606,用于重复执行第一操作,所述第一操作包括:应用所述目标滑动窗口,按所述目标滑动窗口的步进步长,从所述第二寄存器组中的经过所述第二格式转换处理的所述张量数据中,选取多个张量数据子集;并依据每个所述张量运算单元的运算能力,从所述第一寄存器组中的经过所述第一格式转换处理的所述运算卷积核中,确定第一集合,所述第一集合中包括多个运算卷积核子集,所述多个运算卷积核子集与所述预先设定的各个卷积核一一对应,且每个所述运算卷积核子集属于与其对应的卷积核;为所述第一集合中的每个运算卷积核子集分配与其对应的张量运算单元组,每个所述张量运算单元组中包括多个张量运算单元,每个所述张量运算单元组中包含张量运算单元的个数相同;将所述第一集合中的每个运算卷积核子集分别发送至其对应的张量运算单元组中的每一个张量运算单元中,并将每个所述张量数据子集,分别发送至每个所述运算卷积核子集对应的张量运算单元组中的与该张量数据子集对应的张量运算单元中;在每个所述张量运算单元中,对该张量运算单元中的运算卷积核子集及张量数据子集进行卷积运算,获得该张量运算单元对应的部分积;

累加单元607,用于在当已执行的各个第一操作中分别选取的各个张量数据子集的总和为所述经过第二格式转换处理的张量数据时,停止执行所述第一操作,将已执行的各个第一操作中每个张量运算单元对应的部分积进行累加,以确定所述张量数据与各个所述卷积核的运算结果;已执行的每个第一操作中每个所述卷积核为其对应的各个运算卷积核子集的总和;已执行的每个第一操作中,所有所述运算卷积核子集对应的张量运算单元组中的各个张量运算单元的总个数不大于所述处理器中张量运算单元的个数;所述已执行的每个所述第一操作中分别选取的各个张量数据子集各不相同。

基于前述实施例提供的张量卷积计算系统,本发明实施例提供的张量卷积计算系统进一步示意了第一转换单元的具体结构,所述第一转换单元,具体可以包括:

第一确定子单元,用于确定经过第一格式转换处理的所述运算卷积核所需占用的存储空间大小;

第二确定子单元,用于确定所述第一寄存器组中包含的各个寄存器的存储能力;

第一选取子单元,用于依据所述第一寄存器组中各个寄存器的存储能力,在所述第一寄存器组中选取多个第一目标寄存器;

第一切分子单元,用于依据各个所述第一目标寄存器的存储能力,对经过第一格式转换处理的所述运算卷积核进行切分,获得与经过第一格式转换处理的所述运算卷积核对应的多个子运算卷积核;

第一存储子单元,用于将各个所述子运算卷积核按预设的存储方式,分别存储至与其对应的第一目标寄存器中。

基于前述实施例提供的张量卷积计算系统,本发明实施例提供的张量卷积计算系统进一步示意了第二转换单元的具体结构,所述第二转换单元,具体可以包括:

第三确定子单元,用于确定经过第二格式转换处理的所述张量数据所需占用的存储空间大小;

第四确定子单元,用于确定所述第二寄存器组中包含的各个寄存器的存储能力;

第二选取子单元,用于依据所述第二寄存器组中各个寄存器的存储能力,在所述第二寄存器组中选取多个第二目标寄存器;

第二切分子单元,用于依据各个所述第二目标寄存器的存储能力,对经过第二格式转换处理的所述张量数据进行切分,获得与经过第二格式转换处理的所述张量数据对应的多个子张量数据;

第二存储单元,用于将各个所述子张量数据按预设的存储方式,分别存储至与其对应的第二目标寄存器中。

基于前述实施例提供的张量卷积计算系统,本发明实施例提供的张量卷积计算系统进一步示意了执行单元的具体结构,所述执行单元具体可以包括:

第五确定子单元,用于确定所述运算卷积核子集中每个卷积元素与所述张量运算单元中每个乘加器的对应关系,并将每个所述卷积元素,分别发送至该卷积元素对应的乘加器中;确定所述张量数据子集中每个张量数据子集元素与所述张量运算单元中每个乘加器的对应关系,并将每个所述张量数据子集元素,分别发送至该张量数据子集元素对应的乘加器中;

乘累加子单元,用于在每个所述乘加器中,对该乘加器中的卷积元素及张量数据子集元素进行乘法运算,累加每个所述乘加器所得的乘法运算结果,得到所述张量运算单元对应的部分积。

基于前述实施例提供的张量卷积计算系统,本发明实施例提供的张量卷积计算系统,在所述在每个所述乘加器中,对该乘加器中的卷积元素及张量数据子集元素进行乘法运算的过程中,所述乘累加子单元具体用于:

判断该乘加器中的卷积元素或张量数据子集元素是否为零元素;

当判断结果为零时,则跳过对该乘加器中的卷积元素及张量数据子集元素的乘法运算及对该乘法运算所得的乘法运算结果的累加;

当该乘加器中的卷积元素及张量子集元素均不为零元素时,对该乘加器中的卷积元素及张量数据子集元素进行乘法运算。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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