CN108780441B - 用于定点矩阵乘法的存储减少方法 - Google Patents
用于定点矩阵乘法的存储减少方法 Download PDFInfo
- Publication number
- CN108780441B CN108780441B CN201780017072.9A CN201780017072A CN108780441B CN 108780441 B CN108780441 B CN 108780441B CN 201780017072 A CN201780017072 A CN 201780017072A CN 108780441 B CN108780441 B CN 108780441B
- Authority
- CN
- China
- Prior art keywords
- intermediate result
- matrix
- fixed
- point data
- precision
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Molecular Biology (AREA)
- Computational Linguistics (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- General Health & Medical Sciences (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Neurology (AREA)
- Complex Calculations (AREA)
- Image Processing (AREA)
Abstract
实施例包括计算设备、装置、以及由该装置实现的用于计算设备上的定点矩阵乘法的存储减少的方法。计算设备可以采用全精度、使用第一矩阵的定点数据的第一块和第二矩阵的定点数据的第二块来实现部分矩阵乘法,产生第一中间结果。计算设备可以通过将第一中间结果的定点数据转换成采用低精度的定点数据,来对第一中间结果进行下变换,产生第一下变换的中间结果。
Description
背景技术
在移动设备上大量地使用深度神经网络来实现各种各样的任务,其包括场景检测、人脸识别、图像分类与标注。深度神经网络为了完成这些任务,频繁地使用卷积,卷积运算通常使用矩阵乘法来实现。深度神经网络模型被训练用于浮点运算。在移动设备上,诸如预测模型之类的深度神经网络模型现在也使用定点计算。但是,使用定点计算的深度神经网络模型的很多实现,需要使用额外存储量,其减少了移动设备的执行速度。
发明内容
各个实施例包括用于计算设备上的定点矩阵乘法的存储减少的电路和方法。各个实施例可以使用电路和/或执行处理器可执行指令的处理器来实现,其中处理器可执行指令执行包括以下各项的操作:采用全精度、使用第一矩阵的定点数据的第一块和第二矩阵的定点数据的第二块来实现部分矩阵乘法,其产生第一中间结果。随后,可以通过将第一中间结果的定点数据转换成采用低精度的定点数据,对第一中间结果进行下变换,其产生第一下变换的中间结果。
一些实施例可以包括:存储第一下变换的中间结果;采用全精度、使用第一矩阵的定点数据的第三块和第二矩阵的定点数据的第四块来实现部分矩阵乘法,其产生第二中间结果,其中第一块和第三块表示第一矩阵的至少一个完整行,第二块和第四块表示第二矩阵的至少一个完整列。可以通过将第二中间结果的定点数据转换成采用低精度的定点数据,对第二中间结果进行下变换,其产生第二下变换的中间结果。使用饱和加法,将第一下变换的中间结果和第二下变换的中间结果进行相加,该饱和加法将作为结果的矩阵的结果输出部分的大小限制于输出精度。
一些实施例可以包括:在第一时间段期间,接收定点数据的第一块和定点数据的第二块;以及在第二时间段期间,接收定点数据的第三块和定点数据的第四块。
在一些实施例中,对第一中间结果进行下变换可以包括:确定第一下变换的中间结果的最大可表示大小;保留在大小上等于或者小于第一下变换的中间结果的最大可表示大小的第一中间结果的保留部分;以及移除第一中间结果的丢弃部分,第一中间结果的丢弃部分包括第一中间结果中不能容纳于第一下变换的中间结果的最大可表示大小的部分。
在一些实施例中,确定第一下变换的中间结果的最大可表示大小可以包括:确定能够用于存储第一下变换的中间结果的存储器的量。
一些实施例可以包括:执行1与第一中间结果的丢弃部分的最左位的二进制加法;判断1与第一中间结果的丢弃部分的最左位的二进制加法的结果是否导致进位;以及响应于确定1与第一中间结果的丢弃部分的最左位的二进制加法导致进位,将该进位加到第一中间结果的保留部分的最右位上。
在一些实施例中,对第一中间结果进行下变换可以包括:使用等于输出精度的所述低精度,对第一中间结果进行下变换。
一些实施例包括被配置有处理器可执行指令的处理器,以执行上面所概述的实施例方法中的一个或多个的操作。一些实施例包括被配置为执行上面所概述的实施例方法中的一个或多个的操作的电路。
一些实施例包括一种计算设备,该计算设备具有用于执行上面所概述的实施例方法中的一个或多个的功能的单元。
各个实施例可以包括一种其上存储有处理器可执行指令的非临时性处理器可读存储介质,所述处理器可执行指令被配置为使处理器执行上面所概述的实施例方法中的一个或多个的操作。
附图说明
被并入本文并且构成本说明书一部分的附图,描绘了各个实施例的示例性实施例,并且连同上面给出的概括描述以及下面给出的具体实施方式一起来用于解释本发明的特征。
图1是示出了适合于实现一个实施例的计算设备的组件框图。
图2是示出了适合于实现一个实施例的示例性多核处理器的组件框图。
图3A-3F是示出了根据一个实施例的示例性矩阵乘法的示意图。
图4是示出了根据一个实施例,用于实现定点矩阵乘法的存储减少的方法的处理流程图。
图5是示出了根据一个实施例,用于实现对部分矩阵乘法的中间结果进行下变换的方法的处理流程图。
图6是示出了根据一个实施例的示例性矩阵乘法组件的组件框图。
图7是示出了适合于结合各个实施例使用的示例性移动计算设备的组件框图。
图8是示出了适合于结合各个实施例使用的示例性移动计算设备的组件框图。
图9是示出了适合于结合各个实施例使用的示例性服务器的组件框图。
具体实施方式
现在参照附图来详细地描述各个实施例。在可以的地方,贯穿附图使用相同的附图标记来指代相同或者类似的部件。对于特定示例和实现的引用只是用于说明目的,而不是旨在限制权利要求的范围。
本文可互换地使用术语“计算设备”和“移动计算设备”来指代下面中的任何一项或者全部:蜂窝电话、智能电话、个人或移动多媒体播放器、个人数据助理(PDA)、膝上型计算机、平板计算机、可转换膝上型计算机/平板设备(2合1计算机)、智能本、超级本、上网本、掌上计算机、无线电子邮件接收机、具备多媒体互联网功能的蜂窝电话、移动游戏控制台、无线游戏控制器、以及包括存储器和多核可编程处理器的类似个人电子设备。此外,术语“计算设备”还可以指代包括以下各项的静止计算设备:个人计算机、桌面型计算机、一体式计算机、工作站、超级计算机、大型主机计算机、嵌入式计算机、服务器、家庭影院电脑和游戏控制台。尽管各个实施例对于诸如智能电话之类的移动计算设备(其具有有限的存储器和电池资源)特别有用,但这些实施例通常也可用于实现多个存储器设备和有限的功率预算的任何电子设备,其中,减少处理器的功耗能够延长移动计算设备的电池工作时间。
实施例包括用于实现减少或者消除使用定点计算的深度神经网络模型的额外存储需求的该方法的方法、系统和设备。实施例包括用于阻塞和舍入定点计算以仿真更高精度解,而不会产生更高精度解的存储成本,从而在对计算准确性具有最小影响的情况下,提高执行速度的方法。
在定点神经网络中,可以通过直接转换或者缩放,来完成将浮点转换成定点。对于直接转换而言,计算所需的整数和小数的位数,针对每者的位数是基于所期望的性能来选择的。对于缩放而言,所有数字被缩放为一定范围内的正整数,并使用偏差来调整该范围所落入的区间。
当使用缩放时,输入通常按照比偏差更低的精度,并且用于实现矩阵乘法的累加,必须按照比矩阵乘法的输入或输出更高的精度来完成。例如,输入和输出中的每者可以是8位,但计算的中间步骤的精度可以是32位,这需要将输出下变换到8位。将用于定点计算的相对于浮点计算的更高精度要求和利用高速缓存来实现矩阵乘法的处理器阻塞技术进行组合,需要将部分中间结果存储在存储器中,这是由于必须使高速缓存空闲以便完成中间运算。实现这些操作所需的额外存储量,取决于用于进行相乘的矩阵的M和N维度的高速缓存块大小。这在图3A中进行了示出,并在下面更详细地讨论。因此,需要更多的存储器,这降低了计算设备的性能/速度。
各个实施例和实现能够减少或者消除存储这些中间结果所需的存储量。这些中间结果可以是通过将矩阵A的块(其由用于维度M和K的高速缓存块大小来定义)与矩阵B的块(其由用于维度K和N的高速缓存块大小来定义)进行相乘来产生的。与维度M、K和N相比,高速缓存块大小可以更小。举例而言,维度K可以是时间的维度,维度M和N可以是数据大小的维度。
可以使用累加函数将矩阵A和B的各个元素的相乘结果进行相加以产生中间结果,来实现这些矩阵的块的矩阵乘法。可以使用全精度,针对矩阵A和B的块、用于维度K和M或N的高速缓存块大小的大小,来实现乘法和累加。无论是准备根据中间结果来产生矩阵乘法的输出部分,还是将中间结果存储在存储器中,都可以将中间结果下变换到更低精度格式。例如,可以将中间结果从32位定点值向下变换成16位定点值。可以将该变换的结果舍入或者截断成可通过更低精度格式来表示的最近值。
可以将矩阵A和B的块的第一集合的矩阵乘法的下变换的中间结果存储在存储器中,以便稍后用于使用矩阵A和B的第二集合的块的矩阵乘法的下变换的中间结果,来完成矩阵乘法。
为了根据存储在存储器中的中间结果来产生输出,可以使用饱和加法,将矩阵A和B的第一集合和第二集合的块的矩阵乘法的中间结果相加在一起,将输出的值限制在指定的范围之内。
计算定点矩阵乘法所需的额外的存储量(其需要与输入或输出相比更高精度的中间值),可以使用下式来计算:
额外的存储=M块*N块*中间精度大小
因此,在对中间结果进行下变换之后,与全精度相比,中间精度大小可以减少所需的额外的存储量。使用等于输出精度大小的中间精度大小,可以不会导致额外的存储需求。
图1示出了适合于结合各个实施例使用的一种系统,其包括被配置为与远程计算设备进行通信的计算设备10。计算设备10可以包括具有处理器14、存储器16、通信接口18和贮存存储器接口20的片上系统(SoC)12。该计算设备10还可以包括诸如有线或无线调制解调器之类的通信组件22、贮存存储器24、用于建立无线通信链路的天线26。处理器14可以包括各种各样的硬件内核(例如,多个处理器内核)中的任何一种。
本文使用术语“片上系统”(SoC)指代一组相互连接的电子电路,其通常包括但不限于:硬件内核、存储器和通信接口。硬件内核可以包括各种不同类型的处理器,例如,通用处理器、中央处理单元(CPU)、数字信号处理器(DSP)、图形处理单元(GPU)、加速处理单元(APU)、辅助处理器、单核处理器和多核处理器。此外,硬件内核还可以体现其它硬件和硬件组合,例如,现场可编程门阵列(FPGA)、专用集成电路(ASCI)、其它可编程逻辑器件、分离门逻辑器件、晶体管逻辑器件、性能监测硬件、看门狗硬件和时间基准。可以对集成电路进行配置,使得集成电路的组件位于单片的半导体材料(例如,硅)上。SoC 12可以包括一个或多个处理器14。计算设备10可以包括一个以上的SoC 12,从而增加处理器14和处理器内核的数量。此外,计算设备10还可以包括与SoC 12不相关联的处理器14。各个处理器14可以是如下面参照图2所描述的多核处理器。处理器14中的每一个可以被配置为用于特定目的,其可以与计算设备10的其它处理器14相同或者不同。可以将相同或不同配置的处理器14和处理器内核中的一个或多个组合在一起。一组处理器14或处理器内核可以称为多处理器簇。
SoC 12的存储器16可以是被配置为存储由处理器14进行访问的数据和处理器可执行代码的易失性或者非易失性存储器。计算设备10和/或SoC12可以包括被配置为用于各种目的的一个或多个存储器16。在一个实施例中,一个或多个存储器16可以包括诸如随机存取存储器(RAM)或主存储器或者高速缓存存储器的易失性存储器。这些存储器16可以被配置为临时地保持有限数量的从数据传感器或子系统接收的数据、从非易失性存储器请求的数据和/或处理器可执行代码指令、基于各种因素而预期未来访问的从非易失性存储器加载到存储器16的数据、和/或由处理器14产生的中间处理数据和/或处理器可执行代码指令、以及临时地存储以便未来快速访问而无需存储在非易失性存储器中的数据。
存储器16可以被配置为至少临时地存储从另一个存储器设备(例如,另一个存储器16或贮存存储器24)加载到存储器16,以便由处理器14的一个或多个处理器进行访问的数据和处理器可执行代码。可以响应于处理器14对于某个功能的执行,对用于加载到存储器16的数据或处理器可执行代码进行加载。响应于某个功能的执行,将数据或处理器可执行代码加载到存储器16,可以源自于不成功或者未命中的针对存储器16的存储访问请求(由于所请求的数据或处理器可执行代码不位于存储器16中)。响应于未命中,可以进行针对另一个存储器16或贮存存储器24的存储访问请求,以便将所请求的数据或处理器可执行代码从另一个存储器16或贮存存储器24加载到存储器设备16中。响应于某个功能的执行,将数据或处理器可执行代码加载到存储器16,可以源自于针对另一个存储器16或贮存存储器24的存储访问请求,可以将数据或处理器可执行代码加载到存储器16中以便稍后访问。
在一个实施例中,存储器16可以被配置为至少临时地存储从原始数据源设备(例如,传感器或子系统)加载到存储器16的原始数据。原始数据可以从原始数据源设备流传输到存储器16,并由该存储器进行存储,直到机器学习加速器可以接收和处理该原始数据为止,如本文进一步参照图3-9所讨论的。
贮存存储器接口20和贮存存储器24可以一致地工作,以允许计算设备10将数据和处理器可执行代码存储在非易失性存储介质上。可以非常类似于存储器16的实施例,对贮存存储器24进行配置,其中,贮存存储器24可以存储用于由处理器14中的一个或多个处理器进行访问的数据或者处理器可执行代码。即使在计算设备10的电源已经被关闭之后,贮存存储器24(其是非易失性的)也可以保持该信息。当电源被再次打开,计算设备10重新启动时,计算设备10可获得贮存存储器24上存储的该信息。贮存存储器接口20可以控制针对贮存存储器24的访问,并且允许处理器14从贮存存储器24读取数据和向贮存存储器24写入数据。
可以对计算设备10的组件中的一些或全部组件进行不同地排列和/或组合,同时仍然供应必要的功能。此外,计算设备10可以不限于这些组件中的每一组件的一个,在计算设备10的各个配置中可以包括每一组件的多个实例。
图2示出了适合于实现一个实施例的多核处理器14。多核处理器14可以具有多个同构或者异构的处理器内核200、201、202、203。处理器内核200、201、202、203可以是同构的,其在于:单个处理器14的处理器内核200、201、202、203可以被配置为用于相同目的,并且具有相同或类似的性能特性。例如,处理器14可以是通用处理器,并且处理器内核200、201、202、203可以是同构的通用处理器内核。替代地,处理器14可以是图形处理单元或者数字信号处理器,并且处理器内核200、201、202、203可以分别是同构的图形处理器内核或者数字信号处理器内核。为了便于引用起见,本文可以互换地使用术语“处理器”和“处理器内核”。
处理器内核200、201、202、203可以是异构的,其在于:单个处理器14的处理器内核200、201、202、203可以被配置为用于不同的目的,和/或具有不同的性能特性。这些异构处理器内核的异质性可以包括不同的指令集架构、管道、操作频率等等。这些异构处理器内核的例子可以包括称为“big.LITTLE”架构的架构,在该架构中,可以将慢速、低功率处理器内核与更强大和更耗电的处理器内核相耦合。在类似的实施例中,SoC 12可以包括多个同构或异构处理器14。
在图2所示出的例子中,多核处理器14包括四个处理器内核200、201、202、203(即,处理器内核0、处理器内核1、处理器内核2和处理器内核3)。为了便于解释起见,本文的例子可以指代图2中所示出的四个处理器内核200、201、202、203。但是,图2中所示出和本文所描述的四个处理器内核200、201、202、203只是提供成一个例子,决不意味着将各个实施例限制于四核处理器系统。与本文所示出和描述的四个处理器内核200、201、202、203相比,计算设备10、SoC 12或多核处理器14可以各自地或者组合地包括更少或者更多的处理器内核。
图3A-3F示出了根据一个实施例,矩阵乘法的非限制性示例。该示例性矩阵乘法涉及矩阵A 300与矩阵B 302的相乘或者点积,以产生作为结果的矩阵304。
矩阵300、302可以具有独立的维度M和N,其每者与被指定用于相应矩阵300、302的相应高速缓存块大小有关。矩阵300、302可以具有共享维度K,举例而言,该共享维度K可以是时间的维度。例如,维度K可以与在接收输入数据来处理矩阵A300时使用的时间量或者时钟循环有关。因此,对于矩阵A300而言,计算设备可以获取、产生或者接收输入数据,并将任何给定时间K的输入数据表示成矩阵A300的列(一列等于维度M的大小)。
在执行矩阵乘法时,计算设备可以在与矩阵A 300的相应列相同的时间K内,产生或者提供表示成矩阵B 302的行的一组加权因子。因此,随着时间流逝,可以沿着维度K来构建和遍历矩阵300、302。作为结果的矩阵304可以具有维度M和N的大小。
在一些实现中,与维度M、N和K相比,用于矩阵300、302的维度M、N和K的高速缓存块大小可以更小。可以根据被指定用于或者可用于执行矩阵乘法的每一个维度的高速缓存的量,来确定高速缓存块大小。高速缓存块大小可以限制在矩阵乘法的执行期间,矩阵300、302的每一个矩阵中能够存储到高速缓存上的数据的量。用于维度M、N和K中的任何一个维度的高速缓存块大小,可能导致用于执行矩阵乘法的多步骤处理。
例如,在图3B中,矩阵A300的部分306a和矩阵B 302的部分308a,指示用于M、N和K的维度的高速缓存块大小。对于矩阵A 300而言,用于维度M的高速缓存块大小可以是3个单位,用于维度K的高速缓存块大小可以是两个单位。类似地,对于矩阵B 302而言,用于维度N的高速缓存块大小可以是5个单位,用于维度K的高速缓存块大小可以是与用于矩阵A300的维度K的高速缓存块大小相同的大小(即,两个单位)。
可以以各种单位(其包括比特、字节、字等等),来测量高速缓存块大小的单位和矩阵300、302的维度M、N、K的单位。为了便于方便和简短起见,用于每一个维度M、N和K的高速缓存块大小与M、N和K的维度之比示出成2:1的比率。但是,用于每一个维度M、N和K的高速缓存块大小与M、N和K的维度之比可以是任何比率,它们可以是彼此之间相同或者不同的。此外,可以将矩阵300、302的数据格式化成浮点数据。
图3C示出了分别使用矩阵300、302的块306a、308a的部分矩阵乘法的实现。矩阵300、302的块306a、308a可以存储在高速缓存中,乘法和加法/累加操作可以使用块306a、308a的信息来实现部分矩阵乘法。
图3C中的例子描绘了部分矩阵乘法的一种操作,其示出了块306a的行310与块308a的列312的相乘。使用通用矩阵乘法技术,可以将行310的每一个单位与列312的相应单位进行相乘,将乘法的结果相加以产生该操作的中间结果314。可以针对从矩阵300、302的浮点数据转换来的矩阵300、302的定点数据,采用全精度来实现产生该中间结果314的乘法和加法/累加。与行310和列312中的任意一个相比,中间结果314可以更大。由于中间结果314是部分矩阵乘法的结果,因此该中间结果并不是准备进行输出的数据。在图3的例子中,要成为完整的输出部分,中间结果还缺少来自于与块306a的行相对应的矩阵A300的剩余行和与块308a的列相对应的矩阵B 302的剩余列的数据。因此,必须对中间结果314进行存储。
可以将中间结果314向下变换到更小大小的定点值,以便减少所需的存储空间量。在从更高精度定点变换到更低精度定点时,计算矩阵乘法所需的额外的存储量,可以通过下式来计算:额外的存储=M块*N块*中间精度大小。
使用更小的下变换的中间精度大小来替换中间精度大小,可以减少所需的额外的存储量。在各种实现中,可以基于可用高速缓存存储器的量或者专用寄存器的大小和/或指定的准确性水平,来确定大小减少量。中间结果314向下变换到的大小越小,则数据出错的可能性就越高。因此,为了性能和准确性起见,可以对中间结果314向下变换到的大小进行平衡,或者在各种应用中,可以偏向一个或另一个。下变换的中间精度大小等于用于矩阵乘法的输出精度的大小,可以消除对额外的存储器来存储值的需求,这些值可以稍后从定点中间结果精度向下变换到更低精度定点输出。
为了对全精度进行下变换,可以基于用于存储中间结果314的空间量,将定点中间结果314、中间结果314的部分移去数据的低端,达到可表示的大小。下变换的中间结果316a、316b、316c可以包括中间结果的保留部分318a、318b、318c,它们可以是在移去中间结果的丢弃部分320a、320b、320c之后剩下的。可用的高速缓存或寄存器空间越大,或者指定的准确性越大,则中间结果的保留部分318a、318b、318c就越大,中间结果的丢弃部分320a、320b、320c越小。类似地,可用的高速缓存或寄存器空间越小,或者指定的准确性越小,则中间结果的保留部分318a、318b、318c就越小,中间结果的丢弃部分320a、320b、320c越大。
下变换的中间精度大小可以是中间结果的保留部分318a、318b、318c的大小。下变换可以包括:将中间结果的丢弃部分320a、320b、320c移去,其导致截断的中间结果的保留部分318a、318b、318c。此外,下变换还可以包括:通过向中间结果的丢弃部分320a、320b、320c的最左位加上被设置为“1”的二进制位,来进行舍入。“0”和“1”的相加可以导致“1”的值,其可以与中间结果的丢弃部分320a、320b、320c一起丢弃,这导致对中间结果的保留部分318a、318b、318c向下舍入。“1”和“1”的相加可以导致具有进位“1”的“0”值。可以将该“0”位与中间结果的丢弃部分320a、320b、320c一起丢弃,将进位“1”加到中间结果的保留部分318a、318b、318c的最右位上,这导致对中间结果的保留部分318a、318b、318c向上舍入。舍入可以减少仅仅对下变换的中间结果316a、316b、316c进行截断时的错误量。
可以分别针对矩阵300、302的下一个可用块306b、308b,重复本文所描述的部分矩阵乘法的过程,如图3D中所示。此外,还可以将下一个可用块306b、308b的部分矩阵乘法的下变换的中间结果,存储在可用的高速缓存或者专用寄存器中。
如图3E中所示,随着矩阵300、302的可用块306c、308c变得可用,可以分别针对它们来实现部分矩阵乘法。还可以将块306c、308c的部分矩阵乘法的下变换的中间结果,存储在可用的高速缓存或者专用寄存器中。可以使用饱和加法,对块306a、306c、308a、308c的部分矩阵乘法的存储的下变换的中间结果进行组合。针对块306a、306c、308a、308c的部分矩阵乘法的下变换的中间结果进行饱和加法所获得的和,可以产生作为结果的矩阵304的输出部分322a。饱和加法可以对输出部分322a的大小进行限制以维持输出精度。
如图3F中所示,可以对矩阵300、302的剩余块306d、308d进行操作,以实现针对矩阵300、302的矩阵乘法的部分矩阵乘法的最终实现。根据部分矩阵乘法的该最终实现来产生下变换的中间结果,可以通过使用下变换的中间结果,实现饱和加法来产生输出部分322b、322c、322d,来提供上一次的下变换的中间结果来完成作为结果的矩阵304。
在各种实现中,可以根据可组合以产生作为结果的矩阵304的输出部分的下变换的中间结果的可用性,来实现饱和加法。在各种实现中,可以根据用于矩阵乘法的所有的下变换的中间结果的可用性,来实现饱和加法。在各种实现中,可以以任何顺序来产生作为结果的矩阵304的输出部分。
图4示出了根据各个实施例,用于针对定点矩阵乘法的存储减少的实施例方法400。可以利用在处理器(例如,图1和图2中的处理器14)中执行的软件、利用专用硬件或电路、或者处理器和专用硬件的组合(比如,在包括其它单个组件的机器学习设备中执行软件的处理器),在计算设备中实现方法400。为了涵盖在各个实施例中启用的替代配置,本文将实现方法400的硬件称为“计算设备”。
在方框402中,计算设备可以接收、获取或者产生用于矩阵A和矩阵B的数据。例如,矩阵A的数据可以包括在任何给定的时间K,由计算设备获取、产生或者接收的用于进行处理的浮点输入数据。例如,矩阵B的数据可以包括在相同的时间K内,接收、产生或者接收的一组浮点加权因子。可以将矩阵A的浮点输入数据和矩阵B的浮点加权因子变换成定点格式。
在方框404中,计算设备可以采用全精度,针对矩阵A和矩阵B的数据块,实现部分矩阵乘法。这些数据块可以包括矩阵A和矩阵B的一行或多行和一列或多列,但其小于矩阵A和矩阵B的所有行和所有列。矩阵A和矩阵B的行数和列数,可能受到被分配给用于实现矩阵A和矩阵B的矩阵乘法的高速缓存空间的量的限制,具体而言,受到被分配用于矩阵A和矩阵B中的一个的行、矩阵A和矩阵B中的另一个的列、以及与时间维度K有关的矩阵A和矩阵B的行或列的空间量的限制。计算设备可以通过采用全精度来实现针对矩阵A和矩阵B的块的矩阵乘法,使得作为结果的中间矩阵的每一个元素是全精度下的部分矩阵乘法的定点中间结果,来在方框404中实现部分矩阵乘法。
在方框406中,计算设备可以将全精度下的部分矩阵乘法的定点中间结果下变换到更低精度的定点下变换的中间结果。在下面参照图5,描述了用于将全精度下的定点中间结果下变换到更低精度的定点下变换的中间结果的实施例方法500。
在方框408中,计算设备可以存储下变换的中间结果。计算设备可以使用专用高速缓存空间或者专用寄存器来存储下变换的中间结果。如上所述,可用于存储下变换的中间结果的空间量,可以影响下变换的中间结果的精度。此外,可用于存储下变换的中间结果的空间量,可以与指定的性能和/或准确性相关。可用于存储下变换的中间结果的空间越多,则矩阵乘法的结果准确性越高,但用于实现该矩阵乘法的执行速度就越慢。类似地,可用于存储下变换的中间结果的空间越少,则矩阵乘法的结果准确性越低,但用于实现该矩阵乘法的执行速度就越快。
计算设备可以继续在方框404中,采用全精度,针对矩阵A和矩阵B的数据块来实现部分矩阵乘法,或者在方框402中,接收、获取和/或产生用于矩阵A和矩阵B的数据。
同时地,在判断框410中,计算设备可以判断下变换的中间结果是否是可组合的。为了可组合,下变换的中间结果可以是涉及下面的块的部分矩阵乘法的结果:这些块表示来自矩阵A和矩阵B中的一个的至少完整行,以及来自矩阵A和矩阵B中的另一个的至少完整列。这样一来,这些下变换的中间结果可以表示:针对来自矩阵A和矩阵B中的一个的至少完整行和来自矩阵A和矩阵B中的另一个的至少完整列的矩阵乘法的下变换的中间结果的完整集合。
响应于确定下变换的中间结果是不可组合的(即,判断框410=“否”),计算设备可以继续在方框404中,采用全精度,针对矩阵A和矩阵B的数据块来实现部分矩阵乘法,或者在方框402中,接收、获取和/或产生用于矩阵A和矩阵B的数据。
响应于确定下变换的中间结果是可组合的(即,判断框410=“是”),在方框412中,计算设备可以使用饱和加法,对这些可组合的下变换的中间结果进行相加。该饱和加法可以被配置为对作为结果的矩阵的作为结果的输出部分的大小进行限制,以维持输出精度。在方框414中,计算设备可以输出作为结果的矩阵的输出部分。
图5示出了根据各个实施例,用于对部分矩阵乘法的中间结果进行下变换的实施例方法500。可以利用在处理器(例如,图1和图2中的处理器14)中执行的软件、利用通用硬件或者专用硬件(比如,在包括其它单个组件的机器学习设备中执行软件的处理器),在计算设备中实现方法500。为了涵盖在各个实施例中启用的替代配置,本文将实现方法500的硬件称为“计算设备”。
可以将方法500实现成参照图4所描述的方框406的操作的一部分。在方框502中,计算设备可以确定用于更低精度的下变换的中间结果的最大可表示大小。该可表示大小可以取决于专用于存储下变换的中间结果的高速缓存或寄存器空间的量。专用于存储下变换的中间结果的高速缓存或寄存器空间的量,可以对于其中存储的数据的大小施加限制,而可以减小下变换的中间结果的大小,以适合于高速缓存或寄存器的空间。可以将下变换的中间结果划分成下变换的中间结果的保留部分和下变换的中间结果的丢弃部分。下变换的中间结果的保留部分可以包括用于更低精度的下变换的中间结果的最大可表示大小,并表示中间结果中的可以适合于高速缓存或寄存器的空间的部分。下变换的中间结果的丢弃部分可以表示中间结果中的不能适合于高速缓存或寄存器的空间的部分。
在可选框504中,计算设备可以通过将二进制“1”位加到下变换的中间结果的丢弃部分的最左位,来对用于更低精度的下变换的中间结果的最大可表示大小进行舍入。“0”和“1”的相加可以导致“1”的值,其可以与中间结果的丢弃部分进行一起丢弃,这导致对中间结果的保留部分向下舍入。“1”和“1”的相加可以导致具有进位“1”的“0”值。可以将该“0”位与中间结果的丢弃部分进行一起丢弃,将进位“1”加到保留的中间结果的最右位上,这导致对保留的中间结果的保留部分的舍入。舍入可以减少仅仅对下变换的中间结果进行截断时的错误量。
在可选的判断框506中,计算设备可以判断将二进制“1”位加到下变换的中间结果的丢弃部分的最左位上的结果(在可选框504中)是否导致进位。
响应于确定将二进制“1”位加到下变换的中间结果的丢弃部分的最左位上(在可选框504中)导致进位(即,可选的判断框506=“是”),在可选框508中,计算设备可以将该进位加到保留的中间结果的保留部分的最右位上。
在可选框508中,将进位加到保留部分的最右位上之后,或者响应于确定将二进制“1”位加到下变换的中间结果的丢弃部分的最左位上(在可选框504中)没有导致进位(即,可选的判断框506=“否”),在方框510中,计算设备可以移除该下变换的中间结果的丢弃部分。可以通过将下变换的中间结果的丢弃部分的位移去,来完成对下变换的中间结果的丢弃部分的移除。
图6示出了用于在专用硬件(例如,电路或者硬件组件)中,实现各个实施例的示例性矩阵乘法组件600。在各个实施例中,矩阵乘法组件600可以实现参照图4所描述的方法400和参照图5所描述的方法500。矩阵乘法组件600可以是包括输入缓冲区602、全精度矩阵乘法器604、下变换器606、中间结果识别器608、饱和加法器610和输出缓冲区612的硬件组件或者电路。
输入缓冲区602可以被配置为接收用于进行相乘的矩阵的部分数据。矩阵的部分数据表示矩阵的数据的一行或一列的全部或者一部分,例如,如本文参照图3A-3F所描述的矩阵A300的部分306a-306d和矩阵B 302的部分308a-308d。在各种实现中,可以将输入缓冲区602划分成被指定用于特定矩阵的数据的一些部分。在各种实现中,可以实现多个输入缓冲区602,并指定其用于特定矩阵的数据。输入缓冲区602可以保持数据的这些部分,直到全精度矩阵乘法器604准备好使用由输入缓冲区602所保持的数据部分进行操作为止。
全精度矩阵乘法器604可以被配置为执行这些数据部分的相乘和相加,以产生全精度的中间结果,例如,参照图3C所描述的中间结果314。由全精度矩阵乘法器604所实现的矩阵乘法可以表示:进行相乘的矩阵的所有数据的更大矩阵乘法的部分。
下变换器606可以被配置为将中间结果314下变换到相对于中间结果314的全精度的更低精度。下变换器606可以将中间结果314的部分(例如,参照图3C所描述的中间结果的丢弃部分320a-320c)移去,而保留中间结果314的其它部分(例如,参照图3C所描述的中间结果的保留部分318a-318c)。下变换可以导致具有最近可表示值的下变换的中间结果(例如,截断的中间结果的保留部分318a-318c)。此外,下变换器606还可以对中间结果的保留部分进行舍入,以产生下变换的中间结果。
可以将下变换的中间结果存储在高速缓存存储器的一部分或者工作缓存614(其可以是参照图1所描述的存储器16的一部分)中。中间结果识别器608可以识别能被组合以生成矩阵乘法的输出部分的下变换的中间结果,例如,参照图3E和3F所描述的输出部分322a-322d。中间结果识别器608可以从工作缓存614获取这些下变换的中间结果。换言之,中间结果识别器608可以获取矩阵的各个部分(它们表示这些矩阵中的一个矩阵的至少完整列和另一个矩阵的完整行)的矩阵乘法的下变换的中间结果。
饱和加法器610可以接收可组合的下变换的中间结果,并实现饱和加法以产生输出部分。输出缓冲区612可以保留饱和加法的结果,直到完成输出部分为止,使得可以根据该输出部分来构建矩阵乘法的结果矩阵的一部分。
在各种实现中,矩阵乘法组件600的不同组件可以将部分完成的或者完成的执行结果存储在工作缓存614中,并获取所存储的执行结果以完成正在进行的任务或新任务的实现。在各种实现中,矩阵乘法组件600的不同组件可以包括用于存储执行结果的专用缓冲区或寄存器,并且可以从这些专用缓冲区或寄存器中获取执行结果以完成正在进行的任务或新任务的实现。
在各种实现中,可以在处理器、片上系统或者计算设备中实现多个矩阵乘法组件600,以并行地执行矩阵的多个部分的矩阵乘法。其它矩阵乘法组件600可以使用来自不同矩阵乘法组件600的下变换的中间结果,来产生与该矩阵乘法组件600产生其下变换的中间结果的数据部分有关的输出部分。例如,第一矩阵乘法组件600可以针对第一矩阵的第一列数据的第一部分和第二矩阵的第一行数据的第一部分,产生第一下变换的中间结果。第二矩阵乘法组件600可以针对第一矩阵的第一列数据的第二部分和第二矩阵的第一行数据的第二部分,产生第二下变换的中间结果。为了完成第一矩阵的第一列和第二矩阵的第一行的矩阵乘法,第一矩阵乘法组件600可以使用第一下变换的中间结果和第二下变换的中间结果来产生输出部分。
可以在各种各样的计算系统中、利用处理器和/或专用硬件来实现各个实施例(其包括但不限于上面参照图1-6所讨论的实施例),其中这些计算系统可以包括在图7中所示出的适合于结合各个实施例使用的示例性移动计算设备。移动计算设备700可以包括耦合到触摸屏控制器704和内部存储器706的处理器702。处理器702可以是被指定用于通用或特定处理任务的一个或多个多核集成电路。内部存储器706可以是易失性存储器或非易失性存储器,还可以是安全和/或加密存储器,或者非安全和/或非加密存储器、或者其任意组合。可以利用的存储器类型的例子,包括但不限于:DDR、LPDDR、GDDR、WIDEIO、RAM、SRAM、DRAM、P-RAM、R-RAM、M-RAM、STT-RAM和嵌入式DRAM。触摸屏控制器704和处理器702还可以耦合到触摸屏面板712,例如,电阻式感应触摸屏、电容感应触摸屏、红外线感应触摸屏等等。另外,计算设备700的显示器并不需要具有触摸屏能力。
移动计算设备700可以具有用于发送和接收通信的一个或多个无线信号收发机708(例如,Peanut、Bluetooth蓝牙、Zigbee、Wi-Fi、RF无线电装置)和天线710,它们彼此之间相耦合和/或耦合到处理器702。收发机708和天线710可以结合上面所提及的电路来使用,以实现各种无线传输协议栈和接口。移动计算设备700可以包括蜂窝网络无线调制解调器芯片716,后者经由蜂窝网络来实现通信并耦合到处理器。
移动计算设备700可以包括耦合到处理器702的外围设备连接接口718。外围设备连接接口718可以被单一地配置为接受一种类型的连接,或者可以被配置为接受多种类型的物理和通信连接、公共或专有连接(例如,USB、火线、Thunderbolt或PCIe)。此外,外围设备连接接口718还可以耦合到类似配置的外围设备连接端口(没有示出)。
此外,移动计算设备700还可以包括用于提供音频输出的扬声器714。此外,移动计算设备700还可以包括使用塑料、金属、或材料的组合所构成的壳体720,以包含本文所讨论的所有组件或者一些组件。移动计算设备700可以包括耦合到处理器702的电源722,例如一次性或可再充电电池。此外,该可再充电电池还可以耦合到外围设备连接端口,以便从移动计算设备700之外的源接收充电电流。此外,移动计算设备700还可以包括用于接收用户输入的物理按键724。此外,移动计算设备700还可以包括用于打开和关闭移动计算设备700的电源按键726。
可以在各种各样的计算系统中、利用处理器和/或专用硬件来实现各个实施例(其包括但不限于上面参照图1-6所讨论的实施例),其中这些计算系统可以包括各种各样的移动计算设备,例如,如图8中所示的膝上型计算机800。很多膝上型计算机包括触摸板触摸接口817,后者用作该计算机的指向设备,故可以接收拖动、滚动和滑动手势(其类似于上面所描述的在装备有触摸屏显示器的计算设备上所实现的那些手势)。通常,膝上型计算机800包括耦合到易失性存储器812和大容量非易失性存储器(例如,闪存的硬盘驱动器813)的处理器811。另外,计算机800可以具有用于发送和接收电磁辐射的一付或多付天线808,这些天线808可以连接到无线数据链路和/或耦合到处理器811的蜂窝电话收发机816。此外,计算机800还可以包括耦合到处理器811的软盘驱动器814和压缩光盘(CD)驱动器815。在笔记本配置中,计算机壳体包括全部都耦合到处理器811的触摸板817、键盘818和显示器819。该计算设备的其它配置可以包括(例如,经由通用串行总线(USB)输入)耦合到处理器的计算机鼠标或者跟踪球,如公众所知道的,这些部件也可以结合各个实施例来使用。
可以在各种各样的计算系统中、利用处理器和/或专用硬件来实现各个实施例(其包括但不限于上面参照图1-6所讨论的实施例),其中这些计算系统可以包括用于将数据压缩在服务器高速缓存存储器中的各种各样的商业可用的服务器中的任何一种。图9描绘了一种示例性服务器900。通常,这种服务器900包括耦合到易失性存储器902和大容量非易失性存储器(例如,磁盘驱动器904)的一个或多个多核处理器组件901。如图9中所示,可以通过将多核处理器组件901插入到组装的架中,来将其添加到服务器900中。此外,服务器900还可以包括耦合到处理器901的软盘驱动器、压缩光盘(CD)或数字通用盘(DVD)光盘驱动器906。此外,服务器900还可以包括耦合到多核处理器组件901的网络接入端口903,以便与网络905(例如,耦合到其它广播系统计算机和服务器的局域网、互联网、公众交换电话网、和/或蜂窝数据网络(如,CDMA、TDMA、GSM、PCS、3G、4G、LTE或者任何其它类型的蜂窝数据网络))建立网络接口连接。
可以利用诸如C、C++、C#、Smalltalk、Java、JavaScript、Visual Basic、结构化查询语言(例如,Transact-SQL)、Perl之类的高级编程语言或者利用各种其它编程语言,来编写用于在可编程处理器上运行以执行各个实施例的操作的计算机程序代码或“程序代码”。如本申请中所使用的计算机可读存储介质上所存储的程序代码或程序,可以指代其格式是处理器可理解的机器语言代码(例如,目标代码)。
上述的方法描述和处理流程图仅仅是用作为说明性例子来提供的,其并不旨在要求或者隐含着必须以所给出的顺序来执行各个实施例的操作。如本领域普通技术人员所应当理解的,可以以任何顺序来执行上述的实施例中的操作顺序。诸如“其后”、“转而”、“接着”等等之类的词语,并不旨在限制这些操作的顺序;这些词语仅仅只是用于引导读者通读该方法的描述。此外,任何对权利要求要素的单数引用(例如,使用冠词“一个(a)”、“某个(an)”或者“该(the)”),不应被解释为将该要素限制为单数形式。
结合各个实施例描述的各种示例性逻辑框、模块、电路和算法操作均可以实现成电子硬件、计算机软件或二者的组合。为了清楚地表示硬件和软件之间的这种可交换性,上面对各种示例性组件、框、模块、电路和操作均围绕其功能进行了总体描述。至于这种功能是实现成硬件还是实现成软件,取决于特定的应用和对整个系统所施加的设计约束。熟练的技术人员可以针对每个特定应用,以变通的方式实现所描述的功能,但是,这种实现决策不应被解释为使得背离权利要求的范围。
可以通过被设计用于执行本文所述功能的通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件或者其任意组合,来实现或执行用于实现结合本文所公开的实施例描述的各种示例性逻辑单元、逻辑框、模块和电路的硬件。通用处理器可以是微处理器,或者,该处理器也可以是任何常规的处理器、控制器、微控制器或者状态机。处理器也可以实现为计算设备的组合,例如,DSP和微处理器的组合、若干微处理器、一个或多个微处理器与DSP内核的结合,或者任何其它此种结构。替代地,一些操作或方法可以由特定于给定的功能的电路来执行。
在一个或多个实施例,本文所述功能可以用硬件、软件、固件或它们任意组合的方式来实现。如果利用软件来实现,则可以将这些功能存储成非临时性计算机可读介质或者非临时性处理器可读介质上的一个或多个指令或代码。本文所公开的方法或算法的操作,可以体现在处理器可执行软件模块中,后者可以位于非临时性计算机可读存储介质或处理器可读存储介质上。非临时性计算机可读或处理器可读存储介质可以是计算机或处理器能够存取的任何存储介质。举例而言,但非做出限制,这种非临时性计算机可读介质或者处理器可读介质可以包括RAM、ROM、EEPROM、闪存、CD-ROM或其它光盘存储器、磁盘存储器或其它磁存储设备、或者能够用于存储具有指令或数据结构形式的期望的程序代码并能够由计算机进行存取的任何其它介质。如本文所使用的,磁盘和光盘包括压缩盘(CD)、激光盘、光盘、数字通用盘(DVD)、软盘和蓝光盘,其中磁盘通常磁性地复制数据,而光盘则用激光来光学地复制数据。上述的组合也应当包括在非临时性计算机可读介质和处理器可读介质的范围之内。另外,方法或算法的操作可以作为代码和/或指令中的一者或任意组合或集合,位于非临时性处理器可读介质和/或计算机可读介质上,其中该非临时性处理器可读介质和/或计算机可读介质可以并入到计算机程序产品中。
为使本领域任何普通技术人员能够实施或者使用本发明,上面提供了围绕所公开的实施例的描述。对于本领域普通技术人员来说,对这些实施例的各种修改是显而易见的,并且,本文定义的总体原理也可以在不脱离权利要求的范围的基础上应用于其它实施例。因此,本公开内容并不限于本文所示出的实施例,而是符合与所附权利要求书和本文公开的原理和新颖性特征相一致的最广范围。
Claims (22)
1.一种用于计算设备上的定点矩阵乘法的存储减少的方法,包括:
采用全精度、使用第一矩阵的定点数据的第一块和第二矩阵的定点数据的第二块来实现部分矩阵乘法,产生第一中间结果;
通过将所述第一中间结果的定点数据转换成采用较低精度的定点数据,来对所述第一中间结果进行下变换,产生具有下变换的中间精度大小的第一下变换的中间结果;
采用全精度、使用所述第一矩阵的定点数据的第三块和所述第二矩阵的定点数据的第四块来实现部分矩阵乘法,产生第二中间结果;
通过将所述第二中间结果的定点数据转换成采用所述较低精度的定点数据,来对所述第二中间结果进行下变换,产生具有所述下变换的中间精度大小的第二下变换的中间结果;
使用饱和加法,将所述第一下变换的中间结果和所述第二下变换的中间结果进行相加,其中所述饱和加法将作为结果的矩阵的结果输出部分的大小限制于输出精度;以及
基于指定的准确性水平为所述第一下变换的中间结果并且为所述第二下变换的中间结果确定所述下变换的中间精度大小。
2.根据权利要求1所述的方法,其中,所述第一块和所述第三块表示所述第一矩阵的至少一个完整行,并且所述第二块和所述第四块表示所述第二矩阵的至少一个完整列。
3.根据权利要求2所述的方法,还包括:
在第一时间段期间,接收所述定点数据的第一块和所述定点数据的第二块;以及
在第二时间段期间,接收所述定点数据的第三块和所述定点数据的第四块。
4.根据权利要求1所述的方法,其中,对所述第一中间结果进行下变换包括:
保留在大小上等于所述第一下变换的中间结果的所述下变换的中间精度大小的所述第一中间结果的保留部分;以及
移除所述第一中间结果的丢弃部分,所述第一中间结果的所述丢弃部分包括所述第一中间结果中不能容纳于所述第一下变换的中间结果的所述下变换的中间精度大小的部分。
5.根据权利要求4所述的方法,还包括:
执行1与所述第一中间结果的所述丢弃部分的最左位的二进制加法;
判断1与所述第一中间结果的所述丢弃部分的最左位的二进制加法的结果是否导致进位;以及
响应于确定1与所述第一中间结果的所述丢弃部分的最左位的二进制加法导致进位,将所述进位加到所述第一中间结果的所述保留部分的最右位上。
6.一种被配置用于定点矩阵乘法的存储减少的矩阵乘法装置,所述矩阵乘法装置被配置为执行包括以下各项的操作:
采用全精度、使用第一矩阵的定点数据的第一块和第二矩阵的定点数据的第二块来实现部分矩阵乘法,产生第一中间结果;
通过将所述第一中间结果的定点数据转换成采用较低精度的定点数据,来对所述第一中间结果进行下变换,产生具有下变换的中间精度大小的第一下变换的中间结果;
采用全精度、使用所述第一矩阵的定点数据的第三块和所述第二矩阵的定点数据的第四块来实现部分矩阵乘法,产生第二中间结果;
通过将所述第二中间结果的定点数据转换成采用所述较低精度的定点数据,来对所述第二中间结果进行下变换,产生具有所述下变换的中间精度大小的第二下变换的中间结果;
使用饱和加法,将所述第一下变换的中间结果和所述第二下变换的中间结果进行相加,其中,所述饱和加法将作为结果的矩阵的结果输出部分的大小限制于输出精度;以及
基于指定的准确性水平为所述第一下变换的中间结果并且为所述第二下变换的中间结果确定所述下变换的中间精度大小。
7.根据权利要求6所述的矩阵乘法装置,其中,所述第一块和所述第三块表示所述第一矩阵的至少一个完整行,并且所述第二块和所述第四块表示所述第二矩阵的至少一个完整列。
8.根据权利要求7所述的矩阵乘法装置,其中,所述矩阵乘法装置被配置为执行还包括以下各项的操作:
在第一时间段期间,接收所述定点数据的第一块和所述定点数据的第二块;以及
在第二时间段期间,接收所述定点数据的第三块和所述定点数据的第四块。
9.根据权利要求6所述的矩阵乘法装置,其中,所述矩阵乘法装置被配置为执行操作,使得对所述第一中间结果进行下变换包括:
保留在大小上等于所述第一下变换的中间结果的所述下变换的中间精度大小的所述第一中间结果的保留部分;以及
移除所述第一中间结果的丢弃部分,所述第一中间结果的所述丢弃部分包括所述第一中间结果中不能容纳于所述第一下变换的中间结果的所述下变换的中间精度大小的部分。
10.根据权利要求9所述的矩阵乘法装置,其中,所述矩阵乘法装置被配置为执行还包括以下各项的操作:
执行1与所述第一中间结果的所述丢弃部分的最左位的二进制加法;
判断1与所述第一中间结果的所述丢弃部分的最左位的二进制加法的结果是否导致进位;以及
响应于确定1与所述第一中间结果的所述丢弃部分的最左位的二进制加法导致进位,将所述进位加到所述第一中间结果的所述保留部分的最右位上。
11.根据权利要求6所述的矩阵乘法装置,其中,所述矩阵乘法装置包括被配置有处理器可执行指令,以执行以下各项的操作的处理器:
采用全精度、使用所述第一矩阵的所述定点数据的第一块和所述第二矩阵的所述定点数据的第二块来实现所述部分矩阵乘法,产生所述第一中间结果;以及
通过将所述第一中间结果的定点数据转换成采用较低精度的定点数据,来对所述第一中间结果进行下变换,产生所述第一下变换的中间结果。
12.根据权利要求6所述的矩阵乘法装置,其中,所述矩阵乘法装置包括:
全精度矩阵乘法器,其被配置为执行以下的操作:采用全精度、使用所述第一矩阵的所述定点数据的第一块和所述第二矩阵的所述定点数据的第二块来实现所述部分矩阵乘法,产生所述第一中间结果;以及
下变换器,其被配置为执行以下的操作:通过将所述第一中间结果的定点数据转换成采用较低精度的定点数据,来对所述第一中间结果进行下变换,产生所述第一下变换的中间结果。
13.一种被配置用于定点矩阵乘法的存储减少的矩阵乘法装置,包括:
用于采用全精度、使用第一矩阵的定点数据的第一块和第二矩阵的定点数据的第二块来实现部分矩阵乘法,产生第一中间结果的单元;
用于通过将所述第一中间结果的定点数据转换成采用较低精度的定点数据,来对所述第一中间结果进行下变换,产生具有下变换的中间精度大小的第一下变换的中间结果的单元;
用于采用全精度、使用所述第一矩阵的定点数据的第三块和所述第二矩阵的定点数据的第四块来实现部分矩阵乘法,产生第二中间结果的单元;
用于通过将所述第二中间结果的定点数据转换成采用所述较低精度的定点数据,来对所述第二中间结果进行下变换,产生具有所述下变换的中间精度大小的第二下变换的中间结果的单元;
用于使用饱和加法,将所述第一下变换的中间结果和所述第二下变换的中间结果进行相加的单元,其中所述饱和加法将作为结果的矩阵的结果输出部分的大小限制于输出精度;以及
用于基于指定的准确性水平为所述第一下变换的中间结果并且为所述第二下变换的中间结果确定所述下变换的中间精度大小的单元。
14.根据权利要求13所述的矩阵乘法装置,其中,所述第一块和所述第三块表示所述第一矩阵的至少一个完整行,并且所述第二块和所述第四块表示所述第二矩阵的至少一个完整列。
15.根据权利要求14所述的矩阵乘法装置,还包括:
用于在第一时间段期间,接收所述定点数据的第一块和所述定点数据的第二块的单元;以及
用于在第二时间段期间,接收所述定点数据的第三块和所述定点数据的第四块的单元。
16.根据权利要求13所述的矩阵乘法装置,其中,用于对所述第一中间结果进行下变换的单元包括:
用于保留在大小上等于所述第一下变换的中间结果的所述下变换的中间精度大小的所述第一中间结果的保留部分的单元;以及
用于移除所述第一中间结果的丢弃部分的单元,所述第一中间结果的所述丢弃部分包括所述第一中间结果中不能容纳于所述第一下变换的中间结果的所述下变换的中间精度大小的部分。
17.根据权利要求16所述的矩阵乘法装置,还包括:
用于执行1与所述第一中间结果的所述丢弃部分的最左位的二进制加法的单元;
用于判断1与所述第一中间结果的所述丢弃部分的最左位的二进制加法的结果是否导致进位的单元;以及
用于响应于确定1与所述第一中间结果的所述丢弃部分的最左位的二进制加法导致进位,将所述进位加到所述第一中间结果的所述保留部分的最右位上的单元。
18.一种其上存储有处理器可执行指令的非临时性处理器可读存储介质,所述处理器可执行指令被配置为使计算设备的处理器执行包括以下各项的操作:
采用全精度、使用第一矩阵的定点数据的第一块和第二矩阵的定点数据的第二块来实现部分矩阵乘法,产生第一中间结果;
通过将所述第一中间结果的定点数据转换成采用较低精度的定点数据,来对所述第一中间结果进行下变换,产生具有下变换的中间精度大小的第一下变换的中间结果;
采用全精度、使用所述第一矩阵的定点数据的第三块和所述第二矩阵的定点数据的第四块来实现部分矩阵乘法,产生第二中间结果;
通过将所述第二中间结果的定点数据转换成采用所述较低精度的定点数据,来对所述第二中间结果进行下变换,产生具有所述下变换的中间精度大小的第二下变换的中间结果;
使用饱和加法,将所述第一下变换的中间结果和所述第二下变换的中间结果进行相加,所述饱和加法将作为结果的矩阵的结果输出部分的大小限制于输出精度;以及
基于指定的准确性水平为所述第一下变换的中间结果并且为所述第二下变换的中间结果确定所述下变换的中间精度大小。
19.根据权利要求18所述的非临时性处理器可读存储介质,其中,所述第一块和所述第三块表示所述第一矩阵的至少一个完整行,并且所述第二块和所述第四块表示所述第二矩阵的至少一个完整列。
20.根据权利要求19所述的非临时性处理器可读存储介质,其中,所存储的处理器可执行指令被配置为使所述处理器执行还包括以下各项的操作:
在第一时间段期间,接收所述定点数据的第一块和所述定点数据的第二块;以及
在第二时间段期间,接收所述定点数据的第三块和所述定点数据的第四块。
21.根据权利要求18所述的非临时性处理器可读存储介质,其中,所存储的处理器可执行指令被配置为使所述处理器执行操作,使得对所述第一中间结果进行下变换包括:
保留在大小上等于所述第一下变换的中间结果的所述下变换的中间精度大小的所述第一中间结果的保留部分;以及
移除所述第一中间结果的丢弃部分,所述第一中间结果的所述丢弃部分包括所述第一中间结果中不能容纳于所述第一下变换的中间结果的所述下变换的中间精度大小的部分。
22.根据权利要求21所述的非临时性处理器可读存储介质,其中,所存储的处理器可执行指令被配置为使所述处理器执行还包括以下各项的操作:
执行1与所述第一中间结果的所述丢弃部分的最左位的二进制加法;
判断1与所述第一中间结果的所述丢弃部分的最左位的二进制加法的结果是否导致进位;以及
响应于确定1与所述第一中间结果的所述丢弃部分的最左位的二进制加法导致进位,将所述进位加到所述第一中间结果的所述保留部分的最右位上。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/074,413 | 2016-03-18 | ||
US15/074,413 US9870341B2 (en) | 2016-03-18 | 2016-03-18 | Memory reduction method for fixed point matrix multiply |
PCT/US2017/017924 WO2017160448A1 (en) | 2016-03-18 | 2017-02-15 | Memory reduction method for fixed point matrix multiply |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108780441A CN108780441A (zh) | 2018-11-09 |
CN108780441B true CN108780441B (zh) | 2022-09-06 |
Family
ID=58228560
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780017072.9A Active CN108780441B (zh) | 2016-03-18 | 2017-02-15 | 用于定点矩阵乘法的存储减少方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US9870341B2 (zh) |
EP (1) | EP3430530B1 (zh) |
CN (1) | CN108780441B (zh) |
TW (1) | TW201734764A (zh) |
WO (1) | WO2017160448A1 (zh) |
Families Citing this family (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10644916B1 (en) | 2002-05-14 | 2020-05-05 | Genghiscomm Holdings, LLC | Spreading and precoding in OFDM |
US11381285B1 (en) | 2004-08-02 | 2022-07-05 | Genghiscomm Holdings, LLC | Transmit pre-coding |
US9870341B2 (en) * | 2016-03-18 | 2018-01-16 | Qualcomm Incorporated | Memory reduction method for fixed point matrix multiply |
CN106445471B (zh) * | 2016-10-13 | 2018-06-01 | 北京百度网讯科技有限公司 | 处理器和用于在处理器上执行矩阵乘运算的方法 |
US11551067B2 (en) * | 2017-04-06 | 2023-01-10 | Shanghai Cambricon Information Technology Co., Ltd | Neural network processor and neural network computation method |
US10186011B2 (en) * | 2017-04-28 | 2019-01-22 | Intel Corporation | Programmable coarse grained and sparse matrix compute hardware with advanced scheduling |
US10169298B1 (en) * | 2017-05-11 | 2019-01-01 | NovuMind Limited | Native tensor processor, using outer product unit |
CN108875956B (zh) * | 2017-05-11 | 2019-09-10 | 广州异构智能科技有限公司 | 原生张量处理器 |
US10243773B1 (en) | 2017-06-30 | 2019-03-26 | Genghiscomm Holdings, LLC | Efficient peak-to-average-power reduction for OFDM and MIMO-OFDM |
US10637705B1 (en) | 2017-05-25 | 2020-04-28 | Genghiscomm Holdings, LLC | Peak-to-average-power reduction for OFDM multiple access |
US11138291B2 (en) * | 2017-09-26 | 2021-10-05 | Oracle International Corporation | Assymetric allocation of SRAM and data layout for efficient matrix multiplication |
WO2019114842A1 (zh) * | 2017-12-14 | 2019-06-20 | 北京中科寒武纪科技有限公司 | 一种集成电路芯片装置 |
CN109960673B (zh) * | 2017-12-14 | 2020-02-18 | 中科寒武纪科技股份有限公司 | 集成电路芯片装置及相关产品 |
CN111242294B (zh) * | 2017-12-14 | 2023-08-25 | 中科寒武纪科技股份有限公司 | 集成电路芯片装置及相关产品 |
CN109993275B (zh) * | 2017-12-29 | 2021-01-29 | 华为技术有限公司 | 一种信号处理方法及装置 |
US11630666B2 (en) * | 2018-02-13 | 2023-04-18 | Shanghai Cambricon Information Technology Co., Ltd | Computing device and method |
US11663002B2 (en) * | 2018-02-13 | 2023-05-30 | Shanghai Cambricon Information Technology Co., Ltd | Computing device and method |
CN108564168B (zh) * | 2018-04-03 | 2021-03-09 | 中国科学院计算技术研究所 | 一种对支持多精度卷积神经网络处理器的设计方法 |
CN108509179B (zh) * | 2018-04-04 | 2021-11-30 | 百度在线网络技术(北京)有限公司 | 用于检测人脸的方法、用于生成模型的装置 |
US10756790B2 (en) * | 2018-06-17 | 2020-08-25 | Genghiscomm Holdings, LLC | Distributed radio system |
CA3051429A1 (en) * | 2018-08-08 | 2020-02-08 | Applied Brain Research Inc. | Digital circuits for evaluating neural engineering framework style neural networks |
US10853067B2 (en) * | 2018-09-27 | 2020-12-01 | Intel Corporation | Computer processor for higher precision computations using a mixed-precision decomposition of operations |
US11917604B2 (en) | 2019-01-25 | 2024-02-27 | Tybalt, Llc | Orthogonal multiple access and non-orthogonal multiple access |
WO2020242898A1 (en) | 2019-05-26 | 2020-12-03 | Genghiscomm Holdings, LLC | Non-orthogonal multiple access |
US11436011B2 (en) * | 2020-02-18 | 2022-09-06 | Samsung Electronics Co., Ltd. | Processing method and processing device with matrix multiplication computation |
CN114200822A (zh) * | 2021-12-09 | 2022-03-18 | 常州同惠电子股份有限公司 | 全精度数字积分控制器的fpga实现方法 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1459143A (zh) * | 2000-09-19 | 2003-11-26 | 汤姆·瑞雷 | 复值德耳塔西格马锁相环解调器 |
CN1617113A (zh) * | 2003-11-13 | 2005-05-18 | 国际商业机器公司 | 向物理内存分配虚拟内存的方法、存储控制器和计算机系统 |
CN1774709A (zh) * | 2002-12-20 | 2006-05-17 | 英特尔公司 | 使用simd寄存器的小矩阵有效乘法 |
CN101351792A (zh) * | 2005-10-05 | 2009-01-21 | 高通股份有限公司 | 用于具有超长指令字结构的数字信号处理器的快速离散余弦变换算法 |
RU2009102255A (ru) * | 2006-06-26 | 2010-08-10 | Квэлкомм Инкорпорейтед (US) | Эффективные аппроксимации с фиксированной запятой для прямых и обратных дискретных косинусных преобразований |
CN102197369A (zh) * | 2008-10-08 | 2011-09-21 | Arm有限公司 | 用于执行simd乘法-累积运算的装置及方法 |
CN103975302A (zh) * | 2011-12-22 | 2014-08-06 | 英特尔公司 | 矩阵乘法累加指令 |
CN104040484A (zh) * | 2011-12-28 | 2014-09-10 | 英特尔公司 | 浮点缩放处理器、方法、系统和指令 |
WO2015179198A1 (en) * | 2014-05-21 | 2015-11-26 | Qualcomm Incorporated | Systems and methods for multiple network access by mobile computing devices |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6901422B1 (en) * | 2001-03-21 | 2005-05-31 | Apple Computer, Inc. | Matrix multiplication in a vector processing system |
US7003542B2 (en) * | 2002-01-02 | 2006-02-21 | Intel Corporation | Apparatus and method for inverting a 4×4 matrix |
CN102037729B (zh) * | 2006-06-26 | 2013-02-27 | 高通股份有限公司 | 前向和逆向离散余弦变换的高效定点近似法 |
US8984043B2 (en) * | 2009-12-23 | 2015-03-17 | Intel Corporation | Multiplying and adding matrices |
CN102375721B (zh) * | 2010-08-23 | 2016-03-30 | 联想(北京)有限公司 | 一种矩阵乘法运算方法、图形处理器和电子设备 |
US8543633B2 (en) * | 2010-09-24 | 2013-09-24 | Lockheed Martin Corporation | Modified Gram-Schmidt core implemented in a single field programmable gate array architecture |
US9489342B2 (en) | 2012-12-24 | 2016-11-08 | Intel Corporation | Systems, methods, and computer program products for performing mathematical operations |
US9384168B2 (en) * | 2013-06-11 | 2016-07-05 | Analog Devices Global | Vector matrix product accelerator for microprocessor integration |
US9400955B2 (en) | 2013-12-13 | 2016-07-26 | Amazon Technologies, Inc. | Reducing dynamic range of low-rank decomposition matrices |
GB2523342A (en) * | 2014-02-20 | 2015-08-26 | Ibm | Conjugate gradient solvers for linear systems |
US20160026912A1 (en) | 2014-07-22 | 2016-01-28 | Intel Corporation | Weight-shifting mechanism for convolutional neural networks |
CN104572011B (zh) * | 2014-12-22 | 2018-07-31 | 上海交通大学 | 基于fpga的通用矩阵定点乘法器及其计算方法 |
CN104536943B (zh) * | 2015-01-13 | 2017-08-29 | 江苏中兴微通信息科技有限公司 | 一种低除法量的矩阵求逆定点实现方法及装置 |
US20170061279A1 (en) * | 2015-01-14 | 2017-03-02 | Intel Corporation | Updating an artificial neural network using flexible fixed point representation |
US9870341B2 (en) * | 2016-03-18 | 2018-01-16 | Qualcomm Incorporated | Memory reduction method for fixed point matrix multiply |
-
2016
- 2016-03-18 US US15/074,413 patent/US9870341B2/en active Active
-
2017
- 2017-02-15 WO PCT/US2017/017924 patent/WO2017160448A1/en active Application Filing
- 2017-02-15 EP EP17708922.4A patent/EP3430530B1/en active Active
- 2017-02-15 CN CN201780017072.9A patent/CN108780441B/zh active Active
- 2017-02-16 TW TW106105017A patent/TW201734764A/zh unknown
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1459143A (zh) * | 2000-09-19 | 2003-11-26 | 汤姆·瑞雷 | 复值德耳塔西格马锁相环解调器 |
CN1774709A (zh) * | 2002-12-20 | 2006-05-17 | 英特尔公司 | 使用simd寄存器的小矩阵有效乘法 |
CN1617113A (zh) * | 2003-11-13 | 2005-05-18 | 国际商业机器公司 | 向物理内存分配虚拟内存的方法、存储控制器和计算机系统 |
CN101351792A (zh) * | 2005-10-05 | 2009-01-21 | 高通股份有限公司 | 用于具有超长指令字结构的数字信号处理器的快速离散余弦变换算法 |
RU2009102255A (ru) * | 2006-06-26 | 2010-08-10 | Квэлкомм Инкорпорейтед (US) | Эффективные аппроксимации с фиксированной запятой для прямых и обратных дискретных косинусных преобразований |
CN102197369A (zh) * | 2008-10-08 | 2011-09-21 | Arm有限公司 | 用于执行simd乘法-累积运算的装置及方法 |
CN103975302A (zh) * | 2011-12-22 | 2014-08-06 | 英特尔公司 | 矩阵乘法累加指令 |
CN104040484A (zh) * | 2011-12-28 | 2014-09-10 | 英特尔公司 | 浮点缩放处理器、方法、系统和指令 |
WO2015179198A1 (en) * | 2014-05-21 | 2015-11-26 | Qualcomm Incorporated | Systems and methods for multiple network access by mobile computing devices |
Non-Patent Citations (4)
Title |
---|
A variant of a radix-10 combinational multiplier;Dadda Luigi 等;《2008 IEEE International Symposium on Circuits and Systems》;20080531;3370-3373 * |
Time-dependent density-matrix renormalization-group using adaptive effective Hilbert spaces;Daley Andrew John 等;《Journal of Statistical Mechanics: Theory and Experiment》;20040421;第2004卷;1-26 * |
初等函数运算器的设计研究;牛涛;《中国优秀博硕士学位论文全文数据库(硕士)信息科技辑》;20130715(第07期);I137-50 * |
基于FPGA像增强器自动门控电源电路设计;王海基;《中国优秀博硕士学位论文全文数据库(硕士)信息科技辑》;20100215(第02期);I135-13 * |
Also Published As
Publication number | Publication date |
---|---|
TW201734764A (zh) | 2017-10-01 |
EP3430530B1 (en) | 2022-11-02 |
CN108780441A (zh) | 2018-11-09 |
EP3430530A1 (en) | 2019-01-23 |
US9870341B2 (en) | 2018-01-16 |
US20170270073A1 (en) | 2017-09-21 |
WO2017160448A1 (en) | 2017-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108780441B (zh) | 用于定点矩阵乘法的存储减少方法 | |
US10346133B1 (en) | System and method of floating point multiply operation processing | |
US20130219131A1 (en) | Low access time indirect memory accesses | |
CN111915001B (zh) | 卷积计算引擎、人工智能芯片以及数据处理方法 | |
CN109863476A (zh) | 动态变量精度计算 | |
CN106687937B (zh) | 用于压缩算法的高速缓冲存储体扩展 | |
US9996345B2 (en) | Variable length execution pipeline | |
US11025271B2 (en) | Compression of high dynamic ratio fields for machine learning | |
CN111767986A (zh) | 一种基于神经网络的运算方法及装置 | |
CN116028013B (zh) | 一种fpga除法运算的优化方法、装置、除法器和介质 | |
EP3497563B1 (en) | Fine-grained power optimization for heterogeneous parallel constructs | |
US10078611B1 (en) | Smart handling of input/output interrupts | |
KR20160113143A (ko) | 동적 언어들로 된 인라인 캐시들에 대한 하드웨어 가속 | |
KR20160113142A (ko) | 동적 언어들로 된 인라인 캐시들에 대한 하드웨어 가속 | |
US10289386B2 (en) | Iterative division with reduced latency | |
US20220309314A1 (en) | Artificial Intelligence Processor Architecture For Dynamic Scaling Of Neural Network Quantization | |
US9910638B1 (en) | Computer-based square root and division operations | |
US9778951B2 (en) | Task signaling off a critical path of execution | |
US10261831B2 (en) | Speculative loop iteration partitioning for heterogeneous execution | |
US11907138B2 (en) | Multimedia compressed frame aware cache replacement policy | |
US20220245457A1 (en) | Neural Network Pruning With Cyclical Sparsity | |
US10037191B2 (en) | Performing a comparison computation in a computer system | |
WO2021097457A1 (en) | Batch softmax for 0-label and multilabel classification | |
US9519458B1 (en) | Optimized fused-multiply-add method and system | |
WO2022220835A1 (en) | Shared register for vector register file and scalar register file |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |