CN110192220B - 提高图像处理器运行时效率的程序代码转换 - Google Patents

提高图像处理器运行时效率的程序代码转换 Download PDF

Info

Publication number
CN110192220B
CN110192220B CN201880007442.5A CN201880007442A CN110192220B CN 110192220 B CN110192220 B CN 110192220B CN 201880007442 A CN201880007442 A CN 201880007442A CN 110192220 B CN110192220 B CN 110192220B
Authority
CN
China
Prior art keywords
line buffer
data
processor
image
cores
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
Application number
CN201880007442.5A
Other languages
English (en)
Other versions
CN110192220A (zh
Inventor
朴贤哲
阿尔伯特·迈克斯纳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of CN110192220A publication Critical patent/CN110192220A/zh
Application granted granted Critical
Publication of CN110192220B publication Critical patent/CN110192220B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Processing (AREA)
  • Advance Control (AREA)

Abstract

描述了一种方法。该方法包括构建图像处理软件数据流,其中,缓冲器存储和转发从生产内核传输到一个或多个消费内核的图像数据。该方法还包括辨识缓冲器没有足够的资源来存储和转发图像数据。该方法还包括修改图像处理软件数据流以包括多个缓冲器,所述多个缓冲器在将图像数据从生产内核传输到一个或多个消费内核期间存储和转发图像数据。

Description

提高图像处理器运行时效率的程序代码转换
技术领域
本发明的领域大体涉及图像处理,更具体涉及用于提高图像处理器运行时效率的程序代码转换。
背景技术
图像处理通常涉及处理组织成阵列的像素值。这里,以空间方式组织的二维阵列捕获图像的二维性质(附加维度可以包括时间(例如,二维图像序列)和数据类型(例如,颜色)。在典型情形中,阵列排列的像素值是由相机提供,该相机生成静止图像或帧序列以捕获运动的图像。传统的图像处理器通常落在两个极端的一侧。
第一极端执行图像处理任务,作为在通用处理器或类通用处理器(例如,具有向量指令增强的通用处理器)上执行的软件程序。虽然第一个极端通常提供了一个高度多功能的应用软件开发平台,但它使用更细粒度的数据结构结合相关联的开销(例如,指令获取和解码,处置片上和片外数据,前瞻性执行)最终导致在执行程序代码期间,每数据单位消耗的能量更大。
第二个相反的极端将固定功能硬连线电路应用于更大的数据部件。使用直接应用于定制设计电路的较大(与更细粒度相对)数据部件大大降低每数据部件的功耗。然而,使用定制设计的固定功能电路通常会导致处理器能够执行的有限任务集。因此,在第二极端中缺乏广泛多功能的编程环境(与第一极端相关联)。
提供高度多功能的应用软件开发机会结合提高每数据单位的功率效率的技术平台仍然是一种理想但缺失的方案。
发明内容
描述了一种方法。该方法包括构建图像处理软件数据流,其中,缓冲器存储和转发从生产内核传输到一个或多个消费内核的图像数据。该方法还包括:辨识缓冲器没有足够的资源来存储和转发图像数据。该方法还包括:修改图像处理软件数据流以包括多个缓冲器,所述多个缓冲器在将图像数据从生产内核传输到一个或多个消费内核期间存储和转发图像数据。
附图说明
以下描述和附图用于说明本发明的实施例。在附图中:
图1示出了图像处理器硬件架构的实施例;
图2a、2b、2c、2d和2e描绘了将图像数据解析成线组、将线组解析成片以及在具有重叠模板的片上执行的操作;
图3a示出模板处理器的实施例。
图3b示出模板处理器的指令字的实施例。
图4示出模板处理器内的数据计算部件的实施例。
图5a、5b、5c、5d、5e、5f、5g、5h、5i、5j和5k描绘了使用二维移位阵列和执行通道阵列来确定具有重叠模板的一对相邻输出像素值的示例;
图6示出了用于集成执行通道阵列和二维移位阵列的部件单元的实施例;
图7a和7b涉及第一程序代码转换;
图8a、8b和8c涉及第二程序代码转换;
图9a和9b涉及第三程序代码转换;
图10a和10b涉及第四程序代码转换;
图11a和11b涉及第五程序代码转换;
图12涉及第六程序代码转换;
图13a和13b涉及第七程序代码转换;
图14涉及第八程序代码转换;
图15示出了程序代码转换方法;
图16涉及软件开发环境;
图17涉及计算系统。
具体实施方式
i.介绍
以下说明书描述了涉及新图像处理技术平台的许多实施例,该平台提供广泛多功能的应用软件开发环境,其使用较大的数据块(例如,如下面进一步描述的线组(linegroup)和片(sheet))以提供改进的电力效率。
1.0硬件架构实施例
a.图像处理器硬件架构和操作
图1示出了用于以硬件实现的图像处理器的架构100的实施例。例如,图像处理器可以由编译器作为目标,该编译器将为模拟环境内的虚拟处理器编写的程序代码转换为实际由硬件处理器执行的程序代码。如图1所示,架构100包括:通过网络104(例如,片上网络(NOC),其包括片上交换网、片上环网络或其他类型的网络)互连到多个模板处理器部件102_1到102_N(下文中,“模板处理器”、“模板处理器部件”、“图像处理核心”和“核心”等)和对应的片生成器部件103_1至103_N(下文中称为“片生成器”或“片生成器部件”等)的多个线缓冲器部件101_1到101_M(下文中称为“线缓冲器”、“线缓冲器部件”等)。在一个实施例中,任何线缓冲器部件可以通过网络104连接到任何片生成器和对应的模板处理器。
在一个实施例中,程序代码被编译并加载到对应的模板处理器102上以执行先前由软件开发者定义的图像处理操作(程序代码也可以例如根据设计和实施方式被加载到模板处理器的相关联的片生成器103上)。在至少一些实例中,可以通过将用于第一流水线级(pipeline stage)的第一内核程序加载到第一模板处理器102_1,将用于第二流水线级的第二内核程序加载到第二模板处理器102_2等来实现图像处理流水线,其中,第一内核执行流水线的第一级的功能,第二内核执行流水线的第二级的功能等,并且安装附加的控制流方法以将输出图像数据从流水线的一个级传递到流水线的下一级。
在其他配置中,图像处理器可以实现为具有操作相同的内核程序代码的两个或更多个模板处理器102_1、102_2的并行机器。例如,可以通过跨多个模板处理器分散帧来处理高密度和高数据速率的图像数据流,其中每个模板处理器执行相同的功能。
在其他配置中,基本上内核的任何DAG可以通过下述方式来加载到硬件处理器上:利用相应的模板处理器的相应的程序代码内核来配置相应的模板处理器,以及将适当的控制流挂钩(hook)配置到硬件中以将输出图像从一个内核引导到DAG设计中的下一个内核的输入。
作为一般流程,图像数据帧由宏I/O部件105接收,并逐帧地传递给线缓冲器部件101中的一个或多个。特定线缓冲器部件将其图像数据帧解析为较小的图像数据区域(称为“线组”),然后将线组通过网络104传递到特定的片生成器。完整的或“完全的”奇异线组可以例如由帧的多个毗连的完整行或列的数据组成(为了简洁起见,本说明书将主要指代毗连的行)。片生成器进一步将图像数据的线组解析为较小的图像数据区域(称为“片”),并将片呈现给其对应的模板处理器。
在图像处理流水线或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的设计一致在生产者内核之后执行下一组任务。这里,线缓冲器部件101_2存储和转发由生产者内核生成的图像数据来作为从生产者内核到消费者内核的图像数据传输的一部分。
模板处理器102被设计为同时对多个重叠的图像数据模板进行操作。模板处理器的多个重叠模板和内部硬件处理能力有效地确定了片的大小。这里,在模板处理器102内,执行通道阵列以一致方式操作以同时处理由多个重叠模板覆盖的图像数据表面区。
如下面将更详细描述的,在各个实施例中,图像数据片被加载到模板处理器102内的二维寄存器阵列结构中。对片和二维寄存器阵列结构的使用被认为会有效地通过下述方式来改善功耗:将大量数据移动到大量寄存器空间中,其例如作为单个加载操作,紧随其后是由执行通道阵列直接对数据执行的处理任务。另外,执行通道阵列和对应的寄存器阵列的使用提供了易于可编程/可配置的不同模板大小。
图2a到2e示出了线缓冲器部件101的解析活动、片生成器部件103的更细粒度解析活动以及耦合到片生成器部件103的模板处理器102的模板处理活动的高级实施例。
图2a描绘了图像数据201的输入帧的实施例。图2a还描绘了模板处理器被设计来在其上操作的三个重叠的模板202(每个模板具有3像素乘3像素的尺寸)的略图。以纯黑色突出显示每个模板相应生成其输出图像数据的输出像素。为简洁起见,三个重叠的模板202被描绘为仅在垂直方向上重叠。应理解,实际上模板处理器可以设计成在垂直和水平方向上二者都具有重叠的模板。
由于模板处理器内的垂直重叠模板202,如图2a所示,在帧内存在单个模板处理器可以操作的宽带图像数据。如下面将更详细讨论的,在一个实施例中,模板处理器跨图像数据以从左到右的方式处理它们的重叠模板内的数据(然后以从上到下的顺序对下一组线重复)。因此,随着模板处理器继续其操作,纯黑色输出像素块的数目将在水平方向上向右增长。如上所述,线缓冲器部件101负责解析来自传入帧的输入图像数据的线组,该传入帧足以供模板处理器在扩展数目的即将到来的周期上操作。线组的示例性描绘被示为阴影区域203。在一个实施例中,如下面进一步描述的,线缓冲器部件101可以理解用于向片生成器发送/从片生成器接收线组的不同动态(dynamic)。例如,根据被称为“全组(full group)”的一种模式,在线缓冲器部件和片生成器之间传递图像数据的完整全宽线。根据被称为“基本高(virtually tall)”的第二模式,线组最初是通过全宽行的子集来传递的。然后,将剩余的行依次以较小(小于全宽)的片段传递。
在输入图像数据的线组203已由线缓冲器部件定义并传递到片生成器部件的情况下,片生成器部件进一步将线组解析成更精确的片,这些片更精确地适合于模板处理器的硬件限制。更具体地,如下面将进一步详细描述的,在一个实施例中,每个模板处理器包含二维移位寄存器阵列。该二维移位寄存器阵列基本上将图像数据移位到执行通道阵列“下方”,其中,移位模式致使每个执行通道对其本身相应的模板内的数据进行操作(即,每个执行通道在其自己的信息模板上进行处理来生成该模板的输出)。在一个实施例中,片是输入图像数据的“填充”或以其他方式被加载入二维移位寄存器阵列的表面区。
因此,如图2b所示,片生成器从线组203解析初始片204并将其提供给模板处理器(这里,示例性数据片对应于通常由附图标记204标识的五乘五的阴影区域)。如图2c和2d所示,模板处理器通过在输入图像数据的片上以从左到右的方式有效地移动重叠的模板202来对该片进行操作。到图2d为止,可以从片内的数据计算其输出值的像素数目(在加深的3乘3阵列中的9个)完竭(没有其他像素位置可以具有根据片内的信息确定的输出值)。为简单起见,图像的边界区域已被忽略。
如图2e所示,片生成器然后为模板处理器提供下一个片205以继续操作。注意,模板在下一片上开始操作时的模板的初始位置是从第一片上的完竭点(如先前在图2d中所示)开始向右的下一累进。对于新的片205,随着模版处理器以与第一片的处理相同的方式对新片操作,模版将简单地继续向右移动。
注意,由于围绕输出像素位置的模板的边界区域,第一片204的数据与第二片205的数据之间存在一些重叠。可以通过片生成器两次重新传送重叠数据来简单地处置重叠。在替选实施方式中,为了将下一片馈送到模板处理器,片生成器可以继续仅向模板处理器发送新数据,并且模板处理器重新使用来自先前片的重叠数据。
b.模板处理器的设计和操作
图3a示出了模板处理器部件架构300的实施例。如图3a所示,模板处理器包括数据计算部件301、标量处理器302和相关联的存储器303以及I/O部件304。数据计算部件301包括执行通道阵列305、二维移位阵列结构306和与阵列的特定行或列相关联的单独的相应随机存取存储器307。
I/O部件304负责将从片生成器接收的数据的“输入”片加载到数据计算部件301中,并将来自模板处理器的数据的“输出”片存储到片生成器中。在一个实施例中,将片数据加载到数据计算部件301中需要将所接收的片解析为图像数据的行/列,并将图像数据的行/列加载到二维移位寄存器结构306或执行通道阵列的行/列的相应的随机存取存储器307中(下面更详细地描述)。如果片最初被加载到存储器307中,则执行通道阵列305内的个体执行通道然后可以在适当时将片数据从随机存取存储器307加载到二维移位寄存器结构306中(例如,作为紧接在对片的数据进行操作之前的加载指令)。在完成将数据片加载到寄存器结构306中(无论是直接来自片生成器还是来自存储器307)时,执行通道阵列305的执行通道对数据进行操作,并最终将完成的数据作为片直接“写回”回到片生成器或随机存取存储器307。如果执行通道写回到随机存取存储器307,则I/O部件304从随机存取存储器307中取出数据以形成输出片,然后将其转发到片生成器。
标量处理器302包括程序控制器309,程序控制器309从标量存储器303读取模板处理器的程序代码的指令,并将指令发布到执行通道阵列305中的执行通道。在一个实施例中,向阵列305内所有执行通道广播单个相同的指令,以实现来自数据计算部件301的类似单指令多数据(SIMD)的行为。在一个实施例中,从标量存储器303读取并发布到执行通道阵列305的执行通道的指令的指令格式包括非常长指令字(VLIW)类型格式,其包括每指令多于一个操作码。在另一实施例中,VLIW格式包括ALU操作码——其指导由每个执行通道的ALU执行的数学函数(如下所述,在一个实施例中其可以指定多于一个传统的ALU操作)和存储器操作码(其指导用于特定执行通道或执行通道集的存储器操作)二者。
术语“执行通道”指代能够执行指令的一个或多个执行部件的集合(例如,可以执行指令的逻辑电路)。然而,在各个实施例中,执行通道可以包括比执行部件范围更大的更多类似处理器的功能。例如,除了一个或多个执行部件之外,执行通道还可以包括:对接收到的指令进行解码的逻辑电路;或者在更多类似多指令多数据(MIMD)的设计的情况下,包括获取和解码指令的逻辑电路。关于类似MIMD的方法,尽管这里已经基本描述了集中式程序控制方法,但是可以在各个替选实施例中实现更分布式的方法(例如,包括阵列305的每个执行通道内的程序代码和程序控制器)。
执行通道阵列305、程序控制器309和二维移位寄存器结构306的组合为广泛范围的可编程功能提供了广泛的可适应/可配置的硬件平台。例如,考虑到个体执行通道能够执行各种各样的功能并且能够容易地访问接近任何输出阵列位置的输入图像数据,应用软件开发人员能够对具有范围广大的不同功能能力和尺寸(例如,模板大小)的内核进行编程。
除了用作由执行通道阵列305操作的图像数据的数据存储之外,随机存取存储器307还可以保持一个或多个查找表。在各个实施例中,还可以在标量存储器303内实例化一个或多个标量查找表。图像处理任务经常使用查找表来例如获得不同阵列位置的滤波器或转换系数,实现复杂函数(例如,伽马曲线、正弦、余弦),其中,查找表提供输入索引值的函数输出等。这里,期望SIMD图像处理序列经常在同一个时钟周期期间执行向相同的查找表的查找。类似地,一个或多个常量表可以存储在标量存储器303中。这里,例如,预期不同的执行通道可能在相同的时钟周期上需要相同的常量或其他值(例如,要对整个图像应用的特定乘数)。因此,对常量查找表的访问向每个执行通道返回相同的标量值。通常使用索引值来访问查找表。
标量查找涉及将具有相同索引的来自相同查找表的相同数据值传递到执行通道阵列305内的每个执行通道。在各个实施例中,上述VLIW指令格式被扩展为还包括标量操作码,其将标量处理器执行的查找操作指向标量查找表。指定与操作码一起使用的索引可以是立即操作数,或可以从某些其他数据存储位置获取。无论如何,在一个实施例中,从标量存储器内的标量查找表的查找基本上涉及在相同的时钟周期期间将相同的数据值广播到执行通道阵列305内的所有执行通道。下面进一步提供有关查找表的使用和操作的其他细节。
图3b概述了上面讨论的VLIW指令字实施例。如图3b所示,VLIW指令字格式包括用于下述三个单独指令的字段:1)由标量处理器执行的标量指令351;2)ALU指令352,其由执行通道阵列内的相应ALU以SIMD方式广播和执行;以及,3)以部分SIMD方式广播和执行的存储器指令353(例如,如果沿执行通道阵列中的同一行的执行通道共享相同的随机存取存储器,则每个不同行中的一个执行通道实际上执行指令(存储器指令353的格式可以包括标识每行中的哪个执行通道执行指令的操作数))。
还包括用于一个或多个立即操作数的字段354。可以以指令格式标识指令351、352、353中的哪一个使用哪个立即操作数信息。指令351、352、353中的每一个还包括其自己的相应输入操作数和结果信息(例如,用于ALU运算的本地寄存器和用于存储器存取指令的本地寄存器和存储器地址)。在一个实施例中,在执行通道阵列内的执行通道执行另外两个指令352、353中的任一者之前由标量处理器执行标量指令351。即,VLIW字的执行包括第一周期,在第一周期时执行标量指令351,该第一周期之后为第二周期,在该第二周期时可以执行其他指令352、353(注意,在各个实施例中,可以并行执行指令352和353)。
在一个实施例中,由标量处理器302执行的标量指令包括发布到片生成器103的、从数据计算部件301的存储器或2D移位寄存器306加载片/向其存储片的命令。这里,片生成器的操作可以取决于线缓冲器部件101的操作或其他变量,该其他变量阻碍对片生成器103完成由标量处理器302发布的任何命令所需的周期数目的预运行时理解。因此,在一个实施例中,其标量指令351对应于或以其他方式致使命令被发布至片生成器103的任何VLIW字还包括在其他两个指令字段352、353中的无操作(NOOP)指令。然后,程序代码进入指令字段352、353的NOOP指令的循环,直到片生成器完成其向数据计算部件的加载/从数据计算部件的存储。这里,在向片生成器发布命令时,标量处理器可以设置互锁寄存器的位,片生成器在完成命令时将该位重置。在NOOP循环期间,标量处理器监视互锁位的位。当标量处理器检测到片生成器已完成其命令时,正常执行再次开始。
图4示出了数据计算部件401的实施例。如图4所示,数据计算部件401包括执行通道405的阵列,其在逻辑上位于二维移位寄存器阵列结构406的“上方”。如上所述,在各个实施例中,由片生成器提供的图像数据的片被加载到二维移位寄存器406中。然后,执行通道对来自寄存器结构406的片数据进行操作。
执行通道阵列405和移位寄存器结构406相对于彼此在位置上固定。然而,移位寄存器阵列406内的数据以策略和协调的方式移位,以致使执行通道阵列中的每个执行通道处理数据内的不同模板。这样,每个执行通道确定正在生成的输出片中的不同像素的输出图像值。根据图4的架构,应当清楚,重叠的模板不仅垂直排列而且水平排列,因为执行通道阵列405包括垂直相邻的执行通道以及水平相邻的执行通道。
数据计算部件401的一些值得注意的架构特征包括移位寄存器结构406,其具有比执行通道阵列405更宽的尺寸。即,在执行通道阵列405外部存在寄存器409的“环带(halo)”。尽管环带409被示出为存在于执行通道阵列的两个侧上,但是根据实施方式,环带可以存在于执行通道阵列405的更少(一个)侧或更多(三个或四个)侧上。环带405用于针对这样的数据来提供“溢出(spill-over)”空间:该数据在执行通道405的“下方”移位时溢出到执行通道阵列405的边界之外。作为一个简单的情况,以执行通道阵列405的右边缘为中心的5×5模板在该模板最左边的像素被处理时将需要进一步向右的四个环带寄存器位置。为了便于绘图,图4将环带右侧的寄存器示出为仅具有水平移位连接,并且将环带底侧的寄存器示出为仅仅具有垂直移位连接,而在标称实施例中,在任一侧(右、底)的寄存器会同时具有水平和垂直连接。
由随机存取存储器407提供附加的溢出空间,所述随机存取存储器407耦合到阵列中的每行和/或每列或其中的部分(例如,随机存取存储器可被指派给行方向上跨4个执行通道和列方向上跨2个执行通道的执行通道阵列的“区域”。为了简单起见,本申请的其余部分将主要涉及基于行和/或列的分配方案)。这里,如果执行通道的内核操作要求它处理二维移位寄存器阵列406外部的像素值(一些图像处理例程可能需要),则图像数据平面能够进一步例如从环带区域409溢出到随机存取存储器407。例如,考虑6X6模板,其中,硬件包括在执行通道阵列的右边缘上的执行通道右侧的仅四个存储元件的环带区域。在这种情况下,数据会需要移位到环带区域409的右边缘外的更右方以完全处理该模板。然后,移位至环带区域409之外的数据将溢出到随机存取存储器407。下面进一步提供随机存取存储器407和图3的模板处理器的其他应用。
图5a至5k例示如上所述的,图像数据在执行通道阵列“下方”的二维移位寄存器阵列内移位的方式的工作示例。如图5a中所示,在第一阵列507中描绘二维移位阵列的数据内容,并且由框505描绘执行通道阵列。此外,简化描述在执行通道阵列内的两个相邻执行通道510。在该简化描述510中,每个执行通道包括寄存器R1,其可以接受来自移位寄存器的数据,接受来自ALU输出的数据(例如,以表现为跨周期的累加器),或者将输出数据写入输出目的地。
每个执行通道还可获取在二维移位阵列中在其“下方”的本地寄存器R2中的内容。因此,R1是执行通道的物理寄存器,而R2是二维移位寄存器阵列的物理寄存器。执行通道包括可以对R1和/或R2提供的操作数进行操作的ALU。如下面将进一步详细描述的,在一个实施例中,移位寄存器实际上是在每阵列位置利用多个(一定“深度(depth)”的)存储/寄存器元件实现的,但是移位活动限于一个存储元件平面(例如,每周期只有一个存储元件平面可以移位)。图5a到5k描绘了这些更深寄存器位置中的一个正被用于存储来自相应执行通道的结果X。为了便于说明,更深的结果寄存器被绘制在其对应寄存器R2旁边而不是在其对应寄存器R2之下。
图5a至5k聚焦在两个模板的计算,该两个模板的中心位置与执行通道阵列505内描绘的一对执行通道位置511对准。为了便于说明,执行通道对510被绘制为水平相邻者,而实际上根据以下示例,执行通道对510是垂直相邻者。
如最初在图5a中所示,执行通道511以它们的中心模板位置为中心。图5b示出了由两个执行通道511执行的目标代码。如图11b所示,两个执行通道511的程序代码致使移位寄存器阵列507内的数据向下移位一个位置并向右移位一个位置。这使两个执行通道511与它们相应的模板的左上角对准。然后,程序代码将使得(在R2中)位于其相应位置的数据加载到R1中。
如图5c中所示,程序代码接下来使得执行通道对511将移位寄存器阵列507内的数据向左移动一个单位,这使得每个执行通道的相应位置的右侧的值被移位到每个执行通道的位置。然后将R1中的值(先前值)与(在R2中)已移入执行通道位置的新值相加。结果写入R1。如图5d所示,重复与图5c的上述相同的过程,这使得结果R1现在包括上执行通道中的值A+B+C和下执行通道中的F+G+H。此时,两个执行通道511已经处理了它们相应的模板的上方的行。注意溢出到执行通道阵列505左侧的环带区域(如果有环带区域存在于左侧),或者如果执行通道阵列505的左侧不存在环带区域,则溢出到随机存取存储器。
如图5e所示,程序代码接着使得移位寄存器阵列内的数据向上移位一个单位,这使得两个执行通道511与它们相应的模板的中间行的右边缘对准。两个执行通道511的寄存器R1当前包括模板的顶行和中间行的最右边的值的总和。图5f和5g例示了跨两个执行通道的模板的中间行而向左移动的持续累进。累积相加继续,使得在图5g的处理结束时,两个执行通道511包括它们相应的模板的顶行和中间行的值的总和。
图5h示出了将每个执行通道与其对应的模板的最低行对准的另一移位。图5i和5j示出继续移位以在两个执行通道的模板的过程中完成处理。图5k示出了附加的移位以将每个执行通道与其在数据阵列中的正确位置对准并将结果写入其中。
在图5a-5k的示例中,注意用于移位操作的目标代码可以包括指令格式,该指令格式标识以(X、Y)坐标表达的移位的方向和大小。例如,用于向上移位一个位置的目标代码可以在目标代码中表达为SHIFT 0,+1。作为另一示例,向右移位一个位置可以在目标代码中表达为SHIFT+1,0。在各个实施例中,也可以在目标代码中指定更大幅度的移位(例如,SHIFT 0,+2)。这里,如果2D移位寄存器硬件仅支持每周期移位一个位置,则该指令可由机器解释为需要多个周期执行,或者,2D移位寄存器硬件可被设计为支持每周期移位多于一个位置。将在下面进一步详细描述后面的实施例。
图6示出了阵列执行通道和移位寄存器结构的部件单元的另一个更详细的描述(环带区域中的寄存器不包括对应的执行通道)。在一个实施例中,通过在执行通道阵列的每个节点处实例化图6中所示的电路来实现与执行通道阵列中的每个位置相关联的执行通道和寄存器空间。如图6所示,部件单元包括执行通道601,该执行通道601耦合到由四个寄存器R1至R4组成的寄存器堆(register file)602。在任何周期期间,执行通道601可以从寄存器R0至R4中的任何寄存器读取或向其写入。对于需要两个输入操作数的指令,执行通道可以从R0到R4中的任何寄存器检索该两个操作数。
在一个实施例中,二维移位寄存器结构是通过下述方式来实现的:在单个周期期间,允许寄存器R1至R3中的任何寄存器(仅一个寄存器)的内容通过输出多路复用器603移位“出”到其相邻者的寄存器堆之一,并且,通过输入多路复用器604使寄存器R1至R3中的任何寄存器(仅一个寄存器)的内容被替换为从其相邻者中的对应寄存器移位“入”的内容,使得相邻者之间的移位是在相同方向上(例如,所有执行通道向左移动,所有执行通道向右移动,等等)。尽管同一寄存器使其内容移出并用在同一周期内移入的内容替换可能是常见的,但多路复用器布置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支持移位操作指令(右、左、上、下)以在二维移位寄存器结构内移位数据。如上所述,程序控制指令主要由模板处理器的标量处理器执行。
2.0程序代码转换以提高运行时效率
如上面详细描述的,为图像处理器开发的应用软件可以通过以下来定义:将较小的、更细粒度的软件程序(在此称为内核)组合成更大的整体结构,诸如有向无环图。该定义通常包括将不同的内核耦合到特定的数据流模式中,其中,一定数目的“生产”内核作为它们的输出图像数据的源来将其提供给一个或多个“消费”内核。至少一个内核接收应用软件程序对其操作的整个输入图像,并且通常,所述内核之一生成应用软件的整体输出图像。
然后将每个内核映射到特定的模板处理器。每个模板处理器都有一个相关联的片生成器,它接收其相关联的模板处理器内核要操作的图像数据。在各个实施例中,由片生成器以线组的形式接收图像数据。例如,片生成器可以接收图像数据作为跨输入图像帧的整个宽度的一定数目的行。然后,片生成器形成图像数据的二维“片”,其被提供给模板处理器并最终加载到模板处理器的二维移位寄存器阵列中。
在各个实施例中,片生成器是利用用于实现片生成器的功能的专用硬件逻辑电路(例如,专用集成电路(ASIC)逻辑电路)、可编程逻辑电路(例如,现场可编程门阵列逻辑电路)、嵌入式处理器逻辑电路或其任何组合来实现的。专用硬件逻辑电路(如果有的话)具有相关联的配置寄存器,该配置寄存器设置有由应用软件的编译过程生成的信息,其致使片生成器执行针对被映射到该片生成器与之关联的模板处理器的内核中的内核的片生成活动。可编程逻辑电路(如果有的话)编程有由应用软件的编译过程生成的信息,该信息致使可编程逻辑电路实现针对内核的片生成器功能,该内核将在已映射到片生成器的相关联的模板处理器上执行。嵌入式处理器电路(如果有的话)设置有由应用软件的编译过程生成的程序代码,其在由嵌入式处理器执行时致使嵌入式处理器实现针对内核的片生成器功能,该内核已映射到片生成器的相关联的模板处理器,该内核将在该模板处理器上执行。模板处理器的标量处理器也可以被编程为执行、辅助或以其他方式涉及各个片生成活动任务。关于线缓冲器部件,也可存在相同类型的电路实现可能性和相关联的编译程序代码和/或信息。
因此,应用软件开发过程不仅包括内核到特定模板处理器的映射,还包括生成用于执行针对内核的片生成活动的相关联的配置信息和/或程序代码。
在各种应用软件程序开发环境中,编译器将辨识应用软件中的各种低效率并改变正在编译的程序代码以改进或以其他方式降低低效率,该编译器负责接受应用软件程序的更高级描述,并且作为响应,生成更低级程序代码(例如,目标代码)和任何相关联的配置信息以供图像处理器执行。被改变的程序代码可以是用于一个或多个片生成器和/或将由它们和/或线缓冲器部件馈送的内核的程序代码和/或配置信息。
图7a涉及第一潜在低效率。如图7a所示,输入图像701由片生成器接收,例如作为由线缓冲器部件发送的一定数目的线组。如图7a所示,输入图像在由片生成器耦合到的模板处理器上执行的内核K1处理之前,例如由片生成器进行下采样702。替选地,可以对内核K1进行编程以执行下采样。
在各个实施例中,模板处理器自然地创建具有与模板处理器的执行通道阵列相同尺寸的输出图像片。例如,在执行通道阵列尺寸为16像素×16像素的实施例中,模板处理器的内核程序代码K1的构造最初默认为生成16像素×16像素输出图像片。
如果模板处理器被配置为从已经被下采样的输入图像生成与其执行通道阵列相同尺寸的输出片,则需要大量的缓冲空间。例如,参考图7a,如果由片生成器执行下采样702以创建16像素×16像素经下采样的片703以用于加载到模板处理器的二维移位寄存器阵列中,则片生成器将需要对整个32像素×32像素输入图像701进行编队,以便形成16像素×16像素的经下采样的输入图像703以供内核K1消费。分配这样的编队所需的大量存储器是低效率的一种形式。
这样,在一个实施例中,编译器将重构应用软件程序(包括例如任何相关的配置信息),如图7b所示。具体地说,编译器将构造程序代码,使得内核K1不会在其执行通道阵列被充分利用的情况下操作。继续本示例,内核K1作为替代被设计为在8像素乘8像素输入片703b上操作,这使得内核K1生成8像素乘8像素输出片704b。
通过将内核K1配置为在更小的8像素乘8像素输入片703b上操作,与图7a的输入图像数据701a相比较,下采样活动702b(例如,由片生成器执行)仅需要将一半量的输入图像数据701b编队。这里,虽然图1a的输入图像数据701a对应于32行图像数据,但是作为对照,图7b的输入图像数据701b仅对应于16行输入图像数据。对于仅16行输入图像数据701b,下采样活动702b能够执行2:1下采样,其生产将跨越图像的整个宽度的一系列8像素乘8像素输入片703b。
图8a和8b示出了另一个低效率,其中,对内核K1的输出图像数据801执行上采样,然后在由K1的消费内核K2对图像数据执行之前执行相同量的下采样。这里,如图8a所示,生产内核K1生产一系列801的输出片A0至A3。然后对这些输出片801的图像数据进行交织,以有效地对K1的输出进行上采样。也就是说,如图8a所示,例如,输出片A0到A3中的每一个的顶部线被交织以形成经上采样的K1输出803的顶部输出线,该顶部输出线在被K1的消费内核K2消费之前,存储于临时编队K1的输出数据的线缓冲器802中。在各个实施例中,上采样可以由以下中的任何一个执行:K1、即耦合到K1在其上执行的模板处理器的片生成器、或K1将其输出发送到的线缓冲器802。
如图8b所示,消费K1的输出的内核K2的输入处理被配置为利用与K1的输出被上采样的相同因子来对其输入进行下采样。因此,用适当大小的输入数据对K2进行馈送的过程需要反转对K1的输出执行的上采样过程。也就是说,参考图8b,线缓冲器802中的交织编队数据803最终被去交织以重新形成最初由K1形成的输出图像A0至A3。下采样可以由以下中的任何一个执行:线缓冲器802、耦合到K2在其上执行的模板处理器的片生成器、或者K2本身。
在一个实施例中,编译器被设计为辨识生产内核的经上采样的输出何时通过相同因子被下采样(例如,1:2上采样和2:1下采样)以用于将消费该生产内核的输出的内核(其可能包括多个这样的内核)。作为响应,编译器将进一步重构正在开发的程序代码,以便消除沿生产者到消费者数据路径的上采样和下采样二者。在图8c中示出该方案。这里,K1的非经上采样的输出简单地在线缓冲器802中编队,该线缓冲器802耦合在K1和K2连接之间。然后,非经上采样的K1输出直接馈送到K2,而无需任何下采样。这样,避免了图8a的上采样活动和图8b的下采样活动二者。
图9a和9b涉及例如在多分量输出图像的情况下可能出现的另一种低效率。如本领域所公知的,数字图像可以具有多个分量(例如,RGB、YUV等)。可以设计/配置各个应用软件程序以将不同的分量处理为不同的数据平面。这里,例如,完整输出图像901可以由生产内核K1通过下述方式来完全生成:生成仅由第一分量(R)组成的一个或多个数据片,生成仅由第二分量(G)组成的一个或多个数据片,并生成仅由第三分量(B)组成的一个或多个数据片。在各个实施例中,对在同一线缓冲器902中的生产内核和消费内核之间传递的图像的所有数据进行编队可能是自然的或标准的默认方式。因此,图9a示出了所有三个分量901的图像数据在同一线缓冲器部件902中编队。
然而,在例如大输出图像的情况下,将所有三个分量的图像数据存储在同一线缓冲器部件中可能用尽线缓冲器存储器资源或否则消费大量的线缓冲器存储器资源。因此,在一个实施例中,参考图9b,正在编译应用软件程序的编译器将自动辨识存储多分量图像的不同分量何时可能用尽线缓冲器存储器资源。例如,编译程序可以最初分配固定量的缓冲器存储器资源以存储和转发图像,或者可以分配与要传输的数据的大小和/或数量相关的缓冲器存储器资源量,并且鉴于该分配,可以确定自动分配的量不足或达到某个最大阈值。在其他方法中,编译过程可以包括:模拟应用软件程序,并且辨识线缓冲器部件是瓶颈(例如,它经常没有存储器空间来存储由生产内核生成的线组或者它不具有用于响应来自消费内核的读取请求的带宽)。作为响应,编译过程自动修改应用软件和/或重新配置图像处理器,使得生产K1内核的输出图像数据的不同分量在不同的线缓冲器部件中编队。这里,图9b示出了R、G和B图像数据相应地在不同线缓冲器部件902_1、902_2和902_3中编队。
图9b的方案也可以用在生产K1内核具有许多消费者的情况。在这种情况下,如果采用图9a的默认方案,则存储图像数据901的所有分量的单个线缓冲器部件可能成为系统瓶颈,因为大量消费者将需要多次从线缓冲器加载/读取以便接收单个输入图像的所有信息。因此,在一个实施例中,采用图9b的方法,其中,每个线缓冲器仅保持相同分量类型的数据。在所讨论的示例中,与图9a的默认方法相比,这将使消费者对单个线缓冲器资源的读取请求减少66%。也就是说,图9b的每个线缓冲器部件902_1、902_2、902_3将仅需要支持图9a的对线缓冲器部件902的消费读取负荷的33%。对于生产内核的图像数据到线缓冲器资源的写入活动,也会发生相同的减少需求的效果。
图9b的方法可以降低低效率的另一种情况是如果某些消费者仅消费分量的子集。例如,在一个极端情况下,一个消费者消费R分量,另一个消费者消费G分量,并且另一个消费者消费G分量。在这种情况下,每个不同的消费者配置有其自己的专用线缓冲器源,其沿着不同的数据路径(通过不同的线缓冲器部件连接)流线化基于不同分量的数据流。作为对照,如果使用图9a的方法,则基于不同分量的数据流将会聚在线缓冲器902的单个点处(图9a),在这种情况下,一个分量的数据流可能由于在线缓冲器部件901处的、正在转发其他分量的大量读取和写入活动而停滞。
图10a和10b示出了基于单个消费者下游的线缓冲器资源的分散的另一效率改进。这里,太多消费者的存在可能强制要求使用多个线缓冲器部件来转发单个生产内核的输出图像数据。图10a示出了潜在的低效率,其中,四个不同的消费者K2到K5正在消费来自单个线缓冲器部件1002的单个生产K1内核的输出。再次,单线缓冲器部件1002可能是瓶颈,因为它直到所有消费者已经消费了其编队的数据时才能清除所述数据。在这种情况下,来自线缓冲器部件1002的总数据流将至少降低到其最慢消费者的输入速率。此外,考虑到线缓冲器部件1002支持的大量消费者,线缓冲器部件1002将接收繁重负荷的读取请求,这可能使线缓冲器部件1002的资源不堪重负。
这样,如图10b所示,消费者K2、K3的第一子集被指派给第一线缓冲器部件1002_1,而消费者K4、K5的第二子集被指派给第二线缓冲器部件1002_2。生产内核K1的输出图像流被馈送到线缓冲器部件1002_1、1002_2二者。在多个线缓冲器部件资源1002_2、1002_2间分散总消费者负载有助于减少对任何特定线缓冲器部件资源的总需求(与图10a的方法相比)。此外,编译器可以能够使用同一的线缓冲器部件对更快的输入流消费内核进行馈送(和/或使用不同的线缓冲器部件来对更慢的输入流消费内核进行馈送),使得更快消费的内核不会因更慢输入速率消费内核的更慢消费速率而停滞。
图11a示出了可能由设计为DAG的应用软件程序(或其组件)引起的“分割与合并(split and join)”低效率。如图11a中所示,源内核K1的输出被馈送到两个不同的消费内核K2和K3。此外,内核K3消费内核K2的输出。内核K3对内核K1输出的双重依赖性可能致使运行时计算效率低下和建模/设计效率低下。关于运行时效率低下,可能需要使LB2线缓冲器1102_2非常大以便编队大量的K1的输出数据。通常,内核K3直到大约当可获得内核K3要与来自LB2 1102_2的下一个线组一起处理的来自LB3 1002_3的下一个线组为止,才会要求来自LB2 1102_2的下一个线组。由于通过K2的可能大的传播延迟,LB2 1102_2可能变得非常大。在LB2 1102_2中的数据准备好被消费的时间与来自K2的、向K3的同胞输入数据在LB31102_3中可用的时间之间的上述差异也可以使在应用软件的设计期间建模或优化过程更加困难。
图11b示出了一种方案,其中,编译器在分割与合并结构上强制施行流水线结构。这里,图11a的K2内核被扩展为包括原始K2内核加上加载/存储算法1103的不同内核K2',加载/存储算法1103仅消费来自LB1 1102_1的内容并将其转发到LB4 1102_4。重要的是,加载/存储算法1103可以引起对于来自K1的未处理流的一些传播延迟,其消除了LB3 1102_3中在来自K1的原始输出数据准备好被K3消费的时间和来自K2的输出数据准备好被K3消费的时间之间的差异。
回顾图3a的讨论,在各个实施例中,标量存储器303可以被配置为保持查找表或常量表。在某些应用中,由内核处理的输入图像数据是固定常量而不是可变信息(例如,由对变化的输入数据进行操作的源内核生成)。一个示例是镜头阴影校正,其中,例如,对于镜头表面上的不同的相当大的粒度大小的区域,记录镜头的校正值。相当大的粒度大小对应于低分辨率图像数据(如果记录的数据被实现为不同的条目——其中每个条目对应于不同的粒度,则记录的数据不包含许多条目)。
当图像处理器正在处理来自包括该镜头的相机的图像时,这些记录的校正值中的一个对应于正由执行通道阵列处理的图像区域。因此,记录的值作为输入值应用于每个执行通道。在这个意义上,与查找表或常量表类似地实现镜头校正值。另外,在实现校正值所需的数据总量受到限制的情况下,校正值不会消费大量的存储器空间。这样,如图12中所示,在各个实施例中,固定且足够小以适合标量存储器1203的输入图像数据1210被加载到标量存储器1203中(例如,作为应用软件的初始配置),并且作为查找表或常量表来被在运行时期间在模板处理器的执行通道阵列上执行的内核查询(相反,例如,而不是由源内核生成并通过线缓冲器部件馈送到内核)。
图13a示出了另一个运行时问题,其可能潜在地导致较大量的数据在线缓冲器部件和/或片生成器中编队。这里,图13a描绘了三个线组1301、1302、1303,其例如在从线缓冲器部件被提供之后在片生成器中编队。为了示例,假设线组1301、1302、1303中的每一个包含16行图像数据,并且片生成器的对应模板处理器的执行通道阵列的尺寸1305也是16像素×16像素。另外,假设二维移位寄存器阵列的尺寸1306是24像素×24像素,以支持在执行通道阵列的外围周围形成4像素宽边界的环带区域。至少在这些情形下,自然配置可以是将执行通道阵列1305的16行与特定线组的16行对准。也就是说,片生成器形成以特定线组为中心的片。图13a示出了这种方法,其中,执行通道1305被对准以在第二线组线组1302的高度上操作。
问题在于,如图13a所示,由于环带1306的存在,馈入二维移位寄存器阵列的完整片将需要来自第一线组1301的下部区域和第三线组1303的上部区域的数据(环带区域也覆盖这些线组)。这样,在一个实施例中,如图13b所示,改变对准,使得需要提供最少数目的线组以形成完全大小的片。在该示例中,图13b的对准相对于图13a的对准向上移位了四个像素值,使得在片生成器中仅需要提供两个线组1301、1302来形成完全大小的片。通过这样做,不仅片生成器(并且可能同样对于线缓冲器)中需要更少的存储空间,而且片只需要等待两个线组来开始处理而不是等待三个线缓冲器来开始处理。
图14涉及由作为内核的输入过程的片生成器执行的去交织过程,该内核被馈送输入图像数据,该输入图像数据包括每数据通道的多个像素,或者换句话说,待由片生成器的内核处理的基本数据部件包含多个像素。作为示例,图14示出了由片生成器接收的输入图像的像素,该输入图像被构造为包含例如以拜耳(Bayer)图案格式的不同颜色像素的镶嵌图(mosaic)1401。这里,输入图像由片生成器接收为由线缓冲器部件提供的线组。这样,例如,由片生成器接收的每个线组的每一行包含R、G和B像素。这里,输入图像数据的基本部件包括含有R像素、B像素和两个G像素的四个像素的部件单元1402。
片生成器不同于直接从接收的输入图像结构1401解析片(这将创建具有拜耳模式的片),而是对输入图像数据结构1401执行去交织处理以生成包含四种不同类型片的针对内核的新输入结构1403。也就是说,如图14所示,新输入结构1403包括:1)仅由输入图像的R像素组成或以其他方式仅由输入图像的R像素导出的片;2)仅由位于部件单元输入图像的部件单元的相同第一位置的G像素组成或以其他方式仅由该第一位置的G像素导出的片;3)仅由位于部件单元输入图像的部件单元的相同第二位置的G像素组成或仅仅由该第二位置的G像素导出的片;4)仅由输入图像的B像素组成或者以其他方式仅由输入图像的B像素导出的片。这些片可以仅由输入图像像素组成,或者可以例如通过将值内插到不同颜色所在的输入图像位置来被上采样。
然后将新构造的片提供给片生成器的相关联的内核,该内核处理它们并生成相同结构1403的输出片(每片一种颜色),这些输出片被提供回片生成器。然后,片生成器对单色结构1403执行交织处理,以生成具有包括混合颜色的部件单元的原始结构1401的用于消费的输出图像。
在各个实施例中,前述线缓冲器或线缓冲器部件可更一般地表征为在生产和消费内核之间存储和转发图像数据的缓冲器。也就是说,在各个实施例中,缓冲器不一定需要编队线组。另外,图像处理器的硬件平台可以包括具有相关联的存储器资源的多个线缓冲器部件,并且一个或多个线缓冲器可以被配置为从单个线缓冲器部件操作。也就是说,硬件上的单个线缓冲器部件可以被配置为在不同的生产/消费内核对之间存储和转发不同的图像数据流。
图15示出了上述方法。该方法包括:构建图像处理软件数据流,其中,缓冲器存储和转发从生产内核传输到一个或多个消费内核的图像数据,1501。该方法还包括:辨识缓冲器没有足够的资源来存储和转发图像数据,1502。该方法还包括:修改图像处理软件数据流以包括在将图像数据从生产内核传输到一个或多个消费内核期间存储和转发图像数据的多个缓冲器,1503。
3.0低级程序代码的构建
图16示出了预运行时开发环境,其中,程序员设计高级图像处理功能,并且应用开发环境提供2.0节的任何/所有上述转换,以便开发人员不必识别低效率和/或从头开始编写转换。
这里,开发环境自动辨识上述任何低效率,并通过例如查询库1601来自动地施行对应的转换改进,该库1601包含低效率描述(开发环境扫描正在开发以包含的程序代码)和对应的修复(如果发现效率低下则施行)。也就是说,开发环境自动插入来自库1601的程序代码,该程序代码执行更有效率的过程(例如,作为编译过程的一部分)或以其他方式修改程序代码以用包括对低效率的修复的新代码替换低效率代码。
因此,可以用更高级程序代码或更低级别目标代码表达执行上述操作或其替选实施例的程序代码。在各个实施例中,更高级的虚拟指令集架构(ISA)代码可以将要操作的数据值指定为具有x、y地址坐标的存储器读取,而目标代码作为替代可以将这些数据存取理解为二维移位寄存器操作(诸如,上述移位操作或类似实施例中的任何一个)。
编译器可以将开发环境中的x、y读取转换为作为指定目标代码的二维移位寄存器的对应移位(例如,在具有x、y坐标(+2,+2)的开发环境中的读取可以在目标代码中实现为向左移动两个空格并向下移动两个空格)。取决于环境,开发者可以看到这两个层级(或者,例如,仅更高的虚拟ISA层级)。在其他实施例中,可以在运行时期间(例如,通过即时编译器)而不是预运行时调用这样的预写例程。
4.0结论语
根据前面的部分应理解,如上面在1.0节中描述的图像处理器可以在计算机系统上的硬件中体现(例如,作为手持设备的、处置来自手持设备的相机的数据的片上系统(SOC)的一部分)。
应指出,上述各个图像处理器架构特征不一定限于传统意义上的图像处理,因此可以应用于可能(或可能不)致使图像处理器被重新表征的其他应用。例如,如果上述各个图像处理器架构特征中的任何一个要用于动画的创建和/或生成和/或渲染,而不是实际相机图像的处理,则图像处理器可以被表征为图形处理部件。另外,上述图像处理器架构特征可以应用于其他技术应用,诸如视频处理、视觉处理、图像辨识和/或机器学习。以这种方式应用,图像处理器可以与更通用的处理器(例如,作为计算系统的CPU的或者作为计算系统的CPU的一部分)集成(例如,作为其协同处理器),或者可以是计算系统内的独立处理器。
上面讨论的硬件设计实施例可以体现在半导体核心片内和/或作为用于最终目标为半导体制造工艺的电路设计的描述。在后一种情况下,这样的电路描述可以采用(例如,VHDL或Verilog)寄存器传输级(RTL)电路描述、门级电路描述、晶体管级电路描述或掩模描述或它们的各种组合的形式。电路描述通常体现在计算机可读存储介质(例如,CD-ROM或其他类型的存储技术)上。
根据前面的部分应理解,如上所述的图像处理器可以在计算机系统上以硬件体现(例如,作为手持设备的、处置来自手持设备的相机的数据的片上系统(SOC)的一部分)。在图像处理器体现为硬件电路的情况下,注意图像处理器处理的图像数据可以直接从相机接收。这里,图像处理器可以是分立相机的一部分,或者是具有集成相机的计算系统的一部分。在后一种情况下,可以直接从相机或从计算系统的系统存储器接收图像数据(例如,相机将其图像数据发送到系统存储器而不是图像处理器)。也注意,前面部分中描述的许多特征可能适用于图形处理器部件(其渲染动画)。
图17提供了计算系统的示例性描绘。下面描述的计算系统的许多组件适用于具有集成相机和相关联的图像处理器(例如,诸如智能手机或平板计算机的手持设备)的计算系统。普通技术人员将能够容易地在两者之间进行描绘。
如图17所示,基本计算系统可以包括中央处理部件1701(其可以包括例如多个通用处理核心1715_1至1715_N和设置在多核处理器或应用处理器上的主存储器控制器1717)、系统存储器1702、显示器1703(例如,触摸屏、平板)、本地有线点对点链路(例如,USB)接口1704、各个网络I/O功能1705(诸如以太网接口和/或蜂窝调制解调器子系统)、无线局域网(例如,WiFi)接口1706、无线点对点链路(例如,蓝牙)接口1707和全球定位系统接口1708、各个传感器1709_1至1709_N、一个或多个相机1710、电池1711、电源管理控制部件1724、扬声器和麦克风1713以及音频编码器/解码器1714。
应用处理器或多核处理器1750可以包括其CPU 1701内的一个或多个通用处理核心1715、一个或多个图形处理部件1716、存储器管理功能1717(例如,存储器控制器)、I/O控制功能1718和图像处理部件1719。通用处理核心1715通常执行计算系统的操作系统和应用软件。图形处理部件1716通常执行图形密集型功能,以例如生成在显示器1703上呈现的图形信息。存储器控制功能1717与系统存储器1702对接,以向系统存储器1702写入数据/从系统存储器1702读取数据。管理控制部件1724通常控制系统1700的功耗。
可以根据前面部分中详细描述的图像处理部件实施例中的任何实施例来实现图像处理部件1719。替选地或组合地,IPU 1719可以耦合到GPU 1716和CPU 1701中的任一者或两者来作为其协同处理器。另外,在各个实施例中,可以用上面详细描述的任何图像处理器特征来实现GPU 1716。
触摸屏显示器1703、通信接口1704-1707、GPS接口1708、传感器1709、相机1710和扬声器/麦克风编解码器1713、1714中的每一个都可以被视为相对于整个计算系统的各种形式的I/O(输入和/或输出),其在适当的情况下也包括集成外围设备(例如,一个或多个相机1710)。取决于实施方式,这些I/O组件中的各个组件可以集成在应用处理器/多核处理器1750上,或者可以位于晶片外或应用处理器/多核处理器1750的封装外。
在一个实施例中,一个或多个相机1710包括能够测量相机与其视野中的物体之间的深度的深度相机。在应用处理器或其他处理器的通用CPU核心(或具有指令执行流水线以执行程序代码的其他功能块)上执行的应用软件、操作系统软件、设备驱动程序软件和/或固件可以执行以上所描述的任何功能。这里,图17的计算系统的许多组件可以存在于执行与图16的应用开发环境相对应的程序代码的更高性能计算系统(例如,服务器)内,其包括执行任何/所有上面描述的转换的编译器。
本发明的实施例可包括如上所述的各个过程。这些过程可以体现在机器可执行指令中。该指令可用于致使通用或专用处理器执行某些过程。或者,这些过程可以由包含用于执行过程的硬连线逻辑的特定硬件组件来执行,或者由编程的计算机组件和定制硬件组件的任何组合来执行。
还可以提供本发明的元素作为用于存储机器可执行指令的机器可读介质。机器可读介质可以包括但不限于软盘、光盘、CD-ROM和磁光盘、FLASH存储器、ROM、RAM、EPROM、EEPROM、磁卡或光卡、传播介质或其他类型的适用于存储电子指令的媒体/机器可读介质。例如,可以通过经由通信链路(例如,调制解调器或网络连接)在载波或其他传播介质中包含的数据信号将元素下载为从远程计算机(例如,服务器)传输到请求计算机(例如,客户端)的计算机程序。
在前面的说明书中,已经描述了特定示例实施例。然而,显而易见的是,在不脱离所附权利要求中阐述的本发明的更广泛的精神和范围的情况下,可以对其进行各种修改和改变。因此,说明书和附图应被视为说明性的而非限制性的。
在下文中描述了一些示例。
示例1:一种包含程序代码的机器可读存储介质,所述程序代码在由计算系统处理时致使所述计算系统执行方法,所述方法包括:
a)构建图像处理软件数据流,其中,缓冲器存储和转发从生产内核传输到一个或多个消费内核的图像数据;
b)辨识所述缓冲器没有足够的资源来存储和转发所述图像数据;以及,
c)修改所述图像处理软件数据流以包括多个缓冲器,所述多个缓冲器在将所述图像数据从所述生产内核传输到所述一个或多个消费内核期间存储和转发所述图像数据。
示例2:根据示例1所述的机器可读存储介质,其中,其中,所述方法还包括修改所述图像处理软件数据流,以使所述图像数据的不同部分从所述生产内核被发送到所述多个缓冲器中的不同缓冲器。
示例3:根据示例2所述的机器可读存储介质,其中,所述不同部分对应于所述图像数据的不同颜色分量。
示例4:根据前述示例中的至少一个所述的机器可读存储介质,其中,所述方法还包括:修改所述图像处理软件数据流以致使相同的图像数据从所述生产内核被发送到所述多个缓冲器中的第一缓冲器和第二缓冲器。
示例5:根据示例4所述的机器可读存储介质,其中,所述修改还包括:配置所述多个缓冲器中的第一缓冲器来向所述一个或多个消费内核中的第一消费内核进行馈送,以及配置所述多个缓冲器中的第二缓冲器来向所述一个或多个消费内核中的第二消费内核进行馈送。
示例6:根据前述示例中的至少一个所述的机器可读存储介质,其中,所述方法还包括:
辨识所述图像处理软件数据流是通过因子对图像进行上采样以形成经上采样的图像;
辨识所述图像处理软件数据流是通过所述因子对所述经上采样的图像进行下采样;
从所述图像处理软件数据流中消除对所述图像的所述上采样和对所述经上采样的图像的所述下采样。
示例7:根据前述示例中的至少一个所述的机器可读存储介质,其中,所述方法还包括:
辨识所述图像处理软件数据流中的分割与合并模式;以及,
将所述图像处理软件数据流重构为一系列级以消除所述分割与合并模式。
示例8:根据前述示例中的至少一个所述的机器可读存储介质,被配置为在具有多个线缓冲器部件的架构上操作,所述多个线缓冲器部件互连到多个模板处理器部件和/或至少一个对应的片生成器部件。
示例9:根据前述示例中的至少一个所述的机器可读存储介质,被配置为处理模板,特别是重叠的模板。
示例10:根据前述示例中的至少一个所述的机器可读存储介质,被配置为在数据计算部件上操作,所述数据计算部件包括具有比执行通道阵列更宽的尺寸的移位寄存器结构,特别是在所述执行通道阵列外部存在寄存器。
示例11:一种包含程序代码的机器可读存储介质,所述程序代码在由计算系统处理时致使所述计算系统执行方法,所述方法包括:
辨识待由程序代码的内核处理的图像将被下采样,程序代码的所述内核将在图像处理器的图像处理核心上执行,所述图像处理核心包括二维执行通道阵列;
构造所述内核的操作来利用所述执行通道阵列的少于全部的执行通道来处理所述图像,以减少用于支持对所述图像的所述下采样的存储器资源的消费。
示例12:根据示例11所述的机器可读存储介质,其中,所述图像处理器包括多个图像处理核心,所述多个图像处理核心包括所述图像处理核心,并且其中,所述多个图像处理核心中的一个图像处理核心具有用于存储恒定信息的相关联的存储器,所述方法还包括:
配置所述相关联的存储器以存储恒定输入图像,所述恒定输入图像将由待在所述多个图像处理核心中的、具有所述相关联的存储器的所述一个图像处理核心上执行的程序代码的相应内核处理。
示例13:根据示例11或12所述的机器可读存储介质,其中,所述图像处理器包括多个图像处理核心,所述多个图像处理核心包括所述图像处理核心,并且其中,针对所述多个图像处理核心中的一个图像处理核心的输入图像数据将作为图像数据的线组被接收,所述方法还包括:
对准所述一个图像处理核心将在其上操作的输入图像区,使得所述输入图像区与所述线组中的最小数目的线组重叠。
示例14:根据示例11至13中的至少一个所述的机器可读介质,其中,所述图像处理器包括多个图像处理核心,所述多个图像处理核心包括所述图像处理核心,并且其中,针对所述多个图像处理核心中的一个图像处理核心的输入图像数据包括所述一个图像处理核心将在其上操作的每数据单位多个像素的镶嵌图,所述方法还包括:
在由所述一个图像处理核心处理之前将所述输入图像数据配置为被去交织;
将由所述一个图像处理核心生成的输出图像数据配置为交织成每数据单位多个像素的所述镶嵌图。
示例15:根据示例11至14中的至少一个所述的机器可读存储介质,被配置为在具有多个线缓冲器部件的架构上操作,所述多个线缓冲器部件互连到多个模板处理器部件和/或至少一个对应的片生成器部件。
示例16:根据示例11至15中的至少一个所述的机器可读存储介质,被配置为处理模板,特别是重叠的模板。
示例17:根据示例11至16中的至少一个所述的机器可读存储介质,被配置为在数据计算部件上操作,所述数据计算部件包括具有比所述执行通道阵列更宽的尺寸的移位寄存器结构,特别是在所述执行通道阵列外部具有寄存器。
示例18:一种计算系统,包括:
一个或多个通用处理核心;
系统存储器;
存储器控制器,所述存储器控制器耦合在所述系统存储器和所述一个或多个通用处理核心之间;
包含程序代码的存储介质,所述程序代码在由所述计算系统处理时致使所述计算系统执行方法,所述方法包括:
a)构建图像处理软件数据流,其中,缓冲器存储和转发从生产内核传输到一个或多个消费内核的图像数据;
b)辨识所述缓冲器没有足够的资源来存储和转发所述图像数据;以及,
c)修改所述图像处理软件数据流以包括多个缓冲器,所述多个缓冲器在将所述图像数据从所述生产内核传输到所述一个或多个消费内核期间存储和转发所述图像数据。
示例19:根据示例18所述的计算系统,其中,所述方法还包括:修改所述图像处理软件数据流以致使所述图像数据的不同部分从所述生产内核被发送到所述多个缓冲器中的不同缓冲器。
示例20:根据示例19所述的计算系统,其中,所述不同部分对应于所述图像数据的不同颜色分量。
示例21:根据示例18至20中的至少一个所述的计算系统,其中,所述方法还包括:修改所述图像处理软件数据流以致使相同的图像数据从所述生产内核被发送到所述多个缓冲器中的第一缓冲器和第二缓冲器。
示例22:根据示例18至21中的至少一个所述的计算系统,其中,所述修改还包括:配置所述多个缓冲器中的第一缓冲器来向所述一个或多个消费内核中的第一消费内核进行馈送,以及配置所述多个缓冲器中的第二缓冲器来向所述一个或多个消费内核中的第二消费内核进行馈送。
示例23:根据示例18至22中的至少一个所述的计算系统,其中,所述编译还包括:
辨识所述图像处理软件数据流是通过因子对图像进行上采样以形成经上采样的图像;
辨识所述图像处理软件数据流是通过所述因子对所述经上采样的图像进行下采样;
从所述图像处理软件数据流中消除对所述图像的所述上采样和对所述经上采样的图像的所述下采样。
示例24:根据示例18至23中的至少一个所述的计算系统,其中,所述编译还包括:
辨识所述图像处理软件数据流中的分割与合并模式;以及,
将所述图像处理软件数据流重构为一系列级以消除所述分割与合并模式。
示例25:根据示例18至24中的至少一个所述的计算系统,其中,所述缓冲器用于存储和转发所述图像数据的线组。
示例26:根据示例18至25中的至少一个所述的计算系统,其中,所述缓冲器在所述图像处理器的线缓冲器部件中实现的,所述图像处理器包括网络,所述网络耦合在所述线缓冲器部件和多个处理核心之间,所述多个处理核心相应地执行程序代码的所述生产内核和程序代码的所述一个或多个消费内核。
示例27:根据示例18至26中的至少一个所述的计算系统,包括具有架构的处理器,所述架构具有互连到多个模板处理器部件和/或至少一个对应的片生成器部件的多个线缓冲器部件。
示例28:根据示例18至27中的至少一个所述的计算系统,被配置为处理模板,特别是重叠的模板。
示例29:根据示例18至28中的至少一个所述的计算系统,包括具有移位寄存器结构的数据计算部件,所述移位寄存器结构具有比所述执行通道阵列更宽的尺寸,特别是在所述执行通道阵列外部存在寄存器。

Claims (13)

1.一个或多个编码有计算机程序指令的非暂时计算机存储介质,所述计算机程序指令在由一个或多个计算机执行时致使所述一个或多个计算机执行操作,所述操作包括:
接收用于由图像处理器执行的图像处理软件数据流的定义,所述图像处理软件数据流具有用于生产内核和多个消费内核的指令,所述指令包括存储指令和加载指令,所述存储指令致使所述生产内核将数据写入到所述图像处理器的第一线缓冲器,所述加载指令致使所述多个消费内核中的每个消费内核从所述第一线缓冲器读取由所述生产内核生产的数据;
确定所述第一线缓冲器的数据速率不足够来服务全部的所述多个消费内核;以及
作为响应,修改所述图像处理软件数据流包括:
修改所述生产内核来包括将输出写入到多个线缓冲器的指令,所述多个线缓冲器包括所述第一线缓冲器和不同的第二线缓冲器,以及
修改所述消费内核中的一个或多个消费内核来包括从所述不同的第二线缓冲器而非所述第一线缓冲器读取所述输出的加载指令。
2.根据权利要求1所述的一个或多个非暂时性计算机存储介质,其中,所述图像处理器包括多个模板处理器,并且其中所述操作还包括:指派所述生产内核和所述多个消费内核中的每一个来由所述多个模板处理器中的相应模板处理器执行。
3.根据权利要求2所述的一个或多个非暂时性计算机存储介质,其中,每个模板处理器具有相关联的片生成器,并且其中每个内核的加载指令致使相应的片生成器加载来自对应的线缓冲器的数据。
4.根据权利要求3所述的一个或多个非暂时性计算机存储介质,其中,片生成器加载来自对应的线缓冲器的数据包括:将数据加载到所述多个模板处理器中的模板处理器的二维移位寄存器阵列中。
5.根据前述权利要求1所述的一个或多个非暂时性计算机存储介质,其中,所述图像处理软件数据流是以高级程序代码来表达的,并且其中,所述操作还包括生成实现修改的图像处理软件数据流的低级目标代码。
6.一种计算系统,包括:
一个或多个通用处理核心;
系统存储器;
存储器控制器,所述存储器控制器耦合在所述系统存储器和所述一个或多个通用处理核心之间;以及
一个或多个编码有计算机程序指令的非暂时计算机存储介质,所述程序指令在由所述一个或多个通用处理核心处理时致使所述一个或多个通用处理核心执行操作,所述操作包括:
接收用于由图像处理器执行的图像处理软件数据流的定义,所述图像处理软件数据流具有用于生产内核和多个消费内核的指令,所述指令包括存储指令和加载指令,所述存储指令致使所述生产内核将数据写入到所述图像处理器的第一线缓冲器,所述加载指令致使所述多个消费内核中的每个消费内核;
确定所述第一线缓冲器的数据速率不足够来服务全部的所述多个消费内核;以及
作为响应,修改所述图像处理软件数据流包括:
修改所述生产内核来包括将输出写入到多个线缓冲器的指令,所述多个线缓冲器包括所述第一线缓冲器和不同的第二线缓冲器,以及
修改所述消费内核中的一个或多个消费内核来包括从所述不同的第二线缓冲器而非所述第一线缓冲器读取所述输出的加载指令。
7.根据权利要求6所述的计算系统,其中,所述所述图像处理器包括多个模板处理器,并且其中所述操作还包括:指派所述生产内核和所述多个消费内核中的每一个来由所述多个模板处理器中的相应模板处理器执行。
8.根据权利要求7所述的计算系统,其中,每个模板处理器具有相关联的片生成器,并且其中每个内核的加载指令致使相应的片生成器加载来自对应的线缓冲器的数据。
9.根据权利要求8所述的计算系统,其中,片生成器加载来自对应的线缓冲器的数据包括:将数据加载到所述多个模板处理器中的模板处理器的二维移位寄存器阵列中。
10.根据权利要求6所述的计算系统,其中,
所述图像处理软件数据流是以高级程序代码来表达的,并且其中,所述操作还包括生成实现修改的图像处理软件数据流的低级目标代码。
11.根据权利要求6所述的计算系统,其中,所述缓冲器用于存储和转发所述图像数据的线组。
12.根据权利要求11所述的计算系统,其中,所述缓冲器在所述图像处理器的线缓冲器部件中实现的,所述图像处理器包括网络,所述网络耦合在所述线缓冲器部件和多个处理核心之间,所述多个处理核心相应地执行程序代码的所述生产内核和程序代码的所述一个或多个消费内核。
13.一种由一个或多个计算机执行的方法,所述方法包括:
接收用于由图像处理器执行的图像处理软件数据流的定义,所述图像处理软件数据流具有用于生产内核和多个消费内核的指令,所述指令包括存储指令和加载指令,所述存储指令致使所述生产内核将数据写入到所述图像处理器的第一线缓冲器,所述加载指令致使所述多个消费内核中的每个消费内核从所述第一线缓冲器读取由所述生产内核生产的数据;
确定所述第一线缓冲器的数据速率不足够来服务全部的所述多个消费内核;以及
作为响应,修改所述图像处理软件数据流包括:
修改所述生产内核来包括将输出写入到多个线缓冲器的指令,所述多个线缓冲器包括所述第一线缓冲器和不同的第二线缓冲器,以及
修改所述消费内核中的一个或多个消费内核来包括从所述不同的第二线缓冲器而非所述第一线缓冲器读取所述输出的加载指令。
CN201880007442.5A 2017-05-12 2018-01-16 提高图像处理器运行时效率的程序代码转换 Active CN110192220B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/594,517 US10489199B2 (en) 2017-05-12 2017-05-12 Program code transformations to improve image processor runtime efficiency
US15/594,517 2017-05-12
PCT/US2018/013801 WO2018208341A1 (en) 2017-05-12 2018-01-16 Program code transformations to improve image processor runtime efficiency

Publications (2)

Publication Number Publication Date
CN110192220A CN110192220A (zh) 2019-08-30
CN110192220B true CN110192220B (zh) 2023-09-12

Family

ID=61868846

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201880007442.5A Active CN110192220B (zh) 2017-05-12 2018-01-16 提高图像处理器运行时效率的程序代码转换

Country Status (7)

Country Link
US (2) US10489199B2 (zh)
EP (1) EP3622474B1 (zh)
JP (1) JP6775088B2 (zh)
KR (1) KR102278021B1 (zh)
CN (1) CN110192220B (zh)
TW (1) TWI690850B (zh)
WO (1) WO2018208341A1 (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10915319B2 (en) * 2017-05-15 2021-02-09 Google Llc Two dimensional masked shift instruction
CN111382094B (zh) * 2018-12-29 2021-11-30 深圳云天励飞技术有限公司 一种数据处理方法及装置
KR102611722B1 (ko) * 2019-01-07 2023-12-07 삼성전자주식회사 이미지 처리 장치 및 이미지 처리 방법
CN113703998A (zh) * 2021-08-25 2021-11-26 深圳市慧鲤科技有限公司 图像转换方法、装置、电子设备及计算机可读存储介质
EP4227795A1 (en) * 2022-02-15 2023-08-16 ILNumerics GmbH A computer-implemented method and a computer-readable medium
US11474720B1 (en) * 2022-04-04 2022-10-18 Illuscio, Inc. Systems and methods for implementing a custom heap memory manager to optimize compute kernel performance

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003256826A (ja) * 2002-02-28 2003-09-12 Ricoh Co Ltd 画像処理回路、複合画像処理回路、および、画像形成装置
WO2016171909A1 (en) * 2015-04-23 2016-10-27 Google Inc. Architecture for high performance, power efficient, programmable image processing

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2267194B (en) 1992-05-13 1995-10-04 Sony Broadcast & Communication Apparatus and method for processing image data
US5523854A (en) 1993-11-08 1996-06-04 Transdata International, Inc. Store and forward data transmission
JP2005259113A (ja) * 2004-02-12 2005-09-22 Ricoh Co Ltd プロセス編集装置、プロセス管理装置、プロセス編集プログラム、プロセス管理プログラム、記録媒体、プロセス編集方法及びプロセス管理方法
TWI328201B (en) * 2006-10-30 2010-08-01 Ind Tech Res Inst Method and system for object detection in an image plane
US7995067B2 (en) 2007-03-29 2011-08-09 Mobileye Technologies Limited Cyclical image buffer
KR100793286B1 (ko) * 2007-05-02 2008-01-10 주식회사 코아로직 버퍼 메모리의 사용량이 작은 디지털 영상 코덱 및 그 제어방법
US9756268B2 (en) * 2015-04-23 2017-09-05 Google Inc. Line buffer unit for image processor
US10291813B2 (en) * 2015-04-23 2019-05-14 Google Llc Sheet generator for image processor
US9785423B2 (en) * 2015-04-23 2017-10-10 Google Inc. Compiler for translating between a virtual image processor instruction set architecture (ISA) and target hardware having a two-dimensional shift array structure
US10095479B2 (en) * 2015-04-23 2018-10-09 Google Llc Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure
US9769356B2 (en) * 2015-04-23 2017-09-19 Google Inc. Two dimensional shift array for image processor
US9772852B2 (en) * 2015-04-23 2017-09-26 Google Inc. Energy efficient processor core architecture for image processor

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003256826A (ja) * 2002-02-28 2003-09-12 Ricoh Co Ltd 画像処理回路、複合画像処理回路、および、画像形成装置
WO2016171909A1 (en) * 2015-04-23 2016-10-27 Google Inc. Architecture for high performance, power efficient, programmable image processing

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Reducing Memory Requirements of Stream Programs by Graph Transformations;Pablo de Oliveira Castro et.al;《2010 International Conference on High Performance Computing & Simulation (HPCS 2010)》;20100101;第173页 *

Also Published As

Publication number Publication date
US10996988B2 (en) 2021-05-04
US20180329745A1 (en) 2018-11-15
WO2018208341A1 (en) 2018-11-15
EP3622474A1 (en) 2020-03-18
US10489199B2 (en) 2019-11-26
EP3622474B1 (en) 2024-09-04
JP6775088B2 (ja) 2020-10-28
JP2020519976A (ja) 2020-07-02
US20200050488A1 (en) 2020-02-13
KR102278021B1 (ko) 2021-07-15
CN110192220A (zh) 2019-08-30
KR20190101409A (ko) 2019-08-30
TW201908969A (zh) 2019-03-01
TWI690850B (zh) 2020-04-11

Similar Documents

Publication Publication Date Title
JP7202987B2 (ja) 高性能で、電力効率の良い、プログラマブルな画像処理のためのアーキテクチャ
CN110192220B (zh) 提高图像处理器运行时效率的程序代码转换
CN108541321B (zh) 将程序代码映射到高性能、高功效的可编程图像处理硬件平台的编译技术
JP6793228B2 (ja) 画像プロセッサのためのシート生成部
CN110149802B (zh) 用于在虚拟图像处理器指令集架构(isa)与具有二维移位阵列结构的目标硬件之间进行转译的编译器
CN107533750B (zh) 虚拟图像处理器及在其上处理图像数据的方法和系统
US11544060B2 (en) Two dimensional masked shift instruction
CN107133908B (zh) 用于图像处理器的编译器管理存储器
TW201901607A (zh) 可組態及可程式化影像處理器單元
TWI670968B (zh) 影像處理器輸入輸出單元
CN110300944B (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