买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!
申请/专利权人:德克萨斯仪器股份有限公司
摘要:在一种用于在设备中执行基本计算原语的方法中,该设备包括处理器和矩阵乘法加速器MMA。该方法包括配置200设备中的流式传输引擎以从存储器流式传输用于基本计算原语的数据,配置202MMA以格式化数据,以及由设备执行204基本计算原语。
主权项:1.一种用于在设备中执行基本计算原语的方法,所述设备包括处理器和矩阵乘法加速器即MMA,所述方法包括:基于所述基本计算原语,配置被包括在所述设备中的流式传输引擎以从存储器流式传输用于所述基本计算原语的数据向量,其中所述数据向量包括长度大于被包括在所述MMA中的第一被乘数矩阵缓冲器的宽度的滤波器,其中并且所述滤波器被分解成多个较小滤波器,并且其中所述较小滤波器的大小小于所述第一被乘数矩阵缓冲器的宽度;基于所述基本计算原语格式化所述数据向量;基于所述基本计算原语配置所述MMA以格式化所述数据向量;以及由所述设备执行所述基本计算原语以产生所述MMA的输出。
全文数据:使用矩阵乘法加速器MMA实施基本计算原语背景技术诸如语音识别、智能工业控制、对象检测和识别以及视觉等应用越来越多地迁移到嵌入式设备。在此类设备中可能需要硬件加速以支持在此类应用中使用的算法的计算需求。发明内容本文描述的示例涉及使用矩阵乘法加速器来实施基本计算原语。在一个方面,提供一种用于在设备中执行基本计算原语的方法,其中该设备包括处理器和矩阵乘法加速器MMA。该方法包括配置设备中的流式传输引擎以从存储器流式传输用于基本计算原语的数据,配置MMA以格式化数据,以及由设备执行基本计算原语。在一个方面,提供一种设备,该设备包括存储器、耦合到存储器的处理器以及耦合到处理器的矩阵乘法加速器MMA,该MMA包括乘数缓冲器和第一被乘数缓冲器,其中该设备可操作以配置设备中的流式传输引擎以从存储器流式传输用于基本计算原语的数据,配置MMA以格式化数据并执行基本计算原语。附图说明图1描绘可配置成使用耦合到处理器的矩阵乘法加速器MMA来实施基本计算原语的示例设备。图2为用于在图1的设备中执行基本计算原语的方法的流程图。图3为示出图1的设备中的批量小矩阵矩阵乘法的实施方式的示例。图4为示出图1的设备中的大矩阵矩阵乘法的实施方式的示例。图5为示出图1的设备中的矩阵矩阵逐点乘法的实施方式的示例。图6为示出图1的设备中的矩阵矩阵加法的实施方式的示例。图7为示出图1的设备中的小向量矩阵乘法的实施方式的示例。图8为示出图1的设备中的小向量求和的实施方式的示例。图9为示出图1的设备中的仿射变换的实施方式的示例。图10和图11为示出图1的设备中的二维2D卷积的实施方式的示例。图12为示出图1的设备中的矩阵行置换的实施方式的示例。图13为示出图1的设备中的向量列置换的实施方式的示例。图14为示出滤波器大小和吞吐量之间的折衷的曲线图。具体实施方式为了一致性,附图中的相同元件由相同的附图标记表示。本文描述的示例提供使用矩阵乘法加速器MMA实施诸如语音识别、智能工业控制、对象检测和识别以及视觉的应用所使用的基本计算原语。基本计算原语包括例如在卷积神经网络CNN中使用的二维2D卷积、小矩阵矩阵乘法和大矩阵矩阵乘法、矩阵矩阵逐点乘法、矩阵矩阵加法、向量矩阵乘法、向量求和、仿射变换、快速傅里叶变换、离散余弦变换、卷积、相关、矩阵赋值、矩阵置换和矩阵变换。图1描绘示例设备100,该示例设备100可配置成使用耦合到处理器102的矩阵乘法加速器MMA104来实施基本计算原语,诸如本文先前提到的那些。MMA104包括执行矩阵乘法的功能。矩阵乘法为从两个矩阵产生矩阵的二进制操作。更具体地,如果乘数矩阵A为M×K矩阵并且被乘数矩阵B为K×N矩阵,则这两个矩阵的矩阵乘积为M×N矩阵C,其中A的行n上的m个元素与B的列K下的m个元素相乘,并求和以产生元素Cmn。MMA104包括足够的存储器以存储用于存储两个B矩阵的16位元素的两个32×32被乘数缓冲器144和用于存储两个C矩阵的16位元素的两个32×32结果缓冲器134。被乘数缓冲器144在本文可以被称为B矩阵缓冲器,并且结果缓冲器134在本文可以被称为C矩阵缓冲器。MMA104还包括存储器,以存储用于存储乘数矩阵A的行的16位元素的1×32乘数缓冲器138。乘数缓冲器138在本文可以被称为A矩阵缓冲器。如本文所述,在一些操作中,B矩阵缓冲器144被用作乒乓pingpong缓冲器,使得当另一缓冲器中的数据用于操作执行时,数据在后台加载到缓冲器中的一个中。类似地,C矩阵缓冲器134用作前台缓冲器和后台缓冲器,使得例如当另一缓冲器的内容从MMA104输出时,操作执行的结果存储在一个缓冲器。在每个周期上,MMA104执行单个指令,即加载、存储并执行指令,在本文称为LSE指令。如该指令的名称所暗示的,MMA104可以在单个周期中执行加载操作、存储操作和执行操作。通常,在周期中,将数据向量加载到A矩阵缓冲器138中,并且在存储在所选B矩阵缓冲器144中的B矩阵和A矩阵缓冲器138中的数据向量之间执行矩阵乘法操作。因此,计算A矩阵缓冲器138中的数据向量与所选B矩阵缓冲器144中的B矩阵的每列的矩阵乘积。矩阵乘法操作的结果为一行数据元素,该行数据元素存储在所选C矩阵缓冲器134中的C矩阵的行中。根据LSE指令的字段的内容,周期还可以将一行数据加载到不用于矩阵乘法的B矩阵缓冲器中,即后台B矩阵缓冲器,将来自C矩阵缓冲器的一行数据存储到外部存储器中,和或在将结果存储在所选C矩阵缓冲器134中之前对矩阵乘积操作的结果执行指定操作。LSE指令的加载操作部分包括标识下列项的字段:要加载到A矩阵缓冲器138中的数据在缓冲器124中的位置、要加载到B矩阵缓冲器144中的数据在缓冲器128中的位置、作为加载操作的目标的B矩阵缓冲器144以及要加载的目标B矩阵缓冲器中的行。加载操作部分还包括用于指示是否要执行加载操作的字段。LSE指令的存储操作部分包括标识下列项的字段:要存储的C矩阵缓冲器134中的数据在缓冲器118中的位置、保存要存储的数据的C矩阵缓冲器134以及目标C矩阵缓冲器134中包含要存储的数据的行。存储操作部分还包括用于指示是否要执行存储操作的字段。LSE指令的执行操作部分包括标识下列项的字段:目标C矩阵缓冲器134和目标C矩阵缓冲器134中要接收执行操作的结果的行,以及在存储在目标C矩阵缓冲器134中之前要对矩阵乘法的结果执行的操作。可以指定的操作包括=、+=、-=或无。=操作使得结果直接存储在指定行中而不进行任何更改。+=操作使结果中的元素加到指定行中的相应元素,其中加法的结果替换指定行的内容。-=操作使得结果中的元素被指定行中的相应元素减去,其中减法的结果替换指定行的内容。顾名思义,无操作指示不执行任何操作。例如,在执行矩阵乘法之前将数据初始加载到B矩阵缓冲器144期间,或者当将存储在C矩阵缓冲器134中的最终结果移出MMA104时,使用无操作。MMA104还包括可配置格式组件130、可配置格式组件136、可配置格式组件140,以分别用于格式化由MMA104输出的数据和输入到MMA104的数据。格式A组件136和格式B组件140可配置成根据指定类型诸如16位浮点型、16位固定有符号型、16位固定无符号型、8位固定有符号型和8位固定无符号型以及定点输入的Q点,即小数位数格式化相应的输入数据。格式C组件130可配置成根据指定类型诸如16位浮点型、16位固定有符号型、16位固定无符号型、8位固定有符号型和8位固定无符号型以及定点输出的Q点,即小数位数格式化输出数据。格式A组件136还可配置成定义查找表LUT,该查找表允许L2106中的A数据以4位精度存储以节省存储器并使用不需要统一的4位到16位的映射在A矩阵缓冲器138中扩展到16位精度。这对于所有计算原语均为有用的,并且对于CNN样式的2D卷积特别有用。MMA104还包括行偏移组件142,该偏移组件142可配置成指定要加载到B矩阵缓冲器144中的一行数据的每个元素的偏移。行偏移组件142存储三十二个五位偏移值,一行中的三十二个元素中的每个元素均有一个偏移值。行偏移组件142中指定的行偏移值可以用于将一行数据元素中的元素加载到与LSE指令的加载部分中指定的行号的不同的后台B矩阵缓冲器中的不同行中。将对应于数据元素的偏移值添加到在LSE指令的加载部分中指定的B矩阵缓冲器的行号,以确定将在其中加载数据元素的B矩阵缓冲器的行。数据元素的列号不受影响。更具体地,在MMA104的周期上,可以将新的数据行加载到后台B矩阵缓冲器中,即,未被用于执行的B矩阵缓冲器144。如果行偏移组件142中的用于该行数据中的所有元素的行偏移值为零,则数据元素将被加载到在该周期的LSE指令中指定的后台B矩阵缓冲器的行中。例如,当新的数据行加载到后台B矩阵缓冲器的第一行中时,第一个元素将被加载到行1列1,第二个元素将被加载到行1列2中,等等。然而,如果行偏移组件142中的行偏移值为非零,则加载相应数据元素的行由LSE指令中指定的行和行偏移值确定。例如,假设行偏移值为0、1、2,...31。当加载新的数据行时,其中在LSE指令中指定后台B矩阵缓冲器的第一行,第一个元素将被加载到行1列1中,第2个元素将被加载到行2列2中,第3个元素将被加载到行3列3中,等等。从而在后台B矩阵缓冲器中形成对角线。MMA104还包括可配置的非线性组件132,以用于将非线性应用于C矩阵缓冲器134的输出。所实施的非线性为整流线性单元ReLU,并且如果被激活,则按如下基本方式施加到C矩阵缓冲器134的输出:如果非线性组件132的输入为负,则将非线性组件132的输出设置为零,并且如果非线性组件132的输入为非负,则设将非线性组件132的输出设置为非线性的输入。在示例设备100中,处理器102为数字信号处理器DSP,其包括一级数据L1D高速缓存存储器112、二级L2统一指令和数据高速缓存存储器106以及两个流式传输引擎SE0和SE1108、110。在2017年3月28日发布的专利第US9,606,803号中描述此类处理器的示例,该专利通过引用并入本文。此外,在2017年10月26日公布的专利第US9,606,803号和专利申请公开第US20170308381号中描述流式传输引擎的示例,该专利通过引用并入本文。处理器102被配置成作为用于MMA104的输入数据源操作并且从MMA104接收输出数据。更具体地,处理器102被配置成在相应的寄存器文件120、寄存器文件126中从流式传输引擎接收用于MMA104的数据向量,以根据设备100正执行的基本计算原语的需要对数据应用格式化122,并且将数据向量存储在相应的缓冲器124、缓冲器128中以供MMA104使用。源A缓冲器124存储要加载到A矩阵缓冲器138中的数据,并且源B缓冲器128存储要加载到B矩阵缓冲器144中的数据。输入格式化122的示例包括零填充、偶数奇数向量生成、值复制、已知矩阵创建和链接操作。偶数奇数向量生成接收两个向量。如果选择偶数选项,则两个向量的所有偶数元素被用于创建用于输入到MMA104的输出向量。如果选择奇数选项,则两个向量的所有奇数元素被用于创建输出向量。例如,偶数奇数格式化对于快速傅里叶变换FFT和使用大于1的步幅的卷积有用。值复制格式化生成用于输入到MMA104的向量,其中从L2106读取的标量值被复制到向量的所有元素。例如,值复制对于偏差创建有用。已知矩阵创建格式化创建用于输入到MMA104的输出向量序列,这些序列一起形成公共已知矩阵模式,诸如单位矩阵。零填充格式化在输入到MMA104之前向向量添加零。链接操作获取MMA104的输出向量并将向量作为输入提供给MMA104以用于A矩阵缓冲器138或B矩阵缓冲器144。例如,链接操作对于Z=W*X*Y样式的操作有用。处理器102还被配置成在目的地C缓冲器118中从MMA104接收数据向量,以根据设备100正执行的基本计算原语的需要对数据应用格式化116,并将数据向量存储在寄存器文件114中。数据向量经由一级数据高速缓存112和二级统一高速缓存106存储到外部存储器未示出中。输出格式化116的示例包括接缝去除seamremoval、步幅去除、零填充和矩阵转置。流式传输引擎108、流式传输引擎110被配置成将数据元素流从二级高速缓存106传输到相应的寄存器文件120、寄存器文件126。流被定义为具有相同类型和大小的元素序列。流式传输引擎120、流式传输引擎126可编程以通过指定以下流属性来定义特定于基本计算原语的流:流的第一元素的地址、流中元素的大小和类型、流中数据的格式化以及与流相关联的地址序列,即访问元素以将它们放置在流中的寻址顺序。当流被打开时,流式传输引擎120、流式传输引擎126计算地址,从L2获取fetches定义的数据类型,执行任何指定数据类型格式化,诸如零扩展或符号扩展,将数据映射成向量,并将数据向量直接递送到相应的寄存器文件120、寄存器文件126。流式传输引擎108、流式传输引擎110的寻址序列允许多维存储器访问。因此,每个流式传输引擎120、流式传输引擎126根据遍历存储器的指针执行流的元素的寻址序列。每个流式传输引擎120、流式传输引擎126实施控制指针所采取的路径的多级参数化嵌套循环。在该嵌套循环中,循环层级的迭代计数指示该层级的循环重复的次数,并且循环层级的尺寸定义循环层级中指针位置之间的距离。最里面的循环即循环0消耗来自存储器的物理上连续的元素,并且具有一的隐式尺寸,并且指针在该循环层级中以连续的递增顺序从一个元素移动到另一个元素。在内部循环之外的每个层级中,循环基于为循环指定的尺寸大小将指针移动到新位置。这种寻址形式允许程序以少量参数中指定通过存储器的常规路径。表1示出具有六个层级的此类嵌套循环的示例伪代码。在该伪代码中,ICNTx为层级x的迭代计数,DIMx为层级x的尺寸,并且ELEM_BYTES为每个元素的大小以字节为单位。在其他示例中,嵌套循环可以具有更多或更少的层级。表1处理器102执行用于为设备100定义的每个基本计算原语的控制软件。控制软件根据执行基本计算原语的需要使得配置流式传输引擎108、流式传输引擎110和MMA104,控制MMA的执行,并使得应用基本计算原语所需的任何输入格式化122和或输出格式化116。图2为用于在设备100中执行基本计算原语的方法的流程图。最初,用于基本计算原语的控制软件配置200流式传输引擎108、流式传输引擎110以按所需顺序流式传输用于基本计算原语的数据元素。因此,控制软件将基本计算原语的流属性传送到流式传输引擎108、流式传输引擎110中的每一个。根据基本计算原语,可以使用一个或两个流式传输引擎。通常,流式传输引擎108被配置成流式传输用于A矩阵缓冲器138的数据元素,并且流式传输引擎110被配置成流式传输用于B矩阵缓冲器144的数据元素。本文描述了为不同的基本计算原语配置流式传输引擎108、流式传输引擎110的示例。控制软件还根据使用矩阵乘法执行基本计算原语的需要配置202MMA104。因此,控制软件根据基本计算原语的需要配置格式组件130、格式组件136、格式组件140、行偏移组件142和非线性组件132。本文描述了为不同的计算原语配置MMA104的示例。一旦配置完成,控制软件就启动204经配置的流式传输引擎108、经配置的流式传输引擎110并执行206经配置的基本计算原语。通常,为了执行基本计算原语,控制软件使MMA104执行一系列LSE指令以将数据元素加载到A矩阵缓冲器138和后台B矩阵缓冲器144中,执行A矩阵缓冲器138和前台B矩阵缓冲器144之间的矩阵乘法,将矩阵乘法的结果存储在所选C矩阵缓冲器134中,并将数据从后台C矩阵缓冲器134移动到缓冲器118。在将数据元素加载到缓冲器138、缓冲器144之前以及当结果从C矩阵缓冲器134移动到缓冲器118时,应用在MMA104中配置的任何格式化和偏移。作为基本计算原语的执行的一部分,控制软件还可以使得在处理器102上执行特定于基本计算原语的输入格式化122和输出格式化116。图3为示出图1的设备100中的批量小矩阵矩阵乘法的实施方式的示例。对于足够小的矩阵,通过多个被乘数矩阵X以对角式加载到B矩阵缓冲器144中并与加载到A矩阵缓冲器138中的相应乘数矩阵H相乘,可以在单个批量中执行多个矩阵乘法Y=H*X。如图3所示,假设被乘数矩阵为K×N并且相应的乘数矩阵为M×K,其中K、N和M小于32。批量大小T即可以以对角式加载到B矩阵缓冲器144中的被乘数矩阵X的数量为T=floor32maxK,N。因此,T个被乘数矩阵Xt,t=0,1,...,T-1可以以对角式加载到B矩阵缓冲器144中,并且将存在T个乘数矩阵Ht。为了执行该原语,将T个H矩阵存储在L2高速缓存106中,使得存在包含T个H矩阵中的每一个的第一行的T*K个连续元素随后为Zk个零,包含T个H矩阵中的每一个的第二行的T*K个连续元素随后为Zk个零,…,H矩阵中的每一个的第M行的T*K个连续元素随后为Zk个零,其中Zk=32-T*K。此外,T个X矩阵存储在L2高速缓存106中,使得存在包含T个X矩阵中的每一个的第一行的T*N个连续元素随后为ZN个零,包含T个X矩阵中的每一个的第二行的T*N个连续元素随后为ZN个零,…,T个X矩阵中的每一个的第M行的T*N个连续元素随后为ZN个零,其中ZN=32-T*N。流式传输引擎110被配置成从L2高速缓存106读取T个X矩阵的元素,并提供包含T个X矩阵的连续行的元素的向量,以用于加载到MMA104的B矩阵缓冲器144中。流式传输引擎108被配置成从L2高速缓存106读取T个H矩阵的元素,并提供包含T个H矩阵的连续行的元素的向量,以用于加载到A矩阵缓冲器138中。MMA104的行偏移组件140被配置成使得来自流式传输引擎110的每个向量中的行的元素以偏移t*K被加载到B矩阵缓冲器144中。因此,来自X0的行的元素以0的偏移量加载,来自Xl的行的元素以K的偏移量加载,来自X2的行的元素以2K的偏移量加载等。为了执行乘法,在MMA104上执行经适当配置的LSE指令,以用初始批量的X矩阵加载B矩阵缓冲器144。一旦加载B矩阵缓冲器,就执行另外的LSE指令以将相应H矩阵的行加载到A矩阵缓冲器138中,执行乘法,并将结果存储在C矩阵缓冲器134中。此外,如果要处理多个批量,则LSE指令还将将另一批量的X矩阵加载到后台B矩阵缓冲器144中,并将前一批量的结果从C矩阵缓冲器134移出MMA104。因此,为了执行批量小矩阵矩阵乘法,将T*K个元素加载到A矩阵缓冲器138中达M个周期,将T*N个元素加载到B矩阵缓冲器144中在除了初始批量之外都加载到后台B矩阵缓冲器144中达K个周期,并且T*N个元素被移出C矩阵缓冲器达M个周期。在其他示例中,流式传输引擎108、流式传输引擎110或输入格式化122被配置成在将向量存储在源A缓冲器124或源B缓冲器128中之前执行零填充,以将所需数量的零添加到每个向量,而不是将ZK和ZN个零存储在L2高速缓存106中。图4为示出图1的设备100中的大矩阵矩阵乘法Y=H*X的实施方式的示例,其中被乘数矩阵X和乘数矩阵H具有的尺寸大于B矩阵缓冲器144和A矩阵缓冲器138。该示例假设被乘数矩阵X的尺寸为32K×32N而乘数矩阵H的尺寸为32M×32K,即,这些矩阵的每个尺寸均可以被32整除。因此,Y矩阵的尺寸为32M×32N。矩阵X和矩阵H被分为32×32的瓦片tiles。因此,矩阵的瓦片Tm,n由行32*m:32*m+1-1和列32*n:32*n+1-1形成。如图4所示,一行H瓦片与一列X瓦片的矩阵乘法生成单个相应的Y瓦片,诸如通过将H的瓦片行1与X的瓦片列1进行矩阵相乘而生成的瓦片Y1,1。表2为示出由MMA104执行该原语的示例伪代码。伪代码假设流式传输引擎108被配置成从L2高速缓存106读取乘数矩阵H的元素并向A矩阵缓冲器138提供向量,使得H瓦片中的每行被加载N次,即H0,0:K-1被加载N次,H1,0:K-1被加载N次,H2,0:K-1被加载N次等。因此,H矩阵的所有行连续存储在L2高速缓存106中。流式传输引擎108被配置成加载以下序列N次:H0,0,H0,1,…,H0,K-1;然后加载以下序列N次:Hl,0,Hl,1,…,Hl,K-1;……;然后加载以下序列N次:HM-1,0,HM-1,1,...,HM-1,K-1。伪代码还假设流式传输引擎110被配置成从L2高速缓存106读取X瓦片的元素并且将每个X瓦片提供M次以加载到B矩阵缓冲器144中,即,加载序列[X0:K-1,0,...,X0:K-1,N-1]重复M次。因此,X矩阵的所有行连续存储在L2高速缓存106中。流式传输引擎110被配置成加载以下序列N次:X0,0,Xl,0,…XK-1,0,X0,1,Xl,1,...,XK-1,1,...,X0,N-1,X1,N-1,...,XK-1,N-1。在该伪代码中,Bback指B矩阵缓冲器144的当前后台缓冲器,Bfore指用于执行的当前前台缓冲器。表2图5为示出图1的设备100中的矩阵矩阵逐点乘法C=A.*B的实施方式的示例。在矩阵矩阵逐点乘法中,矩阵A、矩阵B、矩阵C的尺寸相同,诸如m×n,并且元素Cm,n为Am,n和Bm,n的乘积。在设备100中,C=A.*B可以实施为Ck,:=Ak,:*diagBk,:,k=0,...,31。因此,逐点乘法可以通过将B矩阵的每一行的元素依次以对角式加载到B矩阵缓冲器144中并且与加载到A矩阵缓冲器138中的A矩阵的相应行执行矩阵乘法来实施。图5中的示例对A矩阵和B矩阵的行m说明这一点,假设m=n=32。为了执行该原语,流式传输引擎110被配置成从L2高速缓存106读取B矩阵的元素,并依次提供B矩阵的每一行以加载到MMA104的B矩阵缓冲器144中。因此,来自流式传输引擎110的第一向量将包含B矩阵的第一行即行0,来自流式传输引擎的第二向量将包含B矩阵的第二行,等等。流式传输引擎108被配置成读取来自L2高速缓存106的A矩阵的元素并且依次提供A矩阵的每一行以加载到A矩阵缓冲器138中。因此,来自流式传输引擎108的第一向量将包含A矩阵的第一行即行0,来自流式传输引擎的第二向量将包含A矩阵的第二行,等等。MMA104的行偏移组件140被配置成使得B矩阵的行的元素以对角式加载到B矩阵缓冲器144中。因此,行元素的偏移被设置为范围从0到31的顺序值,使得行的第一元素被加载到行0列0中,第二元素被加载到行1列1中,第3元素加载到行2列2中,等等。为了执行逐点乘法,在MMA104上执行经适当配置的LSE指令以用B矩阵的初始行加载B矩阵缓冲器144。一旦加载B矩阵缓冲器,就执行另外的LSE指令以将A矩阵的相应行加载到A矩阵缓冲器138中,执行矩阵乘法,并将结果存储在C矩阵缓冲器134的相应行中。此外,LSE指令还将B矩阵的下一行加载到后台B矩阵缓冲器144中。将B矩阵的行加载到后台B矩阵中的对角线上、在前台B矩阵缓冲器上执行矩阵乘法、以及存储结果的过程被重复,直到已处理完B矩阵的所有行。然后执行将C矩阵缓冲器134的内容移出MMA104的LSE指令。图6为示出图1的设备100中的矩阵矩阵加法C=A+B的实施方式的示例。在矩阵矩阵加法中,矩阵A、矩阵B、矩阵C的尺寸相同,诸如m×m,并且元素Cm,n为Am,n和Bm,n之和。使用MMA104,C=A+B可以实施为C=A*I+B*I,其中I为单位矩阵。更具体地,如图6所示,C=A+B可以实施为C=A*I,接着为C+=B*I。此外,C=A+B可以实施为C=B*I,接着为C+=A*I。单位矩阵为方阵,其中主对角线的所有元素均为一,所有其他元素均为零。将给定矩阵乘以单位矩阵的效果为使给定矩阵保持不变。为了执行该原语,流式传输引擎108被配置成从L2高速缓存106读取A的元素并且依次提供A的每一行以加载到A矩阵缓冲器138中。输入格式化122被配置成生成要加载到B矩阵缓冲器144中的单位矩阵I的向量。在MMA104中执行经适当配置的LSE指令以将A的每一行加载到A矩阵缓冲器138中,在加载到A矩阵缓冲器138中的A的行与B矩阵缓冲器144中的单位矩阵之间执行矩阵乘法,并将结果存储在C矩阵缓冲器134的相应位置。在LSE指令中指定=操作,用于将结果存储在C矩阵缓冲器中。因此,A的每个元素不变地存储在C矩阵缓冲器中的相应位置。然后,流式传输引擎108被配置成从L2高速缓存106读取B的元素,并且依次提供B的每一行以加载到A矩阵缓冲器138中。在MMA104中执行经适当配置的LSE指令,以将B的每一行加载到A矩阵缓冲器138中,在加载到A矩阵缓冲器138中的B的行与B矩阵缓冲器144中的单位矩阵之间执行矩阵乘法,并将结果存储在存储A*I的结果的C矩阵缓冲器134的相应位置中。在LSE指令中指定+=操作,用于将结果存储在C矩阵缓冲器中,从而使得B的每个数据元素的值被加到存储在C矩阵缓冲器的相应位置中的A的相应元素的值。然后,执行将C矩阵缓冲器134的内容移出MMA的LSE指令。图7为示出在图1的设备100中的小向量矩阵乘法y=x*H的实施方式的示例。对于常数矩阵H,通过将H的多个副本以区块对角式加载到B矩阵缓冲器144中,将相应的x向量加载到A矩阵缓冲器138中,并执行矩阵乘法,可以在单个批量中计算乘以多个x向量的乘法。如图7所示,假设H为K×N矩阵并且每个x向量为1×K。批量大小T即可以以区块对角式加载到B矩阵缓冲器144中的H的副本的数量为T=floor32maxK,N。因此,可以将H的T个副本以区块对角式加载到B矩阵缓冲器144中,并且可以将相应的向量xt,t=0,1,...,T-1加载到A矩阵缓冲器138中。为了执行该原语,流式传输引擎108被配置成从L2高速缓存106读取T个对应的x向量的元素,并提供向量以用于加载到A矩阵缓冲器138中。因此,来自流式传输引擎108的向量包含x0,...xT-l的元素。经由流式传输引擎108对向量的加载类似于参考图3所描述的,其中M=1。流式传输引擎110被配置成从L2高速缓存106读取H矩阵的元素,并提供包含H矩阵的连续行的元素的向量,以用于加载到MMA104的B矩阵缓冲器144中。为了复制H矩阵,具有适当零填充的H矩阵的行的多个副本被连续存储在L2高速缓存106中。可替代地,输入格式化122或流式传输引擎110被配置成复制H的每一行T次并且添加适当的零填充。MMA104的行偏移组件140被配置成使得来自流式传输引擎110的每个向量中的行的元素以偏移t*K被加载到B矩阵缓冲器144中。因此,H矩阵的经复制的行0的元素以0的偏移量加载,H矩阵的经复制的行1的元素以K的偏移量加载,H矩阵的经复制的行2的元素以2K的偏移量加载,等等。为了执行乘法,在MMA104上执行经适当配置的LSE指令以用初始批量的经复制的H矩阵加载B矩阵缓冲器144。一旦加载B矩阵缓冲器,就执行另外的LSE指令以将相应的x向量的向量加载到A矩阵缓冲器138中,执行乘法,并将结果存储在C矩阵缓冲器134中。此外,如果要处理多个批量,则经适当配置的LSE指令将会将另一个向量加载到A矩阵缓冲器138中,执行乘法,并存储先前计算的向量。对于加载到A矩阵缓冲器138中的每个新向量,不需要重新加载B矩阵缓冲器144。图8为示出设备100中的小向量求和的实施方式的示例。向量求和可以表示为y=sumx,其中y为向量元素之和。对于足够小的向量,通过将多个x向量加载到A矩阵缓冲器144中,将“1”的向量的副本加载到B矩阵缓冲器144中的对角线上,并执行矩阵乘法,可以在单个批量中计算多个求和。如图8所示,假设每个x向量为1×K。批量大小T即可以加载到A矩阵缓冲器138中的向量的数量为T=floor32K。因此,xt,t=0,1,...,T-1可以加载到A矩阵缓冲器138中,并且全为“1”的K×1向量的T个副本应被加载到B矩阵缓冲器144中。为了执行该原语,流式传输引擎108被配置成从L2高速缓存106读取x向量的元素,并提供包含T个x向量的向量,以用于加载到的A矩阵缓冲器138中。因此,来自流式传输引擎108的向量包含向量x0,...xT-l。经由流式传输引擎108对向量的加载类似于参考图3所描述的,其中M=1。此外,输入格式化122被配置成生成要加载到B矩阵缓冲器144中的对角线上的全为“1”的K×1向量。为了执行求和,在MMA104上执行经适当配置的LSE指令,以用全为“1”的K×1向量的多个副本在对角线上加载B矩阵缓冲器144。一旦加载B矩阵缓冲器,就执行另外的LSE指令以将x0,...xT-l向量加载到A矩阵缓冲器138中,执行乘法,并将结果存储在C矩阵缓冲器134的行中。此外,如果要处理多个批量,则经适当配置的LSE指令将会将另一个向量加载到A矩阵缓冲器138中,执行乘法,并存储先前计算的向量。对于加载在A矩阵缓冲器138中的每个新向量,不需要重新加载B矩阵缓冲器144。图9为示出设备100中的仿射变换的实施方式的示例。仿射变换可以表示为y=x*H+v并且可以被计算为y=[x1]*[H;v]。如果矩阵H和向量v在多次变换上为常数,则通过将[H;v]的多个副本以区块对角式加载到B矩阵缓冲器144中,将相应的x向量加载到A矩阵缓冲器138中,并执行矩阵乘法,可以批量计算仿射变换。如图9所示,假设H为K-l×N矩阵,v为1×N,并且每个x向量为1×K-l。批量大小T即可以以区块对角式加载到B矩阵缓冲器144中的[H;v]的副本的数量为T=floor32maxK,N。因此,[H;v]的T个副本可以以区块对角式加载到B矩阵缓冲器144中,并且相应的向量xt,t=0,1,...,T-1可以加载到A矩阵缓冲器138中。为了执行该原语,流式传输引擎110被配置成从L2高速缓存106读取H矩阵和v的元素,并提供向量,以用于加载到MMA104的B矩阵缓冲器144中。为了复制与v级联的H矩阵,H的K-1行被连续存储在L2高速缓存106中,接着为一行v,并且输入格式化122被配置成复制该矩阵T次并添加Zn个零。可替代地,H的每一行的T个副本连续存储在L2高速缓存106中,每个后接着为Zn个零,然后v的T个副本连续存储在L2高速缓存106中,接着为Zn个零。流式传输引擎108被配置成从L2高速缓存106读取T个相应的x向量的元素,并提供向量以用于加载到A矩阵缓冲器138中。在一个示例中,xt的T个副本连续存储在L2高速缓存106中,并且输入格式化122被配置成在副本之间添加“1”并且在末尾处添加Zk个零。可替代地,xt的T个副本连续存储在L2高速缓存106中,其中在副本之间具有“1”并且在末尾处具有Zk个零。MMA104的行偏移组件140被配置成使得来自流式传输引擎110的每个向量中的元素以适当的偏移被加载到B矩阵缓冲器144中。例如,假设H的每个行的T个副本连续存储在L2高速缓存106中,每个接着为Zn个零,然后v的T个副本连续存储在L2高速缓存106中,接着为Zn个零,行偏移组件140被配置成使得[H;v]矩阵的经复制的行0的元素以0的偏移量加载,[H;v]矩阵的经复制的行1的元素以K的偏移量加载,[H;v]矩阵的经复制的行2的元素以2K的偏移量加载,等等。为了执行乘法,在MMA104上执行经适当配置的LSE指令以用初始批量的经复制的[H;v]矩阵加载B矩阵缓冲器144。一旦加载B矩阵缓冲器,就执行另外的LSE指令以将相应x向量的向量加载到A矩阵缓冲器138中,执行乘法,并将结果存储在C矩阵缓冲器134中。此外,如果要处理多个批量,则经适当配置的LSE指令将将另一个向量加载到在A矩阵缓冲器138中,执行乘法,并存储先前计算的向量。对于加载到A矩阵缓冲器138中的每个新向量,不需要重新加载B矩阵缓冲器144。图10为示出在设备100中的卷积神经网络CNN中使用的二维2D卷积Y=H⊙X的实施方式的示例。典型的卷积神经网络CNN包括一些数量的卷积和子采样层以提取特征,接着为如传统神经网络中使用的一个或多个完全连接层,以基于提取的特征执行分类。每个卷积层和每个子采样层的输出为一组特征映射,该特征映射为CNN中的下一层的输入。每个卷积层包括一些数量的滤波器,每个层的滤波器的大小和数量可以不同。滤波器与相应的特征映射卷积以产生对应于每个滤波器的特征映射。图10示出具有尺寸为Lr×Lc的Ni个输入特征映射1000的通用卷积层。输入特征映射1000与具有尺寸Fr×Fc的相应滤波器1002卷积,以生成具有尺寸Mr×Me的No个输出特征映射1004。为了使用MMA104执行2D卷积,将特征映射1000瓦片式拼接为尺寸Fr*Fc*Ni×Mr*Mc的滤波矩阵X1006。滤波矩阵X中的瓦片大小可以大也可以小,其中根据滤波器长度选择瓦片重叠。存在重叠是因为卷积对于输入大小为L和滤波器长度为F生成M=L-F+1输出。为滤波矩阵X1106中的瓦片选择大尺寸可以避免接缝,而对于小的瓦片大小,瓦片处理将接缝放在相同的位置以便由处理器102去除。大特征映射瓦片满足Lc=32*Bc+Fc-1并且小特征映射瓦片满足Lc32的卷积。对于小一维卷积,假设滤波器长度L在[1,32]中,并且输出对于n≥L-1有效。可以按下式在设备100中计算小一维卷积Ct,:=At,:*B,t=0,1,...其中At,:=[x33-L*t...x33-L*t+31]B=[hL-10][hL-2hL-1][......][h0h1][0h0][00...hL-10...0][.........][00h00...0]Ct,:=[y33-L*t+L-1...y33-L*t+310...0]在B中,所有行的最后的L-1列为零,而在C中,最后的L-1条目为零,并且变量t用于索引生成32-L输出的次数。为了执行一维卷积,流式传输引擎110被配置成从L2高速缓存106提供滤波器h的元素,以用33-L个滤波器副本初始加载B矩阵缓冲器144。h的多个副本存储在L2高速缓存106中,或者单个副本存储在L2高速缓存106中,并通过配置输入格式化122来复制。流式传输引擎108被配置成在每个周期从L2高速缓存106读取33-L个新的xn值并生成At,:。MMA104被配置用于向量矩阵乘法,并且在每个周期,MMA104计算Ct,:中yn的33-L个值。用于在设备100中计算大一维卷积滤波器的策略基于以下关于将大滤波器分解成两个较小滤波器片段的观察:设L=L1+L2h1τ=hτ,τ=0,...,L1-1h2τ=hτ+L1,τ=0,...,L2-1yn=∑hτ*xn-τ,=∑h1τ1*xn-τ1+∑h2τ2*xn–τ2–L1,其中τ=0,...,L-1;n=L-1,L,...并且τ1=0,...,L1-1;τ2=0,...,L2–1。使用上述分解的递归应用将滤波器h分成较小的片段,直到滤波器片段的大小尽可能最佳,即,将滤波器大小挑选为最大化MMA104的吞吐量和最小化滤波器总数之间的折衷。图14的曲线图示出滤波器片段大小与MMA104的吞吐量之间的折衷。如该曲线图所示,MMA104的最佳滤波器片段大小约为缓冲器138、缓冲器144的宽度的一半,即MMA104的计算原语大小的宽度的大约一半。在一些示例中,离线执行用于选择较小滤波器片段的大小的分解。在一些示例中,分解由处理器102执行。按上述等式进行适当移位的输入版本用相应的滤波器片段进行滤波,并将结果相加。如前所述,使用向量矩阵乘法来实施滤波。设备100还可以被配置成按y=h★x执行一维相关。相关与以时间反转顺序对滤波器系数进行卷积相同。因此,可以使用如前所述的小一维或大一维卷积来实施一维相关,其中输入格式化122被配置成在h或x任一者上执行时间反转。设备100还可以被配置成按C=A或C=B实施矩阵分配。因此,可以在MMA104中按C=A*I或C=I*B执行分配,其中I为单位矩阵。设备100还可以被配置成实施矩阵转置BT。矩阵的转置为一个新的矩阵,该新矩阵中的列为原始矩阵的行。为了执行转置操作,MMA104包括操作模式,即复制操作,其指定A矩阵缓冲器138中的元素将被复制到B矩阵缓冲器144的指定列。为了执行矩阵的转置,流式传输引擎108被配置成从L2高速缓存106读取矩阵的行的元素,并依次提供矩阵的每一行以加载到B矩阵缓冲器144中。因此,来自流式传输引擎108的第一向量将包含矩阵的第一行即行0,来自流式传输引擎的第二向量将包含矩阵的第二行,等等。然后执行经适当配置的LSE指令,该LSE指令加载来自缓冲器124的矩阵的行并将元素存储在B矩阵缓冲器144的连续列中。一旦已转置矩阵的所有行,就执行经适当配置的LSE指令以将B矩阵缓冲器的内容移动到C矩阵缓冲器134并且移出MMA104。其他示例本文已经描述其中处理器为DSP并且执行控制软件的示例,该控制软件配置设备100以执行基本计算原语并控制原语的执行。在其他示例中,耦合到设备100的主处理器执行用以执行基本计算原语所需的控制操作中的一些或全部。处理器可以为任何合适类型以及电子数据处理器的组合。例如,处理器可以为来自英特尔公司IntelCorp.或高级微设备公司AdvancedMicroDevices,Inc.的一个或多个处理器、一个或多个精简指令集计算机RISC、一个或多个专用集成电路ASIC、一个或多个数字信号处理器DSP等。本文已经描述其中MMA中的缓冲器尺寸为1×32或32×32的示例。在其他示例中,MMA中的缓冲器尺寸可以更小或更大。在所描述的实施例中,修改是可能的,并且在权利要求的范围内,其他实施例也是可能的。
权利要求:1.一种用于在设备中执行基本计算原语的方法,所述设备包括处理器和矩阵乘法加速器即MMA,所述方法包括:配置被包括在所述设备中的流式传输引擎以从存储器流式传输用于所述基本计算原语的数据;配置所述MMA以格式化所述数据;以及由所述设备执行所述基本计算原语。2.根据权利要求1所述的方法,其中执行所述基本计算原语还包括在使用第二被乘数矩阵缓冲器中的数据执行矩阵乘法的同时将数据加载到第一被乘数矩阵缓冲器中,所述第一被乘数矩阵缓冲器和所述第二被乘数矩阵缓冲器被包括在所述MMA中。3.根据权利要求1所述的方法,其中配置所述MMA还包括配置所述MMA以偏移被包括在所述MMA中的被乘数矩阵缓冲器中的加载数据。4.根据权利要求1所述的方法,其中所述数据包括矩阵的行,并且其中执行所述基本计算原语还包括将所述数据复制到被包括在所述MMA中的被乘数矩阵缓冲器中的列。5.根据权利要求1所述的方法,还包括配置所述处理器以将零填充添加到所述MMA的输出。6.根据权利要求1所述的方法,还包括配置所述处理器以对所述MMA的输出执行接缝去除。7.根据权利要求1所述的方法,还包括配置所述处理器以根据指定步幅对所述MMA的输出执行列子采样。8.根据权利要求1所述的方法,其中配置所述流式传输引擎还包括配置所述流式传输引擎以将多个特征映射的数据瓦片式拼接为滤波矩阵。9.根据权利要求8所述的方法,其中选择数据瓦片的大小,使得在所述MMA的所述输出中不存在接缝。10.根据权利要求8所述的方法,其中选择数据瓦片的大小,使得接缝始终在所述MMA的所述输出中的相同位置。11.根据权利要求1所述的方法,其中所述数据包括复数,其中所述复数的实部和虚部被交错存储在所述存储器中,并且所述方法还包括配置所述处理器以将每个复数分成所述实部和所述虚部,以用于加载到所述MMA中。12.根据权利要求1所述的方法,其中所述基本计算原语为快速傅里叶变换即FFT,并且执行所述基本计算原语还包括:将离散傅里叶变换矩阵即DFT矩阵加载到被包括在所述MMA中的乘数矩阵缓冲器中,并将数据矩阵加载到被包括在所述MMA中的被乘数矩阵缓冲器中,以对所述数据矩阵的列执行所述FFT;以及将所述数据矩阵加载到所述乘数矩阵缓冲器中并且将所述DFT矩阵加载到被乘数矩阵缓冲器中,以对所述数据矩阵的行执行所述FFT。13.根据权利要求1所述的方法,其中所述数据包括长度大于被包括在所述MMA中的被乘数矩阵缓冲器的宽度的滤波器,并且所述滤波器被分解成多个较小滤波器,其中所述较小滤波器的大小被挑选为在最大化所述MMA的所述吞吐量和最小化较小滤波器的总数之间的折衷。14.一种设备,其包括:存储器;处理器,其耦合到所述存储器;以及矩阵乘法加速器即MMA,其耦合到所述处理器,所述MMA包括乘数缓冲器和第一被乘数缓冲器,其中所述设备可操作以:配置被包括在所述设备中的流式传输引擎,以从所述存储器流式传输用于基本计算原语的数据;配置所述MMA以格式化所述数据;以及执行所述基本计算原语。15.根据权利要求14所述的设备,其中所述设备还可操作以执行所述基本计算原语,其中在使用被包括在所述MMA中的第二被乘数矩阵缓冲器中的数据执行矩阵乘法的同时将数据加载到所述第一被乘数矩阵缓冲器中。16.根据权利要求14所述的设备,其中所述设备还可操作以配置所述MMA以偏移所述第一被乘数矩阵缓冲器中的加载数据。17.根据权利要求14所述的设备,其中所述设备还可操作以执行所述基本计算原语,其中所述数据包括矩阵的行,并且所述数据被复制到所述第一被乘数矩阵缓冲器中的列。18.根据权利要求14所述的设备,其中所述设备还可操作以配置所述处理器以将零填充添加到所述MMA的输出。19.根据权利要求14所述的设备,其中所述设备还可操作以配置所述处理器以对所述MMA的输出执行接缝去除。20.根据权利要求14所述的设备,其中所述设备还可操作以配置所述处理器以根据指定步幅对所述MMA的输出执行列子采样。21.根据权利要求14所述的设备,其中所述设备还可操作以配置所述流式传输引擎以将多个特征映射的数据瓦片式拼接为滤波矩阵。22.根据权利要求21所述的设备,其中选择数据瓦片的大小,使得在所述MMA的输出中不存在接缝。23.根据权利要求21所述的设备,其中选择数据瓦片的大小,使得接缝始终在所述MMA的输出中的相同位置。24.根据权利要求14所述的设备,其中所述数据包括复数,其中所述复数的实部和虚部被交错存储在所述存储器中,并且所述设备还可操作以配置所述处理器以将每个复数分成所述实部和所述虚部,以用于加载到所述MMA中。25.根据权利要求14所述的设备,其中所述基本计算原语为快速傅里叶变换即FFT并且所述设备还可操作以执行所述基本计算原语,其中离散傅里叶变换矩阵即DFT矩阵被加载到所述乘数矩阵缓冲器中,并且数据矩阵被加载到所述第一被乘数矩阵缓冲器中,以对所述数据矩阵的列执行所述FFT;以及所述数据矩阵被加载到所述乘数矩阵缓冲器中,并且所述DFT矩阵被加载到所述第一被乘数矩阵缓冲器中,以对所述数据矩阵的行执行所述FFT。26.根据权利要求14所述的设备,其中所述数据包括长度大于所述第一被乘数矩阵缓冲器的宽度的滤波器,并且所述设备还可操作以将所述滤波器分解成多个较小滤波器,其中所述较小滤波器的大小被挑选为在最大化所述MMA的所述吞吐量和最小化所述较小滤波器的总数之间的折衷。
百度查询: 德克萨斯仪器股份有限公司 使用矩阵乘法加速器(MMA)实施基本计算原语
免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。