买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】用于图像处理器的编译器管理存储器_谷歌有限责任公司_201710107518.9 

申请/专利权人:谷歌有限责任公司

申请日:2017-02-27

公开(公告)日:2021-01-12

公开(公告)号:CN107133908B

主分类号:G06T1/20(20060101)

分类号:G06T1/20(20060101);G06T1/60(20060101);G06F9/38(20060101)

优先权:["20160226 US 62/300,671","20170208 US 15/427,374"]

专利状态码:有效-授权

法律状态:2021.01.12#授权;2018.03.06#著录事项变更;2017.09.29#实质审查的生效;2017.09.05#公开

摘要:描述了一种方法。该方法包括反复地将下一片图像数据从存储器的第一位置加载到二维移位寄存器阵列中。存储器本地耦合到二维移位寄存器阵列和执行通道阵列,该执行通道阵列沿着至少一个阵列轴具有比二维移位寄存器阵列更小的尺寸。加载的下一片图像数据保持在二维移位寄存器阵列的图像区域内。该方法还包括通过沿着执行通道阵列的各个通道执行程序代码指令来反复地为下一片图像数据确定输出值,其中,在确定输出值时使用的模版大小只涵盖存在于二维移位寄存器阵列内的像素。该方法还包括反复地把要被完全加载到二维移位寄存器阵列中的下一片图像数据从存储器的第二位置移动到存储器的第一位置。

主权项:1.存储指令的一种或多种非暂时性机器可读存储介质,所述指令在由一个或多个计算机执行时可操作以使得所述一个或多个计算机执行操作,所述操作包括:接收指定由图像处理器对输入图像数据执行的变换操作的输入内核程序,其中,所述输入图像数据包括多片的图像数据,并且其中,所述图像处理器包括:执行通道阵列,二维移位寄存器阵列,所述二维移位寄存器阵列包括主区域和所述主区域之外的光晕区域,其中,所述二维移位寄存器阵列的所述主区域中的每个移位寄存器专用于所述执行通道阵列中的相应执行通道,以及耦合到所述二维移位寄存器阵列的本地存储器,其中,所述图像处理器被配置为输出具有等于所述二维移位寄存器阵列的所述主区域的大小的大小的多片的图像数据;基于所述输入内核程序的所述变换操作,确定第一片的图像数据中的位置处的输出像素值至少部分取决于不同的第二片的图像数据中的一个或多个输入像素值;以及作为响应,生成包括指令的输出内核程序,所述指令包括:一个或多个第一指令,其在由所述图像处理器执行时使得所述图像处理器将所述第一片的图像数据和所述第二片的图像数据加载到所述本地存储器中,一个或多个第二指令,其在由所述图像处理器执行时使得所述图像处理器将来自所述本地存储器的所述第一片的图像数据加载到所述二维移位寄存器阵列的所述主区域中,以及一个或多个第三指令,其在由所述图像处理器执行时使得所述图像处理器将所述第二片的图像数据的一部分加载到所述二维移位寄存器阵列的在所述二维移位寄存器阵列的所述主区域之外的光晕区域中,其中,所述输出内核程序在由所述图像处理器执行时使得所述图像处理器使用加载到所述二维移位寄存器阵列的所述主区域中的所述第一片的图像数据和加载到所述二维移位寄存器阵列的所述光晕区域中的所述第二片的图像数据的所述一部分来确定所述第一片的图像数据中的位置处的输出像素值。

全文数据:用于图像处理器的编译器管理存储器[0001]相关案件[0002]本申请要求2016年2月26日递交的美国临时申请62300,671号“COMPILERMANAGEDMEMORYFORIMAGEPROCESSOR”的优先权,该申请被通过引用全部并入。技术领域[0003]本发明的技术领域概括而言涉及图像处理,更具体而言涉及用于图像处理器的编译器管理存储器。背景技术[0004]图像处理通常涉及对被组织成阵列的像素值的处理。这里,空间上组织的二维阵列捕捉图像的二维性质额外的维度可包括时间(例如,二维图像的序列)和数据类型(例如,颜色)。在典型场景中,阵列式像素值由生成了静止图像或者生成了帧的序列来捕捉运动的图像的相机提供。传统的图像处理器通常落在两个极端的其中之一上。[0005]第一个极端将图像处理任务作为在通用处理器或类通用处理器(例如,具有向量指令增强的通用处理器上执行的软件程序来执行。虽然第一极端通常提供高度多功能的应用软件开发平台,但其对更细粒度的数据结构的使用与关联的开销例如,指令取得和解码、芯片上和芯片外数据的处理、推测执行相结合最终导致在程序代码的执行期间每数据单位消耗更大量的能量。[0006]第二个相反的极端将固定功能硬连线电路应用到大得多的数据块。对直接应用到定制设计电路的更大的(而不是更细粒度的数据块的使用大幅降低了每数据单位的功率消耗。然而,对定制设计的固定功能电路的使用一般导致处理器能够执行的有限任务集合。这样,在第二极端中缺乏与第一极端相关联的广泛多功能的编程环境。[0007]提供高度多功能的应用软件开发机会与每数据单位的改善的功率效率两者相结合的技术平台仍然是一种合乎需要但却缺失的解决方案。发明内容[0008]描述了一种方法。该方法包括反复地将下一片图像数据从存储器的第一位置加载到二维移位寄存器阵列中。存储器本地耦合到二维移位寄存器阵列和执行通道阵列,该执行通道阵列沿着至少一个阵列轴具有比二维移位寄存器阵列更小的尺寸。加载的下一片图像数据保持在二维移位寄存器阵列的图像区域内。该方法还包括通过沿着执行通道阵列的各个通道执行程序代码指令来反复地为下一片图像数据确定输出值,其中,在确定输出值时使用的模版大小只涵盖存在于二维移位寄存器阵列内的像素。该方法还包括反复地把要被完全加载到二维移位寄存器阵列中的下一片图像数据从存储器的第二位置移动到存储器的第一位置。附图说明[0009]以下描述和附图用于例示本发明的实施例。在附图中:[0010]图1示出了图像处理器硬件体系结构的实施例;[0011]图23、21^、2:、21和26描绘了将图像数据解析成线群,将线群解析成片以及在具有重叠模版stencil的片上执行的操作;[0012]图3a示出了模版处理器的实施例;[0013]图3b示出了模版处理器的指令字的实施例;[0014]图4示出了模版处理器内的数据计算单元的实施例;[0015]图58、513、53、51、56、5;1^、58、511、5;[、5」和51^描绘了使用二维移位寄存器阵列和执行通道阵列来确定具有重叠模版的一对相邻输出像素值的示例;_[0016]图6示出了用于集成的执行通道阵列和二维移位寄存器阵列的单位单元的实施例;[0017]图7a-7c涉及用于图像处理器数据计算单元的编译器管理存储器访问方案;[0018]图8示出了用于图像处理器的存储器访问方法;[0019]图9a和9b涉及用于生成存储器地址的指令;[0020]图10涉及另一种编译器管理存储器访问方案;[0021]图11示出了计算系统的实施例。具体实施方式[0022]a.图像处理器硬件体系结构和操作[0023]图1示出了用硬件实现的图像处理器的体系结构100的实施例。图像处理器例如可作为如下编译器的目标:该编译器将在仿真环境内对于虚拟处理器编写的程序代码转换成被硬件处理器实际执行的程序代码。如图1中所示,体系结构100包括多个线缓冲器单元101_1至101_M,它们通过网络1〇4例如芯片上网络networkonchip,N0C,包括芯片上交换机网络、芯片上环形网络或其他种类的网络互连到多个模版处理器单元102j至102_N和相应的片生成器单元1〇3_1至l〇3_N。在一实施例中,任何线缓冲器单元可通过网络104连接到任何片生成器和相应的模版处理器。[0024]在一实施例中,程序代码被编码并加载到相应的模版处理器102上以执行早前由软件开发者定义的图像处理操作程序代码也可被加载到模版处理器的关联片生成器103上,这例如取决于设计和实现)。在至少一些实例中,图像处理流水线可通过将用于第一流水线阶段的第一内核程序加载到第一模版处理器1〇2_1中,将用于第二流水线阶段的第二内核程序加载到第二模版处理器1〇2_2中等等来实现,其中第一内核执行流水线的第一阶段的功能,第二内核执行流水线的第二阶段的功能等等,并且额外的控制流方法被安装来把来自流水线的一个阶段的输出图像数据传递到流水线的下一阶段。[0025]在其他配置中,图像处理器可实现为具有操作相同内核程序代码的两个或更多个模版处理器1〇2_1、1〇2_2的并行机。例如,高密度且高数据率的图像数据的流可通过将帧分散在多个模版处理器上被处理,其中每个模版处理器执行相同的功能。[0026]在另外的其他配置中,通过以各自的程序代码内核配置各个模版处理器并且将适当的控制流挂钩hook配置到硬件中以将输出图像从一个内核指引到DAG设计中的下一内核的输入,实质上可将内核的任何DAG加载到硬件处理器上。[0027]作为一般流程,图像数据的帧被宏IO单元105接收并且被逐帧传递到线缓冲器单元101中的一个或多个。特定的线缓冲器单元将其图像数据帧解析成被称为“线群”(linegroup的图像数据的更小区域,然后通过网络104将线群传递到特定的片生成器。完整或“完全”的单一线群可例如用帧的多个连续完整行或列的数据来组成为了简单,本说明书主要谈及连续的行)。片生成器进一步将图像数据的线群解析成被称为“片”(sheet的图像区域的更小区域,并且将片呈送给其相应的模版处理器。[0028]在具有单个输入的图像处理流水线或DAG流程的情况下,一般而言,输入帧被指引到同一线缓冲器单元101_1,该线缓冲器单元1011将图像数据解析成线群并且将线群指引到片生成器1〇3_1,片生成器1〇3_1的相应模版处理器10L1正执行流水线DAG中的第一内核的代码。在模版处理器1〇2_1对其处理的线群的操作完成时,片生成器103j将输出线群发送到“下游”线缓冲器单元1〇1_2在一些用例中,输出线群可被发送回到早前发送了输入线群的那同一个线缓冲器单元1〇1_1。[0029]表示在其各自的其他片生成器和模版处理器例如,片生成器103_2和模版处理器1〇2_2上执行的流水线DAG中的下一阶段操作的一个或多个“消费者”内核随后从下游线缓冲器单元1〇1_2接收由第一模版处理器102j生成的图像数据。以这种方式,在第一模版处理器上操作的“生产者”内核使其输出数据被转发到在第二模版处理器上操作的“消费者”内核,其中消费者内核执行与整体流水线或DAG的设计相符合的生产者内核之后的下一组任务。[0030]模版处理器102被设计为同时在图像数据的多个重叠模版上操作。多个重叠模版和模版处理器的内部硬件处理能力有效地确定了片的大小。这里,在模版处理器102内,执行通道的阵列一致地操作以同时处理被多个重叠模版覆盖的图像数据表面区域。[0031]如下文将更详细描述的,在各种实施例中,图像数据的片被加载到模版处理器1〇2内的二维寄存器阵列结构中。对于片和二维寄存器阵列结构的使用被认为通过将大量的数据作为例如单个加载操作移动到大量的寄存器空间中,并且在此之后立即由执行通道阵列直接在数据上执行处理任务,从而有效地提供了功率消耗改善。此外,对执行通道阵列和相应寄存器阵列的使用提供了容易可编程可配置的不同模版大小。[0032]图2a至2e以高级别图示了线缓冲器单元101的解析活动、片生成器单元1〇3的更细粒度解析活动以及耦合到片生成器单元103的模版处理器102的模版处理活动的实施例。[0033]图2a描绘了图像数据201的输入帧的实施例。图2a还描绘了模版处理器被设计为在其上操作的三个重叠模版202各自具有3像素X3像素的尺寸)的概况。每个模版分别为其生成输出图像数据的输出像素以实心黑突出。为了简单,三个重叠模版202被描绘为仅在垂直方向上重叠。认识到以下这点是恰当的:实际上模版处理器可被设计为在垂直方向和水平方向上都具有重叠模版。[0034]因为模版处理器内的垂直重叠模版202,如图2a中所示,所以在单个模版处理器可在其上操作的帧内存在宽带的图像数据。如下文将更详细论述的,在一实施例中,模版处理器在图像数据上以从左到右的方式处理其重叠模版内的数据然后对于下一组线按从上到下的顺序重复)。从而,随着模版处理器继续推进其操作,实心黑输出像素块的数目将向右水平增长。如上所述,线缓冲器单元101负责从传入帧中解析出足够模版处理器在较大数目的即将到来的周期中在其上操作的输入图像数据的线群。线群的示范性描绘被图示为阴影区域2〇3。在一实施例中,线缓冲器单元101可理解用于向片生成器发送从片生成器接收线群的不同动态。例如,根据一种被称为“全群”的模式,在线缓冲器单元和片生成器之间传递图像数据的完整的全宽度线。根据被称为“虚拟高”的第二模式,最初以全宽度行的子集传递线群。剩余的行随后被以更小小于全宽度的片段顺序传递。[0035]在输入图像数据的线群203己由线缓冲器单元定义并被传递到片生成器单元的情况下,片生成器单元将线群进一步解析成更精确适应于模版处理器的硬件限制的更精细片。更具体而言,如下文将进一步更详细描述的,在一实施例中,每个模版处理器由二维移位寄存器阵列构成。二维移位寄存器阵列实质上在执行通道的阵列“下方”对图像数据移位,其中移位的模式使得每个执行通道对其自己的相应模版内的数据进行操作也就是说,每个执行通道处理其自己的信息模版以生成关于该模版的输出)。在一实施例中,片是输入图像数据的“填充”或以其他方式被加载到二维移位寄存器阵列中的表面区域。[0036]如下文将更详细描述的,在各种实施例中,实际上存在能够在任何周期上移动的多层二维寄存器数据。为了方便,本说明书大多将简单地使用术语“二维移位寄存器”之类的来指代具有这样的一层或多层能够被移位的二维寄存器数据的结构。[0037]从而,如图2b中所示,片生成器从线群203解析初始片204并且将其提供给模版处理器这里,数据的片对应于由标号204总体标识的阴影区域)。如图2c和2d中所示,模版处理器通过在片上以从左到右的方式有效地移动重叠模版202来对输入图像数据的片进行操作。从图2d起,能够从片内的数据为其计算输出值的像素的数目耗尽了(没有其他像素位置能够具有从该片内的信息确定的输出值。为了简单,忽略了图像的边界区域。[0038]如图2e中所示,片生成器随后提供下一片205以供模版处理器继续对其进行操作。注意,在其开始下一片上的操作时模版的初始位置是从第一片上的耗尽点起向右的下一次前进如先前在图2d中所示)。对于新的片205,随着模版处理器以与第一片的处理相同的方式对新的片进行操作,模版将简单地继续向右移动。[0039]注意,由于围绕输出像素位置的模版的边界区域,在第一片204的数据和第二片205的数据之间有某些重叠。该重叠可简单地通过片生成器将重叠的数据重发送两次来应对。在替换实现方式中,为了将下一片馈送到模版处理器,片生成器可继续只将新的数据发送到模版处理器并且模版处理器再使用来自先前片的重叠数据。[0040]b.模版处理器设计和操作[0041]图3a示出了模版处理器体系结构300的实施例。如图3a中所示,模版处理器包括数据计算单元301、标量处理器302和关联存储器303以及IO单元304。数据计算单元301包括执行通道的阵列305、二维移位阵列结构306和与阵列的特定行或列相关联的单独的随机访问存储器307。[0042]IO单元304负责把从片生成器接收的“输入”数据片加载到数据计算单元3〇1中并且把来自模版处理器的“输出”数据片存储到片生成器中。在一实施例中,将片数据加载到数据计算单元301中要求将接收到的片解析成图像数据的行列并且将图像数据的行列加载到二维移位寄存器结构306中或者执行通道阵列的行列的各个随机访问存储器307中下文更详细描述)。如果片最初被加载到存储器307中,则执行通道阵列305内的个体执行通道随后可在适当时(例如,作为恰在片的数据上的操作之前的加载指令将片数据从随机访问存储器307加载到二维移位寄存器结构3〇6中。一旦完成将数据片加载到寄存器结构3〇6不论是直接从片生成器还是从存储器307,执行通道阵列305的执行通道就对数据进行操作并且最终将完成的数据作为一片直接“写回”到片生成器或者随机访问存储器307中。如果后来IO单元304从随机访问存储器307取得数据以形成输出片,则其随后被转发到片生成器。[0043]标量处理器302包括程序控制器309,其从标量存储器303读取模版处理器的程序代码的指令并且将这些指令发出到执行通道阵列305中的执行通道。在一实施例中,单个同一指令被广播到阵列305内的所有执行通道以实现来自数据计算单元301的类SIMD行为。在一实施例中,从标量存储器303读取并发出到执行通道阵列305的执行通道的指令的指令格式包括超长指令字very-long-instruction_word,VLIW型格式,该格式对于每个指令包括多于一个操作码。在另一实施例中,VLIW格式既包括指引由每个执行通道的ALU执行的数学函数的ALU操作码如下所述其在一实施例中可指定多于一个传统ALU操作),也包括存储器操作码其对于特定的执行通道或执行通道的集合指引存储器操作)。[0044]术语“执行通道”指的是能够执行指令的一个或多个执行单元的集合例如,可执行指令的逻辑电路)。然而,不仅只是执行单元,执行通道在各种实施例中还可包括更多类处理器功能。例如,除了一个或多个执行单元以外,执行通道还可包括对接收到的指令解码的逻辑电路,或者在更类似MMD的设计中包括取得并解码指令的逻辑电路。对于类MMD的方案,虽然本文大多描述了集中式程序控制方案,但在各种替换实施例中可实现更分布式的方案例如,在阵列305的每个执行通道内包括程序代码和程序控制器。[0045]执行通道阵列305、程序控制器309和二维移位寄存器结构306的组合对于宽范围的可编程功能提供了广泛可接受可配置的硬件平台。例如,应用软件开发者能够编程出具有宽范围的不同功能能力以及尺寸例如,模版大小的内核,只要个体执行通道能够执行各种各样的功能并且能够容易地访问临近任何输出阵列位置的输入图像数据。[0046]除了为被执行通道阵列305所操作的图像数据充当数据存储以外,随机访问存储器307还可保存一个或多个查找表。在各种实施例中,在标量存储器303内也可实例化一个或多个标量查找表。[0047]标量查找涉及将来自同一查找表的同一索引的同一数据值传递到执行通道阵列305内的每个执行通道。在各种实施例中,上文描述的VLIW指令格式被扩展到也包括把由标量处理器执行的查找操作指引到标量查找表中的标量操作码。被指定用于该操作码的索引可以是立即操作数或者是从某个其他数据存储位置取得的。不论如何,在一实施例中,来自标量存储器内的标量查找表的查找实质上涉及在同一时钟周期期间将同一数据值广播到执行通道阵列305内的所有执行通道。关于查找表的使用和操作的额外细节在下文进一步提供。[0048]图3b总结了上文论述的(一个或多个VLIW指令字实施例。如图3b中所示,VLIW指令字格式包括用于三个单独指令的字段:1由标量处理器执行的标量指令351;2被广播并由执行通道阵列内的各个ALU以SIMD方式执行的ALU指令352;以及3被广播并以部分SMD方式执行的存储器指令353例如,如果沿着执行通道阵列中的同一行的执行通道共享相同的随机访问存储器,则来自不同行中的每一行的一个执行通道实际上执行该指令存储器指令353的格式可包括识别来自每一行的哪个执行通道执行该指令的操作数)。[0049]还包括用于一个或多个立即操作数的字段354。指令351、352、353中的哪个使用哪个立即操作数信息可在指令格式中识别。指令351、352、353的每一者还包括其各自的输入操作数和结果信息例如,用于ALU操作的本地寄存器以及用于存储器访问指令的本地寄存器和存储器地址)。在一实施例中,在执行通道阵列内的执行通道执行其他两个指令352、353的任一者之前,标量指令351被标量处理器执行。也就是说,VLIW字的执行包括第一周期,此时标量指令351被执行,其后是第二周期,此时其他指令352、353可被执行注意在各种实施例中指令352和353可被并行执行)。[0050]在一实施例中,被标量处理器执行的标量指令包括被发出到片生成器以从数据计算单元的存储器或2D移位寄存器加载片向其存储片的命令。这里,片生成器的操作可取决于线缓冲器单元的操作或者阻止对片生成器完成由标量处理器发出的任何命令将会花费的周期数的运行时前理解的其他变量。这样,在一实施例中,其标量指令351对应于或以其他方式使得命令被发出到片生成器的任何VLIW字也包括其他两个指令字段352、353中的无操作no-operation,N00P指令。程序代码随后对于指令字段352、353进入NOOP指令的循环,直到片生成器完成其向从数据计算单元的加载存储为止。这里,在向片生成器发出命令时,标量处理器可设置互锁寄存器的某个比特,片生成器在完成该命令时重置该比特。在N00P循环期间,标量处理器监视互锁比特的该比特。当标量处理器检测到片生成器已完成其命令时,正常执行再次开始。[0051]图4示出了数据计算组件401的实施例。如图4中所示,数据计算组件401包括逻辑上定位在二维移位寄存器阵列结构406“上方”的执行通道的阵列405。如上所述,在各种实施例中,由片生成器提供的图像数据的片被加载到二维移位寄存器406中。执行通道随后对来自寄存器结构406的片数据进行操作。[0052]执行通道阵列405和移位寄存器结构406相对于彼此位置固定。然而,移位寄存器阵列406内的数据以有策略且协调的方式移位以使得执行通道阵列中的每个执行通道处理数据内的不同模版。这样,每个执行通道对于正生成的输出片中的不同像素确定输出图像值。从图4的体系结构应当清楚,重叠模版不仅被垂直布置,而且也被水平布置,因为执行通道阵列405包括垂直相邻执行通道以及水平相邻执行通道。[0053]数据计算组件401的一些值得注意的体系结构特征包括移位寄存器结构406具有比执行通道阵列4〇5更宽的尺寸。也就是说,在执行通道阵列405之外存在寄存器的“光晕”409。虽然光晕409被示为存在于执行通道阵列的两侧,但取决于实现方式,光晕可存在于执行通道阵列405的更少侧一侧或更多侧三侧或四侧)。光晕405起到如下作用:当数据在执行通道40f5“下方”移动时,为溢出执行通道阵列405的界限之外的数据提供“溢出”空间。作为一个简单实例,以执行通道阵列4〇5的右边缘为中心的5X5模版在该模版的最左像素被处理时将需要更靠右的四个光晕寄存器位置。为了易于描绘,图4将光晕的右侧的寄存器示为只具有水平移位连接并且将光晕的底侧的寄存器示为只具有垂直移位连接,而当在标称实施例中时,任一侧右侧、底侧的寄存器将具有水平连接和垂直连接两者。[0054]额外的溢出空间由耦合到阵列中的每一行和或每一列的随机访问存储器4〇7或者其一部分提供例如,随机访问存储器可被指派到执行通道阵列的在行方面跨越4个执行通道并且在列方面跨越2个执行通道的“区域”。为了简单,本申请的剩余部分将主要谈及基于行和或列的分配方案)。这里,如果执行通道的内核操作要求其处理二维移位寄存器阵列4〇6外的像素值这是某些图像处理例程可能要求的),则图像数据的平面能够进一步溢出,例如从光晕区域409溢出到随机访问存储器407中。例如,考虑一个6X6模版,其中硬件包括在执行通道阵列的右边缘上的执行通道右侧的仅四个存储元素的光晕区域。在此情况下,数据将需要在光晕4〇9的右边缘外被进一步向右移位以完全处理该模版。被移位到光晕区域409之外的数据随后将溢出到随机访问存储器407。随机访问存储器407和图3a的模版处理器的其他应用在下文中进一步提供。[0055]图5a至5k展示了如上文提到的图像数据在执行通道阵列“下方”在二维移位寄存器阵列内被移位的方式的工作示例。如图5a中所示,二维移位阵列的数据内容在第一阵列507中描绘并且执行通道阵列由帧505描绘。另外,执行通道阵列内的两个相邻执行通道510被简化描绘。在这个简化描绘510中,每个执行通道包括寄存器R1,该寄存器R1可接受来自移位寄存器的数据,接受来自ALU输出的数据例如,表现为跨周期的累积器或者将输出数据写入到输出目的地中。[0056]每个执行通道在逻辑寄存器R2中还具有二维移位阵列中在其“下方”的内容可用。从而,R1是执行通道的物理寄存器,而R2是二维移位寄存器阵列的物理寄存器。执行通道包括可在由R1和或R2提供的操作数上操作的ALU。如下文将进一步更详细描述的,在一实施例中,移位寄存器实际上是以每阵列位置多个存储寄存器元素存储寄存器元素的“深度”)实现的,但移位活动限于一个平面的存储元素例如,在每周期中只有一个平面的存储元素可移位)。图5a至f5k描绘了这些更深的寄存器位置之一被用于存储来自各个执行通道的结果X。为了易于例示,更深的结果寄存器是并排描绘的,而不是描绘在其对应寄存器R2的下方。[0057]图f5a至5k关注于其中心位置与在执行通道阵列内描绘的执行通道位置对511对齐的两个模版的计算。为了易于例示,该对执行通道510被描绘为水平邻居,而实际上根据以下示例,它们是垂直邻居。[0058]如图5a中最初所示,执行通道以其中心模版位置为中心。图5b示出了两个执行通道所执行的目标代码。如图5b中所示,两个执行通道的程序代码使得移位寄存器阵列内的数据向下移位一个位置并且向右移位一个位置。这将两个执行通道都对齐到其各自的模版的左上角。程序代码随后使得在R2中)位于其各自位置的数据被加载到R1中。[0059]如图5c中所示,程序代码接下来使得该对执行通道将移位寄存器阵列内的数据向左移位一个单位,这使得每个执行通道的各自位置的右侧的值被移位到每个执行通道的位置中。R1中的值先前值随后被与移位到了执行通道的R2中的)位置的新值相加。结果被写入到R1中。如图5d中所示,与上文对于图5c所述相同的过程被重复,这使得结果R1现在在上方执行通道中包括值A+B+C并且在下方执行通道中包括F+G+H。此时,两个执行通道都处理了其各自的模版上方行。注意去到执行通道阵列的左侧的光晕区域中(如果在左手侧存在光晕区域的话或者去到随机访问存储器中(如果在执行通道阵列的左手侧不存在光晕区域的话的溢出。[0060]如图5e中所示,程序代码接下来使得移位寄存器阵列内的数据向上移位一个单位,这使得两个执行通道都与其各自的模版的中间行的右边缘对齐。两个执行通道的寄存器R1当前包括模版的顶部行和中间行的最右值的加和。图5f和5g表现了在两个执行通道的模版的中间行上向左移动的继续进展。累加继续,使得在图5g的处理结束时,两个执行通道都包括其各自的模版的顶部行和中间行的值的加和。[0061]图5h示出了另一个移位来使每个执行通道与其相应的模版的最下行对齐。图5i和5j示出了在两个执行通道的模版的路线上完成处理的继续移位。图5k示出了额外的移位来使每个执行通道与其在数据阵列中的正确位置对齐并且向其写入结果。[0062]在图5a-5k的示例中,注意用于移位操作的目标代码可包括识别以X,Y坐标表述的移位的方向和幅值的指令格式。例如,用于向上移位一个位置的目标代码在目标代码中可被表述为SHIFT0,+1。作为另一示例,向右移位一个位置在目标代码中可被表述为SHIFT+1,〇。在各种实施例中,在目标代码中也可指定更大幅值的移位例如,SHIFT0,+2。这里,如果2D移位寄存器硬件只支持每周期一个位置的移位,则指令可被机器解释来要求多个周期执行,或者2D移位寄存器硬件可被设计为支持每周期多于一个位置的移位。后者的实施例在下文进一步更详细描述。[0063]图6示出了阵列执行通道和移位寄存器结构的单位单元的另一个更详细描绘光晕区域中的寄存器不包括相应的执行通道)。执行通道和与执行通道阵列中的每个位置相关联的寄存器空间在一实施例中是通过在执行通道阵列的每个节点处实例化图6中所示的电路来实现的。如图6中所示,单位单元包括执行通道601,其耦合到由四个寄存器R2至R5构成的寄存器文件602。在任何周期期间,执行通道601可从寄存器R1至R5的任何一者读取或向其写入。对于要求两个输入操作数的指令,执行通道可从寄存器R1至R5的任何一者取回这两个操作数。[0064]在一实施例中,二维移位寄存器结构是通过如下方式实现的:在单个周期期间允许寄存器R2至R4的任意仅一者的内容被通过输出复用器603移“出”到其邻居的寄存器文件之一,并且让寄存器R2至R4的任意仅一者的内容被通过输入复用器604从其邻居的相应一者移“入”的内容所替换,从而邻居之间的移位是在相同方向上的例如,所有执行通道向左移位,所有执行通道向右移位,等等)。虽然同一寄存器在同一周期上让其内容被移出并且被移入的内容所替换可能是常见的,但复用器布置603、604允许了同一周期期间的同一寄存器文件内的不同移位源和移位目标寄存器。[0065]如图6中所示,注意在移位序列期间,执行通道将把内容从其寄存器文件602移出到其左、右、上、下邻居的每一者。结合同一移位序列,执行通道也将把内容从其左、右、上、下邻居的特定一者移入到其寄存器文件中。再一次,移出目标和移入源对于所有执行通道应当符合同一移位方向(例如,如果移出是向右侧邻居,则移入应当是从左侧邻居)。[0066]虽然在一个实施例中,在每个周期中对于每个执行通道允许移位仅一个寄存器的内容,但其他实施例可允许多于一个寄存器的内容被移入移出。例如,如果在图6中所示的复用器电路603、604的第二实例被包含到图6的设计中,则在同一周期期间可移出移入两个寄存器的内容。当然,在每个周期只允许移位仅一个寄存器的内容的实施例中,通过对于数学操作之间的移位消耗更多时钟周期,从多个寄存器移位可在数学操作之间发生例如,通过在数学操作之间消耗两个移位操作可在数学操作之间移位两个寄存器的内容)。[0067]如果在移位序列期间执行通道的寄存器文件的非全部内容被移出,则注意每个执行通道的没有移出的寄存器的内容保持在原地不移位)。这样,没有被移入的内容替换的任何没有移位的内容在移位周期之间对于执行通道保持本地。在每个执行通道中观察到的存储器单元(“M”)被用于从与执行通道阵列内的执行通道的行和或列相关联的随机访问存储器空间加载数据向其存储数据。这里,M单元充当标准M单元,因为其经常用于加载存储不能从向执行通道自己的寄存器空间加载存储的数据。在各种实施例中,M单元的主要操作是把数据从本地寄存器写入到存储器中,并且从存储器读取数据并将其写入到本地寄存器。[0068]对于硬件执行通道601的ALU单元支持的ISA操作码,在各种实施例中,硬件ALU支持的数学操作码与虚拟执行通道支持的数学操作码ADD、SUB、MOV、MUL、MAD、ABS、DIV、SHL、SHR、MINMAX、SEL、AND、0R、X0R、N0T—体捆绑例如,基本相同)。如上文刚刚描述的,存储器访问指令可被执行通道601执行来从其关联的随机访问存储器取得向其存储数据。此外,硬件执行通道601支持移位运算指令右、左、上、下)以对二维移位寄存器结构内的数据移位。如上所述,程序控制指令主要由模版处理器的标量处理器执行。[0069]c•编译器管理模版处理器存储器[0070]返回参考图4,回想起寄存器409的光晕区域的存在,其在图4的特定实施例中驻留在执行通道阵列405的右边缘和下边缘周围(其他实施例可在执行通道阵列的更多或更少侧包括光晕区域)。在先前的论述中,“片”被理解为是消耗了具有执行通道阵列405的尺寸的内部移位寄存器空间的图像信息的阵列。这里,在各种实施例中,光晕4〇9中的寄存器位置不包括用于在图像数据上执行图像处理指令的关联ALU单元,相反,光晕4〇9区域存在来例如累积来自执行通道阵列区域内的移位活动的“溢出”数据。这样,可处理的图像数据的区域对应于区域405并且“片”被理解为与区域4〇5延及相同范围。将片加载到寄存器阵列406中包括将图像数据加载到区域405中。[0071]编译器负责将如下指令插入到程序代码中:这些指令实质上控制将信息片从片生成器加载到模版处理器的数据计算单元401的内部RAM407或者将信息片从该内部RAM407加载到片生成器。这样,在各种实施例中,编译器负责确定哪些片要被从片生成器加载到RAM407中以及何时加载这样的片。此外,编译器负责确定模版处理器RAM407中的哪个片要被加载到二维移位阵列406中。注意,RAM407可被分解成单独的存储体,其中每个存储体被指派了相对于移位寄存器阵列的特定图像区域例如,RAM存储体407j为移位寄存器阵列的第一行保存图像区域,RAM存储体407_2为移位寄存器阵列的第二行保存图像数据,等等。[0072]这里,应当尽可能避免将同一片数据从片生成器“重加载”到RAM407中和或将同一片数据从RAM407重加载到二维移位寄存器406中,以例如最小化图像处理器的功率消耗。如下面即将更详细说明的,即使图像数据的基本单位被认为是与执行通道阵列405的更小区域相对应的数据片,如果编译器认识到光晕区域409的存在,则也可避免效率低下。避免的效率低下在图像处理算法对于执行通道阵列405内的任何输出像素处理延伸到光晕外部的数据时尤其显著。[0073]图7a-7c示出了基本示例。如图7a中所示,一片输入图像数据对应于更大的输入图像的区域7〇1。图7a_7c为了简单假定输入片与执行通道阵列具有相同尺寸。虽然这种布置可能经常是方便的,但其并非必要的。例如,在输入表面的分辨率不同于输出表面的情况下例如,来自于上采样或下采样),片可具有与执行通道阵列不同的尺寸。例如,在具有16XI6的执行通道阵列的处理器中,2x下采样的输入片可具有尺寸32X32,而2x上采样的输入片可具有尺寸8X8。[0074]如果输入图像被认为不仅包括片701,而且包括可装入光晕区域中的周围图像数据,则输入图像数据的总量可消耗阴影区域720。在为片701内的像素确定输出像素值时,至少一些算法可被设计为在光晕区域外例如在更大的区域730上处理输入图像数据。[0075]例如,如果执行通道阵列405的尺寸是16像素位置乘16像素位置并且光晕区域的大小是沿着X轴的额外4像素位置和沿着Y轴的4像素位置,则片701将具有尺寸16像素位置乘16像素位置并且区域720将具有尺寸20像素位置乘20像素位置。如果为片701内的像素确定输出像素值的算法在尺寸18像素乘18像素的模版上处理,则对于片701需要处理的表面区域将从区域720向外扩展到包括边界730内的区域。这里,例如,为了适应对于片701的右下侧角落处的像素位置的处理,将需要由边界730限定的区域的右下角中的像素。从而,对片701的处理要求来自片702、703和704的大量数据。[0076]在一实施例中,编译器被设计为理解输入图像内的多个片的布局、执行通道阵列的尺寸、光晕的尺寸和对于执行通道阵列区域内的特定输出像素要处理的模版的大小。编译器随后进而将存储器加载指令插入到代码中的适当位置处,这些指令将下一片信息从片生成器加载到数据计算单元_407中。[0077]此外,如下文将进一步更详细描述的,编译器还插入数据移动指令来移动数据计算单元的随机访问存储器407内的数据片以增强其再利用并从而减少将同一片数据从片生成器重复加载到随机访问存储器407中。[0078]图7b示出了由编译器构造来使得片生成器最初用足够数目的片加载随机访问存储器407以对第一片位置701的每个像素位置完全执行该算法的指令740的序列。如图7b中所示,来自四个片701至7〇4的数据被加载并且被指派逻辑片标识符LSheet_0,Lsheet_l,LSheet_2,LSheet_3。这里,如果考虑包括光晕区域409在内的整个移位寄存器阵列406,则加载的片的数目对应于图像处理算法到达其中的片的数目。从对图3a和3b的论述回想起在各种实施例中与标量处理器302相关联的程序控制器3〇9执行与对片生成器向从数据计算单元301加载存储数据片的命令相对应的指令。这样,指令740可由标量处理器302执行。[0079]编译器还构造后续指令750、760以用来自刚才被加载到RAM中的四个片的内容加载移位寄存器阵列406MEMLOAD。指令750用LSheet_0的内容(图像区域701的内容填充populate与执行通道阵列405延及相同范围的移位寄存器区域。类似地,与上文论述一致,标量处理器3〇2也可执行指令750、76〇。[0080]指令760填充光晕区域。也就是说,指令750执行以下事项:1将片702Lsheet_l的左手侧LHS加载到紧挨执行通道阵列405的右边缘外侧存在的光晕409的区域中;2将片704Lsheet_3的上方区域UPR加载到紧挨执行通道阵列405的下边缘下方存在的光晕409的区域中;3将片705Lsheet_4的左上角加载到执行通道阵列4〇5的右下角外侧的光晕区域中。在执行这些加载之后,包括光晕区域(图7a中的区域720在内的整个移位寄存器阵列的内容都被加载以适当定位的输入图像数据。[0081]这里,参考图4,注意每个执行通道阵列位置包含用于执行存储器加载指令MEMLOAD来从随机访问存储器407取得图像数据的存储器访问单元M。虽然在图4中没有示出,但在各种实施例中,光晕区域409中的每个位置也包括存储器访问单元,从而图像数据值可被从随机访问存储器4〇7加载到光晕区域409中。然而,再一次,在各种实施例中,光晕区域位置不包含ALU单元,从而实际图像处理仍然限于执行通道阵列4〇5内的图像数据。从而,指令750对应于在每个执行通道阵列位置处被单独执行但基于其在阵列中的位置而具有不同操作数数据这定义了要加载的图像数据)的存储器加载指令,同时,类似地,MEMLOAD指令760对应于在光晕区域409内的特定位置处被单独执行但基于其在执行通道阵列周围的位置而具有不同输入操作数数据这定义了要加载的图像数据的存储器加载指令。用于为这些指令指定地址的技术在下文进一步更详细描述。[0082]编译器还构造接下来的指令集770来执行为LSheet_0位置内的像素位置确定输出像素值的(一个或多个)图像处理算法。与上文论述一致,这些计算包括在模版区域上对于通过对二维移位寄存器阵列内的内容移位而实现的每个像素位置进行操作。编译器因此构造不仅用于在模版上执行数学计算而且用于执行相应寄存器移位指令的指令。[0083]在当前论述的示例中,回想起对于LSheet_0内的任何像素位置要处理的模版的尺寸是18X18。这样,将有图像数据“溢出”执行通道阵列405的上侧和左侧之外进入随机访问存储器407中。也就是说,将数据向左移位将使得来自边界720所限定的区域之内但在边界701所限定的区域之外的片702LSheet_l和片703LSheet_2的数据被加载到光晕区域409的右边缘中。将数据加载到光晕区域409的右边缘中将有效地将“溢出”数据从执行通道阵列的左边缘和紧挨执行通道阵列405下方存在的光晕区域4〇9的左边缘推出移位寄存器。溢出推出的数据被写入到随机访问存储器407中。[0084]类似地,将数据“向上”移位将使得来自边界72〇所限定的区域之内但在执行通道区域之外的片704LSheet_3和片703LSheet_2的数据被加载到光晕区域409的下边缘中。将数据加载到光晕区域409的下边缘中将有效地将“溢出”数据从执行通道阵列409的上边缘和存在于执行通道区域405右侧的光晕区域的上边缘推出移位寄存器。溢出推出的数据也被写入到随机访问存储器407中。再一次,为了实现移位,编译器为新数据从RAM4〇7到移位寄存器中的所有加载和推出的数据从移位寄存器到RAM4〇7的写回构造代码。[0085]在对于片701LSheet_0执行了所有移位和计算770之后,该过程将以光栅状方式继续向右扫描(区域701的输出片也可被写入到随机访问存储器4〇7中以便转发到片生成器)。为了实现算法的光栅状扫描,只需要逻辑片的重指派,在此之后相同的程序代码可被重执行来为下一片的像素处理输出值。这样,在图像上以扫描状方式执行算法可被编译器构造为软件循环。这里,循环程序内的内部指针可随着循环的每次新迭代被更新。具体而言,当核心例程认识到其己到达对于当前递归要加载的数据的极“右”侧时,其类似地认识至|J下__•递归艮口将来临。[0086]这里,如图7c中所示,编译器构造额外的指令780的集合,这些指令780使机器为在光栅扫描中的下一片上执行算法做准备。这些指令包括将LSheet-1的内容移动M0V到LSheet_0中并且将LSheet_2的内容移动到LSheet—3中。此外,指令780包括将下一Lsheet—1片705和下一LSheet_2片706从片生成器加载到RAM407中的指令。在这些指令780被执行之后,机器的情境与在指令770执行前图7b中的机器的情境没有不同,只不过要处理的片的位置向右了一片(即,片7〇2而不是片701。重要的是,己经被加载到RAM407中的片(即,片702和703不被从片生成器重加载到RAM407中。这样,避免了如果将片702和703重加载到RAM407中将会导致的任何效率低下。[0087]注意,如指令780内的SG指令所指示将LSheet_l片705和LSheet_2片706从片生成器加载到RAM407中可例如在操作77〇期间执行,并且随后在此时纟-丨和汕的12的早前内容分别被移动到了LsheetJ和LSheet_3中之后在RAM内被移动到Sheet_l和Sheet_2。这样,指令780的SGLOAD指令实际上可实现为RAM407内的额外MOV指令。在一实施例中,指令780的移动(MOV指令是数据在RAM407内的实际物理移动。这样,在程序代码内指定的LSheet_0至LSheet_3的地址是固定地址。[0088]虽然以上联系图7a至7c概述的方法针对的是对于片701内的像素要处理的模版尺寸大到足以包括存在于光晕区域之外的像素的示例,但相信该方法对于如下应用是最优的:对于片701内(g卩,执行通道阵列内)的像素要处理的模版尺寸足够小以至于所有要处理的像素存在于光晕区域内(即,不需要在边界720外且在边界730内或者在更外边的像素)。在此情况下,避免了将额外的图像数据加载到二维移位寄存器中(例如,沿着光晕区域的右边缘),[0089]图8描绘了上文描述的方法。该方法包括重复801执行以下步骤。将下一片图像数据从存储器的第一位置加载到二维移位寄存器阵列中802。存储器本地耦合到二维移位寄存器阵列和执行通道阵列,该执行通道阵列沿着至少一个阵列轴具有比二维移位寄存器阵列更小的尺寸。加载的下一片图像数据保持在二维移位寄存器阵列的图像区域内。通过沿着执行通道阵列的各个通道执行程序代码指令来为下一片图像数据确定输出值,其中,在确定输出值时使用的模版大小只涵盖存在于二维移位寄存器阵列内的像素803。把要被完全加载到二维移位寄存器阵列中的下一片图像数据从存储器的第二位置移动到存储器的第一位置804。[0090]从先前论述回想到在指令750、760和770的执行期间,图像数据可被从RAM407加载到二维移位寄存器406中。这里,二维移位寄存器406包括光晕区域)中的每个个体位置被假定为包括存储器访问单元,用于本地执行存储器加载指令以使得数据可被从RAM407个体加载到其本地寄存器空间中。在一实施例中,编译器对于RAM407中的LSheet_0固定基本地址分量并且被编译器识别来执行循环的额外逻辑片(例如,LSheet_l、LSheet_2和LSheet_3的地址相对于基本地址分量具有偏移量。例如,如果RAM4〇7中对于LSheet_0的地址是[base],则对于LSheet_l的地址是[base]+1,对于LSheet_2的地址是[base]+2,并且对于LSheet_3的地址是[base]+3。[0091]为了支持广泛可编程环境,执行通道阵列中和光晕区域中的执行单元的指令集体系结构支持为特定移位寄存器阵列位置生成正确偏移量的指令。该偏移量随后可用来例如生成正确的地址。这里,指出以下这点是恰当的:图7a至7c的示例在片尺寸与执行通道阵列尺寸相同这个意义上是简化的。也就是说,片和执行通道阵列两者都具有I6像素位置Xie像素位置的尺寸。[0092]其他实施例可选择具有例如在任一维度或两个维度上大于或小于执行通道阵列的片大小。在前一种情况下,例如LSheet_0将扩展到光晕区域中,而在后一种情况下,例如LSheetj和或LSheet_3最初将在执行通道阵列405的尺寸内加载。为了简单,图9a和%的论述将参考简化情况,其中片尺寸与执行通道阵列的尺寸相同。然而,正如将更清楚阐明的,指令的一般操作可用于尺寸不同的实施例。[0093]图9a实质上示出了图7a的描绘的放大,其中包括其光晕区域在内的二维移位寄存器阵列的全尺寸作为阴影区域被观察。图%示出了在每个阵列位置处执行的特殊指令QUADRANT的结果。这里,对于每个移位寄存器阵列位置,QUADRANT指令计算在将内容从RAM407加载到特定移位阵列位置中时要添加到基本存储器地址的正确偏移量。[0094]在图9b的特定示例中,在片尺寸与执行通道阵列尺寸相同的情况下,与执行通道阵列区域相关联的所有阵列位置将加载具有偏移量〇的LSheet_0。与之不同,紧挨执行通道阵列右侧的光晕区域中的阵列位置将从具有偏移量+1的LSheet_l加载,紧挨执行通道阵列下方的光晕区域中的阵列位置将从具有偏移量+3的LSheet_3加载,并且执行通道阵列角落外的光晕区域中的阵列位置将从具有偏移量+2的LSheet_2加载。[0095]在一实施例中,指令接受片Xs,Ys的X和Y尺寸以及指定阵列位置的位置Xa,Ya的X和Y坐标作为输入参数。利用这些值,QUADRANT指令可计算偏移量为:[0096]偏移量=[0097]0,如果Xa〈XsANDYa〈Ys=TRUE[0098]1,如果XaXsANDYaXsANDYaYs=TRUE[0100]3,如果Xa〈XsANDYaYs=TRUE[0101]在各种实施例中,编译器生成实质上识别将读取坐标对的阵列位置的Xa,Ya坐标对的阵列,并且将Xs和Ys指定为立即操作数,因为它们在QUADRANT指令的所有执行中是恒定的。Xa和Ya坐标对在指令执行前作为输入操作数信息被加载到各个阵列位置中。在另一实施例中,指令额外接受[base]地址值作为输入操作数,从而[base]+偏移量的完全地址值可被提供作为QUADRANT指令的结果。[base]操作数可被指定为立即操作数或者程序代码可被构造为动态地确定[base]值并且将其作为额外的输入操作数广播到阵列位置。[0102]注意,QUADRANT指令对于确定输出像素值的算法将在四个片中的像素值上操作的操作环境是特别的。对于例如算法将在九个片上操作的操作环境,另一指令HECTANT可被内置到指令集体系结构中,其计算对于任何特定阵列位置要使用九个不同偏移量中的哪一个。。[0103]图10示出了上文联系图7a至7c描述的光栅扫描处理方案的替换实施例的描绘。在图10的方案中,如果扫描是向右的,则光晕区域的右侧最初不被加载。反而,只有紧挨执行通道下方的光晕部分被加载。在算法的操作期间,如果到了从LSheet_l需要新值以例如实现向左移位的程度,则沿着执行通道阵列的右边缘而不是沿着光晕的右边缘加载值。图10的方案在算法不在光晕区域之外操作的情况中尤其有用并且将有效地产生具有更少加载指令的代码。[0104]d.实现实施例[0105]指出以下这点是恰当的:上文描述的各种图像处理器体系结构特征不一定限于传统意义上的图像处理,并且因此可被应用到可引起或者可不引起)图像处理器被重表征的其他应用。例如,如果上文描述的各种图像处理器体系结构特征的任何一者要被用于动画的创建和或生成和或渲染,而不是实际相机图像的处理,则图像处理器可被表征为图形处理单元。此外,上文描述的图像处理器体系结构特征可被应用到其他技术应用,例如视频处理、视觉处理、图像识别和或机器学习。在以这种方式应用的情况下,图像处理器可与更通用的处理器例如,其是计算系统的CPU或者CPU的一部分集成例如,作为其协处理器),或者可以是计算系统内的独立处理器。[0106]上文论述的硬件设计实施例可实现在半导体芯片内和或实现为电路设计的描述以最终瞄准半导体制造工艺。在后一种情况下,这种电路描述可采取(例如,VHDL或Verilog寄存器传送级registertransferlevel,RTL电路描述、门级电路描述、晶体管级电路描述或掩模描述或者其各种组合的形式。电路描述通常实现在计算机可读存储介质上例如,CD-ROM或其他类型的存储技术。[0107]从前述部分,认识到以下这点是恰当的:如上所述的图像处理器可以用硬件实现在计算机系统上(例如,实现为手持设备的处理来自手持设备的相机的数据的片上系统SystemonChip,S0C的一部分)。在图像处理器被实现为硬件电路的情况下,注意可直接从相机接收被图像处理器处理的图像数据。这里,图像处理器可以是分立相机的一部分,或者具有集成相机的计算系统的一部分。在后一种情况下,可直接从相机或者从计算系统的系统存储器(例如,相机将其图像数据发送到系统存储器而不是图像处理器接收图像数据。还要注意,前述部分中描述的许多特征可应用到渲染动画的)图形处理器单元。[0108]图11提供了计算系统的示范性描绘。下文描述的计算系统的许多组件可应用到具有集成的相机和关联的图像处理器的计算系统例如,诸如智能电话或平板计算机之类的手持设备)。本领域普通技术人员将能够容易在两者之间划界。[0109]如图11中所示,基本计算系统可包括中央处理单元1101其可包括例如多个通用处理核1115_L至1115_N和布置在多核处理器或应用处理器上的主存储器控制器1117、系统存储器1102、显示器1103例如,触摸屏、平板)、本地有线点对点链路(例如,USB接口1104、各种网络IO功能1105例如以太网接口和或蜂窝调制解调器子系统)、无线局域网例如,WiFi接口1106、无线点对点链路例如,蓝牙接口1107和全球定位系统接口1108.、各种传感器1109j至1109_N、一个或多个相机1110、电池1114、电力管理控制单元1112、扬声器和麦克风1113以及音频编码器解码器1114。[0110]应用处理器或多核处理器1150可包括其CPU1101内的一个或多个通用处理核1115、一个或多个图形处理单元1116、存储器管理功能1117例如,存储器控制器)、1〇控制功能1118和图像处理单元1119。通用处理核1115通常执行计算系统的操作系统和应用软件。图形处理单元1116通常执行图形密集功能以例如生成在显示器1103上呈现的图形信息。存储器控制功能1117与系统存储器1102接口以向系统存储器1102写入从系统存储器11〇2读取数据。电力管理控制单元1112总体控制系统1100的电力消耗。[0111]图像处理单元1119可根据以上在前述部分中详细描述的图像处理单元实施例的任何一者来实现。作为替换或组合,IPU1119可耦合到GPU1116和CPU1101的任一者或两者作为其协处理器。此外,在各种实施例中,GPU1116可以用上文详细描述的图像处理器特征的任何一者来实现。[0112]触摸屏显示器1103、通信接口1104-1107、GPS接口1108、传感器1109、相机1110和扬声器麦克风编解码器1113U114的每一者相对于在适当时也包括集成外围设备例如,一个或多个相机1110的整体计算系统全都可被视为各种形式的10输入和或输出)。取决于实现方式,这些IO组件中的各种IO组件可被集成在应用处理器多核处理器1150上或者可位于应用处理器多核处理器1150的管芯外或封装外。[0113]在一实施例中,一个或多个相机1110包括能够测量该相机与其视野中的物体之间的深度的深度相机。在应用处理器或其他处理器的通用CPU核或者具有指令执行流水线来执行程序代码的其他功能块上执行的应用软件、操作系统软件、设备驱动器软件和或固件可执行上文描述的任何功能。[0114]本发明的实施例可包括如上所述的各种过程。这些过程可以用机器可执行指令来实现。这些指令可用于使得通用或专用处理器执行特定过程。或者,这些过程可由包含用于执行这些过程的硬连线逻辑的特定硬件组件执行,或者由编程的计算机组件和定制硬件组件的任何组合执行。[0115]本发明的元素也可作为用于存储机器可执行指令的机器可读介质来提供。机器可读介质可包括但不限于适用于存储电子指令的软盘、光盘、CD-ROM和磁光盘、闪存、ROM、1^13?1?01!3£?1?011、磁卡或光卡、传播媒体或者其他类型的媒体机器可读介质。例如,本发明可作为计算机程序被下载,该计算机程序可经由通信链路(例如,调制解调器或网络连接通过实现在载波或其他传播介质中的数据信号被从远程计算机例如,服务器传送到请求方计算机例如,客户端)。[0116]在前述说明书中,已经参考本发明的具体示范性实施例描述了本发明。然而,很明显,在不脱离如所附权利要求所记载的本发明的更宽精神和范围的情况下,可对其进行各种修改和改变。说明书和附图因此应被认为是例示性的,而不是限制性的。

权利要求:1.一种图像处理器,包括:存储器,其耦合到二维移位寄存器阵列,所述存储器将下一片图像数据保持在第一位置中;二维移位寄存器阵列,其耦合到所述存储器,所述下一片图像数据要被从所述存储器中的第一位置加载到所述二维移位寄存器阵列中,加载的下一片图像数据保持在所述二维移位寄存器阵列的图像区域内;执行通道阵列,其沿着至少一个阵列轴具有比所述二维移位寄存器阵列更小的尺寸,所述执行通道阵列沿着所述执行通道阵列的各个通道为所述下一片图像数据确定输出值,其中,在确定所述输出值时使用的模版大小只涵盖存在于所述二维移位寄存器阵列内的像素;所述图像处理器反复地把要被完全加载到所述二维移位寄存器阵列中的下一片图像数据从所述存储器的第二位置移动到所述存储器的第一位置,从而使得所述执行通道阵列能够反复地为图像数据片的序列确定输出值。2.如权利要求1所述的图像处理器,其中,所述图像处理器是包括多个通用处理核的片上系统的组件。3.如权利要求1所述的图像处理器,其中,所述执行通道阵列沿着两个阵列轴具有比所述二维移位寄存器阵列更小的尺寸。4.如权利要求1所述的图像处理器,其中,所述图像处理器反复地将具有与所述下一片的图像内容相邻的图像内容的下一相邻片的图像数据加载到所述二维移位寄存器阵列的外围寄存器位置中。5.如权利要求4所述的图像处理器,其中,所述图像处理器反复地从所述存储器的第三位置读取所述下一相邻片的图像数据。6.如权利要求4所述的图像处理器,其中,所述下一相邻片的图像数据也是要被完全加载到所述二维移位寄存器阵列中的所述下一片图像数据并且所述第二存储器位置和第三存储器位置是相同的存储器位置。7.如权利要求1所述的图像处理器,其中,所述图像处理器反复地将具有所述下一片的图像内容的角落之外的图像内容的下一角落片的图像数据加载到所述二维移位寄存器阵列的角落寄存器位置中。8.—种方法,包括:反复执行以下步骤:将下一片图像数据从存储器的第一位置加载到二维移位寄存器阵列中,所述存储器本地耦合到所述二维移位寄存器阵列和沿着至少一个阵列轴具有比所述二维移位寄存器阵列更小的尺寸的执行通道阵列,加载的下一片图像数据保持在所述二维移位寄存器阵列的图像区域内;通过沿着所述执行通道阵列的各个通道执行程序代码指令来为所述下一片图像数据确定输出值,其中,在确定所述输出值时使用的模版大小只涵盖存在于所述二维移位寄存器阵列内的像素;把要被完全加载到所述二维移位寄存器阵列中的下一片图像数据从所述存储器的第二位置移动到所述存储器的第一位置。9.如权利要求8所述的方法,其中,所述执行通道阵列和二维移位寄存器阵列是图像处理器的组件,所述图像处理器是包括多个通用处理核的片上系统的组件。10.如权利要求8所述的方法,其中,所述执行通道阵列沿着两个阵列轴具有比所述二维移位寄存器阵列更小的尺寸。11.如权利要求8所述的方法,其中,所述方法还包括反复地将具有与所述下一片的图像内容相邻的图像内容的下一相邻片的图像数据加载到所述二维移位寄存器阵列的外围寄存器位置中。12.如权利要求11所述的方法,其中,所述方法还包括反复地从所述存储器的第三位置读取所述下一相邻片的图像数据。13.如权利要求11所述的方法,其中,所述下一相邻片的图像数据也是要被完全加载到所述二维移位寄存器阵列中的所述下一片图像数据,并且所述第二存储器位置和第三存储器位置是相同的存储器位置。14.如权利要求8所述的方法,其中,所述方法还包括反复地将具有所述下一片的图像内容的角落之外的图像内容的下一角落片的图像数据加载到所述二维移位寄存器阵列的角落寄存器位置中。15.—种计算系统,包括:a多个通用处理核;b系统存储器;c耦合在所述系统存储器和所述多个处理核之间的存储器控制器;d图像处理器,包括:存储器,其耦合到二维移位寄存器阵列,所述存储器将下一片图像数据保持在第一位置中;二维移位寄存器阵列,其耦合到所述存储器,所述下一片图像数据要被从所述存储器中的第一位置加载到所述二维移位寄存器阵列中,加载的下一片图像数据保持在所述二维移位寄存器阵列的图像区域内;执行通道阵列,其沿着至少一个阵列轴具有比所述二维移位寄存器阵列更小的尺寸,所述执行通道阵列沿着所述执行通道阵列的各个通道为所述下一片图像数据确定输出值,其中,在确定所述输出值时使用的模版大小只涵盖存在于所述二维移位寄存器阵列内的像素;所述图像处理器反复地把要被完全加载到所述二维移位寄存器阵列中的下一片图像数据从所述存储器的第二位置移动到所述存储器的第一位置,从而使得所述执行通道阵列能够反复地为图像数据片的序列确定输出值。16.如权利要求15所述的计算系统,其中,所述执行通道阵列沿着两个阵列轴具有比所述二维移位寄存器阵列更小的尺寸。17.如权利要求15所述的计算系统,其中,所述图像处理器反复地将具有与所述下一片的图像内容相邻的图像内容的下一相邻片的图像数据加载到所述二维移位寄存器阵列的外围寄存器位置中。18.如权利要求17所述的计算系统,其中,所述图像处理器反复地从所述存储器的第三位置读取所述下一相邻片的图像数据。19.如权利要求17所述的计算系统,其中,所述下一相邻片的图像数据也是要被完全加载到所述二维移位寄存器阵列中的所述下一片图像数据,并且所述第二存储器位置和第三存储器位置是相同的存储器位置。20.如权利要求I5所述的计算系统,其中,所述图像处理器反复地将具有所述下一片的图像内容的角落之外的图像内容的下一角落片的图像数据加载到所述二维移位寄存器阵列的角落寄存器位置中。

百度查询: 谷歌有限责任公司 用于图像处理器的编译器管理存储器

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。