掌桥专利:专业的专利平台
掌桥专利
首页

离散傅立叶相关变换的硬件实施

文献发布时间:2023-06-19 19:30:30


离散傅立叶相关变换的硬件实施

技术领域

本发明涉及离散傅立叶相关变换的硬件实施。

背景技术

诸如离散傅立叶变换(DFT)和离散余弦变换(DCT)的离散傅立叶相关变换(DFRT)是具有各种应用的有用运算。DFRT是遵循傅立叶分析原理的任何线性变换,并且包括将离散样本序列(表示函数)映射到对应于正交基函数(例如,正弦、余弦、复指数函数及其组合)的系数序列的任何离散变换。DFRT的一个示例性用途是在神经网络过程中,所述过程采用一个或多个神经网络来处理数据。例如,DFRT可以用于输入到神经网络的数据的预处理和/或从神经网络输出的数据的后处理。本领域技术人员将很容易设想DFRT的其他潜在用途。DFRT背后的数学原理在本领域中是众所周知的。

DFT将离散样本序列分解成其空间或时间频率。DFT是执行快速傅立叶变换(FFT)或短时傅立叶变换(STFT)的重要组成部分,这两种变换可以类似地(但不排他地)用于神经网络过程。作为示例,STFT可以用于在生成频谱图时处理音频数据,这通常被认为是使用(例如用于语音识别的)神经网络对音频输入进行信号处理的第一步。

DCT提供了另一种方法,用于以不同频率处的余弦函数的加权和的形式,根据频率来表示离散样本序列。作为一个示例,DCT函数在计算音频信号的梅尔频率倒谱系数(MFCC)时是有用的,并且可以形成音频信号的频谱图的处理的一部分。

在专门适配的硬件加速器(通常称为神经网络加速器(NNA))上实施神经网络变得越来越普遍。这些设备——通常是集成电路——通常专门用于评估在使用神经网络进行推理时遇到的最常见和计算密集型的运算。例如,神经网络加速器可以包括卷积硬件(例如,一个卷积引擎或多个卷积引擎),其专门用于评估卷积和解卷积。

NNA的专用硬件元素意味着NNA上有本机硬件支持的运算集/池有限。

发明内容

提供本发明内容是为了以简化形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。

提供了使用硬件加速器执行离散傅立叶相关变换的机制,所述硬件加速器包括固定功能电路系统,所述固定功能电路系统包括被配置为执行一个或多个卷积运算的卷积硬件。在所述离散傅立叶相关变换中使用的矩阵乘法运算由实施卷积运算的所述卷积硬件执行。所述卷积运算的卷积核是从表示所述矩阵乘法运算的被乘数或乘数的权重矩阵中导出的。

提出了一种使用硬件加速器实施离散傅立叶相关变换的方法,所述硬件加速器包括固定功能电路系统,所述固定功能电路系统包括被配置为执行一个或多个卷积运算的卷积硬件,其中所述离散傅立叶相关变换包括至少一个矩阵乘法运算。

所述方法包括:获得输入数据,其中所述输入数据包括要经历所述离散傅立叶相关变换的值;获得至少一个卷积核,其中每个卷积核是从权重矩阵中导出的,所述权重矩阵表示所述离散傅立叶相关变换的所述至少一个矩阵乘法运算的被乘数或乘数;以及使用所述硬件加速器对所述输入数据执行所述离散傅立叶相关变换,其中所述离散傅立叶相关变换的所述至少一个矩阵乘法运算是通过使用所述卷积硬件使用所述至少一个卷积核执行一个或多个卷积运算来执行的。

要经历离散傅立叶相关变换的输入数据和/或值可以包括音频和/或视觉数据,例如图像。在特定示例中,要经历离散傅立叶相关变换的值可以包括从麦克风和/或相机或其他声/光敏感传感器获得的样本。在另一个示例中,要经历离散傅立叶相关变换的值可以是从从麦克风和/或照相机或其他声/光敏感传感器获得的样本中导出的,换句话说,样本在经历离散傅立叶相关变换之前可能已经经过了一些其他音频/图像处理。要经历离散傅立叶相关变换的输入数据和/或值可以例如包括从雷达/RADAR系统中导出的数据。这种数据的处理在汽车工业中特别重要,因此特别希望提高处理这种数据的效率和灵活性。

输入数据可以是张量(例如向量或矩阵),即“输入张量”。输入张量可具有高度、宽度、通道、批和/或长度的维度(取决于张量的精确实施方式)。

在此上下文中,“固定功能”是指电路系统的特性,即电路系统实施的逻辑在制造之后不能被重新配置(或至少不能被广泛地重新配置)。这与例如可重新配置的现场可编程逻辑形成对比。其还与通用处理器硬件形成对比,所述通用处理器硬件完全可编程以实施任何(任意)函数或算法。硬件加速器可包括在专用集成电路(ASIC)中。固定功能电路系统的行为可在有限程度上可编程。例如,固定功能电路系统的模块可以能够在有限参数集的控制下执行其固定功能。因此,每个模块可能仅在其可实施例如具有各种步长和核大小的卷积或池化的意义上可重新配置,但在其可能执行任意算法的意义上并不完全可编程。

在一些示例中,离散傅立叶相关变换是离散傅立叶变换。

所述输入数据可以包括第一张量,所述第一张量仅包括要经历所述离散傅立叶变换的值的实部。所述离散傅立叶变换可以包括第一组矩阵乘法,所述第一组矩阵乘法包括:将所述第一张量乘以第一权重矩阵以产生第一相乘张量;以及将所述第一张量乘以第二权重矩阵(Im(W))以产生第二相乘张量;所述至少一个卷积核包括从所述第一权重矩阵中导出的第一卷积核和从所述第二权重矩阵导出的第二卷积核;并且所述第一组矩阵乘法是通过使用所述卷积硬件使用所述第一卷积核和所述第二卷积核执行至少两次卷积来执行的。

在一种方法中,所述输入数据仅包括要经历所述离散傅立叶变换的实值;所述第一组乘法是通过以下步骤进行的:使用所述第一卷积核对所述第一张量进行第一卷积以产生所述第一相乘张量;以及使用所述第二卷积核对所述第一张量执行第二卷积以产生所述第二相乘张量。

在另一种方法中,所述输入数据可以还包括第二张量,所述第二张量仅包括要经历所述离散傅立叶变换的值的虚部。所述离散傅立叶变换可以包括第二组矩阵乘法,所述第二组矩阵乘法包括:将所述第二张量乘以所述第一权重矩阵以产生第三相乘张量;以及将所述第二张量乘以所述第二权重矩阵以产生第四相乘张量;并且所述第二组矩阵乘法是通过使用所述卷积硬件使用所述第一卷积核和所述第二卷积核执行至少两次卷积以执行所述第二组矩阵乘法来执行的。

在一些示例中,存在一种使用硬件加速器实施离散快速傅立叶变换的方法,所述硬件加速器包括固定功能电路系统,所述固定功能电路系统包括被配置为执行一个或多个卷积运算的卷积硬件,所述方法包括:获得输入数据,其中所述输入数据包括要经历所述快速傅立叶变换的值;将所述输入数据划分成两个或更多个部分;使用本文描述的方法对所述输入数据的每个部分执行离散傅立叶变换,以产生相应的两个或更多个DFT输出;以及使用所述硬件加速器组合所述DFT输出以产生包括所述输入数据的快速傅立叶变换的FFT输出。

将所述输入数据划分成两个或更多个部分的步骤可以包括使用两个或更多个卷积核来处理所述输入数据,每个卷积核被配置为提取所述输入数据的预定部分。

将所述输入数据划分成两个或更多个部分的步骤可以包括使用解卷积来处理所述输入数据。

所述输入数据可以包括第一张量,所述第一张量包括要经历所述快速傅立叶变换的值的实部,并且将所述输入数据划分成两个或更多个部分的步骤可以包括使用奇数采样卷积核来处理所述第一张量,以产生仅包括所述第一张量的奇数索引值的奇数张量;以及使用偶数采样卷积核来处理所述第一张量,以产生仅包括所述第一张量的偶数索引值的偶数张量。

在一些示例中,所述离散傅立叶相关变换是离散余弦变换。

还提出了一种使用硬件加速器实施离散快速傅立叶变换的方法,所述硬件加速器包括固定功能电路系统,所述固定功能电路系统包括被配置为执行一个或多个卷积运算的卷积硬件。所述方法包括:获得输入数据,其中所述输入数据至少包括实值输入张量,所述实值输入张量包括沿第一维度布置的要经历快速傅立叶变换的值的实部;选择所述实值输入张量的除所述第一维度之外的维度;处理所述实值输入张量以产生第一中间张量,其中所述实值输入张量的不同部分位于所述第一中间张量的选定维度中的不同位置处,每个部分包括所述实值输入张量的两个或更多个值;对所述第一中间张量执行离散傅立叶变换以产生第一DFT中间张量,所述第一DFT中间张量包括在所述第一DFT中间张量的维度的不同位置处的所述实值输入张量的所述不同部分的离散傅立叶变换;以及至少处理所述第一DFT中间张量以产生包括所述输入数据的快速傅立叶变换的FFT输出。输入数据还可以包括虚值输入张量,所述虚值输入张量包括要经历快速傅立叶变换的值的虚部。所述方法可以包括:处理所述虚值输入张量以产生第二中间张量,其中所述虚值输入张量的不同部分位于所述第二中间张量的维度上的不同位置,每个部分包括所述虚值输入张量的两个或更多个值;对所述第二中间张量执行离散傅立叶变换以产生第二DFT中间张量,所述第二DFT中间张量包括在所述第二DFT中间张量的维度的不同位置处的所述虚数输入张量的所述不同部分的离散傅立叶变换;以及处理所述第一DFT中间张量和所述第二中间张量以产生包括所述输入数据的快速傅立叶变换的FFT输出。

在一些示例中,所述第一中间张量在所述第一中间张量的维度上的第一位置处包括所述实值输入张量的奇数索引值,并且在所述第一中间张量的维度上的第二位置处包括所述实值输入张量的偶数索引值;并且所述第二中间张量在所述第二中间张量的维度上的第一位置处包括实值输入张量的奇数索引值,并且在所述第二中间张量的维度上的第二位置处包括实值输入张量的偶数索引值。

在一些示例中,组合所述第一DFT中间张量和所述第二DFT中间张量的步骤包括:将所述第一DFT中间张量拆分成包括所述实值输入张量的奇数索引部分的离散傅立叶变换的第一DFT张量和包括所述实值张量的偶数索引部分的离散傅立叶变换的第二DFT张量;将所述第二DFT中间张量拆分成包括所述虚数输入张量的奇数索引部分的离散傅立叶变换的第三DFT张量和包括所述虚数张量的偶数索引部分的离散傅立叶变换的第四DFT张量;以及使用所述硬件加速器组合所述第一DFT张量、所述第二DFT张量、所述第三DFT张量和所述第四DFT张量,以产生包括所述输入数据的快速傅立叶变换的FFT输出。

还提出了一种使用硬件加速器实施梅尔频率倒谱系数MFCC运算的方法,所述硬件加速器包括被配置为执行一个或多个卷积运算的卷积硬件。所述方法包括:获得输入数据,所述输入数据包括要经历MFCC运算的频谱图;通过使用梅尔标度转换卷积核处理输入数据,将输入数据的频谱图转换成梅尔标度频谱图,对于输入数据中的每个第i值,所述梅尔标度转换卷积核识别输入数据的第i值对其有贡献的梅尔标度频谱图的第一和第二值,以及输入数据的第i值对梅尔标度频谱图的第一和第二值有贡献的比例;计算梅尔标度频谱图的每个值的对数以产生对数结果;以及使用本文描述的方法计算对数结果的离散余弦变换。

还提出了一种使用硬件加速器实施短时傅立叶变换STFT的方法,所述硬件加速器包括固定功能电路系统,所述固定功能电路系统包括被配置为执行一个或多个卷积运算的卷积硬件。

所述方法包括:获得输入数据,其中所述输入数据包括要经历所述短时傅立叶变换的值,其中所述STFT包括对所述输入数据的多个重叠部分中的每个重叠部分应用离散傅立叶变换;获得至少一个卷积核,其中每个卷积核是从权重矩阵中导出的,所述权重矩阵表示要应用于所述输入数据的每个重叠部分的离散傅立叶相关变换的至少一个乘法运算的被乘数或乘数;以及使用所述硬件加速器对输入数据执行离散傅立叶相关变换,其中通过使用至少一个卷积核执行一个或多个步长卷积运算来执行离散傅立叶相关变换的至少一个乘法运算,其中步长卷积的步长的大小对应于输入数据的重叠部分之间的重叠量。

每个卷积核可以是通过整形和/或置换相应权重矩阵的维度来生成的。优选地,在获得所述输入数据之前生成所述卷积核。

在一些示例中,所述输入数据包括两个或更多个值序列,所述两个或更多个值序列中的每个值序列将使用所述短时傅立叶变换的相应实例被单独变换;并且对相应的值序列执行所述离散傅立叶相关变换的多个实例的所述至少一个矩阵乘法运算中的矩阵乘法运算。

在一些示例中,卷积核是从权重矩阵和表示要应用于输入数据的每个重叠部分的加窗函数的加窗张量中导出的。

还提供了一种数据处理系统,用于执行本文公开的任何方法,例如,用于实施离散傅立叶相关变换。

因此,提供了一种用于实施离散傅立叶相关变换的数据处理系统,其中所述离散傅立叶相关变换包括至少一个乘法运算。所述数据处理系统包括:硬件加速器,所述硬件加速器包括被配置为执行一组可用的基本神经网络运算的固定功能电路系统,所述固定功能电路系统至少包括被配置为执行一个或多个卷积运算的卷积硬件;以及控制器,所述控制器被配置为:获得输入数据,其中所述输入数据包括要经历所述离散傅立叶相关变换的值;获得至少一个卷积核,其中每个卷积核是从权重矩阵导出的,所述权重矩阵表示所述离散傅立叶相关变换的至少一个乘法运算的被乘数或乘数;并且使用所述硬件加速器对所述输入数据执行所述离散傅立叶相关变换,其中所述离散傅立叶相关变换的至少一个乘法运算是通过使用所述卷积硬件使用所述至少一个卷积核执行一个或多个卷积运算来执行的。

硬件加速器可以还包括以下中的任何一者,或者以下中的两者或更多者的任何组合:激活单元,其包括LUT;局部响应归一化单元,其被配置为执行局部响应归一化;逐元素运算单元,其被配置为将选定运算应用于两个张量的每对相应元素;池化单元,其被配置为执行池化运算,包括最大池化和/或最小池化。

数据处理系统可以在集成电路上的硬件中体现。可以提供一种在集成电路制造系统处制造数据处理系统的方法。可以提供一种集成电路定义数据集,所述集成电路定义数据集当在集成电路制造系统中被处理时,将系统配置为制造数据处理系统。可以提供一种非暂时性计算机可读存储介质,所述非暂时性计算机可读存储介质上存储有数据处理系统的计算机可读描述,所述计算机可读描述在集成电路制造系统中处理时,使集成电路制造系统制造体现数据处理系统的集成电路。

可以提供一种集成电路制造系统,所述集成电路制造系统包括:非暂时性计算机可读存储介质,其在其上存储有数据处理系统的计算机可读描述;布局处理系统,其被配置为处理计算机可读描述以便生成体现数据处理系统的集成电路的电路布局描述;以及集成电路生成系统,其被配置为根据电路布局描述来制造数据处理系统。

布局处理系统可被配置为确定从集成电路描述中导出的电路的逻辑部件的位置信息,以便产生体现数据处理系统的集成电路的电路布局描述。

可提供用于执行本文描述的方法中的任一种方法的计算机程序代码。可提供非暂时性计算机可读存储介质,其上存储有计算机可读指令,所述计算机可读指令在计算机系统处执行时,使所述计算机系统执行本文描述的方法中的任一种方法。

如对本领域技术人员将显而易见,上述特征可以适当地组合,并且可与本文描述的示例的各方面中的任一方面进行组合。

附图说明

现在将参考附图详细地描述示例,在附图中:

图1示出了可在其中实施实施方案的硬件加速器;

图2示出了用于执行离散傅立叶变换的方法;

图3示出了用于执行离散傅立叶变换的方法;

图4A示出了用于执行快速傅立叶变换的方法;

图4B示出了用于执行快速傅立叶变换的方法的修改版本;

图5示出了用于执行用于快速傅立叶变换的旋转因子处理的方法;

图6示出了用于执行短时傅立叶变换的方法;

图7示出了用于计算输入数据的频谱图的方法;

图8示出了用于计算输入数据的频谱图的其他方法;

图9示出了用于执行梅尔频率倒谱系数分析过程的方法;

图10示出了用于梅尔频率倒谱系数分析过程的重叠窗口;

图11是图1中使用的卷积引擎的框图;

图12是根据示例的数据处理系统的框图;

图13是图12中的存储器操纵模块的框图;

图14示出了根据实施方案的方法;

图15示出了在其中实施数据处理系统的计算机系统;并且

图16示出了用于产生体现数据处理系统的集成电路的集成电路制造系统。

附图示出了各种示例。本领域技术人员将了解,附图中所示出的元件边界(例如框、框的组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元件可以被设计为多个元件,或者多个元件可以被设计为一个元件。在适当的情况下,贯穿各附图使用共同的附图标记来指示类似的特征。

具体实施方式

借助于示例呈现以下描述,以使得本领域的技术人员能够制造和使用本发明。本发明不限于本文描述的实施方案,并且对所公开实施方案的各种修改对于本领域的技术人员将显而易见。

现在将仅借助于示例来描述实施方案。下文描述的实施方案提供了用于在硬件加速器上实施离散傅立叶相关变换(DFRT)的方法,特别是为神经网络过程配置或设计的硬件加速器,即神经网络加速器(NNA),其包括设计用于执行卷积(和解卷积)运算的卷积硬件(例如,至少一个卷积引擎)。

传统上,如果这样的硬件加速器需要DFRT的输出,则任何这样的变换都是使用(硬件加速器的)外部或“片外”通用硬件(诸如CPU或GPU)来执行的。然后,处理后的数据被提供或返回给硬件加速器,例如用于进一步处理。注意,这种通用硬件可以与硬件加速器在同一晶片上,但是本身并不构成硬件加速器的一部分。

虽然在通用硬件(位于硬件加速器的“片外”)中评估这样的函数允许灵活性,但是它通常不如专用硬件有效(在执行时间和功耗方面)。在向通用硬件传送和从通用硬件传送要使用DFRT处理的数据时还存在开销(即,需要使用带宽)。

例如,如果经历由硬件加速器执行的神经网络过程的数据需要DFRT,则所述数据将从硬件加速器传送到通用硬件(例如CPU),即,将数据传送离开硬件加速器。这通常涉及在执行函数之前,硬件加速器将数据写入存储器,以及CPU从存储器中读取数据。这有可能会减慢神经网络过程的执行,特别是在(通常情况下)存储器访问速度占主导地位的情况下。这也可能导致硬件加速器停止并且等待函数完成,例如,在要执行的下一运算取决于函数的输出的情况下。这可能会导致性能下降。

还存在一种方法,其便于在具有为神经网络设计的固定功能电路系统的NNA或其他硬件加速器上实施离散傅立叶相关变换。

这种方法的一个优点是,它可以利用硬件加速器的更大计算资源,尤其是那些被配置用于处理神经网络的计算资源(即,神经网络加速器)。具体来说,在典型的SOC(片上系统)中,与NNA相比,CPU和/或GPU(即通用硬件)通常具有更少的计算资源。

另一个优点是避免或减少了设备的不同部件部分之间的数据传送(即减少了对主存储器的读/写次数)。这是因为NNA能够执行以前不可用的功能,避免了需要其他部件(例如通用硬件)来执行这样的功能,因此节省了宝贵的带宽。

实施此功能的一种方法可以是设计专用硬件模块来执行期望的离散傅立叶相关变换(例如,DFT或DCT)。此硬件模块可以包括在硬件加速器中,并在需要时使用。然而,这种方法的缺点在于,专用硬件模块将在已经有限的空间中占据集成电路中的额外区域,导致更大的硬件加速器具有额外资源需求。这种方法还会增加硬件的复杂性,进而影响软件的复杂性。此外,因为DFRT的评估通常代表硬件加速器的工作量的一小部分,所以对于需要使用DFRT的最典型的神经网络过程,专用硬件模块的利用率将会很低。因此,用于执行DFRT的专用硬件模块在其相当大部分的操作中可能是空闲的,从而导致不期望的“暗硅”和硅面积的低效使用。

换句话说,专用模块大部分时间将是不活动的,并且因此是对设计、工程、资源、面积、材料和制造能力的低效使用。

又一替代方案是在硬件加速器本身内包括一个或多个通用可编程单元,诸如CPU或数字信号处理器(DSP)。这将有效地是混合解决方案,其将避免消耗系统带宽以便将每个DFRT的评估移交到外部通用处理器的需要。然而,它具有增加硬件/软件复杂性、增加功耗和占用更大集成电路面积的缺点。

类似地,如果当前利用DFRT的其他程序可以在现有硬件加速器内实施,而不需要专用硬件或将所述程序外包给片外处理器,这也将是有益的。

仅作为示例,DFRT可以与形成使用硬件加速器(例如,NNA)执行的神经网络过程的一部分的神经网络相关联。具体来说,DFRT可以形成由神经网络执行的处理和/或对输入到神经网络的数据的预处理和/或由神经网络输出的数据的后处理的一部分。

根据本公开的示例提供了使用在示例性硬件加速器(例如,NNA)上已经可用的现有部件操作来执行DFRT的方式。例如,当使用硬件加速器执行神经网络过程时,例如当使用硬件加速器模拟神经网络或使用硬件加速器训练模拟的神经网络时,可以使用这样的函数。然而,在某些情况下,DFRT函数可由外部部件(硬件加速器)访问以执行此功能,例如,利用硬件加速器的更大计算能力来执行DFRT或从通用CPU或GPU卸载处理。

本公开提出了用于使用和调整现有硬件操作(即固定功能电路系统)以执行DFRT的方法。因此,不管使用固定功能电路系统运行的应用程序或程序如何,都可以实现技术效果,因为DFRT硬件实施可以在要执行的任何合适的函数或过程中实施(即,它不依赖于任何特定的函数或程序)。此外,所提出的方法以新的方式配置固定功能电路系统,以便使用固定功能电路系统来执行先前不可用的函数。

本发明的实施方案提供了基于在示例性硬件加速器上已经可用的现有部件操作来执行DFRT以及依赖于或构建自或使用这样的函数的其他程序的方式。

具体来说,提出了利用包括在示例性硬件加速器的部件操作中的程序步骤来执行DFRT的过程步骤(例如,不包括在示例性硬件加速器的部件操作中的程序步骤)。这有助于使用现有的体系结构和功能来使用相同的硬件加速器执行额外的、先前不可用的运算。

本发明概念的一个基本认识利用了DFRT的一部分可以被建模为权重矩阵与输入张量之间的矩阵乘法的识别。在一般情况下,权重和输入张量都可以是复值的,即同时具有实部和虚部。更具体来说,已经认识到,将权重矩阵适当地整形为一个或多个卷积核允许使用卷积运算来执行矩阵乘法。卷积运算可以由硬件加速器(即NNA)的卷积硬件来执行,使得矩阵乘法步骤(以及DFRT)可以使用硬件加速器来执行。

图1示出了可在其中实施实施方案的示例性硬件加速器100。此示例性硬件加速器的特征的完整描述将稍后在本公开中提供。

如图1所示,示例性硬件加速器100(本文也称为神经网络加速器或NNA)具有可配置的固定功能电路系统,其至少包括例如由一组卷积引擎140a至140n形成的专门用于卷积(和解卷积)运算的卷积硬件140。

硬件加速器可以还包括(作为可配置的固定功能电路系统)以下固定功能硬件单元:

·逐元素运算单元185,其专门用于对张量的每个元素或两个张量的相应元素对执行相同运算;

·激活单元155,其专门用于将激活函数(其可以是可选择、可配置或完全可编程的)应用于张量的每个元素,其中激活函数可包括使用查找表来修改张量的每个元素(即,使用查找运算);

·局部响应归一化(LRN)单元165(或简称为“归一化单元”),其专门用于执行邻域相关的归一化运算;

·池化单元175,其专门用于执行池化运算,诸如最大池化和最小池化;以及

·存储器操纵模块(任选,并且未示出),其专门用于整形存储器中呈现的多维张量的方式和维度顺序。

固定功能电路系统由此能够(至少)执行卷积和解卷积运算。解卷积运算是转置卷积运算。它可能还能够执行以下基本神经网络运算中的至少一者:

逐元素求和运算;

逐元素减法运算;

逐元素乘法运算;

逐元素最大值;

逐元素最小值运算;

最大池化运算或最小池化运算;

查找表中的一次或多次查找。

此基本神经网络运算(包括卷积和/或解卷积运算)列表可被称为基本神经网络运算的“受限列表”。

出于本公开的目的,在处理形式为[B,H,W,C]的张量的硬件加速器的上下文中描述硬件加速器,其中B表示批量维度,H表示高度维度,W表示宽度维度并且C表示通道维度。然而,本领域技术人员将理解,关于这些维度的顺序存在不同的约定(例如,[B,C,H,W]等)。

在本公开中使用的硬件加速器(的卷积硬件)可以被配置为将卷积核K与张量T进行卷积,以产生卷积张量K*T。卷积核K具有维度[H

从矩阵乘法的角度考虑卷积有助于理解在下面的方法中卷积是如何代替矩阵乘法的。从概念上讲,在卷积期间,卷积核K被应用于张量T的高度和宽度维度上的一个或多个空间位置(根据某个预定的或以其他方式定义的步长)。在每个位置,在卷积核(“权重”)和在卷积核的当前位置的张量的相应值(即,当应用于所述位置时落入所述卷积运算的感受野的那些值)之间执行可以根据矩阵乘法来看待的加权求和。更具体来说,在卷积核K相对于张量T的任何给定位置,所述核对每个C

本公开的示例使用由固定功能电路系统(例如固定功能硬件单元)执行的基本神经网络运算来实施DFRT。具体来说,本文认识到,便于执行DFRT的矩阵乘法运算可以被重新公式化为使用硬件加速器的固定功能电路系统的至少使用卷积硬件的卷积运算。

在本实施方式中,计算可以定点算术形式执行。实验显示,定点实施方式足够准确,以至于不会显著降低所测试的示例性神经网络的整体准确度。

离散傅立叶相关变换(DFRT)的示例包括离散傅立叶变换(DFT)、离散余弦变换(DCT)和离散正弦变换(DST)。其他示例对于本领域技术人员来说是众所周知的,并且包括利用傅立叶原理将离散化的样本序列分解成对应于正交(例如正弦)基函数的系数序列的任何合适的变换。

一些离散傅立叶相关变换利用其他形式的离散傅立叶相关变换作为其处理的一部分。例如,快速傅立叶变换(FFT)利用一个或多个离散傅立叶变换(DFT),而短时傅立叶变换(STFT)可以利用一个或多个DFT和/或FFT。

实施方案可以扩展到利用离散傅立叶相关变换的过程,例如生成(赫兹标度或梅尔标度)频谱图和/或梅尔频率倒谱系数(MFCC)。

离散傅立叶相关变换可以被公式化为或构造为包括至少一个矩阵乘法步骤(并且具体来说,权重矩阵与张量之间的至少一个矩阵乘法步骤)的过程。本发明提出使用至少一个卷积(基本神经网络运算中的一者)来执行在DFRT中使用的矩阵乘法。

作为第一示例,对具有索引n(0、1、2…N-1)的长度为N的输入数据x的序列执行的离散余弦变换(DCT)(在此情况下为DCT类型I)的一个示例的结果y由以下等式定义:

此变换可以被认为是y=Wx,其中W表示大小为NxN的DCT权重矩阵。这里,DCT权重矩阵为:

其中

本发明认识到有可能使用卷积运算来计算DFRT(例如DCT)公式的乘法。在此第一示例中,DCT权重矩阵W可以(重新)整形为卷积核,以应用于包括输入数据x的张量。

这里认识到,有多种方式将形状为[A,B][B,D]的矩阵之间的乘法表示为卷积,其中[A,B]是具有常数元素的矩阵,而[B,D]是具有可变元素的矩阵。因此,矩阵[A,B]可用于表示权重矩阵,而[B,D]可表示包括输入数据的张量。具体来说,要经历DFRT(例如,DCT)的输入数据的每个实例或序列可以位于沿着维度D的不同位置。

此后,描述了用于在第一矩阵(大小为[A,B])与第二矩阵(大小为[B,D])之间执行乘法的一些示例或替代方案。在下面的示例中,假设使用处理形式为[批,高度,宽度,通道]的张量示例性硬件加速器,使得输入张量的形状为[批,H,W,C

在第一替代方案中,形状为[1,1,B,A]的核(表示权重矩阵)与形状为[1,D,1,B]的张量(包括输入数据)进行卷积,从而产生包括变换后的数据y的形状为[1,D,1,A]的输出张量。

在第二替代方案中,核的形状为[1,1,B,A],并且包括输入数据的张量的形状为[1,1,D,B],从而产生形状为[1,1,D,A]的变换后的数据。在第三替代方案中,核的形状为[1,B,1,A],并且包括输入数据的张量的形状为[1,D,B,1],从而产生形状为[1,D,1,A]的变换后的数据。在第四替代方案中,核的形状为[B,1,1,A],并且包括输入数据的张量的形状为[1,B,D,1],从而产生形状为[1,1,D,A]的变换后的数据。

其他示例对于本领域技术人员将是显而易见的。

选择的方法取决于什么是最佳或最有效的。例如,它可能取决于DFRT的上下文(例如,神经网络过程中DFRT之前和之后的数据的维度顺序)或者硬件加速器的固有或底层结构。

在一个提出的实施方案中,在上面的示例中,要经历DFRT的输入数据的序列或实例的数量是D,每个序列的长度是B。提出的机制便于使用单个卷积来评估多个序列的DFRT,以跨正在处理的多个序列执行单个矩阵乘法。在DCT A=B=N的情况下,权重矩阵是方阵。

因此,卷积核的精确形状将取决于硬件加速器的实施方式(例如,硬件加速器被配置为并行处理数据的张量的维度)。卷积核的形状是这样的,它等同于对特定输入数据序列的DCT实施的单个矩阵乘法。

在先前描述的示例中,执行单个矩阵乘法,以便对多个不同的输入数据序列执行DFRT。

然而,在其他示例中,可以针对输入数据x的不同序列执行多个矩阵乘法(例如,其中不同序列沿着张量的不同高度或宽度维度来表示)。

例如,考虑一个场景,其中硬件加速器被配置为处理形式为[批,高度,宽度,通道]的张量。在这种场景下,要经由DCT处理的一些输入数据x的值可以沿着通道维度定位。因此,沿着通道维度的序列(对于相同的批、高度和宽度位置)定义了要经历DCT的值序列。不同的序列(其将分别进行DCT)可能与不同的高度、宽度或批位置相关联。

在这种场景下,DCT权重矩阵(大小为N,N)可以被整形以形成形状为[1,1,N,N]的卷积核。这对应于使用前面描述的卷积运算执行矩阵乘法的第二替代方案。

当然,要经由DCT处理的输入数据x的单个序列可以沿着不同的维度定位(例如,宽度维度——对于相同的批、高度和通道位置)。当沿着宽度维度定位时,DCT权重矩阵(大小为N,N)可以被整形以形成形状为[1,N,1,N]的卷积核。这对应于使用前面描述的卷积运算执行矩阵乘法的第三替代方案。当沿着高度维度定位时,DCT权重矩阵(大小为N,N)可以被整形以形成形状为[N,1,1,N]的卷积核。这对应于使用前面描述的卷积运算执行矩阵乘法的第四替代方案。在任一情况下,这都将产生输出数据,其中要处理的数据的DCT结果沿着通道维度定位。

此外,应注意,输入数据的大小或长度(例如,至少N的值)通常是预定的或预先已知的。这意味着可以预先计算和存储卷积核(表示权重矩阵),即“离线”,以节省处理时间。

作为第二示例,对具有索引(0、1、2…N-1)的长度为N的输入数据x的序列执行的离散傅立叶变换DFT的一个示例的结果y由以下等式定义:

此等式可以被认为是y=Wx形式的复矩阵乘法,其中W表示大小为NxN的(复数)权重矩阵。权重矩阵为:

其中w=e

按照复数乘法的约定,这可以(重新)构造为:y=[Re(W)Re(x)–Im(W)Im(x)]+i[Re(W)Im(x)+Im(W)Re(x)]。因此,复数权重矩阵可以表示为两个实数权重矩阵:表示权重矩阵W的实部的第一实数权重矩阵Re(W)和表示权重矩阵W的虚部的第二实数权重矩阵Im(W)。

本发明认识到有可能使用单独的卷积来计算DFT公式的每个矩阵乘法。在用于处理数据X以产生离散傅立叶变换输出X的方法的本示例中,第一Re(W)和第二Im(W)权重矩阵可以被整形为卷积核K

如前所述,整形后的卷积核的精确形状将取决于硬件加速器的实施方式,并且具体来说,取决于硬件加速器被配置为并行处理数据的维度。卷积核的形状是这样的,每个卷积核等同于单个矩阵乘法,这形成了对特定输入数据序列的DFT实施的一部分。当然,可以针对不同的输入数据序列(例如,不同的序列沿着不同的高度或宽度维度表示)执行多个矩阵乘法(使用单个卷积过程)。

例如,考虑这样的场景,其中硬件加速器被配置为处理先前解释的形式为[B,H,W,C]的张量,并且要经由DFT处理的一些输入数据x的值沿着通道维度定位。在这种场景下,每个卷积核的形状为[1,1,N,N]。

当输入数据仅包括实值时(例如,如果输入数据表示音频或图像数据),可以通过避免处理输入数据的(零)虚部(即,避免计算Im(W)Im(x)和Re(W)Im(x))来降低处理要求。

此外,应认识到,当输入数据仅包括实值时,对此输入数据执行的DFT的输出呈现厄米特对称性。因此,N个样本上的DFT将完全仅由输出数据的(N/2+1)个元素(而不是N个元素)指定。

因此,在DFT中使用的权重矩阵的大小可以被有效地减小到大小为Nx(N/2+1),而不是大小为NxN。这使得生成的卷积核也具有减小的大小,例如[1,1,N,N/2+1]或[1,N,1,N/2+1]或[N,1,1,N/2+1]的形状,这取决于要经历相同DFT的值沿着哪个维度定位。

这种方法具有实际应用,因为采样或生成的媒体信号(例如音频/图像数据)仅由实值形成。这在将采样信号转换成傅立叶变换信号以供神经网络处理(例如,将音频转换成用于神经网络处理的类似频谱图的表示,如下所例示)方面具有特定的应用。

上述示例提供了用于将DFRT应用于输入数据序列(例如,表示来自诸如音频信号或监控信号的信号的样本)的机制。然而,本领域技术人员将能够容易地修改所提出的用于执行DFRT以处理多维数据(例如,诸如图像的2D数据或诸如3D图像的3D数据)的方法。

本公开的附图用于描述对一些输入数据执行DFRT的方法。所描述的方法和附图将被理解为既适用于被处理的单个序列,也适用于由多个序列组成的输入张量。

例如,不同的输入数据序列可以位于沿高度维度的不同索引处,每个输入数据的值沿着通道维度定位。

图2示出了用于使用硬件加速器对一些输入数据x执行离散傅立叶变换(DFT)以产生输出数据y的方法200的概述。所述方法利用重构的复权重矩阵形成如前所述的第一卷积核K

在此示例中,硬件加速器被配置为处理形状为[批,高度,宽度,通道]的张量,如前所述。要经历DFT的数据的单个实例(即,x或样本的值)可以沿着具有大小N(即,长度(x)=N)的通道维度定位。要经历DFT的数据的不同实例可以由宽度或高度维度中的不同位置来表示。例如,要经历DFT的值的第一系列/序列可以沿着[1,1,1,1:N]定位,而要经历DFT的值的第二系列/序列沿着[1,1,2,1:N]定位,其中1是每个维度上的第一位置的索引,符号a:b意味着系列/序列沿着所述维度上的元素a到b定位。

要按照方法200处理的输入数据x由两个张量形成。第一张量Re(x)表示要处理的数据的实部,并且第二张量Im(x)表示要处理的数据的虚部。两个张量具有相同的维数,并且每个张量的元素彼此对应。因此,第一张量和第二张量在位置[a,b,c,d]的值是特定复值的实部和虚部。

在一些示例中,第一和第二张量可以在可选步骤205中从作为(初始)输入数据提供的单个复张量x

为了形成输出数据的实部,在第一卷积211中卷积第一张量Re(x),并且在第二卷积212中卷积第二张量Im(x)。使用第一卷积核K

为了形成输出数据的虚部,在第三卷积213中卷积第一张量,并且在第四卷积214中卷积第二张量。使用第二卷积核K

前面已经提到了某些形式的输入数据可能只包括实值。因此,在一些示例中,不执行第二和第四卷积,并且不执行步骤221和222。相反,在这种场景下,第一卷积的输出是输出数据的实部Re(y),并且第四卷积的输出是输出数据的虚部Im(y)。

这种用于执行DFT的实施方案对于一些实际应用可能是特别有利的,例如,如果传感器采样数据作为神经网络过程的一部分被处理,例如用于在由神经网络进行分析之前预处理。这是因为这样的实施方案需要更少的处理资源,因此更有效。

先前还描述了对于实值,输出数据(即,对一些输入数据执行DFT的结果)如何表现出厄米特对称性,使得输出数据完全由(N/2+1)个元素指定。因此,卷积核的形状可能为[1,1,N,1+N/2]、或[1,N,1,1+N/2]或[N,1,1,1+N/2],这取决于要经历相同DFT的值所处的维度。

当(已知)输入数据仅包括实值时,这提供了用于执行DFT的更加资源高效的机制。这在诸如图像数据的音频或视频数据的处理中具有特别的实际应用。

图3示出了用于使用硬件加速器对一些输入数据x执行离散傅立叶变换(DFT)以产生输出数据y的替代方法300的概述。替代方法提供了用于执行DFT的更有效的机制。

像参考图2描述的实施方案一样,要按照方法300处理的输入数据x由两个张量形成。第一张量Re(x)表示要处理的数据的实部,并且第二张量Im(x)表示要处理的数据的虚部。两个张量具有相同的维数,并且每个张量的元素彼此对应,即第一和第二张量的位置(a,b,c,d)处的值是同一元素(或复值)的实部和虚部。

第一和第二张量可以在可选步骤305中从作为(初始)输入数据提供的单个复张量x

已经认识到,等式y=[Re(W)Re(x)–Im(W)Im(x)]+I[Re(W)Im(x)+Im(W)Re(x)]由使用Re(W)的两个矩阵乘法和使用Im(W)的两个矩阵乘法形成。为了提高效率,如果Re(x)和Im(x)在适当的维度上连接,则可以使用单个卷积来计算Re(W)Re(x)和Re(W)Im(x)。这种方法有效的一个原因是因为权重可以被重用,而不需要引入特殊的硬件或软件来跨不同的卷积重用权重。以这种方式重用权重意味着权重不需要被加载到硬件加速器上两次,从而节省了功率、执行时间和带宽。类似地,如果Re(x)和Im(x)在适当的维度上连接,则可以使用单个过程来计算Im(W)Im(x)和Im(W)Re(x)。

因此,方法300可以包括将第一和第二张量连接在一起以产生连接张量T

例如,如果输入数据x已经被构造为单个张量,其中要经历DFT的数据的实部和虚部在一个维度上被连接,则可以省略连接步骤310。

然后在第一卷积321中处理连接张量,所述第一卷积使用第一卷积核K

在步骤331中,第一卷积321的输出被拆分或分离成实部和虚部。例如,这可以通过沿着连接第一和第二张量的维度拆分第一卷积的输出来实现。

类似地,(在步骤332中)第二卷积322的输出被拆分或分离成实部和虚部。例如,这可以通过沿着连接第一和第二张量的维度拆分第一卷积的输出来实现。

由步骤331和332输出的数据产生四个张量,表示Re(W)Re(x)、Im(W)Im(x)、Im(W)Re(x)和Re(W)Im(x)。可以执行适当的加法和/或减法,以便产生输出数据的实部和虚部(即,提供DFT过程的结果)。特别地,在步骤341中,可以从表示Re(W)Re(x)的张量中减去表示Im(W)Im(x)的张量,以产生输出数据的实部。可以在步骤342中将表示Im(W)Re(x)的张量与表示Re(W)Im(x)的张量求和,以产生输出数据的虚部。

参考图2和图3描述的方法200、300中的任何一者都可以适于执行逆DFT。具体来说,如果两个卷积核K

更复杂的傅立叶相关变换或利用傅立叶相关变换的运算可以利用本公开中前面概述的方法和概念来执行。具体来说,FFT和/或STFT可以利用关于DFT提出的概念。MFCC(梅尔频率倒谱系数)可以进一步利用先前描述的DCT方法。

与上面概述的DFT方法相比,快速傅立叶变换(FFT)是一种执行傅立叶变换的算法,其计算复杂度降低。DFT的复杂度为O(N

存在本领域技术人员熟知的各种形式的FFT和变体。库利-图基算法是FFT的一个合适的示例。库利-图基算法的实施方式的以下工作示例是使用基数-2FFT方法的示例。

具体来说,图4A示出了对一些输入数据执行快速傅立叶变换的方法400。输入数据再次由两个输入张量形成:表示要处理的数据的实部的第一张量Re(x)和表示要处理的数据的虚部的第二张量Im(x)。

第一和第二张量可以在可选步骤405中从作为(初始)输入数据提供的单个复张量x

在步骤410中,通过执行偶数410A和奇数410B划分,每个张量Re(x)和Im(x)被划分或分离成两个子张量,从而产生两个子张量集合。在此上下文中,“划分”或“划分”将被理解为意味着对两个或更多个交错分量(诸如序列的奇数和偶数元素)的去交错。因此,第一张量Re(x)将被划分成第一子张量o(Re(x))和第二子张量e(Re(x)),使得第一子张量(仅)包括对应于来自第一输入张量的奇数索引的样本,并且第二子张量(仅)包括对应于来自第一输入张量的偶数索引的样本。类似地,第二张量Im(x)将被划分成第三子张量o(Im(x))和第四子张量e(Im(x)),使得第三子张量(仅)包括奇数采样的第二输入张量,并且第四子张量(仅)包括偶数采样的第二输入张量。第一和第三子张量形成第一子张量集合(作为奇数采样子张量的集合),并且第二和第四子张量形成第二子张量集合(作为偶数采样子张量的集合)。

根据本公开的创新方面,步骤410可以使用卷积来执行。特别地,可以对每个输入张量执行两个单独的卷积,以产生相应的子张量。应用于任一输入张量的奇数采样卷积核产生输入张量的奇数值,而应用偶数采样卷积核产生输入张量的偶数值。

考虑一个场景,其中每个输入张量的值沿着(具有维度[批,高度,宽度,通道]的张量的)通道轴/维度定位。在这种场景下,卷积核(具有维度[H,W,C

奇数采样卷积核在位置(0,0,c,d)处的值(w

偶数采样卷积核在位置(0,0,c,d)处的值(w

由于此大小N可能是预先已知的,所以卷积核可以预先生成和存储(即“离线”)以降低计算复杂度。在神经网络加速器包括对权重压缩的支持的情况下,这些高度稀疏的二进制权重矩阵的大小可以显著减小,这反过来可以减少带宽和存储器需求。

在另一个示例中,可以使用解卷积来执行步骤410。特别地,可以对每个输入张量执行单独的解卷积,以产生相应的子张量。

具体来说,可以使用核对每个张量Re(x)和Im(x)执行解卷积,所述核例如可以通过(沿着未使用的空间维度,例如高度维度)连接奇数采样卷积核和偶数采样卷积核的转置来构建。这可以例如导致形状为[2,1,N,N/2]的解卷积核,当应用于形状为[B,1,W,N]的输入时,其中要经历FFT的序列在通道维度上,产生形状为[B,2,W,N/2]的输出,其中高度维度上的第一位置可以包括来自奇数索引输入位置的值,而高度维度上的第二位置可以包括来自偶数索引输入位置的值。

这之后可以进行拆分以分离为用于奇数和偶数索引位置的独立张量,如图4A所示的FFT算法的剩余部分所要求的。图4B示出了另一种方法。

如果执行步骤405,则步骤410可以应用于初始(复)张量x

在又一示例中,使用一个或多个整形和/或拆分操作来执行步骤410,以便将奇数和偶数索引值彼此分离(即,不需要使用任何卷积或解卷积运算)。整形操作可以有效地对形状为[B,H,W,C

方法400然后可以执行DFT过程420,包括步骤421和422,每个步骤包括对每个子张量集合执行DFT。这可以通过执行参考图2至图3描述的方法200或300来执行。这有效地对输入数据的奇数索引部分执行DFT(以产生奇数索引的DFT数据O),并对输入数据的偶数索引部分执行DFT(以产生偶数索引的DFT数据E)。

O包括输入数据的变换后的奇数索引部分的实部和虚部。E包括输入数据的变换后的偶数索引部分的实部和虚部。这些可以包括实部和虚部的单独的(子)张量。

图4A将步骤421、422图示为框图的框。本领域技术人员将理解可以如何分别处理奇数和偶数采样子张量的不同部分。

应当理解,可以执行单个DFT过程来执行步骤421和422。图4B示出了图4A中描述的方法400的修改版本450,其中在产生奇数索引的DFT数据O和偶数索引的DFT数据E期间执行单个DFT过程。图4B由此提供了执行图4A中示出的步骤405到420的替代方法。

修改的方法450包括在步骤461和462中使用核对每个张量Re(x)和Im(x)执行解卷积,所述核例如可以通过(沿着未使用的空间维度,例如高度维度)连接奇数采样卷积核和偶数采样卷积核的转置来构建。这可以例如导致形状为[2,1,N,N/2]的解卷积核,当应用于形状为[B,1,W,N]的输入时,其中要经历FFT的序列在通道维度上,产生形状为[B,2,W,N/2]的输出,其中高度维度(大小为2的维度)上的第一位置可以包括来自奇数索引输入位置的值,而高度维度上的第二位置可以包括来自偶数索引输入位置的值。当然,高度维度只是一个示例,并且可以使用另一个维度(例如宽度维度)。

这样就产生了两个张量。可以被标记为第一奇偶张量或第一中间张量的第一张量EO(Re(x))包括张量Re(x)的偶数和奇数索引值,其中奇数值位于高度维度的一个位置,而偶数值位于高度维度的另一个位置。可以被标记为第二奇偶张量或第二中间张量的第二张量EO(Im(x))以类似的方式包括张量Im(x)的偶数和奇数索引值。

然后,使用离散傅立叶变换处理由步骤461和462产生的张量。例如,可以执行参考图3描述的方法300来处理第一和第二奇偶张量,以产生变换后的奇偶张量。由于奇数和偶数索引值的值位于高度维度上的不同位置,所以单个DFT过程(例如方法300中描述的)能够对奇偶张量执行傅立叶变换。变换后的奇偶张量然后经历拆分过程470,以产生奇数索引的DFT数据O和偶数索引的DFT数据E。

所提出的利用方法300的方法是特别有利的,因为它减少了在执行快速傅立叶变换时需要执行的卷积(资源密集型过程)的数量。然而,方法300可以改为用步骤200中使用的方法代替,以提供用于执行FFT的替代方法。

在完成步骤420或470之后,方法400或450执行步骤430。

方法400然后可以组合430步骤421和422的结果,以产生快速傅立叶变换y的输出。在快速傅立叶变换术语中,这被称为“应用旋转因子”。因此,方法400可以包括旋转因子过程。

此过程430可以通过在复数乘法步骤431中将O的每个元素O

可以针对O和E的实部和虚部分别执行步骤431到434。在其他示例中,实部和虚部被连接在一起(例如,在未使用的维度中)并被同时处理。

还应当理解,值

图5示出了旋转因子过程的更完整示例,其示出了用于执行旋转因子过程430的方法430。

方法430接收四个子张量作为输入。第一子张量Re(O)包括DFT之后的奇数采样输入张量的实部。第二子张量Im(O)包括DFT之后的奇数采样输入张量的虚部。第三子张量Re(E)包括DFT之后的偶数采样输入张量的实部。第四子张量Im(E)包括DFT之后的奇数采样输入张量的虚部。

在步骤511中,第一和第二子张量都与

在步骤513中,从第一相乘结果中减去第四相乘结果,以产生O与旋转因子w

步骤511到514等同于图4A的步骤431。

在步骤521中,将Re(w

在步骤524中,将Im(w

步骤521和524等同于图4A的步骤432。步骤522和525等同于图4A的步骤433。步骤523和526等同于图4A的步骤434。

应当理解,上述方法中的DFT 421和422可以用相同方法400的另外的应用来代替。包括在这些“子FFT”中的DFT也可以用另外的FFT代替,等等。这在本领域中被称为“递归”,并且在极限情况下导致DFT所需的O(N.logN)而不是O(N

本公开的基本概念可以用于短时傅立叶变换(STFT)。从概念上讲,STFT从一系列值中提取一系列重叠部分,使用傅立叶相关变换技术(诸如FFT或DFT)单独处理这些重叠部分。

对一系列重叠部分的提取有效地将值序列分解成彼此重叠的块或部分的序列。因此,任何给定的块/部分可以包括在块/部分的序列中的顺序下一个块/部分中找到的至少一个值。

每个部分可以经历加窗,以减少窗口边缘处(即,正被处理的序列的部分的边缘)的值的贡献。窗口函数是本领域技术人员熟知的,例如汉恩窗、汉明窗或高斯窗。这种方法减少了由于突然停止(即窗口结束)而在STFT的输出中识别/存在的(杂散)频率的影响。然而,应该理解,某些形式的STFT不需要加窗。

因此,典型的STFT将对序列的每个提取部分应用一些窗口函数,以产生一组加窗部分。然后,每个加窗部分将经过傅立叶变换(例如,使用DFT或FFT)以产生STFT的输出。然而,直接采用这种方法在硬件加速器上执行将是低效的,因为它需要存储和跟踪多个单独的数据片段(即序列的每个部分),其数量将取决于输入序列的长度。

图6示出了一种用于执行短时傅立叶变换(STFT)的方法,所述方法克服了这些问题中的至少一些问题。

不是单独提取值序列的每个部分,使用加窗函数处理序列的每个提取部分以获得一个或多个加窗序列,并对每个加窗序列执行单独的傅立叶变换,而是可以将这些过程组合成较少数量的步骤(例如单个步骤)以在示例性硬件加速器上执行。

具体来说,可以通过适当修改用于执行傅立叶变换的卷积核来组合加窗和执行傅立叶变换的过程。具体来说,可以使用加窗函数来修改卷积核。例如,如图6所示,每个卷积核K可以乘以加窗矩阵或向量WI,以产生相应的加窗卷积核K

为了提高清晰度,图6中仅示出了一个(加窗)卷积核。然而,应当理解,可以使用多个卷积核(例如,一个表示权重矩阵的实部,一个表示权重矩阵的虚部)。

此外,代替提取序列的不同部分以经历傅立叶变换(在加窗之后),可以执行步长卷积(例如,利用每个加窗卷积核),其中选择步长的大小,使得卷积核的每个位置对应于要经历傅立叶变换(利用加窗)的数据的一部分的位置。这有效地将提取每个部分和使用单独的傅立叶变换处理(加窗)部分的过程组合成可以在示例性硬件加速器上有效执行的步长卷积。

图6示出了此过程,其中使用例如形状为[1,N,1,N]的具有步长S的两个窗口卷积核K

输出数据由实部和虚部两部分组成。在此上下文中,值N表示窗口的大小(即每个部分的大小),并且步长S与窗口之间的重叠相关(S的值越大,重叠量越小)。要经历STFT的值沿着宽度维度定位(这里:沿着大小为M的维度)。在图6所示的具体示例中,M=10,N=4并且S=3。这得到F=3,并且输出y具有形状[1,1,3,4]。请注意,为了清楚起见,图6中抑制了权重和数据张量中大小为1的两个维度。

一些硬件加速器可以被配置为使得不可能沿着通道维度执行步长卷积(例如,步长只可沿着宽度或高度维度执行)。在这些示例中,要经历STFT的值可以沿着宽度或高度维度定位。这可以包括例如整形或置换张量的维度,例如,如果要经历STFT的值最初沿着通道维度定位,则整形使得要经历STFT的值沿着高度和/或宽度维度定位。如果这些值已经沿着在卷积期间可以执行跨越的维度定位,则这种整形或维度置换是不必要的。如本领域技术人员将认识到的,所使用的卷积核可以被适当地成形。

应当理解,通常,(加窗)步长卷积具有复数输入和复数系数,并且可以按照上述在DFT和FFT的上下文中描述的步骤,适当地实现为多次实数卷积和辅助运算(例如,加法和减法)。所提出的任何合适的DFT或FFT方法都可以适用于执行STFT。具体来说,如果(已知)输入数据仅包括实值,则可以使用利用具有形状[1,N,1,1+N/2]或[N,1,1,1+N/2]的卷积核的DFT/FFT方法。这将为执行STFT提供资源效率更高的方法。

频谱图可以通过对STFT提供的输出数据进行适当处理来生成,并且通常使用STFT输出的幅度来定义。频谱图对于音频数据的进一步处理是有用的表示,并且改进了音频数据的相关方面的识别。

图7示出了计算输入数据790的频谱图的方法700。这里的输入数据包括维度为[B,H,W,C]的输入张量(如前所述)。在一个示例中,被处理以生成频谱图的值序列沿着宽度维度定位。因此,在一个示例中,输入数据可以包括形状为[1,1,M,1]的输入张量,M是形成要为其生成频谱图的值序列的值的数量。

方法700包括使用STFT处理输入数据以产生STFT输出数据795的步骤710。可以执行任何先前描述的执行STFT的方法。STFT输出数据包括实部796和虚部797。如果输入数据790改为包括STFT输出数据,则可以省略步骤710。

在所示示例中,在连接步骤720中,实部796和虚部797在高度维度上连接在一起。

然后,在平方步骤730中,连接张量中的每个元素被平方,例如乘以自身。这是使用示例性硬件加速器的固定功能电路系统185可用的逐元素乘法运算来执行的。因此,可以使用硬件加速器的逐元素运算单元来执行步骤730。

然后,在求和步骤740中,将对应的实部和虚部元素在一起求和,以产生求和张量。在此示例中,求和步骤包括,对于宽度维度中的每个位置,将高度维度中的两个值相加,以产生求和张量。这可以使用具有适当配置的卷积核的卷积来执行(例如,具有形状为[2,1,N,1]的核的逐深度卷积,对应于N个组,每个组具有单个输入和输出通道)。因此,可以采用卷积运算(硬件加速器上可用的神经网络运算中的一种神经网络运算)来执行步骤740。

然后在步骤750中处理求和张量,以计算每个值的平方根。因此,步骤750包括处理求和张量(由步骤740输出)以计算每个值的平方根。硬件加速器的各种部件可以重新用于计算平方根。

在一个示例中,使用查找表来识别求和张量中每个值的平方根值。因此,步骤750可以包括在查找表中执行一次或多次查找。

其他示例对于本领域技术人员来说将是显而易见的,例如,可以使用硬件加速器的局部响应归一化单元来近似平方根,例如,其可以将以下函数应用于求和张量的每个值:

其中n=1,α=1,k=0并且β=-0.25。

步骤750的输出是频谱图。因此,所提出的方法提供了一种机制,通过所述机制,可以使用示例性硬件加速器的固定功能电路系统的可用操作来产生频谱图。

在一些示例中,步骤750被省略(例如,使得步骤740的输出充当具有平方幅度的频谱图)。

在一些示例中,输入张量(维度为[B,H,W,C])被配置为使得生成频谱图的值序列沿着高度维度定位。在这种场景下,连接步骤720可以包括在宽度维度上连接输出数据的实部和虚部。可以类似地修改求和步骤740,以包括对于高度维度中的每个位置,对宽度维度中的两个值求和,以产生求和张量。或者,输入张量的维度可以被整形或置换以定位值序列,从而在宽度维度上生成频谱图。

在又其他示例中,输入张量(维度为[B,H,W,C])被配置为使得用于生成频谱图的值序列沿着通道维度定位。在这种场景下,可以对输入张量进行整形,或者对其维度进行置换(使得值位于宽度或高度维度上),并且可以执行前述方法中的一种方法。

图8示出了用于计算输入数据790的频谱图的替代方法800。

如前所述,这里的输入数据790包括维度为[B,H,W,C]的输入张量(如前所述)。在一个示例中,被处理以生成频谱图(表示值序列)的所述值序列沿着宽度维度定位。因此,在一个示例中,输入数据可以包括形状为[1,1,M,1]的输入张量,其中M是形成要为其生成频谱图的值序列的值的数量。

类似地,方法800包括使用STFT处理输入数据以产生STFT输出数据795的步骤710。可以执行任何先前描述的执行STFT的方法。STFT输出数据包括实部796和虚部797。如果输入数据790改为包括STFT输出数据,则可以省略步骤710。

然而,代替将实部和虚部连接在一起,STFT输出数据的每个部分在随后的处理期间的组合之前被分别处理。

因此,STFT输出数据的实部796和虚部797中的每个元素可以在平方步骤820中被平方。平方步骤820可以使用逐元素乘法运算(即,使用示例性硬件加速器100的逐元素运算单元185)来执行。换句话说,可以对STFT输出数据的每个部分执行平方步骤820。

然后,在求和步骤830中,可以将平方实部和平方虚部的对应值在一起求和,以产生求和张量。因此,平方实部的位置(a,b,c,d)处的值被加到平方虚部的位置(a,b,c,d)处的值,以产生求和张量的位置(a,b,c,d)处的值。求和步骤830可以使用逐元素求和运算(即,使用硬件加速器100的逐元素运算单元185)来执行。

然后在步骤750中处理求和张量,以计算每个值的平方根。因此,步骤750包括处理求和张量(由步骤830输出)以计算每个值的平方根。先前已经描述了使用硬件加速器来计算平方根的方法。步骤750的输出是频谱图。

图9示出了使用MFCC(梅尔频率倒谱系数)将一些输入数据990处理成梅尔频谱图的方法。

MFCC输出提供频谱图的表示的分量,其旨在更好地近似人类听觉系统对声音的响应。音频信号的这种表示通常用于音频压缩,并且也证明对于通过神经网络分析音频数据是有用的。

方法900包括获得输入数据990的步骤910,所述输入数据包括要经历MFCC分析过程的频谱图。例如,可以使用先前描述的用于生成频谱图的机制(例如,参考图7或图8)来生成频谱图。

方法900还包括转换过程920,所述转换过程使用重叠(三角形)窗口将频谱图从赫兹标度转换到梅尔(mel)(或梅尔(Mel))标度,以产生梅尔频谱图。为了清楚起见,在步骤910中获得的频谱图在下文中被称为赫兹标度频谱图。

将赫兹频率(f)转换成梅尔标度的各种公式在本领域中是已知的。这种公式的一个示例在下面的等式中列出:

在连续情况下,梅尔标度频谱图中的梅尔频率mel(f)处的幅度与赫兹标度频谱图中的对应频率f具有相同的幅度。

然而,在离散情况下,由梅尔标度频谱图中均匀放置的位置所表示的频率没有均匀地放置在对应的赫兹标度中,并且由于两者之间的非线性映射(等式(8))而没有对齐。这意味着从赫兹到梅尔的转换需要进行插值或“重组”过程。执行这种重组的方法如下所述。

因此,根据对应的权重,在连续索引处的输出梅尔频谱图中的一个或多个仓之间共享具有索引i的仓处的赫兹标度频谱图的值(即幅度)a[i]。这些贡献可以被加权,使得权重总和为1。

令f[i]表示与索引i处的离散赫兹频谱图仓相对应的以赫兹为单位的频率,并且令m[c]表示与索引c处的离散梅尔频谱图仓相对应的梅尔标度上的频率。mel(f[i])表示对应于根据等式(8)的索引i处的输入频谱图的以赫兹为单位的频率的梅尔标度频率。

图10示出了如何根据示例计算对应于输出索引c

然后,在索引i处的赫兹标度频谱图a[i]的值(幅度)根据以下权重在梅尔标度频谱图仓之间共享:具体来说,在索引i处的赫兹标度频谱图的值/幅度a[i]将对梅尔频谱图的第一索引c

因此,梅尔频谱图中的每个值将由赫兹标度频谱图的值与权重之间的某些乘积之和给出。权重的值与赫兹标度频谱图的值无关。因此,由于用于计算权重的参数是已知的,例如对于固定大小的输入可以是常数,因此可以预先计算权重。这里已经认识到,这种转换可以被表示为乘积之和的事实意味着有可能通过矩阵乘法并因此使用卷积来计算赫兹标度频谱图到梅尔频谱图的转换。具体来说,可以使用单个卷积来计算转换,从而可以使用示例性硬件加速器100的卷积(固定功能)硬件140将其有效地实施为本机支持的运算。

以这种方式,可以产生卷积核,当与赫兹标度频谱图卷积时,所述卷积核产生梅尔标度频谱图。卷积核可以从维度[U,V]的权重矩阵中产生,例如使用先前描述的整形和/或维度置换过程。U的大小等于赫兹频谱图中的值的数量。V的大小等于梅尔频谱图中的值的数量。

对于沿着U维的第i索引,除了在V维的索引c

在一个工作示例中,赫兹标度频谱图具有维度[B,H,W,C],并且被配置为使得给定时间步长的频谱图的值序列沿着通道维度定位,使得沿着通道维度的不同位置(对于相同的B,H,W位置)包括频谱图的不同频率。在这种场景下,从权重矩阵产生的卷积核的形状可以是[1,1,X,C

然后在对数步骤930中处理梅尔频谱图,以计算包括在梅尔频谱图中的每个值的对数。执行对数步骤930的一种方法是使用一次或多次查找。因此,步骤930可以包括例如使用激活单元在查找表中执行一次或多次查找。另一个示例可以是使用米切尔近似来处理每个值(例如,通过使用逐元素运算来处理每个值或将定义的激活函数应用于每个值),以例如使用逐元素运算单元和/或激活单元来产生每个值的估计对数结果。在一些示例中,可以使用查找操作来执行对米切尔近似的校正。

在至少一个示例中,步骤930包括在计算每个值的对数之前将值非常小的常数(例如0.005)添加到梅尔频谱图的每个值的步骤。这避免了尝试计算零的对数。

方法900然后执行使用离散余弦变换(DCT)处理步骤930的输出或结果的步骤940,以产生梅尔频率倒谱系数(MFCC)。先前已经描述了使用DCT处理数据以产生DCT结果的方法。

为了加深上下文理解,现在将通过返回参考图1来提供示例性硬件加速器的更完整描述,所述图示出了被配置为根据本公开的示例评估多个基本神经网络运算的示例性硬件加速器100。如前所述,硬件加速器100上的可用操作可以重新用于执行离散傅立叶相关变换和利用或包括离散傅立叶相关变换的运算。

硬件加速器100包括数字逻辑电路系统,所述数字逻辑电路系统被配置为接收数据(包括权重和输入张量)以及用于处理数据的命令。硬件加速器100包括存储器接口110、输入缓冲器控制器115、命令解码器120、系数缓冲器控制器125、系数缓冲器130、n个输入缓冲器135、卷积硬件140(这里由n个(即,一个或多个)卷积引擎140a至140n形成)、n个累加器145、累加缓冲器150、激活单元155、局部响应归一化(LRN)单元165、共享缓冲器170、池化单元175和逐元素运算单元185。硬件加速器100可以用于评估基本神经网络运算,以便实施任何先前描述的功能,例如先前解释的离散傅立叶相关变换。

存储器接口110被配置为提供硬件加速器100与外部存储器15之间的接口。外部存储器15可被视为与硬件加速器100分离的模块。命令或配置信息可包括例如关于权重和数据大小和格式以及它们在外部存储器中的位置的信息。

存储器接口110被配置为从外部存储器15接收要在神经网络内的计算中使用的权重和数据以及用以控制硬件加速器100的运算的命令信息。所接收的权重(在本文中也称为系数)被传递到系数缓冲器控制器125,并且所接收的数据被传递到输入缓冲器控制器115。所接收的命令被传递到命令解码器120,所述命令解码器又被配置为对命令进行解码,并且随后将控制信息发布到硬件加速器的元件,包括系数缓冲器控制器125和输入缓冲器控制器115,以控制将权重和输入数据存储在缓冲器中的方式。

在实践中,在从外部存储器15的单次读取中接收的权重和数据的数量将取决于系数缓冲器130和输入缓冲器135的大小。权重从系数缓冲器控制器125传递到系数缓冲器130,并且所接收的数据从输入缓冲器控制器115传递到多个输入缓冲器135a至135n。输入缓冲器的数量将取决于加速器100的特定实施方式,但可以取任何值。输入数据跨所有输入缓冲器135a至135n共享。输入缓冲器各自形成有效的存储库(bank),使得输入缓冲器的数量可取决于应用而增加或减少。

输入缓冲器135a至135n连接到多个多路复用器中的每个多路复用器,因为(卷积硬件的)每个卷积引擎140a至140n需要访问输入数据的所有有效“存储库”。多路复用器各自被配置为从输入缓冲器135中的一个输入缓冲器选择输出,并且将从所选择的输入缓冲器135输出的值传递到相应卷积引擎140a至140n。另外,来自系数缓冲器130的权重作为第二输入提供到每个卷积引擎140a至140n中。卷积硬件140被配置为使用从系数缓冲器130接收的权重对所接收的输入数据执行卷积计算。每个卷积引擎140a至140n的所得输出作为输入提供给多个累加器145a至145n的相应累加器。

每个累加器145a至145n连接到累加缓冲器150。累加缓冲器150被配置为存储从每个累加器145a至145n接收的累加结果。累加缓冲器150连接到存储器接口110。由此,累加缓冲器150被配置为经由存储器接口110将数据发送到外部存储器15,以及从所述外部存储器接收数据。具体地说,累加缓冲器150被配置为能够经由存储器接口110存储其值,以及从外部存储器15恢复其值,如下文将更详细地描述。累加缓冲器150连接到累加器145a至145n的输入,并且被配置为将值馈送回累加器145a至145n中,以使得能够进行累加计算。

累加缓冲器150被配置为将累加值传递到激活单元155和/或逐元素运算单元185。激活单元155被配置为执行多个不同激活函数中的至少一个激活函数。激活单元155并入有查找表(LUT),以用于存储待应用于向激活单元输入的数据的激活函数,诸如S形激活。激活单元155还可操作以将偏置值添加到张量/从张量减去偏置值。这可用以向张量添加常数或从张量减去常数。

由激活单元155计算出的所得值可以经由共享缓冲器170传递给LRN单元165和/或池化单元175进行处理。LRN单元165被配置为执行局部响应归一化。这可以在输入数据的单个平面内执行。替代地或另外,LRN运算也可以跨平面执行。

存储在共享缓冲器170中的结果被传递到存储器接口110,所述存储器接口可将结果存储在外部存储器15中或将结果传递回输入缓冲器以供进一步处理,而不必首先传递到外部存储器。

共享缓冲器170被配置为缓冲来自激活单元155、LRN单元165、池化单元175和逐元素运算单元185中的任何一者或多者的值,直到执行下一运算所需的所有值可用。以此方式,共享缓冲器170用于提高存储效率,因为它可以保持在稍后运算中需要的值而不必使用外部存储器15。

逐元素运算单元185包括被配置为对从累加缓冲器150和/或激活单元155接收的张量执行逐元素运算的电路系统。支持的逐元素运算可包括张量的相应元素的逐元素加法、减法、乘法、除法和最大值(或最小值)。

逐元素运算是对至少一个张量的多个元素重复的运算。通常针对张量的所有元素重复所述运算。可考虑两类逐元素运算:具有单个运算元的一元运算以及具有两个运算元的二元运算。逐元素运算单元185处置二进制逐运算运算。硬件加速器的其他部件也可以执行逐元素运算。例如,激活单元155可以通过将所需函数加载到LUT中并且将所述函数应用于张量的每个元素来执行一元逐元素运算。

虽然图1的硬件加速器示出了布置单元的特定顺序,并且因此示出了数据处理如何通过硬件实施方式流动,但将了解,所需特定计算和处理数据的顺序可以变化。

在一些示例中,由激活单元155、LRN单元165、池化单元175和逐元素单元185执行的函数可以全部被执行。在其他示例中,可以仅执行这些函数中的一些函数,并且不一定按照硬件加速器100中列出的顺序执行。为了实现处理这些函数的可配置顺序,激活单元155、LRN单元165、池化单元175和逐元素单元185中的每一者可被配置为接收将单元配置成旁路模式的控制信令,在所述旁路模式中不执行函数,并且输入值仅传递通过单元而不发生变化。

在一些示例中,数据可能需要首先由(卷积硬件的)卷积引擎140a至140n进行处理,然后根据激活单元155、LRN单元165、池化单元175和逐元素单元185进行处理。在这些示例中,来自卷积引擎140a至140n的输出经由累加器145a至145n传递到累加缓冲器150,并且随后传递到激活单元155、LRN单元165、池化单元175和逐元素单元185以供进一步处理。在其他示例中,可能需要以不同方式处理数据。例如,数据可能需要首先根据激活单元155、LRN单元165、池化单元175和逐元素单元185进行处理,并且其次根据卷积引擎140a至140n进行处理。

在这些布置中,数据可以经由累加缓冲器150直接传递到激活单元155,其中累加缓冲器150已直接从存储器接口110接收输入数据,所述存储器接口已经从外部存储器接收数据。以此方式,有效跳过由卷积引擎140a至140n和累加器145a至145n执行的处理,并且数据可直接传递到激活单元155、LRN单元165、池化单元175和逐元素单元185。随后,一旦使用激活单元155、LRN单元165、池化单元175和逐元素单元185的处理完成,所得值就可以经由存储器接口110被传递到输入缓冲器控制器115中。在一些布置中,所得值可首先经由存储器接口110传递到外部存储器15,并且随后在使用之前从外部存储器15检索。

在其他布置中,存储器接口110可以将所得值传递到输入缓冲器控制器115,而不将值传递到外部存储器15。通过避免需要将使用激活单元155、LRN单元165、池化单元175和逐元素单元185的计算所得的值传递到外部存储器15,存储器带宽得以减小,并且因此也减少处理数据的延迟。

有利地,由于激活单元155、LRN单元165、池化单元175和逐元素单元185线性放置,因此有可能背对背地执行这些运算,而不必从外部存储器15检索数据。在一些实施方案中,激活单元155、LRN单元165、池化单元175和逐元素单元185连接的顺序可以变化。例如,激活单元155、LRN单元165和池化单元175可以反向连接,使得池化单元连接到累加缓冲器150,并且激活单元连接到存储器接口110。

图11示出了图1中的卷积硬件140的每个卷积引擎140n的结构。卷积引擎140n包括乘法逻辑142的多个元素,每个元素被配置为将权重乘以输入数据元素;以及加法逻辑144的多个元素,所述多个元素以树结构配置以对乘法逻辑142的元素的输出求和。

图12是根据示例的用于在硬件加速器100(NNA)中实施任何本文描述的傅立叶相关变换的数据处理系统10的框图。数据处理系统包括硬件加速器100;控制器15;存储器15;以及存储器操纵模块(MMM)1200。至少硬件加速器100、存储器15和MMM 1200通过数据总线30连接。

控制器15被配置为接收具有此类函数的至少一个神经网络过程的定义,并将所述神经网络过程映射到可由硬件加速器100本地执行的多个基本神经网络运算。控制器15还被配置为控制硬件加速器100(例如,其可以包括MMM 1200)以通过这些基本运算来评估神经网络过程。因此,控制器15控制对由硬件加速器100执行的多个基本神经网络运算的评估,从而评估神经网络过程。

硬件加速器100被配置为评估多个基本神经网络运算。

MMM 1200被配置为以各种方式操纵存储器中的多维数据,包括互换数据的不同维度的转置或置换操作和/或用于将两个或更多个张量组合成单个张量的连接操作。在一些示例中,MMM 1200可被配置为通过在宽度或高度维度中的一者或两者中嵌入数据的通道维度,或将通道维度与这些空间维度中的一个或两个交换来变换数据。在替代示例中,MMM可转置或置换输入数据的维度的任何其他组合,包括批维度。

例如,MMM可以用于执行本文描述的任何连接。MMM可例如形成为硬件加速器100的一方面,并且在此仅被单独展示以展现一个可能的实施方案。

图13是图12中使用的MMM 1200的框图。如已经提到的,MMM 1200经由总线30耦合到存储器15。MMM 1200包括存储器读取块1220;内部缓冲器1210;以及存储器写入块1230。控制通道1240用于协调存储器读取块1220和存储器写入块1230执行的运算。存储器读取块1220和存储器写入块1230两者耦合到总线30。存储器读取块1220的输出耦合到内部缓冲器1210的输入。存储器写入块1230的输入耦合到内部缓冲器1210的输出。

存储器读取块1220从存储器15读取数据。存储器读取块1220将(从存储器15读取的)数据写入内部缓冲器1210。存储器写入块1230从内部缓冲器1210读取数据,并且将(从内部缓冲器1210读取的)数据写回到外部存储器15。通过存储器读取块1220和存储器写入块1230所执行的运算的组合,可以前先前所描述的方式来变换数据。变换可以在将数据从存储器15移动到内部缓冲器1210时发生,或可在将数据从内部缓冲器1210移动到存储器15时发生。在一些情况下,变换可以部分地发生在存储器15与内部缓冲器1210之间,部分地发生在内部缓冲器1210与存储器15之间。

由于存储器读取块1220和存储器写入块1230以单独的硬件块形式提供,因而它们能够并行操作。即,在存储器写入块120正在执行步骤330和340时,存储器读取块1220可执行步骤310和320(所述步骤将在下文参考图1进行详细解释)。控制通道130提供存储器读取块1200与存储器写入块120之间的通信,以维持两个块之间的同步。

因此,本公开提出一种其中可实施实施方案的数据处理系统。在所示出示例中(诸如在图12中),数据处理系统10围绕硬件加速器100构建——所述硬件加速器在那些示例中是NNA。然而,数据处理系统可以替代地部分地或完全地在NNA内实施。例如,硬件加速器200、MMM 40和控制器15可以表示NNA内的子部件。

图14是示出根据本公开的示例的由数据处理系统10执行的方法的流程图1400。在此示例中,数据处理系统10实施函数。例如,所述函数可以是离散傅立叶相关变换和/或利用离散傅立叶相关变换的函数。

在步骤1410中,控制器14接收涉及所述函数的神经网络过程的定义作为输入。在步骤1420中,控制器将神经网络过程映射到包括多个基本神经网络运算的等效计算图。在步骤1430中,硬件加速器100评估多个基本神经网络运算,以产生神经网络过程的结果。

在本示例中,映射到所述多个基本运算是基于将函数改写到基本部件,其实施方案先前已有描述。具体来说,离散傅立叶相关变换的一个或多个乘法运算(其利用一个或多个权重矩阵)可以通过对在乘法运算中使用的权重矩阵(或多个矩阵)进行适当的整形来改写成卷积。

图15示出了可在其中实施本文描述的数据处理系统的计算机系统。计算机系统包括CPU 1502、GPU 1504、存储器1506和其他设备1515,诸如显示器1516、扬声器1518和相机1519。处理块1510在GPU 1504上实施。在其他示例中,处理块1510可以在CPU 1502上实施。计算机系统的部件可经由通信总线1520彼此进行通信。存储区1512被实施为存储器1506的部分。

虽然图15示出数据处理系统的一个实施方式,但将理解,可针对人工智能加速器系统绘制类似框图——例如通过用神经网络加速器(NNA)替换CPU 1502或GPU1504,或通过添加NNA作为额外单元。在这类情况下,处理块1510可在NNA中实施。

图1至图15中示出的任何数据处理系统(其中流程图可以表示数据处理系统的不同模块)被示为包括多个功能块。这仅仅是示意性的,并且不旨在限定这类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应理解,如由数据处理系统形成的本文描述的中间值不需要由数据处理系统在任何时间点处物理地产生,并且可仅表示方便描述由数据处理系统在其输入与输出之间执行的处理的逻辑值。

本文描述的数据处理系统可以在集成电路上的硬件中体现。本文描述的数据处理系统可被配置为执行本文描述的方法中的任一种方法。一般来说,上文所描述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如固定逻辑电路系统)或它们的任何组合中实施。本文中可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或它们的任何组合。在软件实施方式的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,当在处理器上被执行时,所述程序代码执行指定任务。本文描述的算法和方法可由执行代码的一个或多个处理器执行,所述代码使得处理器执行算法/方法。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存存储器、硬盘存储器,以及可使用磁性、光学和其他技术来存储指令或其他数据并且可由机器访问的其他存储器设备。

如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包括以机器语言、解释语言或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用诸如C、

处理器、计算机或计算机系统可以是任何种类的设备、机器或专用电路,或它们的具有处理能力以使得其可执行指令的集合或部分。处理器可以是任何种类的通用或专用处理器,诸如CPU、GPU、NNA、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机系统可包括一个或多个处理器。

其还旨在涵盖限定如本文描述的硬件的配置的软件,诸如HDL(硬件描述语言)软件,如用于设计集成电路或用于配置可编程芯片以实现所需功能。即,可提供一种计算机可读存储介质,其上编码有呈集成电路定义数据集形式的计算机可读程序代码,当在集成电路制造系统中进行处理(即运行)时,所述计算机可读程序代码将系统配置成制造被配置为执行本文描述的方法中的任一种方法的数据处理系统,或制造本文描述的包括任何设备的数据处理系统。集成电路定义数据集可以是例如集成电路描述。

因此,可提供一种在集成电路制造系统处制造如本文描述的数据处理系统的方法。此外,可提供一种集成电路定义数据集,当在集成电路制造系统中进行处理时,所述集成电路定义数据集使得制造数据处理系统的方法得以执行。

集成电路定义数据集可呈计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别进行制造的硬件描述语言,包括作为寄存器传输级(RTL)代码,作为高级电路表示法,诸如Verilog或VHDL,以及作为低级电路表示法,诸如OASIS(RTM)和GDSII。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如RTL)可在计算机系统处进行处理,所述计算机系统被配置为用于在软件环境的上下文中产生集成电路的制造定义,所述软件环境包括电路元件的定义以及用于组合这些元件以便产生由所述表示法如此定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置为生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。

现在将参考图16描述在集成电路制造系统处处理集成电路定义数据集以便将所述系统配置为制造数据处理系统的示例。

图16示出了集成电路(IC)制造系统1602的示例,所述集成电路制造系统被配置为制造如本文任何示例中描述的数据处理系统。特别地,IC制造系统1602包括布局处理系统1604和集成电路生成系统1606。IC制造系统1602被配置为接收IC定义数据集(例如,定义如本文任何示例中描述的数据处理系统)、处理IC定义数据集以及根据IC定义数据集来生成IC(例如,其体现如本文任何示例中所述的数据处理系统)。通过对IC定义数据集的处理,将IC制造系统1602配置为制造体现如本文任何示例中描述的数据处理系统的集成电路。

布局处理系统1604被配置为接收和处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定要生成的电路的门级表示,例如就逻辑部件(例如NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1604已经确定电路布局时,其可将电路布局定义输出到IC生成系统1606。电路布局定义可以是例如电路布局描述。

如本领域中已知,IC生成系统1606根据电路布局定义来生成IC。举例来说,IC生成系统1606可实施生成IC的半导体设备制造工艺,其可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,其可以在光刻工艺中用于根据电路定义来生成IC。替代地,提供给IC生成系统1606的电路布局定义可呈计算机可读代码的形式,IC生成系统1606可使用所述计算机可读代码来形成用于生成IC的合适掩码。

由IC制造系统1602执行的不同过程可全部在一个位置例如由一方来实施。替代地,IC制造系统1602可以是分布式系统,使得一些过程可在不同位置执行,并且可由不同方来执行。例如,以下阶段中的一些可以在不同位置和/或由不同方来执行:(i)合成表示IC定义数据集的RTL代码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。

在其他示例中,在集成电路制造系统处对集成电路定义数据集进行处理可将系统配置成制造数据处理系统,而不用对IC定义数据集进行处理以便确定电路布局。例如,集成电路定义数据集可以定义可重新配置的处理器(诸如FPGA)的配置,并且对所述数据集的处理可将IC制造系统配置成(例如通过将配置数据加载到FPGA)产生具有所述定义配置的可重新配置处理器。

在一些实施方案中,当在集成电路制造系统中处理时,集成电路制造定义数据集可使得集成电路制造系统产生如本文描述的设备。例如,通过集成电路制造定义数据集以上文参考图16描述的方式来配置集成电路制造系统可使得如本文描述的设备得以制造。

在一些示例中,集成电路定义数据集可包括在于数据集处定义的硬件上运行的软件,或与在数据集处定义的硬件组合运行的软件。在图16中所展示的示例中,IC产生系统还可由集成电路定义数据集配置以在制造集成电路时,根据在集成电路定义数据集处定义的程序代码将固件加载到所述集成电路上,或以其他方式向集成电路提供程序代码以供集成电路使用。

与已知的实施方式相比,在本申请中阐述的概念在设备、装置、模块和/或系统中(以及在本文中实施的方法中)的实施方式可以产生性能改进。性能改进可包括计算性能提高、等待时间减少、吞吐量增大和/或功耗减小中的一者或多者。在制造这种设备、装置、模块和系统(例如在集成电路中)期间,可在性能改进与物理实施方式之间进行权衡,从而改进制造方法。例如,可在性能改进与布局面积之间进行权衡,从而匹配已知实施方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在设备、装置、模块和/或系统的元件之间共享功能块来完成。相反,本申请中所阐述的引起设备、装置、模块和系统的物理实施方式的改进(诸如硅面积减小)的概念可与性能提高进行权衡。例如,这可以通过在预定义面积预算内制造模块的多个示例来完成。

在本申请中,序数被用作标签以将不同特征/元件彼此区分开来。在适当的情况下,序数可由其他标记替换或完全去除(例如,如果仅存在这些元件中的单个元件,则“第一元件”可简单地是“元件”)。本领域技术人员将能够易于适当地重新格式化权利要求和其他文本。序数不应被解释为赋予特征/元素的优先级或顺序,从而使得过程的“第二”步骤可以在“第一”步骤之前执行。

申请人据此独立地公开了本文描述的每个单独的特征以及两个或更多个这类特征的任何组合,其程度使得这类特征或组合能够鉴于本领域的技术人员的普通常识基于本说明书整体来实施,而不管这类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。

相关技术
  • 离散傅立叶变换/逆离散傅立叶变换处理方法及处理器
  • 一种实现快速傅立叶变换/离散傅立叶变换的装置及方法
技术分类

06120115937046