CN110574068B - 具有高吞吐量内部通信协议的图像处理器 - Google Patents
具有高吞吐量内部通信协议的图像处理器 Download PDFInfo
- Publication number
- CN110574068B CN110574068B CN201880028900.3A CN201880028900A CN110574068B CN 110574068 B CN110574068 B CN 110574068B CN 201880028900 A CN201880028900 A CN 201880028900A CN 110574068 B CN110574068 B CN 110574068B
- Authority
- CN
- China
- Prior art keywords
- receiver
- processor
- data packet
- data
- different
- 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
Links
Images
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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0813—Multiuser, multiprocessor or multiprocessing cache systems with a network or matrix configuration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8007—Architectures 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/8023—Two dimensional arrays, e.g. mesh, torus
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L25/00—Baseband systems
- H04L25/38—Synchronous or start-stop systems, e.g. for Baudot code
- H04L25/40—Transmitting circuits; Receiving circuits
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/39—Credit based
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9063—Intermediate storage in different physical parts of a node or terminal
- H04L49/9078—Intermediate storage in different physical parts of a node or terminal using an external memory or storage device
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Image Processing (AREA)
- Multi Processors (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
描述了一种处理器。处理器包括网络。多个处理核心耦合到网络。处理器包括耦合到网络的发送器电路。发送器电路将由处理核心中的一个生成的输出数据发送到网络中。发送器电路包括控制逻辑电路,以使发送器电路在发送器电路的输出数据的较早的第一分组的传输完成之前发送对输出数据的第二分组的传输的请求。
Description
技术领域
本发明的领域一般涉及计算科学,且更具体地说,涉及具有高吞吐量内部通信协议的图像处理器。
背景技术
图像处理通常包括对被组织成阵列的像素值的处理。这里,空间组织的二维阵列捕获图像的二维性质(附加维度可以包括时间(例如,二维图像的序列)和数据类型(例如,颜色)。在典型场景下,阵列像素值是由已经生成静态图像或生成捕获运动的图像的帧的序列的相机提供的。传统的图像处理器通常处于两个极端的任一边。
第一个极端执行作为在通用处理器或通用类处理器(例如,具有矢量指令增强的通用处理器)上运行的软件程序的图像处理任务。尽管第一个极端典型地提供了高度通用的应用软件开发平台,但是其更细粒度的数据结构的使用以及相关联的开销(例如,指令获取和解码、片内和片外数据的处理、推测性运行)最终导致在程序代码的运行期间每单位数据消耗大量能量。
第二个相反的极端将固定功能硬连线电路应用于更大的数据单元。直接应用于定制设计的电路的更大(而不是更细粒度的)数据单元的使用大大降低了每单位数据的功耗。然而,定制设计的固定功能电路的使用通常会导致处理器能够执行有限的一组任务。因此,在第二个极端中缺乏广泛通用的编程环境(与第一个极端相关联)。
提供高度通用的应用软件开发机会以及改进的每单位数据的能效的技术平台仍然是一个理想但缺失的解决方案。
发明内容
描述了一种处理器。处理器包括网络。多个处理核心耦合到网络。处理器包括耦合到网络的发送器电路。发送器电路将由处理核心中的一个产生的输出数据发送到网络中。发送器电路包括控制逻辑电路,以使发送器电路在发送器电路的较早的第一输出数据分组的传输完成之前发送对第二输出数据分组的传输的请求。
附图说明
以下描述和附图用于说明本发明的实施例。在附图中:
图1示出了模板处理器架构的高级视图;
图2示出了图像处理器架构的更详细视图;
图3示出了图像处理器架构的更详细视图;
图4示出了可以由图像处理器运行的应用软件程序;
图5a示出了第一通信序列;
图5b示出了改进的通信序列;
图5c示出了通信流期间计数器的使用行为;
图6a示出了发送器电路的实施例;
图6b示出了接收器电路的实施例;
图7示出了一种通信方法;
图8a、8b、8c、8d和8e描绘了图像数据到行组的解析、行组到表格(sheet)的解析以及在具有重叠模版的表格上执行的操作;
图9a示出了模版处理器的实施例;
图9b示出模板处理器的指令字的实施例;
图10示出模板处理器内的数据计算单元的实施例;
图11a、11b、11c、11d、11e、11f、11g、11h、11i、11j和11k描绘了使用二维移位阵列和运行通道阵列的以确定具有重叠模版的一对相邻输出像素值的示例;
图12示出了集成的运行通道阵列和二维移位阵列的单位单元的实施例;
图13示出了示例性计算系统。
具体实施方式
1.0独特的图像处理器架构
如本领域所知,用于运行程序代码的基本电路结构包括运行级(stage)和寄存器空间。运行级包含用于运行指令的运行单元。要执行的指令的输入操作数从寄存器空间提供给运行级。从运行级的指令的运行产生的结果被写回到寄存器空间。
软件线程在传统处理器上的运行需要通过运行级进行的一系列指令的顺序运行。最常见的是,操作在从单个输入操作数集中生成单个结果的意义上是“标量的”,。然而,在“向量”处理器的情况下,由运行级进行的指令运行将从输入操作数的向量中生成结果的向量。
图1示出了独特的图像处理器架构100的高级视图,其包括耦合到二维移位寄存器阵列102的运行通道的阵列101。这里,运行通道阵列中的每个运行通道可以被视为包含运行由运行处理器100支持的指令集所需的运行单元的离散运行级。在各种实施例中,每个运行通道接收相同的指令以在相同的机器周期中运行,使得处理器作为二维单指令多数据(two dimensional single instruction multiple data,SIMD)处理器操作。
每个运行通道在二维移位寄存器阵列102中的相应位置具有其自己的专用寄存器空间。例如,转角运行通道103在转角移位寄存器位置104中具有其自己的专用寄存器空间,转角运行通道105在转角移位寄存器位置106中具有其自己的专用寄存器空间,等等。
额外地,移位寄存器阵列102能够移位其内容,使得每个运行通道能够从其自己的寄存器空间直接对前一机器周期期间驻留在另一运行通道的寄存器空间中的值进行操作。例如,a+1水平移位导致每个运行通道的寄存器空间从其最左边邻近者的寄存器空间接收值。由于能够沿水平轴线在左方向和右方向上移动值,以及沿垂直轴线在向上和向下方向上移动值,处理器能够有效地处理图像数据的模版。
这里,如本领域所知,模板(stencil)是用作基本数据单元的图像表面区域的片(slice)。例如,输出图像中特定像素位置的新值可以被计算成输入图像中特定像素位置居中的区域中的像素值的平均值。例如,如果模板具有3×3像素的维度,则特定像素位置可以对应于3×3像素阵列的中间像素,并且可以计算3×3像素阵列内所有9个像素的平均值。
根据图1的处理器100的各种操作实施例,运行通道阵列101的每个运行通道负责计算输出图像中特定位置的像素值。因此,继续上面提到的3×3模板平均示例,在初始加载输入像素数据和移位寄存器内八个移位操作的协调移位序列之后,运行通道阵列中的每个运行通道将计算其相应像素位置的平均值所需的所有九个像素值接收到其本地寄存器空间中。也就是说,处理器能够同时处理以例如相邻输出图像像素位置为中心的多个重叠模板。因为
图1的处理器架构特别擅长处理图像模版,所以它也可以被称为模版处理器。
图2示出了具有多个模板处理器202_1至202_N的图像处理器的架构200的实施例。因此,图像处理器可以被称为多核处理器,其中各个模板处理器可以更一般地被表征为图像处理核心、处理核心、处理器核心、核心或其他类似术语。如图2中所观察到的,架构200包括通过网络204(例如,包括片上交换网络、片上环形网络或其他类型的网络的片上网络(network on chip,NOC))互连到多个模板处理器单元202_1至202_N和相应的表格生成器单元203_1至203_N的多个行缓冲器单元201_1至201_M。在实施例中,任何行缓冲器单元201_1至201_M可以通过网络204连接到任何表格生成器203_1至203_N和相应的模板处理器202_1至202_N。
程序代码被编译并加载到相应的模板处理器202上,以执行软件开发者先前定义的图像处理操作(程序代码也可以加载到模板处理器的相关联的表格生成器203上,例如,取决于设计和实施方式)。在至少一些情况下,图像处理流水线可以通过将用于第一流水线阶段的第一内核程序加载到第一模板处理器202_1中、将用于第二流水线阶段的第二内核程序加载到第二模板处理器202_2中等来实现,其中第一内核执行流水线的第一阶段的功能,第二内核执行流水线的第二阶段的功能等,并且安装了附加的控制流方法来将输出图像数据从流水线的一个阶段传递到流水线的下一阶段。
在其他配置中,图像处理器可以被实现为具有两个或更多模板处理器202_1、202_2的并行机器,这些模板处理器202_1、202_2操作相同的内核程序代码。例如,图像数据的高密度和高数据速率流可以通过跨多个模板处理器扩展帧来处理,每个模板处理器执行相同的功能。
在其他配置中,通过将各个模板处理器配置有其自己的相应的程序代码的内核并将适当的控制流挂钩(hook)配置到硬件中以将输出图像从DAG设计中的一个内核引导到下一个内核的输入,基本上内核的任何有向无环图(directed acyclic graph,DAG)都可以被加载到图像处理器上。
作为一般流程,图像数据的帧由宏I/O(input/output,输入/输出)单元205接收,并逐帧传递给行缓冲器单元201中的一个或多个。特定的行缓冲器单元将其图像数据的帧解析成图像数据的更小的区域,称为“行组”,并然后通过网络204将行组传递给特定的表格生成器。完整或“全部”的单个行组可以由例如帧的多个连续完整行或列的数据组成(为了简单起见,本说明书将主要指连续行)。表格生成器进一步将图像数据的行组解析成图像数据的更小的区域,称为“表格”,并将表格呈现给其相应的模板处理器。
在图像处理流水线或具有单个输入的DAG流的情况下,通常,输入帧被引导到相同的行缓冲器单元201_1,该行缓冲器单元201_1将图像数据解析成行组并将行组引导到表格生成器203_1,该表格生成器203_1的相应模板处理器202_1正在运行流水线/DAG中的第一内核的代码。在模板处理器202_1完成对其处理的行组的操作后,表格生成器203_1将输出行组发送到“下游(downstream)”行缓冲器单元201_2(在某些使用情况下,输出行组可以被发送回先前已经发送输入行组的相同的行缓冲器单元201_1)。
代表流水线/DAG中的下一阶段/操作的一个或多个“消费者”内核,它们在其自己各自的其他表格生成器和模板处理器(例如,表格生成器203_2和模板处理器202_2)上运行,然后从下游行缓冲器单元201_2接收由第一模板处理器202_1生成的图像数据。以这种方式,在第一模板处理器上操作的“生产者”内核将其输出数据转发到在第二模板处理器上操作的“消费者”内核,其中消费者内核在生产者内核之后执行与整个流水线或DAG的设计一致的下一组任务。
如以上参考图1所暗示的,每个模板处理器202_1至202_N被设计成同时对图像数据的多个重叠模板进行操作。模板处理器的多个重叠模板和内部硬件处理能力有效地决定了表格的大小。再次,如上所述,在模板处理器202_1至202_N中的任何一个中,运行通道阵列一致地操作,以同时处理由多个重叠模板覆盖的图像数据表面区域。
额外地,在各种实施例中,图像数据的表格由模板处理器的相对应(例如,本地的)的表格生成器203加载到模板处理器202的二维移位寄存器阵列中。表格和二维移位寄存器阵列结构的使用被认为通过将大量数据移动到大量寄存器空间中来有效地提供功耗改进,例如,单次加载操作,其中此后立即由运行通道阵列直接对数据执行处理任务。此外,运行通道阵列和相应的寄存器阵列的使用提供了易于编程的/可配置的不同模板尺寸。关于行缓冲器单元、表格生成器和模板处理器的操作的更多细节将在下文3.0节中进一步提供。
图3示出了图2的图像处理器的特定硬件实施方式的更详细的实施例。如图3中所观察到的,图2的网络204在环形拓扑304中实现,该在行缓冲器单元301和表格生成器/模版处理器核心302之间的每个交叉点处具有4x4个网络节点314。为简单起见,图3仅标记位于行缓冲器单元301_4和表格生成器/模版处理器核心302_4之间的网络节点314。
这里,表格生成器/模版处理器核心302_1至302_8中的每一个都被理解为包括模版处理器及其相应的表格生成器两者。为简单起见,表格生成器/模板处理器核心302_1至302_8中的每一个在下文中将简称为模板处理器核心或核心。尽管在图3的特定实施例中描绘了八个行缓冲器单元301_1至301_8和八个核心302_1至402_8,但是应当理解,具有不同数量的行缓冲器单元和/或核心的不同架构是可能的。除了环形拓扑之外的网络拓扑也是可能的。
关于图3的图像处理器,环形网络304允许:1)I/O单元305将输入数据传递到任意行缓冲器单元301_1至301_8(或任意核心302_1至302_8);2)任意行缓冲器单元301_1至301_8将行组转发到任意核心302_1至302_8;3)任意核心302_1至302_8将其输出数据传递到任意行缓冲器单元301_1至301_8;以及,4)任意行缓冲器单元301_1至301_8将图像处理器输出数据传递到I/O单元305。因此,大量不同的软件内核加载选项和内部网络配置是可能的。也就是说,理论上,对于要在处理器的各个内核302上运行的由多个内核组成的任意软件应用,任何内核都可以被加载到任何核心上,并且任何行缓冲器单元都可以被配置成从任何核心获得输入数据/将输出数据汇聚至任何核心。
图4示出了可以加载到图3的图像处理器上的示例性应用软件程序或其一部分。如图4中所观察到的,程序代码可以被期望处理一帧或多帧输入图像数据401,以对输入图像数据401实现某种整体变换。该变换是利用程序代码402的一个或多个内核的操作来实现的,该一个或多个内核以由应用软件开发者表达的协调序列对输入图像数据进行操作。
在图4的示例中,通过首先用第一内核K1处理每个输入图像来实现整体变换。内核K1产生的输出图像然后由内核K2操作。由内核K2产生的输出图像中的每一个然后由内核K3_1或K3_2操作,由内核K3_1/K3_2产生的输出图像然后由内核K4操作。在图3的特定示例中,内核K3_1和K3_2可以是例如执行不同图像处理操作的不同内核(例如,内核K3_1对第一特定类型的输入图像进行操作,而内核K3_2对第二不同类型的输入图像进行操作)。
为了简单起见,仅示出了四个内核K1至K4。参考图3的图像处理器硬件架构实施例,注意,在每个内核在不同模板处理器上操作的基本配置中,可以想象,在处理器的所有核心302具有相应的内核(图4的四个内核流仅利用图3的处理器的一半核心)之前,可以从内核K4流出另外四个内核。
2.0高效实施事务(transaction)的收发器
如上所述,在一个模板处理器上运行的程序代码的生产内核将其输出数据(例如,作为行组)发送到行缓冲器单元。行缓冲器单元将数据排列或以另外的方式将数据存储和转发(例如,也作为行组)到一个或多个其他模板处理器,这些模板处理器运行消耗生产内核的输出数据的程序代码的各个内核。在整个图像处理器中,有互连到多个行缓冲器单元的多个模板处理器,使得例如可以实施大量生产/消费内核连接。
在各种实施例中,用于特定生产/消费内核关系的存储和转发队列可以被称为“缓冲器”或“行缓冲器”,而“行缓冲器单元”是可以同时支持多个缓冲器的硬件组件。这里,行缓冲器单元可以包括存储器资源和相关联的逻辑。行缓冲器单元支持的不同缓冲器被分配不同部分的存储器资源用于它们各自的存储和转发活动。
图像处理器的内部网络支持各种生产内核到行缓冲器单元的通信/连接,以及支持各种行缓冲器单元消耗同时存在于图像处理器中的内核通信/连接。这里,在实施例中,每个模板处理器包括耦合到内部网络的由发送器和接收器组成的收发器。同样,每个行缓冲器单元包括耦合到内部网络的收发器。
在各种实施例中,由于模板处理器和行缓冲器单元的组合可以在任何时候向内部网络提供潜在的大量流量,信用(credit)控制机制被用来防止图像处理器内的任何资源(包括网络和/或其他资源,诸如,行缓冲器单元的存储器资源和/或模板处理器的本地存储器资源)的过载。
例如,在一个实施例中,为了防止行缓冲器单元存储器资源和/或用于从生产模板处理器(运行生产内核的模板处理器,以下称为发送处理器)到行缓冲器单元的通信的网络的过载,在行缓冲器单元中的每一个中实施信用控制机制,以控制从生产内核到其相关联的行缓冲器单元的输出图像数据的流。这里,行缓冲器单元维持对信用的数量的控制,并且向期望向行缓冲器单元发送输出图像数据的发送处理器发出信用。每个信用对应于发送处理器可以发送的数据量。
因此,发送处理器只能发送与其具有的信用的数量相对应的数据量。当模板处理器实际上将其输出数据发送到行缓冲器单元时,它会消耗其信用计数相应的量。例如,如果每个信用对应于1MB的数据,随着发送处理器向行缓冲器单元发送每1MB的数据,其将其信用量减少1(注意,在实际的处理器实施方式中,分组和相应的数据传输是更细粒度的,例如,每个分组通常是几十字节或几百字节,并且每个信用对应于几十字节(例如,32字节))。行缓冲器单元可以继续向发送处理器发送额外的信用(例如,作为行缓冲器单元内释放的资源),使得发送处理器可以继续发送数据。然而,如果在任何时候,发送处理器的信用计数被消耗到零,则它不能再向行缓冲器单元发送任何数据,直到它从行缓冲器单元接收到额外的信用为止。
图5a示出了根据上述原理操作的先前设计的示例性场景。这里,行缓冲器单元502包括固定大小的内部队列(为简单起见,在图5a中未示出),其中保存从发送处理器501已经接收的数据单元。特别地,假设队列有N=5个条目,其中每个条目可以保存特定的数据量(例如,M字节)。在基本配置中,发送处理器501在与行缓冲器单元502的特定通信会话或“连接”中发送一个或多个数据单元(每个M字节)(例如,发送包含多个数据单元(每个M字节)的分组)。每当发送处理器501向行缓冲器单元502发送下一个M字节的数据单元时,下一个数据单元被输入队列。
当服务来自队列的M字节数据单元时(例如,因为行缓冲器单元502能够将其写入其存储器资源),行缓冲器单元502向发送处理器501发送一个信用。这里,对来自队列的M字节数据单元的服务实质上释放了一个队列条目,该条目可以用从发送处理器501发送的下一个M字节单元填充。例如,如果行缓冲器单元502能够快速服务来自队列的多个M字节单元,则相应的信用量被发送回发送处理器501。例如,如果行缓冲器单元502快速服务来自队列的三个M字节单元,行缓冲器单元502将三个信用发送回发送处理器501。
因此,参考图5a,在初始状态下,例如,当发送处理器501具有要发送到行缓冲器单元502的下一个输出图像数据的分组时,发送处理器501向行缓冲器单元502发送对发送请求RTS_1的请求。行缓冲器单元队列最初是空的,并因此,在利用确认ACK_1授予请求时,行缓冲器单元502发送等于队列的大小(N=5)的信用的数量。发送处理器501然后开始连续发送多个M字节数据单元,D1、D2、…。在图5a的场景的处理器侧描述了数据单元的发送引起的处理器信用计数的消耗。
在行缓冲器单元502侧,行缓冲器单元502从发送处理器501连续接收M个数据单元,当接收到它们时将其输入队列,并根据行缓冲器单元的能力服务来自队列的它们(例如,将它们写入存储器)。随着对来自队列的M字节数据单元的每次服务,行缓冲器单元502向发送处理器501发送附加的信用,处理器501将新接收的信用添加到其信用计数中。
最终,发送处理器将发送用于当前连接的所有M字节数据单元(例如,分组的所有M字节数据单元都已发送)。在图5a的场景中,假设当前连接由6M字节数据单元组成(例如,分组由6M字节数据单元组成)。由此,随着D6数据单元的发送,发送处理器501已经发送了分组的最后一个数据单元。再进一步,最终,行缓冲器单元502将已经服务了来自其队列的所有M字节单元,并将相应的信用发送回发送处理器501。这样,当发送处理器501已经发送了会话的所有数据单元并且其信用计数等于行缓冲器单元的队列的大小(N=5)时,发送处理器501将识别连接的完成。这里,尽管发送处理器501具有全部的信用集,但是不允许使用它们,例如,用于第二个后续分组,因为它还没有发送请求,也没有接收到对这种后续分组的任何确认。
在图5a的先前设计中,如果发送处理器501在当前会话的完成之前(例如,在发送场景中的第一分组的数据单元时)有另一分组要发送到行缓冲器单元502,则它只能在先前分组的发送被认为完成之后发送对第二后续分组的请求。如上所述,直到发送处理器已经发送了用于连接的所有数据并且其信用计数量等于行缓冲器单元队列的大小(N=5),发送处理器才认为连接完成。
这种方法的问题是在发送较早分组的最后一个数据单元和发送随后分组的第一个数据单元之间可能浪费的时间量504。这里,如图5a中所观察到的,注意,在D6数据单元的发送时第一分组的发送完成,但是直到时间503连接才被认为完成。浪费的时间504在很大程度上是产生处理器等待来自行缓冲器单元502的返回信用的结果,其等于队列的大小加上第二分组的RTS_2/ACK_2传播延迟。长的等待时间会导致处理器效率低下,因为流量不会在网络上发送,而在其他情况下可能会发送。
根据先前设计,分组的最后一个数据单元(例如,D6)被特别标记,或者边带信号被发送到与分组的最后一个数据单元的发送相应的行缓冲器单元502,使得行缓冲器单元502知道它何时已经接收到特定分组/连接的最后一个数据单元。这里,当分组/连接的最后一个数据单元(D6)从行缓冲器单元的队列中被服务时,行缓冲器单元502被允许对下一个请求RTS_2确认ACK_2。这里,在处理刚刚完成的第一分组/连接期间(或者甚至在此之前),行缓冲器单元502可能已经接收到来自其他生产处理器的对使用行缓冲器单元502的其他生产者/消费者内核关系的请求。行缓冲器单元502可以自由地确认这些请求中的一个(例如,最早的未决请求),以便在它已经服务了来自其刚完成的连接的最后一个日期单元(D6)之后开始下一个分组传输。
如上所述,其分组传输刚刚完成的发送处理器501一旦其先前的分组传输完成(在图5a的时间503),也可以自由发送下一个请求RTS_2。如果没有来自其他生产模版处理器的其他竞争请求在行缓冲器单元502中未决(pending),行缓冲器单元502将对由其先前的分组传输刚刚完成的发送处理器501发送的请求RTS_2进行确认。然后重复上述关于第一分组的过程。
图5b示出了对图5a的先前设计的第一改进,其中发送处理器501被允许在当前分组被发送完成之前发送对下一分组的请求REQ_2。也就是说,例如,时间段515可以被视为被发送的内容参与第一分组的传输的时间段(第一分组的通信会话或连接在时间段515上延伸)。在图5b的改进设计中,当发送处理器参与第一分组的传输时(即,在时间段515内),发送处理器能够发送对第二分组的请求REQ_2。
在图5b的特定示例中,发送处理器501一旦意识到它有另一个分组要发送,发送处理器501就被允许发送请求。可以看出,发送处理器501在它发送第一分组的请求RTS_1之后几乎立即识别出它有另一分组要发送(RTS_2在RTS_1之后立即发送)。
同样,在改进的设计中,即使当前正在处理的分组传输尚未完成,行缓冲器单元502也可以自由地响应请求。例如,在行缓冲器单元502没有来自其他发送处理器的其他竞争请求(或者在这种其他竞争请求之前,行缓冲器单元502接收到REQ_2)的情况下,行缓冲器单元502可以自由地确认第二请求ACK_2。这里,没有信用与第二确认ACK_2相关联,因为所有信用都专用于当前活动的分组传输(第一分组)。额外地,随着第二确认ACK_2被发布到正在发送被传输的当前分组的相同的发送处理器501,发送处理器501和行缓冲器单元502都理解,当前发送处理器501将在当前分组的传输完成之后将下一分组发送到行缓冲器单元502。
在这些情况下,随着发送处理器501已经接收到要传输的第二分组的确认ACK_2,发送处理器501可以使用表明第一分组传输的结束的累积信用,以用于第二后续分组的传输。也就是说,从图5a的讨论中回想起,发送处理器501在它已经发送了分组的最后一个数据单元D6并且它的信用计数对应于行缓冲器单元队列的大小(N=5)之后,识别出第一个分组传输的完成。
因此,根据图5a的先前设计,此类信用不可用于立即使用,因为还没有接收到对第二分组的确认ACK_2。相比之下,利用图5b的改进方法,发送处理器501能够立即使用这些信用来传输第二分组,因为它已经接收到对第二分组的确认ACK_2。行缓冲器单元502将理解,后续要接收的数据单元是用于第二分组的,因为它利用其数据单元D6的接收来识别第一分组的完成(上面参照图5a进行了描述)。
此外,先前设计的发送处理器501不被允许发送对将随后的分组传送到另一行缓冲器单元的请求,直到其与目前的行缓冲器单元502的当前传送完成(生产内核可以将输出图像数据发送到多于一个行缓冲器单元)。这样,即使图5a的第二分组要被发送到另一行缓冲器单元,浪费的时间504仍然存在。
如关于图5b的改进设计所讨论的,发送处理器501被允许在其当前分组完成之前发送对第二分组的请求。在各种实施例中,这包括将请求发送到不同于发送处理器当前参与与之进行事务的行缓冲器单元的行缓冲器单元。尽管在图5b中没有明确示出,但是假设RTS_2被发送到除了行缓冲器单元502之外的行缓冲器单元,并且从相同的、其他行缓冲器单元502接收ACK_2。这里,在逐行缓冲器单元地将分配的信用量提供在行缓冲器单元上的情况下,当另一行缓冲器单元通过发送确认ACK_2来批准请求时,发送处理器501在当前将第一分组传输到行缓冲器单元501的同时从另一行缓冲器单元接收相关联的信用。
由此,在实施例中,发送处理器的收发器维护多个信用计数器,其中不同的信用计数器用于跟踪来自不同行缓冲器单元的信用。在第二分组将被发送到与第一分组不同的目的地的情况下,发送器可以对目的地中的一个使用第一信用计数器并且对于目的地中的另一个使用第二信用计数器,以间隔的方式同时将第一和第二分组发送到它们各自的目的地(第二分组的传输不必等到第一分组完成)。在各种实施例中,哪个信用计数器对应于哪个目的地可以取决于发送处理器发送的流量模式而改变。
图5c示出了示例。如在图5c所观察的,在第一时间间隔521期间,发送处理器将第一分组发送到第一行缓冲器单元(LBU_1)。它的信用计数保存在第一信用计数器531中。然后,在第二时间间隔522期间,发送处理器仍然将第一分组发送到第一行缓冲器单元,但是也将第二分组发送到第二行缓冲器单元(LBU_2)。第二分组的信用计数被保存在不同的第二信用计数器532中,因为它被发送到不同于其事务根据第一信用计数器531进行的行缓冲器单元的行缓冲器单元。
然后,在第三时间间隔523期间,第一分组已经完成其传输,但是第二分组仍在发送。然后,在第四时间间隔524期间,发送处理器向不同于第一和第二行缓冲器单元的第三线缓冲器(LBU_3)单元发送第三分组。第三分组的信用计数保存在第一信用计数器531中。然后,在第五时间间隔525期间,第二分组已经完成其传输,并且没有后续分组要发送到第二行缓冲器单元或其他行缓冲器单元。
然后,在第六时间间隔526期间,发送处理器有另一分组要发送到第一行缓冲器单元。在这种情况下,第二信用计数器532用于保存要发送到第一行缓冲器单元的这个新的分组的信用。注意,第一行缓冲器单元的信用计数器基本上已经在要发送到第一行缓冲器单元的一对分组之间交换。也就是说,在第一和第二时间间隔521和522期间,第一信用计数器531用于跟踪第一行缓冲器单元的信用,而在第六时间间隔526期间,第二信用计数器532用于跟踪第一行缓冲器单元的信用。
需要指出的是,尽管上面的讨论涉及向行缓冲器单元发送数据的处理核心,但是在上述图像处理器中,对于从行缓冲器单元到运行消费内核的处理核心的分组传输,可以存在相同的协议场景。在这种情况下,行缓冲器单元呈现图5a至图5c的发送器的行为,而处理核心呈现图5a和图5b的接收器的行为。由此,在各种实施例中,处理核心(和/或它们相应的表格生成器)和行缓冲器单元都包括发送器电路和接收器电路两者。
图6a和图6b分别示出了发送器电路和接收器电路的实施例。如在图6a所观察的,发送器电路601包括根据上述协议发送数据单元或RTS请求的发送器。准备发送的数据单元在输出队列604中排列。RTS和信用控制逻辑电路605根据在信用计数器606_1、606_2中的一个中为与目的地的当前会话维护的信用计数,授权将下一个数据单元发送到其目的地。控制逻辑605还发布RTS请求,以启动与适当目的地的传输会话。可以例如根据与出站队列604中的出站分组相关联的目的地地址来确定要向其发送下一个RTS的目的地的身份。
接收电路611接收确认和信用量,并将它们转发给控制逻辑605。注意,在605的控制逻辑中观察到两个信用计数器606_1和606_2。在各种实施例中,信用计数606_1、606_2被分配为例如在每个通信会话的基础上保存对特定目的地的信用,使得它们可以取决于如上参考图5c所述的出站流量流来交换它们为其保存信用的目的地。
在其他实施例中,可以存在两个以上的信用计数器,使得发送电路602可以同时容纳具有多于两个不同目的地的多于两个的传输会话。也就是说,根据例如网络的能力/容量,具有不同目的地的并发事务的数量可能因实施例而异。在实施例中,发送器电路601被允许在发送第一较早分组的同时发送第二分组的RTS。第二分组的RTS被发送到的目的地可以是第一较早分组被发送到的目的地或某个其他目的地。
图6b示出了接收器侧电路602。这里,由接收器电路620接收的接收数据单元在入站队列607中排列(回想一下,在各种实施例中,未完成(outstanding)信用的数量对应于入站队列607的大小)。当服务来自队列607的接收的数据单元时,控制逻辑608经由传输电路621将相应的信用量发送回数据单元的发送器。控制逻辑608还确定潜在多个发送器中的哪一个将被选择为下一个发送器,其中,该潜在多个发送器将RTS请求引导到接收器602,接收器602将从该下一个发送器接收分组。多个未决RTS请求可以驻留在控制逻辑608(图6b中未示出)内的队列中,并且该逻辑根据一些(例如,公平性)算法从队列中选择RTS请求中的一个(例如,跨不同发送器(接收器602配置为从该不同发送器进行接收)的循环轮询,队列中最早的RTS等)。当控制逻辑608确定允许多个请求发送器中的哪个发送器向接收器发送分组时,控制逻辑608使得确认经由传输电路621发送给发送器。
在各种实施例中,对于发送到接收器当前正在从其接收分组的同一发送器的确认,不发送信用。额外地,在各种实施例中,与队列607的大小相对应的信用量连同发送给接收器602当前没有从其接收分组的发送器的确认一起被发送。在各种实施例中,接收器602不交织来自相同的发送器或不同的发送器的多个分组(接收器602只允许接收来自一个发送器的一个分组)。
控制逻辑电路605、608可以实施为专用硬件逻辑电路、可编程逻辑电路(例如,现场可编程门阵列(field programmable gate array,FPGA)逻辑电路、可编程逻辑器件(programmable logic device,PLD)逻辑电路、可编程逻辑阵列(programmable logicarray,PLA)逻辑电路)、运行程序代码以执行控制逻辑功能的嵌入式处理器电路,或这些方法的任意组合。
图7描述了上面已经描述的方法。该方法包括在处理器的处理核心上处理程序代码,以生成处理核心的输出数据701。该方法包括:由耦合到处理器内的网络的发送器电路在发送器电路完成较早的第一分组的传输之前,发送702对第二分组的传输请求。第二分组包括由处理核心生成的第二输出数据,且第一分组包括由处理核心生成的第一输出数据。该方法还包括利用耦合到网络的处理器的一个或多个其他处理核心来处理第一输出数据和第二输出数据703。
3.0图像处理器实施方式实施例
图8a至图8e至图12提供了关于上面详细描述的图像处理器和相关联的模板处理器的各种实施例的操作和设计的附加细节。从图2的讨论中回顾,行缓冲器单元将行组馈送到模板处理器的相关联的表格生成器,图8a至8e示出了行缓冲器单元201的解析活动、表格生成器单元203的更细粒度解析活动以及耦合到表格生成器单元203的模板处理器702的模板处理活动的高级实施例。
图8a描绘了图像数据801的输入帧的实施例。图8a还描绘了模板处理器被设计为在其上操作的三个重叠模板802(每个模板具有3像素×3像素的维度)的轮廓。每个模板分别为其生成输出图像数据的输出像素以纯黑突出显示。为简单起见,三个重叠模板802被描绘为仅在竖直方向重叠。应当认识到,实际上模板处理器可以被设计成在竖直和水平方向两者上具有重叠的模板。
由于模板处理器内的竖直重叠模板802,如图8a中所观察的,在帧内存在单个模板处理器可以在其上操作的宽带图像数据。如将在下面更详细讨论的,在实施例中,模板处理器以从左到右的方式跨图像数据处理重叠模板内的数据(且然后对下一组行重复,以从上到下的顺序)。因此,随着模板处理器继续向前进行它们的操作,实心黑色输出像素块的数量将向右水平增长。如上所述,行缓冲器单元201负责解析来自输入帧的输入图像数据的行组,模板处理器足以在该输入图像数据的行组上操作达扩展数量的即将到来的周期。行组的示例性描绘被示为阴影区域803。在实施例中,行缓冲器单元201可以理解用于向/从表格生成器发送/接收行组的不同动态。例如,根据称为“全部组(full group)”的一种模式,图像数据的完整的全宽行在行缓冲器单元和表格生成器之间传递。根据称为“实际上高(virtually tall)”的第二种模式,行组最初利用全宽行的子集传递。然后,剩余的行以较小(小于全宽)的片(piece)顺序传递。
随着输入图像数据的行组803已经由行缓冲器单元定义并传递到表格生成器单元,表格生成器单元进一步将行组解析成更精细的表格,这些表格更精确地适应模板处理器的硬件限制。更具体地,如下文将更详细描述的,在实施例中,每个模板处理器由二维移位寄存器阵列组成。二维移位寄存器阵列实质上将图像数据移位到运行通道阵列的“下方”,其中移位的模式使得每个运行通道对其自己的各个模板内的数据进行操作(即,每个运行通道在其自己的信息的模板上进行处理,以生成该模板的输出)。在实施例中,表格是输入图像数据的表面区域,其“填充”或以其他方式加载到二维移位寄存器阵列中。
如下文将更详细描述的,在各种实施例中,实际上存在可以在任何周期移位的多层二维寄存器数据。为了方便起见,本说明书的大部分将简单地使用术语“二维移位寄存器”等来指代具有一个或多个这种可以被移位的二维寄存器数据层的结构。
因此,如图8b中所观察到的,表格生成器解析来自行组803初始表格804,并将其提供给模板处理器(这里,该数据的表格对应于通常由附图标记804标识的阴影区域)。如图8c和图8d中所观察到的,模板处理器通过在表格上以从左到右的方式有效地移动重叠模板802来对输入图像数据的表格进行操作。如图8d所示,可以从表格内的数据计算输出值的像素的数量被耗尽(没有其他像素位置可以具有根据表格内的信息确定的输出值)。为了简单起见,图像的边界区域被忽略了。
如图8e中所观察到的,表格生成器然后为模板处理器提供下一张表格805以继续操作。注意,在模板对下一表格开始操作时的模板的初始位置是从第一表格上的耗尽点向右的下一个进程(如先前图8d中所描绘的)。对于新表格805,模板将简单地继续向右移动,因为模板处理器以与处理第一张表格相同的方式对新表格进行操作。
注意,由于输出像素位置周围的模板的边界区域,第一表格804的数据和第二表格805的数据之间存在一些重叠。重叠可以简单地通过表格生成器重新发送重叠数据两次来处理。在替代实施方式中,为了将下一表格馈送到模板处理器,表格生成器可以继续只向模板处理器发送新数据,并且模板处理器重用来自前一表格的重叠数据。
图9示出了模板处理器架构900的实施例。如图9中所观察的,模板处理器包括数据计算单元901、标量处理器902和相关联的存储器903以及I/O单元904。数据计算单元901包括运行通道的阵列905、二维移位阵列结构906和与阵列的特定行或列相关联的分离的随机存取存储器907。
I/O单元904负责将从表格生成器接收的数据的“输入”表格加载到数据计算单元901中,并将来自模板处理器的数据的“输出”表格存储到表格生成器中。在实施例中,将表格数据加载到数据计算单元901中需要将接收到的表格解析成图像数据的行/列,并将图像数据的行/列加载到二维移位寄存器结构906或运行通道阵列的行/列的各个随机存取存储器907中(下面将更详细地描述)。如果表格最初被加载到存储器907中,则运行通道阵列905内的各个的运行通道随后可以在适当的时候(例如,在对表格的数据进行操作之前作为加载指令)将表格数据从随机存取存储器907加载到二维移位寄存器结构906中。在完成将数据的表格加载到寄存器结构906中时(无论是直接从表格生成器还是从存储器907),运行通道阵列905的运行通道对数据进行操作,并最终将完成的数据作为表格直接“写回”到表格生成器,或者写入到随机存取存储器907中。如果是后者的话,I/O单元904从随机存取存储器907中提取数据,以形成输出表格,然后将其转发给表格生成器。
标量处理器902包括程序控制器909,其从标量存储器903读取模板处理器的程序代码的指令,并将指令发布到运行通道阵列905中的运行通道。在实施例中,单个相同的指令被广播到阵列905内的所有运行通道,以实现来自数据计算单元901的类似SIMD的行为。在实施例中,从标量存储器903读取并发布到运行通道阵列905的运行通道的指令的指令格式包括超长指令字(very-long-instruction-word,VLIW)类型格式,该格式包括每一指令多于一个操作码。在另外的实施例中,VLIW格式包括指向由每个运行通道的ALU执行的数学函数的ALU操作码(如下所述,在实施例中,其可以指定多于一个的传统ALU操作)和存储器操作码(其指向用于特定运行通道或运行通道的集合的存储器操作)。
术语“运行通道”指能够运行指令的一个或多个运行单元的集合(例如,能够运行指令的逻辑电路)。然而,在各种实施例中,运行通道可以包括更多类似处理器的功能性,而不仅仅是运行单元。例如,除了一个或多个运行单元之外,运行通道还可以包括对接收到的指令进行解码的逻辑电路,或者,在更多类似MIMD的设计的情况下,包括提取和解码指令的逻辑电路。关于类似MIMD的方案,尽管在此主要描述了集中式程序控制方法,但是可以在各种可替代实施例(例如,包括阵列905的每个运行通道内的程序代码和程序控制器)中实施更分布式的方法。
运行通道阵列905、程序控制器909和二维移位寄存器结构906的组合为广泛范围的可编程功能提供了广泛适应性/可配置的硬件平台。例如,假设各个运行通道能够执行各种各样的功能并且能够容易地访问任何输出阵列位置附近的输入图像数据,应用软件开发者能够对具有各种不同功能能力以及维度(例如,模板大小)的内核进行编程。
除了充当由运行通道阵列905操作的图像数据的数据存储装置之外,随机存取存储器907还可以保存一个或多个查找表。在各种实施例中,一个或多个标量查找表也可以在标量存储器903中被实例化。
标量查找涉及将来自相同索引的相同查找表的相同数据值传递到运行通道阵列905内的运行通道的每一个。在各种实施例中,上述VLIW指令格式被扩展为还包括标量操作码,该操作码将由标量处理器执行的查找操作指向到标量查找表中。指定用于与操作码一起使用的索引可以是立即操作数,也可以从一些其他数据存储位置提取。无论如何,在实施例中,来自标量存储器内的标量查找表中的查找实质上涉及在相同的时钟周期期间向运行通道阵列905内的所有运行通道广播相同的数据值。关于查找表的使用和操作的更多细节将在下面进一步提供。
图9b总结了上面讨论的(多个)VLIW指令字实施例。如图9b中所观察的,VLIW指令字格式包括用于三个分离的指令的字段:1)由标量处理器运行的标量指令951;2)由运行通道阵列内的各个ALU以SIMD方式广播和运行的ALU指令952;以及,3)以部分SIMD方式广播和运行的存储器指令953(例如,如果沿着运行通道阵列中的同一行的运行通道共享相同的随机存取存储器,则来自不同行中的每一行的一个运行通道实际上运行该指令(存储器指令953的格式可以包括标识来自每一行的哪个运行通道运行该指令的操作数))。
还包括用于一个或多个立即操作数的字段954。指令951、952、953中的哪一个使用哪一个立即操作数信息可以在指令格式中标识。指令951、952、953中的每一个还包括它们自己的各个输入操作数和结果信息(例如,用于ALU操作的本地寄存器和用于存储器访问指令的本地寄存器和存储器地址)。在实施例中,标量指令951在运行通道阵列内的运行通道运行另两个指令952、953中的任一个之前由标量处理器运行。也就是说,VLIW字的运行包括第一周期,标量指令951在该第一周期上运行,随后是第二周期,其它指令952、953可以在该第二周期上运行(注意,在各种实施例中,指令952和953可以并行运行)。
在实施例中,由标量处理器运行的标量指令包括发布到表格生成器的命令,以将表格从数据计算单元的存储器或2D移位寄存器加载或者将表格存储到数据计算单元的存储器或2D移位寄存器。这里,表格生成器的操作可以依赖于行缓冲器单元或其他变量的操作,这些变量阻止对表格生成器完成由标量处理器发出的任何命令所需的周期的数量的运行前理解。这样,在实施例中,其标量指令951对应于或以其他方式使得命令被发布到表格生成器的任何VLIW字还包括在另外其他两个指令字段952、953中的无操作(no-operation,NOOP)指令。然后,程序代码进入指令字段952、953的NOOP指令的循环,直到表格生成器完成其从数据计算单元的加载/向数据计算单元的存储。这里,在向表格生成器发布命令时,标量处理器可以设置互锁寄存器的一个位,表格生成器在命令完成时重置该互锁寄存器。在NOOP循环期间,标量处理器监控互锁位的位。当标量处理器检测到表格生成器已经完成其命令时,正常运行再次开始。
图10示出了数据计算组件1001的实施例。如图10中所观察的,数据计算组件1001包括逻辑上位于二维移位寄存器阵列结构1006“上方”的运行通道的阵列1005。如上所述,在各种实施例中,由表格生成器提供的图像数据的表格被加载到二维移位寄存器1006中。然后,运行通道对来自寄存器结构1006的表格数据进行操作。
运行通道阵列1005和移位寄存器结构1006相对于彼此固定就位。然而,移位寄存器阵列1006中的数据以策略和协调的方式移位,以使得运行通道阵列中的每个运行通道处理数据中的不同模板。由此,每个运行通道确定正在生成的输出表格中不同像素的输出图像值。从图10的架构中应该清楚,重叠模板不仅竖直地布置,而且水平地布置,因为运行通道阵列1005包括竖直相邻的运行通道以及水平相邻的运行通道。
数据计算单元1001的一些显著的架构特征包括移位寄存器结构1006,其具有比运行通道阵列1005更宽的维度。也就是说,在运行通道阵列1005之外有寄存器1009的“晕圈(halo)”。尽管晕圈1009被示出存在于运行通道阵列的两侧上,但取决于实施方式,晕圈可以存在于运行通道阵列1005的更少(一个)或更多(三个或四个)侧。晕圈1005用于在数据在运行通道1005“下方”移位时,为溢出到运行通道阵列1005的边界之外的数据提供“溢出”空间。作为简单的情况,当模板最左边的像素被处理时,以运行通道阵列1005的右边缘为中心的5x5模板将需要更靠右的四个晕圈寄存器位置。为了便于绘图,图10将晕圈的右侧的寄存器示出为仅具有水平移位连接,且将晕圈的底部的寄存器示出为仅具有竖直移位连接,而在标称实施例中,任一侧(右侧、底部)上的寄存器将具有水平和竖直连接。在各种实施例中,晕圈区域不包括用于运行图像处理指令的相应的运行通道逻辑(例如,不存在ALU)。然而,各个存储器存取单元(M)存在于晕圈区域位置中的每一个中,使得各个晕圈寄存器位置可以单独地从存储器加载数据并将数据存储到存储器。
附加溢出空间由随机存取存储器1007提供,随机存取存储器1007耦合到阵列中的每一行和/或每一列,或其部分(例如,随机存取存储器可以被分配给运行通道阵列的“区域”,其逐行跨越4个运行通道,逐列跨越2个运行通道。为简单起见,应用的其余部分将主要参考基于行和/或列的分配方案)。这里,如果运行通道的内核操作要求它处理二维移位寄存器阵列1006之外的像素值(这是一些图像处理例程可能需要的),则图像数据的平面能够进一步溢出,例如从晕圈区域1009溢出到随机存取存储器1007中。例如,考虑6*6模板,其中硬件包括在运行通道阵列的右边缘上的运行通道的右侧仅四个存储元素的晕圈区域。在这种情况下,需要将数据进一步移位到晕圈1009右边缘的右边,以完全处理模板。移位到晕圈区域1009之外的数据然后将溢出到随机存取存储器1007。下面进一步提供了图9的随机存取存储器1007和模板处理器的其他应用。
图11a至图11k示出了其中图像数据在如上所述的运行通道阵列“下方”的二维移位寄存器阵列内移位的方式的工作示例。如图11a中观察到的,二维移位阵列的数据内容在第一阵列1107中描绘,并且运行通道阵列由帧1105描绘。此外,简单描绘了运行通道阵列内的两个相邻运行通道1110。在这个简化描绘1110中,每个运行通道包括寄存器R1,该寄存器可以从移位寄存器接收数据、从ALU输出接收数据(例如,跨周期充当累加器)、或将输出数据写入输出目的地。
每个运行通道还具有在本地寄存器R2中可用的、在二维移位数组中位于运行通道“下方”的内容。因此,R1是运行通道的物理寄存器,而R2是二维移位寄存器阵列的物理寄存器。运行通道包括可以对由R1和/或R2提供的操作数进行运算的ALU。如下文将更详细描述的,在实施例中,移位寄存器实际上是用每一阵列位置的多个(深度)存储装置/寄存器元件来实施的,但是移位活动限于存储元件的一个平面(例如,每个周期只有存储元件的一个平面可以移位)。图11a至11k将这些更深的寄存器位置中的一个描绘为用于存储来自各个运行通道的结果X。为了便于说明,更深的结果寄存器被绘制在对应寄存器R2的旁边,而不是下方。
图11a至11k集中于两个模板的计算,该两个模板的中心位置与运行通道阵列内描绘的一对运行通道位置1111对齐。为了便于说明,该对运行通道1110被绘制为水平邻近者,而实际上,根据以下示例,它们是竖直邻近者。
正如最初在图11a中观察到的,运行通道以它们的中心模板位置为中心。图11b显示了由两个运行通道运行的目标代码。如图11b所观察到的,两个运行通道的程序代码使得移位寄存器阵列内的数据向下移位一个位置以及向右移位一个位置。这将两个运行通道与其各个模板的左上角对齐。然后,程序代码致使位于(在R2中)其各个位置的数据被加载到R1。
如图11c中所观察到的,程序代码接下来使得该对运行通道将移位寄存器阵列内的数据向左移位一个单位,这使得每个运行通道的各个位置的右侧的值被移位到每个运行通道的位置。然后将R1的值(以前的值)与已经移动到运行通道的位置(在R2中)的新的值相加。结果被写入R1中。如在图11d中观察到的,重复与上面针对图11c描述的相同的过程,这使得合成的R1现在包括在上部运行通道中的值A+B+C和在下部运行通道中的值F+G+H。此时,两个运行通道都已经处理了其各个模板的上一行。请注意溢出到运行通道阵列的左侧的晕圈区域(如果在左侧存在晕圈区域),或者如果在运行通道阵列的左侧不存在晕圈区域,则溢出到随机存取存储器。
如图11e所观察的,程序代码接下来使得移位寄存器阵列中的数据向上移位一个单元,这使得两个运行通道与其各个模板的中间行的右边缘对齐。两个运行通道的寄存器R1当前包括模板的顶行和中间行的最右边值的总和。图11f和图11g展示了跨两个运行通道模板的中间行向左移动的持续过程。累积相加继续进行,使得在图11g的处理结束时,两个运行通道都包括其各个模板的顶行和中间行的值的总和。
图11h示出了用于将每个运行通道与其对应模板的最低行对齐的另一移位。图11i和图11j示出了在两个运行通道的模板的过程中继续移位以完成处理。图11k示出了附加移位,以将每个运行通道与其在数据阵列中的正确位置对齐,并将结果写入其中。
在图11a至图11k的示例中,注意移位操作的目标代码可以包括指令格式,该指令格式标识以(X,Y)坐标表示的移位的方向和幅度。例如,向上移一个位置的目标代码可以用目标代码表示为SHIFT0,+1。作为另一示例,向右移动一个位置可以用目标代码表示为SHIFT+1,0。在各种实施例中,也可以在目标代码中指定更大幅度的移位(例如SHIFT0,+2)。这里,如果2D移位寄存器硬件仅支持每个周期移位一个位置,则指令可以被机器解释为需要多个周期运行,或者,2D移位寄存器硬件可以被设计为支持每个周期移位一个以上的位置。后面的实施例将在下面进一步详细描述。
图12示出了用于运行通道和相应的移位寄存器结构的单位单元的另一更详细的描述(在各种实施例中,晕圈区域中的寄存器不包括相应的运行通道,而是包括存储器单元)。在实施例中,与运行通道阵列中的每个位置相关联的运行通道和寄存器空间通过在运行通道阵列的每个节点处实例化图12中观察到的电路来实施。如图12所观察的,单位单元包括耦合到寄存器文件1202的运行通道1201,寄存器文件1202由四个寄存器R2到R5组成。在任何周期期间,运行通道1201可以从寄存器R1至R5中的任何一个读取或向其写入。对于需要两个输入操作数的指令,运行通道可以从R1到R5中的任何一个检索两个操作数。
在实施例中,二维移位寄存器结构通过以下方式来实施,即允许在单个周期期间,通过输出多路复用器1203将(仅)寄存器R2到R4中的任一个的内容“移出”到其邻近者的寄存器文件中的一个,并且如果其邻近者通过输入多路复用器1204使得邻近者之间的移位在相同方向上(例如,所有运行通道向左移位,所有运行通道向右移位,等等),则将(仅)寄存器R2到R4中的任一个的内容替换为从相对应的寄存器“移入”的内容。虽然对于同一寄存器来说,其内容被移出并用在相同周期移入的内容替换可能是常见的,但是多路复用器装置1203、1204允许在相同周期期间同一寄存器文件内的不同移位源寄存器和移位目标寄存器。
如图12所示,注意在移位序列期间,运行通道将内容从其寄存器文件1202移出到其左、右、顶和底邻近者中的每一个。结合相同的移位序列,运行通道也将内容从其左、右、顶和底邻近者中的特定一个移位到其寄存器文件中。同样,对于所有运行通道,移出目标和移入源应该与相同的移出方向一致(例如,如果移出是右邻近者,则移入应该是从左邻近者)。
尽管在一个实施例中,每个周期每个运行通道只允许移位一个寄存器的内容,但是其他实施例可以允许一个以上寄存器的内容被移入/移出。例如,如果图12中观察到的多路复用器电路1203、1204的第二实例被结合到图12的设计中,则两个寄存器的内容可以在同一周期内移出/移入。当然,在每个周期只允许移位一个寄存器的内容的实施例中,通过对于在数学运算之间的移位消耗更多的时钟周期,可以在数学运算之间发生来自多个寄存器的移位(例如,通过在数学运算之间消耗两个移位运算,可以在数学运算之间移位两个寄存器的内容)。
如果在移位序列期间,移出少于运行通道的寄存器文件的全部内容,请注意,每个运行通道的未移出寄存器的内容保持就位(不要移位)。由此,跨移位周期,没有被移入内容替换的任何未移位内容保持在运行通道的本地。在每个运行通道中观察到的存储器单元(“M”)用于将数据从随机存取存储器空间加载/将数据存储到随机存取存储器空间,该随机存取存储器空间与运行通道阵列内的运行通道的行和/或列相关联。这里,M单元充当标准的M单元,因为它通常用于加载/存储不能从运行通道自己的寄存器空间加载/存储到运行通道自己的寄存器空间的数据。在各种实施例中,M单元的主要操作是将数据从本地寄存器写入存储器,并且从存储器读取数据并将其写入本地寄存器。
关于由硬件运行通道1201的ALU单元支持的ISA操作码,在各种实施例中,由硬件ALU支持的数学操作码包括(例如,ADD、SUB、MOV、MUL、MAD、ABS、DIV、SHL、SHR、MIN/MAX、SEL、AND、OR、XOR、NOT)。如上文刚刚所述,存储器访问指令可以由运行通道1201运行,以从其相关联的随机访问存储器提取数据/将数据存储到其相关联的随机访问存储器。额外地,硬件运行通道1201支持移位操作指令(右、左、上、下),以在二维移位寄存器结构内移位数据。如上所述,程序控制指令主要由模板处理器的标量处理器运行。
4.0实施方式实施例
需要指出的是,上述各种图像处理器架构特征不一定局限于传统意义上的图像处理,并因此可以应用于可能(或可能不)导致图像处理器被重新表征的其他应用。例如,如果上述各种图像处理器架构特征中的任何一个将用于动画的创建和/或生成和/或渲染,而不是实际相机图像的处理,则图像处理器可以被表征为图形处理单元。额外地,上述图像处理器架构特征可以应用于其他技术应用,诸如视频处理、视觉处理、图像识别和/或机器学习。以这种方式应用,图像处理器可以与更通用的处理器(例如,是或作为计算系统的CPU或CPU的一部分)集成(例如,作为其协处理器),或者可以是计算系统内的独立处理器。
上面讨论的硬件设计实施例可以在半导体芯片内实现和/或作为最终面向半导体制造工艺的电路设计的描述。在后一种情况下,这种电路描述可以采取(例如,VHDL或Verilog)寄存器传输级(register transfer level,RTL)电路描述、门级电路描述、晶体管级电路描述或掩模描述或其各种组合的形式。电路描述通常体现在计算机可读存储介质(诸如,CD-ROM或其他类型的存储技术)上。
从前面的部分可以看出,如上所述的图像处理器可以在计算机系统的硬件中实现(例如,作为处理来自手持设备的相机的数据的手持设备的片上系统(System on Chip,SOC)的一部分)。在图像处理器被实现为硬件电路的情况下,注意,由图像处理器处理的图像数据可以直接从相机接收。这里,图像处理器可以是分立相机的一部分,或者是具有集成相机的计算系统的一部分。在后者的情况下,图像数据可以直接从相机或从计算系统的系统存储器接收(例如,相机将其图像数据发送到系统存储器而不是图像处理器)。还要注意,前面部分中描述的许多特性可能适用于图形处理器单元(渲染动画)。
图13提供了计算系统的示例性描述。下面描述的计算系统的许多组件可应用于具有集成相机和相关联的图像处理器的计算系统(例如,诸如智能手机或平板电脑的手持设备)。普通技术人员将能够容易地在两者之间进行划分。此外,图13的计算系统还包括高性能计算系统的许多特征,诸如工作站或超级计算机。
如图13中所观察到的,基本计算系统可以包括中央处理单元1301(其可以包括例如多个通用处理核心1315_1至1315_N和设置在多核处理器或应用处理器上的主存储器控制器1317)、系统存储器1302、显示器1303(例如,触摸屏、平板)、本地有线点对点链接(例如USB)接口1304、各种网络I/O功能1305(诸如,以太网接口和/或蜂窝调制器子系统)、无线局域网(例如,WiFi)接口1306、无线点对点链路(例如,蓝牙)接口1307和全球定位系统接口1308、各种传感器1309_1至1309_N、一个或多个相机1310、电池1311、电源管理控制单元1312、扬声器和麦克风1313以及音频编码器/解码器1314。
应用处理器或多核处理器1350可以在其CPU 1201内包括一个或多个通用处理核心1315、一个或多个图形处理单元1316、存储器管理功能1317(例如,存储器控制器)、I/O控制功能1318和图像处理单元1319。通用处理核心1315通常运行计算系统的操作系统和应用软件。图形处理单元1316通常运行图形密集型功能,以例如生成呈现在显示器1303上的图形信息。存储器控制功能1317与系统存储器1302接口,以向系统存储器1302写入数据/从系统存储器1302读取数据。功率管理控制单元1312通常控制系统1300的功耗。
图像处理单元1319可以根据前面部分中详细描述的任何图像处理单元实施例来实施。可替换地或组合地,IPU 1319可以耦合到GPU 1316和CPU1301中的任一个或两者,作为其协处理器。额外地,在各种实施例中,GPU1316可以用上面详细描述的任何图像处理器特征来实施。图像处理单元1319或发送数据的计算系统的其他单元可以配置有收发器,该收发器实施如上详细描述的有效通信序列。
触摸屏显示器1303、通信接口1304至1307、GPS接口1308、传感器1309、相机1310和扬声器/麦克风编解码器1313、1314中的每一个都可以被视为相对于整个计算系统的各种形式的I/O(输入和/或输出),在适当的情况下,也包括集成外围设备(例如,一个或多个相机1310)。取决于实施方式,这些I/O组件中的各种可以集成在应用处理器/多核处理器1350上,或者可以位于裸芯之外或者应用处理器/多核处理器1350的封装之外。
在实施例中,一个或多个相机1310包括深度相机,该深度相机能够测量相机和其视野中的物体之间的深度。在应用处理器或其他处理器的通用CPU核心(或具有运行程序代码的指令运行流水线的其他功能块)上运行的应用软件、操作系统软件、设备驱动器软件和/或固件可以执行上述任何功能。
本发明的实施例可以包括如上所述的各种过程。这些过程可以体现在机器可运行指令中。这些指令可用于使通用或专用处理器执行某些过程。可替换地,这些过程可以由包含用于执行过程的硬连线和/或可编程逻辑的特定硬件组件来执行,或者由可编程计算机组件和定制硬件组件的任意组合来执行。
本发明的元件也可以被提供为用于存储机器可运行指令的机器可读介质。机器可读介质可以包括但不限于软盘、光盘、CD-ROM、和磁光盘、闪存、ROM、RAM、EPROM、EEPROM、磁卡或光卡、传播介质或其他适合存储电子指令的介质/机器可读介质。例如,本发明可以作为计算机程序下载,该计算机程序可以经由通信链路(例如调制解调器或网络连接)通过实施在载波或其他传播介质中的数据信号从远程计算机(例如服务器)传送到请求计算机(例如客户端)。
在前述说明书中,已经参照本发明的特定示例性实施例描述了本发明。然而,很明显,在不脱离所附权利要求中阐述的本发明的更广泛的精神和范围的情况下,可以对其进行各种修改和变化。因此,说明书和附图被认为是说明性的,而不是限制性的。
在下文中,描述了一些示例实施例。
示例1:一种处理器,包括:
网络;
耦合到网络的多个处理核心;
耦合到网络的发送器电路,发送器电路将由处理核心中的一个生成的输出数据发送到网络中,发送器电路包括控制逻辑电路,以使发送器电路在发送器电路的输出数据的较早的第一分组的传输完成之前发送对输出数据的第二分组的传输的请求。
示例2:示例1的处理器,其中:
如果第二分组将被发送到相同的目的地,则请求将被发送到第一分组正被发送到的相同的目的地;或者,
如果第二分组将被发送到不同的目的地,则请求将被发送到不同的目的地。
示例3:示例1或2的处理器,其中控制逻辑电路:
如果第一和第二分组被发送到相同的目的地,则对第一和第二分组使用相同的信用计数器;或者,
如果第一和第二分组被发送到不同的目的地,则对第一分组使用第一信用计数器,以及对第二分组使用第二信用计数器。
示例4:至少一个前述示例的处理器,其中控制逻辑包括多个信用计数器,以控制多个分组到不同目的地的并发传输。
示例5:示例2至4中的至少一个的处理器,其中,信用计数器中的每一个不被永久地分配来控制到任何特定目的地的传输。
示例6:至少一个前述示例的处理器,其中,处理器是图像处理器,并且第一和第二分组包括图像行数据。
示例7:至少一个前述示例的处理器,其中,第一和第二分组的数据单元在由发送器发送之后并且在数据单元由处理核心中的另一个或多个处理核心处理之前,将由处理器的存储器电路排列。
示例8:示例6或7的处理器,其中,图像处理器包括耦合到二维移位寄存器阵列的运行通道的阵列。
示例9:示例6至8中至少一个的处理器,其中,图像处理器包括用于处理图像数据的模板的多个模板处理器。
示例10:示例9的处理器,被配置为在重叠模板上操作。
示例11:至少一个前述示例的处理器,包括或耦合到具有移位寄存器结构的数据计算单元,所述移位寄存器结构具有比运行通道阵列更宽的维度,使得在运行通道阵列之外存在寄存器的“晕圈”。
示例12:一种计算系统,包括:
多个通用处理核心;
系统存储器;
耦合在系统存储器和通用处理核心之间的存储器控制器;
图像处理器,包括以下a)、b)和c):
a)网络;
b)耦合到网络的多个图像处理核心;
c)耦合到网络的发送器电路,发送器电路将由图像处理核心中的一个生成的输出数据发送到网络中,发送器电路包括控制逻辑电路,以使发送器电路在发送器电路的输出数据的较早的第一分组的传输完成之前发送对输出数据的第二分组的传输的请求。
示例13:示例12的计算系统,其中:
如果第二分组将被发送到相同的目的地,则请求将被发送到第一分组正被发送到的相同的目的地;或者,
如果第二分组将被发送到不同的目的地,则请求将被发送到不同的目的地。
示例14:示例12或13的计算系统,其中控制逻辑电路:
如果第一和第二分组被发送到相同的目的地,则对第一和第二分组使用相同的信用计数器;或者,
如果第一和第二分组被发送到不同的目的地,则对第一分组使用第一信用计数器,以及对第二分组使用第二信用计数器。
示例15:示例12至14中至少一个的计算系统,其中控制逻辑包括多个信用计数器,以控制多个分组到不同目的地的并发传输。
示例16:示例12至15中至少一个的计算系统,其中,信用计数器中的每一个不被永久地分配来控制到任何特定目的地的传输。
示例17:示例12至16中至少一个的计算系统,其中,第一和第二分组包括图像行数据。
示例18:示例12至17中至少一个的计算系统,其中,第一和第二分组的数据单元在由发送器发送之后并且在数据单元由另一个或多个处理核心处理之前,将由图像处理器的存储器电路排列。
示例19:示例12至18中至少一个的计算系统,其中,图像处理器包括耦合到二维移位寄存器阵列的运行通道的阵列。
示例20:示例12至19中至少一个的计算系统,其中,图像处理器包括用于处理图像数据的模板的多个模板处理器。
示例21:示例20的计算系统,被配置为在重叠模板上操作。
示例22:示例12至21中的至少一个的计算系统,包括或耦合到具有移位寄存器结构的数据计算单元,所述移位寄存器结构具有比运行通道阵列更宽的维度,使得在运行通道阵列之外存在寄存器的“晕圈”。
示例23:一种由处理器执行的方法,包括:
在处理器的处理核心上处理程序代码,以生成处理核心的输出数据;
由耦合到处理器内的网络的发送器电路在发送器电路的较早的第一分组的传输完成之前发送对第二分组的传输的请求,第二分组包括由处理核心生成的第二输出数据,第一分组包括由处理核心生成的第一输出数据;
用耦合到网络的处理器的一个或多个其他处理核心处理第一输出数据和第二输出数据。
示例24:示例23的方法,还包括在由发送器电路传输第一输出数据之后和由一个或多个处理核心处理第一输出数据之前,对第一输出数据进行排列。
示例25:示例23或24的方法,其中,排列包括通过耦合到网络的缓冲器排列图像行数据。
示例26:示例23至25中至少一个的方法,还包括发送器电路参与第二分组的传输,同时参与第一分组的传输,其中,第二分组被发送到与第一分组不同的目的地。
示例27:示例23至26中的至少一个的方法,还包括如果第一和第二分组被发送到相同的目的地,则使用相同的信用计数器来控制来自发送器的第一和第二分组的传输。
示例28:示例23至27中的至少一个的方法,还包括使用相同的信用计数器来控制来自发送器的第三分组的传输,其中在除了发生第一分组和第二分组的传输之外的时间段期间,将第三分组发送到与第一分组和第二分组不同的目的地。
示例29:示例23至28中至少一个的方法,其中,图像处理器包括耦合到二维移位寄存器阵列的运行通道的阵列。
示例30:示例23至29中至少一个的方法,其中,图像处理器包括用于处理图像数据的模板的多个模板处理器。
示例31:示例30的方法,被配置为在重叠模板上操作。
示例32:示例23至31中的至少一个的方法,包括或耦合到具有移位寄存器结构的数据计算单元,所述移位寄存器结构具有比运行通道阵列更宽的维度,使得在运行通道阵列之外存在寄存器的“晕圈”。
Claims (21)
1.一种处理器,包括:
网络,实现信用计数器协议,所述信用计数器协议要求每个传送器在所述传送器传送属于数据分组的数据单元之前,从接收器接收对要发送的数据分组的确认;
耦合到网络的一个或多个处理核心;以及
将一个或多个处理核心的第一处理核心耦合到网络的发送器电路,所述发送器电路将由第一处理核心输出的数据单元发送到网络中,所述发送器电路包括控制逻辑电路,以使所述发送器电路:
发起发送第一数据分组到处理器的第一接收器,
在第一数据分组的最后的数据单元已经被发送到第一接收器之前,提供对要被发送到所述处理器的不同的第二接收器的不同的第二数据分组的请求,
在第一数据分组的最后的数据单元已经被发送到第一接收器之前,接收对要被发送的不同的第二数据分组的预先发布的确认,
响应于接收到对要发送的不同的第二数据分组的预先发布的确认,增加第二接收器的不同的第二接收器特定信用计数器,
接收第一数据分组的最后的数据单元已经被第一接收器消耗的指示,
响应于接收到属于第一数据分组的最后的数据单元已经被第一接收器消耗的指示,增加第一接收器特定信用计数器,以及
使用由于接收到对要发送的不同的第二数据分组的预先发布的确认而增加的第二接收器特定信用计数器的信用,将属于不同的第二数据分组的第一数据单元传送到不同的第二接收器。
2.根据权利要求1所述的处理器,其中所述控制逻辑电路包括多个信用计数器,并且其中所述控制逻辑电路被配置为在相应的数据分组被发送之后将每个信用计数器重新分配给不同的相应接收器。
3.根据权利要求1所述的处理器,其中,第二数据分组的第二接收器是与第一数据分组的第一接收器不同的处理器的组件。
4.根据权利要求1所述的处理器,其中,所述处理器还包括行缓冲器,并且其中第一数据分组的第一接收器是行缓冲器。
5.根据权利要求1所述的处理器,其中,接收对第二数据分组的预先发布的事务确认包括在传送第一数据分组的任何数据单元之前接收对第二数据分组的预先发布的确认。
6.根据权利要求1所述的处理器,其中,所述控制逻辑电路被配置为每当所述处理器的第一接收器是与所述处理器的第二接收器不同的组件时,由于接收到预先发布的确认,增加第二接收器特定信用计数器的信用。
7.根据权利要求6所述的处理器,其中,所述控制逻辑电路被配置为分别使用属于第一数据分组的数据单元的第一接收器特定信用计数器和属于第二数据分组的数据单元的第二接收器特定信用计数器,向所述处理器的第一接收器和所述处理器的第二接收器传送交织的数据单元。
8.一种处理器,包括:
网络,实现信用计数器协议,所述信用计数器协议要求每个传送器在所述传送器传送属于数据分组的数据单元之前,从接收器接收对要发送的数据分组的确认;
耦合到网络的一个或处理核心;以及
将一个或多个处理核心的第一处理核心耦合到网络的发送器电路,所述发送器电路被配置为将由第一处理核心输出的数据单元发送到网络中,所述发送器电路还包括用于以下的部件:
发起发送第一数据分组到处理器的第一接收器,
在第一数据分组的最后的数据单元已经被发送到第一接收器之前,
提供对要被发送到所述处理器的不同的第二接收器的不同的第二数据分组的请求,
在第一数据分组的最后的数据单元已经被发送到第一接收器之前,
接收对要被发送的不同的第二数据分组的预先发布的确认,
响应于接收到对要发送的不同的第二数据分组的预先发布的确认,
增加第二接收器的不同的第二接收器特定信用计数器,
接收第一数据分组的最后的数据单元已经被第一接收器消耗的指示,响应于接收到属于第一数据分组的最后的数据单元已经被第一接收器消耗的指示,增加第一数据分组的第一接收器的第一接收器特定信用计数器,以及
使用由于接收到对要发送的不同的第二数据分组的预先发布的确认而增加的第二接收器特定信用计数器的信用,将属于不同的第二数据分组的第一数据单元传送到不同的第二接收器。
9.根据权利要求8所述的处理器,其中所述处理器还包括多个信用计数器,并且其中所述发送器电路还包括用于在相应的数据分组被发送之后将每个信用计数器重新分配给不同的相应接收器的部件。
10.根据权利要求8所述的处理器,其中,所述处理器的第二接收器是与所述处理器的第一接收器不同的处理器的组件。
11.根据权利要求8所述的处理器,其中,所述处理器还包括行缓冲器,并且其中第一数据分组的第一接收器是行缓冲器。
12.根据权利要求8所述的处理器,其中,接收对第二数据分组的预先发布的事务确认包括在传送第一数据分组的任何数据单元之前接收对第二数据分组的预先发布的确认。
13.根据权利要求8所述的处理器,其中,所述发送器电路还包括用于每当所述处理器的第一接收器是与所述处理器的第二接收器不同的组件时,由于接收到预先发布的确认,增加第二接收器特定信用计数器的信用的部件。
14.根据权利要求8所述的处理器,其中,所述发送器电路还包括用于分别使用属于第一数据分组的数据单元的第一接收器特定信用计数器和属于第二数据分组的数据单元的第二接收器特定信用计数器,向所述处理器的第一接收器和所述处理器的第二接收器传送交织的数据单元的部件。
15.一种由处理器执行的方法,所述处理器具有一个或多个处理核心以及网络,所述网络实现信用计数器协议,所述信用计数器协议要求每个传送器在所述传送器传送属于数据分组的数据单元之前,从接收器接收对要发送的数据分组的确认,包括:
由所述一个或多个处理核心中的第一处理核心处理程序代码,以生成要在第一数据分组和不同的第二数据分组中传送的输出数据;
由将第一处理核心耦合到网络的发送器电路发起发送第一数据分组到处理器的第一接收器,
由所述发送器电路在第一数据分组的最后的数据单元已经被发送到第一接收器之前,提供对要被发送到所述处理器的不同的第二接收器的不同的第二数据分组的请求,
由所述发送器电路在第一数据分组的最后的数据单元已经被发送到第一接收器之前,接收对要被发送的不同的第二数据分组的预先发布的确认,
响应于接收到对要发送的不同的第二数据分组的预先发布的确认,增加第二接收器的不同的第二接收器特定信用计数器,
由所述发送器电路接收第一数据分组的最后的数据单元已经被第一接收器消耗的指示,
响应于接收到属于第一数据分组的最后的数据单元已经被第一接收器消耗的指示,增加第一接收器特定信用计数器,以及
使用由于接收到对要发送的第二数据分组的预先发布的确认而增加的第二接收器特定信用计数器的信用,将属于第二数据分组的第一数据单元传送到不同的第二接收器。
16.根据权利要求15所述的方法,其中所述发送器电路包括多个信用计数器,并且还包括在相应的数据分组被发送之后将每个信用计数器重新分配给不同的相应接收器。
17.根据权利要求15所述的方法,其中,所述处理器的第二接收器是与所述处理器的第一接收器不同的处理器的组件。
18.根据权利要求15所述的方法,其中,所述处理器还包括行缓冲器,并且其中第一接收器是行缓冲器。
19.根据权利要求15所述的方法,其中,接收对要发送的第二数据分组的预先发布的确认包括在传送要发送的第一数据分组的任何数据单元之前接收对要发送的第二数据分组的预先发布的确认。
20.根据权利要求15所述的方法,还包括每当所述处理器的第一接收器是与所述处理器的第二接收器不同的组件时,由于接收到预先发布的确认,增加第二接收器特定信用计数器的信用。
21.根据权利要求15所述的方法,还包括分别使用属于第一数据分组的数据单元的第一接收器特定信用计数器和属于第二数据分组的数据单元的第二接收器特定信用计数器,向第一接收器和第二接收器传送交织的数据单元。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/595,242 US10872393B2 (en) | 2017-05-15 | 2017-05-15 | Image processor with high throughput internal communication protocol |
US15/595,242 | 2017-05-15 | ||
PCT/US2018/012521 WO2018212793A1 (en) | 2017-05-15 | 2018-01-05 | Image processor with high throughput internal communication protocol |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110574068A CN110574068A (zh) | 2019-12-13 |
CN110574068B true CN110574068B (zh) | 2023-06-27 |
Family
ID=61094589
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880028900.3A Active CN110574068B (zh) | 2017-05-15 | 2018-01-05 | 具有高吞吐量内部通信协议的图像处理器 |
Country Status (7)
Country | Link |
---|---|
US (1) | US10872393B2 (zh) |
EP (1) | EP3625755A1 (zh) |
JP (1) | JP7073403B2 (zh) |
KR (1) | KR102284078B1 (zh) |
CN (1) | CN110574068B (zh) |
TW (1) | TWI718359B (zh) |
WO (1) | WO2018212793A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10489878B2 (en) * | 2017-05-15 | 2019-11-26 | Google Llc | Configurable and programmable image processor unit |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7793074B1 (en) * | 2006-04-14 | 2010-09-07 | Tilera Corporation | Directing data in a parallel processing environment |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11203192A (ja) * | 1998-01-16 | 1999-07-30 | Sony Corp | 並列プロセッサおよび演算処理方法 |
US7453878B1 (en) * | 2000-07-21 | 2008-11-18 | Silicon Graphics, Inc. | System and method for ordering of data transferred over multiple channels |
US7966661B2 (en) * | 2004-04-29 | 2011-06-21 | Microsoft Corporation | Network amplification attack mitigation |
US7478811B2 (en) | 2004-08-02 | 2009-01-20 | Garrett Johnson | Wave driven gaming apparatus |
WO2008005629A2 (en) * | 2006-05-26 | 2008-01-10 | Riverbed Technology, Inc. | Throttling of predictive acks in an accelerated network communication system |
US8478834B2 (en) * | 2007-07-12 | 2013-07-02 | International Business Machines Corporation | Low latency, high bandwidth data communications between compute nodes in a parallel computer |
JP5316131B2 (ja) | 2009-03-18 | 2013-10-16 | 株式会社リコー | データ転送システム及びデータ転送方法 |
JP2010218415A (ja) | 2009-03-18 | 2010-09-30 | Olympus Corp | ハードウエアスイッチ及び分散処理システム |
US8700877B2 (en) | 2009-09-25 | 2014-04-15 | Nvidia Corporation | Address mapping for a parallel thread processor |
US20110249744A1 (en) * | 2010-04-12 | 2011-10-13 | Neil Bailey | Method and System for Video Processing Utilizing N Scalar Cores and a Single Vector Core |
US9021237B2 (en) * | 2011-12-20 | 2015-04-28 | International Business Machines Corporation | Low latency variable transfer network communicating variable written to source processing core variable register allocated to destination thread to destination processing core variable register allocated to source thread |
JP5966561B2 (ja) * | 2012-04-20 | 2016-08-10 | 富士通株式会社 | 通信装置および通信方法 |
US9489322B2 (en) | 2013-09-03 | 2016-11-08 | Intel Corporation | Reducing latency of unified memory transactions |
US20160188519A1 (en) * | 2014-12-27 | 2016-06-30 | Intel Corporation | Method, apparatus, system for embedded stream lanes in a high-performance interconnect |
US9965824B2 (en) | 2015-04-23 | 2018-05-08 | Google Llc | Architecture for high performance, power efficient, programmable image processing |
US9792044B2 (en) * | 2016-02-12 | 2017-10-17 | Oracle International Corporation | Decompression history buffer read/write pipelines |
US10437616B2 (en) * | 2016-12-31 | 2019-10-08 | Intel Corporation | Method, apparatus, system for optimized work submission to an accelerator work queue |
US10764209B2 (en) * | 2017-03-28 | 2020-09-01 | Mellanox Technologies Tlv Ltd. | Providing a snapshot of buffer content in a network element using egress mirroring |
-
2017
- 2017-05-15 US US15/595,242 patent/US10872393B2/en active Active
-
2018
- 2018-01-05 JP JP2019559364A patent/JP7073403B2/ja active Active
- 2018-01-05 WO PCT/US2018/012521 patent/WO2018212793A1/en unknown
- 2018-01-05 CN CN201880028900.3A patent/CN110574068B/zh active Active
- 2018-01-05 EP EP18702376.7A patent/EP3625755A1/en active Pending
- 2018-01-05 KR KR1020197031167A patent/KR102284078B1/ko active IP Right Grant
- 2018-02-07 TW TW107104241A patent/TWI718359B/zh active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7793074B1 (en) * | 2006-04-14 | 2010-09-07 | Tilera Corporation | Directing data in a parallel processing environment |
Also Published As
Publication number | Publication date |
---|---|
CN110574068A (zh) | 2019-12-13 |
JP2020519996A (ja) | 2020-07-02 |
EP3625755A1 (en) | 2020-03-25 |
WO2018212793A1 (en) | 2018-11-22 |
US20180330465A1 (en) | 2018-11-15 |
TW201901609A (zh) | 2019-01-01 |
US10872393B2 (en) | 2020-12-22 |
KR102284078B1 (ko) | 2021-07-30 |
TWI718359B (zh) | 2021-02-11 |
KR20190133028A (ko) | 2019-11-29 |
JP7073403B2 (ja) | 2022-05-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110300989B (zh) | 可配置并且可编程的图像处理器单元 | |
JP6571790B2 (ja) | 高性能で、電力効率の良い、プログラマブルな画像処理のためのアーキテクチャ | |
CN107408041B (zh) | 用于图像处理器的能量高效的处理器核心架构 | |
CN107430760B (zh) | 用于图像处理器的二维移位阵列 | |
JP2019522291A (ja) | プログラマブル二次元画像プロセッサ上の畳み込みニューラルネットワーク | |
JP2019507922A (ja) | 画像プロセッサのためのコンパイラ管理メモリ | |
EP3622399B1 (en) | Determination of per line buffer unit memory allocation | |
CN110574067B (zh) | 图像处理器i/o单元 | |
KR102090885B1 (ko) | 배선 복잡성이 감소된 시프트 레지스터 | |
CN110300944B (zh) | 具有可配置数目的活动核心和支持内部网络的图像处理器 | |
CN110574068B (zh) | 具有高吞吐量内部通信协议的图像处理器 | |
CN110192184B (zh) | 在多核心图像处理器上配置应用软件 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |