在MAC电路中使用不同核对一组数据执行连续MAC运算
文献发布时间:2023-06-19 10:00:31
技术领域
本公开大体上涉及在乘累加(multiply-and-accumulate,“MAC”)电路阵列的连续MAC周期(cycle)期间使用不同核(kernel)对一组数据执行MAC运算。
背景技术
神经网络等处理电路系统针对各种不同的问题提供了解决方案。例如,可以使用卷积神经网络(CNN)来进行图像处理。CNN可以使用图形处理单元(GPU)实施,并且使用批处理方法通过将多个类似任务分组并将任务组作为一个批次进行计算来减少计算成本。一批任务可以通过使用多个流处理器(SP)核心在可扩展数目的流式多处理器(SM)中并行计算。GPU的控制器的实施成本可以分摊到多个任务上,但是,CNN的时延将随着批大小的增加而增加,因为GPU必须等待所有任务准备就绪,然后才能以分批模式处理这些任务,以保持CNN的计算效率。
有各种不同的电路可以实施CNN,包含但不限于数字信号处理器(DSP)、通用计算机处理器、可编程集成电路、可编程逻辑装置(PLD)和片上系统(SoC)装置。PLD是一种可以编程成执行指定逻辑函数的可编程集成电路(IC)。现场可编程门阵列(FPGA)是一种PLD类型,它可包含可编程区块的阵列。这些可编程区块包括各种类型的逻辑块,这些逻辑块可包含例如输入/输出块(IOB)、可配置逻辑块(CLB)、专用块随机存取存储器(BRAM)、乘法器、数字信号处理块(DSP)、处理器、时钟管理器、延迟锁定环(DLL)、总线或网络接口,如外围组件互连(PCI)、PCI快速(PCIe)、以太网等等。一些装置包含足够的组件和功能性,以在单个IC芯片上有效地用作完整的计算机系统。具有此类功能性的装置有时被称为SoC。一些SoC装置可包含类似于由各种PLD提供的可编程逻辑的可编程逻辑。
以前的实施方案经常会遇到处理单元和存储器之间的瓶颈。因此,数据的提供速度可能不够快,无法充分利用处理电路。
发明内容
一种电路布置包含乘累加(MAC)电路的阵列,其中每个MAC电路包含配置成存储多个核的缓存(cache)。所述MAC电路配置成以第一速率接收输入特征图(IFM)的第一组数据元素。所述MAC电路配置成在第一MAC周期期间,对所述第一组所述数据元素和所述核(H)中与第一输出特征图(OFM)的深度指数(d
所述电路布置可包含耦接到所述阵列的控制电路。所述控制电路配置成接收所述第一核在所述缓存中的第一地址,基于所述第一地址生成所述第二核在所述缓存中的第二地址,在所述第一MAC周期期间向所述MAC电路提供所述第一地址,并且在所述第二MAC周期期间向所述MAC电路提供所述第二地址。
所述控制电路还可配置成响应于所述第一地址映射到块数据传递的起始地址,使所述第一地址增加固定值以生成所述第二地址。
所述控制电路还可配置成响应于所述第一地址映射到块数据传递的结束地址,使所述第一地址减少固定值以生成所述第二地址。
所述阵列中的所述MAC电路可配置成在第三MAC周期期间,对所述第一组所述数据元素和所述核(H)中与第三OFM深度指数(d
第一控制电路可以耦接到所述阵列。所述第一控制电路配置成接收所述核中的所述第一核在所述缓存中的第一地址,基于所述第一地址生成所述核中的所述第二核在所述缓存中的第二地址,基于所述第一地址生成所述核中的所述第三核在所述缓存中的第三地址,在所述第一MAC周期期间向所述MAC电路提供所述第一地址,在所述第二MAC周期期间向所述MAC电路提供所述第二地址,并且在所述第三MAC周期期间向所述MAC电路提供所述第三地址。
所述第一控制电路还可配置成使所述第一地址增加固定值以生成所述第二地址,并使所述第二地址增加所述固定值以生成所述第三地址。
所述电路布置可包含耦接到所述阵列的第二控制电路。所述第二控制电路配置成以等于或快于所述第一速率的输入速率接收所述IFM的所述第一组所述数据元素和所述IFM的第二组所述数据元素,并且响应于输入控制信号,延迟至少一个MAC周期向所述MAC电路提供所述第二组所述数据元素。
所述阵列中的所述MAC电路可配置成以慢于所述第一速率的第二速率接收所述IFM的第二组所述数据元素,在连续地跟随所述第二MAC周期的第三MAC周期期间对所述第二组所述数据元素和所述核(H)中与第三OFM深度指数(d
所述电路布置的所述阵列可包含耦接到所述阵列中的每一列MAC电路的多个上下文切换累加器。所述多个上下文切换累加器配置成将所存储值与直接耦接到所述累加器的MAC电路的输出累加,并且利用直接耦接到所述累加器的所述MAC电路的所述输出初始化。
一种方法包含以第一速率向乘累加(MAC)电路的阵列输入输入特征图(IFM)的第一组数据元素。所述方法包含在第一MAC周期期间,通过所述MAC电路对所述第一组所述数据元素和存储在所述MAC电路的缓存中的第一核(H)执行第一MAC运算,其中所述第一核与第一输出特征图(OFM)的深度指数(d
所述方法可包含向耦接到所述阵列的控制电路输入所述第一核在所述缓存中的第一地址,基于所述第一地址通过所述控制电路生成所述第二核在所述缓存中的第二地址,在所述第一MAC周期期间向所述MAC电路输入所述第一地址,并且在所述第二MAC周期期间向所述MAC电路输入所述第二地址。
生成所述第二地址可包含响应于所述第一地址映射到数据块传递的起始地址,使所述第一地址增加固定值。
生成所述第二地址可包含响应于所述第一地址映射到数据块传递的结束地址,使所述第一地址减少固定值。
所述方法可包含在连续地跟随所述第二MAC周期的第三MAC周期期间,通过所述MAC电路对所述第一组所述数据元素和存储在所述MAC电路的所述缓存中的第三核(H)执行第三MAC运算,其中所述第三核与第三OFM深度指数(d
所述方法可包含向耦接到所述阵列的第一控制电路输入所述核中的所述第一核在所述缓存中的第一地址,基于所述第一地址通过所述第一控制电路生成所述第二核在所述缓存中的第二地址,基于所述第一地址通过所述第一控制电路生成所述第三核在所述缓存中的第三地址,在所述第一MAC周期期间向所述MAC电路输入所述第一地址,在所述第二MAC周期期间向所述MAC电路输入所述第二地址,并且在所述第三MAC周期期间向所述MAC电路输入所述第三地址。
生成所述第二地址可包含使所述第一地址增加固定值,并使所述第二地址增加所述固定值。
所述方法可包含以等于或快于所述第一速率的输入速率向耦接到所述阵列的第二控制电路输入所述IFM的所述第一组所述数据元素和所述IFM的第二组所述数据元素,并且响应于去往所述第二控制电路的输入控制信号,通过所述第二控制电路延迟至少一个MAC周期向所述MAC电路输入所述第二组所述数据元素。
所述方法可包含以慢于所述第一速率的第二速率向所述阵列中的所述MAC电路输入所述IFM的第二组所述数据元素,并且在连续地跟随所述第二MAC周期的第三MAC周期期间,通过所述MAC电路对所述第二组所述数据元素和存储在所述MAC电路的所述缓存中的第三核(H)执行第三MAC运算,其中所述第三核与第三OFM深度指数(d
所述方法可包含通过耦接到所述阵列中的每一列MAC电路的多个上下文切换累加器将所存储值与直接耦接到所述累加器的MAC电路的输出累加,并且利用直接耦接到所述累加器的所述MAC电路的所述输出初始化所述累加器。
鉴于下文的具体实施方式以及权利要求书将认识到其它特征。
附图说明
在审阅以下详细描述后并在参考附图后,电路布置和方法的各个方面和特征将变得显而易见,附图中:
图1示出包含控制器、控制齿轮箱(control gearbox)、数据齿轮箱(datagearbox)和MAC电路阵列的示例性电路布置的框图;
图2示出示例性MAC电路阵列的框图;
图3示出图2的MAC电路阵列中的示例性MAC电路的框图;
图4示出利用示例性OFM深度分割的图2的阵列的框图;
图5A示出通过核的行和列索引(u,v)迭代的第一OFM遍次p
图5B示出通过IFM相位指数n
图5C示出通过核的行和列索引(u,v)迭代的第一OFM遍次p
图5D示出通过IFM相位指数n
图6A示出通过OFM的行和列索引(r,d)迭代的最左边累加器的OFM输出序列;
图6B示出通过OFM深度指数d
图7示出示例性控制齿轮箱的框图;
图8示出MAC电路中的核缓存的示例性布局;
图9示出示例性数据齿轮箱的框图;
图10示出图1的电路布置的示例性时序图,其中OFM遍次(pass)包含两个OFM相位;
图11示出图1的电路布置的示例性时序图,其中OFM遍次包含三个OFM相位;
图12示出图1的电路布置的示例性时序图,其中OFM遍次从包含三个OFM相位切换到包含两个OFM相位;
图13示出示例性输入激活函数单元(IAFU);以及
图14示出上面可以实施所公开的电路和过程的可编程集成电路(IC)。
具体实施方式
在以下描述中,阐述许多具体细节来描述本文中呈现的具体实例。然而,对于本领域技术人员来说,显而易见的是,在没有下文给出的所有具体细节的情况下,可以实践一个或多个其它实例和/或这些实例的变体。在其它实例中,未详细描述公知特征,以免模糊本文中对实例的描述。为了便于说明,可以在不同的图中使用相同的附图标记来表示相同的元件或相同元件的额外实例。
提高卷积神经网络(CNN)等神经网络的计算效率可伴随着增加计算复杂度和计算速度。通过使用以与神经网络的乘累加(MAC)电路的计算速度相等的频率运行的控制器,可以提高计算效率,这使得MAC电路尽可能地保持繁忙。然而,为了适应MAC电路的速度,控制器必须能够处理地址生成的复杂度,这与MAC电路的计算复杂度成正比。增加控制器的逻辑复杂度和速度会使实施成本以指数方式增加。然而,即使控制电路的逻辑以MAC速率运行,控制器向MAC电路提供数据的速率也可能受到诸如存储器之类的其它电路的限制。
所公开的电路布置和方法提供了一种用于在以MAC处理频率(下文称为MAC速率)运行时使CNN的MAC电路阵列尽可能保持繁忙并且同时维持MAC电路的控制器的更慢运行频率的方法。MAC速率可以基于提供给MAC电路的时钟信号。CNN的卷积层(CONV)和全连接层(FC)执行MAC运算。在CNN的其它层中可以执行各种其它算术运算,例如修正线性单元(ReLU)、池化和归一化。如本文所用,“MAC电路”是指乘法器电路、累加器电路和缓存的组合,所述缓存配置成存储MAC运算中要使用的核。由于卷积运算可以并行进行,所以可以使用MAC电路阵列并行地进行卷积运算,从而提高CNN的计算速度。为了最大化阵列的吞吐量,充分利用MAC电路的处理周期(下文称为MAC周期),并使MAC速率最大化。
所公开的方法的计算效率的提高增加了提供给MAC电路的地址和控制模式的复杂度。所公开的方法的实施方案包含一个或多个控制电路,这些控制电路生成阵列的专用地址模式,以从MAC电路的全局存储器和/或缓存读取数据和/或将数据写入全局存储器和/或缓存。控制电路生成专用控制模式,以便对MAC电路的数据和定时操作进行寻址。
所公开的方法是通过分割激活特征深度来时分复用每个MAC电路中的多个(M个)并行线程。控制电路(或“控制器”)以MAC速率为这M个线程(thread)生成地址和控制模式。如本文所使用,“线程”是指在输出特征图的深度指数处的值的计算。地址和控制模式由另一控制电路(以下称为控制齿轮箱)转换成直接映射到MAC电路的缓存的存储器地址,并且地址和控制模式在MAC电路的每个处理周期都被更新。另一控制电路(以下称为数据齿轮箱)将从存储器读取数据的速率调整为将数据提供给MAC电路的另一速率。在一些实例中,数据齿轮箱以慢于数据读取速率的速率向MAC电路数据。在一些实例中,控制齿轮箱和数据齿轮箱向MAC电路提供控制字、地址和数据的速率根据在给定时间点交织在MAC电路中的并行线程的数目(M)而动态变化。例如,所公开的方法可以从MAC电路中的两个并行线程交织切换到MAC电路中的三个并行线程,反之亦然。
多个核的地址交织存储在每个MAC电路的缓存中,以便在连续MAC周期期间对一组数据元素执行多个连续MAC运算。MAC运算的执行速率比向MAC电路提供数据、控制字和地址的速率快,但是控制器的运行频率保持恒定。控制器的运行频率与MAC速率成正比(例如,1/M)。
所公开的方法根据时延(例如,周期时间权衡)估计控制电路的初始逻辑深度,使得管线平衡和重新定时易于实现。
图1示出包含控制器108、控制齿轮箱110、数据齿轮箱104和MAC电路阵列106的示例性电路布置100的框图。控制器108生成用于来自和针对全局存储器102的数据访问的地址模式(address patterns)。数据齿轮箱104耦接到全局存储器102和MAC电路阵列106。数据齿轮箱104针对从全局存储器102读取的数据在控制器108和阵列106之间执行速率调整。控制齿轮箱110耦接到控制器108和阵列106。控制齿轮箱110针对来自控制器108的地址和控制字在控制器108和阵列106之间执行速率调整。从阵列106输出的数据被写入到全局存储器102。数据齿轮箱104、控制齿轮箱110和阵列106的示例性操作在下文结合图4-12加以描述。
图2示出示例性MAC电路阵列的框图。图2所示的阵列可类似于图1所示的阵列106。阵列106包含以m+1行和n+1列布置的MAC电路。阵列106的行0包含MAC电路200-0、200-1、200-2、……200-n;阵列106的行1包含MAC电路201-0、201-1、201-2、……201-n;并且阵列106的行m包含MAC电路231-0、231-1、231-2、……231-n。
在本公开的至少一个实施方案中,阵列106中的每一列包含M个上下文切换并行累加器(context switching parallel accumulators),这M个上下文切换并行累加器耦接到列中专用于M个时分复用线程的相应最顶部MAC电路的。累加器222-0耦接到阵列106中的列0的MAC电路231-0;累加器222-1耦接到列1的MAC电路231-1;累加器222-2耦接到列2的MAC电路231-2;且累加器222-n耦接到列n的MAC电路231-n。每个累加器一起存储阵列106中的每个线程的每个已累加部分点积值并对其进行求和,从而获得每个线程的最终点积值。
在至少一个实施方案中,输出激活函数单元(OAFU)耦接到阵列106中的相应列的累加器。OAFU 224-0耦接到累加器222-0;OAFU 224-1耦接到累加器224-1;OAFU 224-2耦接到累加器222-2;且OAFU 224-n耦接到累加器222-n。每个OAFU向从累加器输出的值应用一个或多个激活函数,例如ReLU、池化和归一化。OAFU的输出可以传递到全局存储器,例如图1所示的全局存储器102。
在至少一个实施方案中,阵列106中的每一行包含耦接到行中的最左侧MAC电路的输入激活函数单元(IAFU)。IAFU 220-0耦接到阵列中的行0的MAC电路200-0;IAFU220-1耦接到行1的MAC电路201-0;且IAFU 220-m耦接到行m的MAC电路231-0。每个IAFU向从全局存储器102读取的数据应用一个或多个激活函数。数据可以是图1所示的数据齿轮箱104提供给IAFU的IFM数据。当绕过OAFU或者向输入到MAC电路的数据和从MAC电路输出的数据应用池化运算时,IAFU可以是启用。IAFU的输出可以直接传递到MAC电路或者传递(例如,周期)回到全局存储器102。下文结合图13进一步论述周期回到全局存储器102。如果IAFU被绕过,那么输入数据被直接馈送到MAC电路中。
如图2所示,输入到阵列106的数据从左到右水平地移位到行中的每个MAC电路。从MAC电路输出的累加值从下到上竖直地移位经过列中的MAC电路。
控制齿轮箱,例如控制齿轮箱110的向阵列提供地址和控制101以执行每个线程的核访问和MAC运算。地址和控制101由所有MAC电路共享,并且在每个MAC周期从下到上从左到右移位。地址和控制103在每个MAC周期从下到上竖直地移位,并且由所有IAFU共享。地址和控制105在每个MAC周期从左到右水平地移位,并且由所有累加器共享,以控制所述M个并行累加器之间的上下文切换。地址和控制107在每个MAC周期从左到右水平地移位,并且由所有OAFU共享。
图2所示的框图及其组件的布置和大小并不限制阵列106的物理组件的布置或大小。尽管图2示出从左到右从下到上的数据流,但是本公开的实施方案不限于此。
图3示出图2的MAC电路阵列中的示例性MAC电路的框图。尽管图3示出的是阵列106中的MAC电路201-0,但是图3中所示的结构适用于阵列106中的每个MAC电路。MAC电路201-0包含乘法电路330、求和电路334和核缓存332。乘法电路330和求和电路334协作以执行MAC运算。乘法电路330向MAC电路201-0输出数据输入X的乘法输出值MUL以及从核缓存332读取的核H。数据X是全局存储器102中的数据或IAFU220-1的输出。数据X向行1的右侧邻近MAC电路(例如,201-1)移位。核H包含特定MAC运算的权重。地址和控制103由控制齿轮箱110提供给MAC电路201-1以从核缓存332读取核H。
求和电路334输出底部邻近MAC电路(例如,200-0)的乘法输出值MUL和累加值的总和。将求和电路334的输出输入到顶部邻近MAC电路(例如,201-0)的求和电路。对于行0中的MAC电路,输入到求和电路的累加值可以初始化为零或偏置值。对于最顶部行m中的MAC电路,将求和电路的输出输出到全局存储器102、累加器(例如,224-0)或OAFU(例如,222-0),因为行m的MAC电路上方不存在任何MAC电路。
阵列106可以是CNN的一部分,使得输入到阵列106中的MAC电路的数据X可以是输入特征图(IFM)的数据,并且从阵列106输出的数据可以是输出特征图(OFM)的数据。阵列106针对特定OFM深度指数d
其中:D
式2中所描述:
特定行和列索引(r,c)的OFM被描述为方程式4:
IFM深度D
d
其中:N
H[:,:,d
因此,方程式3可以重新写成方程式6:
其中:MAC是每次沿着索引编为MAC[r,c,u,v,d
其中MUL是MAC电路的乘法电路每次的输出。MUL是索引编为MUL[r,c,u,v,d
MUL[r,c,u,v,d
返回参考图2和3,地址和控制101用于访问核缓存332中在指数[u,v,d
通过在每个MAC周期针对不同的OFM深度指数执行乘法运算,M个并行线程可以在一个MAC电路内部通过时序共享进行分组。针对不同的OFM深度指数d
d
其中:N
如果不同的OFM深度指数d
在一些实施方案中,OFM遍次包含两个OFM相位和/或三个OFM相位。如果
图4示出利用示例性OFM深度分割的图2的阵列106的框图。以下实例是基于下表1中的参数。
表1
IFM相位的数目是
每个MAC电路每次在一个OFM遍次p
左上角MAC电路231-0(31,0)沿着单个列对乘法输出值MUL求和,并通过每两个MAC重复一次模式MAC[r,c,u,v,0,n
因为核的维度大于一(F
尽管图4的实例示出了包含两个OFM相位的五个OFM遍次和包含三个OFM相位的第六OFM遍次,但是本公开的实施方案不限于此。OFM遍次可包含任何大小的OFM相位组形成的任何组合。但是,MAC周期的利用率可能不是最大化的。在一个实施方案中,在图4的实例中的十三个OFM相位可以分割成七个OFM遍次(p
图7示出示例性控制齿轮箱110的框图。控制齿轮箱110是耦接到控制器108和阵列106的控制电路。控制齿轮箱110向阵列106提供从控制器108接收到的控制字720,以及存储在阵列106中的MAC电路的缓存中的核的地址722。由于控制字720和/或核地址从控制器108输出的时间和阵列106中的MAC电路准备控制字720和/或核地址722的时间之间可能不匹配,所以至少一个实施方案包含用于执行控制器108和阵列106之间的速率调整的控制齿轮箱110。控制齿轮箱110接收指示控制器108的运行频率的信号708、指示MAC速率的另一信号710,以及来自控制器108的指示何时向阵列106提供控制字720和/或核地址722的输入控制信号(例如,phase_update_vld 702、phase_update_id 704、phase_update_en 706)。
返回参考图4的实例,控制器108的运行频率是MAC速率的一半。如果一个OFM遍次包含两个OFM相位,那么MAC电路准备每两个MAC周期更新一次控制字720。如果一个OFM遍次包含三个OFM相位,那么MAC电路准备每三个MAC周期更新一次控制字720。因为在一个OFM遍次期间多个线程在每个MAC电路中交织且线程以MAC速率针对特定运算依序处理,所以用于特定运算的控制字(例如,写入启用或读取启用)在多个MAC周期内保持有效(例如,以MAC速率依序读取或写入多个元素)。
所公开的方法包含作为具有多个MAC周期(例如,两个或三个MAC周期)的运算周期的原子操作,向MAC电路提供控制字(control word)720。例如,如果两个或三个线程以MAC速率在MAC电路中交织,那么控制字720每两个或三个MAC周期更新一次。但是,控制器108以控制器108的运行频率向控制齿轮箱108提供控制字714足以使控制齿轮箱110根据MAC电路的需要向阵列106提供控制字720。
图7示出控制齿轮箱110的3线控制接口。控制信号phase_update_vld 702和phase_update_en 706可以是数字信号。控制信号phase_update_id 704是标识时钟信号710的时钟周期的信号。如图10-12的时序图(在下文进一步描述)中所示,时钟信号710的偶数时钟周期表示为控制信号phase_update_id 704中的“a”,且奇数周期表示为“b”。当MAC周期710在偶数和奇数MAC周期之间交替时,控制信号phase_update_id 704在“a”和“b”之间交替。控制齿轮箱110相对于控制字的运算可以用下面的伪代码描述:
“默认值”是指不是输入到控制齿轮箱110的控制齿轮箱的默认内部值。下文结合图10-12进一步论述伪代码。
如果有奇数个线程以MAC速率在MAC电路中交织,那么控制齿轮箱110可以在原子操作周期之后交替地在偶数或奇数MAC周期中更新控制字720。有时,控制字720在偶数MAC周期中更新(例如,phase_update_id 704是“a”),有时控制字720在奇数MAC周期中更新(例如,phase_update_id 704是“b”)。如果有偶数个线程交织,那么控制字720在偶数MAC周期中连续更新(例如,phase_update_id 704保持为“a”)或者在奇数MAC周期中连续更新(例如,phase_update_id 704保持为“b”)。
由于线程交织,所以MAC电路在每一MAC周期准备另外一个核的地址(例如,以MAC速率从连续地址读取或写入到连续地址)。但是,控制器108以控制器108的运行频率输出一个核的基地址。为了在每个MAC周期向MAC电路提供核的地址,控制齿轮箱110使从控制器108接收到的基地址增加或减少一固定值,这取决于基地址如何映射核缓存332的物理地址。例如,如果基地址映射到块数据传递的起始地址,那么基地址增加一固定值。如果基地址映射到块数据传递的结束地址,那么基地址减少一固定值。核的地址在MAC电路的核缓存332中交织存储。控制器108以控制器108的运行频率生成基地址。
图8示出MAC电路中的核缓存的示例性布局。核的元素在MAC电路的缓存的连续存储器空间中交织存储,例如图3中所示的核缓存332。图8示出用于存储对应于图4的实例的OFM深度指数(d
例如,如图8中所示,控制齿轮箱110从控制器108接收第一核的第一元素(H(0,0,0,0))的基地址0。基地址0映射到核缓存地址0。在从控制器108接收第一核的第二元素(H(0,1,0,0))的基地址1之前,控制齿轮箱110使基地址0增加固定值以生成第二核的第一元素(H(0,0,0,16))的核缓存地址1。此处,固定值是一。接着,控制齿轮箱110从控制器108接收映射到核缓存地址2的第一核的第二元素(H(0,1,0,0))的基地址1。控制齿轮箱110针对从控制器108接收到的每个基地址重复进行增加操作。控制齿轮箱110以控制器108的运行速率接收基地址,但是控制齿轮箱110以MAC速率输出核缓存地址。控制齿轮箱110生成一个或多个其它核的元素的地址,使得控制器108的运行频率不增加,且MAC速率不减小。
尽管在图8中未示出,但是控制齿轮箱110可以根据单个基地址生成多个核的元素的多个核缓存地址。例如,在最后一个OFM遍次p
图9示出示例性数据齿轮箱104的框图。如图1所示,数据齿轮箱104是耦接到控制器108、全局存储器102和阵列106的控制电路。数据齿轮箱104向阵列106中的MAC电路提供从全局存储器102接收到的数据(例如,IFM数据718)。由于IFM数据712从全局存储器102输出的时间和阵列106中的MAC电路准备IFM数据718的时间之间可能不匹配,所以至少一个实施方案包含用于执行控制器108、全局存储器102和阵列106之间的速率调整的数据齿轮箱104。数据齿轮箱104接收指示控制器108和/或全局存储器102的运行频率的信号708、指示MAC速率的信号710,以及来自控制器108的指示何时向阵列106提供IFM数据718的输入控制信号(例如,phase_update_vld 702、phase_update_id 704、phase_update_en 706)。
返回参考图4的实例,控制器108的运行频率是MAC速率的一半。如果一个OFM遍次包含两个OFM相位,那么MAC电路准备每两个MAC周期更新一次IFM数据718。如果一个OFM遍次包含三个OFM相位,那么MAC电路准备每三个MAC周期更新一次IFM数据718。因为在一个OFM遍次期间多个线程在每个MAC电路中交织且线程以MAC速率针对特定运算依序处理,所以特定MAC运算的IFM数据718在多个MAC周期内保持有效。
所公开的方法包含向MAC电路提供IFM数据718,作为具有多个MAC周期(例如,两个或三个MAC周期)的运算周期的原子操作。例如,如果两个或三个线程以MAC速率在MAC电路中交织,那么IFM数据718每两个或三个MAC周期更新一次。但是,全局存储器102以控制器108的运行频率向数据齿轮箱104提供IFM数据712足以使数据齿轮箱104根据MAC电路的需要向阵列106提供IFM数据718。
图9示出数据齿轮箱104的3线控制接口。控制信号phase_update_vld 702和phase_update_en 706可以是数字信号。控制信号phase_update_id 704是标识时钟信号710的时钟周期的信号。如图10-12的时序图(在下文进一步描述)中所示,时钟信号710的偶数时钟周期表示为控制信号phase_update_id 704中的“a”,且奇数周期表示为“b”。当MAC周期710在偶数和奇数MAC周期之间交替时,控制信号phase_update_id 704在“a”和“b”之间交替。数据齿轮箱104的运算可以用下面的伪代码描述:
“默认值”是指不是输入到数据齿轮箱104的默认内部值。下文结合图10-12进一步论述伪代码。
如果有奇数个线程以MAC速率在MAC电路中交织,那么数据齿轮箱104可以在原子操作周期之后交替地在偶数或奇数MAC周期中更新IFM数据718。有时,IFM数据718在偶数MAC周期中更新(例如,phase_update_id 704是“a”),有时IFM数据718在奇数MAC周期中更新(例如,phase_update_id 704是“b”)。如果有偶数个线程交织,那么IFM数据718在偶数MAC周期中连续更新(例如,phase_update_id 704保持为“a”)或者在奇数MAC周期中连续更新(例如,phase_update_id 704保持为“b”)。
图10示出图1的电路布置的示例性时序图,其中OFM遍次包含两个OFM相位。控制器108的运行频率708是MAC速率710的一半。以运行频率708从全局存储器102读取IFM数据712并将其输入到数据齿轮箱104。控制字714以运行频率708由控制器108输出,并被输入到控制齿轮箱110。
根据上述在控制信号phase_update_vld 702和phase_update_en 706为高时控制齿轮箱110和数据齿轮箱104的伪代码,如果与MAC周期710相关联的标识符phase_id 716匹配控制信号phase_update_id 704,那么IFM数据718和控制字720分别从数据齿轮箱104和控制齿轮箱110输出。在图10中,控制信号phase_update_vld 702和phase_update_en 706为高(例如,逻辑“1”),并且控制信号phase_update_id 704连续指示“a”(例如,偶数MAC周期)。因此,在与“a”相关联的MAC周期710期间,IFM数据718和控制字720分别从数据齿轮箱104和控制齿轮箱110输出。
因为图10中的OFM遍次包含两个OFM相位,所以每个OFM遍次需要两个核的地址722。核地址A0是核缓存地址(例如,图8中所示的核缓存地址0),它可以与由控制器108生成的基地址(例如,基地址0)相同。核地址A1是由控制齿轮箱110根据对应于核地址A0的基地址生成的核缓存地址。
核地址A0属于针对第一OFM遍次的第一OFM深度指数的第一核,且核地址A1属于针对第一OFM遍次的第二OFM深度指数的第二核,它们用于在第一OFM遍次期间对IFM数据A执行的MAC运算。核地址B0属于针对第二OFM遍次的第一OFM深度指数的第三核,且核地址B1属于针对第二OFM遍次的第二OFM深度指数的核,它们用于在第二OFM遍次期间对IFM数据B进行的MAC运算。
图11示出图1的电路布置的示例性时序图,其中OFM遍次包含三个OFM相位。根据上述控制信号phase_update_vld 702和phase_update_en 706为高时控制齿轮箱110和数据齿轮箱104的伪代码,如果与MAC周期710相关联的标识符phase_id 716匹配控制信号phase_update_id 704,那么IFM数据718和控制字720分别从数据齿轮箱104和控制齿轮箱110输出。
在图11中,控制信号phase_update_vld 702和phase_update_en 706一开始为高(例如,逻辑“1”)。控制信号phase_update_id 704一开始指示“a”(例如,偶数MAC周期),接着指示“b”(例如,奇数MAC周期),然后无关。因为OFM遍次包含三个OFM相位,所以控制器108使IFM数据712在控制器108的两个连续运行周期708期间从全局存储器102读取,然后在一个周期内保持。因为控制信号phase_update_id 704一开始指示“a”,所以在与“a”相关联的MAC周期710期间,分别从数据齿轮箱104和控制齿轮箱110输出IFM数据A和控制字A。与图10相比,因为控制信号phase_update_id 704接着指示“b”,所以在与“b”相关联的MAC周期710期间,分别从数据齿轮箱104和控制齿轮箱110输出IFM数据B和控制字B。因此,IFM数据A和控制字A在三个MAC周期710而不是如图10中所示的两个时钟周期内保持有效,因为输出IFM数据B和控制字B一直延迟到MAC周期710的标识符是“b”。在与“a”相关联的MAC周期710期间,输出IFM数据C和控制字C,且在与“b”相关联的MAC 710期间,输出IFM数据D和控制字D。
因为图11中的OFM遍次包含三个OFM相位,所以每个OFM遍次需要三个核的地址。核地址A0是核缓存地址(例如,图8中所示的核缓存地址0),它可以与由控制器108生成的基地址(例如,基地址0)相同。核地址A1和A2是由控制齿轮箱110根据对应于核地址A0的基地址生成的核缓存地址。
核地址A0属于针对第一OFM遍次的第一OFM深度指数的第一核,核地址A1属于针对第一OFM遍次的第二OFM深度指数的第二核,且核地址A2属于针对第一OFM遍次的第三OFM深度指数的第三核,它们用于在第一OFM遍次期间对IFM数据A执行的MAC运算。核地址B0属于针对第二OFM遍次的第一OFM深度指数的第一核,核地址B1属于针对第二OFM遍次的第二OFM深度指数的第二核,且核地址B2属于针对第二OFM遍次的第三OFM深度指数的第三核,它们用于在第二OFM遍次期间对IFM数据B进行的MAC运算。
当控制信号phase_update_vld 702和phase_update_en 706为低(例如,逻辑“0”)时,默认数据由数据齿轮箱104和控制齿轮箱110输出。
图12示出图1的电路布置的示例性时序图,其中OFM遍次从包含三个OFM相位切换到包含两个OFM相位。前三个OFM遍次包含三个OFM相位。在与“a”相关联的MAC周期710期间,分别从数据齿轮箱104和控制齿轮箱110输出IFM数据A和控制字A。在与“b”相关联的MAC周期710期间,分别从数据齿轮箱104和控制齿轮箱110输出IFM数据B和控制字B。在与“a”相关联的MAC 710期间,输出IFM数据C和控制字C。
后四个OFM遍次包含两个OFM相位。因此,当IFM数据D和控制字D分别输入到数据齿轮箱104和控制齿轮箱110时,分别输入到数据齿轮箱104和控制齿轮箱110的IFM数据712和控制字714的模式从在控制器108的两个运行周期708内读取/生成然后在一周期内保持变成在控制器108的每个运行周期708读取/生成。类似地,控制信号phase_update_id 704的模式从与包含三个OFM相位的OFM遍次相关联的“a、b、无关”模式变成与包含两个OFM相位的OFM遍次相关联的恒定“b”模式。控制信号phase_update_id 704一直指示“b”,因为当IFM数据D和控制字D分别输入到数据齿轮箱104和控制齿轮箱110时,控制信号phase_update_id704指示“b”。
图13示出示例性输入激活函数单元(IAFU)。如果IAFU的输出被直接输入到阵列106中的MAC电路,那么阵列的每一行的IAFU内部只存在一个线程,因为激活输入(X[S
图14示出上面可以实施所公开的电路和过程的可编程集成电路(IC)800。可编程IC也可称为包含现场可编程门阵列逻辑(FPGA)以及其它可编程资源的片上系统(SoC)。FPGA逻辑可在阵列中包含数种不同类型的可编程逻辑块。例如,图14示出可编程IC 800,其包含大量不同的可编程区块,包含多千兆位收发器(MGT)801、可配置逻辑块(CLB)802、随机存取存储器块(BRAM)803、输入/输出块(IOB)804、配置和定时逻辑(CONFIG/CLOCKS)805、数字信号处理块(DSP)806、专用输入/输出块(I/O)807,如时钟端口,以及其它可编程逻辑808,例如数字时钟管理器、模/数转换器、系统监测逻辑等等。一些具有FPGA逻辑的可编程IC还包含专用处理器块(PROC)810与内部和外部重新配置端口(未示出)。
在一些FPGA逻辑中,每个可编程区块包含与每个邻近区块中的对应互连元件之间具有标准化连接的可编程互连元件(INT)811。因此,可编程互连元件结合在一起实施所示FPGA逻辑的可编程互连结构。可编程互连元件INT 811还包含与同一区块内的可编程逻辑元件之间的连接,如由图14顶部处所包含的实例所示。
例如,CLB 802可包含可以编程成实施用户逻辑的可配置逻辑元件CLE 812,以及单个可编程互连元件INT 811。除了一个或多个可编程互连元件之外,BRAM 803还可包含BRAM逻辑元件(BRL)813。通常,区块中所包含的互连元件的数目取决于区块的高度。所示BRAM区块具有与五个CLB相同的高度,但是还可使用其它数目(例如,四个)。除了适当数目的可编程互连元件之外,DSP区块806还可包含DSP逻辑元件(DSPL)814。例如,除了可编程互连元件INT 811的一个实例之外,IOB 804还可包含输入/输出逻辑元件(IOL)815的两个实例。本领域的技术人员将清楚,例如连接到I/O逻辑元件815的实际I/O接合垫使用金属制造并且在各种所示逻辑块上方分层的,通常不限于输入/输出逻辑元件815的区域。
裸片中心附近的柱状区域(在图14中加阴影示出)用于配置、时钟和其它控制逻辑。从这个柱延伸的水平区域809用于跨可编程IC的广度分布时钟和配置信号。应注意,对“柱状”和“水平”区域的引用是相对于在纵向定向上查看图式而言的。
一些利用图14中所示的架构的可编程IC包含破坏组成可编程IC的大部分的规则柱状结构的额外逻辑块。这些额外逻辑块可以是可编程块和/或专用逻辑。例如,图14中所示的处理器块PROC 810跨越数列CLB和BRAM。
应注意,图14仅意在说明一个示例性可编程IC架构。一列中逻辑块的数目、列的相对宽度、列的数目和次序、列中所包含的逻辑块的类型、逻辑块的相对大小以及图14顶部处包含的互连/逻辑实施方案仅仅是示例性的。例如,在一个实际的可编程IC中,通常在CLB出现的地方包含超过一列邻近的CLB,以便有效实施用户逻辑。
尽管在一些情况下可以单独的图式描述方面和特征,但应了解,来自一个图式的特征可与另一图式的特征组合,即使所述组合未明确地示出或明确地描述为组合。
所述电路和方法被认为适用于用于格式化数据以执行卷积运算的各种系统。鉴于本说明书,其它方面和特征对于所属领域的技术人员将是显而易见的。这些电路和方法可以实施为配置成执行软件的一个或多个处理器、专用集成电路(ASIC)或可编程逻辑装置上的逻辑。希望说明书和附图仅被视为示例,并且通过所附权利要求书指示本发明的真实范围。
- 在MAC电路中使用不同核对一组数据执行连续MAC运算
- 对神经网络中非对称量化数据执行MAC运算的装置和方法