CN108541321A - 将程序代码映射到高性能、高功效的可编程图像处理硬件平台的编译技术 - Google Patents
将程序代码映射到高性能、高功效的可编程图像处理硬件平台的编译技术 Download PDFInfo
- Publication number
- CN108541321A CN108541321A CN201680080956.4A CN201680080956A CN108541321A CN 108541321 A CN108541321 A CN 108541321A CN 201680080956 A CN201680080956 A CN 201680080956A CN 108541321 A CN108541321 A CN 108541321A
- Authority
- CN
- China
- Prior art keywords
- kernel
- processor
- data
- program code
- template
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Image Processing (AREA)
- Devices For Executing Special Programs (AREA)
- Multi Processors (AREA)
Abstract
本发明描述一种方法。所述方法包括编译针对具有可编程模板处理器的图像处理器的程序代码,所述可编程模板处理器由相应的二维执行通道和移位寄存器电路结构组成。所述程序代码用于实现有向无环图并且由多个内核组成,这些内核将在各个模板处理器上执行,其中编译包括以下任何一个:识别程序代码中的内核数目不同于图像处理器中的模板处理器的数目;识别内核中的至少一个的计算密集度高于内核中的另一个;以及识别程序代码的资源需求超过图像处理器的存储器容量。编译进一步包括响应于以上识别中的任何一个,执行以下任何一项:水平融合内核;垂直融合内核;将内核中的一个分裂成多个内核;将内核空间分区成多个空间分区内核;将有向无环图分割成较小的图。
Description
相关申请
本申请请求于2016年2月26日提交的美国临时申请号62/300,684的“CompilerTechniques For Mapping Program Code To A High Performance、Power Efficient、Programmable Image Processing Hardware Platform”的权益,其全文通过引用并入本文。
技术领域
本发明的技术领域总体上涉及图像处理,更具体地涉及用于将程序代码映射到可编程图像处理硬件平台(诸如高性能、高功效的可编程图像处理硬件平台)的编译技术。
背景技术
图像处理通常涉及处理组织成阵列的像素值。在此,空间组织的二维阵列捕获图像的二维性质(附加维度可以包括时间(例如,二维图像序列)和数据类型(例如,颜色))。在通常情况下,阵列像素值由已生成静止图像或帧序列以捕获运动图像的相机提供。传统的图像处理器通常呈现两种极端情况。
第一种极端执行作为在通用处理器或类通用处理器(例如,具有向量指令增强的通用处理器)上执行的软件程序的图像处理任务。虽然第一种极端通常提供高度通用的应用软件开发平台,但其使用更细粒度的数据结构以及相关的开销(例如,指令获取和解码、片上和片外数据的处理、推测执行),最终导致在执行程序代码期间每单位数据消耗大量的能量。
第二种相反的极端将固定功能硬布线电路应用于更大的数据块。使用直接应用于定制设计电路的较大(相对于较细粒度)的数据块大幅降低每单位数据的功耗。然而,使用定制设计的固定功能电路通常导致处理器能够执行的任务集有限。照此,第二种极端中缺乏广泛通用的编程环境(这与第一种极端相关联)。
一种提供高度通用的应用软件开发机会与提高每单位数据的功效相结合的技术平台仍是理想但缺失的解决方案。
发明内容
本发明描述一种方法。所述方法包括编译针对具有可编程模板处理器的图像处理器的程序代码,所述可编程模板处理器由相应的二维执行通道和移位寄存器电路结构组成。所述程序代码用于实现有向无环图并且由多个内核组成,这些内核将在各个模板处理器上执行,其中编译包括以下任何一个:识别所述程序代码中的内核数目不同于所述图像处理器中的模板处理器的数目;识别所述内核中的至少一个的计算密集度高于所述内核中的另一个;以及识别所述程序代码的资源需求超过所述图像处理器的存储器容量。编译进一步包括,响应于以上识别中的任何一个,执行以下任何一项:水平融合内核;垂直融合内核;将内核中的一个分裂成多个内核;将内核空间分区成多个空间分区内核;将有向无环图分割成较小的图。
本发明描述一种设备。所述设备包括用于编译针对具有可编程模板处理器的图像处理器的程序代码的装置,所述可编程模板处理器由相应的二维执行通道和移位寄存器电路结构组成。所述程序代码用于实现有向无环图并且由多个内核组成,这些内核将在各个模板处理器上执行,其中用于编译的装置包括用于以下任何一个的装置:识别所述程序代码中的内核数目不同于所述图像处理器中的模板处理器的数目;识别所述内核中的至少一个的计算密集度高于所述内核中的另一个;以及识别所述程序代码的资源需求超过所述图像处理器的存储器容量。所述用于编译的装置进一步包括用于响应于以上识别中的任何一个来执行以下任何一项的装置:水平融合内核;垂直融合内核;将所述内核中的一个分裂成多个内核;将内核空间分区成多个空间分区内核;将有向无环图分割成较小的图。
附图说明
下文的描述和附图用于对本发明的实施例予以说明。在附图中:
图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涉及流水线程序流;
图12a和图12b涉及水平内核融合过程。
图13a、图13b和图13c涉及垂直内核融合过程。
图14涉及内核分裂过程;
图15涉及图形分区过程;
图16涉及DAG/流水线分割过程;
图17a示出编译方法;
图17b示出程序代码开发环境;
图18示出示例性计算系统。
具体实施方式
a.图像处理器硬件架构和操作
图1示出以硬件实现的图像处理器的架构100的实施例。图像处理器可以例如是编译器的目标,该编译器将为模拟环境内的虚拟处理器编写的程序代码转换为由硬件处理器实际执行的程序代码。如图1所示,架构100包括通过网络104(例如,片上网络(NOC),包括片上交换网络、片上环形网络或其他类型的网络)与多个模板处理器单元102_1至102_N和对应的表单生成器单元103_1至103_N互连的多个线缓冲器单元101_1至101_M。在一种实施例中,任何线缓冲器单元可以通过网络104连接到任何表单生成器和对应的模板处理器。
在一种实施例中,程序代码被编译并加载到对应的模板处理器102上以执行先前由软件开发者定义的图像处理操作(例如,根据设计和实施方式,程序代码也可以被加载到模板处理器的相关表单生成器103上)。在至少一些实例中,可以通过将用于第一流水线级的第一内核程序加载到第一模板处理器102_1中、将用于第二流水线级的第二内核程序加载到第二模板处理器102_2中等来实现图像处理流水线,其中第一内核执行流水线的第一级的功能,第二内核执行流水线的第二级的功能等,并且安装附加的控制流方法,以使输出图像数据从流水线的一级传递到流水线的下一级。
在其他配置中,图像处理器可以被实现为具有操作相同内核程序代码的两个以上模板处理器102_1、102_2的并行机。例如,可以通过跨每个均执行相同功能的多个模板处理器的扩展帧来处理高密度且高数据速率的图像数据流。
在又一其他配置中,本质上内核的任何DAG可以被加载到硬件处理器上,这是通过在DAG设计中利用模板处理器自身的程序代码的各自内核配置模板处理器并且将适当的控制流钩配置到硬件中将来自一个内核的输出图像引导到的下一个内核的输入。
作为通用流程,图像数据的帧由宏I/O单元105接收并且以逐帧为基础传递到线缓冲器单元101中的一个或多个。特定线缓冲器单元将其图像数据的帧解析成图像数据的较小区域,称为“线群”,然后通过网络104将线群传递到特定的表单生成器。完整或“完全”的单个线群可以例如由帧的多个连续整行或整列的数据构成(为简单起见,本说明书将主要涉及连续行)。表单生成器进一步将图像数据的线群解析成图像数据的较小区域,称为“表单”,并且将该表单提交给其对应的模板处理器。
在具有单个输入的图像处理流水线或DAG流的情形下,一般而言,输入帧被引导到相同的线缓冲器单元101_1,该线缓冲器单元将图像数据解析成线群并且将线群引导到表单生成器103_1,其对应的模板处理器102_1正执行流水线/DAG中的第一内核的代码。在模板处理器102_1对其处理的线群完成操作后,表单生成器103_1将输出线群发送到“下游”线缓冲器单元101_2(在一些使用情形下,输出线群可以被发送回先前曾发送输入线群的同一线缓冲器单元101_1)。
然后,表示在它们各自的其他表单生成器和模板处理器(例如,表单生成器103_2和模板处理器102_2)上执行的流水线/DAG中的下一级/操作的一个或多个“消耗者”内核从下游线缓冲器单元101_2接收由第一模板处理器102_1生成的图像数据。通过这种方式,在第一模板处理器上操作的“产生者”内核将其输出数据转发到在第二模板处理器上操作的“消耗者”内核,其中,与整个流水线或DAG的设计一致,消耗者内核在产生者内核之后执行下一任务集。
模板处理器102被设计成同时在图像数据的多个重叠模板上操作。多个重叠模板和模板处理器的内部硬件处理能力有效地确定表单的尺寸。在此,在模板处理器102内,执行通道阵列一致地操作,以同时处理由多个重叠模板覆盖的图像数据表面区域。
如下详述,在各种实施例中,图像数据的表单被加载到模板处理器102内的二维寄存器阵列结构中。通过将大量数据移动到大量寄存器空间中,例如,作为单个加载操作,并且紧随其后由执行通道阵列对数据直接执行处理任务,使用表单和二维寄存器阵列结构被认为是有效地提供功耗改善。此外,使用执行通道阵列和对应的寄存器阵列提供能够易于编程/配置的不同模板尺寸。
图2a至图2e以高水平示出线缓冲器单元101的解析活动、表单生成器单元103的更细粒度解析活动以及耦合至表单生成器单元103的模板处理器102的模板处理活动的实施例。
图2a描绘出图像数据的输入帧201的实施例。图2a还描绘出三个重叠模板202(每个模板具有3像素×3像素的大小)的概略图,模板处理器被设计成在这些模板上进行操作。以实心黑色突出显示每个模板各自生成输出图像数据的输出像素。为简单起见,三个重叠模板202被描绘为仅在垂直方向上重叠。应当认识到,实际上,模板处理器可以被设计成在垂直方向和水平方向上皆具有重叠模板。
如图2a所示,由于模板处理器内的垂直重叠模板202,在单个模板处理器在其上操作的帧内存在宽带图像数据。如下详论,在一种实施例中,模板处理器以从左到右的方式跨图像数据处理重叠模板内的数据(然后以从上到下的顺序重复下一线集)。因此,随着模板处理器继续向前进行其操作,实心黑色的输出像素块的数目将水平向右增长。如上所述,线缓冲器单元101负责解析来自足以使模板处理器在扩充的多个即将到来的周期中操作的输入帧的输入图像数据的线群。线群的示例性绘图被示为阴影区域203。在一种实施例中,线缓冲器单元101能够理解向/从表单生成器发送/接收线群的不同动态。例如,根据一种称为“全组”的模式,在线缓冲器单元与表单生成器之间传递图像数据的完整全宽线。根据第二种称为“虚拟高”的模式,最初传递具有全宽行子集的线群。然后,依次以较小(小于全宽)的片段传递剩余的行。
随着输入图像数据的线群203由线缓冲器单元定义并传递到表单生成器单元,表单生成器单元进一步将线群解析成更精确匹配模板处理器的硬件限制的更精细的表单。更具体地,如下进一步详述,在一种实施例中,每个模板处理器由二维移位寄存器阵列组成。二维移位寄存器阵列实质上将图像数据移位到执行通道阵列“下方”,其中移位模式促使每个执行通道对其各自模板内的数据进行操作(也就是说,每个执行通道处理其自身模板上的信息以生成用于该模板的输出)。在一种实施例中,表单是“填充”或以其他方式加载到二维移位寄存器阵列中的输入图像数据的表面区域。
如下详述,在各种实施例中,实际上存在能够在任何周期上移位的多个二维寄存器数据层。为方便起见,本说明书中的大部分内容将简单地使用术语“二维移位寄存器”等来指代具有能够移位的一个或多个这样的二维寄存器数据层的结构。
因此,如图2b所示,表单生成器解析来自线群203的初始表单204并且将其提供给模板处理器(在此,数据表单对应于通常由附图标记204标示的阴影区域)。如图2c和图2d所示,模板处理器通过以从左到右的方式在表单上有效地移动重叠模板202而对输入图像数据的表单进行操作。如图2d所示,能够从表单内的数据计算出输出值的像素数被耗尽(没有其他的像素位置可能具有从表单内的信息确定的输出值)。为简单起见,忽略了图像的边界区域。
如图2e所示,表单生成器再提供下一个表单205供模板处理器继续操作。应当指出,模板开始在下一个表单上操作时,模板的初始位置是从第一个表单耗尽的一点向右的下一进程(如前图2d中所示)。利用新表单205,当模版处理器以与处理第一表单相同的方式对新表单进行操作时,模版将简单地继续向右移动。
应当指出,由于围绕输出像素位置的模板的边界区域,第一表单204的数据与第二表单205的数据之间存在一些重叠。这种重叠能够由表单生成器重复传送重叠数据两次来进行简单处理。在替代实施方式中,为将下一个表单馈送到模板处理器,表单生成器可以继续仅向模板处理器发送新数据,并且模板处理器重复使用来自前一表单的重叠数据。
b.模板处理器的设计和操作
图3a示出模板处理器架构300的实施例。如图3所示,模板处理器包括数据计算单元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中的执行通道。在一种实施例中,单个相同的指令被广播到阵列305内的所有执行通道,以实现来自数据计算单元301的类似SIMD的行为。在一种实施例中,从标量存储器303读取并且发布到执行通道阵列305的执行通道的指令的指令格式包括超长指令字(VLIW)型格式,其使每指令包括一个以上操作码。在另一种实施例中,VLIW格式包括指导由每个执行通道的ALU执行的数学函数的ALU操作码(如下所述,在一种实施例中,其可以指定一个以上传统的ALU操作)以及存储器操作码(其指导用于特定执行通道或执行通道集合的存储器操作)。
术语“执行通道”指代能够执行指令的一个或多个执行单元的集合(例如,能够执行指令的逻辑电路)。然而,在各种实施例中,执行通道除执行单元之外能够包括更多类似处理器的功能。例如,除一个或多个执行单元之外,执行通道还可以包括对所接收的指令进行解码的逻辑电路,或者在更多类似MIMD的设计的情形下,执行通道还可以包括对指令进行取码和解码的逻辑电路。关于类似MIMD的方法,尽管本文主要是描述集中式程序控制方法,但在各种替代实施例中可以实现更多分布式方法(例如,包括阵列305的每个执行通道内的程序代码和程序控制器)。
执行通道阵列305、程序控制器309和二维移位寄存器结构306的组合为能够广泛适应/配置的硬件平台提供广泛的可编程功能。例如,应用软件开发者能够编程具有各种不同功能和尺寸(例如,模板尺寸)的内核,只要各个执行通道能够执行各种功能并且能够轻松访问接近任何输出阵列位置的输入图像数据。
除了充当由执行通道阵列305操作的图像数据的数据存储区之外,随机存取存储器307还可以保留一个或多个查找表。在各种实施例中,也可以在标量存储器303内实例化一个或多个标量查找表。
标量查找涉及将来自相同索引的相同查找表的相同数据值传递到执行通道阵列305内的每个执行通道。在各种实施例中,上述VLIW指令格式被扩展成还包括标量操作码,其将由标量处理器执行的查找操作引导到标量查找表中。指定与操作码同用的索引可以是立即操作数或者取自其他一些数据存储位置。无论如何,在一种实施例中,来自标量存储器内的标量查找表的查找本质上涉及在相同的时钟周期期间将相同的数据值广播到执行通道阵列305内的所有执行通道。下面进一步提供关于查找表的使用和操作的其他细节。
图3b概括上文所论述的VLIW指令字的实施例。如图3b所示,VLIW指令字格式包括三个单独指令的字段:(1)标量指令351,其由标量处理器执行;(2)ALU指令352,其由执行通道阵列内的相应ALU以SIMD方式广播和执行;3)存储器指令353,其以部分SIMD方式广播和执行(例如,如果沿执行通道阵列中的同一行的执行通道共享相同的随机存取存储器,则来自不同行中的每一个的一个执行通道实际执行指令(存储器指令353的格式可以包括识别来自每行的哪个执行通道执行指令的操作数))。
还包括一个或多个立即操作数的字段354。可以用指令格式识别指令351、352、353中的哪一个使用哪个立即操作数信息。指令351、352、353中的每一个也包括它们各自的输入操作数和结果信息(例如,用于ALU操作的本地寄存器以及用于存储器访问指令的本地寄存器和存储器地址)。在一种实施例中,在执行通道阵列内的执行通道执行其他两个指令352、353中的任一个之前,由标量处理器执行标量指令351。也就是说,执行VLIW字包括执行标量指令351的第一周期,随后是可以执行其他指令352、353的第二周期(应当指出,在各种实施例中,可以并行执行指令352和353)。
在一种实施例中,由标量处理器执行的标量指令包括发布到表单生成器以从/向数据计算单元的存储器或2D移位寄存器加载/存储表单的命令。在此,表单生成器的操作能够取决于线缓冲器单元的操作或其他变量,这些变量阻止运行前理解表单生成器完成标量处理器发出的任何命令所需的周期数。照此,在一种实施例中,标量指令351对应于或以其他方式促使要向表单生成器发出的命令也包括其他两个指令字段352、353中的无操作(NOOP)指令的任何VLIW字。然后,程序代码输入指令字段352、353的NOOP指令循环,直到表单生成器完成其从/向数据计算单元的加载/存储。在此,在向表单生成器发布命令后,标量处理器可以设置表单生成器在完成命令后重置的互锁寄存器的比特。在NOOP循环期间,标量处理器监视互锁位的比特。当标量处理器检测到表单生成器已完成其命令时,再次开始正常执行。
图4示出数据计算组件401的实施例。如图4所示,数据计算组件401包括执行通道阵列405,其在逻辑上位于二维移位寄存器阵列结构406的“上方”。如上所述,在各种实施例中,由表单生成器提供的图像数据表单被加载到二维移位寄存器406中。然后,执行通道对来自寄存器结构406的表单数据进行操作。
执行通道阵列405与移位寄存器结构406彼此相对固定就位。然而,移位寄存器阵列406内的数据以策略和协调的方式移位,以使执行通道阵列中的每个执行通道处理数据内的不同模板。照此,每个执行通道确定正生成的输出表单中的不同像素的输出图像值。从图4的架构可以清楚看出,执行通道阵列405包括垂直相邻的执行通道以及水平相邻的执行通道,因此重叠模板不仅垂直排列而且水平排列。
数据计算单元401的一些显著架构特征包括尺寸比执行通道阵列405更宽的移位寄存器结构406。也就是说,在执行通道阵列405之外存在寄存器409的“晕圈(halo)”。尽管示出晕圈409存在于执行通道阵列的两侧,但根据实施方式,晕圈可以存在于执行通道阵列405的更少侧(一侧)或更多侧(三侧或四侧)。当数据在执行通道405“下方”移位时,晕圈405用来为溢出执行通道阵列405的边界之外的数据提供“溢出”空间。作为一种简单情形,当处理模板的最左边的像素时,以执行通道阵列405的右边缘为中心的5×5模板需要进一步向右移四个晕圈寄存器位置。为便于绘图,当在名义实施例中两侧(右侧、下侧)的寄存器具有水平连接和垂直连接时,图4示出晕圈右侧的寄存器仅具有水平移位连接并且晕圈下侧的寄存器仅具有垂直移位连接。在各种实施例中,晕圈区域不包括对应的执行通道逻辑来执行图像处理指令(例如,不存在ALU)。然而,各个存储器访问单元(M)存在于晕圈区域位置中的每一个中,使得各个晕圈寄存器位置能够单独地从存储器加载数据并且将数据存储到存储器。
由随机存取存储器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。如下进一步详述,在一种实施例中,移位寄存器实际上通过每阵列位置具有多个存储/寄存器元素(“深度”)来实现,但移位活动限于一个存储元素平面(例如,每周期只有一个存储元素平面能够移位。图5a至图5k描绘出这些更深的寄存器位置中的一个,用于存储来自相应执行通道的结果X。为便于图示,更深的结果寄存器被绘制于它的配对寄存器R2旁边而非其下方。
图5a至图5k集中于计算两个模板,它们的中央位置与执行通道阵列内描绘的一对执行通道位置511对齐。为便于图示,这对执行通道510被绘制为水平的邻居,实际上,根据以下示例,它们是垂直的邻居。
首先如图5a中所示,执行通道以它们的中央模板位置为中心。图5b示出由两个执行通道执行的目标代码。如图5b所示,两个执行通道的程序代码促使移位寄存器阵列内的数据向下移位一个位置并向右移位一个位置。这使两个执行通道对齐到它们各自模板的左上角。然后,程序代码促使它们各自位置中(R2中)的数据加载到R1中。
如图5c所示,程序代码接下来促使这对执行通道将移位寄存器阵列内的数据向左移动一个单元,这使得每个执行通道的相应位置的右边的值移位到每个执行通道位置中。然后,将Rl中的值(先前值)与已移位到执行通道位置中(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移位寄存器硬件可以被设计成支持每周期移位一个以上位置。下面将进一步详细描述随后的实施例。
图6示出阵列执行通道和移位寄存器结构的单元格的另一种更详细的描述(晕圈区域中的寄存器不包括对应的执行通道)。在一种实施例中,与执行通道阵列中的每个位置相关联的执行通道和寄存器空间通过在执行通道阵列的每个节点处实例化如图6所示的电路来实现。如图6所示,单元格包括耦合至由四个寄存器R2至R5组成的寄存器文件602的执行通道601。在任何周期期间,执行通道601可以从寄存器R1至R5中的任一个读取或向其写入。对于需要两个输入操作数的指令,执行通道可以从R1至R5中的任一个检索这两个操作数。
在一种实施例中,实现二维移位寄存器结构是通过在单个周期期间允许寄存器R2至R4中的任一个(唯一)的内容通过输出复用器“移出”到其邻居的寄存器文件中的一个,并且如果其邻居通过输入复用器604使得邻居之间的移位处于相同方向上(例如,全部执行通道向左移位,全部执行通道向右移位等),则将寄存器R2至R4中的任一个(唯一)的内容替换为从对应寄存器“移入”的内容。虽然同一寄存器常使其内容移出并且替换为同一周期内移入的内容,但复用器布置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支持移位操作指令(右、左、上、下)以使二维移位寄存器结构内的数据移位。如上所述,程序控制指令主要由模板处理器的标量处理器执行。
c.图像处理器的配置和线缓冲器单元的操作
图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加载到耦合至模板处理器802的表单生成器单元803以及线缓冲器单元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管理的线群的消耗者内核的数目。通常还包括通道的数目和/或与图像数据相关联的尺寸作为配置信息。
仅举例而言,图9a描绘出使用X、Y坐标来定义图像内的线群。在此,在图像901内可观察到N个线群901_1、901_2、...、901_N。从图9a可以看出,通过参照图像内例如定义线群角点中的一个或多个的X、Y坐标能够很容易定义每个线群。照此,在各种实施例中,用于定义特定线群的线群名称或其他数据结构可以包括与线群相关联的X、Y坐标位置,以便特别识别该线群。
简要回顾图8,应当指出,图8示出在运行期间,表单生成器803可以通过例如包括定义所需数据区域的X、Y坐标信息而从线缓冲器单元801请求“下一个”线群(或线群的一部分)。图9a示出仅由完整的图像数据行组成的名义“全宽”线群。在称为“虚拟高”的替代配置中,线缓冲器单元801最初仅传递线群的第一上部作为图像数据的全宽行。然后,由表单生成器以小于全宽行连续组块来专门请求线群的后续下行并且单独请求。照此,表单生成器进行多次请求,以便获得完全的线群。在此,每个这样的请求可以通过可归属于下一部分X、Y坐标来定义下一部分。
如图9b所示,线缓冲器单元包括存储线群902_1至902_N的存储器901(例如,静态或动态随机存取存储器(SRAM或DRAM))。存储器901可以连同实现线缓冲器单元(以及例如表单生成器和模板处理器)的相同电路一起片上实现或者片外实现。图9b示出为存储器901内的特定图像/帧产生和消耗线群902_1至902_N的各种内核之间的活动。
如图9b所示,产生者内核K1将新线群发送到线缓冲器单元901,以便在分开的时间在存储器901中存储实例P1、P2至PN。在生成新数据表单的模板处理器上执行产生者内核K1。耦合至模板处理器的表单生成器累计表单以形成线群并且将线群转发到线缓冲器单元,该线缓冲器单元将它们存储在存储器中。
此外,如图9b所示,存在两个消耗者内核K2、K3,它们对由产生者内核K1生成的线群902_1至902_N进行操作。在此,消耗者内核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)或者来自相机)并且被解析成线群。在没有消耗者内核的情况下(因为产生者内核是处理器整体程序流程中的最后一个内核),结果线群可以被组合形成输出帧。
d.内核的应用和结构
图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)的形式,并且开发环境可以被配备为实际向开发者呈现正开发的程序代码的表示(在此,流水线被理解为DAG的一种形式)。内核可以由开发者单独开发,和/或内核可以由提供任何底层技术(诸如实际的信号处理器硬件和/或其设计)的实体和/或由第三方(例如,为开发环境编写的内核软件的供应商)提供。照此,可以预期,名义开发环境将包括开发者能以各种方式自由“临时连接”以实现其大型开发工作的整体流程的内核“库”。预期作为这种库一部分的一些基本内核可以包括用于提供以下基本图像处理任务中的任何一个或多个的内核:卷积、去噪、色彩空间转换、边缘与角点检测、锐化、白平衡、伽马校正、色调映射、矩阵乘法、图像配准、金字塔构建、小波变换、分块离散余弦和傅里叶变换。
如上所述,在各种实施例中,每个内核在其自身的模板处理器上运行。例如,参照图10a,内核K1在第一模板处理器上运行,内核K2在第二模板处理器上运行,等等。此外,如上所述,产生内核与消耗内核通过线缓冲器单元相互作用。
图10b描绘出能够将图像处理器配置成实现图10a的DAG流程的方式。如图10b所示,线缓冲器单元1001_1(LBU_1)接收输入图像流并且将所接收的帧解析成线群。交换网络被配置成将线群从LBU_1路由到执行内核K1的第一模板处理器1002_1。来自内核K1的输出图像被格式化为线群并且被转发到第二线缓冲器单元1001_2(LBU_2)。然后,这些线群被转发到执行内核K2的第二模板处理器。
根据图10a,图像信息能够从内核K2“分割”到内核K3_1或K3_2中的任一个内。在此,譬如,内核K3_1和K3_2可以处理与正处理的整体图像相关联的不同通道。例如,内核K3_1可以处理红色(R)图像,而内核K3_2可以处理绿色(G)图像和蓝色(B)图像。替代地,K3_1可以处理视觉图像,而内核K3_2可以处理深度图像(例如,从飞行时间深度成像相机连同视觉图像一起拍摄)。无论如何,图像的全部通道皆由内核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)分别馈送相应执行内核K1、K2、K3和K4的模板处理器1102_1、1102_2、1102_3、1102_4。模板处理器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相同),或者根据图像数据上下文使用两个不同的流水线(例如,一个流水线处理一种通道,另一个流水线处理另一种通道)。
在图11a、图11b和图11c中的每一个图中,应当指出,需要对连接网络1004/1104进行不同的配置,以便通过适当的方式将模板处理器连接到源线群和宿线群。
在各种实施例中,图像处理器包括适当的配置空间(例如,利用配置寄存器和/或随机存取存储器(诸如标量处理器的标量存储器)来实现),其中保留配置信息以实现大量各种配置中的任一种(例如,DAG、图像处理流水线)。一些示例性配置参数包括:(1)源图像数目(例如从相机或大型计算机系统的主存储器流入系统的源图像帧的数目);(2)线群数目(系统中线缓冲器单元内配置的线群的总数);(3)活动模板处理器数目(系统中活动模板处理器的总数);(4)每模板处理器的输入线群数目(一个模板处理器能够处理一个以上输入图像帧,Num_Input_LGs_perStencil本质上指示模板处理器将处理不同输入图像帧的数目);(5)每模板处理器的输出线群数目(一个模板处理器能够处理一个以上输出图像帧,Num_Output_LGs_perStencil本质上指示模板处理器将处理不同输出图像帧的数目);(6)每线群的消耗者数目(对于每个线缓冲器单元中配置的每个线群,Num_Cons_per_LG指示线群具有消耗者的数目)。基于上述系统的任何特征、结构或操作,系统可以接受其他类型的配置信息。
e.自动DAG/流水线代码重构过程
利用前面部分所述的图像处理器配置和操作的上述基本原理,本部分描述编译器可以对内核的DAG执行以实现DAG的更有效的整体实施方式的某些重构过程。如上所述,流水线被理解为DAG的一种形式。
在此,编译器可以被编程成识别某些低效或其他有问题的DAG结构并且自动重构DAG,以减轻低效和/或消除问题。在各种实施例中,软件程序开发工具可以允许程序开发者提供编译器能够用来对程序代码执行一个或多个变换的提示,如下进一步所述,以解决低效问题。
可以由编译器检测并响应的DAG中的低效或问题的示例包括(但不限于):(1)内核的与DAG中的其他内核相比尤其更具计算复杂性;(2)DAG包含比图像处理器中的模板处理器更多或更少的内核;(3)有限的线缓冲器单元存储空间和/或有限的指令存储空间。图12a/图12b/图12c至图16描述编译器可以被设计成响应于这些低效/问题而实现的一些可行重构。
图12a和图12b是针对“水平融合”代码重构。在水平融合的情况下,如图12a所示,DAG的多个内核(例如,它们各自流自相同的内核)被合并成单个内核。在此,图12a示出具有单独K2和K3内核的原始代码序列1201。在由编译器重构之后,创建新代码序列1202,其中内核K2和K3被组合成单个内核K2/K3。
例如,编译器可以响应于DAG/流水线中存在比其他内核更小的内核而由执行水平融合。在此,内核的融合将产生更大的内核,其在大小/计算密集度上比其他内核更具可比性。替代地或组合地,编译器可以响应于原始DAG中存在比模板处理器存更多的内核而执行水平融合。在此,融合将减少DAG中的内核总数(理想情况下,以致不再超过图像处理器中的模板处理器的数目)。
在各种实施例中,水平融合合并彼此独立的多个内核的程序代码(例如,合并两个内核,第一内核不接受作为由第二内核生成的输入信息)。此外,水平融合的内核可以接受来自相同内核的输入信息和/或提供供相同内核消耗的输出信息。图12a示出前一情况,其中融合的内核K2和K3都接受来自内核K1的输入信息。
图12b示出实现水平融合的实施例。在此,新构造的K2/K3内核被设计为正融合的内核的串接。也就是说,在图12b的实施例中,新内核K2/K3由内核K3的程序代码组成,该程序代码在内核K2的程序代码执行1203之后立即开始执行。特别地,新内核K2/K3接受与内核K2和K3的组合相同的输入信息并且提供与内核K2和K3的组合相同的输出信息。再次指出,可以从相同或不同的线缓冲器单元接收输入,并且输出可以将它们相应的输出提供给相同或不同的线缓冲器单元。
在此,参照图12a,如果内核K1为两个不同的线缓冲器单元(馈送K2的第一线缓冲器单元和馈送K3的第二线缓冲器单元)生成线缓冲数据,则无需改变程序流程(内核K2/K3的K2部分从为K2产生的线缓冲器单元中读取,并且内核K2/K3的K3部分从为K3产生的线缓冲中读取)。如果内核K2和K3皆为来自内核K1的相同数据的消耗者(即,内核K1仅写入一个线缓冲器单元并且K2和K3都从该线缓冲器单元中读取),则再次无需改变程序的数据流。在此情形下,内核K2/K3的K2和K3部分都从相同的线缓冲器单元消耗。相似的类推适用于内核K2/K3的输出线缓冲器单元。
在各种实施例中,编译器应当察觉到融合的内核操作所根据的空间速率(每内核调用处理的像素)。在此,正融合的内核可能未必以与原始编写相同的速率操作。例如,由于图像分辨率的差异,这些内核在执行它们相应的算法时可能不会消耗相同数目的周期。例如,下采样内核可能必须在比非下采样的另一个内核需要更多二维移位寄存器移位操作的更宽图像面积上操作。
因此,下采样内核在其完成之前比非下采样内核消耗更多的调用。譬如,下采样内核在其完成之前可能消耗16个周期,而非下采样内核在其完成之前可能仅消耗4个周期。完成率的差异会导致线缓冲器单元的时序问题,该线缓冲器单元期望每次完成的周期在整个内核的运程上恒定。因此,编译器修改内核的代码,使得它们消耗近似相同数目的周期,以完全执行它们相应的算法。通过这样做,线缓冲器不必在中间内核执行期间调整到截然不同的内核算法完成率。
因此,在一种实施例中,编译器向每次完成消耗较少周期的内核添加一个或多个循环,以使内核例如每次完成消耗与每次完成消耗较多周期的内核相同数目的周期。譬如,在上述示例中,非下采样内核将被修改成在其完成之前运行其算法的四个循环。尽管经修改的内核与其一次执行运行的原始版本相比创建四倍的数据,但经修改的内核在其完成之前将消耗16个周期,这与下采样内核相同。可以设想,编译器可以修改一个以上内核的速率,以达到全部内核能够将速率与其相匹配的公共支配周期。
图13a至图13c涉及垂直融合。在垂直融合的情况下,如图13a所示,正融合的内核之间存在产生者/消耗者关系。例如,如图13a所示,内核K1是内核K2的产生者(内核K2是内核K1的消耗者)。在由内核进行重构之后,生成新内核K1/K2,其执行融合的内核K1和K2的功能。
图13b示出新内核的构建。在此,在内核K1之后串接消费内核K2,以实现正确的产生者/消耗者关系。新内核K1/K2的输入对应于内核K1的输入,并且新内核K1/K2的输出对应于内核K2的输出。编译器可以例如响应于正融合的内核的计算复杂性低于DAG中的其他内核和/或DAG中存在比图像处理器内的模板处理器更多的内核而决定施加垂直融合。
如果垂直融合的内核的消耗内核部分需要晕圈区域来执行其任务,则在垂直融合的情况下可能出现问题。回顾上文图4的论述,在各种实施例中,模板处理器内的二维移位寄存器的尺寸可以容纳延伸到存储输出像素值的区域之外的晕圈区域409。
在此,如果垂直融合内核的消耗内核部分需要晕圈区域中的内容,则它无法立即对产生内核部分的输出进行操作。也就是说,由产生者生成的输出数据将保持在执行通道“下方”并且不会延伸到晕圈区域内。如果消费内核部分需要晕圈区域中的图像数据,则若消费内核部分在生成其后立即对产生者部分的输出结果开始操作,则晕圈数据将不可用。
一种解决方案是延迟消耗内核部分的开始,以确保产生者内核部分等到消费内核开始操作时才生成晕圈区域数据。图13c示出该解决方案的示例性描述。在此,边界区域1301对应于产生者内核部分的执行通道区域,并且边界区域1302对应于驻留在产生者内核部分的执行通道区域1301之外的晕圈区域。
相比之下,边界区域1303对应于在产生者内核部分已在区域1301内生成输出之后消费内核部分正操作的执行通道区域。边界区域1304对应于驻留在消耗者内核部分的执行通道区域1303周围的晕圈区域。图13c假设模板处理沿同一行表单以从左到右的方式对表单进行操作,直到完成对该行表单的处理,此时将开始对下一行表单进行处理。
通过延迟消耗内核部分的开始,能够有意地施加区域1301与1303之间存在的偏移或相位差,直到产生内核部分产生可供消耗内核部分使用并且具有如图13c所示的相对定位偏移的输出。特别地,利用这种偏移,已由产生者内核生成并且可供消费内核部分使用的图像数据输出不仅“填充”消费内核部分的执行通道区域1303而且还“填充”其晕环区域1304。照此,消费内核部分具有其正确计算区域1303的输出值所需的数据,并且容许在尝试下一次运行K1之前后接K2的K1的串接操作。
在名义实施例中,产生者内核将其输出数据写入线缓冲器单元,并且消费内核从相同的线缓冲器单元中读取数据。然而,此时正在相同的模板处理器上融合并执行产生内核部分和消耗内核部分,因此由产生内核部分生成的输出数据可能存留在模板处理器本地(例如,在模板处理器RAM407和/或表单生成器的存储器内),而非写回线缓冲器单元。照此,消费内核部分并非从线缓冲器单元中读取数据,而是从模板处理器本地的存储器中读取输出数据。
因此,能够避免模板处理器与线缓冲器单元之间的完整写/读序列。在产生内核部分的输出的其他消耗者未与产生内核部分融合的实施例中,产生内核部分的输出从外部写入线缓冲器单元,因此外部消费内核能够接收产生者的数据。
出于类似理由,图13c还示出由模板处理器实际处理的图像数据的尺寸超过正处理的图像的尺寸。具体地,由产生者内核部分处理附加的空间区域1305、1306,使得产生者内核部分能够生成消耗者内核部分所需的晕圈数据。
图14描绘出可以称为“裂变分割”的另一种限制。在裂变分割的情况下,较大内核被分解成多个较小内核。例如,如图14所示,具有子图A至F的大型初始内核K被分解成两个内核K1和K2,其中新内核K1包括子图A至D,而新内核K2包含子图E和F。例如,如果正分割的内核K的计算复杂性高于DAG中的其他内核和/或其指令覆盖区过大而不适于模板处理器的指令存储器,则可以由编译器施加裂变分割。
作为重构的一部分,应当指出,“store_sheet”命令/指令和“load_sheet”命令/指令在分割较大内核代码的时刻被新插入到整个代码中。具体地,从图14的示例可以看出,较大内核K在接合处1401分割,应当指出,子图D的输出被修改成存储信息表单,并且子图E的输入被修改成加载信息信息。
如上详细论述,由于模板处理器内存在二维移位寄存器阵列,图像数据表单是内核的基本输入数据结构和输出数据结构。照此,在内核能够对数据表单进行操作之前,其必须首先将数据表单加载到模板处理器的二维寄存器空间内。同样,当内核完成一次执行其核心算法时,它将其输出的数据表单从二维移位寄存器写入模板处理器RAM和/或表单生成器RAM。
与这些基本数据结构要求一致,施加裂变分割的部分是新创建的内核输出(图14中的子图D的输出)以及新创建的内核输入(图14中的子图E的输入)。前者需要存储表单命令来写入来自二维移位寄存器阵列的输出数据表单,而前者需要加载表单命令来读取输入二维移位寄存器阵列的输入数据表单。应当指出,Store_Sheet和Load_Sheet命令也对应于内核与线缓冲器单元之间的通信(线缓冲器由多个表单组成)。照此,在裂变之前,子图D未直接馈送线缓冲器单元,而在裂变之后,它这样做。同样地,在裂变之前,子图E未直接从线缓冲器单元接收,而在融合之后,它将会如此。
在一种实施例中,编译器被设计成在某个区域或较大的内核K施加分割接合处1401,使得新创建的单独内核K1、K2在尺寸/计算强度上近似相等。在某些实例中,这可能促使编译器通过迭代循环施加分割接合处1401。例如,子图D和E可以实现循环,其中程序流程从子图E回到子图D,直到循环完成。
在分割接合处1401切入循环的情况下,编译器另外修改程序代码以使循环本身分割。在此,应当指出,如图14所示的裂变分割1401本质上创建具有产生者/消耗者关系的新内核。也就是说,新创建的内核K2从内核K1将其输出线缓冲器写入的线缓冲器单元读取由内核K1创建的线缓冲器。照此,由K1执行循环的前导迭代,由K2执行循环的尾随迭代。
在另一种实施例中,编译器不会尝试分割先前迭代与后续迭代之间具有数据依赖性的循环,而是将整个循环保持在同一内核内。照此,循环的存在可能影响编译器选择施加分割接合处1401的位置(在它们周围,而非穿过它们)。
图15描绘出另一种称为“空间分区”的编译器重构过程。如图15所示,空间分区需要将原始设计成对较大图像进行操作的内核复制到设计成仅对一部分图像进行操作的相同核心算法的多个内核中。
在此,在图15的示例性描绘中,原始内核K1被设计成对整个图像1501进行操作。编译器本质上复制内核K1,使得DAG包括Kl代码的两个实例,即Kl_1和Kl_2。编译器进一步修改新创建的内核的基本Kl代码,以仅涉及它们应处理的图像部分。在图15的示例中,内核K1_1仅对图像1501的左半部分1501_1进行操作,而内核K1_2仅对图像1501的右半部分1501_2进行操作。
照此,编译器将重建内核Kl_1的内核代码以仅请求驻留在图像1501的左半部分1501_1内的线缓冲数据,并且将重建内核K1_2的代码以仅请求驻留在图像1501的右半部分1501_2内的线缓冲数据。经回顾,内核软件能够用其X、Y坐标表示来请求线缓冲器,在各种实施例中,编译器对内核K1和K2的重建需要重新格式化线缓冲器请求,以指定对应于内核应处理的图像部分的坐标。
例如,一旦已接收到足以处理图像的左半部分1501_1的输入线缓冲数据,内核K1_1将避免请求跨越整个图像宽度的坐标,而是请求下一行图像数据。同样地,当开始处理下一行线缓冲数据时,内核Kl_2将具有对应于图像一半的X轴偏移(例如,内核并非在坐标0,Y点要求下一个线缓冲器,而是将在坐标W/2,Y点请求下一个线缓冲器,其中W是整个图像1501沿X轴的宽度。
根据上述调整所请求的线缓冲数据的坐标值的原理,其他图像分区布置也可行。
在典型的实施例中,原始内核K1被设计成从单个线缓冲器单元读取整个图像并且将其输出数据写入另一单个线缓冲器单元。在空间分区之后,内核Kl_1和Kl_2皆可指代图像数据驻留的单个源线缓冲器单元(或者内核Kl_1、Kl_2的输入图像的产生者内核可以被重新配置成将图像的两个副本写入两个单独的线缓冲器单元,内核Kl_1和Kl_2分别从中读取)。然而,如图15所示,在一种实施例中,内核K1_1和K1_2中的每一个将它们的输出数据写入两个单独的线缓冲器单元LB_1和LB_2。
在一种实施例中,施加这种限制的原因在于,如上关于图9a和图9b所述,线缓冲器单元能够服务于多个消耗者,但只能处理一个产生者。照此,单个线缓冲器单元无法处理来自内核Kl_1和Kl_2这两者的输出(每个内核必须写入其自身的线缓冲器单元)。因此,如图15所示,消耗内核K2也被重新配置为空间分区重构的一部分,以从两个不同的线缓冲器单元读取它需要用于图像的两个不同半部的图像数据(LB_1保留左侧图像数据,而LB_2保留右侧图像数据)。也就是说,内核K2被重构,如果其需要左侧图像则向LB_1发出请求,而如果其需要右侧图像数据则向LB_2发出请求。例如,如果K2的算法对整个图像进行操作,则K2也可以被重构成将图像的两个半部合并成单个图像。
图16涉及称为“图形分割”的另一种代码重构过程。在图形分割的情况下,DAG处理的数据量超过图像处理器的内部存储器要求。照此,必须将DAG分割成多个DAG,其中每个DAG处理图像处理器的内部存储空间限制内的数据量。在此,在各种实施例中,线缓冲器单元、表单发生器和模板处理器各自具有相关的存储器。如果单个DAG的存储要求超过这些存储器中的一个或多个的容量,则创建多个DAG。
图16中示出创建DAG1608的示例,其目的是重复将极大的输入图像1601下采样为更小的低密度输出图像1607中。DAG/流水线1608由六个内核K1至K6组成,其中每个内核将较大的输入图像下采样为较小的输出图像(例如,内核K1将较大的输入图像1601下采样为较小的图像1602,内核K2将图像1602下采样为较小的图像1603,内核K3将图像1603下采样为较小的图像1604等)。
在例如初始输入图像1601极大的实施方式中,不太可能使全部数据/指令/上下文拟合到图像处理器的内部存储空间中。照此,作为响应,编译器将分析内核K1至K6的存储器资源需求并且将初始较大的DAG/流水线1608解析成一组较小的DAG/流水线1609、1610、1611,它们将依序操作并且其中每个均不需要比图像处理器中可用资源更多的内部存储器资源。
回顾图1的论述,DAG开始将来自外部存储器的输入数据加载到线缓冲器单元中,并且将来自线缓冲器单元的输出数据写入外部存储器后结束。因此,图16的初始DAG/流水线1608包括在内核K1的输入时将来自外部存储器的输入数据传送到线缓冲器单元的命令/指令,而且还包括在内核K6的输出时将来自线缓冲器单元的输出数据传送到外部存储器的命令/指令。
在编译器将原始的较大DAG/流水线1608解析成较小DAG/流水线1609、1610、1611之后,编译器将另外插入命令/指令以在内核K2和K4的输入时(即,在新的较小DAG/流水线1610和1611的输入时)将来自外部存储器的输入数据加载到的线缓冲器单元中。编译器还将插入在内核K1和K3的输出时(即,在新的较小DAG/流水线1609和1610的输出时)将来自线缓冲器单元的输出数据加载到外部存储器中的命令/指令。应当指出,在插入这些新命令/指令的位置,原始DAG/流水线1608指定向/从线缓冲器单元而非外部存储器写入/读取数据(因为同一DAG/流水线内的内核彼此通过线缓冲器单元馈送/获取)。照此,编译器将删除这些原始命令/指令。
应当指出,所描述的各种重构最终可以响应于上述任何低效问题而执行。譬如,在一系列融合之后,编译器可以最终执行图形分割。
在前面的论述中指出,内核本身可能是当最终编译成目标代码时由许多分支和相关基本代码块组成的大型复杂软件例程。照此,内核中的子图本身也可能当最终编译成目标代码时由多个分支和基本目标代码块组成。
图17a示出例如由如上所述的编译器执行的方法。如图17a所示,所述方法包括1701,编译针对图像处理器的程序代码,该图像处理器具有由相应的二维执行通道和移位寄存器电路结构组成的可编程模板处理器,所述程序代码用于实现有向无环图并且由多个内核组成,这些内核将在各个所述模板处理器上执行,其中编译包括以下任何一个:识别程序代码中的内核数目不同于图像处理器中的模板处理器的数目;识别内核中的至少一个的计算密集度高于内核中的另一个;识别程序代码的资源需求超过图像处理器的存储器容量。该方法进一步包括1702响应于以上识别中的任何一个,执行以下任何一项:水平融合内核;垂直融合内核;将所述内核中的一个分裂成多个内核;将内核空间分区成多个空间分区内核;将有向无环图分割成较小的图。
图17b描绘出当编译用于在图像处理器(诸如具有上述任何硬件特征的图像处理器)上执行的程序代码时,可以与任何上述编译器过程配用的应用软件开发和模拟环境1721。在此,开发者可以通过以与整体预期图像变换一致的策略顺序布置内核而开发综合图像处理函数(例如,流水线中的每一级执行专门图像处理任务的图像处理流水线、一些其他DAG规定的例程集等)。可以从库1722调用内核,和/或开发者可以开发一个或多个定制内核。
库1722内的内核可以由内核的第三方供应商和/或任何底层技术的提供者(例如,包括目标硬件图像处理器的硬件平台的供应商或目标硬件图像处理器的供应商)提供(例如,作为其设计或作为实际硬件提供)。
至于定制开发内核,在许多情况下,开发者仅需为单线程1723编写程序代码。也就是说,开发者仅需通过参考相对于输出像素位置的输入像素值(例如,利用前述位置相对的存储器访问指令格式)来编写确定单个输出像素值的程序代码。在满足单线程1723的操作后,开发环境则可以在相应的虚拟处理器上自动实例化线程代码的多个实例,以实现操作图像表面区域的处理器阵列上的内核。图像表面区域可以是图像帧的一部分(诸如线群)。
在各种实施例中,定制线程程序代码被写入虚拟处理器ISA的目标代码(或者编译到虚拟处理器ISA目标代码的高级语言)。可以在模拟运行环境中执行定制内核程序代码的执行模拟,该模拟运行环境包括访问根据存储器模型组织的存储器的虚拟处理器。在此,实例化虚拟处理器1724和包含该模型的存储器1725的软件模型(面向对象或以其他方式)。
然后,虚拟处理器模型1724模拟线程代码1723的执行。在满足线程的性能、其较大内核以及该内核所属的任何较大函数后,整体被编译成底层硬件的实际目标代码。整个模拟环境1721可以被实现为在计算机系统(例如,工作站)1726上运行的软件。
f.实现实施例
有必要指出,上述各种图像处理器架构特征未必限于传统意义上的图像处理,因此可以应用于可以(或可以不)促使图像处理器被重新表征的其他应用。例如,如果上述各种图像处理器体系结构特征中的任何一个被用于创建和/或生成和/或渲染动画,而非处理实际的相机图像,则图像处理器可以被表征为图形处理单元。此外,上述图像处理器架构特征可以应用于其他技术应用,诸如视频处理、视觉处理、图像识别和/或机器学习。通过这种方式应用,图像处理器可以(例如,作为协处理器)与更通用的处理器(例如,其是计算系统的CPU或计算系统的CPU的一部分)集成,或者可以是计算系统内的独立处理器。
上述硬件设计实施例可以体现在半导体芯片内和/或体现为用于最终瞄准半导体制造工艺的电路设计的描述。在后一种情况下,这种电路描述可以采取(例如,VHDL或Verilog)寄存器传输级(RTL)电路描述、门级电路描述、晶体管级电路描述或掩码描述或者各种组合的形式。电路描述通常体现在计算机可读存储介质(诸如CD-ROM或其他类型的存储技术)上。
从前面部分可以认识到,如上所述的图像处理器可以在计算机系统上以硬件实现(例如,作为处理来自手持设备的相机的数据的手持设备的片上系统(SOC)的一部分)。在图像处理器体现为硬件电路的情况下,应当指出,可以直接从相机接收由图像处理器处理的图像数据。在此,图像处理器可以是分立相机的一部分,或者是具有集成相机的计算系统的一部分。在后一种情况下,可以直接从相机或从计算系统的系统存储器接收图像数据(例如,相机将其图像数据发送到系统存储器而非图像处理器)。另外应当指出,前面部分中所描述的许多功能可以适用于图形处理器单元(渲染动画)。
图18提供计算系统的示例性描述。下文描述的计算系统的许多组件适用于具有集成相机和相关图像处理器的计算系统(例如,诸如智能电话或平板型计算机的手持设备)。普通技术人员将能够容易地区分两者。此外,图18的计算系统还包括高性能计算系统的许多特征,诸如用于实现上文参照图17c论述的开发环境的工作站。
如图18所示,基本计算系统可以包括中央处理单元1801(其可以包括例如多个通用处理核1815_1至1215_N以及布置在多核处理器或应用处理器上的主存储器控制器1817)、系统存储器1802、显示器1803(例如,触摸屏、平板)、本地有线点对点链路(例如,USB)接口1804、各种网络I/O功能1805(诸如以太网接口和/或蜂窝调制解调器子系统)、无线局域网(例如,WiFi)接口1806、无线点对点链路(例如,蓝牙)接口1807和全球定位系统接口1808、各种传感器12091至1809_N、一个或更多相机1810、电池1811、电源管理控制单元1812、扬声器和麦克风1813以及音频编码器/解码器1814。
应用处理器或多核处理器1850可以包括其CPU 1201内的一个或多个通用处理核1815、一个或多个图形处理单元1816、存储器管理功能1817(例如,存储器控制器)、I/O控制功能1818和图像处理单元1819。通用处理核1815通常执行计算系统的操作系统和应用软件。图形处理单元1816通常执行图形密集功能,以例如生成在显示器1803上呈现的图形信息。存储器控制功能1817与系统存储器1802对接,以向/从系统存储器1802写入/读取数据。电源管理控制单元1812通常控制系统1800的功耗。
图像处理单元1819可以根据前面部分中详细描述的任何图像处理单元实施例来实现。替代地或组合地,IPU 1819可以耦合至GPU 1816和CPU 1801中的任一者或两者作为其协处理器。此外,在各种实施例中,GPU 1816可以实现为上文详细描述的任意图像处理器特征。
触摸屏显示器1803、通信接口1804-1807、GPS接口1808、传感器1809、相机1810和扬声器/麦克风、编解码器1813、1814中的每一个均可以被视为相对于整个计算系统的各种形式的I/O(例如,输入和/或输出),在适当情况下,所述整个计算系统也包括集成的外围设备(例如,一个或多个相机1810)。根据实施方式,这些I/O组件中的各种I/O组件可以集成在应用处理器/多核处理器1850上,或者可以位于芯片外部或应用处理器/多核处理器1850的封装外部。
在一种实施例中,一个或多个相机1810包括能够测量相机与其视场中的对象之间的深度的深度相机。在应用处理器或其他处理器的通用CPU核(或具有指令执行流水线以执行程序代码的其他功能块)上执行的应用软件、操作系统软件、设备驱动软件和/或固件可以执行上述任何功能。
本发明的实施例可以包括如上所述的各种过程。这些过程可以体现在机器可执行指令中。这些指令可以用于使通用或专用处理器执行某些过程。替代地,这些过程可以由包含用于执行过程的硬连线和/或可编程逻辑的特定硬件组件或者由编程的计算机组件和定制硬件组件的任何组合来执行。
还可以提供本发明的元素作为用于存储机器可执行指令的机器可读介质。机器可读介质可以包括但不限于软盘、光盘、CD-ROM和磁光盘、FLASH存储器、ROM、RAM、EPROM、EEPROM、磁卡或光卡、传播媒体或适于存储电子指令的其他类型媒体/机器可读介质。例如,本发明可以作为计算机程序下载,该计算机程序可以通过载波或其他传播介质中体现的数据信号经由通信链路(例如,调制解调器或网络连接)从远程计算机(例如,服务器)传送到请求计算机(例如,客户端)。
在前述说明书中,已参照本发明的具体示例性实施例对本发明予以描述。然而,在不脱离如所附权利要求所述的本发明更宽的精神和范围的情况下,显然可以对其作出各种修改和更改。因此,说明书和附图应被视为说明而非限制性意义。
权利要求书(按照条约第19条的修改)
1.一种方法,包括:
编译针对具有可编程处理核的图像处理器的程序代码,每个处理核包括二维执行通道阵列电路结构和二维移位寄存器阵列电路结构,所述程序代码用于实现有向无环图并且由多个内核组成,所述内核每个将在所述处理核中的不同处理核上执行,其中,所述编译包括:
(a)确定所述程序代码中的内核的数目不同于所述图像处理器中的处理核的数目;
(b)响应于上述(a),执行以下中的任何一项以改变用于实现所述有向无环图的内核的数目:
水平融合内核;
垂直融合内核;
将内核空间分区成多个空间分区内核;
将有向无环图分割成多个有向无环图。
2.根据权利要求1所述的方法,其中,水平融合内核进一步包括串接程序流,使得第一融合内核先于第二融合内核。
3.根据权利要求2所述的方法,其中,水平融合内核进一步包括修改所述第一融合内核和所述第二融合内核中的至少一个的每次完成所消耗的调用。
4.根据权利要求3所述的方法,其中,所述修改进一步包括将一个或多个循环添加到表征为每次完成所消耗的周期比另一个融合内核少的融合内核。
5.根据任一项前述权利要求所述的方法,其中,垂直融合内核进一步包括施加程序代码以延迟消耗融合内核的开始。
6.根据权利要求5所述的方法,其中,施加所述延迟,以确保驻留于要执行所述垂直融合内核的处理核的执行通道阵列之外的寄存器空间的晕圈区域将包括消耗融合内核所依赖的数据。
7.根据任一项前述权利要求所述的方法,其中,关于上述a),处理核多于内核。
8.根据任一项前述权利要求所述的方法,其中,所述空间分区进一步包括调整所述多个空间分区内核内的内核的X、Y坐标值,使得所述多个空间分区内核参考它们各自的图像部分。
9.根据任一项前述权利要求所述的方法,其中,将有向无环图分割成多个有向无环图进一步包括在输出小程序中的一个时添加将数据存储到在所述图像处理器外部的存储器的指令和/或命令以及在输入所述小程序中的另一个时添加从在所述图像处理器外部的存储器加载数据的指令和/或命令。
10.根据权利要求9所述的方法,其中,所述多个有向无环图被配置成写入它们各自在所述图像处理器内的相应线缓冲器单元。
11.一种方法,包括:
编译针对具有可编程处理核的图像处理器的程序代码,每个处理核包括二维执行通道阵列电路结构和二维移位寄存器阵列电路结构,所述程序代码用于实现有向无环图并且由多个内核组成,所述内核每个将在所述处理核中的不同处理核上执行,其中,所述编译包括:
(a)确定所述内核中的至少一个的计算密集度高于所述内核中的另一个;
(b)响应于上述(a),执行以下中的任何一项:
水平融合内核;
垂直融合内核;
将所述内核中的一个分裂成多个内核;
将内核空间分区成多个空间分区内核;
将有向无环图分割成多个有向无环图。
12.根据权利要求11所述的方法,其中,水平融合内核进一步包括串接程序流,使得第一融合内核先于第二融合内核。
13.根据权利要求11或12所述的方法,其中,垂直融合内核进一步包括施加程序代码以延迟消耗融合内核的开始。
14.根据权利要求11至13中的任一项所述的方法,其中,将所述内核中的一个分裂成多个内核进一步包括:在输出所述多个内核中的一个时添加存储数据表单的指令和/或命令,所述数据表单由将执行所述多个内核中的一个内核的处理核的二维移位寄存器阵列结构提供;以及在输入所述多个内核中的另一个时添加加载数据表单的指令和/或命令,所述数据表单将被加载到将执行所述多个内核中的另一个内核的处理核的二维移位寄存器阵列结构中。
15.根据权利要求11至14中的任一项所述的方法,其中,空间分区进一步包括调整所述多个空间分区内核内的内核的X、Y坐标值,使得所述多个空间分区内核参考它们各自的图像部分。
16.根据权利要求11至15中的任一项所述的方法,其中,将有向无环图分割成多个有向无环图进一步包括在输出作为结果的小程序中的一个时添加将数据存储到在所述图像处理器外部的存储器的指令和/或命令以及在输入所述作为结果的小程序中的另一个时添加从在所述图像处理器外部的存储器加载数据的指令和/或命令。
17.一种方法,包括:
编译针对具有可编程处理核的图像处理器的程序代码,每个处理核包括二维执行通道阵列电路结构和二维移位寄存器阵列电路结构,所述程序代码用于实现有向无环图并且由多个内核组成,所述内核每个将在所述处理核中的不同处理核上执行,其中,所述编译包括:
(a)确定所述程序代码的资源需求超过所述图像处理器的存储器容量;
(b)响应于上述(a),执行以下中的任何一项:
将所述内核中的一个分裂成多个内核;
将内核空间分区成多个空间分区内核;
将有向无环图分割成多个有向无环图。
18.根据权利要求17所述的方法,其中,空间分区进一步包括调整所述多个空间分区内核内的内核的X、Y坐标值,使得所述多个空间分区内核参考它们各自的图像部分。
19.根据权利要求17或18所述的方法,其中,将有向无环图分割成多个有向无环图进一步包括在输出小程序中的一个时添加将数据存储到在所述图像处理器外部的存储器的指令和/或命令以及在输入所述小程序中的另一个时添加从在所述图像处理器外部的存储器加载数据的指令和/或命令。
20.根据权利要求19所述的方法,其中,所述图像处理器包括在产生和消耗在不同处理核上执行的内核之间存储和转发图像数据的线缓冲器单元,并且其中,多个有向无环图被配置成写入它们各自在所述图像处理器内的所述线缓冲器单元中的相应线缓冲器单元。
21.一种包含用于执行任一项前述权利要求所述的方法的程序代码的机器可读存储介质。
Claims (21)
1.一种方法,包括:
编译针对具有可编程模板处理器的图像处理器的程序代码,每个模板处理器包括二维执行通道和移位寄存器电路结构,所述程序代码用于实现有向无环图并且由多个内核组成,所述内核将在所述模板处理器中的相应模板处理器上执行,其中,所述编译包括:
(a)确定所述程序代码中的内核的数目不同于所述图像处理器中的模板处理器的数目;
(b)响应于上述(a),执行以下中的任何一项:
水平融合内核;
垂直融合内核;
将内核空间分区成多个空间分区内核;
将有向无环图分割成多个有向无环图。
2.根据权利要求1所述的方法,其中,水平融合内核进一步包括串接程序流,使得第一融合内核先于第二融合内核。
3.根据权利要求2所述的方法,其中,水平融合内核进一步包括修改所述第一融合内核和所述第二融合内核中的至少一个的每次完成所消耗的调用。
4.根据权利要求3所述的方法,其中,所述修改进一步包括将一个或多个循环添加到具有每次完成所消耗的调用更少的融合内核。
5.根据任一项前述权利要求所述的方法,其中,垂直融合内核进一步包括施加程序代码以延迟消耗融合内核的开始。
6.根据权利要求5所述的方法,其中,施加所述延迟,以确保驻留于要执行所述垂直融合内核的模板处理器的执行通道空间之外的寄存器空间的晕圈区域将包括消耗融合内核所依赖的数据。
7.根据任一项前述权利要求所述的方法,其中,模板处理器多于内核。
8.根据任一项前述权利要求所述的方法,其中,所述空间分区进一步包括调整所述多个空间分区内核内的内核的X、Y坐标值,使得所述多个空间分区内核参考它们各自的图像部分。
9.根据任一项前述权利要求所述的方法,其中,将有向无环图分割成多个有向无环图进一步包括在输出小程序中的一个时添加将数据存储到在所述图像处理器外部的存储器的指令和/或命令以及在输入所述小程序中的另一个时添加从在所述图像处理器外部的存储器加载数据的指令和/或命令。
10.根据权利要求9所述的方法,其中,所述多个有向无环图被配置成写入它们各自在所述图像处理器内的相应线缓冲器单元。
11.一种方法,包括:
编译针对具有可编程模板处理器的图像处理器的程序代码,每个模板处理器包括二维执行通道和移位寄存器电路结构,所述程序代码用于实现有向无环图并且由多个内核组成,所述内核将在所述模板处理器中的相应模板处理器上执行,其中,所述编译包括:
(a)确定所述内核中的至少一个的计算密集度高于所述内核中的另一个;
(b)响应于上述(a),执行以下中的任何一项:
水平融合内核;
垂直融合内核;
将所述内核中的一个分裂成多个内核;
将内核空间分区成多个空间分区内核;
将有向无环图分割成多个有向无环图。
12.根据权利要求11所述的方法,其中,水平融合内核进一步包括串接程序流,使得第一融合内核先于第二融合内核。
13.根据权利要求11或12所述的方法,其中,垂直融合内核进一步包括施加程序代码以延迟消耗融合内核的开始。
14.根据权利要求11至13中的任一项所述的方法,其中,将所述内核中的一个分裂成多个内核进一步包括在输出所述多个内核中的一个时添加存储数据表单的指令和/或命令以及在输入所述多个内核中的另一个时添加加载数据表单的指令和/或命令。
15.根据权利要求11至14中的任一项所述的方法,其中,空间分区进一步包括调整所述多个空间分区内核内的内核的X、Y坐标值,使得所述多个空间分区内核参考它们各自的图像部分。
16.根据权利要求11至15中的任一项所述的方法,其中,将有向无环图分割成多个有向无环图进一步包括在输出小程序中的一个时添加将数据存储到在所述图像处理器外部的存储器的指令和/或命令以及在输入所述小程序中的另一个时添加从在所述图像处理器外部的存储器加载数据的指令和/或命令。
17.一种方法,包括:
编译针对具有可编程模板处理器的图像处理器的程序代码,每个模板处理器包括二维执行通道和移位寄存器电路结构,所述程序代码用于实现有向无环图并且由多个内核组成,所述内核将在所述模板处理器中的相应模板处理器上执行,其中,所述编译包括:
(a)确定所述程序代码的资源需求超过所述图像处理器的存储器容量;
(b)响应于上述(a),执行以下中的任何一项:
将所述内核中的一个分裂成多个内核;
将内核空间分区成多个空间分区内核;
将有向无环图分割成多个有向无环图。
18.根据权利要求17所述的方法,其中,空间分区进一步包括调整所述多个空间分区内核内的内核的X、Y坐标值,使得所述多个空间分区内核参考它们各自的图像部分。
19.根据权利要求17或18所述的方法,其中,将有向无环图分割成多个有向无环图进一步包括在输出小程序中的一个时添加将数据存储到在所述图像处理器外部的存储器的指令和/或命令以及在输入所述小程序中的另一个时添加从在所述图像处理器外部的存储器加载数据的指令和/或命令。
20.根据权利要求19所述的方法,其中,所述多个有向无环图被配置成写入它们各自在所述图像处理器内的相应线缓冲器单元。
21.一种包含用于执行任一项前述权利要求所述的方法的程序代码的机器可读存储介质。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662300684P | 2016-02-26 | 2016-02-26 | |
US62/300,684 | 2016-02-26 | ||
US15/389,113 | 2016-12-22 | ||
US15/389,113 US10387988B2 (en) | 2016-02-26 | 2016-12-22 | Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform |
PCT/US2016/068932 WO2017146816A1 (en) | 2016-02-26 | 2016-12-28 | Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108541321A true CN108541321A (zh) | 2018-09-14 |
CN108541321B CN108541321B (zh) | 2023-04-18 |
Family
ID=59678542
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680080956.4A Active CN108541321B (zh) | 2016-02-26 | 2016-12-28 | 将程序代码映射到高性能、高功效的可编程图像处理硬件平台的编译技术 |
Country Status (7)
Country | Link |
---|---|
US (3) | US10387988B2 (zh) |
EP (1) | EP3420527B1 (zh) |
JP (2) | JP6704056B2 (zh) |
KR (1) | KR102009906B1 (zh) |
CN (1) | CN108541321B (zh) |
TW (2) | TWI614689B (zh) |
WO (1) | WO2017146816A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110399124A (zh) * | 2019-07-19 | 2019-11-01 | 浪潮电子信息产业股份有限公司 | 一种代码生成方法、装置、设备及可读存储介质 |
CN112558938A (zh) * | 2020-12-16 | 2021-03-26 | 中国科学院空天信息创新研究院 | 一种基于有向无环图的机器学习工作流调度方法及系统 |
CN116484822A (zh) * | 2023-06-26 | 2023-07-25 | 和创(北京)科技股份有限公司 | 表单字段表达式循环依赖计算方法及装置 |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10387988B2 (en) * | 2016-02-26 | 2019-08-20 | Google Llc | Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform |
US10204396B2 (en) * | 2016-02-26 | 2019-02-12 | Google Llc | Compiler managed memory for image processor |
JP6534492B2 (ja) * | 2016-03-24 | 2019-06-26 | 富士フイルム株式会社 | 画像処理装置、画像処理方法、及び画像処理プログラム |
US10534639B2 (en) * | 2017-07-06 | 2020-01-14 | Bitfusion.io, Inc. | Virtualization of multiple coprocessors |
JP2019074967A (ja) * | 2017-10-17 | 2019-05-16 | キヤノン株式会社 | フィルタ処理装置およびその制御方法 |
CN111316615B (zh) | 2017-11-09 | 2024-02-13 | 区块链控股有限公司 | 使用调解器计算机系统确保计算机程序正确执行的系统和方法 |
US20210377041A1 (en) | 2017-11-09 | 2021-12-02 | nChain Holdings Limited | System for recording verification keys on a blockchain |
US11683164B2 (en) | 2017-12-13 | 2023-06-20 | Nchain Licensing Ag | System and method for securely sharing cryptographic material |
US10983583B2 (en) * | 2018-08-23 | 2021-04-20 | Apple Inc. | Electronic display reduced blanking duration systems and methods |
CN112673352A (zh) * | 2018-09-11 | 2021-04-16 | 华为技术有限公司 | 顺序计算dag的异构调度 |
KR102023855B1 (ko) * | 2018-12-05 | 2019-09-20 | 전자부품연구원 | 딥러닝 하드웨어 가속장치 |
CN110147236B (zh) * | 2019-04-30 | 2023-01-31 | 创新先进技术有限公司 | 代码编译方法及装置 |
US10552121B1 (en) * | 2019-05-07 | 2020-02-04 | Capital One Services, Llc | System and method for dynamic process flow control based on real-time events |
DE102019129362B4 (de) | 2019-10-30 | 2023-09-07 | Chie-Hee Cho-Nöth | Vorrichtung und Verfahren zur Messung der Kerntemperatur eines menschlichen oder tierischen Körpers unter MRT-Bedingungen |
WO2021137669A1 (ko) * | 2019-12-30 | 2021-07-08 | 매니코어소프트주식회사 | 딥러닝을 위한 가속기용 프로그램 생성 방법 |
KR102490539B1 (ko) * | 2019-12-30 | 2023-01-19 | 주식회사 모레 | 딥러닝을 위한 가속기용 프로그램 생성 방법 |
WO2022064828A1 (ja) * | 2020-09-28 | 2022-03-31 | 日本電気株式会社 | 情報処理装置、情報処理方法及び記憶媒体 |
CN112860267B (zh) * | 2021-04-23 | 2021-07-30 | 武汉深之度科技有限公司 | 一种内核裁剪方法及计算设备 |
BE1029306B1 (de) * | 2021-04-30 | 2023-07-14 | Zebra Technologies | Industrielles ethernet-konfigurationswerkzeug mit vorschaufunktionen |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101556543A (zh) * | 2008-04-09 | 2009-10-14 | 辉达公司 | 由通用处理器执行重定目标的图形处理器加速代码 |
US20130091507A1 (en) * | 2011-10-11 | 2013-04-11 | Nec Laboratories America, Inc. | Optimizing data warehousing applications for gpus using dynamic stream scheduling and dispatch of fused and split kernels |
CN103870246A (zh) * | 2012-12-10 | 2014-06-18 | 辉达公司 | 用于线程的simd执行的编译器控制区调度 |
US20140204232A1 (en) * | 2013-01-24 | 2014-07-24 | Analog Devices Technology | Descriptor-based stream processor for image processing and method associated therewith |
CN110574011A (zh) * | 2017-05-12 | 2019-12-13 | 谷歌有限责任公司 | 每线缓冲器单元存储器分配的确定 |
Family Cites Families (84)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US156284A (en) | 1874-10-27 | Improvement in railway-car brakes | ||
US4445177A (en) | 1981-05-22 | 1984-04-24 | Data General Corporation | Digital data processing system utilizing a unique arithmetic logic unit for handling uniquely identifiable addresses for operands and instructions |
DE3851005T2 (de) | 1987-06-01 | 1995-04-20 | Applied Intelligent Syst Inc | Paralleles Nachbarverarbeitungssystem und -Verfahren. |
US4935894A (en) | 1987-08-31 | 1990-06-19 | Motorola, Inc. | Multi-processor, multi-bus system with bus interface comprising FIFO register stocks for receiving and transmitting data and control information |
US5253308A (en) | 1989-06-21 | 1993-10-12 | Amber Engineering, Inc. | Massively parallel digital image data processor using pixel-mapped input/output and relative indexed addressing |
WO1994009595A1 (en) | 1991-09-20 | 1994-04-28 | Shaw Venson M | Method and apparatus including system architecture for multimedia communications |
JP3482660B2 (ja) | 1993-09-08 | 2003-12-22 | ソニー株式会社 | 画像データ処理装置および画像データ処理方法 |
US5612693A (en) | 1994-12-14 | 1997-03-18 | International Business Machines Corporation | Sliding window data compression using a toroidal bit shift register |
JP3573755B2 (ja) | 1996-01-15 | 2004-10-06 | シーメンス アクチエンゲゼルシヤフト | 画像処理プロセッサ |
US5892962A (en) | 1996-11-12 | 1999-04-06 | Lucent Technologies Inc. | FPGA-based processor |
US6366289B1 (en) | 1998-07-17 | 2002-04-02 | Microsoft Corporation | Method and system for managing a display image in compressed and uncompressed blocks |
US6587158B1 (en) | 1998-07-23 | 2003-07-01 | Dvdo, Inc. | Method and apparatus for reducing on-chip memory in vertical video processing |
US7010177B1 (en) | 1998-08-27 | 2006-03-07 | Intel Corporation | Portability of digital images |
WO2000055810A1 (fr) | 1999-03-16 | 2000-09-21 | Hamamatsu Photonics K. K. | Capteur de vision ultra-rapide |
JP3922859B2 (ja) | 1999-12-28 | 2007-05-30 | 株式会社リコー | 画像処理装置、画像処理方法およびその方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体 |
US6745319B1 (en) | 2000-02-18 | 2004-06-01 | Texas Instruments Incorporated | Microprocessor with instructions for shuffling and dealing data |
US6728862B1 (en) | 2000-05-22 | 2004-04-27 | Gazelle Technology Corporation | Processor array and parallel data processing methods |
US6728722B1 (en) | 2000-08-28 | 2004-04-27 | Sun Microsystems, Inc. | General data structure for describing logical data spaces |
US7286717B2 (en) | 2001-10-31 | 2007-10-23 | Ricoh Company, Ltd. | Image data processing device processing a plurality of series of data items simultaneously in parallel |
JP4146654B2 (ja) | 2002-02-28 | 2008-09-10 | 株式会社リコー | 画像処理回路、複合画像処理回路、および、画像形成装置 |
US9170812B2 (en) | 2002-03-21 | 2015-10-27 | Pact Xpp Technologies Ag | Data processing system having integrated pipelined array data processor |
AU2003221680A1 (en) | 2002-04-09 | 2003-10-27 | The Research Foundation Of State University Of New York | Multiplier-based processor-in-memory architectures for image and graphics processing |
WO2004021176A2 (de) | 2002-08-07 | 2004-03-11 | Pact Xpp Technologies Ag | Verfahren und vorrichtung zur datenverarbeitung |
US7624174B2 (en) * | 2003-05-22 | 2009-11-24 | Microsoft Corporation | Self-learning method and system for detecting abnormalities |
US20060044576A1 (en) | 2004-07-30 | 2006-03-02 | Kabushiki Kaisha Toshiba | Apparatus for image processing |
US8578389B1 (en) * | 2004-05-04 | 2013-11-05 | Oracle America, Inc. | Method and system for merging directed acyclic graphs representing data flow codes |
US7667764B2 (en) | 2004-06-04 | 2010-02-23 | Konica Minolta Holdings, Inc. | Image sensing apparatus |
JP4219887B2 (ja) | 2004-12-28 | 2009-02-04 | 富士通マイクロエレクトロニクス株式会社 | 画像処理装置及び画像処理方法 |
US20100122105A1 (en) | 2005-04-28 | 2010-05-13 | The University Court Of The University Of Edinburgh | Reconfigurable instruction cell array |
US7882339B2 (en) | 2005-06-23 | 2011-02-01 | Intel Corporation | Primitives to enhance thread-level speculation |
US7953158B2 (en) * | 2005-06-30 | 2011-05-31 | Intel Corporation | Computation transformations for streaming applications on multiprocessors |
JP2007067917A (ja) | 2005-08-31 | 2007-03-15 | Matsushita Electric Ind Co Ltd | 画像データ処理装置 |
US7602974B2 (en) | 2005-10-21 | 2009-10-13 | Mobilic Technology (Cayman) Corp. | Universal fixed-pixel-size ISP scheme |
FR2895103B1 (fr) | 2005-12-19 | 2008-02-22 | Dxo Labs Sa | Procede et systeme de traitement de donnees numeriques |
US7802073B1 (en) | 2006-03-29 | 2010-09-21 | Oracle America, Inc. | Virtual core management |
US8438365B2 (en) * | 2006-10-06 | 2013-05-07 | Calos Fund Limited Liability Company | Efficient data loading in a data-parallel processor |
US20080111823A1 (en) | 2006-11-13 | 2008-05-15 | Faraday Technology Corp. | Graphics processing system |
EP1927949A1 (en) * | 2006-12-01 | 2008-06-04 | Thomson Licensing | Array of processing elements with local registers |
US8321849B2 (en) | 2007-01-26 | 2012-11-27 | Nvidia Corporation | Virtual architecture and instruction set for parallel thread computing |
US20080244222A1 (en) | 2007-03-30 | 2008-10-02 | Intel Corporation | Many-core processing using virtual processors |
JP4389976B2 (ja) | 2007-06-29 | 2009-12-24 | ブラザー工業株式会社 | 画像処理装置および画像処理プログラム |
EP2665256B1 (en) | 2007-09-05 | 2015-11-18 | Tohoku University | Solid-state image sensor and drive method for the same |
US8174534B2 (en) * | 2007-12-06 | 2012-05-08 | Via Technologies, Inc. | Shader processing systems and methods |
US8106914B2 (en) * | 2007-12-07 | 2012-01-31 | Nvidia Corporation | Fused multiply-add functional unit |
US7995845B2 (en) * | 2008-01-30 | 2011-08-09 | Qualcomm Incorporated | Digital signal pattern detection and classification using kernel fusion |
CN102047241B (zh) * | 2008-05-30 | 2014-03-12 | 先进微装置公司 | 本地与全局数据共享 |
JP4999791B2 (ja) | 2008-06-30 | 2012-08-15 | キヤノン株式会社 | 情報処理装置、その制御方法、及びプログラム |
US9690591B2 (en) | 2008-10-30 | 2017-06-27 | Intel Corporation | System and method for fusing instructions queued during a time window defined by a delay counter |
US8456480B2 (en) * | 2009-01-14 | 2013-06-04 | Calos Fund Limited Liability Company | Method for chaining image-processing functions on a SIMD processor |
KR101572879B1 (ko) * | 2009-04-29 | 2015-12-01 | 삼성전자주식회사 | 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법 |
US9354944B2 (en) * | 2009-07-27 | 2016-05-31 | Advanced Micro Devices, Inc. | Mapping processing logic having data-parallel threads across processors |
US20110055495A1 (en) | 2009-08-28 | 2011-03-03 | Qualcomm Incorporated | Memory Controller Page Management Devices, Systems, and Methods |
US8976195B1 (en) | 2009-10-14 | 2015-03-10 | Nvidia Corporation | Generating clip state for a batch of vertices |
US8436857B2 (en) | 2009-10-20 | 2013-05-07 | Oracle America, Inc. | System and method for applying level of detail schemes |
US8595428B2 (en) | 2009-12-22 | 2013-11-26 | Intel Corporation | Memory controller functionalities to support data swizzling |
US8856496B2 (en) | 2010-04-27 | 2014-10-07 | Via Technologies, Inc. | Microprocessor that fuses load-alu-store and JCC macroinstructions |
US8749667B2 (en) | 2010-08-02 | 2014-06-10 | Texas Instruments Incorporated | System and method for maintaining maximum input rate while up-scaling an image vertically |
US8508612B2 (en) | 2010-09-30 | 2013-08-13 | Apple Inc. | Image signal processor line buffer configuration for processing ram image data |
US8797323B2 (en) * | 2011-01-18 | 2014-08-05 | Intel Corporation | Shadowing dynamic volumetric media |
WO2012105174A1 (ja) | 2011-01-31 | 2012-08-09 | パナソニック株式会社 | プログラム生成装置、プログラム生成方法、プロセッサ装置及びマルチプロセッサシステム |
US9092267B2 (en) | 2011-06-20 | 2015-07-28 | Qualcomm Incorporated | Memory sharing in graphics processing unit |
US20130027416A1 (en) | 2011-07-25 | 2013-01-31 | Karthikeyan Vaithianathan | Gather method and apparatus for media processing accelerators |
JP5742651B2 (ja) | 2011-10-15 | 2015-07-01 | コニカミノルタ株式会社 | 画像処理装置、連携方法および連携プログラム |
JP5746100B2 (ja) | 2011-12-27 | 2015-07-08 | 京セラドキュメントソリューションズ株式会社 | 画像形成装置 |
US8823736B2 (en) * | 2012-01-20 | 2014-09-02 | Intel Corporation | Graphics tiling architecture with bounding volume hierarchies |
US10244246B2 (en) | 2012-02-02 | 2019-03-26 | Texas Instruments Incorporated | Sub-pictures for pixel rate balancing on multi-core platforms |
US9235769B2 (en) | 2012-03-15 | 2016-01-12 | Herta Security, S.L. | Parallel object detection method for heterogeneous multithreaded microarchitectures |
TWI520598B (zh) | 2012-05-23 | 2016-02-01 | 晨星半導體股份有限公司 | 影像處理裝置與影像處理方法 |
WO2013178245A1 (en) * | 2012-05-29 | 2013-12-05 | Qatar Foundation | A graphics processing unit controller, host system, and methods |
US9232139B2 (en) | 2012-07-24 | 2016-01-05 | Apple Inc. | Image stabilization using striped output transformation unit |
US9378181B2 (en) | 2012-11-09 | 2016-06-28 | Intel Corporation | Scalable computing array |
US8954992B2 (en) | 2013-03-15 | 2015-02-10 | Lenovo Enterprise Solutions (Singapore) Pte. Ltd. | Distributed and scaled-out network switch and packet processing |
US20150277904A1 (en) | 2014-03-28 | 2015-10-01 | Roger Espasa | Method and apparatus for performing a plurality of multiplication operations |
US9684944B2 (en) * | 2015-01-16 | 2017-06-20 | Intel Corporation | Graph-based application programming interface architectures with node-based destination-source mapping for enhanced image processing parallelism |
US9749548B2 (en) | 2015-01-22 | 2017-08-29 | Google Inc. | Virtual linebuffers for image signal processors |
US9772852B2 (en) | 2015-04-23 | 2017-09-26 | Google Inc. | Energy efficient processor core architecture for image processor |
US9756268B2 (en) | 2015-04-23 | 2017-09-05 | Google Inc. | Line buffer unit for image processor |
US9965824B2 (en) | 2015-04-23 | 2018-05-08 | Google Llc | Architecture for high performance, power efficient, programmable image processing |
US9769356B2 (en) | 2015-04-23 | 2017-09-19 | Google Inc. | Two dimensional shift array 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 |
CN105023289A (zh) | 2015-07-08 | 2015-11-04 | 成都梦工厂网络信息有限公司 | 图形图像三维处理平台 |
US10387988B2 (en) * | 2016-02-26 | 2019-08-20 | Google Llc | Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform |
-
2016
- 2016-12-22 US US15/389,113 patent/US10387988B2/en active Active
- 2016-12-28 WO PCT/US2016/068932 patent/WO2017146816A1/en active Application Filing
- 2016-12-28 JP JP2018539837A patent/JP6704056B2/ja active Active
- 2016-12-28 KR KR1020187022160A patent/KR102009906B1/ko active IP Right Grant
- 2016-12-28 EP EP16829467.6A patent/EP3420527B1/en active Active
- 2016-12-28 CN CN201680080956.4A patent/CN108541321B/zh active Active
- 2016-12-30 TW TW105144288A patent/TWI614689B/zh active
- 2016-12-30 TW TW106140542A patent/TWI635443B/zh active
-
2017
- 2017-06-20 US US15/628,480 patent/US10387989B2/en active Active
-
2019
- 2019-08-01 US US16/529,633 patent/US20200020069A1/en not_active Abandoned
- 2019-12-02 JP JP2019218095A patent/JP6858239B2/ja active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101556543A (zh) * | 2008-04-09 | 2009-10-14 | 辉达公司 | 由通用处理器执行重定目标的图形处理器加速代码 |
US20130091507A1 (en) * | 2011-10-11 | 2013-04-11 | Nec Laboratories America, Inc. | Optimizing data warehousing applications for gpus using dynamic stream scheduling and dispatch of fused and split kernels |
CN103870246A (zh) * | 2012-12-10 | 2014-06-18 | 辉达公司 | 用于线程的simd执行的编译器控制区调度 |
US20140204232A1 (en) * | 2013-01-24 | 2014-07-24 | Analog Devices Technology | Descriptor-based stream processor for image processing and method associated therewith |
CN110574011A (zh) * | 2017-05-12 | 2019-12-13 | 谷歌有限责任公司 | 每线缓冲器单元存储器分配的确定 |
Non-Patent Citations (1)
Title |
---|
WM CHAO,ET AL.: "Pyramid Architecture for 3840 X 2160 Quad Full High Definition 30 Frames/s Video Acquisition", 《IEEE TRANSACTIONS ON CIRCUITS AND SYSTEMS FOR VIDEO TECHNOLOGY》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110399124A (zh) * | 2019-07-19 | 2019-11-01 | 浪潮电子信息产业股份有限公司 | 一种代码生成方法、装置、设备及可读存储介质 |
CN110399124B (zh) * | 2019-07-19 | 2022-04-22 | 浪潮电子信息产业股份有限公司 | 一种代码生成方法、装置、设备及可读存储介质 |
CN112558938A (zh) * | 2020-12-16 | 2021-03-26 | 中国科学院空天信息创新研究院 | 一种基于有向无环图的机器学习工作流调度方法及系统 |
CN112558938B (zh) * | 2020-12-16 | 2021-11-09 | 中国科学院空天信息创新研究院 | 一种基于有向无环图的机器学习工作流调度方法及系统 |
CN116484822A (zh) * | 2023-06-26 | 2023-07-25 | 和创(北京)科技股份有限公司 | 表单字段表达式循环依赖计算方法及装置 |
CN116484822B (zh) * | 2023-06-26 | 2023-09-01 | 和创(北京)科技股份有限公司 | 表单字段表达式循环依赖计算方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
TW201810036A (zh) | 2018-03-16 |
EP3420527A1 (en) | 2019-01-02 |
EP3420527B1 (en) | 2021-07-14 |
US10387989B2 (en) | 2019-08-20 |
US20170249716A1 (en) | 2017-08-31 |
JP6704056B2 (ja) | 2020-06-03 |
TW201800940A (zh) | 2018-01-01 |
US20170287103A1 (en) | 2017-10-05 |
KR102009906B1 (ko) | 2019-08-12 |
TWI635443B (zh) | 2018-09-11 |
KR20180100372A (ko) | 2018-09-10 |
JP2020061168A (ja) | 2020-04-16 |
WO2017146816A1 (en) | 2017-08-31 |
TWI614689B (zh) | 2018-02-11 |
CN108541321B (zh) | 2023-04-18 |
JP2019508802A (ja) | 2019-03-28 |
US10387988B2 (en) | 2019-08-20 |
US20200020069A1 (en) | 2020-01-16 |
JP6858239B2 (ja) | 2021-04-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108541321A (zh) | 将程序代码映射到高性能、高功效的可编程图像处理硬件平台的编译技术 | |
JP7202987B2 (ja) | 高性能で、電力効率の良い、プログラマブルな画像処理のためのアーキテクチャ | |
US11182138B2 (en) | Compiler for translating between a virtual image processor instruction set architecture (ISA) and target hardware having a two-dimensional shift array structure | |
JP6793162B2 (ja) | 画像プロセッサのためのラインバッファユニット | |
US10216487B2 (en) | Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure | |
CN107430760A (zh) | 用于图像处理器的二维移位阵列 | |
CN110574011B (zh) | 每线缓冲器单元存储器分配的确定 | |
TWI745084B (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 |