首页> 中国专利> 用于高性能功率高效的可编程图像处理的架构

用于高性能功率高效的可编程图像处理的架构

摘要

本公开涉及用于高性能功率高效的可编程图像处理的架构。一种装置,包括图像处理单元,图像处理单元包括网络。图像处理单元包括多个蒙板处理器电路,每个蒙板处理器电路包括执行单元通道的阵列,该阵列被耦合到二维移位寄存器阵列结构,以通过执行程序代码同时处理多个重叠蒙板。图像处理单元包括在多个蒙板处理器和网络之间对应地耦合的多个表片生成器,用于将图像数据的输入线组解析成图像数据的输入表片以供蒙板处理器进行处理,并且用于根据从蒙板处理器接收的图像数据的输出表片形成图像数据的输出线组。图像处理单元包括耦合到网络的多个线缓冲器单元,以在从产生蒙板处理器到消耗蒙板处理器的方向上传递线组,以实现整体程序流程。

著录项

说明书

本申请属于申请日为2016年4月6日的中国发明专利申请201680019775.0的分案申请。

技术领域

本发明的领域一般地涉及图像处理,并且更具体地,涉及用于高性能功率高效的可编程图像处理的架构

背景技术

图像处理通常涉及被组织成阵列的像素值的处理。这里,空间上组织的二维阵列捕获图像的二维性质(附加维度可以包括时间(例如,二维图像序列)和数据类型(例如,颜色))。在通常情况下,由已经生成静止图像或帧序列以捕获运动图像的相机来提供阵列像素值。传统的图像处理器通常落在两个极端中的任一侧。

第一极端将图像处理认为作为在通用处理器或类通用处理器(例如,具有向量指令增强的通用处理器)上执行的软件程序来执行。虽然第一极端通常提供高度通用的应用软件开发平台,但是其使用更细粒度的数据结构以及相关的开销(例如,指令提取和解码、片上和片外数据的处理、推测执行)最终导致在程序代码的执行期间每单位数据消耗更大量的能量。

第二相对的极端将固定功能硬接线电路应用于更大的数据块。使用直接应用于定制设计电路的较大(相对于较细粒度)的数据块大大降低了每单位数据的功耗。然而,使用定制设计的固定功能电路通常导致处理器能够执行的有限任务集合。因此,在第二极端下缺乏(与第一极端相关联的)广泛通用的编程环境。

提供高度通用的应用软件开发机会与每单位数据的提高的功效两者相结合的技术平台仍然是期望但缺失的解决方案。

发明内容

描述了一种装置。该装置包括图像处理单元(IPU)。图像处理单元包括网络。图像处理单元包括多个蒙板处理器电路,多个蒙板处理器电路中的每一个包括执行单元通道的阵列,执行单元通道的阵列被耦合到二维移位寄存器阵列结构,以通过执行程序代码来同时处理多个重叠蒙板。图像处理单元包括在多个蒙板处理器和网络之间对应耦合的多个表片生成器。表片生成器用于将图像数据的输入线组解析成图像数据的输入表片以供蒙板处理器进行处理,并且用于根据从蒙板处理器接收的图像数据的输出表片形成图像数据的输出线组。图像处理单元包括耦合到网络的多个线缓冲器单元,以在从产生蒙板处理器到消耗蒙板处理器的方向上传递线组,以实现整体程序流程。

附图说明

以下描述和附图用于说明本发明的实施例。在附图中:

图1示出图像处理器硬件架构的实施例;

图2a、2b、2c、2d和2e图示将图像数据解析成线组、将线组解析成表片、以及在具有重叠蒙板的表片上执行的操作;

图3a示出蒙板处理器的实施例;

图3b示出蒙板处理器的指令字的实施例;

图4示出蒙板处理器内的数据计算单元的实施例;

图5a、5b、5c、5d、5e、5f、5g、5h、5i、5j和5k图示使用二维移位阵列和执行通道阵列来利用重叠蒙板确定一对相邻输出像素值的示例;

图6示出用于集成执行通道阵列和二维移位阵列的单元单体的实施例;

图7示出用于开发和实现图像处理程序代码的过程;

图8涉及用于配置图像处理器的过程;

图9a和图9b涉及线缓冲器单元的操作;

图10a和图10b涉及DAG程序流;

图11a、图11b和图11c涉及流水线程序流;

图12示出示例性计算系统。

具体实施方式

图1示出用于以硬件实现的图像处理器的架构100的实施例。图像处理器可以例如是编译器的目标,编译器将为模拟环境内的虚拟处理器编写的程序代码转换成由硬件处理器实际执行的程序代码。如图1所示,架构100包括通过网络104(例如,包含片上交换机网络、片上环形网络或其他类型的网络的片上网络(NOC))与多个蒙板(stencil)处理器单元102_1至102_N和相应的表片(sheet)生成器单元103_1至103-N互连的多个线缓冲器单元101_1至101_M。在实施例中,任何线缓冲器单元可以通过网络104连接到任何表片生成器和相应的蒙板处理器。

在实施例中,程序代码被编译和加载到相应的蒙板处理器102上以执行由软件开发人员较先前定义的图像处理操作(例如,根据设计和实现,程序代码还可以被加载到蒙板处理器的关联表片生成器103上)。在至少一些实例中,可以通过将用于第一流水线级的第一内核程序加载到第一蒙板处理器102_1中、将用于第二流水线级的第二内核程序加载到第二蒙板处理器102_2中等来实现图像处理流水线,其中,第一内核执行流水线的第一级的功能,第二内核执行流水线的第二级的功能等,并且安装附加的控制流方法以将输出图像数据从流水线的一个级传递到流水线的下一级。

在其他配置中,图像处理器可以被实现为具有操作相同内核程序代码的两个或更多的蒙板处理器102_1、102_2的并行机器。例如,可以通过跨多个蒙板处理器扩展帧来处理高密度和高数据速率的图像数据流,多个蒙板处理器中的每一个执行相同的功能。

在又一其他配置中,本质上,内核的任何DAG都可以通过下述来被加载到硬件处理器上:利用蒙板处理器自身的程序代码来配置对应的蒙板处理器并且将适当的控制流钩调(hook)配置到硬件中以将来自一个内核的输出图像引导到DAG设计中的下一个内核的输入。

作为通用流程,图像数据的帧由宏I/O单元105接收,并且以逐帧为基础被传递到线缓冲器单元101中的一个或多个。特定线缓冲器单元将其图像数据的帧解析成图像数据的较小区域,称为“线组(line group)”,并且然后通过网络104将线组传递到特定的表片生成器。完整或“完全”的单个线组可以例如由帧的多个连续完整行或列的数据组成(为简单起见,本说明书将主要涉及连续行)。表片生成器进一步将图像数据的线组解析成图像数据的更小的区域,称为“表片(sheet)”,并且将该表提交给其相应的蒙板处理器。

在具有单个输入的图像处理流水线或DAG流的情况下,通常,输入帧被引导到相同的线缓冲单元101_1,其将图像数据解析为线组,并将线组引导到表片生成器103_1,其相应的蒙板处理器102_1执行流水线/DAG中的第一内核的代码。当蒙板处理器102_1完成对其处理的线组上的操作时,表片生成器103_1将输出线组发送到“下游”线缓冲单元101_2(在一些使用情况下,输出线组可以被发送回以前发送过输入线组的同一线缓冲器单元101_1)。

然后,一个或多个“消费者”内核从下游线缓冲器单元101_2接收由第一蒙板处理器102_1生成的图像数据,一个或多个“消费者”内核表示在其自身对应的其他表片生成器和蒙板处理器(例如,表片生成器103_2和蒙板处理器102_2)上执行的流水线/DAG中的下一级/操作。以这种方式,在第一蒙板处理器上操作的“生产者”内核将其输出数据转发到在第二蒙板处理器上操作的“消费者”内核,其中,消费者内核在生产者内核符合整个流水线或DAG的设计之后执行下一任务集合。

蒙板处理器102被设计为在图像数据的多个重叠蒙板上同时操作。多个重叠蒙板和蒙板处理器的内部硬件处理能力有效地确定表片的大小。这里,在蒙板处理器102内,执行通道阵列一致地操作为同时处理由多个重叠蒙板覆盖的图像数据表面区域。

如下文将更详细地所述,在各种实施例中,图像数据的表片被加载到蒙板处理器102内的二维寄存器阵列结构中。使用表片和二维寄存器阵列结构被认为通过将大量数据移动到大量寄存器空间中,例如,使处理任务由执行通道阵列对紧接在其后的数据直接执行的单个加载操作,以有效地提供功耗改善。此外,使用执行通道阵列和相应的寄存器阵列提供易于编程/可配置的不同蒙板尺寸。

图2a至图2e以高水平示出了线缓冲器单元101的解析活动、表片生成器单元103的更细粒度解析活动两者以及耦合到表片生成器单元103的蒙板处理器102的蒙板处理活动的实施例。

图2a图示图像数据201的输入帧的实施例。图2a还图示三个重叠蒙板202(每个具有3像素×3像素的尺寸)的略图,蒙板处理器被设计为对该三个重叠蒙板202进行操作。以实心黑色突出显示每个蒙板对应生成其输出图像数据的输出像素。为简单起见,三个重叠蒙板202被图示为仅在垂直方向上重叠。应当认识到,实际上,蒙板处理器可以被设计成在垂直和水平方向上均具有重叠蒙板。

如图2a所示,由于蒙板处理器内的垂直重叠蒙板202,在单个蒙板处理器对其进行操作的帧内存在在宽带(wide band)图像数据。如将在下文更详细所述,在实施例中,蒙板处理器以从左到右的方式跨图像数据处理其重叠蒙板内的数据(并且然后以从上到下的顺序针对下一线集合重复)。因此,随着蒙板处理器继续进行其操作,实心黑色输出像素块的数目将水平向右增长。如上所述,线缓冲器单元101负责解析来自足以使蒙板处理器在扩展的多个即将到来的周期中进行操作的传入帧的输入图像数据的线组。线组的示例性图示被示为阴影区域203。在实施例中,线缓冲器单元101可以理解向/从表片生成器发送/接收线组的不同动态。例如,根据被称为“全组”的一个模式,在线缓冲器单元和表片生成器之间传递图像数据的完整全宽度线。根据被称为“虚拟高(virtually tall)”的第二模式,最初线组以全宽度行的子集被传递。然后,剩余的行以较小(小于全宽度)的片段被顺序传递。

在输入图像数据的线组203已经由线缓冲器单元定义并传递到表片生成器单元的情况下,表片生成器单元进一步将线组解析为更精确地拟合到蒙板处理器的硬件限制的更细的表片。更具体地,如下文将更进一步详细描述,在实施例中,每个蒙板处理器由二维移位寄存器阵列组成。二维移位寄存器阵列实质上对执行通道阵列“下方”的图像数据进行移位,其中,移位模式使得每个执行通道对其自身对应的蒙板内的数据进行操作(即,每个执行通道处理其自身蒙板的信息,以生成用于该蒙板的输出)。在实施例中,表片是“填充”或以其他方式被加载到二维移位寄存器阵列中的输入图像数据的表面区域。

如将在下文更详细地描述,在各种实施例中,实际上存在可以在任何周期上移位的二维寄存器数据的多个层。为了方便起见,本说明书的大部分将简单地使用术语“二维移位寄存器”等来表示具有可以被移位的二维寄存器数据的一个或多个这样的层的结构。

因此,如在图2b中所示,表片生成器解析来自线组203的初始表片204,并将其提供给蒙板处理器(这里,数据的表片对应于通常由附图标记204标识的阴影区域)。如在图2c和图2d中所示,蒙板处理器通过以从左到右的方式在表片上有效地移动重叠蒙板202来对输入图像数据的表片进行操作。如图2d所示,可以从表片内的数据计算其输出值的像素的数目被耗尽(没有其他像素位置可以具有从表片内的信息确定的输出值)。为简单起见,图像的边界区域被忽略。

如图2e所示,表片生成器然后向蒙板处理器提供下一表片205以继续操作。注意,当蒙板开始在下一表片上操作时,蒙板的初始位置是从第一表片上的耗尽点向右的下一累进(progression)(如之前在图2d中所图示的)。当蒙板处理器以与处理第一表片相同的方式对新表片进行操作时,使用新表片205,蒙板将简单地继续向右移动。

注意,由于围绕输出像素位置的蒙板的边界区域而导致在第一表片204的数据和第二表片205的数据之间存在一些重叠。该重叠可以简单地通过表片生成器重传重叠数据两次来处理。在替代实施方式中,为了将下一表片馈送到蒙板处理器,表片生成器可以继续仅向蒙板处理器发送新数据,并且蒙板处理器重复使用来自前一表片的重叠数据。

图3a示出蒙板处理器架构300的实施例。如图3a所示,蒙板处理器包括数据计算单元301、标量处理器302以及相关联的存储器303和I/O单元304。数据计算单元301包括执行通道阵列305、二维移位阵列结构306和与阵列的特定行或列相关联的单独的随机存取存储器307。

I/O单元304负责将从表片生成器接收的“输入”表片数据加载到数据计算单元301中,并将来自蒙板处理器的“输出”表片数据存储到表片生成器中。在实施例中,将表片数据加载到数据计算单元301中需要将所接收的表片解析成图像数据的行/列,并将图像数据的行/列加载到二维移位寄存器结构306或执行通道阵列的行/列的对应的随机存取存储器307中(以下将更详细描述)。如果表片最初被加载到存储器307中,则执行通道阵列305内的各个执行通道然后可以在适当时(例如,当刚好在对表片的数据操作之前的加载指令)将表片数据从随机存取存储器307加载到二维移位寄存器结构306中。在将表片数据(不论直接从表片生成器还是从存储器307)加载到寄存器结构306完成之后,执行通道阵列305的执行通道对数据进行操作,并最终将完成的数据作为表片直接“写回”表片生成器或随机存取存储器307中。如果是后者,则I/O单元304从随机存取存储器307提取数据以形成输出表片,输出表片然后被转发到表片生成器。

标量处理器302包括程序控制器309,其从标量存储器303读取蒙板处理器的程序代码的指令,并向执行通道阵列305中的执行通道发出指令。在实施例中,单个相同指令从数据计算单元301被广播到阵列305内的所有执行通道,以实现类SIMD的行为。在实施例中,从标量存储器303读取并向执行通道阵列305的执行通道发出的指令的指令格式包括超长指令字(VLIW)类型格式,该格式每个指令地包括多于一个的操作码。在另一实施例中,VLIW格式包括ALU操作码和存储器操作码(引导用于特定执行通道或执行通道集合的存储器操作),ALU操作码引导由每个执行通道的ALU(如下所述,在实施例中可以指定多于一个的传统ALU操作)执行的数学函数。

术语“执行通道”是指能够执行指令(例如,可以执行指令的逻辑电路)的一个或多个执行单元的集合。然而,在各种实施例中,执行通道可以包括除了执行单元之外的更多类处理器的功能。例如,除了一个或多个执行单元之外,执行通道还可以包括对接收到的指令进行解码的逻辑电路,或者在更多类MIMD的设计的情况下,包括提取和解码指令的逻辑电路。对于类MIMD的方法,尽管本文已经大量地描述了集中式程序控制方法,但是可以在各种替代实施例中实现更分布式的方法(例如,将程序代码和程序控制器包括在阵列305的每个执行通道内)。

执行通道阵列305、程序控制器309和二维移位寄存器结构306的组合提供用于广泛的可编程功能的广泛自适应/可配置的硬件平台。例如,假定各个执行通道能够执行各种各样的功能并且能够容易地存取接近任何输出阵列位置的输入图像数据,应用软件开发人员能够对具有广泛的不同功能能力以及尺寸(例如,蒙板大小)的内核进行编程。

除了用作由执行通道阵列305操作的图像数据的数据存储之外,随机存取存储器307还可以保存一个或多个查找表。在各种实施例中,一个或多个标量查找表也可以在标量存储器303内被实例化。

标量查找涉及根据相同的索引将来自相同查找表的相同的数据值传递到执行通道阵列305内的每个执行通道。在各种实施例中,上述VLIW指令格式被扩展为还包括标量操作码,该标量操作码将由标量处理器执行的查找操作引导到标量查找表。被指定用于与操作码一起使用的索引可以是立即操作数或者从某个其他数据存储位置提取。无论如何,在实施例中,从标量存储器内的标量查找表的查找本质上涉及在相同时钟周期期间将相同的数据值广播到执行通道阵列305内的所有执行通道。关于查找表的使用和操作的其他细节在下文进一步提供。

图3b概括了上述VLIW指令字实施例。如图3b所示,VLIW指令字格式包括三个独立指令的字段:1)由标量处理器执行的标量指令351;2)由执行通道阵列内的对应ALU以SIMD方式广播和执行的ALU指令352;以及3)以部分SIMD方式广播和执行的存储器指令353(例如,如果沿执行通道阵列中的同一行的执行通道共享相同的随机存取存储器,则来自不同行中的每一个的一个执行通道实际上执行该指令(存储器指令353的格式可以包括识别每个行中的哪个执行通道执行指令的操作数)。

还包括用于一个或多个立即操作数的字段354。可以在指令格式中识别指令351、352、353中的哪一个使用哪种立即操作数信息。指令351、352、353中的每一个还包括其对应的输入操作数和结果信息(例如,用于ALU操作的本地寄存器和用于存储器存取指令的本地寄存器和存储器地址)。在实施例中,在执行通道阵列中的执行通道执行指令352、353中的任一个之前,由标量处理器执行标量指令351。也就是说,VLIW字的执行包括执行标准指令351的第一周期,此后是可以执行其他指令352、353的第二周期(注意,在各种实施例中,可以并行地执行指令352和353)。

在实施例中,由标量处理器执行的标量指令包括向表片生成器发出用于将表片从/向数据计算单元的存储器或2D移位寄存器加载/存储的命令。这里,表片生成器的操作可以取决于线缓冲单元的操作或阻止表片生成器完成由标量处理器发出的任何命令所花费的周期数的预运行时间理解(comprehension)的其他变量。这样,在实施例中,标量指令351对应于或以其他方式使得向表片生成器发出的命令的任何VLIW字还包括其他两个指令字段352、353中的非操作(NOOP)指令。然后,程序代码进入用于指令字段352、353的NOOP指令循环,直到表片生成器完成其向/从数据计算单元的加载/存储。这里,在向表片生成器发出命令时,标量处理器可以设置在命令完成时表片生成器重置的互锁寄存器的位。在NOOP循环期间,标量处理器监视互锁位的位。当标量处理器检测到表片生成器已经完成其命令时,正常执行再次开始。

图4示出数据计算组件401的实施例。如图4所示,数据计算组件401包括逻辑上位于二维移位寄存器阵列结构406“上方”的执行通道405的阵列。如上所述,在各种实施例中,由表片生成器提供的图像数据表片被加载到二维移位寄存器406中。然后,执行通道对来自寄存器结构406的表片数据进行操作。

执行通道阵列405和移位寄存器结构406在位置上相对于彼此是固定的。然而,移位寄存器阵列406内的数据以策略性和协调的方式移位,以使得执行通道阵列中的每个执行通道处理数据内的不同蒙板。这样,每个执行通道确定正在生成的输出表中的不同像素的输出图像值。从图4的架构,应该清楚的是,当执行通道阵列405包括垂直相邻的执行通道以及水平相邻的执行通道时,重叠蒙板不仅被垂直地布置,而且还被水平地布置。

数据计算单元401的一些显著的架构特征包括具有比执行通道阵列405更宽的尺寸的移位寄存器结构406。也就是说,在执行通道阵列405外部,存在寄存器“外环(halo)”409。尽管外环409被示出为存在于执行通道阵列的两侧,但根据实施方式,外环可以存在于执行通道阵列405的更少(一个)或更多(三个或四个)侧。当数据正在执行通道405“下方”移动时,外环405用于向溢出执行通道阵列405的边界的数据提供“溢出”空间。作为简单的情况,当处理蒙板的最左边的像素时,以执行通道阵列405的右边缘为中心的5x5蒙板将需要更右边的四个外环寄存器位置。为了便于绘图,当在所谓的实施例中,任一侧(右侧、下侧)的寄存器将具有水平和垂直连接时,图4将外环的右侧的寄存器示为仅具有水平移位连接并且将外环的下侧的寄存器示为仅具有垂直移位连接。

由耦合到阵列中的每一行和/或每一列或其一部分的随机存取存储器407提供附加的溢出空间(例如,随机存取存储器可以被指派给横跨每行4个执行通道以及每列2个执行通道的执行通道阵列的“区域”。为简单起见,本申请的剩余部分主要涉及基于行和/或列的分配方案)。这里,如果执行通道的内核操作需要其处理二维移位寄存器阵列406外的像素值(一些图像处理例程可能需要),则图像数据的平面能够进一步溢出,例如,从外环区域409溢出到随机存取存储器407中。例如,考虑6X6蒙板,其中,硬件包括在执行通道阵列的右边缘上的执行通道右侧的仅四个存储元件的外环区域。在这种情况下,数据将需要进一步向右偏离外环409的右边缘,以完全处理蒙板。然后,移出外环区域409的数据将溢出到随机存取存储器407中。在下文,进一步提供随机存取存储器407和图3的蒙板处理器的其他应用。

图5a至5k示出如上提到的在执行通道阵列“下方”的二维移位寄存器阵列内以其移位图像数据的方式的工作示例。如图5a所示,在第一阵列507中图示了二维移位阵列的数据内容,并且由帧505图示执行通道阵列。而且,简单地图示执行通道阵列内的两个相邻的执行通道510。在该简单图示510中,每个执行通道包括可以从移位寄存器接受数据、接受来自ALU输出的数据(例如,表现为跨周期的累加器)或将输出数据写入输出目的地的寄存器R1。

每个执行通道还具有可在本地寄存器R2中提供的在二维移位阵列中在其“下方”的内容。因此,R1是执行通道的物理寄存器,而R2是二维移位寄存器阵列的物理寄存器。执行通道包括可以对由R1和/或R2提供的操作数进行操作的ALU。如下文更详细地描述,在实施例中,移位寄存器实际上由每个阵列位置的多个存储/寄存器元件(的“深度”)实现,但是移位活动被限制到存储元件的一个平面(例如,存储元件的一个平面仅每周期地移位)。图5a至5k图示用于存储来自对应执行通道的结果X的这些较深寄存器位置中的一个。为了便于说明,在旁边而不是在其对应寄存器R2的下方图示较深结果寄存器。

图5a至5k集中于两个蒙板的计算,其中心位置与在执行通道阵列内图示的执行通道位置对511对准。为了便于说明,当实际上根据下述示例,执行通道对510是垂直邻居时,该执行通道对510被图示为水平邻居。

如图5a初始所示,执行通道以其中心蒙板位置为中心。图5b示出由两个执行通道执行的对象代码。如图5b所示,两个执行通道的程序代码使得移位寄存器阵列内的数据下移一个位置并右移一个位置。这将使两个执行通道对准其对应的蒙板的左上角。然后,程序代码使得将位于其对应位置中(在R2中)的数据加载到R1中。

如图5c所示,程序代码接下来使得该执行通道对将移位寄存器阵列内的数据向左移动一个单位,这使得每个执行通道的对应位置的右侧的值被移位到每个执行通道的位置。然后,将R1中的值(前一个值)与已移位到执行通道的位置中(在R2中)的新值相加。结果被写入R1中。如图5d所示,重复与上述图5c相同的过程,使得结果R1现在将值A+B+C包括在上部执行通道中,并且将F+G+H包括在下部执行通道中。此时,两个执行通道已经处理了其对应的蒙板的上部行。注意,如果在执行通道阵列的左侧不存在外环区域,则将溢出到执行通道阵列左侧的外环区域(如果在左侧存在一个)或随机存取存储器中。

如图5e所示,接下来,程序代码使得移位寄存器阵列内的数据上移一个单位,这使得两个执行通道与其对应的蒙板的中间行的右边缘对齐。两个执行通道的寄存器R1当前包括蒙板的顶行和中间行的最右值的总和。图5f和5g表明跨两个执行通道的蒙板的中间行向左移动的持续进程。累积加法继续,使得在图5g的处理结束时,两个执行通道包括其对应的蒙板的顶行和中间行的值的总和。

图5h示出使每个执行通道与其对应的蒙板的最下行对准的另一移位。图5i和5j示出继续移位以完成两个执行通道的蒙板的过程上的处理。图5k示出了附加移位以使每个执行通道与其在数据阵列中的正确位置对齐并将其结果写入。

在图5a-5k的示例中,注意,用于移位操作的对象代码可以包括识别以(X,Y)坐标表达的移位的方向和幅度的指令格式。例如,用于上移一个位置的对象代码可以以对象代码被表达为SHIFT 0,+1。作为另一示例,向右移一个位置可以以对象代码被表达为SHIFT+1,0。在各种实施例中,较大幅度的移位还可以以对象代码(例如SHIFT 0,+2)指定。这里,如果2D移位寄存器硬件仅支持每个周期一个位置的移位,则该指令可以由机器解释为需要多个周期的执行,或者2D移位寄存器硬件可以被设计为支持每个周期多于1个位置的移位。在下文中,将进一步详细描述后者的实施例。

图6示出用于阵列执行通道和移位寄存器结构的单元单体的另一个更详细图示(外环区域中的寄存器不包括相应的执行通道)。在实施例中,通过在执行通道阵列的每个节点处实例化图6所示的电路来实现与执行通道阵列中的每个位置相关联的执行通道和寄存器空间。如图6所示,单元单体包括耦合到由四个寄存器R2至R5组成的寄存器堆602的执行通道601。在任何周期期间,执行通道601可以从寄存器R1至R5中的任一个读取或写入。对于需要两个输入操作数的指令,执行通道可以从R1至R5中的任何一个检索两个操作数。

在实施例中,通过在单个周期期间,通过允许寄存器R2至R4中的(仅)一个的任何一个的内容通过输出复用器603被“移出”到其相邻的寄存器堆之一,并且使寄存器R2至R4中的(仅)一个的任何一个的内容被替换为通过输入复用器604,从其相应的一个邻居“移入”的内容,使得邻居之间的移位处于相同的方向(例如,所有执行线路左移、所有执行通道右移等),来实现二维移位寄存器结构。尽管对同一寄存器来说,使其内容移出并用在同一周期上移入的内容替换是很常见的,但是复用器布置603、604允许不同的移位源和移位目标寄存器在同一周期期间在同一寄存器堆内。

如图6所示,注意,在移位序列期间,执行通道将内容从其寄存器堆602移位到其左邻、右邻、上邻和下邻中的每一个。结合相同的移位序列,执行通道还将内容从其左邻、右邻、上邻和下邻中的特定一个移位到其寄存器堆中。再次,对所有执行通道,移出目标和移入源应该与同一移位方向一致(例如,如果移出到右邻,则应该从左邻移入)。

尽管在一个实施例中,允许每个周期每个执行通道仅移位一个寄存器的内容,但是其他实施例可以允许多于一个的寄存器的内容被移入/移出。例如,如果在图6中所示的复用器电路603、604的第二实例被并入图6的设计中,则在同一周期期间,可以移出/移入两个寄存器的内容。当然,在每个周期仅允许移位一个寄存器的内容的实施例中,通过为数学运算之间的移位消耗更多的时钟周期,可以在数学运算之间发生来自多个寄存器的移位(例如,通过在数学运算之间消耗两个移位运算,可以在数学运算之间移位两个寄存器的内容)。

如果在移动序列期间移出少于执行通道的寄存器堆的所有内容,则注意,每个执行通道的未移出寄存器的内容保持原样(不移位)。这样,没有通过在内容中移位进行替换的任何未移位内容在移位周期中仍然存在于执行通道的本地。在每个执行通道中观察到的存储器单元(“M”)用于从/向与执行通道阵列内的执行通道的行和/或列相关联的随机存取存储器空间加载/存储数据。这里,M单元用作标准M单元,因为其通常用于加载/存储无法从/向执行通道自己的寄存器空间加载/存储的数据。在各种实施例中,M单元的主要操作是将数据从本地寄存器写入存储器,并且从存储器读取数据并将其写入本地寄存器。

对于由硬件执行通道601的ALU单元所支持的ISA操作码,在各种实施例中,由硬件ALU支持的数学操作码与由虚拟执行通道支持的数学操作码(例如,ADD,SUB,MOV,MUL,MAD,ABS,DIV,SHL,SHR,MIN/MAX,SEL,AND,OR,XOR,NOT)整体一致(例如,基本上相同)。如上所述,存储器存取指令可以由执行通道601执行以从/向其关联的随机存取存储器提取/存储数据。此外,硬件执行通道601支持移位操作指令(右、左、上、下)以在二维移位寄存器结构内移位数据。如上所述,程序控制指令主要由蒙板处理器的标量处理器执行。

图7示出了图像处理器技术平台的高级视图,其包括虚拟图像处理环境701、实际图像处理硬件703和用于将为虚拟处理环境701编写的高级代码转换为实际硬件703物理地执行的对象代码的编译器702。如下文更详细地所述,虚拟处理环境701在可以被开发并且针对应用的构成过程的易于可视化定制的应用方面是广泛通用的。当开发人员704完成程序代码开发工作时,编译器702将在虚拟处理环境701内编写的代码转换成定向到实际硬件703的对象代码。

在各种实施例中,为硬件平台编写的程序代码用独特的虚拟代码来编写,该独特的虚拟代码包括具有加载和存储指令的指令集,其指令格式将输入和输出阵列位置识别为例如X、Y坐标。在各种实施方式中,X、Y坐标信息实际上可以被编程到硬件平台中,并且被其各个组件来识别/理解。这不同于例如将X、Y坐标(例如,在编译器内)转换成不同的信息。例如,在蒙板处理器内的二维移位寄存器结构的情况下,X、Y坐标信息被转换为寄存器移位运动。相比之下,硬件平台的其他部分可以具体地接收并理解以高虚拟代码级原始表达的X、Y坐标信息。

如图8所示,程序代码开发人员在虚拟代码级801利用特殊指令格式将数据位置表达为X、Y坐标。在编译阶段期间,虚拟代码被转换成由硬件(对象代码)实际处理的程序代码以及加载到硬件的配置(例如,寄存器)空间中的相应配置信息。如图8所示,在实施例中,用于特定内核的对象代码被加载到蒙板处理器的标量处理器805的程序空间中。

作为配置过程的一部分,在标量处理器805上执行的配置软件将适当的配置信息811、812加载到表片生成器单元803和线缓冲器单元801两者,表片生成器单元803被耦合到蒙板处理器802,线缓冲器单元801将生成用于由蒙板处理器802操作的新表片或者接收由蒙板处理器802生成的处理的表片。这里,通常仍然可以根据整个图像的X、Y坐标来考虑表片。也就是说,一旦定义了图像或帧(例如,根据每行的像素数目、行数目、每列的像素数目和列数目),图像的任何部分或位置仍然可以用X、Y坐标来指示。

这样,在各种实施例中,表片生成器单元803和线缓冲器单元801中的任一个或两者被配置有在其对应的配置空间806、807内的信息811、812,其建立信息平台,从该信息平台以X、Y坐标识别图像或帧的特定位置和/或区域(例如,线组、表片)。在各种实施方式/使用中,X、Y坐标可以是在虚拟代码级表达的相同X、Y坐标。

这种信息的示例包括例如线缓冲器单元中的活动线组的数目、每个线组的图像大小(例如,作为四个X、Y坐标(每个角一个)的集合或一对X、Y坐标(一个用于较低较近的角,一个用于较高较远的角)或绝对图像宽度和图像高度、蒙板大小(表达为定义蒙板处理器的重叠蒙板区域和/或单个蒙板的大小的X、Y值)、表片和/或线组大小(例如,在与图像大小相同的方面被指定但是具有较小的维度)等。此外,至少可以利用附加配置信息对线缓冲器单元701进行编程,附加配置信息诸如写入由线缓冲器单元801管理的线组的生产者内核的数目和读取由线缓冲器单元801管理的线组的消费者内核的数目。通常还包含与图像数据相关联的信道和/或维度的数目作为配置信息。

图9a仅作为一个示例图示了使用X、Y坐标来定义图像内的线组。这里,在图像901内可观察到N个线组902_1、902_2、...、902_N。如从图9a所示,可以通过参考图像内的定义例如一个或多个线组角点的X、Y坐标来容易地定义每个线组。这样,在各种实施例中,用于定义特定线组的线组名称或其他数据结构可以包括与线组相关联的X、Y坐标位置,以便于对其进行具体识别。

简单回顾图8,注意,图8示出了在运行时间期间,表片生成器803可以通过例如包括定义期望的数据区域的X、Y坐标信息请求来自线缓冲器单元801的“下一个”线组(或线组的一部分)。图9a示出了仅由完整行的图像数据的线组成的标称“全宽度”线组。在称为“虚拟高(virtually-tall)”的替代配置中,线缓冲器单元801初始地仅传递线组的第一较高部分作为全宽度行的图像数据。然后,表片生具体地请求成器在连续分块中的线组的后续较低行,其小于全宽度行并且被单独地请求。这样,表片生成器进行多个请求以获得全线组。这里,每个这样的请求可以通过归属于下一部分的X、Y坐标来定义下一部分。

如图9b所示,线缓冲器单元包括存储线组902_1至902_N的存储器901(例如,静态或动态随机存取存储器(SRAM或DRAM))。存储器901可以与实现线缓冲器单元(以及例如表片生成器和蒙板处理器)的同一电路一起在芯片上实现或者在芯片外实现。图9b示出了产生和消耗存储器901内的用于特定图像/帧的线组902_1至902_N的各种内核之间的活动。

如图9b所示,生产者内核K1在分离的时间实例P1、P2至电PN中向线缓冲器单元901发送新的线组以存储在存储器901中。生产者内核K1在生成新的数据表片的蒙板处理器上执行。耦合到蒙板处理器的表片生成器累积表片以形成线组,并且将线组转发到在存储器中对其进行存储的线缓冲器单元。

而且如图9b所示,存在对由生产者内核K1生成的线组902_1至902_N进行操作的两个消费者内核K2、K3。这里,消费者内核K2和K3分别在时间C21和C31接收第一线组902_1。显然,时间C21和C31在时间P1之后发生。其他限制可能不存在。例如,时间C21和/或C31可以在时间P2至PN中的任何一个时间之前或之后发生。这里,内核K2和K3的对应表片生成器在适于其对应内核的时间请求下一个线组。如果内核K2、K3中的任何一个在时间P1之前请求线组902_1,则请求空闲,直到线组902_1实际被写入存储器901之后。

可以想到,来自内核K2和K3中的任何一个或两者的对所有线组902_1至902_N的请求可以在时间P1之前到达。因此,消费者内核可以在任意时间请求线组。随着消费者内核请求线组,线组被转发到消费者内核,然而,这受到生产者内核K1可以产生它们的速率的影响。在各种实施例中,消费者内核依次请求线组,并且同样依次接收它们(内核K2在时间C22至C2N依次接收线组902_2至902_N)。为简单起见,对于特定线组仅图示了一个生产者内核。可以设想,各种实施例可以被设计为允许不同的生产者写入相同的线组(例如,在消费者不被允许服务,直到所有生产者已经写入线组之后的情况下)。

在没有生产者内核(因为消费者内核是处理器的DAG处理流程中的第一内核)的情况下,可以将图像数据的帧传送到存储器901中(例如,经由直接存储器存取(DMA)或从相机)并且解析成线组。在没有消费者内核的情况下(因为生产者内核是处理器的总体程序流程中的最后一个内核),可以组合得到的线组以形成输出帧。

图10a示出了虚拟环境内编写的应用软件可以采用的结构和形式的示例。如图10a所示,可以期望程序代码处理输入图像数据1001中的一个或多个帧以对输入图像数据1001实现某种整体变换。通过对由开发人员表达的经编排的序列中的输入图像数据进行操作的程序代码1002的一个或多个内核的操作来实现该变换。

例如,如图10a所示,通过利用第一内核K1首先处理每个输入图像来实现整体变换。然后,内核K2操作由内核K1所产生的输出图像。然后,内核K3_1或K3_2操作由内核K2产生的输出图像中的每一个。然后,内核K4操作由内核K3_1/K3_2产生的输出图像。内核K3_1和K3_2可以是被设计为通过在K3级施加并行处理来加速整体处理的相同的内核,或者可以是不同的内核(例如,内核K3_1对第一特定类型的输入图像进行操作,并且内核K3_2对不同的第二类型的输入图像进行操作)。

这样,较大的整体图像处理序列可以采取图像处理流水线或有向无环图(DAG)的形式,并且这样,开发环境可以被配备为向开发人员实际呈现正在开发的程序代码的表示。内核可以由开发人员单独开发和/或可以由供应任何底层技术(诸如实际的信号处理器硬件和/或其设计)的实体和/或由第三方(例如,为开发环境编写的内核软件的供应商)提供。这样,期望标称(nominal)开发环境将包括开发人员以各种方式自由“钩调(hook up)”以实现其更大开发工作的整体流程的内核“库”。期望成为这种库的一部分的一些基本内核可以包括用于提供以下基本图像处理任务中的任何一个或多个的内核:卷积、去噪、颜色空间转换、边缘和角检测、锐化、白平衡、伽马校正、色调映射、矩阵乘法、图像配准、金字塔构造、小波变换、块方式离散余弦和傅立叶变换。

如上所述,在各种实施例中,每个内核在其自己的蒙板处理器上运行。例如,参考图10a,内核K1在第一蒙板处理器上运行,内核K2在第二蒙板处理器上运行等。另外,如上所述,通过线缓冲器单元产生和消耗内核接口。

图10b图示了可以如何配置图像处理器以实现图10a的DAG流程。如图10b所示,线缓冲器单元1001_1(LBU_1)接收输入图像流,并且将所接收的帧解析成线组。交换网络被配置为将线组从LBU_1路由到内核K1在其上执行的第一蒙板处理器1002_1。来自内核K1的输出图像被格式化成线组并转发到第二线缓冲器单元1001_2(LBU_2)。然后,将这些线组转发到在其上执行内核K2的第二蒙板处理器。

从图10a,可以将图像信息从内核K2“分割(split)”到内核K3_1或K3_2中的任何一个。这里,例如,内核K3_1和K3_2可以处理与正在处理的整个图像相关联的不同信道。例如,内核K3_1可以处理红色(R)图像,而内核K3_2可以处理绿色(G)和蓝色(B)图像。替选地,K3_1可以处理可视图像,而内核K3_2可以处理(例如,与可视图像一起从飞行时间(time-of-flight)深度成像相机拍摄的)深度图像。无论如何,图像的所有信道都由内核K1和K2进行处理,但是图像的不同信道有不同的内核K3_1和K3_2来处理。此外,内核K3_1和K3_2可以是相同(例如,数字上极其密集)程序代码的单独实例,并且使用两个蒙板处理器,通过对其并行执行来加速K3功能的处理。

无论如何,上述“分割”使得来自内核K2的一些线组图像信息被缓存到第三线缓冲器单元1001_3(LBU_3)中,并且来自内核K2的其他线组图像信息被缓存到第四线缓冲器单元1001_4(LBU_4)。在LBU_3线缓冲器单元中缓存的线组被转发到内核K3_1在其上执行的第三蒙板处理器1002_3。在LBU_4线缓冲器单元中缓存的线组被转发到内核K3_2在其上执行的第四蒙板处理器1002_4。来自内核K3_1和K3_2的输出线组被分别缓存在第五和第六线缓冲器单元1001_4(LBU_5)、1001_5(LBU_6)中。然后,将来自LBU_5和LBU_6线缓冲器单元的线组传递到执行内核K4的第五蒙板处理器1002_5。注意,分割的线组在第五蒙板处理器1002_5处再次合并。

图11a和图11b涉及更直接的流水线方法,其中,每个蒙板处理器从紧接在前级接收线组,并提供给紧接在后级。具体地,线缓冲器单元1101_1(LBU_1)、1101_2(LBU_2)、1101_3(LBU_3)、1101_4(LBU_4)分别向蒙板处理器1102_1、1102_2、1102_3、1102_4进行馈送,蒙板处理器1102_1、1102_2、1102_3、1102_4分别执行内核K1、K2、K3和K4。蒙板处理器1102_1、1102_2、1102_3、1102_4还分别馈送线缓冲器单元1101_2(LBU_2)、1101_3(LBU_3)、1101_4(LBU_4)、1101_5(LBU_5)。

图11c示出了实质上并行地执行两个流水线(K1-K3-...)和(K2-K4-...)的另一流水线方法。该配置可以用于通过并行执行来加速流水线(例如,内核K1和K2相同,并且内核K3和K4相同),或者根据图像数据场境使用两个不同的流水线(例如,一个流水线处理一种信道,另一流水线处理另一种信道)。

在图11b、图11b和图11c的每一个中,注意,需要对连接网络1004/1104进行不同配置,来以适当的方式将蒙板处理器连接到源和信宿(sink)线组。

在各种实施例中,图像处理器包括适当的配置空间(例如,利用配置寄存器和/或随机存取存储器(诸如标量处理器的标量存储器)来实现),其中,保持配置信息以实现各种配置的任何一个(例如,DAG、图像处理流水线)。一些示例性配置参数包括:1)源图像的数目(从例如相机或较大的计算机系统的主存储器流送到系统中的源图像帧的数目);2)线组的数目(配置在系统中的线缓冲器单元内的线组总数);

3)活动蒙板处理器的数目(系统中活动蒙板处理器的总数);4)每个蒙板处理器的输入线组的数目(一个蒙板处理器可以处理多于1个的输入图像帧,Num_Input_LGs_perStencil实质上指示蒙板处理器将处理多少不同的输入图像帧);5)每个蒙板处理器的输出线组的数目(一个蒙板处理器可以处理多于1个的输出图像帧,Num_Output_LGs_perStencil实质上指示蒙板处理器将处理多少不同的输出图像帧);6)每个线组的消费者的数目(对于在每个线缓冲器单元中配置的每个线组,Num_Cons_per_LG指示线组有多少消费者)。基于上述系统的特征、结构或操作中的任何一个,系统可以接受其他类型的配置信息。

有必要指出,上述各种图像处理器架构特征不一定限于传统意义上的图像处理,并且因此可以应用于可以(或可以不)使得图像处理器被重新表征的其他应用。例如,如果上述各种图像处理器架构特征中的任何一个被用于创建和/或生成和/或呈现动画,而不是实际相机图像的处理,图像处理器可以被表征为图形处理单元。此外,上述图像处理器架构特征可以应用于其他技术应用,诸如视频处理、视觉处理、图像识别和/或机器学习。以这种方式应用,图像处理器可以(例如作为协处理器)与更通用的处理器(例如,其是计算系统的CPU或计算系统的CPU的一部分)集成,或者可以是计算系统内的独立处理器。

上述硬件设计实施例可以在半导体芯片内实施和/或实现为用于最终针对半导体制造工艺的电路设计的描述。在后者的情况下,这种电路描述可以采取更高/行为级电路描述(例如,VHDL描述)或低级电路描述(例如,寄存器传输级(RTL)电路描述、晶体管级描述或掩码描述)或其各种组合的形式。电路描述通常在计算机可读存储介质(诸如CD-ROM或其他类型的存储技术)上实现。

从前面的部分可认识到,如上所述的图像处理器可以在计算机系统上的硬件中实现(例如,作为处理来自手持设备的相机的数据的手持设备的片上系统(SOC)的一部分)。在图像处理器被实现为硬件电路的情况下,注意,可以直接从相机接收由图像处理器处理的图像数据。这里,图像处理器可以是分立的相机的一部分或者是具有集成相机的计算系统的一部分。在后者的情况下,可以从相机或从计算系统的系统存储器直接接收图像数据(例如,相机将其图像数据发送到系统存储器而不是图像处理器)。还注意,前面部分中所描述的许多特征可以适用于图形处理器单元(渲染动画)。

图12提供了计算系统的示例性描述。以下所描述的计算系统的许多组件适用于具有集成相机和关联的图像处理器的计算系统(例如,手持设备,诸如智能电话或平板计算机)。普通技术人员将能够容易地区分两者。

如图12所示,基本计算系统可以包括中央处理单元1201(其可以包括例如多个通用处理核心1215_1至1215_N、以及设置在多核心处理器或应用处理器上的主存储器控制器1217)、系统存储器1202、显示器1203(例如,触摸屏、平板)、本地有线点对点链路(例如,USB)接口1204、各种网络I/O功能1205(诸如以太网接口和/或蜂窝调制解调器子系统)、无线局域网(例如WiFi)接口1206、无线点对点链路(例如,蓝牙)接口1207和全球定位系统接口1208、各种传感器1209_1到1209_N、一个或多个相机1210、电池1211、电源管理控制单元1212、扬声器和麦克风1213以及音频编码器/解码器1214。

应用处理器或多核处理器1250可以包括在其CPU 1201内的一个或多个通用处理核心1215、一个或多个图形处理单元1216、存储器管理功能1217(例如,存储器控制器)、I/O控制功能1218和图像处理单元1219。通用处理核心1215通常执行计算系统的操作系统和应用软件。图形处理单元1216通常执行图形密集功能,以例如生成在显示器1203上呈现的图形信息。存储器控制功能1217与系统存储器1202对接以向系统存储器1202写入数据/从系统存储器1202读取数据。电源管理控制单元1212通常控制系统1200的功耗。

图像处理单元1219可根据以上在前部分中详细描述的任何图像处理单元实施例来实现。可替代地或组合地,IPU 1219可耦合到GPU1216和CPU1201中的任一者或两者作为其协处理器。此外,在各种实施例中,GPU 1216可实现为具有以上详细描述的任意图像处理器特征。

触摸屏显示器1203、通信接口1204-1207、GPS接口1208、传感器1209、相机1210和扬声器/麦克风编码解码器1213、1214中的每一个可以被视为相对于整个计算系统的各种形式的I/O(例如,输入和/或输出),在适当的情况下,该整个计算系统也包括集成的外围设备(例如,一个或多个相机1210)。根据实现,这些I/O组件中的各种I/O组件可以被集成在应用处理器/多核处理器1150上,或者可以位于芯片外部或应用处理器/多核处理器1250的封装外部。

在实施例中,一个或多个相机1210包括能够测量相机与其视场中的对象之间的深度的深度相机。在应用处理器或其他处理器的通用CPU核心(或具有指令执行流水线以执行程序代码的其他功能块)上执行的应用软件、操作系统软件、设备驱动器软件和/或固件可以执行上述任何功能。

本发明的实施例可以包括如上所述的各种过程。该过程可以以机器可执行指令实现。该指令可用于使通用或专用处理器执行某些过程。替代地,这些过程可由包含用于执行过程的硬接线和/或可编程逻辑的特定硬件组件或者由编程的计算机组件和定制硬件组件的任何组合来执行。

本发明的元件还可提供为用于存储机器可执行指令的机器可读介质。该机器可读介质可包括但不限于软盘、光盘、CD-ROM和磁光盘、FLASH存储器、ROM、RAM、EPROM、EEPROM、磁卡或光卡、传播媒体或适合于存储电子指令的其他类型媒体/机器可读介质。例如,本发明可作为计算机程序被下载,该计算机程序可通过在载波或其他传播介质中体现的数据信号经由通信链路(例如,调制解调器或网络连接)从远程计算机(例如,服务器)传送到请求计算机(例如,客户端)。

在上述说明书中,已参照本发明的具体示例性实施例描述了本发明。然而,将显而易见的是,在不脱离如所附权利要求中阐述的本发明的更广泛的精神和范围的情况下,可以对其进行各种修改和改变。因此,说明书和附图被认为是说明性的而不是限制性的。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号