CN107533750A - 虚拟图像处理器指令集架构(isa)和存储器模型与具有二维移位阵列结构的示例性目标硬件 - Google Patents
虚拟图像处理器指令集架构(isa)和存储器模型与具有二维移位阵列结构的示例性目标硬件 Download PDFInfo
- Publication number
- CN107533750A CN107533750A CN201680019972.2A CN201680019972A CN107533750A CN 107533750 A CN107533750 A CN 107533750A CN 201680019972 A CN201680019972 A CN 201680019972A CN 107533750 A CN107533750 A CN 107533750A
- Authority
- CN
- China
- Prior art keywords
- instruction
- data
- memory
- array
- set architecture
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/20—Design optimisation, verification or simulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/10—Requirements analysis; Specification techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
-
- 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
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- 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/30101—Special purpose registers
-
- 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/44—Arrangements for executing specific programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- Image Processing (AREA)
- Processing Or Creating Images (AREA)
- Advance Control (AREA)
Abstract
描述了一种方法,包括在应用软件开发环境内实例化虚拟处理器,该虚拟处理器具有指令集架构和存储器模型,指令集架构和存储器模型预设了预留存储器的第一和第二区域。第一预留区域保存输入图像阵列的数据。第二预留区域保存输出图像阵列的数据。所述方法还包括通过下述步骤模拟指令集架构的存储器加载指令的执行:自动把第一预留区域作为目标,并且利用所述存储器加载指令的指令格式中表达的垂直坐标系内相对于虚拟处理器的位置的第一和第二坐标识别期望的输入数据。
Description
技术领域
本发明的领域一般涉及图像处理,特别涉及用于在虚拟图像处理指令集架构(ISA)和存储器模型以及具有二维移位阵列结构的示例性目标硬件。
背景技术
图像处理通常涉及对组织成阵列的像素值的处理。在此,空间组织的二维阵列捕捉图像的二维性质(另外的维度可以包括时间(例如,二维图像的序列)和数据类型(例如,色彩))。在典型情景下,阵列化的像素值由生成静态图像或者帧序列的相机提供,以捕捉运动的图像。传统的图像处理器通常会落入两种极端之一。
第一种极端作为在通用处理器或者通用类处理器(例如,具有向量指令增强的通用处理器)上执行的软件程序执行图像处理任务。尽管第一种极端通常提供高度通用的应用软件开发平台,但其结合相关开销(例如,取指令和解码、处理片上和片外数据、推测执行)使用更细粒度的数据结构会最终导致在执行程序代码期间每单位数据消耗的能量较多。
第二种相反的极端把固定功能硬布线电路应用于很大的数据块。使用更大的(相对于细粒度)数据块直接应用于定制设计的电路,大大降低每单位数据的功耗。然而,使用定制设计的固定功能电路通常会导致处理器只能执行一组有限的任务。这样,在第二种极端中缺乏广泛通用的编程环境(其与第一极端相关联)。
提供高度通用的应用软件开发机会结合改进的每单位数据的功率效率的技术平台仍是理想但缺失的解决方案。
发明内容
描述了一种方法,包括在应用程序软件开发环境内实例化虚拟处理器,该虚拟处理器具有指令集架构和存储器模型,指令集架构和存储器模型预设了预留的存储器的第一和第二区域。第一预留区域保存输入图像阵列的数据。第二预留区域保存输出图像阵列的数据。该方法也包括通过下述步骤模拟指令集架构的存储器加载指令的执行:自动把第一预留区域作为目标,以及利用所述存储器加载指令的指令格式中表达的垂直坐标系内相对于虚拟处理器的位置的第一和第二坐标识别期望的输入数据。
附图说明
以下描述和附图用于说明本发明的实施例。在图中:
图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示出计算系统的实施例。
具体实施方式
I.简介
以下内容描述关于新图像处理技术平台的若干实施例,该平台提供使用较大数据块(例如,下文进一步描述的线缓冲器和数据片)的能够落实到硬件架构的应用软件开发环境,以提供改善的功率效率。
1.0应用软件开发环境
a.内核的应用和结构
图1示出图像处理器技术平台的高级视图,该平台包括虚拟图像处理环境101、实际图像处理硬件103以及用于把对虚拟处理环境101编写的高级代码转译成实际硬件103物理上执行的目标代码的编译器102。如下详述,虚拟处理环境101在能够开发的应用方面广泛通用并且被定制用于应用组成过程的简单可视化。在由开发者104完成程序代码开发工作后,编译器102把在虚拟处理环境101内编写的代码转译成针对实际硬件103的目标代码。
图2a示出在虚拟环境内编写的应用软件可以采取的结构和形式的示例。如图2a所示,可以预期程序代码处理输入图像数据201的一个或多个帧,从而实现对输入图像数据201的某种整体变换。通过以由开发者表达的编排顺序对输入图像数据进行操作的程序代码202的一个或多个内核的操作来实现变换。
例如,如图2a所示,通过首先用第一内核K1处理每个输入图像来实现整体变换。然后,通过内核K2对由内核K1产生的输出图像进行操作。然后,通过内核K3_1或者K3_2对由内核K2产生的输出图像中的每个进行操作。然后,通过内核K4对由内核K3_1/K3_2产生的输出图像进行操作。内核K3_1和K3_2可以是相同的内核,旨在通过在K3阶段实施并行处理来加速整体处理,或者它们可以是不同的内核(例如,内核K3_1对第一种特定类型的输入图像进行操作,而内核K3_2对第二种不同类型的输入图像进行操作)。
这样,较大的整体图像处理序列可以采取图像处理流水线或者有向无环图(DAG)的形式,并且开发环境可以被配备成向开发者实际提供如此开发的程序代码的表示(representation)。内核可以由开发者单独开发和/或可以由提供任何底层技术的实体(诸如实际信号处理器硬件和/或其设计)和/或由第三方(例如为开发环境编写的内核软件的供应商)提供。这样,可以预期,标称开发环境将包括内核“库”,开发者通过各种方式自由地“临时连接”内核库,以完成大型开发工作的总体流程。预期成为这种库一部分的一些基本内核可以包括提供以下基本图像处理任务中一个或多个的内核:卷积、去噪、色彩空间转换、边缘和角点检测、锐化、白平衡、伽马校正、色调映射、矩阵相乘、图像配准、金字塔构建、小波变换、分块离散余弦以及傅里叶变换。
图2b示出开发者可以设想的内核203的结构的示例性描绘。如图2b所示,内核203能够被看作是程序代码的若干并行线程(“线程”)204,它们各自在相应的底层处理器205上操作,其中每个处理器205针对输出阵列206中的特定位置(诸如正生成内核的输出图像中的特定像素位置)。简明起见,在图2b中仅示出三个处理器和对应的线程。在各种实施例中,每个描绘的输出阵列位置会具有它自己的专用处理器和对应的线程。也就是说,对输出阵列中的每个像素,可分配单独的处理器和线程。在替选方法中,同一线程可以生成多个输出像素的数据,并且/或者两个不同的线程(例如,在某些限制情况下)可以协同生成用于相同输出像素的数据。
如下文详述,在各种实施例中,在实际的底层硬件中,执行道(execution lane)的阵列和对应的线程一致工作(例如,以单指令多数据(SIMD)型方式),以生成用于当前被处理帧的“线群(line group)”的一部分的输出图像数据。线群是图像帧的连续的尺寸可调的部分。在各种实施例中,开发者可能意识到,硬件对线群进行操作,或者开发环境可以提供一种抽象,在该抽象中存在单独的处理器和线程,例如用于输出帧中的每个像素(例如,输出帧中的每一像素由它自己的专用处理器和线程生成)。无论如何,在各种实施例中,开发者理解,内核包括用于每个输出像素的单独线程(是否输出阵列的可视化是整个输出帧或者其中一部分)。
如下详述,在一个实施例中,在虚拟环境中向开发者提供的处理器205具有指令集架构(ISA),其不仅支持标准(例如,RISC)操作码,而且还包括具有特殊格式的数据存取指令,这就允许开发者容易可视化正在执行的逐像素处理。结合传统的数学和程序控制操作码的整个ISA容易定义/可视化任何输入阵列位置的能力容许极其通用的编程环境,其基本上允许应用程序开发者理想地定义要在任何大小的图像表面上执行的任何所需函数。例如,理想地,能够容易地将任何数学运算编程成适用于任何模板大小。
关于数据存取指令,在一个实施例中,虚拟处理器的ISA(“虚拟ISA”)包括特殊的数据加载指令和特殊的数据存储指令。数据加载指令能够从图像数据的输入阵列内的任何位置读取。数据存储指令能够写入图像数据的输出阵列内的任何位置。后一指令容许容易地把同一处理器的多个实例专用于不同的输出像素位置(每个处理器写入输出阵列中的不同像素)。这样,例如,模板大小本身(例如,表达为像素的宽度和像素的高度)能够成为易于编程的特征。处理操作的可视化被进一步简化,特殊的加载和存储指令中的每个具有特殊指令格式,由此将目标阵列位置简单地指定为X坐标和Y坐标。
无论如何,通过为输出阵列中的多个位置中的每个使单独的处理器实例化,处理器能够并行地执行它们各自的线程,使得例如同时产生输出阵列中全部位置的相应值。值得注意的是,许多图像处理例程通常对相同输出图像的不同像素执行相同的操作。这样,在开发环境的一个实施例中,假设每个处理器是相同的并且执行相同的线程程序代码。因此,虚拟化的环境能够被视为一种类型的二维(2D)SIMD处理器,其由例如相同处理器的2D阵列组成,每个处理器以锁步执行相同的代码。
图3示出正处理输出阵列中两个不同像素位置的相同代码的两个虚拟处理器的处理环境的更详细的示例。图3示出对应于正生成的输出图像的输出阵列304。在此,第一虚拟处理器正处理线程301的代码使得在输出阵列304的位置X1处生成输出值,并且第二虚拟处理器正处理线程302的代码以在输出阵列的位置X2处生成输出值304。此外,在各种实施例中,开发者应理解,对于输出阵列304中的每个像素位置(为简明图3仅示出其中两个),存在单独的处理器和线程。然而,在各种实施例中,开发者仅需开发用于一个处理器和线程的代码(因为机器的SIMD类性质)。
如本领域中所知,输出像素值经常通过处理那些包括并围绕对应输出像素位置的输入阵列的像素来确定。例如,如从图3可以看出,输出阵列304的位置X1对应于输入阵列303的位置E。因此,被处理以确定输出值X1的输入阵列303像素值的模版(stencil)对应于输入值ABCDEFGHI。类似地,被处理以确定输出值X2的输入阵列像素的模板对应于输入值DEFGHIJKL。
图3示出能够被用于分别计算输出值X1和X2的一对线程301、302对应的虚拟环境程序代码的示例。在图3的示例中,两对代码是相同的并且平均九个输入阵列值的模板,以确定相应的输出值。两个线程之间的唯一区别是从输入阵列调用的变量以及写入的输出阵列的位置。具体地,写入输出位置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的内容存入线程专用的输出阵列位置的存储指令。此外,尽管在图3中描绘出仅两个输出阵列位置以及仅两个线程和对应的处理器,但可以设想,能够为输出阵列中的每个位置分配执行这些功能的虚拟处理器和对应的线程。在各种实施例中,按照处理环境的SIMD类性质,多个线程彼此隔离地执行。也就是说,虚拟处理器之间没有线程到线程的通信(一个SIMD信道受阻于越界进入另一个SIMD信道)。
b.虚拟处理器的存储器模型
在各种实施例中,各虚拟处理器的相关特征是它们的存储器模型。如本领域中所理解,处理器从存储器读取数据,对该数据进行操作并且把新的数据写回到存储器中。存储器模型是处理器具有把数据组织到存储器中的方式的透视图或者视图。图4a至图4c涉及用于开发环境的虚拟处理器的存储器模型的实施例。出于示例的目的,使用仅涉及三个虚拟处理器和对应线程401的简化环境。如下详述,虚拟处理器的存储器模型注意保留SIMD语义,而同时为每个虚拟处理器提供标量运算和专用的中间值存储空间。
如图4a所示,在一个实施例中,每个虚拟处理器从中操作的存储区域根据存储的信息的类型而被组织成六种不同的分区。具体地有:1)专用(private)暂存区域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。图像处理任务经常使用查找表,例如,用以获得不同阵列位置的滤波器或者变换系数,实现复杂函数(例如,伽马曲线、正弦、余弦),其中查找表为输入索引值等提供函数输出。在此,预期SIMD图像处理序列在相同的时钟周期期间经常会到相同的查找表中执行查找。这样,如同输入和输出阵列存储器区域403、404,查找表区域405可供任何虚拟处理器全局访问。图4a同样示出从保存在查找表存储区域405中的同一查找表411有效地查找信息的三个虚拟处理器中的每个。
在一个实施例中,由于索引值通常被使用于定义所需的查找表条目,因此使用正常的线性访问方案来访问查找表信息区域。在一个实施例中,存储器的查找区域是只读的(即,处理器无法更改查找表中的信息并且仅获许从其中读取信息)。简明起见,图4a仅显示一个查找表驻存在查找表区域405内,但虚拟环境允许多个不同的查找表在模拟运行期间驻存。下面进一步提供到查找表中执行查找的指令的虚拟ISA指令格式的实施例。
图4b示出向原子统计区域406写入413的三个虚拟处理器中的每个。对输出信息进行“更新”或者做适度更改对于图像处理而言并不罕见。然后,可以再将更新的信息用于利用该更新的信息的其他下游过程。这样的更新或者适度更改的示例包括输出数据与固定偏移的简单相加、输出数据与被乘数的简单相乘或者使输出数据与某个阈值的最小值或者最大值比较。
在这些序列中,如图4b所示,可以对刚刚由各个线程计算出的输出数据进行操作,并且把结果写入原子统计区域406。根据实现语义,通过原子动作操作的输出数据可以由处理器在内部保存或者从输出阵列中调用,图4b示出后者412。在各种实施例中,可以对输出数据执行的原子动作包括加法、乘法、求最小值和求最大值。在一个实施例中,鉴于对输出数据的更新会在逻辑上被组织成与输出数据本身相同的二维阵列,使用位置相对寻址方案(正如输入和输出阵列访问)来访问原子统计区域406。下面进一步更详细地描述用于对输出数据执行原子动作并且将结果写入统计区域406的虚拟ISA指令格式的实施例。
图4c示出从常数存储器区域407内的常数查找表424中读取414常数值的虚拟处理器中的每个。在此,例如,预期在不同的线程在同一时钟周期(例如,针对整个图像应用的特定乘法器)上可能需要相同的常数或者其他值。因此,如图4c所示,到常数查找表415的访问向虚拟处理器中的每个返回相同的标量值。因为通常利用索引值来访问查找表,在一个实施例中,利用线性随机存取存储器地址来访问常数查找表存储区。在一个实施例中,存储器的常数区域是只读的(即,处理器无法更改常数表中的信息并且仅获许从其中读取信息)。简明起见,图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操作数定义指令的目标是命名的线群或者统计表的哪一通道。在此,通常,单个图像具有多个通道(channel)。例如,对于视频流的同一帧,视频图像通常具有红色通道(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项被用于在具有不同像素密度的输入图像与输出图像之间进行缩放。下面进一步详细描述缩放。
在最简单的情况下,输入图像与输出图像之间无缩放,并且指令格式的X和Y分量简单地采取X+X0和Y+Y0的形式,其中X0和Y0是相对于线程位置的位置偏移量。线程被视为分配给输出值被写入的输出阵列线群内的位置。对应的相同位置很容易能在输入阵列线群和任何统计表中识别。
作为示例,如果对线程分配了输出阵列LINEGROUP_1中特定的X、Y位置,则指令
LOAD LINEGROUP_1[(X-1);(Y-1);Z]
将从LINEGROUP_1加载输入阵列内相同X、Y位置向左一个像素位置并且向下一个像素位置的值。
因此,如图5a所示,对X、Y位置连同其左右邻居的像素值取平均数的简单模糊核可以被写成伪代码。如图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运算,其中假设每个图像阵列位置保持四个8位值,用于每个阵列位置的32位的总数据大小。
在各种实施例中,每个虚拟处理器还包括用于保存谓词值的寄存器。单个谓词值在长度上通常只有一位并且表示来自对现有数据执行真/假或者大于/小于测试的操作码的结果。使用谓词值,例如,用以在执行期间确定通过代码的分支方向(由此用作条件分支指令中的操作数)。谓词值也能够被表达为指令中的立即操作数。
在各种实施例中,每个虚拟处理器包括用于保存标量值的寄存器。在此,标量值被存储到为常数保留的存储器模型的分区空间中并且从其中读取(如上参照图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(将操作数B除以操作数A);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。如上文参照图2所讨论,开发者可以通过在与整体目标图像转换相符的策略序列中安排内核,开发综合的图像处理功能(例如,流水线中的每个级执行专有图像处理任务的图像处理流水线,一些其他的DAG规定的例程集等)。可以从库602中调用内核,并且/或者开发者可以开发一个或多个定制内核。
库602内的内核(kernel)可以由内核的第三方供应商和/或任何基础技术的提供者来提供(例如,包括目标硬件图像处理器的硬件平台的供应商或者目标硬件图像处理器的供应商(例如,作为其设计或者作为实际硬件提供))。
在定制开发的内核的情况下,在许多情况下,开发者仅需要为单线程603编写程序代码。也就是说,开发者仅需通过参考相对于输出像素位置的输入像素值(例如,利用上述位置相对存储器存取指令格式),编写确定单个输出像素值的程序代码。在满足单线程603的操作后,开发环境可以再在相应的虚拟处理器上自动实例化线程代码的多个实例,使得在对图像表面区域进行操作的处理器阵列上实现内核。图像表面区域可以是图像帧的一段(诸如线群)。
在各种实施例中,定制的线程程序代码被写入虚拟处理器ISA的目标代码中(或者被编译到虚拟处理器ISA目标代码的高级语言)。在包括存取根据存储器模型组织的存储器的虚拟处理器的模拟运行时环境中,可以对定制内核的程序代码的执行进行模拟。在此,虚拟处理器的软件模型604以及包含模型的存储器的软件模型605(面向对象或以其他方式)被实例化。
然后,虚拟处理器模型604模拟线程代码603的执行。在满足线程、其较大内核以及该内核所属的任何较大函数的性能后,整体被编译成底层硬件的实际目标代码。整个模拟环境601可以被实现为在计算机系统(例如,工作站)606上运行的软件。
以下章节描述在具有在上面论述的环境的各种特征的应用软件开发环境中编写的应用软件的示例性目标硬件架构的实施例。有必要指出,下面描述的目标硬件仅是示例性的并且可想而知许多其他替代的硬件架构(architecture)应由在前述软件开发环境中编写的代码来定向。
2.0硬件架构的实施例
a.图像处理器硬件架构和操作
图7示出用于以硬件实现的图像处理器的架构700的实施例。图像处理器可以例如作为编译器的目标,该编译器将为模拟环境内的虚拟处理器编写的程序代码转换成由硬件处理器实际执行的程序代码。如图7所示,架构700包括通过网络704(例如,片上网络(NOC),包括片上交换网络、片上环形网络或者其他类型的网络)互连到多个模版处理器单元702_1至702_N以及对应的数据片生成器单元703_1至703_N的多个线缓存器单元701_1至701_M。在一个实施例中,任何线缓存器单元都可以通过网络704连接到任何数据片生成器和对应的模板处理器。
在一个实施例中,程序代码被编译并加载到对应的模板处理器702上以执行由软件开发者早先定义的图像处理操作(程序代码也可以被加载到模板处理器的相关数据片生成器703上,例如,这取决于设计和实施)。在至少一些实例中,图像处理流水线可以通过将用于第一流水线级的第一内核程序加载到第一模板处理器702_1中、将用于第二流水线级的第二内核程序加载到第二模板处理器702_2中等来实现,其中第一内核执行流水线的第一级的功能,第二内核执行流水线的第二级的功能等,并且安装附加的控制流方法,以将输出图像数据从流水线的一级转换到流水线的下一级。
在其他配置中,图像处理器可以被实现为具有操作相同内核程序代码的两个或两个以上模板处理器702_1、702_2的并行机。例如,图像数据的高密度和高数据速率流可以通过跨其中每个均执行相同功能的多个模板处理器扩展帧来处理。
在又一些其他配置中,基本上内核的任何DAG都可以被加载到硬件处理器上,这是通过在DAG设计中,配置具有其各自的相应程序代码内核的相应模板处理器,以及将适当的控制流钩子配置到硬件中以将输出图像从一个内核引导到下一个内核的输入。
作为一般流程,图像数据的帧由宏I/O单元705接收并且逐帧传送到线缓存器单元701中的一个或多个。特定的线缓存器单元将其图像数据的帧解析成图像数据的更小区域,称作“线群(line group)”,然后通过网络704将线群传送到特定的数据片生成器。完整或“完全”的单线群可以例如由一帧的多个连续完整的行或列的数据组成(为简明起见,本说明书主要是指连续的行)。数据片生成器进一步将图像数据的线群解析成图像数据的更小区域,称作“数据片(sheet)”,并且将数据片提供给其对应的模板(stencil)处理器。
在具有单个输入的图像处理流水线或者DAG流的情况下,通常,输入帧被引导至相同的线缓存器单元701_1,该线缓存器单元将图像数据解析成线群并且将线群引导到数据片生成器703_1,其对应的模板处理器702_1正执行流水线/DAG中的第一内核的代码。在模板处理器702_1对其处理的线群完成操作后,数据片生成器703_1将输出线群发送到“下游”的线缓存器单元701_2(在某些用例中,输出线群可以被发回到早先已发送输入线群的相同线缓存器单元701_1)。
然后,一个或多个“消费者”内核从下游的线缓存器单元701_2接收由第一模板处理器702_1生成的图像数据,所述“消费者”表示在各自其他数据片生成器和模板处理器(例如,数据片生成器703_2和模板处理器702_2)上执行的流水线/DAG中的下一级/操作。通过这种方式,在第一模板处理器上运行的“生产者”内核将其输出数据转发到在第二模板处理器上运行的“消费者”内核,其中消费者内核在生产者内核之后执行下一组任务,这与总体流水线或DAG的设计相符。
模板处理器702被设计成同时对图像数据的多个重叠的模板(stencil)进行操作。模板处理器的多个重叠模板和内部硬件处理能力有效地确定数据片的尺寸。在此,在模板处理器702内,执行道的阵列操作一致使得同时处理被多个重叠模板覆盖的图像数据表面区域。
如下详述,在各种实施例中,图像数据的数据片被加载到模板处理器702内的二维寄存器阵列结构中。使用数据片和二维寄存器阵列结构被认为有效地提供功耗改善,这是通过将大量数据移入大量寄存器空间,例如,作为单个加载操作,紧随其后,由执行道阵列直接对数据执行处理任务。此外,使用执行道阵列和对应的寄存器阵列提供可易于编程/配置的不同模板大小。
图8a至图8e图示出线缓存器单元701的解析活动、数据片生成器单元703的更细粒度的解析活动以及耦合至数据片生成器单元703的模板处理器702的模板处理活动的高级实施例。
图8a描绘出图像数据801的输入帧的实施例。图8a还描绘出模板处理器被设计用来操作的三个重叠模板802(每个具有3像素×3像素的尺寸)的概略图。每个模板分别为其生成输出图像数据的输出像素以实心黑色来突出显示。简明起见,三个重叠模板802被描绘为仅在垂直方向上重叠。有必要认识到,实际上,模板处理器可以设计成在垂直方向和水平方向上都具有重叠模版。
由于模板处理器内的垂直重叠模板802,如图8a所示,在单个模板处理器能够操作的帧内存在宽范围的图像数据。如下详述,在一个实施例中,模板处理器跨图像数据以从左到右的方式在其重叠模板内处理数据(然后以从上到下的顺序对下一组线进行重复)。因此,随着模板处理器持续进行其操作,实心黑色输出像素块的数目会在水平方向上向右增加。如上所论,线缓存器单元701负责解析来自输入帧的输入图像数据的线群,其足以使模板处理器在更多个即将到来的周期中进行操作。线群的示例性描绘被图示为阴影区域803。在一个实施例中,如下进一步描述,线缓存器单元701能够具有用于向/从数据片生成器发送/接收线群的不同动态性。例如,根据一种称作“全群”的模式,在线缓存器单元与数据片生成器之间传送图像数据的完整全宽线。根据称作“实高”的第二模式,最初用全宽行的子集来传送线群。然后,依序以更小的片段(小于全宽)传送剩余的行。
随着输入图像数据的线群803已由线缓存器单元定义并且传送到数据片生成器单元,数据片生成器单元进一步将线群解析成更精细的数据片,其更准确适配于模板处理器的硬件限制。更具体地,如下详述,在一个实施例中,每个模板处理器由二维移位寄存器阵列组成。二维移位寄存器阵列基本上将图像数据移位到执行道的阵列“下方”,在此移位的模式使得每个执行道对其各自模板内的数据进行操作(也就是说,每个执行道对其自己的信息模板进行处理以生成用于该模板的输出)。在一个实施例中,数据片是“填充”或以其他方式加载到二维移位寄存器阵列中的输入图像数据的表面区域。
因此,如图8b所示,数据片生成器解析来自线群803的初始数据片804并且将其提供给模板处理器(在此,数据的数据片对应于通常由附图标记804标示的阴影区域)。如图8c和图8d所示,模板处理器通过在数据片上以从左到右的方式有效地移动重叠模板802而对输入图像数据的数据片进行操作。如图8d所示,从数据片内的数据能够算出的输出值的像素数被穷尽(没有其他像素位置会具有从数据片内的信息所确定的输出值)。简明起见,已忽略图像的边界区域。
如图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中。如果稍后I/O单元904从随机存取存储器907中取出数据来形成输出数据片,则将其转发到数据片生成器。
标量处理器902包括程序控制器909,其从标量存储器903读取模板处理器的程序代码的指令并且将这些指令发送到执行道阵列905中的执行道。在一个实施例中,单个相同的指令被广播到阵列905内的所有执行道使得从数据计算单元901实现SIMD类行为。在一个实施例中,从标量存储器903读取并且发送到执行道阵列905的执行道的指令的指令格式包括一个超长指令字(VLIW)型格式,其包括每指令一个以上的操作码。在另一个实施例中,VLIW格式包括指示由每个执行道的ALU执行的数学函数的ALU操作码(如下所述,其在一个实施例中可以指定一个以上的传统ALU操作)以及存储器操作码(其指示用于特定执行道或者一组执行道的存储器操作)。
术语“执行道(execution lane)”是指能够执行指令的一个或多个执行单元组成的集合(如能够执行指令的逻辑电路)。然而,在各种实施例中,执行道能够包括除执行单元之外的更多处理器类功能。例如,除一个或多个执行单元外,执行道还可以包括对接收到的指令进行解码的逻辑电路,或者在更多的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可以被并行执行)。
在一个实施例中,由标量处理器执行的标量指令包括发送到数据片生成器以从/向数据计算单元的存储器或者2D移位寄存器加载/存储数据片的命令。在此,数据片发生器的操作能够取决于线缓存器单元的操作或者其他变量,这些变量防止周期数包含预运行,而这会使数据片生成器完成由标量处理器发出的任何命令。这样,在一个实施例中,标量指令951对应于或以其他方式导致向数据片发生器发出命令的任何VLIW字还包括另外两个指令字段952、953中的无操作(NOOP)指令。然后,程序代码输入指令字段952、953的NOOP指令循环,直到数据片发生器完成其向/从数据计算单元的加载/存储。在此,在向数据片生成器发出命令后,标量处理器可以设置数据片生成器在完成命令后重置的互锁寄存器的位。在NOOP循环期间,标量处理器监视互锁位的位。当标量处理器检测到数据片发生器已经完成其命令时,正常执行重新开始。
图10示出数据计算组件1001的实施例。如图10所示,数据计算组件1001包括逻辑上定位于二维移位寄存器阵列结构1006“上方”的执行道阵列1005。如上所述,在各种实施例中,由数据片发生器提供的图像数据的数据片被加载到二维移位寄存器1006中。然后,执行道对来自寄存器结构1006的数据片数据进行操作。
执行道阵列1005和移位寄存器结构1006在位置上彼此相对固定。然而,移位寄存器阵列1006内的数据以策略和协调方式移位,以使执行道阵列中的每个执行道处理数据内的不同模板。这样,每个执行道确定正在生成的输出表中的不同像素的输出图像值。从图10的架构来看,应当清楚,重叠模板不仅被垂直布置,而且被水平布置,因为执行道阵列1005包括垂直相邻的执行道以及水平相邻的执行道。
数据计算单元1001的一些显著架构特征包括具有比执行道阵列1005更宽尺寸的移位寄存器结构1006。也就是说,在执行道阵列1005之外存在寄存器的“晕圈”1009。虽然晕圈1009被表示成存在于执行道阵列的两侧,但根据实施方式,晕圈可以存在于执行道阵列1005的更少侧(一侧)或更多侧(三侧或四侧)上。晕圈1009用于当数据在执行道1005“下方”移位时,为溢出至执行道阵列1005的边界之外的数据提供“溢出”空间。在简单的情况下,当处理模板最左边的像素时,居于执行道阵列1005的右边缘中心的5×5模板需要再向右的四个晕圈寄存器位置。为便于绘图,图10示出,在标准实施例中,在晕圈右侧的寄存器仅具有水平移位连接,而晕圈底侧的寄存器仅具有垂直移位连接,而任何一侧(右侧、底侧)上的寄存器具有水平连接和垂直连接。
额外的溢出空间由随机存取存储器1007提供,该随机存取存储器被耦合至阵列中的每一行和/或每一列或其部分(例如,随机存取存储器可以被分配给执行道阵列的“区域”,该区域跨4个执行道行和2个执行道列。简明起见,本申请的其余内容主要涉及基于行和/或列的分配方案)。在此,如果执行道的内核操作要求其处理二维移位寄存器阵列1006之外的像素值(某些图像处理例程可能有所需要),则图像数据的平面能够进一步溢出,例如,从晕圈区域1009溢到随机存取存储器1007中。例如,考虑6×6模板,其中硬件包括在执行道阵列右边缘上的执行道右侧的仅四个存储元素的晕圈区域。在此情形下,数据需要被进一步移位到晕圈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集中于两个模板的计算,这两个模板的中心位置与执行道阵列内绘出的一对执行道位置1111对齐。为便于图示,这对执行道1110被绘制成水平邻居,而根据以下示例,它们实际上是垂直邻居。
如最初在图11a中所示,执行道以其中心的模板位置为中心。图11b示出由两个执行道执行的目标代码。如图11b所示,两个执行道的程序代码使得移位寄存器阵列内的数据向下移位一个位置并且向右移位一个位置。这就使两个执行道对准其各自模板的左上角。然后,程序代码使得(在R2中)位于它们相应位置的数据加载到R1中。
如图11c所示,接下来,程序代码使得这对执行道将移位寄存器阵列内的数据向左移位一个单位,这就使得每个执行道的相应位置右侧的值移到每个执行道的位置。然后,将R1中的值(前一个值)添加已移位到执行道的位置的新值(在R2中)。将结果写入R1。如图11d所示,重复与上文参照图11c所述相同的处理,这就使得所得的R1目前包括上执行道中的值A+B+C以及下行执行道中的F+G+H。在这一点上,两个执行道都已经处理它们各自模版的上行。注意,如果在执行道阵列的左侧不存在晕圈区域,则会溢出到执行道阵列左侧的晕圈区域(如果左侧存在一个晕圈区域)或者随机存取存储器中。
如图11e所示,接下来,程序代码使得移位寄存器阵列内的数据向上移位一个单位,这就使得两个执行道都与它们各自模板的中间行的右边缘对准。两个执行道的寄存器R1当前包括模板的顶行和中间行的最右值之和。图11f和图11g示出跨两条执行道的模板的中间行向左移动的连续进展。继续累加,这样在图11g的处理结束时,两个执行道包括它们各自模板的顶行和中间行的值之和。
图11h示出将每个执行道与其对应的模版的最下行对准的另一移位。图11i和图11j示出在两个执行道的模板的进程中继续移位以完成处理。图11k示出附加移位,以使每个执行道与其在数据阵列中的正确位置对准并且将结果写入其中。
在图11a至图11k的示例中,注意,用于移位操作的目标代码可以包括识别以(X,Y)坐标表达的移位的方向和量级的指令格式。例如,用于向上移位一个位置的目标代码可以在目标代码中表达为SHIFT0,+1。作为另一示例,向右移位一个位置可以在目标代码中表达为SHIFT+1,0。在各种实施例中,较大量级的移位也可以在目标代码中指定(例如,SHIFT 0,+2)。在此,如果2D移位寄存器硬件仅支持每周期移位一个位置,则指令可以被机器解释成需要多个周期执行,或者2D移位寄存器硬件可以被设计成支持每周期移位一个以上位置。下面将进一步详细描述后一情况的实施例。
图12示出阵列执行道和移位寄存器结构的单位胞元(cell)的另一个更详细的描述(晕圈区域中的寄存器不包括对应的执行道)。在一个实施例中,通过在执行道阵列的每个节点处实例化图12中所示的电路,实现与执行道阵列中的每个位置相关联的执行道和寄存器空间。如图12所示,单元胞元包括执行道1201,其被耦合至由四个寄存器R2至R5组成的寄存器堆1202。在任一周期期间,执行道1201可以从寄存器R1至R5中的任何一个读取或者向其写入。对于需要两个输入操作数的指令,执行道可以从R1至R5中的任何一个获得两个操作数。
在一个实施例中,实现二维移位寄存器结构是通过在单个周期期间允许寄存器R2至R4中的任何(仅)一个的内容通过输出复用器1203“移出”到其邻居的寄存器堆中的一个,并且将寄存器R2至R4中的任何(仅)一个的内容替换成如果其邻居通过输入复用器1204从对应的一个“移入”的内容,使得邻居之间的移位处于相同的方向(例如,全部执行道向左移位,全部执行道向右移位等)。虽然通常相同寄存器可能会将其内容移出并且替换成在相同周期中移入的内容,但复用器装置1203、1204允许同一周期期间同一寄存器堆内的不同移位源寄存器和移位目标寄存器。
如图12所示,注意,在移位序列期间,执行道将内容从其寄存器堆1202移位到其左邻、右邻、上邻和下邻中的每个。结合相同的移位序列,执行道还将内容从其左邻、右邻、上邻和下邻中的特定一个移位到其寄存器堆中。再而言之,对于全部执行道,移出目标和移入源应当符合同一移位方向(例如,如果移出是向右方的邻居,则移入应当是从左方的邻居)。
虽然在一个实施例中,每个周期每个执行道允许移位唯一寄存器的内容,但其他实施例可以允许移入/移出多个寄存器的内容。例如,如果将图12中所示的复用器电路1203、1204的第二个实例并入图12的设计中,则在同一周期期间可以移出/移入两个寄存器的内容。当然,在每个周期允许移位唯一寄存器的内容的实施例中,通过消耗更多的时钟周期用于数学运算之间的移位,可以在数学运算之间进行从多个寄存器移位(例如,通过在数学运算之间消耗两个移位操作,可以在数学运算之间移位两个寄存器的内容)。
如果在移位序列期间移出的内容少于执行道的寄存器堆的全部内容,则注意,每个执行道的未移出的寄存器的内容保持在位(不移位)。这样,任何未替换成移入内容的未移位内容在整个移位周期内仍在本地存留于执行道。在每个执行道中观察到的存储器单元(“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支持移位操作指令(右、左、上、下)以移位二维移位寄存器结构内的数据。如上所述,程序控制指令主要由模板处理器的标量处理器执行。
d.实施方式的实施例
上文所讨论的硬件设计实施例可以在半导体芯片内和/或作为用于最终靶向半导体制造工艺的电路设计的描述来实现。在后一情况下,这样的电路描述可以采取高级/行为级电路说明(例如,VHDL描述)或者低级电路描述(例如,寄存器传送级(RTL)描述、晶体管级描述或掩模描述)或者其各种组合。例如,可以包括具有在章节1.0中在上面描述的应用软件开发环境的一个或多个实例作为在开发环境中编写的软件的目标硬件的这样的电路描述。电路描述通常被体现于计算机可读存储介质(诸如CD-ROM或其他类型的存储技术)上。
3.0总结
从前述可认识到,在上文第1.0节中所述的虚拟环境可以在计算机系统上来实例化。同样地,如上文第2.0节所述的图像处理器可以被体现于计算机系统上的硬件中(例如,作为处理来自手持设备的相机的数据的手持设备的片上系统(SOC)的一部分)。
有必要指出,上述各种图像处理器架构特征不一定限于传统意义上的图像处理并由此可以应用于可能(或可能不)促使图像处理器被重新表征的其他应用。例如,如果上述各种图像处理器架构特征中的任何一个要被使用于创建和/或生成和/或呈现动画,而非处理实际的相机图像,则图像处理器可以被表征为图形处理单元。此外,上述图像处理器架构特征可以被应用于其他技术应用,诸如视频处理、视觉处理、图像识别和/或机器学习。通过这种方式应用,图像处理器可以(例如,作为协处理器)与更通用的处理器(例如,作为计算系统的CPU或其一部分)集成,或者可以是计算系统内的独立处理器。
上文所讨论的硬件设计实施例可以在半导体芯片内和/或作为用于最终靶向半导体制造工艺的电路设计的描述来实现。在后一情况下,这样的电路描述可以采取高级/行为级电路说明(例如,VHDL描述)或者低级电路描述(例如,寄存器传送级(RTL)描述、晶体管级描述或掩模描述)或者其各种组合。电路描述通常被体现于计算机可读存储介质(诸如CD-ROM或其他类型的存储技术)上。
从前述部分而言,有必要认识到,如上所述的图像处理器可以被体现于计算机系统上的硬件中(例如,作为处理来自手持设备的相机的数据的手持设备的片上系统(SOC)的一部分)。在图像处理器被实现为硬件电路的情况下,注意,由图像处理器处理的图像数据可以直接从相机接收。在此,图像处理器可以是分立相机的一部分,或者是具有集成相机的计算系统的一部分。在后一情况下,图像数据可以直接从相机或者从计算系统的系统存储器接收(例如,相机将其图像数据发送到系统存储器而非图像处理器)。还应注意,前述部分中所述的许多特征可以适用于图形处理器单元(其呈现动画)。
图13提供计算系统的示例性绘图。下述计算系统的许多组件可应用于具有集成相机和相关联的图像处理器的计算系统(例如,手持设备,诸如智能电话或平板型计算机)。本领域普通技术人员能够容易理解两者之间的关系。
如图13所示,基本计算系统可以包括中央处理单元1301(其可以例如包括多个通用处理核1315_1至1315_N以及布置在多核处理器上的主存储器控制器1317或者应用处理器)、系统存储器1302、显示器1303(例如,触摸屏、平板)、本地有线点对点链路(例如,USB)接口1304、各种网络I/O功能1305(诸如以太网接口和/或蜂窝调制解调器子系统)、无线局域网(例如,WiFi)接口1306、无线点对点链路(例如,蓝牙)接口1307和全球定位系统接口1308、各种传感器1309_1至1309_N、一个或多个相机1310、电池1311、功率管理控制单元1313、扬声器和麦克风1313以及音频编码器/解码器1314。
应用处理器或多核处理器1350可以包括其CPU 1301内的一个或多个通用处理核1315、一个或多个图形处理单元1316、存储器管理功能1317(例如,存储器控制器)、I/O控制功能1318以及图像处理单元1319。通用处理核1315通常执行计算系统的操作系统和应用软件。图形处理单元1316通常执行图形敏感功能,例如,用以生成在显示器1303上呈现的图形信息。存储器控制功能1317与系统存储器1302接口,以向/从系统存储器1302写入/读取数据。功率管理控制单元1313通常控制系统1300的功耗。
图像处理单元1319可以根据前述部分中的详细描述的图像处理单元实施例中的任何一个来实现。替选地或组合地,IPU 1319可以被耦合至GPU 1316和CPU 1301中的一个或两者,作为其协处理器。此外,在各种实施例中,GPU 1316可以通过上文详细描述的图像处理器特征中的任何一个来实现。
触摸屏显示器1303、通信接口1304至1307、GPS接口1308、传感器1309、相机1310和扬声器/麦克风编解码器1313、1314中的每个能够被视为各种形式的I/O(输入和/或输出),这是相对于整个计算系统而言,在适当情况下,其还包括集成的外围设备(例如,一个或多个照相机1310)。根据实施方式,这些I/O组件中的各个都可以被集成在应用处理器/多核处理器1350上,或者可以位于处理器/多核处理器1350的管芯之外或者其封装之外。
在一个实施例中,一个或多个相机1310包括能够在相机与其视野内的物体之间测量深度的深度相机。在应用处理器或其他处理器的通用CPU核(或具有用于执行程序代码的指令执行流水线的其他功能块)上执行的应用软件、操作系统软件、设备驱动器软件和/或固件可以执行上述功能中的任何一个。
本发明的实施例可以包括如上所述的各种过程。这些过程可以被体现于机器可执行指令中。这些指令能够被使用于促使通用或专用处理器执行某些过程。替选地,这些过程可以通过包含用于执行过程的硬连线逻辑的专用硬件组件或者通过编程的计算机组件和定制的硬件组件的任何组合来执行。
本发明的元素还可以作为用于存储机器可执行指令的机器可读介质来提供。机器可读介质可以包括但不限于软盘、光盘、CD-ROM和磁光盘、闪速存储器、ROM、RAM、EPROM、EEPROM、磁卡或光卡、传播介质或其他类型的适用于存储电子指令的介质/机器可读介质。例如,本发明可以作为计算机程序来下载,该计算机程序可以经由通信链路(例如,调制解调器或网络连接)通过体现于载波或其他传播介质中的数据信号而从远程计算机(例如,服务器)传送到请求计算机(例如,客户端)。
在前文的说明书中,本发明已经参照其具体示例性实施例来予以描述。然而,显然可以对其作出修改和更改,而不背离如所附权利要求所述的本发明的更宽精神和范围。因此,说明书和附图被认为说明性而非限制性意义。
Claims (23)
1.一种具有程序代码的机器可读存储介质,当所述程序代码被计算系统执行时引起下述方法被执行:
在应用软件开发环境内实例化虚拟处理器,该虚拟处理器具有指令集架构和存储器模型,所述指令集架构和存储器模型预设了预留的存储器的第一区域和第二区域,该第一预留区域保存输入图像阵列的数据,该第二预留区域保存输出图像阵列的数据;和
通过下述步骤模拟所述指令集架构的存储器加载指令的执行:自动地把所述第一预留区域作为目标,以及利用所述存储器加载指令的指令格式中表达的垂直坐标系内相对于所述虚拟处理器的位置的第一坐标和第二坐标识别期望的输入数据。
2.根据权利要求1所述的机器可读介质,其中所述方法还包括:
通过下述步骤模拟所述指令集架构的存储器存储指令的执行:自动把第二预留区域作为目标,以及利用所述存储器存储指令的指令格式中表达的垂直坐标系内的第一坐标和第二坐标识别期望的输出数据位置。
3.根据权利要求1所述的机器可读介质,还包括:允许用来确定所述输出阵列的其它位置的输出值的其它实例化虚拟处理器存取所述第一预留区域和所述第二预留区域。
4.根据权利要求1所述的机器可读介质,其中所述指令集架构和存储器模型还预设了第三预留区域以保存查找表数据,并且其中所述方法还包括:
通过自动地把所述第三预留区域作为目标来模拟所述指令集架构的查找表读取指令的执行。
5.根据权利要求4所述的机器可读介质,其中所述方法还包括:允许用来确定所述输出阵列的其它位置的输出值的其它实例化虚拟处理器通过它们自身的查找表读取指令的模拟执行而存取所述第三预留区域。
6.根据权利要求1所述的机器可读介质,其中所述方法还包括:
模拟所述指令集架构的下述指令的执行,该指令执行读入常数表,并且把读取值广播给多个实例化虚拟处理器,该多个实例化虚拟处理器确定所述输出阵列的不同位置的相应输出值,所述常数表被保存在所述存储器模型的第三预留区域中。
7.根据权利要求1所述的机器可读介质,其中所述方法还包括:
模拟所述指令集架构的下述指令的执行,该指令执行对所述输出图像阵列的数据的更新,并且把结果写入所述存储器模型的第三预留区域。
8.根据权利要求1所述的机器可读介质,其中所述存储器加载指令的指令格式对所述第一坐标和第二坐标应用缩放项,以实现任何上采样和下采样。
9.根据权利要求1所述的机器可读介质,其中所述指令集架构和存储器模型还预设了第三预留区域以保存原子更新表数据,并且其中所述方法进一步包括:
通过自动地把所述第三预留区域作为目标来模拟所述指令集架构的原子更新指令的执行。
10.一种方法,包括:
在应用软件开发环境内实例化虚拟处理器,该虚拟处理器具有指令集架构和存储器模型,所述指令集架构和存储器模型预设了预留的存储器的第一区域和第二区域,该第一预留区域保存输入图像阵列的数据,该第二预留区域保存输出图像阵列的数据;和
通过下述步骤模拟所述指令集架构的存储器加载指令的执行:自动地把所述第一预留区域作为目标,以及利用用所述存储器加载指令的指令格式中表达的垂直坐标系内相对于所述虚拟处理器的位置的第一坐标和第二坐标识别期望的输入数据。
11.根据权利要求10所述的方法,还包括:
通过下述步骤模拟所述指令集架构的存储器存储指令的执行:自动地把第二预留区域作为目标,以及利用所述存储器存储指令的指令格式中表达的垂直坐标系内的第一坐标和第二坐标识别期望的输出数据位置。
12.根据权利要求11所述的方法,还包括:允许用来确定所述输出阵列的其它位置的输出值的其它实例化虚拟处理器存取所述第一预留区域和所述第二预留区域。
13.根据权利要求10所述的方法,其中所述指令集架构和存储器模型还预设了第三预留区域以保存查找表数据,并且其中所述方法还包括:
通过自动地把所述第三预留区域作为目标来模拟所述指令集架构的查找表读取指令的执行。
14.根据权利要求13所述的方法,其中所述方法还包括:允许用来确定所述输出阵列的其它位置的输出值的其它实例化虚拟处理器通过它们自身的查找表读取指令的模拟执行而存取所述第三预留区域。
15.根据权利要求10所述的方法,其中所述方法还包括:
模拟所述指令集架构的下述指令的执行,该指令执行读入常数表,并且把读取值广播给多个实例化虚拟处理器,该多个实例化虚拟处理器确定所述输出阵列的不同位置的相应输出值,所述常数表被保存在所述存储器模型的第三预留区域中。
16.根据权利要求10所述的方法,其中所述方法还包括:
模拟所述指令集架构的下述指令的执行,该指令执行对所述输出图像阵列的数据的更新,并且把结果写入所述存储器模型的第三预留区域。
17.根据权利要求10所述的方法,其中所述存储器加载指令的指令格式对所述第一坐标和第二坐标应用缩放项,以实现任何上采样和下采样。
18.一种包括多个处理内核和至少一个存储装置的计算系统,所述至少一个存储装置包含程序代码,当所述程序代码被所述处理内核处理时引起执行一种方法,所述方法包括:
提供支持下列行为的应用程序软件开发环境:
在应用软件开发环境内实例化虚拟处理器,该虚拟处理器具有指令集架构和存储器模型,所述指令集架构和存储器模型预设了预留的存储器的第一区域和第二区域,该第一预留区域保存输入图像阵列的数据,该第二预留区域保存输出图像阵列的数据;和
通过下述步骤模拟所述指令集架构的存储器加载指令的执行:自动地把所述第一预留区域作为目标,以及利用用所述存储器加载指令的指令格式中表达的垂直坐标系内相对于所述虚拟处理器的位置的第一坐标和第二坐标识别期望的输入数据。
19.根据权利要求18所述的计算系统,其中所述方法还包括:
通过下述步骤模拟所述指令集架构的存储器存储指令的执行:自动地把第二预留区域作为目标,以及利用所述存储器存储指令的指令格式中表达的垂直坐标系内的第一坐标和第二坐标识别期望的输出数据位置。
20.根据权利要求18所述的计算系统,其中所述指令集架构和存储器模型还预设了第三预留区域以保存查找表数据,并且其中所述方法还包括:
通过自动地把所述第三预留区域作为目标来模拟所述指令集架构的查找表读取指令的执行。
21.根据权利要求18所述的计算系统,其中所述方法还包括:
模拟所述指令集架构的下述指令的执行,该指令执行读入常数表,并且把读取值广播给多个实例化虚拟处理器,该多个实例化虚拟处理器确定所述输出阵列的不同位置的相应输出值,所述常数表被保存在所述存储器模型的第三预留区域中。
22.一种具有程序代码的机器可读存储介质,当所述程序代码被计算系统执行时引起执行下述方法:
在应用软件开发环境内实例化虚拟处理器,该虚拟处理器具有指令集架构和存储器模型,所述指令集架构和存储器模型预设了预留的存储器的第一区域和第二区域,该第一预留区域保存输入图像阵列的数据,该第二预留区域保存输出图像阵列的数据;和
通过下述步骤模拟所述指令集架构的存储器存储指令的执行:自动地把所述第二预留区域作为目标,以及利用所述存储器存储指令的指令格式中表达的垂直坐标系内相对于所述虚拟处理器的位置的第一坐标和第二坐标识别期望的输出数据位置。
23.一种具有程序代码的机器可读存储介质,当所述程序代码被计算系统执行时,引起执行下述方法:
在应用软件开发环境内实例化虚拟处理器,该虚拟处理器具有指令集架构和存储器模型,所述指令集架构和存储器模型预设了预留的存储器的第一区域和第二区域,该第一预留区域保存输入图像阵列的数据,该第二预留区域保存输出图像阵列的数据,并且预设了指令,所述指令利用垂直坐标系内相对于所述虚拟处理器的位置的第一坐标值和第二坐标值限定所述第一区域和第二区域的存取位置;和
提供图像处理器的目标硬件架构的说明,以执行来自所述软件开发环境的程序代码,所述目标硬件架构包括处理器阵列和二维移位阵列结构。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/694,890 US10095479B2 (en) | 2015-04-23 | 2015-04-23 | Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure |
US14/694,890 | 2015-04-23 | ||
PCT/US2016/026029 WO2016171893A1 (en) | 2015-04-23 | 2016-04-05 | Virtual image processor instruction set architecture (isa) and memory model and exemplary target hardware having a two-dimensional shift array structure |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107533750A true CN107533750A (zh) | 2018-01-02 |
CN107533750B CN107533750B (zh) | 2021-06-01 |
Family
ID=55953367
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680019972.2A Active CN107533750B (zh) | 2015-04-23 | 2016-04-05 | 虚拟图像处理器及在其上处理图像数据的方法和系统 |
Country Status (5)
Country | Link |
---|---|
US (2) | US10095479B2 (zh) |
EP (1) | EP3286721B1 (zh) |
CN (1) | CN107533750B (zh) |
GB (1) | GB2553934B (zh) |
WO (1) | WO2016171893A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110058882A (zh) * | 2019-03-14 | 2019-07-26 | 成都恒创新星科技有限公司 | 一种用于cnn加速的opu指令集定义方法 |
CN111930768A (zh) * | 2020-09-10 | 2020-11-13 | 腾讯科技(深圳)有限公司 | 增量数据获取方法、发送方法、装置及其计算机存储介质 |
CN112184565A (zh) * | 2020-08-27 | 2021-01-05 | 瑞芯微电子股份有限公司 | 一种多窗口串行的图像锐化方法 |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10313641B2 (en) | 2015-12-04 | 2019-06-04 | Google Llc | Shift register with reduced wiring complexity |
US9830150B2 (en) | 2015-12-04 | 2017-11-28 | Google Llc | Multi-functional execution lane for image processor |
US10204396B2 (en) | 2016-02-26 | 2019-02-12 | Google Llc | Compiler managed memory for image processor |
US10387988B2 (en) | 2016-02-26 | 2019-08-20 | Google Llc | Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform |
US10380969B2 (en) | 2016-02-28 | 2019-08-13 | Google Llc | Macro I/O unit for image processor |
US10546411B2 (en) * | 2016-03-31 | 2020-01-28 | Intel Corporation | Directed acyclic graph path enumeration with application in multilevel instancing |
US20180005059A1 (en) | 2016-07-01 | 2018-01-04 | Google Inc. | Statistics Operations On Two Dimensional Image Processor |
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 |
US10546211B2 (en) | 2016-07-01 | 2020-01-28 | Google Llc | Convolutional neural network on programmable two dimensional image processor |
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 |
US10430919B2 (en) | 2017-05-12 | 2019-10-01 | Google Llc | Determination of per line buffer unit memory allocation |
US10489199B2 (en) * | 2017-05-12 | 2019-11-26 | Google Llc | Program code transformations to improve image processor runtime efficiency |
US10726605B2 (en) * | 2017-09-15 | 2020-07-28 | Intel Corporation | Method and apparatus for efficient processing of derived uniform values in a graphics processor |
JP7035751B2 (ja) * | 2018-04-12 | 2022-03-15 | 富士通株式会社 | コード変換装置、コード変換方法、及びコード変換プログラム |
US10831479B2 (en) * | 2019-02-20 | 2020-11-10 | International Business Machines Corporation | Instruction to move data in a right-to-left direction |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1925544A (zh) * | 2005-08-31 | 2007-03-07 | 松下电器产业株式会社 | 图像数据处理装置 |
CN101231585A (zh) * | 2007-01-26 | 2008-07-30 | 辉达公司 | 用于并行线程计算的虚拟结构和指令集 |
CN101796821A (zh) * | 2007-09-05 | 2010-08-04 | 国立大学法人东北大学 | 固体摄像元件和该固体摄像元件的驱动方法 |
US20110087867A1 (en) * | 2005-06-23 | 2011-04-14 | Jacobson Quinn A | Primitives to enhance thread-level speculation |
TW201118568A (en) * | 2009-08-28 | 2011-06-01 | Qualcomm Inc | Memory controller page management devices, systems, and methods |
CN103339604A (zh) * | 2011-01-31 | 2013-10-02 | 松下电器产业株式会社 | 程序生成装置、程序生成方法、处理器装置以及多处理器系统 |
Family Cites Families (76)
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 |
GB2150726B (en) | 1983-11-30 | 1988-01-20 | Standard Telephones Cables Ltd | Office terminals |
US4835712A (en) | 1986-04-14 | 1989-05-30 | Pixar | Methods and apparatus for imaging volume data with shading |
US4720871A (en) * | 1986-06-13 | 1988-01-19 | Hughes Aircraft Company | Digital image convolution processor method and apparatus |
JP2554255B2 (ja) * | 1987-03-23 | 1996-11-13 | 旭光学工業株式会社 | フイルタリング装置 |
DE3851005T2 (de) | 1987-06-01 | 1995-04-20 | Applied Intelligent Syst Inc | Paralleles Nachbarverarbeitungssystem und -Verfahren. |
US4935894A (en) | 1987-08-31 | 1990-06-19 | Motorola, Inc. | Multi-processor, multi-bus system with bus interface comprising FIFO register stocks for receiving and transmitting data and control information |
US5253308A (en) | 1989-06-21 | 1993-10-12 | Amber Engineering, Inc. | Massively parallel digital image data processor using pixel-mapped input/output and relative indexed addressing |
WO1994009595A1 (en) | 1991-09-20 | 1994-04-28 | Shaw Venson M | Method and apparatus including system architecture for multimedia communications |
JP3482660B2 (ja) * | 1993-09-08 | 2003-12-22 | ソニー株式会社 | 画像データ処理装置および画像データ処理方法 |
US5612693A (en) | 1994-12-14 | 1997-03-18 | International Business Machines Corporation | Sliding window data compression using a toroidal bit shift register |
US5802219A (en) * | 1995-11-27 | 1998-09-01 | Sun Microsystems, Inc. | Methods and apparatus for table lookup transformation of digital images |
EP0875031B1 (de) | 1996-01-15 | 2001-06-20 | Infineon Technologies AG | Prozessor zur bildverarbeitung |
FR2748974B1 (fr) | 1996-05-21 | 1998-08-14 | Faure Bertrand Equipements Sa | Articulation reglable pour dossier de siege |
US6031573A (en) | 1996-10-31 | 2000-02-29 | Sensormatic Electronics Corporation | Intelligent video information management system performing multiple functions in parallel |
US5892962A (en) | 1996-11-12 | 1999-04-06 | Lucent Technologies Inc. | FPGA-based processor |
US6366289B1 (en) | 1998-07-17 | 2002-04-02 | Microsoft Corporation | Method and system for managing a display image in compressed and uncompressed blocks |
US6587158B1 (en) | 1998-07-23 | 2003-07-01 | Dvdo, Inc. | Method and apparatus for reducing on-chip memory in vertical video processing |
US7010177B1 (en) | 1998-08-27 | 2006-03-07 | Intel Corporation | Portability of digital images |
WO2000055810A1 (fr) | 1999-03-16 | 2000-09-21 | Hamamatsu Photonics K. K. | Capteur de vision ultra-rapide |
JP3922859B2 (ja) | 1999-12-28 | 2007-05-30 | 株式会社リコー | 画像処理装置、画像処理方法およびその方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体 |
US6745319B1 (en) | 2000-02-18 | 2004-06-01 | Texas Instruments Incorporated | Microprocessor with instructions for shuffling and dealing data |
US6728862B1 (en) | 2000-05-22 | 2004-04-27 | Gazelle Technology Corporation | Processor array and parallel data processing methods |
US6728722B1 (en) | 2000-08-28 | 2004-04-27 | Sun Microsystems, Inc. | General data structure for describing logical data spaces |
US6986025B2 (en) | 2001-06-11 | 2006-01-10 | Broadcom Corporation | Conditional execution per lane |
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 |
WO2004021176A2 (de) | 2002-08-07 | 2004-03-11 | Pact Xpp Technologies Ag | Verfahren und vorrichtung zur datenverarbeitung |
GB2398446B (en) * | 2003-02-12 | 2006-06-07 | Snell & Wilcox Ltd | Image processing |
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 |
JP4219887B2 (ja) | 2004-12-28 | 2009-02-04 | 富士通マイクロエレクトロニクス株式会社 | 画像処理装置及び画像処理方法 |
ATE504043T1 (de) | 2005-04-28 | 2011-04-15 | Univ Edinburgh | Umkonfigurierbares anweisungs-zellen-array |
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 |
US20070165042A1 (en) * | 2005-12-26 | 2007-07-19 | Seitaro Yagi | Rendering apparatus which parallel-processes a plurality of pixels, and data transfer method |
US7802073B1 (en) | 2006-03-29 | 2010-09-21 | Oracle America, Inc. | Virtual core management |
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 |
US20080244222A1 (en) | 2007-03-30 | 2008-10-02 | Intel Corporation | Many-core processing using virtual processors |
US8068114B2 (en) | 2007-04-30 | 2011-11-29 | Advanced Micro Devices, Inc. | Mechanism for granting controlled access to a shared resource |
JP4389976B2 (ja) * | 2007-06-29 | 2009-12-24 | ブラザー工業株式会社 | 画像処理装置および画像処理プログラム |
JP2009021459A (ja) * | 2007-07-13 | 2009-01-29 | Fuji Xerox Co Ltd | 面発光型半導体レーザの駆動方法および光伝送モジュール |
JP4917561B2 (ja) * | 2008-03-18 | 2012-04-18 | 株式会社リコー | 画像処理装置 |
CN102047241B (zh) | 2008-05-30 | 2014-03-12 | 先进微装置公司 | 本地与全局数据共享 |
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 |
US8332794B2 (en) | 2009-01-22 | 2012-12-11 | Taiwan Semiconductor Manufacturing Company, Ltd. | Circuits and methods for programmable transistor array |
KR101572879B1 (ko) * | 2009-04-29 | 2015-12-01 | 삼성전자주식회사 | 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법 |
US8572016B2 (en) * | 2009-07-31 | 2013-10-29 | International Business Machines Corporation | Match engine for detection of multi-pattern rules |
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 |
US9552206B2 (en) * | 2010-11-18 | 2017-01-24 | Texas Instruments Incorporated | Integrated circuit with control node circuitry and processing circuitry |
US8797323B2 (en) | 2011-01-18 | 2014-08-05 | Intel Corporation | Shadowing dynamic volumetric media |
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 |
US9329877B2 (en) * | 2012-03-18 | 2016-05-03 | Microsoft Technology Licensing, Llc | Static verification of parallel program code |
TWI520598B (zh) | 2012-05-23 | 2016-02-01 | 晨星半導體股份有限公司 | 影像處理裝置與影像處理方法 |
US20140019486A1 (en) | 2012-07-13 | 2014-01-16 | Amitava Majumdar | Logic Content Processing for Hardware Acceleration of Multi-Pattern Search |
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 |
US9058673B2 (en) * | 2013-03-15 | 2015-06-16 | Oracle International Corporation | Image mosaicking using a virtual grid |
US10255547B2 (en) * | 2014-12-04 | 2019-04-09 | Nvidia Corporation | Indirectly accessing sample data to perform multi-convolution operations in a parallel processing system |
US9818166B2 (en) | 2015-01-16 | 2017-11-14 | Intel Corporation | Graph-based application programming interface architectures with producer/consumer nodes for enhanced image processing parallelism |
US9749548B2 (en) | 2015-01-22 | 2017-08-29 | Google Inc. | Virtual linebuffers for image signal processors |
-
2015
- 2015-04-23 US US14/694,890 patent/US10095479B2/en active Active
-
2016
- 2016-04-05 WO PCT/US2016/026029 patent/WO2016171893A1/en active Application Filing
- 2016-04-05 GB GB1715610.0A patent/GB2553934B/en active Active
- 2016-04-05 EP EP16721534.2A patent/EP3286721B1/en active Active
- 2016-04-05 CN CN201680019972.2A patent/CN107533750B/zh active Active
-
2017
- 2017-05-10 US US15/591,984 patent/US10216487B2/en active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110087867A1 (en) * | 2005-06-23 | 2011-04-14 | Jacobson Quinn A | Primitives to enhance thread-level speculation |
CN1925544A (zh) * | 2005-08-31 | 2007-03-07 | 松下电器产业株式会社 | 图像数据处理装置 |
CN101231585A (zh) * | 2007-01-26 | 2008-07-30 | 辉达公司 | 用于并行线程计算的虚拟结构和指令集 |
CN101796821A (zh) * | 2007-09-05 | 2010-08-04 | 国立大学法人东北大学 | 固体摄像元件和该固体摄像元件的驱动方法 |
TW201118568A (en) * | 2009-08-28 | 2011-06-01 | Qualcomm Inc | Memory controller page management devices, systems, and methods |
CN103339604A (zh) * | 2011-01-31 | 2013-10-02 | 松下电器产业株式会社 | 程序生成装置、程序生成方法、处理器装置以及多处理器系统 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110058882A (zh) * | 2019-03-14 | 2019-07-26 | 成都恒创新星科技有限公司 | 一种用于cnn加速的opu指令集定义方法 |
CN110058882B (zh) * | 2019-03-14 | 2023-01-06 | 深圳市比昂芯科技有限公司 | 一种用于cnn加速的opu指令集定义方法 |
CN112184565A (zh) * | 2020-08-27 | 2021-01-05 | 瑞芯微电子股份有限公司 | 一种多窗口串行的图像锐化方法 |
CN112184565B (zh) * | 2020-08-27 | 2023-09-29 | 瑞芯微电子股份有限公司 | 一种多窗口串行的图像锐化方法 |
CN111930768A (zh) * | 2020-09-10 | 2020-11-13 | 腾讯科技(深圳)有限公司 | 增量数据获取方法、发送方法、装置及其计算机存储介质 |
CN111930768B (zh) * | 2020-09-10 | 2021-01-01 | 腾讯科技(深圳)有限公司 | 增量数据获取方法、发送方法、装置及其计算机存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US20160313980A1 (en) | 2016-10-27 |
WO2016171893A1 (en) | 2016-10-27 |
GB2553934A (en) | 2018-03-21 |
GB2553934B (en) | 2021-06-09 |
US20170242943A1 (en) | 2017-08-24 |
CN107533750B (zh) | 2021-06-01 |
US10095479B2 (en) | 2018-10-09 |
EP3286721A1 (en) | 2018-02-28 |
GB201715610D0 (en) | 2017-11-08 |
EP3286721B1 (en) | 2020-11-25 |
US10216487B2 (en) | 2019-02-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107533750A (zh) | 虚拟图像处理器指令集架构(isa)和存储器模型与具有二维移位阵列结构的示例性目标硬件 | |
US11182138B2 (en) | Compiler for translating between a virtual image processor instruction set architecture (ISA) and target hardware having a two-dimensional shift array structure | |
US10531030B2 (en) | Block operations for an image processor having a two-dimensional execution lane array and a two-dimensional shift register | |
KR102278658B1 (ko) | 높은 성능, 전력 효율, 프로그램 가능 이미지 처리 프로세싱을 위한 아키텍처 | |
KR102232723B1 (ko) | 2차원 실행 레인 어레이 및 2차원 시프트 레지스터를 갖는 이미지 프로세서상의 블록 연산을 위한 코어 프로세서 | |
CN107438861A (zh) | 用于图像生成器的数据片生成器 | |
CN107533751A (zh) | 用于图像处理器的线缓冲器单元 | |
TWI752343B (zh) | 用於執行絕對差計算之加總的執行單元電路、影像處理器以及方法 | |
CN110300944A (zh) | 具有可配置数目的活动核心和支持内部网络的图像处理器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
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 |