一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种深度学习处理器的泛化架构设计方法

2023-08-04 21:07:16 来源:中国专利 TAG:


1.本发明涉及深度学习处理器的泛化架构设计方法。


背景技术:

2.为了满足深度学习在无人驾驶、人脸识别等应用领域的性能要求,专用的深度学习处理器相对于通用处理器提供了显著的高能效深度学习处理,成为了现代计算系统的关键计算引擎之一,被广泛集成到端、边、云计算系统中。然而,在很多实际应用场景特别是智能iot场景中,应用不仅包含深度学习计算任务,也包含了很多其他计算密集的任务,如信号处理、数据分析等,为每一种不同类型的任务定制专用加速器,尽管理论上可以达到更高的计算能效,但是也会带来很多副作用。一方面,更多的异构加速器会直接导致芯片面积的增加,同时增加了系统互联设计的需求和复杂度,从而引起芯片成本的增加。另一方面,不同的应用配置下,计算需求的差异必然会导致专用加速器利用率的偏差。而各个专用加速器往往是独立的,加速器的很多硬件资源如片上缓存、计算阵列等,占据较大的芯片面积和功耗,却又无法跨越加速器复用,也会损害芯片的计算能效和成本。


技术实现要素:

3.本发明的目的是为了解决现有深度学习处理器在智能iot场景中不能兼容深度学习以外的其他计算密集的任务,导致芯片面积的增加、成本的增加、利用率的偏差、计算能效低的问题,而提出一种深度学习处理器的泛化架构设计方法。
4.一种深度学习处理器的泛化架构设计方法具体过程为:
5.步骤1:系统分为软件部分和硬件部分;
6.软件部分即通用处理器,通用处理器负责对硬件编程;
7.硬件部分即深度学习加速器,深度学习加速器负责硬件计算;
8.通用处理器包括深度学习卷积计算任务和密集型计算任务;
9.通用处理器读取数据,解析数据在片外存储器的组织形式;
10.当进行密集型计算任务时,进入步骤2;
11.当进行深度学习卷积计算任务时,进入步骤3;
12.步骤2:解析密集型计算任务,得到最优的算子计算形式,将步骤1数据在片外存储器的组织形式加载到片上缓存buffer,基于最优的算子计算形式将片上缓存buffer的数据重排,将重排后数据加载到片上缓存buffer2中;
13.缓存buffer2中数据传输到mac阵列中,mac阵列输出结果传给片外存储器;
14.步骤3:将步骤1数据在片外存储器的组织形式加载到片上缓存buffer,缓存buffer中数据传输到mac阵列中,mac阵列输出结果传给片外存储器。
15.本发明的有益效果为:
16.本发明是对深度学习处理器改进,提出一种深度学习处理器的泛化架构设计方法,使得缓存上的数据在片上通过指令重新排列,并按照基本计算算子定义送入到乘加阵
列中进行计算。
17.本发明以应用广泛的深度学习处理器为核心,尝试泛化其计算能力,使其在支持深度学习处理的基础上,增加更多相似的常见计算任务如信号处理、数据分析等,在保障深度学习处理计算性能的前提下,使其可以被多种不同的计算任务共享,提高专用处理器的硬件资源利用率,降低智能iot芯片的面积和成本。
18.本发明实现最少增加硬件开销的前提下,泛化深度学习处理器的访存功能,实现更多类型的密集计算。本发明在支持原有硬件支持的固定位宽的深度学习卷积计算的同时,还支持可变位宽的深度学习卷积计算,支持可转换为向量级,矩阵级乘加类型的可变位宽计算,支持多层嵌套时层间数据可拼接填充类型的可变位宽计算。相比于通用处理器,其计算速度提高,相比于专用处理器,节省了对应部分的硬件开销。
附图说明
19.图1为泛化设计架构图;
20.图2为可变位宽乘加拼接计算框图;
21.图3为可变位宽乘加拼接序列控制框图,wt为wt是卷积的权重weight缩写,da为卷积的数据缩写data,p0是mul0乘法器的乘法计算结果,p1是mul1乘法器的乘法计算结果,p2是mul2乘法器的乘法计算结果,p3为mul3乘法器的乘法计算结果;
22.图4为可编程访存硬件结构图,prog_addr_start是可编程访存的起始地址;prog_burst_lenth是突发传输长度,就是发送连续地址时候的数据量,比如起始地址是10突发长度是3就会传输101112这三个地址的数据;dqclk是一个d触发器,是硬件电路的基本单元结构;rearranged_en为存内再重排的使能;
23.图5为存内再重排硬件结构图,rearranged_code为重排的译码坐标,code为位段,code是7位的,高三位选择哪一条数据,低四位选择这个数据的某一部分;rearranged_code_en为译码使能,只有他有效,这个位置的数据才会被重排;zero为0;
24.图6为单元内填充硬件结构图,padding value是要填充的值,比如刚才fft的那个1;reg_bit是可变位宽的位宽选择,比如是4bit 8bit还是16bit;padding en就是填充使能;dat_in就是输入数据;dat_out就是输出的数据;
25.图7a为深度学习加速器缓存数据加载时序图;
26.图7b为深度学习加速器mac阵列数据计算时序图;
27.图8为fft密集计算向量转换图,w
rn
表示旋转因子,xm(p)表示一组蝶形运算其中一个输入数据,xm(q)表示一组蝶形运算另一个输入数据,x
m 1
(p)表示一组蝶形运算其中一个输出数据,x
m 1
(q)表示一组蝶形运算另一个输出数据;
28.图9为16点fft蝶形运算图,w
nn
表示旋转因子,xm表示输入的信号数据,()里为对应坐标,dout为最终输出的频域数据;
29.图10为fft的向量向量乘映射图,wr代表旋转因子的实部,wi代表旋转因子的虚部,pr表示一组蝶形运算其中一个输入数据的实部,pi表示一组蝶形运算其中一个输入数据的虚部,qr表示一组蝶形运算另一个输入数据的实部,qi表示一组蝶形运算另一个输入数据的虚部;
30.图11为fft的可编程访存编程逻辑图,padding-1为就是把左上角那个0填充成1。
具体实施方式
31.具体实施方式一:本实施方式一种深度学习处理器的泛化架构设计方法具体过程为:具体过程为:
32.通用处理器在读入深度学习计算或者其他密集计算的时候会把要计算的对应的数据读取进来,然后把这些数据按照编译好的顺序发送到片外dram中,通用处理器解析的就是这些数据;
33.步骤1:系统分为软件部分和硬件部分;
34.软件部分即通用处理器(通用处理器如cortex-m3、picorv32),通用处理器负责对硬件编程;
35.硬件部分即深度学习加速器(深度学习加速器如nvdla、diannao),深度学习加速器负责硬件计算;
36.通用处理器包括深度学习卷积计算任务和密集型计算任务;
37.通用处理器读取数据,解析数据在片外存储器(dram,dram是访问时间长的片外存储器)的组织形式;
38.通用处理器将读取的数据按照顺序排列好,比如对于二维三维或者更高维度的数据会将其打平成一维的数据存储在内存中。软件端需要根据各个数据在存储器的位置来让硬件知道需要排列的数据在哪里。解析的也就是这个数据。
39.当进行密集型计算任务时,进入步骤2;
40.当进行深度学习卷积计算任务时,进入步骤3;
41.步骤2:解析密集型计算任务,得到最优的算子计算形式,将步骤1数据在片外存储器的组织形式加载到片上缓存buffer,基于最优的算子计算形式将片上缓存buffer的数据重排,将重排后数据加载到片上缓存buffer2中(若重排后的数据存在相同,则只取相同数据中一个数据重排,重排后数据加载到片上缓存buffer2中相同位置;);
42.缓存buffer2中数据传输到mac阵列中,mac阵列输出结果传给片外存储器;
43.步骤3:将步骤1数据在片外存储器的组织形式加载到片上缓存buffer,缓存buffer中数据传输到mac阵列中,mac阵列输出结果传给片外存储器。
44.比如:输出的维度是3*3*2的三维数据,但数据在内存中是一维的,需要将三维数据按照一维进行排列,需要定义具体一个完整的w以及w*h在内存中的距离,就是一个三维数据打平成一维数据的过程。
45.具体实施方式二:本实施方式与具体实施方式一不同的是,所述步骤2:解析密集型计算任务,得到最优的算子计算形式,将步骤1数据在片外存储器的组织形式加载到片上缓存buffer,基于最优的算子计算形式将片上缓存buffer的数据重排,将重排后数据加载到片上缓存buffer2中(若重排后的数据存在相同,则只取相同数据中一个数据重排,重排后数据加载到片上缓存buffer2中相同位置;);
46.缓存buffer2中数据传输到mac阵列中,mac阵列输出结果传给片外存储器;
47.具体过程为:
48.密集型计算任务的算子包括向量向量乘,矩阵向量乘,矩阵矩阵乘和向量向量扩充乘;
49.向量向量乘a1×
b1完成向量和向量的乘积计算,向量a1或者b1的维数可编程控制,
所述向量a1或者b1的维数指向量a1或者向量b1中数据的数量;
50.矩阵向量乘完成矩阵和向量的乘积计算,矩阵的向量数(一个矩阵有几列就有几个向量)可编程控制,向量的维数可编程控制,所述向量的维数指向量中数据的数量;
51.矩阵矩阵乘完成矩阵和矩阵的乘积计算,矩阵的向量数以及矩阵中向量的维数可编程控制;
52.向量向量扩充乘完成矩阵矩阵乘的计算结果的对角线相加,矩阵的向量数以及矩阵中向量的维数可编程控制;
53.若一组向量向量乘a1×
b1,a2×
b2,

,an×bn
中向量a1,a2,an不相同且向量b1,b2,bn不相同,向量向量乘a1×
b1,a2×
b2,

,an×bn
还是向量向量乘a1×
b1,a2×
b2,

,an×bn

54.若一组向量向量乘a1×
b1,a2×
b2,

,an×bn
中向量a1,a2,an相同或向量b1,b2,bn相同,则将相同的向量(向量a1,a2,an)提取出来,另一组不相同的向量(向量b1,b2,bn)拼接转换成矩阵,向量向量乘变成矩阵向量乘;
55.若一组向量向量乘a1×
b1,a2×
b2,

,an×bn
中向量a1,a2,an相同且向量b1,b2,bn相同,则将一组相同的向量(向量a1,a2,an)提取出来,另一组相同的向量(向量b1,b2,bn)拼接转换成矩阵,向量向量乘变成矩阵向量乘;
56.若一组矩阵向量乘a1×
b1,a2×
b2,

,an×bn
中矩阵a1、a2、an相同,矩阵a1、a2、an提取出来,将向量b1、b2、bn(向量b1、b2、bn相同或不同都都拼接成矩阵)(比如a1、a2、an都相同,就变成a1×
b1,a1×
b2,

,a1×bn
,然后把a1提取出来,就变成a1×
(b1,b2,

,bn),(b1,b2,

,bn)就是由b1,b2,

,bn拼接出来的矩阵)拼接转换成矩阵,矩阵向量乘变成矩阵矩阵乘;
57.a1、a2、an表示矩阵,b1、b2、bn表示向量;
58.若一个矩阵矩阵乘a
×
b的计算结果的对角线相加,得到向量向量扩充乘;
59.b1、b2、bn表示矩阵;
60.即得到确定密集型计算任务在硬件计算映射时最优的算子计算形式;
61.将步骤1数据在片外存储器的组织形式加载到片上缓存buffer,基于最优的算子计算形式将片上缓存buffer的数据重排,将重排后数据加载到片上缓存buffer2中(若重排后的数据存在相同,则只取相同数据中一个数据重排,重排后数据加载到片上缓存buffer2中相同位置;);
62.缓存buffer2中数据传输到mac阵列中,mac阵列输出结果传给片外存储器。
63.生成算子、访存、输出指令;
64.其它步骤及参数与具体实施方式一相同。
65.具体实施方式三:本实施方式与具体实施方式一或二不同的是,所述基于最优的算子计算形式将片上缓存buffer的数据重排,将重排后数据加载到片上缓存buffer2中,具体过程为:
66.基于密集计算对应的密集公式将片上缓存buffer的数据拆成最优的算子计算形式;
67.将拆成的最优的算子计算形式加载到片上缓存buffer2中。
68.其它步骤及参数与具体实施方式一或二相同。
69.具体实施方式四:本实施方式与具体实施方式一至三之一不同的是,所述步骤3:将步骤1数据在片外存储器的组织形式加载到片上缓存buffer,缓存buffer中数据传输到
mac阵列中,mac阵列输出结果传给片外存储器;
70.缓存buffer2中数据通过序列控制传输到mac阵列中;
71.具体过程为:
72.步骤31、将密集型计算任务的算子转换成深度学习卷积计算任务中的序列控制形式;
73.步骤32、序列控制模块将缓存buffer中数据按照深度学习卷积计算任务中的序列控制形式加载出来然后传输到mac阵列中。
74.其它步骤及参数与具体实施方式一至三之一相同。
75.具体实施方式五:本实施方式与具体实施方式一至四之一不同的是,所述步骤31、将密集型计算任务的算子转换成深度学习卷积计算任务中的序列控制形式;具体过程为:
76.密集型计算任务的算子包括向量向量乘,矩阵向量乘,矩阵矩阵乘和向量向量扩充乘;
77.通用的深度学习加速器包含一个mac阵列,一个周期一个mac单元加载一个数据的一个卷积核,将mac阵列转换成向量向量乘;
78.一个mac阵列包括多个mac单元;
79.通用的深度学习加速器包含一个mac阵列,一个周期多个mac单元中每个mac阵列加载同一个数据的不同卷积核,将mac阵列转换成矩阵向量乘;
80.通用的深度学习加速器包含一个mac阵列,多个周期多个mac单元加载不同数据的不同卷积核,将mac阵列转换成矩阵矩阵乘;
81.通用的深度学习加速器包含一个mac阵列,多个周期多个mac单元加载不同数据的不同卷积核,一组矩阵矩阵乘的计算结果的对角线相加,将mac阵列转换成向量向量扩充乘。
82.其它步骤及参数与具体实施方式一至四之一相同。
83.具体实施方式六:本实施方式与具体实施方式一至五之一不同的是,所述深度学习卷积计算任务中包括可变位宽的控制指令;
84.所述密集型计算任务中包括可变位宽的控制指令。
85.对于深度学习卷积计算和密集型计算,会由于数据的重要性以及计算效率而对位宽有不同的要求。对于数据较为重要的部分可能会采用较高精度的位宽计算,对于数据重要性一般但要求计算效率的部分可能会采用较低精度的位宽计算。对于深度学习卷积计算以及密集型计算都会存在类似的要求以及应用环境。
86.比如:在原来8位数据支持的基础上,引入4bit、8bit、16bit三种位宽形式,通过可变位宽的控制指令选择混合位宽的组合方式。
87.其它步骤及参数与具体实施方式一至五之一相同。
88.具体实施方式七:本实施方式与具体实施方式一至六之一不同的是,所述mac为乘法累加运算(multiply accumulate,mac);
89.mac阵列为多个乘法累加运算单元组成的阵列,矩阵矩阵乘需要多个mac单元,即mac阵列才能完成;
90.mac阵列是4bit的mac阵列,对于不同的位宽组合是通过4bit拼接得到的。
91.比如4bit*8bit可以拆分成两个4bit*4bit的乘法器进行计算。
92.其它步骤及参数与具体实施方式一至六之一相同。
93.要进行计算的数据的位宽不同,比如我们要计算一个卷积,就是输入特征数据data和权重数据weight的乘法累加计算,这里可能规定data是4位的,weight是8位的。然后在存储器方面,不同的位宽在存储器中都是紧密排列的,比如存储器是64位带宽的,那4位的data就会存16个,8位的weight就会存8个,但这个排列情况软件端不需要解析,只需要知道数据要求的位宽即可,硬件会根据解析出来的位宽要求读取对应存储器中的数据。
94.所述数据在片外存储器的组织形式为:
95.连续组织方式、链接组织方式、索引组织方式;
96.所述密集型计算任务为:信号处理、数据分析、数据压缩等;
97.信号处理指fft快速傅里叶变换,fir数字滤波器;数据分析指knn分类算法,数据压缩指dct离散余弦变换,rnn循环神经网络;
98.所述深度学习卷积计算任务为ai深度学习里边的一个典型的计算形式,主要就是输入特征数据data和权重数据weight进行卷积计算,也就是对应位置数据相乘最后累加到一起。所以深度学习处理器卷积部分相当于有一针对卷积数据流的乘法累加器,就是做向量乘计算的阵列;
99.连续组织方式又称为连续分配方式,要求每一个文件分配一个相邻的盘块;
100.优点:顺序访问容易:访问连续文件非常容易,访问速度非常快;
101.缺点:要求为文件分配连续的空间,必须事先知道文件的长度;不能灵活的删除插入记录;对于那些动态增长的文件,由于事先很难知道文件的最终大小,因而很难为其分配空间;
102.链接组织方式(分为隐式链接和显示链接),采用链接组织的方式可以为文件分配多个不连续的盘块;
103.优点:消除磁盘的外部碎片,提高内存的利用率;对插入删除修改非常容易;可以适应文件的动态增长;
104.索引组织方式分为单索引和多索引组织方式。
105.片外存储器是指除计算机内存及cpu缓存以外的储存器,此类储存器一般断电后仍然能保存数据。常见的片外存储器有硬盘、软盘、光盘、u盘等;
106.按照mac阵列定义基本计算算子,基本的计算算子包括向量向量乘,矩阵向量乘、矩阵矩阵乘以及向量向量扩充乘三类算子,每类算子的计算维度可以根据编程情况进行配置(就是通过编程选择哪一种基本计算算子,相当于设置一种计算模式);
107.向量向量乘完成向量和向量的乘积计算,向量的维数可编程控制;
108.矩阵向量乘完成矩阵和向量的乘积计算,矩阵的向量数(一个矩阵有几列就有几个向量)以及向量的维数可编程控制;
109.矩阵矩阵乘完成矩阵和矩阵的乘积计算,矩阵的向量数以及矩阵中向量的维数可编程控制。
110.向量向量扩充乘完成高纬度的向量和向量的乘积计算,向量的维数可编程控制。
111.解析:根据神经网络里边卷积的计算形式,可以将卷积计算过程以乘法累加单元为标准抽象成基本的计算算子;
112.对于不同的计算算法,也就是密集型计算任务,根据并行性,比如fft里信号与旋
转因子的蝶形计算之间旋转因子可能是相同的,这时我们就可以把fft的旋转因子部分提取出来,把整个计算提取为矩阵向量乘,然后映射到对应的计算形式中。
113.解析的原则就是尽可能的最大化数据的复用,然后把基本计算转化为硬件支持的计算,保证最大的硬件利用率。
114.根据数据精度的组合(这部分会根据算法的要求进行确定,比如卷积或者其他密集型计算时计算的时候某一层对结果影响较小,就会将该层的位宽取的小一些,类似4bit这种;),生成可变位宽的控制指令(就是选择data部分以及weight部分具体的精度,定义一个位段比如[1:0]这一段等于00的时候是4bit,01的时候是8bit,10的时候是16bit,指令发出去后具体的执行由硬件去做;)以及数据的复用序列(这块就和数据组织有关,比如数据以64bit组织,如果做data 4bit
×
weight 8bit的计算,64bit包含8个weight,但8个weight只需要8个4bit的data计算,即32bit,所以一次传入的64bit数据只有32bit数据能够被计算,剩下的32bit则需要下一次重复读取该部分时才能计算,因而需要有重复读取的复用部分;);
[0115]
对于一个密集计算需要多层计算,那前一层的输出数据会根据原来设计的深度学习卷积计算的输出形式输出到片外dram,但前一层的输出数据还会作为下一层的输入,而下一层读取的数据是按照深度学习卷积计算的形式排列好的,对于密集型计算可能没办法直接加载就可以在mac阵列中计算使用。这时就需要根据该计算密集型任务所需要的数据排列方式将数据进行重新排列,使得这一片数据在送入到mac阵列时是按照该计算密集型任务要求的形式输入的。
[0116]
确定密集型计算任务在硬件计算映射时最优的算子计算形式:
[0117]
确定可编程访存指令:
[0118]
图8、图9、图10是以fft为例的一个映射情况,正常wr和wi表示旋转因子的实部和虚部,pr、qr、pi、qi是信号数据的实部和虚部,我们把一个蝶形运算先抽象成向量乘法。然后提取相同的旋转因子,将多组向量向量乘抽象为矩阵向量乘,最后按照图的顺序将密集排列的数据按照抽象的向量形式重新排列。
[0119]
图8为fft密集计算向量转换图;
[0120]
x
m 1
(p)=xm(p) xm(q)
×wrn
[0121]
x
m 1
(q)=xm(p)-xm(q)
×wrn
[0122]
其中,q=p 2m[0123]wrn
表示旋转因子,xm(p)表示一组蝶形运算其中一个输入数据,xm(q)表示一组蝶形运算另一个输入数据,x
m 1
(p)表示一组蝶形运算其中一个输出数据,x
m 1
(q)表示一组蝶形运算另一个输出数据,m是fft的级数,比如16点的分为4级m取0,1,2,3;
[0124]
图9为16点fft蝶形运算图,w
nn
表示旋转因子,xm表示输入的信号数据,()里为对应坐标,dout为最终输出的频域数据;
[0125]
图10为fft的向量向量乘映射图,具体见图8,wr代表旋转因子的实部,wi代表旋转因子的虚部,pr表示一组蝶形运算其中一个输入数据的实部,pi表示一组蝶形运算其中一个输入数据的虚部,qr表示一组蝶形运算令一个输入数据的实部,qi表示一组蝶形运算令一个输入数据的虚部;
[0126]
图11为fft的可编程访存编程逻辑图,将数据按照可编程访存的各个部分重新排
列为我们所需要的向量形式。
[0127]
xm(p)_real-》pr;xm(p)_imag-》pi;xm(q)_real-》qr;xm(q)_imag-》qi
[0128]
wrn_real-》wr;w
rn
_imag-》wi
[0129]
x
m 1
(p)_real=xm(p)_real
×
1 xm(q)_real
×wrn
_real-xm(q)_imag
×wrn
_imag=(xm(p)_real,xm(q)_real,xm(q)_imag)
×
(1,wrn_real,-wrn_imag)-1
=(pr,qr,qi)
×
(1,wr,-wi)-1
[0130]
x
m 1
(p)_imag=xm(p)_imag
×
1 xm(q)_real
×wrn
_imag xm(q)_imag
×
wrn_real=(xm(p)_imag,xm(q)_real,xm(q)_imag)
×
(1,w
rn
_imag,w
rn
_real)-1
=(pi,qr,qi)
×
(1,wi,wr)-1
[0131]
x
m 1
(q)_real=xm(p)_real
×
1-xm(q)_real
×wrn
_real xm(q)_imag
×wrn
_imag=(xm(p)_real,xm(q)_real,xm(q)_imag)
×
(1,-w
rn
_real,w
rn
_imag)-1
=(pr,qr,qi)
×
(1,-wr,wi)-1
[0132]
x
m 1
(q)_imag=xm(p)_imag
×
1-xm(q)_real
×wrn
_imag-xm(q)_imag
×wrn
_real=(xm(p)_imag,xm(q)_real,xm(q)_imag)
×
(1,-w
rn
_imag,-w
rn
_real)-1
=(pi,qr,qi)
×
(1,-wi,-wr)-1
[0133]
real为实部,imag为虚部,-》是箭头,是后边用来表示前面的缩写,简写一下,xm(p)_real用pr缩写表示。
[0134]
根据硬件的数据流结构,确定该数据(如果是深度学习卷积计算就是buffer的数据,如果是计算密集型任务就是buffer2的数据。)在硬件不同操作层级(操作层级就是在一个周期内不同mac阵列进行的计算;多个周期的操作层级组合为更高一层的块操作层级;多个块操作层级组合形成一个完整的卷积计算为顶层的操作层级。)下数据访问形式(相当于输入的数据在不同操作层级下具体要加载的数据,数据先按照规定的顺序排列好然后再送入mac阵列。就是一个序列控制的部分。数据从片外dram加载到片上缓存是批量直接加载的,但mac需要的数据是要按照数据流各个层级下的数据排列形式,需要通过一个序列控制的部分把数据从片上缓存加载到mac阵列。属于一个通用的深度学习加速器的结构。),生成对应的序列(将顺序排列的数据按照卷积计算的顺序加载形成的序列)控制的指令;
[0135]
硬件结构
[0136]
该部分功能主要通过加速器中的序列控制模块(序列控制)输入至mac阵列的数据结构完成控制的。
[0137]
向量向量乘对应单周期一个mac单元中两组向量的乘加(向量积,向量里对应位置数据相乘再加到一起)计算;序列控制器每个周期串行加载(比如有一组数据,每个周期加载其中一个,直到把所有数据都加载结束。对应的是并行加载,就是一个周期把所有数据都加载过去。)两组向量;一组计算周期(一组计算周期指的是单周期一组mac阵列)为一个时钟周期;
[0138]
每一个mac单元运算在一个周期相当于进行一组向量积运算,即两个向量的乘法累加运算。多个mac单元在同一个周期下,各自组的向量积中其中一条向量是相同的,提取各组相同向量得到单个周期不同mac为矩阵向量积的运算。在矩阵向量积的基础上,多个周期加载另一条不同的向量,从而形成矩阵矩阵乘的计算。
[0139]
如图7a、7b所示,按照时间轴加载数据,发送至各个mac中。其中每个dat和wt都是
一条向量。上半部分是数据串行加载的过程,下半部分是数据并行发送至各个mac阵列的过程。每个mac是一个矩阵向量乘,多个mac组合形成矩阵矩阵乘。
[0140]
矩阵向量乘对应单周期多组mac单元(单个周期多组mac抽象为矩阵向量乘)中,矩阵各组向量发送至不同的mac阵列中,向量并行发送至各个mac阵列中(是矩阵里面的多个向量,多个向量组成一个矩阵。将矩阵里面各条向量并行发送到各个mac单元中);序列控制器在矩阵数据的向量数个周期(按照串行加载过程,每个周期加载一条向量,那么一个完整矩阵加载需要的周期数和矩阵的向量数相同)内串行加载各部分向量数据,向量在第一个周期完成加载(他这里相当于分为两个过程,一个是加载数据的过程,一个是计算的过程,加载的过程是串行的,加载的周期数与矩阵向量数相同,前面说的单周期指的是计算的过程,计算过程是单个周期完成的。这里我们说的是加载的过程,加载过程是多个周期的,但是矩阵向量乘里面的向量只有一条,因而向量只需要一个周期加载),一组计算周期(计算只需要一个周期,单周期,但是加载需要多个周期,然后计算和加载相当于并行执行的,计算这一组数据的同时加载下一组数据,因而计算周期以较大的加载过程为准)为矩阵中向量个数;
[0141]
矩阵矩阵乘对应多周期多组mac阵列中,a矩阵中各组向量发送至不同的mac阵列中,b矩阵中每个周期(把数据复制mac个,然后每个mac发送一个)选择一组向量,并行发送至各个mac阵列中,b矩阵中各组向量在多个周期中串行(每个周期计算b矩阵的一条向量,即串行,多个周期计算多个)完成计算;序列控制器在两组矩阵各自向量个数周期(矩阵有多少个向量就有多少个周期,在加载过程中两个矩阵的向量都是串行加载的)内串行加载各部分向量数据,一组计算周期为较大矩阵向量个数周期(较大矩阵有多少个向量就有多少个周期)。
[0142]
修改mac阵列的基本乘法单元为4bit乘法器,对于不同位宽的组合形式,我们通过符号位扩展以及移位拼接的方式完成计算。图2为8bit与8bit可变位宽乘加拼接框图。
[0143]
图2中第三部分四个mul是乘法器,把mac的乘法部分设计为4bit,8bit,16bit中最小位宽4bit的形式,然后其他位宽组合的乘法器通过4bit乘法器拼接的方式完成。这里以8bit乘8bit为例,把他拆成两个4bit的数据,然后对高四位和低四位进行符号位扩展,高位补符号位,低位补0,再分别送入到4个乘法器中,最后再移位相加,移位时涉及到符号位的问题,对于低4位乘低4位的结果,符号位扩展为0,其他拓展为高位。
[0144]
对于序列控制部分,将从缓存中读取到的数据按照编程位宽组合下移位拼接所需要的数据顺序排列好,再送入至mac阵列中。图3为8bit与8bit可变位宽乘加拼接序列控制框图。
[0145]
还是以8位乘8位为例,一个mac中有16个4位乘法器,数据在内存中时紧密排列的,但根据前面乘法拼接的原理,数据再送入到mac阵列中时数据需要按照拼接需要的数据送入,如图所示,16个乘法器一次可以加载32位数据,从而导致输入的64位数据无法一次算计完毕,剩下的32位数据需要下一次加载时再进行计算。
[0146]
可编程访存类
[0147]
指令功能
[0148]
该部分控制数据从片上缓存buffer加载之buffer2时需要进行的数据重新排列处理,该部分主要引入可编程访存,存内再重排以及单元内填充三组指令;
[0149]
可编程访存—作为该类指令的总开关,主要负责数据的加载以及其他控制指令(存内再重排和单元内填充)的使用,引入访存的起始地址以及突发传输长度,实现对存储器中任意一段的数据访问;
[0150]
存内再重排—当一条缓存数据的组成需要来自不同数据里的不同位段时,通过可编程访存读取所需的数据,通过存内再重排对读取的数据的不同位段进行重新排列组合形成新的数据;
[0151]
存内再重排是由于在系统运行时存在中间数据的单个条目的重新组合,该条目的数据可能由来自其他若干组条目中几组数据的拼接,因而这里我们定义存在再重排,以保证系统在运行过程中不需要对不同硬件层之间产生的中间数据通过软件端再进行处理,只需通过编程方式即可实现存内数据的重新排列,进而完成整个系统的计算。
[0152]
rearrange_code_en:当一组数据按照16个4bit数据进行重排,指令每4个数据为一组进行重排控制,当该位置位时,表示该位对应的数据需要进行重排,通过坐标译码的方式选择该位置的4bit数据,当该位清零时,表示该位置的数据不需要进行重排,则将该位置的数据置零。
[0153]
rearrange_code:存内再重排具体的译码部分,对输入到寄存器暂存的一组若干个待重排的数据根据坐标单元进行对应的译码逻辑。
[0154]
指令参考图5,图中展示了16组译码单元中的一组数据的具体逻辑,其他部分的译码同理可得。每一个译码逻辑生成一个4bit的数据,最终将16组译码结果的数据拼接成16bit的数据输出到下一模块中。
[0155]
单元内填充—当读取数据的某些位段需要填充固定的数值时,通过单元内填充实现对指定位段的数据填充;
[0156]
当数据位宽为4bit时,一组64bit将包含16个数据,此时使用16bit的指令控制对应位置的处理情况,当对应的指令位置位时,则表示该位置对应的数据进行相应的处理,当该位清零时,则表示该位的数据保持不变。
[0157]
循环输出—当送入mac阵列的数据是周期循环的情况时(周期循环的数据就是重排后存在相同的数据),引入立方数据宽度方向循环输出,并将待循环的数据排列至立方数据的第一层位置,实现周期循环输出(按照w方向进行循环)。
[0158]
对于像图像这种三维数据,对于长宽高我们通常用width(宽度),height(高度),channel(通道数)来表示,宽度方向循环就是当硬件在读取一个三维数据时是按照w,h,c的顺序读取数据的,当一个w方向读取结束之后会继续读取下一h高度的w方向的数据,当循环模式开启时,将重复读取上一h高度下的w方向的数据。
[0159]
硬件结构
[0160]
图4为可编程访存结构,该部分硬件结构主要根据指令接收到的编程地址以及突发传输长度生成缓存读取数据的地址,并按照读通道时序生成对应的读数据信号,待缓存中的数据加载结束后按顺序读出。
[0161]
图5为存内再重排结构,接收来自可编程访存发送至寄存器中的数据,根据译码指令对暂存在寄存器中的数据以及数据中具体的位段部分进行选择。根据选择情况完成一组完整的64位数据的拼接,并输出至单元内填充模块。
[0162]
图6为单元内填充结构,该部分主要根据译码指令选择将该部分数据的指定位段
填充为指令指定的固定数值,同时当数据处于不同位宽情况下时,一条数据的组合情况不一致,所以会根据不同位宽情况对填充位段进行分别处理。
[0163]
本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,本领域技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表