本发明的领域一般涉及计算科学,更具体地,涉及一种图像处理器i/o(input/output,输入/输出)单元。
背景技术:
图像处理通常包含对组织成阵列的像素值的处理。这里,空间组织的二维阵列捕获图像的二维性质(附加维度可以包括时间(例如,二维图像序列)和数据类型(例如,颜色))。在通常场景下,阵列的像素值由已经生成静止图像或帧序列的相机提供以捕获运动图像。传统的图像处理器通常处于两个极端的任一侧。
第一极端执行图像处理任务,作为在通用处理器或通用类处理器(generalpurpose-likeprocessor)(例如,具有矢量指令增强的通用处理器)上执行的软件程序。尽管第一极端通常提供高度通用的应用软件开发平台,但是它对精细粒度数据结构的使用结合相关开销(例如,指令获取和解码、片上和片外数据的处理、推测性执行)最后会导致在程序代码执行期间每单位数据消耗较大量的能量。
第二相反极端是将固定功能硬连线电路系统应用于较大的数据单位。较大(与精细粒度的相反)数据单位直接被应用于定制设计电路的这种使用大大降低了每单位数据的功耗。然而,使用定制设计的固定功能电路系统一般会导致处理器能够执行的有限的一组任务。如此,第二极端缺乏广泛通用的编程环境(与第一极端相关联)。
提供高度通用应用软件开发机会结合提高每单位数据功效的技术平台仍然是一个理想但缺失的解决方案。
技术实现要素:
描述了一种图像处理器。该图像处理器包括存储电路,用以存储从相机以光栅扫描格式接收的输入图像数据的片段。图像处理器还包括重新格式化电路,以将输入图像数据的片段转换成块图像格式。图像处理器还包括包含二维执行通道阵列(two-dimensionalexecutionlanearray)和二维移位寄存器阵列的处理器。二维移位寄存器阵列用以存储已经被格式化为块图像格式的输入图像数据。执行通道阵列用以执行对来自二维移位寄存器阵列的图像数据进行操作的指令。
附图说明
以下描述和附图用于说明各种实施例。在附图中:
图1示出了模板(stencil)处理器架构的高级视图;
图2示出了图像处理器架构的更详细视图;
图3a和图3b涉及光栅扫描到块输入格式化的过程;
图4a至图4k示出了光栅扫描到块输入格式化过程的第一实施例;
图5a至图5i示出了光栅扫描到块输入格式化过程的第二实施例;
图6示出了由图像处理器i/o单元执行的方法;
图7示出了图像处理器硬件架构的实施例;
图8a、图8b、图8c、图8d和图8e描绘了将图像数据解析成行组、将行组解析成薄片(sheet)以及在具有重叠模版的薄片上执行的操作;
图9a示出了模版处理器的实施例;
图9b示出模板处理器的指令字的实施例;
图10示出模板处理器内的数据计算单元的实施例;
图11a、图11b、图11c、图11d、图11e、图11f、图11g、图11h、图11i、
图11j和图11k描绘了使用二维移位阵列和执行通道阵列来确定具有重叠模板的一对相邻输出像素值的示例;
图12示出了集成执行通道阵列和二维移位阵列的单位单元(unitcell)的实施例;
图13示出了示例性计算系统。
具体实施方式
图像处理器的i/o单元
如本领域所已知,用于执行程序代码的基本电路结构包括执行级(executionstage)和寄存器空间。执行级包含用于执行指令的执行单元。待执行的指令的输入操作数从寄存器空间提供给执行级。从执行级对指令的执行而生成的结果被写回到寄存器空间。
在传统处理器上执行软件线程需要通过执行级顺序执行一系列指令。最常见的是,操作是“标量的”,从某种意义上说,从单个输入操作数集生成单个结果。然而,在“矢量”处理器的情况下,执行级对指令的执行将从输入操作数集的矢量生成结果的矢量。
图1示出了独特图像处理器架构100的高级视图,其包括耦合到二维移位寄存器阵列102的执行通道阵列101。这里,执行通道阵列中的每个执行通道可以被视为包含执行由处理器100支持的指令集所需的执行单元的分立执行级。在各种实施例中,每个执行通道接收同一指令,以在同一机器周期中执行,使得处理器如同二维单指令多数据(singleinstructionmultipledata,simd)处理器来进行操作。
每个执行通道在二维移位寄存器阵列102内的对应位置具有它自己的专用寄存器空间。例如,拐角执行通道103在拐角移位寄存器位置104中具有它自己的专用寄存器空间,拐角执行通道105在拐角移位寄存器位置106中具有它自己的专用寄存器空间,等等。
此外,移位寄存器阵列102能够移位其内容,以使得每个执行通道能够从其自己的寄存器空间直接操作在在先机器周期期间驻留在另一执行通道的寄存器空间中的值。例如,+1水平移位使得每个执行通道的寄存器空间从其最左边邻居的寄存器空间接收值。考虑到沿水平轴向左和向右移位值,以及沿垂直轴向上和向下移位值的能力,处理器能够有效地处理图像数据的模版(stencil)。
这里,如本领域所已知,模板是图像表面区域的切片,用作基本数据单元。例如,输出图像中特定像素位置的新值可以被计算为输入图像中的该特定像素位置在其中居中的区域中的像素值的平均值。例如,如果模板具有3像素×3像素的尺寸,则特定像素位置可以对应于3×3像素阵列的中间像素,并且可以计算3×3像素阵列内所有9个像素的平均值。
根据图1的处理器100的各种操作实施例,执行通道阵列101的每个执行通道负责计算输出图像中特定位置的像素值。因此,继续上面提到的3×3模板平均示例,在初始加载输入像素数据和移位寄存器内八个移位操作的协调移位序列之后,执行通道阵列中的每个执行通道会将所有九个像素值接收到其本地寄存器空间中,其中该九个像素值是计算其对应像素位置的平均值所需的。因为图1的处理器架构特别擅长处理图像模版,所以它也可以被称为模版处理器。
图2示出了具有多个模板处理器202_1至202_n的图像处理器201的高级视图。取决于整个处理器201的配置,模板处理器202_1至202_n中的某些模板处理器直接对从外部源提供给图像处理器201的输入图像数据进行操作,而模板处理器202_1至202_n中的其他模板处理器可以直接对模板处理器202_1至202_n中的另一个模板处理器生成的输出图像数据进行操作。
如图2所示,线缓冲器单元(linebufferunit)205_1被描绘为从图像处理器的i/o单元207接收输入图像数据206。如下文更详细描述的,i/o单元207重新格式化外部提供的输入图像数据209,以生成输入图像数据206。在各种实施例中,图像数据209由相机提供。一旦线缓冲器单元205_1接收到输入图像数据206,则线缓冲器单元205_1通过网络204将图像数据206传递到模板处理器202_1至202_n中的一个或多个以用于处理。如上所述,模板处理器执行程序代码,并且通常在它们相应的二维移位寄存器内移位图像数据,以有效地操作图像数据的模板。
如上所述,图像处理器的i/o单元207负责从图像处理器外部的源(例如,诸如计算系统的主存储器、相机等的存储器)接收输入图像数据209,并将图像数据转发到线缓冲器,该线缓冲器馈送给模板处理器,模板处理器用以处理图像数据。同样,图像处理器的i/o单元还负责从线缓冲器器205_1至205_n中的任何一个接收输出图像数据并将输出图像数据转发到存储器(例如,计算系统主存储器)、显示器或用以接收图像处理器的输出图像数据的其他组件,其中线缓冲器单元205_1至205_n从模板处理器接收输出数据。
重要的是,图像处理器的输入图像数据209经常被格式化为光栅扫描,而如上所详细描述的,模板处理器202_1至202_n本身对二维图像表面或“块”(而不是光栅扫描图像数据)进行操作。如此,图像处理器的i/o单元207被设计为将输入图像数据209从光栅扫描格式重新格式化为块图像格式。块图像格式的输入图像数据206然后从i/o单元207被发送到线缓冲器单元205_1至205_n中的一个或多个中。
图3a示出了光栅扫描到块格式化的高级视图。这里,边框301对应于待处理的整体输入图像。输入图像数据被接收为光栅扫描,该光栅扫描例如对应于整个输入图像301的同一行上的像素302_1、302_2、302_m的连续序列。因此,例如,在图像处理器接收到输入图像的第一行302_1的像素之后,接收到输入图像的第二行302_2的像素,等等。例如,以图3a所描绘的从左到右的次序接收同一行的像素。
然而,如上所述,模板处理器不按照光栅序列对输入图像数据进行操作。相反,模板处理器对输入图像的二维表面区域进行操作。如此,图像处理器需要接收足够量的光栅扫描输入数据,然后才能形成供模板处理器消耗的二维表面区域或块。
更具体地,在图3a的描绘中,假设将处理输入图像数据的模板处理器用以处理尺寸为m像素×m像素的块。在这种情况下,只有在i/o单元已经接收到第m输入光栅行的第m像素之后,才存在足够的输入数据来形成第一m×m的块303。也就是说,第一块303仅在前m-1输入光栅行被完全接收到之后的某个时间实现。
一旦已经接收了第一块303,它可以被转发到线缓冲器单元,以供模板处理器处理。参考图3b,在i/o单元已经接收到第m输入光栅行302_m的接下来的m个(总共2m个)像素之后,第二完整块304被实现并且可以被转发到线缓冲器单元。然后重复该过程,以使得每次接下来的所接收到的光栅扫描输入数据的m个像素完成下一个m×m表面的形成,该m×m表面可以被转发到线缓冲器单元。更具体地,在已经接收到第m光栅扫描行302_m的最后一个块之后,可以在接收第2m光栅扫描行期间形成下一组块。
返回参考图2,在各种实施例中,i/o单元207包括共享存储池(sharedstoragepool,ssp)210和格式转换逻辑(formatconversionlogic,fcl)211,以执行前述光栅到块的重新格式化。从紧接着的讨论中将会更清楚,共享存储池210是,例如,将输入光栅像素存储为多个,例如,相同大小的数据片段的存储器电路。在各种实施例中,片段是一个或多个像素的组。尽管在下面描述的实施例中,片段具有相等的大小,但是在替代实施例中,片段可以是可变大小的。格式转换逻辑211跟踪池内输入数据片段213的存储进度,在识别出下一个图像数据块已经存储在池中时,从池214中读出正确的片段以形成供模板处理器消耗的块。
图4a-图4k涉及i/o单元的重新格式化操作的更详细解释。图4a示出了与待处理的输入图像的一部分相对应的框架401。为了示例,假设待处理的输入图像具有16像素的宽度,并且将对输入图像进行操作的(多个)模板处理器将处理4像素乘4像素的块图像。注意,这些输入图像和块尺寸仅仅是示例性的(这些参数的实际尺寸通常更大)。
框架401内的内容具有双重含义。根据第一视角,框架401的内容示出了共享片段池210内输入像素数据的存储片段。根据第二视角,框架401的内容示出了由格式转换逻辑211内的寄存器空间212保存的有组织的指针值,其中,每个指针值指向共享存储池210中的指定位置,其中片段存储在共享存储池210中。在下面的讨论中,框架401的内容的双重含义将变得更加清楚。
参考图4a,输入图像的第一光栅扫描行的前四个像素p1到p4的第一片段被存储为共享存储池210中的第一片段。格式转换逻辑211还在其寄存器空间212中保存指针值ptr_1,该指针值指向第一片段存储在共享存储池中的位置(例如,该位置的存储器地址)。
图4b至图4d示出了以下时间序列,其中对于输入图像的光栅扫描的第一行,接收了第二片段的输入像素值、第三片段的输入像素值和第四片段的输入像素值。也就是说,像素p5至p8对应于第二片段的像素值,其存储在转换逻辑的寄存器空间212中由ptr_2标识的位置处;像素p9至p12对应于第三片段的像素值,其存储在转换逻辑的寄存器空间212中由ptr_3标识的位置处以及像素p13至p16对应于第四片段的像素值,其存储在转换逻辑的寄存器空间212中由ptr_4标识的位置处。
回顾输入图像具有16个像素的行宽度,注意,如同图4d的状态,输入图像的光栅扫描的第一整行已经存储在共享存储池210中。图4e示出了在已经完全接收到输入图像的光栅扫描的第二行之后,共享存储池210和重新格式化逻辑的寄存器空间212的状态。这里,注意,对于像素p17至p32,共享存储池210中已经消耗了四个附加片段的像素值。同样,四个新指针值ptr_5到ptr_8被保存在格式化逻辑的寄存器空间212中,它们分别指向共享存储池210中的这些新片段。
图4f示出了在已经完全接收到输入图像的光栅扫描的第三行之后,共享存储池210和重新格式化逻辑的寄存器空间212的状态。再次,对于像素p33至p48,在共享存储池210中已经消耗了另外四个附加片段的像素值。同样,四个新指针值ptr_9到ptr_12被保存在格式化逻辑的寄存器空间212中,它们分别指向共享存储池210中的这些新片段。
图4g示出了在输入图像的光栅扫描的第四行的第一片段已经存储在共享存储池210中并且重新格式化逻辑的寄存器空间212已经被更新为包括指向该片段的指针值ptr_13之后,共享存储池210和重新格式化逻辑的寄存器空间212的状态。重要的是,随着输入图像数据的第四行的第一段的存储,共享存储池210现在正在保存可由模板处理器操作的第一完整块图像(由阴影区域402突出显示)。
随着重新格式化逻辑211认识到将指针ptr_13添加到其寄存器空间212中对应于第一块图像402的存储,重新格式化逻辑211继续从共享存储池210读取指针ptr_1、ptr_5、ptr_9和ptr_13的内容。也就是说,框架401的第一列的内容(对应于阴影区域402)由重新格式化逻辑211从共享存储池210中读取,并被转发到线缓冲器单元,该线缓冲器馈送给一个或多个模板处理器,该一个或多个模板处理器用以对输入图像数据进行操作。与从存储池210读取第一块图像的内容相符,来自输入光栅扫描的图像数据(像素p53至p56)的下一(第二)片段的值也存储在共享存储池210中。
图4h示出了其中第一块的内容有资格被新的输入数据重写的系统的状态。也就是说,第一完整块402的指针(指针ptr_1、ptr_5、ptr_9和ptr_13)已经被返回到共享存储池210,或者以其他方式被标识到共享存储池210,以使得共享存储池理解它们的内容已经被重新格式化过程消耗并且可以自由地被重写。在一个实施例中,指针进入由共享存储池210的逻辑电路系统维护的空闲列表。共享存储池210,作为存储新接收的输入图像数据片段的过程的一部分,从空闲列表中移除指针,以将指针(及其在存储池中的对应存储器地址)分配给片段。
图4h还示出了随着第四输入光栅扫描行的第二片段的存储,也已经接收到了以供模板处理器消耗的第二块(阴影区域403)。如此,第二列片段从共享存储池210读取,并且对应的指针返回到存储池的空闲列表。
图4i示出了与沿着图像的第四行的光栅扫描数据的第三片段的接收相符的结果状态,该接收完成了以供模板处理器消耗的第三块图像的形成。然后,该过程不断重复,每个下一个存储的片段完成下一个块。
图4j示出了存储了第四光栅扫描行的第四片段之后的状态。如图4k中所观察到的,在第四表面已经被消耗之后,下一片段(光栅扫描数据的第五行的第一片段,像素p65至p68)的指针可以被存储在重新格式化逻辑的寄存器空间212(类似于图4a)的左上角部分中,并且例如,对于输入图像的光栅扫描行5至8,重复整个过程。
关于上面参考图4a至图4k描述的示例,有几个观察值得一提。首先,注意,对应于,例如,共享存储池中的存储器地址的实际指针值可以是随机的,或者它们具有很少或没有关系。如此,片段可以物理存储在共享存储池210内的随机位置。因此,与物理存储在共享存储池210内的片段的任何组织相反,图4a至4k中所观察到的存储的片段的组织布置是重新格式化逻辑的寄存器空间212中指针值的组织的结果。也就是说,识别以供模板处理器消耗的块图像的能力是重新格式化逻辑的寄存器空间212内的指针值的逻辑组织的结果,而不是实际存储片段的存储池210中的物理位置的任何组织的结果。在这里,与这个观察一致,存储池的列表基本上可以以随机次序列出指针。
第二个观察是,被认为足以供模板处理器消耗的块图像的大小可以大于模板处理器在处理块内的图像数据时将使用的模板尺寸。例如,在脱离用于图4a至图4k的示例的指定尺寸的更现实的实施例中,执行通道阵列和二维移位寄存器阵列具有16×16的尺寸。当二维移位寄存器阵列完全加载有像素尺寸为16×16的块图像时,然后执行通道阵列可以继续处理具有以下像素尺寸:2×2、3×3、4×4等中任一个的模板大小的块图像。这里,模板大小决定了二维移位寄存器执行的移位量。因此,由重新格式化逻辑标识并转发以供模板处理器处理的块更多地是关于加载模板处理器的移位寄存器阵列,而不是关于用于对图像数据进行操作的模板大小。
另一个观察是,上面参考图4a至图4k描述的示例,假设通过重新格式化逻辑而从存储池提取的每个块足以加载模板处理器以用于进一步操作。在各种实施例中,通过重新格式化逻辑而提取的每个块可以包含多个块,以用于加载到模板处理器中。例如,考虑模板处理器,其执行通道阵列和二维移位寄存器阵列的尺寸为8×8。这里,重新格式化逻辑可以标识具有8行和16个像素宽度的块。在这种情况下,重新格式化逻辑为每个转发区域转发两个块以供模板消耗。与模板处理器相关联的线缓冲器单元或逻辑,其用来处理块,将块分成一对8×8的块,它们被单独加载到模板处理器。因此,由重新格式化逻辑提取的块的大小不需要与加载到模板处理器中的图像块的尺寸相同。
又一个观察是,在各种实施例中,重新格式化逻辑的寄存器空间被配置为具有等于待提取的块图像的高度尺寸。在图4a至图4i的实施例中,被提取的块图像具有四个像素的高度尺寸。如此,寄存器空间212被组织成保存四行指针。相比之下,在各种实施例中,寄存器空间212被组织成具有等于由片段大小归一化的输入图像数据的光栅扫描行的尺寸的长度尺寸。在图4a至图4i的实施例中,片段大小是4个像素,并且输入图像数据具有16个像素的光栅扫描行尺寸。如此,寄存器空间212被组织成具有(16个像素/行)/(4个像素/片段)=4片段/行的长度尺寸。
在各种实施例中,i/o单元207能够同时支持多个输入图像流。也就是说,例如,可以接收第一光栅扫描图像并将对应的块转发到,例如,第一线缓冲器单元,同时可以接收第二光栅扫描图像并将对应的块转发到,例如,第二线缓冲器单元。对于特定线缓冲器单元的每个这样的流和对应的重新格式化可以被称为信道。共享存储池210因此是“共享”池,因为其存储资源由i/o单元207支持的许多个实时信道共享。也就是说,不同信道的片段同时存储在池210中。
随着i/o单元207被设计成同时处理多个信道,重新格式化逻辑211包括逻辑电路系统,以跟踪每个信道在其内部寄存器空间212中的指针值。在各种实施例中,重新格式化逻辑211包括足够的寄存器空间212来处理最坏情况(最大数量的并发信道具有最大支持的光栅扫描行像素长度和最大提取块像素高度)。
此外,重新格式化逻辑211内的寄存器空间212资源可由重新格式化逻辑的逻辑电路系统配置,以使能不同数量的同时支持的信道、不同的光栅扫描行像素宽度和/或不同的提取块像素高度。这里,每个实时信道可以在重新格式化逻辑211中由重新格式化逻辑211的配置寄存器空间来定义,该配置寄存器空间为特定信道定义哪个线缓冲器单元用以接收该信道的提取块、提取块的尺寸、正在进入(incoming)的光栅扫描输入图像流的行像素宽度等。
另一个观察是,在图4a至图4i的示例中,片段的输入速率比提取块的输出速率慢。更具体地说,在大约对应于新输入像素值的一个片段的值被写入共享存储池210的速率的时间量内,可以从共享存储池210读取所提取的表面区域数据的四个片段。
图5a至图5i涉及另一种情形,其中从存储池210读取片段的速率大约等于片段写入存储池的速率。也就是说,例如,接收输入数据的速率是图4a至图4i的示例的速率的4x。从下面的讨论中将会更清楚,在重新格式化逻辑的寄存器空间212中利用双缓冲方法来处理更快的输入数据速率。
图5a对应于图4g的当从所接收的输入光栅扫描数据可实现第一块时的的状态。为了便于绘图,指针值不示出在重新格式化逻辑的寄存器空间中。
图5b至图5e示出了随着每个片段从共享存储池中被读取以作为块图像的一部分转发,新片段被写入存储池210。也就是说,图5a至图5e中的每个下一个图示出了从第一缓冲器的第一列中移除下一个片段以及沿着第一缓冲器501的第四行添加下一个片段。结果,当从图5e中的第一缓冲器501的第一列读取第四片段(包含像素49至52)时,输入数据的下一片段(包含像素65至68)需要被写入重新格式化逻辑的指针寄存器空间212的第二缓冲器502的左上角位置。因此,如下图所示,接下来待提取的三个块使其指针在第一缓冲器501中,但是后续输入数据片段的指针值将使其指针存储在第二缓冲器502中。
图5f至图5h示出了以四个周期为增量的后续系统状态。也就是说,图5f示出了在第一缓冲器501的第二列的四个片段已经从共享存储池中读取(以构造要被转发到线缓冲器单元的第二块图像)并且接下来的四个输入数据片段已经被接收并且它们的指针值存储在第二缓冲器中之后的四个周期以后的系统状态。图5g示出了在第一缓冲器501中的第三列的四个片段已经从共享存储池中读取(以构造要被转发到线缓冲器单元的第三块图像)并且接下来的四个输入数据片段已经被接收并且它们的指针值存储在第二缓冲器502中之后的又四个周期以后的系统状态。图5h示出了在第一缓冲器501的第四列的四个片段已经从共享存储池中读取(以构造要被转发到线缓冲器单元的第四块图像)并且接下来的四个输入数据片段已经被接收并且它们的指针值存储在第二缓冲器502中之后的另外四个周期以后的系统状态。
图5i示出了在第五列图像数据已经从共享存储池中读取(以构造要被转发到线缓冲器单元的第五块图像),并且接下来的四个输入数据片段已经被接收并且它们的指针值存储在重新格式化逻辑的寄存器空间中时另外四个周期以后的系统状态。
注意,第五列驻留在第二缓冲器502中,而前四列驻留在第一缓冲器501中。另外,注意,要接收的第四片段(对于像素129至132)使其指针值存储在第一缓冲器501的左上角。因此,向前继续,接下来要提取的三个块使其指针值在第二缓冲器502中,但是新输入数据片段的指针将存储在第一缓冲器501中。然后,当提取第二缓冲器502的第四列的表面图像时,重复该过程,达到图5a的状态(按照有效指针集中度(pointerconcentration)而不是像素值)。
回到图2,当一个或多个模板处理器202_1至202_n完成它们对输入图像数据的相应处理时,输出图像数据通过网络204从(多个)模板处理器202传递到一个或多个对应的线缓冲器单元205_1至205_n。然后,一个或多个线缓冲器单元205_1至205_n将输出图像数据转发到图像处理器的i/o单元207。
在这种情况下,块从线缓冲器单元传递到i/o单元207。然后,i/o单元将块写入共享存储池。然后,从图像处理器向外发送的输出数据可以直接作为块读出,或者以光栅扫描格式读出。在后者的情况下,其中输出数据以光栅扫描格式读出,则块到光栅扫描的转换是通过与上面详细讨论的输入重新格式化过程相反的过程来完成的。也就是说,一旦连续数量的输出块已经被(逐片段)写入共享存储池中,该输出块对应于光栅扫描输出行的全宽,就可以逐片段地顺序读出等于块高度的多个行。
图6示出了由i/o单元执行的方法。该方法包括将以光栅扫描格式接收的输入图像数据作为片段存储在存储电路中601。该方法还包括通过从存储电路读取某些片段,将输入图像数据重新格式化为块图像格式602。该方法还包括用包括二维执行通道阵列和二维移位寄存器阵列的处理器来处理块图像格式的输入图像数据603。
图像处理器和模板处理器实施例
图7示出了如上所述以硬件实施的图像处理器的架构700的实施例。图像处理器可以是例如编译器的目标,该编译器将为模拟环境中的虚拟处理器编写的程序代码转换成实际上由硬件处理器执行的程序代码。如在图7中观察到的,架构700包括通过网络704(例如,包括片上交换网络、片上环形网络或其他类型的网络的片上网络(networkonchip(noc))互连到多个模板处理器单元702_1至702_n以及对应的薄片生成器(sheetgenerator)单元703_1至703_n的多个线缓冲器单元701_1至701_m。在一个实施例中,任何线缓冲器单元可以通过网络704连接到任何薄片生成器和对应的模板处理器。
在一个实施例中,程序代码被编译并加载到对应的模板处理器702上,以执行软件开发者早前定义的图像处理操作(例如,取决于设计和实施方式,程序代码也可以加载到模板处理器的相关联的薄片生成器703上)。在至少一些实例中,图像处理流水线(pipeline)可以通过将第一流水线级的第一内核程序加载到第一模板处理器702_1中、将第二流水线级的第二内核程序加载到第二模板处理器702_2中等来实现。其中第一内核执行流水线第一级的功能,第二内核执行流水线第二级的功能,等等。并且安装了附加的控制流方法来将输出图像数据从流水线的一级传递到流水线的下一级。
在其他配置中,图像处理器可以被实现为具有两个或更多模板处理器702_1、702_2的并行机器,该模板处理器702_1、702_2操作相同的内核程序代码。例如,图像数据的高密度和高数据速率流可以通过跨多个模板处理器扩展帧来处理,其中每个模板处理器执行相同的功能。
又在其他配置中,基本上内核的任何dag都可以通过用它们各自的程序代码内核配置各自的模板处理器,并且在硬件中配置适当的控制流挂钩来被加载到硬件处理器上,以在dag设计中将输出图像从一个内核导向到下一个内核的输入处。
作为一般流程,图像数据帧由宏i/o单元705接收,并以逐帧的方式传递给一个或多个线缓冲器单元701。在各种实施例中,其中宏i/o单元705被实施为类似于上面详细讨论的i/o单元207,单独的帧作为一系列图像数据块从宏i/o单元705传递到一个或多个线缓冲器单元,例如,每个图像数据块包含帧图像的不同部分。特定的线缓冲器单元将其图像数据帧解析成更小的图像数据区域,称为“行组(linegroup)”,以及然后通过网络704将行组传递给特定的薄片生成器。完整或“完全”的单数行组可以由例如帧的多个连续完整行或列的数据组成(为了简单起见,本说明书将主要指连续行)。薄片生成器进一步将图像数据的行组解析成更小的图像数据区域,称为“薄片”,并将该薄片呈现给其对应的模板处理器。
在图像处理流水线或dag流具有单个输入的情况下,通常,输入帧被导向同一线缓冲器单元701_1,该线缓冲器单元701_1将图像数据解析成行组,并将行组导向薄片生成器703_1,该薄片生成器703_1的对应模板处理器702_1正在执行流水线/dag中的第一内核的代码。在模板处理器702_1完成对其处理的行组的操作后,薄片生成器703_1将输出行组发送到“下游”线缓冲器单元701_2(在一些使用情况下,输出行组可以被发送回早前已经发送输入行组的同一线缓冲器单元701_1)。
然后,一个或多个“消费者”内核从下游线缓冲器单元701_2接收由第一模板处理器702_1生成的图像数据,其中该一个或多个“消费者”内核代表在它们自己的相应的其他薄片生成器和模板处理器(例如,薄片生成器703_2和模板处理器702_2)上执行的流水线/dag中的下一级/操作。以这种方式,在第一模板处理器上操作的“生产者”内核将其输出数据转发到在第二模板处理器上操作的“消费者”内核,其中消费者内核在生产者内核之后执行与整个流水线或dag的设计一致的下一组任务。
模板处理器702被设计成同时操作图像数据的多个重叠模板。模板处理器的多个重叠模板和内部硬件处理能力有效地决定了薄片的大小。这里,在模板处理器702内,执行通道的阵列一致地(inunison)操作,以同时处理由多个重叠模板覆盖的图像数据表面区域。
如下面将更详细描述的,在各种实施例中,图像数据薄片被加载到模板处理器702内的二维寄存器阵列结构中。使用薄片和二维寄存器阵列结构被认为是通过将大量数据移动到大量寄存器空间中来有效地提供功耗改进,例如,单次加载操作,随后由执行通道阵列直接对数据执行处理任务。此外,执行通道阵列和对应的寄存器阵列的使用提供了易于编程/配置的不同模板大小。
图8a至图8e高级地示出了线缓冲器单元701的解析活动、薄片生成器单元703的精细粒度解析活动以及耦合到薄片生成器单元703的模板处理器702的模板处理活动的实施例。
图8a描绘了图像数据801的输入帧的实施例。图8a还描绘了模板处理器被设计为对其进行操作的三个重叠模板802(每个重叠模板具有3像素×3像素的尺寸)的轮廓。每个模板分别为其生成输出图像数据的输出像素以纯黑色而突出显示。为简单起见,三个重叠模板802被描绘为仅在垂直方向重叠。应当认识到,实际上模板处理器可以被设计成在垂直和水平两个方向上都具有重叠模板。
由于模板处理器内的垂直重叠模板802,如在图8a中所观察到的,在帧内存在单个模板处理器可以操作的宽带图像数据。如将在下面更详细讨论的,在一个实施例中,模板处理器跨图像数据以从左到右的方式处理它们的重叠模板内的数据(然后以从上到下的次序,对下一组行进行重复)。因此,随着模板处理器继续向前推进它们的操作,纯黑色的输出像素块的数量将向右水平增长。如上所述,线缓冲器单元701负责解析来自正在进入的帧的输入图像数据的行组,该输入图像数据的行组足以使模板处理器在更多即将到来的周期内进行操作。行组的示例性描绘被示为阴影区域803。在一个实施例中,线缓冲器单元701可以包含(comprehend)向/从薄片生成器发送/接收行组的不同动态。例如,根据称为“全组(fullgroup)”的一种模式,图像数据的完整全宽行在线缓冲器单元和薄片生成器之间传递。根据称为“虚高(virtuallytall)”的第二种模式,行组最初通过全宽行的子集传递。然后,其余的行以较小(小于全宽)的片段顺序传递。
随着输入图像数据的行组803已经由线缓冲器单元定义并被传递到薄片生成器单元,薄片生成器单元进一步将行组解析成更精细的薄片,该更精细的薄片更精确地符合模板处理器的硬件限制。更具体地,如下文将更详细描述的,在一个实施例中,每个模板处理器由二维移位寄存器阵列组成。二维移位寄存器阵列基本上将图像数据移位到执行通道阵列的“下层”,其中移位的模式使得每个执行通道对它自己的相应模板内的数据进行操作(即,每个执行通道在它自己的信息模板上进行处理,以生成该模板的输出)。在一个实施例中,薄片是输入图像数据的表面区域,其“填充”或以其他方式加载到二维移位寄存器阵列中。
如下面将更详细描述的,在各种实施例中,实际上存在可以在任何周期移位的多层二维寄存器数据。为了方便起见,本说明书的大部分将简单地使用术语“二维移位寄存器”等来指代具有一层或多层这种可以移位的二维寄存器数据的结构。
因此,如在图8b中所观察到的,薄片生成器解析来自行组803的初始薄片804,并将其提供给模板处理器(这里,数据薄片对应于通常由附图标记804标识的阴影区域)。如在图8c和图8d中所观察到的,模板处理器通过在薄片上以从左到右的方式有效地移动重叠模板802来对输入图像数据的薄片进行操作。如图8d中所示,可以根据薄片内的数据计算输出值的像素数量被用尽(没有其他像素位置可以具有根据薄片内的信息而确定的输出值)。为了简单起见,图像的边界区域已被忽略。
如在图8e中所观察到的,薄片生成器然后为模板处理器提供下一薄片805以继续操作。注意,模板在下一薄片上开始操作时的初始位置是从第一薄片上的耗尽的点向右的下一个进程(progression)(如图8d先前描绘的)。对于新薄片805,当模板处理器以与处理第一薄片相同的方式对新薄片进行操作时,模板将简单地继续向右移动。
注意,由于输出像素位置周围的模版的边界区域,第一薄片804的数据和第二薄片805的数据之间存在一些重叠。该重叠可以简单地通过薄片生成器两次重新发送重叠数据来处理。在替代实施方式中,为了将下一薄片馈送到模板处理器,薄片生成器可以继续只向模板处理器发送新数据,并且模板处理器重新使用来自先前薄片的重叠数据。
图9a示出了模板处理器架构900的实施例。如图9a中所观察到的,模板处理器包括数据计算单元901、标量处理器902和相关联的存储器903以及i/o单元904。数据计算单元901包括执行通道阵列905、二维移位阵列结构906以及与阵列的指定行或列相关联的独立随机存取存储器907。
i/o单元904负责将从薄片生成器接收的“输入”薄片数据加载到数据计算单元901中,并将来自模板处理器的“输出”薄片数据存储到薄片生成器中。在一个实施例中,将薄片数据加载到数据计算单元901中需要将接收到的薄片解析成图像数据的行/列,并将图像数据的行/列加载到执行通道阵列的行/列的二维移位寄存器结构906或相应的随机存取存储器907中(下面将更详细地描述)。如果薄片最初被加载到存储器907中,则执行通道阵列905内的各个执行通道然后可以在适当的时候(例如,在对薄片数据进行操作之前作为加载指令)将薄片数据从随机存取存储器907加载到二维移位寄存器结构906中。当完成将薄片数据加载到寄存器结构906中时(无论是直接从薄片生成器还是从存储器907),执行通道阵列905的执行通道对数据进行操作,并最终将完成的数据作为薄片直接“写回”到薄片生成器,或者随机存取存储器907中。如果是后者,i/o单元904从随机存取存储器907中取出数据,以形成输出薄片,然后将该输出薄片转发给薄片生成器。
标量处理器902包括程序控制器909,该程序控制器909从标量存储器903读取模板处理器的程序代码的指令,并将指令发布到执行通道阵列905中的执行通道。在一个实施例中,单个相同的指令被广播到阵列905内的所有执行通道,以实行来自数据计算单元901的类似simd的行为。在一个实施例中,从标量存储器903读取并发布到执行通道阵列905的执行通道的指令的指令格式包括超长指令字(very-long-instruction-word,vliw)类型格式,该格式包括每个指令多于一个操作码。在另一个实施例中,vliw格式包括alu操作码(如下所述,在一个实施例中,其可以指定多于一个的传统alu操作)和存储器操作码(其引导指定执行通道或一组执行通道的存储器操作)两者,其中该alu操作码引导由每个执行通道的alu执行的数学功能。
术语“执行通道”是指一组能够执行指令的一个或多个执行单元(例如,能够执行指令的逻辑电路系统)。然而,在各种实施例中,执行通道可以包括更多类似处理器的功能,而不仅仅是执行单元。例如,除了一个或多个执行单元之外,执行通道还可以包括对接收到的指令进行解码的逻辑电路系统,或者,在更多类似mimd的设计的情况下,包括获取和解码指令的逻辑电路系统。关于类似mimd的方法,尽管本文主要描述了集中式程序控制方法,但是可以在各种替代实施例中实施更加分布式的方法(例如,包括在阵列905的每个执行通道内的程序代码和程序控制器)。
执行通道阵列905、程序控制器909和二维移位寄存器结构906的组合为大范围的可编程功能提供了广泛地适应性的/可配置的硬件平台。例如,假设各个执行通道能够执行各种各样的功能并且能够容易地访问任何输出阵列位置附近的输入图像数据,则应用软件开发者能够对具有广范围的不同功能能力以及尺寸(例如,模板大小)的内核进行编程。
除了充当由执行通道阵列905操作的图像数据的数据存储之外,随机存取存储器907还可以保存一个或多个查找表。在各种实施例中,一个或多个标量查找表也可以在标量存储器903内被实例化。
标量查找包括将来自相同索引、来自相同查找表的相同数据值传递到执行通道阵列905内的执行通道中的每一个。在各种实施例中,上述vliw指令格式被扩展为还包括标量操作码,该标量操作码将由标量处理器执行的查找操作引导到标量查找表中。指定用于与操作码一起使用的索引可以是立即操作数,也可以从其他数据存储位置获取。无论如何,在一个实施例中,从标量存储器内的标量查找表中查找基本上包括在相同的时钟周期期间向执行通道阵列905内的所有执行通道广播相同的数据值。关于查找表的使用和操作的附加细节将在下面进一步提供。
图9b总结了上面讨论的(多个)vliw指令字实施例。如在图9b中所观察的,vliw指令字格式包括三个独立指令的字段:1)由标量处理器执行的标量指令951;2)由执行通道阵列内的相应alu以simd方式广播和执行的alu指令952;以及,3)以部分simd方式广播和执行的存储器指令953(例如,如果执行通道阵列中沿着同一行的执行通道共享同一随机存取存储器,则来自不同行中的每一行的一个执行通道实际上执行该指令(存储器指令953的格式可以包括标识来自每一行的哪个执行通道执行该指令的操作数))。
还包括一个或多个立即操作数的字段954。在指令格式中可以标识指令951、952、953中的哪一个使用哪一个立即操作数信息。指令951、952、953中的每一个还包括它们自己相应的输入操作数和结果信息(例如,用于alu操作的本地寄存器和用于存储器访问指令的本地寄存器和存储器地址)。在一个实施例中,在执行通道阵列内的执行通道执行其他指令952、953中的任一个之前,标量处理器执行标量指令951。也就是说,vliw字的执行包括第一周期,标量指令951在该第一周期执行,随后是第二周期,其它指令952、953可以在该第二周期执行(注意,在各种实施例中,指令952和953可以并行执行)。
在一个实施例中,由标量处理器执行的标量指令包括命令,该命令被发布到薄片生成器,以将薄片从/向数据计算单元的存储器或2d移位寄存器加载/存储。这里,薄片生成器的操作可以取决于线缓冲器单元的操作或其他变量,这些变量妨碍薄片生成器完成标量处理器发布的任何命令所需的周期数的预运行时(pre-runtime)的理解。如此,在一个实施例中,其标量指令951对应于或以其他方式导致命令被发布到薄片生成器的任何vliw字还包括在另外两个指令字段952、953中的无操作(no-operation,noop)指令。然后,程序代码进入指令字段1152、1153的noop指令循环,直到薄片生成器完成向/从数据计算单元的加载/存储。这里,在向薄片生成器发布命令时,标量处理器可以设置互锁寄存器的位,在完成该命令时薄片生成器重置该互锁寄存器的位。在noop循环期间,标量处理器监控互锁位的位。当标量处理器检测到薄片生成器已经完成其命令时,再次开始正常执行。
图10示出了数据计算组件1001的实施例。如在图10中所观察的,数据计算组件1001包括逻辑上定位于二维移位寄存器阵列结构1006“上方”的执行通道阵列1005。如上所讨论,在各种实施例中,由薄片生成器提供的薄片图像数据被加载到二维移位寄存器1006中。然后,执行通道对来自寄存器结构1006的薄片数据进行操作。
执行通道阵列1005和移位寄存器结构1006相对于彼此固定定位。然而,移位寄存器阵列1006内的数据以策略性和协调性的方式移位,以使得执行通道阵列中的每个执行通道处理数据内的不同模板。如此,每个执行通道确定正在生成的输出薄片中不同像素的输出图像值。从图10的架构应该清楚,重叠模板不仅垂直排列,而且水平排列,因为执行通道阵列1005包括垂直相邻的执行通道以及水平相邻的执行通道。
数据计算单元1001的一些显著的架构特征包括具有比执行通道阵列1005更宽尺寸的移位寄存器结构1006。也就是说,在执行通道阵列1005之外存在寄存器的“晕环(halo)”1009。尽管晕环1009被示出存在于执行通道阵列的两侧,取决于实施方式,晕环可以存在于执行通道阵列1005的更少(一)或更多(三或四)侧。晕环1005用于当数据在执行通道1005“下层”移位时,为溢出到执行通道阵列1005的边界之外的数据提供“溢出”空间。作为简单的情况,当模板最左边的像素被处理时,以执行通道阵列1005的右边缘为中心的5×5模板将需要更靠右的四个晕环寄存器位置。为了便于绘图,图10示出了晕环右侧的寄存器仅具有水平移位连接,以及晕环底侧的寄存器仅具有垂直移位连接,而在标称实施例中,任一侧(右侧、底侧)的寄存器都具有水平和垂直连接。在各种实施例中,晕环区域不包括用于执行图像处理指令的对应执行通道逻辑(例如,不存在alu)。然而,各个存储器存取单元(m)存在于每个晕环区域位置中,使得各个晕环寄存器位置可以单独地从存储器加载数据以及将数据存储到存储器。
附加溢出空间由随机存取存储器1007提供,随机存取存储器1007耦合到阵列中的每一行和/或每一列,或其部分(例如,随机存取存储器可以被分派给执行通道阵列的在行方向跨越4个执行通道以及在列方向跨越2个执行通道的“区域”。为简单起见,该应用其余部分将主要参考基于行和/或列的分配方案)。这里,如果执行通道的内核操作要求它处理二维移位寄存器阵列1006之外的像素值(这是一些图像处理例程可能要求的),则图像数据平面能够进一步溢出,例如,从晕环区域1009溢出到随机存取存储器1007中。例如,考虑6×6模板,其中硬件在执行通道阵列右边缘的执行通道右侧仅包括四个存储元件的晕环区域。在这种情况下,需要将数据进一步向右移位到晕环1009的右边缘的右边,以完全处理模板。然后,移位到晕环区域1009之外的数据将溢出到随机存取存储器1007。图9的随机存取存储器1007和模板处理器的其他应用将在下面进一步提供。
图11a至图11k演示了图像数据在如上所述的执行通道阵列“下层”的二维移位寄存器阵列内移位的方式的工作示例。如图11a中观察到的,二维移位阵列的数据内容在第一阵列1107中描绘出,并且执行通道阵列由框架1105描绘出。此外,简单描绘了执行通道阵列内的两个相邻执行通道1110。在这种简化描绘1110中,每个执行通道包括寄存器r1,该寄存器r1可以从移位寄存器接收数据,从alu输出接收数据(例如,充当跨周期的累加器),或将输出数据写入输出目的地。
在本地寄存器r2中,每个执行通道还具有二维移位阵列中在其“下层”的可用的内容。因此,r1是执行通道的物理寄存器,而r2是二维移位寄存器阵列的物理寄存器。执行通道包括可以对r1和/或r2提供的操作数进行操作的alu。如下文将更详细描述的,在一个实施例中,移位寄存器实际上是用每个阵列位置的多个(“深度”)存储元件/寄存器元件来实施的,但是移位活动限于存储元件的一个平面(例如,每个周期只有存储元件的一个平面可以移位)。图11a至图11k将这些较深的寄存器位置之一描绘成用于存储来自相应的执行通道的结果x。为了便于说明,较深的结果寄存器被绘制在其对应寄存器r2的旁边,而不是下层。
图11a至图11k侧重于两个模版的计算,该模版的中心位置与执行通道阵列内所描绘的一对执行通道位置1111对齐。为了便于说明,这对执行通道1110被绘制成水平邻居,而实际上,根据以下示例,它们是垂直邻居。
如最初在图11a中所观察到的,执行通道以它们的中心模板位置为中心。图11b示出了由两个执行通道执行的目标代码。如在图11b中所观察到的,两个执行通道的程序代码使得移位寄存器阵列内的数据向下移位一个位置并向右移位一个位置。这将两个执行通道与它们相应的模板的左上角对齐。然后,程序代码将位于它们相应的位置(r2)的数据加载到r1。
如在图11c中所观察到的,程序代码接下来使得该对执行通道将移位寄存器阵列内的数据向左移位一个单位,这使得每个执行通道相应位置右侧的值被移位到每个执行通道的位置。然后将r1的值(先前的值)与已经移位到执行通道位置(r2)的新值相加。结果写入到r1。如在图11d中所观察到的,重复与上述关于图11c的相同的过程,这使得结果r1现在包括上执行通道中的值a+b+c和下执行通道中的值f+g+h。此时,两个执行通道都已经处理了它们相应的模板的上一行。注意,(如果左侧存在晕环区域)溢出到执行通道阵列左侧的晕环区域,或者如果在执行通道阵列左侧不存在晕环区域,则溢出到随机存取存储器。
如在图11e中所观察到的,接下来,程序代码使移位寄存器阵列内的数据向上移位一个单元,这使得两个执行通道与它们相应模板的中间行的右边缘对齐。两个执行通道的寄存器r1当前包括模板的顶行和中间行最右边值的总和。图11f和图11g演示了跨两个执行通道模板的中间行向左移动的继续过程。累积相加继续进行,以使得在图11g的处理结束时,两个执行通道都包括它们相应模板的顶行和中间行的值的总和。
图11h示出了将每个执行通道与其对应模板的最低行对齐的另一种移位。图11i和图11j示出了在两个执行通道的模板过程中(course)继续移位以完成处理。图11k示出了将每个执行通道与其在数据阵列中的正确位置对齐并将结果写入其中的附加移位。
在图11a至图11k的示例中,注意,移位操作的目标代码可以包括指令格式,该指令格式标识以(x,y)坐标表示的移位的方向和幅度。例如,向上移位一个位置的目标代码可以用目标代码表示为shift0,+1。作为另一个示例,向右移位一个位置可以用目标代码表示为shift+1,0。在各种实施例中,也可以在目标代码中指定更大幅度的移位(例如,shift0、+2)。这里,如果2d移位寄存器硬件仅支持每个周期移位一个位置,则指令可以被机器解释为要求多个周期执行,或者,2d移位寄存器硬件可以被设计为支持每个周期移位多于一个位置。后面的实施例将在下面进一步详细描述。
图12示出了用于执行通道和对应的移位寄存器结构的单位单元的另一种更详细的描绘(在各种实施例中,晕环区域中的寄存器不包括对应的执行通道,而是包括存储器单元)。在一个实施例中,执行通道和与执行通道阵列中的每个位置相关联的寄存器空间通过在执行通道阵列的每个节点处实例化在图12中所观察到的电路系统来实施。如在图12中所观察到的,单位单元包括耦合到由四个寄存器r2至r5组成的寄存器堆(registerfile)1202的执行通道1201。在任何周期期间,执行通道1201可以从寄存器r1至r5中的任何一个读取或向其写入。对于要求两个输入操作数的指令,执行通道可以从r1到r5中的任何一个获取该两个操作数。
在一个实施例中,二维移位寄存器结构通过允许,在单个周期期间,寄存器r2至r4中的任一个(仅一个)的内容通过输出多路复用器1203被“移出”到其邻居的寄存器堆中的一个中,并且从其对应的一个邻居通过输入多路复用器1204“移入”的内容来取代寄存器r2至r4中的任一个(仅一个)的内容来实施,以使得邻居之间的移位在同一方向上(例如,所有执行通道向左移位,所有执行通道向右移位,等)。尽管同一寄存器的内容被移出并被在同一周期移入的内容取代可以是常见的,但是多路复用器布置1203、1204允许在同一周期期间同一寄存器堆内的不同移位源和移位目标寄存器。
如图12所描绘,注意,在移位序列期间,执行通道将内容从其寄存器堆1202移出到其左面、右面、顶面和底面邻居中的每一个。结合相同的移位序列,执行通道也将内容从其左面、右面、顶面和底面邻居中的特定一个移位到其寄存器堆中。同样,对于所有执行通道,移出目标和移入源应该与相同的移位方向一致(例如,如果移出是向右面邻居,则移入应该是从左面邻居)。
尽管在一个实施例中,每个周期每个执行通道只允许移位一个寄存器的内容,但是其他实施例可以允许多于一个寄存器的内容被移入/移出。例如,如果在图12中观察到的多路复用器电路系统1203、1204的第二实例被合并到图12的设计中,则两个寄存器的内容可以在同一周期期间中移出/移入。当然,在每个周期只允许移位一个寄存器的内容的实施例中,通过在数学操作之间的移位消耗更多的时钟周期,可以在数学操作之间发生来自多个寄存器的移位(例如,通过在数学操作之间消耗两个移位操作,可以在数学操作之间移位两个寄存器的内容)。
如果在移位序列期间,执行通道的寄存器堆中少于全部的内容被移出,请注意,每个执行通道的未移出寄存器的内容保持不变(不移位)。如此,横跨移位周期,没有被移入内容取代的任何未移位内容保持在执行通道的本地。在每个执行通道中观察到的存储器单元(“m”)用于从/向与执行通道阵列内的执行通道的行和/或列相关联的随机存取存储器空间加载/存储数据。这里,m单元充当标准m单元,因为它通常用于加载/存储不能从/向执行通道自己的寄存器空间加载/存储的数据。在各种实施例中,m单元的主要操作是将数据从本地寄存器写入存储器,并且从存储器读取数据并将其写入本地寄存器。
关于由硬件执行通道1201的alu单元支持的isa操作码,在各种实施例中,由硬件alu支持的数学操作码包括例如,add,sub,mov,mul,mad,abs,div,shl,shr,min/max,sel,and,or,xor,not。如上所述,存储器访问指令可以由执行通道1201执行,以从/向其相关联的随机访问存储器获取/存储数据。另外,硬件执行通道1201支持移位操作指令(右、左、上、下),以在二维移位寄存器结构内移位数据。如上所述,程序控制指令主要由模板处理器的标量处理器执行。
g.实施方式实施例
需要指出的是,上述各种图像处理器架构特征不必局限于传统意义上的图像处理,因此可以应用于可能(或可能不)会导致图像处理器被重新表征的其他应用。例如,如果上述各种图像处理器架构特征中的任何一个将用于动画的创建和/或生成和/或渲染,而不是实际相机图像的处理,则图像处理器可以被表征为图形处理单元。此外,上述图像处理器架构特征可以应用于其他技术应用,诸如视频处理、视觉处理、图像识别和/或机器学习。以这种方式应用,图像处理器可以与更通用的处理器(例如,是计算系统的cpu或作为计算系统的cpu的一部分)集成(例如,作为其协处理器),或者可以是计算系统内的孤立处理器。
以上讨论的硬件设计实施例可以体现在半导体芯片内和/或作为最终针对半导体制造工艺的电路设计的描述。在后者的情况下,这样的电路描述可以采取(例如,vhdl或verilog)寄存器传输级(rtl)电路描述、栅极级电路描述、晶体管级电路描述或掩模描述或其各种组合的形式。电路描述一般体现在计算机可读存储介质(诸如,cd-rom或其他类型的存储技术)上。
从前面的章节中可以看出,如上所述的图像处理器可以以硬件的方式体现在计算机系统上(例如,作为处理来自手持设备的相机的数据的手持设备的片上系统(soc)的一部分)。在图像处理器被体现为硬件电路的情况下,注意,由图像处理器处理的图像数据可以直接从相机接收。这里,图像处理器可以是分立相机的一部分,或者是具有集成相机的计算系统的一部分。在后者的情况下,图像数据可以直接从相机或从计算系统的系统存储器接收(例如,相机将其图像数据发送到系统存储器而不是图像处理器)。还要注意,前面章节中描述的许多特征可能适用于图形处理器单元(其渲染动画)。
图13提供了计算系统的示例性描绘。下面描述的计算系统的许多组件可应用于具有集成相机和相关图像处理器的计算系统(例如,诸如智能手机的手持设备或平板电脑)。普通技术人员将能够容易地在两者之间进行划分。另外,图13的计算系统还包括高性能计算系统的许多特征,诸如工作站或超级计算机。
如在图13中所观察到的,基本计算系统可以包括中央处理单元1301(其可以包括例如多个通用处理核心1315_1至1315_n和设置在多核处理器或应用处理器上的主存储器控制器1317)、系统存储器1302、显示器1303(例如触摸屏、平板)、本地有线点对点链路(例如,usb)接口1304、各种网络i/o功能1305(例如,以太网接口和/或蜂窝调制解调器子系统),无线局域网(例如wifi)接口1306、无线点对点链路(例如蓝牙)接口1307和全球定位系统接口1308、各种传感器1309_1至1309_n、一个或多个相机1310、电池1311、功率管理控制单元1312、扬声器和麦克风1313以及音频编码器/解码器1314。
应用处理器或多核处理器1350可以在其cpu1201内包括一个或多个通用处理核心1315、一个或多个图形处理单元1316、存储器管理功能1317(例如,存储器控制器)、i/o控制功能1318和图像处理单元1319。通用处理核心1315一般执行计算系统的操作系统和应用软件。图形处理单元1316一般执行图形密集型功能,以例如生成呈现在显示器1303上的图形信息。存储器控制功能1317与系统存储器1302接口,以向/从系统存储器1302写入/读取数据。功率管理控制单元1312通常控制系统1300的功耗。
图像处理单元1319可以根据以上在前面章节中详细描述的任何图像处理单元实施例来实施。可选地或组合地,ipu1319可以耦合到gpu1316和cpu1301中的任一个或两者来作为其协处理器。此外,在各种实施例中,gpu1316可以用上面详细描述的任何图像处理器特征来实施。
触摸屏显示器1303、通信接口1304–1307、gps接口1308、传感器1309、相机1310和扬声器/麦克风编解码器1313、1314中的每一个都可以被视为相对于整个计算系统的各种形式的i/o(输入和/或输出),其中,在适当的情况下,该计算系统包括集成外围设备(例如,一个或多个相机1310)。取决于实施方式,这些i/o组件中的各种可以集成在应用处理器/多核处理器1350上,或者可以位于管芯(die)之外或者应用处理器/多核处理器1350的封装之外。
在一个实施例中,一个或多个相机1310包括能够测量相机和其视野中的目标之间的深度的深度相机。在应用处理器或其他处理器的通用cpu核心(或具有用以执行程序代码的指令执行流水线的其他功能块)上执行的应用软件、操作系统软件、设备驱动软件和/或固件可以执行上述功能中的任何一个。
本发明的实施例可以包括如上所阐述的各种过程。该过程可以体现在机器可执行指令中。该指令可用于使通用处理器或专用处理器执行某些过程。可替换地,这些过程可以由包含用于执行过程的硬连线和/或可编程逻辑的指定硬件组件来执行,或者由可编程计算机组件和定制硬件组件的任意组合来执行。
本发明的元件也可以作为用于存储机器可执行指令的机器可读介质来提供。机器可读介质可以包括但不限于软盘、光盘、cd-rom和磁光盘、闪存、rom、ram、eprom、eeprom、磁卡或光卡、传播介质或适合存储电子指令的其他类型的介质/机器可读介质。例如,本发明可以作为计算机程序下载,该计算机程序可以经由通信链路(例如,调制解调器或网络连接)通过体现在载波或其他传播介质中的数据信号的方式从远程计算机(例如服务器)传输到请求计算机(例如客户端)。
在前述说明书中,已经参照本发明的具体示例性实施例描述了本发明。然而,很明显,在不脱离所附权利要求中阐述的本发明的较广泛的精神和范围的情况下,可以对其进行各种修改和改变。因此,说明书和附图被认为是说明性的,而不是限制性的。
下面给出一些示例性实施例。
示例1:一种图像处理器,包括:
存储电路,用于存储从相机以光栅扫描格式接收的输入图像数据的片段;
重新格式化电路,用于将输入图像数据的片段转换成块图像格式;
处理器,包括二维执行通道阵列和二维移位寄存器阵列,二维移位寄存器阵列用于存储已被格式化为块图像格式的输入图像数据,执行通道阵列用于执行对来自二维移位寄存器阵列的图像数据进行操作的指令。
示例2:根据示例1的图像处理器,其中,重新格式化电路包括寄存器空间,以保存指向输入图像数据的片段的指针。
示例3:根据示例1或2的图像处理器,其中,指针被组织在寄存器空间中,以具有对应于光栅扫描格式的行宽度的第一尺寸以及具有对应于块格式的像素高度的第二尺寸。
示例4:根据示例1-3中至少一个的图像处理器,其中,重新格式化电路用于识别输入图像数据的块何时已经被存储在存储电路中,以及通过参考寄存器空间中的指针,使得存储电路内对应于块的片段从存储电路中被读取。
示例5:根据示例1-4中至少一个的图像处理器,其中,重新格式化电路支持以下任一项:
可配置的片段大小;
可配置的光栅扫描行宽度大小;
可配置的块像素高度大小。
示例6:根据示例1-5中至少一个的图像处理器,其中,重新格式化电路还执行输出块图像到输出图像光栅扫描转换。
示例7:根据示例1-6中至少一个的图像处理器,其中,重新格式化电路支持多个光栅扫描到块图像转换信道。
示例8:根据前述示例中至少一个的图像处理器,还包括至少一个模板处理器,该模板处理器被配置为对输入图像的至少一个二维区域进行操作。
示例9:根据前述示例中至少一个的图像处理器,其中,至少两个模板处理器被配置为处理相同的内核程序代码。
示例10:根据前述示例中至少一个的图像处理器,其中,至少两个模板重叠图像数据,特别是垂直重叠和/或水平重叠,并且至少一个模板处理器被配置为对重叠模板进行操作。
示例11:根据根据前述示例中至少一个的图像处理器,其中,数据计算单元包括移位寄存器结构,该移位寄存器结构具有比执行通道阵列更宽的尺寸,特别是在执行通道阵列之外存在寄存器。
示例12:根据根据前述示例中至少一个的图像处理器,其中,二维移位阵列和执行通道阵列被配置为确定具有重叠模板的至少一对相邻输出像素值。
示例13:一种计算系统,包括:
a)一个或多个通用处理器核心;
b)系统存储器;
c)耦合到系统存储器的存储器控制器;
d)相机;
e)一种图像处理器,包括以下i)、ii)和iii):
i)存储电路,用于存储从相机以光栅扫描格式接收的输入图像数据的片段;
ii)重新格式化电路,用于将输入图像数据的片段转换成块图像格式;
iii)处理器,包括二维执行通道阵列和二维移位寄存器阵列,二维移位寄存器阵列存储已经被格式化成块图像格式的输入图像数据,执行通道阵列执行对来自二维移位寄存器阵列的图像数据进行操作的指令。
示例14:根据示例13的计算系统,其中,重新格式化电路包括寄存器空间,以保存指向输入图像数据的片段的指针。
示例15:根据示例13或14的计算系统,其中,指针被组织在寄存器空间中,以具有对应于光栅扫描格式的行宽度的第一尺寸和具有对应于块格式的像素高度的第二尺寸。
示例16:根据示例13至15中至少一个的计算系统,其中,重新格式化电路用于识别输入图像数据的块何时已经被存储在存储电路中,以及通过参考寄存器空间中的指针,使得存储电路内对应于块的片段从存储电路中被读取。
示例17:根据示例13至16中至少一个的计算系统,其中,重新格式化电路支持以下任一项:
可配置的片段大小;
可配置的光栅扫描行宽度大小;
可配置的块像素高度大小。
示例18:根据示例13至17中至少一个的计算系统,其中,重新格式化电路还用于执行输出块图像到输出图像光栅扫描转换。
示例19:根据示例13至18中至少一个的计算系统,其中,重新格式化电路支持多个光栅扫描到块图像转换信道。
示例20:根据示例13至19中至少一个的计算系统,还包括至少一个模板处理器,该至少一个模板处理器对输入图像的至少一个二维区域进行操作。
示例21:根据示例13至20中至少一个的计算系统,其中,至少两个模板处理器被配置为处理相同的内核程序代码。
示例22:根据示例13至10中至少一个的计算系统,其中,至少两个模板重叠图像数据,特别是垂直地重叠和/或水平地重叠,并且至少一个模板处理器被配置为对重叠模板进行操作。
示例23:根据示例13至22中至少一个的计算系统,其中,数据计算单元包括移位寄存器结构,该移位寄存器结构具有比执行通道阵列更宽的尺寸,特别是在执行通道阵列之外存在寄存器。
示例24:根据示例13至23中至少一个的计算系统,其中,二维移位阵列和执行通道阵列被配置为确定具有重叠模板的至少一对相邻输出像素值。
示例25:一种方法,包括:
将从相机以光栅扫描格式接收的输入图像数据作为片段存储在存储电路内;
通过从存储电路读取某些片段来将输入图像数据重新格式化为块图像格式;以及,
用包括二维执行通道阵列和二维移位寄存器阵列的处理器处理块图像格式的输入图像数据。
示例26:根据示例25的方法,还包括在寄存器空间内保存指向输入图像数据的片段的指针。
示例27:根据示例25或26的方法,其中,指针被组织在寄存器空间中,以具有对应于光栅扫描格式的行宽度的第一尺寸和具有对应于块格式的像素高度的第二尺寸。
示例28:根据示例25至27中至少一个的方法,其中,重新格式化还包括识别输入图像数据的块何时已经存储在存储电路中,并且通过参考寄存器空间中的指针,使得存储电路中对应于块的片段从存储电路中被读取。
示例29:根据示例25至28中至少一个的方法,还包括执行以下任一项以执行重新格式化:
配置片段大小;
配置光栅扫描行宽度大小;
配置块像素高度大小。
示例30:根据示例25至29中至少一个的方法,还包括将块输出图像数据作为输出片段存储到存储电路中,并从存储电路中读取某些输出片段以形成光栅扫描格式的输出图像数据。
示例31:根据示例25至30中至少一个的方法,还包括至少一个模板处理器,该至少一个模板处理器对输入图像的至少一个二维区域进行操作。
示例32:根据示例25至31中至少一个的方法,其中,至少两个模板处理器处理相同的内核程序代码。
示例33:根据示例25至32中至少一个的方法,其中,至少两个模板重叠图像数据,特别是垂直地重叠和/或水平地重叠,并且至少一个模板处理器对重叠模板进行操作。
示例34:根据示例25至33中至少一个的方法,其中,数据计算单元包括移位寄存器结构,该移位寄存器结构具有比执行通道阵列更宽的尺寸,特别是在执行通道阵列之外存在寄存器。
示例35:根据示例25至34中至少一个的方法,其中,二维移位阵列和执行通道阵列被配置为确定具有重叠模板的至少一对相邻输出像素值。