CN110149802B - 用于在虚拟图像处理器指令集架构(isa)与具有二维移位阵列结构的目标硬件之间进行转译的编译器 - Google Patents

用于在虚拟图像处理器指令集架构(isa)与具有二维移位阵列结构的目标硬件之间进行转译的编译器 Download PDF

Info

Publication number
CN110149802B
CN110149802B CN201680020203.4A CN201680020203A CN110149802B CN 110149802 B CN110149802 B CN 110149802B CN 201680020203 A CN201680020203 A CN 201680020203A CN 110149802 B CN110149802 B CN 110149802B
Authority
CN
China
Prior art keywords
instructions
shift
instruction
virtual
data
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
CN201680020203.4A
Other languages
English (en)
Other versions
CN110149802A (zh
Inventor
阿尔伯特·迈克斯纳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of CN110149802A publication Critical patent/CN110149802A/zh
Application granted granted Critical
Publication of CN110149802B publication Critical patent/CN110149802B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • 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
    • 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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Image Processing (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明描述一种方法,该方法包括将包括具有以正交坐标系的第一坐标和第二坐标识别要从存储器存取的像素的指令格式的高级指令的高级程序代码转译成针对具有执行通道阵列和能够沿两个不同轴使数据移位的移位寄存器阵列结构的硬件架构的低级指令。所述转译包括将具有所述指令格式的所述高级指令替换成在移位寄存器阵列结构内使数据移位的低级移位指令。

Description

用于在虚拟图像处理器指令集架构(ISA)与具有二维移位阵 列结构的目标硬件之间进行转译的编译器
技术领域
本发明的领域通常涉及图像处理,更具体地,涉及用于在虚拟图像处理指令集架构(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示出用于集成的执行通道阵列和二维移位阵列的单元cell的实施例;
图13涉及由表格生成器执行的第一操作;
图14涉及由表格生成器执行的第二操作;
图15涉及由表格生成器执行的第三操作;
图16涉及由表格生成器执行的第四操作;
图17涉及由表格生成器执行的第五操作;
图18涉及由表格生成器执行的第六操作;
图19示出表格生成器的实施例;
图20涉及由编译器执行的第一操作;
图21涉及由编译器执行的第二操作;
图22涉及由编译器执行的第三操作;
图23a、图23b、图23c和图23d涉及由编译器执行的第四操作;
图24示出计算系统的实施例。
具体实施方式
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)的形式,并且开发环境可以被配置成向开发者实际呈现照此正开发的程序代码的表现。内核可以由开发者单独开发和/或可以由提供任何基础技术的实体(诸如实际信号处理器硬件和/或其设计)和/或由第三方(例如为开发环境编写的内核软件的供应商)提供。这样,预期标称开发环境将包括内核“库”,开发者通过各种方式自由地“临时连接”该内核库,以完成其大型开发工作的总体流程。预期成为这种库的一部分的一些基本内核可以包括提供以下基本图像处理任务中的一个或多个的内核:卷积、去噪、色彩空间转换、边缘和角点检测、锐化、白平衡、伽马校正、色调映射、矩阵相乘、图像配准、金字塔构建、小波变换、分块离散余弦以及傅里叶变换。
图2b示出开发者可以设想的内核203的结构的示例性描绘。如图 2b所示,内核203能够被视为数个程序代码的并行线程(“线程”) 204,它们各自在相应的底层处理器205上操作,其中每个处理器205 针对输出阵列206中的特定位置(诸如内核正生成的输出图像中的特定像素位置)。简明起见,在图2b中仅示出三个处理器和对应的线程。在各种实施例中,每个描绘的输出阵列位置会具有它自己的专用处理器和对应的线程。也就是说,能够为输出阵列中的每个像素分配单独的处理器和线程。在替选方法中,相同的线程可以生成超过输出像素的数据,并且/或者两个不同线程(例如,在某些限制情况下)可以协同生成用于相同输出像素的数据。
如下文详述,在各种实施例中,在实际的底层硬件中,执行通道的阵列和对应的线程一致工作(例如,以单指令多数据(SIMD)类方式),以生成用于当前正处理的帧的“线群”的一部分的输出图像数据。线群是图像帧的连续且大小相当的部分。在各种实施例中,开发者可能意识到,硬件对线群进行操作,或者开发环境可以呈现抽象,其中存在单独的处理器和线程,例如用于输出帧中的每个像素(例如,输出帧中的每一像素由它自己的专用处理器和线程生成)。无论如何,在各种实施例中,开发者理解,内核包括用于每个输出像素的单独线程(是否使输出阵列可视化是整个输出帧或者其中一部分)。
如下详述,在一个实施例中,在虚拟环境中向开发者呈现的处理器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像素值的模版将会对应于输入值 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的内容存入线程专用的输出阵列位置的STORE指令。再而言之,尽管在图3中描绘出仅两个输出阵列位置以及仅两个线程和对应的处理器,但可以设想,能够为输出阵列中的每个位置分配执行这些功能的虚拟处理器和对应的线程。在各种实施例中,按照处理环境的SIMD类性质,多个线程彼此孤立地执行。也就是说,虚拟处理器之间没有线程到线程的通信(一个SIMD信道受阻于越界进入另一个SIMD信道)。
b.虚拟处理器的存储器模型
在各种实施例中,虚拟处理器的相关特征是它们的存储器模型。如本领域中所理解,处理器从存储器读取数据,对该数据进行操作并且将新的数据写回到存储器中。存储器模型是处理器具有将数据组织到存储器中的方式的透视图或者视图。图4a至图4c涉及用于开发环境的虚拟处理器的存储器模型的实施例。出于示例的目的,使用仅涉及三个虚拟处理器和对应线程401的简单化环境。如下详述,虚拟处理器的存储器模型注意保留SIMD语义,而同时为每个虚拟处理器提供标量运算和专用的中间值存储空间。
如图4a所示,在一个实施例中,每个虚拟处理器运行之外的存储区域基于存储的信息的类型而被组织成六个不同的分区。具体地,存在: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。图像处理任务经常使用查找表,例如,用以获得不同阵列位置的滤波器或者变换系数,实现复变函数(例如,伽马曲线、正弦、余弦),其中查找表为输入索引值等提供函数输出。在此,预期SIMD图像处理序列在相同的时钟周期期间经常会到相同的查找表中执行查找。这样,如同输入和输出阵列存储器区域403、404,查找表区域405可供任何虚拟处理器全局访问。图4a同样示出从保存在查找表存储区域405中的同一查找表411有效地查找信息的三个虚拟处理器中的每个。
在一个实施例中,由于索引值通常被使用于定义所需的查找表条目,因此使用正常的线性访问方案来访问查找表信息区域。在一个实施例中,存储器的查找区域是只读的(即,处理器无法更改查找表中的信息并且仅获许从其中读取信息)。简明起见,图4a仅显示一个查找表驻存在查找表区域405内,但虚拟环境允许多个不同的查找表在模拟运行期间驻存。下面进一步提供到查找表中执行查找的指令的虚拟ISA指令格式的实施例。
图4b示出向原子统计区域406写入413的三个虚拟处理器中的每个。对输出信息进行“更新”或者作出适度更改对于图像处理而言并不罕见。然后,可以再将更新的信息用于利用更新的信息的其他下游过程。这样的更新或者适度更改的示例包括输出数据与固定偏移的简单相加、输出数据与被乘数的简单相乘或者使输出数据与某个阈值的最小值或者最大值比较。
在这些序列中,如图4b所示,可以对刚刚由各个线程计算出的输出数据进行操作,并且将结果写入原子统计区域406。根据实现语义,通过原子动作操作的输出数据可以由处理器在内部保存或者从输出阵列中调用,图4b示出后者412。在各种实施例中,可以对输出数据执行的原子动作包括加法、乘法、求最小值和求最大值。在一个实施例中,鉴于对输出数据的更新会在逻辑上被组织成与输出数据本身相同的二维阵列,使用位置相对寻址方案(正如输入和输出阵列访问)来访问原子统计区域406。下面进一步更详细地描述用于对输出数据执行原子动作并且将结果写入统计区域406的虚拟ISA指令格式的实施例。
图4c示出从常数存储器区域407内的常数查找表415中读取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操作数定义指令针对所命名的线群或者统计表的哪一通道。在此,通常,单个图像将具有多个通道。例如,对于视频流的同一帧,视频图像通常具有红色通道(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内的内核可以由内核的第三方供应商和/或任何基础技术的提供者来提供(例如,包括目标硬件图像处理器的硬件平台的供应商或者目标硬件图像处理器的供应商(例如,作为其设计或者作为实际硬件提供))。
在定制开发的内核的情况下,在许多情况下,开发者仅需要为单线程603编写程序代码。也就是说,开发者仅需通过参考相对于输出像素位置的输入像素值(例如,利用上述位置相对存储器访问指令格式),编写确定单个输出像素值的程序代码。在满足单线程603的操作后,开发环境可以再在相应的虚拟处理器上自动实例化线程代码的多个实例,以在对图像表面区域进行操作的处理器阵列上实现内核。图像表面区域可以是图像帧的一段(诸如线群)。
在各种实施例中,定制的线程程序代码被写入虚拟处理器ISA的目标代码中(或者被编译到虚拟处理器ISA目标代码的高级语言)。在包括访问根据存储器模型组织的存储器的虚拟处理器的模拟运行时环境中,可以对定制内核的程序代码的执行进行模拟。在此,虚拟处理器的软件模型604以及包含模型的存储器的软件模型605(面向对象或以其他方式)被实例化。
然后,虚拟处理器模型604模拟线程代码603的执行。在满足线程、其较大内核以及该内核所属的任何较大函数的性能后,整体被编译成底层硬件的实际目标代码。整个模拟环境601可以被实现为在计算机系统(例如,工作站)606上运行的软件。
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中的一个或多个。特定的线缓存器单元将其图像数据的帧解析成图像数据的更小区域,称作“线群”,然后通过网络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并且将其提供给模板处理器(在此,数据的表格对应于通常由附图标记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操作)以及存储器操作码(其指示用于特定执行通道或者一组执行通道的存储器操作)。
用语“执行通道”是指能够执行指令的一个或多个执行单元的集合(例如,能够执行指令的逻辑电路)。然而,在各种实施例中,执行通道能够包括除执行单元之外的更多处理器类功能。例如,除一个或多个执行单元外,执行通道还可以包括对接收到的指令进行解码的逻辑电路,或者在更多的类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)坐标表达的移位的方向和量级的指令格式。例如,用于向上移位一个位置的目标代码可以在目标代码中表达为SHIFT 0,+1。作为另一示例,向右移位一个位置可以在目标代码中表达为 SHIFT+1,0。在各种实施例中,较大量级的移位也可以在目标代码中指定(例如,SHIFT0,+2)。在此,如果2D移位寄存器硬件仅支持每周期移位一个位置,则指令可以被机器解释成需要多个周期执行,或者 2D移位寄存器硬件可以被设计成支持每周期移位一个以上位置。下面将进一步详细描述后一情况的实施例。
图12示出阵列执行通道和移位寄存器结构的单位cell的另一个更详细的描述(晕圈区域中的寄存器不包括对应的执行通道)。在一个实施例中,通过在执行通道阵列的每个节点处实例化图12中所示的电路,实现与执行通道阵列中的每个位置相关联的执行通道和寄存器空间。如图12所示,单元cell包括执行通道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支持移位操作指令(右、左、上、下)以移位二维移位寄存器结构内的数据。如上所述,程序控制指令主要由模板处理器的标量处理器执行。
c.表格生成器的操作和设计
图13至图18涉及表格生成器的特殊考虑和/或操作。如上所述,表格生成器负责生成用于由对应的模板处理器处理的信息的表格。为在整个处理器的设计中实施广泛的多功能性/可编程性,表格生成器在某些情况下可能需要在准备输入表格时执行附加操作,而不仅仅从接收到的线群中解析适当的部分。
例如,在一些情况下,程序代码将要求同时处理同一图像的多个通道。例如,许多视频图像具有红色(R)通道、蓝色(B)通道和绿色(G)通道。在一个实施例中,表格生成器利用具有相关联的存储器以及在存储器外执行的程序代码的处理器来实现。
如图13所示,响应于从应用软件检测到内核将同时处理来自不同通道的数据的需求(其可能已经从编译器得到提示),由表格生成器执行的程序代码将继续沿不同的“平面”形成单独的表格(即,从每个通道形成不同的表格),并且将它们一起加载到数据计算单元中。也就是说,表格生成器将为阵列的相同部分生成R表格、B表格和G 表格,并且将全部三个表格加载到计算单元中。然后,执行通道阵列内的执行通道视需要对R、G和B表格进行自由操作(例如,通过将R 表格存储在寄存器堆的一层中,将G表格存储在寄存器堆的另一层中并且将B表格存储在寄存器堆的又一层中)。
图14涉及用于多维输入图像的表格生成。在此,虽然许多输入图像是简单阵列的形式,但在一些情况下,阵列中的每个位置会对应于多维数据结构。作为说明性示例,图14描绘出每个阵列位置包含对应于3×3×3立方体的不同区段的27个不同值的图像。在此,每个阵列位置均具有多维数据结构,表格生成器将“展开”输入阵列,以为每个数据结构维度形成单独的表格。因此,如图14所示,表格生成器将生成27个表格(每个立方体区段一个),其中全部表格中的每个表格的每个阵列位置包含标量值(一个立方体区段)。然后,将27个表格加载到模板处理器中。然后,由执行通道阵列内的执行通道执行的程序代码在了解已经展开多维输入阵列的方式的情况下对27个表格进行操作。
图15涉及用于允许执行通道阵列内的执行通道处理不同数据位宽的技术。在此,如在本领域中所理解,通过增加数据值的位宽来达成更大的动态范围(16位值能够表达比8位值具有更大动态范围的值)。在一个实施例中,预期模板处理器对具有诸如8、16或32位像素值的不同位宽的图像进行操作。这样,根据一种方法,执行通道本身是32 位机器,从某种意义上,执行通道内部能够处理32位操作数。
然而,为了减小二维移位寄存器的大小和复杂度,每个执行通道的寄存器堆内的寄存器的各个存储元素被限制成8位。这在8位图像数据的情况下没有问题,因为整个数据表格能够适配于寄存器堆中的一个寄存器。反之,在16位或32位操作数的情况下,表格生成器生成多个表格来适当地表达输入操作数的数据集。
例如,如图15所示,在16位输入操作数的情况下,表格生成器将生成HI半表格和LO半表格。HI半表格包含正确阵列位置处的每个数据项的高8位。LO半表格包含正确阵列位置处的每个数据项的低8 位。然后,执行16位操作是通过将两个表格加载到模板处理器中以及通知执行通道硬件(例如,经由程序代码中的立即值)进行16位操作。在此,作为只是一种可行的操作模式,HI表格和LO表格都被加载到每个执行通道寄存器堆的两个不同寄存器中。
执行通道单元能够通过首先从寄存器堆位置中的一个读取数据并且在其中附加从寄存器堆位置中另一个读取的数据,在内部构造正确的操作数。类似地,在写入方向上,执行通道单元将须执行两次写入。具体地,第一次将低8位写入包含LO表格的寄存器堆的第一寄存器,然后第二次将高8位写入包含HI表格的寄存器堆的第二寄存器。
回顾图12的讨论,在各种实施例中,每个周期允许移位唯一寄存器的内容。这样,为在二维移位寄存器结构周围移动16位数据值,在 8位数据值的情况下,每个移位序列(在数学运算之间)消耗两个周期,而非消耗一个周期。也就是说,在8位数据值的标定情况下,在单个周期中,可以在位置之间移位全部数据。反之,在16位数据值的情况下,每个移位寄存器的移位操作(HI半表格和LO半表格)则须移位两个8位值。在一个实施例中,在32位的情况下,除了创建四个表格而非两个表格来表示整个图像数据之外,应用相同的原理。同样,每个移位序列可能需要消耗多达四个周期。
图16涉及图像处理器从低密度分辨率到高密度分辨率“上采样”输入图像数据的情况。在此,模板处理器负责生成多于输入图像包含的每图像单位面积的输出值。表格生成器通过在表格上重复相同的数据值来处理上采样问题,以便表格数据值密度对应于上采样(高密度) 的输出图像。也就是说,例如,如图16所示,鉴于输出图像的密度,在输出执行通道阵列密度对应于4:1上采样(每个输入像素对应四个输出像素)的情况下,表格生成器为每个输入值制作具有四个相同值的表格。
图17涉及“下采样”的相反情况。在下采样的情况下,表格生成器将生成多于低密度输入图像的表格。具体地,如果输入图像在一个 (例如,X)方向上具有S高分辨率的因子,而在另一个(例如,Y) 方向上具有T高分辨率的因子,则表格生成器将从初始密度较大的初始表格生成S*T表格。这有效地将更多的输入像素分配给任何特定的输出像素。
图18涉及由执行通道阵列内的执行通道执行的数学运算需要大于二维移位寄存器结构的大小的图像数据表面积的情况。如图18所示,要加载到用于处理的二维移位寄存器结构中的表格对应于输入帧的阴影区域1801。然而,将计算阴影区域内的阵列位置的输出值的数学运算需要在图18中所示的由虚线边框1802界定的帧内的值。因此,在二维移位寄存器结构的表面区域之外存在大的“支持区域”,其将被包含在操作中。
在这些条件下,表格生成器不仅会将对应于阴影区域1801的表格加载到模板处理器中,而且还将三个(非阴影的)相邻表格加载到数据计算单元中。由执行通道执行的程序代码将视需要向/从随机存取存储器调用和移出表格,并且/或者将表格中的一些或全部存储在二维移位寄存器阵列的较深寄存器中。
图19提供用于表格生成器的硬件设计1900的实施例。如图19所示,在一个实施例中,表格生成器被实现为具有处理器/控制器1901的计算系统,所述处理器/控制器执行存储在存储器1902中的程序代码,以执行表格生成器任务,诸如上文参照图13至图18所述的任务中的任何一个。表格生成器还包括用于从/向网络接收/发送线群以及从/向表格生成器的相关联的模板处理器接收/发送表格的I/O单元1903。
表格生成器的相关特征是其配置空间1904,该配置空间可以被实现为表格生成器内(如图19所示)、处理器/控制器1901内和/或存储器1902内的单独寄存器空间。配置空间1904有助于整体平台的广泛适应性和可编程性。在此,在配置空间1904中作出的设置可以例如包括相关的图像特征和尺寸,诸如帧大小、线群大小、表格大小、输入图像的像素分辨率、输出图像的像素分辨率等。然后,存储器1902内的程序代码使用配置空间内的信息作为输入变量对有正确大小的表格等进行正确的操作。
替选地或以某种组合方式,整体平台的广泛适应性和可编程性可以通过将定制的程序代码加载到存储器1902用于特定的应用和/或图像尺寸来实现。在此,例如,编译器能够容易地参考位置相对寻址方案的X、Y坐标和/或帧大小和线群大小中的任何一个,以便于确定表格大小、表格边界等,并且将通用将程序代码模板定制到专用于手头图像处理任务的软件程序。同样地,任何这样的转译和实际使用相对定位或其他图像尺寸可以被输入到配置空间1904中,其中表格生成器上存在的程序代码对表格边界、表格大小等进行确定。
d.实施方式的实施例
上文所讨论的硬件设计实施例可以在半导体芯片内和/或作为用于最终靶向半导体制造工艺的电路设计的描述来实现。在后一情况下,这样的电路描述可以采取高级/行为级电路说明(例如,VHDL描述) 或者低级电路描述(例如,寄存器传送级(RTL)描述、晶体管级描述或掩模描述)或者其各种组合。电路描述通常被体现于计算机可读存储介质(诸如CD-ROM或其他类型的存储技术)上。
3.0编译器例程
图20至图23a-d涉及由编译器执行的特殊例程的实施例,所述编译器将写入上文第1.0节中所讨论的虚拟ISA环境中的程序代码转移成由上文第2.0节中所讨论的图像处理器硬件执行的目标代码。
图20描绘出第一编译程序,其中虚拟处理器的存储器加载指令例如在以虚拟ISA“位置相对”格式写入时被转换成目标代码移位指令,用于诸如上述模板处理器的目标硬件平台,其具有二维移位阵列结构。在此,重申一下,位置相对指令格式识别待由存储器模型的输入阵列部分的X、Y坐标加载的数据项。
然而,如上文在第2.0节中针对硬件架构详述,将数据加载到用于执行的执行通道中在许多情况下是通过移位二维移位阵列内的数据值来实现。在移位寄存器内的一个或多个适当的数据移位之后,寻求将数据与需要数据项的执行通道相同的阵列位置对准。然后,能够通过执行通道直接执行数据。
这样,编译过程的一部分需要将虚拟处理器加载指令的序列转换成二维移位阵列的移位指令。出于示例目的,图20在同一图中示出类似于图3中所示的虚拟代码序列的虚拟代码序列2001以及类似于图 11a-k中呈现的目标代码序列的目标代码序列2002,用于在同一模板上求值的平均值。
比较代码序列2001和2002,注意到,虚拟代码2001的加载指令已经基本上被目标代码2002中的移位指令取代。在此,编译器能够“包含”虚拟代码2001正调用的数据字段以及二维移位阵列的结构和操作。通过包含这些特征,编译器能够确定将在虚拟代码加载指令中识别的数据项与执行通道阵列中的执行通道对准所需的移位数目和表格方向。
图21示出编译器将重新排序数据加载序列以减少或最小化将所需数据加载到它们各自执行通道中所需的硬件中的移位数目的相关过程。作为一个示例,图21呈现图20的虚拟代码序列2001的另一版本 2101。不同于图20中以从左到右的行顺序(ABC-FGH-KLM)处理模板的虚拟代码序列2001,如果以与二维移位阵列结构相同的顺序访问数据,则图21的虚拟代码序列2101在访问数据的顺序方面效率极低。
具体地,图21的虚拟代码序列2101检索需要按照指定顺序 (A-M-C-K-B-L-F-G-E)访问数据的最大或接近最大移位数目的数据值。当从二维移位阵列的角度面对具有低效数据访问序列的虚拟代码时,编译器将重新排序数据访问序列,以保持数学运算之间最少的移位数目(例如,数学运算之间的一个移位)。这样,如果图21的虚拟代码序列2101被呈现给编译器,则编译器仍会产生正如图20所示的目标代码序列2002那样的目标代码,其以来回交替顺序 (A-B-C-HG-F-K-L-M)排序数据访问。注意,与图20的原始虚拟代码2001排序加载操作的顺序(其行顺序为:ABC-FGH-KLM)相比,目标代码的来回交替顺序更加有效(并且不同)。
虽然图21主要针对同一表格上的访问顺序,但为防止在随机存取存储器与移位阵列之间加载/卸载表格,编译器还会基于表格对数据访问进行分类。例如,如果图像具有10个表格,则表格将被编号为1到 10,并且将基于它们各自的表格编号来排序访问(访问表格1之后访问表格2,访问表格2之后访问表格3等)。在一个实施例中,编译器还保持一起访问相同的通道(例如,在访问通道R的表格之后访问通道G,并且在访问通道G的表格之后访问通道B)。
图22涉及展开随机存储器访问的另一编译器操作,这样在操作期间,在实际硬件中不存在竞争的存储器访问。在此,图22的程序针对鉴于由虚拟代码操作的数据和底层机器的物理限制而构建目标代码。如前所论,执行通道阵列中的每个执行通道具有相关联的寄存器堆(例如,每个执行通道四个寄存器)。如同大多数执行通道,所述执行通道从/向与目标代码指令相符的寄存器读取和/或写入数据。如同大多数编译器,所述编译器认识到哪一数据驻留在哪一寄存器中并且识别出可用寄存器空间的物理限制。
这样,执行通道可能时而需要不在寄存器空间中而是位于与执行通道阵列中的执行通道的行和/或列相关联的随机存取存储器中的数据项。同样地,执行通道可能时而需要写入数据项,但没有能够写入数据的寄存器空间(因为当前在寄存器空间内的全部数据仍有相关性)。在这些情况下,编译器会将存储器加载或存储器存储指令插入目标代码(而非寄存器加载或寄存器存储指令),以从/向随机存取存储器而非寄存器空间提取/写入数据。
图22描绘出硬件架构的实施例,示出沿阵列的每一行的单独的随机存取存储器2207_1至2207_R。从该架构看出,执行通道阵列的同一行的执行通道能够访问相同的随机存取存储器。如图所示,每个执行通道包括用于访问其各自随机存取存储器的存储器单元。因此,当不同行上的两个不同执行通道在同一周期期间执行存储器加载指令时,指令并不进行竞争,因为它们被导向不同的随机存取存储器。
反之,如果同一行上的执行通道要在同一周期上执行存储器访问,则存储器访问将进行竞争。假定执行通道阵列旨在以SIMD类方式操作,则程序代码自然会导致阵列中的执行通道(其包括行和列)在同一周期上发出存储器访问请求。因此,来自同一行上的执行通道的竞争存储器访问是能够预见的风险。图22示出用于在同一行上的两个不同执行通道上执行的一对线程2201。给定机器的SIMD类性质,两个执行通道在相同的周期中执行相同的操作码,包括在前两个描绘的周期中执行一对存储器加载指令。检查存储器加载指令的地址,注意,全部地址都有所不同。因此,两个线程的第一个存储器加载指令真正地彼此竞争,并且两个线程的第二个存储器加载指令真正地彼此竞争。
这样,当编译器将存储器加载指令施加到对象代码中时,它还识别出存储器加载指令将对驻留在同一行上的执行通道施加冲突。作为响应,编译器会将相继的存储器加载指令施加到代码中,以有效地展开沿同一行的竞争的存储器加载指令,以便每个执行通道都具备其自己的访问存储器的保留周期。在图22的示例中,注意,最终目标代码 2202包括跨四个周期的四个相继存储器加载指令的序列,以确保一个执行通道的存储器访问不干扰沿同一行的另一个执行通道的存储器访问。
注意,图22的方法特别适用于上文第1.0节中所讨论的存储器模型的查找表部分。在此,重申一下,不同的执行通道可以在同一周期中使用同一查询表中的不同索引来访问同一查询表的不同条目。在一个实施例中,编译器会将相同查找表的不同副本实例化成每个随机存取存储器2207_1至2207_R。因此,可以在同一周期期间通过不同行上的执行通道将查找制成本地表副本。这样的查找不会竞争,并且每个查找的索引可能不同。反之,由沿同一行的执行通道执行的查找将访问相同存储器中的相同查找表并且将需要依序展开并执行。通过展开成依序访问,允许索引值有所不同。在一个实施例中,连同用于数学运算的操作码,目标代码的VLIW指令格式还包括用于存储器操作的操作码,其进一步包括沿着实际上应该执行指令的行的执行通道(沿着将其视作无操作的行的其他执行通道)的身份。
在各种实施例中,类似于查找表,编译器处理原子更新指令(如上文第1.0节针对虚拟环境的存储器模型所述)。也就是说,对于原子指令结果,在随机存取存储器2207_1至2207_R中保留存储器空间(例如,每行)。允许在同一周期期间执行非竞争的更新(例如,由沿不同行的相同定位的执行通道),而将竞争的更新(例如,由沿同一行的执行通道)展开成单独的指令。原子更新指令经常由编译器实现为读取-修改-写入指令,其中对驻于执行通道的寄存器空间中的最新结果数据进行读取,对这样的数据进行数学运算,然后将其写入专门保留的原子更新表。
图23a至图23d涉及不同的执行通道想要访问不同通道上的索引数据的另一种情况,其中在执行通道位置与每个执行通道所需的数据位置之间存在相同的偏移。例如,如图23a所示,执行通道P1、P2和 P3期望数据项X、Y和Z。特别地,数据项X、Y和Z中的每个位于不同的通道中并由此位于不同的表格上(数据项X在B表格上,数据项Y在G表格上,并且数据项Z在R表格上)。此外,每个数据项均位于每个执行通道的位置右侧的两个空格。
另一个表格包括索引数据,其指定在每个执行通道在获得所需信息时要使用的索引。在此,与执行通道P1对准的索引值指示执行通道 P1期望通道B中向右两个位置的数据项(B,-2),与执行通道P2对准的索引值指示执行通道P2期望通道G中向右两个位置的数据项(G, -2),并且与执行通道P3对准的索引值指示执行通道P3期望通道R 中向右两个位置的数据项(R,-2)。
在一个实施例中,如上所述,二维移位寄存器结构包括每个阵列位置的多个寄存器,但在同一周期期间,只有一个寄存器层可以参与移位活动。这样,对准来自不同通道的正确数据将需要在不同的周期中分别移位全部三个表格,之后才能将合适的数据提供给每个执行通道。
在图23b至图23d中示出编译器能够在目标代码中执行的加速。如图23b所示,并非移位R、G、B数据表格中的任何一个,而是将索引表移位内部索引值中列出的量(即,-2=向右两个空格)。这样,跨通道的期望数据值与索引值本身对准。然后,如图23c所示,通过与索引值和数据值对准的执行通道(执行通道P3、P4和P5)来执行直接加载。
理想地,R、G和B表格中的全部三个都被加载到二维移位寄存器的不同寄存器级中的三个中,并且索引表被加载到第四个(可移位的)寄存器级中。如果这样,则无需存储器访问,并且唯一的移位是向索引表右侧的两个移位。然后,执行通道P3、P4和P5能够直接加载数据值X、Y和Z(例如,加载到每个执行通道的R1),这是通过参考其位置中的索引值以及其本地寄存器堆中的正确通道/级。如图23d 所示,在已经加载数据值之后,新加载的数据值被移位到左侧两个位置。在这一点上,三个执行通道都具有它们期望的数据。
在各种实施例中,编译器还能够执行附加代码改进和相关功能。下面将详细描述这些改进和功能中的一些。
一种附加代码改进包括常数折叠。例如,如果编译器识别出两个常量相加(例如,从常量表),则编译器将简单地将和值作为代码中较低的立即操作数分配,而不允许代码实际促使执行通道执行这对已知值的和值。例如,如果编译器观察到运算R1<=ADD 9 5,则编译器将该运算替换成R1<=9或等价的语句。
另一个相关的编译器特征包括了解所有表达式的最小值和最大值。通过如此操作,易于确定输入和输出表达式中的通道数目。例如,最小/最大范围为[-3/+2;-2/+3;[null]]的输入表达式被理解成指向第一通道和第二通道而非第三通道。
另一个相关的编译器特征是了解线群、表格、其支持区域(即,在由表格的输入像素位置所包含的输出像素位置上执行的数学运算所需“表外”信息)和查找表中的任何一个的大小(无论是标量还是其他)。在此,由编译器分析对这些结构中任何一个的访问,以了解表格需要有多大,表格的支持区域需要有多大和/或任何查找表有多大。一旦知道这些结构的大小,它们的对应大小便作为来自编译器的提示来提供,例如,作为元数据提供。在查找表的情况下,例如,元数据被附加到查询表或以其他方式包括在查找表中。这样,表格生成器的处理器/控制器和/或标量处理器能够确认在存储器区域中存在足够的空间,之后在将任何这样的数据结构加载到任何存储器中。在一个实施例中,元数据包括所用的RAM条目的数目、是否应用任何放大缩放或缩小缩放、X维度和Y维度中的最小和最大偏移以及包括多少信道。根据这些参数,线缓存器单元(在线群的情况下)和表格生成器的处理器/控制器和/或标量处理器能够酌情确定适当的大小并且分配存储器空间。
另一个编译器特征是消除冗余钳位。图像访问指令在虚拟编程环境中表达经常受到限制,而不允许它们超出这些限制。例如,可能明确禁止输入阵列加载指令访问一些边界之外的区域。编译器分析虚拟环境内的存储器访问,并且如果任何这样的访问实际上不会冒犯边界,则从代码中消除定义边界的任何表达式。这运用到硬件处理界外表达式的能力,结果是软件不必再管理/处理表达式。
在一个实施例中,编译器为具有超长指令字(VLIW)型格式的模板处理器构建目标代码指令。这些指令将从标量存储器中读取并且发出到执行通道阵列的全部执行通道。在一个实施例中,VLIW指令格式包括每个指令的一个以上操作码。例如,VLIW格式包括ALU操作码 (其指示由每个执行通道的ALU执行的数学函数);存储器操作码(其指示用于特定执行通道或一组执行通道的存储器操作(例如,沿处理阵列的多行中的每行相同定位的执行通道);以及标量操作码,其指令标量处理器的活动。
如前所述,在模板处理器内多次实例化查找表(例如,执行通道阵列中的每一行一个),以允许同时访问查找表内容而进行非竞争的访问,反之,常数查找表本质上是标量的,因为在同一周期中从标量存储器将同一值播送到全部执行通道。因此,在一个实施例中,在VLIW 指令字的标量处理器操作码字段中定义标量查找。
在各种实施例中,编译器可以被实现为上文参照图6所述的开发环境的一部分的软件程序。这样,编译器的实例可以被加载到支持开发环境的相同计算系统(或计算系统的集群)上或以其他方式在其上进行操作。
4.0总结
从前述部分而言,有必要认识到,在上文第1.0节中所述的虚拟环境可以在计算机系统上来实例化。同样地,如上文第2.0节所述的图像处理器可以被体现于计算机系统上的硬件中(例如,作为处理来自手持设备的相机的数据的手持设备的片上系统(SOC)的一部分)。
有必要指出,上述各种图像处理器架构特征不一定限于传统意义上的图像处理并由此可以应用于可能(或可能不)促使图像处理器被重新表征的其他应用。例如,如果上述各种图像处理器架构特征中的任何一个要被使用于创建和/或生成和/或呈现动画,而非处理实际的相机图像,则图像处理器可以被表征为图形处理单元。此外,上述图像处理器架构特征可以被应用于其他技术应用,诸如视频处理、视觉处理、图像识别和/或机器学习。通过这种方式应用,图像处理器可以(例如,作为协同处理器)与更通用的处理器(例如,作为计算系统的CPU 或其一部分)集成,或者可以是计算系统内的独立处理器。
上文所讨论的硬件设计实施例可以在半导体芯片内和/或作为用于最终靶向半导体制造工艺的电路设计的描述来实现。在后一情况下,这样的电路描述可以采取高级/行为级电路说明(例如,VHDL描述) 或者低级电路描述(例如,寄存器传送级(RTL)描述、晶体管级描述或掩模描述)或者其各种组合。电路描述通常被体现于计算机可读存储介质(诸如CD-ROM或其他类型的存储技术)上。
从前述部分而言,有必要认识到,如上所述的图像处理器可以被体现于计算机系统上的硬件中(例如,作为处理来自手持设备的相机的数据的手持设备的片上系统(SOC)的一部分)。在图像处理器被实现为硬件电路的情况下,注意,由图像处理器处理的图像数据可以直接从相机接收。在此,图像处理器可以是分立相机的一部分,或者是具有集成相机的计算系统的一部分。在后一情况下,图像数据可以直接从相机或者从计算系统的系统存储器接收(例如,相机将其图像数据发送到系统存储器而非图像处理器)。还应注意,前述部分中所述的许多特征可以适用于图形处理器单元(其呈现动画)。
图24提供计算系统的示例性绘图。下述计算系统的许多组件可应用于具有集成相机和相关联的图像处理器的计算系统(例如,手持设备,诸如智能电话或平板型计算机)。本领域普通技术人员能够容易理解两者之间的关系。
如图24所示,基本计算系统可以包括中央处理单元2401(其可以例如包括多个通用处理核2415_1至2415_N以及布置在多核处理器上的主存储器控制器2417或者应用处理器)、系统存储器2402、显示器2403(例如,触摸屏、平板)、本地有线点对点链路(例如,USB)接口2404、各种网络I/O功能2405(诸如以太网接口和/或蜂窝调制解调器子系统)、无线局域网(例如,WiFi)接口2406、无线点对点链路(例如,蓝牙)接口2407和全球定位系统接口2408、各种传感器 2409_1至2409_N、一个或多个相机2410、电池2411、功率管理控制单元2424、扬声器和麦克风2413以及音频编码器/解码器2414。
应用处理器或多核处理器2450可以包括其CPU 2401内的一个或多个通用处理核2415、一个或多个图形处理单元2416、存储器管理功能2417(例如,存储器控制器)、I/O控制功能2418以及图像处理单元2419。通用处理核2415通常执行计算系统的操作系统和应用软件。图形处理单元2416通常执行图形敏感功能,例如,用以生成在显示器 2403上呈现的图形信息。存储器控制功能2417与系统存储器2402接口,以向/从系统存储器2402写入/读取数据。功率管理控制单元2424 通常控制系统2400的功耗。
图像处理单元2419可以根据前述部分中的详细描述的图像处理单元实施例中的任何一个来实现。替选地或组合地,IPU 2419可以被耦合至GPU 2416和CPU 2401中的一个或两者,作为其协同处理器。此外,在各种实施例中,GPU 2416可以通过上文详细描述的图像处理器特征中的任何一个来实现。
触摸屏显示器2403、通信接口2404至2407、GPS接口2408、传感器2409、相机2410和扬声器/麦克风编解码器2413、2414中的每个能够被视为各种形式的I/O(输入和/或输出),这是相对于整个计算系统而言,在适当情况下,其还包括集成的外围设备(例如,一个或多个照相机2410)。根据实施方式,这些I/O组件中的各个都可以被集成在应用处理器/多核处理器2450上,或者可以位于处理器/多核处理器2450的管芯之外或者其封装之外。
在一个实施例中,一个或多个相机2410包括能够在相机与其视野内的物体之间测量深度的深度相机。在应用处理器或其他处理器的通用CPU核(或具有用于执行程序代码的指令执行流水线的其他功能块) 上执行的应用软件、操作系统软件、设备驱动器软件和/或固件可以执行上述功能中的任何一个。
本发明的实施例可以包括如上所述的各种过程。这些过程可以被体现于机器可执行指令中。这些指令能够被使用于促使通用或专用处理器执行某些过程。替选地,这些过程可以通过包含用于执行过程的硬连线逻辑的专用硬件组件或者通过编程的计算机组件和定制的硬件组件的任何组合来执行。
本发明的元素还可以作为用于存储机器可执行指令的机器可读介质来提供。机器可读介质可以包括但不限于软盘、光盘、CD-ROM和磁光盘、闪速存储器、ROM、RAM、EPROM、EEPROM、磁卡或光卡、传播介质或其他类型的适用于存储电子指令的介质/机器可读介质。例如,本发明可以作为计算机程序来下载,该计算机程序可以经由通信链路(例如,调制解调器或网络连接)通过体现于载波或其他传播介质中的数据信号而从远程计算机(例如,服务器)传送到请求计算机 (例如,客户端)。
在前文的说明书中,本发明已经参照其具体示例性实施例来予以描述。然而,显然可以对其作出修改和更改,而不背离如所附权利要求所述的本发明的更宽精神和范围。因此,说明书和附图被认为说明性而非限制性意义。

Claims (44)

1.一种方法,包括:
将包括高级指令的高级程序代码转译成低级指令,所述高级指令具有以正交坐标系的第一坐标和第二坐标识别要从存储器存取的像素的指令格式,所述低级指令针对具有执行通道阵列和能够沿两个不同轴使数据移位的移位寄存器阵列结构的硬件架构,所述转译包括将具有所述指令格式的所述高级指令中的一些指令替换成当被所述执行通道的相应执行单元执行时在所述移位寄存器阵列结构内使数据移位的低级移位指令,所述转译还包括将具有所述指令格式的所述高级指令中的其他指令替换成指定相应外部存储器地址的低级存储器访问指令,所述低级存储器访问指令由相应存储器单元在所述执行通道阵列的相应执行通道内执行,以访问在所述相应执行通道外部的相应外部存储器空间,所述相应执行通道执行所述低级存储器访问指令以对所述外部存储器空间进行存取。
2.根据权利要求1所述的方法,其中,所述转译进一步包括将在具有所述指令格式的所述高级指令中的一些指令中排列的像素访问序列重新排序成低级移位指令的移位便利序列。
3.根据权利要求2所述的方法,其中,具有所述指令格式的所述高级指令包括加载指令。
4.根据权利要求2所述的方法,其中,具有所述指令格式的所述高级指令包括存储指令。
5.根据权利要求1所述的方法,其中,所述硬件架构包括多个存储器,所述多个存储器被耦合至所述移位寄存器阵列结构以从所述移位寄存器阵列结构的移位操作中接收溢出数据。
6.根据权利要求5所述的方法,进一步包括:
如果在硬件中根据以高级指定的访问模式来实现,则识别所述高级指令中将导致对所述存储器中特定一个的冲突访问的那些高级指令;以及
重构所述访问模式以避免所述冲突。
7.根据权利要求6所述的方法,其中,所述冲突包括在相同周期上对相同存储器进行两次或更多访问,并且所述重构包括跨多个周期展开两次或更多相继的访问。
8.根据权利要求7所述的方法,其中,所述访问被定向到相同查找表。
9.根据权利要求7所述的方法,其中,所述访问起因于相同的原子更新。
10.根据权利要求1所述的方法,进一步包括:
识别出在相同周期中所述执行通道阵列的不同执行通道期望处理来自图像的不同通道的相应数据,其中,所述数据相对于所述执行通道的相应位置具有偏移量;
插入程序代码以使识别每个执行通道期望的相应数据的索引信息表格移位所述偏移量;
插入程序代码以使得不同执行通道的不同集合与不同执行通道间隔开所述偏移量,以从所述索引信息表格加载并且从每个这样的加载的对应适当通道加载;以及
插入程序代码以使所期望的数据移位到其在不同执行通道中相应的一个。
11.一种非暂时性机器可读存储介质,其上存储有当由计算系统处理时促使执行方法的程序代码,所述方法包括:
将包括高级指令的高级程序代码转译成低级指令,所述高级指令具有以正交坐标系的第一坐标和第二坐标识别要从存储器存取的像素的指令格式,所述低级指令针对具有执行通道阵列和能够沿两个不同轴使数据移位的移位寄存器阵列结构的硬件架构,所述转译包括将具有所述指令格式的所述高级指令替换成当被所述执行通道的相应执行单元执行时在所述移位寄存器阵列结构内使数据移位的低级移位指令,所述转译还包括将具有所述指令格式的所述高级指令中的其他指令替换成指定相应外部存储器地址的低级存储器访问指令,所述低级存储器访问指令由相应存储器单元在所述执行通道阵列的相应执行通道内执行,以访问在所述相应执行通道外部的相应外部存储器空间,所述相应执行通道执行所述低级存储器访问指令以对所述外部存储器空间进行存取。
12.根据权利要求11所述的非暂时性机器可读存储介质,其中,所述转译进一步包括将具有所述指令格式的所述高级指令中的一些指令中排列的像素访问序列重新排序成低级移位指令的移位便利序列。
13.根据权利要求12所述的非暂时性机器可读存储介质,其中,所述方法进一步包括重新排序数学运算指令以与所述移位便利序列一致地消耗输入值。
14.根据权利要求12所述的非暂时性机器可读存储介质,其中,具有所述指令格式的所述高级指令包括加载指令和/或存储指令。
15.根据权利要求11所述的非暂时性机器可读存储介质,其中,所述硬件架构包括多个存储器,所述多个存储器被耦合至所述移位寄存器阵列结构以从所述移位寄存器阵列结构的移位操作中接收溢出数据。
16.根据权利要求15所述的非暂时性机器可读存储介质,其中,所述方法进一步包括:
如果在所述硬件中根据以高级指定的访问模式来实现,则识别所述高级指令中将导致对所述存储器中特定一个的冲突访问的那些高级指令;以及
重构所述访问模式以避免所述冲突。
17.根据权利要求16所述的非暂时性机器可读存储介质,其中,所述冲突包括在相同周期上对相同存储器进行两次或更多访问,并且所述重构包括跨多个周期展开两次或更多相继的访问。
18.根据权利要求17所述的非暂时性机器可读存储介质,其中,所述访问被定向到相同查找表。
19.根据权利要求17所述的非暂时性机器可读存储介质,其中,所述访问起因于相同的原子更新。
20.一种包括多个处理核和机器可读介质的计算系统,所述机器可读介质包含程序代码,所述程序代码当由所述多个处理核处理时使得方法被执行,所述方法包括:
将包括高级指令的高级程序代码转译成低级指令,所述高级指令具有以正交坐标系的第一坐标和第二坐标识别要从存储器存取的像素的指令格式,所述低级指令针对具有执行通道阵列和能够沿两个不同轴使数据移位的移位寄存器阵列结构的硬件架构,所述转译包括将具有所述指令格式的所述高级指令替换成当被所述执行通道的相应执行单元执行时在所述移位寄存器阵列结构内使数据移位的低级移位指令,所述转译还包括将具有所述指令格式的所述高级指令中的其他指令替换成指定相应外部存储器地址的低级存储器访问指令,所述低级存储器访问指令由相应存储器单元在所述执行通道阵列的相应执行通道内执行,以访问在所述相应执行通道外部的相应外部存储器空间,所述相应执行通道执行所述低级存储器访问指令以对所述外部存储器空间进行存取。
21.根据权利要求20所述的计算系统,其中,所述转译进一步包括将具有所述指令格式的所述高级指令中的一些指令中排列的像素访问序列重新排序成低级移位指令的移位便利序列。
22.根据权利要求20所述的计算系统,其中,所述硬件架构包括多个存储器,所述多个存储器被耦合至所述移位寄存器阵列结构以从所述移位寄存器阵列结构的移位操作中接收溢出数据,以及其中,所述方法进一步包括:
如果在硬件中根据以高级指定的访问模式来实现,则识别所述高级指令中将导致对所述存储器中特定一个的冲突访问的那些高级指令;以及
重构所述访问模式以避免所述冲突。
23.根据权利要求22所述的计算系统,其中,所述冲突包括在相同周期上对相同存储器进行两次或更多访问,并且所述重构包括跨多个周期展开两次或更多相继的访问。
24.根据权利要求23所述的计算系统,其中,所述访问被定向到相同查找表。
25.根据权利要求23所述的计算系统,其中,所述访问起因于相同的原子更新。
26.一种计算机实现的方法,包括:
接收虚拟指令集架构的虚拟指令集的第一序列的虚拟指令,其中所述第一序列的虚拟指令包括具有二维相对寻址的一个或多个加载指令,其中每个加载指令包括二维相对地址,所述二维相对地址包括x偏移和y偏移,其中所述二维相对地址表示图像数据的区域中的位置相对于与虚拟处理器相关联的图像数据的所述区域中的位置;
由编译器接收用于将所述虚拟指令集的所述第一序列的虚拟指令转译成目标代码指令集的第二序列的目标代码指令集的请求,其中所述目标代码指令集的目标代码指令能由处理器的每个处理单元执行,所述处理器包括处理单元的二维阵列和二维移位寄存器阵列,其中每个处理单元具有所述二维移位寄存器的专用移位寄存器,并且其中每个处理单元被配置成将专用于所述处理单元的相应移位寄存器中的数据移位到专用于另一个处理单元的另一个移位寄存器;以及
由所述编译器通过将所述虚拟指令集中的一个或多个所述加载指令转译成所述目标代码指令集的一个或多个移位指令来生成所述第二序列的目标代码指令,包括将每个加载指令的相应二维相对地址转译成一个或多个对应移位偏移,并且使用所述一个或多个相应移位偏移来生成所述目标代码指令集的所述一个或多个移位指令。
27.根据权利要求26所述的方法,其中,每个移位偏移在所述二维移位寄存器阵列中指定方向,并且表示多远的数据的值应当沿着所述二维移位寄存器阵列内的所指定的方向被移位。
28.根据权利要求26所述的方法,其中,将所述虚拟指令集中的加载指令转译成所述目标代码指令集的一个或多个移位指令包括:
生成具有第一移位偏移的第一移位指令,所述第一移位偏移对应于所述加载指令的所述二维相对地址的所述x偏移;以及
生成具有第二移位偏移的第二移位指令,所述第二移位偏移对应于所述加载指令的所述二维相对地址的所述y偏移。
29.根据权利要求26所述的方法,其中,所述第一序列的虚拟指令指定了访问图像数据的每个元素的顺序,并且其中将所述第一序列的虚拟指令转译成所述第二序列的目标代码指令包括生成修改访问图像数据的每个元素的所述顺序的移位指令序列。
30.根据权利要求29所述的方法,其中,所述移位指令序列,当被所述处理单元执行时,使所述处理单元在相同方向上依序多次访问图像数据的元素。
31.根据权利要求26所述的方法,其中,所述处理器包括沿着处理单元的所述二维阵列中的相同行或列定向的一组处理单元,并且其中所述组中的所有处理单元共享相同存储器单元,使得所述组中的仅一个处理单元能够在单个时钟周期期间访问所述存储器单元,并且
其中将所述第一序列的虚拟指令转译成所述第二序列的目标代码指令包括将单个虚拟存储器访问指令展开成由所述组中的相应处理单元依序执行的多个目标代码存储器访问指令。
32.根据权利要求31所述的方法,其中,每个目标代码存储器访问指令包括用于当执行所述目标代码存储器访问指令时指定哪个处理单元应当访问所述存储器单元的存储器操作的操作码。
33.根据权利要求31所述的方法,其中,由所述编译器生成所述第二序列的目标代码指令包括:
生成具有多个指令操作码的指令,其中所述指令包括:(1)标量操作码,所述标量操作码对应于要由所述处理器的标量处理器执行的标量运算,和(2)移位操作码,所述移位操作码对应于在处理单元的所述二维阵列中由所述处理单元中的每一个执行的一个或多个移位操作。
34.根据权利要求33所述的方法,其中,所述指令当被所述标量处理器执行时使所述标量处理器将所述移位操作码和移位偏移广播到处理单元的所述二维阵列中的所述处理单元中的每一个。
35.一种系统,包括:
一个或多个计算机和存储指令的一个或多个存储设备,所述指令当被所述一个或多个计算机执行时可操作来使所述一个或多个计算机执行操作,所述操作包括:
接收虚拟指令集架构的虚拟指令集的第一序列的虚拟指令,其中所述第一序列的虚拟指令包括具有二维相对寻址的一个或多个加载指令,其中每个加载指令包括二维相对地址,所述二维相对地址包括x偏移和y偏移,其中所述二维相对地址表示图像数据的区域中的位置相对于与虚拟处理器相关联的图像数据的所述区域中的位置;
由编译器接收用于将所述虚拟指令集的所述第一序列的虚拟指令转译成目标代码指令集的第二序列的目标代码指令集的请求,其中所述目标代码指令集的目标代码指令能由处理器的每个处理单元执行,所述处理器包括处理单元的二维阵列和二维移位寄存器阵列,其中每个处理单元具有所述二维移位寄存器的专用移位寄存器,并且其中每个处理单元被配置成将专用于所述处理单元的相应移位寄存器中的数据移位到专用于另一个处理单元的另一个移位寄存器;以及
由所述编译器通过将所述虚拟指令集中的一个或多个所述加载指令转译成所述目标代码指令集的一个或多个移位指令来生成所述第二序列的目标代码指令,包括将每个加载指令的相应二维相对地址转译成一个或多个对应移位偏移,并且使用所述一个或多个相应移位偏移来生成所述目标代码指令集的所述一个或多个移位指令。
36.根据权利要求35所述的系统,其中,每个移位偏移在所述二维移位寄存器阵列中指定方向,并且表示多远的数据的值应当沿着所述二维移位寄存器阵列内的所指定的方向被移位。
37.根据权利要求35所述的系统,其中,将所述虚拟指令集中的加载指令转译成所述目标代码指令集的一个或多个移位指令包括:
生成具有第一移位偏移的第一移位指令,所述第一移位偏移对应于所述加载指令的所述二维相对地址的所述x偏移;以及
生成具有第二移位偏移的第二移位指令,所述第二移位偏移对应于所述加载指令的所述二维相对地址的所述y偏移。
38.根据权利要求35所述的系统,其中,所述第一序列的虚拟指令指定了访问图像数据的每个元素的顺序,并且其中将所述第一序列的虚拟指令转译成所述第二序列的目标代码指令包括生成修改访问图像数据的每个元素的所述顺序的移位指令序列。
39.根据权利要求38所述的系统,其中,所述移位指令序列当被所述处理单元执行时使所述处理单元在相同方向上依序多次访问图像数据的元素。
40.根据权利要求35所述的系统,其中,所述处理器包括沿着处理单元的所述二维阵列中的相同行或列定向的一组处理单元,并且其中所述组中的所有处理单元共享相同存储器单元,使得所述组中的仅一个处理单元能够在单个时钟周期期间访问所述存储器单元,并且
其中将所述第一序列的虚拟指令转译成所述第二序列的目标代码指令包括将单个虚拟存储器访问指令展开成由所述组中的相应处理单元依序执行的多个目标代码存储器访问指令。
41.根据权利要求40所述的系统,其中,每个目标代码存储器访问指令包括用于当执行所述目标代码存储器访问指令时指定哪个处理单元应当访问所述存储器单元的存储器操作的操作码。
42.根据权利要求40所述的系统,其中,由所述编译器生成所述第二序列的目标代码指令包括:
生成具有多个指令操作码的指令,其中所述指令包括:(1)标量操作码,所述标量操作码对应于要由所述处理器的标量处理器执行的标量运算,和(2)移位操作码,所述移位操作码对应于在处理单元的所述二维阵列中由所述处理单元中的每一个执行的一个或多个移位操作。
43.根据权利要求42所述的系统,其中,所述指令当被所述标量处理器执行时使所述标量处理器将所述移位操作码和移位偏移广播到处理单元的所述二维阵列中的所述处理单元中的每一个。
44.一个或多个编码有指令的非暂时性计算机可读存储介质,所述指令当被一个或多个计算机执行时,使所述一个或多个计算机执行操作,所述操作包括:
接收虚拟指令集架构的虚拟指令集的第一序列的虚拟指令,其中所述第一序列的虚拟指令包括具有二维相对寻址的一个或多个加载指令,其中每个加载指令包括二维相对地址,所述二维相对地址包括x偏移和y偏移,其中所述二维相对地址表示图像数据的区域中的位置相对于与虚拟处理器相关联的图像数据的所述区域中的位置;
由编译器接收用于将所述虚拟指令集的所述第一序列的虚拟指令转译成目标代码指令集的第二序列的目标代码指令集的请求,其中所述目标代码指令集的目标代码指令能由处理器的每个处理单元执行,所述处理器包括处理单元的二维阵列和二维移位寄存器阵列,其中每个处理单元具有所述二维移位寄存器的专用移位寄存器,并且其中每个处理单元被配置成将专用于所述处理单元的相应移位寄存器中的数据移位到专用于另一个处理单元的另一个移位寄存器;以及
由所述编译器通过将所述虚拟指令集中的一个或多个所述加载指令转译成所述目标代码指令集的一个或多个移位指令来生成所述第二序列的目标代码指令,包括将每个加载指令的相应二维相对地址转译成一个或多个对应移位偏移,并且使用所述一个或多个相应移位偏移来生成所述目标代码指令集的所述一个或多个移位指令。
CN201680020203.4A 2015-04-23 2016-03-28 用于在虚拟图像处理器指令集架构(isa)与具有二维移位阵列结构的目标硬件之间进行转译的编译器 Active CN110149802B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/694,856 2015-04-23
US14/694,856 US9785423B2 (en) 2015-04-23 2015-04-23 Compiler for translating between a virtual image processor instruction set architecture (ISA) and target hardware having a two-dimensional shift array structure
PCT/US2016/024488 WO2016171846A1 (en) 2015-04-23 2016-03-28 Compiler for translating between a virtual image processor instruction set architecture (isa) and target hardware having a two-dimensional shift array structure

Publications (2)

Publication Number Publication Date
CN110149802A CN110149802A (zh) 2019-08-20
CN110149802B true CN110149802B (zh) 2021-04-16

Family

ID=55808845

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680020203.4A Active CN110149802B (zh) 2015-04-23 2016-03-28 用于在虚拟图像处理器指令集架构(isa)与具有二维移位阵列结构的目标硬件之间进行转译的编译器

Country Status (5)

Country Link
US (4) US9785423B2 (zh)
EP (1) EP3286645A1 (zh)
CN (1) CN110149802B (zh)
GB (1) GB2554204B (zh)
WO (1) WO2016171846A1 (zh)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
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
US9830150B2 (en) 2015-12-04 2017-11-28 Google Llc Multi-functional execution lane for image processor
US10313641B2 (en) 2015-12-04 2019-06-04 Google Llc Shift register with reduced wiring complexity
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
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
US20180005059A1 (en) 2016-07-01 2018-01-04 Google Inc. Statistics Operations On Two Dimensional Image Processor
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
US11373266B2 (en) * 2017-05-05 2022-06-28 Intel Corporation Data parallelism and halo exchange for distributed machine learning
US10467056B2 (en) * 2017-05-12 2019-11-05 Google Llc Configuration of application software on multi-core image processor
US10489199B2 (en) * 2017-05-12 2019-11-26 Google Llc Program code transformations to improve image processor runtime efficiency
US10489878B2 (en) * 2017-05-15 2019-11-26 Google Llc Configurable and programmable image processor unit
US10915319B2 (en) * 2017-05-15 2021-02-09 Google Llc Two dimensional masked shift instruction
US10552131B2 (en) * 2017-10-16 2020-02-04 Microsoft Technology Licensing, Llc Barrier reduction during code translation
US11270201B2 (en) 2017-12-29 2022-03-08 Intel Corporation Communication optimizations for distributed machine learning
DE102018202398A1 (de) * 2018-02-16 2019-08-22 Siemens Aktiengesellschaft Vereinfachte Programmerstellung für Komponenten von Automatisierungssystemen
CN112005213A (zh) * 2018-02-27 2020-11-27 谷歌有限责任公司 用于图像处理器的大型查找表
JP7035751B2 (ja) * 2018-04-12 2022-03-15 富士通株式会社 コード変換装置、コード変換方法、及びコード変換プログラム
US10908906B2 (en) 2018-06-29 2021-02-02 Intel Corporation Apparatus and method for a tensor permutation engine
US11709911B2 (en) * 2018-10-03 2023-07-25 Maxim Integrated Products, Inc. Energy-efficient memory systems and methods
CN110058882B (zh) * 2019-03-14 2023-01-06 深圳市比昂芯科技有限公司 一种用于cnn加速的opu指令集定义方法
CN111158636B (zh) * 2019-12-03 2022-04-05 中国人民解放军战略支援部队信息工程大学 可重构计算结构及计算处理阵列的路由寻址方法、装置
CN113867789A (zh) * 2020-06-30 2021-12-31 上海寒武纪信息科技有限公司 计算装置、集成电路芯片、板卡、电子设备和计算方法
CN113867790A (zh) * 2020-06-30 2021-12-31 上海寒武纪信息科技有限公司 计算装置、集成电路芯片、板卡和计算方法
WO2022104176A1 (en) * 2020-11-16 2022-05-19 Ascenium, Inc. Highly parallel processing architecture with compiler
US11847100B2 (en) 2020-11-19 2023-12-19 Alibaba Group Holding Limited Distributed file system servicing random-access operations
CN112860318A (zh) * 2021-01-29 2021-05-28 成都商汤科技有限公司 一种数据传输方法、芯片、设备和存储介质
CN112860267B (zh) * 2021-04-23 2021-07-30 武汉深之度科技有限公司 一种内核裁剪方法及计算设备

Citations (5)

* 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
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
WO2007071883A2 (fr) * 2005-12-19 2007-06-28 Dxo Labs Procede et systeme de traitement de donnes numeriques
CN102937889A (zh) * 2011-04-07 2013-02-20 威盛电子股份有限公司 控制寄存器对应于异质指令集架构处理器

Family Cites Families (79)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4377803A (en) * 1980-07-02 1983-03-22 International Business Machines Corporation Algorithm for the segmentation of printed fixed pitch documents
US5522082A (en) 1986-01-23 1996-05-28 Texas Instruments Incorporated Graphics display processor, a graphics display system and a method of processing graphics data with control signals connected to a central processing unit and graphics circuits
US4835712A (en) 1986-04-14 1989-05-30 Pixar Methods and apparatus for imaging volume data with shading
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
JP3482660B2 (ja) 1993-09-08 2003-12-22 ソニー株式会社 画像データ処理装置および画像データ処理方法
US5612693A (en) 1994-12-14 1997-03-18 International Business Machines Corporation Sliding window data compression using a toroidal bit shift register
JP3573755B2 (ja) 1996-01-15 2004-10-06 シーメンス アクチエンゲゼルシヤフト 画像処理プロセッサ
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
US6529629B2 (en) * 1998-09-23 2003-03-04 Xerox Corporation Image segmentation apparatus and method
US6389164B2 (en) * 1998-09-23 2002-05-14 Xerox Corporation Image segmentation apparatus and method
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
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
KR100451584B1 (ko) * 2001-12-20 2004-10-08 엘지전자 주식회사 웨이블릿 변환과 움직임 추정을 이용한 동영상 부호화 및복호화 장치
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
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
US7882339B2 (en) 2005-06-23 2011-02-01 Intel Corporation Primitives to enhance thread-level speculation
JP2007067917A (ja) 2005-08-31 2007-03-15 Matsushita Electric Ind Co Ltd 画像データ処理装置
US7602974B2 (en) 2005-10-21 2009-10-13 Mobilic Technology (Cayman) Corp. Universal fixed-pixel-size ISP scheme
US7861060B1 (en) * 2005-12-15 2010-12-28 Nvidia Corporation Parallel data processing systems and methods using cooperative thread arrays and thread identifier values to determine processing behavior
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
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
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 面発光型半導体レーザの駆動方法および光伝送モジュール
JP4844853B2 (ja) 2007-09-05 2011-12-28 国立大学法人東北大学 固体撮像素子及びその駆動方法
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 삼성전자주식회사 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법
US20110055495A1 (en) 2009-08-28 2011-03-03 Qualcomm Incorporated Memory Controller Page Management Devices, Systems, and Methods
US8976195B1 (en) 2009-10-14 2015-03-10 Nvidia Corporation Generating clip state for a batch of vertices
US8436857B2 (en) 2009-10-20 2013-05-07 Oracle America, Inc. System and method for applying level of detail schemes
US8595428B2 (en) 2009-12-22 2013-11-26 Intel Corporation Memory controller functionalities to support data swizzling
US8749667B2 (en) 2010-08-02 2014-06-10 Texas Instruments Incorporated System and method for maintaining maximum input rate while up-scaling an image vertically
US8508612B2 (en) 2010-09-30 2013-08-13 Apple Inc. Image signal processor line buffer configuration for processing ram image data
US8797323B2 (en) 2011-01-18 2014-08-05 Intel Corporation Shadowing dynamic volumetric media
WO2012105174A1 (ja) 2011-01-31 2012-08-09 パナソニック株式会社 プログラム生成装置、プログラム生成方法、プロセッサ装置及びマルチプロセッサシステム
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 京セラドキュメントソリューションズ株式会社 画像形成装置
US9348676B2 (en) * 2012-01-05 2016-05-24 Google Technology Holdings LLC System and method of processing buffers in an OpenCL environment
FR2985523B1 (fr) 2012-01-06 2014-11-28 Commissariat Energie Atomique Electrode poreuse pour membrane echangeuse de protons
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 晨星半導體股份有限公司 影像處理裝置與影像處理方法
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
US9058673B2 (en) 2013-03-15 2015-06-16 Oracle International Corporation Image mosaicking using a virtual grid
US8954992B2 (en) 2013-03-15 2015-02-10 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Distributed and scaled-out network switch and packet processing
US9374542B2 (en) 2014-03-28 2016-06-21 Intel Corporation Image signal processor with a block checking circuit
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
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

Patent Citations (5)

* 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
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
WO2007071883A2 (fr) * 2005-12-19 2007-06-28 Dxo Labs Procede et systeme de traitement de donnes numeriques
CN102937889A (zh) * 2011-04-07 2013-02-20 威盛电子股份有限公司 控制寄存器对应于异质指令集架构处理器

Also Published As

Publication number Publication date
US10599407B2 (en) 2020-03-24
US20170242669A1 (en) 2017-08-24
US20200201612A1 (en) 2020-06-25
US10095492B2 (en) 2018-10-09
GB2554204A (en) 2018-03-28
GB201715795D0 (en) 2017-11-15
US11182138B2 (en) 2021-11-23
US20160313984A1 (en) 2016-10-27
WO2016171846A1 (en) 2016-10-27
CN110149802A (zh) 2019-08-20
EP3286645A1 (en) 2018-02-28
US9785423B2 (en) 2017-10-10
GB2554204B (en) 2021-08-25
US20190004777A1 (en) 2019-01-03

Similar Documents

Publication Publication Date Title
CN110149802B (zh) 用于在虚拟图像处理器指令集架构(isa)与具有二维移位阵列结构的目标硬件之间进行转译的编译器
CN107533750B (zh) 虚拟图像处理器及在其上处理图像数据的方法和系统
JP6858239B2 (ja) プログラムコードを、高性能で電力効率の良いプログラマブルな画像処理ハードウェアプラットフォームにマッピングするためのコンパイラ技法
US11196953B2 (en) Block operations for an image processor having a two-dimensional execution lane array and a two-dimensional shift register
KR102278658B1 (ko) 높은 성능, 전력 효율, 프로그램 가능 이미지 처리 프로세싱을 위한 아키텍처
US11544060B2 (en) Two dimensional masked shift instruction
CN112967169B (zh) 用于图像生成器的数据片生成器
US9978116B2 (en) Core processes for block operations on an image processor having a two-dimensional execution lane array and a two-dimensional shift register
US10996988B2 (en) Program code transformations to improve image processor runtime efficiency
TW201901483A (zh) 執行雙輸入值絕對值及加總運算的電路

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant