CN111028136B - 一种人工智能处理器处理二维复数矩阵的方法和设备 - Google Patents
一种人工智能处理器处理二维复数矩阵的方法和设备 Download PDFInfo
- Publication number
- CN111028136B CN111028136B CN201911349811.1A CN201911349811A CN111028136B CN 111028136 B CN111028136 B CN 111028136B CN 201911349811 A CN201911349811 A CN 201911349811A CN 111028136 B CN111028136 B CN 111028136B
- Authority
- CN
- China
- Prior art keywords
- sub
- matrix
- row
- complex
- column
- 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
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/0007—Image acquisition
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Complex Calculations (AREA)
Abstract
本公开记载了一种人工智能处理器处理二维复数矩阵的方法、电子设备和计算装置,其中计算装置可以包括在组合处理装置中,该组合处理装置还可以包括通用互联接口和其他处理装置。所述计算装置与其他处理装置进行交互,共同完成用户指定的计算操作。组合处理装置还可以包括存储装置,该存储装置分别与计算装置和其他处理装置连接,用于计算装置和其他处理装置的数据。
Description
技术领域
本发明涉及数据处理领域,更具体地,涉及人工智能处理器上的矩阵运算领域。
背景技术
离散傅里叶变换和离散傅里叶逆变换在数字图像处理和计算机视觉等领域中有着很广泛的作用,这使得离散傅里叶变换的快速工程实现具有十分重要的意义。但是,随着人工智能技术的发展,对图像和视频的处理算法和性能有较高的要求,在各种应用中对计算性能要求的越来越高。
在CPU上只能进行标量的计算,随着数据规模的增加,计算时间快速增加,如果可以直接进行一组数据的计算,即张量的计算,那么计算性能可以显著提升。之前常用快速傅里叶变换进行离散傅里叶变换的计算,通常也是进行的标量的计算,虽然可以减少算法复杂度,但是执行快速傅里叶变换的计算量很大,并且和系统的性能有很大关系。在现有技术中,之所以不直接采用矩阵相乘的方法,是因为CPU和GPU都不能直接进行矩阵相乘,都是在上层开发中进行了算法设计。
当前对高分辨率图像的使用越来越频繁,除了深度学习领域中会使用较小尺寸的图片,在信号处理、图像处理和视频解析等领域,一般图像都很大,最常见的有720p,1080p,4k甚至8k和16k的图像,会出现大量对大尺度图像的傅里叶变换与逆变换运算的需求,但是参与计算的处理器,不管是CPU、GPU还是MLU,它们的片内RAM资源都是有限的,不足以缓存这样的大规模的矩阵数据。同时,由于在片内存储进行运算的速度远高于在片外存储,而且对片外存储访问进行大量的标量操作,会影响算法的性能,导致整个算法的效率很低。
发明内容
本公开的目的在于克服现有技术中无法无法对大规模二维矩阵进行处理的缺陷,提供一种能够对片外存储单元中的大型二维复数矩阵进行处理的方法。
根据本公开的第一方面,提供一种人工智能处理器处理二维复数矩阵的方法,其中,所述二维复数矩阵的尺寸为N×M;与所述二维复数矩阵对应的行系数矩阵的尺寸为M×M,与所述二维复数矩阵对应的列系数矩阵的尺寸为N×N,所述方法包括:根据人工智能处理器上的片上存储单元的第一存储区的容量以及所述二维复数矩阵的尺寸,将所述二维复数矩阵拆分为至少两个子复数矩阵,所述子复数矩阵的尺寸为n×m,且所述子复数矩阵的所有元素均能够存放在所述第一存储区内;将所述子复数矩阵加载至所述人工智能处理器的片上存储单元的第一存储区中;根据所述子复数矩阵的尺寸,将所述行系数矩阵拆分为至少两个子行系数矩阵,以及将所述列系数矩阵拆分为至少两个子列系数矩阵,其中,所述子行系数矩阵的尺寸为m×m,所述子列系数矩阵的尺寸为n×n;将所述子行系数矩阵加载至所述人工智能处理器的片上存储单元的第二存储区中;将所述子列系数矩阵加载至所述人工智能处理器的片上存储单元的第三存储区中;所述人工智能处理器利用所述片上存储单元中的子复数矩阵、子行系数矩阵和子列系数矩阵来进行傅里叶变换,以得到运算结果;以及所述人工智能处理器将所述运算结果传送至所述片外存储单元以进行存储。。
根据本公开的第二方面,提供一种人工智能处理器处理二维复数矩阵的方法,其中,所述二维复数矩阵的尺寸为N×M;与所述二维复数矩阵对应的行系数矩阵的尺寸为M×M,与所述二维复数矩阵对应的列系数矩阵的尺寸为N×N,所述方法包括:根据人工智能处理器上的片上存储单元的第二存储区的容量,将所述行系数矩阵拆分为至少两个子行系数矩阵,所述子行系数矩阵的尺寸为m×m,并且所述子行系数矩阵的所有元素均能够存放在所述第二存储区内;将所述子行系数矩阵加载至所述人工智能处理器上的片上存储单元的第二存储区;根据所述子行系数矩阵的尺寸,将所述二维复数矩阵拆分为至少两个与所述子行系数矩阵对应的子复数矩阵,其中所述子复数矩阵的尺寸为n×m;将所述子复数矩阵加载至所述人工智能处理器上的片上存储单元的第一存储区;根据所述子复数矩阵,将所述子列系数矩阵拆分为多至少两个与所述子复数矩阵对应的子列系数矩阵,其中所述子列系数矩阵的尺寸为n×n;将所述子列系数矩阵加载至所述人工智能处理器上的片上存储单元的第三存储区;所述人工智能处理器利用所述片上存储单元中的子复数矩阵、子行系数矩阵和子列系数矩阵来进行傅里叶变换,以得到运算结果;以及所述人工智能处理器将所述运算结果传送至所述片外存储单元以进行存储。
根据本公开的第三方面,提供一种人工智能处理器处理二维复数矩阵的方法,其中,所述二维复数矩阵的尺寸为N×M;与所述二维复数矩阵对应的行系数矩阵的尺寸为M×M,与所述二维复数矩阵对应的列系数矩阵的尺寸为N×N,所述方法包括:根据人工智能处理器上的片上存储单元的第三存储区的容量,将所述列系数矩阵拆分为至少两个子列系数矩阵,所述子列系数矩阵的尺寸为n×n,并且所述子列系数矩阵的所有元素均能够存放在所述第三存储区内;将所述子列系数矩阵加载至所述人工智能处理器上的片上存储单元的第三存储区;根据所述子列系数矩阵,将所述二维复数矩阵拆分为至少两个与所述子列系数矩阵对应的子复数矩阵,其中所述子复数矩阵的尺寸为n×m;将所述子复数矩阵加载至所述人工智能处理器上的片上存储单元的第一存储区;根据所述子复数矩阵,将所述子行系数矩阵拆分为至少两个与所述子复数矩阵对应的子行系数矩阵,其中所述子行系数矩阵的尺寸为m×m;将所述子行系数矩阵加载至所述人工智能处理器上的片上存储单元的第二存储区;所述人工智能处理器利用所述片上存储单元中的子复数矩阵、子行系数矩阵和子列系数矩阵来进行傅里叶变换,以得到运算结果;以及所述人工智能处理器将所述运算结果传送至所述片外存储单元以进行存储。
根据本公开的第四方面,提供一种电子设备,包括:一个或多个处理器;以及存储器,所述存储器中存储有计算机可执行指令,当所述计算机可执行指令由所述一个或多个处理器运行时,使得所述电子设备执行如上所述的方法。
根据本公开的第五方面,提供一种计算机可读存储介质,包括计算机可执行指令,当所述计算机可执行指令由一个或多个处理器运行时,执行如上所述的方法。
本公开的技术方案可以充分利用硬件资源,解决所有因硬件资源有限不足以支撑大型数据运算的问题;降低内存间缓存耗时,从而提升访存效率,进一步提升算法的性能。
附图说明
通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,并且相同或对应的标号表示相同或对应的部分其中:
图1a示出了本公开的方法可以应用的一个处理器组的内部结构示意图;
图1b示出了本公开的方法可以应用的人工智能处理器的结构示意图;
图2示出了根据本公开的一个实施方式的不同存储区域存储二维复数矩阵,行系数矩阵和列系数矩阵的示意图;
图3示出了根据本公开的第一方面的一种人工智能处理器处理二维复数矩阵的方法;
图4示出了根据本公开的第二方面的一种人工智能处理器处理二维复数矩阵的方法;
图5示出了根据本公开的第三方面的一种人工智能处理器处理二维复数矩阵的方法;
图6示出了根据本公开的一个实施方式的二维复数矩阵的示意图;
图7示出了根据本公开的一个实施方式的将系数矩阵转换为一维数组的示意图;
图8示出了根据本公开一个实施方式的动态地调整所述子矩阵的尺寸的方法流程图;
图9a示出了根据本公开的一个实施方式的对二维矩阵进行扩展的示意图;
图9b示出了根据本公开的另一个实施方式的对二维矩阵进行扩展的示意图;
图10示出了根据本公开一个实施方式的对二维数据矩阵进行划分和调节的方法流程图;
图11示出了根据本公开的一个实施方式的子矩阵存在重叠部分的示意图;
图12示出了根据本公开一个实施方式的人工智能处理器利用所述片上存储单元中的子复数矩阵、子行系数矩阵和子列系数矩阵来进行傅里叶变换的方法流程图;
图13示出了根据本公开的一个实施方式的对子复数矩阵和相应的子行系数矩阵进行傅里叶变换的示意图;
图14示出了根据本公开的一个实施方式的对子复数矩阵和相应的子列系数矩阵进行傅里叶变换的示意图;
图15示出了通过多个工智能处理器分别对多个子矩阵进行并行的傅里叶变换的示意图;
图16a和图16b分别示出了不同元素位于不同行以及不同元素位于不同列的情形;
图17示出了根据本公开的组合处理装置的示意图;以及
图18示出了根据本公开的板卡的示意性框图。
具体实施方式
下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。
应当理解,本披露的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
下面结合附图对本公开的实施方式进行详细描述。
图1a示出了本公开的方法可以应用的一个处理器组的内部结构示意图。
人工智能(AI)芯片加速了数据计算能力,降低了访存延时。AI芯片采用多核处理器架构,支持多达16核并行计算,并加入存储单元核(也可称为片上或片内存储单元)来加速数据读取,解决了AI芯片的处理器核与DDR(也可以称为片外存储单元)的访存瓶颈问题。为用户在处理深度学习、网络计算等场景中,提供更强的运算能力。
AI芯片共有16个处理器核,用于执行计算任务。每4个处理器核组成一个处理器组,即共4个处理器组。每个处理器组内有个存储单元核。存储单元核主要用于处理器组内部的共享存储单元与处理器核的数据交换和处理器组之间的数据交换。当存储器核和处理器核同时访问DDR时,通过多路复用器仲裁后,保证仅一组总线访问DDR。
图1b示出了本公开的方法可以应用的人工智能处理器的结构示意图图。
AI芯片的DDR采用非统一内存存取(Non-Uniform Memory Access,NUMA)架构,每个处理器组可以通过NOC0访问不同的DDR通道,但访问不同的DDR通道的延时不同。每个处理器组都对应一个访问延时最低的DDR通道,访问其他通道时延时相对较长。如图1b中处理器组与DDR结构图所示,处理器组0,处理器组1,处理器组2和处理器组3分别访问对应的DDR0,DDR1,DDR2和DDR3时延时最低。也就是每个处理器核访问了各自处理器组访存延时最低的DDR通道。
由于处理器组内部的访存带宽高于处理器核和DDR之间的访问带宽,所以AI芯片可以通过采用处理器组来内部存取共享存储单元,以减少处理器核直接访问DDR,从而提高了数据吞吐量。
当需要4核并行计算时,存储单元核可以通过数据广播方式(通过NOC1),将数据由共享存储单元同时广播到处理器组内的4个处理器核以进行数据计算。相对于所有处理器核通过DDR来读取数据的方式,这种情况下能够降低访存延时,优化计算性能。
当计算需求增大时,16个处理器核可以需要同时处理多个计算任务。处理器核直接访问DDR必然会引起数据访问延时,导致计算速度慢等问题。AI芯片通过处理器组相互之间的数据交换,避免了16个处理器核直接与DDR通信,从而降低了数据访问的延时。
对于大型二维数据矩阵,例如高清图片等,可以充分利用AI芯片的这种结构,来减少与外部存储单元之间的数据交换或数据存取,提升数据处理速度和数据传输的吞吐率。
图2示出了根据本公开的一个实施方式的不同存储区域存储二维复数矩阵,行系数矩阵和列系数矩阵的示意图。
如图2所示,在对二维复数矩阵进行傅里叶变换时,需要将该二维复数矩阵以及相对应的行系数矩阵和列系数矩阵分别存储到片上存储单元的不同存储区域中,以便于处理器的操作。在图2中,将二维复数矩阵的一部分(即子复数矩阵)、行系数矩阵的一部分(即子行系数矩阵)以及列系数矩阵的一部分(即子列系数矩阵)分别存储到第一存储区、第二存储区和第三存储区。
此外,二维复数矩阵的尺寸,行系数矩阵以及列系数矩阵的大小各不相同,因此对存储区域的要求也是不同的。例如,在某些情况下,用于存储二维复数矩阵的第一存储区可能是最小的,因此可以首先确定子复数矩阵的大小,然后再以该子复数矩阵为基准来设置各个子系数矩阵的大小;在另外一些情况下,用于存储行系数矩阵的第二存储区域是最小的,则此情况下可以首先确定子行系数矩阵的尺寸,然后以该子行系数矩阵为基准来设置子复数矩阵和子列系数矩阵的尺寸;在其他一些情况下,用于存储列系数矩阵的第三存储区域是最小的,则可以首先确定子列系数矩阵的尺寸,然后以该子列系数矩阵为基准来设置子复数矩阵和子行系数矩阵的大小。
上文所述的存储区域,可以是处于一个独立的存储器中的不同存储区,也可以是多个独立的存储器,本公开的技术方案对存储区域的类型不做任何的限制。
图3示出了根据本公开的第一方面的一种人工智能处理器处理二维复数矩阵的方法,其中,所述二维复数矩阵的尺寸为N×M;与所述二维复数矩阵对应的行系数矩阵的尺寸为M×M,与所述二维复数矩阵对应的列系数矩阵的尺寸为N×N,所述方法包括:在操作S310,根据人工智能处理器上的片上存储单元的第一存储区的容量以及所述二维复数矩阵的尺寸,将所述二维复数矩阵拆分为至少两个子复数矩阵,所述子复数矩阵的尺寸为n×m,且所述子复数矩阵的所有元素均能够存放在所述第一存储区内;在操作S320,将所述子复数矩阵加载至所述人工智能处理器的片上存储单元的第一存储区中;在操作S330,根据所述子复数矩阵的尺寸,将所述行系数矩阵拆分为至少两个子行系数矩阵,以及将所述列系数矩阵拆分为至少两个子列系数矩阵,其中,所述子行系数矩阵的尺寸为m×m,所述子列系数矩阵的尺寸为n×n;在操作S340,将所述子行系数矩阵加载至所述人工智能处理器的片上存储单元的第二存储区中;在操作S350,将所述子列系数矩阵加载至所述人工智能处理器的片上存储单元的第三存储区中;在操作S360,所述人工智能处理器利用所述片上存储单元中的子复数矩阵、子行系数矩阵和子列系数矩阵来进行傅里叶变换,以得到运算结果;以及在操作S370,所述人工智能处理器将所述运算结果传送至所述片外存储单元以进行存储。
在上述实施方式中,以第一存储区的容量为基础,将一个大型二维复数矩阵拆分为至少两个子复数矩阵,每个子复数矩阵的尺寸不大于第一存储区的容量,从而该第一存储区能够容纳该子复数矩阵的所有元素。在确定了子复数矩阵的尺寸之后,则可以根据该子复数矩阵来确定子行系数矩阵的尺寸和子列系数矩阵的尺寸,其中子行系数矩阵为正方形矩阵,其行数(或列数)与子复数矩阵的列数相同;子列系数矩阵也为正方形矩阵,其行数(或列数)与子复数矩阵的行数相同。这将在后文中进行更详细的描述。
图4示出了根据本公开的第二方面的一种人工智能处理器处理二维复数矩阵的方法,其中,所述二维复数矩阵的尺寸为N×M;与所述二维复数矩阵对应的行系数矩阵的尺寸为M×M,与所述二维复数矩阵对应的列系数矩阵的尺寸为N×N,所述方法包括:在操作S410,根据人工智能处理器上的片上存储单元的第二存储区的容量,将所述行系数矩阵拆分为至少两个子行系数矩阵,所述子行系数矩阵的尺寸为m×m,并且所述子行系数矩阵的所有元素均能够存放在所述第二存储区内;在操作S420,将所述子行系数矩阵加载至所述人工智能处理器上的片上存储单元的第二存储区;在操作S430,根据所述子行系数矩阵的尺寸,将所述二维复数矩阵拆分为至少两个与所述子行系数矩阵对应的子复数矩阵,其中所述子复数矩阵的尺寸为n×m;在操作S440,将所述子复数矩阵加载至所述人工智能处理器上的片上存储单元的第一存储区;在操作S450,根据所述子复数矩阵,将所述子列系数矩阵拆分为多至少两个与所述子复数矩阵对应的子列系数矩阵,其中所述子列系数矩阵的尺寸为n×n;在操作S460,将所述子列系数矩阵加载至所述人工智能处理器上的片上存储单元的第三存储区;在操作S470,所述人工智能处理器利用所述片上存储单元中的子复数矩阵、子行系数矩阵和子列系数矩阵来进行傅里叶变换,以得到运算结果;以及在操作S480,所述人工智能处理器将所述运算结果传送至所述片外存储单元以进行存储。
在上述实施方式中,以第二存储区的容量为基础,将一个大型行系数矩阵拆分为至少两个子行系数矩阵,每个子行系数矩阵的尺寸不大于第二存储区的容量,从而该第二存储区能够容纳该子行系数矩阵的所有元素。在确定了子行系数矩阵的尺寸之后,则可以根据该子行系数矩阵来确定子复数矩阵的尺寸,再根据子复数矩阵的尺寸来确定子列系数矩阵的尺寸。其中子行系数矩阵为正方形矩阵,其行数(或列数)与子复数矩阵的列数相同;子列系数矩阵也为正方形矩阵,其行数(或列数)与子复数矩阵的行数相同。在该实施方式中,由于首先确定了子行系数矩阵的尺寸,因此子复数矩阵的列数已经确定,在此情况下,只要第一存储区的容量足够大,并且第三存储区的容量足够大,则该子复数矩阵的行数可以尽量大,子复数矩阵的尺寸越大,则大型二维复数矩阵被划分的次数越少,由此减少对片外存储单元的存取次数。
图5示出了根据本公开的第三方面的一种人工智能处理器处理二维复数矩阵的方法,其中,所述二维复数矩阵的尺寸为N×M;与所述二维复数矩阵对应的行系数矩阵的尺寸为M×M,与所述二维复数矩阵对应的列系数矩阵的尺寸为N×N,所述方法包括:在操作S510,根据人工智能处理器上的片上存储单元的第三存储区的容量,将所述列系数矩阵拆分为至少两个子列系数矩阵,所述子列系数矩阵的尺寸为n×n,并且所述子列系数矩阵的所有元素均能够存放在所述第三存储区内;在操作S520,将所述子列系数矩阵加载至所述人工智能处理器上的片上存储单元的第三存储区;在操作S530,根据所述子列系数矩阵,将所述二维复数矩阵拆分为至少两个与所述子列系数矩阵对应的子复数矩阵,其中所述子复数矩阵的尺寸为n×m;在操作S540,将所述子复数矩阵加载至所述人工智能处理器上的片上存储单元的第一存储区;在操作S550,根据所述子复数矩阵,将所述子行系数矩阵拆分为至少两个与所述子复数矩阵对应的子行系数矩阵,其中所述子行系数矩阵的尺寸为m×m;在操作S560,将所述子行系数矩阵加载至所述人工智能处理器上的片上存储单元的第二存储区;在操作S570,所述人工智能处理器利用所述片上存储单元中的子复数矩阵、子行系数矩阵和子列系数矩阵来进行傅里叶变换,以得到运算结果;以及在操作S580,所述人工智能处理器将所述运算结果传送至所述片外存储单元以进行存储。
与结合图4描述的实施方式类似,在结合图5描述的实施方式中,以第三存储区的容量为基础,将一个大型列系数矩阵拆分为至少两个子列系数矩阵,每个子列系数矩阵的尺寸不大于第三存储区的容量,从而该第三存储区能够容纳该子列系数矩阵的所有元素。在确定了子列系数矩阵的尺寸之后,则可以根据该子列系数矩阵来确定子复数矩阵的尺寸,再根据子复数矩阵的尺寸来确定子行系数矩阵的尺寸。其中子行系数矩阵为正方形矩阵,其行数(或列数)与子复数矩阵的列数相同;子列系数矩阵也为正方形矩阵,其行数(或列数)与子复数矩阵的行数相同。在该实施方式中,由于首先确定了子列系数矩阵的尺寸,因此子复数矩阵的行已经确定,在此情况下,只要第一存储区的容量足够大,并且第二存储区的容量足够大,则该子复数矩阵的行数可以尽量大,子复数矩阵的尺寸越大,则大型二维复数矩阵被划分的次数越少,由此减少对片外存储单元的存取次数。
在本公开中,片上存储单元的存储区的容量并不足以一次性将相应的大型二维复数矩阵、行系数矩阵和/或列系数矩阵存储起来,因此需要将该大型二维复数矩阵、行系数矩阵和/或列系数矩阵进行拆分。
本文中的二维复数矩阵,是一种数学上的表示,在实际的存储中,二维复数矩阵可以包括两个矩阵:实部矩阵和虚部矩阵。图6示出了根据本公开的一个实施方式的二维复数矩阵的示意图。
如图6所示,二维复数矩阵的尺寸示例性地为2×4,其包括8个元素,分别为a00+jb00、a01+jb01、a02+jb02、a03+jb03、a10+jb10、a11+jb11、a12+jb12、a13+jb13,其可以拆分为实部矩阵和虚部矩阵,实部矩阵包括了每个复数的实部,分别为a00、a01、a02、a03、a10、a11、a12、a13,虚部矩阵包括了每个复数的虚部,分别为b00、b01、b02、b03、b10、b11、b12、b13。实部矩阵和虚部矩阵的组合,可以表达该二维复数矩阵。
二维离散傅里叶变换的系数矩阵和输入数据的数据尺寸相关,在计算二维离散傅里叶变换矩阵之前只需要知道输入数据的尺寸即可;根据输入数据的高和宽(行数和列数)依次进行二维傅里叶变换的行相关和列相关系数矩阵的计算:
其中f_row_rr表示行变换对应的输入实部,输出实部过程;f_row_ri表示行变换对应的输入实部,输出虚部的过程;f_row_ir表示行变换对应的输入虚部,输出实部的过程;f_row_ii表示行变换输入虚部,输出虚部的过程,Mcols表示输入数据每一行的长度,即原二维矩阵对应的列数;j和k的取值范围分别为0≤j<Mcols,0≤k<Mcols。
由此,对于尺寸为N×M的二维复数矩阵,其行系数矩阵的尺寸为M×M,并且行系数矩阵包括第一行系数矩阵,用于存放实部到实部转换的第一行系数f_row_rr;第二行系数矩阵,用于存放实部到虚部转换的第二行系数f_row_ri;第三行系数矩阵,用于存放虚部到实部转换的第三行系数f_row_ir;以及第四行系数矩阵,用于存放虚部到虚部转换的第四行系数f_row_ii。
类似地,列相关系数矩阵的计算通过如下等式:
其中f_cols_rr表示列变换对应的输入实部,输出实部过程;f_cols_ri表示列变换对应的输入实部,输出虚部的过程;f_cols_ir表示列变换对应的输入虚部,输出实部的过程;f_cols_ii表示列变换输入虚部,输出虚部的过程;N_rows表示输入数据每一行的长度,此处是经过转置之后得出的数据,即原二维矩阵对应的行数;j和k的取值范围分别为0≤j<Nrows,0≤k<Nrows。
由此,对于尺寸为N×M的二维复数矩阵,其列系数矩阵的大小为N×N,并且列系数矩阵包括:第一列系数矩阵,用于存放实部到实部转换的第一列系数f_cols_rr;第二列系数矩阵,用于存放实部到虚部转换的第二列系数f_cols_ri;第三列系数矩阵,用于存放虚部到实部转换的第三列系数f_cols_ir;以及第四列系数矩阵,用于存放虚部到虚部转换的第四列系数f_cols_ii。
类似地,傅里叶逆变换的行系数通过如下等式来计算:
其中b_row_rr表示行逆变换对应的输入实部,输出实部过程;b_row_ri表示行逆变换对应的输入实部,输出虚部的过程;b_row_ir表示行逆变换对应的输入虚部,输出实部的过程;b_row_ii表示行逆变换输入虚部,输出虚部的过程。
类似地,傅里叶逆变换的行系数通过如下等式来计算:
其中b_cols_rr表示列逆变换对应的输入实部,输出实部过程;b_cols_ri表示列逆变换对应的输入实部,输出虚部的过程;b_cols_ir表示列逆变换对应的输入虚部,输出实部的过程;b_cols_ii表示列逆变换输入虚部,输出虚部的过程。
由于上述的系数矩阵无法被存储单元一次性存储,因此,可以将其拆分为多个子行系数矩阵和子列矩阵。对于这些子行矩阵和子列矩阵,根据本公开的一个实施方式,可以通过所述人工智能处理器将所述子行系数矩阵转换为一维数组以加载至所述第二存储区;将所述子列系数矩阵转换为一维数组以加载至所述第三存储区。
图7示出了根据本公开的一个实施方式的将系数矩阵转换为一维数组的示意图。
如图7所示,设一个子系数矩阵(行系数矩阵或列系数矩阵)的大小为4×4,则可以将该子系数矩阵转换为1×16的一维数组。将二维矩阵转换为一维数组来存储便于进行数据的访问与进行变换计算操作。
同样地,二维复数矩阵也可以转换为一维数组,对于一个大小为n×m的子复数矩阵(包括实数矩阵和虚数矩阵),其在转换为一维数组时大小为1×(n×m)。为了进行张量计算,可以将此一维数组变换成1×1×1×(n×m)的多维矩阵方式存储在所述第一存储单元中,其中数据组数为1,高为1,宽为1,深度为(n×m)。
下面将以一个二维数据矩阵为例来具体描述如何将二维复数矩阵进行拆分。该二维数据矩阵可以是该二维复数矩阵的实部矩阵或者虚部矩阵,其是二维复数矩阵的一个特例,因此下文中多个“二维数据矩阵”可以组合为“二维复数矩阵”。
二维数据矩阵的尺寸是由矩阵的长和宽来限定的。例如,一个4×16的二维数据矩阵和一个8×8的二维数据矩阵,均含有64个元素,如果将这两个二维数据矩阵转换为一维数组,则该64个元素所占用的空间是相同的,但是,在本公开中,则认为8×8的二维数据矩阵和4×16的二维数据矩阵在尺寸上是不同的。下面举例来说明大型二维数据矩阵的拆分过程。
设大型二维数据矩阵为BM,其高为H,宽为W,其矩阵可以表示为等式1:
其中m表示该二维数据矩阵中的每一个元素,第一个下标表示该元素所处的行,第二个下标表示该元素所处的列。
下文中,将使用术语“子矩阵”来表示从二维数据矩阵中拆分出的小型矩阵,该子矩阵可以表示拆分出的实部矩阵,也可以表示拆分出的虚部矩阵,因此,在下文中,也可以将子矩阵称为“子复数矩阵”。
可以将上述二维数据矩阵BM拆分为Rn×Cn个子矩阵SM(h,w),每个子矩阵的尺寸为Sr×Sc,其中Rn=H/Sr,Cn=W/Sc,这里的h,w表示子矩阵的下标索引,满足0<=h<=H-1,0<=w<=W-1;由此,上述的大规模二维数据矩阵BM还可以表示为等式2:
其中,SM例如可以表示拆分的子矩阵,其中子矩阵SM00可以表示为等式3.1,并且子矩阵SM01可以表示为等式3.2:
其他子矩阵可以以类似的方式来表示,这里将不再穷举。
由此,每次在进行运算时,可以分批次将子矩阵SM读入到片上存储单元中,以便于在片上存储单元中进行高速运算。
当将二维复数矩阵中的一个拆分为多个子矩阵之后,可以在所述片外存储单元中,根据所述子矩阵(子复数矩阵)在所述二维数据矩阵中的坐标,逐行或逐列地存储所述子矩阵,以形成一维数组。
下面等式4示出了按照逐行进行存储的方式。
BM={SM00 SM01 ... SM0(Cn-1) SM10 ... SM1(Cn-1) ... SM(Rn-1)0 ... SM(Rn-1)(Cn-1)}等式(4)
等式5示出了按照逐列来进行存储的方式:
BM={SM00 SM10 ... SM(Rn-1)0 SM01 ... SM(Rn-1)1 ... SM0(Cn-1) ... SM(Rn-1)(Cn-1)}等式(5)
在上面的存储过程中,每个子矩阵中的元素也可以按照逐行或者逐列的方式来进行存储,即先逐行地存储第零子矩阵SM00的第零行(或第零列)元素,接下来存储子矩阵SM00第一行(或第一列)元素。当子矩阵SM00的所有元素存储完毕之后,再存储第一子矩阵(按行计算的第一子矩阵SM01或者按列计算的第一子矩阵SM10)的所有元素,直至所拆分出来的所有子矩阵存储完毕为止。
可以根据元素所在的子矩阵的编号、子矩阵的尺寸以及元素在子矩阵中的绝对位置,来计算所述元素在所述一维数组中的位置。
根据本公开的一个实施方式,计算所述元素在所述一维数组中的位置可以包括:以所述子矩阵的编号乘以所述子矩阵的尺寸,再加上所述元素在所述子矩阵中的绝对位置。
上文中的绝对位置是指,当矩阵转换为一维数组时,矩阵中的元素在序列中相应的位置。
以逐行存储为例,设每个子矩阵的编号为idx_block,每个子矩阵的尺寸为Sr×Sc,每个元素在子矩阵中的绝对位置为idx_element,则该元素在整个一维数组中的位置如等式6所示:
idx=idx_block*(Sr*Sc)+idx_element 等式(6)
其中,子矩阵的编号idx_block可以根据如下等式7来计算:
每个元素在子矩阵中的绝对位置idx_element可以根据如下等式8来计算:
Idx_element=(i%Sr)*Sc+(j%Sc) 等式(8)
其中,算子Floor表示向下取整,符号“%”表示取余。
以一个16×16的二维数据矩阵,子矩阵尺寸为8×8(即Sr=8,Sc=8),划分为四个子矩阵(即Rn=2,Cn=2)为例来对以上等式6-8进行说明。
例如一个元素的坐标为(3,3),那么
idx_block=Floor(3/8)*2+Floor(3/8)=0
idx_element=(3%8)*8+(3%8)=3*8+3=27
idx=0*(8*8)+27=27
从上面的计算结果中可以得到,该元素处于第零子矩阵中,在第零子矩阵中位于第27个,并且在整个二维数据矩阵中也处于第27个。
在又一个例子中,例如一个元素的坐标为(8,9),那么
idx_block=Floor(8/8)*2+Floor(9/8)=3
idx_element=(8%8)*8+(9%8)=0*8+1=1
idx=3*(8*8)+1=193。
在上面的例子中,元素(8,9)处于第三个子矩阵中,在第三个子矩阵中位于第1个,并且在整个二维数据矩阵中位于第193个。
需要理解的是,对大型二维数据矩阵进行拆分并不完全取决于片上存储单元的容量,还进一步取决于二维数据矩阵的尺寸。根据本公开的一个实施方式,其中,根据所述二维数据矩阵(二维复数矩阵)的尺寸的不同,来动态地调整所述子矩阵(子复数矩阵)的尺寸。
需要理解的是,本文中在描述二维数据矩阵的尺寸时,忽略了这些矩阵和存储单元空间的单位(例如K,M等),而仅仅以无单位的数据来做示意性表示。需要理解的是,本公开的这种无单位表示方式,仅仅在于方便理解,其原理可应用于任何尺寸的矩阵以及存储单元。
例如,对于一个64×64的二维数据矩阵,其包含的元素总数为4096,而片上存储单元的空间为64,在此情况下,可以将64×64的二维数据矩阵划分为多个8×8的子矩阵,每个字矩阵的元素数量为64,而该64×64的二维数据矩阵刚好可以拆分为64个子矩阵;在另外的情况下,也可以将此二维矩阵拆分为4×16的子矩阵,同样也拆分为64个子矩阵;还可以将此二维矩阵拆分为2×32的子矩阵或者1×64的矩阵(或称为序列)。
又例如,对于一个4×1024的二维数据矩阵(例如狭长的图片),其包含的元素总数也为4096,在此情况下,则优选地将该二维数据矩阵拆分为4×16的子矩阵,或者拆分为2×32的子矩阵,或者拆分为1×64的矩阵或序列。
由此,优选地,对每一个输入的二维数据矩阵,可以动态地调整拆分方式,从而动态地调整所拆出的子矩阵的尺寸。
图8示出了根据本公开一个实施方式的动态地调整所述子矩阵的尺寸的方法流程图。
如图8所示,动态地调整所述子矩阵的尺寸可以包括如下操作:在操作S810,设定所述子矩阵的初始行数和初始列数;在操作S820,确定所述二维数据矩阵的行数与所述初始行数之间的第一比值;在操作S830,确定所述二维数据矩阵的列数与所述初始列数之间的第二比值;以及,在操作S840,调整所述子矩阵的行数和列数,以使得所述第一比值和第二比值均为整数。
在以上操作中,可以首先根据片上存储单元的容量来设定一个初始行数和初始列数。例如,对于尺寸为64的存储单元,该初始值可以设置为8×8、1×64、2×32、4×16等等。该初始值可以是一个经验值,例如根据接收的大部分二维数据矩阵的尺寸来确定该初始值。需要理解的是,上面的初始值仅仅是一个示例,还可以采用5×5、9×9等非2的整数幂的方案。
接下来,可以根据上述的初始值来确定该二维数据矩阵可以拆分的子矩阵的数量,即确定二维数据矩阵的行数与初始行数的第一比值以及二维数据矩阵的列数与初始列数的第二比值,不断调整这两个比值,直至这两个比值均为整数。这意味着对二维数据矩阵的拆分达到了较优的结果。第一比值和第二比值越小,则意味着能够拆分出尽量少数量的子矩阵,这对于减少处理器对片外存储单元的存取次数产生有利效果。
通常,二维数据矩阵的形式较为复杂,因此并非所有二维数据矩阵的行和/或列能够被恰好无缝地被分为整数个子矩阵,而是可能会存在无法整数划分的情形。
针对此情况,可以存在多种实施方式来进行解决。
根据本公开的一个实施方式,当所述第一比值和/或第二比值为非整数时,对所述二维数据矩阵的行/或列进行扩展,以使得所述第一比值和/或所述第二比值为整数。
图9a示出了根据本公开的一个实施方式的对二维矩阵进行扩展的示意图。
如图9a所示,深颜色表示二维数据矩阵的原始内容,浅色部分表示扩展部分。其中,该二维数据矩阵的原始尺寸为16×15,即16行,15列,而片上存储单元的尺寸为64,在此情况下,可以拆分为多个8×8的子矩阵,分别为第零子矩阵,第一子矩阵,第二子矩阵和第三子矩阵。如图9a所示,此时列(15列)无法被整数地划分,因此可以在该二维矩阵的列中扩展一列,以形成16×16的矩阵。所扩展的一列可以为全0值,由此,可以将列被扩展之后的二维数据矩阵拆分为四个子矩阵,其中第一子矩阵和第三子矩阵包含了一列扩展列。每个子矩阵的尺寸为8×8。此外,所扩展的一列并不必然是补充0,而是可以根据该相邻列的数据来补充相应的数据,例如可以将扩展列的数据补充为与最后一列的数据相同。对于风景图片而言,这种细微的补充可能并不会实质上影响人类对图片的判读以及图片的美感。
图9b示出了根据本公开的另一个实施方式的对二维矩阵进行扩展的示意图。
对二维数据矩阵的行和/或列进行扩展并不必然是在行的最后或者列的最后进行扩展,而是也可以将扩展行或者扩展列插入到二维矩阵的中间。
在图9b中,在二维数据矩阵的第8列和第9列之间插入了扩展列,扩展列可以全部填充为0,或者,扩展列也可以根据相邻列的值来填充,例如,可以根据前一列或后一列的数据来填充,也可以根据前一列和后一列的平均值来填充。通过平均值的方式来填充有助于形成较为平缓的过渡。与图9a不同的是,第一子矩阵和第三子矩阵所包含的扩展列位于该子矩阵的第零列。
需要理解的是,在图9a和图9b中仅仅示出了扩展行/扩展列的两个实施方式,在其他实施方式中(未以附图的方式示出),还可以将扩展行或者扩展列插入到该二维数据矩阵的首行之前或者首列之前,或者,还可以插入到二维数据矩阵的任何行或者任何列之间。
根据本公开的一个实施方式,所述子矩阵之间可以彼此紧邻地设置。在图9a和图9b所示的实施方式中,每个子矩阵之间不发生重叠,因此可以称之为本公开中的“紧邻”。对于图9b中的情况,虽然在第7列和第8列之间插入了扩展列,但由于子矩阵之间未发生重叠,本公开中也将此情形称为“紧邻”。
在上文中,可以定位所扩展的行或者列的位置,因此,当将子矩阵还原为二维数据矩阵时,可以将扩展的行或者列删除,从而得到与原矩阵尺寸相同的矩阵,进而并不增加任何额外数据内容。
上文中给出了动态地调整子矩阵尺寸的情形,根据本公开的另一个实施方式,所述子矩阵的尺寸可以是固定的,其具有预定行数和预定列数。
例如,对于尺寸为64的片上存储单元,可以将该矩阵的尺寸固定设置为8×8。需要理解的是,该固定尺寸并不必然等于该片上存储单元的容量,而是也可以小于该片上存储单元的容量。此外,8×8只是一个示例,该矩阵的尺寸也可以固定设置为1×64、2×32、4×16等其他尺寸。
采用固定尺寸的子矩阵,则无需对子矩阵进行任何的调节,从而节省了相应的调节时间。
图10示出了根据本公开一个实施方式的对二维数据矩阵进行划分和调节的方法流程图。
如图10所示,在子矩阵为固定尺寸的情况下,可以通过如下方式来确定如何对二维数据矩阵进行划分:在操作S1010,确定所述二维数据矩阵的行数与所述预定行数之间的第三比值;在操作S1020,确定所述二维数据矩阵的列数与所述预定列数之间的第四比值;以及,在操作S1030,当所述第三比值和/或第四比值为非整数时,对所述二维数据矩阵的行和/或列进行扩展,以使得所述第三比值和/或所述第四比值为整数。
在图10所示的流程图中,可以在二维数据矩阵的行无法被子矩阵的预定行数整除,或者当二维数据矩阵的列无法被子矩阵的预定行数整除时,将该二维矩阵的行或者列进行扩展,直至能够被上述预定行数或预定列数整除为止。
上面已经结合图9a和图9b描述了对所述二维数据矩阵的行/或列进行扩展的实施方式,这里将不再赘述。
根据本公开的另一个实施方式,所述子矩阵中的至少两个矩阵存在重叠部分。
图11示出了根据本公开的一个实施方式的子矩阵存在重叠部分的示意图。
如图11所示,二维数据矩阵的尺寸为16×14,而子矩阵的预定尺寸为8×8,在此情况下,可以将二维数据矩阵拆分为四个8×8的子矩阵,分别为第零子矩阵,第一子矩阵,第二子矩阵和第三子矩阵。由于二维数据矩阵的列数14除以子矩阵的预定列数8为非整数,因此可以使得至少两个子矩阵存在重叠部分。在图11中,网格部分为两个子矩阵的重叠部分,即第零子矩阵与第一子矩阵的重叠部分,以及第二子矩阵与第三子矩阵的重叠部分。该重叠部分既包含了第零子矩阵和第二矩阵的最后两列的元素,也包含了第一子矩阵和第三矩阵的最初两列的元素。
子矩阵包含重叠部分的内容可以使得在二维数据矩阵的尺寸不能被子矩阵的尺寸整除时,不必在矩阵中插入额外的行或者列。需要理解的是,图11仅仅是一种示例,重叠部分的尺寸可以是任意,并且,子矩阵的重叠和不重叠是可以混合使用的。例如,对于二维数据矩阵的尺寸为24×23,子矩阵的尺寸为8×8的情形,在列的方向上可以拆分为3个子矩阵(分别为第零子矩阵,第一子矩阵和第二子矩阵),第零子矩阵和第一子矩阵可以是紧邻并且不发生重叠的,而第一子矩阵可以和第二子矩阵有一列重叠部分。
根据以上描述,当拆分二维矩阵时,可能存在重叠部分。当存在重叠部分时,可以标识该重叠部分,以对该重叠部分进行定位。
仍然以图11为例来进行说明。在图11中,二维数据矩阵的尺寸为16×14,子矩阵的尺寸为8×8,因此,可以得出重叠的部分可以是第6列和第7列。可以在关于子矩阵的信息中标识出该重叠部分,以便于后续的定位和处理。关于子矩阵的信息例如可以包括子矩阵的尺寸,子矩阵在二维数据矩阵中的位置,子矩阵是否存在与其他子矩阵的重叠部分,以及子矩阵与其他子矩阵的重叠部分的位置等等。
当在片上存储单元中对每一个子矩阵进行处理之后,可以将这些处理之后形成的子矩阵存储回片外存储单元中。当在片外存储单元中存储这些经过处理的子矩阵时,如果两个子矩阵存在重叠部分,则可以以多种方式来存储,例如,重叠部分可以用一个经过处理的子矩阵的数据来覆盖另外一个经过处理的子矩阵的数据,也可以将经过处理的两个子矩阵的重叠部分求平均值,作为最终的存储结果。需要理解的是,对重叠部分的任何处理,都包含在本公开所要保护的范围之内。
上面描述了如何将二维复数矩阵拆分为多个子复数矩阵的情形,接下来将详细描述如何对这些子复数矩阵进行傅里叶变换。
图12示出了根据本公开一个实施方式的人工智能处理器利用所述片上存储单元中的子复数矩阵、子行系数矩阵和子列系数矩阵来进行傅里叶变换的方法流程图。
如图12所示,人工智能处理器利用所述片上存储单元中的子复数矩阵、子行系数矩阵和子列系数矩阵来进行傅里叶变换包括:在操作S1210,将所述子复数矩阵的每一行与所述子行系数矩阵的所有行进行卷积运算,以得到第一中间结果;在操作S1220,将所述第一中间结果的同一行元素相加,以得到第一运算结果;在操作S1230,将第一运算结果进行转置以得到转置结果,将所述转置结果的每一行与所述子列系数矩阵的所有行进行卷积运算,以得到第二中间结果;以及在操作S1240,将所述第二中间结果的同一行元素相加,以得到运算结果。
首先,介绍进行对复数进行傅里叶变换的基本概念。对于输入为复数,通过傅里叶变换后,输出的也是复数;实现复数相乘的通用计算公式:
(A1+jB1)*(A2+jB2)=(A1*A2-B1*B2)+j(A1B2+B1A2)
其中A1、A2为两个复数数据的实部,B1、B2为两个复数数据的虚部;
基于以上通用计算公式,根据二维复数矩阵与行系数矩阵来计算傅里叶变换可以通过如下等式来进行:
RRrow=inpreal*f_rows_rr
IRrow=inpimag*f_rows_ir
RIrow=inpreal*f_rows_ri
IIrow=inpimag*f_rows_ii
Realrow=RRrow+IRrow
Imagrow=RIrow+IIrow
其中inpreal、inpimag分别为输入数据的实部和虚部,RRrow表示对应输入实部输出也是实部,RIrow表示对应输入实部输出是虚部,IRrow表示输入是虚部输出是实部,IIrow表示输入时虚部输出也是虚部;Realrow表示傅里叶变换之后的实部,Imagrow表示傅里叶变换之后的虚部,其中下标“row”表示上述操作针对的是行系数矩阵的。
图13示出了根据本公开的一个实施方式的对子复数矩阵和相应的子行系数矩阵进行傅里叶变换的示意图。
如图13所示,子复数矩阵为2×4,其中该子复数矩阵第一行的数据示例性地为a1,b1,c1和d1;子行系数矩阵为4×4,其第一行的数据示例性地为a2,b2,c2和d2。将子复数矩阵第一行的数据与该子行系数矩阵进行卷积操作,得到第一中间结果,其中a1与a2进行卷积操作的值为a3,b1与b2进行卷积操作的值为b3,c1与c2进行卷积操作的值为c3,d1与d2进行卷积操作的值为d3。在第一运算结果中,结果A=a3+b3+c3+d3,即将所述第一中间结果的同一行元素相加而得到。进一步地,尽管图13中未示出,子复数矩阵的第一行的数据与子行系数矩阵的第二行的数据进行卷积操作,得到的这些结果相加得到第一运算结果B。同样地,可以得到第一运算结果C和D。在子复数矩阵的第一行数据的运算结束之后,以同样的方式进行第二行数据的运算。从而第一运算结果的大小与二维复数矩阵的大小相同,均为2×4。
根据子复数矩阵与子列系数矩阵来计算傅里叶变换可以通过如下等式来进行:
RRcol=tempreal*f_cols_rr
IRcol=tempimag*f_cols_ir
RIcol=tempreal*f_cols_ri
IIcol=tempimag*f_cols_ii
Realcol=RRcol+IRcol
Imagcol=RIcol+IIcol
其中tempreal、tempimag分别为图13中进行计算得到的第一中间结果经过转置后数据的实部和虚部,RRcol表示对应输入实部输出也是实部,RIcol表示对应输入实部输出是虚部,IRcol表示输入是虚部输出是实部,IIcol表示输入时虚部输出也是虚部;Realcol表示傅里叶变换之后的实部,Imagcol表示傅里叶变换之后的虚部,其中下标“col”表示上述操作针对的是列系数矩阵的。
图14示出了根据本公开的一个实施方式的对子复数矩阵和相应的子列系数矩阵进行傅里叶变换的示意图。
如图14所示,第一运算结果的尺寸为2×4,经过转置之后,尺寸为4×2,由此列系数矩阵的尺寸为2×2。经过计算得到运算结果,其尺寸为4×2。多得到的运算结果经过转置之后,则可以得到最终的运算结果。
需要理解的是,上面的计算首先以子复数矩阵和子行系数矩阵来计算第一运算结果,再通过第一运算结果的转置矩阵与子列系数矩阵来计算运算结果;根据本公开的另一个实施方式,可以首先以子复数矩阵的转置与子列系数矩阵来计算第一运算结果,再通过第一运算结果的转置矩阵与子行系数矩阵来计算运算结果。
根据本公开的一个实施方式,所述傅里叶变换可以是并行进行的。
根据图1a和图1b所示,可以存在多个处理器核以及多个处理器组,由此当从片外存储单元中读取到数据后,可以对这些数据进行并行处理,以加快数据的处理速度。
根据本公开的一个实施方式,其中,通过人工智能处理器对所述二维复数矩阵,所述行系数矩阵和列系数矩阵来进行傅里叶变换包括:通过多个人工智能处理器分别对多个子复数矩阵、多个子行系数矩阵以及多个子列系数矩阵并行进行傅里叶变换。
图15示出了通过多个工智能处理器分别对多个子矩阵进行并行的傅里叶变换的示意图。
如图15所示,一个二维数据矩阵的尺寸为16×16,可以将其拆分为四个子矩阵,即第零子矩阵,第一子矩阵,第二子矩阵和第三子矩阵,每个子矩阵的尺寸为8×8。可以采用四个处理器来分别对这四个子矩阵进行并行处理,即处理器0处理第零子矩阵,处理器1处理第一子矩阵,处理器2处理第二子矩阵,以及处理器3处理第三子矩阵。需要理解的是,为了清楚器件,这里并未示出行系数矩阵和列系数矩阵。
需要理解的是,这里的处理器0-3仅仅是对处理器的一种统称,每个处理器可以是单独的处理器器核(如图1a所示),也可以是处理器组(如图1b所示)。多个处理器可以从片外存储单元中分别将相应的子矩阵读取到片上存储单元中,并在片上存储单元中对相应的子矩阵与其对应的子行系数矩阵以及子列系数矩阵进行傅里叶变换。
片上存储单元可以是多个,每个片上存储单元存储一个子矩阵,从而每个处理器分别对不同的片上存储单元中的子矩阵进行并行处理;片上存储单元也可以是单个共享存储单元,该共享存储单元可以一次性存储多个子矩阵,多个处理器对该单个共享存储单元中的不同子矩阵进行并行处理。
根据本公开的一个实施方式,通过人工智能处理器对所述二维复数矩阵,所述行系数矩阵和列系数矩阵来进行傅里叶变换包括:通过多个人工智能处理器分别对每个子复数矩阵中的不同元素,以及与所述元素相对应的子行系数矩阵和子列系数中的系数元素进行傅里叶变换。
这里所述的不同元素,是指子复数矩阵中位于不同位置的元素,根据本公开的一个实施方式,可以是每一个处理器都负责固定位置处的元素,例如,对于子复数矩阵中每一行中第0,2,4个元素,由第零个处理器核来执行,对于二维复数矩阵中每一行中第1,3,5个元素,可以由第一个处理器核来执行等等。
图16a和图16b分别示出了不同元素位于不同行以及不同元素位于不同列的情形。
在图16a中,子复数矩阵例如可以是2×4,处理器0负责第0列的处理,处理器1负责第1列的处理,处理器2负责第2列的处理,以及处理器3负责第3列的处理。在此情况下,每个处理器从片上存储单元中读取相应的元素并进行并行处理,从而能够提升处理速度。
在图16b中,子复数矩阵例如可以是2×4,处理器0负责第0行的处理,处理器1负责第1行的处理。在此情况下,处理器0可以将第0行的所有元素与子行系数矩阵进行卷积运算,而处理器1可以将第1行的所有元素与子行系数矩阵进行卷积运算。在此情况下,每个行都由不同的处理器来负责处理,从而加快了运算速度。
需要理解的是,这里所述的处理器,仅仅还是一个统称,其可以是处理器核,也可以是处理器组。本公开不对处理器的类型做任何限定。
综上所述,相对于现有方法,本发明公开的技术方案具有如下优势:
本公开的技术方案可以充分利用处理器的片上资源,解决由了于处理器片上资源有限而不能处理大型数据的缺陷。
本公开的技术方案对原大型矩阵进行了分块转存的操作,可以解决由于大量地址随机跳变操作导致访问效率降低的问题。
本公开的技术方案可以一次性操作整个子矩阵尺寸的数据,可以避免在片外存储上频繁进行效率很低的标量的操作,这样可以提升计算效率。
由此可见,本公开的技术方案可以充分利用硬件资源,解决所有因硬件资源有限不足以支撑大型数据运算的问题;降低内存间缓存耗时,从而提升访存效率,进一步提升算法的性能。
此外,还需要理解的是,尽管上文中仅以傅里叶变换为例来进行描述和说明,但本公开的方案也同样适用于傅里叶逆变换操作,其区别仅在于行系数矩阵和列系数矩阵中元素的不同,但在整体的操作方面,傅里叶变换和傅里叶逆变换是等同的,因此本公开的保护范围也同样包含了傅里叶逆变换的情形。
本公开还提供了一种电子设备,包括:一个或多个处理器;以及存储器,所述存储器中存储有计算机可执行指令,当所述计算机可执行指令由所述一个或多个处理器运行时,使得所述电子设备执行如上所述的方法。
本公开还提供一种计算机可读存储介质,包括计算机可执行指令,当所述计算机可执行指令由一个或多个处理器运行时,执行如上所述的方法。
本公开的技术方案可应用于人工智能领域,实现为或者实现在人工智能芯片中。该芯片可以单独存在,也可以包含在计算装置中。
图17示出了一种组合处理装置1700,其包括上述的计算装置1702,通用互联接口1704,和其他处理装置1706。根据本公开的计算装置与其他处理装置进行交互,共同完成用户指定的操作。图17为组合处理装置的示意图。
其他处理装置,包括中央处理器CPU、图形处理器GPU、神经网络处理器等通用/专用处理器中的一种或以上的处理器类型。其他处理装置所包括的处理器数量不做限制。其他处理装置作为机器学习运算装置与外部数据和控制的接口,包括数据搬运,完成对本机器学习运算装置的开启、停止等基本控制;其他处理装置也可以和机器学习运算装置协作共同完成运算任务。
通用互联接口,用于在计算装置(包括例如机器学习运算装置)与其他处理装置间传输数据和控制指令。该计算装置从其他处理装置中获取所需的输入数据,写入该计算装置片上的存储装置;可以从其他处理装置中获取控制指令,写入计算装置片上的控制缓存;也可以读取计算装置的存储模块中的数据并传输给其他处理装置。
可选的,该结构还可以包括存储装置1708,存储装置分别与所述计算装置和所述其他处理装置连接。存储装置用于保存在所述计算装置和所述其他处理装置的数据,尤其适用于所需要运算的数据在本计算装置或其他处理装置的内部存储中无法全部保存的数据。
该组合处理装置可以作为手机、机器人、无人机、视频监控设备等设备的SOC片上系统,有效降低控制部分的核心面积,提高处理速度,降低整体功耗。此情况时,该组合处理装置的通用互联接口与设备的某些部件相连接。某些部件譬如摄像头,显示器,鼠标,键盘,网卡,wifi接口。
在一些实施例里,本披露还公开了一种芯片封装结构,其包括了上述芯片。
在一些实施例里,本披露还公开了一种板卡,其包括了上述芯片封装结构。参阅图18,其提供了一种示例性的板卡,上述板卡除了包括上述芯片1802以外,还可以包括其他的配套部件,该配套部件包括但不限于:存储器件1804、接口装置1806和控制器件1808。
所述存储器件与所述芯片封装结构内的芯片通过总线连接,用于存储数据。所述存储器件可以包括多组存储单元1810。每一组所述存储单元与所述芯片通过总线连接。可以理解,每一组所述存储单元可以是DDRSDRAM(英文:Double Data Rate SDRAM,双倍速率同步动态随机存储器)。
DDR不需要提高时钟频率就能加倍提高SDRAM的速度。DDR允许在时钟脉冲的上升沿和下降沿读出数据。DDR的速度是标准SDRAM的两倍。在一个实施例中,所述存储装置可以包括4组所述存储单元。每一组所述存储单元可以包括多个DDR4颗粒(芯片)。在一个实施例中,所述芯片内部可以包括4个72位DDR4控制器,上述72位DDR4控制器中64bit用于传输数据,8bit用于ECC校验。在一个实施例中,每一组所述存储单元包括多个并联设置的双倍速率同步动态随机存储器。DDR在一个时钟周期内可以传输两次数据。在所述芯片中设置控制DDR的控制器,用于对每个所述存储单元的数据传输与数据存储的控制。
所述接口装置与所述芯片封装结构内的芯片电连接。所述接口装置用于实现所述芯片与外部设备1012(例如服务器或计算机)之间的数据传输。例如在一个实施例中,所述接口装置可以为标准PCIE接口。比如,待处理的数据由服务器通过标准PCIE接口传递至所述芯片,实现数据转移。在另一个实施例中,所述接口装置还可以是其他的接口,本披露并不限制上述其他的接口的具体表现形式,所述接口单元能够实现转接功能即可。另外,所述芯片的计算结果仍由所述接口装置传送回外部设备(例如服务器)。
所述控制器件与所述芯片电连接。所述控制器件用于对所述芯片的状态进行监控。具体的,所述芯片与所述控制器件可以通过SPI接口电连接。所述控制器件可以包括单片机(Micro Controller Unit,MCU)。如所述芯片可以包括多个处理芯片、多个处理核或多个处理电路,可以带动多个负载。因此,所述芯片可以处于多负载和轻负载等不同的工作状态。通过所述控制装置可以实现对所述芯片中多个处理芯片、多个处理和/或多个处理电路的工作状态的调控。
在一些实施例里,本披露还公开了一种电子设备或装置,其包括了上述板卡。
电子设备或装置包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、服务器、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。
所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本披露并不受所描述的动作顺序的限制,因为依据本披露,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本披露所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本披露所提供的几个实施例中,应该理解到,所披露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性、光学、声学、磁性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本披露各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。
所述集成的单元如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,当本披露的技术方案可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本披露各个实施例所述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上对本披露实施例进行了详细介绍,本文中应用了具体个例对本披露的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本披露的方法及其核心思想;同时,对于本领域的一般技术人员,依据本披露的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本披露的限制。
Claims (25)
1.一种人工智能处理器处理二维复数矩阵的方法,其中,所述二维复数矩阵的尺寸为N×M;与所述二维复数矩阵对应的行系数矩阵的尺寸为M×M,与所述二维复数矩阵对应的列系数矩阵的尺寸为N×N,所述方法包括:
根据人工智能处理器上的片上存储单元的第一存储区的容量以及所述二维复数矩阵的尺寸,将所述二维复数矩阵拆分为至少两个子复数矩阵,所述子复数矩阵的尺寸为n×m,且所述子复数矩阵的所有元素均能够存放在所述第一存储区内;
将所述子复数矩阵加载至所述人工智能处理器的片上存储单元的第一存储区中;
根据所述子复数矩阵的尺寸,将所述行系数矩阵拆分为至少两个子行系数矩阵,以及将所述列系数矩阵拆分为至少两个子列系数矩阵,其中,所述子行系数矩阵的尺寸为m×m,所述子列系数矩阵的尺寸为n×n;
将所述子行系数矩阵加载至所述人工智能处理器的片上存储单元的第二存储区中;
将所述子列系数矩阵加载至所述人工智能处理器的片上存储单元的第三存储区中;
所述人工智能处理器利用所述片上存储单元中的子复数矩阵、子行系数矩阵和子列系数矩阵来进行傅里叶变换,以得到运算结果;以及
所述人工智能处理器将所述运算结果传送至所述片外存储单元以进行存储。
2.一种人工智能处理器处理二维复数矩阵的方法,其中,所述二维复数矩阵的尺寸为N×M;与所述二维复数矩阵对应的行系数矩阵的尺寸为M×M,与所述二维复数矩阵对应的列系数矩阵的尺寸为N×N,所述方法包括:
根据人工智能处理器上的片上存储单元的第二存储区的容量,将所述行系数矩阵拆分为至少两个子行系数矩阵,所述子行系数矩阵的尺寸为m×m,并且所述子行系数矩阵的所有元素均能够存放在所述第二存储区内;
将所述子行系数矩阵加载至所述人工智能处理器上的片上存储单元的第二存储区;
根据所述子行系数矩阵的尺寸,将所述二维复数矩阵拆分为至少两个与所述子行系数矩阵对应的子复数矩阵,其中所述子复数矩阵的尺寸为n×m;
将所述子复数矩阵加载至所述人工智能处理器上的片上存储单元的第一存储区;
根据所述子复数矩阵,将所述子列系数矩阵拆分为多至少两个与所述子复数矩阵对应的子列系数矩阵,其中所述子列系数矩阵的尺寸为n×n;
将所述子列系数矩阵加载至所述人工智能处理器上的片上存储单元的第三存储区;
所述人工智能处理器利用所述片上存储单元中的子复数矩阵、子行系数矩阵和子列系数矩阵来进行傅里叶变换,以得到运算结果;以及
所述人工智能处理器将所述运算结果传送至所述片外存储单元以进行存储。
3.一种人工智能处理器处理二维复数矩阵的方法,其中,所述二维复数矩阵的尺寸为N×M;与所述二维复数矩阵对应的行系数矩阵的尺寸为M×M,与所述二维复数矩阵对应的列系数矩阵的尺寸为N×N,所述方法包括:
根据人工智能处理器上的片上存储单元的第三存储区的容量,将所述列系数矩阵拆分为至少两个子列系数矩阵,所述子列系数矩阵的尺寸为n×n,并且所述子列系数矩阵的所有元素均能够存放在所述第三存储区内;
将所述子列系数矩阵加载至所述人工智能处理器上的片上存储单元的第三存储区;
根据所述子列系数矩阵,将所述二维复数矩阵拆分为至少两个与所述子列系数矩阵对应的子复数矩阵,其中所述子复数矩阵的尺寸为n×m;
将所述子复数矩阵加载至所述人工智能处理器上的片上存储单元的第一存储区;
根据所述子复数矩阵,将所述子行系数矩阵拆分为至少两个与所述子复数矩阵对应的子行系数矩阵,其中所述子行系数矩阵的尺寸为m×m;
将所述子行系数矩阵加载至所述人工智能处理器上的片上存储单元的第二存储区;
所述人工智能处理器利用所述片上存储单元中的子复数矩阵、子行系数矩阵和子列系数矩阵来进行傅里叶变换,以得到运算结果;以及
所述人工智能处理器将所述运算结果传送至所述片外存储单元以进行存储。
4.根据权利要求1-3中任意一项所述的方法,其中,所述人工智能处理器将所述子行系数矩阵转换为一维数组以加载至所述第二存储区;将所述子列系数矩阵转换为一维数组以加载至所述第三存储区。
5.根据权利要求1-4中任意一项所述的方法,其中,所述二维复数矩阵包括实部矩阵和虚部矩阵。
6.根据权利要求5所述的方法,其中,所述行系数矩阵包括:
第一行系数矩阵,用于存放实部到实部转换的第一行系数;
第二行系数矩阵,用于存放实部到虚部转换的第二行系数;
第三行系数矩阵,用于存放虚部到实部转换的第三行系数;以及
第四行系数矩阵,用于存放虚部到虚部转换的第四行系数。
7.根据权利要求5所述的方法,其中,所述列系数矩阵包括:
第一列系数矩阵,用于存放实部到实部转换的第一列系数;
第二列系数矩阵,用于存放实部到虚部转换的第二列系数;
第三列系数矩阵,用于存放虚部到实部转换的第三列系数;以及
第四列系数矩阵,用于存放虚部到虚部转换的第四列系数。
8.根据权利要求1和4-7中任意一项所述的方法,其中,根据所述二维复数矩阵的尺寸的不同,来动态地调整所述子复数矩阵的尺寸。
9.根据权利要求8所述的方法,其中,动态地调整所述子复数矩阵的尺寸包括:
设定所述子复数矩阵的初始行数和初始列数;
确定所述二维复数矩阵的行数与所述初始行数之间的第一比值;
确定所述二维复数矩阵的列数与所述初始列数之间的第二比值;
调整所述子复数矩阵的行数和列数,以使得所述第一比值和第二比值均为整数。
10.根据权利要求9所述的方法,其中,当所述第一比值和/或第二比值为非整数时,对所述二维复数矩阵的行/或列进行扩展,以使得所述第一比值和/或所述第二比值为整数。
11.根据权利要求1和4-10中任意一项所述的方法,其中,所述子复数矩阵之间彼此紧邻地设置。
12.根据权利要求1和4-11中任意一项所述的方法,其中,所述子复数矩阵的尺寸是固定的,其具有预定行数和预定列数。
13.根据权利要求12所述的方法,其中,
确定所述二维复数矩阵的行数与所述预定行数之间的第三比值;
确定所述二维复数矩阵的列数与所述预定列数之间的第四比值;
当所述第三比值和/或第四比值为非整数时,对所述二维复数矩阵的行和/或列进行扩展,以使得所述第三比值和/或所述第四比值为整数。
14.根据权利要求12所述的方法,其中,所述子复数矩阵中的至少两个存在重叠部分。
15.根据权利要求14所述的方法,进一步包括:标识所述重叠部分,以对所述重叠部分进行定位。
16.根据权利要求1和4-15中任意一项所述的方法,进一步包括:在所述片外存储单元中,根据所述子复数矩阵在所述二维复数矩阵中的坐标,逐行或逐列地存储所述子复数矩阵,以形成一维数组。
17.根据权利要求16所述的方法,其中,根据所述子复数矩阵在所述二维复数矩阵中的编号、子复数矩阵的尺寸以及元素在子复数矩阵中的绝对位置,来计算所述元素在所述一维数组中的位置。
18.根据权利要求17所述的方法,其中,计算所述元素在所述一维数组中的位置包括:
以所述子复数矩阵的编号乘以所述子复数矩阵的尺寸,再加上所述元素在所述子复数矩阵中的绝对位置。
19.根据权利要求1-18中任意一项所述的方法,其中,所述人工智能处理器利用所述片上存储单元中的子复数矩阵、子行系数矩阵和子列系数矩阵来进行傅里叶变换,以得到运算结果包括:
将所述子复数矩阵的每一行与所述子行系数矩阵的所有行进行卷积运算,以得到第一中间结果;
将所述第一中间结果的同一行元素相加,以得到第一运算结果;
将第一运算结果进行转置以得到转置结果,将所述转置结果的每一行与所述子列系数矩阵的所有行进行卷积运算,以得到第二中间结果;
将所述第二中间结果的同一行元素相加,以得到运算结果。
20.根据权利要求1-19中任意一项所述的方法,其中,所述子复数矩阵按照1×1×1×(n×m)的多维矩阵方式存储在所述第一存储单元中。
21.根据权利要求1-20中任意一项所述的方法,其中,所述傅里叶变换是并行进行的。
22.根据权利要求21所述的方法,其中,通过人工智能处理器对所述二维复数矩阵,所述行系数矩阵和列系数矩阵来进行傅里叶变换包括:
通过多个人工智能处理器分别对多个子复数矩阵、多个子行系数矩阵以及多个子列系数矩阵并行进行傅里叶变换。
23.根据权利要求21所述的方法,其中,通过人工智能处理器对所述二维复数矩阵,所述行系数矩阵和列系数矩阵来进行傅里叶变换包括:
通过多个人工智能处理器分别对每个子复数矩阵中的不同元素,以及与所述元素相对应的子行系数矩阵和子列系数中的系数元素进行傅里叶变换。
24.一种电子设备,包括:
一个或多个处理器;以及
存储器,所述存储器中存储有计算机可执行指令,当所述计算机可执行指令由所述一个或多个处理器运行时,使得所述电子设备执行如权利要求1-23中任意一项所述的方法。
25.一种计算机可读存储介质,包括计算机可执行指令,当所述计算机可执行指令由一个或多个处理器运行时,执行如权利要求1-23中任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911349811.1A CN111028136B (zh) | 2019-12-24 | 2019-12-24 | 一种人工智能处理器处理二维复数矩阵的方法和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911349811.1A CN111028136B (zh) | 2019-12-24 | 2019-12-24 | 一种人工智能处理器处理二维复数矩阵的方法和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111028136A CN111028136A (zh) | 2020-04-17 |
CN111028136B true CN111028136B (zh) | 2023-04-07 |
Family
ID=70214164
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911349811.1A Active CN111028136B (zh) | 2019-12-24 | 2019-12-24 | 一种人工智能处理器处理二维复数矩阵的方法和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111028136B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111125628A (zh) * | 2019-12-24 | 2020-05-08 | 上海寒武纪信息科技有限公司 | 人工智能处理器处理二维数据矩阵的方法和设备 |
CN111784557A (zh) * | 2020-06-30 | 2020-10-16 | 安徽寒武纪信息科技有限公司 | 一种处理图像数据的方法、装置、板卡及可读存储介质 |
CN115221101B (zh) * | 2021-04-16 | 2023-12-19 | 中科寒武纪科技股份有限公司 | 用于优化片上系统的矩阵乘操作的方法和相关产品 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103347189A (zh) * | 2013-08-03 | 2013-10-09 | 程涛 | 基于dct和dft的二维压缩感知影像采集和重构方法 |
CN104915322A (zh) * | 2015-06-09 | 2015-09-16 | 中国人民解放军国防科学技术大学 | 一种卷积神经网络硬件加速方法及其axi总线ip核 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7492815B2 (en) * | 2004-11-24 | 2009-02-17 | Nokia Corporation | Reduced parallel and pipelined high-order MIMO LMMSE receiver architecture |
US9286216B2 (en) * | 2014-01-16 | 2016-03-15 | Carnegie Mellon University | 3DIC memory chips including computational logic-in-memory for performing accelerated data processing |
-
2019
- 2019-12-24 CN CN201911349811.1A patent/CN111028136B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103347189A (zh) * | 2013-08-03 | 2013-10-09 | 程涛 | 基于dct和dft的二维压缩感知影像采集和重构方法 |
CN104915322A (zh) * | 2015-06-09 | 2015-09-16 | 中国人民解放军国防科学技术大学 | 一种卷积神经网络硬件加速方法及其axi总线ip核 |
Non-Patent Citations (2)
Title |
---|
复数Curvelet变换域复数高斯尺度混合图像降噪;闫河等;《信息与控制》;20091215(第06期);全文 * |
边界元法中线性方程组的拟波阵分块求解;曹平等;《计算力学学报》;19990215(第01期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111028136A (zh) | 2020-04-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111028136B (zh) | 一种人工智能处理器处理二维复数矩阵的方法和设备 | |
US10768894B2 (en) | Processor, information processing apparatus and operation method for processor | |
WO2020073211A1 (zh) | 运算加速器、处理方法及相关设备 | |
CN111125628A (zh) | 人工智能处理器处理二维数据矩阵的方法和设备 | |
CN112416433B (zh) | 一种数据处理装置、数据处理方法及相关产品 | |
CN110059797B (zh) | 一种计算装置及相关产品 | |
CN111124995A (zh) | 通过人工智能处理器处理一维复数数组的方法和设备 | |
CN111353598A (zh) | 一种神经网络压缩方法、电子设备及计算机可读介质 | |
CN115221102B (zh) | 用于优化片上系统的卷积运算操作的方法和相关产品 | |
CN111143766A (zh) | 人工智能处理器处理二维复数矩阵的方法和设备 | |
CN110059809B (zh) | 一种计算装置及相关产品 | |
WO2021082725A1 (zh) | Winograd卷积运算方法及相关产品 | |
CN109740730B (zh) | 运算方法、装置及相关产品 | |
CN109711538B (zh) | 运算方法、装置及相关产品 | |
CN112765540A (zh) | 数据处理方法、装置及相关产品 | |
WO2021082723A1 (zh) | 运算装置 | |
CN111382852B (zh) | 数据处理装置、方法、芯片及电子设备 | |
CN111124996A (zh) | 通过人工智能处理器处理一维复数数组的方法和设备 | |
CN111125627A (zh) | 用于池化多维矩阵的方法及相关产品 | |
CN113807489B (zh) | 用于执行反卷积操作的方法、板卡及其计算装置 | |
CN113469333B (zh) | 执行神经网络模型的人工智能处理器、方法及相关产品 | |
CN112784207B (zh) | 运算方法及相关产品 | |
CN113792867B (zh) | 运算电路、芯片和板卡 | |
WO2023087698A1 (zh) | 执行卷积运算的计算装置、方法及相关产品 | |
WO2022257980A1 (zh) | 计算装置、利用计算装置实施卷积运算的方法及相关产品 |
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 |