首页 / 专利库 / 电脑零配件 / 协处理器 / 数据处理系统

数据处理系统

阅读:438发布:2020-05-11

专利汇可以提供数据处理系统专利检索,专利查询,专利分析的服务。并且提供了一种 数据处理 系统,包括:处理器;数据 接口 ,其用于与控制单元进行通信,处理器位于数据接口的一侧上;内部存储装置,其能够由处理器存取,内部存储装置与处理器在数据接口的同一侧上;以及寄存器阵列,其能够由处理器存取并且包括多个寄存器,每个寄存器具有多个矢量通道。内部存储装置被布置为存储控制数据,该控制数据指示多个寄存器中的一个或多个的矢量通道的有序选择。处理器被布置为响应于从控制单元接收到指令数据,执行混合运算,其中从寄存器阵列中的一个或多个源寄存器中选择数据并且将其传输到目的寄存器。根据存储在内部存储装置中的控制数据从矢量通道中选择数据。,下面是数据处理系统专利的具体信息内容。

1.一种数据处理系统,包括:
处理器;
数据接口,所述数据接口用于与控制单元进行通信,所述处理器位于所述数据接口的一侧上;
内部存储装置,所述内部存储装置能够由所述处理器存取,所述内部存储装置与所述处理器在所述数据接口的同一侧上;以及
寄存器阵列,所述寄存器阵列能够由所述处理器存取并且包括多个寄存器,每个寄存器具有多个矢量通道,其中:
所述内部存储装置被布置为存储控制数据,所述控制数据指示所述多个寄存器中的一个或多个寄存器的矢量通道的有序选择;并且
所述处理器被布置为响应于从所述控制单元接收到指令数据,从所述寄存器阵列中的一个或多个源寄存器中选择数据,并且将所选择的数据传输到目的寄存器,其中,选择所述数据包括:根据存储在所述内部存储装置中的控制数据从矢量通道中进行选择。
2.根据权利要求1所述的系统,其中,所述处理器被布置为:响应于从所述控制单元接收到指示所述多个寄存器的子集的指令数据,将所指示的子集指定为所述一个或多个源寄存器。
3.根据权利要求1或2所述的系统,其中,所述处理器被布置为:响应于从所述控制单元接收到设置数据,将所述控制数据写入所述内部存储装置。
4.根据权利要求1所述的系统,其中:
所述内部存储装置包括多个存储区域,所述多个存储区域中的每一个均被布置为存储相应控制数据,所述相应控制数据指示所述多个寄存器中的一个或多个寄存器的矢量通道的相应有序选择;以及
所述处理器被布置为:响应于从所述控制单元接收到指示所述多个存储区域中的一个存储区域的指令数据,从所述寄存器阵列中的一个或多个源寄存器中选择数据,并且将所选择的数据传输到目的寄存器,
其中,选择所述数据包括:根据存储在所指示的存储区域中的控制数据从矢量通道中进行选择。
5.根据权利要求1所述的系统,其中,所述处理器可用于对存储在所述寄存器阵列中的一个或多个寄存器中的数据执行逻辑矢量运算。
6.根据权利要求1所述的系统,其中,所述内部存储装置存储用于对卷积神经网络(CNN)的卷积层内的特征图执行池化运算的控制数据。
7.根据权利要求1所述的系统,包括一个或多个乘法累加(MAC)单元,其中:
所述一个或多个MAC单元中的每个MAC单元被配置为:作为卷积神经网络(CNN)的卷积层内的卷积运算的部分,执行MAC运算以处理输入数据;以及
由所述处理器选择的数据表示使用所述一个或多个MAC单元生成的特征图的部分。
8.根据权利要求1所述的系统,其中,所述处理器可用于响应于接收到所述指令数据而将另外的寄存器中的数据置零。
9.根据权利要求1所述的系统,其中,所述处理器是协处理器
10.一种处理数据的计算机实现的方法,包括由处理器:
从控制单元接收指令数据;
响应于接收到所述指令数据,从寄存器阵列中的一个或多个源寄存器中选择数据,所述寄存器阵列能够由所述处理器存取并且包括多个寄存器,每个寄存器具有多个矢量通道;以及
将所选择的数据传输到目的寄存器,
其中,选择所述数据包括根据存储在能够由所述处理器存取的内部存储装置中的控制数据从矢量通道中进行选择,所述控制数据指示所述多个寄存器中的一个或多个寄存器的矢量通道的有序选择。

说明书全文

数据处理系统

技术领域

[0001] 本发明涉及处理器(例如,协处理器)对数据的处理。本发明与神经网络(例如,卷积神经网络(CNN))内的数据处理具有特定但非排他的相关性。

背景技术

[0002] 可以使用卷积神经网络加速器(CNNA)来有效地执行卷积神经网络(CNN)的卷积层对输入数据的处理。这种处理通常涉及第一阶段和后续的第二阶段,在第一阶段中,将输入数据与内核卷积,在第二阶段中,对卷积后的数据执行进一步的运算(例如,池化和/或应用激活函数)。为了有效实现,通过第一阶段的处理而输出的卷积后的数据可以被传递到CNNA内的寄存器以用于后续处理,从而减少将数据传输到更大、更慢的存储器(例如,CNNA的内部静态随机存取存储器(SRAM)或包括CNNA的计算设备的外部同步动态随机存取存储器(SDRAM))的需要。
[0003] 通过第一阶段的处理而输出的数据可以是高度交错的,并且因此不是用于后续处理的合适格式。此外,后续处理可以是依赖于层的和/或依赖于网络的。用于将数据布置为合适格式以进行处理的处理例程需要执行大量中央控制单元(CPU)指令,特别是如果需要执行各种不同的并行处理运算,并且因此通常是低效的。

发明内容

[0004] 根据本发明的第一方面,提供了一种数据处理系统。该数据处理系统包括:处理器;用于与控制单元进行通信的数据接口,处理器位于数据接口的一侧上;能够由处理器存取的内部存储装置,内部存储装置与处理器在数据接口的同一侧上;以及寄存器阵列,寄存器阵列能够由处理器存取并且包括多个寄存器,每个寄存器具有多个矢量通道。内部存储装置被布置为存储控制数据,该控制数据指示多个寄存器中的一个或多个的矢量通道的有序选择。处理器被布置为响应于从控制单元接收到指令数据,执行混合运算,其中从寄存器阵列中的一个或多个源寄存器中选择数据并且将其传输到目的寄存器。根据存储在内部存储装置中的控制数据从矢量通道中选择数据。
[0005] 通过将控制数据存储在处理器可以直接存取的内部存储装置中,减少了需要在混合指令中传输的数据量。对于其中需要大量混合指令的数据处理例程,这大大减少了混合指令所占用的内存。此外,在其中重复发出相同的混合指令的数据处理例程中,可以快速且有效地重新使用控制数据。因此,以这种方式执行混合运算减少了传输控制数据所需执行的指令量,从而提高了效率。在某些示例中,内部存储装置是可编程的,从而提供了灵活性。
[0006] 在一些示例中,处理器可操作地用于对存储在寄存器阵列中的一个或多个寄存器中的数据执行逻辑矢量运算。与逻辑标量运算相比,矢量运算可以减少数据处理系统内占用的存储器带宽,因为需要提取和解码更少的指令来执行等量的处理。将矢量处理与紧凑的混合指令和有效的混合运算相结合允许有效地执行各种处理例程,并且允许使用低存储器带宽。
[0007] 从下面参考附图对本发明的优选实施例的描述中,本发明的其它特征和优点将变得显而易见,所述实施例仅以示例的方式给出。

附图说明

[0008] 图1是示出根据本发明的用于执行数据处理运算的计算设备的示意性框图
[0009] 图2是示出图1的计算设备的组件的示意性框图;
[0010] 图3示出了混合运算的示意性示例;
[0011] 图4是表示根据本发明的数据处理运算的流程图
[0012] 图5是表示根据本发明的设置运算的流程图;
[0013] 图6是表示协处理器可存取的内部存储装置的示意性框图;
[0014] 图7是示出卷积神经网络(CNN)的组件的示意性框图;
[0015] 图8示意性地示出了存储在寄存器阵列的寄存器中的特征图数据的示例;
[0016] 图9示意性地示出了在最大池化运算中执行了混合运算之后存储在寄存器阵列的寄存器中的特征图数据的示例;
[0017] 图10是表示最大池化运算的流程图;
[0018] 图11示意性地示出了在平均池化运算中使用的示例混合运算;
[0019] 图12示意性地示出了在平均池化运算中处理的特征图数据补丁的示例;
[0020] 图13是表示平均池化运算的流程图。

具体实施方式

[0021] 图1示出了根据本发明的计算设备100的示例。该示例中的计算设备100被配置为执行图像数据的分类,如下面将进行更详细地描述。图1的计算设备100是个人计算机。然而,在其他示例中,可以使用其他计算设备或数据处理系统(例如,智能电话、膝上型计算机、平板计算机或者可以被耦合到或被安装在诸如汽车的交通工具内的车载计算机设备)来执行本文描述的方法。
[0022] 计算设备100包括至少一个处理器。在该示例中,计算设备100包括中央处理器单元(CPU)110。计算设备100还包括卷积神经网络加速器(CNNA)120,其包括专用于根据卷积神经网络(CNN)架构来执行推理例程的处理电路。在其他示例中,计算设备可以包括其他或替代处理器,例如数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程阵列(FPGA)或其他可编程逻辑器件、分立门或晶体管逻辑、分立硬件组件或被设计为执行本文描述的功能的前述的任何合适的组合。计算设备可以附加地或替代地包括被实现为计算设备的组合(例如,DSP和一个微处理器的组合、DSP和多个微处理器的组合、一个或多个微处理器与DSP核心的结合、或任何其它此类配置)的处理器。计算机设备可以附加地或替代地包括至少一个图形处理单元(GPU)。在一些示例中,CNN可以使用比CNNA更通用的处理器(例如,CPU、GPU或DSP)来实现。
[0023] CPU 110包括控制单元130,其被布置为向计算设备的其他组件(包括CNNA 120的组件)提供指令。该示例中的CPU 110是32位处理器,并且因此被布置为处理32位数据。CPU 110包括32位寄存器阵列140(其可替代地称为32位寄存器文件),该32位寄存器阵列140包括多个寄存器,每个寄存器能够存储多达32位的数据。在其他示例中,CPU可以被布置为处理具有不同数据大小的数据,例如64位数据。
[0024] 计算设备100包括在CNNA 120外部的外部存储装置150。外部存储装置150包括随机存取存储器(RAM)(例如,DDR-SDRAM(双倍数据速率同步动态随机存取存储器))和非易失性存储装置。非易失性存储装置的示例是只读存储器(ROM)和固态驱动器(SSD)(例如,闪存)。在其他示例中,外部存储装置可以包括另外的存储设备,例如磁性、光学或磁带介质,光盘(CD),数字通用盘(DVD)或其他数据存储介质。外部存储装置可以从计算设备移除或不可从计算设备移除。
[0025] 使用系统总线160来互连图1的示例中的计算设备100的组件,系统总线160允许数据在计算设备100的各种组件之间传输。总线160可以是或包括任何合适的接口或总线。例如,可以使用 高级微控制器总线架构 接口,例如高级可扩展接口(AXI)。在本示例中,总线160是128位总线,并且因此允许在计算设备100的时钟周期中传输
128位指令或128位的数据。
[0026] CNNA 120包括用于与控制单元130进行通信的数据接口170,经由该数据接口170,可以诸如从计算设备100的其他组件(例如,CPU 110或外部存储装置150)接收输入数据以供CNNA 120进行处理。可以由CNNA 120经由接口170接收的输入数据的示例包括来自CPU 110的指令数据、以及表示要使用CNN处理的图像的图像数据、以及表示与训练后的CNN相关联的内核的内核数据,如下面将进行更详细地描述。
[0027] 图1的CNNA 120包括直接存储器存取(DMA)180,其允许CNNA 120独立于CPU 110直接存取外部存储装置150。这可以提高CNNA 120能够处理输入数据的速度。例如,CNNA 120可以存取输入数据以进行处理,而不必等待CPU 110可用。例如,图像数据和内核数据可以被存储在外部存储装置150中,并且可以由DMA 180从外部存储装置150中检索。
[0028] CNNA 120包括静态随机存取存储器(SRAM)190,其可以被用于存储输入数据以供CNNA 120进行处理。SRAM 190可以是CNNA 120的片上或本地存储器,其通常比外部存储装置150更快地存取。SRAM 190可以包括多个单独的存储区域。例如,图像数据可以被存储在与内核数据不同的存储区域中(尽管在某些情况下,它们可以被存储在相同的存储区域中)。可以被存储在SRAM 190中的其他数据包括输入特征图数据、输出特征图数据和用于生成输出特征图的中间数据。在本示例中,其中计算设备100被配置为执行图像数据的分类,SRAM 190被布置为存储表示与神经网络相关联的权重的权重数据。因此,权重数据表示要与图像数据卷积的内核,如下所述。SRAM 190还被布置为存储表示要由计算设备100分类的图像的至少部分的图像数据。图像数据可以是任何合适的格式,并且可以诸如表示用于图像的各个像素的像素强度值。图像数据可以包括用于多个颜色信道(例如,红色、绿色和蓝色信道)中的每一个的数据。
[0029] CNNA 120还包括乘法累加(MAC)引擎200,其包括一个或多个MAC单元的阵列,每个MAC单元均被配置为执行MAC运算。在该示例中,MAC引擎200还包括多个MAC引擎寄存器,其用于在数据处理运算中的各个阶段处存储数据。在其中计算系统100被用于对图像数据进行分类的示例中,权重数据和图像数据可以从SRAM 190传输到MAC引擎寄存器,并且由MAC引擎200作为卷积运算的部分进行处理,如下面将进行更详细地描述。MAC引擎被布置为输出表示由卷积运算生成的特征图的部分的中间或部分处理的数据。MAC引擎可以在计算设备100的每个时钟周期执行多个MAC运算,例如每个时钟周期多达36个MAC运算。
[0030] MAC引擎200被布置为将数据输出到矢量寄存器阵列210(其可以替代地称为矢量寄存器文件),在该示例中,该矢量寄存器阵列210是128位矢量寄存器阵列,并且包括多个128位矢量寄存器,每个矢量寄存器均具有多个索引矢量通道。在该示例中,每个矢量寄存器均具有十六个矢量通道,其中每个通道被配置为保持一个8位数据字。在其他示例中,矢量寄存器可以被配置为保持其他大小的数据,例如16位数据、32位数据或任何其他合适大小的数据,并且每个矢量寄存器均可以包括多于或少于十六个矢量通道。在该示例中,MAC引擎200被配置为输出表示特征图的部分的8位数据。
[0031] CNNA 120包括协处理器220,其配置为从CPU 110的控制单元130接收指令。协处理器是微处理器,其被设计为补充主处理器(例如,CPU、GPU或DSP)的能。在其他示例中,根据本发明的方法可以由其他类型的处理器(例如,CPU、GPU或DSP)执行。在本示例中,协处理器220是单指令多数据(SIMD)协处理器,并且被布置为根据从控制单元130接收的指令,从寄存器阵列210中的一个或多个寄存器读取输入数据,对输入数据执行运算,并且将输出数据写入寄存器阵列210中的一个或多个寄存器。协处理器220包括可由协处理器230存取的内部存储装置230。内部存储装置230与协处理器220位于CNNA 120的接口170的同一侧上,并且因此可以由协处理器220存取,而无需通过系统总线160来传输数据。在该示例中,内部存储装置230包括集成在协处理器220内的多个内部寄存器。在其他示例中,内部存储装置可以不被集成在处理器或协处理器内,而是可以由处理器或协处理器直接存取,而无需通过系统总线160来传输数据。内部存储装置230可以被用于保持与一个或多个特定数据处理运算有关的控制数据,这将在下文中更详细地描述。
[0032] 在本示例中,协处理器220被配置为对存储在寄存器阵列210的寄存器内的数据执行逻辑矢量运算。矢量运算中的每个操作数是值的矢量而不是单个值。在执行矢量运算时,协处理器220同时从一个或多个源寄存器中的每个通道读取输入数据,对存储在每个通道中的输入数据执行相同的运算以生成输出数据,并且将输出数据写入一个或多个目的寄存器的每个通道。以这种方式执行矢量运算是数据级并行化的示例。在该示例中,协处理器从相同的寄存器阵列(寄存器阵列210)读取数据并且将数据写入相同的寄存器阵列(寄存器阵列210),但是在其他示例中,处理器或协处理器可以从第一寄存器阵列读取输入数据并且将数据写入其他寄存器,例如,写入第二寄存器阵列中。
[0033] 与标量运算(其中,操作数是单个数据字)相比,矢量运算减少了在数据处理系统内占用的存储器带宽,因为需要提取和解码更少的指令来执行等量的处理。此外,矢量运算增加了在计算设备的每个时钟周期中处理的数据量,从而产生更快的处理。对于其中定期执行大量相同运算的数据处理应用,矢量运算可以显著减少用于执行数据处理所花费的时间和存储器带宽。将如上所述的矢量处理应用于存储在寄存器阵列210内的数据可以减少CNNA 120的SRAM 190或计算设备的外部存储装置150需要被存取的次数,从而进一步减少执行数据处理所花费的时间。
[0034] 图2示出了矢量加法运算的示例,其中协处理器220从两个源寄存器210a和210b读取数据,同时对存储在两个源寄存器210a和210b中的数据执行逐元素加法,并且将所得到的数据写入目的寄存器210c。在该示例中,协处理器220从第一源寄存器210a读取十六个8位字x0,x1,...,xF(其中,根据存储字的索引矢量通道,用十六进制值来索引字),并且从第二源寄存器210b读取十六个8位字y0,y1,...,yF。协处理器220同时执行运算zi←xi+yi,其中i=0,...,F,并且将所得到的字z0,z1,...,zF写入目的寄存器210c。
[0035] 图3示出了根据本发明由协处理器220执行的进一步数据处理运算的示例。图3的运算涉及混合运算。在混合运算中,协处理器220从一个或多个源寄存器中选择数据并且将所选择的数据传输到目的寄存器。被传输到目的寄存器的数据包括有序选择的数据字,根据被存储在内部存储装置230中的控制数据来选择每个有序选择的数据字。在图3的示例中,内部存储装置230保持控制数据,该控制数据包括指示寄存器索引的序列的“Reg_sel”数据和指示矢量通道索引的序列的“lane_sel”数据。在该示例中,两个寄存器Cm和Cn被指定为源寄存器,并且一个寄存器Cd被指定为目的寄存器。第一源寄存器Cm用二进制数0来索引,并且第二源寄存器Cn用二进制数1来索引。在内部存储装置230中存储为reg_sel数据的寄存器索引的序列是十六个二进制数的序列,其指示每个数据字是从源寄存器Cm和Cn中的哪一者中选择的。在内部存储装置230中存储为lane_sel数据的矢量通道索引的序列是16个4位数据字的序列,其指示每个数据字是从适当源寄存器Cm或Cn的哪个矢量通道中选择的。如图3的示例所示,根据reg_sel数据和lane_sel数据,从所指定的源寄存器中的一个的矢量通道中选择被传输或写入目的寄存器Cd的有序选择的字中的每个字。应注意,可以多次选择所指定的源寄存器的相同矢量通道,或者根本不选择。需要强调的是,图3中的控制数据的格式仅是示例,并且控制数据可以替代地被不同地编码,例如被编码在单个序列内而不是两个序列内。在任何情况下,根据存储在可由处理器或协处理器直接存取的内部存储装置中的控制数据,从矢量通道中选择为混合运算而选择的数据。
[0036] 图3的示例中的混合运算将16个4位数据字从寄存器阵列210中的两个源寄存器传输到目的寄存器。因此,需要16位的reg_sel数据来指定源寄存器的序列,并且需要64位的lane_sel数据来指定矢量通道的序列。在其他示例中,可以使用其他大小的源寄存器和/或其他数据大小,导致需要为混合运算存储不同数量的控制数据。此外,在一些示例中,混合运算可以从多于两个源寄存器(例如,四个或八个源寄存器)中选择数据。
[0037] 如图4所示,为了启动混合运算,在S410处,CPU 110的控制单元130向协处理器220发送混合指令。混合指令包括数据字段,该数据字段包含指示寄存器阵列210中将被指定为源寄存器的寄存器的子集的地址或其它数据。所指示的子集中的寄存器根据它们出现在哪个数据字段中来隐式地索引。例如,混合运算可能包含四个数据字段,对应于索引0、1、2、3,并且每个数据字段可能包含指示寄存器阵列210中的寄存器的地址或其他数据。由四个数据字段指示的寄存器被相应地被索引为0、1、2、3。在该示例中,混合指令包括另外的数据字段,该数据字段包含指示寄存器阵列210中将被指定为目的寄存器的另一寄存器的地址或其它数据。在一些示例中,混合指令可以省略指示目的寄存器和/或源寄存器的数据,而是默认地指定目的寄存器和/或源寄存器。
[0038] 在S420处接收到来自控制单元110的混合指令时,在S430处协处理器220将寄存器的所指示的子集指定为用于混合运算的源寄存器。在该示例中,协处理器220还将所指示的另一寄存器指定为目的寄存器。
[0039] 在S440处,协处理器220从一个或多个所指定的源寄存器中选择数据,并且将所选数据传输到所指定的目的寄存器。如上所述,根据存储在内部存储装置230中的控制数据从矢量通道中选择为混合运算而选择的数据。具体地,在该示例中,所选择的数据包括有序选择的数据字,根据存储在内部存储装置230中的reg_sel数据和lane_sel数据,从所指定的源寄存器中的一个的矢量通道中选择每个有序选择的字。
[0040] 将控制数据存储在内部存储装置230中,其可由协处理器220直接存取,减少了在混合指令中需要由控制单元130通过系统总线160发送的数据量。结果,上述混合指令相对紧凑。对于其中需要大量混合运算的数据处理例程(其示例将在下文中描述),这显著减少了发送混合指令所需的存储器带宽。通过将控制数据存储在内部存储装置230中,在其中重复发出相同的混合指令的数据处理例程中,可以快速和有效地重新使用控制数据。因此,以这种方式执行混合运算减少了需要被执行以传输控制数据的指令量,从而提高了效率。在其他示例中,用于单个混合指令的混合指令数据可以由控制单元作为一系列指令发送,而不是作为单个指令发送。
[0041] 为了提供灵活性使得协处理器220可以被用于一系列不同的数据处理例程,内部存储装置230是可编程的。因此,存储在内部存储装置230中的控制数据可以被配置用于与特定数据处理例程相对应的特定混合指令。一些数据处理例程,例如CNN对图像数据的处理,可能需要用于数据处理例程的不同阶段的若干组混合指令。例如,处理CNN的第一层内的数据可以使用第一组混合指令,并且CNN的后续层内的处理数据可以使用第二组混合指令。在已经执行与第一层相关联的处理之后,可以相应地更新存储在内部存储装置230内的控制数据。下面更详细地描述CNN的环境中的特定数据处理运算的示例。
[0042] 如图5所示,为了配置存储在内部存储装置230中的数据,在S510处,控制单元130向协处理器220发送第一设置指令,该第一设置指令指示其中存储了reg_sel数据的CPU 110的32位寄存器阵列140中的一个或多个第一寄存器。响应于在S520处接收到第一设置指令,在S530处,协处理器220将reg_sel数据从一个或多个第一寄存器写入内部存储装置
230。在S540处,控制单元130将第二设置指令发送到协处理器220,该第二设置指令指示其中存储了lane_sel数据的CPU 110的32位寄存器阵列140中的一个或多个第二寄存器。响应于在S550处接收到第二设置指令,在S560处,协处理器将lane_sel数据从一个或多个第二寄存器阵列写入内部存储装置230。强调图5的例程仅是示例。更一般地,响应于从控制单元接收的设置指令,将控制数据写入内部存储装置。
[0043] 混合运算允许在寄存器阵列210内传输和重新排列数据,使得数据被适当地设置用于协处理器220以执行矢量运算。如下文将参考特定示例进行描述,在某些情况下,对于给定的数据处理例程,仅需要相对少量的不同的混合运算。在该示例中,内部存储装置230包括用于存储控制数据的多个内部寄存器,使得所存储的控制数据可以在其中重复使用若干不同的混合指令的数据处理例程中被快速且高效地重复使用。
[0044] 在一些示例中,内部存储装置可以包括多个存储区域,每个存储区域被布置为存储用于特定混合运算的相应控制数据。图6示出了内部存储装置230的布置,其包括内部寄存器阵列,该内部寄存器阵列包含若干内部寄存器。在该示例中,内部寄存器阵列包括16个内部寄存器,每个内部寄存器均具有4位“#swz_sel”索引。内部寄存器中的每一个均包括用于存储reg_sel数据的相应第一槽,以及用于存储lane_sel数据的相应第二槽。在该示例中,内部寄存器中的每一个均被配置为指定从多达四个所指定的源寄存器中选择数据的混合运算。因此,内部寄存器中的每一个均包括具有32位的用于存储reg_sel数据(对应于16个2位数据字)的第一槽和具有64位的用于存储lane_sel数据(对应于16个4位数据字)的第二槽。在其他示例中,用于存储reg_sel数据和lane_sel数据的槽可以具有不同数量的位,因为寄存器阵列可以具有比16个更多或更少的通道,并且混合指令可以从多于或少于四个源寄存器中选择数据。在本示例中,单个内部寄存器被用于存储用于特定混合运算的lane_sel和reg_sel数据。在其他示例中,lane_sel数据和reg_sel数据可以被存储在单独的内部寄存器中,因此其可以彼此单独地被索引。
[0045] 在其中内部存储装置包括多个存储区域的示例中,混合指令还可以指示多个存储区域中的一个,使得根据存储在所指示的控制区域中的控制数据从矢量通道中选择为混合运算而选择的数据。在其中如图6所示布置内部存储装置的示例中,混合指令可以指示多个第一存储槽中的一个和多个第二存储槽中的一个。因此,从一个或多个源寄存器传输到目的寄存器的数据包括有序选择的字,根据存储在所指示的第一存储槽中的相应reg_sel数据和存储在所指示的第二存储槽中的相应lane_sel数据,从所指定的源寄存器中的一个的矢量通道中选择每个有序选择的字。
[0046] 如上所述,对于其中在大量数据元素(其中,数据元素可以是诸如单个数据字)上执行相同数据处理运算或相对小的数据处理运算的集合的应用,使用矢量运算来处理数据可以导致减少的存储器带宽和计算时间。为了使协处理器220执行矢量运算,在本示例中,控制单元130是可操作的以向协处理器220发送矢量运算指令,该矢量运算指令指示寄存器阵列210中的一个或多个寄存器。一个或多个寄存器可以包括先前被指定为用于混合运算的目的寄存器的寄存器,并且因此包含经历了混合运算并且被适当地布置用于矢量运算的数据。响应于接收到矢量运算指令,协处理器220被布置为对存储在矢量运算指令中指示的一个或多个寄存器中的数据执行逻辑矢量运算。
[0047] 在CNN内对图像数据或特征图数据的处理中出现了其中对大量数据元素执行相对小的数据处理运算的集合的各种示例。图7示出了根据本发明的被配置为对图像数据进行分类的CNN 700的示例。
[0048] CNN 700包括多个不同的层,其中层702、704、706、708和710在图7中示出。在该示例中,CNN 700包括输入层702、多个卷积层(图7)中示出了其中两个,704和706、多个完全连接的层(图7中示出了其中一个,708)和输出层710。应当理解,为了简化说明,图7的CNN 700已经被简化,并且典型的神经网络可能明显更复杂。
[0049] 输入层702对应于CNN 700的输入,在该示例中输入是图像数据。例如,图像数据是224像素宽乘224像素高并且包括3个颜色信道(例如,红色、绿色和蓝色信道)。卷积层通常从输入数据中提取特定特征,以创建特征图,并且可以在图像的小部分上运算。然后,完全连接的层使用特征图来对图像数据进行分类。
[0050] 神经网络通常包括多个互连的节点,其可以被称为神经元。神经元的内部状态(有时称为激活)通常取决于神经元所接收的输入。然后神经元的输出取决于输入和激活。一些神经元的输出连接到其他神经元的输入,形成有向加权图形,在该图形中,图形的边缘(对应于神经元)或顶点(对应于连接)分别与权重相关联。可以在整个训练期间调整权重,从而改变单个神经元的输出并且因此改变整个神经网络的输出。
[0051] 在图7的示例中,CNN 700已经被训练以对图像数据进行分类,例如以确定特定对象是否存在于由图像数据所表示的图像中。例如,以这种方式训练CNN 700生成与至少一些层(例如,CNN 700的除输入层702和输出层710之外的层)相关联的一个或多个内核和偏置。例如,内核允许识别图像的特征。例如,一些内核可以被用于识别由图像数据表示的图像中的边缘,并且其他内核可以被用于识别图像中的平或垂直特征(尽管这不是限制性的,并且其他内核是可能的)。内核识别的精确特征将取决于CNN 700被训练识别的对象。内核可以是任何大小的。作为示例,每个内核可以是3乘3矩阵,其可以与步幅为1的图像数据进行卷积。内核可以与图像补丁(或通过内核与图像补丁的卷积而获得的特征图)进行卷积,以识别内核旨在检测的特征。卷积通常涉及将图像补丁(在该示例中为3乘3图像补丁)的每个像素添加到其相邻像素,由内核加权。步幅是指内核在每次运算之间移动的像素数。因此,步幅为1指示在计算针对给定3乘3图像补丁或输入特征图补丁的卷积之后,内核在图像上滑动1个像素,并且计算针对后续图像补丁或输入特征图补丁的卷积。可以重复该过程,直到内核已经与整个图像或输入特征图(或者要为其计算卷积的图像的整个部分)进行卷积。
内核有时可以称为过滤器内核或过滤器。卷积通常涉及乘法运算和加法运算(有时称为累加运算)。因此,神经网络加速器(例如,图1的CNNA 120)可以包括被配置为有效地执行这些运算的一个或多个MAC单元。
[0052] 通常,神经网络(例如,图7的CNN 700)可以经历所谓的训练阶段,其中神经网络被训练用于特定目的。CNN可以由计算设备100或由外部计算设备或计算系统来训练,例如使用GPU。训练的输出可以是与预定神经网络架构相关联的多个内核和偏置(例如,其中不同的内核与多层神经网络架构的不同的相应层相关联)。可以认为内核数据对应于表示要应用于图像数据的权重的权重数据,因为可以认为内核的每个元素分别对应于权重。这些权重中的每一个可以乘以图像补丁的相应像素值,作为内核与图像补丁的卷积的部分。
[0053] 在训练阶段之后,所训练的CNN 700可以被用于对输入数据(例如,图像数据)进行分类。例如,CNN 700可以被用于识别CNN 700被训练识别的对象是否存在于给定输入图像中。分类通常涉及在训练阶段期间获得的内核与输入图像的图像补丁的卷积。
[0054] 在图7的示例中,第二层704的输出在被输入到第三层706之前经历进一步处理。在该示例中,第二层704在将数据传递到第三层706之前执行池化和应用激活函数。
[0055] 激活函数(有时称为整流器)可以被用于将输入映射到预定义输出,例如0或更大的值。合适的激活函数是整流线性单元(ReLU)函数,尽管其他激活函数也是可能的。通过使用激活函数,可以将非线性引入卷积层的输出,这增加了可以由后续卷积层生成的特征图的表现力。
[0056] 例如,通过在区域内取最高值或在区域内取平均值,对用于图像或特征图的区域的聚合或组合值进行池化。在一些示例中,这减小了输入到CNN 700的后续层的特征图的大小,并且因此为CNN 700的后续层减少了计算量。这在图7中示意性地示出为与第二层704相比第三层706的大小减小。进一步的池化由第三层706和第四层708执行。在其他示例中,池化不会减小特征图的大小。下面参考图8-图13来讨论池化的具体示例。可以在应用激活函数之前或之后执行池化。
[0057] 池化涉及对大量数据元素执行相同的运算,并且因此非常适合于矢量处理的应用。然而,由神经网络的层输出的数据通常不能正确地格式化以用于矢量处理的直接应用。例如,在给定的时钟周期中,MAC引擎(例如,图1的MAC引擎200)可以处理多个数据元素,并且将数据写入寄存器阵列210的一个或多个矢量寄存器。然而,由MAC引擎200输出的数据通常是交错的,并且没有被正确地布置以用于矢量处理。可以对交错的数据执行混合运算,以便正确地布置数据以用于矢量处理。在其中MAC引擎200输出表示特征图的部分的数据的示例中,可以将不同的混合运算应用于不同部分。然而,不同的混合运算的数量可能相对较小,其中每个混合运算被执行多次。因此,由内部存储装置230存储多个混合指令可以允许使用相对紧凑的混合指令来执行池化运算,并且其中很少或不存取CNNA 120的SRAM 190或外部存储装置150。
[0058] 可以不同地处理由神经网络中的不同层输出的数据,例如通过应用激活函数和/或池化一个或多个层的输出。此外,不同的网络架构可能涉及不同的处理例程。因此,期望神经网络加速器(例如,CNNA 120)具有执行数据处理运算的不同组合的灵活性,同时利用使用紧凑的混合指令执行矢量运算的效率。如上所述,内部存储装置230是可编程的,允许为不同的处理例程存储不同组的混合指令。
[0059] 图8示出了由MAC引擎200输出的数据的示例,作为CNN的卷积层内的卷积运算的部分。在该示例中,MAC引擎200将表示输入特征图的部分的输入数据与内核数据进行卷积,以生成表示输出特征图的部分的中间数据。在该示例中,MAC引擎200将数据直接写入寄存器阵列210的寄存器,并且因此避免将数据传输到CNNA 120的SRAM 190或计算设备100的外部存储装置150。图8a示出了由MAC引擎200在两个时钟周期上生成的输出数据,并且对应于输出特征图的8×8部分。注意,整个输出特征图可以显著大于8×8部分,例如包含224×224×3个元素,并且元素的数量和布置将取决于CNN的哪个层生成输出特征图。在任何情况下,输入特征图由MAC引擎200部分地处理,并且因此输出特征图被部分地生成。在该示例中,MAC引擎200将与输出特征图的部分相对应的输出数据写入寄存器阵列210的四个寄存器CS(0)、CS(1)、CS(2)、CS(3)中,如图8b所示。
[0060] 在该示例中,控制单元130被配置为向协处理器220发送一系列混合指令和矢量运算指令,使得协处理器220执行与使用MAC引擎200生成的特征图上的池化运算相对应的一系列运算。在该示例中,池化运算是具有步幅2的2×2最大池化。因此,在被传递到CNN的后续层之前确定特征图的每个2×2补丁内的最高值。这导致特征图的尺寸减小四倍。在本示例中,传递到后续层的第一元素是值a0、a1、a4、a5中的最高值,其被包含在图8a的虚线框810内。第二元素是值a2、a3、a6、a7等中的最高值。为了使用矢量处理来执行池化运算,使用混合运算,该混合运算使用四个不同的#swz_sel索引。四个混合运算中的每一个的结果在图9中示出。对于每个混合运算,示出了相应的控制数据(reg_sel数据和lane_sel数据),其中源寄存器CS(0)、CS(1)、CS(2)、CS(3)分别被索引为0、1、2、3。还示出了写入相应目的寄存器Cd(0)、Cd(1)、Cd(2)、Cd(3)的所得字的序列。在执行了四个混合运算之后,通过执行三个逻辑矢量最大运算来完成池化运算。在一个示例中,第一矢量最大运算可以从寄存器Cd(0)、Cd(1)读取数据,并且将这些寄存器中的数据的最大值逐元素写入另一寄存器Cf(0)。第二矢量最大运算可以从寄存器Cd(2)、Cd(3)读取数据,并且将这些寄存器中的数据的最大值逐元素写入另一寄存器Cf(1) (0) (1)。第三矢量最大运算可以从寄存器Cf 、Cf 读取数据,并将这些寄存器中的数据的最大值逐元素写入最终寄存器Cf(2)。然后,寄存器Cf(2)包含2×2最大池化运算的结果。注意,可以在其他示例中执行不同的混合运算和/或矢量最大运算,并且可以以不同的顺序执行运算。
[0061] 图10示出了由协处理器220执行以执行上面参考图8和图9描述的最大池化运算的例程的示例。在S1010处,协处理器220接收设置指令,该设置指令指示存储与图9中所示的四个混合运算相对应的四组Reg_sel数据和四组lane_sel数据的32位寄存器阵列内的寄存器。设置指令还包含4位#swz_sel索引,每个索引指定内部存储装置230中的内部寄存器。例如,每个内部寄存器包含用于存储reg_sel数据的相应第一存储槽和用于存储lane_sel数据的相应第二存储槽。在S1020处,协处理器220将reg_sel数据和lane_sel数据从所指示的寄存器写入由设置指令中包含的#swz_sel索引指示的存储槽。在该示例中,用于四个混合运算中的每一个的reg_sel数据和lane_sel数据被存储在内部存储装置230中的相应寄存器中,其中相应的寄存器被索引为0、1、2、3。
[0062] 在S1030处,协处理器220接收混合指令,该混合指令指定寄存器阵列210中的四个寄存器为源寄存器并且对其进行索引,并且将寄存器阵列210中的一个寄存器指定为目的(0) (1) (2) (3)寄存器。在该示例中,源寄存器CS 、CS 、CS 、CS 分别被索引为0、1、2、3。混合指令还包含4位#swz_sel索引,其指示协处理器220的内部存储装置230内的内部寄存器。如上所述,所指示的内部寄存器包括包含reg_sel数据的第一槽和包含lane_sel数据的第二槽。
[0063] 响应于接收到混合指令,在S1040处,协处理器220从由混合指令指定的源寄存器中选择数据,并且将所选择的数据传输到由混合指令指定的目的寄存器。所传输的数据包括字的序列,根据由混合指令内包含的#swz_sel索引指示的内部寄存器中存储的reg_sel数据和lane_sel数据,从所指定的源寄存器中的一个的矢量通道中选择每个字。
[0064] 协处理器220执行四次S1030和S1040,其中每个混合指令包含不同的#swz_sel索引并且指定图9中所示的混合运算中的一个。
[0065] 在执行了四次混合运算之后,在S1050处,协处理器220从控制单元130接收矢量运算指令,该指令指示在S1030和S1040的混合运算中先前被指定为目的寄存器的两个寄存器。响应于接收到矢量运算指令,在S1060处,协处理器220对包含在所指示的寄存器内的数据执行由指令指定的矢量最大运算。
[0066] 协处理器220利用三个不同的矢量运算指令来执行三次S1050和S1060,每个矢量运算指令指定要在相应的两个寄存器上执行的矢量最大运算。在该示例中,第一矢量最大运算从寄存器Cd(0)、Cd(1)读取数据,并且将这些寄存器中的最大数据逐元素写入另一寄存器Cf(0)。第二矢量最大运算从寄存器Cd(2)、Cd(3)读取数据,并且将这些寄存器中的最大数据逐元素写入另一寄存器Cf(1)。第三矢量最大运算从寄存器Cf(0)、Cf(1)读取数据,并且将这些寄存器中的最大数据逐元素写入最终寄存器Cf(2)。然后,寄存器Cf(2)包含2×2最大池化运算的结果。
[0067] 在S1070处,协处理器220输出2×2最大池化运算的结果。在该示例中,协处理器220将数据写入SRAM 190,但是在其他示例中,结果可以保留在寄存器阵列210中,例如用于由协处理器220进一步处理。对特征图中的每个8×8区域执行图10的例程,在这之后完成整个池化运算。
[0068] 图11a示出了由MAC引擎200输出的数据的另一示例,作为CNN的卷积层内的卷积运算的部分。与图8的示例一样,MAC引擎200将表示输入特征图的部分的输入数据与内核数据进行卷积,以生成表示输出特征图的部分的输出数据。由MAC引擎200在两个时钟周期上生成的数据如图11a所示,并且对应于输出特征图的4×12部分。所生成的数据被存储在寄存器阵列210的三个寄存器中,如字母ai、bi、ci所示,其中索引i表示相应寄存器中的矢量通道。
[0069] 在图11的示例中,控制单元130被配置为向协处理器220发送一系列混合指令和矢量运算指令,使得协处理器220执行与使用MAC引擎200生成的特征图上的池化运算相对应的一系列运算。在该示例中,池化运算是具有步幅1的3×3平均池化。这种类型的池化运算被广泛使用,例如,被应用在初始v3网络中。在具有步幅1的3×3平均池化中,对于特征图中的每个数据元素,在被传送到CNN的后续层之前确定以该数据元素为中心的3×3补丁内的平均值。这种类型的池化不会导致特征图的大小减小。为了使用矢量处理来执行池化运算,使用多个混合运算,其中每个混合运算由通过相应的#swz_sel索引而索引的控制数据来指定。图11a中所示的混合运算将输出特征图数据的第一4×4补丁传输到第一目的寄存器Cd(0)。输出特征图数据的第二4×4补丁(其是第一4x4补丁右边的一个数据元素)已经被存储(1)在第二所指定的目的寄存器Cd 中,如图11b所示,并且因此,不需要混合运算(图11b中所示的reg_sel数据和lane_sel数据对应于身份混合运算,其中数据从单个源寄存器读取,并且在没有重新排序的情况下被写入到单个目的寄存器。这表示冗余数据处理运算,并且因此被省略,而是将源寄存器重新标记为目的寄存器)。图11c中所示的混合运算将输出特征(2)
图数据的第三4×4补丁传输到第三所指定的目的寄存器Cd 。
[0070] 在执行了图11a和图11b的混合运算之后,执行两个矢量加法以添加存储在寄存器Cd(0)、Cd(1)、Cd(2)内的数据元素。两个矢量加法运算的结果被写入另一寄存器Cf(0),如图11d所示。
[0071] 在特征图的范围上执行上述运算,以便生成多个这样的4×4补丁,每个补丁被存储在单独的寄存器中,在所述运算中,使用水平步幅1来对数据元素进行求和以生成诸如图11d所示的4×4补丁。执行另一组运算,其中使用垂直步幅1对所生成的4×4补丁的数据元素进行求和,从而产生另外的4×4补丁,每个补丁被存储在单独的寄存器内并且包含输出特征图(包括填充,如将在下面描述的)的9个元素的总和。
[0072] 图12a示出了具有224×224×3个元素的输出特征图1200的示例,其对应于三个信道,每个信道具有224×224个元素。输出特征图1200由大小为1的填充1210围绕,填充1210由值为0的数据元素组成。图12a示出了保持来自三个信道中的一个的数据元素的输出特征图1200的4×4补丁1220a、1220b和1220c的三个示例。4×4补丁中的每一个由MAC引擎200输出到寄存器阵列210的寄存器中的一个。协处理器220执行上面参考图11描述的运算,以便生成与输出特征图1200的4×4补丁中的每一个相对应的另外的4×4补丁,每个4×4补丁的每个元素包括输出特征图1200的九个数据元素的总和。
[0073] 为了生成平均池化数据,另外的4×4补丁的数据元素需要被归一化值划分。对于每个另外的4×4补丁的大多数元素,标准化值是9,对应于在补丁的元素内求和的输出特征图的九个元素。但是,对于某些元素,归一化值小于9,因为补丁对应于输出特征图的位于输出特征图的边缘或附近的区域。
[0074] 在图12a的示例中,补丁1220a不位于输出特征图1200的边缘附近,并且因此相应的另外的4×4补丁的每个元素需要被9划分。该被9划分可以由协处理器220作为矢量运算来执行,其中保持另外的4×4补丁的寄存器中的数据元素被存储十六个九的寄存器的元素同时划分,如图12b所示。
[0075] 补丁1220b位于输出特征图1200的上边缘附近。因此,相应的另外的4×4补丁的最上面的四个元素需要被6划分,因为这些元素中的每一个均包括输出特征图1200的六个元素与来自填充1210的三个0的总和。通过同时将保持另外的4×4补丁的寄存器中的数据元素被具有12个9和4个6的寄存器的元素(以适当的顺序)划分,可以由协处理器220再次作为矢量运算来执行16个划分,如图12c所示。
[0076] 补丁1220c位于输出特征图1200的左上角附近。因此,相应的另外的4×4补丁的六个元素需要被6划分,并且一个元素需要被4划分(因为该元素包括特征图的四个元素与来自填充1210的五个0的总和)。通过同时将保持另外的4×4补丁的寄存器中的数据元素被具有9个9、6个6和1个4的寄存器的元素划分(以适当的顺序),可以由协处理器再次作为矢量运算来执行16个划分,如图12d所示。
[0077] 对于上述矢量划分运算中的每一个而言,控制数据被存储在内部存储装置230中。在该示例中,为每个矢量划分运算存储的控制数据指定混合运算,该混合运算将归一化值(即,4、6和/或9)的适当布置从一个或多个源寄存器传输到目的寄存器中,以用在矢量划分运算中的一个中。总共使用八组控制数据,其对应于八个不同的混合运算,其对应于输出特征图的四个边和四个顶点(中心区域不需要混合运算,其中归一化值均为9)。以这种方式,控制数据考虑了特征图的边缘。在其他示例中,归一化值可以在寄存器中被不同地预先布置,使得需要执行更少的混合运算,和/或需要存储更少的不同组的控制数据。
[0078] 根据本发明,如参考图11和图12所述来处理整个特征图导致3×3平均池化的有效实现,其中所有数学运算都被作为矢量运算执行,并且需要很少或不需要对SRAM 190或外部存储装置150进行中间存取。图13示出了由协处理器220执行以便实现3×3平均池化的处理例程的示例。在S1310处,根据从控制单元130接收的设置指令数据,协处理器220将reg_sel数据和lane_sel数据写入内部存储装置230中的存储槽。
[0079] 在S1320处,协处理器220执行如参考图11所述的混合运算,以便为第一组矢量求和运算(使用水平步幅1)布置输出特征图数据。然后,在S1330处,协处理器执行第一组矢量求和运算,以输出4×4补丁,如图11d所示的4×4补丁。协处理器重复S1320和S1330以进行第二组矢量运算(使用垂直步幅1)以输出元素的另外的4×4补丁,每个元素包括来自输出特征图1200的九个数据元素的总和。
[0080] 在S1340处,协处理器执行如参考图12所述的进一步的混合运算,以便为一组矢量划分运算布置数据。对保持归一化值4、6和9的一个或多个源寄存器执行S1340的混合运算。在S1350处,协处理器220执行矢量划分运算。
[0081] 在S1360处,协处理器220输出3×3平均池化运算的结果。在该示例中,协处理器220将数据写入SRAM 190,但是在其他示例中,结果可以保留在寄存器阵列210中,例如用于由协处理器220进行进一步处理。图13的例程在整个特征图上执行。注意,图13的步骤的排序仅是示例,并且3×3平均池化运算可以以不同的顺序来执行,例如,在移动到第二组矢量加法(具有垂直步幅1)之前,在整个特征图上执行第一组矢量加法(具有水平步幅1)。设想图13的例程的其它变型,例如其中在整个特征图上执行第一组矢量加法、转置所得到的经处理的特征图、并且然后在整个经处理的特征图上执行相同的第一组矢量加法的例程。这减少了处理运算所需的不同混合指令的数量,并且因此减少了不同组的控制数据。
[0082] 在一些示例中,数据处理运算所需的不同混合运算的数量可以大于协处理器可直接存取的内部存储装置中的存储区域的数量。在这样的示例中,数据处理例程可以被划分为子例程,其中不同的控制数据被写入每个子程序的内部存储装置。在上面讨论的3×3平均池化的示例中,例如,在已经执行矢量求和运算之后,可以将新的lane_sel数据和reg_sel数据写入内部存储装置230,其中新的lane_sel数据和reg_sel数据对应于用于矢量划分运算的混合运算。
[0083] 在一些示例中,矢量运算可以导致一个或多个数据元素的上溢或下溢。例如,如果对存储8位数据的两个寄存器执行矢量乘法,则所得到的元素中的一个或多个可能太大而不能以8位存储。为了解决这个问题,在一些示例中,混合指令可以将另外的寄存器中的数据置零。另外的寄存器被布置为保持矢量运算的结果的最高有效位,从而允许输出16位数据。在一个示例中,执行混合指令以准备将数据写入寄存器阵列210中的寄存器Cn的矢量运算。响应于接收到混合运算,协处理器220执行所指示的混合运算,并且进一步将相邻寄存器Cn+1中的所有字设置为零。在执行矢量运算时,协处理器220将每个输出数据元素的最低有效8位写入寄存器Cn,并且将最高有效位写入寄存器Cn+1。在图11-图13的示例中,其中在矢量划分之前执行若干矢量加法,可能需要对元素进行这种置零以避免上溢。
[0084] 以上实施例应被理解为本发明的示例性示例。设想了本发明的其他实施例。例如,被布置为使用神经网络对图像数据进行分类的计算设备可以接收表示具有第一图像格式的图像的部分的图像数据。然而,可以使用具有第二图像格式的图像数据来训练神经网络。本发明可以被用于在由神经网络进行处理之前重新格式化数据。在一个示例中,计算设备接收以24位打包RGB格式的图像数据。以24位打包RGB格式,对于图像的每个像素,与R(红色)、G(绿色)和B(蓝色)颜色信道相对应的值以交错的方式被顺序地布置,使得图像数据以格式RGBRGBRGBRGB接收。可以训练神经网络以接收以标准平面RGB格式的图像数据,其中颜色信道不是交错的。通过首先将24位打包RGB数据写入到可由上述处理器或协处理器存取的寄存器中,本文描述的方法可用于有效地将图像数据以标准RGB格式写入目的寄存器中。
应当理解,可以使用相同的方法在各种不同的图像格式之间进行转换。在另一示例中,图像数据可另外从第一图像编码格式转换为第二图像编码格式,例如从YUV转换为RGB,反之亦然。这可能是特别相关的,例如,其中通常以YUV格式编码的视频数据由神经网络处理。在这样的示例中,在应用混合运算以便适当地布置数据(例如,如上所述分离交错的图像数据)之后,可以使用矢量运算来执行编码格式之间的转换。重新格式化图像数据的方法的这种应用不限于其中由神经网络处理重新格式化的数据的示例。此外,本文描述的方法和系统并不限于图像数据(或特征图数据)的处理,而是适用于其中需要分离或重新布置交错的数据,或者其中数据需要以特定方式交错以便进一步处理的广泛应用。
[0085] 应当理解,关于任何一个实施例描述的任何特征可以单独使用,或者与所描述的其它特征组合使用,并且还可以与任何其它实施例的一个或多个特征组合使用,或者与任何其它实施例的任何组合组合使用。此外,在不偏离所附权利要求书中限定的本发明的范围的情况下,也可以采用上面未描述的等同物和修改
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈