CN107563953B - 具有二维执行通道阵列和二维移位寄存器的图像处理器的区块操作 - Google Patents

具有二维执行通道阵列和二维移位寄存器的图像处理器的区块操作 Download PDF

Info

Publication number
CN107563953B
CN107563953B CN201710534277.6A CN201710534277A CN107563953B CN 107563953 B CN107563953 B CN 107563953B CN 201710534277 A CN201710534277 A CN 201710534277A CN 107563953 B CN107563953 B CN 107563953B
Authority
CN
China
Prior art keywords
array
dimensional
contents
shifted
shift register
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201710534277.6A
Other languages
English (en)
Other versions
CN107563953A (zh
Inventor
A.梅克斯纳
D.F.芬切尔斯坦
D.帕特森
W.R.马克
J.R.雷德格雷夫
O.沙查姆
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of CN107563953A publication Critical patent/CN107563953A/zh
Application granted granted Critical
Publication of CN107563953B publication Critical patent/CN107563953B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N25/00Circuitry of solid-state image sensors [SSIS]; Control thereof
    • H04N25/70SSIS architectures; Circuits associated therewith
    • H04N25/76Addressed sensors, e.g. MOS or CMOS sensors
    • H04N25/767Horizontal readout lines, multiplexers or registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0207Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • G06F15/8023Two dimensional arrays, e.g. mesh, torus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • G06F5/015Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising having at least two separately controlled shifting levels, e.g. using shifting matrices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N25/00Circuitry of solid-state image sensors [SSIS]; Control thereof
    • H04N25/40Extracting pixel data from image sensors by controlling scanning circuits, e.g. by modifying the number of pixels sampled or to be sampled

Abstract

描述了一种方法,该方法包含在具有二维执行通道阵列和二维移位寄存器阵列的图像处理器上,重复地移位二维移位寄存器阵列的多个行或列的第一内容,并且在移位之间重复地执行至少一条指令,该指令在移位的第一内容和/或第二内容上操作,该第一内容和/或第二内容驻留在移位的第一内容已被移入的二维移位寄存器阵列的相应位置中。

Description

具有二维执行通道阵列和二维移位寄存器的图像处理器的区 块操作
技术领域
本发明的领域通常涉及图像处理,更具体地说,是具有二维执行通道阵列和二维移位寄存器的图像处理器的区块操作。
背景技术
图像处理典型地包含被组织成为阵列的像素值的处理。在此,空间组织的二维阵列捕获图像的二维性质(附加维度可以包含时间(例如,二维图像的序列)和数据类型(例如,颜色)。在典型情况下,成阵列的像素值由已经产生静止图像或帧序列的相机提供,以捕获动作的图像。常规的图像处理器通常落在两个极端的任何一侧上。
第一个极端将图像处理任务作为在通用处理器或类通用的处理器(例如,具有向量指令增强的通用处理器)上执行的软件程序来进行。尽管第一极端典型地提供了高度通用的应用软件开发平台,但是其更细颗粒度的数据结构结合与相关开销(例如,指令获取和解码、片上和片外数据的处理、推测性执行)的使用最终导致在执行程序代码期间,每单元数据消耗的能量更大。
第二个相反的极端将固定功能的硬连线电路系统应用于更大的数据区块。更大(相对于更细的颗粒度)的数据区块直接应用于定制设计的固定功能电路,大大地减少了每数据单元的功率消耗。但是,定制设计的固定功能电路的使用通常导致处理器只可以进行有限的一组任务。如此,广泛万能的 (与第一极端相关联的)编程环境在第二极端中是缺乏的。
提供高度通用的应用软件的开发机会以及改善每数据单元的功率效率相结合的技术平台仍然是期望但却还缺失的解决方案。
发明内容
描述了一种方法,该方法包含在具有二维执行通道阵列和二维移位寄存器阵列的图像处理器上,重复地移位所述二维移位寄存器阵列的多个行或列的第一内容,并且在移位之间重复地执行至少一条指令,该指令在所述移位的第一内容和/或第二内容上操作,该第一内容和/或第二内容驻留在所述移位的第一内容已被移入的所述二维移位寄存器阵列的相应位置中。
描述了一种设备,该设备包含在具有二维执行通道阵列和二维移位寄存器阵列是图像处理器上,重复地移位所述二维移位寄存器阵列的多个行或列的第一内容,并且在移位之间重复地执行至少一条指令,该指令在所述移位的第一内容和/或第二内容上操作,该第一内容和/或第二内容驻留在所述移位的第一内容已被移入的所述二维移位寄存器阵列的相应位置中。
附图说明
以下描述和附图用于说明本发明的各种实施例。在附图中:
图1示出了技术平台的各种组件;
图2a示出了用内核构建的应用软件的实施例;
图2b示出了内核的结构的实施例;
图3示出了内核的操作的实施例;
图4a、4b和4c描绘了在较高级别的应用软件开发环境中开发内核线程的虚拟处理器的存储器模型的各个方面;
图5a示出了以具有位置相对格式的加载指令写入的线程的实施例;
图5b示出了具有不同像素密度的图像;
图6示出了应用软件开发和仿真环境的实施例;
图7示出了图像处理器硬件架构的实施例;
图8a、8b、8c、8d和8e描绘了将图像数据解析成线组,将线组解析为表单和在具有重叠的模板的表单上进行的操作;
图9a示出了模板处理器的实施例;
图9b示出了模板处理器的指令字的实施例;
图10示出了模板处理器中的数据计算单元的实施例;
图11a、11b、11c、11d、11e、11f、11g、11h、11i、11j和11k描绘了使用二维移位阵列和执行通道阵列以确定具有重叠的模板的一对相邻的输出像素值的示例;
图12示出了用于集成执行通道阵列和二维移位阵列的单元格的实施例;
图13示出了二维行/列的求和操作;
图14a、14b、14c和14d示出了用于实现二维行的求和操作的低级别操作;
图15示出了二维前缀的求和操作;
图16a、16b、16c和16d示出了用于实现二维前缀的求和操作的低级别操作;
图17涉及二维查找最小值操作;
图18a、18b、18c和18d示出了用于实现二维查找最小值操作的低级别操作;
图19a和19b示出了矩阵乘法操作;
图20a、20b、20c、20d和20e示出了通过二维移位寄存器实现矩阵乘法操作的低级别操作;
图21示出了DFT操作;
图22a、22b、22c、22d、22e和22f示出了通过二维移位寄存器实现DFT 操作的低级别操作;
图23示出了蝶形操作;
图24a、24b和24c示出了通过二维移位寄存器实现的蝶形操作;
图25示出了具有区块图像的基底图像和替代图像;
图26a、26b、26c和26d示出了进行区块匹配算法的低级别操作;
图27示出了用于产生目标为具有二维执行通道阵列和二维移位寄存器阵列的硬件平台的程序代码的环境;
图28示出了计算系统的实施例。
具体实施方式
引言
以下描述了关于新的图像处理技术平台的众多实施例,该技术平台提供了使用更大的数据区块(例如,下面进一步描述的线线组和表单)的广泛通用的应用软件开发环境,以提供改善的功率效率。
1.0应用软件开发环境
a.内核的应用和结构
图1示出了图像处理器技术平台的高级别视图,其包含虚拟图像处理环境101、实际图像处理硬件103和编译器102,该编码器用于将为虚拟处理环境101编写的较高级别的代码翻译为实际硬件103物理执行的对象代码。如以下更详细描述的,虚拟处理环境101在可开发的应用方面是广泛通用的,并且被定制以便于应用的构成处理的容易地可视化。在由开发者104完成程序代码开发工作之后,编译器102将在虚拟处理环境101中编写的代码翻译成目标为实际硬件103的对象代码。
图2a示出了在虚拟环境中写入的应用软件的结构和形式的示例。如图 2a所示,程序代码可以期望是处理输入图像数据201的一个或多个帧,以影响一些在输入图像数据201上的总体变换。变换以程序代码201的一个或多个内核的操作实现,该程序代码操作在由开发人员表述的编排序列中的输入图像数据上。
例如,如图2a所示,总体变换首先通过使用第一内核K1处理每个输入图像而被影响。由内核K1产生的输出图像然后通过内核K2操作。由内核 K2产生的每个输出图像然后通过内核K3_1或K3_2操作。由(一个或多个) 内核K3_1/K3_2产生的输出图像然后通过内核K4操作。内核K3_1和K3_2 可以是设计为通过利用在K3阶段处的并行处理来加速总体处理的相同的内核,或者,可以是不同的内核(例如,内核K3_1操作在第一指定种类的输入图像上并且内核K3_2操作在第二个不同种类的输入图像上)。
如此,较大的总体图像处理序列可以采用图像处理流水线或有向非周期图(DAG)的形式,并且可以通过正在开发的程序代码的代表来配备开发环境,用以实际呈现开发者。内核可以通过开发者单独地开发、和/或可以通过任何底层技术(例如其实际的信号处理器硬件和/或设计)的实体和/或通过第三方(例如,为开发环境而写入的内核软件的供应商)提供。如此,可以预料的是,名义上的开发环境将包含一个内核的“库(library)”,开发人员可以通过各种方式自由地“接合”来产生其更大开发努力的总体流程。期望成为该库一部分的一些基本的内核可以包含内核,用以提供以下基本图像处理任务的任何一个或多个:卷积、去噪、颜色空间变换、边缘和角点检测、锐化、白平衡、伽马校正、色调映射、矩阵乘法、图像配准、金字塔构造、小波变换、区块离散余弦和傅里叶变换。
图2b示出了可以由开发者设想的内核203的结构的示例性绘示。如图 2b所示,内核203可以被看作程序代码(“线程”)204的多个并行线程,该程序代码每个都在相应的底层处理器205上操作,其中每个处理器205导向输出阵列206(诸如在产生内核的输出图像中的指定的像素位置)中的特殊的位置。为简化起见,只有三个处理器和对应的线程在图2b中示出。在各种实施例中,每个绘示的输出阵列位置将具有其自身专用的处理器和对应的线程。换言之,分别的处理器和线程可以被分配给在输出阵列中的每个像素。在替代的方法中,相同的线程可以产生比输出像素多的数据,和/或两个不同的线程(例如,在某一限制的情况下)可以合作产生相同输出像素的数据。
如以下将更详细所述的,在各种实施例中,在实际底层的硬件中,执行通道的阵列和对应的线程一致地操作(例如,以单指令多数据(SIMD)类似的方式),以产生正在处理的帧的“线组”的一部分的输出图像数据。线组是图像帧的连续的、相当大的区。在各种实施例中,开发者可以意识到,硬件操作在线组上或者开发环境可以呈现抽象,在该抽象中存在分别的处理器和线程以用于例如在输出帧中的每个像素(例如,在由其自身专用的处理器和线程产生的输出帧中的每个像素)。无论如何,在各种实施例中,开发者理解内核包含用于每个输出像素的单独线程(输出阵列是否可视化为整个输出帧或其中区)。
如以下将更详细所述的,在实施例中,在虚拟环境中被呈现给开发者的处理器205具有指令集架构(ISA),该指令集架构不仅支持标准(例如,RISC) 操作码,也包含特别格式的数据存取指令,该指令允许开发者通过正在进行的像素处理,方便地可视化像素。与常规的数学和程序控制操作码的整个ISA 相结合,方便地定义/可视化任何输入阵列位置的能力允许了极其万能的编程环境,该编程环境基本上允许应用程序开发者在任何大小的图像表面上,理想地定义待进行的任何期望的功能。例如,理想地,任何数学操作可以容易地被编程以应用于任何模板的大小。
关于数据存取指令,在实施例中,虚拟处理器的ISA(“虚拟”ISA)包含特定的数据加载指令和特定的数据储存指令。数据加载指令可以从图像数据的输入阵列内的任何位置中读取。数据储存指令可以写入到图像数据的输出阵列内的任何位置中。后者的指令允许把相同处理器的多个实例方便地用于不同的输出像素位置(每个处理器写入到在输出阵列中的不同的像素)。如此,例如,模板大小自身(例如,表达为像素的宽度和像素的高度)可以被制成方便于编程的特性。处理操作的可视化通过具有特定的指令格式的每个特定的加载和储存指令,进一步被简化,由此目标阵列位置被简单地指定为X和Y坐标。
无论如何,通过实例化在输出阵列中的每个多位置的分别的处理器,处理器可以并行地执行其相应的线程,以便例如同时产生在输出阵列中的所有位置的相应值。值得注意的是,典型地,许多图像处理例程在相同输出图像的不同像素上进行相同操作。如此,在开发环境的一个实施例中,每个处理器被假定为相同的并且执行相同的线程程序代码。因此,虚拟环境可以被看作由2D阵列——例如在锁定步骤中执行相同代码的相同处理器的2D阵列——构成的二维(2D)SIMD处理器。
图3示出了用于两个虚拟处理器的处理环境的更详细示例,该虚拟处理器对于输出阵列中的两个不同的像素处理相同的代码。图3示出了对应于正在产生的输出图像的输出阵列304。在此,第一虚拟处理器正在处理线程301 的代码,以在输出阵列304的位置X1处产生输出值,并且第二虚拟处理器正在处理线程302的代码,以在输出阵列304的位置X2处产生输出值。再次,在各种实施例中,开发者将理解,输出阵列304中(为简化起见,图3 仅示出其中的两个)的每个像素位置存在分别的处理器和线程。但是,在各种实施例中的开发者仅需要开发用于一个处理器和线程的代码(因为机器的类似SIMD的性质)。
如在本领域已知的,输出像素值常常通过处理包含并围绕对应的输出像素位置的输入阵列的像素来确定。例如,如由图3可见,输出阵列304的位置X1对应于输入阵列303的位置E。将被处理以确定输出值X1的输入阵列303像素值的模板因此将对应于输入值ABCDEFGHI。类似地,将被处理以确定输出值X2的输入阵列像素的模板将对应于输入值DEFGHIJKL。
图3示出了一对线程301、302所对应的虚拟环境程序代码的示例,该一对线程可以被用于相应地计算输出值X1和X2。在图3的示例中,两对代码是相同的,并且将九个输入阵列值的模板平均以确定对应的输出值。两个线程之间的唯一不同是从输入阵列中调用的变量和写入的输出阵列的位置。具体来说,写入输出位置X1的线程在模板ABCDEFGHI上操作,并且写入输出位置X2的线程在模板DEFGHIJKL上操作。
从来自该对线程301、302的相应的程序代码中可以看出,每个虚拟处理器至少包含内部寄存器R1和R2,并且至少支持以下指令:1)LOAD指令,从输入阵列进入到R1中;2)LOAD指令,从输入阵列进入到R2中;3)ADD指令,添加R1和R2的内容并将结果放在R2中;4)DIV指令,将R2内的值除以即刻操作数9;和5)STORE指令,将R2的内容存储到线程专用的输出阵列位置。再次,尽管只有两个输出阵列位置并且只有两个线程及对应的处理器在图3中示出,可以想到的是,在输出阵列中的每个位置都可以分配到虚拟处理器和进行这些功能的对应的线程。在各种实施例中,与处理环境的类似SIMD性质保持一致,多个线程相互隔离地执行。换言之,不存在虚拟处理器之间的线程到线程的通信(一个SIMD通道被阻止穿越进入另一SIMD通道)。
b.虚拟处理器存储器模型
在各种实施例中,虚拟处理器的相关特性是其存储器模型。如在本领域所理解的,处理器从存储器中读取数据,在该数据上进行操作,并且将新数据写回到存储器中。存储器模型是处理器具有将数据组织在存储器中的方式的透视图或视图。图4a-4c涉及用于开发环境的虚拟处理器的存储器模型的实施例。为了示例的目的,使用了仅包含三个虚拟处理器和对应线程401的简化环境。如以下更详细描述的,虚拟处理器的存储器模型注意保留SIMD 的语义,然而同时,为每个虚拟处理器提供标量操作和私有的中间值的存储空间。
如图4a所示,在一个实施例中,每个虚拟处理器操作出的存储区域420,基于存储的信息的类型被组织成为六个不同的分区。具体而言,存在:1) 私有的暂存器区域402;2)全局输入数据阵列区域403;3)全局输出数据阵列区域404;4)全局查找表信息区域405;5)全局原子统计区域406;和 6)全局常数表信息区域407。
如图4a所示的分区尝试可视化共享与总体的处理环境的类似SIMD的性质一致的虚拟处理器之中共享的或“全局的”那些存储器区域。同样地,图4a也尝试可视化不在虚拟处理器之间共享或对特定的虚拟处理器为“私有”的存储器的其它区域。具体而言,如图4a所示,所有的存储器分区都是全局的,除了对每个虚拟处理器是私有的暂存区域402以外。多个不同存储器区域也具有如以下进一步所述的不同的存储器寻址方案。
关于暂存区域402,在复杂的图像处理算法的执行处理(例如,然后读回信息并稍后使用它)中,临时储存中间信息并不罕见。此外,这些信息在线程之间是不同的(不同的输入值可以影响不同的中间值)的现象并不罕见。存储器模型因此包含每个处理器私有的暂存区域402,以用于通过每个虚拟处理器的对应的线程来储存这些中间信息。在一个实施例中,特定处理器的暂存区区域通过采用典型的(例如,线性)随机存取存储器地址来存取409,并且是存储器的读取/写入区域(即,虚拟处理器可以既读取来自私有存储器的信息又将信息写入私有存储器)。存取暂存区域的虚拟处理器ISA指令格式的实施例将在以下进一步更详细地进行讨论。
输入阵列部分403含有一组输入数据,该组输入数据被调用入408该组线程中以便产生输出数据。在一个典型的情况中,输入阵列对应于每个线程正在其上或其内部操作的图像(例如,帧)或者部分图像。输入图像可以是诸如通过相机提供的像素信息的真实输入,或者一些形式的中间图像——诸如在更大的总体图像处理序列中的由之前的内核提供的信息。虚拟处理器通常不会为相同的输入数据项目竞争,因为它们在相同的周期期间在输入图像数据的不同像素位置上操作。
在一个实施例中,新型的存储器寻址方案用于定义从输入阵列403中调用哪些特定的输入值。具体而言,使用“位置相对”寻址方案,其采用X、Y 坐标而不是常规的线性存储器地址来定义期望的输入数据。如此,虚拟处理器ISA的加载指令包含指令格式,该指令格式采用X分量和Y分量来定义在输入阵列中的指定存储器位置,如此,二维坐标系用于为从输入阵列403 读取的输入值寻址存储器。
位置相对存储器寻址方法的使用允许虚拟处理器正在操作的图像的区域对于开发者更容易地识别。如上所述,与常规的数学和程序控制操作码的整个ISA相结合,方便地定义/可视化任何输入阵列位置的能力允许了极其万能的编程环境,该编程环境基本上允许应用程序开发者在任何大小的图像表面上,理想地定义待进行的任何期望的功能。用于采取位置相对寻址方案的指令的各种指令格式的实施例,以及所支持的ISA的其它特性的实施例在以下进一步更详细地描述。
输出阵列404含有线程负责产生的输出图像数据。输出图像数据可以是最终图像数据——诸如在总体图像处理序列之后呈现在显示器上的实际图像数据,或者可以是中间图像数据——总体图像处理序列的后续内核将其作为其输入图像数据信息使用。再次,典型地,虚拟处理器不会为相同的输出数据项目竞争,因为其在相同的周期期间写入到输出图像数据的不同像素位置。
在实施例中,位置相对寻址方案也被用于写入输出阵列。如此,每个虚拟处理器的ISA包含储存指令,该储存指令的指令格式定义了在存储器中的目标写入位置为二维X、Y坐标而不是常规的随机存取存储器。关于虚拟ISA 的位置相对指令的实施例的更多细节在下面进一步提供。
图4a还示出了每个虚拟处理器进入保持在查找表存储器区域405内的查找表411中进行查找410。查找表常常被图像处理任务用于,例如获得不同阵列位置的滤波器或变换系数、实现复杂功能(例如,伽马曲线、正弦、余弦),其中查找表提供输入索引值的功能输出等。在此,可以预期的是,在相同的时钟周期期间,SIMN图像处理序列将常常进入相同的查找表中进行查找。如此,类似于输入和输出阵列存储器区域403、404,查找表区域 405是可由任何虚拟处理器都全局可存取的。图4a同样地示出了从保持在查找表存储器区域405内的相同查找表411中有效地查找信息的三个虚拟处理器中的每个虚拟处理器。
在实施例中,由于索引值典型地用于定义期望的查找表条目,所以使用正常线性存取方案对查找表信息区域进行存取。在实施例中,存储器的查找区域是只读的(即,处理器不可以改变查找表中的信息,并且只允许从其读取信息)。为简化起见,图4a显示了只有一个查找表驻留在查找表区域405 内,但虚拟环境允许多个不同的查找表在模拟运行期间驻留。以下进一步提供进入查找表内进行查找的指令的虚拟ISA指令格式的实施例。
图4b示出了写入413原子统计区域406的三个虚拟处理器中的每个虚拟处理器。图像处理“更新”输出信息或对输出信息进行适度改变并不罕见。更新的信息然后可以用于利用更新信息的其它下游处理。这些更新或适度变化的示例包含对输出数据的固定偏移的简单添加、被乘数与输出数据的简单乘法或者将输出数据与一些阈值比较的最小值或最大值。
在这些序列中,如图4b所示,可以在刚刚由单独的线程401计算的输出数据上操作,并且该结果被写入413原子统计区域406。根据实现语义,通过原子动作操作的输出数据可以通过处理器在内部保持,或者从输出阵列中调用412,如图4b稍后所示。在各种实施例中,可以在输出数据上操作的原子动作包含加法、乘法、最小化和最大化。在实施例中,原子统计区域406 使用位置相对寻址方案(如通过输入和输出阵列存取)进行存取,因为输出数据的更新将被逻辑地组织在与输出数据自身相同的二维阵列中。在以下进一步更详细地描述用于在输出数据上进行原子动作并且将结果写入统计区域406的虚拟ISA指令格式的实施例。
图4c示出了从在恒定的存储器区域407内的恒定的查找表415中读取 414恒定值的每个虚拟处理器。在此,例如,可以期望的是,不同的线程401 可能需要在相同的时钟周期上的相同的常数或其它值(例如,对整个图像应用的特定乘数)。因此,进入恒定查找表415的存取将相同的标量值返回到如图4c中所描绘的虚拟处理器的每一个。因为查找表典型地通过索引值存取,在实施例中,通过线性随机存取存储器地址对恒定的查找表存储器区域进行存取。在实施例中,存储器的恒定区域是只读的(即,处理器不可以改变常数表中的信息,并且只允许从其读取信息)。为简化起见,图4c仅示出了在恒定存储区域407中的单个恒定查找表415。由于线程可以使用多于一个这样的表的存储器区域407,该存储器区域被配置为足够大,用以容纳需要/使用许多常数表。
c.虚拟处理器ISA
正如以上提到的多个实例中,虚拟处理器ISA可以包含多个相关特性。其中的一些即刻在下面详细描述。
在各种实施例中,每个虚拟处理器的ISA的指令格式使用相对定位为以下各项定义X、Y坐标:1)从输入阵列存储器区域读取输入图像数据的LOAD 指令;2)将输出图像数据写入输出阵列的STORE指令;和3)将原子更新到存储器的统计区域。
与常规的数据存取、数学和程序控制操作码的整个ISA相结合,方便地定义任何输入阵列位置的能力允许了极其万能的编程环境,该编程环境基本上允许应用程序开发者在任何大小的图像表面上,理想地定义待进行的任何期望的功能。例如,理想地,任何数学操作可以容易地被编程以应用于任何模板的大小。
在实施例中,用于从输入/输出阵列加载/存储到输入/输出阵列的指令具有以下格式
[OPCODE]LINEGROUP_(name)[(((X*XS+X0)/XD);((Y*YS+Y0) /YD);Z]
其中,[OPCODE]是操作的指定类型(从输入阵列中LOAD,STORE至输出阵列),并且LINEGROUP_(name)是分配到在输入或输出阵列存储器区域中的特定图像的特定部分(例如,图像数据的帧的线组)的名称。在此,因为不同线组分别操作,不同线组被给定不同的名称,所以其可以被唯一识别/存取(例如,LINEGROUP_1、LINEGROUP_2等)。在输入阵列存储器区域和输出阵列存储器区域中,相同名称的线组都可以存在。任何线组的原点可以是,例如,在其适当的存储器区域中的左下角落。
在原子统计表上进行更新的指令的情况下,在实施例中,指令格式采用以下类似结构:
[OPCODE]STATS_(name)[(((X*XS+X0)/XD);((Y*YS+Y0)/YD); Z]
其中显著的不同是输入操作数信息定义在特定的统计表(STATS_ (name))内的位置,而不是在输入或输出阵列内的特定的线组。与线组一样,不同的名称被给定不同的统计表,以便线程可以在其操作处理中在不同的统计表上进行唯一的操作。[OPCODE]指定待进行的特定的原子动作(例如,STAT_ADD;STAT_MUL;STAT_MIN;STAT_MAX)。
对于输入/输出阵列存取或原子统计表存取,指令的Z操作数定义哪个指名的线组或者统计表的通道被指令定为目标。在此,典型地,单一的图像将具有多个通道。例如,对于视频流的相同帧,视频图像典型地具有红色通道(R)、绿色通道(G)和蓝色通道(B)。在某种意义上,完整的图像可以被看作是堆叠在彼此顶部的分别的R、G和B通道图像。Z操作数定义其中哪一个被指令(例如,Z=0对应于红色通道,Z=1对应于蓝色通道,Z=2 对应于绿色通道)定为目标。每个线组和统计表因此被构造为包含正在处理的特定图像的每个通道的内容。
(X*XS+X0)/XD操作数定义了在被指令定为目标的指名的线组或统计表中的X位置,(Y*YS+Y0)/YD操作数定义了在被指令定为目标的指名的线组或统计表中的Y位置。X位置的XS和XD项以及Y位置的YS和 YD项被用于在具有不同像素密度的输入和输出图像之间进行缩放。缩放 (scaling)在以下进一步更详细地描述。
在最简单情况下,在输入和输出图像之间没有缩放,并且指令格式的X 和Y分量仅仅采用X+X0和Y+Y0的形式,其中X0和Y0是相对于线程位置的位置性偏移。线程被视为被分配给在其输出值被写入的输出阵列线组内的位置。对应的相同位置在输入阵列线组和任何统计表中是容易辨认的。
例如,如果线程在输出阵列LINEGROUP_1中被分配到指定X、Y位置,则指令
LOAD LINEGROUP_1[(X-1);(Y-1);Z]
将从LINEGROUP_1加载一值,该值位于输入阵列中的相同X、Y位置的向左一个像素位置并且向下的一个像素位置。
将X、Y位置的像素值与其左右的近邻一起平均的简单的模糊内核可以因此被写入伪代码,如图5a所示。如图5a所示,位置((X);(Y))对应于正在写入输出阵列的虚拟处理器的位置。在上述伪代码中,LOAD对应于来自输入阵列的负载的操作码,STORE对应于储存至输出阵列的操作码。注意到,输入阵列中存在LINEGROUP_1并且输出数组中存在LINEGROUP_1。
图5b示出了用于解释相对定位的负载和储存指令格式的缩放特征的目的的缩放的图像。下采样是指通过在输出图像中提供比所有存在于输入图像中的像素更少的像素,将较高分辨率的图像变换为较低分辨率的图像。上采样是指通过在输出图像中创建比存在于输入图像中的像素更多的像素,将较低分辨率的图像变换为较高分辨率的图像。
例如,参考图5b,如果图像501代表输入图像并且图像502代表输出图像,将进行下采样,因为在输出图像中的像素比在输入图像中的少。在此,对于在输出图像中的每个像素,在输入图像中的相干的像素在输出图像中沿着任一个轴移动,该相干像素确定从输出像素位置“远离”行进的输出像素的输出值。例如,对于3:1的下采样比,在输出图像中沿着任一轴的第一像素对应于在输入图像中沿着相同轴的第一、第二和第三像素,输出图像中的第二像素对应于在输入图像中的第四、第五和第六像素等。因此,第一输出像素在第三位置处具有相关像素,同时第二输出像素在第六位置处具有相关像素。
如此,在相对定位指令格式中的XS和YS被乘数项被用于实现下采样。如果图5a的模糊伪代码,其中为了沿着两个轴均进行3:1的下采样而进行重写,则代码将被重写为:
R1<=LOAD LINEGROUP_1[((3X)-1);3(Y);0]
R2<=LOAD LINEGROUP_1[3(X);3(Y);0]
R3<=LOAD LINEGROUP_1[((3X)+1);3(Y);0]
R2<=ADD R1,R2
R2<=ADD R2,R3
R2<=DIV R2,3
STORE LINEGROUP_1[(X);(Y);(0)];R2.
相比之下,在1:3向上采样的情况下(例如,图像502是输入图像并且图像501是输出图像),XD和YD除数将用于为沿着任一轴的每个输入像素创建三个输出像素。如此,模糊代码将被重写为:
R1<=LOAD LINEGROUP_1[(X-1)/3;(Y)/3;0]
R2<=LOAD LINEGROUP_1[(X)/3;(Y)/3;0]
R3<=LOAD LINEGROUP_1[(X+1)/3;(Y)/3;0]
R2<=ADD R1,R2
R2<=ADD R2,R3
R2<=DIV R2,3
STORE LINEGROUP_1[(X);(Y);(0)];R2
在各种实施例中,存取存储器的私有的、恒定的和查找的部分的指令的指令格式包含操作数,该操作数也采用a*b+c的形式,其中a是基本位置, b是缩放项,以及c是偏移。但是,在此采用线性寻址方法,其中a*b+c项基本上对应于应用于目标表的线性索引。该指令的每一个也包括操作码和被存取的存储器区域的标识符。例如,从查找表存储器区域进行查找的指令可以表达为:
LOAD LKUP_(name)[(A*B+C)]
其中,LOAD是识别加载操作的操作码,并且LKUP_(name)指定被存取的查找表存储器区域中的查找表的名称。再次,多个查找表可以被线程使用,并且因此命名方案用于识别存在于查找表存储器区域中的多于一个查找表中的适当的一个查找表。
具有类似意图的操作码的类似格式可以被用于以常数和私有的存储器区域为目标的指令(例如,LOAD CNST_(name)[(A*B+C)];LOAD PRVT_ (name)[(A*B+C)])。在实施例中,查找表和常数表的存取是只读的(处理器不能够改变已经放置在那处的数据)。如此,没有STORE指令存在于这些存储器区域。在实施例中,存储器的私有区域是读取/写入的。如此,储存指令存在于该存储器区域(例如,STORE PRVT[(A*B+C)])。
在各种实施例中,每个虚拟处理器包含通用寄存器,该通用寄存器可以含有整数、浮点或固定点值。此外,通用寄存器可以含有诸如8、16或32 位值的可配置的位宽度的数据值。因此,在输入阵列或者输出阵列中的每个像素位置处的图像数据可以具有8、16或32位的数据大小。在此,虚拟处理器可以配置为执行模式,该执行模式建立在通用寄存器内的值的位的大小和数值的格式。指令也可以指定即刻操作数(其为输入操作数,该输入操作数的输入值以指令自身直接表达,而不在指定的寄存器中被找到)。即刻操作数也可以具有可配置的8、16或者32位宽度。
在扩展的实施例中,每个虚拟处理器还能够在自身内部以标量模式或者 SIMD模式操作。换言之,在指定阵列位置内的数据可以被视为标量值或者具有多元素的向量。例如,第一配置可以建立8位的标量操作,其中每个图像阵列位置持有标量的8位值。相比之下,另一配置可以建立32位的并行 /SIMD操作,其中对于每阵列位置32位的全部数据大小,假设每个图像阵列持有4个8位值。
在各种实施例中,每个虚拟处理器也包含用于持有谓词值的寄存器。单一的谓词值常常是长度上的一位并且从操作码中表达结果,该操作码在现有数据上进行正确/错误或者大于/小于的测试。谓词值被用于,例如,在执行期间通过代码确定分支方向(并且因此在条件分支指令中用作操作数)。谓词值也可以被表达为在指令中的即刻操作数。
在各种实施例中,每个虚拟处理器包含用于持有标量值的寄存器。在此,标量值被储存入存储器模型的分区空间并且从存储器模型的分区空间中读取,该存储器模型为常数而保留(如以上关于图4c的讨论)。在此,处理相同图像的一组虚拟处理器的每个虚拟处理器使用来自恒定存储器空间的相同标量值。在扩展的实施例中,也存在标量谓语。这些是保持在满足谓语和标量的定义两者的寄存器空间中的值。
在各种实施例中,每个虚拟处理器被设计为类RISC指令集,其支持的算术指令操作码包含以下任何可行的组合:1)ADD(操作数A和B的相加);2)SUB(操作数A和B的相减);3)MOV(从一个寄存器移动操作数至另一个寄存器);4)MUL(操作数A和B相乘);5)MAD(操作数A和B相乘,并将C相到结果);6)ABS(返回操作数A的绝对值);7)DIV(操作数A除以操作数B);8)SHL(移位操作数A至左侧); 9)SHR(移位操作数A至右侧);10)MIN/MAX(返回操作数A和B中的较大一个);11)SEL(选择操作数A的指定字节);12)AND(返回操作数A和B的逻辑与);13)OR(返回操作数A和B的逻辑或);14) XOR(返回操作符A和B的逻辑异或);15)NOT(返回操作数A的逻辑非)。
指令集也包含标准谓语操作,诸如:1)SEQ(如果A等于B,则返回1);2)SNE(如果A不等于B,则返回1);3)SLT(如果A小于B,则返回1);4)SLE(如果A小于或等于B,则返回1)。控制流指令也包含诸如JMP(跳跃)和BRANCH,其中每一个可以包含名义上的变量或者谓语作为操作符。
D.应用软件开发和仿真环境
图6示出了应用软件开发和仿真环境601。如以上关于图2a-2b的讨论,通过在与总体有意的图像变换一致的策略性序列中布置内核,开发者可以开发综合的图像处理功能(例如,图像处理流水线,其中在流水线中的每个阶段进行专用的图像处理任务,一些其它的DAG规定的例程组)。内核可以从库602中调用,和/或开发者可以开发一个或多个定制的内核。
在库602内的内核可以由内核的第三方供应商和/或任何基础技术的提供者(例如,包含目标硬件图像处理器的硬件平台的供应商或者目标硬件图像处理器的供应商(例如,作为其中的设计或者实际硬件提供))提供。
在定制开发内核的情况下,在许多情况下,开发者仅需要为单一的线程 603编写程序代码。换言之,开发者仅需要编写程序代码,该程序代码通过参考相对于输出像素位置的输入像素值(例如,通过上述位置相对的存储器存取指令格式)确定单一输出像素值。当满足单一线程603的操作时,开发环境然后可以自动地在相应的虚拟处理器上实例化线程代码的多个实例,以影响在操作在图像表面区域的处理器的阵列上的内核。图像表面区域可以是图像帧的部分(诸如线组)。
在各种实施例中,定制的线程程序代码被写入在虚拟处理器ISA的对象代码(或者被编译到虚拟处理器ISA的对象代码的较高级别语言)中。定制内核的程序代码的执行的仿真可以在仿真运行环境中进行,该仿真运行环境包含存取根据存储器模型组织的存储器的虚拟处理器。在此,虚拟处理器604 的软件模型(面向对象的或以其它方式)和包含模型的存储器605被实例化。
虚拟处理器模型604然后仿真线程代码603的执行。当满足线程的性能时,其更大的内核和内核所属于的任何更大的功能,其整体被编译成底层硬件的实际对象代码。仿真环境601的全部可以实现为在计算机系统(例如,工作站)606上运行的软件。
2.0硬件架构的实施例
a.图像处理器硬件架构和操作
图7示出了实现在硬件中的图像处理器的架构700的实施例。例如,图像处理器可以成为目标,例如,通过将仿真环境内为虚拟处理器编写的程序代码转变为可以由硬件处理器实际执行的程序代码的编译器。如图7可见,架构700包含多个线缓冲单元701_1到701_M(以下为“线缓冲”、“线缓冲单元”或者诸如此类),该多个线缓冲单元701_1到701_M通过网络704(例如,包含片上交换网络、片上环形网络或者其它类型网络的片上网络 (NOC)),互联于多个模板处理器单元702_1到702_N(以下为“模板处理器”、“模板处理器单元”或者诸如此类)和对应的表单发生器单元703_1至 703_N(以下为“表单发生器”、“表单发生器单元”或者诸如此类)。在实施例中,任何线缓冲单元可以通过网络704,连接于任何表单发生器和对应的模板处理器。
在实施例中,程序代码被编译和加载于对应的模板处理器702上,用以进行更早被软件开发者定义的图像处理操作(程序代码也可以被加载于模板处理器的关联的表单发生器703,例如,根据设计和实现)。在至少一些实例中,图像处理流水线可以通过以下方式实现:将第一流水线阶段的第一内核程序加载到第一模板处理器702_1中,将第二流水线阶段的第二内核程序加载到第二模板处理器702_2中等等,其中第一内核进行流水线的第一阶段的功能,第二内核进行流水线的第二阶段的功能等等,并且安装附加的控制流方法以将输出图像数据从流水线的一个阶段传递至流水线的下一个阶段。
在其它配置中,图像处理器可以被实现为具有操作相同内核程序代码的两个或更多模板处理器702_1、702_2的并行机。例如,图像数据的高密度和高数据速率流可以通过在多个模板处理器之上来展开帧,该模板处理器中的每一个都进行相同的功能。
在其它配置中,可以通过用程序代码的处理器自身的相应的内核来配置相应的模板处理器,并且将适当的控制流钩配置到硬件来将基本上内核的任何DAG加载到硬件处理器上,以在DAG设计中将来自一个内核的输出图像引导到下一个内核的输入。
作为通常的流程,图像数据的帧通过宏I/O单元705接收,并且逐帧地传递至一个或多个线缓冲单元701。特定的线缓冲单元将图像数据的该帧解析为图像数据的更小区域,称为“线组”,然后通过网络704传递线组到特定的表单发生器。完整的或“完全的”单数线组可以例如,由帧的多个连续的完整行或者列的数据构成(为简洁起见,本说明书将主要涉及连续的行)。表单发生器进一步解析图像数据的线组为图像数据的更小区域,被称为“表单”,并且将表单呈现给对应的模板处理器。
在图像处理流水线或者DAG流具有单一的输入的情况下,通常输入帧被引导到相同线缓冲单元701_1,该线缓冲单元将图像处理解析为线组并且将将线组引导到表单发生器703_1,该表单发生器的对应的模板处理器702_1 在流水线/DAG中执行第一内核的代码。当通过在其处理的线组上的模板处理器702_1完成操作时,表单发生器703_1将输出线组传送至“下游的”线缓冲单元701_2(在一些使用情况中,输出线组可以传回至较早已经传送了输入线组的相同的线缓冲单元701_1)。
代表在其自己的相应的其它表单发生器和模板处理器(例如,表单发生器703_2和模板处理器702_2)上执行的流水线/DAG中的下个阶段/操作的一个或多个“消费者”内核然后从下游的线缓冲单元701_2接收由第一模板处理器702_1产生的图像数据。如此,在第一模板处理器上操作的“生产者”内核将其输出数据转发到在第二模板处理器上操作的“消费者”内核,其中在生产者内核与总体流水线或者DAG的设计一致后消费者内核进行下组任务。
模板处理器702设计为在图像数据的多个重叠模板上同时进行操作。模板处理器的多个重叠的模板与内部的硬件处理能力有效地确定了表单的大小。在此,在模板处理器702内,执行通道的阵列一致地操作,用以同时地处理由多个重叠模板涵盖的图像数据表面区域。
如以下更详细描述的,在各种实施例中,图像数据的表单被加载入在模板处理器702内的二维寄存器的阵列结构。通过将大量数据移动至大量寄存器空间中,作为例如单一加载操作,其中在其后即刻由执行通道阵列在数据上直接进行处理任务,表单的使用和二维寄存器的阵列结构被认为有效地提供了功率消耗的改善。此外,执行通道阵列的使用和对应的寄存器阵列提供了容易地可编程/可配置的不同的模板大小。
图8a到8e阐明了线缓冲单元701的解析活动、表单发生器单元703的更细粒度的解析活动、以及耦合至表单发生器单元703的模板处理器702的模板处理活动的两者的高水平实施例。
图8a描绘了图像数据801的输入帧的实施例。图8a也描绘了模板处理器被设计以操作的三个重叠的模板802(每个模板具有3像素×3像素的尺寸)的轮廓。每个模板相应地产生输出图像数据所用于的输出像素以实心黑色突出显示。为简洁起见,三个重叠的模板802被描绘为仅在垂直方向中重叠。要中肯地认识到,实际上,模板处理器可以设计成在垂直和水平方向上都具有重叠的模板。
因为在模板处理器内的垂直的重叠模板802,如图8a所示,在帧内存在单个模板处理器可以操作的宽频带图像数据。如将在以下更细节讨论的,在实施例中,模板处理器以从左到右跨图像数据的方式在其重叠的模板内处理数据(然后以从上到下的顺序,对下一组线重复)。因此,随着模板处理器继续其操作,实心黑色的输出像素区块的数目将在水平方向向右增长。如上所述,线缓冲单元701负责从足够模板处理器在延长数量的即将到来的周期上操作的传入的帧解析输入图像数据的线组。线组的示例性描绘被阐明为阴影区域803。在实施例中,如以下进一步描述的,线缓冲单元701可以包含不同的动态以将线组发送到表单发生器或者从表单发生器接收线组。例如,根据一个模式,被称为“全组”,图像数据的完整的全宽度线在线缓冲单元和表单发生器之间传递。根据第二个模式,被称为“虚拟地高”,初始采用全宽度行的子集传递线组。然后以更小(少于全宽度)的段的形式顺序地传递剩余的行。
随着输入图像数据的线组803由线缓冲单元定义并传递给表单发生器单元,表单发生器单元进一步将线组解析为更精细的表单处理器,该表单处理器更精确地适合于模板处理器的硬件限制。更具体地说,如以下将进一步更详细描述的,在实施例中,每个模板处理器由二维移位寄存器阵列组成。二维移位寄存器阵列基本上将图像数据移位到执行通道的阵列的“下方”,其中移位的图案使得每个执行通道在其自己相应的目标内的数据上进行操作 (换言之,每个执行通道在信息的其自己的模板上进行处理,用以为该模板产生输出)。在实施例中,表单是输入图像数据的表面面积,该输入图像数据“填充”否则被加载入二维移位寄存器阵列。
因此,如由图8b可见,表单发生器从线组803中解析初始的表单804,并且将其提供到模板处理器(在此,数据的示例性的表单对应于5×5的阴影区域,该阴影区域通常通过参考数字804标识)。如由图8c和8d可见,模板处理器通过在表单上以从左到右的形式有效地移动重叠的模板802而在输入图像数据的表单上进行操作。如图8d所示,从表单内的数据可以计算出的输出值(9个变深的3×3阵列)的像素的数目被耗尽(没有其它像素位置可以具有从表单内的信息确定的输出值)。为简化起见,图像的边界区域被忽略。
如由图8e可见,表单发生器然后为模板处理器提供下个表单805以继续操作。注意到,当其开始在下个表单上操作时,模板的初始的位置是从第一表单上的耗尽点向右的下一个数列(如图8d之前所描述)。通过新表单 805,模板处理器在新表单上以与第一表单的处理相同的方式进行操作时,模板将继续简单地移动到右边。
注意到,由于围绕输出像素位置的模板的边界区域,在第一表单804的数据和第二表单805的数据之间存在一些重叠。可以简单地通过表单发生器两次重新发送重叠的数据来处理重叠。在替代的实施中,为了将下个表单馈送到模板处理器,表单发生器可以继续仅将新数据发送到模板处理器,并且模板处理器重新使用来自之前表单的重叠数据。
b.模板处理器的设计和操作
图9a示出了模板处理器单元架构900的实施例。如由图9a可见,模板处理器包含数据计算单元901、标量处理器902和关联的存储器903以及I/O 单元904。数据计算单元901包含执行通道905的阵列、二维移位阵列结构 906以及与阵列的指定行或者列关联的分别的相应的随机存取存储器907。
I/O单元904负责将从表单发生器接收的数据的“输入”表单加载到数据计算单元901,并且将来自模板处理器的数据的“输出”表单储存到表单发生器中。在实施例中,将表单数据加载入数据计算单元901中需要将接收的表单解析为图像数据的行/列,并将图像数据的行/列加载到二维移位寄存器结构906或执行通道阵列的行/列的相应的随机存取存储器907中(在以下更详细地描述)。如果表单初始被加载至存储器907中,则在执行通道阵列905内的单独的执行通道然后可以在适当的(例如,当加载指令仅仅在表单的数据上操作之前)时候从随机存取存储器907将表单数据加载至二维移位寄存器结构906中。当完成将数据的表单加载到寄存器结构906中(无论是直接从表单发生器还是从存储器907)时,执行通道阵列905的执行通道在数据上进行操作,并且最终将完成的数据作为表单直接“写回”到表单发生器,或者“写回”到随机存取存储器907中。如果执行通道写回到随机存取存储器907,I/O单元904从随机存取存储器907中取出数据,以形成然后将其转发到表单发生器的输出表单。
标量处理器902包含程序控制器909,该程序控制器从标量存储器903 中读取模板处理器的程序代码的指令,并将指令发布到执行通道阵列905中的执行通道。在实施例中,单一的相同的指令被广播至阵列905内的所有执行通道,用以影响来自数据计算单元901的类单指令多数据(SIMD)行为。在实施例中,从标量存储器903读取并发布到执行通道阵列905的执行通道的指令的指令格式包含非常长的指令字(VLIW)类型格式,该格式每个指令包括多于一个操作码。在其它实施例中,VLIW格式既包含ALU操作码和存储器操作码(管理用于指定执行阵列或一组执行阵列的存储器操作)两者,该ALU操作码管理通过每个执行通道的ALU进行的数学函数(其如下所述,在实施例中可以指定多于一个的常规的ALU操作)。
术语“执行通道”是指能够执行指令的一个或多个执行单元的组(例如,可以执行指令的逻辑电路)。但是,在各种实施例中,执行通道可以包含除了仅执行单元之外的更多类处理器的功能。例如,除了一个或多个执行单元,执行通道也可以包含解码接收的指令的逻辑电路,或者在多个类多指令多数据(MIMD)的设计的情况下,包含取出和解码指令的逻辑电路。关于类 MIMD的方法,尽管集中式程序控制方法在本文已经被大量地描述,但是,更分布式的方法可以在各种替代的实施例(例如,包含在阵列905的每个执行通道内的程序代码和程序控制器)中实现。
执行通道阵列905、程序控制器909和二维移位寄存器结构906的组合为宽范围的可编程功能提供了广泛地可适配/可配置的硬件平台。例如,应用软件开发者能够编程内核,该内核具有宽范围的不同功能性的能力以及尺寸 (例如,模板大小),考虑到单独的执行通道能够进行各种各样的功能并且能够容易地对接近任何输出阵列位置的输入图像数据进行存取。
除了用作通过执行通道阵列905进行操作的图像数据的数据储存外,随机存取存储器907也可以保持一个或多个查找表,诸如在虚拟处理存储器(如上文第1.0节所述)的查找表组件中保存的任何查找表。在各种实施例中,一个或多个标量查找表也可以在标量存储器903内实例化。一个或多个标量查找表可以是保持在存储器模型(如上文第1.0节所述)的标量查找表组件中的任何标量查找表。
标量查找表涉及从来自相同索引的相同的查找表中传递相同的数据值至执行通道阵列905内的每个执行通道。在各种实施例中,上述的VLIW指令格式被扩展为也包含标量操作码,该标量操作码管理通过标量处理器进行的查找操作。指定与操作码使用的索引可以是即刻操作数,或者从一些其它数据储存位置取出。无论如何,在实施例中,来自标量存储器内的标量查找表中的查找基本上涉及在相同的时钟周期期间将相同的数据值广播至在执行通道阵列905内的所有执行通道。有关查找表的使用和操作的附加细节在下面进一步提供。
图9b总结了以上讨论的(一个或多个)VLIW指令字实施例。由图9b 可见,VLIW指令字格式包含三个分别的指令的字段:1)由标量处理器执行的标量指令951;2)由执行通道阵列内的相应的ALU以SIMD的方式广播和执行的ALU指令952;以及3)以部分SIMD方式广播和执行的存储器指令953(例如,如果执行通道阵列中沿相同行的执行通道共享相同的随机存取存储器,那么来自每个不同行的一个执行通道实际执行指令(存储器指令953的格式可以包含操作数,该操作数识别来自每个行的哪一个执行通道执行指令))。
也包括用于一个或多个即刻操作数的字段954。可以在指令格式中识别指令951、952、953中的哪一个使用了哪些即刻操作数信息。每个指令951、 952、953也包含其自己的相应的输入操作数和结果信息(例如,用于ALU 操作的本地寄存器,以及用于存储器访问指令的本地寄存器和存储器地址)。在实施例中,在执行通道阵列内的执行通道执行其它两个指令952、953两者之一前,标量指令951通过标量处理器执行。换言之,VLIW字的执行包含执行标量指令951的第一周期,接下来是可以执行其它指令952、953的第二周期(注意,在各种实施例中,指令952和953可以并行地执行)。
在实施例中,通过标量处理器902执行的标量指令包含发布于表单发生器703的命令,用于从存储器或者数据计算单元901的2D移位寄存器906 中加载/储存表单或者加载/储存表单至存储器或者数据计算单元901的2D移位寄存器906中。在此,表单发生器的操作可以取决于线缓冲单元701的操作或者其它变量,该变量防止使得表单发生器703用于完成标量处理器902 发布的任何命令所需要用的周期的数目的预运行时间的理解。如此,在实施例中,任何VLIW字(其标量指令951对应于表单发生器703,否则使得命令被发布于表单发生器703)也包含在其它两个指令字段952、953中的无操作(NOOP)指令。程序代码然后进入指令字段952、953的NOOP指令的循环,直到表单发生器完成其加载到数据计算单元/从数据计算单元的储存。在此,当将向表单发生器发布命令时,标量处理器可以在当完成命令时设置表单发生器复位的互锁寄存器的位。在NOOP循环的期间,标量处理器监控互锁位的位。在标量处理器检测到表单发生器已经完成其命令时,正常的执行再次开始。
图10示出了数据计算单元1001的实施例。由图10可见,数据计算单元1001包含执行通道1005的阵列,该执行通道逻辑上位于二维移位寄存器阵列结构1006的上方。如上所述,在各种实施例中,由表单发生器提供的一张图像数据被加载到二维移位寄存器1006中。然后执行通道在来自寄存器结构1006的表单数据上进行操作。
执行通道阵列1005和移位寄存器结构1006以相对于彼此的位置固定。但是,移位寄存器阵列1006内的数据以战略性的和协调的方式移位,以使得在执行通道阵列中的每个执行通道去处理数据内的不同模板。如此,每个执行通道在产生的输出表单中,为不同的像素确定了输出图像值。从图10 的架构中应该清楚的是,因为执行通道阵列1005包含垂直相邻的执行通道以及水平相邻的执行通道,不仅是垂直地布置而且也水平地布置重叠的模板。
数据计算单元1001的一些显著的架构特征包含具有比执行通道阵列 1005更宽的尺寸的移位寄存器结构1006。换言之,在执行通道阵列1005之外存在寄存器的“光环”1009。尽管光环1009被示为存在于执行通道阵列的两侧,但是取决于实现方式,光环可以存在于执行通道阵列1005的更少(一个)或更多(三个或四个)的侧上。光环1009用以为数据提供“溢出”空间,该数据随着该数据移位到执行通道1005“下方”溢出到执行通道阵列1005的边界之外。作为一个简单的情况,在处理模板的最左边的像素时,以执行通道阵列1005的右边缘为中心的5×5模板将需要更加向右的四个光环寄存器位置。为了便于绘图,在一个名义上的实施例中,当在任一侧(右侧、底侧) 上的寄存器将兼具水平和垂直的连接时,图10将光环右侧的寄存器示出为仅具有水平移位连接,并且将光环左侧的寄存器示出为仅具有垂直移位连接。
附加的溢出空间通过随机存取存储器1007提供,该随机存取存储器 1007耦合于在阵列中的每个行和/或每个列或其部分(例如,随机存取存储器可以分配到行方向上跨过4个执行通道并且列方向跨过2个执行通道的执行通道阵列的“区域”)。为简化起见,应用的剩余部分将主要参考基于行和/ 或列的分配方案)。在此,如果执行通道的内核操作需要其处理在二维移位寄存器阵列1006之外的像素值(一些图像处理例程可能需要),图像数据的平面能够进一步溢出,例如,从光环区域1009到随机存取存储器1007中。例如,考虑6X6模板,其中硬件包含在执行通道阵列的右边缘上的仅在执行通道右边的四个储存元件的光环区域。在这种情况下,数据将需要被进一步移位至光环1009的右边缘的右侧,用以完全处理模板。然后,在光环区域 1009之外移位的数据将溢出到随机存取存储器1007。随机存取存储器1007 的其它应用和图3的模板处理器在下面进一步提供。
图11a到11k展示了一种方式的工作示例,该方式中图像数据在如上所述的执行通道阵列“下面”的二维移位寄存器阵列内被移位。由图11a可见,二维移位阵列的数据内容在第一阵列1107中描绘,并且执行通道阵列由帧 1105描绘。另外,执行通道阵列内的两个相邻执行通道1110被简单地描绘。在该简化的描绘1110中,每个执行通道包含寄存器R1,该寄存器可以从移位寄存器接受数据,从ALU输出接受数据(例如,在周期之上表现为累加器),或者将输出数据写入到输出目的地中。
每个执行通道在本地寄存器R2中也具有在二维移位阵列中的在该执行路线“下方”的内容。因此,R1是执行通道的物理寄存器,而R2是二维移位寄存器阵列的物理寄存器。执行通道包含可以在由R1和/或R2提供的操作数上进行操作的ALU。如将在以下进一步更详细地描述的,在实施例中,移位寄存器实际上用每个阵列位置的多个(“深度”的)储存器/寄存器元件来实现,但是移位行动受限于储存元件的一个平面(例如,储存元件的只有一个平面可以在每个周期中移位)。图11a到11k描绘了这些更深的寄存器位置中的一个被用于储存来自相应的执行通道的结果X。为了便于阐明,较深的结果寄存器被绘制在旁边而不是在其配对的寄存器R2的下方。
图11a到11k关注于两个模板的计算,该模板的中心位置与执行通道阵列1105内描绘的一对执行通道位置1111相对齐。为了便于说明,当根据以下示例其实际上为垂直相邻时,将该对执行通道1110绘制为水平相邻。
如初始在图11a中所见,执行通道1111以其中心模板位置为中心。图 11b示出由两个执行通道1111执行的目标代码。由图11b可见,两个执行通道1111的程序代码使得移位寄存器阵列1107内的数据向下移位一个位置并且向右移位一个位置。这将两个执行通道1111与其相应的模具的左上角对齐。然后,程序代码然后使得位于(R2中)其相应的位置中的数据加载到 R1中。
由图11c可见,程序代码接下来使得一对执行通道1111将在移位寄存器阵列1107内的数据向左移位一个单元,这使得每个执行通道的相应的位置的右侧的值被移位到每个执行通道的位置。在R1中的值(之前的值)然后与已经被移入执行通道的位置(在R2中)的新的值相加。结果被写入R1。由图11d可见,重复与上述用于图11c相同的处理,其使得结果R1现在包含在上部的执行通道中的值A+B+C以及在下部的执行通道中的F+G+H。在这一点上,执行通道1111已经处理了其相应的模板的上部的行。注意溢出至执行通道阵列1105的左侧的光环区域中(如果在左手侧存在一个),或者如果光环区域在执行通道阵列1105的左手侧不存在,则溢出至随机存取存储器中。
由图11e可见,程序代码然后使得移位寄存器阵列内的数据向上移位一个单元,其使得两个执行通道1111与其相应的模板的中间行的右边缘相对齐。两个执行通道1111的寄存器R1目前包含模板的顶行和中间行的最右边的值的总和。图11f和11g展示了向左跨两个执行通道的模板的中间行进行移动的连续的处理。累积加法继续,以便在图11g的处理结束时,两个执行通道1111包含其相应的模板的顶行和中间行的值的总和。
图11h示出了另一个移位,以将每个执行通道和其对应的模板的最下行相对齐。图11i和11j示出了连续的移位,以在两个执行通道的模板的处理中完成处理。图11k示出了附加的移位,以将每个执行通道与其在数据阵列中的正确位置相对齐并且将结果写入其。
在图11a-11k的示例中,注意,移位操作的对象代码可以包含指令格式,该指令格式识别在(X,Y)坐标中表达的移位的方向和幅度。例如,向上移位一个位置的对象代码可以在对象代码中表达为SHIFT 0,+1。如另一个示例,向右移位一个位置可以在对象代码中表达为SHIFT+1,0。在各种实施例中,更大幅度的移位也可以在对象代码中指定(例如,SHIFT0,+2)。在此,如果二维移位寄存器只支持每周期移位一个位置,指令可以通过机器解读以要求多个周期执行,或者,二维移位寄存器硬件可以设计为支持每周期多于一个位置的移位。随后的实施例在以下进一步更详细地描述。
图12示出了对阵列执行通道和移位寄存器结构的单元格的另一个更细节的描绘(在光环区域的寄存器不包含对应的执行通道)。与在执行通道阵列中的每个位置相关联的执行通道和寄存器空间在实施例中通过实例化在图12中可见的执行通道阵列的每个节点处的电路来实现。由图12可见,单元格包含耦合于由四个寄存器R2至R5组成的寄存器文件的执行通道1201。在任何周期期间,执行通道1201可以从寄存器R1到R5的任一个中读取,或者写入寄存器R1到R5的任一个。由于指令需要两个输入操作数,执行通道可以从任何R1到R5中取回这两个操作数。
在实施例中,二维移位寄存器结构通过以下方式实现:在单一周期期间允许寄存器R2到R4中的任意(仅)一个的内容通过输出多工器1203被移位“出”到其相邻的寄存器文件的一个,并且,如果其相邻的寄存器通过输入多工器1204,则用从相应的一个寄存器移位“入”的内容来替换寄存器R2到 R4中的任意(仅)一个的内容,使得在相邻寄存器之间的移位为相同的方向(例如,所有执行通道向左移位、所有执行通道向右移位等)。尽管对于相同的寄存器,使得其内容移出或者由在相同周期中移位的内容替换可能是普遍的,但是在相同的周期期间,多工器布置1203、1204允许在相同寄存器文件内的不同的移位来源和移位目标寄存器。
如图12所示,注意到,在移位序列期间,执行通道将从其寄存器文件 1202中将内容移出至其左边、右边、上边和下边的近邻的每一个。结合相同的移位序列,执行通道也将把内容从其左边、右边、上边和下边的近邻中特定的一个移入其寄存器文件中。再次,移出目标和移入来源应该由所有执行通道的相同的移位方向组成(例如,如果移出是向相邻右侧,移入应该是从相邻左侧)。
尽管在一个实施例中,每个周期每个执行通道只有一个寄存器的内容被允许进行移位,其它实施例可以允许多于一个寄存器的内容被移位入/移位出。例如,如果图12中可见的多工器电路1203、1204的第二实例被结合到图12的设计中,在相同周期期间,两个寄存器的内容可以移位入/移位出。当然,在实施例中,其中每个周期只有一个寄存器的内容被允许移位,从多个寄存器中移位可以通过消耗更多的时钟周期在数学操作之间发生,用于在数学操作之间移位(例如,两个寄存器的内容可以通过消耗在数学操作(ops) 之间的两个移位操作来在数学操作之间移位)。
如果少于执行通道的寄存器文件的所有内容在移位序列期间被移出,注意到,每个执行通道的未移出寄存器的内容保持原位(不移位)。如此,没有用被移入的内容替换的任何未移位的内容在移位周期之上坚持在执行通道的本地。在每个执行通道中可见的存储器单元(“M”)被用于从随机存取存储器空间中加载数据或将数据存储到随机存取存储器空间,该随机存取存储器空间与执行通道阵列内的执行通道的行和/或列相关联。在此,M单元用作标准M单元,因为其常常用于加载/储存不能从执行通道的自己的寄存器空间加载/储存的数据。在各种实施例中,M单元的主要操作是将数据从本地寄存器写入到存储器中,并且从存储器读取数据并将其写入本地寄存器中。
关于由硬件执行通道1201的ALU单元支持的ISA操作码,在各种实施例中,由硬件ALU支持的数学操作码与虚拟执行通道支持的数学操作码(例如ADD、SUB、MOV、MUL、MAD、ABS、DIV、SHL、SHR、MIN/MAX、 SEL、AND、OR、XOR、NOT)是整体相连的(例如,基本上与其相同)。如上所述,存储器存取指令可以通过执行通道1201执行,用以从其相关联的随机存取存储器取出/储存数据。此外,硬件执行通道1201支持移位操作指令(右、左、上、下),以移位二维移位寄存器结构内的数据。如上所述,程序控制指令很大程度上由模板处理器的标量处理器执行。
3.0在图像处理器上实现的区块操作
a.行/列的求和操作
图13和图14a、14b涉及行/列的求和操作。行/和列操作对于统计计算、噪声抑制和大规模的下采样特别有用。可以在具有二维执行通道阵列和对应的二维移位寄存器阵列的图像处理器上实现行求和以及/或者列求和的操作,诸如以上前述部分中描述的图像处理器的实施例。
由图13可见,行求和的操作将阵列的同一行中的所有值相加,列求和的操作将阵列的同一列中的所有值相加。此外,如图所示,通过行求和的操作,所有行的值可以在其相应的行内同时相加。同样地,通过列求和的操作,所有列的值可以在其相应的列内同时相加。但是,因为移位寄存器阵列的通用性,不需要对所有行或者列进行求和。换言之,可以对阵列中的少于所有行同时进行求和,或者可以对阵列中的少于所有列同时进行求和。
图14a到14d示出了用于实现行和的操作的机器级别操作的实施例。为简化起见,仅示出了单一行。读者将理解,在图14a到14d中示出的操作也可以应用于列。此外,对于行或者列两者的操作,图14a到14d的序列也可以对阵列中的多个行或者列同时执行。此外,行的尺寸仅示出为8个位置宽 (而在实际实现方式中,执行通道阵列和移位寄存器阵列可以是16×16或者甚至更大)。
在实现方式中,由图14a可见,二维移位寄存器阵列被设计为支持在阵列1401的相对的极端之间的直接逻辑移位。换言之,当沿行轴进列的移位时,移位寄存器可以在最右边的阵列的列和最左边的阵列的列之间“滚动”或“循环”或“包裹”其内容,和/或当沿列轴进行的移位时,在最上端的阵列的行和最下端的阵列的行之间滚动或循环其内容。此外,在各种实施例中,移位寄存器可以支持在单一指令中的多个寄存器的位置跳跃(例如,与移位指令相关联的操作码和/或变量指定移位量是否是沿着水平和/或垂直轴的+/-1、 +/-2、+/-3或+/-4的寄存器位置)。硬件中不支持的移位距离可以通过编译器模拟。
由图14a可见,初始,用在每个执行通道的相应的R0和R1寄存器位置中的数据值A0至A7加载行。由图14b可见,在机器操作的第一次迭代中, R1寄存器的空间位置然后向左移位一个位置,并且每个执行通道的R1与 R0内容被求和,其中结果被写回到R0和R1。这产生在R1中的第一累积的部分的和,如将在以下讨论中将更清楚的,用作总体上求和操作的累加器。
在机器操作的下一次迭代中,如图14c所示,R1寄存器的空间位置向左移位两个位置,并且每个执行通道的R1和R0内容被求和。结果再次被保存在R0和R1中。最后,在机器操作的第三次迭代中,如图14d所示,R1寄存器的空间位置向左移位四个位置,并且结果被写入寄存器位置R0和 R1中的一个或两个。因此,参见图14b、14c和图14d中的求和操作的迭代,注意到,移位量随着每次迭代加倍,并且仅在三次迭代后,完整的结果呈现于所有通道中(即如图14c所示)。在16行宽的情况下,对于第四次迭代,移位量将是八个位置,并且在第四次迭代后将完成操作。
a.行/列前缀的求和操作
图15和图16a到16d涉及行/列前缀的求和操作,该求和操作也可以在具有二维执行通道阵列和对应的二维移位寄存器的图像处理器上执行。行/ 列前缀的求和操作对于完整的图像、加速箱式过滤器以及用于压缩操作的地址的计算特别有用。参见图15,为简化起见,仅示出了单一行。但是,也可以对列进行操作。另外,尽管在各种实施中只有一行被示出,但是与以上讨论的行/列的求和操作一样,寄存器阵列(包含所有行/列)中的任何数量的行(或者列)可以被同时求和。此外,在图15中的行的尺寸仅示出为8个位置宽,而在实际实现方式中,执行通道和移位寄存器阵列可以是16×16或者甚至更大。
由图15可见,行内的任何位置的行前缀的操作的结果是通向该位置的值的求和。同样地,列内的任何位置的列前缀的操作的值是通向该位置的值的求和。
图16a到16d示出了用于行前缀操作的机器级别操作的实施例。与前述部分中详细讨论的行的求和操作一样,行前缀的操作使用可以在阵列边缘位置1601之间滚动移位的二维移位寄存器。
由图16a可见,用在每个执行通道的相应的R0寄存器位置中的数据值 A0至A7初始地加载行。另外,空值(“0”)被加载到每个执行通道的R2 寄存器空间中。
在机器级别操作的第一次迭代中,如图16b所示,R0寄存器空间位置向右移位一个位置,进入目的地位置的R1寄存器空间。后续的ADD操作根据通道相对于迭代计数的位置,将R0内容与R1内容或R2内容相加。具体而言,第一行的位置选择在R2中的空值(并不是R1中移位内容),因为其位置(0)等于或小于2N-1,其中N是迭代计数(20-1=0),将空值加到 R0中的内容,并且将结果储存回R0中。第一行的位置,因此将保持R0中的A0的值。
相比之下,因为其位置大于2N-1,其它行的位置中的每一个将选择R1 中的移位内容(而不是R2中的空值),将其加到R0中的内容,并且将结果储存在R0中。因此,除第一行的位置之外的每个行的位置将其原始内容和其最左边相邻位置的求和保持在R0中,而第一行的位置将仅简单地保持其在R0中的原始内容。
在机器级别操作的第二次迭代中,如图16c所示,R0寄存器空间位置的内容向右移位两个位置,进入目的地的R1寄存器空间。因此,与以上即刻描述的行/列的操作一样,随着机器操作的每个下一次迭代,移位量加倍。与第一次迭代一样,后续的ADD操作根据通道相对于现在的迭代计数的位置,将R0内容与R1内容或R2内容相加。在这种情况下,因为其位置(0, 1)小于或等于2N-1(21-1=1),第一和第二行的位置选择R2中的空值(并不是R1中的移位内容)。这些通道因此将空值的值加至R0中的内容,并且将结果储存回R0中。第一行的位置因此将维持R0中的A0的其值,并且第二行的位置将维持在R0中的A0+A1的值。
相比之下,因为其位置大于2N-1,其它行的位置中的每一个将选择R1 中的移位内容(而不是R2中的空值),将R1的内容加到R0中的内容,并且将结果储存在R0中。因此,除了第一和第二行的位置之外的每个行的位置将基于其原始内容与其在内容中总移位在R0中保持累积求和。
在机器级别操作的第三次迭代中,如图16d所示,R0寄存器空间位置向右移位四个位置,进入目的地的R1寄存器空间。因此,再次,随着机器操作的每个下一次迭代,移位量加倍。与较早的迭代一样,后续的ADD操作根据通道相对于现在的迭代计数的位置,将R0内容与R1内容或R2内容相加。在这种情况下,因为其位置小于或等于2N-1(22-1=3),第一至第四行的位置(0至3)将选择R2中的空值(并不是R1中的移位内容)。这些通道中的每一个因此将把空值的值加至R0中的内容,并且把结果储存回R0 中。第一行的位置,因此将维持R0中的A0的其原始值,第二行的位置将维持R0中的A0+A1的值,第三行的位置将维持R0中的A0+A1+A2的值,并且第四行的位置将维持R0中的A0+A1+A2+A3的值。
相比之下,因为其位置保持大于2N-1,其它行的位置中的每一个将选择R1中的移位内容(而不是R2中的空值),将R1的内容加到R0中的内容,并且将结果储存在R0中。因此,除了第一、第二和第三行的位置之外的每个行的位置将基于其原始内容与其在内容中总移位保持累积求和。
在第三次迭代后,完成前缀的求和操作。如果行的尺寸为十六,仅需要将R1寄存器的内容移位八个位置的多一组的操作,以将总和唯一累积于在十六个执行通道中的所有16个不同的位置。
c.行/列查找最小值的操作
图17和图18a到18d涉及行/列查找最小值的操作,该操作也可以在具有二维执行通道阵列和对应的二维移位寄存器的图像处理器上执行。行/列查找最小值的操作对于统计计算和区块匹配的后处理特别有用。
参见图17,为简化起见,仅示出了单一行。但是,在实际的实现方式中,行查找最小值操作可以在实现行查找最小值操作的相同的处理器上实现。此外,可以对于寄存器阵列中任意数量的行(或列)(包含直到所有行/列)同时查找行(或列)的最小值。此外,行/列的尺寸仅示出为8个位置宽,而在实际实现方式中,执行通道和移位寄存器阵列可以是16×16或者甚至更大。
由图17可见,行查找最小值操作的结果对应于在相同的行内的所有值之中的最小的值,以及其在行中的地点/位置(也被称为其索引)。同样地,列查找最小值操作的结果对应于在相同的列内的所有值之中的最小的值,以及其在列内的地点/位置。与前述部分中详细讨论的行和与前缀的操作一样,行/列查找最小值操作采用可以在阵列边缘位置1701之间滚动移位的二维移位寄存器的使用。
图18a到18d示出了用于行前缀操作的机器级别操作的实施例。初始,由图18a可见,用每个执行通道的相应的R0寄存器位置中的数据值A0至 A7加载行。另外,每个行的位置的索引被加载到每个执行通道的R1寄存器空间中。
在机器级别操作的第一次迭代中,其在图18b中描绘,R0和R1寄存器位置的内容被移位一个单元至相邻的执行通道的寄存器空间的R2和R3寄存器空间中。然后在每个执行通道内比较R0和R2寄存器的相应的值。将比较的最小值和其对应的索引储存入R0和R1寄存器空间中。换言之,如果R0的值小于R2的值,R0和R1寄存器维持其原始内容。而如果R2的值小于R0的值,R2的值被写入R0并且R3的值被写入R1。这具有在R0中保持比较的最小值和在R1中保持索引的影响。
在机器级别操作的第二次迭代中,其在图18c中描绘,R0和R1寄存器位置的内容被移位两个单元至下游的执行通道的R2和R3寄存器空间中。因此,再次,移位量随着下一次迭代加倍。然后在每个执行通道内比较R0 和R2寄存器的相应的值。将比较的最小值和其对应的索引储存入R0和R1 寄存器空间中。这具有将从在每个执行通道中已经进行的两个比较中观察到的最小值保持在R0中并且将其索引保持在R1中的影响。
在机器级别操作的第三次迭代中,在图18d中可见,R0和R1寄存器位置的内容被移位四个单元至下游的执行通道的R2和R3寄存器空间中。然后在每个执行通道内比较R0和R2寄存器的相应的值。将比较的最小值和其对应的索引储存入R0和R1寄存器空间中。这具有将从在每个执行通道中已经进行的所有三个比较中观察到的最小值保持在R0中并且将其索引保持在R1中的影响。
在第三次迭代后,查找最小值操作完成,因为每个执行通道将具有其 R0寄存器空间中的整行的最小值与其R1寄存器空间中其对应的索引(初始提供最小值的行的位置将在其R1寄存器空间中查找自己的行的位置)。如果行的尺寸为十六,将仅需要基于将R0和R1寄存器的内容在移位寄存器中向下游移位八个位置的多一组的操作,以提供在所有十六个执行通道中的所有十六个不同位置的最小值。
注意,查找最大值操作也可以使用上述相同的原理来实现,除了核心数学操作包含查找最大值而不是查找最小值。
d.矩阵乘法
图19a、19b和图20a-20e涉及矩阵乘法。矩阵乘法对离散傅里叶或余弦变换(其是压缩和滤波中的常用的原语)和表达更大的矩阵/乘法操作(其常用于图像识别中)特别有用。两个矩阵A和B的矩阵乘法通过对于在结果中的每个矩阵坐标的位置将在坐标位置的行中的元素以及它们在坐标位置的列中的对应的元素的乘积的求和来进行。图19b示出了对于图19a中的矩阵A和B的矩阵乘法所得到的矩阵X。在此,特别示出了在得到的矩阵C 中的两个坐标位置1901、1902的矩阵A和B的相关的部分乘积项。
特别地,例如,图19b所得的矩阵C中的坐标位置c12所得的乘积:
(a11*b11)+(a12*b21)+(a13*b31)+(a14*b41)
其对应于在矩阵A中的行1901的元素与图19a中的矩阵B中的列1902 的对应的元素相乘。
同样地,图19b所得的矩阵C中的坐标位置c22所得的乘积:
(a21*b12)+(a22*b22)+(a23*b32)+(a24*b42)
其对应于在矩阵A中的行1903的元素与图19a中的矩阵B中的列1902 的对应的元素相乘。从这两个示例可见,得到的矩阵C中的任意坐标位置x、 y的结果可以表达为:
k=1to4(ax,k)*(bk,y).
图20a至20e示出了使用二维执行通道阵列的矩阵乘法操作与对应的二维移位寄存器阵列的独特的移位优点的实施例。
由图20a可见,初始,两个矩阵A和B被加载到二维移位寄存器阵列中。例如,矩阵A的值可以被加载到二维移位寄存器的R0寄存器空间中,并且矩阵B的值可以被加载到二维移位寄存器阵列的R1寄存器空间中,使得每个矩阵坐标对应于与不同的执行通道相关联的寄存器空间。再次,为了阐明的简易,描绘了4×4矩阵,尽管在实际实现方式中更大的矩阵可以与对应的更大尺寸的移位寄存器阵列相乘。
由图20b可见,旋转剪切算法移位被应用于两个矩阵,其中逐行旋转剪切算法移位序列被应用于矩阵A,并且逐列旋转剪切算法移位序列被应用于矩阵B。如在本领域已知的,旋转剪切算法将移位量增加N-1,其中N是矩阵中的位置。
因此,由图20b可见,矩阵A的第一行完全没有移位,矩阵A的第二行被移位一个单元,矩阵A的第三行被移位两个单元,矩阵A的第四行被移位三个单元。类似地,矩阵B的第一列完全没有移位,矩阵B的第二列被移位一个单元,矩阵B的第三列被移位两个单元,矩阵B的第四列被移位三个单元。在此,二维移位寄存器阵列被理解为对于面向行的移位和面向列的移位两者能够在阵列边缘处滚动元素。
注意到,由于二维移位寄存器阵列和对应的执行通道阵列的通用性质,其中通过每个执行通道执行的相应的移位指令可以指定不同的输入操作数的数据,二维移位寄存器阵列能够将不同的行移位不同的水平移位量,并且将不同的列移位不同的垂直的移位量,同时,在相同的阵列的所有执行通道之上同时执行移位指令(在各种实施例中,必须为相同行中的通道指定相同的水平的移动量,并且必须为相同行中的通道指定相同的垂直的移动量)。因此,可以想到地,A和B矩阵两者的剪切可以在仅仅两个周期中完成(即,一个矩阵的所有移位在一个周期中进行,假设移位寄存器可以在单一的周期中实现多跳跃的移位)。
通过矩阵A和B中的数据从剪切算法中重新排列,由图20b可见,进行乘法操作,其中每个执行通道将在其对应的二维移位寄存器的空间中的A 与B的值相乘。在此,回顾到,例如,A值保持在R0空间中并且B值保持在R1空间中。乘法的结果在本地R2空间中储存。空值的值可以作为初始的条件加载至R3空间中,并且R2中的乘法的结果被加到R3的内容。将求和的结果储存回R3中。在以下的教导中将显而易见的是,R3承担了累加器的角色,该累加器在矩阵乘法操作的处理中将部分乘积项累积求和。
为了便于理解,图20b明确地示出了在原来在图19b中描绘的得到的矩阵C中的坐标位置c11和c22的第一迭代后,在得到的R3空间中的内容。在此,在图20b的第一次迭代后,在C11位置处的R3寄存器空间含有部分乘积项a11*b11,并且在位置C22处的R3寄存器空间含有部分乘积项(a21 *b12)。
由图20c可见,在下一个迭代时,含有矩阵A的数据的R0寄存器然后水平移位了一个单元,并且含有矩阵B的数据的R1寄存器垂直移位了一个单元。然后重复如以上刚刚描述的关于图20b的数学操作。但是,在此,每个通道的R3寄存器空间初始含有第一迭代的部分乘积项(例如,在位置c11 的R3中的a11*b11和在位置c22的R3中的a21*b12)。如此,在迭代结束时,寄存器R3将含有目前已经计算出的两个部分乘积的累积求和。换言之,在位置c11中的R3将具有求和(a11*b11)+(a12*b21),并且在位置c22 中的R3将具有求和(a21*b12)+(a22*b22)。
由图20d和20e可见,在接着乘法-加法后的对两个矩阵的单一单元移位的再两个迭代之后,矩阵乘法将完全,其中每个寄存器阵列的位置具有在其本地R3寄存器空间中的部分乘积的正确的求和。
e.二维离散傅里叶变换(2D DFT)
图21描绘了二维DFT(2D DFT)。2D DFT对减小噪声和加速卷积非常有用。由图21可见,2D DFT可以表达为对两个复合项2101、2102的乘积的二维空间求和。第一个复合项2101对应于其幅度和相位是时间和频率的函数的相量。在实现方式中,第一复合项2102被清楚地计算为系数的第一矩阵。第二个复合项2102对应于从空间域变换为频域的信号。
为简化起见,图21将第一复合项2101表示为Re1+jIm1,并且将第二复合项2102表示为Re2+jIm2。如在本领域已知的,(Re1+jIm1)*(Re2+jIm2) 的实部可以表达为(Re1*Re2)-(Im1*Im2),而虚部可以表达为j ((Re1*Im2)+(Re2*Im1))。在2D空间上的2D DFT的求和,正如刚刚以上详细讨论的矩阵乘法,将坐标位置的行中的元素与坐标位置的列中对应的元素的乘积相加。
因此,DFT结果的实部可以通过以下方式进行计算:进行在Re1值的阵列与Re2值的阵列上的矩阵乘法,并且从得到的阵列中减去在Im1值和Im2 值的阵列上进行矩阵乘法的结果。类似地,DFT结果的虚部可以通过以下方式进行计算:在Re1值的阵列与Im2值的阵列上进行矩阵乘法,并且将得到的阵列加到在Re2值和Im1值的阵列上进行矩阵乘法的结果。
图22a示出了用于计算DFT的实部的机器操作。由图22a可见,Re1值的阵列被加载到二维移位寄存器阵列的R0寄存器空间中,Re2值的阵列被加载到二维移位寄存器阵列的R1寄存器空间中,Im1值的阵列被加载到二维移位寄存器阵列的R2寄存器空间中,并且Im2值的阵列被加载到二维移位寄存器阵列的R3寄存器空间中。由图22b可见,然后将旋转剪切算法应用于每个阵列值,其中Re1和Im1值被水平剪切并且Re2和Im2值被垂直剪切。
由图22c可见,然后进行Re1*Re2的矩阵乘法和Im1*Im2的矩阵乘法,其结果相应地保持在R0和R2寄存器空间中。然后从R0寄存器空间中减去R2寄存器空间的内容,减法的结果留下了在R0寄存器空间中的DFT 变换的实部,由图22d可见。
在实施例中,将R0寄存器空间中的结果的实部移动到R4寄存器空间 (如果其存在)或写出到耦合于移位寄存器阵列的本地存储器。然后,将原始的Re1和Im1值重新写回R0和R1的寄存器空间中(例如,从相同的本地存储器)并水平剪切,使得图22a的寄存器内容在二维移位寄存器阵列中重建。
然后进行Re1*Im2的矩阵乘法和Re2*Im1的矩阵乘法,其结果相应地保持在R0和R2的寄存器空间中。换言之,对R0和R3的内容进行矩阵乘法,结果写回到R0,并且,对R2和R1的内容进行矩阵乘法,将内容写入R2中。R0和R2中得到的矩阵如图22e所示。然后将R0寄存器空间的内容加到R2寄存器空间的内容,并且写回到R0。这在R0寄存器空间中留下了DFT变换的虚部,如图22f所示。
f.FFT的蝴蝶操作
如在本领域已知的,快速傅里叶变换(FFT)是比DFT更快、计算密集度更少的方法。FFT取决于特别的有效的算法,用以将时域或空间域的数据快速地变换为频域的数据。此种算法的关键组成部分是蝴蝶算法。图23示出了示例性的蝴蝶算法。在此,蝴蝶操作由其中特定阶段确定在相同行或列的元素之间发生的交换量的阶段来定义。如在本领域已知的,完整的FFT包含对蝴蝶操作之间的多个不同阶段的蝴蝶操作的交换的内容上进行数学操作。
图23示出了每个1、2和4阶段的蝴蝶操作。在1阶段的蝴蝶操作的情况下,交换邻近的元素。在2阶段的蝴蝶操作的情况下,交换邻近的多对的元素。在4阶段的蝴蝶操作的情况下,交换多组4个邻近的元素。在二维 FFT的情况下,将在信号数据的第一阵列中的元素根据多个蝴蝶操作阶段中的每一个与在交换的信号数据上进行的元素数学操作进行交换。
图24a示出了机器级别的移位操作,该移位操作可以用于影响在储存在二维R0寄存器空间中的信号数据的阵列之上的1阶段的1个蝴蝶操作。为简化起见,仅示出了一行。有必要认识到,在二维移位寄存器中的阵列的多个(例如,所有)行或者列可以同时地根据观察到的特定的行来处理。
在此,移位寄存器初始地在其R0寄存器空间中的行的每一个之上加载了A0至A7。寄存器然后将R0寄存器的内容向右移位一个单元,并且每个执行通道储存刚刚被移入其R1寄存器空间中的其位置的数据。然后,移位寄存器将R0寄存器的内容向左移位了两个单元(其结果被标记为R0’)。每个执行通道然后执行选择操作,其中其本地R0的内容或者其本地R1的内容的任一个取决于通道的位置被储存在R0中(即,如果选择R0,R0的内容保持不变)。在图24a的特定实施例中,偶数的通道选择R0,同时奇数的通道选择R1。在选择后,正确地交换的值位于每个执行通道的R0寄存器空间中(标记为R0”)。
图24b和图24c描绘了2阶段和4阶段的蝴蝶操作。处理与以上刚刚描述的1阶段蝴蝶操作类似,除了在2阶段蝴蝶操作的情况下,移位寄存器阵列将R0寄存器的内容向右移位两个单元然后向左移位四个单元。每隔一个偶数通道和其最右侧的近邻从R1和R0”之一中选择,而其它偶数的通道和其最右侧的近邻从另一个的R1和R0”中选择。在4阶段的蝴蝶操作的情况下,如图24c所示,移位寄存器阵列将R0的内容向右移位四个单元,然后当其存在于R0(标记为R0’)中时选择所有的值。
g.区块匹配
图25示出了对区块匹配的描绘。区块匹配对于动态预测(例如,用于视频压缩)、图像稳定和图像融合算法(例如,曝光融合和时间噪声融合) 特别有用。在此,在替代(例如,之后的)的图像中寻找在第一基底(例如,之前的)图像中指定的特性。在图26a-26d的示例中,在基底图像中呈现的区块ABCD需要在替代的图像中找到。
图26a至26d示出了在具有二维执行通道阵列和二维移位寄存器阵列的图像处理器上进行区块匹配的方法。在此,替代的图像的像素被保持在二维移位寄存器的R0寄存器空间中。将被寻找的基底图像中的特性的第一像素 (例如,“A”)广播至所有执行通道,并且对在R0寄存器空间中的内容和值“A”取绝对差,并且结果被储存在R1中(为简单起见,假设替代图像中没有其它像素具有任何查找特性的值(A、B、C、D))。如果在替代图像中的像素值与广播的像素值A相匹配(或者大致匹配),然后R1中的结果应该为 (或接近)零。R1中的所有其它的结果应该基本上不为零。
参考图26b,替代图像然后在二维移位寄存器中移位一个单元,正在寻找的特性中的下一个像素值“B”被广播至所有执行通道,并且再次取绝对差,并且储存在R1中。在此,已经具有两个连贯的像素匹配的特定的执行通道阵列2601应该具有R1中的最低的结果值。该特定的执行通道位置是正在广播的像素值的特定顺序与移位寄存器阵列的R0中的替代图像的特定扫描/ 移位运动相对齐的位置。
由图26c和26d可见,随着每个下一次的迭代广播下一个像素值并且以特定的扫描顺序移位替代图像的数据,处理将继续。在多个迭代充分地广播所有寻找的图像像素,并且对应地移位在对应于所寻找的图像的大小的区域之上的R0中的替换图像,理想地,在执行通道阵列中只有一个位置2601将在每一个迭代周期上经历匹配。如此,在已经完成所有迭代后,该特定的阵列位置2601在其R1寄存器空间中应该能够维持为零或者接近零值(或者至少比其它执行通道更小的值)。
如上所述的查找最小值操作在阵列中的所有行之上的R1寄存器空间上执行。然后,每行中最低的对应的值将保持在该行的每个位置处。然后,查找最小值操作在跨阵列中的所有列上的R1寄存器空间上执行。结果应该在每一次迭代上识别与基底图像相匹配的像素,其继而可以用于识别替代阵列中所查找的图像的精确位置。
4.0低级别程序代码的构造
图27示出了预运行开发环境,其中程序员设计高级别的图像处理功能和应用开发环境(其可以包含以上详细讨论的关于图1至图6的虚拟ISA环境),该预运行开发环境提供了任何/所有上述特别的操作,以便开发者无需从头将其写入。
在此,开发者可以明确地调出以上详细讨论的任意操作,和/或开发环境自动地从库2701中提供它们作为响应。二者择一或者相互结合,可以暗示或者推导开发者对此类操作的需求(诸如在2D DFT情况中的矩阵乘法),并且开发环境自动地从进行这些功能的库2701中插入程序代码(例如,作为编译处理的部分)。
因此,进行上述操作或者替代性实施例其中的程序代码可以在较高级别 (例如,虚拟ISA)的程序代码或者较低级别的对象代码中表达。在各种实施例中,较高级别的虚拟ISA代码可以指定作为具有x、y地址坐标的存储器读取所操作的数据值,尽管,对象代码可以替代地将这些数据存取理解为二维移位寄存器的操作(诸如,上述任意的移位操作或者类似地实施例)。编译器可以将在开发环境中的x、y读取变换为二维移位寄存器的对应的移位,该二维移位寄存器的移位为指定的对象代码(例如,可以在对象代码中随着向左移位两个空间和向下移位两个空间来实现开发环境中具有x、y坐标(+2,+2)的读取)。根据环境,开发者可以看到这两个级别(或者,例如,只有较高的VISA级别)。还是在其它实施例中,可以在运行时(例如,通过即时编译器)而不是预运行时调用这样的预写入例程。
5.0结论性陈述
从前述部分中有必要认识到,可以在计算机系统上实例化在第1.0节中的上述虚拟环境。同样地,如在以上2.0节所述的图像处理器可以在计算机系统上的硬件中体现(例如,作为处理来自手持装置的相机的数据的手持装置的片上系统(SOC)的部分)。
有必要指出,上述各种图像处理器架构的特性不必要限制于常规意义上的图像处理,因此可以应用于可以(或不可以)引起图像处理器被重新表征的其它应用。例如,如果与实际的相机图像的处理相反,上述任何各种图像处理器架构的特性被用在动画的创建和/或产生和/或表现,则图像处理器可以被表征为图像处理单元。此外,上述图像处理器架构的特性可以应用于诸如视频处理、视觉处理、图像识别和/或机器学习的其它技术应用。以这种方式应用,图像处理器可以与更通用处理器(例如,其是计算系统的CPU或者是计算系统的CPU的一部分)集成(例如,作为协处理器),或者可以是独立的计算系统内的处理器。
以上讨论的硬件设计的实施例可以在半导体芯片内和/或作为用于以目标为半导体制造处理的电路设计的描述来体现。在随后的情况中,此类电路的描述可以采用(例如,VHDL或Verilog)寄存器传输级(RTL)电路的描述、门级电路的描述、晶体管级电路的描述或者掩模的描述或者各种其中的组合的形式。电路的描述典型地在计算机可读储存介质上体现(诸如 CD-ROM或者其它类型的储存技术)。
从前述部分中有必要认识到,如上所述的图像处理器可以在计算机系统上的硬件中体现(例如,作为处理来自手持装置的相机的数据的手持装置的片上系统(SOC)的部分)。在图像处理器被体现为硬件电路的情况下,注意到,由图像处理器处理的图像数据可以直接从相机中接收。在此,图像处理器可以是分立相机的一部分,或者是具有集成相机的计算系统的一部分。在稍后的情况中,图像数据可以直接从相机或者从计算系统的系统存储器中接收(例如,相机将其图像数据传送到系统存储器而不是图像处理器)。也要注意到,上述部分中描述的许多特性可以应用于图像处理器单元(其表现动画)。
图28提供了计算系统的示例性描绘。下述的计算系统的许多组件可应用于具有集成摄像机和关联的图像处理器的计算系统(例如,诸如智能电话或平板电脑的手持装置)。这些普通的技能将能够容易地在两者之间进行描绘。
由图28可见,基础的计算系统可以包含中央处理单元2801(其可以包含例如多个通用处理核2815_1至2815_N和设置在多核处理器或应用处理器上的主存储器控制器2817)、系统存储器2802、显示器2803(例如,触摸屏、平板)、本地有线点对点链路(例如,USB)接口2804、各种网络I/O功能 2805(诸如以太网接口和/或蜂窝调制解调器子系统)、无线局域网(例如, WiFi)接口2806、无线点对点链路(例如,蓝牙)接口2807和全球定位系统接口2808、各种传感器2809_1至2809_N、一个或多个相机2810、电池 2811、电源管理控制单元2824、扬声器和麦克风2813以及音频编码器/解码器2814。
应用处理器或多核处理器2850可以包含其CPU 2801内的一个或多个通用处理核2815、一个或多个图像处理单元2816、存储器管理功能2817(例如,存储器控制器)、I/O控制功能2818和图像处理单元2819。通用处理核 2815典型地执行计算系统的操作系统和应用软件。图像处理单元2816典型地执行图像密集功能,用以例如产生显示器2803上呈现的图像信息。存储器控制功能2817与系统存储器2802接口,用于向/从系统存储器2802写入/ 读取数据。电源管理控制单元2824通常控制系统2800的功率消耗。
图像处理单元2819可以根据前述部分中以上详细描述的任意的图像处理单元的实施例来实现。二者择一或者相互结合,IPU 2819可以作为其中的协处理器耦合到GPU2816和CPU 2801中的一个或两者。此外,在各种实施例中,GPU 2816可以采用以上详细描述的任何图像处理器的特性来实现。
触摸屏显示2803、通信接口2804-2807、GPS接口2808、传感器2809_1 至2809_N、相机2810和扬声器/麦克风编解码器2813、2814中的每一个都可以被视为相对于总体的计算系统的各种形式的I/O(输入和/或输出),该计算系统在适当情况下还包含集成的外围设备(例如,一个或多个相机 2810)。取决于实现方式,这些I/O组件中的各种可以集成在应用处理器/多核处理器2850上,或者可以位于裸芯外或应用处理器/多核处理器2850的封装外。
在一个实施例中,一个或多个相机2810包含能够在其视场中测量相机和对象之间的深度的深度相机。在应用处理器或其它处理器的通用CPU核 (或具有执行程序代码的指令执行流水线的其它功能区块)上执行的应用软件、操作系统软件、装置驱动程序软件和/或固件可以进行上述任何功能。
本发明的实施例可以包含如以上提出的各种处理。处理可以在机器可执行指令中体现。指令可以用于引起通用或专用处理器进行某一处理。或者,这些处理可以由含有用于进行处理的硬连线逻辑的指定硬件组件,或者由编程的计算机组件和定制的硬件组件的任何组合来进行。
本发明的元件也可以作为用于储存机器可执行指令的机器可读介质来提供。机器可读介质可以包含但不限于软盘、光盘,CD-ROM和磁光盘、闪存、ROM、RAM、EPROM、EEPROM、磁或光卡、传播介质或适用于储存电子指令的其它种类的介质/机器可读介质。例如,元件可以作为计算机程序被下载,该计算机程序经由在载波或其它扩展介质中经由通信链路(例如,调制解调器或网络连接)体现的数据信号,从远程计算机(例如,服务器) 传递至请求的计算机(例如,客户端)。
在前述的说明书中,已经描述了明确的示例性实施例。然而,将很明显的是,各种修改和改变可以完成,而不脱离如附加的权利要求中阐述的本发明的更宽的精神和范围的。本说明书和附图,相应地,将被视为说明性的而非限制性的。

Claims (31)

1.一种含有程序代码的机器可读储存介质,所述程序代码在通过包括二维执行通道阵列和二维移位寄存器阵列的图像处理器处理时,使得所述图像处理器执行一种方法,所述方法包括:
重复地移位所述二维移位寄存器阵列的多个行或列的第一内容,并且在移位之间重复地执行至少一条指令,该指令在所移位的第一内容和/或第二内容上操作,该第二内容驻留在所移位的第一内容已被移入的所述二维移位寄存器阵列的相应位置中,以便实现在数据阵列的多个相应行或列上同时进行的行或列求和或者前缀求和操作,其中,移位量随着每次迭代加倍。
2.根据权利要求1所述的机器可读储存介质,其中所述操作是行或者列求和操作,用于进行以下任何:
a)计算统计;
b)抑制噪音;
c)下采样。
3.根据权利要求1所述的机器可读储存介质,其中所述操作是行或者列前缀求和操作,用于进行以下任何:
a)确定完整的图像;
b)加速箱式过滤器;
c)计算用于压紧操作的地址。
4.根据权利要求1所述的机器可读储存介质,其中所述二维移位寄存器阵列的内容围绕在所述二维移位寄存器阵列的相对的边缘。
5.根据权利要求1所述的机器可读储存介质,其中所述操作在所述移位寄存器阵列的所有行或者列之上进行相加。
6.一种含有程序代码的机器可读储存介质,所述程序代码在通过包括二维执行通道阵列和二维移位寄存器阵列的图像处理器处理时,使得所述图像处理器执行一种方法,所述方法包括:
重复地移位所述二维移位寄存器阵列的多个行或列的第一内容,并且在移位之间重复地执行至少一条指令,该指令在所移位的第一内容和/或第二内容上操作,该第二内容驻留在所移位的第一内容已被移入的所述二维移位寄存器阵列的相应位置中,以便实现在数据阵列的多个相应的行或者列上同时进行的查找最小值或者查找最大值操作,所述操作在相应的行或者列之上对最小值或者最大值的索引值进行重复,其中,移位量随着每次迭代加倍。
7.根据权利要求6所述的机器可读储存介质,其中所述操作用于进行以下任何:
a)计算统计;
b)后处理区块匹配算法。
8.根据权利要求6所述的机器可读储存介质,其中所述二维移位寄存器阵列的内容围绕在所述二维移位寄存器阵列的相对的边缘。
9.根据权利要求6所述的机器可读储存介质,其中所述操作在所述移位寄存器阵列的所有行或者列之上进行查找最小值或者最大值。
10.一种含有程序代码的机器可读储存介质,所述程序代码在通过包括二维执行通道阵列和二维移位寄存器阵列的图像处理器处理时,使得所述图像处理器执行一种方法,所述方法包括:
重复地移位所述二维移位寄存器阵列的多个行或列的第一内容,并且在移位之间重复地执行至少一条指令,该指令在所移位的第一内容和/或第二内容上操作,该第二内容驻留在所移位的第一内容已被移入的所述二维移位寄存器阵列的相应位置中,以便实现矩阵乘法操作,其中,移位量随着每次迭代加倍。
11.根据权利要求10所述的机器可读储存介质,其中所述矩阵乘法操作用于进行以下任何:
a)计算离散傅里叶变换;
b)计算离散余弦转换。
12.根据权利要求10所述的机器可读储存介质,其中所述矩阵乘法操作用于进行以下任何:
a)压缩数据;
b)过滤数据。
13.根据权利要求10所述的机器可读储存介质,其中,在所述重复地移位所述二维移位寄存器阵列的多个行或列的第一内容的步骤和所述重复地执行至少一条指令的步骤之前,将旋转剪切算法施加到所述二维移位寄存器阵列中的数据的行或者列之上。
14.根据权利要求10所述的机器可读储存介质,其中所述至少一条指令实现乘法-加法操作。
15.一种含有程序代码的机器可读储存介质,所述程序代码在通过包括二维执行通道阵列和二维移位寄存器阵列的图像处理器处理时,使得所述图像处理器执行一种方法,所述方法包括:
重复地移位所述二维移位寄存器阵列的多个行或列的第一内容,并且在移位之间重复地执行至少一条指令,该指令在所移位的第一内容和/或第二内容上操作,该第二内容驻留在所移位的第一内容已被移入的所述二维移位寄存器阵列的相应位置中,以便实现二维离散傅里叶变换,其中,移位量随着每次迭代加倍。
16.根据权利要求15所述的机器可读储存介质,其中所述二维离散傅里叶变换用于进行以下任何:
a)减少噪音;
b)加速卷积。
17.根据权利要求15所述的机器可读储存介质,其中,在所述重复地移位所述二维移位寄存器阵列的多个行或列的第一内容的步骤和所述重复地执行至少一条指令的步骤之前,将旋转剪切算法施加到所述二维移位寄存器阵列中的数据的行或者列之上。
18.一种含有程序代码的机器可读储存介质,所述程序代码在通过包括二维执行通道阵列和二维移位寄存器阵列的图像处理器处理时,使得所述图像处理器执行一种方法,包括:
重复地移位所述二维移位寄存器阵列的多个行或列的第一内容,并且在移位之间重复地执行至少一条指令,该指令在所移位的第一内容和/或第二内容上操作,该第二内容驻留在所移位的第一内容已被移入的所述二维移位寄存器阵列的相应位置中,以便实现快速傅里叶变换的蝴蝶操作,其中,移位量随着每次迭代加倍。
19.一种含有程序代码的机器可读储存介质,所述程序代码在通过包括二维执行通道阵列和二维移位寄存器阵列的图像处理器处理时,使得所述图像处理器执行一种方法,所述方法包括:
重复地移位所述二维移位寄存器阵列的多个行或列的第一内容,并且在移位之间重复地执行至少一条指令,该指令在所移位的第一内容和/或第二内容上操作,该第二内容驻留在所移位的第一内容已被移入的所述二维移位寄存器阵列的相应位置中,以便实现区块匹配操作,其中,移位量随着每次迭代加倍。
20.根据权利要求19所述的机器可读储存介质,其中所述区块匹配操作用于进行以下任何:
a)估算运动;
b)稳定图像;
c)实现图像融合算法。
21.根据权利要求19所述的机器可读储存介质,其中所述方法进一步包括重复地广播下一个查找的像素值和所述一个或多个指令,所述指令确定所述下一个查找的像素值与所述被移位的第一内容之间的差异。
22.一种含有程序代码的机器可读储存介质,所述程序代码在通过包括二维执行通道阵列和二维移位寄存器阵列的图像处理器处理时,使得所述图像处理器执行一种方法,所述方法包括:
重复地移位所述二维移位寄存器阵列的多个行或列的第一内容,并且在移位之间重复地执行至少一条指令,该指令在所移位的第一内容和/或第二内容上操作,该第二内容驻留在所移位的第一内容已被移入的所述二维移位寄存器阵列的相应位置中,其中,移位量随着每次迭代加倍。
23.一种含有程序代码的机器可读储存介质,所述程序代码在通过处理单元处理时,使得执行以下方法,所述方法包括:
以较高级别的程序代码对方法进行表述,所述程序代码通过具有指令格式的存储器读取和写入指令来存取,所述指令格式指定x、y坐标中的存储器位置,所述较高级别的程序代码被编译为在具有二维执行通道阵列和二维移位寄存器阵列的图像处理器上可执行的对象代码,所述对象代码引起所述图像处理器重复地移位所述二维移位寄存器阵列的多个行或列的第一内容,并且在移位之间重复地执行至少一条指令,该指令在所移位的第一内容和/或第二内容上操作,该第二内容驻留在所移位的第一内容已被移入的所述二维移位寄存器阵列的相应位置中,其中,移位量随着每次迭代加倍。
24.根据权利要求23所述的机器可读储存介质,其中所述对象代码用于实现在数据阵列的多个相应的行或者列上同时进行的行或者列求和操作。
25.根据权利要求23所述的机器可读储存介质,其中所述对象代码用于实现在数据阵列的多个相应的行或者列上同时进行的行或者列前缀求和操作。
26.根据权利要求23所述的机器可读储存介质,其中所述对象代码用于实现在数据阵列的多个相应的行或者列上同时进行的查找最小值或者查找最大值操作,所述操作在相应的行或者列之上重复最小值或者最大值的索引值。
27.根据权利要求23所述的机器可读储存介质,其中所述对象代码用于实现矩阵乘法操作。
28.根据权利要求23所述的机器可读储存介质,其中所述对象代码用于实现二维离散傅里叶变换。
29.根据权利要求23所述的机器可读储存介质,其中所述对象代码用于实现快速傅里叶变换的蝴蝶操作。
30.根据权利要求23所述的机器可读储存介质,其中所述对象代码用于实现区块匹配操作。
31.根据权利要求23所述的机器可读储存介质,其中所述对象代码用于进行以下任何:
a)计算统计;
b)抑制噪音;
c)下采样;
d)确定完整的图像;
e)加速箱式过滤器;
f)后处理区块匹配算法;
g)计算离散傅里叶变换;
h)计算离散余弦转换;
i)压缩数据;
j)过滤数据;
k)减少噪音;
l)加速卷积;
m)估算运动;
n)稳定图像;
o)实现图像融合算法。
CN201710534277.6A 2016-07-01 2017-07-03 具有二维执行通道阵列和二维移位寄存器的图像处理器的区块操作 Active CN107563953B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/201,237 US20180007302A1 (en) 2016-07-01 2016-07-01 Block Operations For An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register
US15/201,237 2016-07-01

Publications (2)

Publication Number Publication Date
CN107563953A CN107563953A (zh) 2018-01-09
CN107563953B true CN107563953B (zh) 2021-10-26

Family

ID=59153293

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710534277.6A Active CN107563953B (zh) 2016-07-01 2017-07-03 具有二维执行通道阵列和二维移位寄存器的图像处理器的区块操作

Country Status (9)

Country Link
US (5) US20180007302A1 (zh)
EP (1) EP3479340A1 (zh)
JP (1) JP6821715B2 (zh)
KR (1) KR102190318B1 (zh)
CN (1) CN107563953B (zh)
DE (2) DE102017113859A1 (zh)
GB (2) GB2577139B (zh)
TW (4) TWI656508B (zh)
WO (1) WO2018005036A1 (zh)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180007302A1 (en) 2016-07-01 2018-01-04 Google Inc. Block Operations For An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register
KR102574449B1 (ko) * 2016-11-17 2023-09-04 삼성전자 주식회사 데이터 처리 방법 및 장치
US10489878B2 (en) * 2017-05-15 2019-11-26 Google Llc Configurable and programmable image processor unit
KR102586173B1 (ko) * 2017-10-31 2023-10-10 삼성전자주식회사 프로세서 및 그 제어 방법
US10565037B2 (en) * 2017-12-19 2020-02-18 Hewlett Packard Enterprise Development Lp Data update of shared fabric memory in a high performance computing system
US11087513B1 (en) * 2018-02-27 2021-08-10 Snap Inc. Real-time bokeh effect
WO2019168739A1 (en) * 2018-02-27 2019-09-06 Google Llc Large lookup tables for an image processor
US11468302B2 (en) * 2018-03-13 2022-10-11 Recogni Inc. Efficient convolutional engine
JP7035751B2 (ja) * 2018-04-12 2022-03-15 富士通株式会社 コード変換装置、コード変換方法、及びコード変換プログラム
US10983583B2 (en) * 2018-08-23 2021-04-20 Apple Inc. Electronic display reduced blanking duration systems and methods
US10672469B1 (en) 2018-11-30 2020-06-02 Macronix International Co., Ltd. In-memory convolution for machine learning
US10867375B2 (en) * 2019-01-30 2020-12-15 Siemens Healthcare Gmbh Forecasting images for image processing
WO2020191920A1 (en) * 2019-03-25 2020-10-01 Huawei Technologies Co., Ltd. Storing complex data in warp gprs
US11488650B2 (en) 2020-04-06 2022-11-01 Memryx Incorporated Memory processing unit architecture
US10853066B1 (en) 2019-05-07 2020-12-01 Memryx Incorporated Memory processing units and methods of computing DOT products including zero bit skipping
US10998037B2 (en) 2019-05-07 2021-05-04 Memryx Incorporated Memory processing units and methods of computing dot products
US11132569B2 (en) 2019-05-22 2021-09-28 Texas Instruments Incorporated Hardware accelerator for integral image computation
TWI738009B (zh) * 2019-06-20 2021-09-01 和碩聯合科技股份有限公司 物件偵測系統及物件偵測方法
KR102372869B1 (ko) * 2019-07-31 2022-03-08 한양대학교 산학협력단 인공 신경망을 위한 행렬 연산기 및 행렬 연산 방법
TWI698759B (zh) * 2019-08-30 2020-07-11 創鑫智慧股份有限公司 曲線函數裝置及其操作方法
GB2599377B (en) * 2020-09-29 2022-11-23 Roy Smith Graeme Signal processing systems
US11574380B2 (en) * 2020-10-13 2023-02-07 Qualcomm Incorporated Methods and apparatus for optimizing GPU kernel with SIMO approach for downscaling utilizing GPU cache
US20240112312A1 (en) * 2021-03-08 2024-04-04 Google Llc Motion-Induced Blurring to Reduce Scintillations and an Appearance of a Boundary Separating Regions of a Display

Family Cites Families (107)

* Cited by examiner, † Cited by third party
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
JPS61296473A (ja) * 1985-06-25 1986-12-27 Mitsubishi Electric Corp 行列演算回路
EP0293701B1 (en) 1987-06-01 1994-08-10 Applied Intelligent Systems, Inc. Parallel neighborhood processing system and method
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
JPH0748203B2 (ja) * 1988-06-17 1995-05-24 三菱電機株式会社 3次元デバイスを用いた正方行列乗算器
JP2666411B2 (ja) 1988-10-04 1997-10-22 三菱電機株式会社 二次元離散データ直交変換用集積回路装置
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
US5173947A (en) 1989-08-01 1992-12-22 Martin Marietta Corporation Conformal image processing apparatus and method
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 ソニー株式会社 画像データ処理装置および画像データ処理方法
US5848286A (en) 1994-03-29 1998-12-08 Cray Research, Inc. Vector word shift by vo shift count in vector supercomputer processor
US5606707A (en) 1994-09-30 1997-02-25 Martin Marietta Corporation Real-time image processor
US5612693A (en) 1994-12-14 1997-03-18 International Business Machines Corporation Sliding window data compression using a toroidal bit shift register
JPH08194679A (ja) 1995-01-19 1996-07-30 Texas Instr Japan Ltd ディジタル信号処理方法及び装置並びにメモリセル読出し方法
WO1997026603A1 (de) 1996-01-15 1997-07-24 Siemens Aktiengesellschaft Prozessor zur bildverarbeitung
US5892962A (en) 1996-11-12 1999-04-06 Lucent Technologies Inc. FPGA-based processor
US6211892B1 (en) 1998-03-31 2001-04-03 Intel Corporation System and method for performing an intra-add operation
US6148111A (en) 1998-04-27 2000-11-14 The United States Of America As Represented By The Secretary Of The Navy Parallel digital image compression system for exploiting zerotree redundancies in wavelet coefficients
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
EP1164544B1 (en) * 1999-03-16 2011-11-02 Hamamatsu Photonics K.K. High-speed vision sensor
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
JP2002044525A (ja) * 2000-07-27 2002-02-08 Sony Corp 固体撮像装置、その駆動方法およびカメラシステム
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
US20060044576A1 (en) 2004-07-30 2006-03-02 Kabushiki Kaisha Toshiba Apparatus for image processing
US20050216700A1 (en) 2004-03-26 2005-09-29 Hooman Honary Reconfigurable parallelism architecture
KR20070039490A (ko) 2004-05-03 2007-04-12 실리콘 옵틱스 인코포레이션 Simd 어레이 프로세서를 위한 비트 직렬 프로세싱 소자
US7667764B2 (en) 2004-06-04 2010-02-23 Konica Minolta Holdings, Inc. Image sensing apparatus
US7870176B2 (en) * 2004-07-08 2011-01-11 Asocs Ltd. Method of and apparatus for implementing fast orthogonal transforms of variable size
JP4219887B2 (ja) 2004-12-28 2009-02-04 富士通マイクロエレクトロニクス株式会社 画像処理装置及び画像処理方法
US7358997B2 (en) * 2004-12-30 2008-04-15 Lexmark International, Inc. Multiple resolution optical imager using single size image elements
WO2006114642A1 (en) 2005-04-28 2006-11-02 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
JP2007004542A (ja) 2005-06-24 2007-01-11 Renesas Technology Corp 半導体信号処理装置
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
US7991817B2 (en) 2006-01-23 2011-08-02 California Institute Of Technology Method and a circuit using an associative calculator for calculating a sequence of non-associative operations
GB2436377B (en) 2006-03-23 2011-02-23 Cambridge Display Tech Ltd Data processing hardware
US7802073B1 (en) 2006-03-29 2010-09-21 Oracle America, Inc. Virtual core management
US7933940B2 (en) 2006-04-20 2011-04-26 International Business Machines Corporation Cyclic segmented prefix circuits for mesh networks
JP2007311555A (ja) * 2006-05-18 2007-11-29 Fujifilm Corp 固体撮像デバイス及び固体撮像デバイスの駆動方法
US20080111823A1 (en) 2006-11-13 2008-05-15 Faraday Technology Corp. Graphics processing system
EP1927950A1 (en) 2006-12-01 2008-06-04 Thomson Licensing Array of processing elements with local registers
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 ブラザー工業株式会社 画像処理装置および画像処理プログラム
CN101796821B (zh) 2007-09-05 2012-12-12 国立大学法人东北大学 固体摄像元件和该固体摄像元件的驱动方法
US8661226B2 (en) 2007-11-15 2014-02-25 Nvidia Corporation System, method, and computer program product for performing a scan operation on a sequence of single-bit values using a parallel processor architecture
JP5134427B2 (ja) * 2008-04-30 2013-01-30 浜松ホトニクス株式会社 固体撮像装置
EP2289001B1 (en) 2008-05-30 2018-07-25 Advanced Micro Devices, Inc. Local and global data share
JP4999791B2 (ja) 2008-06-30 2012-08-15 キヤノン株式会社 情報処理装置、その制御方法、及びプログラム
US8456480B2 (en) 2009-01-14 2013-06-04 Calos Fund Limited Liability Company Method for chaining image-processing functions on a SIMD processor
US8711159B2 (en) 2009-02-23 2014-04-29 Microsoft Corporation VGPU: a real time GPU emulator
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
US20110102443A1 (en) 2009-11-04 2011-05-05 Microsoft Corporation Virtualized GPU in a Virtual Machine Environment
US8595428B2 (en) 2009-12-22 2013-11-26 Intel Corporation Memory controller functionalities to support data swizzling
GB201007406D0 (en) 2010-05-04 2010-06-16 Aspex Semiconductor Ltd Block motion estimation
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
CN103339604B (zh) 2011-01-31 2016-10-26 株式会社索思未来 程序生成装置、程序生成方法、处理器装置以及多处理器系统
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
WO2013042249A1 (ja) * 2011-09-22 2013-03-28 富士通株式会社 高速フーリエ変換回路
US10310879B2 (en) 2011-10-10 2019-06-04 Nvidia Corporation Paravirtualized virtual GPU
JP5742651B2 (ja) 2011-10-15 2015-07-01 コニカミノルタ株式会社 画像処理装置、連携方法および連携プログラム
JP5746100B2 (ja) 2011-12-27 2015-07-08 京セラドキュメントソリューションズ株式会社 画像形成装置
US20130210522A1 (en) 2012-01-12 2013-08-15 Ciinow, Inc. Data center architecture for remote graphics rendering
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
US9319254B2 (en) 2012-08-03 2016-04-19 Ati Technologies Ulc Methods and systems for processing network messages in an accelerated processing device
US20140092087A1 (en) 2012-09-28 2014-04-03 Takayuki Kazama Adaptive load balancing in software emulation of gpu hardware
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
US9477999B2 (en) * 2013-09-20 2016-10-25 The Board Of Trustees Of The Leland Stanford Junior University Low power programmable image processor
JP2016045703A (ja) * 2014-08-22 2016-04-04 富士通株式会社 処理装置、処理装置の処理方法及びプログラム
US10996959B2 (en) 2015-01-08 2021-05-04 Technion Research And Development Foundation Ltd. Hybrid processor
US9749548B2 (en) 2015-01-22 2017-08-29 Google Inc. Virtual linebuffers for image signal processors
US10291813B2 (en) 2015-04-23 2019-05-14 Google Llc Sheet generator for image processor
US9772852B2 (en) 2015-04-23 2017-09-26 Google Inc. Energy efficient processor core architecture 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
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
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
US9769356B2 (en) * 2015-04-23 2017-09-19 Google Inc. Two dimensional shift array for image processor
US9632979B2 (en) 2015-06-01 2017-04-25 Intel Corporation Apparatus and method for efficient prefix sum operation
US10313641B2 (en) * 2015-12-04 2019-06-04 Google Llc Shift register with reduced wiring complexity
US20180005346A1 (en) 2016-07-01 2018-01-04 Google Inc. Core Processes For Block Operations On An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register
US20180007302A1 (en) 2016-07-01 2018-01-04 Google Inc. Block Operations For An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register
US10481870B2 (en) * 2017-05-12 2019-11-19 Google Llc Circuit to perform dual input value absolute value and sum operation
US10503689B2 (en) * 2017-05-15 2019-12-10 Google Llc Image processor I/O unit

Also Published As

Publication number Publication date
US20190327437A1 (en) 2019-10-24
US10334194B2 (en) 2019-06-25
JP6821715B2 (ja) 2021-01-27
TW201921315A (zh) 2019-06-01
CN107563953A (zh) 2018-01-09
TW201802767A (zh) 2018-01-16
TWI767190B (zh) 2022-06-11
US20180007302A1 (en) 2018-01-04
US10531030B2 (en) 2020-01-07
GB2560208A (en) 2018-09-05
US9986187B2 (en) 2018-05-29
KR20190025919A (ko) 2019-03-12
TW202025081A (zh) 2020-07-01
GB2560208B (en) 2019-09-25
US20200154072A1 (en) 2020-05-14
TWI656508B (zh) 2019-04-11
TWI625697B (zh) 2018-06-01
EP3479340A1 (en) 2019-05-08
DE202017103725U1 (de) 2017-10-04
TWI687896B (zh) 2020-03-11
US20180007303A1 (en) 2018-01-04
GB2577139B (en) 2021-05-26
GB2577139A (en) 2020-03-18
GB201900923D0 (en) 2019-03-13
US11196953B2 (en) 2021-12-07
JP2019521441A (ja) 2019-07-25
US20180234653A1 (en) 2018-08-16
GB201709786D0 (en) 2017-08-02
DE102017113859A1 (de) 2018-01-04
TW201826219A (zh) 2018-07-16
WO2018005036A1 (en) 2018-01-04
KR102190318B1 (ko) 2020-12-11

Similar Documents

Publication Publication Date Title
CN107563953B (zh) 具有二维执行通道阵列和二维移位寄存器的图像处理器的区块操作
CN107563954B (zh) 具有二维执行通道阵列和二维移位寄存器的图像处理器上区块操作的核处理
EP3286721B1 (en) Virtual image processor instruction set architecture (isa) and memory model and exemplary target hardware having a two-dimensional shift array structure
WO2016171846A1 (en) Compiler for translating between a virtual image processor instruction set architecture (isa) and target hardware having a two-dimensional shift array structure

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

Address after: American California

Applicant after: Google limited liability company

Address before: American California

Applicant before: Google Inc.

CB02 Change of applicant information
GR01 Patent grant
GR01 Patent grant