CN110574007B - 执行双输入值绝对值和求和操作的电路 - Google Patents

执行双输入值绝对值和求和操作的电路 Download PDF

Info

Publication number
CN110574007B
CN110574007B CN201880028582.0A CN201880028582A CN110574007B CN 110574007 B CN110574007 B CN 110574007B CN 201880028582 A CN201880028582 A CN 201880028582A CN 110574007 B CN110574007 B CN 110574007B
Authority
CN
China
Prior art keywords
value
alu
difference
external input
input value
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
CN201880028582.0A
Other languages
English (en)
Other versions
CN110574007A (zh
Inventor
A.瓦西尔耶夫
A.梅克思纳
J.R.雷德格雷夫
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 CN110574007A publication Critical patent/CN110574007A/zh
Application granted granted Critical
Publication of CN110574007B publication Critical patent/CN110574007B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • 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/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C19/00Digital stores in which the information is moved stepwise, e.g. shift registers
    • G11C19/38Digital stores in which the information is moved stepwise, e.g. shift registers two-dimensional, e.g. horizontal and vertical shift registers

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Image Processing (AREA)
  • Advance Control (AREA)

Abstract

描述了一种运行单元。运行单元包括算术逻辑单元(ALU)电路,ALU电路具有用以接收第一值的第一输入端和用以接收第二值的第二输入端。ALU电路包括用以确定第一值的绝对值并将该绝对值加到第二值的电路系统。第一输入端耦合到具有寄存器空间的第一数据路径和运行单元电路的另一ALU的输出端作为第一值的替代源。第二输入端耦合到具有寄存器空间的第二数据路径作为第二值的源。

Description

执行双输入值绝对值和求和操作的电路
技术领域
本发明的领域总体上涉及计算科学,更具体地,涉及一种执行双输入值绝对值和求和操作的电路。
背景技术
图像处理通常包含对组织成阵列的像素值的处理。这里,空间组织的二维阵列捕获图像的二维性质(附加尺寸可以包括时间(例如,二维图像序列)和数据类型(例如,颜色))。在通常场景下,成阵列的像素值由生成静止图像或帧序列以捕获运动图像的相机提供。传统的图像处理器通常处于两个极端的任一端。
第一极端作为在通用处理器或通用类处理器(例如,具有矢量指令增强的通用处理器)上运行的软件程序来执行图像处理任务。尽管第一极端通常提供高度通用的应用软件开发平台,但是它对较细粒度数据结构的使用加上相关开销(例如,指令获取和解码、片上和片外数据的处理、推测性运行)最终会导致在程序代码运行期间每单位数据消耗较多的能量。
第二、相对极端将固定功能硬连线电路系统应用于较大的数据块。直接应用于定制设计电路的较大(而不是较细粒度的)数据块的使用大大降低了每单位数据的功耗。然而,使用定制设计的固定功能电路系统一般会导致处理器能够执行的任务集有限。因此,第二极端缺乏广泛通用的编程环境(与第一极端相关联)。
提供高度通用的应用软件开发机会加上提高每单位数据功效的技术平台仍然是一个理想但缺失的解决方案。
发明内容
描述了一种运行单元。运行单元包括算术逻辑单元(arithmetic logic unit,ALU)电路,ALU电路具有用以接收第一值的第一输入端和用以接收第二值的第二输入端。ALU电路包括用以确定第一值的绝对值并将该绝对值加到第二值的电路系统。第一输入端耦合到具有寄存器空间的第一数据路径以及运行单元电路的另一ALU的输出端作为第一值的替代源。第二输入端耦合到具有寄存器空间的第二数据路径作为第二值的源。
附图说明
以下描述和附图用于说明本发明的实施例。在图中:
图1示出了模板处理器的高级视图;
图2涉及块匹配过程;
图3a、图3b、图3c和图3d也涉及块匹配过程;
图4示出了先前的ALU设计;
图5示出了改进的ALU设计;
图6示出了FINDMIN操作;
图7a、图7b、图7c、图7d也示出了FINDMIN操作;
图8示出了修改的计数前导零操作;
图9示出了图像处理器硬件架构的实施例;
图10a、图10b、图10c、图10d和图10e描绘了将图像数据解析成线组、将线组解析成薄片(sheet)以及在具有重叠模板的薄片上执行的操作;
图11a示出了模板处理器的实施例;
图11b示出模板处理器的指令字的实施例;
图12示出模板处理器内的数据计算单元的实施例;
图13a、图13b、图13c、图13d、图13e、图13f、图13g、图13h、图13i、图13j和图13k描绘了使用二维移位阵列和运行通道阵列来确定具有重叠模板的一对相邻输出像素值的示例;
图14示出了集成运行通道阵列和二维移位阵列的单元信元(unit cell)的实施例;
图15示出了示例性计算系统。
具体实施方式
A.二维图像处理器
如本领域所知,用于运行程序代码的基本电路结构包括运行级(executionstage)和寄存器空间。运行级包含用于运行指令的运行单元(例如,一个或多个算术逻辑单元(arithmetic logic units,ALU)、浮点单元、存储器访问单元等)。待运行的指令的输入操作数从寄存器空间(或存储器,如果不在寄存器空间中的话)提供给运行级。从运行级的指令运行生成的结果被写回到寄存器空间。
在传统处理器上运行软件线程需要通过运行级顺序运行一系列指令。最常见的是,从某种意义上说这些操作是“标量的”,这种意义指从单个输入操作数集中生成单个结果。然而,在“矢量”处理器的情况下,运行级对指令的运行将从多个输入操作数集中生成多个结果。
图1示出了独特的图像处理器架构100的高级视图,其包括耦合到二维移位寄存器阵列102的运行通道阵列101。这里,运行通道阵列中的每个运行通道可以被视为分立运行级,分立运行级包含执行由处理器100支持的指令集所需的运行单元。在各种实施例中,每个运行通道在同一机器周期中接收同一指令,以使得整个处理器作为二维单指令多数据(single instructionmultiple data,SIMD)处理器来操作。
在各种实施例中,每个运行通道在二维移位寄存器阵列102内的对应位置具有它自己的专用寄存器空间。例如,拐角运行通道103在拐角移位寄存器位置104中具有它自己的专用寄存器空间,拐角运行通道105在拐角移位寄存器位置106中具有它自己的专用寄存器空间,等等。这里,每个阵列位置中可以存在多个寄存器,从而为每个运行通道阵列提供多个专用寄存器。
例如,如果每个运行通道阵列在二维移位寄存器阵列中的它的对应位置具有四个寄存器R0、R1、R2、R3,则可以说二维移位寄存器阵列具有跨整个阵列的R0寄存器空间的第一平面、跨整个阵列的R1寄存器空间的第二平面、跨整个阵列的R2寄存器空间的第三平面和跨整个阵列的R3寄存器空间的第四平面。
此外,在各种实施例中,移位寄存器阵列102能够移位其内容,使得每个运行通道能够从其自己的寄存器空间直接操作在先前的机器周期期间驻留在另一运行通道的寄存器空间中的值。例如,+1水平移位使每个运行通道的寄存器空间从其最左边邻居的寄存器空间接收值。由于能够沿水平轴向左和向右移位值,以及沿垂直轴向上和向下移位值,处理器能够有效地处理图像数据的模板。
这里,如本领域所知,模板是图像表面区域的切片,其组成像素值被用作输入值,以确定驻留在图像表面区域中心的X,Y位置的输出像素值。作为示例,输出图像中特定像素位置的新值可以被计算为该特定像素位置居于其中心的输入图像的区域中的像素值的平均值。因此,如果模板具有3×3像素的尺寸,则特定像素位置可以对应于3×3像素阵列的中间像素,并且可以计算3×3像素阵列内所有9个像素的平均值。
根据图1的处理器100的各种操作实施例,运行通道阵列101的每个运行通道负责计算输出图像中特定位置的像素值。因此,继续上面提到的3×3模板平均示例,在初始加载输入像素数据和移位寄存器内八个移位操作的协调移位序列之后,运行通道阵列中的每个运行通道会将所有九个像素值接收到其本地寄存器空间中,其中该九个像素值是计算其对应像素位置的平均值所需的。因为图1的处理器架构特别擅长处理图像模板,所以它也可以被称为模板处理器。关于可能的模板处理器实施例和包括一个或多个这样的模板处理器的图像处理器实施例的更多细节将在下面的F章节中进一步提供。
B.块匹配例程
图2示出了块匹配例程的描绘。块匹配对于运动估计(例如,视频压缩)、图像稳定和图像融合算法(例如,曝光融合和时间噪声融合)特别有用。这里,在替代(例如,稍后)图像中寻找第一基础(例如,先前)图像中的指定特征。在图2的示例中,需要在替代图像中找到在基础图像中出现的块ABCD。为简单起见,假设在替代图像中没有其他像素具有所寻找的块(A、B、C、D)的任何值。
图3a至图3d示出了一种用于在具有如上面参照图1所述的二维运行通道阵列和二维移位寄存器阵列的图像处理器上执行块匹配的方法。这里,替代图像的像素保持在二维移位寄存器阵列中的寄存器空间(R0)的第一平面中。
正在寻找的基础图像中的特征的第一像素值(例如,“A”)被广播到所有运行通道。然后,对R0寄存器空间中的内容和沿着每个通道的值“A”计算绝对差302a(例如,绝对差操作计算|x–y|,其中x=A以及y=沿着每个通道的R0中的内容)。然后,将绝对差的结果存储在R1寄存器空间中。在一个实施例中,对于每个通道,R1最初被设置为等于0,并且绝对差被加到R1的内容中。然后,将相加的结果存储回R1。在一个实施例中,SIMD处理器的指令格式包括立即操作数,该立即操作数用于向每一个运行通道广播用来计算绝对差的基础图像的像素值A。这里,如果R0中的替代图像中的像素值匹配(或近似匹配)广播像素值,那么R1中的结果应该是(或接近)零(“0”)。R1中的所有其他结果应该基本上非零(“/0”)。
参考图3b,然后,替代图像在二维移位寄存器的R0平面中被移位一个单位,正在寻找的特征中的下一个像素值“B”被广播到所有运行通道,并且再次确定绝对差并将其加到存储在R1中的内容中。如此,每个通道执行“绝对差求和”(sum of absolute difference,SAD)操作。也就是说,对于每次迭代,首先,计算新广播的基础图像值(图3b的迭代的B)和R0中新移入的替代图像内容之间的绝对差。然后,第二,将绝对差的结果与先前的(多个)SAD操作的结果累积(加)到R1中(对于图3b的迭代,在R1中,将在图3b中计算的绝对差加到在图3a的第一迭代中计算的绝对差上)。这里,在完成用于图3b的迭代的SAD操作之后,已经具有两次连续像素匹配的特定运行通道阵列位置301在其R1寄存器空间中应该具有最低的结果值。更具体地,图3b的位置301(正在广播的像素值的特定次序与二维移位寄存器阵列的R0中的替代图像的特定扫描/移位运动对齐的位置)在图3b的迭代之后,在其R1寄存器空间中具有近似为零的值。
如在图3c和图3d中观察到的,该过程继续进行,其中每次下一次迭代会广播基础图像的下一个像素值,以特定的扫描次序来移位R0替代图像数据,并且沿着每个通道执行SAD操作,该SAD操作计算广播值和R0移入值之间的绝对差,然后在R1 302c、302d中将该绝对差加到在先SAD结果的累加上。在多次迭代(其中,该多次迭代足以广播所有要找的基础图像的图像像素并且足以在与所寻找的图像的大小相对应的区域上对应地移位R0中的替代图像)之后,理想地,在每个迭代周期中,运行通道阵列中只有一个位置301将会经历匹配。如此,在所有迭代已经完成之后,这个特定阵列位置301应该能够在其R1寄存器空间中保持零或接近零的值(或至少比其他运行通道小的值)。
然后在跨阵列中所有行的R1寄存器空间上运行“findmin(查找最小值)”操作。根据findmin操作的一个实施例,每行中的最低对应值保持在其行的每个位置。然后在跨阵列中所有列的R1寄存器空间上运行findmin操作。结果应该在每次迭代中标识出与基础图像匹配的像素,这些像素反过来又可以用于标识在替代阵列中所寻找的图像的精确位置。在下面本说明书的D章节中,将进一步提供findmin操作的实施例的讨论。
C.利用两个ALU操作的SAD指令
根据上面的示例,在替代图像的每一次移位和下一个基础图像值的广播之后,沿着每个运行通道发生的绝对差计算302a至302d的求和可以表达为:
R1<=|R0–BB|+R1
其中,R0是最近移位的替代图像值,BB是基础图像的下一个广播值,R1包含沿着同一运行通道进行的绝对差计算的所有在先求和的累加。结果也被写回R1。如此,更一般地,每个运行通道重复执行操作:
|x–y|+z
其中,结果存储在从其提供z输入操作数的同一寄存器空间(R1)中。为了最大化这种计算的性能,期望每个运行通道用减少的电路系统量和/或更少的电路系统操作来执行上述计算。例如,用更少的电路系统和/或更少的电路系统操作来执行SAD操作可以导致SAD计算的更高性能和/或降低的功耗。
图4示出了仅能够在三个ALU操作中执行上述SAD指令的运行通道ALU运行单元电路400(以下称为“运行单元”)的初始设计。如图4中观察到的,运行单元400包括第一算术逻辑单元(ALU)电路401和第二ALU电路402。如本领域所已知的,ALU电路(以下称为“ALU”)执行算术操作(例如,加法、减法、除法)和逻辑操作(例如,AND、OR,等)。运行单元400负责运行各种算术和逻辑程序代码指令,并且可以使用ALU 401、402中的一个或两个,这取决于正在运行这些指令中的哪一个。如图4中观察到的,第一ALU 401可以从二维移位寄存器阵列的通道的本地寄存器空间接收指令的第一输入操作数X,并且可以从同一本地寄存器空间接收指令的第二输入操作数Y。
第一ALU 401的输出可以用作第二ALU 402的输入值Q。第二ALU 402还可以从本地寄存器空间接收指令的第三输入操作数Z。第二ALU还可以从本地寄存器空间接收指令的第四输入操作数R,该第四输入操作数R被多路复用到第二ALU 402中替代来自第一ALU 401的Q输入值。运行单元400可以直接从执行指令的最终计算的一对ALU 401、ALU 402中的任何一个中提供该指令的结果。为了便于绘图,没有描绘运行单元400的许多各种其他特征,使得可以强调当下讨论的相关数据路径。
这里,运行单元400可以在两个ALU操作中执行三个输入ADD指令
x+y+z。
在这种情况下,第一ALU 401内的第一加法器403执行第一x+y加法。然后,来自第一加法器403的x+y结果作为输入值Q被传递给第二ALU402。输入值Q在第二ALU 402内被内部传递给第二加法器404。第二ALU402内的多路复用器405还被配置为选择输入操作数Z,其将Z呈现给第二加法器404。第二加法器404然后执行加法(x+y)+z。来自第二加法器404的结果作为三个输入ADD指令的结果从运行单元400呈现。因此,执行两个ALU操作(来自第一ALU401的一个操作和来自第二ALU 402的第二操作),以便执行三个输入ADD指令(作为单个指令)。
不幸的是,如上所述,图4的运行单元400只能够在两个指令中用三个ALU操作来执行SAD操作。这里,SAD操作可以表示为:
|x–y|+z
为了执行上述操作,第一ALU 401内的第一加法器403被配置为充当减法单元,该减法单元提供x-y作为其结果(而不是提供x+y作为其结果)。然后,包含来自第一加法器403的x-y结果的Q值被传递到第二ALU 402,并被呈现给第二加法器404。第二加法器404确定Q值的绝对值。
配置第二加法器404以执行绝对值计算包括:1)如果Q为正,则配置第二加法器404以执行计算0+Q;或者,2)如果Q为负,则配置第二加法器404以执行计算0–Q。这里,关于操作2),如本领域已知的,加法器可以被配置为通过例如操纵加法器的进位输入(例如,从0到1)和/或对其输入值之一执行逻辑反转来执行减法。请注意,两种计算都采用输入值=0。如此,当第二加法器404用于执行绝对值计算时(如在当前描述的SAD操作的情况下),多路复用器405被配置为选择0信道(而不是与如上面所述的三个输入ADD指令一样的Z信道)。加法器用以执行绝对值操作的这种传统使用可以被表征为ALU 402的单输入值操作。也就是说,在执行这种操作时,第二ALU 402仅接收一个输入值Q。重要的是,第二ALU 402的操作仅完成|Q|=|x–y|(绝对差)的计算。这里,来自第二ALU 402的|Q|结果从运行单元400被写入到外部寄存器空间。
为了完成SAD操作,必须执行另一个ALU操作来对|x–y|和z(=|Q|+z)求和。如此,运行第二后续ADD指令,该ADD指令从寄存器空间读取|Q|项和z值作为输入操作数,并将它们提供给例如第一ALU 401,以执行最终的|x–y|+z加法。如此,执行SAD操作需要三个ALU操作:第一、求取差值x–y;第二、求取该差值的绝对值|x–y|;和第三、执行|x–y|和z的加法。前两个操作消耗第一指令,第三个操作消耗第二指令。通过执行三个ALU操作(和两个指令)来计算单个SAD操作,可以消耗3N-1个ALU操作来执行N个像素的块的块匹配例程。
图5示出了改进的ALU运行单元500,其能够在单个指令中用两个ALU操作而不是基于两个指令的三个ALU操作来执行SAD操作。这里,回顾对图4的运行单元400的讨论,第二加法器404传统上被配置为仅通过向第二加法器404提供从多路复用器405内部生成的0来确定绝对值。相比之下,图5的改进设计用输入操作数z取代0值,其中该输入操作数z是SAD指令的最后加数。更具体地,第二ALU 502中的第二加法器504被配置为:1)如果Q为正,则执行操作z+Q;或者,2)如果Q为负,则执行操作z–Q。因此,第二加法器504的结果是|Q|+z=|x–y|+z,这对应于SAD指令的结果。注意,在这种情况下,当执行包括绝对值的操作时,第二ALU502接收两个输入值(Q和Z),这不同于图4的先前设计,在图4的先前设计中,当执行绝对值操作时,第二ALU 402仅接收一个输入值(Q)。
如此,以两个ALU操作和一条指令来执行SAD操作,而不是以三个ALU操作和两条指令。与图4的运行单元400相比,这相当于ALU计算效率提高了大约33%(例如,对于具有N个像素的块图像,可以消耗2N个ALU计算(而不是与图4的运行单元400一样消耗3N-1个计算))。在运行通道包括具有两个类似于图5的设计的ALU的实施例中,可以在总共N个ALU计算中潜在地执行具有N个像素的块图像的块匹配算法。
在各种实施例中,如上所述,第二ALU 502的前述绝对值功能被实施为双输入值功能,而不是单输入值功能。也就是说,当第二加法器执行绝对值功能时,内部生成的0不被提供给第二加法器504。相反,为了用加法器504执行通用绝对值操作,例如,为了运行绝对值指令(absolute value instruction,ABS)而不是SAD指令,值0作为ABS指令的Z输入操作数从寄存器空间被提供到ALU 502(值0也可以在机器内被内部生成并且被加载到寄存器空间中或者直接被提供到运行单元和/或ALU)。此外,ALU 502的输入值(其绝对值将由ABS指令来确定),例如,R(例如,而不是Q),作为ABS指令的第二输入操作数从寄存器空间多路复用到第二算术逻辑单元502中。这里,向第二ALU 502呈现Z=0使加法器504做出类似于传统加法器实施的绝对值功能的行为。也就是说,加法器504将:1)如果R为正,则执行操作0+R;或者,2)如果R为负,则执行操作0–R。因此,在这样的实施例中,由第二ALU 502执行的绝对值操作,无论是对于SAD指令还是对于ABS指令,本质上被实施为两个输入值操作,而不是与上面关于图4所讨论的传统实施方式一样的单输入值操作。
在又一些实施例中,多路复用器404可以在第二加法器502中被实例化,使得,例如,除了那些用于支持SAD指令(诸如ABS指令)的绝对值操作之外的绝对值操作作为传统单输入操作数值操作来操作,其中该传统单输入操作数值操作依赖于内部生成值0。在又一些实施例中,多路复用器404可以存在于第二加法器中,以例如,支持单输入值和双输入值绝对操作(多路复用器为前者选择0输入,为后者选择z输入)。在其他或组合的实施例中,如上所述的两个输入值绝对值功能可用于支持一种新的绝对值指令ABS*,其中运行单元500将操作|R|+Z作为单个指令来执行,其中Z可以是任何输入操作数值(并且不必为0)。
在各种实施例中,图5的运行单元500仍然可以支持如以上关于图4所述的SAD操作(三个ALU操作而不是两个)。这样的操作可以是有用的,例如,累加求和可以消耗或即将消耗比机器位宽更多的位。这里,第一和第二ALU操作(其确定|x-y|)可以用等于机器位宽的较低精度来计算,以及第三ALU操作将两个或更多寄存器中的累加列成表格,以提供大于机器本地位宽的累加值。
D.行/列Findmin操作
图6和图7a至图7d涉及行/列查找最小值操作,该行/列查找最小值操作也可以在具有二维运行通道阵列和相应的二维移位寄存器的图像处理器上执行。行/列查找最小值操作对于统计计算和块匹配后处理特别有用,如上面章节B所述。
参考图6,为简单起见,仅示出了运行阵列/寄存器阵列的单个行。然而,在实际实施方式中,列查找最小值操作可以在实施行查找最小值操作的同一处理器上实施。此外,对于寄存器阵列中的任意数量的行(或列)(包括最多所有行/列),可以同时找到行(或列)的最小。此外,行/列的尺寸仅示出为8个位置宽,而在实际实施方式中,运行通道阵列和移位寄存器阵列可以是16×16或甚至更大。
如图6所观察到的,行查找最小值操作的结果对应于同一行内所有值当中的最小值及其在该行中的位置/定位(也称为其索引)。同样,列查找最小值操作的结果对应于同一列内所有值当中的最小值及其在该列中的位置/定位。如同前面章节中详细讨论的行求和操作以及前缀求和操作一样,行/列查找最小值操作采用了二维移位寄存器,该二维移位寄存器可以向阵列边缘位置701滚动移位或从阵列边缘位置701滚动移位。
图7a至图7d示出了行前缀操作的机器级操作的实施例。最初,如图7a所示,在每个运行通道的相应R0寄存器位置中,一行加载有数据值A0至A7。此外,每行位置的索引被加载到每个运行通道的R1寄存器空间中。
在图7b所描绘的机器级操作的第一次迭代中,R0和R1寄存器位置的内容被移位一个单位到相邻运行通道的寄存器空间的R2和R3寄存器空间中。然后在每个运行通道内比较R0和R2寄存器的相应值。该比较的最小值及其对应的索引存储在R0和R1寄存器空间中。也就是说,如果R0值小于R2值,则R0和R1寄存器维持其原始内容。然而,如果R2值小于R0值,则R2值被写入R0并且R3值被写入R1。这具有将比较的最小值保持在R0中以及将其索引保持在R1中的效果。
在图7c所描绘的机器级操作的第二次迭代中,R0和R1寄存器位置的内容被移位两个单位到下游运行通道的R2和R3寄存器空间中。因此,随着下一次迭代,移位量再次加倍。然后在每个运行通道内比较R0和R2寄存器的相应的值。该比较的最小值及其对应的索引存储在R0和R1寄存器空间中。这具有将从每个运行通道中已经执行的两次比较所观察到的最小值保持在R0中以及将其索引保持在R1中的效果。
在图7d中观察到的机器级操作的第三次迭代中,R0和R1寄存器位置的内容被移位四个单位到下游运行通道的R2和R3寄存器空间中。然后在每个运行通道内比较R0和R2寄存器的相应的值。该比较的最小值及其对应的索引存储在R0和R1寄存器空间中。这具有将从每个运行通道中已经执行的所有三次比较观察到的最小值保持在R0中以及将其索引保持在R1中的效果。
在第三次迭代之后,查找最小值操作完成,因为每个运行通道将在其R0寄存器空间中具有整行的最小值,并在其R1寄存器空间中具有其对应的索引(最初提供有最小值的行位置将在其R1寄存器空间中找到其自己的行位置)。如果该行的尺寸为16,则仅需要基于移位寄存器下游的R0和R1寄存器内容移位8个位置的再一个操作集,以在所有16个运行通道中提供所有16个不同位置的最小值。
图8示出了上述方法论(methodology)。该方法包括在算术逻辑单元电路的第一输入端接收第一值,以及在算术逻辑单元电路的第二输入端接收第二值801。该方法包括向算术逻辑单元电路内的加法器电路提供第一值和第二值802。该方法包括用加法器电路确定第一值的绝对值,以及在加法器电路的输出端提供第二值和第一值的绝对值之和803。
E.图像处理器和模板处理器实施例
图9示出了以硬件实施的图像处理器的架构900的实施例。图像处理器可以是例如编译器的目标,该编译器将为模拟环境中的虚拟处理器编写的程序代码转换成实际上由硬件处理器运行的程序代码。如在图9中观察到的,架构900包括通过网络904(例如,包括片上交换网络、片上环形网络或其他类型的网络的片上网络(network on chip(NOC))互连到多个模板处理器单元902_1至902_N以及对应的薄片生成器(sheet generator)单元903_1至903_N的多个线缓冲器单元901_1至901_M。在一个实施例中,任何线缓冲器单元可以通过网络904连接到任何薄片生成器和对应的模板处理器。
在一个实施例中,程序代码被编译并加载到对应的模板处理器902上,以执行软件开发者早前定义的图像处理操作(例如,取决于设计和实施方式,程序代码也可以加载到模板处理器的相关联的薄片生成器903上)。在至少一些情况下,图像处理流水线(pipeline)可以通过将第一流水线级的第一内核程序加载到第一模板处理器902_1中、将第二流水线级的第二内核程序加载到第二模板处理器902_2中等来实现。其中第一内核执行流水线第一级的功能,第二内核执行流水线第二级的功能等等,并且安装了附加的控制流方法以将输出图像数据从流水线的一级传递到流水线的下一级。
在其他配置中,图像处理器可以被实现为具有两个或更多模板处理器902_1、902_2的并行机器,该模板处理器902_1、902_2操作相同的内核程序代码。例如,图像数据的高密度和高数据速率流可以通过跨多个模板处理器的扩展帧来处理,其中每个模板处理器执行相同的功能。
又在其他配置中,通过用它们自己的相应的程序代码内核配置相应的模板处理器,并且将适当的控制流挂钩配置在硬件中,基本上任何内核的DAG都可以被加载到硬件处理器上,以在DAG设计中将图像从一个内核直接输出到下一个内核的输入端。
作为一般流程,图像数据帧由宏I/O(input/output,输入/输出)单元905接收,并以逐帧的方式传递给一个或多个线缓冲器单元901。特定的线缓冲器单元将其图像数据帧解析成更小的图像数据区域,称为“线组(line group)”,以及然后通过网络904将线组传递给特定的薄片生成器。例如,完整或“完全”的单数线组可以由帧的多个连续完整行或列的数据组成(为了简单起见,本说明书将主要指连续的行)。薄片生成器进一步将图像数据的线组解析成更小的图像数据区域,称为“薄片”,并将该薄片呈现给其对应的模板处理器。
在图像处理流水线或DAG流具有单个输入的情况下,通常,输入帧被导向同一线缓冲器单元901_1,该线缓冲器单元901_1将图像数据解析成线组,并将线组导向薄片生成器903_1,该薄片生成器903_1的对应模板处理器902_1正在运行流水线/DAG中的第一内核的代码。在模板处理器902_1完成对其处理的线组的操作后,薄片生成器903_1将输出线组发送到“下游”线缓冲器单元901_2(在一些使用情况下,输出线组可以被发送回早前已经发送输入线组的同一线缓冲器单元901_1)。
然后,一个或多个“消费者”内核从下游线缓冲器单元901_2接收由第一模板处理器902_1生成的图像数据,其中该一个或多个“消费者”内核代表在它们自己的相应的其他薄片生成器和模板处理器(例如,薄片生成器903_2和模板处理器902_2)上运行的流水线/DAG中的下一级/操作。以这种方式,在第一模板处理器上操作的“生产者”内核将其输出数据转发到在第二模板处理器上操作的“消费者”内核,在第二模板处理器上,消费者内核在生产者内核之后执行与整个流水线或DAG的设计一致的下一任务集。
模板处理器902被设计成同时操作图像数据的多个重叠模板。多个重叠模板和模板处理器的内部硬件处理能力有效地决定了薄片的大小。这里,在模板处理器902内,运行通道阵列协同(in unison)操作,以同时处理由多个重叠模板覆盖的图像数据表面区域。
如下面将更详细描述的,在各种实施例中,图像数据薄片被加载到模板处理器902内的二维寄存器阵列结构中。使用薄片和二维寄存器阵列结构被认为是通过将大量数据移动到大量寄存器空间中来有效地提供功耗改进,例如,单次加载操作,随后由运行通道阵列直接对数据执行处理任务。此外,运行通道阵列和对应的寄存器阵列的使用提供了易于编程/配置的不同模板大小。
图10a至图10e高级地示出了线缓冲器单元901的解析活动、薄片生成器单元903的精细粒度解析活动以及耦合到薄片生成器单元903的模板处理器902的模板处理活动的实施例。
图10a描绘了图像数据1001的输入帧的实施例。图10a还描绘了模板处理器被设计为对其进行操作的三个重叠模板1002(每个重叠模板具有3像素×3像素的尺寸)的轮廓。每个模板分别为其生成输出图像数据的输出像素以纯黑色而突出显示。为简单起见,三个重叠模板1002被描绘为仅在垂直方向重叠。应当认识到,实际上模板处理器可以被设计成在垂直和水平两个方向上都具有重叠模板。
由于模板处理器内的垂直重叠模板1002,如在图10a中所观察到的,在帧内存在单个模板处理器可以操作的宽带图像数据。如将在下面更详细讨论的,在一个实施例中,模板处理器以从左到右的方式处理图像数据的重叠模板内的数据(然后以从上到下的次序,对下一线集进行重复)。因此,随着模板处理器继续向前推进它们的操作,纯黑色的输出像素块的数量将向右水平增长。如上所述,线缓冲器单元901负责解析来自输入帧(incomingframe)的输入图像数据的线组,该输入图像数据的线组足以使模板处理器在更多即将到来的周期内进行操作。线组的示例性描绘被示为阴影区域1003。在一个实施例中,线缓冲器单元901可以包含(comprehend)向/从薄片生成器发送/接收线组的不同动态。例如,根据称为“全组(full group)”的一种模式,图像数据的完整全宽行在线缓冲器单元和薄片生成器之间传递。根据称为“虚高(virtually tall)”的第二种模式,线组最初通过全宽行的子集传递。然后,其余的行以较小(小于全宽)的片段顺序传递。
随着输入图像数据的线组1003已经由线缓冲器单元定义并被传递到薄片生成器单元,薄片生成器单元进一步将线组解析成更精细的薄片,该薄片更精确地符合模板处理器的硬件限制。更具体地,如下文将更详细描述的,在一个实施例中,每个模板处理器由二维移位寄存器阵列组成。二维移位寄存器阵列基本上将图像数据移位到运行通道阵列的“下方”,其中移位的模式使得每个运行通道对它自己的相应模板内的数据进行操作(即,每个运行通道对它自己的信息模板进行处理,以生成该模板的输出)。在一个实施例中,薄片是输入图像数据的表面区域,其“填充”或以其他方式加载到二维移位寄存器阵列中。
如下面将更详细描述的,在各种实施例中,实际上存在可以在任何周期上移位的多层二维寄存器数据。为了方便起见,本说明书的大部分将简单地使用术语“二维移位寄存器”等来指代具有一层或多层这种可以移位的二维寄存器数据的结构。
因此,如在图10b中所观察到的,薄片生成器从线组1003解析初始薄片1004,并将其提供给模板处理器(这里,数据薄片对应于通常由附图标记1004标识的阴影区域)。如在图10c和图10d中所观察到的,模板处理器通过在薄片上以从左到右的方式有效地移动重叠模板1002来对输入图像数据的薄片进行操作。如图10d中所示,可以根据薄片内的数据计算输出值的像素数量被用尽(没有其他像素定位可以具有根据薄片内的信息而确定的输出值)。为了简单起见,图像的边界区域已被忽略。
如在图10e中所观察到的,薄片生成器然后为模板处理器提供下一张薄片1005以继续操作。注意,模板在下一张薄片上开始操作时的初始定位是从第一张薄片上的耗尽点向右的下一个进程(如图10d先前描绘的)。对于新薄片1005,模板将简单地继续向右移动,因为模板处理器以与处理第一薄片相同的方式对新薄片进行操作。
注意,由于输出像素位置周围的模板的边界区域,第一薄片1004的数据和第二薄片1005的数据之间存在一些重叠。该重叠可以简单地通过薄片生成器两次重新发送重叠数据来处理。在替代实施方式中,为了将下一薄片馈送到模板处理器,薄片生成器可以继续只向模板处理器发送新数据,并且模板处理器重用来自先前薄片的重叠数据。
图11示出了模板处理器架构1100的实施例。如图11中所观察到的,模板处理器包括数据计算单元1101、标量处理器1102和相关联的存储器1103以及I/O单元1104。数据计算单元1101包括运行通道阵列1105、二维移位阵列结构1106以及与阵列的指定行或列相关联的独立随机存取存储器1107。
I/O单元1104负责将从薄片生成器接收的“输入”薄片数据加载到数据计算单元1101中,并将来自模板处理器的“输出”薄片数据存储到薄片生成器中。在一个实施例中,将薄片数据加载到数据计算单元1101中需要将接收到的薄片解析成图像数据的行/列,并将图像数据的行/列加载到运行通道阵列的行/列的二维移位寄存器结构1106或相应的随机存取存储器1107中(下面将更详细地描述)。如果薄片最初被加载到存储器1107中,则运行通道阵列1105内的各个运行通道然后可以在适当的时候(例如,在对薄片数据进行操作之前作为加载指令)将薄片数据从随机存取存储器1107加载到二维移位寄存器结构1106中。当完成将薄片数据加载到寄存器结构1106中时(无论是直接从薄片生成器还是从存储器1107),运行通道阵列1105的运行通道对数据进行操作,并最终将完成的数据作为薄片直接“写回”到薄片生成器,或者随机存取存储器1107中。如果是后者,I/O单元1104从随机存取存储器1107中取出数据以形成输出薄片,然后将该输出薄片转发给薄片生成器。
标量处理器1102包括程序控制器1109,该程序控制器1109从标量存储器1103读取模板处理器的程序代码的指令,并将指令发布到运行通道阵列1105中的运行通道。在一个实施例中,单个相同的指令被广播到阵列1105内的所有运行通道,以实行来自数据计算单元1101的类似SIMD的行为。在一个实施例中,从标量存储器1103读取并发布到运行通道阵列1105的运行通道的指令的指令格式包括超长指令字(very-long-instruction-word,VLIW)类型格式,该格式的每个指令包括多于一个的操作码。在另一个实施例中,VLIW格式包括引导由每个运行通道的ALU执行的数学功能的ALU操作码(如下所述,在一个实施例中,其可以指定多于一个的传统ALU操作)和引导指定运行通道或运行通道集的存储器操作的存储器操作码。
术语“运行通道”是指能够运行指令的一个或多个运行单元集(例如,能够运行指令的逻辑电路系统)。然而,在各种实施例中,运行通道可以包括更多类似处理器的功能,而不仅仅是运行单元。例如,除了一个或多个运行单元之外,运行通道还可以包括对接收到的指令进行解码的逻辑电路系统,或者,在更多类似MIMD的设计的情况下,包括获取和解码指令的逻辑电路系统。关于类似MIMD的方法,尽管本文主要描述了集中式程序控制方法,但是可以在各种替代实施例中实施更加分布式的方法(例如,包括在阵列1105的每个运行通道内的程序代码和程序控制器)。
运行通道阵列1105、程序控制器1109和二维移位寄存器结构1106的组合为大范围的可编程功能提供了广泛地适应性的/可配置的硬件平台。例如,假设各个运行通道能够执行各种各样的功能并且能够容易地访问任何输出阵列位置附近的输入图像数据,则应用软件开发者能够对具有广范围的不同功能能力以及尺寸(例如,模板大小)的内核进行编程。
除了充当由运行通道阵列1105操作的图像数据的数据存储装置之外,随机存取存储器1107还可以保存一个或多个查找表。在各种实施例中,一个或多个标量查找表也可以在标量存储器1103内被实例化。
标量查找包括将来自相同索引、来自相同查找表的相同数据值传递到运行通道阵列1105内的运行通道中的每一个。在各种实施例中,上述VLIW指令格式被扩展为还包括标量操作码,该标量操作码将由标量处理器执行的查找操作引导到标量查找表中。指定用于与操作码一起使用的索引可以是立即操作数,也可以从其他数据存储位置获取。无论如何,在一个实施例中,从标量存储器内的标量查找表中查找基本上包括在相同的时钟周期期间向运行通道阵列1105内的所有运行通道广播相同的数据值。关于查找表的使用和操作的附加细节将在下面进一步提供。
图11b总结了上面讨论的(多个)VLIW指令字实施例。如在图11b中所观察的,VLIW指令字格式包括三个独立指令的字段:1)由标量处理器运行的标量指令1151;2)由运行通道阵列内的相应ALU以SIMD方式广播和运行的ALU指令1152;以及,3)以部分SIMD方式广播和运行的存储器指令1153(例如,如果运行通道阵列中沿着同一行的运行通道共享同一随机存取存储器,则来自不同行中的每一行的一个运行通道实际上执行该指令(存储器指令1153的格式可以包括标识来自每一行的哪个运行通道运行该指令的操作数))。
还包括一个或多个立即操作数的字段1154。可以在指令格式中标识指令1151、1152、1153中的哪一个使用哪一个立即操作数信息。指令1151、1152、1153中的每一个还包括它们自己相应的输入操作数和结果信息(例如,用于ALU操作的本地寄存器和用于存储器访问指令的本地寄存器和存储器地址)。在一个实施例中,在运行通道阵列内的运行通道运行其他指令1152、1153中的任一个之前,标量处理器运行标量指令1151。也就是说,VLIW字的执行包括第一周期,标量指令1151在该第一周期运行,随后是第二周期,其它指令1152、1153可以在该第二周期运行(注意,在各种实施例中,指令1152和1153可以并行运行)。
在一个实施例中,由标量处理器运行的标量指令包括命令,该命令被发布到薄片生成器,以将薄片从/向数据计算单元的存储器或2D移位寄存器加载/存储。这里,薄片生成器的操作可以取决于线缓冲器单元或其他变量的操作,这些变量妨碍运行前对薄片生成器完成标量处理器发布的任何命令所需的周期数的理解。如此,在一个实施例中,其标量指令1151对应于或以其他方式导致命令被发布到薄片生成器的任何VLIW字还包括在另外两个指令字段1152、1153中的无操作(no-operation,NOOP)指令。然后,程序代码进入指令字段1152、1153的NOOP指令循环,直到薄片生成器完成向/从数据计算单元的加载/存储。这里,在向薄片生成器发布命令时,标量处理器可以设置互锁寄存器的位,在完成该命令时薄片生成器重置该互锁寄存器的位。在NOOP循环期间,标量处理器监控互锁位的位。当标量处理器检测到薄片生成器已经完成其命令时,再次开始正常执行。
图12示出了数据计算组件1201的实施例。如在图12中所观察的,数据计算组件1201包括逻辑上定位于二维移位寄存器阵列结构1206“上方”的运行通道阵列1205。如上所讨论,在各种实施例中,由薄片生成器提供的薄片图像数据被加载到二维移位寄存器1206中。然后,运行通道对来自寄存器结构1206的薄片数据进行操作。
运行通道阵列1205和移位寄存器结构1206相对于彼此固定在位置上。然而,移位寄存器阵列1206内的数据以策略性和协调性的方式移位,以使得运行通道阵列中的每个运行通道处理数据内的不同模板。如此,每个运行通道确定正在生成的输出薄片中的不同像素的输出图像值。从图12的架构应该清楚,重叠模板不仅垂直排列,而且水平排列,因为运行通道阵列1205包括垂直相邻的运行通道以及水平相邻的运行通道。
数据计算单元1201的一些显著的架构特征包括具有比运行通道阵列1205更宽尺寸的移位寄存器结构1206。也就是说,在运行通道阵列1205之外存在寄存器的“晕环(halo)”1209。尽管晕环1209被示出存在于运行通道阵列的两侧,取决于实施方式,晕环可以存在于运行通道阵列1205的更少(一)或更多(三或四)侧。晕环1205用于当数据在运行通道1205“下方”移位时,为溢出到运行通道阵列1205的边界之外的数据提供“溢出”空间。作为简单的情况,当模板最左边的像素被处理时,以运行通道阵列1205的右边缘为中心的5x5模板将需要更靠右的四个晕环寄存器位置。为了便于绘图,图12示出了晕环右侧的寄存器仅具有水平移位连接,且晕环底侧的寄存器仅具有垂直移位连接,而在标称实施例中,任一侧(右侧、底侧)的寄存器都具有水平和垂直连接。在各种实施例中,晕环区域不包括用于运行图像处理指令的对应运行通道逻辑(例如,不存在ALU)。然而,各个存储器存取单元(M)存在于每个晕环区域位置中,使得各个晕环寄存器位置可以单独地从存储器加载数据并将数据存储到存储器。
附加溢出空间由随机存取存储器1207提供,随机存取存储器1207耦合到阵列中的每一行和/或每一列或者其部分(例如,随机存取存储器可以被分派给运行通道阵列的在行方向跨越4个运行通道以及在列方向跨越2个运行通道的“区域”。为简单起见,该应用其余部分将主要参考基于行和/或列的分配方案)。这里,如果运行通道的内核操作要求它处理二维移位寄存器阵列1206之外的像素值(这是一些图像处理例程可能需要的),则图像数据平面能够进一步溢出,例如,从晕环区域1209溢出到随机存取存储器1207中。例如,考虑6X6模板,其中硬件在运行通道阵列右边缘的运行通道右侧仅包括四个存储元件的晕环区域。在这种情况下,需要将数据进一步向右移动到晕环1209的右边缘的右边,以完全处理模板。然后,移动到晕环区域1209之外的数据将溢出到随机存取存储器1207。图11的随机存取存储器1207和模板处理器的其他应用将在下面进一步提供。
图13a至图13k演示了图像数据在如上所述的运行通道阵列“下方”的二维移位寄存器阵列内移位的方式的工作示例。如图13a中观察到的,二维移位阵列的数据内容在第一阵列1307中描绘出,并且运行通道阵列由帧1305描绘出。此外,简单描绘了运行通道阵列内的两个相邻运行通道1310。在这种简化描绘1310中,每个运行通道包括寄存器R1,该寄存器R1可以从移位寄存器接收数据,从ALU接收数据(例如,充当跨周期的累加器),或将输出数据写入输出目的地。
在本地寄存器R2中,每个运行通道在二维移位阵列中还具有在其“下方”的可用的内容。因此,R1是运行通道的物理寄存器,而R2是二维移位寄存器阵列的物理寄存器。运行通道包括可以对R1和/或R2提供的操作数进行操作的ALU。如下文将更详细描述的,在一个实施例中,移位寄存器实际上是用每个阵列位置的多个(“深度”)存储元件/寄存器元件来实施的,但是移位活动限于存储元件的一个平面(例如,每个周期只有存储元件的一个平面可以移位)。图13a至图13k将这些较深的寄存器位置之一描绘成用于存储来自相应的运行通道的结果X。为了便于说明,较深的结果寄存器被绘制在其对应寄存器R2的旁边,而不是下方。
图13a至图13k侧重于两个模板的计算,该模板的中心位置与运行通道阵列内所描绘的一对运行通道定位1311对齐。为了便于说明,该对运行通道1310被绘制成水平相邻,而实际上,根据以下示例,它们是垂直相邻。
如最初在图13a中所观察到的,运行通道以它们的中心模板位置为中心。图13b示出了由两个运行通道运行的目标代码。如在图13b中所观察到的,两个运行通道的程序代码使得移位寄存器阵列内的数据向下移位一个位置并向右移位一个位置。这将两个运行通道与它们相应的模板的左上角对齐。然后,程序代码将位于它们相应的位置(R2)的数据加载到R1。
如在图13c中所观察到的,程序代码接下来使得该对运行通道将移位寄存器阵列内的数据向左移位一个单位,这使得每个运行通道相应位置右侧的值被移位到每个运行通道的位置。然后将R1的值(先前的值)与已经移位到运行通道位置(R2)的新值相加。结果写入到R1。如在图13d中所观察到的,重复上述与图13c所述相同的过程,这使得结果R1现在包括上运行通道中的值A+B+C和下运行通道中的值F+G+H。此时,两个运行通道都已经处理了它们相应的模板的上一行。注意,如果在运行通道阵列左侧存在晕环区域,则溢出到运行通道阵列左侧的晕环区域,或者如果在运行通道阵列左侧不存在晕环区域,则溢出到随机存取存储器。
如在图13e中所观察到的,接下来,程序代码使移位寄存器阵列内的数据向上移位一个单元,这使得两个运行通道与它们相应模板的中间行的右边缘对齐。两个运行通道的寄存器R1当前包括模板的顶行和中间行的最右边值之和。图13f和图13g演示了跨两个运行通道模板的中间行向左移动的继续过程。累积相加继续进行,以使得在图13g的处理结束时,两个运行通道都包括它们相应模板的顶行和中间行的值之和。
图13h示出了将每个运行通道与其对应模板的最低行对齐的另一种移位。图13i和图13j示出了在两个运行通道的模板过程中继续移位以完成处理。图13k示出了将每个运行通道与其在数据阵列中的正确位置对齐并将结果写入其中的附加移位。
在图13a至图13k的示例中,注意,用于移位操作的目标代码可以包括指令格式,该指令格式标识以(X,Y)坐标表示的移位的方向和幅度。例如,向上移位一个位置的目标代码可以用目标代码表示为SHIFT 0,+1。作为另一个示例,向右移位一个位置可以用目标代码表示为SHIFT+1,0。在各种实施例中,也可以在目标代码中指定更大幅度的移位(例如,SHIFT 0,+2)。这里,如果2D移位寄存器硬件仅支持每个周期移位一个位置,则指令可以被机器解释为要求多个周期运行,或者,2D移位寄存器硬件可以被设计为支持每个周期移位多于一个位置。后面的实施例将在下面进一步详细描述。
图14示出了用于运行通道和对应的移位寄存器结构的单元信元(cell)的另一种更详细的描绘(在各种实施例中,晕环区域中的寄存器不包括对应的运行通道,而是包括存储器单元)。在一个实施例中,运行通道和与运行通道阵列中的每个位置相关联的寄存器空间通过在运行通道阵列的每个节点处实例化在图14中所观察到的电路系统来实施。如在图14中所观察到的,单元信元包括耦合到由四个寄存器R2至R5组成的寄存器堆(registerfile)1402的运行通道1401。在任何周期期间,运行通道1401可以从寄存器R1至R5中的任何一个读取或向其写入。对于要求两个输入操作数的指令,运行通道可以从R1到R5中的任何一个检索该两个操作数。
在一个实施例中,二维移位寄存器结构通过允许,在单个周期期间,寄存器R2至R4中的任一个(仅一个)的内容通过输出多路复用器1403被“移出”到其邻居的寄存器堆中的一个中,并且如果其邻居通过输入多路复用器1404从对应的一个“移入”的内容来取代寄存器R2至R4中的任一个(仅一个)的内容来实施,以使得邻居之间的移位在同一方向上(例如,所有运行通道向左移位,所有运行通道向右移位,等)。尽管同一寄存器的内容被移出并被在同一周期移入的内容取代可能是常见的,但是多路复用器布置1403、1404允许在同一周期期间同一寄存器堆内的不同移位源和移位目标寄存器。
如图14所描绘,注意,在移位序列期间,运行通道将内容从其寄存器堆1402移出到其左面、右面、顶面和底面邻居中的每一个。结合相同的移位序列,运行通道也将内容从其左面、右面、顶面和底面邻居中的特定一个移位到其寄存器堆中。同样,对于所有运行通道,移出目标和移入源应该与相同的移位方向一致(例如,如果移出是向右面邻居,则移入应该是从左面邻居)。
尽管在一个实施例中,每个周期每个运行通道只允许移位一个寄存器的内容,但是其他实施例可以允许多于一个寄存器的内容被移入/移出。例如,如果在图14中观察到的多路复用器电路系统1403、1404的第二实例被合并到图14的设计中,则两个寄存器的内容可以在同一周期期间中移出/移入。当然,在每个周期只允许移位一个寄存器的内容的实施例中,通过在数学操作之间的移位消耗更多的时钟周期,可以在数学操作之间发生来自多个寄存器的移位(例如,通过在数学操作之间消耗两个移位操作,可以在数学操作之间移位两个寄存器的内容)。
如果在移位序列期间,运行通道的寄存器堆中少于全部的内容被移出,请注意,每个运行通道的未移出寄存器的内容保持不变(不移位)。如此,在移位周期,没有被移入内容取代的任何未移位内容保持在运行通道的本地。在每个运行通道中观察到的存储器单元(“M”)用于从/向与运行通道阵列内的运行通道的行和/或列相关联的随机存取存储器空间加载/存储数据。这里,M单元充当标准M单元,因为它通常用于加载/存储不能从/向运行通道自己的寄存器空间加载/存储的数据。在各种实施例中,M单元的主要操作是将数据从本地寄存器写入存储器,并且从存储器读取数据并将其写入本地寄存器。
关于由硬件运行通道1401的ALU单元支持的ISA操作码,在各种实施例中,由硬件ALU支持的数学操作码包括,例如,ADD、SUB、MOV、MUL、MAD、ABS、ABS*、DIV、SHL、SHR、MIN/MAX、SEL、AND、OR、XOR、NOT、CLAZ、FINDMIN和SAD。如上所述,存储器访问指令可以由运行通道1401运行,以从/向其相关联的随机访问存储器获取/存储数据。另外,硬件运行通道1401支持移位操作指令(右、左、上、下),以在二维移位寄存器结构内移位数据。如上所述,程序控制指令主要由模板处理器的标量处理器执行。
F.实施方式实施例
需要指出的是,上述各种图像处理器架构特征不必局限于传统意义上的图像处理,因此可以应用于可能(或可能不)会导致图像处理器被重新表征的其他应用。例如,如果上述各种图像处理器架构特征中的任何一个将用于动画的创建和/或生成和/或渲染,而不是实际相机图像的处理,则图像处理器可以被表征为图形处理单元。此外,上述图像处理器架构特征可以应用于其他技术应用,诸如视频处理、视觉处理、图像识别和/或机器学习。以这种方式应用,图像处理器可以与更通用的处理器(例如,是计算系统的CPU或作为计算系统的CPU的一部分)集成(例如,作为协处理器),或者可以是计算系统内的独立处理器。
以上讨论的硬件设计实施例可以体现在半导体芯片内和/或作为最终针对半导体制造工艺的电路设计的描述。在后者的情况下,这样的电路描述可以采取(例如,VHDL或Verilog)寄存器传输级(register transfer level,RTL)电路描述、栅极级电路描述、晶体管级电路描述或掩模描述或其各种组合的形式。电路描述一般体现在计算机可读存储介质(诸如,CD-ROM或其他类型的存储技术)上。
从前面的章节中可以看出,如上所述的图像处理器可以以硬件的方式体现在计算机系统上(例如,作为处理来自手持设备的相机的数据的手持设备的系统级芯片(Systemon Chip,SOC)的一部分)。在图像处理器被体现为硬件电路的情况下,注意,由图像处理器处理的图像数据可以直接从相机接收。这里,图像处理器可以是分立相机的一部分,或者是具有集成相机的计算系统的一部分。在后者的情况下,图像数据可以直接从相机或从计算系统的系统存储器接收(例如,相机将其图像数据发送到系统存储器而不是图像处理器)。还要注意,前面章节中描述的许多特征可能适用于图形处理器单元(其渲染动画)。
图15提供了计算系统的示例性描绘。下面描述的计算系统的许多组件可应用于具有集成相机和相关图像处理器的计算系统(例如,诸如智能手机或平板电脑的手持设备)。普通技术人员将能够容易地在两者之间进行划分。另外,图15的计算系统还包括高性能计算系统的许多特征,诸如工作站或超级计算机。
如在图15中所观察到的,基本计算系统可以包括中央处理单元1501(其可以包括例如多个通用处理核心1515_1至1215_N和设置在多核处理器或应用处理器上的主存储器控制器1517)、系统存储器1502、显示器1503(例如触摸屏、平板)、本地有线点对点链路(例如,USB)接口1504、各种网络I/O功能1505(例如,以太网接口和/或蜂窝调制解调器子系统)、无线局域网(例如,WiFi)接口1506、无线点对点链路(例如,蓝牙)接口1507和全球定位系统接口1508、各种传感器1509_1至1509_N、一个或多个相机1510、电池1511、功率管理控制单元1512、扬声器和麦克风1513以及音频编码器/解码器1514。
应用处理器或多核处理器1550可以在其CPU 1201内包括一个或多个通用处理核心1515、一个或多个图形处理单元1516、存储器管理功能1517(例如,存储器控制器)、I/O控制功能1518和图像处理单元1519。通用处理核心1515一般执行计算系统的操作系统和应用软件。图形处理单元1516一般执行图形密集型功能,以例如生成呈现在显示器1503上的图形信息。存储器控制功能1517与系统存储器1502接口,以向/从系统存储器1502写入/读取数据。功率管理控制单元1512通常控制系统1500的功耗。
图像处理单元1519可以根据以上在前面章节中详细描述的任何图像处理单元实施例来实施。可选地或组合地,IPU 1519可以耦合到GPU 1516和CPU 1501中的任一个或两者来作为其协处理器。此外,在各种实施例中,GPU1516可以用上面详细描述的任何图像处理器特征来实施。此外,通用处理核心、图像处理单元和/或GPU中的任一个可以利用上述算术逻辑单元设计和/或指令。
触摸屏显示器1503、通信接口1504–1507、GPS接口1508、传感器1509、相机1510和扬声器/麦克风编解码器1513、1514中的每一个都可以被视为相对于整个计算系统的各种形式的I/O(输入和/或输出),其中,在适当的情况下,该计算系统包括集成外围设备(例如,一个或多个相机1510)。取决于实施方式,这些I/O组件中的各种可以集成在应用处理器/多核处理器1550上,或者可以位于管芯(die)之外或者应用处理器/多核处理器1550的封装之外。
在一个实施例中,一个或多个相机1510包括能够测量相机和其视野中的目标之间的深度的深度相机。在应用处理器或其他处理器的通用CPU核心(或具有用以运行程序代码的指令运行流水线的其他功能块)上运行的应用软件、操作系统软件、设备驱动软件和/或固件可以执行上述功能中的任何一个。
本发明的实施例可以包括如上所阐述的各种过程。该过程可以体现在机器可运行指令中。该指令可用于使通用处理器或专用处理器执行某些过程。可替换地,这些过程可以由包含用于执行过程的硬连线和/或可编程逻辑的指定硬件组件来执行,或者由可编程计算机组件和定制硬件组件的任意组合来执行。
本发明的元件也可以作为用于存储机器可运行指令的机器可读介质来提供。机器可读介质可以包括但不限于软盘、光盘、CD-ROM和磁光盘、闪存、ROM、RAM、EPROM、磁卡或光卡、传播介质或适合存储电子指令的其他类型的介质/机器可读介质。例如,本发明可以作为计算机程序下载,该计算机程序可以经由通信链路(例如,调制解调器或网络连接)以体现在载波或其他传播介质中的数据信号的方式从远程计算机(例如,服务器)传输到请求计算机(例如,客户端)。
在前述说明书中,已经参照本发明的具体示例性实施例描述了本发明。然而,很明显,在不脱离所附权利要求中阐述的本发明的较广泛的精神和范围的情况下,可以对其进行各种修改和改变。因此,说明书和附图被认为是说明性的,而不是限制性的。
下面描述一些示例。
示例1:一种运行单元电路,包括:
算术逻辑单元(ALU)电路,ALU电路包括用以接收第一值的第一输入端和用以接收第二值的第二输入端,ALU电路包括用以确定第一值的绝对值并将该绝对值加到第二值上的电路系统,第一输入端耦合到包括寄存器空间的第一数据路径和运行单元电路的另一ALU的输出端作为第一值的替代源,第二输入端耦合到包括寄存器空间的第二数据路径作为第二值的源。
示例2:根据示例1的运行单元电路,其中,该电路系统包括加法器电路。
示例3:根据示例2的运行单元电路,其中,该加法器电路用以:
如果第一值为正,则将第一值加到第二值上;
如果第一值为负,则从第二值中减去第一值。
示例4:根据前述示例中至少一个的运行单元电路,其中,该ALU电路用以运行指令,该指令用以接收第一输入操作数和第二输入操作数,该指令用以将第二输入操作数加到第一输入操作数的绝对值上,该ALU电路用以沿着第一数据路径从寄存器空间接收第一输入操作数作为第一值,该ALU电路用以沿着第二数据路径从寄存器空间接收第二输入操作数作为第二值。
示例5:根据前述示例中至少一个的运行单元电路,其中,该ALU电路还用以运行另一指令,该另一指令确定第一输入操作数和第二输入操作数之间的绝对差并且将该绝对差加到第三输入操作数上,该ALU电路用以沿着第一数据路径从另一ALU电路接收第一输入操作数和第二输入操作数之间的差值作为第一值,该ALU电路用以沿着第二数据路径从寄存器空间接收第三输入操作数作为第二值。
示例6:根据前述示例中至少一个的运行单元电路,其中,该ALU电路用以运行指令,该指令用以确定第一输入操作数和第二输入操作数之间的绝对差并且将该绝对差加到第三输入操作数上,该ALU电路用以沿着第一数据路径从另一ALU电路接收第一输入操作数和第二输入操作数之间的差值作为第一值,该ALU电路用以沿着第二数据路径从寄存器空间接收第三输入操作数作为第二值。
示例7:根据前述示例中至少一个的运行单元电路,其中,该指令在ALU电路完成第一值和第二值的相加时完成。
示例8:根据前述示例中至少一个的运行单元电路,其中,该ALU电路是图像处理器内的组件。
示例9:根据前述示例中至少一个的运行单元电路,其中,图像处理器架构包括耦合到二维移位寄存器阵列的运行阵列。
示例10:根据前述示例中至少一个的运行单元电路,其中,图像处理器被配置为执行像素数据的块匹配。
示例11:根据前述示例中至少一个的运行单元电路,其中,图像处理器被配置为执行行/列查找最小值操作,特别是在具有二维运行通道阵列和对应的二维移位寄存器的图像处理器上。
示例12:根据前述示例中至少一个的运行单元电路,其中,图像处理器的架构包括线缓冲器、薄片生成器和/或模板处理器中的至少一个。
示例13:根据12示例中的运行单元电路,其中,模板处理器被配置为处理重叠的模板。
示例14:根据前述示例中至少一个的运行单元电路,其中,数据计算单元包括移位寄存器结构,该移位寄存器结构具有比运行通道阵列更宽的尺寸,特别是在运行通道阵列之外存在寄存器。
示例15:一种由处理器执行的方法,包括:
接收指令;
用处理器的算术逻辑单元电路运行指令,该指令的运行包括下面的a)、b)和c):
a)在算术逻辑单元电路的第一输入端接收第一值,并在算术逻辑单元电路的第二输入端接收第二值;
b)将第一值和第二值提供给算术逻辑单元电路内的加法器电路;
c)用加法器电路确定第一值的绝对值,并在加法器电路的输出端提供第二值和第一值的绝对值之和。
示例16:根据示例15的方法,其中,第一值从处理器的另一算术逻辑单元电路接收。
示例17:根据示例15或16的方法,其中,指令是绝对差求和指令。
示例18:根据示例15至17中至少一个的方法,其中,指令是绝对值指令,并且第二值被设置为等于零。
示例19:根据示例15至18中至少一个的方法,其中,图像处理器架构在耦合到二维移位寄存器阵列的运行阵列上操作。
示例20:根据示例15至19中至少一个的方法,其中,图像处理器执行像素数据的块匹配。
示例21:根据示例15至20中至少一个的方法,其中,图像处理器执行行/列查找最小值操作,特别是在具有二维运行通道阵列和对应的二维移位寄存器的图像处理器上。
示例22:根据示例15至21中至少一个的方法,其中,图像处理器的架构包括线缓冲器、薄片生成器和/或模板处理器中的至少一个。
示例23:根据示例22的方法,其中,模板处理器处理重叠的模板。
示例24:根据示例15至23中至少一个的方法,其中,数据计算单元包括移位寄存器结构,该移位寄存器结构具有比运行通道阵列更宽的尺寸,特别是在运行通道阵列之外存在寄存器。
示例25:一种计算系统,包括:
多个通用处理器;
系统存储器;
耦合到系统存储器的存储器控制器;
图像处理器,包括用以运行指令的运行单元电路,该运行单元电路包括算术逻辑单元(ALU)电路,该ALU电路包括用以接收第一值的第一输入端和用以接收第二值的第二输入端,该ALU电路包括用以在指令运行期间确定第一值的绝对值并将该绝对值加到第二值上的电路系统,第一输入端耦合到包括寄存器空间的第一数据路径和运行单元电路的另一ALU的输出端作为第一值的替代源,第二输入端耦合到包括寄存器空间的第二数据路径作为第二值的源。
示例26:根据示例25的计算系统,其中,电路系统包括加法器电路。
示例27:根据示例25或26的计算系统,其中,加法器电路用以:
如果第一值为正,则将第一值加到第二值上;
如果第一值为负,则从第二值中减去第一值。
示例28:根据示例25至27中至少一个的计算系统,其中,指令用以接收第一输入操作数和第二输入操作数,该指令用以将第二输入操作数加到第一输入操作数的绝对值上,ALU电路用以接收第一输入操作数作为第一值,该ALU电路用以接收第二输入操作数作为第二值。
示例29:根据示例25至28中至少一个的计算系统,其中,运行单元电路还用以运行另一指令,该另一指令确定第一输入操作数和第二输入操作数之间的绝对差并将该绝对差加到第三输入操作数上,该ALU电路用以从运行单元电路的另一ALU电路接收第一输入操作数和第二输入操作数之间的差值作为第一值,该ALU用以接收第三输入操作数作为第二值。
示例30:根据示例25至29中至少一个的计算系统,其中,指令用以确定第一输入操作数和第二输入操作数之间的绝对差并将该绝对差加到第三输入操作数,该ALU电路用以从运行单元电路的另一ALU电路接收第一输入操作数和第二输入操作数之间的差值作为第一值,该ALU电路用以接收第三输入操作数作为第二值。
示例31:根据示例25至30中至少一个的计算系统,其中,运行单元用以在ALU电路完成第一值和第二值的相加时完成指令的运行。
示例32:根据示例25至31中至少一个的计算系统,其中,图像处理器包括运行通道阵列和二维移位寄存器阵列。
示例33:根据示例25至32中至少一个的计算系统,其中,图像处理器架构包括耦合到二维移位寄存器阵列的运行阵列。
示例34:根据示例25至33中至少一个的计算系统,其中,图像处理器被配置为执行像素数据的块匹配。
示例35:根据示例25至34中至少一个的计算系统,其中,图像处理器被配置为执行行/列查找最小值操作,特别是在具有二维运行通道阵列和对应的二维移位寄存器的图像处理器上。
示例36:根据示例25至35中至少一个的计算系统,其中,图像处理器架构包括线缓冲器、薄片生成器和/或模板处理器中的至少一个。
示例37:根据示例36的计算系统,其中,模板处理器被配置为处理重叠的模板。
示例38:根据示例25至37中至少一个的计算系统,其中,数据计算单元包括移位寄存器结构,该移位寄存器结构具有比运行通道阵列更宽的尺寸,特别是在运行通道阵列之外存在寄存器。

Claims (16)

1.一种运行单元电路,包括被配置为执行绝对差求和计算的一对算术逻辑单元(ALU),其中,所述一对ALU包括:
第一ALU,包括用以接收第一外部输入值X的第一输入端和用以接收第二外部输入值Y的第二输入端,和
第二ALU,包括用以接收第三外部输入值Z的第三输入端和用以接收所述第一ALU的输出的第四输入端,
其中,所述运行单元电路被配置为使用包括以下步骤的ALU运算来执行绝对差求和计算:
由所述一对ALU中的第一ALU计算所述第一外部输入值X与所述第二外部输入值Y之间的差值Q,
计算所述绝对差求和计算的结果,包括:
每当Q为正时,由所述一对ALU中的第二ALU将所述第三外部输入值Z与所述差值Q相加,或者
每当Q为负时,由所述一对ALU中的第二ALU从所述第三外部输入值Z中减去所述差值Q,并且
输出所述绝对差求和计算的计算结果。
2.根据权利要求1所述的运行单元电路,其中,所述第二ALU包括加法器电路。
3.根据权利要求1所述的运行单元电路,其中,所述运行单元电路被配置为响应于接收到单个指令来计算绝对差求和计算。
4.根据权利要求3所述的运行单元电路,其中,所述运行单元电路被配置为使用至多两个ALU运算来计算绝对差求和计算。
5.根据权利要求1所述的运行单元电路,其中,所述运行单元电路被配置为运行绝对差指令,所述绝对差指令在被运行时使所述运行单元电路计算由所述绝对差指令的第一输入操作数指定的第一值与由所述绝对差值指令的第二输入操作数指定的第二值之间的绝对差,
其中,在运行所述绝对差指令时,所述第二ALU被配置为接收由所述第一ALU计算的所述第一值与所述第二值之间的差,并被配置为执行以下操作,包括:
每当所述差为正时,将零值加到所述差上,或者
每当所述差为负时,从零值中减去所述差。
6.根据权利要求5所述的运行单元电路,其中,所述第二ALU被配置为从所述运行单元电路的外部寄存器空间接收所述零值。
7.根据权利要求3所述的运行单元电路,其中,所述第三外部输入值Z被指定为所述单个指令的操作数。
8.一种用于由包括一对算术逻辑单元(ALU)的运行单元电路执行绝对差求和计算的方法,其中,所述方法包括:
由所述一对ALU中的第一ALU接收第一外部输入值X和第二外部输入值Y;
由所述一对ALU中的第一ALU计算所述第一外部输入值X与所述第二外部输入值Y之间的差值Q;
由所述一对ALU中的第二ALU接收第三外部输入值Z和由所述第一ALU输出的差值Q;
计算所述绝对差求和计算的结果,包括:
每当Q为正时,由所述一对ALU中的第二ALU将所述第三外部输入值Z与所述差值Q相加,或者
每当Q为负时,由所述一对ALU中的第二ALU从所述第三外部输入值Z中减去所述差值Q,以及
输出所述绝对差求和计算的计算结果。
9.根据权利要求8所述的方法,其中,所述第二ALU包括加法器电路。
10.根据权利要求8所述的方法,其中,所述运行单元电路响应于接收到单个指令来执行所述绝对差求和计算。
11.根据权利要求10所述的方法,其中,所述运行单元电路使用至多两个ALU运算来执行绝对差求和计算。
12.根据权利要求10所述的方法,其中,所述第三外部输入值Z被指定为所述单个指令的操作数。
13.根据权利要求8所述的方法,还包括:
由所述运行单元电路在由绝对差指令的第一输入操作数指定的第一值与由所述绝对差指令的第二输入操作数指定的第二值之间运行所述绝对差指令,包括:
由所述第二ALU接收由所述第一ALU计算的所述第一值与所述第二值之间的差;以及
每当所述差为正时,将零值加到所述差上,或者
每当所述差为负时,从零值中减去所述差。
14.根据权利要求13所述的方法,还包括:由所述第二ALU从所述运行单元电路的外部寄存器空间接收所述零值。
15.一种图像处理器,包括多个运行单元电路,其中,每个运行单元电路包括:
第一输入端,用以接收第一外部输入值X;
第二输入端,用以接收第二外部输入值Y;
第三输入端,用以用于接收第三外部输入值Z;和
装置,用于使用至多两个算术逻辑单元的运算,根据所述第一外部输入值X、所述第二外部输入值Y和所述第三外部输入值Z计算绝对差求和计算,
其中,所述装置使用一个算术逻辑单元运算计算所述第一外部输入值X与所述第二外部输入值Y之间的差值Q,每当Q为正时,使用另一算术逻辑单元运算将所述第三外部输入值Z与所述差值Q相加,或者,每当Q为负时,使用另一ALU运算从所述第三外部输入值Z中减去所述差值Q。
16.如权利要求15所述的图像处理器,其中,每个运行单元电路包括用于响应于接收到单个指令来计算绝对差求和计算的相应装置。
CN201880028582.0A 2017-05-12 2018-01-09 执行双输入值绝对值和求和操作的电路 Active CN110574007B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/594,223 US10481870B2 (en) 2017-05-12 2017-05-12 Circuit to perform dual input value absolute value and sum operation
US15/594,223 2017-05-12
PCT/US2018/012866 WO2018208333A1 (en) 2017-05-12 2018-01-09 Circuit to perform dual input value absolute value and sum operation

Publications (2)

Publication Number Publication Date
CN110574007A CN110574007A (zh) 2019-12-13
CN110574007B true CN110574007B (zh) 2021-07-20

Family

ID=61386884

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201880028582.0A Active CN110574007B (zh) 2017-05-12 2018-01-09 执行双输入值绝对值和求和操作的电路

Country Status (5)

Country Link
US (2) US10481870B2 (zh)
EP (1) EP3622389B1 (zh)
CN (1) CN110574007B (zh)
TW (2) TW201901483A (zh)
WO (1) WO2018208333A1 (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10289732B2 (en) 2016-06-13 2019-05-14 Google Llc Server-based conversion of autoplay content to click-to-play content
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
US10489877B2 (en) * 2017-04-24 2019-11-26 Intel Corporation Compute optimization mechanism
JP6820875B2 (ja) * 2018-03-09 2021-01-27 株式会社東芝 計算装置
GB2590521B (en) * 2020-06-18 2022-02-23 Imagination Tech Ltd Multiplexing between different processing channels

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4638450A (en) * 1983-09-30 1987-01-20 Honeywell Information Systems Inc. Equal nine apparatus for supporting absolute value subtracts on decimal operands of unequal length
CA1257003A (en) * 1985-06-19 1989-07-04 Tadayoshi Enomoto Arithmetic circuit
US6219688B1 (en) 1993-11-30 2001-04-17 Texas Instruments Incorporated Method, apparatus and system for sum of plural absolute differences
US5596763A (en) * 1993-11-30 1997-01-21 Texas Instruments Incorporated Three input arithmetic logic unit forming mixed arithmetic and boolean combinations
US5446651A (en) * 1993-11-30 1995-08-29 Texas Instruments Incorporated Split multiply operation
US5880979A (en) * 1995-12-21 1999-03-09 Intel Corporation System for providing the absolute difference of unsigned values
US5793655A (en) * 1996-10-23 1998-08-11 Zapex Technologies, Inc. Sum of the absolute values generator
US6421698B1 (en) 1998-11-04 2002-07-16 Teleman Multimedia, Inc. Multipurpose processor for motion estimation, pixel processing, and general processing
US6477683B1 (en) 1999-02-05 2002-11-05 Tensilica, Inc. Automated processor generation system for designing a configurable processor and method for the same
US6473529B1 (en) * 1999-11-03 2002-10-29 Neomagic Corp. Sum-of-absolute-difference calculator for motion estimation using inversion and carry compensation with full and half-adders
US7054895B2 (en) 2001-06-21 2006-05-30 Ligos Corporation System and method for parallel computing multiple packed-sum absolute differences (PSAD) in response to a single instruction
US7685212B2 (en) 2001-10-29 2010-03-23 Intel Corporation Fast full search motion estimation with SIMD merge instruction
US7681013B1 (en) 2001-12-31 2010-03-16 Apple Inc. Method for variable length decoding using multiple configurable look-up tables
US7558947B1 (en) 2001-12-31 2009-07-07 Apple Inc. Method and apparatus for computing vector absolute differences
TWI225640B (en) 2002-06-28 2004-12-21 Samsung Electronics Co Ltd Voice recognition device, observation probability calculating device, complex fast fourier transform calculation device and method, cache device, and method of controlling the cache device
US7376686B2 (en) 2003-01-31 2008-05-20 Via Technologies, Inc. Apparatus and method for generating packed sum of absolute differences
US7424501B2 (en) * 2003-06-30 2008-09-09 Intel Corporation Nonlinear filtering and deblocking applications utilizing SIMD sign and absolute value operations
TWI249685B (en) * 2004-01-27 2006-02-21 Via Tech Inc Apparatus and method for generating packed sum of absolute differences
US7817719B2 (en) 2005-05-31 2010-10-19 Atmel Corporation System for increasing the speed of a sum-of-absolute-differences operation
US8208553B2 (en) 2006-05-04 2012-06-26 Altera Corporation Methods and apparatus for quarter-pel refinement in a SIMD array processor
US8290044B2 (en) * 2006-05-10 2012-10-16 Qualcomm Incorporation Instruction for producing two independent sums of absolute differences
US8131788B1 (en) 2007-08-06 2012-03-06 Xilinx, Inc. Determining sum of absolute differences in parallel
US8976195B1 (en) 2009-10-14 2015-03-10 Nvidia Corporation Generating clip state for a batch of vertices
US9405535B2 (en) 2012-11-29 2016-08-02 International Business Machines Corporation Floating point execution unit for calculating packed sum of absolute differences
WO2014085975A1 (zh) * 2012-12-04 2014-06-12 中国科学院半导体研究所 可动态重构的多级并行单指令多数据阵列处理系统
US9582273B2 (en) 2013-07-09 2017-02-28 Texas Instrments Incorporated Faster and more efficient different precision sum of absolute differences for dynamically configurable block searches for motion estimation
US10528345B2 (en) 2015-03-27 2020-01-07 Intel Corporation Instructions and logic to provide atomic range modification operations
CN106599992B (zh) 2015-10-08 2019-04-09 上海兆芯集成电路有限公司 以处理单元群组作为时间递归神经网络长短期记忆胞进行运作的神经网络单元

Also Published As

Publication number Publication date
US20180329685A1 (en) 2018-11-15
US20200159494A1 (en) 2020-05-21
WO2018208333A1 (en) 2018-11-15
EP3622389A1 (en) 2020-03-18
US10719295B2 (en) 2020-07-21
TW201901483A (zh) 2019-01-01
TW201941047A (zh) 2019-10-16
EP3622389B1 (en) 2022-08-24
TWI752343B (zh) 2022-01-11
CN110574007A (zh) 2019-12-13
US10481870B2 (en) 2019-11-19

Similar Documents

Publication Publication Date Title
CN107563952B (zh) 可编程二维图像处理器上的卷积神经网络
CN110574007B (zh) 执行双输入值绝对值和求和操作的电路
CN107438860B (zh) 用于高性能功率高效的可编程图像处理的架构
KR101971657B1 (ko) 이미지 프로세서에 대한 에너지 효율적인 프로세서 코어 아키텍처
CN107133908B (zh) 用于图像处理器的编译器管理存储器
US10216487B2 (en) Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure
US11544060B2 (en) Two dimensional masked shift instruction
CN107430760B (zh) 用于图像处理器的二维移位阵列
CN112967169B (zh) 用于图像生成器的数据片生成器
CN107563951B (zh) 在二维图像处理器上的统计操作
KR102278021B1 (ko) 이미지 프로세서 런타임 효율성을 개선하기 위한 프로그램 코드 변환
KR20190107101A (ko) 지원 내부 네트워크 및 구성 가능한 개수의 활성 코어들을 갖는 이미지 프로세서
CN110574067A (zh) 图像处理器i/o单元
US9830150B2 (en) Multi-functional execution lane for image processor

Legal Events

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