CN112005213A - 用于图像处理器的大型查找表 - Google Patents

用于图像处理器的大型查找表 Download PDF

Info

Publication number
CN112005213A
CN112005213A CN201980022634.8A CN201980022634A CN112005213A CN 112005213 A CN112005213 A CN 112005213A CN 201980022634 A CN201980022634 A CN 201980022634A CN 112005213 A CN112005213 A CN 112005213A
Authority
CN
China
Prior art keywords
lookup table
execution
local
value
remote
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.)
Pending
Application number
CN201980022634.8A
Other languages
English (en)
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 CN112005213A publication Critical patent/CN112005213A/zh
Pending legal-status Critical Current

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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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/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/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Image Processing (AREA)
  • Complex Calculations (AREA)

Abstract

用于在图像处理器上支持大型查找表的方法、系统和设备,包括编码在计算机存储介质上的计算机程序。所述方法中的一种方法包括:接收用于图像处理器的输入内核程序,所述图像处理器具有二维执行通道阵列、移位寄存器阵列和多个存储器体。如果所述内核程序具有读取跨所述多个存储器体被分区的查找表的查找表值的指令,则用指令序列来替换所述内核程序中的所述指令,所述指令序列在由执行通道执行时使所述执行通道从本地存储器体中读取第一值并且代表属于不同执行通道组的另一执行通道来从所述本地存储器体中读取第二值。

Description

用于图像处理器的大型查找表
背景技术
本说明书涉及图像处理器。
图像处理器是可编程的、特定领域的并行处理装置,该装置设计为利用图像数据中的二维空间局部性。图像处理器设计为有效地处理现有图像数据,该图像处理器与图形处理单元(GPU)有所区别,该图形处理单元(GPU)设计为首先从内部表示生成图像。
图像处理器设计成用于利用二维空间局部性来高效、低功耗、并行执行工作负载。当针对输入数据中位置的输出数据依赖于与输入数据中该位置相邻或者在该位置附近的数据时,计算任务具有二维空间局部性。例如,3x3模糊滤波器可以使用输入图像数据的9像素正方形区域中的数据以计算在正方形区域的中心处的像素的输出值。换句话说,模糊滤波器具有空间局部性,因为输出值仅使用来自相邻像素的数据。图像处理器还可以用于在其他领域高性能地并行执行工作负载,包括计算机视觉、对象辨识和神经网络。
对图像处理器进行编程通常需要对内核程序进行编写和编译,该内核程序然后由多个执行通道中的每个执行通道同时执行。每个执行通道本身是可以执行指令并且将数据存储在一个或多个寄存器中的组件。
一些图像处理器通过将执行通道阵列与移位寄存器阵列耦合来利用空间局部性。这种布置允许每个执行通道通过在移位寄存器阵列内使输入数据移位而不是执行存储器访问来访问其内核程序所需的数据。概念上,可以认为这是使图像数据阵列在执行通道阵列之下移位。例如,执行通道可以通过重复读取按照以下蛇扫描顺序移位的数据来访问计算模糊滤波器所需的数据:向左两个像素,向下一个像素,向右两个像素,向下一个像素,向左两个像素。
当内核程序不依赖数据时,该策略效果很好。例如,模糊滤波器不依赖数据,因为不管输入像素的值如何,内核程序都执行相同的数据访问模式。当内核程序不依赖数据时,编译器可以通过生成指令以按照可以预先进行预测的模式——例如,按照上面描述的蛇扫描顺序——使编译器来预先排定所有数据移位。然而,一些内核程序依赖数据。换句话说,执行通道所访问的数据会根据输入数据而改变。因此,编译器无法预先排定访问模式,必须在运行时计算这些访问模式。
依赖数据的一种类别的内核程序包括利用查找表的内核程序。查找表是将输入值映射到预先计算的输出值的数据结构。查找表通常用于减少运行时计算。例如,查找表可以将彩色图像值映射到对应的灰度对应项,这避免了格式之间的运行时转换。当内核程序利用查找表时,编译器生成用于执行随机存储器访问以获得存储器中的查找表值的指令序列。该指令序列通常包括:1)从输入数据计算索引,2)从索引计算存储器地址,以及3)从计算的存储器地址进行读取。
只要查找表适合在可由每个执行通道访问的存储器内,图像处理器就可以使用查找表。对于大型查找表,这可能是问题。为了使速度最大化,图像处理器的执行通道通常不能访问高速缓存或主存储器。相反,执行通道可能只能访问针对速度而不是容量所设计的一个或多个本地存储器体(memory bank),例如,SRAM。如果将本地存储器分为分别只可由执行通道的子集访问的多个较小的存储器体,则问题更严重。在那种情况下,需要在每个本地存储器体中复制查找表。如果特定内核程序的查找表不适合在每个本地存储器体内,则会无法对程序进行编译。
发明内容
本说明书描述了用于图像处理器的编译器如何可以生成程序代码以支持大型查找表。在该上下文中,大型查找表是以下查找表:对于可由图像处理器的执行通道访问的一个或多个本地存储器体,该表太大而不适合那些存储器体。该编译器可以通过跨多个本地存储器体有效地分布查找表的各个部分来支持大型查找表。这意味着:每个执行通道只能访问查找表的一部分。该编译器可以通过生成以下代码来使其余查找表数据可访问:该代码使其它执行通道读取需要的索引和值,并且通过使用移位寄存器阵列来使这些索引和值移位。
在本说明书中,查找表是在运行时将索引映射到值的数据结构。查找表在许多图像处理算法和应用中很常见。例如,查找表可以用于复杂函数逼近。作为另一示例,快速准确的图像超分辨率(RAISR)算法依赖于大型查找表来获得专门学习过的滤波器以便访问图像数据。
在本说明书中,分区查找表意味着:没有单个存储器体包括该表的所有值。被分区仅暗示分布,而不一定暗示数据专有性。相反,可以在多个存储器体中复制一些值。
在本说明书中,本地存储器体是可由特定执行通道访问的存储器体。因此,将存储器体视为本地的还是远程的取决于对特定执行通道的指定。
在本说明书中,执行通道组包括可以访问相同本地存储器体的所有执行通道。
在本说明书中,移位寄存器阵列是在逻辑上以二维布局布置移位寄存器使得相邻的移位寄存器可以通常在单个时钟周期期间使数据相互移位的硬件设备。移位寄存器阵列通常实施为环或环状,使得可以直接将来自移位寄存器阵列的一个边缘的数据移位到移位寄存器阵列的另一边缘。
在本说明书中,移位访问序列是内核程序指令的序列,这些内核程序指令指令执行通道从本地存储器体中读取第一值并且代表属于不同执行通道组的不同执行通道来从本地存储器体中读取第二值。
在本说明书中,矢量访问序列是内核程序指令的序列,这些内核程序指令允许执行通道获得具有跨多个存储器体被分区的固定地址模式的结构化数据对象的多个值。因此,矢量访问序列还指令执行通道从本地存储器体中读取至少第一值并且代表属于不同执行通道组的不同执行通道来从本地存储器体中读取第二值。矢量访问序列还包括用于恢复结构化数据对象的原始顺序的指令。
可以实施在本说明书中描述的主题的特定实施例以实现以下优点中的一个或多个优点。提供对大型查找表的支持向图像处理器提供了附加的计算能力。具体地,图像处理器可以执行依赖于大型查找表的许多其它计算算法,例如,RAISR算法或用于复杂函数逼近的算法。生成移位访问序列还增加了可以由图像处理器使用的查找表的存储大小。生成矢量访问序列提供对存储大小的这种增加,并且不会因丢弃不需要的数据而导致性能大幅下降。
在附图和下面的描述中阐述了本说明书的主题的一个或多个实施例的细节。本主题的其它特征、方面和优点将通过描述、附图以及权利要求书而变得显而易见。
附图说明
图1是用于读取在多个存储器体上被分区的查找表的值的示例过程的流程图。
图2是用于对分区查找表执行移位访问序列的示例过程的流程图。
图3A图示了利用分区索引来进行读取和移位的示例。
图3B图示了读取远程查找表值和使远程查找表值移位。
图4是用于生成矢量访问序列的示例过程的流程图。
图5是用于对分区查找表执行矢量访问序列的示例过程的流程图。
图6图示了执行通道组的不同组相位。
图7图示了示例蒙板处理器的组件。
图8图示了示例数据计算组件。各个附图中的相同附图标记和标号指示相同的元件。
具体实施方式
图1是用于读取在多个存储器体上被分区的查找表的值的示例过程的流程图。该示例过程可以由任何适当编程的计算机系统执行,例如,由用于图像处理器的编译器、汇编器或程序优化器执行,仅举几例。为了方便起见,将该示例过程描述为由一个或多个计算机的适当编程的系统执行。
该系统接收引用查找表值的输入程序代码(110)。该输入程序代码可以是可以定义要存储在图像处理器的本地存储器体中的查找表的任何适当的编程语言。例如,程序代码可以是高级编程语言,例如,C或者Halide;中级语言表示;或者较低级的编程语言,例如,汇编语言代码、对象代码。
例如,输入程序代码可以显式地或者隐式地将阵列或缓冲区声明为查找表。例如,编译器可以将名称为“lut”的阵列视为查找表。因此,编译器可以支持诸如“a=lut[x]”等语句,其中,lut是被视为查找表的阵列或者缓冲区,并且x是查找表索引。
该系统确定程序是否具有需要进行分区的查找表(120)。通常,当整个查找表不适合在图像处理器的至少一个本地存储器体内时,会对查找表进行分区。因此,该系统可以计算在输入程序中声明的查找表的总大小,并且确定该总大小是否将适合在图像处理中的每个本地存储器体内。如果不适合,则该系统可以确定查找表需要进行分区。
该系统还可以考虑程序中的所有查找表的总大小。如果所有查找表的总大小大于至少一个本地存储器体的大小,则该系统可以选择进行分区的一个或多个查找表。在一些实施方式中,该系统通过重复选择进行分区的下一查找表并且然后重新确定所有分区表和未分区表是否将适合图像处理器的所有本地存储器体来计算迭代过程。例如,该系统可以按照由查找表的相应大小限定的顺序,以最大的查找表或者最小的查找表开始,来执行该迭代过程。
该系统还可以考虑程序语言命令。一些编程语言可以支持注释,这些注释将特定查找表指定为进行分区的候选或必须需要进行分区。如果将查找表注释为进行分区的候选,则该系统可以例如,仅在必要时根据表大小来对表进行分区,并且然后,可以迭代遍历被注释为候选的所有查找表。如果将查找表注释为需要进行分区,则该系统可以在考虑仅被注释为候选的那些表或者未注释的查找表之前首先对该查找表进行分区。
如果不需要对查找表进行分区,则该过程结束(分支到结束),而无需该系统修改任何程序代码。
如果需要对查找表进行分区,则该系统可选地生成用于在多个IPU存储器体上对查找表进行分区的代码(分支到130)。通常,该系统可以通过在针对N个分区的多个IPU存储器体上按照N个步骤使数据值交错来对查找表进行分区。如上面提到的,在该上下文中的分区不需要是独特的,而是可以跨多个存储器体进行复制。
例如,如果将查找表分区为两个分区,例如,N=2,则该系统可以生成将所有偶数索引存储在一些存储器体中并且将所有奇数索引存储在其它存储器体中的代码。如果有四个分区,则该系统可以生成以下代码:该代码将第1索引、第5索引、第9索引等放在一些存储器体中,将每第2个索引、第6个索引、第10个索引等放在另一存储器体中,依此类推。通常,该系统可以使值交错,使得有一种相对简单并且因此快速的方式来从原始查找表索引计算分区索引。下面参照图2更详细地描述了计算分区索引。
将步骤130描述为是可选的,因为可以使用其它系统或者工具来跨存储器体对查找表进行分区或者生成进行分区的代码,这种进行分区与优化内核程序的每个查找表访问分离和分开。例如,在系统启动时运行的完全分离的内核程序可以跨存储器体对查找表进行分区。
该系统用移位访问序列来替换程序中的每个原始查找表访问(140)。如上所述,移位访问序列是执行通道进行执行以从分区查找表获得所需值的一系列指令。通常,每个执行通道将为其本身从其本地存储器体中读取第一值,并且将接收远程索引,并且使用该远程索引来代表另一执行通道从其本地存储器体中读取第二值。然后,使第二值通过移位寄存器阵列移位到提供远程索引的执行通道。然后,每个执行通道可以选择从本地存储器体中读取的第一值或由另一执行通道从远程存储器体中读取的另一值。作为该过程的一部分,执行通道有效地使查找表索引朝一个方向通过移位寄存器阵列移位,并且使查找表值朝另一个方向通过移位寄存器阵列移位返回。该过程允许每个执行通道获得分区查找表中的任何值,即使当所需值未存储在用于执行通道的本地存储器体中时也是如此。下面参照图2以及图3A至图3B更详细地描述了示例移位访问序列。
在用移位访问序列来替换原始查找表访问之后,该过程结束。然后,可以将用移位访问序列修改的代码进一步编译或汇编为待在图像处理器上执行的对象代码。
图2是用于对分区查找表执行移位访问序列的示例过程的流程图。通常,图像处理器的多个执行通道同时执行移位访问序列,例如,每个本地存储器体一个执行通道。为了方便起见,将从单个执行通道的角度描述该过程。
执行通道接收查找表索引(210)。接收查找表索引通常由于使用输入数据(例如,像素值)的内核程序代码将索引生成到查找表中而发生。例如,内核程序可以将可能的输入值的系列映射到特定的查找表索引。
执行通道计算本地分区索引(220)。该本地分区索引是到执行通道的本地存储器体中的索引。如果执行通道的本地存储器体具有由原始查找表索引指示的值,则分区索引将指示该值在本地存储器体中的位置。
如果不具有,则分区索引将指示该值在不同执行通道本地的不同远程存储器体中的位置。
对分区索引的计算取决于如何对查找表进行分区,包括有多少分区。例如,如果在两个分区中使查找表的值交错,则可以通过以下方式来计算分区索引:
partitioned_index=lut_index/2
其中,lut_index表示原始查找表索引,并且“/”运算符指示没有余数的整数除法。
因此,通常,利用在N个分区中使其值交错的查找表,可以通过以下方式来计算分区索引:
partitioned_index=lut_index/N。
执行通道使用本地分区索引来读取本地查找表值(230)。换句话说,执行通道使用本地分区索引来从其本地存储器体中进行读取。这通常涉及:将本地分区索引用作与本地存储器体中的查找表分区的基地址的偏移。
注意,图2的一些步骤由所有执行通道并行执行,而其它步骤可以被排序。例如,所有执行通道可以同时接收LUT索引(210)并且计算本地分区索引(220)。但是在一些实施方式中,一次只能从任何一个本地存储器体中读取一个地址。因此,步骤(230)是可能必须在存储器体本地的执行通道之间进行排序的操作的示例。
执行通道使本地分区索引移位并且接收远程分区索引(240)。换句话说,执行通道对其计算的本地分区索引在同一方向上通过移位寄存器阵列进行混洗。通常,执行通道使数据移位到不同存储器体的对应执行通道。因此,用于本地存储器体0的第0执行通道使索引移位到用于本地存储器体1的第0执行通道,依此类推。因此,移位量根据分配给同一本地存储器体的执行通道的多少而变化。
图3A概念性地图示了利用分区索引来进行读取和移位的示例。图3A图示了已经被分区为两个分区的查找表,使得偶数查找表索引302存储在一些存储器体中,例如,存储器体310a和310c,并且使得奇数查找表索引304存储在其它存储器体中,例如,存储器体310b和310d。
在图3A中,执行通道可以使用移位寄存器阵列来使数据彼此移位。在该示例中,移位寄存器阵列布置为环状,使得从左到右以及从上到下,从移位寄存器阵列的一个边缘环绕移位到移位寄存器阵列的相对边缘。
在图3A中,为了清楚起见,将用于所有存储器体的所有执行通道图示为沿同一行驻留。然而,在一些图像处理器实施方式中,共享存储器体的执行通道沿二维执行通道阵列的同一行或同一列布置。因此,例如,图示为分别从执行通道321a至324a到执行通道321b至324b在水平上向“东”的移位实际上可以是向“南”的移位,例如,在执行通道321b至324b位于与执行通道321a至324a不同的行上的情况下。因此,虽然图3A示出了水平移位四个位置,但是相同的操作实际上可能只需要向下移位一个位置。
图3A还图示了十六个执行通道,其中,具有四个执行通道的组被分配给四个存储器体中的每个存储器体。如图所示,通道321a至324a被分配给存储器体310a,通道321b至324b被分配给存储器体310b,通道321c至324c被分配给存储器体310c,并且通道321d至324d被分配给存储器体310d。
图3A还图示了使移位序列支持必要的分区查找表的系统的硬件限制。例如,在执行通道321a与体1 310b之间没有硬件路径。但是执行通道321a仍然可以通过穿过移位寄存器阵列的一系列移位来间接访问体1 310b。
图3A还示出了使用分区索引的到本地存储器体中的读取的示例排序。由于通道321b至324b共享存储器体310b,因此,一次只能读取一个地址。如果地址相同,则执行通道可以共享数据,但是对于查找表,这种情况不太可能。
因此,在步骤1中,通道321b使用其本地分区索引来读取本地查找表值;在步骤2中,通道322b使用其本地分区索引来读取本地查找表值;在步骤3中,通道323b使用其本地分区索引来读取本地查找表值;并且在步骤4中,通道324b使用其本地分区索引来读取本地查找表值。虽然在图3A中未图示,但是该系统可以按照相同的方式来对每个其他执行通道组进行排序。因此,通道321a至324a还分别在步骤1至步骤4中读取本地查找表值。可以通过分配给相同存储器体的执行通道的总数——在该示例中,为四——来确定按顺序进行读取的总数。
在步骤5中,所有执行通道使用移位寄存器阵列来使所有分区索引移位到下一组中的对应执行通道。因此,通道321b使其分区索引移位到通道321c;通道322b使其分区索引移位到通道322c;通道323b使其分区索引移位到通道323c;并且通道324b使其分区索引移位到通道324c。虽然在图3A中未图示,但是每个执行通道可以同时按照相同的方式来使其分区索引移位。图像处理器的硬件通常形成逻辑环或环状,使得在边缘上的执行通道可以在单个周期内使数据移到在另一边缘上的执行通道。
可以通过将内核程序的指令广播到每个执行通道来协调示例图像处理器的所有读取和移位操作。在一些实施方式中,该广播操作由对执行通道的指令进行解码和广播的标量处理器或控制器执行。如下面将更详细地讨论的,有关一些步骤,一些执行不执行操作,因为只有执行通道位于特定位置时,接收到的掩码加载指令才引导执行通道读取值。例如,这些掩码加载指令可以驱动在图3A中示出的步骤1至步骤4中的读取序列。另一方面,步骤5涉及:响应于所有执行通道接收到的移位指令,所有执行通道同时使数据通过移位寄存器阵列移位。
每个执行通道还可以从另一组中的另一执行通道接收远程分区索引。在该上下文中,远程意味着:由另一组中的不同执行通道来计算分区索引。因此,通道321b从通道321a接收远程分区索引;通道322b从通道322a接收远程分区索引;通道323b从通道323a接收远程分区索引;并且通道324b从通道324a接收远程分区索引。虽然在图3A中未图示,但是每个执行通道同样可以同时按照相同的方式来从另一执行通道接收远程分区索引。
如在图2中示出的,执行通道使用远程分区索引来读取远程查找表值(250)。在该上下文中,远程查找表值意味着:该值可能与另一组中的执行通道相关。但是远程查找表值通常将不是进行读取的执行通道所需的值。相反,将使读取的值移位回到计算远程分区索引的执行通道。与本地查找表值相似,该系统通常可以对远程查找表值的读取进行排序,因为每个存储器体一次只能服务一个不同的地址。
执行通道使远程查找表值移位并且接收远程LUT值(260)。换句话说,执行通道使远程查找表值移位回到计算远程分区索引的执行通道。执行通道还接收由另一执行通道读取的远程查找表值。
图3B图示了读取远程查找表值和使远程查找表值移位。与图3A相似,在组中的执行通道之间对使用远程分区索引来读取远程查找表值进行排序。因此,在步骤1中,通道321b使用远程分区索引来读取远程查找表值;在步骤2中,通道322b使用远程分区索引来读取远程查找表值;在步骤3中,通道323b使用远程分区索引来读取远程查找表值;并且在步骤4中,通道324b使用远程分区索引来读取远程查找表值。并且该系统可以按照相同的方式来对每个其他执行通道组进行排序。因此,通道321c至324c还分别在步骤1至步骤4中读取远程查找表值。
在步骤5中,所有执行通道使所有远程查找表值移位回到前一组中的对应执行通道。因此,通道321b使其远程查找表值移位回到通道321a;通道322b使其远程查找表值移位回到通道322c;通道323b使其分区索引移位到通道323c;并且通道324b使其分区索引移位到通道324c。虽然在图3A中未图示,但是每个执行通道可以同时按照相同的方式来使其分区索引移位。
每个执行通道还从另一组中的另一执行通道接收远程查找表值。在该上下文中,远程意味着:由另一组中的不同执行通道来读取查找表值。因此,通道321b从通道321c接收远程查找表值;通道322b从通道322c接收远程查找表值;通道323b从通道323c接收远程查找表值;并且通道324b从通道324c接收远程查找表值。
图3A和图3B图示了只有两个分区的示例。但是,如果有两个以上,则执行通道可以执行附加读取和移位。
因此,该系统确定是否有更多的分区要处理(270)。如果有,则执行通道使接收到的远程分区索引移位并且接收另一远程分区索引(分支到240)。然后,执行通道可以使用接收到的远程分区索引来读取另一远程查找表值并且使该远程查找表值移位回到另一组中的执行通道。
如果没有更多的分区要处理,则执行通道在本地查找表值和一个或多个远程查找表值中的一个远程查找表值之间进行选择。如上所述,通常,对于N个分区,每个执行通道将已经读取了或接收到N个查找表值。然后,执行通道可以决定内核程序需要哪个执行通道。
执行通道在本地查找表值和一个或多个远程查找表值之间进行选择(280)。通常,执行通道可以使用本说明书中表示为“%N”的原始查找表索引对N取模来确定为内核程序选择哪个查找表值。例如,如果将表分区为两个分区,例如,N=2,则在index%2等于执行通道的分区编号的情况下,执行通道可以选择本地查找表值,并且否则,选择远程查找表值。
如果将查找表分区为N个分区,则在index%N等于执行通道的分区编号的情况下,执行通道可以选择本地查找表值。相反,执行通道否则可以选择第(index%N-1)个远程查找表值。
注意,对于N个分区,每个执行通道可以始终读取N个值,即使当只需要一个值时也是如此。然而,存在以下情况:可以按照减少或甚至完全消除读取多个值所导致的性能下降的方式来将该方面用作优势。
一种这种情况是当查找表存储结构化数据而不是仅存储标量数据的单独的元素时。结构化数据类型包括占用多个寄存器的空间的宽数据类型和矢量数据类型。对于这些数据类型,内核程序通常将从查找表中读取多个顺序值。例如,代替内核程序只访问在lut[index]处的一个值,内核程序可以指定访问在lut[index]、lut[index+1]、lut[index+2]…处的所有值,直到特定数据宽度。
图4是用于生成矢量访问序列的示例过程的流程图。该示例过程可以由任何适当编程的计算机系统执行,例如,由用于图像处理器的编译器、汇编器或程序优化器执行,仅举几例。为了方便起见,将该示例过程描述为由一个或多个计算机的适当编程的系统执行。
该系统在内核程序中识别结构化数据访问模式(410)。为此,该系统可以在内核程序的一部分中识别在查找表中连续的若干读取。该系统可以识别任何适当数量的查找表读取。在一些实施方式中,该系统将结构化数据访问模式识别为等于查找表的结构化数据宽度的读取数量。因此,如果矢量具有四个寄存器的大小的宽度,则该系统可以识别具有对查找表的连续部分进行四个读取的代码分段。在一些实施方式中,该系统还通过要求连续读取指令中的每个连续读取指令在其它连续读取指令中的阈值数量的指令内来施加紧密性约束。
在一些实施方式中,编译器检查每个lut指令并且将每个索引变换为x+N的形式,其中,x是任意计算的值,并且N是常数。编译器可以维持以x为基础的先前lut指令的表,并且对于以x为基础的每个新的lut指令,编译器可以确定具有常数N’的另一先前lut指令是否是相同矢量的一部分。如果是,则该系统可以确定生成矢量访问序列。
以下代码段在第8行、第10行、第12行和第14行上包括结构化数据访问模式:
Figure BDA0002703493490000151
在该示例中,第0行至第7行仅利用针对具有四个寄存器的宽度的矢量的测试数据来填充查找表。
第8行、第10行、第12行和第14行包括利用指令“lut.b16”来从查找表中读取连续的四个值组的指令。
在该示例中,查找表访问指令的数量等于查找表中的矢量数据的矢量宽度。另外,所有指令相对靠近在一起。即,每个指令位于最近的其它查找表访问中的两个指令内。因此,该系统可以确定用矢量访问序列来替换该查找表访问组。
该系统可选地生成用于以结构化数据的宽度来对查找表进行分区的代码(420)。该系统可以选择查找表的分区计数以与结构化数据宽度相匹配。例如,如果查找表存储双倍宽数据类型,则编译器可以选择分区计数为2。如果查找表存储矢量数据类型,则编译器可以选择与矢量宽度相匹配的分区计数。
将步骤420描述为是可选的,因为可以使用其它系统或工具来基于结构化数据宽度选择分区的数量并且跨存储器体对查找表进行分区。例如,在系统启动时运行的完全分离的内核程序可以对指令访问模式或结构化数据宽度进行分析以选择分区的数量并且跨存储器体对查找表进行分区。
该系统用矢量访问序列来替换结构化数据访问模式(430)。矢量访问序列通过移位访问序列过程的操作来使所有执行通道自动读取结构化数据的所有所需值。矢量访问序列可以用于读取任何适当的结构化数据,而不仅仅是矢量数据。
除了每个执行通道将使用读取的所有数据值,而不是仅选择它们中的一个之外,矢量访问序列在操作上与上面描述的移位访问序列过程相似。
另外,通常需要进行后处理以对读取数据并且乱序地使其移位负责。将读取结构化数据值并且按照不同的顺序来使其移位到每个执行通道。顺序取决于执行通道在共享相同存储器体的其它本地执行通道中的位置。因此,每个执行通道可以执行用于恢复多个值的原始顺序的过程。因此,该系统可以生成具有重映射步骤的代码,该重映射步骤使所有本地和远程查找表值与原始结构化数据元素相匹配。
在一些实施方式中,该系统生成表示访问结构化数据的多个值的中级指令。例如,该系统可以用以下矢量访问指令来替换上述示例中的第8行至第14行:
8,lut.b16 t9,t10,t11,t12<-__lookup,t7;
矢量访问指令简化了对N个输出所属位置的确定,因为该指令具有多个输出。可替代地,编译器可以跳过矢量化,而是为每个lut指令确定值是否已经在先前的移置缓冲区中,这有效地使向量化内联。
图5是用于对分区查找表执行矢量访问序列的示例过程的流程图。在该示例中,已经按照结构化数据的宽度对查找表进行了分区。如将了解到的,一些步骤与上面参照图2描述的移位访问序列相似。然而,使用附加步骤来恢复数据通过移置缓冲区的原始顺序。图像处理器的多个执行通道可以同时执行矢量访问序列。为了方便起见,将从单个执行通道的角度描述该过程。
执行通道接收结构化数据基索引(505)。换句话说,执行通道接收结构化数据的第一值的在查找表中的索引值,例如,矢量的第一矢量元素的索引。
执行通道从基索引计算本地分区索引(510)。如上所述,对本地分区索引的计算依赖于如何使数据交错以及有多少分区。当根据结构化数据的宽度来对表进行分区时,该系统可以通过除以结构化数据的宽度来计算本地分区索引。
为了从上述内容继续该示例,该系统可以执行以下向右移位指令以使基索引移位两个位置。该操作引起将基索引除以4,4是分区的数量。
8,shr.b16 t1012<-t7,2;
然后,执行通道可以通过将分区索引添加到表的基地址来加载结构化数据元素的地址(第9行)。
9,add.b16 t1013<-t1012,0;
执行通道使用本地分区索引来读取本地LUT值(515)。如上面参照图2描述的,该步骤可以由共享同一本地存储器体的所有执行通道串行执行。
因此,为了继续该示例,执行通道可以执行以下串行化读取。“lddm”指令是具有掩码的加载指令。因此,该指令将仅在由具有与掩码值相匹配的标识符的执行通道执行时才实际地加载数据。
Figure BDA0002703493490000181
执行通道计算用于移置的位置(520)。如上所述,执行通道将按照不同的顺序来读取结构化数据值。
图6图示了执行通道组的不同组相位。在图6中,查找表已经被分区四路,使得体0610a具有模数值为零的索引。换句话说,分区布置意味着:无论在体0 610a中索引是什么,index%4都将是零。同样,体1 610b中的索引的模数值为1,体1 610c中的索引的模数值为2,并且体1 610d中的索引的模数值为3。
这些模数值确定在那些索引值本地的执行通道的组相位。组相位指定将读取结构化数据的不同位置的顺序。如图所示,执行通道621a至624a具有为0、1、2、3的组相位。这意味着:无论从查找表中读取哪个值,具有该组相位的执行通道将始终首先从体0 610a中进行读取,然后从体1 610b中进行读取,依此类推。另一方面,具有为1、2、3、0的组相位的执行通道将始终首先从体1 610b中读取结构化数据的第二值。
在以下代码段中,执行通道读取其内部配置以计算其当前的组相位值。该代码使执行通道读取当前通道在阵列内部的“y”位置(第19行);除以通道组的高度,在该示例中,为2(第20行);加矢量内的元素索引和矢量基地址以计算特定元素的地址并且处置任何可能的未对准(第21至22行),计算模数N以确定组索引(第23行),并且从远程访问来取回数据(第24行)。
Figure BDA0002703493490000191
如在图5中示出的,执行通道与计算的用于移置的位置相关联地将本地LUT值存储在移置缓冲区中(525)。移置缓冲区可以是执行通道的本地存储器体中的另一已指配的存储块。可替代地,移置缓冲区可以是执行通道的寄存器组。
在任何情况下,执行通道都将本地LUT值写入移置缓冲区中与执行通道的组的相位对应的位置。这意味着:执行通道与读取的LUT值在结构化数据中的正确位置相关联地将该读取的LUT值存储在移置缓冲区中。
以下代码段在t1025中获得远程数据,并且将远程数据存储在移置缓冲区中的t1027中的计算的索引处在该示例中,移置缓冲区表示为四个存储器映射寄存器(spill1012至spill1015)。
//存储到移置缓冲区中
25,vstpm.b16 spill1012,spill1013,spill1014,spill1015<-memimm(255),t1027,t1025,internal1,null,null,null,null;
执行通道使分区索引移位并且接收远程分区索引(530)。如上面参照图2描述的,通过使分区索引移位,每个执行通道可以对不同的执行通道执行远程读取。在运行示例中,以下示例代码使分区索引移到另一组中的执行通道。
//将索引发送到相邻组
26,shift.b16 t1028<-t1013,0,-2;
执行通道使用远程分区索引来读取远程LUT值(535)。由于组中的所有执行通道都可以从不同的地址进行读取,因此,也可以利用加载和掩码指令来使这些远程读取串行化。
Figure BDA0002703493490000201
Figure BDA0002703493490000211
执行通道为远程LUT值计算用于移置的位置(540)。通常,可以通过加一前一位置对分区的数量进行取模来完成这一点。在运行示例中,可以通过“add”指令和“and”指令来完成这一点。
//计算用于移置的通道位置
35,add.b16 t1038<-t1015,1;
36,and.b16 t1039<-t1038,3;
执行通道使远程LUT值移位并且接收远程LUT值(545)。换句话说,执行使其读取的LUT值移位回并且接收另一执行通道为其读取的LUT值。
//将数据发送回相邻组
37,shift.b16 t1037<-t1036,0,2;
执行通道与用于移置的位置相关联地将接收到的远程LUT值存储在移置缓冲区中(550)。换句话说,执行通道考虑其组相位以将新读取的LUT值存储在移置缓冲区中。
Figure BDA0002703493490000212
然后,执行通道对每个其它剩余的分区重复步骤530至550。因此,如果剩余更多的分区(555),则执行通道再次使分区索引移位并且接收远程分区索引(分支到530)。
在运行示例中,后续指令与第二读取序列相似,预期移位距离发生改变。
39,shift.b16 t1040<-t1013,0,-4;
40,lddm.b16 t1041<-0,1,t1040;
41,lddm.b16 t1042<-t1041,2,t1040;
42,lddm.b16 t1043<-t1042,4,t1040;
43,lddm.b16 t1044<-t1043,8,t1040;
44,lddm.b16 t1045<-t1044,16,t1040;
45,lddm.b16 t1046<-t1045,32,t1040;
46,lddm.b16 t1047<-t1046,64,t1040;
47,lddm.b16 t1048<-t1047,128,t1040;
48,add.b16 t1050<-t1015,2;
49,and.b16 t1051<-t1050,3;
50,shift.b16 t1049<-t1048,0,4;
51,vstpm.b16 spill1020,spill1021,spill1022,spill1023<-memimm(255),t1051,t1049,internal1,spill1016,spill1017,spill1018,spill1019;
52,shift.b16 t1052<-t1013,0,-6;
53,lddm.b16 t1053<-0,1,t1052;
54,lddm.b16 t1054<-t1053,2,t1052;
55,lddm.b16 t1055<-t1054,4,t1052;
56,lddm.b16 t1056<-t1055,8,t1052;
57,lddm.b16 t1057<-t1056,16,t1052;
58,lddm.b16 t1058<-t1057,32,t1052;
59,lddm.b16 t1059<-t1058,64,t1052;
60,lddm.b16 t1060<-t1059,128,t1052;
61,add.b16 t1062<-t1015,3;
62,and.b16 t1063<-t1062,3;
63,shift.b16 t1061<-t1060,0,6;
64,vstpm.b16 spill1024,spill1025,spill1026,spill1027<-memimm(255),t1063,t1061,internal1,spill1020,spill1021,spill1022,spill1023;
如果没有剩余更多的分区(555),则执行通道已经成功地读取了结构化数据元素的所有值。
因此,执行通道可以通过从移置缓冲区中进行读取来使用数据(分支到560)。
在运行示例中,由于移置缓冲区已经按照正确顺序包括了所有数据,因此,读取很简单。
Figure BDA0002703493490000231
图7图示了示例蒙板处理器的组件。蒙板处理器是可以由图像处理器用来实施上面描述的技术的处理组件的示例。图像处理器可以具有一个或多个蒙板处理器,该一个或多个蒙板处理器可以编程为进行协调以完成处理任务的不同阶段。在共同拥有的美国专利申请第14/694,828序列号;第14/694,815序列号、第14/694,806序列号、第14/960,334序列号、第15/352,260序列号中更详细地描述了可以利用蒙板处理器的其它合适的架构,这些申请通过引用的方式并入本文。
如在图7中示出的,蒙板处理器700包括数据计算单元701、标量处理器702、相关联的标量存储器体703和I/O单元704。数据计算单元701包括执行通道阵列705、二维移位寄存器阵列706和单独的随机存取存储器体707_1至707_R,这些单独的随机存取存储器体707_1至707_R均与二维执行通道阵列706的相应行或列相关联。
I/O单元704负责将从图像处理器的表片(sheet)生成器接收到的输入数据表片加载到数据计算单元701中并且将来自图像处理器的输出数据表片存储到表片生成器中。将输入数据表片加载到数据计算单元701中可以包括:将接收到的表片解析为图像数据的行或列,并且将图像数据的行或列加载到二维移位寄存器阵列706中或执行通道阵列的行/列的相应存储器体707中。如果在最初将输入表片加载到存储器体307中,则执行通道阵列705内的单独的执行通道然后可以在适当时(例如,由于仅在有关表片的数据的操作之前的加载指令)将表片数据从随机存取存储器体307加载到二维移位寄存器阵列706的相应部分中。在无论将数据表片直接从表片生成器还是从存储器307加载到移位寄存器阵列706中完成之后,执行通道阵列705的执行通道都可以对数据进行操作,并且最终将完成的数据作为表片直接编写回表片生成器或编写到随机存取存储器体707中。如果是后者,则I/O单元704可以从随机存取存储器体707中获取数据以形成输出表片,该输出表片然后可以被转发至表片生成器。
标量处理器702包括程序控制器709,该程序控制器709可以从标量存储器703中读取蒙板处理器的程序代码的指令,并且将这些指令发布到执行通道阵列705中的执行通道。在一些实施方式中,将单个相同的指令广播到执行通道阵列705内的所有执行通道以实现单个指令、来自数据计算单元701的多个类似数据的行为。在一些实施方式中,从标量存储器703读取并且发布到执行通道阵列705的执行通道的指令的指令格式包括超长指令字(VLIW)类型格式,该超长指令字(VLIW)类型格式每个指令包括一个以上操作码。在另一实施例中,VLIW格式包括引导待由每个执行通道的ALU执行的数学函数的ALU操作码和引导用于特定执行通道或执行通道集合的存储器操作的存储器操作码。
每个执行通道是具有能够执行指令的一个或多个执行单元(例如,可以执行指令的逻辑电路系统)的组件。除了仅执行单元之外,执行通道还可以包括其它类似处理器的功能性。例如,除了一个或多个执行单元之外,执行通道还可以包括对接收到的指令进行解码的逻辑电路系统,或者在更类似MIMD的设计的情况下,还可以包括获取指令并且对指令进行解码的逻辑电路系统。关于类似MIMD的方法,可以在各种替代实施例中实施分布式方法,例如,在执行通道阵列705的每个执行通道内具有程序控制器。
执行通道阵列705、程序控制器709和二维移位寄存器阵列706的组合为广泛的可编程功能提供广泛可适应和可配置的硬件平台。例如,应用软件开发人员可以生成具有各种不同功能能力以及尺寸(例如,蒙板大小)的内核程序,因为单独的执行通道能够执行多种功能,并且能够轻松地访问在二维移位寄存器阵列706中的任何输出位置附近的输入图像数据。
除了充当用于执行通道阵列705操作的图像数据的数据存储之外,随机存取存储器体707还可以保持一个或多个查找表。在各种实施例中,还可以在标量存储器703内使一个或多个标量查找表实例化。标量查找涉及:将来自相同索引的来自相同查找表的相同数据值传递至执行通道阵列705内的每个执行通道。VLIW指令格式可以包括将由标量处理器执行的查找操作引导到标量查找表中的标量操作码。被指定用于与操作码一起使用的索引可以是立即操作数,或者可以从某一其它数据存储位置来获取该索引。从标量存储器703内的标量查找表中进行查找可以涉及:在相同的时钟周期期间将相同的数据值广播到执行通道阵列705内的所有执行通道。
图8图示了示例数据计算组件801。如图8所示,数据计算组件801包括在逻辑上位于二维移位寄存器阵列806“之上”的执行通道的阵列805。如上面讨论的,在各种实施例中,将由表片生成器提供的图像数据表片加载到二维移位寄存器阵列806中。然后,执行通道可以对来自二维移位寄存器阵列806的表片数据进行操作。
执行通道阵列805和移位寄存器阵列806相对于彼此固定在适当的位置。然而,执行通道可以按照策略性和协调的方式来在移位寄存器阵列806内使数据移位以使执行通道阵列805中的每个执行通道能直接访问不同输入数据。同样,每个执行通道为生成的输出表片中的不同位置确定输出值。从图8的架构,应该清楚的是:不仅可以垂直地布置重叠的蒙板区域,而且可以水平地布置重叠的蒙板区域,因为执行通道阵列805包括垂直相邻的执行通道以及水平相邻的执行通道。
数据计算单元801的一些显著的架构特征包括具有比执行通道阵列805更宽的尺寸的移位寄存器阵列406。即,在执行通道阵列805的外部存在寄存器809的“外环(halo)”。虽然将外环809示出为存在于执行通道阵列805的两个侧面,但是这取决于实施方式,外环可以存在于执行通道阵列805的更少的(一个)或更多的(三个或四个)侧面。随着数据在执行通道805“之下”移位,外环809用于为溢出到执行通道阵列805的边界之外的数据提供“溢出”空间。作为简单的情况,以执行通道阵列805的右边缘为中心的5×5蒙板可能在该蒙板的最左边的像素被处理时,需要进一步往右的四个外环寄存器位置。为了便于绘制,在一些实施方式中,当在任何一侧(右侧、底侧)上的寄存器将具有水平连接和垂直连接时,图8将外环的右侧的寄存器图示为仅具有水平移位连接,并且将外环的底侧的寄存器图示为仅具有垂直移位连接。
附加的溢出空间由耦合至阵列中的每一行和/或每一列或其部分的随机存取存储器体807提供,例如,可以向执行通道阵列805的跨越行范围的4个执行通道和列范围的2个执行通道的“区域”分配随机存取存储器体。为了简单起见,本说明书的一些部分主要涉及基于行和/或列的指配方案。此处,如果执行通道的内核程序操作需要其处理在二维移位寄存器阵列806之外的一些图像处理例程可能需要的像素值,则图像数据的平面会进一步溢出,例如,从外环区域809到随机存取存储器体807。例如,考虑6x6蒙板,在该6x6蒙板中,硬件包括距在执行通道阵列的右边缘上的执行通道的右边仅四个的存储元件的外环区域。在这种情况下,将需要进一步使数据移位到在外环809的右边缘以外的右侧以完全地处理蒙板。然后,在外环区域809之外移位的数据将溢出到随机存取存储器807。
可以在数字电子电路系统中、有形体现的计算机软件或固件中、计算机硬件中(包括本说明书所公开的结构及其结构等效物)或它们中的一个或多个的组合中实施本说明书中描述的主题的实施例和功能操作。可以将本说明书中描述的主题的实施例实施为一个或多个计算机程序,即,编码在有形非暂时性存储介质上以由数据处理设备执行或者控制数据处理设备的操作的计算机程序指令的一个或多个模块。计算机存储介质可以是机器可读存储装置、机器可读存储基板、随机或者串行存取存储器装置或者它们中的一个或多个的组合。可替代地或者另外,程序指令可以编码在人工生成的传播信号上,例如,机器生成的电气、光学或者电磁信号,生成该信号是为了对信息进行编码以便传输至合适的接收器设备供数据处理设备执行。
术语“数据处理设备”是指数据处理硬件并且囊括了用于处理数据的所有种类的设备、装置和机器,包括:例如,可编程处理器、计算机或多个处理器或计算机。该设备还可以是或者进一步包括专用逻辑电路,例如,FPGA(现场可编程门阵列)或者ASIC(专用集成电路)。除了硬件之外,该设备可以可选地包括为计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统或者它们中的一个或多个的组合的代码。
可以用任何形式的程序语言(包括:编译语言或解释语言或陈述性语言或程序语言)来编写计算机程序(也可以被称为或者描述为程序、软件、软件应用、app、模块、软件模块、脚本或代码),并且可以按照任何形式(包括:作为独立式程序或模块、组件、子例程或适合用于计算环境的其它单元)来部署计算机程序。程序可以但并非必须与文件系统中的文件对应。可以将程序存储在保持其它程序或者数据的文件的一部分(例如,存储在标记语言文档中的一个或多个脚本)中,或者存储在专用于所探讨中的程序的单个文件中,或者存储在多个协作文件(例如,存储一个或多个模块、子程序或者部分代码的文件)中。可以将计算机程序部署为在一个计算机上执行或者在位于一个站点处或者分布在多个站点中并且通过数据通信网络互相连接的多个计算机上执行。
对于要配置为执行特定操作或者动作的一个或多个计算机的系统意味着已经在系统上安装了在操作中使系统执行操作或者动作的软件、固件、硬件或者它们的组合。对于要配置为执行特定操作或者动作的一个或多个计算机程序意味着一个或多个程序包括指令,该指令在由数据处理设备执行时使设备执行操作或者动作。
可以通过一个或多个可编程计算机来执行本说明书中描述的过程和逻辑流,该一个或多个可编程计算机执行一个或多个计算机程序以通过操作输入数据并且生成输出来执行功能。还可以通过专用逻辑电路系统(例如,FPGA或者ASIC)或者专用逻辑电路系统和一个或多个编程计算机的组合来执行处理和逻辑流。
适合于执行计算机程序的计算机可以基于通用或者专用微处理器或者两者或者任何其它种类的中央处理单元。一般而言,中央处理单元将接收来自只读存储器或者随机存取存储器或者两者的指令和数据。计算机的必要元件是:用于进行或者执行指令的中央处理单元和用于存储指令和数据的一个或多个存储器装置。中央处理单元和存储器可以由专用逻辑电路系统补充或者可以并入该专用逻辑电路系统中。一般而言,计算机还将包括用于存储数据的一个或多个海量存储装置(例如,磁盘、磁光盘或者光盘),或者计算机可以操作地耦合以接收来自该海量存储装置的数据或者将数据传送至该海量存储装置或者进行两者。然而,计算机不需要具有这种装置。此外,计算机可以嵌入在另一装置中,例如,移动电话、个人数字助理(PDA)、移动音频或者视频播放器、游戏机、全球定位系统(GPS)接收器或者便携式存储装置(例如,通用串行总线(USB)闪存驱动),仅举数例。
适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器装置,包括:例如,半导体存储器装置(例如,EPROM、EEPROM和闪速存储器装置);磁盘(例如,内部硬盘或者可移动盘);磁光盘;以及CD ROM盘和DVD-ROM盘。
为了提供与用户的交互,可以在计算机上实施本说明书中描述的主题的实施例,该计算机具有:用于向用户显示信息的显示装置,例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器;以及键盘和指向装置,例如,鼠标、轨迹球或者存在敏感显示器或者用户可以向计算机提供输入的其它表面。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈,例如,视觉反馈、听觉反馈或者触觉反馈;并且可以用任何形式(包括声输入、语音输入或者触觉输入)来接收来自用户的输入。另外,计算机可以通过向用户所使用的装置发送文档和从该装置接收文档(例如,通过响应于从web浏览器接收到的请求而向用户的装置上的web浏览器发送网页)来与用户进行交互。而且,计算机可以通过向个人装置(例如,智能电话)发送文本消息或者其它形式的消息,运行消息传送应用并且继而从用户接收响应消息来与用户进行交互。
除了上面描述的实施例之外,以下实施例也是创新的:
实施例1是一种方法,所述方法包括:
接收用于图像处理器的输入内核程序,所述图像处理器具有二维执行通道阵列、移位寄存器阵列和多个存储器体,其中,在多个执行通道组中的每个执行通道组中的多个执行通道被配置为共享所述图像处理器的所述多个存储器体中的同一相应存储器体;
确定所述内核程序具有读取跨所述多个存储器体被分区的查找表的查找表值的指令;以及
作为响应,用指令序列来替换所述内核程序中的所述指令,所述指令序列在由执行通道执行时使所述执行通道从本地存储器体中读取第一值并且代表属于不同执行通道组的另一执行通道来从所述本地存储器体中读取第二值。
实施例2是根据实施例1所述的方法,其中,所述指令序列使执行通道执行操作,所述操作包括:
从原始查找表索引计算本地分区索引;
使用所述本地分区索引来从本地存储器体中读取本地查找表值;
使所述本地分区索引通过所述移位寄存器阵列移位,并且通过所述移位寄存器阵列从不同执行通道接收远程分区索引;
使用所述远程分区索引来从所述本地存储器体中读取远程查找表值;以及
使本地分区索引通过所述移位寄存器阵列移位,并且通过所述移位寄存器阵列从不同的执行通道接收远程分区索引。
实施例3是根据实施例2所述的方法,其中,所述操作进一步包括:
接收由不同执行通道从远程存储器体中读取的远程查找表值。
实施例4是根据实施例3所述的方法,其中,这些操作进一步包括:
在所述本地查找表值或所述远程查找表值之间进行选择。
实施例5是根据实施例4所述的方法,其中,所述操作进一步包括:
如果所述原始查找表索引对N取模等于所述执行通道的分区编号,则选择所述本地查找表值,其中,N是所述查找表的分区的数量。
实施例6是根据实施例1至5中任一项所述的方法,其中,所述指令序列使每个执行通道针对在所述输入内核程序中的每个单个查找表访问读取多个查找表值。
实施例7是根据实施例6所述的方法,其中,所述查找表被分区,使得所有偶数索引被存储在第一存储器体中,并且所有奇数索引被存储在第二存储器体中。
实施例8是根据实施例1至7中任一项所述的方法,其中,所述查找表大于所述存储器体中的每个存储器体。
实施例9是根据实施例1至8中任一项所述的方法,其中,每个执行通道只能从所述多个存储器体中的一个相应存储器体中进行读取。
实施例10是根据实施例1至9中任一项所述的方法,其中,所述查找表值是具有比所述图像处理器的寄存器的大小更大的宽度的结构化值,并且其中,所述指令序列使执行通道执行操作,所述操作包括:
使用本地分区索引来读取本地查找表值;
计算所述本地查找表值在移置缓冲区中的位置,其中,所述位置取决于所述执行通道的组相位;以及
与所计算的位置相关联地将所述本地查找表值存储在所述移置缓冲区中。
实施例11是根据实施例10所述的方法,其中,所述操作进一步包括:
接收由不同执行通道从不同存储器体中读取的远程查找表值;
基于所述执行通道的所述组相位来计算所述远程查找表值在所述移置缓冲区中的第二位置;以及
与所述第二位置相关联地将所述远程查找表值存储在所述移置缓冲区中。
实施例12是根据实施例10所述的方法,其中,结构化值是具有多个元素或双倍宽数据类型的矢量。
实施例13是一种系统,所述系统包括:一个或多个计算机以及一个或多个存储指令的存储装置,所述指令在由所述一个或多个计算机执行时能够操作以使所述一个或多个计算机执行根据实施例1至12中任一项所述的方法。
实施例14是编码有计算机程序的计算机存储介质,所述程序包括指令,所述指令在由数据处理设备执行时可操作以使所述数据处理设备执行根据实施例1至12中任一项所述的方法。
实施例15是一种处理器,所述处理器包括:
二维执行通道阵列;
二维移位寄存器阵列;以及
多个存储器体,其中,在多个执行通道组中的每个执行通道组中的多个执行通道被配置为共享所述处理器的所述多个存储器体中的同一相应存储器体,
其中,每个执行通道配置为执行指令序列以获得查找表值,其中,该指令序列使每个执行通道执行操作,所述操作包括:
从原始查找表索引计算本地分区索引;
使用所述本地分区索引来从本地存储器体中读取本地查找表值;
使所述本地分区索引通过所述移位寄存器阵列移位,并且通过所述移位寄存器阵列从不同执行通道接收远程分区索引;
使用所述远程分区索引来从所述本地存储器体中读取远程查找表值;以及
使所述远程查找表值通过所述移位寄存器阵列移位回到所述不同执行通道。
实施例16是根据实施例15所述的处理器,其中,所述操作进一步包括:
接收由不同执行通道从远程存储器体中读取的远程查找表值。
实施例17是根据实施例16所述的处理器,其中,所述操作进一步包括:
在所述本地查找表值或所述远程查找表值之间进行选择。
实施例18是根据实施例17所述的处理器,其中,所述操作进一步包括:
如果所述原始查找表索引对N取模等于所述执行通道的分区编号,则选择所述本地查找表值,其中,N是所述查找表的分区的数量。
实施例19是根据实施例15至18中任一项所述的处理器,其中,所述指令序列使每个执行通道针对在所述输入内核程序中的每个单个查找表访问读取多个查找表值。
实施例20是根据实施例19所述的处理器,其中,所述查找表被分区,使得所有偶数索引被存储在第一存储器体中,并且所有奇数索引被存储在第二存储器体中。
实施例21是根据实施例15至20中任一项所述的处理器,其中,所述查找表大于所述存储器体中的每个存储器体。
实施例22是根据实施例15至21中任一项所述的处理器,其中,每个执行通道只能从多个存储器体中的一个相应存储器体中进行读取。
实施例23是根据实施例15至22中任一项所述的处理器,其中,所述查找表值是具有大于所述图像处理器的寄存器的大小的宽度的结构化值,并且其中,所述指令序列使执行通道执行操作,所述操作包括:
使用本地分区索引来读取本地查找表值;
计算所述本地查找表值在移置缓冲区中的位置,其中,所述位置取决于所述执行通道的组相位;以及
与所计算的位置相关联地将所述本地查找表值存储在所述移置缓冲区中。
实施例24是根据实施例23所述的处理器,其中,所述操作进一步包括:
接收由不同执行通道从不同存储器体中读取的远程查找表值;
基于所述执行通道的所述组相位来计算所述远程查找表值在所述移置缓冲区中的第二位置;以及
与所述第二位置相关联地将所述远程查找表值存储在所述移置缓冲区中。
实施例25是根据实施例23所述的处理器,其中,所述结构化值是具有多个元素或双倍宽数据类型的矢量。
实施例26是一种方法,所述方法包括:执行根据实施例15至25中任一项所述的操作。
实施例27是编码有计算机程序的计算机存储介质,该程序包括指令,这些指令在由处理器执行时可操作以使所述处理器执行根据实施例15至25中任一项所述的操作。
虽然本说明书包括许多具体实施细节,但是不应该将这些细节视为对任何发明或者可能被要求保护的内容的范围的限制,而是作为可以针对特定发明的特定实施例的特征的描述。在本说明书中在单独实施例的背景下描述的某些特征还可以组合地实施在单个实施例中。相反,在单个实施例的背景中描述的各种特征也可以单独地或者按照任何合适的子组合实施在多个实施例中。此外,虽然上文可能将特征描述为以某些组合来起作用并且最初甚至同样地对该特征进行了要求保护,但是在一些情况下,可以从组合中删除来自所要求的组合的一个或多个特征。并且所要求的组合可以指向子组合或者子组合的变化。
同样,虽然在附图中按照特定顺序示出了操作,但是不应该将其理解为需要按照所述的特定顺序或者按照相继的顺序来进行这种操作,或者需要进行所有图示的操作以实现期望的结果。在某些情况下,多任务处理和并行处理可以是有利的。此外,不应该将在上述实施例中的各种系统模块和组件的分离理解为在所有实施例中需要这种分离,并且应该理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中或者封装到多个软件产品中。
已经描述了本主题的特定实施例。其它实施例在以下权利要求书的范围内。例如,可以按照不同的顺序来执行权利要求书中阐述的动作,并且仍然实现期望的结果。作为一个示例,在附图中描绘的过程不一定需要所示的特定顺序或者相继顺序,以实现期望的结果。在特定的一些情况下,多任务处理和并行处理可以是有利的。

Claims (21)

1.一种计算机实现的方法,所述计算机实现的方法包括:
接收用于图像处理器的输入内核程序,所述图像处理器具有二维执行通道阵列、移位寄存器阵列和多个存储器体,其中,在多个执行通道组中的每个执行通道组中的多个执行通道被配置为共享所述图像处理器的所述多个存储器体中的同一相应存储器体;
确定所述内核程序具有读取跨所述多个存储器体被分区的查找表的查找表值的指令;以及
作为响应,用指令序列来替换所述内核程序中的所述指令,所述指令序列在由执行通道执行时使所述执行通道从本地存储器体中读取第一值并且代表属于不同执行通道组的另一执行通道来从所述本地存储器体中读取第二值。
2.根据权利要求1所述的方法,其中,所述指令序列使执行通道执行操作,所述操作包括:
从原始查找表索引计算本地分区索引;
使用所述本地分区索引来从本地存储器体中读取本地查找表值;
使所述本地分区索引移位通过所述移位寄存器阵列,并且通过所述移位寄存器阵列从不同执行通道接收远程分区索引;
使用所述远程分区索引来从所述本地存储器体中读取远程查找表值;以及
使所述远程查找表值通过所述移位寄存器阵列移位回到所述不同执行通道。
3.根据权利要求2所述的方法,其中,所述操作进一步包括:
接收由不同执行通道从远程存储器体中读取的远程查找表值。
4.根据权利要求3所述的方法,其中,所述操作进一步包括:
在所述本地查找表值或所述远程查找表值之间进行选择。
5.根据权利要求4所述的方法,其中,所述操作进一步包括:
如果所述原始查找表索引对N取模等于所述执行通道的分区编号,则选择所述本地查找表值,其中,N是所述查找表的分区的数量。
6.根据权利要求1所述的方法,其中,所述指令序列使每个执行通道针对在所述输入内核程序中的每个单个查找表访问读取多个查找表值。
7.根据权利要求6所述的方法,其中,所述查找表被分区,使得所有偶数索引被存储在第一存储器体中,并且所有奇数索引被存储在第二存储器体中。
8.根据权利要求1所述的方法,其中,所述查找表大于所述存储器体中的每个存储器体。
9.根据权利要求1所述的方法,其中,每个执行通道只能从所述多个存储器体中的一个相应存储器体中进行读取。
10.根据权利要求1所述的方法,其中,所述查找表值是具有比所述图像处理器的寄存器的大小更大的宽度的结构化值,并且其中,所述指令序列使执行通道执行操作,所述操作包括:
使用本地分区索引来读取本地查找表值;
计算所述本地查找表值在移置缓冲区中的位置,其中,所述位置取决于所述执行通道的组相位;以及
与所计算的位置相关联地将所述本地查找表值存储在所述移置缓冲区中。
11.根据权利要求10所述的方法,其中,所述操作进一步包括:
接收由不同执行通道从不同存储器体中读取的远程查找表值;
基于所述执行通道的所述组相位来计算所述远程查找表值在所述移置缓冲区中的第二位置;以及
与所述第二位置相关联地将所述远程查找表值存储在所述移置缓冲区中。
12.根据权利要求10所述的方法,其中,所述结构化值是具有多个元素或双倍宽数据类型的矢量。
13.一种系统,所述系统包括:
一个或多个计算机以及一个或多个存储指令的存储装置,所述指令在由所述一个或多个计算机执行时能够操作以使所述一个或多个计算机执行操作,所述操作包括:
接收用于图像处理器的输入内核程序,所述图像处理器具有二维执行通道阵列、移位寄存器阵列和多个存储器体,其中,在多个执行通道组中的每个执行通道组中的多个执行通道被配置为共享所述图像处理器的所述多个存储器体中的同一相应存储器体;
确定所述内核程序具有读取跨所述多个存储器体被分区的查找表的查找表值的指令;以及
作为响应,用指令序列来替换所述内核程序中的所述指令,所述指令序列在由执行通道执行时使所述执行通道从本地存储器体中读取第一值并且代表属于不同执行通道组的另一执行通道来从所述本地存储器体中读取第二值。
14.根据权利要求13所述的系统,其中,所述指令序列使执行通道执行操作,所述操作包括:
从原始查找表索引计算本地分区索引;
使用所述本地分区索引来从本地存储器体中读取本地查找表值;
使所述本地分区索引通过所述移位寄存器阵列移位,并且通过所述移位寄存器阵列从不同执行通道接收远程分区索引;
使用所述远程分区索引来从所述本地存储器体中读取远程查找表值;以及
使所述远程查找表值通过所述移位寄存器阵列移位回到所述不同执行通道。
15.根据权利要求14所述的系统,其中,所述操作进一步包括:
接收由不同执行通道从远程存储器体中读取的远程查找表值。
16.根据权利要求15所述的系统,其中,所述操作进一步包括:
在所述本地查找表值或所述远程查找表值之间进行选择。
17.根据权利要求16所述的系统,其中,所述操作进一步包括:
如果所述原始查找表索引对N取模等于所述执行通道的分区编号,则选择所述本地查找表值,其中,N是所述查找表的分区的数量。
18.根据权利要求13所述的系统,其中,所述指令序列使每个执行通道针对在所述输入内核程序中的每个单个查找表访问读取多个查找表值。
19.根据权利要求18所述的系统,其中,所述查找表被分区,使得所有偶数索引被存储在第一存储器体中,并且所有奇数索引被存储在第二存储器体中。
20.根据权利要求13所述的系统,其中,所述查找表大于所述存储器体中的每个存储器体。
21.一种编码在一个或多个非暂时性计算机存储介质上的计算机程序产品,所述计算机程序产品包括指令,所述指令在由一个或多个计算机执行时使所述一个或多个计算机执行操作,所述操作包括:
接收用于图像处理器的输入内核程序,所述图像处理器具有二维执行通道阵列、移位寄存器阵列和多个存储器体,其中,在多个执行通道组中的每个执行通道组中的多个执行通道被配置为共享所述图像处理器的所述多个存储器体中的同一相应存储器体;
确定所述内核程序具有读取跨所述多个存储器体被分区的查找表的查找表值的指令;以及
作为响应,用指令序列来替换所述内核程序中的所述指令,所述指令序列在由执行通道执行时使所述执行通道从本地存储器体中读取第一值并且代表属于不同执行通道组的另一执行通道来从所述本地存储器体中读取第二值。
CN201980022634.8A 2018-02-27 2019-02-21 用于图像处理器的大型查找表 Pending CN112005213A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201862636055P 2018-02-27 2018-02-27
US62/636,055 2018-02-27
PCT/US2019/019020 WO2019168739A1 (en) 2018-02-27 2019-02-21 Large lookup tables for an image processor

Publications (1)

Publication Number Publication Date
CN112005213A true CN112005213A (zh) 2020-11-27

Family

ID=65724525

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201980022634.8A Pending CN112005213A (zh) 2018-02-27 2019-02-21 用于图像处理器的大型查找表

Country Status (5)

Country Link
US (1) US11321802B2 (zh)
EP (1) EP3743806B1 (zh)
CN (1) CN112005213A (zh)
TW (1) TWI794423B (zh)
WO (1) WO2019168739A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2023534068A (ja) * 2020-07-21 2023-08-07 ザ ガバニング カウンシル オブ ザ ユニバーシティ オブ トロント スパース性を使用して深層学習ネットワークを加速するためのシステム及び方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105874437A (zh) * 2013-12-31 2016-08-17 三星电子株式会社 存储器管理方法和装置
WO2016171846A1 (en) * 2015-04-23 2016-10-27 Google Inc. Compiler for translating between a virtual image processor instruction set architecture (isa) and target hardware having a two-dimensional shift array structure
CN107133908A (zh) * 2016-02-26 2017-09-05 谷歌公司 用于图像处理器的编译器管理存储器
US20170344369A1 (en) * 2014-12-15 2017-11-30 Samsung Electronics Co., Ltd. Method and apparatus for memory access
CN107563953A (zh) * 2016-07-01 2018-01-09 谷歌公司 具有二维执行通道阵列和二维移位寄存器的图像处理器的区块操作
CN107610035A (zh) * 2017-09-11 2018-01-19 郑州云海信息技术有限公司 一种处理图像的方法及系统

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5038300A (en) * 1988-06-29 1991-08-06 Digital Equipment Corporation Extendable-size color look-up table for computer graphics systems
US6397324B1 (en) * 1999-06-18 2002-05-28 Bops, Inc. Accessing tables in memory banks using load and store address generators sharing store read port of compute register file separated from address register file
US20130212353A1 (en) * 2002-02-04 2013-08-15 Tibet MIMAR System for implementing vector look-up table operations in a SIMD processor
JP4013887B2 (ja) 2003-10-30 2007-11-28 セイコーエプソン株式会社 画像処理回路、画像表示装置及び画像処理方法
US8868677B2 (en) 2012-04-16 2014-10-21 HGST Netherlands B.V. Automated data migration across a plurality of devices
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
US10552939B1 (en) * 2019-02-12 2020-02-04 Google Llc Image processor complex transfer functions

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105874437A (zh) * 2013-12-31 2016-08-17 三星电子株式会社 存储器管理方法和装置
US20170344369A1 (en) * 2014-12-15 2017-11-30 Samsung Electronics Co., Ltd. Method and apparatus for memory access
WO2016171846A1 (en) * 2015-04-23 2016-10-27 Google Inc. Compiler for translating between a virtual image processor instruction set architecture (isa) and target hardware having a two-dimensional shift array structure
CN107133908A (zh) * 2016-02-26 2017-09-05 谷歌公司 用于图像处理器的编译器管理存储器
CN107563953A (zh) * 2016-07-01 2018-01-09 谷歌公司 具有二维执行通道阵列和二维移位寄存器的图像处理器的区块操作
CN107610035A (zh) * 2017-09-11 2018-01-19 郑州云海信息技术有限公司 一种处理图像的方法及系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
窦勇;邬贵明;徐进辉;周兴铭;: "支持循环自动流水线的粗粒度可重构阵列体系结构", 中国科学(E辑:信息科学), no. 04 *

Also Published As

Publication number Publication date
EP3743806B1 (en) 2023-08-30
TWI794423B (zh) 2023-03-01
US11321802B2 (en) 2022-05-03
TW201937919A (zh) 2019-09-16
WO2019168739A1 (en) 2019-09-06
EP3743806A1 (en) 2020-12-02
US20210042875A1 (en) 2021-02-11

Similar Documents

Publication Publication Date Title
US10531030B2 (en) Block operations for an image processor having a two-dimensional execution lane array and a two-dimensional shift register
US11204976B2 (en) Expanded kernel generation
US9978116B2 (en) Core processes for block operations on an image processor having a two-dimensional execution lane array and a two-dimensional shift register
CN107223237B (zh) 用于存储器访问的方法和装置
JP2018124867A (ja) 演算処理装置及び演算処理装置の制御方法
CN115552371A (zh) 用于矩阵处理的可变位置移位
CN112005213A (zh) 用于图像处理器的大型查找表
TWI759373B (zh) 複製元件指令
TWI722684B (zh) 關於影像處理器複雜傳遞函數之電腦實施之方法及非暫時性電腦儲存媒體及採用影像處理器之運算裝置
US11915338B2 (en) Loading apparatus and method for convolution with stride or dilation of 2
JP2023525812A (ja) 行列処理のための行又は列の位置のマスキング
WO2020059156A1 (en) Data processing system, method, and program
US20210272232A1 (en) Filter Independent L1 Mapping Of Convolution Data Into General Purpose Register

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