CN107133016B - 图像处理器的宏i/o单元 - Google Patents
图像处理器的宏i/o单元 Download PDFInfo
- Publication number
- CN107133016B CN107133016B CN201611273166.6A CN201611273166A CN107133016B CN 107133016 B CN107133016 B CN 107133016B CN 201611273166 A CN201611273166 A CN 201611273166A CN 107133016 B CN107133016 B CN 107133016B
- Authority
- CN
- China
- Prior art keywords
- data
- image data
- image
- ordering
- processor
- 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
Links
Images
Classifications
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/003—Details of a display terminal, the details relating to the control arrangement of the display terminal and to the interfaces thereto
- G09G5/006—Details of the interface to the display terminal
-
- 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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/17—Interprocessor communication using an input/output type connection, e.g. channel, I/O port
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/02—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the way in which colour is displayed
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N1/00—Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
- H04N1/32—Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device
- H04N1/32358—Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device using picture signal storage, e.g. at transmitter
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- 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
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G2340/00—Aspects of display data processing
- G09G2340/02—Handling of images in compressed format, e.g. JPEG, MPEG
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N2201/00—Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
- H04N2201/32—Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device
- H04N2201/3285—Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device using picture signal storage, e.g. at transmitter
- H04N2201/329—Storage of less than a complete document page or image frame
- H04N2201/3291—Storage of less than a complete document page or image frame of less than a complete line of data
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Image Processing (AREA)
- Memory System (AREA)
Abstract
描述了一种图像处理器。所述图像处理器包括I/O单元,用于从外部存储器读取输入图像数据用于由图像处理器处理,并将来自图像处理器的输出图像数据写入外部存储器。所述I/O单元包括多个逻辑信道单元。每个逻辑信道单元在外部存储器和图像处理器内的相应生产或消费组件之间形成逻辑信道。每个逻辑信道单元被设计为利用重新格式化电路和寻址电路。寻址电路控制应用于外部存储器的寻址方案,并控制在外部存储器和相应生产或消费组件之间重新格式化图像数据。重新格式化电路执行重新格式化。
Description
交叉引用
本申请要求于2016年2月28日提交的第62/300,880号、名称为“图像处理器的宏I/O单元”的美国临时申请的权益,其全部内容通过引用并入本文。
技术领域
本发明的领域大致涉及图像处理,并且,更具体地,涉及用于图像处理器的宏I/O单元。
背景技术
图像处理通常涉及对组织成阵列的像素值的处理。这里,空间中组织成的二维阵列捕获图像的二维特性(附加维度可包括时间(例如,二维图像的序列)和数据类型(例如颜色))。通常情况下,阵列的像素值由已产生静止图像或帧序列以捕获运动图像的相机提供。传统的图像处理器通常落在两个极端中的任一侧。
第一极端执行作为在通用处理器或类通用处理器(例如,具有矢量指令增强的通用处理器)上执行的软件程序的图像处理任务。虽然第一极端通常提供高度通用的应用软件开发平台,但是其使用更细粒度的数据结构以及相关联的开销(例如,指令获取和解码、片上和片外数据的处理、推测执行),最终导致在程序代码的执行期间每单位数据消耗更大量的能量。
第二、相反的极端将固定功能硬连线电路应用于更大的数据块。使用更大(相对于较细粒度)的数据块直接应用于定制设计电路大大降低了每单位数据的功耗。然而,使用定制设计的固定功能电路通常导致处理器能够执行的有限任务集合。因此,在第二极端缺乏广泛通用的编程环境(其与第一极端相关联)。
提供高度通用的应用软件开发机会与每单位数据的改进的功效两者相结合的技术平台仍然是期望但缺失的解决方案。
发明内容
描述了一种图像处理器。所述图像处理器包括I/O单元,从外部存储器读取输入图像数据用于由图像处理器处理,以及将来自图像处理器的输出图像数据写入外部存储器。所述I/O单元包括多个逻辑信道单元。每个逻辑信道单元在外部存储器和图像处理器内的相应生产或消费(consuming)组件之间形成逻辑信道。每个逻辑信道单元被设计为利用重新格式化电路和寻址电路。寻址电路用于控制应用于外部存储器的寻址方案,并控制在外部存储器和相应生产或消费组件之间的图像数据的重新格式化。重新格式化电路用于执行重新格式化。
描述了一种设备。所述设备包括用于启用到图像处理器内的消费组件的逻辑连接的装置。所述设备还包括用于从图像数据的帧读取一系列有限宽度的图像区域的装置,每个图像区域根据RGB格式被格式化。所述设备还包括用于将所述一系列有限宽度的图像区域重新格式化为具有相同颜色的图像数据的块的装置。所述设备还包括用于将具有相同颜色的图像数据的块转发到消费组件的装置。
附图说明
以下描述和附图用于说明本发明的实施例。在附图中:
图1示出了技术平台的各种组件;
图2a示出了用内核构建的应用软件的实施例;
图2b示出了内核的结构的实施例;
图3示出了内核的操作的实施例;
图4示出了图像处理器硬件架构的实施例;
图5a、图5b、图5c、图5d和图5e描绘了将图像数据解析成线组,将线组解析成表以及在具有重叠模板的表上执行的操作;
图6示出模板处理器的实施例;
图7示出了图像处理器的配置和编程的实施例;
图8示出了由线组构成的图像帧;
图9a、图9b和图9c描绘了线缓冲器单元的设计和操作实施例;
图9d和图9e描绘了图像处理器的可编程寄存器空间的实施例;
图10a和图10b描绘了虚拟的高操作模式;
图11a和图11b示出了宏I/O单元实施例;
图12a和图12b示出了宏I/O单元的实施例的第一能力;
图13示出了宏I/O单元的实施例的第二能力;
图14示出了由宏I/O单元的实施例执行的方法;
图15示出了计算系统的实施例。
具体实施方式
i.引言
以下说明描述了关于新的图像处理技术平台的多个实施例,所述技术平台提供广泛通用的应用软件开发环境,其使用更大的数据块(例如,如以下将进一步描述的线组和表)来提供改进的功率效率。
1.0应用软件开发环境
a.内核的应用和结构
图1示出了图像处理器技术平台的高级视图,其包括虚拟图像处理环境 101,实际图像处理硬件103和用于将为虚拟图像处理环境101编写的高级代码转换为由实际图像处理硬件103物理执行的目标代码的编译器102。如下面更详细地描述的,虚拟处理环境101在可开发的应用程序方面是广泛通用的,并被定制用于容易地可视化应用程序的组成过程。当开发人员104完成程序代码开发工作时,编译器102将在虚拟图像处理环境101内编写的代码转换为针对实际图像处理硬件103的目标代码。
图2a示出了虚拟环境中编写的应用软件可采用的结构和形式的示例。如图2a所示,程序代码可有望处理输入图像数据201的一个或多个帧以对输入图像数据201进行一些整体变换。所述变换通过程序代码202的一个或多个内核的操作实现,所述内核对开发人员所表达的经编排的序列中的输入图像数据进行操作。
例如,如图2a所示,通过利用第一内核K1对每个输入图像进行第一处理来实现整体变换。内核K1所产生的输出图像随后由内核K2操作。内核 K2产生的每个输出图像随后由内核K3_1或K3_2操作。(多个)内核 K3_1/K3_2产生的输出图像随后由内核K4操作。内核K3_1和K3_2可以是被设计为通过在内核K3_1和K3_2的级施加并行处理来加速整体处理的相同的内核,或者可以是不同的内核(例如,内核K3_1对第一特定类型的输入图像进行操作,内核K3_2对不同的第二类型的输入图像进行操作)。
这样,更大的整体图像处理序列可采取图像处理流水线或有向无环图 (DAG)的形式,这样开发环境可被配备为实际向开发人员呈现正在开发的程序代码的表示。内核可由开发人员单独开发和/或可由提供任何底层技术 (诸如实际的信号处理器硬件和/或其设计)的实体和/或由第三方(例如,为开发环境编写的内核软件的供应商)提供。这样,期望名义开发环境将包括开发人员可以以各种方式自由“联合”以实现其更大开发工作的整体流程的内核“库”。预期为这种库的一部分的一些基本内核可包括用于提供以下基本图像处理任务中的任何一个或多个的内核:卷积、去噪、颜色空间转换、边缘和角点检测、锐化、白平衡、伽马校正、色调映射、矩阵乘法、图像配准、金字塔构造、小波变换、块方式离散余弦和傅立叶变换。
图2b示出了开发人员可设想的内核203的结构的示例性描述。如图2b 所示,内核203可被视为各自在相应底层处理器205_1、205_2、205_3…上操作的程序代码的多个并行线程(“线程”)204_1、204_2、204_3…,其中每个处理器被定向到输出阵列206中的特定位置(诸如内核正在生成的输出图像中的特定像素位置)。为简单起见,在图2b中仅示出了三个处理器和对应的线程。在各种实施例中,每个所描绘的输出阵列位置将具有自身的专用处理器和对应的线程。也就是说,可以为输出阵列中的每个像素分配单独的处理器和线程。
如下面将更详细地描述的,在各种实施例中,在实际底层硬件中,执行路径(lane)的阵列和对应线程一致地操作(例如,以类似单指令多数据的方式),从而生成用于当前正在处理的帧的一部分“线组”的输出图像数据。线组是图像帧的连续的、可调大小的部分。在各种实施例中,开发人员可意识到硬件在线组上操作,或者开发环境可呈现抽象的概念,其中单独的处理器和线程用于例如输出帧中的每个像素(例如,由其自身的专用处理器和线程所产生的输出帧中的每个像素)。无论如何,在各种实施例中,开发人员理解内核包括用于每个输出像素的单独线程(无论输出阵列是可视化的、是整个输出帧还是其一部分)。
如下面将更详细地描述的,在实施例中,在虚拟环境中呈现给开发人员的处理器205_1、205_2、205_3…具有指令集架构(ISA),其不仅支持标准(例如RISC)操作码,而且还包括允许开发人员通过正在执行的像素处理容易地将像素可视化的特殊格式化的数据访问指令。容易地定义/可视化任何输入阵列位置的能力与传统数学和程序控制操作码的整个ISA相结合允许非常通用的编程环境,其本质上允许应用程序开发人员理想地定义要在任意尺寸的图像表面上执行的任何期望的功能。例如,理想地,任何数学运算可容易地被编程从而应用于任何模板尺寸。
关于数据访问指令,在实施例中,虚拟处理器的ISA(“虚拟ISA”)包括特殊数据加载指令和特殊数据存储指令。数据加载指令能够从图像数据的输入阵列内的任何位置读取。数据存储指令能够对图像数据的输出阵列内的任何位置写入。后一指令允许容易地将相同处理器的多个实例专用于不同的输出像素位置(每个处理器写入输出阵列中的不同像素)。这样,例如,可以使模板尺寸本身(例如,表示为像素的宽度和像素的高度)成为容易编程的特征。利用具有特殊指令格式的每个特殊加载和存储指令进一步简化处理操作的可视化,由此目标阵列位置被简单地指定为X和Y坐标。
无论如何,通过为输出阵列多个位置中的每个位置实例化单独的处理器,处理器可并行执行它们各自的线程,从而使例如同时产生输出阵列中的所有位置的相应值。值得注意的是,许多图像处理例程通常对相同输出图像的不同像素执行相同的操作。这样,在开发环境的一个实施例中,假设每个处理器是相同的并且执行相同的线程程序代码。因此,虚拟化环境可被视为一种类型的二维(2D)SIMD处理器,其例如由在锁定步骤中每个执行相同代码的相同处理器的2D阵列组成。
图3示出了针对输出阵列中的两个不同像素位置处理相同代码的两个虚拟处理器的处理环境的更详细的示例。图3示出了与正在生成的输出图像相对应的输出阵列304。这里,第一虚拟处理器正在处理线程301的代码以在输出阵列304的位置X1处生成输出值,第二虚拟处理器正在处理线程302 的代码以在输出阵列304的位置X2处生成输出值。同样,在各种实施例中,开发人员将理解,对于输出阵列304中的每个像素位置存在单独的处理器和线程(为简单起见,图3仅示出了它们中的两个)。然而,在各种实施例中开发人员仅需要开发用于一个处理器和线程的代码(由于类似SIMD的机器性质)。
如本领域中已知的,输出像素值通常通过处理包括并围绕对应的输出像素位置的输入阵列的像素来确定。例如,如从图3可见,输出阵列304的位置X1对应于输入阵列303的位置E。因此,将被处理以确定输出值X1的输入阵列303像素值的模板将对应于输入值ABCDEFGHI。类似地,将被处理以确定输出值X2的输入阵列像素的模板将对应于输入值DEFGHIJKL。
图3示出了可分别用于计算输出值X1和X2的线程对301、302的对应虚拟环境程序代码的示例。在图3的示例中,两对代码是相同的,计算9个输入阵列值的模板的平均值以确定对应的输出值。两个线程之间的唯一区别是从输入阵列调用的变量和写入输出阵列的位置。具体来说,写入输出位置 X1的线程在模板ABCDEFGHI上操作,写入输出位置X2的线程在模板 DEFGHIJKL上操作。
从来自线程对301、302的相应程序代码可以看出,每个虚拟处理器至少包括内部寄存器R1和R2,并且至少支持以下指令:1)从输入阵列到R1 的LOAD指令;2)从输入阵列到R2的LOAD指令;3)将R1和R2的内容相加并将结果放置在R2中的ADD指令;4)将R2中的值除以立即操作数9的DIV指令;和5)将R2的内容存储到线程专用的输出阵列位置的 STORE指令。同样,尽管在图3中仅描绘了两个输出阵列位置、两个线程和对应的处理器,但是可以想象,输出阵列中的每个位置可被分配执行这些功能的虚拟处理器和对应的线程。在各种实施例中,与处理环境的类似SIMD 的性质保持一致,多个线程彼此孤立地执行。也就是说,在虚拟处理器之间没有线程到线程的通信(防止一个SIMD信道跨越到另一个SIMD信道)。
b.虚拟处理器存储器模型
在各种实施例中,虚拟处理器的显著特征在于其存储器模型。如本领域中所理解的,处理器从存储器读取数据,对所述数据进行操作并将新数据写回存储器。存储器模型是处理器具有的将数据组织在存储器中的方式的透视图或视图。在一个实施例中,虚拟处理器的存储器模型包括输入和输出阵列区域两者。用于线程的输入像素值存储在输入阵列区域中,由线程生成的输出像素值存储在输出阵列区域中。
在实施例中,使用新颖的存储器寻址方案来定义从虚拟处理器存储器模型的输入阵列部分调用哪些特定输入值。具体地,使用用X、Y坐标定义期望的输入数据的“位置相对”寻址方案而不是传统线性存储器地址。这样,虚拟处理器的ISA的加载指令包括用X分量和Y分量识别输入阵列内的特定存储器位置的指令格式。这样,二维坐标系统用于为从输入阵列读取的输入值寻址存储器。
位置相对存储器寻址方案的使用允许虚拟处理器正在操作的图像的区域更容易被开发人员识别。如上所述,容易地定义/可视化任何输入阵列位置的能力与传统数学和程序控制操作码的整个ISA相结合允许极其通用的编程环境,其本质上允许应用程序开发人员容易地、理想地定义在任意尺寸的图像表面上执行的任何期望的功能。以下更进一步详细地描述采用位置相对寻址方案的指令的各种指令格式实施例,以及所支持的ISA的其它特征的实施例。
输出阵列包含线程负责生成的输出图像数据。输出图像数据可以是最终的图像数据,诸如在整个图像处理序列之后在显示器上呈现的实际图像数据,或者可以是整个图像处理序列的后续内核用作其输入图像数据信息的中间图像数据。同样,通常虚拟处理器并不竞争相同的输出数据项,因为它们在相同的周期期间写入到输出图像数据的不同像素位置。
在实施例中,位置相对寻址方案还用于写入到输出阵列。这样,用于每个虚拟处理器的ISA包括存储指令,其指令格式将存储器中的目标写入位置定义为二维X、Y坐标而不是传统的随机存取存储器地址。
2.0硬件架构实施例
a.图像处理器硬件架构和操作
图4示出了用于以硬件实现的图像处理器的架构的实施例。所述图像处理器可例如是编译器的目标,所述编译器将为模拟环境内的虚拟处理器编写的程序代码转换为由硬件处理器实际执行的程序代码。如图4所示,架构包括通过网络404(例如,包含片上交换网络、片上环形网络或其它类型的网络的片上网络(NOC))与多个模板处理器单元402_1至402_N及对应的表生成器单元403_1至403_N互连的多个线缓冲器单元401_1至401_M。在实施例中,任何线缓冲器单元可通过网络404连接到任何表生成器及对应的模板处理器。
在实施例中,程序代码被编译并加载到对应的模板处理器上以执行由软件开发人员较早定义的图像处理操作(例如,取决于设计和实现方式,程序代码也可被加载到模板处理器的相关联的表生成器上)。在至少一些实例中,可通过将用于第一流水线级的第一内核程序加载到第一模板处理器402_1 中、将用于第二流水线级的第二内核程序加载到第二模板处理器402_2中等来实现图像处理流水线,其中第一内核执行流水线的第一级的功能,第二内核执行流水线的第二级的功能等,并且安装附加的控制流方法以将输出图像数据从流水线的一个级传递到流水线的下一级。
在其它配置中,图像处理器可被实现为具有操作相同内核程序代码的两个或更多个模板处理器402_1、402_2的并行机器。例如,可通过跨每个均执行相同的功能的多个模板处理器扩展帧来处理高密度和高数据速率的图像数据流。
在再一其它配置中,本质上任何内核的DAG都可通过利用模板处理器自身相应程序代码的内核对模板处理器进行配置并配置适当的控制流钩到硬件中而加载到硬件处理器上,从而将输出图像从一个内核引导到DAG设计中的下一个内核的输入。
作为通用流程,图像数据的帧由宏I/O单元405接收,并以逐帧为基础传递到多个线缓冲器单元401_1至401_M中的一个或多个。特定线缓冲器单元将其图像数据的帧解析为图像数据的较小区域,称为“线组”,然后通过网络404将线组传送到特定的表生成器。完整的或“全”的单个线组可例如由帧的多个连续的完整行或列的数据组成(为简单起见,本说明书将主要涉及连续的行)。表生成器进一步将图像数据的线组解析成图像数据的较小区域,称为“表”,并将所述表提交给其对应的模板处理器。
在图像处理流水线或DAG流具有单个输入的情况下,通常,输入帧被引导至同一线缓冲器单元401_1,线缓冲器单元401_1将图像数据解析成线组,并将线组引导至表生成器403_1,表生成器403_1的对应的模板处理器 402_1正在执行流水线/DAG中的第一内核的代码。当模板处理器402-1对其处理的线组完成操作时,表生成器403_1将输出线组发送到“下游”线缓冲器单元401_2(在一些使用情况下,输出线组可被发送回先前已发送输入线组的同一线缓冲器单元401_1)。
表示在其自身相应其它表生成器和模板处理器(例如,表生成器403_2 和模板处理器402_2)上执行的流水线/DAG中的下一阶段/操作的一个或多个“消费者”内核然后从下游线缓冲器单元401_2接收由第一模板处理器 402_1生成的图像数据。以这种方式,在第一模板处理器上操作的“生产者”内核将其输出数据转发到在第二模板处理器上操作的“消费者”内核,其中消费者内核在生产者内核与整个流水线或DAG的设计一致之后执行下一组任务。
模板处理器被设计为同时对图像数据的多个重叠模板进行操作。模板处理器的多个重叠模板和内部硬件处理能力有效地确定了表的尺寸。这里,在模板处理器内,执行路径阵列一致地进行操作,从而同时处理由多个重叠模板覆盖的图像数据表面区域。
如下面将更详细地描述的,在各种实施例中,图像数据表被加载到模板处理器内的二维寄存器阵列结构中。使用表和二维寄存器阵列结构,通过将大量数据移动到大量寄存器空间中,例如,作为由执行路径阵列对紧接在处理任务之后的数据直接执行的单个加载操作,被认为能够有效地改善功耗。此外,使用执行路径阵列和对应的寄存器阵列提供了易于编程/可配置的不同模板尺寸。
图5a至图5e以高级示出了线缓冲器单元的解析活动、表生成器单元的更细粒度解析活动两者以及耦合到表生成器单元的模板处理器的模板处理活动的实施例。
图5a描绘了图像数据501的输入帧的实施例。图5a还描绘了三个重叠模板502(每个具有3像素×3像素的大小)的轮廓,模板处理器被设计为在其三个重叠模板502上进行操作。每个模板为其分别产生输出图像数据的输出像素以实心黑色突出显示。为简单起见,三个重叠模板502被描绘为仅在垂直方向上重叠。应当认识到,实际上,模板处理器可被设计成在垂直和水平方向上均具有重叠模板。
如图5a所示,由于模板处理器内的垂直重叠模板502,在单个模板处理器可在上进行操作的帧内存在宽带(wide band)图像数据。如将在下面更详细地讨论的,在实施例中,模板处理器以从左到右的方式跨越图像数据对其重叠模板内的数据进行处理(然后以从上到下的顺序重复下一组线)。因此,随着模板处理器继续向前进行其操作,实心黑色输出像素块的数量将水平向右增长。如上所讨论的,线缓冲器单元负责解析来自足够模板处理器在即将到来的扩展数量的周期中进行操作的输入帧的输入图像数据的线组。阴影区域示出了线组503的示例性描述。在实施例中,如下面进一步描述的,线缓冲器单元可理解向/从表生成器发送/接收线组的不同动态。例如,根据被称为“全组”的一种模式,图像数据的完整全宽度线在线缓冲器单元和表生成器之间传递。根据被称为“虚拟高”的第二模式,最初线组以全宽度行的子集被传递。然后剩余的行以较小(小于全宽度)的片段顺序传递。
由于输入图像数据的线组503由线缓冲器单元定义并传递到表生成器单元,表生成器单元进一步将线组解析为与模板处理器的硬件限制更精确匹配的更细的表。更具体地,如以下将更进一步详细描述的,在实施例中,每个模板处理器由二维移位寄存器阵列组成。二维移位寄存器阵列实质上将图像数据移位到执行路径阵列“之下”,其中移位模式使得每个执行路径对其自身相应模板内的数据进行操作(即,每个执行路径在其自身模板上进行信息处理以生成用于该模板的输出)。在实施例中,表是“填充”或以其它方式加载到二维移位寄存器阵列中的输入图像数据的表面区域。
因此,如在图5b中所示,表生成器从线组503解析初始表504,并将其提供给模板处理器(这里,数据表对应于通常由附图标记504标识的阴影区域)。如在图5c和图5d中所示,模板处理器通过以从左到右的方式在表上有效地移动重叠模板502而对输入图像数据的表进行操作。如图5d所示,可以从表内的数据计算出输出值的像素的数量被耗尽(没有其它像素位置可以具有从表内的信息确定的输出值)。为简单起见,忽略了图像的边界区域。
如图5e所示,然后表生成器提供下一个表505供模板处理器继续操作。注意,当模板开始在下一表上操作时,模板的初始位置是从第一表上的耗尽点向右的下一进展(如之前在图5d中所描绘的)。由于模板处理器以与第一表的处理相同的方式对新表进行操作,使用新表505,模板将简单地继续向右移动。
注意,由于围绕输出像素位置的模板的边界区域,第一表504的数据和第二表505的数据之间存在一些重叠。所述重叠可由表生成器重复传送重叠数据两次进行简单处理。在替代的实施方式中,为了给模板处理器提供下一表,表生成器可继续仅向模板处理器发送新数据,并且模板处理器重复使用来自前一表的重叠数据。
b.模板处理器设计和操作
图6示出了模板处理器架构600的实施例。如图6所示,模板处理器包括数据计算单元601、标量处理器602以及相关联的存储器603和I/O单元 604。数据计算单元601包括执行路径阵列605、二维移位阵列结构606和与阵列的特定行或列相关联的分离的随机存取存储器607_1至607_R。
I/O单元604负责将从表生成器接收的“输入”数据表加载到数据计算单元601中,并将来自模板处理器的“输出”数据表存储到表生成器中。在实施例中将表数据加载到数据计算单元601中需要将所接收的表解析成图像数据的行/列,并将图像数据的行/列加载到二维移位寄存器结构606或执行路径阵列的行/列的相应随机存取存储器中(以下将更详细描述)。如果表最初被加载到存储器中,则执行路径阵列605内的各个执行路径随后在适当的时候可将表数据从随机存取存储器加载到二维移位寄存器结构606中(例如随着恰好在对表的数据操作之前的加载指令)。在完成将表数据(直接从表生成器或是从存储器)加载到二维移位寄存器结构606之后,执行路径阵列 605的执行路径对数据进行操作,并最终将完成的数据作为表直接“写回”表生成器或随机存取存储器中。如果是后者,I/O单元604从随机存取存储器取出数据以形成输出表,然后将其转发到表生成器。
标量处理器602包括程序控制器609,其从标量存储器603读取模板处理器的程序代码的指令,并将指令发布到执行路径阵列605中的执行路径。在实施例中,单个相同指令从数据计算单元601被广播到阵列605内的所有执行路径以实现类似于SIMD的行为。在实施例中,从标量存储器603读取并发布到执行路径阵列605的执行路径的指令的指令格式包括超长指令字 (VLIW)类型格式,该格式的每个指令包含多于一个的操作码。在进一步的实施例中,VLIW格式包括ALU操作码和存储器操作码两者,ALU操作码引导由每个执行路径的ALU(如下所述,在实施例中可以指定多于一个的传统ALU操作)执行的数学函数,存储器操作码(引导用于特定执行路径或执行路径集合的存储器操作)。
术语“执行路径”是指能够执行指令的一个或多个执行单元的集合(例如,可以执行指令的逻辑电路)。但是在各种实施例中,执行路径可包括除执行单元之外的多个类似于处理器的功能。例如,除一个或多个执行单元之外,执行路径还可包括对接收的指令进行解码的逻辑电路,或者在更类似 MIMD设计的情况下,包括获取和解码指令的逻辑电路。关于类似MIMD 途径,尽管本文已大体上描述了集中式程序控制途径,但是在各种替代实施例中,可实现更分布式的途径(例如,包括在阵列605的每个执行路径内的程序代码和程序控制器)。
执行路径阵列605、程序控制器609和二维移位寄存器结构606的组合为广泛的可编程功能提供了广泛适应/可配置的硬件平台。例如,鉴于各个执行路径能够执行各种各样的功能并且能够容易地访问接近任何输出阵列位置的输入图像数据,应用软件开发人员能够对具有广泛的不同功能能力以及大小(例如,模板尺寸)的内核进行编程。
除了用作由执行路径阵列605操作的图像数据的数据存储之外,随机存取存储器还可保存一个或多个查找表。在各种实施例中,一个或多个标量查找表也可在标量存储器603内被实例化。
标量查找涉及将相同的数据值从来自相同索引的相同查找表传递到执行路径阵列605内的每个执行路径。在各种实施例中,上述VLIW指令格式被扩展为还包括标量操作码,所述标量操作码引导由标量处理器执行的查找操作到标量查找表。被指定用于与操作码一起使用的索引可以是立即操作数或从某个其它数据存储位置获取。无论如何,在实施例中,从标量存储器内的标量查找表查找本质上涉及在相同时钟周期内将相同的数据值广播到执行路径阵列605内的所有执行路径。
3.0线缓冲器单元实施例
a.线缓冲器单元概述
回顾上面在章节1.0中的讨论,在各种实施例中,为硬件平台编写的程序代码用唯一的虚拟代码写入,该唯一的虚拟代码包括具有加载和存储指令的指令集,其指令格式识别输入和输出阵列位置作为,例如X、Y坐标。在各种实施方式中,X、Y坐标信息实际上可被编程到硬件平台中并被其各个组件识别/理解。这不同于例如将X、Y坐标(例如在编译器内)转换成不同的信息。例如,在模板处理器内的二维移位寄存器结构的情况下,X、Y坐标信息被转换为寄存器移位运动。相比之下,硬件平台的其它部分可具体地接收并理解最初在较高的虚拟代码级表示的X、Y坐标信息。
如图7所示,如章节1.0中所描述的,程序代码开发人员在虚拟代码级 710处利用特殊指令格式将数据位置表示为X、Y坐标。在编译阶段期间,虚拟代码被转换为由硬件(目标代码)实际处理的程序代码和加载到硬件的配置(例如寄存器)空间中的对应的配置信息。如图7所示,在实施例中,特定内核的目标代码被加载到模板处理器的标量处理器705的程序空间中。
作为配置过程的一部分,在标量处理器705上执行的配置软件将适当的配置信息711、712加载到表生成器单元703和线缓冲器单元701两者,表生成器单元703与模板处理器702耦合,线缓冲器单元701将生成由模板处理器702操作的新表或接收由模板处理器702产生的处理过的表。这里,一般来说,仍然可根据整个图像的X、Y坐标考虑表。也就是说,一旦定义了图像或帧(例如,就每行的像素数目、行数量、每列的像素数目和列数量而言),图像的任何部分或位置仍可用X、Y坐标表示。
这样,在各种实施例中,表生成器单元703和线缓冲器单元701中的任一个或两者均配置有在它们各自的配置空间706、707内的信息711、712,其建立信息平台,从该信息平台,以X、Y坐标识别图像或帧的特定位置和 /或区域(例如,线组,表)。在各种实施方式/使用中,X、Y坐标可以是在虚拟代码级表示的相同X、Y坐标。
这种信息的示例包括例如线缓冲器单元中的活动线组的数量、每个线组的图像尺寸(例如,作为一组四个X、Y坐标(每个角一个)或一对X、Y 坐标(一个用于下部的较近角,一个用于上部的较远角))、绝对图像宽度和图像高度、模板尺寸(表示为定义模板处理器的单个模板和/或重叠模板区域的尺寸的X、Y值)、表和/或线组尺寸(例如,被指定为与图像尺寸相同的术语但具有较小的大小)等。此外,线缓冲器单元701至少可利用附加配置信息进行编程,所述附加配置信息是诸如写入由线缓冲器单元701管理的线组的生产者内核的数量和读取由线缓冲器单元701管理的线组的消费者内核的数量。通常也包含与图像数据相关联的信道和/或维度的数量作为配置信息。
图8仅作为一个示例,描绘了使用X、Y坐标来定义图像内的线组。这里,在图像801内可观察到N个线组802_1、802_2、...、802_N。如从图8 所见,可通过参照图像中的例如定义一个或多个线组角点的X、Y坐标来容易地定义每个线组。这样,在各种实施例中,用于定义特定线组的线组名或其它数据结构可包括与线组相关联的X、Y坐标位置,以便对其进行特别识别。
简单回顾图7,注意到图7示出了在运行时间期间,通过例如包含定义期望的数据区域的X、Y坐标信息,表生成器703可从线缓冲器单元701请求“下一个”线组(或线组的一部分)。图8示出了仅由图像数据的完整行组成的标称“全宽度”线组。在以下更进一步详细描述的被称为“虚拟高”的替代配置中,线缓冲器单元701最初仅传递线组的第一较高部分作为图像数据的全宽度行。然后线组的后续较低行由表生成器在小于全宽度行的连续语块中特别地请求并且被单独地请求。这样,表生成器进行多个请求以获得全线组。这里,每个这样的请求可通过归属于下一较低部分的X、Y坐标来定义下一较低部分。
图9a至图9c展示了线缓冲器单元实施例900的各种特征。如图9a所示,线缓冲器单元包括其中存储线组903_1至903_N的存储器902(例如静态或动态随机存取存储器(SRAM或DRAM))。图9a示出了产生和消耗存储器902内的特定图像/帧的线组903_1至903_N的各种内核之间的活动。
如图9a所示,生产者内核K1在分离的时间实例P1、P2至PN向存储器902发送新的线组。生产者内核K1在生成新的数据表的模板处理器上执行。耦合到模板处理器的表生成器累积表以形成线组,并将线组转发到存储器902。
同样如图9a所描绘的,存在两个消费者内核K2、K3对由生产者内核 K1生成的线组903_1至903_N进行操作。这里,消费者内核K2和K3分别在时间C21和C31接收第一线组903_1。显然,时间C21和C31发生在时间P1之后。其它限制可能不存在。例如,时间C21和/或C31可在时间P2 至PN中的任意时间之前或之后发生。这里,内核K2和K3的各个表生成器在适于它们各自的内核的时间请求下一个线组。如果内核K2、K3中的任一个在时间P1之前请求线组903_1,则请求闲置,直到线组903_1实际上被写入存储器902之后。在多个实施方式中,生产者内核在与消费者内核不同的模板处理器上操作。
可以想到,来自内核K2和K3中的任一个或两者对所有线组903_1至 903_N的请求均可在时间P1之前到达。因此,消费者内核可在任意时间请求线组。随着消费者内核请求线组,线组被转发到消费者内核,然而,这受制于生产者内核K1可产生它们的速率。在各种实施例中,消费者内核依次请求线组,并同样依次接收它们(内核K2在时间C22至C2N依次接收线组 903_2至903_N)。为简单起见,对于特定线组仅描绘了一个生产者内核。可以设想,各种实施例可被设计为允许不同的生产者写入相同的线组(例如,在消费者不允许被服务,直到所有生产者已写入线组之后的情况下)。
在没有生产者内核(因为(多个)消费者内核是处理器的DAG处理流程中的第一内核)的情况下,可将图像数据的帧传送到存储器902中(例如经由直接存储器访问(DMA)或从相机)并解析成线组。在没有(多个) 消费者内核的情况下(因为生产者内核是处理器的总体程序流中的最后一个内核),可组合结果线组以形成输出帧。
图9b示出了整个线缓冲器单元900的更详细的实施例。为讨论起见,图9a的活动被叠加在图9b的线缓冲器单元900上。如在图9b中所见,线缓冲器单元900包括耦合到线缓冲器单元电路901的存储器902。线缓冲器单元电路901例如可由专用逻辑电路构造。在线缓冲器单元电路901内,保留线缓冲器接口单元904_1至904_N用于存储器902内的每个线组903_1 至903_N。在各种实施例中,存在固定数量的线缓冲器接口单元904_1至 904_N,其设置线缓冲器单元可在任何时刻管理的线组数量的上限(如果少于N个线组被激活,则对应较少数量的线缓冲器单元接口被激活并在任意时间使用)。
如图9b所描绘的,利用线缓冲器单元电路901内的总共N个线缓冲器接口单元904_1至904_N,线缓冲器单元900处理最大数量的线组。此外,利用最大的允许线组尺寸(其中线组尺寸是可配置的参数),可确定存储器 902的近似大小(当然,为了允许硬件效率,可以不同时允许N个最大尺寸的线组为代价来实例化较小的存储器占用量)。
每个线缓冲器接口单元904_1至904_N负责处理被分配待处理的针对特定线组的生产者和消费者请求。例如,线缓冲器接口单元904_1在时间P1 处理来自生产者K1的请求以存储线组903_1,并处理来自消费者内核K2 和K3对线组903_1的请求。响应于前者,线缓冲器接口单元904_1将线组 903_1写入存储器902。响应于后者,线缓冲器接口单元904_1执行从存储器902中相应读取线组903_1并分别在时间C21和C31将线组903_1转发给消费者内核K2和K3。
在线组的所有消费者已被转发其线组的副本之后,线缓冲器接口单元被“自由”分配给另一线组。例如,如果线组903_1表示帧序列的第一图像帧内的第一线组,在线组903_1在时刻C21和C31被转发给消费者内核K2和 K3之后,接着线缓冲器接口单元904_1可被分配处理所述帧序列的下一个,第二图像帧内的第一线组。以这种方式,线缓冲器单元电路901可被视为具有线缓冲器接口单元904的“池”,其中,每个接口单元在其紧接之前的线组被传送到其最后一个消费者之后被分配一个新的线组进行管理。因此,随着接口单元重复进入已经服务于其最后一个消费者并且正在等待其下一线组的线缓冲器接口单元的“空闲池”并从中移除,存在接口单元的循环。
图9c更详细地说明了循环的实施例。如图9c所示,从线缓冲器单元电路内的线缓冲器接口单元的空闲池中选择可用的线缓冲器接口单元910。所述线缓冲器接口单元然后被配置有适当的配置信息911(例如,新线组的X, Y位置信息或等效的线性存储器地址)。这里,注意,在图9b中,每个线缓冲器接口单元可包括保持这种配置信息的配置寄存器空间。
线缓冲器接口单元然后继续处理针对其新分配的线组的生产者和消费者请求912。在最后一个生产者已写入线组之后(在各种实施例中,每个线组仅有一个生产者)并且在最后一个消费者已被提供其生产者已写入的线组的版本之后,线缓冲器接口单元则返回到空闲池,并且该过程针对下一线组重复910。为了便于说明,图9b中未示出线缓冲器单元电路901内用于监控图9c的控制流的控制逻辑电路。
b.可编程寄存器空间实施例
关于提供给线缓冲器接口单元作为下一个线组的分配的一部分的更新的配置信息911,在标称情况下,线缓冲器单元900本身正在处理例如仅一个固定的生产者的静态配置,所述生产者供给固定的一组一个或多个消费者。在这种情况下,主要配置信息(例如线组尺寸、消费者的数量等)也倾向于是静态的,并且将在线组之间不会改变。相反,提供给线缓冲器接口单元的新配置信息主要标识新的线组(例如,存储器内线组的位置等)。然而,更复杂的潜在配置/设计是可能的。其中一些将在下面紧接地更详细地描述。
图9d描绘了线缓冲器接口单元的寄存器空间的内容(例如,图9b的寄存器空间905_1的内容)的实施例。紧接着是一些寄存器字段的描述。
LB_Enable字段921本质上启用线缓冲器接口单元,并被“设置”为从空闲池获取线缓冲器接口单元的过程的一部分。Num_Channels字段922定义线组的图像数据内的信道的数量。在实施例中,Num_Channels字段922 可以用于确定每个线组的总数据量。例如,视频流通常包括红色(R)像素的帧序列,蓝色(B)像素的帧序列和绿色(G)像素的帧序列。因此,对于任何线组,实际上有三个有价值的线组信息(R、G和B)。
Num_Consumers字段923描述将请求线组的消费者的数量。在实施例中,在线组实例已被递送的次数等于Num_Consumers字段923中的值之后,线缓冲器接口单元将被输入到空闲池。
Row_Width字段924定义全线组的宽度(例如,以像素数量)。注意,Row_Width 924值可表示为由编译器提供的X坐标值。FB_Rows字段926 定义全线组的高度(例如,以像素数量)。注意,FB_Rows字段926可表示为由编译器提供的Y坐标值。
FB_Base_Address字段930定义线组在线缓冲器单元存储器中的位置。在称为“全”线组模式的第一操作模式中,在存储器中访问全尺寸线组(从生产者接收线组并将其递送给消费者,所述线组包含其各自全部数量的数据)。在全线组模式中,Num_Channels字段922、Row_Width字段924和 FB_Rows字段926可与FB_Base_Address字段930一起使用,以确定将被施加到存储器的地址的范围,以便完整地访问完整线组。此外,这些相同的参数可用于将来自已请求X、Y坐标中的线组的表生成器的请求“转换”为线性存储器地址。
VB_Enable字段925、VB_Rows字段927、VB_Cols字段928、 Num_Reuse_Rows字段929以及VB_Base_Address字段931在被称为“虚拟高”的线组模式的另一操作模式中使用,其将在下面进一步详细描述。
图9d显示了单个线缓冲器接口单元的配置寄存器空间905,而作为对比,图9e示出了作为整体的线缓冲器单元电路901的全局配置寄存器空间 907的内容的实施例。图9d的每个线缓冲器接口单元寄存器空间集中在特定线组上,而作为对比,图9e的全局寄存器空间907集中在理解来自相同图像的不同线组的解析以及特定于与图像的处理相关联的生产者/消费者组合的其它信息。
如图9e所示,全局寄存器空间的实施例包括用于特定图像的信道数量 932和消费者数量933。为简单起见,图9e的寄存器空间仅考虑具有一组生产者和消费者的一个图像(例如,仅DAG中的单个视频流和单个点)。可以想到,也可分配图9e的寄存器空间的多个实例以允许线缓冲器单元电路有效地执行多任务。
多任务的第一形式在图像处理器上实现的DAG或软件流水线内。这里,相同的线缓冲器单元可被配置为处理DAG内的针对两个不同节点或流水线的两个不同级的线组(即,单个线缓冲器单元可支持多于一个的模板处理器)。不同的节点/级可能容易地具有不同数量的消费者,但是在许多情况下倾向于具有相同的图像和模板尺寸特性。多任务的第二形式是跨越在相同图像处理器硬件上实现的多个不同DAG和/或多个不同流水线。例如,具有四个模板处理器的图像处理器可并发执行用于分别处理具有完全不同模板大小的完全不同的图像尺寸的两个完全不同的两级流水线。
回到图9e的特定实施例,注意,在DAG或流水线级之间的任何特定的节点可由图像中的信道数量,图像尺寸,适用模板的大小和线组的消费者的数目以高级别来表征(图9e再次假定每线组一个生产者,但可以想象,在图9e的全局寄存器空间也将包括用于生产者的数量的字段的情况下,多于一个生产者可写入单个线组)。Num_Channels字段932和Num_Consumers 字段933与图9c的对应字段922、923本质上相同。
Image_Size字段934和Stencil_Dimension字段935本质上分别描述了待处理的图像的尺寸以及对将要从图像中切出的线组进行操作的模板的尺寸。注意,字段934、935两者都可以依照X、Y坐标值表示,并且可由编译器提供。此外,在实施例中,当线缓冲器接口单元被分配用于处理来自生产者 /消费者组的与全局信息有关的线组时,线缓冲器电路单元(图9b中未示出) 内的控制逻辑电路利用Image_Size字段934和Stencil_Dimension字段935 来确定被加载到线缓冲器接口单元的寄存器空间中的Row_Width值924, FB_Rows值926和FB_Base_Address值930。在替代的或进一步的实施例中,图像尺寸表示为可具有其自身的可单独寻址寄存器空间的两个单独的值:image_width和image_height。同样,模板尺寸可表示为可具有其自身的可单独寻址寄存器空间的两个单独的值:stencil_width和stencil_height。
Row_Width 924可直接从Image_Size 934信息获得。例如,如果 Image_Size表示为离图像原点最远的像素处(如果原点在左下角,则为右上角)的X、Y坐标对,则可将Row_Width确定为X坐标值。
可以从Image_Size字段934和Stencil_Dimension字段935确定FB_Rows 字段926和FB_Base_Address字段930。这里,具体地,可从图像的高度 (Image_Size 934的Y坐标值)和模板高度(Stencil_Dimension 935的Y坐标值)计算每个线组的高度(FB_Rows 926)。一旦线组的高度已知,则也可确定要从图像中解析的线组的数量和存储器中每个这种线组的起始线性地址(FB_Base_Address 930)。
因此,在实施例中,当线缓冲器单元被分配用于处理针对其全局寄存器空间由图9e的寄存器字段表征的特定生产者/消费者组合的线组时,即时计算上述确定,并将FB_Width 924、FB_Rows 926、Base_Address 934中的每一个连同直接复制的Num_Channels922和Num_Consumers 923一起加载到线缓冲器接口单元的特定寄存器空间中。逻辑电路和数据路径因此可存在于全局寄存器空间和线缓冲器接口单元寄存器空间的每个实例之间,以执行这些确定和数据传输。
在替代实施例中,编译器执行这些计算中的每一个,从而完全消除了很多(如果不是全部)全局寄存器空间。这里,例如,编译器可确定针对每个线组的Base_Address值,并将所述值加载到线缓冲器电路单元内的查找表中。随着配置对应的线组,从查找表调用所述值并将其加载到线缓冲器接口单元的寄存器空间中。也可实现两个极端之间的不同组合(正在运行中的硬件与确定的静态编译器)。
虽然上述实施例强调了在寄存器电路(“寄存器空间”)中保持配置信息,但是在其它或组合的实施例中,配置信息可保持在存储器(例如缓冲器单元存储器)或其它存储器或信息保持电路中。
c .全线组模式与虚拟高模式
上述讨论主要涉及“全线组”模式,其中线组作为完整、整个的线组在表生成器和线缓冲器单元之间被引用和传递。在被称为“虚拟高”的另一模式中,线组作为在分离的离散区段中完成的全宽度较高部分和较低部分在表生成器之间被引用和传送。
图10a和图10b示出了示例性的虚拟高模式序列的描述。如图10a所示,线组最初形成为全宽度行的较高部分1003和仅具有第一较短宽度区段的第一较低部分1004_1。线组的初始形成可由生产表生成器提供给线缓冲器单元,或者可由线缓冲器单元提供给消费表生成器。
在生产者的情况下,在模板1002对较低部分1004_1进行处理之后形成线组(在图10b中观察到大致的模板定位)。在生产者模板处理器对较低部分1004_1进行处理之后,模板继续向右水平地向前。最终,它们将对下一个较低部分1004_2进行处理。在完成下一个较低部分1004_2时,下一个较低部分1004_2从表生成器被发送到线缓冲器单元,线缓冲器单元将其存储在存储器中的正确位置,例如“紧邻”第一较低部分1004_1。所述过程继续,直到线组被完全写入线缓冲器单元存储器。
在消费者的情况下,如图10a所示,线组最初被传送到表生成器。模板处理器在线组的第一部分1004_1上操作。在第一部分1004_1的处理接近完成时,表生成器将请求从存储器获取并由线缓冲器单元传送的下一个较低部分1004_2。所述过程继续,直到完全处理所述线组。
注意,对于生产者和消费者两者,较低部分专门由表生成器标识。也就是说,在生产者情况和消费者情况两者下,较低部分1004_2专门由表生成器标识,并且线缓冲器单元专门访问存储器以存储/获取较低部分1004_2。在实施例中,表生成器通过基于由编译器所提供的信息而考虑的X、Y坐标值来识别较低部分1004_2(例如,较低部分1004_2的任意角、较低部分 1004_2的所有四个角、仅X坐标值等)。
d.宏I/O单元实施例
回顾图4中的讨论,为了将输入图像数据馈送到图像处理器,宏I/O单元405将图像数据的帧传递到线缓冲器单元。同样,为了将来自图像处理器的经处理的图像数据提供给正在利用图像处理器的无论什么系统资源(例如,应用软件程序、显示器、照相机等),经处理的图像数据的输出帧从线缓冲器单元被传送到宏I/O单元405。
图11a更详细地示出了宏I/O单元1105的实施例。如图11a所示,根据一个实施例,宏I/O单元1105耦合到图像处理器1101外部的存储器1106。这里,例如,外部存储器1106可以是计算机系统的系统存储器、相机的本地存储器、图形处理器、加速器和/或图像处理器1101是其组成部分或以其他方式与之相关联的协处理器。外部存储器1106被理解为是图像处理器1101 逻辑本身的外部的任何存储器并且因此不同于图像处理器的内部存储器(诸如线缓冲器单元或表生成器的本地存储器)。
在标称操作期间,要由图像处理器1101处理的图像数据的输入帧首先被写入外部存储器1106。宏I/O单元1105然后从外部存储器1106读取图像帧,并将它们馈送到图像处理器1101。在图像处理器1101完成处理一个或多个帧的足够部分之后,宏I/O单元将经处理的部分写入外部存储器1106 作为图像处理器的输出。注意,在帧本身被完全处理之前,帧的部分可以被写入外部存储器。
图11a示出了宏I/O单元1105的实施例的高级描述。如图11a所示,宏 I/O单元1105被设计为包括多个逻辑信道单元1110_1至1110_N,每个逻辑信道单元负责在外部存储器1106和要从外部存储器读取并由图像处理器处理的图像数据的内部消费者,或者需要从图像处理器写出到外部存储器1106 的输出图像数据的内部生产者之间建立逻辑信道。
在各种实施例中,这样的消费者或生产者可以是线缓冲器单元或模板处理器的表生成器。这里,回到图4,在实施例中,宏I/O单元405直接耦合到网络404,从而不仅允许与线缓冲器单元通信,而且允许与特定模板处理器的任何表生成器通信。在各种其它实施例中,宏I/O单元405如图4所建议的通过网络404与线缓冲器单元通信,而不是直接与线缓冲器单元通信,在这个意义上网络404更为全局化。
图11b示出了逻辑信道单元1110的逻辑电路设计的实施例。如图11b 所示,逻辑信道单元1110包括状态机逻辑电路1111、语境寄存器空间1112、重新格式化逻辑1113、输入队列1114、输出队列1115和到其它逻辑信道单元1116的通信信道。注意,在替代的实施例中,重新格式化逻辑1113可被实现为由多个逻辑信道单元共享的单个集中式块,而不是如图11b所建议的每个信道具有其自身专用的重新格式化逻辑。为简单起见,剩下的探讨将假设每个信道重新格式化逻辑块已被实现而不是集中式重新格式化。
逻辑信道单元1110所接收的图像数据被接收到输入队列1114中。驻留在输入队列1114中的输入数据的像素通常由重新格式化逻辑1113选择性地进行选择,重新格式化逻辑1113根据与输入队列1114中的输入像素格式化所根据的不同格式构建输出队列1115中输出数据的单元。也就是说,通常根据与输入队列1114中的输入像素格式化所根据的不同格式结构将输出数据的像素组织在输出队列1115中。
例如,在将输入数据从外部存储器馈送到图像处理器的情况下可根据 RGB、RGB、RGB、像素数据格式组织驻留在外部存储器中的输入图像数据。然而,(多个)模板处理器可对具有相同颜色的像素数据表进行操作。也就是说,(多个)模板处理器可对R像素的表、G像素的表和B像素的表进行单独操作。这样,为了将输入图像数据从其外部存储器中的格式准备为模板处理器所使用的格式,重新格式化逻辑1113将例如从输入队列1114中选择 R像素,以在输出队列1115中构建R像素块。一旦在输出队列1115中已构建了足够尺寸的R像素块,则将该块转发到线缓冲器单元或模板处理器的表生成器。
在例如R像素的供应已被耗尽并在图像处理器内被更深地转发之后,重新格式化逻辑1113可仅从输入队列1114选择G像素,以在输出队列1115 中构建G像素块。再次,在G像素的供应已被耗尽并被转发之后,重新格式化逻辑1113将从输入队列1114中选择B像素,以在输出队列1115中构建B像素块,用于在图像处理器内更深地转发。
相反,在逻辑信道单元1110用于支持将输出图像从图像处理器写入外部存储器的相反方向上,相同像素类型的块被加载到输入队列1114中。也就是说,例如R像素块、G像素块和B像素块从线缓冲器单元或模板处理器的表生成器在输入队列1114处接收。重新格式化逻辑1113然后选择这些像素中的特定像素,以在输出队列1115中形成具有原始RGB、RGB格式结构的输出块,用于写入外部存储器。
状态机逻辑1111控制重新格式化逻辑1113的重新格式化行为,确定在访问外部存储器时使用什么地址和/或寻址方案,并理解哪个线缓冲器单元或表生成器与其通信形成到外部存储器的逻辑信道。
在各种实施例中,状态机逻辑1111和重新格式化逻辑1113用专用逻辑电路来实现。在其它实施例中,状态机逻辑1111和/或重新格式化逻辑1113 可被实现为执行程序代码以实现状态机/重新格式化功能的微控制器。仍在其它实施例中,状态机逻辑1111/重新格式化逻辑1113可以被实现为编程和专用逻辑电路的组合。专用逻辑电路可被实现为硬连线和/或可编程逻辑电路 (例如,可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA)为后者的示例)。
为了理解其各种职责,状态机涉及的信息主体被保存在语境寄存器空间 1112内,例如当图像处理器被配置为执行特定DAG或流水线时,所述语境寄存器空间1112初始加载有用于该DAG或流水线的适当语境信息。在DAG 或流水线的执行期间对寄存器空间1112的后续更新可由状态机逻辑1111、图像处理器内的其它智能部件(诸如模板处理器内的标量处理器、和/或正在使用图像处理器的系统(例如,计算机、相机等))进行。
在实施例中,语境寄存器空间1112包含以下信息:1)在将输入数据馈送到图像处理器的情况下、或在将输出数据从图像处理器写入外部存储器的情况下,要从外部存储器读取的图像数据的帧的基本外部存储器地址;2) 图像帧的尺寸(例如,就以像素为单位的宽度和权重而言);3)外部存储器中的数据的格式;4)将在图像处理器内使用的数据的格式;以及5)信道逻辑上耦合到外部存储器的特定表生成器、模板处理器或线缓冲器单元的标识。在各种实施例中,在任一方向上支持的图像数据格式包括RGB、所有一种颜色(allone color)、其它可能的压缩的(packed)RAW。
如图11b所示,逻辑信道单元1110还包括通信链路1116,使其能够理解其它逻辑信道的状态从而实现多个逻辑信道当中的协调。仅作为一个示例,将输入数据馈送到图像处理器的逻辑信道可被配置为在将图像数据初始加载到图像处理器中之后,避免将输入图像数据的下一帧从外部存储器加载到图像处理器中,直到输出图像的下一帧已从图像处理器写入外部存储器。没有这种协调,例如对于一些DAG或流水线设计来说,图像处理器的内部存储器资源可能超限。
图12a、图12b和图13进一步详细说明逻辑信道的状态机逻辑1111可起作用的多种处理操作的一些相关特征。图12a和图12b涉及可由逻辑信道单元执行的外部存储器的特殊寻址过程,使得逻辑缓冲器单元可以更有效地操作。
回顾图10a和图10b中的讨论,线缓冲器单元可根据“虚拟高”模式操作,其中,未跨越整个帧宽度延伸的二维图像区域1004_1、1004_2从线缓冲器依次传递到表生成器,而不是跨越整个帧宽度传递全宽度线缓冲器或光栅扫描,其中下一行数据不被转发,直到前一行的所有数据已被完全转发。
图12a和图12b展示了逻辑信道单元1110的状态机逻辑1111可实现的存储器寻址方案,以便根据其中来自下一行的数据在前一行的所有数据已被完整转发之前被转发的诸如“虚拟高”技术补充逻辑缓冲器单元的到表生成器的数据的转发。这里,参考图12a,图像区域1201例如可被看作是包括图 10a的图像数据1004_1的图像数据。
这里,在线缓冲器单元将图像数据1004_1转发到表生成器之前,从外部存储器读取图像帧1220内的图像数据1201并传递到线缓冲器单元。为了将图像数据1201转发到线缓冲器单元,注意,存储器寻址应当避免跨越图像帧1220数据的整行进行读取,而是跨越行1210的有限扩展(limited expanse) 进行读取,然后“下拉”以读取下一较低行1211的下一有限扩展。
所述过程继续,直到从外部存储器读取所有区域1201(例如,其在读取有限扩展行1212之后完成),使其可被传递到线缓冲器单元。在图像区域1201被传递到线缓冲器单元之后,线缓冲器单元处于将图像数据1004_1转发到表生成器的位置。
继续采用如图12b所示的相同途径,根据如上参照图12a所讨论的相同寻址途径1210、1211、...1212和图像区域1201从外部存储器读取下一图像区域1202。在根据特殊存储器寻址途径从外部存储器读取图像区域1202之后,图像区域1202可被转发到线缓冲器单元,其将线缓冲器单元置于将图 10b中的图像数据1004_2转发到相同表生成器的位置。
这样,驻留在外部存储器和逻辑缓冲器单元之间的逻辑信道单元可以类似于线缓冲器单元将图像数据转发到表生成器的方式而将数据转发到线缓冲器单元。通过以类似于线缓冲器单元将输入数据馈送到表生成器的方式而将输入数据馈送到逻辑缓冲器单元,提高了线缓冲器单元的总吞吐量和效率。注意,逻辑信道单元还可在从外部存储器读取输入数据和将其转发到线缓冲器单元之间执行上述重新格式化(例如,对所有R、所有G和所有B的RGB)。
图12a和图12b的特殊寻址模式也可在将输出数据从图像处理器写入外部存储器的方向上应用。这里,表生成器可将处理后的输出图像数据传递到“虚拟高”模式中的线缓冲器,这反过来将促使线缓冲器单元将具有类似于图12b的区域1201、1202的有限扩展的图像数据区域转发到逻辑信道单元。作为响应,逻辑信道单元将根据相同的特殊寻址途径1210、1211、...1212 将数据写入外部存储器。再次重新格式化可由逻辑信道在从线缓冲器单元接收输出图像数据和将其写入外部存储器之间执行。
图13涉及另一种特殊寻址途径,其中例如在模板处理器上执行的内核专门请求在输入帧内的其位置上更随机或自组织(ad hoc)的、而不是按照其顺序有序或对齐的单独的表面区域。例如,如图13所示,模板处理器可按顺序请求图像区域1301、1302、1303和1304,而不是跨输入帧(无论是线组,虚拟高还是其它)的宽度以有序顺序模式请求数据。这里,通过采用图12a、图12b的有限扩展寻址途径1210、1211、...1212在自组织图像区域1301至1304的约束内来读取每个区域1301到1304。这样,外部存储器获取区域的形状是可配置的。
以自组织的而不是有序序列处理图像区域例如对于运动补偿例程(其中图像流中的特征是移动的)、几何失真例程(例如用于补偿透镜或其他图像收集缺陷,其中所收集的图像数据的帧是失真的)和矩阵倍数或转置操作可以是有用的。
在实施例中,自组织寻址消耗宏I/O单元1105内的两个逻辑信道单元 1110。第一逻辑信道单元接收模板处理器请求的每个自组织图像区域的基本坐标值。例如,可由模板处理器指定期望的图像区域,该模板处理器识别区域的高度和宽度以及该区域的左下角的地址。
假设标称操作包括具有相同宽度和高度的每个期望的区域,则可通过将每个期望的区域的左下角的坐标值转发到第一逻辑信道单元来识别自组织图像区域的序列(例如,首先将区域1301的左下角的坐标值发送到第一逻辑信道单元,接着将区域1302的左下角的坐标值发送到第一逻辑信道单元等)。然后,第一逻辑信道单元将接收到的坐标值转发到第二逻辑信道单元 (例如,经由图11a的通信信道1106),第二逻辑信道单元从外部存储器读取期望的区域,重新格式化,然后将它们转发到请求的模板处理器。注意,序列的自组织图像区域之间可能具有大量重叠。也就是说,第一图像区域可消耗与第二图像区域也消耗的相同图像区域的大部分。在实施例中,在外部存储器和逻辑信道之间实现高速缓存以在多个图像区域当中保持重叠的图像数据,从而可避免对存储器针对相同数据的多次访问。
图14示出了可由如上所述的逻辑信道单元执行的方法。如图14所示,所述方法包括启用与图像处理器内的消费组件的逻辑连接1401。所述方法还包括从图像数据的帧读取一系列有限宽度的图像区域,其中每个图像区域根据RGB格式被格式化1402。所述方法还包括将所述一系列有限宽度的图像区域重新格式化为具有相同颜色分量的图像数据的块1403。所述方法还包括将具有相同颜色分量的图像数据的块转发给消费组件1404。
e.实施例
有必要指出,上述各种图像处理器架构特征不一定限于传统意义上的图像处理,因此可应用于可以(或可以不)使得图像处理器被重新表征的其它应用。例如,如果上述各种图像处理器架构特征中的任何一个被用于创建和 /或生成和/或渲染动画,而不是实际相机图像的处理,则图像处理器可被表征为图形处理单元。此外,上述图像处理器架构特征可应用于其它技术应用,诸如视频处理、视觉处理、图像识别和/或机器学习。以这种方式应用,图像处理器可(例如作为协处理器)与更通用处理器(例如,其为计算系统的CPU或计算系统的CPU的一部分)集成,或者可为计算系统内的独立处理器。
上述硬件设计实施例可在半导体芯片内实施和/或实现为用于最终瞄准半导体制造工艺的电路设计的描述。在后者的情况下,这种电路描述可采取 (例如,VHDL或Verilog)寄存器传送级(RTL)电路描述、门级电路描述、晶体管级电路描述或掩码描述或其各种组合的形式。电路描述通常体现在计算机可读存储介质(诸如CD-ROM或其它类型的存储技术)上。
从前面的部分可认识到,如上所述的图像处理器可在计算机系统上的硬件中实现(例如,作为处理来自手持设备的相机的数据的手持设备的片上系统(SOC)的一部分)。在图像处理器被实现为硬件电路的情况下,注意,可直接从相机接收由图像处理器处理的图像数据。这里,图像处理器可以是分离的相机的一部分,或者是具有集成相机的计算系统的一部分。在后者的情况下,可直接从相机或从计算系统的系统存储器接收图像数据(例如,相机将其图像数据发送到系统存储器而不是图像处理器)。还要注意,前面部分中所描述的序多特征可适用于图形处理器单元(渲染动画)。
图15提供了计算系统的示例性描述。以下所描述的计算系统的许多组件适用于具有集成相机和相关联的图像处理器的计算系统(例如,手持设备,诸如智能电话或平板计算机)。普通技术人员将能够容易地区分两者。
如图15所示,基本计算系统可包括中央处理单元1501(其可包括例如多个通用处理核心1515_1至1515_N、以及设置在多核处理器或应用处理器上的主存储器控制器1517)、系统存储器1502、显示器1503(例如,触摸屏,平板)、本地有线点对点链路(例如USB)接口1504、各种网络I/O功能1505 (诸如以太网接口和/或蜂窝调制解调子系统)、无线局域网(例如WiFi)接口1506、无线点对点链路(例如蓝牙)接口1507和全球定位系统接口1508、各种传感器1509_1到1509_N、一个或多个相机1510、电池1511、电源管理控制单元1512、扬声器和麦克风1513以及音频编码器/解码器1514。
应用处理器或多核处理器1550可包括在其CPU 1501内的一个或多个通用处理核心、一个或多个图形处理单元1516、存储器管理功能1517(例如,存储器控制器)、I/O控制功能1518和图像处理单元1519。通用处理核心通常执行计算系统的操作系统和应用软件。图形处理单元1516通常执行图形密集功能,从而例如生成在显示器1503上呈现的图形信息。存储器控制功能1517与系统存储器1502对接以向系统存储器1502写入数据/从系统存储器1502读取数据。电源管理控制单元1512通常控制系统1500的功耗。
图像处理单元1519可根据以上在前部分中详细描述的任何图像处理单元实施例来实现。可替代地或组合地,IPU 1519可耦合到GPU 1516和CPU 1501中的任一者或两者作为其协处理器。此外,在各种实施例中,GPU 1516 可实现为具有以上详细描述的任意图像处理器特征。
触摸屏显示器1503、通信接口1504-1507、GPS接口1508、传感器1509_1 到1509_N、相机1510和扬声器/麦克风1513、编码解码器1514中的每一个均可被视为相对于整个计算系统的各种形式的I/O(例如,输入和/或输出),在适当的情况下,所述整个计算系统也包括集成的外围设备(例如,一个或多个相机1510)。根据实现,这些I/O组件中的各种I/O组件可集成在应用处理器/多核处理器1550上,或者可位于芯片外部或应用处理器/多核处理器1550的封装外部。
在实施例中,一个或多个相机1510包括能够测量相机与其视场中的对象之间的深度的深度相机。在应用处理器或其它处理器的通用CPU核心(或具有指令执行流水线以执行程序代码的其它功能块)上执行的应用软件、操作系统软件、设备驱动器软件和/或固件可执行上述任何功能。
本发明的实施例可包括如上所述的各种过程。所述过程可以体现在机器可执行指令中。所述指令可用于使通用或专用处理器执行某些过程。可替代地,这些过程可由包含用于执行过程的硬连线逻辑的特定硬件组件或者由编程的计算机组件和定制硬件组件的任何组合来执行。
本发明的元件还可提供为用于存储机器可执行指令的机器可读介质。所述机器可读介质可包括但不限于软盘、光盘、CD-ROM和磁光盘、FLASH 存储器、ROM、RAM、EPROM、EEPROM、磁卡或光卡、传播媒体或适合于存储电子指令的其它类型媒体/机器可读介质。例如,本发明可作为计算机程序被下载,所述计算机程序可通过在载波或其它传播介质中体现的数据信号经由通信链路(例如,调制解调器或网络连接)从远程计算机(例如,服务器)传送到请求计算机(例如,客户端)。
在前述说明书中,已参照本发明的具体示例性实施例描述了本发明。然而,将显而易见的是,在不脱离如所附权利要求中阐述的本发明的更广泛的精神和范围的情况下,可以对其进行各种修改和改变。因此,说明书和附图被认为是说明性的而不是限制性的。
Claims (20)
1.一种用于图像处理的设备,所述设备包括:
一个或多个内部处理器;以及
宏I/O信道单元,所述宏I/O信道单元耦合至外部存储器以及所述一个或多个内部处理器中的内部处理器,
其中,所述宏I/O信道单元包括:
输入队列,
输出队列,
重新格式化逻辑,所述重新格式化逻辑被配置来从所述输入队列读取输入图像数据的下一帧的部分以及将重新格式化的输出图像数据写入至所述输出队列以用于由所述内部处理器消费,以及
状态机,所述状态机耦合至语境寄存器空间,所述语境寄存器空间被配置来存储所述外部存储器内的图像数据的所述下一帧的基本存储器地址,
其中,所述状态机被配置来生成特定寻址排序以使得所述宏I/O信道单元以特定寻址规程的顺序从所述外部存储器读取图像数据的所述下一帧的部分并且将图像数据的所述下一帧的所述部分存储在所述输入队列中。
2.根据权利要求1所述的设备,其中,所述状态机被配置来使得所述重新格式化逻辑在对所述输入队列中的输入图像数据进行重新格式化时按照特定的重新格式化排序。
3.根据权利要求2所述的设备,其中,所述重新格式化排序指定所述输入图像数据中的多个颜色通道当中的排序。
4.根据权利要求3所述的设备,其中,所述重新格式化排序指定在将附加输入图像数据读取至所述输入队列中之前执行重新格式化的多次迭代。
5.根据权利要求1所述的设备,其中,所述特定寻址排序指定将图像数据的所述下一帧的第一行的一部分读取至所述输入队列中,所述第一行的一部分的宽度小于所述第一行的全宽度,并且后续读取图像数据的所述下一帧的后续行的一部分,所述后续行的一部分的宽度小于所述全宽度。
6.根据权利要求5所述的设备,其中,所述特定寻址排序指定以行排序来读取图像数据的部分,并且在图像数据的每个部分内,以行排序读取行。
7.根据权利要求1所述的设备,其中,所述特定寻址排序是自组织排序而不是按照顺序有序或对齐的。
8.根据权利要求7所述的设备,其中,所述设备进一步包括通信链路,所述通信链路被配置来接收待读取至所述输入队列中的图像数据的帧的下一部分的自组织地址。
9.根据权利要求7所述的设备,其中,所述设备进一步包括高速缓存,所述高速缓存被配置来存储图像数据的帧的先前读取的部分并且对于图像数据的帧的当前部分提供与图像数据的帧的所述先前读取的部分重叠的任何图像数据。
10.根据权利要求1所述的设备,其中,所述设备进一步包括语境寄存器空间,所述语境寄存器空间存储表示所述特定寻址排序的数据。
11.根据权利要求10所述的设备,其中,所述宏I/O信道单元被配置来在利用表示不同的寻址排序的数据更新所述语境寄存器空间时实现不同的寻址规程。
12.根据权利要求10所述的设备,其中,所述语境寄存器空间指定从所述输出队列读取图像数据的消费组件的标识符。
13.根据权利要求10所述的设备,其中,所述语境寄存器空间存储位于所述宏I/O信道单元与所述内部处理器之间的表生成器或线缓冲器的标识符。
14.一种用于图像处理的方法,所述方法由耦合至外部存储器以及内部处理器的宏I/O信道单元执行,所述方法包括:
由所述宏I/O信道单元在语境寄存器空间中存储所述外部存储器内的数据的下一帧的基本存储器地址;
由所述宏I/O信道单元的状态机生成特定寻址排序,所述特定寻址排序使得所述宏I/O信道单元以特定寻址规程的顺序从所述外部存储器读取数据的所述下一帧的部分;
将数据的所述下一帧的所述部分存储在所述宏I/O信道单元的输入队列中;以及
由所述宏I/O信道单元的重新格式化逻辑从所述输入队列读取输入数据的所述下一帧的所述部分;
由所述重新格式化逻辑重新格式化输入数据的所述下一帧的所述部分;以及
由所述重新格式化逻辑将输出数据写入到所述宏I/O信道单元的输出队列以供所述内部处理器消费。
15.根据权利要求14所述的方法,进一步包括由所述重新格式化逻辑在对所述输入队列中的输入数据进行重新格式化时按照特定的重新格式化排序。
16.根据权利要求15所述的方法,其中,所述重新格式化排序指定所述输入数据中的多个颜色通道当中的排序。
17.根据权利要求16所述的方法,其中,所述重新格式化排序指定在将附加输入图像数据读取至所述输入队列中之前执行重新格式化的多次迭代。
18.根据权利要求14所述的方法,其中,所述特定寻址排序指定将数据的所述下一帧的第一行的一部分读取至所述输入队列中,所述第一行的一部分的宽度小于所述第一行的全宽度,并且后续读取数据的所述下一帧的后续行的一部分,所述后续行的一部分的宽度小于所述全宽度。
19.根据权利要求18所述的方法,其中,所述特定寻址排序指定以行排序来读取数据的部分,并且在数据的每个部分内,以行排序读取行。
20.根据权利要求14所述的方法,其中,所述特定寻址排序是自组织排序而不是按照顺序有序或对齐的。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662300880P | 2016-02-28 | 2016-02-28 | |
US62/300,880 | 2016-02-28 | ||
US15/389,168 US10380969B2 (en) | 2016-02-28 | 2016-12-22 | Macro I/O unit for image processor |
US15/389,168 | 2016-12-22 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107133016A CN107133016A (zh) | 2017-09-05 |
CN107133016B true CN107133016B (zh) | 2021-03-30 |
Family
ID=57861271
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611273166.6A Active CN107133016B (zh) | 2016-02-28 | 2016-12-30 | 图像处理器的宏i/o单元 |
Country Status (9)
Country | Link |
---|---|
US (3) | US10380969B2 (zh) |
EP (1) | EP3420526A1 (zh) |
JP (1) | JP6750022B2 (zh) |
KR (1) | KR102072145B1 (zh) |
CN (1) | CN107133016B (zh) |
DE (2) | DE102016125846A1 (zh) |
GB (2) | GB2551412B (zh) |
TW (3) | TWI745084B (zh) |
WO (1) | WO2017146817A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10503689B2 (en) * | 2017-05-15 | 2019-12-10 | Google Llc | Image processor I/O unit |
US11386644B2 (en) * | 2017-10-17 | 2022-07-12 | Xilinx, Inc. | Image preprocessing for generalized image processing |
CN111971663A (zh) * | 2018-04-16 | 2020-11-20 | 埃米尔·巴登霍斯特 | 处理器和操作处理器的方法 |
CN110782387B (zh) * | 2018-07-30 | 2023-09-22 | 阿里巴巴(中国)有限公司 | 图像处理方法、装置、图像处理器及电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110078689A1 (en) * | 2009-09-25 | 2011-03-31 | Shebanow Michael C | Address Mapping for a Parallel Thread Processor |
US20120089792A1 (en) * | 2010-09-29 | 2012-04-12 | Brian Fahs | Efficient implementation of arrays of structures on simt and simd architectures |
US20150339799A1 (en) * | 2013-07-15 | 2015-11-26 | Nvidia Corporation | Techniques for optimizing stencil buffers |
Family Cites Families (85)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
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 |
US5162788A (en) * | 1989-06-16 | 1992-11-10 | Apple Computer, Inc. | Chunky planar data packing apparatus and method for a video memory |
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 | ソニー株式会社 | 画像データ処理装置および画像データ処理方法 |
US5671440A (en) | 1994-08-08 | 1997-09-23 | Eastman Kodak Company | Color image data reorientation and format conversion system |
US5612693A (en) | 1994-12-14 | 1997-03-18 | International Business Machines Corporation | Sliding window data compression using a toroidal bit shift register |
US5736988A (en) * | 1995-12-04 | 1998-04-07 | Silicon Graphics, Inc. | Apparatus and method for accelerated tiled data retrieval |
US5960211A (en) * | 1995-12-15 | 1999-09-28 | Hughes Aircraft | Data formatting method and apparatus for a data processing array |
DE59607143D1 (de) | 1996-01-15 | 2001-07-26 | Infineon Technologies Ag | Prozessor zur bildverarbeitung |
US5892962A (en) | 1996-11-12 | 1999-04-06 | Lucent Technologies Inc. | FPGA-based processor |
JPH10271299A (ja) * | 1997-03-27 | 1998-10-09 | Ricoh Co Ltd | デジタル複合機 |
US5943040A (en) * | 1997-06-27 | 1999-08-24 | Sun Microsystems, Inc. | Graphical image reformatting |
US6466265B1 (en) * | 1998-06-22 | 2002-10-15 | Eastman Kodak Company | Parallel output architectures for CMOS active pixel sensors |
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 |
JP4489305B2 (ja) | 1999-03-16 | 2010-06-23 | 浜松ホトニクス株式会社 | 高速視覚センサ装置 |
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 |
WO2003088033A1 (en) | 2002-04-09 | 2003-10-23 | University Of Rochester | Multiplier-based processor-in-memory architectures for image and graphics processing |
AU2003286131A1 (en) | 2002-08-07 | 2004-03-19 | Pact Xpp Technologies Ag | Method and device for processing data |
JP4284501B2 (ja) | 2003-03-28 | 2009-06-24 | セイコーエプソン株式会社 | 画像データ縮小装置、マイクロコンピュータ及び電子機器 |
US20060044576A1 (en) | 2004-07-30 | 2006-03-02 | Kabushiki Kaisha Toshiba | Apparatus for image processing |
US7667764B2 (en) | 2004-06-04 | 2010-02-23 | Konica Minolta Holdings, Inc. | Image sensing apparatus |
JP2006013701A (ja) | 2004-06-23 | 2006-01-12 | Seiko Epson Corp | 表示コントローラ、電子機器及び画像データ供給方法 |
JP4219887B2 (ja) | 2004-12-28 | 2009-02-04 | 富士通マイクロエレクトロニクス株式会社 | 画像処理装置及び画像処理方法 |
JP4111192B2 (ja) | 2004-12-28 | 2008-07-02 | セイコーエプソン株式会社 | メモリコントローラ、表示コントローラ及びメモリ制御方法 |
JP6059413B2 (ja) | 2005-04-28 | 2017-01-11 | クアルコム,インコーポレイテッド | 再構成可能命令セル・アレイ |
US7882339B2 (en) | 2005-06-23 | 2011-02-01 | Intel Corporation | Primitives to enhance thread-level speculation |
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 |
US8094552B1 (en) * | 2005-11-03 | 2012-01-10 | Seagate Technology Llc | Adaptive buffer for frame based storage communications protocols |
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 |
US7595805B2 (en) | 2006-04-11 | 2009-09-29 | Qualcomm Incorporated | Techniques to facilitate use of small line buffers for processing of small or large images |
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 | ブラザー工業株式会社 | 画像処理装置および画像処理プログラム |
US20090015850A1 (en) | 2007-07-13 | 2009-01-15 | Kenneth Edward Smith | Rapid loading of interleaved RGB data into SSE registers |
WO2009031302A1 (ja) | 2007-09-05 | 2009-03-12 | Tohoku University | 固体撮像素子及びその駆動方法 |
EP2289001B1 (en) | 2008-05-30 | 2018-07-25 | Advanced Micro Devices, Inc. | Local and global data share |
US20090319007A1 (en) | 2008-06-20 | 2009-12-24 | Mcnulty Jr James F | Shocking device having a time-based monitoring and recording circuit |
JP4999791B2 (ja) | 2008-06-30 | 2012-08-15 | キヤノン株式会社 | 情報処理装置、その制御方法、及びプログラム |
JP5339824B2 (ja) | 2008-09-08 | 2013-11-13 | キヤノン株式会社 | 画像形成装置およびその制御方法 |
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 | 삼성전자주식회사 | 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법 |
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 |
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 | パナソニック株式会社 | プログラム生成装置、プログラム生成方法、プロセッサ装置及びマルチプロセッサシステム |
WO2012124251A1 (ja) | 2011-03-16 | 2012-09-20 | パナソニック株式会社 | データ処理装置、データ処理方法及びデータ共有システム |
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 | 晨星半導體股份有限公司 | 影像處理裝置與影像處理方法 |
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 |
US9749548B2 (en) | 2015-01-22 | 2017-08-29 | Google Inc. | Virtual linebuffers for image signal processors |
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 |
US10291813B2 (en) | 2015-04-23 | 2019-05-14 | Google Llc | Sheet generator for image processor |
US9965824B2 (en) | 2015-04-23 | 2018-05-08 | Google Llc | Architecture for high performance, power efficient, programmable image processing |
US9756268B2 (en) | 2015-04-23 | 2017-09-05 | Google Inc. | Line buffer unit for image processor |
US9769356B2 (en) | 2015-04-23 | 2017-09-19 | Google Inc. | Two dimensional shift array for image processor |
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 |
US9772852B2 (en) | 2015-04-23 | 2017-09-26 | Google Inc. | Energy efficient processor core architecture for image processor |
US10297003B2 (en) * | 2015-09-21 | 2019-05-21 | Qualcomm Incorporated | Efficient saving and restoring of context information for context switches |
-
2016
- 2016-12-22 US US15/389,168 patent/US10380969B2/en active Active
- 2016-12-29 DE DE102016125846.6A patent/DE102016125846A1/de active Pending
- 2016-12-29 EP EP16829209.2A patent/EP3420526A1/en not_active Withdrawn
- 2016-12-29 WO PCT/US2016/069215 patent/WO2017146817A1/en active Application Filing
- 2016-12-29 DE DE202016107470.3U patent/DE202016107470U1/de active Active
- 2016-12-29 KR KR1020187022065A patent/KR102072145B1/ko active IP Right Grant
- 2016-12-29 JP JP2018539874A patent/JP6750022B2/ja active Active
- 2016-12-30 TW TW109131928A patent/TWI745084B/zh active
- 2016-12-30 GB GB1622425.5A patent/GB2551412B/en active Active
- 2016-12-30 GB GB1910667.3A patent/GB2577959B/en active Active
- 2016-12-30 TW TW107146642A patent/TWI702840B/zh active
- 2016-12-30 TW TW105144285A patent/TWI650013B/zh active
- 2016-12-30 CN CN201611273166.6A patent/CN107133016B/zh active Active
-
2017
- 2017-05-18 US US15/599,086 patent/US10504480B2/en active Active
-
2019
- 2019-11-15 US US16/685,388 patent/US10733956B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110078689A1 (en) * | 2009-09-25 | 2011-03-31 | Shebanow Michael C | Address Mapping for a Parallel Thread Processor |
US20120089792A1 (en) * | 2010-09-29 | 2012-04-12 | Brian Fahs | Efficient implementation of arrays of structures on simt and simd architectures |
US20150339799A1 (en) * | 2013-07-15 | 2015-11-26 | Nvidia Corporation | Techniques for optimizing stencil buffers |
Non-Patent Citations (1)
Title |
---|
Pyramid Architecture for 3840×2160 Quad Full High Definition 30 Frames/s Video Acquisition;Wei-Min Chao 等;《IEEE Transactions on Circuits and Systems for Video Technology》;20101130;第20卷(第11期);第1499-1508页 * |
Also Published As
Publication number | Publication date |
---|---|
US20200160809A1 (en) | 2020-05-21 |
TW202112140A (zh) | 2021-03-16 |
US20170256230A1 (en) | 2017-09-07 |
GB2577959A (en) | 2020-04-15 |
CN107133016A (zh) | 2017-09-05 |
EP3420526A1 (en) | 2019-01-02 |
TWI745084B (zh) | 2021-11-01 |
US10380969B2 (en) | 2019-08-13 |
TW201735650A (zh) | 2017-10-01 |
DE202016107470U1 (de) | 2017-06-30 |
JP6750022B2 (ja) | 2020-09-02 |
KR20180100362A (ko) | 2018-09-10 |
TWI702840B (zh) | 2020-08-21 |
GB2577959B (en) | 2020-10-07 |
GB2551412B (en) | 2019-09-04 |
US10504480B2 (en) | 2019-12-10 |
GB201910667D0 (en) | 2019-09-11 |
GB201622425D0 (en) | 2017-02-15 |
WO2017146817A1 (en) | 2017-08-31 |
US20170249921A1 (en) | 2017-08-31 |
TWI650013B (zh) | 2019-02-01 |
US10733956B2 (en) | 2020-08-04 |
GB2551412A (en) | 2017-12-20 |
TW201921955A (zh) | 2019-06-01 |
KR102072145B1 (ko) | 2020-01-31 |
JP2019509549A (ja) | 2019-04-04 |
DE102016125846A1 (de) | 2017-08-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11190718B2 (en) | Line buffer unit for image processor | |
JP6858239B2 (ja) | プログラムコードを、高性能で電力効率の良いプログラマブルな画像処理ハードウェアプラットフォームにマッピングするためのコンパイラ技法 | |
JP7202987B2 (ja) | 高性能で、電力効率の良い、プログラマブルな画像処理のためのアーキテクチャ | |
US10216487B2 (en) | Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure | |
US10733956B2 (en) | Macro I/O unit for image processor |
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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: American California Applicant after: Google limited liability company Address before: California Applicant before: Google Inc. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |