CN107408041B - 用于图像处理器的能量高效的处理器核心架构 - Google Patents

用于图像处理器的能量高效的处理器核心架构 Download PDF

Info

Publication number
CN107408041B
CN107408041B CN201680019801.XA CN201680019801A CN107408041B CN 107408041 B CN107408041 B CN 107408041B CN 201680019801 A CN201680019801 A CN 201680019801A CN 107408041 B CN107408041 B CN 107408041B
Authority
CN
China
Prior art keywords
execution
array
execution lane
instructions
shift register
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201680019801.XA
Other languages
English (en)
Other versions
CN107408041A (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 CN107408041A publication Critical patent/CN107408041A/zh
Application granted granted Critical
Publication of CN107408041B publication Critical patent/CN107408041B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • G06F15/8023Two dimensional arrays, e.g. mesh, torus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • 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/3802Instruction prefetching
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3871Asynchronous instruction pipeline, e.g. using handshake signals between stages
    • 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
    • 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/3887Concurrent instruction execution, e.g. pipeline or 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/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/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N3/00Scanning details of television systems; Combination thereof with generation of supply voltages
    • H04N3/10Scanning details of television systems; Combination thereof with generation of supply voltages by means not exclusively optical-mechanical
    • H04N3/14Scanning details of television systems; Combination thereof with generation of supply voltages by means not exclusively optical-mechanical by means of electrically scanned solid-state devices
    • H04N3/15Scanning details of television systems; Combination thereof with generation of supply voltages by means not exclusively optical-mechanical by means of electrically scanned solid-state devices for picture signal generation
    • H04N3/1575Picture signal readout register, e.g. shift registers, interline shift registers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N5/00Details of television systems
    • H04N5/14Picture signal circuitry for video frequency region
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N3/00Scanning details of television systems; Combination thereof with generation of supply voltages
    • H04N3/10Scanning details of television systems; Combination thereof with generation of supply voltages by means not exclusively optical-mechanical
    • H04N3/14Scanning details of television systems; Combination thereof with generation of supply voltages by means not exclusively optical-mechanical by means of electrically scanned solid-state devices

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Signal Processing (AREA)
  • Image Processing (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

描述了一种装置。该装置包括用于提取和发出指令的程序控制器。该装置包括具有用于执行指令的至少一个执行单元的执行通道。该执行通道是被耦合到二维移位寄存器阵列结构的执行通道阵列的一部分,其中,执行通道阵列中的执行通道位于对应阵列位置处,并且被耦合到二维移位寄存器阵列中的同一对应阵列位置处的专用寄存器。

Description

用于图像处理器的能量高效的处理器核心架构
技术领域
本发明的领域一般地涉及图像处理,并且更具体地,涉及用于图像处理器的能量高效处理器核心架构。
背景技术
图像处理通常涉及被组织成阵列的像素值的处理。这里,空间上组织的二维阵列捕获图像的二维性质(附加维度可以包括时间(例如,二维图像序列)和数据类型(例如,颜色))。在通常情况下,由已经生成静止图像或帧序列以捕获运动图像的相机来提供阵列像素值。传统的图像处理器通常落在两个极端中的任一侧。
第一极端将图像处理认为作为在通用处理器或类通用处理器(例如,具有向量指令增强的通用处理器)上执行的软件程序来执行。虽然第一极端通常提供高度通用的应用软件开发平台,但是其使用更细粒度的数据结构以及相关的开销(例如,指令提取和解码、片上和片外数据的处理、推测执行)最终导致在程序代码的执行期间每单位数据消耗更大量的能量。
第二相对的极端将固定功能硬接线电路应用于更大的数据块。使用直接应用于定制设计电路的较大(相对于较细粒度)的数据块大大降低了每单位数据的功耗。然而,使用定制设计的固定功能电路通常导致处理器能够执行的有限任务集合。因此,在第二极端下缺乏(与第一极端相关联的)广泛通用的编程环境。
提供高度通用的应用软件开发机会与每单位数据的提高的功效两者相结合的技术平台仍然是期望但缺失的解决方案。
发明内容
描述了一种装置。该装置包括用于提取和发出指令的程序控制器。该装置包括具有用于执行指令的至少一个执行单元的执行通道。该执行通道是被耦合到二维移位寄存器阵列结构的执行通道阵列的一部分,其中,执行通道阵列中的执行通道位于对应阵列位置处,并且被耦合到二维移位寄存器阵列中的同一对应阵列位置处的专用寄存器。
附图说明
以下描述和附图用于说明本发明的实施例。在附图中:
图1示出图像处理器硬件架构的实施例;
图2a、2b、2c、2d和2e图示将图像数据解析成线组、将线组解析成表片、以及在具有重叠蒙板的表片上执行的操作;
图3a示出蒙板处理器的实施例;
图3b示出蒙板处理器的指令字的实施例;
图4示出蒙板处理器内的数据计算单元的实施例;
图5a、5b、5c、5d、5e、5f、5g、5h、5i、5j和5k图示使用二维移位阵列和执行通道阵列来利用重叠蒙板确定一对相邻输出像素值的示例;
图6a示出用于集成执行通道阵列和二维移位阵列的单元单体的实施例;
图6b示出执行通道ALU的实施例;
图7a图示第一二维寄存器阵列结构互连方案;
图7b图示第二二维寄存器阵列结构互连方案;
图8a图示二维寄存器阵列结构的第一行或列;
图8b图示二维寄存器阵列结构的第二行或列;
图8c图示耦合到存储器单元的图8b的行;
图8d示出另一环形实施例;
图8e示出节能电路;
图9涉及寄存器堆内的寄存器的较高位宽的操作;
图10涉及控制执行通道阵列内的存储器操作;
图11示出计算系统的实施例。
具体实施方式
a.图像处理器硬件架构和操作
图1示出用于以硬件实现的图像处理器的架构100的实施例。图像处理器可以例如是编译器的目标,编译器将为模拟环境内的虚拟处理器编写的程序代码转换成由硬件处理器实际执行的程序代码。如图1所示,架构100包括通过网络104(例如,包含片上交换机网络、片上环形网络或其他类型的网络的片上网络(NOC))与多个蒙板(stencil)处理器单元102_1至102_N和相应的表片(sheet)生成器单元103_1至103-N互连的多个线缓冲器单元101_1至101_M。在实施例中,任何线缓冲器单元可以通过网络104连接到任何表片生成器和相应的蒙板处理器。
在实施例中,程序代码被编译和加载到相应的蒙板处理器102上以执行由软件开发人员较先前定义的图像处理操作(例如,根据设计和实现,程序代码还可以被加载到蒙板处理器的关联表片生成器103上)。在至少一些实例中,可以通过将用于第一流水线级的第一内核程序加载到第一蒙板处理器102_1中、将用于第二流水线级的第二内核程序加载到第二蒙板处理器102_2中等来实现图像处理流水线,其中,第一内核执行流水线的第一级的功能,第二内核执行流水线的第二级的功能等,并且安装附加的控制流方法以将输出图像数据从流水线的一个级传递到流水线的下一级。
在其他配置中,图像处理器可以被实现为具有操作相同内核程序代码的两个或更多的蒙板处理器102_1、102_2的并行机器。例如,可以通过跨多个蒙板处理器扩展帧来处理高密度和高数据速率的图像数据流,多个蒙板处理器中的每一个执行相同的功能。
在又一其他配置中,本质上,内核的任何DAG都可以通过下述来被加载到硬件处理器上:利用蒙板处理器自身的程序代码来配置对应的蒙板处理器并且将适当的控制流钩调(hook)配置到硬件中以将来自一个内核的输出图像引导到DAG设计中的下一个内核的输入。
作为通用流程,图像数据的帧由宏I/O单元105接收,并且以逐帧为基础被传递到线缓冲器单元101中的一个或多个。特定线缓冲器单元将其图像数据的帧解析成图像数据的较小区域,称为“线组(line group)”,并且然后通过网络104将线组传递到特定的表片生成器。完整或“完全”的单个线组可以例如由帧的多个连续完整行或列的数据组成(为简单起见,本说明书将主要涉及连续行)。表片生成器进一步将图像数据的线组解析成图像数据的更小的区域,称为“表片(sheet)”,并且将该表提交给其相应的蒙板处理器。
在具有单个输入的图像处理流水线或DAG流的情况下,通常,输入帧被引导到相同的线缓冲单元101_1,其将图像数据解析为线组,并将线组引导到表片生成器103_1,其相应的蒙板处理器102_1执行流水线/DAG中的第一内核的代码。当蒙板处理器102_1完成对其处理的线组上的操作时,表片生成器103_1将输出线组发送到“下游”线缓冲单元101_2(在一些使用情况下,输出线组可以被发送回以前发送过输入线组的同一线缓冲器单元101_1)。
然后,一个或多个“消费者”内核从下游线缓冲器单元101_2接收由第一蒙板处理器102_1生成的图像数据,一个或多个“消费者”内核表示在其自身对应的其他表片生成器和蒙板处理器(例如,表片生成器103_2和蒙板处理器102_2)上执行的流水线/DAG中的下一级/操作。以这种方式,在第一蒙板处理器上操作的“生产者”内核将其输出数据转发到在第二蒙板处理器上操作的“消费者”内核,其中,消费者内核在生产者内核符合整个流水线或DAG的设计之后执行下一任务集合。
蒙板处理器102被设计为在图像数据的多个重叠蒙板上同时操作。多个重叠蒙板和蒙板处理器的内部硬件处理能力有效地确定表片的大小。这里,在蒙板处理器102内,执行通道阵列一致地操作为同时处理由多个重叠蒙板覆盖的图像数据表面区域。
如下文将更详细地所述,在各种实施例中,图像数据的表片被加载到蒙板处理器102内的二维寄存器阵列结构中。使用表片和二维寄存器阵列结构被认为通过将大量数据移动到大量寄存器空间中,例如,使处理任务由执行通道阵列对紧接在其后的数据直接执行的单个加载操作,以有效地提供功耗改善。此外,使用执行通道阵列和相应的寄存器阵列提供易于编程/可配置的不同蒙板尺寸。
图2a至图2e以高水平示出了线缓冲器单元101的解析活动、表片生成器单元103的更细粒度解析活动两者以及耦合到表片生成器单元103的蒙板处理器102的蒙板处理活动的实施例。
图2a图示图像数据201的输入帧的实施例。图2a还图示三个重叠蒙板202(每个具有3像素×3像素的尺寸)的略图,蒙板处理器被设计为对该三个重叠蒙板202进行操作。以实心黑色突出显示每个蒙板对应生成其输出图像数据的输出像素。为简单起见,三个重叠蒙板202被图示为仅在垂直方向上重叠。应当认识到,实际上,蒙板处理器可以被设计成在垂直和水平方向上均具有重叠蒙板。
如图2a所示,由于蒙板处理器内的垂直重叠蒙板202,在单个蒙板处理器对其进行操作的帧内存在在宽带(wide band)图像数据。如将在下文更详细所述,在实施例中,蒙板处理器以从左到右的方式跨图像数据处理其重叠蒙板内的数据(并且然后以从上到下的顺序针对下一线集合重复)。因此,随着蒙板处理器继续进行其操作,实心黑色输出像素块的数目将水平向右增长。如上所述,线缓冲器单元101负责解析来自足以使蒙板处理器在扩展的多个即将到来的周期中进行操作的传入帧的输入图像数据的线组。线组的示例性图示被示为阴影区域203。在实施例中,线缓冲器单元101可以理解向/从表片生成器发送/接收线组的不同动态。例如,根据被称为“全组”的一个模式,在线缓冲器单元和表片生成器之间传递图像数据的完整全宽度线。根据被称为“虚拟高(virtually tall)”的第二模式,最初线组以全宽度行的子集被传递。然后,剩余的行以较小(小于全宽度)的片段被顺序传递。
在输入图像数据的线组203已经由线缓冲器单元定义并传递到表片生成器单元的情况下,表片生成器单元进一步将线组解析为更精确地拟合到蒙板处理器的硬件限制的更细的表片。更具体地,如下文将更进一步详细描述,在实施例中,每个蒙板处理器由二维移位寄存器阵列组成。二维移位寄存器阵列实质上对执行通道阵列“下方”的图像数据进行移位,其中,移位模式使得每个执行通道对其自身对应的蒙板内的数据进行操作(即,每个执行通道处理其自身蒙板的信息,以生成用于该蒙板的输出)。在实施例中,表片是“填充”或以其他方式被加载到二维移位寄存器阵列中的输入图像数据的表面区域。
如将在下文更详细地描述,在各种实施例中,实际上存在可以在任何周期上移位的二维寄存器数据的多个层。为了方便起见,本说明书的大部分将简单地使用术语“二维移位寄存器”等来表示具有可以被移位的二维寄存器数据的一个或多个这样的层的结构。
因此,如在图2b中所示,表片生成器解析来自线组203的初始表片204,并将其提供给蒙板处理器(这里,数据的表片对应于通常由附图标记204标识的阴影区域)。如在图2c和图2d中所示,蒙板处理器通过以从左到右的方式在表片上有效地移动重叠蒙板202来对输入图像数据的表片进行操作。如图2d所示,可以从表片内的数据计算其输出值的像素的数目被耗尽(没有其他像素位置可以具有从表片内的信息确定的输出值)。为简单起见,图像的边界区域被忽略。
如图2e所示,表片生成器然后向蒙板处理器提供下一表片205以继续操作。注意,当蒙板开始在下一表片上操作时,蒙板的初始位置是从第一表片上的耗尽点向右的下一累进(progression)(如之前在图2d中所图示的)。当蒙板处理器以与处理第一表片相同的方式对新表片进行操作时,使用新表片205,蒙板将简单地继续向右移动。
注意,由于围绕输出像素位置的蒙板的边界区域而导致在第一表片204的数据和第二表片205的数据之间存在一些重叠。该重叠可以简单地通过表片生成器重传重叠数据两次来处理。在替代实施方式中,为了将下一表片馈送到蒙板处理器,表片生成器可以继续仅向蒙板处理器发送新数据,并且蒙板处理器重复使用来自前一表片的重叠数据。
b.蒙板处理器设计和操作
图3a示出蒙板处理器架构300的实施例。如图3a所示,蒙板处理器包括数据计算单元301、标量处理器302以及相关联的存储器303和I/O单元304。数据计算单元301包括执行通道阵列305、二维移位阵列结构306和与阵列的特定行或列相关联的单独的随机存取存储器307。
I/O单元304负责将从表片生成器接收的“输入”表片数据加载到数据计算单元301中,并将来自蒙板处理器的“输出”表片数据存储到表片生成器中。在实施例中,将表片数据加载到数据计算单元301中需要将所接收的表片解析成图像数据的行/列,并将图像数据的行/列加载到二维移位寄存器结构306或执行通道阵列的行/列的对应的随机存取存储器307中(以下将更详细描述)。如果表片最初被加载到存储器307中,则执行通道阵列305内的各个执行通道然后可以在适当时(例如,当刚好在对表片的数据操作之前的加载指令)将表片数据从随机存取存储器307加载到二维移位寄存器结构306中。在将表片数据(不论直接从表片生成器还是从存储器307)加载到寄存器结构306完成之后,执行通道阵列305的执行通道对数据进行操作,并最终将完成的数据作为表片直接“写回”表片生成器或随机存取存储器307中。如果是后者,则I/O单元304从随机存取存储器307提取数据以形成输出表片,输出表片然后被转发到表片生成器。
标量处理器302包括程序控制器309,其从标量存储器303读取蒙板处理器的程序代码的指令,并向执行通道阵列305中的执行通道发出指令。在实施例中,单个相同指令从数据计算单元301被广播到阵列305内的所有执行通道,以实现类SIMD的行为。在实施例中,从标量存储器303读取并向执行通道阵列305的执行通道发出的指令的指令格式包括超长指令字(VLIW)类型格式,该格式每个指令地包括多于一个的操作码。在另一实施例中,VLIW格式包括ALU操作码和存储器操作码(引导用于特定执行通道或执行通道集合的存储器操作),ALU操作码引导由每个执行通道的ALU(如下所述,在实施例中可以指定多于一个的传统ALU操作)执行的数学函数。
术语“执行通道”是指能够执行指令(例如,可以执行指令的逻辑电路)的一个或多个执行单元的集合。然而,在各种实施例中,执行通道可以包括除了执行单元之外的更多类处理器的功能。例如,除了一个或多个执行单元之外,执行通道还可以包括对接收到的指令进行解码的逻辑电路,或者在更多类MIMD的设计的情况下,包括提取和解码指令的逻辑电路。对于类MIMD的方法,尽管本文已经大量地描述了集中式程序控制方法,但是可以在各种替代实施例中实现更分布式的方法(例如,将程序代码和程序控制器包括在阵列305的每个执行通道内)。
执行通道阵列305、程序控制器309和二维移位寄存器结构306的组合提供用于广泛的可编程功能的广泛自适应/可配置的硬件平台。例如,假定各个执行通道能够执行各种各样的功能并且能够容易地存取接近任何输出阵列位置的输入图像数据,应用软件开发人员能够对具有广泛的不同功能能力以及尺寸(例如,蒙板大小)的内核进行编程。
除了用作由执行通道阵列305操作的图像数据的数据存储之外,随机存取存储器307还可以保存一个或多个查找表。在各种实施例中,一个或多个标量查找表也可以在标量存储器303内被实例化。
标量查找涉及根据相同的索引将来自相同查找表的相同的数据值传递到执行通道阵列305内的每个执行通道。在各种实施例中,上述VLIW指令格式被扩展为还包括标量操作码,该标量操作码将由标量处理器执行的查找操作引导到标量查找表。被指定用于与操作码一起使用的索引可以是立即操作数或者从某个其他数据存储位置提取。无论如何,在实施例中,从标量存储器内的标量查找表的查找本质上涉及在相同时钟周期期间将相同的数据值广播到执行通道阵列305内的所有执行通道。关于查找表的使用和操作的其他细节在下文进一步提供。
图3b概括了上述VLIW指令字实施例。如图3b所示,VLIW指令字格式包括三个独立指令的字段:1)由标量处理器执行的标量指令351;2)由执行通道阵列内的对应ALU以SIMD方式广播和执行的ALU指令352;以及3)以部分SIMD方式广播和执行的存储器指令353(例如,如果沿执行通道阵列中的同一行的执行通道共享相同的随机存取存储器,则来自不同行中的每一个的一个执行通道实际上执行该指令(存储器指令353的格式可以包括识别每个行中的哪个执行通道执行指令的操作数)。
还包括用于一个或多个立即操作数的字段354。可以在指令格式中识别指令351、352、353中的哪一个使用哪种立即操作数信息。指令351、352、353中的每一个还包括其对应的输入操作数和结果信息(例如,用于ALU操作的本地寄存器和用于存储器存取指令的本地寄存器和存储器地址)。在实施例中,在执行通道阵列中的执行通道执行指令352、353中的任一个之前,由标量处理器执行标量指令351。也就是说,VLIW字的执行包括执行标准指令351的第一周期,此后是可以执行其他指令352、353的第二周期(注意,在各种实施例中,可以并行地执行指令352和353)。
在实施例中,由标量处理器执行的标量指令包括向表片生成器发出用于将表片从/向数据计算单元的存储器或2D移位寄存器加载/存储的命令。这里,表片生成器的操作可以取决于线缓冲单元的操作或阻止表片生成器完成由标量处理器发出的任何命令所花费的周期数的预运行时间理解(comprehension)的其他变量。这样,在实施例中,标量指令351对应于或以其他方式使得向表片生成器发出的命令的任何VLIW字还包括其他两个指令字段352、353中的非操作(NOOP)指令。然后,程序代码进入用于指令字段352、353的NOOP指令循环,直到表片生成器完成其向/从数据计算单元的加载/存储。这里,在向表片生成器发出命令时,标量处理器可以设置在命令完成时表片生成器重置的互锁寄存器的位。在NOOP循环期间,标量处理器监视互锁位的位。当标量处理器检测到表片生成器已经完成其命令时,正常执行再次开始。
图4示出数据计算组件401的实施例。如图4所示,数据计算组件401包括逻辑上位于二维移位寄存器阵列结构406“上方”的执行通道405的阵列。如上所述,在各种实施例中,由表片生成器提供的图像数据表片被加载到二维移位寄存器406中。然后,执行通道对来自寄存器结构406的表片数据进行操作。
执行通道阵列405和移位寄存器结构406在位置上相对于彼此是固定的。然而,移位寄存器阵列406内的数据以策略性和协调的方式移位,以使得执行通道阵列中的每个执行通道处理数据内的不同蒙板。这样,每个执行通道确定正在生成的输出表中的不同像素的输出图像值。从图4的架构,应该清楚的是,当执行通道阵列405包括垂直相邻的执行通道以及水平相邻的执行通道时,重叠蒙板不仅被垂直地布置,而且还被水平地布置。
数据计算单元401的一些显著的架构特征包括具有比执行通道阵列405更宽的尺寸的移位寄存器结构406。也就是说,在执行通道阵列405外部,存在寄存器“外环(halo)”409。尽管外环409被示出为存在于执行通道阵列的两侧,但根据实施方式,外环可以存在于执行通道阵列405的更少(一个)或更多(三个或四个)侧。当数据正在执行通道405“下方”移动时,外环405用于向溢出执行通道阵列405的边界的数据提供“溢出”空间。作为简单的情况,当处理蒙板的最左边的像素时,以执行通道阵列405的右边缘为中心的5x5蒙板将需要更右边的四个外环寄存器位置。为了便于绘图,当在所谓的实施例中,任一侧(右侧、下侧)的寄存器将具有水平和垂直连接时,图4将外环的右侧的寄存器示为仅具有水平移位连接并且将外环的下侧的寄存器示为仅具有垂直移位连接。
由耦合到阵列中的每一行和/或每一列或其一部分的随机存取存储器407提供附加的溢出空间(例如,随机存取存储器可以被指派给横跨每行4个执行通道以及每列2个执行通道的执行通道阵列的“区域”。为简单起见,本申请的剩余部分主要涉及基于行和/或列的分配方案)。这里,如果执行通道的内核操作需要其处理二维移位寄存器阵列406外的像素值(一些图像处理例程可能需要),则图像数据的平面能够进一步溢出,例如,从外环区域409溢出到随机存取存储器407中。例如,考虑6X6蒙板,其中,硬件包括在执行通道阵列的右边缘上的执行通道右侧的仅四个存储元件的外环区域。在这种情况下,数据将需要进一步向右偏离外环409的右边缘,以完全处理蒙板。然后,移出外环区域409的数据将溢出到随机存取存储器407中。在下文,进一步提供随机存取存储器407和图3的蒙板处理器的其他应用。
图5a至5k示出如上提到的在执行通道阵列“下方”的二维移位寄存器阵列内以其移位图像数据的方式的工作示例。如图5a所示,在第一阵列507中图示了二维移位阵列的数据内容,并且由帧505图示执行通道阵列。而且,简单地图示执行通道阵列内的两个相邻的执行通道510。在该简单图示510中,每个执行通道包括可以从移位寄存器接受数据、接受来自ALU输出的数据(例如,表现为跨周期的累加器)或将输出数据写入输出目的地的寄存器R1。
每个执行通道还具有可在本地寄存器R2中提供的在二维移位阵列中在其“下方”的内容。因此,R1是执行通道的物理寄存器,而R2是二维移位寄存器阵列的物理寄存器。执行通道包括可以对由R1和/或R2提供的操作数进行操作的ALU。如下文更详细地描述,在实施例中,移位寄存器实际上由每个阵列位置的多个存储/寄存器元件(的“深度”)实现,但是移位活动被限制到存储元件的一个平面(例如,存储元件的一个平面仅每周期地移位)。图5a至5k图示用于存储来自对应执行通道的结果X的这些较深寄存器位置中的一个。为了便于说明,在旁边而不是在其对应寄存器R2的下方图示较深结果寄存器。
图5a至5k集中于两个蒙板的计算,其中心位置与在执行通道阵列内图示的执行通道位置对511对准。为了便于说明,当实际上根据下述示例,执行通道对510是垂直邻居时,该执行通道对510被图示为水平邻居。
如图5a初始所示,执行通道以其中心蒙板位置为中心。图5b示出由两个执行通道执行的对象代码。如图5b所示,两个执行通道的程序代码使得移位寄存器阵列内的数据下移一个位置并右移一个位置。这将使两个执行通道对准其对应的蒙板的左上角。然后,程序代码使得将位于其对应位置中(在R2中)的数据加载到R1中。
如图5c所示,程序代码接下来使得该执行通道对将移位寄存器阵列内的数据向左移动一个单位,这使得每个执行通道的对应位置的右侧的值被移位到每个执行通道的位置。然后,将R1中的值(前一个值)与已移位到执行通道的位置中(在R2中)的新值相加。结果被写入R1中。如图5d所示,重复与上述图5c相同的过程,使得结果R1现在将值A+B+C包括在上部执行通道中,并且将F+G+H包括在下部执行通道中。此时,两个执行通道已经处理了其对应的蒙板的上部行。注意,如果在执行通道阵列的左侧不存在外环区域,则将溢出到执行通道阵列左侧的外环区域(如果在左侧存在一个)或随机存取存储器中。
如图5e所示,接下来,程序代码使得移位寄存器阵列内的数据上移一个单位,这使得两个执行通道与其对应的蒙板的中间行的右边缘对齐。两个执行通道的寄存器R1当前包括蒙板的顶行和中间行的最右值的总和。图5f和5g表明跨两个执行通道的蒙板的中间行向左移动的持续进程。累积加法继续,使得在图5g的处理结束时,两个执行通道包括其对应的蒙板的顶行和中间行的值的总和。
图5h示出使每个执行通道与其对应的蒙板的最下行对准的另一移位。图5i和5j示出继续移位以完成两个执行通道的蒙板的过程上的处理。图5k示出了附加移位以使每个执行通道与其在数据阵列中的正确位置对齐并将其结果写入。
在图5a-5k的示例中,注意,用于移位操作的对象代码可以包括识别以(X,Y)坐标表达的移位的方向和幅度的指令格式。例如,用于上移一个位置的对象代码可以以对象代码被表达为SHIFT 0,+1。作为另一示例,向右移一个位置可以以对象代码被表达为SHIFT+1,0。在各种实施例中,较大幅度的移位还可以以对象代码(例如SHIFT 0,+2)指定。这里,如果2D移位寄存器硬件仅支持每个周期一个位置的移位,则该指令可以由机器解释为需要多个周期的执行,或者2D移位寄存器硬件可以被设计为支持每个周期多于1个位置的移位。在下文中,将进一步详细描述后者的实施例。
图6a示出用于阵列执行通道和移位寄存器结构的单元单体的另一个更详细图示(外环区域中的寄存器不包括相应的执行通道)。在实施例中,通过在执行通道阵列的每个节点处实例化图6a所示的电路来实现与执行通道阵列中的每个位置相关联的执行通道和寄存器空间。如图6a所示,单元单体包括耦合到由四个寄存器R2至R5组成的寄存器堆602的执行通道601。在任何周期期间,执行通道601可以从寄存器R1至R5中的任一个读取或写入。对于需要两个输入操作数的指令,执行通道可以从R1至R5中的任何一个检索两个操作数。
在实施例中,通过在单个周期期间,通过允许寄存器R2至R4中的(仅)一个的任何一个的内容通过输出复用器603被“移出”到其相邻的寄存器堆之一,并且使寄存器R2至R4中的(仅)一个的任何一个的内容被替换为通过输入复用器604,从其相应的一个邻居“移入”的内容,使得邻居之间的移位处于相同的方向(例如,所有执行线路左移、所有执行通道右移等),来实现二维移位寄存器结构。尽管对同一寄存器来说,使其内容移出并用在同一周期上移入的内容替换是很常见的,但是复用器布置603、604允许不同的移位源和移位目标寄存器在同一周期期间在同一寄存器堆内。
如图6a所示,注意,在移位序列期间,执行通道将内容从其寄存器堆602移位到其左邻、右邻、上邻和下邻中的每一个。结合相同的移位序列,执行通道还将内容从其左邻、右邻、上邻和下邻中的特定一个移位到其寄存器堆中。再次,对所有执行通道,移出目标和移入源应该与同一移位方向一致(例如,如果移出到右邻,则应该从左邻移入)。
尽管在一个实施例中,允许每个周期每个执行通道仅移位一个寄存器的内容,但是其他实施例可以允许多于一个的寄存器的内容被移入/移出。例如,如果在图6a中所示的复用器电路603、604的第二实例被并入图6a的设计中,则在同一周期期间,可以移出/移入两个寄存器的内容。当然,在每个周期仅允许移位一个寄存器的内容的实施例中,通过为数学运算之间的移位消耗更多的时钟周期,可以在数学运算之间发生来自多个寄存器的移位(例如,通过在数学运算之间消耗两个移位运算,可以在数学运算之间移位两个寄存器的内容)。
如果在移动序列期间移出少于执行通道的寄存器堆的所有内容,则注意,每个执行通道的未移出寄存器的内容保持原样(不移位)。这样,没有通过在内容中移位进行替换的任何未移位内容在移位周期中仍然存在于执行通道的本地。在每个执行通道中观察到的存储器单元(“M”)用于从/向与执行通道阵列内的执行通道的行和/或列相关联的随机存取存储器空间加载/存储数据。这里,M单元用作标准M单元,因为其通常用于加载/存储无法从/向执行通道自己的寄存器空间加载/存储的数据。在各种实施例中,M单元的主要操作是将数据从本地寄存器写入存储器,并且从存储器读取数据并将其写入本地寄存器。
对于由硬件执行通道601的ALU单元所支持的ISA操作码,在各种实施例中,由硬件ALU支持的数学操作码与由虚拟执行通道支持的数学操作码(例如,ADD,SUB,MOV,MUL,MAD,ABS,DIV,SHL,SHR,MIN/MAX,SEL,AND,OR,XOR,NOT)整体一致(例如,基本上相同)。如上所述,存储器存取指令可以由执行通道601执行以从/向其关联的随机存取存储器提取/存储数据。此外,硬件执行通道601支持移位操作指令(右、左、上、下)以在二维移位寄存器结构内移位数据。如上所述,程序控制指令主要由蒙板处理器的标量处理器执行。
图6b示出了处理器ALU的实施例。如图6b所示,处理器ALU包括乘法-加法单元611以及第一和第二标称ALU 612、613。乘法-加法单元611执行运算(A*B)+C。第一和第二标称ALU执行包括比较运算(例如,加法,减法,与,或,异或,比较,最小值,最大值,绝对值,移位)的标称数学和逻辑运算。ALU设计可以被视为具有两个主要数据路径:第一路径包括乘法-加法单元611,第二路径包括双ALU612、613链。双ALU链612、613允许在单个指令中具有两个运算的更复杂的指令(例如,单个指令中的两个加法;以及单个指令中的加法和除法(DIV);单个指令中的减法(SUB)和绝对值(ABS)等)。输入操作数可从寄存器接收。各种实施例可以包括使用附加到操作码的立即操作数。输出结果被写入寄存器。
c.2D移位寄存器实施例
图7a图示二维寄存器阵列结构的逻辑(和可能物理上)设计的“自上而下”视图的实施例。图7a的“自上而下”视图基本上符合图6的单元单体设计实施例,其中,特定阵列位置处的每个寄存器堆被耦合到其左、右、上和下相邻的单元单体位置的寄存器堆。也就是说,例如,如图7a所示,寄存器堆A被耦合到寄存器堆B、C、D和E。
图7b图示二维寄存器阵列结构的逻辑(和可能物理上)设计的“自上而下”视图的另一实施例。如图7b所示,单元单体不仅被耦合到最近的垂直和水平邻居,而且还被耦合到“第二”最接近的垂直和水平邻居。例如,如图7b所示,单元单体A不仅被耦合到单元单体B、C、D和E,而且还被耦合到单元单体F、G、H和I。为了便于绘图和查看,仅单元单体A被图示为了具有使最接近和次最接近邻居耦合所需要的完整连接集合。除了单元单体A之外,仅每隔一个单元单体示出沿任何特定行或列的次最接近邻居耦合(例如,单元单体B没有图示任何次最接近邻居耦合)。读者将理解到,优选实施例可以包括对于例如核心内的所有单元单体的单元单体A的耦合,并且足够远离阵列边缘以支持次最接近邻居耦合。
具有次最接近连接提供寄存器值通过寄存器阵列的更快传播。例如,如果寄存器值需要被移动到远离四个位置的单元单体,则图7b的阵列结构可以在两个周期内完成移动,而图7b的阵列结构可以仅在四个周期内完成相同的移动。注意,图7b的实施例也具有最接近邻居连接。因此,用于图7b的结构的处理器指令集可能比用于图7a的结构的处理器指令集更昂贵(前者具有一跳和两跳MOV指令,而后者仅具有一跳MOV指令)。
有必要指出的是,不同跳数运动和相应的阵列结构实施例的数目和组合可以根据快速寄存器值运动的需要与阵列结构布线密度的容许之间的适当折衷平衡而在各个实施例之间广泛变化。一些实施例可以支持最接近第三和/或第四邻居连接,而其他实施例可能不支持(在最接近第四邻居连接的情况下,例如,单元单体D将被直接耦合到图7b中的单元单体J)。一些实施例可以仅具有最接近邻居连接和最接近第三或更远的连接等。可以想象到,更复杂的实施例甚至可以支持对角连接(例如,图7b中,单元单体A与单元单体K及其另外三个邻角单元单体连接)。普通技术人员将认识到,通过将输入源扩展到输入复用结构604并且从图6a的输出复用结构603扩展扇出,容易实现单元单体之间的各种扩展连接中的任何一个。
图8a示出沿二维寄存器阵列结构内的行或列的寄存器的示例性逻辑排列(为便于绘制,寄存器阵列仅具有8×8的尺寸,而在实际实践中,尺寸可以大得多)。这里,正在处理的阵列中的相邻像素将位于数字相邻的单元单体中(例如,阵列中的一对相邻像素将被放置在单元单体3和4而不是3和5中)。图8a的逻辑设计还包括通过连接801将第一逻辑单元单体1耦合到最后一个单元单体8的滚动能力(因此,执行通道的处理器也可以包括滚动操作码)。
然而,可能会出现问题的是,特别是在大尺寸阵列的情况下,如果图8a的设计不仅表示逻辑设计,而且还表示物理设计。如果图8a的方法也表示物理设计,则与连接除1和8对外的单元单体对的其他布线的长度相比,连接801对应于极长的布线。该特定布线长度异常值会影响电路定时复杂性(通过将所有单元单体之间的所有移位时间减慢至不小于最慢的1<->8移位时间,或引入识别与在任何其他相邻单元单体之间移位相比,在1<->8之间移位的更多周期的复杂性)。
图8b示出具有图8a的逻辑设计的寄存器阵列结构的行或列的改进的物理设计的实施例。这里,物理设计对应于电路结构的实际布局,而不仅是逻辑连接(与逻辑设计一样)。如图8b所示,物理设计通过在布局的逻辑中施加环形设计来缓冲由其他单元单体之间的1<->8连接所需的额外长度。例如,尽管单元单体1物理地连接到单元单体2以保留逻辑设计,但是单元单体8物理地位于其之间。结果是比图8a中的布线801的长度短得多的、在图8b的结构中的单元单体之间的最大布线长度。这样,图8b的结构的定时复杂化避免了上述图8a的结构的定时复杂化。在实施例中,所有单元单体之间的寄存器内容滚动可以在单个周期内发生。
图8c示出表片生成器或随机存取存储器802(诸如图4的RAM 407中的任何一个)与寄存器阵列的行或列之间的数据总线结构包括一种混合(swizzle)结构803以便保持与具有环形物理布局的阵列或行的正确逻辑连接。图8d示出可以实现4跳移位的另一个环形结构,其中任何寄存器值所行进的最大距离是4个单元单体。在此,应当清楚的是,在图8d的寄存器和表片生成器或RAM之间可能存在另一类混合的数据总线。这样,实现环形物理布局的特征是存在通过连接以逻辑顺序排列的输入的数据总线的混合。
图8e示出来自移位阵列结构的单元单体的输出复用器804的特殊扇出电路。这里,输出复用器804可以被看作类似于图6a的输出复用器603。随着移位阵列被设计为支持越来越多的连接(一跳、两跳等),输出复用器804的扇出增加。随着复用器804的扇出增加,功耗可能变得越来越成为一个问题。图8e示出用于完全支持一跳和两个连接的移位寄存器阵列的输出复用器804。这里,在不存在图8e所示的逻辑门的情况下,复用器804处的新输出(例如,新移出值)将被广播到八个不同的位置(左邻,右邻,...,2跳下邻)。这里,如本领域所理解的,逻辑电路中的布线的行程长度上的数据的改变对应于“开关活动”,其进而消耗功率。
在复用器804的输出处示出的八个逻辑门的存在被设计成防止任何数据改变,除了在对应于移位方向的实际布线上的数据改变。例如,如果移位方向是向右一跳,则仅耦合到直接右侧邻居的门将允许复用器804的输出通过。所有其他逻辑门将防止数据值传播到其他节点(当不需要移位值时),并且降低该过程中移位操作的功耗。
图9涉及用于允许执行通道阵列内的执行通道处理不同数据位宽的技术。这里,如本领域所理解的,通过增加数据值的位宽来实现更大的动态范围(16位值可以表示具有比8位值更大的动态范围的值)。在实施例中,期望蒙板处理器对具有不同位宽的图像进行操作,不同位宽例如8、16或32位像素值。这样,根据一种方法,从执行通道内部可以处理32位操作数的意义上说,执行通道本身为32位机器。
然而,为了减小二维移位寄存器的大小和复杂性,每个执行通道的寄存器堆内的寄存器的各个存储元件被限制为8位。在8位图像数据的情况下是没有问题的,因为整个数据表片可以在寄存器堆的一个寄存器中拟合。相反,在16位或32位操作数的情况下,表片生成器生成多个表片以适当地表达输入操作数数据集合。
例如,如图9所示,在16位输入操作数的情况下,表片生成器将生成HI半表片和LO半表片。HI半表片包含处于正确阵列位置的每个数据项的高8位。LO半表片包含处于正确阵列位置的每个数据项的低8位。然后,通过将两个表片加载到蒙板处理器中并且向执行通道硬件(例如,经由程序代码中的立即值)通知将发生16位操作,来执行16位操作。这里,仅作为一种可能的操作模式,HI和LO表片两者都被加载在每个执行通道的寄存器堆的两个不同的寄存器中。
执行通道单元能够通过下述来内部地构建正确的操作数:首先从寄存器堆位置中的一个进行读取并且将其中的数据附加到从寄存器堆位置中的另一个读取的数据。类似地,在写入方向上,执行通道单元将必须执行两次写入。具体地说,首先将低8位写入包含LO表片的寄存器堆的第一寄存器,并且然后,再将高8位写入到包含HI表片的寄存器堆的第二寄存器。
回想前述论述,在各种实施例中,每个周期允许从仅一个寄存器的内容移位被移位。在这些情况下,为了在二维移位寄存器结构周围移动16位数据值,(在数学运算之间)每个移位序列消耗两个周期,而不是8位数据值的情况下的一个周期。也就是说,在8位数据值的标称情况下,可以在单个周期中在位置之间移位所有数据。相反,在16位数据值的情况下,每个移位寄存器移位操作(HI半表片和LO半表片)必须移位两个8位值。在实施例中,在32位的情况下,相同的原理适用,除了创建四个表片以表示整个图像数据而不是两个表片。同样地,每个移位序列可能需要消耗多达四个周期。注意,8位寄存器宽度的讨论仅是示例。通常,任何位宽都是可能的(例如,寄存器堆内的16位宽寄存器具有执行通道内部的32位宽电路)。
图10涉及展开随机存储器存取,使得在操作期间,在实际硬件中不存在竞争存储器存取的编译器操作。这里,图10的过程涉及鉴根据由高级虚拟代码操作的数据和底层机器的物理限制来构建对象代码。如前所述,执行通道阵列中的每个执行通道具有关联的寄存器堆(例如,每个执行通道四个寄存器)。如大多数执行通道,执行通道从/向寄存器读取和/或写入符合对象代码指令的数据。如大多数编译器,编译器知道什么数据驻留在什么寄存器中,并且识别可用寄存器空间的物理限制。
这样,执行通道可能不时地需要不在寄存器空间中而是位于与执行通道阵列中的执行通道的行和/或列相关联的随机存取存储器中的数据项。类似地,执行通道可能不时地需要写入数据项,但是没有可写入数据的寄存器空间(因为当前在寄存器空间内的所有数据仍具有相关性)。在这些情况下,编译器将存储器加载或存储器存储指令插入对象代码中(与寄存器加载或寄存器存储指令相反),以从/向随机存取存储器而不是寄存器空间提取/写入数据。
图10图示了硬件架构的实施例,硬件架构示出了沿着阵列的每行的单独的随机存取存储器1007_1至1007_R。从该架构,假定沿执行通道阵列的同一行的执行通道对同一随机存取存储器进行存取。如图所示,每个执行通道包括用于存取其对应的随机存取存储器的存储器单元。因此,当不同行上的两个不同执行通道在同一周期期间执行存储器加载指令时,指令不会竞争,因为它们被引导到不同的随机存取存储器。
相反,如果同一行上的执行通道在同一周期上执行存储器存取,则存储器存取将竞争。假定执行通道阵列旨在以类SIMD的方式操作,程序代码将自然地使得阵列中的执行通道(包括行和列两者)在同一周期上发出存储器存取请求。因此,从同一行上的执行通道的竞争存储器存取是可预见的危险。图10示出了用于在同一行上的两个不同执行通道上执行的一对线程1001。假定机器的类SIMD的性质,两个执行通道在同一周期中执行相同的操作码,包括在前两个所示的周期中的一对存储器加载指令。检查存储器加载指令的地址,注意,所有地址都不同。因此,两个线程的第一存储器加载指令确实相互竞争,并且两个线程的第二存储器加载指令确实相互竞争。
这样,当编译器将存储器加载指令强加在对象代码中时,还认识到存储器加载指令将对驻留在同一行上的执行通道产生冲突。作为响应,编译器将顺序存储器加载指令强加在代码中,以沿同一行有效地展开竞争存储器加载指令,使得向每个执行通道提供其自己的用于存取存储器的预留周期。在图10的示例中,注意,最终对象代码1002包括跨四个周期的四个顺序存储器加载指令的序列,以确保一个执行通道的存储器存取不会干扰沿同一行的另一执行通道的存储器存取。
注意,图10的方法特别适用于上文第1.0节讨论的存储器模型的查找表部分。在此,回想一下,不同的执行通道可以使用同一个查找表中的不同的索引,以在同一周期内访问同一查找表的不同条目。在实施例中,编译器将同一查找表的不同副本实例化到每个随机存取存储器1007_1至1007_R中。因此,可以通过不同行上的执行通道,在同一周期期间对本地表副本进行查找。这样的查找不会竞争,并且每次查找的索引可以是不同的。相反,执行通道沿同一行执行的查找将访问同一个存储器中的同一查找表,并且将需要顺序地展开和执行。通过展开成顺序访问,允许索引值不同。在实施例中,对象代码的VLIW指令格式包括用于存储器操作的操作码以及用于数学运算的操作码,存储器操作还包括识别沿实际应该执行指令的行的执行通道(沿该行的其他执行通道将其视为无操作)。
在各种实施例中,编译器类似于查找表来处理原子更新指令。也就是说,对原子指令结果,在随机存取存储器1007_1至1007_R中(例如,每行)预留存储器空间。在同一周期期间,允许执行非竞争更新(例如,来自沿不同行的相同位置的执行通道),而(竞争更新例如,通过沿同一行的执行通道)被展开为单独的指令。原子更新指令通常由编译器实现为读-修改-写指令,其中,读取是对驻留在执行通道的寄存器空间中的最新结果数据进行的,这样的数据也数学地进行操作,并且然后写入特别预留的原子更新表中。
e.实现实施例
有必要指出,上述各种图像处理器架构特征不一定限于传统意义上的图像处理,并且因此可以应用于可以(或可以不)使得图像处理器被重新表征的其他应用。例如,如果上述各种图像处理器架构特征中的任何一个被用于创建和/或生成和/或呈现动画,而不是实际相机图像的处理,图像处理器可以被表征为图形处理单元。此外,上述图像处理器架构特征可以应用于其他技术应用,诸如视频处理、视觉处理、图像识别和/或机器学习。以这种方式应用,图像处理器可以(例如作为协处理器)与更通用的处理器(例如,其是计算系统的CPU或计算系统的CPU的一部分)集成,或者可以是计算系统内的独立处理器。
上述硬件设计实施例可以在半导体芯片内实施和/或实现为用于最终针对半导体制造工艺的电路设计的描述。在后者的情况下,这种电路描述可以采取更高/行为级电路描述(例如,VHDL描述)或低级电路描述(例如,寄存器传输级(RTL)电路描述、晶体管级描述或掩码描述)或其各种组合的形式。电路描述通常在计算机可读存储介质(诸如CD-ROM或其他类型的存储技术)上实现。
从前面的部分可认识到,如上所述的图像处理器可以在计算机系统上的硬件中实现(例如,作为处理来自手持设备的相机的数据的手持设备的片上系统(SOC)的一部分)。在图像处理器被实现为硬件电路的情况下,注意,可以直接从相机接收由图像处理器处理的图像数据。这里,图像处理器可以是分立的相机的一部分或者是具有集成相机的计算系统的一部分。在后者的情况下,可以从相机或从计算系统的系统存储器直接接收图像数据(例如,相机将其图像数据发送到系统存储器而不是图像处理器)。还注意,前面部分中所描述的许多特征可以适用于图形处理器单元(渲染动画)。
图11提供了计算系统的示例性描述。以下所描述的计算系统的许多组件适用于具有集成相机和关联的图像处理器的计算系统(例如,手持设备,诸如智能电话或平板计算机)。普通技术人员将能够容易地区分两者。
如图11所示,基本计算系统可以包括中央处理单元1101(其可以包括例如多个通用处理核心1115_1至1115_N、以及设置在多核心处理器或应用处理器上的主存储器控制器1117)、系统存储器1102、显示器1103(例如,触摸屏、平板)、本地有线点对点链路(例如,USB)接口1104、各种网络I/O功能1105(诸如以太网接口和/或蜂窝调制解调器子系统)、无线局域网(例如WiFi)接口1106、无线点对点链路(例如,蓝牙)接口1107和全球定位系统接口1108、各种传感器1109_1到1109_N、一个或多个相机1110、电池1111、电源管理控制单元1112、扬声器和麦克风1113以及音频编码器/解码器1114。
应用处理器或多核处理器1150可以包括在其CPU 1101内的一个或多个通用处理核心1115、一个或多个图形处理单元1116、存储器管理功能1117(例如,存储器控制器)、I/O控制功能1118和图像处理单元1119。通用处理核心1115通常执行计算系统的操作系统和应用软件。图形处理单元1116通常执行图形密集功能,以例如生成在显示器1103上呈现的图形信息。存储器控制功能1117与系统存储器1102对接以向系统存储器1102写入数据/从系统存储器1102读取数据。电源管理控制单元1112通常控制系统1100的功耗。
图像处理单元1119可根据以上在前部分中详细描述的任何图像处理单元实施例来实现。可替代地或组合地,IPU 1119可耦合到GPU1116和CPU1101中的任一者或两者作为其协处理器。此外,在各种实施例中,GPU 1116可实现为具有以上详细描述的任意图像处理器特征。
触摸屏显示器1103、通信接口1104-1107、GPS接口1108、传感器1109、相机1110和扬声器/麦克风编码解码器1113、1114中的每一个可以被视为相对于整个计算系统的各种形式的I/O(例如,输入和/或输出),在适当的情况下,该整个计算系统也包括集成的外围设备(例如,一个或多个相机1110)。根据实现,这些I/O组件中的各种I/O组件可以被集成在应用处理器/多核处理器1150上,或者可以位于芯片外部或应用处理器/多核处理器1150的封装外部。
在实施例中,一个或多个相机1110包括能够测量相机与其视场中的对象之间的深度的深度相机。在应用处理器或其他处理器的通用CPU核心(或具有指令执行流水线以执行程序代码的其他功能块)上执行的应用软件、操作系统软件、设备驱动器软件和/或固件可以执行上述任何功能。
本发明的实施例可以包括如上所述的各种过程。该过程可以以机器可执行指令实现。该指令可用于使通用或专用处理器执行某些过程。替代地,这些过程可由包含用于执行过程的硬接线逻辑的特定硬件组件或者由编程的计算机组件和定制硬件组件的任何组合来执行。
本发明的元件还可提供为用于存储机器可执行指令的机器可读介质。该机器可读介质可包括但不限于软盘、光盘、CD-ROM和磁光盘、FLASH存储器、ROM、RAM、EPROM、EEPROM、磁卡或光卡、传播媒体或适合于存储电子指令的其他类型媒体/机器可读介质。例如,本发明可作为计算机程序被下载,该计算机程序可通过在载波或其他传播介质中体现的数据信号经由通信链路(例如,调制解调器或网络连接)从远程计算机(例如,服务器)传送到请求计算机(例如,客户端)。
在上述说明书中,已参照本发明的具体示例性实施例描述了本发明。然而,将显而易见的是,在不脱离如所附权利要求中阐述的本发明的更广泛的精神和范围的情况下,可以对其进行各种修改和改变。因此,说明书和附图被认为是说明性的而不是限制性的。

Claims (28)

1.一种用于图像处理的装置,所述装置包括:
程序控制器,所述程序控制器用于提取和发出指令;以及
执行通道阵列,所述执行通道阵列耦合到二维移位寄存器阵列结构,
其中,所述执行通道阵列中的执行通道位于对应阵列位置处,并且被耦合到所述二维移位寄存器阵列结构中的相同对应阵列位置处的专用寄存器,
其中,每个执行通道包括用于执行所述指令的至少一个执行单元,所述二维移位寄存器阵列结构比所述执行通道阵列包括更多的行和列。
2.如权利要求1所述的装置,其中,所述执行通道被耦合到所述程序控制器,来以SIMD方式接收和执行所述指令。
3.如权利要求2所述的装置,其中,每个执行通道包括存储器单元。
4.如权利要求2所述的装置,其中,每个执行通道包括具有耦合到第二ALU的输出的第一ALU。
5.如权利要求2所述的装置,其中,所述指令被包含在具有VLIW格式的较大数据结构中。
6.如权利要求5所述的装置,其中,所述程序控制器是标量处理器的一部分,所述标量处理器用于执行包含在具有VLIW格式的所述较大数据结构中的标量指令。
7.如权利要求6所述的装置,其中,所述标量指令包括将标量值广播到所述执行通道的指令。
8.如权利要求6所述的装置,其中,所述标量处理器被耦合到其自己的专用随机存取存储器。
9.如权利要求1所述的装置,其中,所述执行通道阵列的不同区域被分配有对应的不同随机存取存储器。
10.如权利要求9所述的装置,其中,所述不同随机存取存储器用于存储溢出所述二维移位寄存器阵列结构的寄存器值。
11.如权利要求9所述的装置,其中,所述不同随机存取存储器用于存储查找表信息。
12.一种存储有用于最终针对半导体制造工艺的电路的描述的机器可读存储介质,所述电路包括:
程序控制器,所述程序控制器用于提取和发出指令;以及
执行通道阵列,所述执行通道阵列耦合到二维移位寄存器阵列结构,
其中,所述执行通道阵列中的执行通道位于对应阵列位置处,并且被耦合到所述二维移位寄存器阵列结构中的相同对应阵列位置处的专用寄存器,
其中,每个执行通道包括用于执行所述指令的至少一个执行单元,所述二维移位寄存器阵列结构比所述执行通道阵列包括更多的行和列。
13.如权利要求12所述的机器可读存储介质,其中,所述执行通道被耦合到所述程序控制器,来以SIMD方式接收和执行所述指令。
14.如权利要求13所述的机器可读存储介质,其中,每个执行通道包括存储器单元。
15.如权利要求13所述的机器可读存储介质,其中,每个执行通道包括具有耦合到第二ALU的输出的第一ALU。
16.如权利要求13所述的机器可读存储介质,其中,所述指令被包含在具有VLIW格式的较大数据结构中。
17.如权利要求16所述的机器可读存储介质,其中,所述程序控制器是标量处理器的一部分,所述标量处理器用于执行包含在具有VLIW格式的所述较大数据结构中的标量指令。
18.如权利要求12所述的机器可读存储介质,其中,所述执行通道阵列的不同区域被分配有对应的不同随机存取存储器。
19.如权利要求18所述的机器可读存储介质,其中,所述不同随机存取存储器用于存储溢出所述二维移位寄存器阵列结构的寄存器值。
20.如权利要求18所述的机器可读存储介质,其中,所述不同随机存取存储器用于存储查找表信息。
21.一种计算系统,包括:
耦合到系统存储器的多个处理核心;
图像处理单元,所述图像处理单元包括:
程序控制器,所述程序控制器用于提取和发出指令;以及
执行通道阵列,所述执行通道阵列耦合到二维移位寄存器阵列结构,
其中,所述执行通道阵列中的执行通道位于对应阵列位置处,并且被耦合到所述二维移位寄存器阵列结构中的相同对应阵列位置处的专用寄存器,
其中,每个执行通道包括用于执行所述指令的至少一个执行单元,所述二维移位寄存器阵列结构比所述执行通道阵列包括更多的行和列。
22.如权利要求21所述的计算系统,其中,所述执行通道被耦合到所述程序控制器,来以SIMD方式接收和执行所述指令。
23.如权利要求21所述的计算系统,其中,每个执行通道包括存储器单元。
24.如权利要求21所述的计算系统,其中,每个执行通道包括具有耦合到第二ALU的输出的第一ALU。
25.如权利要求21所述的计算系统,其中,所述指令被包含在具有VLIW格式的较大数据结构中。
26.如权利要求25所述的计算系统,其中,所述程序控制器是标量处理器的一部分,所述标量处理器用于执行包含在具有VLIW格式的所述较大数据结构中的标量指令。
27.如权利要求21所述的计算系统,其中,所述执行通道阵列的不同区域被分配有对应的不同随机存取存储器。
28.如权利要求27所述的计算系统,其中,所述不同随机存取存储器用于存储溢出所述二维移位寄存器阵列结构的寄存器值。
CN201680019801.XA 2015-04-23 2016-04-08 用于图像处理器的能量高效的处理器核心架构 Active CN107408041B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/694,815 US9772852B2 (en) 2015-04-23 2015-04-23 Energy efficient processor core architecture for image processor
US14/694,815 2015-04-23
PCT/US2016/026789 WO2016171928A1 (en) 2015-04-23 2016-04-08 Energy efficient processor core architecture for image processor

Publications (2)

Publication Number Publication Date
CN107408041A CN107408041A (zh) 2017-11-28
CN107408041B true CN107408041B (zh) 2020-09-25

Family

ID=55963456

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680019801.XA Active CN107408041B (zh) 2015-04-23 2016-04-08 用于图像处理器的能量高效的处理器核心架构

Country Status (7)

Country Link
US (4) US9772852B2 (zh)
EP (1) EP3286722A1 (zh)
JP (3) JP6412663B2 (zh)
KR (1) KR101971657B1 (zh)
CN (1) CN107408041B (zh)
DE (1) DE112016001836T5 (zh)
WO (1) WO2016171928A1 (zh)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9772852B2 (en) 2015-04-23 2017-09-26 Google Inc. Energy efficient processor core architecture for image processor
US10313641B2 (en) 2015-12-04 2019-06-04 Google Llc Shift register with reduced wiring complexity
US9830150B2 (en) 2015-12-04 2017-11-28 Google Llc Multi-functional execution lane for image processor
US9891955B2 (en) * 2015-12-22 2018-02-13 Nxp Usa, Inc. Heterogenous multicore processor configuration framework
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
US10204396B2 (en) 2016-02-26 2019-02-12 Google Llc Compiler managed memory for image processor
US10380969B2 (en) 2016-02-28 2019-08-13 Google Llc Macro I/O unit for 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
US20180005346A1 (en) 2016-07-01 2018-01-04 Google Inc. Core Processes For Block Operations On An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register
US10546211B2 (en) 2016-07-01 2020-01-28 Google Llc Convolutional neural network on programmable two dimensional image processor
US20180005059A1 (en) 2016-07-01 2018-01-04 Google Inc. Statistics Operations On Two Dimensional Image Processor
US10489199B2 (en) * 2017-05-12 2019-11-26 Google Llc Program code transformations to improve image processor runtime efficiency
US10503689B2 (en) * 2017-05-15 2019-12-10 Google Llc Image processor I/O unit
US11275992B2 (en) * 2017-05-17 2022-03-15 Google Llc Special purpose neural network training chip
CN111258653B (zh) * 2018-11-30 2022-05-24 上海寒武纪信息科技有限公司 原子访存方法、存储介质、计算机设备、装置和系统
US11397624B2 (en) * 2019-01-22 2022-07-26 Arm Limited Execution of cross-lane operations in data processing systems
US10552939B1 (en) 2019-02-12 2020-02-04 Google Llc Image processor complex transfer functions
GB2590521B (en) * 2020-06-18 2022-02-23 Imagination Tech Ltd Multiplexing between different processing channels
US20220197634A1 (en) * 2020-12-21 2022-06-23 Intel Corporation Efficient divide and accumulate instruction when an operand is equal to or near a power of two

Family Cites Families (83)

* 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
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
US5446479A (en) * 1989-02-27 1995-08-29 Texas Instruments Incorporated Multi-dimensional array video processor system
US5253308A (en) 1989-06-21 1993-10-12 Amber Engineering, Inc. Massively parallel digital image data processor using pixel-mapped input/output and relative indexed addressing
WO1994009595A1 (en) 1991-09-20 1994-04-28 Shaw Venson M Method and apparatus including system architecture for multimedia communications
JP3482660B2 (ja) 1993-09-08 2003-12-22 ソニー株式会社 画像データ処理装置および画像データ処理方法
US5612693A (en) 1994-12-14 1997-03-18 International Business Machines Corporation Sliding window data compression using a toroidal bit shift register
EP0875031B1 (de) * 1996-01-15 2001-06-20 Infineon Technologies AG Prozessor zur bildverarbeitung
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
US6970196B1 (en) * 1999-03-16 2005-11-29 Hamamatsu Photonics K.K. High-speed vision sensor with image processing function
JP3971535B2 (ja) 1999-09-10 2007-09-05 株式会社リコー Simd型プロセッサ
JP3922859B2 (ja) 1999-12-28 2007-05-30 株式会社リコー 画像処理装置、画像処理方法およびその方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体
DE60019081D1 (de) * 2000-01-31 2005-05-04 St Microelectronics Srl Verschachtelter Burst-Speicher mit Burst-Zugriff bei synchronen Lesezyklen, wobei die beiden untergeordneten Speicherfelder unabhängig lesbar sind mit wahlfreiem Zugriff während asynchroner Lesezyklen
US6745319B1 (en) 2000-02-18 2004-06-01 Texas Instruments Incorporated Microprocessor with instructions for shuffling and dealing data
US6728862B1 (en) 2000-05-22 2004-04-27 Gazelle Technology Corporation Processor array and parallel data processing methods
US6728722B1 (en) 2000-08-28 2004-04-27 Sun Microsystems, Inc. General data structure for describing logical data spaces
US6986025B2 (en) * 2001-06-11 2006-01-10 Broadcom Corporation Conditional execution per lane
US7286717B2 (en) 2001-10-31 2007-10-23 Ricoh Company, Ltd. Image data processing device processing a plurality of series of data items simultaneously in parallel
JP4146654B2 (ja) 2002-02-28 2008-09-10 株式会社リコー 画像処理回路、複合画像処理回路、および、画像形成装置
US9170812B2 (en) 2002-03-21 2015-10-27 Pact Xpp Technologies Ag Data processing system having integrated pipelined array data processor
AU2003221680A1 (en) 2002-04-09 2003-10-27 The Research Foundation Of State University Of New York Multiplier-based processor-in-memory architectures for image and graphics processing
US6954204B2 (en) * 2002-07-18 2005-10-11 Nvidia Corporation Programmable graphics system and method using flexible, high-precision data formats
AU2003286131A1 (en) 2002-08-07 2004-03-19 Pact Xpp Technologies Ag Method and device for processing data
US20060044576A1 (en) 2004-07-30 2006-03-02 Kabushiki Kaisha Toshiba Apparatus for image processing
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
FR2895103B1 (fr) 2005-12-19 2008-02-22 Dxo Labs Sa Procede et systeme de traitement de donnees numeriques
US7802073B1 (en) 2006-03-29 2010-09-21 Oracle America, Inc. Virtual core management
TWI349908B (en) * 2006-09-14 2011-10-01 Au Optronics Corp Shift register, shift register array circuit, and flat display apparatus
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 ブラザー工業株式会社 画像処理装置および画像処理プログラム
TWI338900B (en) * 2007-08-07 2011-03-11 Au Optronics Corp Shift register array
JP4844853B2 (ja) 2007-09-05 2011-12-28 国立大学法人東北大学 固体撮像素子及びその駆動方法
JP5020029B2 (ja) * 2007-11-16 2012-09-05 株式会社メガチップス 画像処理装置
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
CN103339604B (zh) 2011-01-31 2016-10-26 株式会社索思未来 程序生成装置、程序生成方法、处理器装置以及多处理器系统
US9092267B2 (en) 2011-06-20 2015-07-28 Qualcomm Incorporated Memory sharing in graphics processing unit
US20130027416A1 (en) 2011-07-25 2013-01-31 Karthikeyan Vaithianathan Gather method and apparatus for media processing accelerators
JP5742651B2 (ja) 2011-10-15 2015-07-01 コニカミノルタ株式会社 画像処理装置、連携方法および連携プログラム
JP5746100B2 (ja) 2011-12-27 2015-07-08 京セラドキュメントソリューションズ株式会社 画像形成装置
US8823736B2 (en) 2012-01-20 2014-09-02 Intel Corporation Graphics tiling architecture with bounding volume hierarchies
US10244246B2 (en) 2012-02-02 2019-03-26 Texas Instruments Incorporated Sub-pictures for pixel rate balancing on multi-core platforms
US10007527B2 (en) * 2012-03-05 2018-06-26 Nvidia Corporation Uniform load processing for parallel thread sub-sets
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
US9851977B2 (en) 2012-12-06 2017-12-26 Kalray Apparatus and method for combining thread warps with compatible execution masks for simultaneous execution and increased lane utilization
US8954992B2 (en) 2013-03-15 2015-02-10 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Distributed and scaled-out network switch and packet processing
US10241707B2 (en) 2013-05-23 2019-03-26 Intel Corporation Techniques for organizing three-dimensional array data
FR3008505B1 (fr) * 2013-07-10 2017-03-03 Thales Sa Procede d'optimisation de traitement parallele de donnees sur une plateforme materielle
US9299181B2 (en) * 2013-08-28 2016-03-29 Qualcomm Incorporated Target independent stenciling in graphics processing
US9547530B2 (en) * 2013-11-01 2017-01-17 Arm Limited Data processing apparatus and method for processing a plurality of threads
US9519479B2 (en) * 2013-11-18 2016-12-13 Globalfoundries Inc. Techniques for increasing vector processing utilization and efficiency through vector lane predication prediction
US9977678B2 (en) * 2015-01-12 2018-05-22 International Business Machines Corporation Reconfigurable parallel execution and load-store slice processor
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
US9772852B2 (en) 2015-04-23 2017-09-26 Google Inc. Energy efficient processor core architecture for image processor
GB2540382B (en) * 2015-07-15 2020-03-04 Advanced Risc Mach Ltd Data processing systems

Also Published As

Publication number Publication date
EP3286722A1 (en) 2018-02-28
US9772852B2 (en) 2017-09-26
JP2018206413A (ja) 2018-12-27
US11138013B2 (en) 2021-10-05
US10754654B2 (en) 2020-08-25
WO2016171928A1 (en) 2016-10-27
JP2018513473A (ja) 2018-05-24
JP6412663B2 (ja) 2018-10-24
US20190220282A1 (en) 2019-07-18
JP2020035471A (ja) 2020-03-05
US20170249153A1 (en) 2017-08-31
KR20170125932A (ko) 2017-11-15
CN107408041A (zh) 2017-11-28
JP6967570B2 (ja) 2021-11-17
KR101971657B1 (ko) 2019-04-23
US10275253B2 (en) 2019-04-30
US20210004232A1 (en) 2021-01-07
US20160313999A1 (en) 2016-10-27
JP6612403B2 (ja) 2019-11-27
DE112016001836T5 (de) 2018-03-29

Similar Documents

Publication Publication Date Title
CN107408041B (zh) 用于图像处理器的能量高效的处理器核心架构
CN107430760B (zh) 用于图像处理器的二维移位阵列
CN107438860B (zh) 用于高性能功率高效的可编程图像处理的架构
KR102050899B1 (ko) 이미지 프로세서용 컴파일러 관리 메모리
CN107438861B (zh) 用于图像生成器的数据片生成器
CN110300944B (zh) 具有可配置数目的活动核心和支持内部网络的图像处理器
KR20190135034A (ko) 라인 버퍼 유닛 당 메모리 할당 결정
CN110574067B (zh) 图像处理器i/o单元

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information
CB02 Change of applicant information

Address after: American California

Applicant after: Google limited liability company

Address before: American California

Applicant before: Google Inc.

GR01 Patent grant
GR01 Patent grant