CN107133908A - 用于图像处理器的编译器管理存储器 - Google Patents
用于图像处理器的编译器管理存储器 Download PDFInfo
- Publication number
- CN107133908A CN107133908A CN201710107518.9A CN201710107518A CN107133908A CN 107133908 A CN107133908 A CN 107133908A CN 201710107518 A CN201710107518 A CN 201710107518A CN 107133908 A CN107133908 A CN 107133908A
- Authority
- CN
- China
- Prior art keywords
- array
- shift register
- memory
- dimensional shift
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 claims abstract description 41
- 238000011068 loading method Methods 0.000 claims abstract description 25
- 238000003860 storage Methods 0.000 claims description 48
- 230000008569 process Effects 0.000 claims description 11
- 230000002093 peripheral effect Effects 0.000 claims description 3
- 230000008878 coupling Effects 0.000 claims 1
- 238000010168 coupling process Methods 0.000 claims 1
- 238000005859 coupling reaction Methods 0.000 claims 1
- 238000012545 processing Methods 0.000 description 31
- 238000006073 displacement reaction Methods 0.000 description 20
- 230000006870 function Effects 0.000 description 17
- 238000013461 design Methods 0.000 description 10
- 230000000694 effects Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 238000007726 management method Methods 0.000 description 5
- 238000013500 data storage Methods 0.000 description 4
- 238000005070 sampling Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000004590 computer program Methods 0.000 description 2
- 208000002173 dizziness Diseases 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 230000003321 amplification Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 125000001475 halogen functional group Chemical group 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000011065 in-situ storage Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000003199 nucleic acid amplification method Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002265 prevention Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30138—Extension of register space, e.g. register cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent 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]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N25/00—Circuitry of solid-state image sensors [SSIS]; Control thereof
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N3/00—Scanning details of television systems; Combination thereof with generation of supply voltages
- H04N3/10—Scanning details of television systems; Combination thereof with generation of supply voltages by means not exclusively optical-mechanical
- H04N3/14—Scanning 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/15—Scanning 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/1575—Picture signal readout register, e.g. shift registers, interline shift registers
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Image Processing (AREA)
Abstract
描述了一种方法。该方法包括反复地将下一片图像数据从存储器的第一位置加载到二维移位寄存器阵列中。存储器本地耦合到二维移位寄存器阵列和执行通道阵列,该执行通道阵列沿着至少一个阵列轴具有比二维移位寄存器阵列更小的尺寸。加载的下一片图像数据保持在二维移位寄存器阵列的图像区域内。该方法还包括通过沿着执行通道阵列的各个通道执行程序代码指令来反复地为下一片图像数据确定输出值,其中,在确定输出值时使用的模版大小只涵盖存在于二维移位寄存器阵列内的像素。该方法还包括反复地把要被完全加载到二维移位寄存器阵列中的下一片图像数据从存储器的第二位置移动到存储器的第一位置。
Description
相关案件
本申请要求2016年2月26日递交的美国临时申请62/300,671号“COMPILERMANAGED MEMORY FOR IMAGE PROCESSOR”的优先权,该申请被通过引用全部并入。
技术领域
本发明的技术领域概括而言涉及图像处理,更具体而言涉及用于图像处理器的编译器管理存储器。
背景技术
图像处理通常涉及对被组织成阵列的像素值的处理。这里,空间上组织的二维阵列捕捉图像的二维性质(额外的维度可包括时间(例如,二维图像的序列)和数据类型(例如,颜色))。在典型场景中,阵列式像素值由生成了静止图像或者生成了帧的序列来捕捉运动的图像的相机提供。传统的图像处理器通常落在两个极端的其中之一上。
第一个极端将图像处理任务作为在通用处理器或类通用处理器(例如,具有向量指令增强的通用处理器)上执行的软件程序来执行。虽然第一极端通常提供高度多功能的应用软件开发平台,但其对更细粒度的数据结构的使用与关联的开销(例如,指令取得和解码、芯片上和芯片外数据的处理、推测执行)相结合最终导致在程序代码的执行期间每数据单位消耗更大量的能量。
第二个相反的极端将固定功能硬连线电路应用到大得多的数据块。对直接应用到定制设计电路的更大的(而不是更细粒度的)数据块的使用大幅降低了每数据单位的功率消耗。然而,对定制设计的固定功能电路的使用一般导致处理器能够执行的有限任务集合。这样,在第二极端中缺乏(与第一极端相关联的)广泛多功能的编程环境。
提供高度多功能的应用软件开发机会与每数据单位的改善的功率效率两者相结合的技术平台仍然是一种合乎需要但却缺失的解决方案。
发明内容
描述了一种方法。该方法包括反复地将下一片图像数据从存储器的第一位置加载到二维移位寄存器阵列中。存储器本地耦合到二维移位寄存器阵列和执行通道阵列,该执行通道阵列沿着至少一个阵列轴具有比二维移位寄存器阵列更小的尺寸。加载的下一片图像数据保持在二维移位寄存器阵列的图像区域内。该方法还包括通过沿着执行通道阵列的各个通道执行程序代码指令来反复地为下一片图像数据确定输出值,其中,在确定输出值时使用的模版大小只涵盖存在于二维移位寄存器阵列内的像素。该方法还包括反复地把要被完全加载到二维移位寄存器阵列中的下一片图像数据从存储器的第二位置移动到存储器的第一位置。
附图说明
以下描述和附图用于例示本发明的实施例。在附图中:
图1示出了图像处理器硬件体系结构的实施例;
图2a、2b、2c、2d和2e描绘了将图像数据解析成线群,将线群解析成片以及在具有重叠模版(stencil)的片上执行的操作;
图3a示出了模版处理器的实施例;
图3b示出了模版处理器的指令字的实施例;
图4示出了模版处理器内的数据计算单元的实施例;
图5a、5b、5c、5d、5e、5f、5g、5h、5i、5j和5k描绘了使用二维移位寄存器阵列和执行通道阵列来确定具有重叠模版的一对相邻输出像素值的示例;
图6示出了用于集成的执行通道阵列和二维移位寄存器阵列的单位单元的实施例;
图7a-7c涉及用于图像处理器数据计算单元的编译器管理存储器访问方案;
图8示出了用于图像处理器的存储器访问方法;
图9a和9b涉及用于生成存储器地址的指令;
图10涉及另一种编译器管理存储器访问方案;
图11示出了计算系统的实施例。
具体实施方式
a.图像处理器硬件体系结构和操作
图1示出了用硬件实现的图像处理器的体系结构100的实施例。图像处理器例如可作为如下编译器的目标:该编译器将在仿真环境内对于虚拟处理器编写的程序代码转换成被硬件处理器实际执行的程序代码。如图1中所示,体系结构100包括多个线缓冲器单元101_1至101_M,它们通过网络104(例如芯片上网络(network on chip,NOC),包括芯片上交换机网络、芯片上环形网络或其他种类的网络)互连到多个模版处理器单元102_1至102_N和相应的片生成器单元103_1至103_N。在一实施例中,任何线缓冲器单元可通过网络104连接到任何片生成器和相应的模版处理器。
在一实施例中,程序代码被编码并加载到相应的模版处理器102上以执行早前由软件开发者定义的图像处理操作(程序代码也可被加载到模版处理器的关联片生成器103上,这例如取决于设计和实现)。在至少一些实例中,图像处理流水线可通过将用于第一流水线阶段的第一内核程序加载到第一模版处理器102_1中,将用于第二流水线阶段的第二内核程序加载到第二模版处理器102_2中等等来实现,其中第一内核执行流水线的第一阶段的功能,第二内核执行流水线的第二阶段的功能等等,并且额外的控制流方法被安装来把来自流水线的一个阶段的输出图像数据传递到流水线的下一阶段。
在其他配置中,图像处理器可实现为具有操作相同内核程序代码的两个或更多个模版处理器102_1、102_2的并行机。例如,高密度且高数据率的图像数据的流可通过将帧分散在多个模版处理器上被处理,其中每个模版处理器执行相同的功能。
在另外的其他配置中,通过以各自的程序代码内核配置各个模版处理器并且将适当的控制流挂钩(hook)配置到硬件中以将输出图像从一个内核指引到DAG设计中的下一内核的输入,实质上可将内核的任何DAG加载到硬件处理器上。
作为一般流程,图像数据的帧被宏I/O单元105接收并且被逐帧传递到线缓冲器单元101中的一个或多个。特定的线缓冲器单元将其图像数据帧解析成被称为“线群”(linegroup)的图像数据的更小区域,然后通过网络104 将线群传递到特定的片生成器。完整或“完全”的单一线群可例如用帧的多个连续完整行或列的数据来组成(为了简单,本说明书主要谈及连续的行)。片生成器进一步将图像数据的线群解析成被称为“片”(sheet)的图像区域的更小区域,并且将片呈送给其相应的模版处理器。
在具有单个输入的图像处理流水线或DAG流程的情况下,一般而言,输入帧被指引到同一线缓冲器单元101_1,该线缓冲器单元101_1将图像数据解析成线群并且将线群指引到片生成器103_1,片生成器103_1的相应模版处理器102_1正执行流水线/DAG中的第一内核的代码。在模版处理器102_1对其处理的线群的操作完成时,片生成器103_1将输出线群发送到“下游”线缓冲器单元101_2(在一些用例中,输出线群可被发送回到早前发送了输入线群的那同一个线缓冲器单元101_1)。
表示在其各自的其他片生成器和模版处理器(例如,片生成器103_2和模版处理器102_2)上执行的流水线/DAG中的下一阶段/操作的一个或多个“消费者”内核随后从下游线缓冲器单元101_2接收由第一模版处理器102_1生成的图像数据。以这种方式,在第一模版处理器上操作的“生产者”内核使其输出数据被转发到在第二模版处理器上操作的“消费者”内核,其中消费者内核执行与整体流水线或DAG的设计相符合的生产者内核之后的下一组任务。
模版处理器102被设计为同时在图像数据的多个重叠模版上操作。多个重叠模版和模版处理器的内部硬件处理能力有效地确定了片的大小。这里,在模版处理器102内,执行通道的阵列一致地操作以同时处理被多个重叠模版覆盖的图像数据表面区域。
如下文将更详细描述的,在各种实施例中,图像数据的片被加载到模版处理器102内的二维寄存器阵列结构中。对于片和二维寄存器阵列结构的使用被认为通过将大量的数据作为例如单个加载操作移动到大量的寄存器空间中,并且在此之后立即由执行通道阵列直接在数据上执行处理任务,从而有效地提供了功率消耗改善。此外,对执行通道阵列和相应寄存器阵列的使用提供了容易可编程/可配置的不同模版大小。
图2a至2e以高级别图示了线缓冲器单元101的解析活动、片生成器单元103的更细粒度解析活动以及耦合到片生成器单元103的模版处理器102的模版处理活动的实施例。
图2a描绘了图像数据201的输入帧的实施例。图2a还描绘了模版处理器被设计为在其上操作的三个重叠模版202(各自具有3像素×3像素的尺寸)的概况。每个模版分别为其生成输出图像数据的输出像素以实心黑突出。为了简单,三个重叠模版202被描绘为仅在垂直方向上重叠。认识到以下这点是恰当的:实际上模版处理器可被设计为在垂直方向和水平方向上都具有重叠模版。
因为模版处理器内的垂直重叠模版202,如图2a中所示,所以在单个模版处理器可在其上操作的帧内存在宽带的图像数据。如下文将更详细论述的,在一实施例中,模版处理器在图像数据上以从左到右的方式处理其重叠模版内的数据(然后对于下一组线按从上到下的顺序重复)。从而,随着模版处理器继续推进其操作,实心黑输出像素块的数目将向右水平增长。如上所述,线缓冲器单元101负责从传入帧中解析出足够模版处理器在较大数目的即将到来的周期中在其上操作的输入图像数据的线群。线群的示范性描绘被图示为阴影区域203。在一实施例中,线缓冲器单元101可理解用于向片生成器发送/从片生成器接收线群的不同动态。例如,根据一种被称为“全群”的模式,在线缓冲器单元和片生成器之间传递图像数据的完整的全宽度线。根据被称为“虚拟高”的第二模式,最初以全宽度行的子集传递线群。剩余的行随后被以更小(小于全宽度)的片段顺序传递。
在输入图像数据的线群203已由线缓冲器单元定义并被传递到片生成器单元的情况下,片生成器单元将线群进一步解析成更精确适应于模版处理器的硬件限制的更精细片。更具体而言,如下文将进一步更详细描述的,在一实施例中,每个模版处理器由二维移位寄存器阵列构成。二维移位寄存器阵列实质上在执行通道的阵列“下方”对图像数据移位,其中移位的模式使得每个执行通道对其自己的相应模版内的数据进行操作(也就是说,每个执行通道处理其自己的信息模版以生成关于该模版的输出)。在一实施例中,片是输入图像数据的“填充”或以其他方式被加载到二维移位寄存器阵列中的表面区域。
如下文将更详细描述的,在各种实施例中,实际上存在能够在任何周期上移动的多层二维寄存器数据。为了方便,本说明书大多将简单地使用术语“二维移位寄存器”之类的来指代具有这样的一层或多层能够被移位的二维寄存器数据的结构。
从而,如图2b中所示,片生成器从线群203解析初始片204并且将其提供给模版处理器(这里,数据的片对应于由标号204总体标识的阴影区域)。如图2c和2d中所示,模版处理器通过在片上以从左到右的方式有效地移动重叠模版202来对输入图像数据的片进行操作。从图2d起,能够从片内的数据为其计算输出值的像素的数目耗尽了(没有其他像素位置能够具有从该片内的信息确定的输出值)。为了简单,忽略了图像的边界区域。
如图2e中所示,片生成器随后提供下一片205以供模版处理器继续对其进行操作。注意,在其开始下一片上的操作时模版的初始位置是从第一片上的耗尽点起向右的下一次前进(如先前在图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中。一旦完成将数据片加载到寄存器结构306(不论是直接从片生成器还是从存储器307),执行通道阵列305的执行通道就对数据进行操作并且最终将完成的数据作为一片直接“写回”到片生成器或者随机访问存储器307中。如果后来I/O单元304从随机访问存储器307取得数据以形成输出片,则其随后被转发到片生成器。
标量处理器302包括程序控制器309,其从标量存储器303读取模版处理器的程序代码的指令并且将这些指令发出到执行通道阵列305中的执行通道。在一实施例中,单个同一指令被广播到阵列305内的所有执行通道以实现来自数据计算单元301的类SIMD行为。在一实施例中,从标量存储器303读取并发出到执行通道阵列305的执行通道的指令的指令格式包括超长指令字(very-long-instruction-word,VLIW)型格式,该格式对于每个指令包括多于一个操作码。在另一实施例中,VLIW格式既包括指引由每个执行通道的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移位寄存器加载片/向其存储片的命令。这里,片生成器的操作可取决于线缓冲器单元的操作或者阻止对片生成器完成由标量处理器发出的任何命令将会花费的周期数的运行时前理解的其他变量。这样,在一实施例中,其标量指令351对应于或以其他方式使得命令被发出到片生成器的任何VLIW字也包括其他两个指令字段352、353中的无操作(no-operation,NOOP)指令。程序代码随后对于指令字段352、353进入NOOP指令的循环,直到片生成器完成其向/从数据计算单元的加载/存储为止。这里,在向片生成器发出命令时,标量处理器可设置互锁寄存器的某个比特,片生成器在完成该命令时重置该比特。在NOOP循环期间,标量处理器监视互锁比特的该比特。当标量处理器检测到片生成器已完成其命令时,正常执行再次开始。
图4示出了数据计算组件401的实施例。如图4中所示,数据计算组件401包括逻辑上定位在二维移位寄存器阵列结构406“上方”的执行通道的阵列405。如上所述,在各种实施例中,由片生成器提供的图像数据的片被加载到二维移位寄存器406中。执行通道随后对来自寄存器结构406的片数据进行操作。
执行通道阵列405和移位寄存器结构406相对于彼此位置固定。然而,移位寄存器阵列406内的数据以有策略且协调的方式移位以使得执行通道阵列中的每个执行通道处理数据内的不同模版。这样,每个执行通道对于正生成的输出片中的不同像素确定输出图像值。从图4的体系结构应当清楚,重叠模版不仅被垂直布置,而且也被水平布置,因为执行通道阵列405包括垂直相邻执行通道以及水平相邻执行通道。
数据计算组件401的一些值得注意的体系结构特征包括移位寄存器结构406具有比执行通道阵列405更宽的尺寸。也就是说,在执行通道阵列405之外存在寄存器的“光晕”409。虽然光晕409被示为存在于执行通道阵列的两侧,但取决于实现方式,光晕可存在于执行通道阵列405的更少侧(一侧)或更多侧(三侧或四侧)。光晕405起到如下作用:当数据在执行通道405“下方”移动时,为溢出执行通道阵列405的界限之外的数据提供“溢出”空间。作为一个简单实例,以执行通道阵列405的右边缘为中心的5×5模版在该模版的最左像素被处理时将需要更靠右的四个光晕寄存器位置。为了易于描绘,图4将光晕的右侧的寄存器示为只具有水平移位连接并且将光晕的底侧的寄存器示为只具有垂直移位连接,而当在标称实施例中时,任一侧(右侧、底侧)的寄存器将具有水平连接和垂直连接两者。
额外的溢出空间由耦合到阵列中的每一行和/或每一列的随机访问存储器407或者其一部分提供(例如,随机访问存储器可被指派到执行通道阵列的在行方面跨越4个执行通道并且在列方面跨越2个执行通道的“区域”。为了简单,本申请的剩余部分将主要谈及基于行和/或列的分配方案)。这里,如果执行通道的内核操作要求其处理二维移位寄存器阵列406外的像素值(这是某些图像处理例程可能要求的),则图像数据的平面能够进一步溢出,例如从光晕区域409溢出到随机访问存储器407中。例如,考虑一个6×6模版,其中硬件包括在执行通道阵列的右边缘上的执行通道右侧的仅四个存储元素的光晕区域。在此情况下,数据将需要在光晕409的右边缘外被进一步向右移位以完全处理该模版。被移位到光晕区域409之外的数据随后将溢出到随机访问存储器407。随机访问存储器407和图3a的模版处理器的其他应用在下文中进一步提供。
图5a至5k展示了如上文提到的图像数据在执行通道阵列“下方”在二维移位寄存器阵列内被移位的方式的工作示例。如图5a中所示,二维移位阵列的数据内容在第一阵列507中描绘并且执行通道阵列由帧505描绘。另外,执行通道阵列内的两个相邻执行通道510被简化描绘。在这个简化描绘510中,每个执行通道包括寄存器R1,该寄存器R1可接受来自移位寄存器的数据,接受来自ALU输出的数据(例如,表现为跨周期的累积器)或者将输出数据写入到输出目的地中。
每个执行通道在逻辑寄存器R2中还具有二维移位阵列中在其“下方”的内容可用。从而,R1是执行通道的物理寄存器,而R2是二维移位寄存器阵列的物理寄存器。执行通道包括可在由R1和/或R2提供的操作数上操作的ALU。如下文将进一步更详细描述的,在一实施例中,移位寄存器实际上是以每阵列位置多个存储/寄存器元素(存储/寄存器元素的“深度”)实现的,但移位活动限于一个平面的存储元素(例如,在每周期中只有一个平面的存储元素可移位)。图5a至5k描绘了这些更深的寄存器位置之一被用于存储来自各个执行通道的结果X。为了易于例示,更深的结果寄存器是并排描绘的,而不是描绘在其对应寄存器R2的下方。
图5a至5k关注于其中心位置与在执行通道阵列内描绘的执行通道位置对511对齐的两个模版的计算。为了易于例示,该对执行通道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移位寄存器硬件可被设计为支持每周期多于一个位置的移位。后者的实施例在下文进一步更详细描述。
图6示出了阵列执行通道和移位寄存器结构的单位单元的另一个更详细描绘(光晕区域中的寄存器不包括相应的执行通道)。执行通道和与执行通道阵列中的每个位置相关联的寄存器空间在一实施例中是通过在执行通道阵列的每个节点处实例化图6中所示的电路来实现的。如图6中所示,单位单元包括执行通道601,其耦合到由四个寄存器R2至R5构成的寄存器文件602。在任何周期期间,执行通道601可从寄存器R1至R5的任何一者读取或向其写入。对于要求两个输入操作数的指令,执行通道可从寄存器R1至R5的任何一者取回这两个操作数。
在一实施例中,二维移位寄存器结构是通过如下方式实现的:在单个周期期间允许寄存器R2至R4的任意(仅)一者的内容被通过输出复用器603移“出”到其邻居的寄存器文件之一,并且让寄存器R2至R4的任意(仅)一者的内容被通过输入复用器604从其邻居的相应一者移“入”的内容所替换,从而邻居之间的移位是在相同方向上的(例如,所有执行通道向左移位,所有执行通道向右移位,等等)。虽然同一寄存器在同一周期上让其内容被移出并且被移入的内容所替换可能是常见的,但复用器布置603、604允许了同一周期期间的同一寄存器文件内的不同移位源和移位目标寄存器。
如图6中所示,注意在移位序列期间,执行通道将把内容从其寄存器文件602移出到其左、右、上、下邻居的每一者。结合同一移位序列,执行通道也将把内容从其左、右、上、下邻居的特定一者移入到其寄存器文件中。再一次,移出目标和移入源对于所有执行通道应当符合同一移位方向(例如,如果移出是向右侧邻居,则移入应当是从左侧邻居)。
虽然在一个实施例中,在每个周期中对于每个执行通道允许移位仅一个寄存器的内容,但其他实施例可允许多于一个寄存器的内容被移入/移出。例如,如果在图6中所示的复用器电路603、604的第二实例被包含到图6的设计中,则在同一周期期间可移出/移入两个寄存器的内容。当然,在每个周期只允许移位仅一个寄存器的内容的实施例中,通过对于数学操作之间的移位消耗更多时钟周期,从多个寄存器移位可在数学操作之间发生(例如,通过在数学操作之间消耗两个移位操作可在数学操作之间移位两个寄存器的内容)。
如果在移位序列期间执行通道的寄存器文件的非全部内容被移出,则注意每个执行通道的没有移出的寄存器的内容保持在原地(不移位)。这样,没有被移入的内容替换的任何没有移位的内容在移位周期之间对于执行通道保持本地。在每个执行通道中观察到的存储器单元(“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支持移位运算指令(右、左、上、下)以对二维移位寄存器结构内的数据移位。如上所述,程序控制指令主要由模版处理器的标量处理器执行。
c.编译器管理模版处理器存储器
返回参考图4,回想起寄存器409的光晕区域的存在,其在图4的特定实施例中驻留在执行通道阵列405的右边缘和下边缘周围(其他实施例可在执行通道阵列的更多或更少侧包括光晕区域)。在先前的论述中,“片”被理解为是消耗了具有执行通道阵列405的尺寸的内部移位寄存器空间的图像信息的阵列。这里,在各种实施例中,光晕409中的寄存器位置不包括用于在图像数据上执行图像处理指令的关联ALU单元,相反,光晕409区域存在来例如累积来自执行通道阵列区域内的移位活动的“溢出”数据。这样,可处理的图像数据的区域对应于区域405并且“片”被理解为与区域405延及相同范围。将片加载到寄存器阵列406中包括将图像数据加载到区域405中。
编译器负责将如下指令插入到程序代码中:这些指令实质上控制将信息片从片生成器加载到模版处理器的数据计算单元401的内部RAM 407或者将信息片从该内部RAM 407加载到片生成器。这样,在各种实施例中,编译器负责确定哪些片要被从片生成器加载到RAM 407中以及何时加载这样的片。此外,编译器负责确定模版处理器RAM 407中的哪个片要被加载到二维移位阵列406中。注意,RAM 407可被分解成单独的存储体,其中每个存储体被指派了相对于移位寄存器阵列的特定图像区域(例如,RAM存储体407_1为移位寄存器阵列的第一行保存图像区域,RAM存储体407_2为移位寄存器阵列的第二行保存图像数据,等等)。
这里,应当尽可能避免将同一片数据从片生成器“重加载”到RAM 407中和/或将同一片数据从RAM 407重加载到二维移位寄存器406中,以例如最小化图像处理器的功率消耗。如下面即将更详细说明的,即使图像数据的基本单位被认为是与执行通道阵列405的更小区域相对应的数据片,如果编译器认识到光晕区域409的存在,则也可避免效率低下。避免的效率低下在图像处理算法对于执行通道阵列405内的任何输出像素处理延伸到光晕外部的数据时尤其显著。
图7a-7c示出了基本示例。如图7a中所示,一片输入图像数据对应于更大的输入图像的区域701。图7a–7c为了简单假定输入片与执行通道阵列具有相同尺寸。虽然这种布置可能经常是方便的,但其并非必要的。例如,在输入表面的分辨率不同于输出表面的情况下(例如,来自于上采样或下采样),片可具有与执行通道阵列不同的尺寸。例如,在具有16×16的执行通道阵列的处理器中,2x下采样的输入片可具有尺寸32×32,而2x上采样的输入片可具有尺寸8×8。
如果输入图像被认为不仅包括片701,而且包括可装入光晕区域中的周围图像数据,则输入图像数据的总量可消耗阴影区域720。在为片701内的像素确定输出像素值时,至少一些算法可被设计为在光晕区域外例如在更大的区域730上处理输入图像数据。
例如,如果执行通道阵列405的尺寸是16像素位置乘16像素位置并且光晕区域的大小是沿着X轴的额外4像素位置和沿着Y轴的4像素位置,则片701将具有尺寸16像素位置乘16像素位置并且区域720将具有尺寸20像素位置乘20像素位置。如果为片701内的像素确定输出像素值的算法在尺寸18像素乘18像素的模版上处理,则对于片701需要处理的表面区域将从区域720向外扩展到包括边界730内的区域。这里,例如,为了适应对于片701的右下侧角落处的像素位置的处理,将需要由边界730限定的区域的右下角中的像素。从而,对片701的处理要求来自片702、703和704的大量数据。
在一实施例中,编译器被设计为理解输入图像内的多个片的布局、执行通道阵列的尺寸、光晕的尺寸和对于执行通道阵列区域内的特定输出像素要处理的模版的大小。编译器随后进而将存储器加载指令插入到代码中的适当位置处,这些指令将下一片信息从片生成器加载到数据计算单元RAM 407中。
此外,如下文将进一步更详细描述的,编译器还插入数据移动指令来移动数据计算单元的随机访问存储器407内的数据片以增强其再利用并从而减少将同一片数据从片生成器重复加载到随机访问存储器407中。
图7b示出了由编译器构造来使得片生成器最初用足够数目的片加载随机访问存储器407以对第一片位置701的每个像素位置完全执行该算法的指令740的序列。如图7b中所示,来自四个片701至704的数据被加载并且被指派逻辑片标识符(Lsheet_0,Lsheet_1,LSheet_2,LSheet_3)。这里,如果考虑包括光晕区域409在内的整个移位寄存器阵列406,则加载的片的数目对应于图像处理算法到达其中的片的数目。从对图3a和3b的论述回想起在各种实施例中与标量处理器302相关联的程序控制器309执行与对片生成器向/从数据计算单元301加载/存储数据片的命令相对应的指令。这样,指令740可由标量处理器302执行。
编译器还构造后续指令750、760以用来自刚才被加载到RAM中的四个片的内容加载移位寄存器阵列406(MEM LOAD)。指令750用LSheet_0的内容(图像区域701的内容)填充(populate)与执行通道阵列405延及相同范围的移位寄存器区域。类似地,与上文论述一致,标量处理器302也可执行指令750、760。
指令760填充光晕区域。也就是说,指令750执行以下事项:1)将片702(Lsheet_1)的左手侧(LHS)加载到紧挨执行通道阵列405的右边缘外侧存在的光晕409的区域中;2)将片704(Lsheet_3)的上方区域(UPR)加载到紧挨执行通道阵列405的下边缘下方存在的光晕409的区域中;3)将片705(Lsheet_4)的左上角加载到执行通道阵列405的右下角外侧的光晕区域中。在执行这些加载之后,包括光晕区域(图7a中的区域720)在内的整个移位寄存器阵列的内容都被加载以适当定位的输入图像数据。
这里,参考图4,注意每个执行通道阵列位置包含用于执行存储器加载指令(MEMLOAD)来从随机访问存储器407取得图像数据的存储器访问单元(M)。虽然在图4中没有示出,但在各种实施例中,光晕区域409中的每个位置也包括存储器访问单元,从而图像数据值可被从随机访问存储器407加载到光晕区域409中。然而,再一次,在各种实施例中,光晕区域位置不包含ALU单元,从而实际图像处理仍然限于执行通道阵列405内的图像数据。从而,指令750对应于在每个执行通道阵列位置处被单独执行但基于其在阵列中的位置而具有不同操作数数据(这定义了要加载的图像数据)的存储器加载指令,同时,类似地,MEMLOAD指令760对应于在光晕区域409内的特定位置处被单独执行但基于其在执行通道阵列周围的位置而具有不同输入操作数数据(这定义了要加载的图像数据)的存储器加载指令。用于为这些指令指定地址的技术在下文进一步更详细描述。
编译器还构造接下来的指令集770来执行为LSheet_0位置内的像素位置确定输出像素值的(一个或多个)图像处理算法。与上文论述一致,这些计算包括在模版区域上对于通过对二维移位寄存器阵列内的内容移位而实现的每个像素位置进行操作。编译器因此构造不仅用于在模版上执行数学计算而且用于执行相应寄存器移位指令的指令。
在当前论述的示例中,回想起对于LSheet_0内的任何像素位置要处理的模版的尺寸是18×18。这样,将有图像数据“溢出”执行通道阵列405的上侧和左侧之外进入随机访问存储器407中。也就是说,将数据向左移位将使得来自边界720所限定的区域之内但在边界701所限定的区域之外的片702(LSheet_1)和片703(LSheet_2)的数据被加载到光晕区域409的右边缘中。将数据加载到光晕区域409的右边缘中将有效地将“溢出”数据从执行通道阵列的左边缘和紧挨执行通道阵列405下方存在的光晕区域409的左边缘推出移位寄存器。溢出/推出的数据被写入到随机访问存储器407中。
类似地,将数据“向上”移位将使得来自边界720所限定的区域之内但在执行通道区域之外的片704(LSheet_3)和片703(LSheet_2)的数据被加载到光晕区域409的下边缘中。将数据加载到光晕区域409的下边缘中将有效地将“溢出”数据从执行通道阵列409的上边缘和存在于执行通道区域405右侧的光晕区域的上边缘推出移位寄存器。溢出/推出的数据也被写入到随机访问存储器407中。再一次,为了实现移位,编译器为新数据从RAM 407到移位寄存器中的所有加载和推出的数据从移位寄存器到RAM 407的写回构造代码。
在对于片701(LSheet_0)执行了所有移位和计算770之后,该过程将以光栅状方式继续向右扫描(区域701的输出片也可被写入到随机访问存储器407中以便转发到片生成器)。为了实现算法的光栅状扫描,只需要逻辑片的重指派,在此之后相同的程序代码可被重执行来为下一片的像素处理输出值。这样,在图像上以扫描状方式执行算法可被编译器构造为软件循环。这里,循环程序内的内部指针可随着循环的每次新迭代被更新。具体而言,当核心例程认识到其已到达对于当前递归要加载的数据的极“右”侧时,其类似地认识到下一递归即将来临。
这里,如图7c中所示,编译器构造额外的指令780的集合,这些指令780使机器为在光栅扫描中的下一片上执行算法做准备。这些指令包括将LSheet_1的内容移动(MOV)到LSheet_0中并且将LSheet_2的内容移动到LSheet_3中。此外,指令780包括将下一Lsheet_1(片705)和下一LSheet_2(片706)从片生成器加载到RAM 407中的指令。在这些指令780被执行之后,机器的情境与在指令770执行前图7b中的机器的情境没有不同,只不过要处理的片的位置向右了一片(即,片702而不是片701)。重要的是,已经被加载到RAM 407中的片(即,片702和703)不被从片生成器重加载到RAM407中。这样,避免了如果将片702和703重加载到RAM 407中将会导致的任何效率低下。
注意,如指令780内的SG指令所指示将LSheet_1(片705)和LSheet_2(片706)从片生成器加载到RAM 407中可例如在操作770期间执行,并且随后在Sheet_1和Sheet2的早前内容分别被移动到了Lsheet_0和LSheet_3中之后在RAM内被移动到Sheet_1和Sheet_2。这样,指令780的SG LOAD指令实际上可实现为RAM 407内的额外MOV指令。在一实施例中,指令780的移动(MOV)指令是数据在RAM 407内的实际物理移动。这样,在程序代码内指定的LSheet_0至LSheet_3的地址是固定地址。
虽然以上联系图7a至7c概述的方法针对的是对于片701内的像素要处理的模版尺寸大到足以包括存在于光晕区域之外的像素的示例,但相信该方法对于如下应用是最优的:对于片701内(即,执行通道阵列内)的像素要处理的模版尺寸足够小以至于所有要处理的像素存在于光晕区域内(即,不需要在边界720外且在边界730内或者在更外边的像素)。在此情况下,避免了将额外的图像数据加载到二维移位寄存器中(例如,沿着光晕区域的右边缘),
图8描绘了上文描述的方法。该方法包括重复801执行以下步骤。将下一片图像数据从存储器的第一位置加载到二维移位寄存器阵列中802。存储器本地耦合到二维移位寄存器阵列和执行通道阵列,该执行通道阵列沿着至少一个阵列轴具有比二维移位寄存器阵列更小的尺寸。加载的下一片图像数据保持在二维移位寄存器阵列的图像区域内。通过沿着执行通道阵列的各个通道执行程序代码指令来为下一片图像数据确定输出值,其中,在确定输出值时使用的模版大小只涵盖存在于二维移位寄存器阵列内的像素803。把要被完全加载到二维移位寄存器阵列中的下一片图像数据从存储器的第二位置移动到存储器的第一位置804。
从先前论述回想到在指令750、760和770的执行期间,图像数据可被从RAM 407加载到二维移位寄存器406中。这里,二维移位寄存器406(包括光晕区域)中的每个个体位置被假定为包括存储器访问单元,用于本地执行存储器加载指令以使得数据可被从RAM 407个体加载到其本地寄存器空间中。在一实施例中,编译器对于RAM 407中的LSheet_0固定基本地址分量并且被编译器识别来执行循环的额外逻辑片(例如,LSheet_1、LSheet_2和LSheet_3)的地址相对于基本地址分量具有偏移量。例如,如果RAM 407中对于LSheet_0的地址是[base],则对于LSheet_1的地址是[base]+1,对于LSheet_2的地址是[base]+2,并且对于LSheet_3的地址是[base]+3。
为了支持广泛可编程环境,执行通道阵列中和光晕区域中的执行单元的指令集体系结构支持为特定移位寄存器阵列位置生成正确偏移量的指令。该偏移量随后可用来例如生成正确的地址。这里,指出以下这点是恰当的:图7a至7c的示例在片尺寸与执行通道阵列尺寸相同这个意义上是简化的。也就是说,片和执行通道阵列两者都具有16像素位置×16像素位置的尺寸。
其他实施例可选择具有例如在任一维度或两个维度上大于或小于执行通道阵列的片大小。在前一种情况下,例如LSheet_0将扩展到光晕区域中,而在后一种情况下,例如LSheet_1和/或LSheet_3最初将在执行通道阵列405的尺寸内加载。为了简单,图9a和9b的论述将参考简化情况,其中片尺寸与执行通道阵列的尺寸相同。然而,正如将更清楚阐明的,指令的一般操作可用于尺寸不同的实施例。
图9a实质上示出了图7a的描绘的放大,其中包括其光晕区域在内的二维移位寄存器阵列的全尺寸作为阴影区域被观察。图9b示出了在每个阵列位置处执行的特殊指令(QUADRANT)的结果。这里,对于每个移位寄存器阵列位置,QUADRANT指令计算在将内容从RAM 407加载到特定移位阵列位置中时要添加到基本存储器地址的正确偏移量。
在图9b的特定示例中,在片尺寸与执行通道阵列尺寸相同的情况下,与执行通道阵列区域相关联的所有阵列位置将加载具有偏移量0的LSheet_0。与之不同,紧挨执行通道阵列右侧的光晕区域中的阵列位置将从具有偏移量+1的LSheet_1加载,紧挨执行通道阵列下方的光晕区域中的阵列位置将从具有偏移量+3的LSheet_3加载,并且执行通道阵列角落外的光晕区域中的阵列位置将从具有偏移量+2的LSheet_2加载。
在一实施例中,指令接受片(Xs,Ys)的X和Y尺寸以及指定阵列位置的位置(Xa,Ya)的X和Y坐标作为输入参数。利用这些值,QUADRANT指令可计算偏移量为:
偏移量=
0,如果(Xa<Xs)AND(Ya<Ys)=TRUE
1,如果(Xa>Xs)AND(Ya<Ys)=TRUE
2,如果(Xa>Xs)AND(Ya>Ys)=TRUE
3,如果(Xa<Xs)AND(Ya>Ys)=TRUE
在各种实施例中,编译器生成实质上识别将读取坐标对的阵列位置的Xa,Ya坐标对的阵列,并且将Xs和Ys指定为立即操作数,因为它们在QUADRANT指令的所有执行中是恒定的。Xa和Ya坐标对在指令执行前作为输入操作数信息被加载到各个阵列位置中。在另一实施例中,指令额外接受[base]地址值作为输入操作数,从而[base]+偏移量的完全地址值可被提供作为QUADRANT指令的结果。[base]操作数可被指定为立即操作数或者程序代码可被构造为动态地确定[base]值并且将其作为额外的输入操作数广播到阵列位置。
注意,QUADRANT指令对于确定输出像素值的算法将在四个片中的像素值上操作的操作环境是特别的。对于例如算法将在九个片上操作的操作环境,另一指令HECTANT可被内置到指令集体系结构中,其计算对于任何特定阵列位置要使用九个不同偏移量中的哪一个。。
图10示出了上文联系图7a至7c描述的光栅扫描处理方案的替换实施例的描绘。在图10的方案中,如果扫描是向右的,则光晕区域的右侧最初不被加载。反而,只有紧挨执行通道下方的光晕部分被加载。在算法的操作期间,如果到了从LSheet_1需要新值以例如实现向左移位的程度,则沿着执行通道阵列的右边缘而不是沿着光晕的右边缘加载值。图10的方案在算法不在光晕区域之外操作的情况中尤其有用并且将有效地产生具有更少加载指令的代码。
d.实现实施例
指出以下这点是恰当的:上文描述的各种图像处理器体系结构特征不一定限于传统意义上的图像处理,并且因此可被应用到可引起(或者可不引起)图像处理器被重表征的其他应用。例如,如果上文描述的各种图像处理器体系结构特征的任何一者要被用于动画的创建和/或生成和/或渲染,而不是实际相机图像的处理,则图像处理器可被表征为图形处理单元。此外,上文描述的图像处理器体系结构特征可被应用到其他技术应用,例如视频处理、视觉处理、图像识别和/或机器学习。在以这种方式应用的情况下,图像处理器可与更通用的处理器(例如,其是计算系统的CPU或者CPU的一部分)集成(例如,作为其协处理器),或者可以是计算系统内的独立处理器。
上文论述的硬件设计实施例可实现在半导体芯片内和/或实现为电路设计的描述以最终瞄准半导体制造工艺。在后一种情况下,这种电路描述可采取(例如,VHDL或Verilog)寄存器传送级(register transfer level,RTL)电路描述、门级电路描述、晶体管级电路描述或掩模描述或者其各种组合的形式。电路描述通常实现在计算机可读存储介质上(例如,CD-ROM或其他类型的存储技术)。
从前述部分,认识到以下这点是恰当的:如上所述的图像处理器可以用硬件实现在计算机系统上(例如,实现为手持设备的处理来自手持设备的相机的数据的片上系统(System on Chip,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、电池1114、电力管理控制单元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可耦合到GPU 1116和CPU 1101的任一者或两者作为其协处理器。此外,在各种实施例中,GPU1116可以用上文详细描述的图像处理器特征的任何一者来实现。
触摸屏显示器1103、通信接口1104–1107、GPS接口1108、传感器1109、相机1110和扬声器/麦克风编解码器1113、1114的每一者相对于在适当时也包括集成外围设备(例如,一个或多个相机1110)的整体计算系统全都可被视为各种形式的I/O(输入和/或输出)。取决于实现方式,这些I/O组件中的各种I/O组件可被集成在应用处理器/多核处理器1150上或者可位于应用处理器/多核处理器1150的管芯外或封装外。
在一实施例中,一个或多个相机1110包括能够测量该相机与其视野中的物体之间的深度的深度相机。在应用处理器或其他处理器的通用CPU核(或者具有指令执行流水线来执行程序代码的其他功能块)上执行的应用软件、操作系统软件、设备驱动器软件和/或固件可执行上文描述的任何功能。
本发明的实施例可包括如上所述的各种过程。这些过程可以用机器可执行指令来实现。这些指令可用于使得通用或专用处理器执行特定过程。或者,这些过程可由包含用于执行这些过程的硬连线逻辑的特定硬件组件执行,或者由编程的计算机组件和定制硬件组件的任何组合执行。
本发明的元素也可作为用于存储机器可执行指令的机器可读介质来提供。机器可读介质可包括但不限于适用于存储电子指令的软盘、光盘、CD-ROM和磁光盘、闪存、ROM、RAM、EPROM、EEPROM、磁卡或光卡、传播媒体或者其他类型的媒体/机器可读介质。例如,本发明可作为计算机程序被下载,该计算机程序可经由通信链路(例如,调制解调器或网络连接)通过实现在载波或其他传播介质中的数据信号被从远程计算机(例如,服务器)传送到请求方计算机(例如,客户端)。
在前述说明书中,已经参考本发明的具体示范性实施例描述了本发明。然而,很明显,在不脱离如所附权利要求所记载的本发明的更宽精神和范围的情况下,可对其进行各种修改和改变。说明书和附图因此应被认为是例示性的,而不是限制性的。
Claims (20)
1.一种图像处理器,包括:
存储器,其耦合到二维移位寄存器阵列,所述存储器将下一片图像数据保持在第一位置中;
二维移位寄存器阵列,其耦合到所述存储器,所述下一片图像数据要被从所述存储器中的第一位置加载到所述二维移位寄存器阵列中,加载的下一片图像数据保持在所述二维移位寄存器阵列的图像区域内;
执行通道阵列,其沿着至少一个阵列轴具有比所述二维移位寄存器阵列更小的尺寸,所述执行通道阵列沿着所述执行通道阵列的各个通道为所述下一片图像数据确定输出值,其中,在确定所述输出值时使用的模版大小只涵盖存在于所述二维移位寄存器阵列内的像素;
所述图像处理器反复地把要被完全加载到所述二维移位寄存器阵列中的下一片图像数据从所述存储器的第二位置移动到所述存储器的第一位置,从而使得所述执行通道阵列能够反复地为图像数据片的序列确定输出值。
2.如权利要求1所述的图像处理器,其中,所述图像处理器是包括多个通用处理核的片上系统的组件。
3.如权利要求1所述的图像处理器,其中,所述执行通道阵列沿着两个阵列轴具有比所述二维移位寄存器阵列更小的尺寸。
4.如权利要求1所述的图像处理器,其中,所述图像处理器反复地将具有与所述下一片的图像内容相邻的图像内容的下一相邻片的图像数据加载到所述二维移位寄存器阵列的外围寄存器位置中。
5.如权利要求4所述的图像处理器,其中,所述图像处理器反复地从所述存储器的第三位置读取所述下一相邻片的图像数据。
6.如权利要求4所述的图像处理器,其中,所述下一相邻片的图像数据也是要被完全加载到所述二维移位寄存器阵列中的所述下一片图像数据并且所述第二存储器位置和第三存储器位置是相同的存储器位置。
7.如权利要求1所述的图像处理器,其中,所述图像处理器反复地将具有所述下一片的图像内容的角落之外的图像内容的下一角落片的图像数据加载到所述二维移位寄存器阵列的角落寄存器位置中。
8.一种方法,包括:
反复执行以下步骤:
将下一片图像数据从存储器的第一位置加载到二维移位寄存器阵列中,所述存储器本地耦合到所述二维移位寄存器阵列和沿着至少一个阵列轴具有比所述二维移位寄存器阵列更小的尺寸的执行通道阵列,加载的下一片图像数据保持在所述二维移位寄存器阵列的图像区域内;
通过沿着所述执行通道阵列的各个通道执行程序代码指令来为所述下一片图像数据确定输出值,其中,在确定所述输出值时使用的模版大小只涵盖存在于所述二维移位寄存器阵列内的像素;
把要被完全加载到所述二维移位寄存器阵列中的下一片图像数据从所述存储器的第二位置移动到所述存储器的第一位置。
9.如权利要求8所述的方法,其中,所述执行通道阵列和二维移位寄存器阵列是图像处理器的组件,所述图像处理器是包括多个通用处理核的片上系统的组件。
10.如权利要求8所述的方法,其中,所述执行通道阵列沿着两个阵列轴具有比所述二维移位寄存器阵列更小的尺寸。
11.如权利要求8所述的方法,其中,所述方法还包括反复地将具有与所述下一片的图像内容相邻的图像内容的下一相邻片的图像数据加载到所述二维移位寄存器阵列的外围寄存器位置中。
12.如权利要求11所述的方法,其中,所述方法还包括反复地从所述存储器的第三位置读取所述下一相邻片的图像数据。
13.如权利要求11所述的方法,其中,所述下一相邻片的图像数据也是要被完全加载到所述二维移位寄存器阵列中的所述下一片图像数据,并且所述第二存储器位置和第三存储器位置是相同的存储器位置。
14.如权利要求8所述的方法,其中,所述方法还包括反复地将具有所述下一片的图像内容的角落之外的图像内容的下一角落片的图像数据加载到所述二维移位寄存器阵列的角落寄存器位置中。
15.一种计算系统,包括:
a)多个通用处理核;
b)系统存储器;
c)耦合在所述系统存储器和所述多个处理核之间的存储器控制器;
d)图像处理器,包括:
存储器,其耦合到二维移位寄存器阵列,所述存储器将下一片图像数据保持在第一位置中;
二维移位寄存器阵列,其耦合到所述存储器,所述下一片图像数据要被从所述存储器中的第一位置加载到所述二维移位寄存器阵列中,加载的下一片图像数据保持在所述二维移位寄存器阵列的图像区域内;
执行通道阵列,其沿着至少一个阵列轴具有比所述二维移位寄存器阵列更小的尺寸,所述执行通道阵列沿着所述执行通道阵列的各个通道为所述下一片图像数据确定输出值,其中,在确定所述输出值时使用的模版大小只涵盖存在于所述二维移位寄存器阵列内的像素;
所述图像处理器反复地把要被完全加载到所述二维移位寄存器阵列中的下一片图像数据从所述存储器的第二位置移动到所述存储器的第一位置,从而使得所述执行通道阵列能够反复地为图像数据片的序列确定输出值。
16.如权利要求15所述的计算系统,其中,所述执行通道阵列沿着两个阵列轴具有比所述二维移位寄存器阵列更小的尺寸。
17.如权利要求15所述的计算系统,其中,所述图像处理器反复地将具有与所述下一片的图像内容相邻的图像内容的下一相邻片的图像数据加载到所述二维移位寄存器阵列的外围寄存器位置中。
18.如权利要求17所述的计算系统,其中,所述图像处理器反复地从所述存储器的第三位置读取所述下一相邻片的图像数据。
19.如权利要求17所述的计算系统,其中,所述下一相邻片的图像数据也是要被完全加载到所述二维移位寄存器阵列中的所述下一片图像数据,并且所述第二存储器位置和第三存储器位置是相同的存储器位置。
20.如权利要求15所述的计算系统,其中,所述图像处理器反复地将具有所述下一片的图像内容的角落之外的图像内容的下一角落片的图像数据加载到所述二维移位寄存器阵列的角落寄存器位置中。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662300671P | 2016-02-26 | 2016-02-26 | |
US62/300,671 | 2016-02-26 | ||
US15/427,374 US10204396B2 (en) | 2016-02-26 | 2017-02-08 | Compiler managed memory for image processor |
US15/427,374 | 2017-02-08 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107133908A true CN107133908A (zh) | 2017-09-05 |
CN107133908B CN107133908B (zh) | 2021-01-12 |
Family
ID=58228574
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710107518.9A Active CN107133908B (zh) | 2016-02-26 | 2017-02-27 | 用于图像处理器的编译器管理存储器 |
Country Status (9)
Country | Link |
---|---|
US (3) | US10204396B2 (zh) |
EP (1) | EP3420528B1 (zh) |
JP (1) | JP6726752B2 (zh) |
KR (1) | KR102050899B1 (zh) |
CN (1) | CN107133908B (zh) |
DE (2) | DE102017103764A1 (zh) |
GB (3) | GB2567757B (zh) |
TW (2) | TWI698832B (zh) |
WO (1) | WO2017147020A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107633477A (zh) * | 2017-10-20 | 2018-01-26 | 上海兆芯集成电路有限公司 | 图像处理方法及其装置 |
CN108230229A (zh) * | 2018-01-04 | 2018-06-29 | 上海兆芯集成电路有限公司 | 图像处理装置以及图像处理方法 |
CN112005213A (zh) * | 2018-02-27 | 2020-11-27 | 谷歌有限责任公司 | 用于图像处理器的大型查找表 |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6815926B2 (ja) * | 2017-04-27 | 2021-01-20 | キヤノン株式会社 | 撮像装置、撮像システム、移動体、チップ |
US10489878B2 (en) * | 2017-05-15 | 2019-11-26 | Google Llc | Configurable and programmable image processor unit |
US10503689B2 (en) * | 2017-05-15 | 2019-12-10 | Google Llc | Image processor I/O unit |
US10460416B1 (en) | 2017-10-17 | 2019-10-29 | Xilinx, Inc. | Inline image preprocessing for convolution operations using a matrix multiplier on an integrated circuit |
US11386644B2 (en) * | 2017-10-17 | 2022-07-12 | Xilinx, Inc. | Image preprocessing for generalized image processing |
US10983583B2 (en) * | 2018-08-23 | 2021-04-20 | Apple Inc. | Electronic display reduced blanking duration systems and methods |
CN111028360B (zh) * | 2018-10-10 | 2022-06-14 | 芯原微电子(上海)股份有限公司 | 一种3d图像处理中数据读写方法及系统、存储介质及终端 |
US10552939B1 (en) | 2019-02-12 | 2020-02-04 | Google Llc | Image processor complex transfer functions |
US11848980B2 (en) * | 2020-07-09 | 2023-12-19 | Boray Data Technology Co. Ltd. | Distributed pipeline configuration in a distributed computing system |
CN112184536B (zh) * | 2020-09-24 | 2022-09-30 | 成都海光集成电路设计有限公司 | 基于gemm处理图像数据的方法、装置、设备和介质 |
TWI771921B (zh) * | 2021-02-22 | 2022-07-21 | 瑞鼎科技股份有限公司 | 顯示驅動系統 |
WO2023172660A1 (en) * | 2022-03-10 | 2023-09-14 | Ascenium, Inc. | Highly parallel processing architecture with out-of-order resolution |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1672419A (zh) * | 2002-07-29 | 2005-09-21 | 皇家飞利浦电子股份有限公司 | 用于减少视频数据中块人工产物的过滤 |
CN1916959A (zh) * | 2006-08-29 | 2007-02-21 | 中国航天时代电子公司第七七一研究所 | 可缩放大规模二维卷积电路 |
US20080133881A1 (en) * | 2006-12-01 | 2008-06-05 | Thomson Licensing Llc | Array of processing elements with local registers |
CN101697486A (zh) * | 2009-09-27 | 2010-04-21 | 华中科技大学 | 一种二维小波变换集成电路结构 |
CN102665049A (zh) * | 2012-03-29 | 2012-09-12 | 中国科学院半导体研究所 | 基于可编程视觉芯片的视觉图像处理系统 |
CN103020890A (zh) * | 2012-12-17 | 2013-04-03 | 中国科学院半导体研究所 | 基于多层次并行处理的视觉处理装置 |
CN103019656A (zh) * | 2012-12-04 | 2013-04-03 | 中国科学院半导体研究所 | 可动态重构的多级并行单指令多数据阵列处理系统 |
US20150086134A1 (en) * | 2013-09-20 | 2015-03-26 | The Board Of Trustees Of The Leland Stanford Junior University | Low power programmable image processor |
Family Cites Families (75)
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 |
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 |
US6948050B1 (en) | 1989-11-17 | 2005-09-20 | Texas Instruments Incorporated | Single integrated circuit embodying a dual heterogenous processors with separate instruction handling hardware |
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 |
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 |
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 |
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 |
US8725990B1 (en) | 2004-11-15 | 2014-05-13 | Nvidia Corporation | Configurable SIMD engine with high, low and mixed precision modes |
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 |
US7834873B2 (en) * | 2006-08-25 | 2010-11-16 | Intel Corporation | Display processing line buffers incorporating pipeline overlap |
US20080111823A1 (en) | 2006-11-13 | 2008-05-15 | Faraday Technology Corp. | Graphics processing system |
US8321849B2 (en) | 2007-01-26 | 2012-11-27 | Nvidia Corporation | Virtual architecture and instruction set for parallel thread computing |
US20080244222A1 (en) | 2007-03-30 | 2008-10-02 | Intel Corporation | Many-core processing using virtual processors |
JP4389976B2 (ja) | 2007-06-29 | 2009-12-24 | ブラザー工業株式会社 | 画像処理装置および画像処理プログラム |
JP4844853B2 (ja) | 2007-09-05 | 2011-12-28 | 国立大学法人東北大学 | 固体撮像素子及びその駆動方法 |
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 |
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 |
TWI424372B (zh) * | 2010-03-24 | 2014-01-21 | Altek Corp | Selectable image line path means |
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 |
US9183614B2 (en) | 2011-09-03 | 2015-11-10 | Mireplica Technology, Llc | Processor, system, and method for efficient, high-throughput processing of two-dimensional, interrelated data sets |
JP5742651B2 (ja) | 2011-10-15 | 2015-07-01 | コニカミノルタ株式会社 | 画像処理装置、連携方法および連携プログラム |
CN104081336B (zh) | 2011-12-23 | 2018-10-23 | 英特尔公司 | 用于检测向量寄存器内的相同元素的装置和方法 |
JP5746100B2 (ja) | 2011-12-27 | 2015-07-08 | 京セラドキュメントソリューションズ株式会社 | 画像形成装置 |
US8823736B2 (en) | 2012-01-20 | 2014-09-02 | Intel Corporation | Graphics tiling architecture with bounding volume hierarchies |
US10244246B2 (en) | 2012-02-02 | 2019-03-26 | Texas Instruments Incorporated | Sub-pictures for pixel rate balancing on multi-core platforms |
US9235769B2 (en) | 2012-03-15 | 2016-01-12 | Herta Security, S.L. | Parallel object detection method for heterogeneous multithreaded microarchitectures |
TWI520598B (zh) | 2012-05-23 | 2016-02-01 | 晨星半導體股份有限公司 | 影像處理裝置與影像處理方法 |
US9232139B2 (en) | 2012-07-24 | 2016-01-05 | Apple Inc. | Image stabilization using striped output transformation unit |
US9378181B2 (en) | 2012-11-09 | 2016-06-28 | Intel Corporation | Scalable computing array |
US8954992B2 (en) | 2013-03-15 | 2015-02-10 | Lenovo Enterprise Solutions (Singapore) Pte. Ltd. | Distributed and scaled-out network switch and packet processing |
US9165337B2 (en) | 2013-05-31 | 2015-10-20 | Qualcomm Incorporated | Command instruction management |
US9749548B2 (en) | 2015-01-22 | 2017-08-29 | Google Inc. | Virtual linebuffers for image signal processors |
US9965824B2 (en) | 2015-04-23 | 2018-05-08 | Google Llc | Architecture for high performance, power efficient, programmable image processing |
US9785423B2 (en) | 2015-04-23 | 2017-10-10 | Google Inc. | Compiler for translating between a virtual image processor instruction set architecture (ISA) and target hardware having a two-dimensional shift array structure |
US10095479B2 (en) | 2015-04-23 | 2018-10-09 | Google Llc | Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure |
US10291813B2 (en) | 2015-04-23 | 2019-05-14 | Google Llc | Sheet generator for image processor |
US9756268B2 (en) | 2015-04-23 | 2017-09-05 | Google Inc. | Line buffer unit for image processor |
US9772852B2 (en) * | 2015-04-23 | 2017-09-26 | Google Inc. | Energy efficient processor core architecture for image processor |
US9769356B2 (en) | 2015-04-23 | 2017-09-19 | Google Inc. | Two dimensional shift array 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 |
-
2017
- 2017-02-08 US US15/427,374 patent/US10204396B2/en active Active
- 2017-02-17 WO PCT/US2017/018444 patent/WO2017147020A1/en active Application Filing
- 2017-02-17 EP EP17708937.2A patent/EP3420528B1/en active Active
- 2017-02-17 JP JP2018539834A patent/JP6726752B2/ja active Active
- 2017-02-17 KR KR1020187022164A patent/KR102050899B1/ko active IP Right Grant
- 2017-02-23 GB GB1820155.8A patent/GB2567757B/en active Active
- 2017-02-23 DE DE102017103764.0A patent/DE102017103764A1/de active Pending
- 2017-02-23 GB GB1702925.7A patent/GB2549578B/en active Active
- 2017-02-23 GB GB1912713.3A patent/GB2576117B/en active Active
- 2017-02-23 DE DE202017101012.0U patent/DE202017101012U1/de active Active
- 2017-02-24 TW TW107117967A patent/TWI698832B/zh active
- 2017-02-24 TW TW106106319A patent/TWI628618B/zh active
- 2017-02-27 CN CN201710107518.9A patent/CN107133908B/zh active Active
- 2017-06-16 US US15/625,972 patent/US10304156B2/en active Active
-
2019
- 2019-02-11 US US16/272,819 patent/US10685422B2/en active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1672419A (zh) * | 2002-07-29 | 2005-09-21 | 皇家飞利浦电子股份有限公司 | 用于减少视频数据中块人工产物的过滤 |
CN1916959A (zh) * | 2006-08-29 | 2007-02-21 | 中国航天时代电子公司第七七一研究所 | 可缩放大规模二维卷积电路 |
US20080133881A1 (en) * | 2006-12-01 | 2008-06-05 | Thomson Licensing Llc | Array of processing elements with local registers |
CN101697486A (zh) * | 2009-09-27 | 2010-04-21 | 华中科技大学 | 一种二维小波变换集成电路结构 |
CN102665049A (zh) * | 2012-03-29 | 2012-09-12 | 中国科学院半导体研究所 | 基于可编程视觉芯片的视觉图像处理系统 |
CN103019656A (zh) * | 2012-12-04 | 2013-04-03 | 中国科学院半导体研究所 | 可动态重构的多级并行单指令多数据阵列处理系统 |
CN103020890A (zh) * | 2012-12-17 | 2013-04-03 | 中国科学院半导体研究所 | 基于多层次并行处理的视觉处理装置 |
US20150086134A1 (en) * | 2013-09-20 | 2015-03-26 | The Board Of Trustees Of The Leland Stanford Junior University | Low power programmable image processor |
Non-Patent Citations (1)
Title |
---|
JAMES HEGARTY 等: "Darkroom: Compiling High-Level Image Processing Code into Hardware Pipelines", 《ACM TRANSACTIONS ON COMPUTER SYSTEMS》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107633477A (zh) * | 2017-10-20 | 2018-01-26 | 上海兆芯集成电路有限公司 | 图像处理方法及其装置 |
CN108230229A (zh) * | 2018-01-04 | 2018-06-29 | 上海兆芯集成电路有限公司 | 图像处理装置以及图像处理方法 |
CN108230229B (zh) * | 2018-01-04 | 2021-07-06 | 格兰菲智能科技有限公司 | 图像处理装置以及图像处理方法 |
CN112005213A (zh) * | 2018-02-27 | 2020-11-27 | 谷歌有限责任公司 | 用于图像处理器的大型查找表 |
Also Published As
Publication number | Publication date |
---|---|
GB2576117B (en) | 2020-08-12 |
GB201820155D0 (en) | 2019-01-23 |
JP2019507922A (ja) | 2019-03-22 |
KR20180100374A (ko) | 2018-09-10 |
GB201912713D0 (en) | 2019-10-16 |
US20190188824A1 (en) | 2019-06-20 |
US10204396B2 (en) | 2019-02-12 |
GB2567757A (en) | 2019-04-24 |
GB2549578A (en) | 2017-10-25 |
DE102017103764A1 (de) | 2017-08-31 |
TWI628618B (zh) | 2018-07-01 |
GB2567757B (en) | 2019-10-23 |
JP6726752B2 (ja) | 2020-07-22 |
KR102050899B1 (ko) | 2019-12-02 |
GB2549578B (en) | 2019-01-30 |
EP3420528B1 (en) | 2022-06-15 |
TWI698832B (zh) | 2020-07-11 |
TW201737201A (zh) | 2017-10-16 |
GB201702925D0 (en) | 2017-04-12 |
CN107133908B (zh) | 2021-01-12 |
US10685422B2 (en) | 2020-06-16 |
EP3420528A1 (en) | 2019-01-02 |
WO2017147020A1 (en) | 2017-08-31 |
US20170249717A1 (en) | 2017-08-31 |
GB2576117A (en) | 2020-02-05 |
DE202017101012U1 (de) | 2017-05-29 |
US10304156B2 (en) | 2019-05-28 |
US20170287105A1 (en) | 2017-10-05 |
TW201830329A (zh) | 2018-08-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107133908A (zh) | 用于图像处理器的编译器管理存储器 | |
KR102232722B1 (ko) | 프로그램 가능한 2차원 이미지 프로세서상의 컨볼루션 신경망 | |
JP7202987B2 (ja) | 高性能で、電力効率の良い、プログラマブルな画像処理のためのアーキテクチャ | |
CN107430760A (zh) | 用于图像处理器的二维移位阵列 | |
EP3286725B1 (en) | Sheet generator for image processor | |
CN107408041A (zh) | 用于图像处理器的能量高效的处理器核心架构 | |
CN110300989A (zh) | 可配置并且可编程的图像处理器单元 | |
CN107563953A (zh) | 具有二维执行通道阵列和二维移位寄存器的图像处理器的区块操作 | |
CN107533751A (zh) | 用于图像处理器的线缓冲器单元 | |
CN107533750A (zh) | 虚拟图像处理器指令集架构(isa)和存储器模型与具有二维移位阵列结构的示例性目标硬件 | |
CN108541321A (zh) | 将程序代码映射到高性能、高功效的可编程图像处理硬件平台的编译技术 | |
EP3622399B1 (en) | Determination of per line buffer unit memory allocation | |
CN107563954A (zh) | 具有二维执行通道阵列和二维移位寄存器的图像处理器上区块操作的核处理 | |
EP3384498B1 (en) | Shift register with reduced wiring complexity | |
US11030005B2 (en) | Configuration of application software on multi-core image processor | |
CN107563951A (zh) | 在二维图像处理器上的统计操作 | |
US10489199B2 (en) | Program code transformations to improve image processor runtime efficiency | |
CN110300944A (zh) | 具有可配置数目的活动核心和支持内部网络的图像处理器 | |
CN107133016A (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 |
Address after: American California Applicant after: Google limited liability company Address before: American California Applicant before: Google Inc. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |