CN110192184A - 在多核心图像处理器上配置应用软件 - Google Patents
在多核心图像处理器上配置应用软件 Download PDFInfo
- Publication number
- CN110192184A CN110192184A CN201880007507.6A CN201880007507A CN110192184A CN 110192184 A CN110192184 A CN 110192184A CN 201880007507 A CN201880007507 A CN 201880007507A CN 110192184 A CN110192184 A CN 110192184A
- Authority
- CN
- China
- Prior art keywords
- kernel
- core
- processing core
- data
- configuration
- 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
Classifications
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/505—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Image Processing (AREA)
- Multi Processors (AREA)
Abstract
描述了一种方法。该方法包括计算针对将在图像处理器上执行的、具有多个内核的程序的内核到内核连接的数据传输量度。所述图像处理器包括多个处理核心和连接所述多个处理核心的网络。所述内核到内核连接中的每一个包括要在所述处理核心中的一个处理核心上执行的生产内核以及要在所述处理核心中的另一个处理核心上执行的消费内核。所述消费内核用于对由所述生产内核生成的数据进行操作。所述方法还包括基于所计算的数据传输量度来将多个内核中的内核指派给所述处理核心中的相应处理核心。
Description
技术领域
本发明的领域总体上涉及计算科学,更具体地涉及在多核心图像处理器上配置应用软件。
背景技术
图像处理通常涉及处理组织成阵列的像素值。这里,以空间方式组织的二维阵列捕获图像的二维性质(附加维度可以包括时间(例如,二维图像的序列)和数据类型(例如,颜色))。在通常情况下,阵列排列的像素值是由相机提供,该相机生成了静止图像或帧的序列的相机以捕获运动的图像。传统的图像处理器通常落在两个极端的任一侧上。
第一个极端执行处理任务,作为在通用处理器或类通用处理器(例如,具有向量指令增强的通用处理器)上执行的软件程序。虽然第一个极端通常提供了高度多功能的应用软件开发平台,但是它使用了更细粒度的数据结构结合相关联的开销(例如,指令获取和解码、处置片上和片外数据、前瞻性执行)最终导致在执行程序代码期间,每数据部件消耗的能量更大。
第二个相反的极端将固定功能硬连线电路应用于更大的数据部件。使用直接应用于定制设计电路的较大(与更细粒度相对)数据部件大大降低了每数据部件的功耗。然而,使用定制设计的固定功能电路通常导致了处理器能够执行的有限任务集合。因此,第二个极端中缺乏(与第一个极端相关联的)广泛多功能的编程环境。
提供了高度多功能的应用软件开发机会结合提高每数据部件的功率效率的技术平台仍然是理想的且缺失的方案。
发明内容
描述了一种方法。该方法包括:针对将在图像处理器上执行的、具有多个内核的程序的内核到内核连接来计算数据传输量度,。所述图像处理器包括多个处理核心和连接所述多个处理核心的网络。所述内核到内核连接中的每一个包括要在所述处理核心中的一个处理核心上执行的生产内核以及要在所述处理核心中的另一个处理核心上执行的消费内核。所述消费内核用于对由所述生产内核生成的数据进行操作。所述方法还包括基于所计算的数据传输量度来将所述多个内核中的内核指派给所述处理核心中的相应处理核心。
因此,能够在改进的计算和能量效率的情况下使用更多功能的应用处理。
内核到内核连接可以是用于数据在内核之间传递的途径,并且数据传输量度可以描述例如内核之间的速度、频率、接口的数目(例如,跳数),和/或在内核之间传输的数据的类型。
可选地,所述图像处理器还包括多个缓冲器部件,所述缓冲器部件用于存储和转发内核到内核连接的数据。
可选地,所述缓冲器部件还包括线缓冲器部件,所述线缓冲器部件用于存储和转发内核到内核连接的图像的线组。
可选地,计算所述数据传输量度进一步包括:基于所述网络内在生产内核与消费内核之间的节点跳的数目来向所述内核到内核连接指派权重。
可选地,计算所述数据传输量度进一步包括:基于通过所述网络在生产内核与消费内核之间传输的图像的大小来向所述内核到内核连接指派权重。
可选地,将内核指派给所述处理核心中的相应处理核心进一步包括:计算所述程序的不同配置的权重,所述程序的每个配置包括对所述处理核心的内核指派的不同集合,其中,特定配置的权重的计算是基于针对所述特定配置的特定内核到内核连接所计算的所述数据传输量度的子集;以及,选择具有最佳权重的配置中的一个配置。
根据另一方面,提供了一种包含程序代码的非暂时性机器可读存储介质,所述程序代码在由计算系统处理时致使所述计算系统执行方法,所述方法包括:针对将在图像处理器上执行的、包括多个内核的程序的内核到内核连接来计算数据传输量度,所述图像处理器包括多个处理核心和连接所述多个处理核心的网络,所述内核到内核连接中的每一个包括将在所述处理核心中的一个处理核心上执行的生产内核以及将在所述处理核心中的另一个处理核心上执行的消费内核,所述消费内核用于对由所述生产内核生成的数据进行操作;以及,基于所计算的数据传输量度,将所述多个内核中的内核指派给所述处理核心中的相应处理核心。
可选地,图像处理器包括多个缓冲器部件,所述缓冲器部件用于存储和转发内核到内核连接的数据。
可选地,缓冲器部件还包括线缓冲器部件,所述线缓冲器部件用于存储和转发内核到内核连接的图像的线组。
可选地,计算所述数据传输量度进一步包括:基于所述网络内在生产内核与消费内核之间的节点跳的数目来向所述内核到内核连接指派权重。
可选地,计算所述数据传输量度进一步包括:基于通过所述网络在生产内核与消费内核之间传输的图像的大小来向所述内核到内核连接指派权重。
可选地,将所述内核指派给所述处理核心中的相应处理核心进一步包括:计算所述程序的不同配置的权重,所述程序的每个配置包括对所述处理核心的内核指派的不同集合,其中,特定配置的权重的计算是基于针对所述特定配置的特定内核到内核连接所计算的所述数据传输量度的子集;以及,选择具有最佳权重的配置中的一个配置。
可选地,所述处理核心包括执行通道阵列和二维移位寄存器阵列。
根据另一方面,提供了一种计算系统,包括:多个通用处理核心;系统存储器;存储器控制器,所述存储器控制器位于所述系统存储器和所述多个通用处理核心之间;非暂时性机器可读存储介质,所述非暂时性机器可读存储介质包含程序代码,所述程序代码在由计算系统处理时致使所述计算系统执行方法,所述方法包括:针对将在图像处理器上执行的、包括多个内核的程序的内核到内核连接来计算数据传输量度,所述图像处理器包括多个处理核心和连接所述多个处理核心的网络,所述内核到内核连接中的每一个包括要在所述处理核心中的一个处理核心上执行的生产内核以及要在所述处理核心中的另一个处理核心上执行的消费内核,所述消费内核用于对由所述生产内核生成的数据进行操作;以及,基于所计算的数据传输量度,将所述多个内核中的内核指派给所述处理核心中的相应处理核心。
可选地,图像处理器包括多个缓冲器部件,所述缓冲器部件用于存储和转发所述内核到内核连接的数据。
可选地,所述缓冲器部件还包括线缓冲器部件,所述线缓冲器部件用于存储和转发内核到内核连接的图像的线组。
可选地,计算所述数据传输量度进一步包括:基于所述网络内在生产内核与消费内核之间的节点跳的数目来向所述内核到内核连接指派权重。
可选地,计算所述数据传输量度进一步包括:基于通过所述网络在生产内核与消费内核之间传输的图像的大小来向所述内核到内核连接指派权重。
可选地,将内核指派给所述处理核心中的相应处理核心进一步包括:计算所述程序的不同配置的权重,所述程序的每个配置包括对所述处理核心的内核指派的不同集合,其中,特定配置的权重的计算是基于针对所述特定配置的特定内核到内核连接所计算的所述数据传输量度的子集;以及,选择具有最佳权重的配置中的一个配置。
可选地,所述处理核心包括执行通道阵列和二维移位寄存器阵列。
应当注意,上述任何特征可以与本发明的任何特定方面或实施例一起使用。
附图说明
以下描述和附图被用于图示本发明的实施例。在附图中:
图1示出了模板处理器架构的高级视图;
图2示出了图像处理器架构的更详细视图;
图3示出了图像处理器架构的更加详细视图;
图4示出了能够由图像处理器执行的应用软件程序;
图5和图6示出了用于确定供图4的应用软件程序在图像处理器上执行的配置的实施例;
图7示出了用于确定供应用软件程序在图像处理器上执行的配置的方法。
图8a、8b、8c、8d和8e描绘了将图像数据解析成线组,将线组解析成片(sheet),以及利用重叠模板在片上执行的操作;
图9a示出了模板处理器的实施例。
图9b示出了模板处理器的指令字的实施例。
图10示出了模板处理器内的数据计算部件的实施例。
图11a、l1b、11c、l1d、11e、11f、11g、11h、11i、11j和11k描绘了使用二维移位阵列和执行通道阵列利用重叠模板来确定一对相邻输出像素值的示例;
图12示出了用于整合的执行通道阵列和二维移位阵列的部件单元的实施例;
图13示出了示例性计算系统。
具体实施方式
1.0独特的图像处理器架构
如本领域所公知的,用于执行程序代码的基本电路结构包括执行级和寄存器空间。执行级包含用于执行指令的执行部件。用于要执行的指令的输入操作数从寄存器空间提供给执行级。从指令的执行级的执行生成的结果被写入回寄存器空间。
在传统处理器上执行软件线程需要穿过执行级顺序执行一系列的指令。最常见的是,操作在从单个输入操作数集合生成单个结果的意义上是“标量”的。然而,在“向量”处理器的情况下,由执行级执行指令将从输入操作数的向量生成结果的向量。
图1示出了独特图像处理器架构100的高级视图,其包括耦合到二维移位寄存器阵列102的执行通道阵列101。这里,执行通道阵列中的每个执行通道能够被看作为离散执行级,其包含执行由处理器100支持的指令集合所需的执行部件。在各个实施例中,每个执行通道接收相同指令以在相同机器周期中执行,使得处理器作为二维单指令多数据(SIMD)处理器进行操作。
每个执行通道在二维移位寄存器阵列102内的对应的位置中具有其自己的专用寄存器空间。例如,角部执行通道103在角部移位寄存器位置104中具有其自己的专用寄存器空间,角部执行通道105在角部移位寄存器位置106中具有其自己的专用寄存器空间等。
附加地,移位寄存器阵列102能够对其内容移位,使得每个执行通道能够从其自己的寄存器空间对在先前的机器周期期间驻留在另一个执行通道的寄存器空间中的值直接操作。例如,+1水平移位致使每个执行通道的寄存器空间接收来自其最左边的相邻者的寄存器空间的值。由于能够沿水平轴在左方向和右方向二者上对值进行移位,并且沿垂直轴在上方向和下方向上对值进行移位,所以处理器能够有效率地处理图像数据的模板(stencil)。
这里,如本领域所知,模板是图像表面区的用作基本数据部件的切片(slice)。例如,输出图像中的特定像素位置的新值可以被计算为输入图像的、特定像素位置在其内居中的区中的像素值的平均值。例如,如果模板具有3像素乘3像素的尺寸,则特定像素位置可以与3×3像素阵列的中间像素相对应,并且平均值可以在3×3像素阵列内的所有九个像素上计算。
根据图1的处理器100的各个操作实施例,执行通道阵列101中的每个执行通道负责计算输出图像中的特定位置的像素值。因此,继续上面提到的3×3模板取平均示例,在移位寄存器内输入像素数据的初始加载和八个移位操作的协调移位序列之后,执行通道阵列中的每个执行通道将计算对应像素位置的平均值所需的所有九个像素值接收到其本地寄存器空间中。也就是,处理器能够同时处理以例如相邻输出图像像素位置为中心的多个重叠模板。因为图1的处理器架构特别擅长在图像模板上进行处理,所以它也可以称为模板处理器。
图2示出了用于具有多个模板处理器202_1至202_N的图像处理器的架构200的实施例。如图2中所示的,架构200包括多个线缓冲器部件201_1至201_M,所述多个线缓冲器部件201_1至201_M通过网络204(例如,片上网络(NOC),其包括片上交换网络、片上环形网、或其他类型的网络)互连到多个模板处理器部件202_1到202_N和对应的片生成器部件203_1到203_N。在一个实施例中,任何线缓冲器部件201_1至201_M可以通过网络204连接到任何片生成器203_1至203_N和对应的模板处理器202_1至201_N。
程序代码被编译并被加载到对应的模板处理器202上,以执行先前由软件开发者定义的图像处理操作(程序代码例如根据设计和实施方式还可以被加载到模板处理器的相关联的片生成器203上)。这样,每个模板处理器202_1到202_N可以更一般地被表征为处理核心、处理器核心、核心等,并且整个图像处理器可以被表征为多核心图像处理器。在至少一些实例中,可以通过将用于第一流水线(pipeline)级的第一内核程序加载到第一模板处理器202_1中,将用于第二流水线级的第二内核程序加载到第二模板处理器202_2等来实现图像处理流水线,其中第一内核执行流水线的第一级次的功能,第二个内核执行流水线的第二级次的功能等,并且附加的控制流方法被安装以将输出图像数据从流水线的一个级次传递到流水线的下一级次。
在其他配置中,图像处理器可以被实现为具有操作相同的内核程序代码的两个或更多个模板处理器202_1、202_2的并行机器。例如,可以通过跨多个模板处理器散布帧来处理高密度和高数据速率的图像数据流,这些模板处理器中的每一个执行相同的功能。
在其他配置中,基本上内核的任何有向无环图(DAG)可以通过下述方式来加载到硬件处理器上:利用相应的模板处理器的相应的程序代码内核来配置相应的模板处理器以及将适当的控制流挂钩(hook)配置到硬件中以将输出图像从DAG设计中的一个内核引导到下一个内核的输入。
作为一般流程,图像数据的帧由宏I/O部件205接收,并且逐帧地传递到线缓冲器部件201中的一个或多个。特定线缓冲器部件将其图像数据的帧解析成较小的图像数据区域——称为“线组”,并且然后将线组通过网络204传递到特定的片生成器。完整的或“完全的”单独线组可以例如由帧的多个毗连完整行或列的数据组成(为了简单起见,本说明书将主要指代毗连的行)。片生成器进一步将图像数据的线组解析成较小的图像数据区域——称为“片”,并将该片呈现给其对应的模板处理器。
在图像处理流水线或DAG流具有单个输入的情况下,通常,输入帧被引导到相同的线缓冲器部件201_1,该线缓冲器部件201_1将图像数据解析成线组并将线组引导到片生成器203_1,该片生成器203_1的相对应模板处理器202_1正在执行在流水线/DAG中的第一内核的代码。在由模板处理器202_1对其处理的线组完成操作时,片生成器203_1将输出线组发送到“下游”线缓冲器部件201_2(在一些用例下,输出线组可以被发送回到先前已经发送输入线组的相同的线缓冲器部件201_1)。
然后,一个或多个“消费者”内核从下游线缓冲器部件201_2接收由第一模板处理器202_1生成的图像数据,该一个或多个“消费者”内核表示在其本身相应的其他片生成器和模板处理器(例如,片生成器203_2和模板处理器202_2)上执行的流水线/DAG中的下一级次/操作。以这种方式,在第一模板处理器上操作的“生产者”内核将其输出数据转发到在第二模板处理器上操作的“消费者”内核,在第二模板处理器中,消费者内核与整个流水线或DAG的设计一致在生产者内核之后执行下一个任务集合。
如上面关于图1所提到的,每个模板处理器202_1至202_N被设计为同时对图像数据的多个重叠的模板进行操作。模板处理器的多个重叠模板和内部硬件处理能力有效地确定了片的大小。同样,如上所述,在模板处理器202_1至202_N中的任何模板处理器内,执行通道的阵列以一致方式操作以同时处理由多个重叠模板覆盖的图像数据表面区。
另外,在各个实施例中,图像数据的片由模板处理器202的相对应的(例如,本地)片生成器203加载到该模板处理器的二维移位寄存器阵列中。使用片和二维移位寄存器阵列结构被认为有效地通过下述方式来改善功耗:将大量数据移动到大量寄存器空间中,其例如作为单个加载操作,紧随其后是由执行通道阵列直接对数据执行的处理任务。附加地,使用执行通道阵列和对应的寄存器阵列提供易于可编程/可配置的不同模板大小。在以下的3.0节中进一步提供关于线缓冲器部件(片生成器和模板处理器)的操作的更多细节。
图3示出了图2的图像处理器的特定硬件实现的更详细的实施例。如图3中所示,在环形拓扑304中实现图2的网络204,该环形拓扑304线缓冲器部件301和片生成器/模板处理器核心302之间的每个交叉点处具有4×4网络节点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上执行的多个内核组成的任何软件应用,能够将任何内核加载到任何核心上,并且能够将任何线缓冲器部件配置为作为向任何核心的输入数据的源(source)/作为从任何核心的输出数据的宿(sink)。
2.0应用软件对图像处理器的配置
图4示出了可以加载到图3的图像处理器上的示例性应用软件程序或其部分。如图4所示,可以期望程序代码处理输入图像数据401的一个或多个帧,以产生对输入图像数据401的一些整体转换。该转换是利用程序代码402的一个或多个内核的操作来实现的,该程序代码402的一个或多个内核以由应用软件开发者串接设计(articulate)的编排序列来对输入图像数据进行操作。
在图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的图像处理器硬件架构实施例,注意,在每个内核在不同的模板处理器上操作的基本配置中,可以想象的是,在处理器的所有核心402执行内核之前,四个更多的内核可以自内核K4流动(图4的四个内核流仅利用图3的处理器的核心中的一半)。
图4还示出了不同的图像大小可以与各个内核输入/输出相关联。这里,如上所述,图像处理器接收一系列输入帧401。这些输入帧中的每一个的大小(例如,任何一个帧中的像素的总数目)被描绘为具有准则化的为一(1.0)的大小。内核K1对输入帧401进行操作以生成输出帧411,所述输出帧411中的每一个具有为输入帧的大小的四倍的大小(内核K1的输出帧大小被示出具有4.0的大小)。可以例如通过内核K1对输入图像帧401执行上采样来实现图像大小的增加。
内核K2处理由内核K1生成的(更大的)输出图像帧411,并且生成均具有为一(1.0)的大小的更小输出图像帧412_1、412_2。可以例如通过内核K2对内核K1的输出图像411执行下采样来产生大小的减小。内核K3对帧412_1进行操作,以生成具有准则化大小4.0的更大输出帧,同时内核K3_2对帧412_2进行操作,以生成具有准则化大小5.0的甚至更大的输出帧。内核K4对内核K3_1和K3_2的输出图像413_1、413_2进行操作,以生成为一大小1.0的输出帧。
从图4的示例能够看出,取决于例如生产内核生成的、由消费内核处理的帧的大小,能够在内核之间传递不同的数据量。这里,返回参考图3的示例性硬件实现,它提高了整体处理器效率,为避免沿环304长距离传递大量数据而放置生产内核和消费内核,该生产内核和消费内核在彼此相邻或至少彼此靠近的模板处理器上在彼此之间传递大量的数据。
因此,回顾图3的讨论,处理器实现300在其能够支持的不同内核到核心放置和内核到内核互连方面是极为多功能的,有必要分析要被配置为在处理器300上运行的应用软件程序的数据流,使得其内核能够被放置在特定核心上,并且其线缓冲器能够被配置为使特定内核/核心作为源/宿,使得较大大小的数据流沿网络304经历较少的跳数以及例如较小大小的数据流被允许沿网络304经历更多的跳数。
图5和图6以图形方式描绘了亲和度(affinity)映射器软件程序的一些计算,该软件程序分析应用软件程序并将其特定内核映射到特定核心,使得在处理器内实现了有效率的数据流。为了便于说明,图5和图6展现了图4的应用软件流的示例性计算。如在下文紧接着的讨论中将更显而易见的是,亲和度映射器遍历内核到核心放置的不同可能组合来贯穿路线(thread),以便识别将应用软件程序的每个内核映射到特定处理核心的更优化的整体配置。
作为这些计算的部分,映射器确定对于各个连接的量度,该度量指示在实现特定连接的情况下该特定连接的低效或繁琐程度。在各个实施例中,映射器将权重指派给正被分析的各个连接,其中沿较多节点跳(nodal hop)的较大数据传输和/或沿网络环的更长距离被指派较高的权重并且沿较少的节点跳的较小数据传输和/或沿网络环的较短距离被指派较小的权重。其他可能的因素可以包括:例如,由于例如较慢对较快的传输速度而沿连接的较大或较小的传播延迟。
因此,更一般地,较高的权重与较少的内部处理器数据传输效率和/或较大的数据传输负担相对应。在各个实施例中,最终选择了产生最低总权重的配置作为用于处理器的正确配置。替选的实施例可以选择将较高权重指派给较少负担的数据传输,并且尝试找到产生最高总权重的配置。为了便于讨论,本文献的其余部分将主要描述这样的方法:较高权重被指派给较低效率或较多负担的连接。无论如何,在各个实施例中,完整配置对应于识别:1)哪些内核在哪些核心上操作;2)哪些线缓冲器作为哪些内核的源(对其馈送);以及3)哪些线缓冲器作为哪些内核的宿(接收来自哪些内核的输出数据)。
为简单起见,图5和图6的示例性亲和度映射过程不定址I/O部件305与将输入帧馈送到第一内核K1的线缓冲器部件之间的连接。图5概述了图4的K1到K2内核连接的示例性的计算结果集合。这里,如上所述,第一“生产”内核(K1)在第一核心上操作并将其输出数据转发到线缓冲器部件。然后,该线缓冲器部件将从第一内核(K1)接收的数据转发到第二“消费”内核(K2)。
在一个实施例中,为了保持包含的搜索空间的大小,并且为了简化线缓冲器部件存储器资源的分配,在不考虑任何中间线缓冲器部件的情况下,通过映射算法对内核到内核连接进行建模。也就是,即使实际上从生产内核到消费内核的数据传输基本上是中间线缓冲器部件编队,线缓冲器部件的存在最初也被该映射算法忽略。
图5示出了内核K1将其输出数据发送到其消费内核K2的各个配置的权重指派。该特定连接在图5中被标记为“K1->K2”。第一表501(标记为“K1→K1”)示出了内核K1和消费内核K2之间的可用/可能连接的集合。在这里,使用图3的处理器实现作为目标架构,所有连接都是可能的。也就是,假设第一生产内核K1被映射到处理核心302_1至302_8中的特定处理核心上,其对应的消费内核K2能够被放置在其他七个其余处理核心中的任何处理核心上。
表501中列出的分别标记为“Path_l”和“Path_2”的第一连接和第二连接对应于内核K1将其输出数据发送到其相邻核心中的任一者(消费内核K2在其上操作)。例如,参考图3,如果内核K1正在核心302_2上操作,则Path_1与内核K2在核心302_1上操作相对应,并且Path_2与内核K2在核心302_3上操作相对应。两个更多的路径Path_3和Path_4与内核K1的输出数据相对应,该内核K1的输出数据被发送到驻留在与K1的核心相邻的核心的相对侧上的处理核心中的一个。例如,再次假设内核K1在核心301_2上操作,Path_3与内核K2在核心302_4上操作相对应,并且Path_4与内核K2在核心302_8上操作相对应。
在这里,注意的是,Path_l和Path_2二者均被指派1.0的节点跳距离。一个单位的节点跳距离与沿网络环304的一个逻辑单位长度相对应。也就是,从核心到其直接相邻者中的任一者的距离被指派1.0的节点跳距离。因为Path_l和Path_2二者都将K1的输出数据发送到其相邻核心中的一个,所以这这些路径二者都被指派了1.0的节点跳距离。相比之下,Path_3和Path_4中的每一个在表501中具有2.0的节点跳距离,因为如上所述,Path_3和Path_4对应于内核K1的数据被转发至在围绕环的、距内核Kl从其操作的核心两个核心位置。
继续该方法,Path_5和Path_6对应于将K1的输出数据转发到距K1的核心三个节点跳的核心中的任一者(这些路径具有3.0的节点跳距离)。最后,Path_7具有为4.0的节点跳距离并且对应于网络环上距K1的核心相对定位的(单个)路径。例如,再次使用内核K1在核心302_2上操作的示例,Path_8与内核K1的输出数据被转发到核心302_6相对应。
表501中列出的路径中的每一个具有相关联的权重,该权重对应于节点跳距离的倍数和正在沿连接传输的图像数据的大小。在K1到K2连接的情况下,根据图4中的应用软件程序的描述,图像数据具有4.0的大小。因此,将图4中列出的特定路径的每个节点跳距离乘以4.0以确定该路径的总权重。因此,K1->K2表501列出了从内核K1到处理器内K1能够向其发送其数据的各个其他核心的所有可能路径的总权重。
继续上文,由于K1->K2表501描述K1->K2连接的不同可能路径,图5进一步展示了由亲和度映射器执行的针对这些路径中的一个的分析的下一个层级。这里,K2→K3_1表502示出了可以用于针对K1->K2表501中的Path_l的K2->K3_1连接(向K3_1内核发送K2的输出数据)的其余可用连接。回顾上面,Path_l与K1将其输出数据转发到与正在执行内核K1的核心相邻的核心的配置相对应,K2->K3_l表502示出了在该特定配置在起作用的条件下的其余路径选项。
这里,注意K2->K3_l表502仅具有一个路径Path_11具有为1的节点跳。这是因为与为1的节点跳相对应的核心中的一个已经正被消费来执行内核K1,并因此不可用来从内核K2接收数据(本示例假设不同的内核将在不同的核心上执行)。换句话说,图5的特定K2→K3_1表502的目的是有效地将内核K3_1放置在可用核心上,从而意识到内核K1正在其上执行的核心是不可用的。
这里,Path_11对应于内核K3_1被放置在一个其余的可用核心上,该可用核心紧邻内核K2正在其上执行的核心。再次,回顾Path_l的示例,其中内核K1在图3的核心302_2上执行并且内核K1将其输出数据转发到在核心301_2上操作的内核K2,Path_11对应于内核K2将其输出数据发送到其中K3_l操作的核心301_3。同样地,Path_12和Path_13对应于K3_1在与内核K2操作的核心相距两跳的核心中的一个上操作。再次,意识到图5的Path_l对应于内核K1例如在核心302_1上操作以及内核K2在核心302_2上操作,Path_12可以对应于内核K3_1在核心302_4上操作并且Path_13可以对应于内核K3_1在核心302_8上操作。剩余的路径Path_14至Path_16示出了围绕网络环上当内核K3_1在其上操作的核心距离内核K2在其上操作的核心更远时的对应的节点跳。注意,从图4可以看出,K2到K3_1连接维持了为1.0的图像大小,并且同样地,表501的路径中的每一个具有等于节点跳距离的总权重。(节点跳距离是以一为因子来确定路径的总权重)。
这里,每个唯一路径名称对应于通过处理器的唯一路径。因为K1->K3表502中列出的所有路径发源于K1->K2表501中的Path_l,所以K2->K3_l表502中列出的路径中的每一个必然包括:内核K1将其输出数据转发到其相邻核心中的、K2在其上操作的核心。因此,Path_11可以被定义为不仅包括该连接,而且还包括与紧邻K2在其上操作的核心的仅剩的可用核心的连接。同样地,Path_12可以被定义为包括:K1到K2单跳连接以及到与K2的核心相距两跳的核心中的一个的连接(并且Path_12被定义为到这样的核心中的另一个)。注意的是,不需要明确地定义K1在哪个特定内核上操作,因为配置能够被定义为距环上的K1的核心的位置的偏移(无论最终是哪个核心)。
在图5中示出的K2→K3_1表502仅示出了表501的Path_l在被采纳时的可用连接。在各个实施例中,亲和度映射器对K1→K2表501中列出的路径中的每一个执行类似的下一个分析。也就是,注意,K1→K2表501列出了七个不同的路径,亲和度映射器将如K2→K3_1表502那样来有效地计算七个表。然而,这些表将包含相对变化的节点跳和权重值,以反映在表501中反映的它们的不同的对应基本路径。例如,因为与K2正在其上操作的核心相邻的核心不可用于消费K2的数据(因为K1正在其上操作),所以K2->K3_l表502仅包含一个1.0节点跳列表。然而,对于从K1->K2表501中的路径中除Path_1之外的任何路径生成的任何下一个表而言,两个1.0节点跳的罗列是可以的。
图6示出了当图5的Path_11被采纳时应用的亲和度映射器执行的更深层次下一层级计算的示例。这里,回想Path_11对应于这样的配置:其中K1将其输出数据转发到其紧邻的核心中的一个(其中K2操作)并且K2将其输出数据转发到仅剩的可用相邻核心(其中K3_1操作)。例如,如果K1在图3的核心302_2上操作并且K2在核心302_3上操作,则Path_11必然包括在核心302_4上操作的K3_l。下一层级的计算(描述为图6的K2->K3_2表601)确定了在Path_11被采纳条件下K2要其数据转发至哪个核心以供K3_2消费。参考表601,注意,没有具有1.0的节点跳的路径是可用的。这里,在Path_11的配置下,核心中的与K2的核心相邻的二者都正在被利用(一个用于执行K1并且另一个用于执行K3_1)。因此,最近的核心相距2.0节点跳。表601的总权重仍以一为系数,因为根据图4,从内核K2发送到内核K3_2的图像帧的大小也是1.0。
如果表601中的K2->K3_2路径中的Path_112被采纳,则K3_1->K4表602列出可能的路径和相关联的总权重。这里,Path_112对应于这样的配置:其中K1和K3_1在紧邻K2的核心的核心上操作并且K3_2在紧邻K1的核心或紧邻K3_1核心的核心上操作。假设Path_112对应于其中K3_2在紧挨Kl的核心的核心上操作的配置,则K4将有四个剩余的核心来在其上操作:距K3_1的核心的一跳的一个核心,距K3_l的核心两跳的一个核心,距K3_l的核心的三跳的一个核心,距K3_l的核心的四跳的一个核心。例如,如果K1在核心302_2上操作,K2在核心302_3上操作,K3_1在核心302_4上操作,以及K3_2在核心302_1上操作,则K4可以被放置在为分别距K3_l的核心(302_4)1.0、2.0、3.0和4.0节点跳的核心302_5、302_6、302_7、302_8中的任何一个上。表604以适当的权重反映了这些选项。放置K4完成了用于图4的应用结构的内核到核心映射。
注意,穿过从图5到图6的每个层级的计算向下,可用路径的数目不断减少,从而反映了对由不断更深的计算的路线表示的特定配置的核心的已有投入。同样,在各个实施例中,亲和度映射器探索/计算所有可能连接中的所有层级。穿过各个层级的独特计算中的每个路线对应于特定核心上的特定内核的不同配置。每个路线沿其选定路径的特定集合累积总权重,其导致完整路线/配置的最终权重。选择具有最低总权重的路线作为处理器的应用软件程序的配置。
在各个实施例中,在已经定义了内核到核心映射之后,将缓冲器(队列)分配到线缓冲器部件上。回顾对图2和图3的讨论,线缓冲器部件接收例如从生产内核发送的图像数据的线组,并在将所述线组转发到消费内核之前对所述线组进行编队。这里,用于单个生产者/消费者连接的编队可以称为“缓冲器”。缓冲器具有其消费以便实现其对应的队列的线缓冲器部件存储器空间的相关联的量。这里,单个线缓冲器部件能够被配置为实现多个缓冲器。在一个实施例中,线缓冲器部件中的每一个具有存储器空间的有限量,使得分配给特定线缓冲器部件的所有缓冲器的总大小应当符合在线缓冲器部件的存储器资源内。
在一个实施例中,定义了应用软件程序中的每个缓冲器及其对应的存储器消耗空间量。然后,对于每个缓冲器,映射算法构建了通过到缓冲器的生产核心的距离存储的线缓冲器部件的列表(这里,首先列出最接近缓冲器的生产内核的核心的线缓冲器部件,并且最后列出离缓冲器的生产内核的核心最远的线缓冲器部件)。然后,算法将缓冲器分配给列表上具有容纳缓冲器的存储器空间的最高排名的线缓冲器部件。映射算法根据该过程以串行方式处理每个缓冲器,直到所有缓冲器都已经被考虑并分配给线缓冲器部件。
可以例如由编译器执行内核映射和缓冲器分配,该编译器将较高层级的应用软件程序代码编译成较低层级的对象(可执行)程序代码。编译器计算例如表示所有可能的内部内核配置和连接的所有可能路线的总权重,使得能够识别最低路线/配置,并且定义了在哪些线缓冲器部件上分配那些缓冲器。通过这样做,编译器将识别出在特定核心上的每个生产内核将向哪个特定线缓冲器部件发送其输出数据,以及每个线缓冲器部件将向哪个核心上的哪个消费内核转发其编队的数据。该识别包括:哪些内核要在哪些核心上执行(或至少内核彼此间的位置偏移)的串接设计。所选择的配置被记录在例如伴随编译的应用软件的元数据中。然后,该元数据用于例如将特定值录入到处理器的内核和/或配置寄存器空间中,以物理地实现所选择的配置,作为在图像处理器上加载应用软件程序的加载以供执行的一部分。
尽管上面描述的图5和图6的方法涉及为内核到内核连接指派权重,其忽略了在连接过程上存储和转发数据的线缓冲器部件的存在,但是其他实施例可以进一步细粒化,使得对于内核到内核连接,确定生产内核到线缓冲器部件权重,并且确定线缓冲器部件到消费内核权重。然而,与图5和图6的方法相比,利用这样的方法显著地扩展了搜索空间。缓冲器分配还可以被指派给可能增加搜索空间开销的这样的连接。
虽然图5和图6的讨论涉及确定用于具有图3的图像处理器架构的硬件平台的应用软件程序配置,注意,上述教导能够被应用于各个其他替选实施例。例如,图3的图像处理器实现具有相等数目的线缓冲器部件和核心。其他实施方式可以具有不同数目的线缓冲器部件和核心。
此外,如上所述,线缓冲器部件301转发图像的线组。替选实施方式不一定需要专门接收和转发线组。而且,尽管图3的图像处理器包括环形网络304,但是可以使用其他类型的网络(例如,交换网络、传统的多点分支总线(multi-drop bus)等)。更进一步地,核心不需要包括具有二维执行通道阵列或二维移位寄存器阵列的相应的片生成器或模板处理器。
图7示出了上述方法。该方法包括:针对具有要在图像处理器上执行的多个内核的程序的内核到内核连接来计算数据传输量度701。图像处理器包括多个处理核心和连接多个处理核心的网络。内核到内核连接中的每一个包括要在处理核心中的一个上执行的生产内核和要在另一个处理核心中的另一个上执行的消费内核。消费内核用于对由生产内核生成的数据进行操作。该方法还包括:基于所计算的数据传输量度,将多个内核中的内核指派给处理核心中的相应的处理核心702。
3.0图像处理器实现实施例
图8a-图8e至图12提供了关于上面详细描述的图像处理器和相关联的模板处理器的各个实施例的操作和设计的附加细节。回顾图2的讨论,线缓冲器部件将线组馈送到模板处理器的相关联的片生成器,图8a至图8e图示了线缓冲器部件201的解析活动、片生成器部件203的更细粒度的解析活动以及耦合到片生成器部件203的模板处理器的模板处理活动的高级实施例。
图8a描绘了图像数据801的输入帧的实施例。图8a还描绘了模板处理器被设计来在其上操作的三个重叠的模板802(均具有3像素×3像素的尺寸)的略图。以纯黑色突出显示每个模板相应生成其输出图像数据的输出像素。为简单起见,三个重叠的模板802被描绘为仅在垂直方向上重叠。应理解,实际上模板处理器可以被设计为在垂直方向上和水平方向二者上具有重叠的模板。
由于模板处理器内的垂直重叠模板802,如图8a所示,在帧内存在单个模板处理器能够操作的宽带图像数据。如以下将更详细讨论的,在一个实施例中,模板处理器跨图像数据以从左到右的方式处理它们的重叠模板内的数据(然后以从上到下的顺序对下一组线重复)。因此,随着模板处理器继续操作,纯黑色输出像素块的数目将在水平方向上向右增长。如上所述,线缓冲器部件201负责解析来自传入帧的输入图像数据的线组,该传入帧足以供模板处理器在扩展数目的即将到来的周期进行操作。线组的示例性描绘被示为阴影区域803。在一个实施例中,线缓冲器部件201能够理解用于向片生成器发送线组/从格生成器接收线组的不同动态。例如,根据被称为“全组(full group)”的一种模式,图像数据的完整全宽线在线缓冲器部件和片生成器之间传递。根据被称为“基本高(virtually tall)”的第二模式,最初利用全宽行的子集合传递线组。然后将其余的行依次以较小(小于全宽)的片段传递。
在输入图像数据的线组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,程序控制器909从标量存储器903读取模板处理器的程序代码的指令,并将该指令发布到执行通道阵列905中的执行通道。在一个实施例中,将单个相同指令广播到阵列905内的所有执行通道,以产生来自数据计算部件901的类似SIMD的行为。在一个实施例中,从标量存储器903读取并发布到执行通道阵列905的执行通道的指令的指令格式包括非常长指令字(VLIW)类型格式,其包括每指令多于一个操作码。在另一实施例中,VLIW格式包括ALU操作码和存储器操作码(该存储器操作码指导用于特定执行通道或执行通道的集合的存储器操作)二者,该ALU操作码指导由每个执行通道的ALU执行的数学函数(如下所述,在一个实施例中ALU操作码可以指定多于一个传统的ALU操作)。
术语“执行通道”指代能够执行指令的一个或多个执行部件的集合(例如,能够执行指令的逻辑电路)。然而,在各个实施例中,执行通道能够包括比执行部件范围更大的更多类似处理器的功能。例如,除了一个或多个执行部件之外,执行通道还可以包括:对接收的指令进行解码的逻辑电路,或者在更多类似MIMD的设计的情况下,还可以包括获取和解码指令的逻辑电路。关于类似MIMD的方法,尽管本文中已经基本描述了集中式程序控制方法,但是可以在各个替选实施例中实现更分布式的方法(例如,包括阵列905的每个执行通道内的程序代码和程序控制器)。
执行通道阵列905、程序控制器909、和二维移位寄存器结构906的组合为广泛的可编程功能提供了广泛的可适应/可配置的硬件平台。例如,考虑到个体执行通道能够执行各种各样的功能并且能够容易地访问接近任何输出阵列位置的输入图像数据,应用软件开发人员能够对具有范围广泛的不同功能能力以及尺寸(例如,模板大小)的内核进行编程。
除了用作用于由执行通道阵列905操作的图像数据的数据存储之外,随机存取存储器907还可以保持一个或多个查找表。在各个实施例中,还可以在标量存储器903内实例化一个或多个标量查找表。
标量查找涉及将具有相同索引的来自相同查找表的相同数据值从传递到执行通道阵列905内的执行通道中的每个执行通道。在各个实施例中,上述VLIW指令格式被扩展为还包括标量操作码,该标量操作码将由标量处理器执行的查找操作指向标量查找表中。指定与操作码一起使用的索引可以是立即操作数,或可以从某些其他数据存储位置获取。无论如何,在一个实施例中,从标量存储器内的标量查找表的查找基本上涉及在相同的时钟周期期间将相同的数据值广播到执行通道阵列905内的所有执行通道。以下进一步提供关于查找表的使用和操作的附加细节。
图9b概述了上面讨论的VLIW指令字实施例。如图9b所示,VLIW指令字格式包括用于下述三个单独指令的字段:1)由标量处理器执行的标量指令951;2)ALU指令952,其由执行通道阵列内的相应ALU以SIMD方式广播和执行;3)以部分SIMD方式广播和执行的存储器指令953(例如,如果沿执行通道阵列中的相同行的执行通道共享相同的随机存取存储器,则来自不同行中的每个行的一个执行通道实际上执行指令(存储器指令953的格式可以包括标识每个行中的哪个执行通道执行指令的操作数)。
还包括用于一个或多个立即操作数的字段954。可以以指令格式标识指令951、952、953中的哪一个使用哪个立即操作数信息。指令951、952、953中的每一个还包括它们自己的相应的输入操作数和结果信息(例如,用于ALU操作的本地寄存器和用于存储器存取指令的本地寄存器和存储器地址)。在一个实施例中,在执行通道阵列内的执行通道执行另外两个指令952、953中的任一者之前由标量处理器执行标量指令951。也就是,VLIW字的执行包括第一周期,在第一周期时执行标量指令951,该第一周期之后为第二周期,在该第二周期时可以执行其他指令952、953(注意,在各个实施例中,可以以并行方式执行指令952和953)。
在一个实施例中,由标量处理器执行的标量指令包括发布到片生成器的、从数据计算部件的存储器或2D移位寄存器加载片/将片存储到数据计算部件的存储器或2D移位寄存器中的命令。这里,片生成器的操作能够取决于线缓冲器部件的操作或其他变量,该其他变量阻碍对片生成器完成由标量处理器发布的任何命令的周期数目的预运行时理解。因此,在一个实施例中,其标量指令951对应于或以其他方式致使命令被发布至片生成器的任何VLIW字还包括在另外两个指令字段952、953中的无操作(NOOP)指令。然后,程序代码进入指令字段952、953的NOOP指令的循环,直到片生成器完成其向数据计算部件的加载/从数据计算部件的存储。这里,在向片生成器发布命令时,标量处理器可以设置互锁寄存器的位,片生成器在完成命令时将该位重置。在NOOP周期期间,标量处理器监视互锁位的位。当标量处理器检测到片生成器已经完成其命令时,再次开始正常执行。
图10示出了数据计算组件1001的实施例。如图10所示,数据计算组件1001包括执行通道1005的阵列,其在逻辑上位于二维移位寄存器阵列结构1006“上方”。如上所述,在各个实施例中,由片生成器提供的图像数据的片被加载到二维移位寄存器1006中。然后,执行通道对来自寄存器结构1006的片数据进行操作。
执行通道阵列1005和移位寄存器结构1006相对于彼此在位置上固定。然而,移位寄存器阵列1006内的数据以策略和协调的方式移位,以致使执行通道阵列中的每个执行通道处理数据内的不同模板。这样,每个执行通道确定用于正在生成的输出片中的不同像素的输出图像值。根据图10的架构,应当是清楚,重叠的模板不仅垂直地布置而且还水平地布置,因为执行通道阵列1005包括垂直相邻的执行通道以及水平相邻的执行通道。
数据计算部件1001的一些值得注意的架构特征包括具有比执行通道阵列1005更宽的尺寸的移位寄存器结构1006。也就是,在执行通道阵列1005外侧存在寄存器1009的“环带(halo)”。尽管示出了环带1009存在于执行通道阵列的两个侧上,但是根据实施方式,环带可以存在于执行通道阵列1005的更少(一个)或更多(三个或四个)侧上。环带1005用于针对这样的数据来提供“溢出(spill-over)”空间:该数据在执行通道1005“下方”移位时溢出到执行通道阵列1005的边界的外侧。作为一个简单的情况,以执行通道阵列1005的右边缘为中心的5×5模板在该模板的最左边的像素被处理时,将需要进一步向右的四个环带寄存器位置。为了便于绘图,图10将环带的右侧的寄存器示出为仅具有水平移位连接,并且将环带的底侧的寄存器示出为仅具有垂直移位连接,而在标称实施例中,任一侧(右侧、底侧)上的寄存器将具有水平连接和垂直连接两者。在各个实施例中,环带区域不包括对应的执行通道逻辑以执行图像处理指令(例如,不存在ALU)。然而,个体存储器存取部件(M)存在于环带区域位置中的每一个中,使得个体环带寄存器位置能够单独地从存储器加载数据并将数据存储到存储器。
附加的溢出空间由随机存取存储器1007提供,随机存取存储器1007耦合到阵列中的每行和/或每列或其中的部分(例如,随机存取存储器可以被指派给执行通道阵列的“区域”,其行方向上跨4个执行通道和列方向上跨2个执行通道)。为简单起见,本申请的其余部分将主要涉及基于行和/或列的分配方案。这里,如果执行通道的内核操作要求它处理二维移位寄存器阵列1006之外的像素值(一些图像处理例程可能需要),则图像数据平面能够进一步溢出,例如从环带区域1009溢出到随机存取存储器1007中。例如,考虑6×6模板,其中硬件包括在执行通道阵列的右边缘上的执行通道右侧的仅四个存储元件的环带区域。在这种情况下,数据需要移位到环带区域409的右边缘外的更右方以完全处理模板。然后,移位至环带区域1009之外的数据将溢出到随机存取存储器1007。以下进一步提供随机存取存储器1007和图9的模板处理器的其他应用。
图11a至图11k例示如上所述的,图像数据在执行通道阵列“下方”的二维移位寄存器阵列内移位的方式的工作示例。如图11a所示,二维移位阵列的数据内容描绘在第一阵列1107中,并且执行通道阵列由框1105描绘。此外,简化地描绘执行通道阵列内的两个相邻执行通道1110。在该简化描绘1110中,每个执行通道包括寄存器R1,所述寄存器R1可以接受来自移位寄存器的数据,接受来自ALU输出的数据(例如,以表现为跨周期的累加器),或者将输出数据写入到输出目的地中。
每个执行通道还可获取在二维移位阵列中位于其“下方”的本地寄存器R2中的内容。因此,R1是执行通道的物理寄存器,而R2是二维移位寄存器阵列的物理寄存器。执行通道包括可以对由R1和/或R2提供的操作数进行操作的ALU。如以下将进一步详细描述的,在一个实施例中,移位寄存器实际上是每阵列位置利用多个(一定“深度”的)存储/寄存器元件实现的,但是移位活动限于一个存储元件平面(例如,每周期仅一个存储元件平面能够移位)。图11a至图11k描绘了这些更深寄存器位置中的一个正被用于存储来自相应执行通道的结果X。为了便于说明,更深的结果寄存器被绘制在其对应的寄存器R2旁边而不是在其对应的寄存器R2之下。
图11a至图11k关注于两个模板的计算,其中心位置与执行通道阵列内描绘的一对执行通道位置1111对准。为了便于说明,根据以下示例,执行通道对510被绘制为水平相邻者,而实际上以下示例,执行通道对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)坐标表达的移位的方向和大小。例如,用于向上移位一个位置的目标代码可以以目标代码表达为SHIFT 0,+1。作为另一个示例,向右移位一个位置可以用以目标代码表达为SHIFT+1,0。在各个实施例中,还可以以目标代码指定更大幅度的移位(例如,SHIFT 0,+2)。这里,如果2D移位寄存器硬件仅支持每周期移位一个位置,则指令可以被机器解释为需要多个周期执行,或者2D移位寄存器硬件可以被设计为支持每周期移位多于一个位置。将在下面进一步详细描述后面的实施例。
图12示出了用于执行通道的部件单元以及对应的移位寄存器结构的另一个更详细的描述(环带区域中的寄存器不包括对应的执行通道,但在各个实施例中确实包括存储器部件)。在一个实施例中,与执行通道阵列中的每个位置相关联的执行通道和寄存器空间是通过在执行通道阵列的每个节点处实例化图12中所示的电路来实现的。如图12所示,部件单元包括执行通道1201,其耦合到由四个寄存器R2至R5组成的寄存器堆(registerfile)1202。在任何周期期间,执行通道1201可以从寄存器R1至R5中的任何寄存器读取或向寄存器R1至R5中的任何寄存器写入。对于需要两个输入操作数的指令,执行通道可以从R1到R5中的任何寄存器检索该两个操作数。
在一个实施例中,二维移位寄存器结构是通过下述方式来实现的:在单个周期期间,允许寄存器R2至R4中的任何寄存器(仅一个寄存器)的内容通过输出多路复用器1203被移位“出”到其相邻者的寄存器堆中的一个,并且通过输入多路复用器604使寄存器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的一部分)集成(例如,作为更通用的处理器的协同处理器),或者可以是计算系统内的独立处理器。
上面讨论的硬件设计实施例可以被实施在半导体芯片内和/或作为用于最终目标为半导体制造工艺的电路设计的描述。在后者的情况下,这样的电路描述可以采用(例如,VHDL或Verilog)寄存器传输级(RTL)电路描述、门级电路描述、晶体管级电路描述、或掩模描述、或它们的各种组合的形式。电路描述通常被实施在计算机可读存储介质(诸如CD-ROM或其他类型的存储技术)上。
根据前面的部分应理解,如上所述的图像处理器可以在计算机系统上以硬件方式被实施(例如,作为手持设备的、处置来自手持设备的相机的数据的片上系统(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和CPU 1301中的任一者或两者以作为其协同处理器。附加地,在各个实施例中,GPU 1316可以用上面详细描述的图像处理器特征中的任何来实现。图像处理部件1319可以配置有如上详细描述的应用软件。附加地,诸如图13的计算系统的计算系统可以执行实行上述计算的程序代码,该计算确定了应用软件程序到图像处理器上的配置。
触摸屏显示器1303、通信接口1304-1307、GPS接口1308、传感器1309、相机1310、和扬声器/麦克风编解码器1313、1314中的每一个相对于整个计算系统都可以被视为各种形式的I/O(输入和/或输出),在适当的情况下各种形式的I/O(输入和/或输出)包括集成外围设备(例如,一个或多个相机1310)。根据实施方式,这些I/O组件中的各个I/O组件可以被集成在应用处理器/多核心处理器1350上,或者可以位于晶片外或应用处理器/多核心处理器1350的封装件的外侧。
在一个实施例中,一个或多个相机1310包括能够测量相机与其视野中的物体之间的深度的深度相机。在应用处理器或其他处理器的通用CPU核心(或具有指令执行流水线以执行程序代码的其他功能块)上执行的应用软件、操作系统软件、设备驱动程序软件和/或固件可以执行以上描述的任何功能。
本发明的实施例可以包括如上所述的各个过程。这些过程可以被实施在机器可执行指令中。该指令能够用于致使通用或专用处理器执行某些过程。替选地,这些过程可以由包含用于执行这些过程的硬连线和/或可编程逻辑件的特定硬件组件来执行,或者由编程的计算机组件和定制硬件组件的任何组合来执行。
本发明的元件还可以被提供作为用于存储机器可执行指令的机器可读介质。机器可读介质可以包括但不限于适用于存储电子指令的软盘、光盘、CD-ROM、和磁光盘、FLASH存储器、ROM、RAM、EPROM、EEPROM、磁卡或光卡、传播介质或其他类型的媒体/机器可读介质。例如,本发明可以作为计算机程序被下载,该计算机程序可以通过载波或其他传播中实施的数据信号的方式从远程计算机(例如,服务器)经由通信链路(例如,调制解调器或网络连接)传送到请求计算机(例如,客户端)。
在前述说明书中,已经参考本发明的特定示例性实施例描述了本发明。然而,将显而易见的是,在不脱离所附权利要求书中阐述的本发明的更广泛的精神和范围的情况下,可以对其进行各种修改和改变。因此,说明书和附图被视为说明性的而非限制性的。
Claims (20)
1.一种方法,包括:
针对将在图像处理器上执行的、包括多个内核的程序的内核到内核连接来计算数据传输量度,所述图像处理器包括多个处理核心和连接所述多个处理核心的网络,所述内核到内核连接中的每一个包括要在所述处理核心中的一个处理核心上执行的生产内核以及要在所述处理核心中的另一个处理核心上执行的消费内核,所述消费内核用于在由所述生产内核生成的数据上进行操作;以及,
基于所计算的数据传输量度,将所述多个内核中的内核指派给所述处理核心中的相应处理核心。
2.如权利要求1所述的方法,其中,所述图像处理器进一步包括多个缓冲器部件,所述缓冲器部件用于存储和转发所述内核到内核连接的数据。
3.如权利要求2所述的方法,其中,所述缓冲器部件进一步包括线缓冲器部件,所述线缓冲器部件用于存储和转发内核到内核连接的图像的线组。
4.如任一前述权利要求所述的方法,其中,计算所述数据传输量度进一步包括:基于在所述网络内在生产内核与消费内核之间的节点跳的数目来向所述内核到内核连接指派权重。
5.如任一前述权利要求所述的方法,其中,计算所述数据传输量度进一步包括:基于通过所述网络在生产内核与消费内核之间传输的图像的大小来向所述内核到内核连接指派权重。
6.如任一前述权利要求中所述的方法,其中,将内核指派给所述处理核心中的相应处理核心进一步包括:
计算所述程序的不同配置的权重,所述程序的每个配置包括对所述处理核心的内核指派的不同集合,其中,特定配置的权重的计算是基于针对所述特定配置的特定内核到内核连接所计算的所述数据传输量度的子集;以及,
选择具有最佳权重的所述配置中的一个配置。
7.一种包含程序代码的非暂时性机器可读存储介质,所述程序代码在由计算系统处理时致使所述计算系统执行方法,所述方法包括:
针对将在图像处理器上执行的、包括多个内核的程序的内核到内核连接来计算数据传输量度,所述图像处理器包括多个处理核心和连接所述多个处理核心的网络,所述内核到内核连接中的每一个包括将在所述处理核心中的一个处理核心上执行的生产内核以及将在所述处理核心中的另一个处理核心上执行的消费内核,所述消费内核用于对由所述生产内核生成的数据进行操作;以及,
基于所计算的数据传输量度,将所述多个内核中的内核指派给所述处理核心中的相应处理核心。
8.如权利要求7所述的非暂时性机器可读存储介质,其中,所述图像处理器包括多个缓冲器部件,所述缓冲器部件用于存储和转发所述内核到内核连接的数据。
9.如权利要求8所述的非暂时性机器可读存储介质,其中,所述缓冲器部件进一步包括线缓冲器部件,所述线缓冲器部件用于存储和转发内核到内核连接的图像的线组。
10.如权利要求7至9中的任一项所述的非暂时性机器可读存储介质,其中,计算所述数据传输量度进一步包括:基于在所述网络内在生产内核与消费内核之间的节点跳的数目来向所述内核到内核连接指派权重。
11.如权利要求7至10中的任一项所述的非暂时性机器可读存储介质,其中,计算所述数据传输量度进一步包括:基于通过所述网络在生产内核与消费内核之间传输的图像的大小来向所述内核到内核连接指派权重。
12.如权利要求7至11中的任一项所述的非暂时性机器可读存储介质,其中,将所述内核指派给所述处理核心中的相应处理核心进一步包括:
计算所述程序的不同配置的权重,所述程序的每个配置包括对所述处理核心的内核指派的不同集合,其中,特定配置的权重的计算是基于针对所述特定配置的特定内核到内核连接所计算的所述数据传输量度的子集;以及,
选择具有最佳权重的所述配置中的一个配置。
13.如权利要求7至12中的任一项所述的非暂时性机器可读存储介质,其中,所述处理核心包括执行通道阵列和二维移位寄存器阵列。
14.一种计算系统,包括:
多个通用处理核心;
系统存储器;
存储器控制器,所述存储器控制器位于所述系统存储器和所述多个通用处理核心之间;
非暂时性机器可读存储介质,所述非暂时性机器可读存储介质包含程序代码,所述程序代码在由计算系统处理时致使所述计算系统执行方法,所述方法包括:
针对将在图像处理器上执行的、包括多个内核的程序的内核到内核连接来计算数据传输量度,所述图像处理器包括多个处理核心和连接所述多个处理核心的网络,所述内核到内核连接中的每一个包括要在所述处理核心中的一个处理核心上执行的生产内核以及要在所述处理核心中的另一个处理核心上执行的消费内核,所述消费内核用于对由所述生产内核生成的数据进行操作;以及,
基于所计算的数据传输量度,将所述多个内核中的内核指派给所述处理核心中的相应处理核心。
15.如权利要求14所述的计算系统,其中,图像处理器包括多个缓冲器部件,所述缓冲器部件用于存储和转发所述内核到内核连接的数据。
16.如权利要求15所述的计算系统,其中,所述缓冲器部件进一步包括线缓冲器部件,所述线缓冲器部件用于存储和转发内核到内核连接的图像的线组。
17.如权利要求14至16中的任一项所述的计算系统,其中,计算所述数据传输量度进一步包括:基于在所述网络内在生产内核与消费内核之间的节点跳的数目来向所述内核到内核连接指派权重。
18.如权利要求14至17中的任一项所述的计算系统,其中,计算所述数据传输量度进一步包括:基于通过所述网络在生产内核与消费内核之间传输的图像的大小来向所述内核到内核连接指派权重。
19.如权利要求14至18中的任一项所述的计算系统,其中,将内核指派给所述处理核心中的相应处理核心进一步包括:
计算所述程序的不同配置的权重,所述程序的每个配置包括对所述处理核心的内核指派的不同集合,其中,特定配置的权重的计算是基于针对所述特定配置的特定内核到内核连接所计算的所述数据传输量度的子集;以及,
选择具有最佳权重的所述配置中的一个配置。
20.如权利要求14至19中的任一项所述的计算系统,其中,所述处理核心包括执行通道阵列和二维移位寄存器阵列。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/594,529 US10467056B2 (en) | 2017-05-12 | 2017-05-12 | Configuration of application software on multi-core image processor |
US15/594,529 | 2017-05-12 | ||
PCT/US2018/013445 WO2018208338A1 (en) | 2017-05-12 | 2018-01-12 | Configuration of application software on multi-core image processor |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110192184A true CN110192184A (zh) | 2019-08-30 |
CN110192184B CN110192184B (zh) | 2023-07-07 |
Family
ID=61094605
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880007507.6A Active CN110192184B (zh) | 2017-05-12 | 2018-01-12 | 在多核心图像处理器上配置应用软件 |
Country Status (7)
Country | Link |
---|---|
US (2) | US10467056B2 (zh) |
EP (1) | EP3622396B1 (zh) |
JP (1) | JP6820428B2 (zh) |
KR (1) | KR102217969B1 (zh) |
CN (1) | CN110192184B (zh) |
TW (1) | TWI694412B (zh) |
WO (1) | WO2018208338A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108614460B (zh) * | 2018-06-20 | 2020-11-06 | 东莞市李群自动化技术有限公司 | 分布式多节点控制系统及方法 |
CN110032407B (zh) * | 2019-03-08 | 2020-12-22 | 创新先进技术有限公司 | 提升cpu并行性能的方法及装置和电子设备 |
GB2595696B (en) * | 2020-06-04 | 2022-12-28 | Envisics Ltd | Forming a hologram of a target image for projection using data streaming |
TW202219760A (zh) * | 2020-11-06 | 2022-05-16 | 圓剛科技股份有限公司 | 協同運算裝置及其協同運算方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110088038A1 (en) * | 2009-10-13 | 2011-04-14 | Ezekiel John Joseph Kruglick | Multicore Runtime Management Using Process Affinity Graphs |
US20130212594A1 (en) * | 2012-02-15 | 2013-08-15 | Electronics And Telecommunications Research Institute | Method of optimizing performance of hierarchical multi-core processor and multi-core processor system for performing the method |
US20160048740A1 (en) * | 2012-09-19 | 2016-02-18 | Placemeter Inc. | System and method for processing image data |
WO2016171869A1 (en) * | 2015-04-23 | 2016-10-27 | Google Inc. | Line buffer unit for image processor |
WO2016171909A1 (en) * | 2015-04-23 | 2016-10-27 | Google Inc. | Architecture for high performance, power efficient, programmable image processing |
US20160313984A1 (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 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7499960B2 (en) | 2001-10-01 | 2009-03-03 | Oracle International Corporation | Adaptive memory allocation |
US7331037B2 (en) | 2004-08-12 | 2008-02-12 | National Instruments Corporation | Static memory allocation in a graphical programming system |
US7818725B1 (en) | 2005-04-28 | 2010-10-19 | Massachusetts Institute Of Technology | Mapping communication in a parallel processing environment |
JP4923602B2 (ja) | 2006-02-10 | 2012-04-25 | 富士ゼロックス株式会社 | 画像形成処理シミュレーション装置及び画像形成処理シミュレーション方法 |
WO2007149476A2 (en) * | 2006-06-19 | 2007-12-27 | Trustees Of Columbia University In The City Of New York | Assays for non-apoptotic cell death and uses thereof |
US8306348B2 (en) | 2007-04-24 | 2012-11-06 | DigitalOptics Corporation Europe Limited | Techniques for adjusting the effect of applying kernels to signals to achieve desired effect on signal |
US7890314B2 (en) | 2007-12-05 | 2011-02-15 | Seagate Technology Llc | Method for modeling performance of embedded processors having combined cache and memory hierarchy |
US20110191758A1 (en) | 2010-01-29 | 2011-08-04 | Michael Scharf | Optimized Memory Allocator By Analyzing Runtime Statistics |
TW201206165A (en) | 2010-07-16 | 2012-02-01 | Primax Electronics Ltd | Image testing method of image pickup device and image testing device using the same |
US9152468B2 (en) | 2010-10-25 | 2015-10-06 | Samsung Electronics Co., Ltd. | NUMA aware system task management |
US10235220B2 (en) * | 2012-01-23 | 2019-03-19 | Advanced Micro Devices, Inc. | Multithreaded computing |
US8819345B2 (en) | 2012-02-17 | 2014-08-26 | Nokia Corporation | Method, apparatus, and computer program product for inter-core communication in multi-core processors |
DE102013205608A1 (de) * | 2013-03-28 | 2014-10-02 | Siemens Aktiengesellschaft | Montagevorrichtung für ein Seitenwandverkleidungselement eines Schienenfahrzeugs |
TW201604805A (zh) * | 2014-07-30 | 2016-02-01 | 林政毅 | 帳號驗證方法及其系統 |
KR102384346B1 (ko) * | 2015-06-01 | 2022-04-07 | 삼성전자주식회사 | 저장 방식에 상관없이 데이터를 억세스하는 애플리케이션 프로세서 및 이를 포함하는 모바일 장치 |
-
2017
- 2017-05-12 US US15/594,529 patent/US10467056B2/en active Active
-
2018
- 2018-01-12 JP JP2019539225A patent/JP6820428B2/ja active Active
- 2018-01-12 CN CN201880007507.6A patent/CN110192184B/zh active Active
- 2018-01-12 WO PCT/US2018/013445 patent/WO2018208338A1/en active Application Filing
- 2018-01-12 KR KR1020197021661A patent/KR102217969B1/ko active IP Right Grant
- 2018-01-12 EP EP18702398.1A patent/EP3622396B1/en active Active
- 2018-02-07 TW TW107104239A patent/TWI694412B/zh active
-
2019
- 2019-10-18 US US16/657,656 patent/US11030005B2/en active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110088038A1 (en) * | 2009-10-13 | 2011-04-14 | Ezekiel John Joseph Kruglick | Multicore Runtime Management Using Process Affinity Graphs |
US20130212594A1 (en) * | 2012-02-15 | 2013-08-15 | Electronics And Telecommunications Research Institute | Method of optimizing performance of hierarchical multi-core processor and multi-core processor system for performing the method |
US20160048740A1 (en) * | 2012-09-19 | 2016-02-18 | Placemeter Inc. | System and method for processing image data |
WO2016171869A1 (en) * | 2015-04-23 | 2016-10-27 | Google Inc. | Line buffer unit for image processor |
WO2016171909A1 (en) * | 2015-04-23 | 2016-10-27 | Google Inc. | Architecture for high performance, power efficient, programmable image processing |
US20160313984A1 (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 |
Non-Patent Citations (1)
Title |
---|
HESHAM EI-REWINI等: ""Scheduling Parallel program tasks onto arbitrary target machines"", 《JOURNAL OF PARALLEL AND DISTRIBUTED COMPUTING》 * |
Also Published As
Publication number | Publication date |
---|---|
EP3622396A1 (en) | 2020-03-18 |
US10467056B2 (en) | 2019-11-05 |
TW201901608A (zh) | 2019-01-01 |
US11030005B2 (en) | 2021-06-08 |
JP2020519977A (ja) | 2020-07-02 |
CN110192184B (zh) | 2023-07-07 |
TWI694412B (zh) | 2020-05-21 |
US20180329746A1 (en) | 2018-11-15 |
JP6820428B2 (ja) | 2021-01-27 |
WO2018208338A1 (en) | 2018-11-15 |
US20200050486A1 (en) | 2020-02-13 |
KR20190095462A (ko) | 2019-08-14 |
EP3622396B1 (en) | 2023-03-08 |
KR102217969B1 (ko) | 2021-02-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7202987B2 (ja) | 高性能で、電力効率の良い、プログラマブルな画像処理のためのアーキテクチャ | |
JP6612403B2 (ja) | 画像プロセッサのためのエネルギ効率的なプロセッサコアアーキテクチャ | |
US11153464B2 (en) | Two dimensional shift array for image processor | |
CN110192184A (zh) | 在多核心图像处理器上配置应用软件 | |
CN107563952A (zh) | 可编程二维图像处理器上的卷积神经网络 | |
CN108541321A (zh) | 将程序代码映射到高性能、高功效的可编程图像处理硬件平台的编译技术 | |
CN107133908A (zh) | 用于图像处理器的编译器管理存储器 | |
CN107533751A (zh) | 用于图像处理器的线缓冲器单元 | |
CN110300989A (zh) | 可配置并且可编程的图像处理器单元 | |
CN107438861A (zh) | 用于图像生成器的数据片生成器 | |
US10996988B2 (en) | Program code transformations to improve image processor runtime efficiency | |
JP6567770B2 (ja) | 低減された配線複雑度を有するシフトレジスタ | |
CN110300944B (zh) | 具有可配置数目的活动核心和支持内部网络的图像处理器 | |
JP6750022B2 (ja) | 画像プロセッサのためのマクロ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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |