具有可编程优化的存储器-网络处理器的制作方法

文档序号:15465960发布日期:2018-09-18 19:19阅读:184来源:国知局

本发明涉及多处理器系统,并且更具体而言涉及处理器操作和执行中的改进以及以这种系统为目标的软件的开发。



背景技术:

通用硬件系统的主要目标是在保留完全可编程性的同时实现特定于应用的(不可编程的)硬件性能。在历史上,这两个概念是正相反的极端。特定于应用的硬件是以可能的最高效方式执行特定功能的固定硬件方案。这通常以每功能的能量或每操作的能量并且以每(电路)面积的功能来测量,这可以与产品的部分成本相关。成本和市场动态驱动了对尝试满足这个目标的创新。芯片产品的成本由许多因素构成,包括管芯面积和最终包装。成本还应当考虑开发产品的整个生态系统。这种生态系统成本由将特定应用精简至特定硬件方案的时间、构成整个系统所需的特定硬件方案的数量以及通过定制通信和存储器结构集成所有特定硬件方案所花的时间等等组成。因此,需要完全的集成方案来支持各种特定硬件方案的全部以及它们的自定义互连,结果导致单个芯片管芯上非常大的面积需求。在历史上,这个过程曾导致在面积、能量和上市时间方面不高效的方案。

当考虑目标硬件的概念和可编程性的领域时,从硬件体系架构和软件开发风格的角度来看,市场或前景是由以下代表的:像Intel、AMD(基于Intel或Arm指令集的)和ARM等公司提供的通用处理器(GPP);来自像nVidia和AMD(以前是ATI并于2006年被AMD收购)等的图形处理单元(GPU);来自TI和Analog Device的数字信号处理器(DSP);来自Xilinx、Altera等的现场可编程门阵列(FPGA);来自Cavium和Tilera的多核/众核处理器;以及专用集成电路(ASIC)或片上系统(SoC)。

通用处理器(GPP):

GPP用于通用处理,即试图成为全能的(a jack of all trades),其基于被思考超过40年的很老但经过验证的硬件体系架构。其主流目的是运行用户界面(UI)和高度交互式UI密集型应用,像MSWord、Excel、电子邮件等,带有支持性操作系统(例如,Windows和Linux)。影响功耗的硬件特性是多级高速缓存、复杂的硬件存储器管理单元、大型总线和大型时钟结构。总之,它们消耗大量的电力来执行这些任务。从软件开发的角度来看,它被认为是到目标的最简单的软件编程模型。这是从用户开发连续或串行执行的单个线程的角度来看的。当并行化或多个硬件线程(大于大约四个线程)被引入时,高效地编程它们的能力变得更加困难。这是由于从根本上该体系结构不是为支持并行线程操作而开发的事实,并且因此硬件体系架构需要大量的开销复杂性来进行管理。软件编程模型要求引入API或语言扩展,以支持多个软件线程的定义。虽然这不必定是复杂的,但不幸的是,当前的GPP硬件体系架构要求这种复杂性。

在高级别,已经广泛地在世界上每个超级计算机中与C、C++、Fortran等使用多年的API是MPI(消息传递接口)API,这从二十世纪90年代初期开始的工业标准。这是不限制硬件实现路径的非常简单、很好理解的API。MPI API允许以独立于硬件的方式对软件线程和通信的定义。这与OpenMP、Coarray Fortran、OpenCL等以及固有地指示假设的底层硬件模型并且因此限制解释灵活性并造成前向兼容性问题的其它语言/API不同。换句话说,利用这些后面的语言/API,程序员需要对每个作为目标的新硬件平台重写程序。

图形处理单元(GPU):

GPU在历史上是为处理数据的显示并以其为目标而开发的。它们是在体系架构上受其核心外(外部)存储器模型需求和核心内存储器模型需求约束的硬件。核心外存储器要求GPP将数据放在GPU存储器空间中。接着,GPU拉入数据,以流水线方式对数据进行操作,并接着将数据放回到其外部存储器空间中。从这里,数据可以被发送到显示器,或者GPP需要将数据移出GPU存储器空间,以在通用处理之下在操作中被进一步使用/存储。硬件中的低效是由于(1)四处移动数据以支持核心外硬件约束所需的支持和(2)有限的核心内存储器结构,其中数据被局限于在流线型流水线中被处理——类似于深度流水线SIMD机。结果是由于处理数据的硬件低效造成的高功率。所使用的软件编程模型是极其硬件为中心的OpenCL、CUDA等,并且因此实现效率是复杂的,而且不是非常可移植的,当试图移动到新的硬件目标平台时代码必须被重写和重新结构化。

数字信号处理器(DSP):

DSP可以被看作是具有已精简并且针对通用信号处理的指令集的GPP。它们遭受与其大哥哥/姐姐GPP同样的高速缓存、MMU和总线困境。此外,任何真正高吞吐量的处理功能,诸如Viterbi/Turbo解码或运动估计,已被精简至具有有限能力的ASIC加速器(通常只支持商业市场中有限的一组特定标准)。当目标在于单个硬件线程时,编程模型类似于GPP,但是由于在执行单元硬件中的信号处理指令方法,实现任何高效率都要求对功能手工装配或使用DSP公司的库。当创建多个并行DSP体系架构时,类似于上面讨论的并行GPP,问题进一步加剧。

现场可编程门阵列(FPGA):

FPGA是完全不同的硬件方法,其中功能性的定义可以在位级完成并且逻辑功能之间的通信是通过可编程线结构完成的。这种硬件方法引入了巨大的开销和复杂性。由于这个原因,高效的编程以硬件编程语言(诸如Verilog或VHDL)执行。由于可编程布线和可编程逻辑引入时序收敛障,类似于在ASIC/SOC中所需的但是具有结构化的线结构(fabric),因此编译过程复杂得多。当一次只比较一个功能时,由于FPGA只确切地执行它被编程用于的功能并且不执行任何其它功能,因此关于特定功能的功耗和性能吞吐量显然比GPP或GPU好得多。但是,如果GPP的所有能力都尝试要在FPGA中实现,则显然比GPP差很多。在硬件级别编程的难度是显而易见的(例如,时序收敛)。编程FPGA实际上不是“编程”,而是逻辑/硬件设计,并且VHDL/Verilog是逻辑/硬件设计语言,而不是编程语言。

多核/众核:

从硬件的角度来看,几乎所有的多核/众核体系架构都采用核心处理器、高速缓存、MMU、总线以及所有关联的逻辑,并且在管芯上复制它们,其周围具有通信总线/结构。多核体系架构的例子是IBM的Cell、Intel和AMD的四和N多核、Cavium的和Tilera的产品、多种自定义的SoC,等等。此外,在多核体系架构中实现的功率降低很大程度上是微不足道的。这个很明显的结果源于多核方法仅仅复制GPU方法的事实。多核体系架构中唯一真正的节能是因为核心在附加的通信总线上连接而现在不被需要的一些IO驱动器的减少,而之前它们是在单独的管芯上。因此,多核方法不会导致任何更少的功率。其次,软件编程模型没有比上文讨论的GPP有所改善。

专用集成电路(ASIC)或片上系统(SoC):

对其它方法识别出的问题清单就是对于特定的市场为什么人们常常认为要实现性能效率和成本目标的唯一途径就是开发具有特定GPP、DSP和ASIC加速器以形成SoC的自定义芯片。SoC在需要的地方提供编程能力并且为特定功能提供ASIC性能,以平衡功耗和成本。但是,现在软件编程模型甚至比依据上述可编程硬件方案所讨论的更加复杂。此外,SoC可能导致与完全可编程方案相关联的灵活性的损失。

所有这些可编程硬件方案中的共同点是如今在市场上所代表的软件编程模型集中在外推执行模型和底层硬件体系架构,以更高效地支持其目标确定。将执行模型的特征外推到软件编程模型的焦点可以在看一些更流行的并行编程语言的关键特性中被观察到。代表如今被使用的方法的几个例子是OpenMP、OpenCL和MPI。

OpenMP:

OpenMP(开放式多处理)是支持共享存储器多处理编程的行业标准API。OpenMP包括一套编译器指令、库例程和影响运行时行为的环境变量。它通过并行化的方法支持多线程,由此主线程(一系列连续执行的指令)分支出指定数量的从线程并且任务在它们当中被划分。接着,线程并发运行,其中运行时环境依赖于使用情况、机器负荷和其它因素将线程分配到不同的资源或处理器。线程的数量可以由运行时环境基于环境变量或者在代码中利用函数指定。利用将使线程在打算要并行运行的代码部分被执行之前形成的预处理器指令,该代码部分被相应地标记。在C/C++中,这是通过使用#pragmas。在缺省情况下,每个线程独立地执行代码的并行部分。任务并行化和数据并行化都可以实现。在并行代码的执行之后,线程加入回到主线程,其继续到程序结束。图1示出了利用OpenMP的多线程,其中主线程分支出并行执行代码块的多个线程。为了支持线程间通信,OpenMP的扩展可以被使用或者使用另一不同的行业标准API,诸如MPI(消息传递接口)。

OpenCL:

开放式计算语言(OpenCL)是用于写程序的框架,其目标是启用跨异构平台的执行,该平台包括中央处理单元(CPU)、图形处理单元(GPU)、数字信号处理器(DSP)、现场可编程门阵列(FPGA)和其它处理器。它被设计为利用有限的抽象支持贴近硬件的接口。正因为如此,基于OpenCL的程序一般要求对底层硬件的高级知识,以实现可接受的性能。当重新以不同的硬件体系架构作为目标时,OpenCL程序也要求重构。如图2中所示,OpenCL支持严格的处理模型、控制模型、存储器模型和通信模型层次结构。

OpenCL支持利用ANSI C编程语言写内核,其中具有一些限制和增加。它不允许使用函数指针、递归、位字段、变长数组和标准头文件。该语言被扩展,以支持关于向量类型和操作的并行化、同步和函数,以与工作项目/组一起工作。应用编程接口(API)被用来定义并接着控制该平台。在进程(course)级别,OpenCL支持利用基于任务和基于数据的并行化的并行计算。

MPI:

消息传递接口(MPI)是标准化的独立于语言的、可扩展且可移植的消息传递通信协议API。MPI API打算要以独立于语言的方式利用特定于语言的语法(绑定)提供(已经被映射到节点/服务器/计算机实例的)一组进程之间的必需虚拟拓扑、同步和通信功能。MPI API标准定义库例程的核心的语法和语义,包括对可点到点定义的各种行为和集体/广播通信发送/接收操作及过程同步的支持,但不限于此。MPI仍然是目前在高性能计算中使用的主导模型。

MPI API是最硬件独立的方法,并且因此被用作所给出的例子的基础。

用于在多处理器系统上并行执行的软件应用的开发的现有技术方法一般需要在开发的容易性与并行执行的效率之间权衡。换句话说,情况一般是,对于程序员来说开发过程越容易,结果产生的可执行程序在硬件上并发执行得更低效;反过来,越高效的并行执行一般需要程序员的显著更多的努力,即更详细地设计程序以避免低效处理并使用目标硬件的效率增强特征。

因此,为了方便应用或系统级视图的软件描述以驱动软件编程模型及其随后用于确定执行模型和底层硬件体系架构,改进的系统和方法是期望的。还期望提供通过这个过程启用应用的高效可编程实现的机制的改进。



技术实现要素:

公开了具有为高性能和低功耗进行优化的处理元件的多处理器系统及编程处理元件的关联方法的各种实施例。

第一实施例涉及包括提取单元和多个地址生成器单元的处理器装置。提取单元被配置为接收多部分指令,其中多部分指令包括多个字段。第一地址生成器单元被配置为依赖于多个字段中的第一字段执行算术运算。第二地址生成器单元被配置为生成多个地址中的至少一个地址,其中每个地址依赖于多个字段中的相应字段。

涉及控制多条数据路径的第二实施例涉及包括提取单元和执行单元的处理器装置。提取单元被配置为接收多部分指令,其中多部分指令包括多个数据字段。执行单元包括多个流水线单元,其中执行单元被配置为:1)依赖于多个字段中的第一字段使用多个流水线单元中的给定流水线单元执行第一操作;及2)依赖于多个字段中的第二字段并行地使用多个流水线单元中的至少两个流水线单元执行第二操作。

涉及累加转发的第三实施例涉及包括提取单元和执行单元的处理器装置。提取单元被配置为接收指令。执行单元包括多个流水线单元,其中多个流水线单元中的每个流水线单元包括累加器单元,其中执行单元被配置为:1)依赖于接收到的指令使用多个流水线单元中的第一流水线单元执行第一操作,以生成结果;2)将结果存储在多个流水线单元中的第一流水线单元的累加器单元中;及3)将存储在多个流水线单元中的第一流水线单元的累加器单元中的结果传送到处理器的累加器单元。

涉及地址生成器单元耦合的第四实施例涉及包括提取单元和多个地址生成器单元的处理器装置。提取单元被配置为接收多部分指令,其中多部分指令包括多个字段。第一地址生成器单元被配置为依赖于多个字段中的第一字段执行第一操作,以生成第一结果。第二地址生成器单元被配置为依赖于多个字段中的第二字段和第一结果执行第二操作。

第五实施例涉及能够利用单部分/多部分确定接收指令的处理器装置。处理器装置可以包括被配置为接收指令的提取单元以及执行单元。执行单元可以包括多个流水线单元。执行单元可以被配置为:1)响应于确定指令是多部分指令而使用多个流水线单元中的第一流水线单元执行第一操作,其中多部分指令包括多个字段,其中第一操作依赖于多个字段中的第一字段;及2)依赖于多个字段中的第二字段并行地使用多个流水线单元中的至少两个流水线单元执行第二操作。

第六实施例涉及能够在重复循环期间将处理器的未使用部分断电的处理器装置。处理器装置可以包括提取单元和执行单元。提取单元被配置为接收多条指令并且基于接收到的多条指令识别至少一个重复的指令序列。这至少一个重复的指令序列包括所述多条指令中的至少一条指令。执行单元包括多个流水线单元,其中执行单元被配置为:1)基于识别出的重复指令序列选择性地禁用多个流水线单元中的第一子集至少第一周期;及2)依赖于识别出的重复指令序列选择性地禁用多个流水线单元的第二子集至少第二周期。

给出了用于开发针对多处理器系统上并行执行的软件的方法的实施例。

可以接收指定期望系统的(例如目标在于在多处理器系统上部署和执行的应用的)多个视图的输入。每个视图可以代表或指定系统的相应方面,并且视图可以共同地提供可由编译器(或其它软件工具)用来生成可部署到多处理器系统供高效并行执行的可执行程序的信息。

输入可以以多种多样的形式中的任何一种形式、并且经由多种多样的工具中的任何一种被接收。例如,在一些实施例中,输入可以由用户提供,即可以是用户输入。在其它实施例中,根据期望,输入可以从另一系统或过程、从存储介质等等接收。而且,输入可以本地提供,或者可以经网络(诸如局域网(LAN)或者像因特网的广域网(WAN))接收。在一种示例性实施例中,用户可以在电子数据表中指定视图。在另一种示例性实施例中,用户可以向向导(即引导用户通过指定过程的图形用户界面(GUI))录入输入,例如经由提示、有帮助的建议等等。在另一实施例中,用户可以使用检查表来管理输入/指定过程,其中要指定的每一项(例如视图、子视图等等)在检查表中表示,并且其中检查表指示是否每个检查表项都已经被指定(或者还没有)。在另一种示例性实施例中,可以提供一个或多个模板或表格,用户可以利用指定视图的信息填充它们。

每个视图可以包括应用的操作或执行的相应方面或者是该方面的表示。多个视图可以包括存储器视图、通信视图、控制视图和处理视图。其它视图也可以根据期望被定义或指定。在一种实施例中,每个视图可以包括或指定多个指定视图的更详细属性的子视图(或者“刻面”)。例如,每个视图可以包括大小、行为和可访问性子视图(或刻面),其中每个子视图可以在它作为一部分的视图的上下文中具有特定的意义。

因此,例如,存储器视图可以指定应用需要或供应用使用可用的存储器的大小(或量),即由应用用来处理数据的存储器结构大小;存储器的行为,即存储器结构按时间行为表现的方式;及存储器可访问性,即存储器结构被例如应用和/或系统的可访问性。

类似地,输入可以定义或指定通信视图,包括定义通信视图的相应子视图,例如通信大小、行为和可访问性;控制视图,包括控制大小、行为和可访问性;以及处理视图,包括处理大小、行为和可访问性。

要注意的是,在一些实施例中,一些视图或子视图可以通过其它子视图或视图的指定被自动定义或指定,例如通过同一个或其它视图的子视图。因此,例如,一旦存储器大小、行为和可访问性被指定,通信行为就可以自动被指定。以另一种方式考虑,在一些实施例中,视图可以被“过指定”或“超定”,类似于线性方程的超定系统,其中方程的数量超过了变量的数量。

应当注意的是,本文中所使用的特定术语或标签仅仅是示例性的,并且任何名称都可以根据期望被用于本文公开的新颖组件、信息和过程。例如,根据期望,视图或方面也可以被称为模型等,并且本文公开的子视图可以被称为子模型、刻面、性质等,等等。

一旦系统的视图已经被指定或定义,代表视图的信息就可以被包括在应用的源代码中。这种包括可以以多种多样方式当中的任何一种来执行。例如,在一些实施例中,信息可以被包括在应用的一个或多个头文件中。在其它实施例中,信息可以被包括在一个或多个动态链接库(DLL)或宏定义中,在其它应用程序元件或组件当中。更一般而言,根据期望,代表视图的信息可以以任何方式并以任何形式被结合到应用源代码中。

源代码可以被处理,例如被编译器或其它工具,包括分析代表为系统指定或定义的多个视图的信息。例如,在一种实施例中,编译器可以被配置为识别应用源代码中代表多个视图的信息,并且可以提取并分析该信息。在其它实施例中,编译器可以原地分析该信息。

可执行程序可以基于处理被生成,其中可执行程序可部署到多处理器系统,用于高效的并行执行。换句话说,编译器可以基于处理(包括对指定的视图的分析)生成可执行程序。

因此,本技术的实施例可以解决如上指出的现有技术软件开发方法的各种缺点,从而允许用户指定关于系统的操作(例如,多处理器系统上应用的操作)的各种需求或约束,其中这些指定的需求或约束可以被编译器(或其它工具)用来生成可以在系统上高效执行的可执行代码。

附图说明

图1示出了利用OpenMP的多线程,其中主线程分支出多个并行执行代码块的线程;

图2示出了OpenCL的严格的处理模型、控制模型、存储器模型和通信模型层次结构;

图3是示出多处理器系统(MPS)的一种实施例的框图;

图4是示出MPS连接方案的一种实施例的框图;

图5是示出MPS结构的一种实施例的更详细的图;

图6示出了根据图5的体系架构例子的由均匀地穿插DMR(圆圈)的PE(方块)组成的示例MPS;

图7是示出动态可配置处理器(PE)的一种实施例的框图;

图8是根据一种实施例的用于开发以在多处理器系统上并行执行为目标的应用软件的方法的流程图;

图9A-9B示出了两种常见的2D滤波组织方案;

图10示出了具有单个过程的图像滤波框图;

图11示出了具有多个过程的图像滤波框图;

图12示出了用于示例视频2D滤波器系统的MPS上的两种不同资源布局;

图13是示出使用单个过程的FIR滤波器的框图;

图14是示出利用多个过程的FIR滤波器的框图;

图15示出了用于样本缓冲区的存储器结构;

图16示出了存储器通信行为随时间推移的结构;

图17示出了用于FIR滤波器的一部分的存储器通信行为随时间推移的结构;

图18示出了9阶段PE流水线的一种实施例的流水线阶段;

图19示出了单个PE数据路径体系架构和改进的PE数据路径体系架构的实施例的框图;

图20是示出数据路径的一种实施例的框图;

图21是示出执行累加器转发的两个PE的一种实施例的框图;

图22是示出PE的地址生成逻辑的一种实施例的框图;

图23是示出地址生成单元(AGU)的一种实施例的框图;

图24是环形缓冲区的一种实施例的概念性说明;

图25是示出图24的环形缓冲区的控制的一种实施例的框图;

图26示出了示出常规编程模型和HyperOp编程模型的两个框图;

图27示出了HyperOp指令的一种实施例;

图28是示出指令提取和解码单元的一种实施例的框图;

图29是示出接收和执行多部分指令的第一实施例的流程图;

图30是示出接收和执行多部分指令的第一实施例的流程图;

图31是示出由处理器执行操作的一种实施例的流程图;

图32是示出由处理器执行操作的一种实施例的流程图;

图33是示出操作处理器的一种实施例的流程图;及

图34是示出操作具有多个流水线单元的处理器的第一实施例的流程图。

虽然本公开内容容许各种修改和另选形式,但是其具体实施例作为例子在附图中示出并且将在本文中详细描述。但是,应当理解,附图和对其的详细描述不是要将本公开内容限定到所示出的特定形式,相反,其意图是覆盖所有属于由权利要求限定的本公开内容的精神和范围之内的修改、等同物和另选方案。本文所使用的标题仅用于组织目的,并且不意味着被用来限制本描述的范围。如贯穿本说明书所使用的,词“可以”在许可的意义(即,意味着有可能)而不是强制的意义(即,意味着必须)上被使用。类似地,词“包括”的意思是包括但不限于。

各种单元、电路或其它组件可以被描述为“被配置为”执行一个或多个任务。在这种上下文中,“被配置为”是一般地指“具有”在操作期间执行一个或多个任务的“电路系统”的结构的广义阐述。照此,即使当单元/电路/组件当前为打开时,单元/电路/组件也可以被配置为执行该任务。一般而言,构成对应于“被配置为”的结构的电路系统可以包括硬件电路。类似地,为了描述的方便,各种单元/电路/组件可以被描述为执行一个或多个任务。这种描述应当被解释为包括短语“被配置为”。记载被配置为执行一个或多个任务的组件明确地不是要对那个单元/电路/组件援引35 U.S.C.§112第六段的解释。更一般而言,任何元件的记载都明确地不是要对那个元件援引35 U.S.C.§112第六段的解释,除非具体地记载了语言“用于......的装置”或“用于......的步骤”。

具体实施方式

引入作为参考

发明人为Michael B.Doerr、William H.Hallidy、David A.Gibson和Craig M.Chase的、标题为“Processing System With Interspersed Stall Propagating Processors And Communication Elements”的美国专利No.7,415,594的全部内容通过引用被结合于此,就好像在本文完全被描述了一样。

术语

计算机系统——术语“计算机系统”指各种类型的计算或处理系统中的任何一种,包括个人计算机系统(PC)、大型机计算机系统、工作站、网络设备、互联网设备、个人数字助理(PDA)、网格计算系统或者其它设备或设备的组合。一般而言,术语“计算机系统”可被广泛地定义为涵盖具有执行来自存储器介质的指令的至少一个处理器的任何设备(或设备的组合)。

软件应用——术语“软件应用”(在本文也被仅称为“应用”)旨在具有其普通含义的全部范围,并且包括可以被存储在一个或多个存储器中并且由一个或多个处理器执行的任何类型的程序指令、代码、脚本和/或数据或者它们的组合。示例性软件应用包括以基于文本的编程语言(诸如C、C++、FORTRAN、JavaTM、汇编语言等)编写的程序;图形程序(以图形化编程语言编写的程序);汇编语言程序;已被编译成机器语言的程序;脚本;以及其它类型的可执行软件。一般而言,程序是指定一个或多个数据结构并且指定为执行一个或多个功能而关于那些结构中的数据要采取的过程步骤的一组指令。程序常常目标在于特定的机器体系架构。更抽象地说,程序的过程步骤可以被称为其算法。

应用可以在多处理器系统(MPS)的一个或多个处理器上执行并且可以从MPS的一个或多个本地存储器读数据和/或向其写数据。应用可以包括一个或多个计算任务,其中每个任务通常在MPS的单个处理器上运行并且可以与来自一个或多个应用的一个或多个任务共享该处理器。应用可以执行特定的功能或操作。如果应用包含多于一个任务,则这些任务可以彼此通信,以执行功能或操作。

MPS可以同时执行多个应用,例如当应用彼此并行地执行时。应用可以彼此通信,并且由应用执行的相应功能或操作可以建立在彼此之上,以执行更大或更高级的功能或操作。

软件编程模型——简单地说,软件编程模型是机器及其操作环境的用户视图。软件编程模型包括应用可以被编写的语言(或多个语言)以及提供超出直接在(一种或多种)语言中表述的抽象、封装功能的库。软件编程模型还包括应用通过其与自身外面的实体(I/O、扩展存储器,等等)交互并且通过其表述关于应用的元信息(例如,性能约束或需求)的机制。编程模型的两个主要部分是代表并行化如何在应用中表述或从应用中得出的控制模型,以及代表应用的并行实体如何共享信息的通信模型。

软件编程模型给出了当应用最终被执行时将发生的实际控制和数据流和通信的“理想化”视图。操作的语义是“好像”底层实现精确地如在软件编程模型中描述的那样被执行;所采取的实际步骤并不重要,只要获得相同的效果(答案)就可以。实际的实现步骤可能由于代码效率和/或数据大小、速度、功耗等原因而不同。

软件编程模型的重要考虑因素是它同时为用户提供对用户来说方便、自然和直观地支持应用(及其操作)的表述的机制并且同时还捕获足以通过工具集(编译器等)并接着依据执行模型支持应用的正确和高效处理的信息。

硬件编程/执行模型——硬件编程模型或执行模型代表应用如何被执行。它定义对应于应用的逻辑和数据对象的信息集合如何被表述并且该信息如何随时间推移被处理以实现应用所指定的功能。系统工具(编译器、并行化提取器、布局布线(place-and-route),等等)的目的是将应用从其软件编程模型表述转换成对应的执行模型表述。执行模型包括支持由软件编程模型(例如,通过库)描述的功能以及监视、调解和管理硬件的使用(例如,通过O/S)所需的机制。

执行模型可以相当紧密地对应于软件编程模型,或者它可以相当地不同;软件编程模型的不同方面可以具有与执行模型的不同程度的直接对应性。对应的级别与底层硬件体系架构与原始(软件)编程模型多密切地相像有关。越相像,对应性越高。

底层硬件体系架构——底层硬件体系架构是计算在其上执行的物理设备的体系架构。在这个级别,所有操作直接对应于设备所执行的物理操作。底层硬件体系架构可以被描述的抽象级别可以从高级概念体系架构(对于在设计-空间探测过程中的评估、模拟、特征化和权衡分析有用)到低级实现体系架构(对驱动要制造的设备的物理设计有用)变化。甚至在实现级别,底层硬件体系架构的不同实例也可以在能力或容量上有所不同。例如,一个实例可以实现10×10网格的处理单元,而另一个可以只实现6×6网格。虽然容量不同,但是每个仍与底层硬件体系架构保持一致。

自动——指的是在没有直接指定或执行动作或操作的用户输入的情况下由计算机系统(例如,由计算机系统执行的软件)或设备(例如,电路系统、可编程硬件元件、ASIC,等等)执行的动作或操作。因而,术语“自动”与由用户手动执行或指定的操作(其中用户提供输入来直接执行操作)形成对照。自动过程可由用户提供的输入启动,但是“自动”执行的后续动作不是用户指定的,即不是“手动”(其中用户指定每个要执行的动作)执行的。例如,通过选择每个字段并且提供指定信息的输入(例如,通过键入信息、选择复选框、单选选择等)来填写电子表单的用户是在手动填写该表单,虽然计算机系统必须响应于用户动作来更新表单。表单可由计算机系统自动填写,其中计算机系统(例如,在计算机系统上执行的软件)分析表单的字段并且在没有任何指定字段的答案的用户输入的情况下填写表单。如上面所指示的,用户可调用表单的自动填写,但不参与表单的实际填写(例如,用户不是手动指定字段的答案,而是这些字段被自动地完成)。本说明书提供了响应于用户采取的动作而自动执行的操作的各种例子。

MPS系统概述

描述多处理器系统(MPS)以及关联方法的各种实施例。多处理器系统(MPS)可以被定义为包括多个处理元件(PE)的系统。MPS可以具有穿插在PE之中的多个存储器,或者另选地可以具有单个共享存储器。如本文所使用的,术语“处理元件”指的是处理器或CPU(中央处理单元)、微处理器或处理器核心。虽然MPS可以包括任何数量的两个或更多个PE,但是要注意的是,一些MPS可以包括比通常只包括一个通用处理器(GPP)或几个GPP的传统计算机系统显著更多的PE。例如,一些MPS可以包括4、8、16、32或64个PE(其它例子包括例如几十、几百甚至上千个PE)。在一些实施例中,由于其用于低功耗目的的特殊构造,适于大型MPS的PE可以比由传统计算机系统使用的通用处理器更能量高效。

MPS还可以包括互连PE和/或存储器的互连网络(IN)。PE和存储器可以在一个、两个、三个或更多个维度——包括环形维度(例如,循环或环)——中互连。较高维度的MPS可以被映射到具有较少维度的制造介质上。例如,具有四维(4D)超立方体形状的MPS可以被映射到硅集成电路(IC)芯片的3D堆叠上、或单个2D芯片上,或者甚至计算单元的1D行。而且,低维度的MPS可以被映射到更高维度的介质。例如,计算单元的1D行可以以蛇形形状布置到IC芯片的2D平面上,或盘绕到芯片的3D堆叠中。MPS可以包括多种类型的计算单元以及处理器和存储器的穿插布置。包括在广义的MPS中的还有MPS的层次结构或嵌套布置,尤其是由互连的IC芯片组成的MPS,其中IC芯片包含一个或多个还可以具有更深层次结构的MPS。

如本文所使用的,术语MPS既覆盖相对同质的处理器集合,以及异质的通用集合,又覆盖在所谓的“平台IC”芯片上集成的专用处理器。平台IC芯片可以包含几个到许多个处理器,通常与共享存储器和可能的片上网络互连。在MPS与“平台IC”芯片之间可以有或者可以没有差别。但是,“平台IC”芯片可以在市场上销售,以解决在特定垂直市场中的特定技术要求。

一般而言,用于MPS的存储器可以按层次组织,快速存储器在顶部,而更慢但更高容量的存储器在层次结构中逐层向下。在MPS中,位于层次结构顶部的支持存储器(SM)可以位于每个PE附近。每个支持性存储器可以专门化为只保持指令或只保持数据。用于特定PE的支持性存储器可以是那个PE私有的或者与其它PE共享。

沿存储器层次再往下,可以有更大的共享存储器,诸如半导体同步动态随机存取存储器(SDRAM),其具有比与PE相邻的支持性存储器大许多倍的位容量。SDRAM可以位于与PE和支持性存储器分开的一个或多个IC芯片上,以使其制造专门化。沿存储器层次再往下,可以有其它类型的存储器,诸如闪速存储器、磁盘和光盘。

MPS可以用软件程序进行编程,以实现特定功能。每个功能可以由MPS中的一个或多个PE执行。多个程序常常可以彼此并发地在MPS上执行。程序可以一起执行并彼此通信,以通过采用并行处理技术执行更复杂的功能或者更快地执行更简单的功能。PE之间的这种协调在本文被称为合作处理。

MPS可以足够快地执行应用或程序,使得它可以与相关联的数据和命令源可以提供输入数据和命令相比更快地接受输入数据和命令,并且可以以低到足以被忽略的等待时间提供结果。这种应用被称为无延迟的实时操作或者被称为“实时应用”。相关联的输入数据(或命令)可以被称为“实时数据”(或“实时”命令)。例如,MPS可以经由输入信号接收实时数据。应用、程序或功能中的一个或多个可以处理输入信号,并有可能基于一个或多个程序产生具有修改或附加的实时数据的输出信号。

图3——MPS框图和概述

图3是示出多处理器系统(MPS)的一种实施例的框图。在所示出的实施例中,MPS 10包括多个处理器元件(PE)和多个数据存储器路由器(DMR),其也可以被称为动态可配置的通信器或动态可配置的通信元件,它们被耦合成彼此传送数据和指令。如本文所使用的,PE也可以被称为PE节点,并且DMR也可以被称为DMR节点。

处理系统(MPS)10可以在目前使用GPMC、DSP、FPGA或ASIC的各种系统和应用中的任何一种中被使用。因此,例如,处理系统10可以在各种不同类型的计算机系统或需要计算的其它设备中的任何一种中被使用。在一种预期的实施例中,处理系统10被用作数字视频显示系统中的信号处理设备。

在一种实施例中,PE可以包括一个或多个被配置用于操纵数据的算术-逻辑单元(ALU)、一个或多个被配置用于控制ALU的指令处理单元(IPU)、一个或多个被配置为保持指令或数据的存储器以及各种类型的多路复用器和解码器。这种实施例可以包括多个端口(“处理器端口”),其中一些可以被配置用于连接到DMR并且其它可以被配置用于连接到其它PE。图7是PE的一种实施例的框图,并在下面进一步描述。

在一种实施例中,DMR可以包括一个或多个被配置为保持数据和指令的随机存取存储器(RAM)、可配置控制器、诸如纵横开关的网络开关、寄存器和多路复用器。这种实施例可以包括多个端口,其中一些端口可以被配置用于连接到PE(在本文中被称为PE型端口)并且其它端口可以被配置为连接到DMR(在本文中被称为DMR型端口)。要注意的是,对于任何给定的端口,不管是配置用于到DMR或从DMR还是到PE或从PE的连接,在特定时钟周期内通过这种给定端口可传送的数据的量在各种实施例中可以有所不同。例如,在一种实施例中,给定端口可以被配置为每时钟周期传送一个数据字,而在另一种实施例中,给定端口可以被配置为每时钟周期传送多个数据字。在又一种实施例中,给定端口可以采用诸如时分多路复用的技术来经多个时钟周期传送一个数据字,由此减少包括该端口的物理连接的数量。

在MPS 10的一种实施例中,每个PE可以包括为指令保留的小的本地存储器,并且可以包括非常少量的本地数据储存器。在这种实施例中,与每个PE邻近的DMR可以被配置为向给定PE提供操作数。在特定的实施例中,对于许多PE指令,给定PE可以在一个时钟周期中从邻近的DMR读取操作数、执行ALU操作并且将ALU结果存储到给定的邻近DMR。由此可以使来自一个PE的ALU结果在执行之后紧接着的时钟周期中对于几个其它PE可用。以这种方式产生结果可以使邻近PE的执行能够被密切协调或“紧耦合”。

如本文所使用的,从给定DMR或PE的角度来看,邻近DMR或PE指可以在特定的等待时间内从该给定DMR或PE进行访问的DMR或PE。在一些实施例中,定义邻近关系的程度的等待时间可以依赖于诸如像时钟速度的因素而改变。另外,在一些实施例中,可以定义多个邻近程度,这些程度可以对应于不同的访问等待时间。例如,在一种实施例中,“最接近的邻居”可以被定义为在其被请求的同一时钟周期期间可以提供数据的设备,“下一个最接近的邻居”可以被定义为在其被请求之后一个时钟周期内可以提供数据的设备,以此类推。在其它实施例中,预期其它度量可以被用来量化邻近关系。

在给定的MPS实施例中,一些DMR和PE可以与其它DMR和PE逻辑相邻。如本文所使用的,“逻辑相邻”指的是两个设备(诸如一个DMR和另一个DMR,或者一个DMR和一个PE)之间的关系,使得一个设备的一个或多个端口被直接连接到另一个设备的相应端口而不经过居间DMR或PE。另外,在给定的MPS实施例中,一些DMR和PE可以与在其它DMR和PE物理相邻。如本文所使用的,“物理相邻”指的是两个设备(诸如一个DMR和另一个DMR,或者一个DMR和一个PE)之间的关系,使得没有其它DMR或PE物理地位于这两个设备之间。

在一些MPS实施例中,诸如DMR和PE的逻辑和/或物理相邻的设备也被称为邻近或邻居设备。但是,要注意的是,在一些实施例中,给定设备之间的逻辑和/或物理相邻并不意味着给定设备之间的邻近关系或特定程度的邻近关系。例如,在一种实施例中,一个DMR可以直接连接到位于相当远的另一个DMR。这一对可以是逻辑相邻但不是物理相邻,并且从一个DMR到另一个的信号传播时间可能太大,以至于无法满足邻居的等待时间需求。类似地,在一种实施例中,一个DMR可以在物理上与另一个DMR相邻,但不直接连接到其,并且因此在逻辑上不与其相邻。从一个DMR到另一个DMR的访问可以穿过一个或多个中间节点,并且结果产生的传输延迟可能太大,以至于无法满足邻居的等待时间需求。

依赖于MPS 10的给定实施例的技术和实现,DMR的多个端口的具体数目以及DMR存储器的大小可以对照DMR的整体期望执行速度和大小进行平衡。例如,一种DMR实施例可以包括4个PE型端口、4个DMR型端口和4K个存储器字。这种DMR实施例可以被配置为提供直接存储器访问(DMA)机制。在PE计算结果的时候,DMA机制可以允许给定的DMR高效地向其它DRM或从其它DRM、或者向MPS 10外部的位置或从MPS 10外部的位置复制数据。

在MPS 10的一种实施例中,数据和指令可以以几种不同的方式之一在DMR之中被传送。串行总线可以被提供给MPS 10中的所有存储器;这种总线可以被用来从外部存储器初始化MPS 10或者支持MPS数据结构的测试。对于短距离传送,给定PE可以被编程为直接向其邻居DMR或从其邻居DMR移动数据。为了经更长的距离传送数据或指令,通信通路可以在DMR的网络中被动态创建和销毁。

为了这种较长距离的数据传送,MPS 10内的互连DMR的网络可以构成用于通信通路的交换路由结构(SRF)。在这种实施例中,可以存在至少两种用于管理SRF中的通信通路的方法。第一种方法是通过全局编程,其中路径可以通过软件控制来选择(例如,或者由人类程序员或者由具有路由能力的编译器)并且指令可以被编码到DMR配置控制器中以适当地编程纵横开关。为了创建通路,沿通路的每个DMR可以明确地利用特定的路由功能进行编程。在通路被频繁地创建和销毁的动态环境中,可能需要大量的纵横开关配置代码,其存储又会消耗潜在有限的DMR RAM资源。

用于管理通信通路的另一种方法被称为“蛀洞路由”。为了实现蛀洞路由,每个DMR可以包括一组转向功能以及通过SRF停止和重启被称为消息的字序列的前进的机制。因为转向功能通常可以被所有的通信通路使用和重用,因此可能占用DMR RAM的配置码的数量会比用于上述全局编程方法的小得多。对于蛀洞路由方法,软件控制仍然可以被用来选择要由通路使用的特定链路,但是通路创建的过程(本文中也被称为设置)和解构/链路释放(本文中也被称为拆卸)可以在硬件中以最小的软件干预来实现。

为了防止数据字在通路上的潜在丢失,MPS 10的实施例可以沿通路在接收器和发送器之间实现流控制。流控制指如果其对应的接收器不再可以接收数据就可以停止发送器并且当其对应的接收器变得准备好接收数据时可以重启发送器的机制。因为停止和重启通路上的数据流与在蛀洞路由中停止和重启消息的前进有许多相似之处,所以这两者可以在集成方案中组合。

在一种实施例中,MPS 10可以包括在均匀阵列中连接在一起的多个PE和DMR,其中PE可以是完全相同的并且DMR可以是完全相同的。在均匀阵列中,大多数的PE可以是完全相同的并且大多数PE当中的每一个可以具有到DMR的相同数量的连接。而且,在均匀阵列中,大多数DMR可以完全相同并且大多数DMR当中的每一个可以具有到其它DMR和到PE的相同数量的连接。在一种MPS实施例中,PE和DMR可以以基本上同质的方式穿插。如本文所使用的,基本上同质的穿插指其中PE与DMR之比跨阵列的大多数子区域一致的布置。

以基本上同质的方式布置的均匀阵列可以具有某些有利的特性,诸如提供可预测的互连模式并且使软件模块能够跨阵列被重用。在一种实施例中,均匀阵列可以使得能够设计和测试PE和DMR的少量实例。接着,通过制造包括DMR和PE的单元,接着重复或“平铺”这种单元多次,系统可以被组装。这种方法可以通过公共系统元件的重用来降低设计和测试成本。

还要注意的是,PE和DMR的可配置本质可以允许多种多样的非均匀行为被编程,以在物理上均匀的阵列上发生。但是,在另选实施例中,MPS 10还可以利用不均匀DMR和PE单元形成,这些单元可以在规则或不规则阵列中被连接,或者甚至以随机的方式被连接。在一种实施例中,PE和DMR互连可以被实现为电路迹线,例如在集成电路(IC)、陶瓷衬底或印制电路板(PCB)上。但是,在另选实施例中,这种互连可以是多种多样的微型通信链路中的任意一种,诸如像用于电磁能量(即无线电或光能)的波导、无线(即无制导)能量、粒子(诸如电子束)或者分子上的电势。

MPS 10可以在单个集成电路上实现。在一种实施例中,多个MPS集成电路可以被组合,以产生更大的系统。MPS 10的给定实施例可以利用硅集成电路(Si-IC)技术来实现并且可以采用各种特征来考虑这种技术的具体特性。例如,Si-IC芯片上的电路可以被限制到薄平面。对应地,MPS 10的给定实施例可以采用PE和DMR的二维阵列,诸如在图3中所示的。但是,包括PE和DMR的不同布置的另选MPS实施例是预期的。

另外,Si-IC芯片上可用的布线密度可以比这种芯片之间的要高得多,并且每个芯片可以让特殊输入/输出(I/O)电路的周界与片上信号和片外信号相接口。对应地,MPS 10的给定实施例可以采用由芯片的核心中的PE和DMR的均匀阵列和沿芯片的周界的修改后的PE/DMR单元组成的稍不均匀的阵列。但是,包括均匀和修改后的PE/DMR单元的不同布置和组合的另选MPS实施例是预期的。

而且,由Si-IC电路执行的计算操作可以产生热量,这可以被IC包装除去。增加的IC包装可能需要附加的空间,并且通过并围绕IC包装的互连可能引起与路径长度成比例的延迟。因此,如上面所指出的,非常大的MPS可以通过互连多个芯片来构造。这种多芯片MPS实施例的编程可以考虑到芯片间的信号延迟比芯片内的延迟长得多。

在给定的Si-IC MPS 10实施例中,可以在单个芯片上实现的PE和DMR的最大数量可以由利用给定Si-IC技术可能的小型化以及每个PE和DMR的复杂性来确定。在这种MPS实施例中,PE和DMR的电路复杂性可以服从实现计算吞吐量的目标水平而被最小化。这种最小化的PE和DMR在本文中可以被称为流线型的。在一种MPS 10实施例中,用于PE的吞吐量的目标水平可以与以相同的Si-IC技术制成的最佳数字信号处理器(DSP)的算术执行单元的吞吐量具有可比性。但是,其中可以使用用于目标PE吞吐量的另选参照的其它MPS实施例是预期的。

在一些实施例中,MPS 10可以采用DSP和FPGA体系架构的最佳特征。就像DSP,MPS 10可以是具有多个处理单元和片上存储器的可编程芯片。但是,相对于DSP,MPS处理单元可以是流线型的,可以有多个MPS处理单元并且它们可以以新颖的方式被互连,以最大化它们之间数据移动以及片上和片下的数据移动的带宽。具有比DSP更多的处理单元可以允许MPS 10每单位时间做更多的乘法,并且流线型的处理单元可以最小化能量使用。具有内部并行化的许多DSP可以是面向总线的体系架构。在一些实施例中,MPS 10可以不包括总线,而是可以包括嵌在SRF中的邻近共享本地存储器(诸如在DMR中),其可以提供比面向总线的体系架构显著更高的总带宽。

与FPGA方法比较,一些MPS实施例可以具有更粗的粒度。例如,在一种MPS实施例中,操作可以具有自然字长度(例如,16位)并且如果使用是自然字长度的倍数的数据执行,则计算会是最高效的。在一些MPS实施例中,PE和DMR可以比在FPGA中实现的等同结构更密集,这会导致更短的平均布线长度、降低的布线电容和更少的能量使用。与FPGA实现形成对比,在一些MPS实施例中,MPS中的每个ALU可以是处理器(即,PE)的一部分,这可以便于操作数的提取和将结果写回到DMR中周围的快速存储器中。对于ALU、提取和写回操作的定时和时钟偏斜问题可以在IC芯片的设计过程中被解决一次并且不必像FPGA实现中典型的那样对每个新应用重新解决。

MPS拓扑和通信

图3中所示的MPS 10可以通过在PE之间穿插DMR来为PE提供到快速存储器的充足连接,如图所示。相对于隔离(即,非穿插)布置,这种布置可以减少给定PE访问DMR中的存储器所需的时间,并且在本文可以被称为穿插网格布置。在图3的实施例中,PE与DMR之比大约为1∶1。但是,可以包括PE与DMR的不同比率的其它MPS的实施例是预期的。

DMR与PE之间的连接在图3中没有明确示出,因为使用不同类型和数量的连接,可以有许多可能的连接方案。

图4——MPS连接方案

图4是示出MPS连接方案的一种实施例的框图。MPS连接方案20包括多个DMR和PE并且可以说明图3的MPS的一部分。在MPS连接方案20中,每个PE被连接到四个邻居DMR,同时每个DMR被连接到四个邻居PE以及四个邻居DMR。因此,MPS连接方案20可以说明上面讨论的PlanarA连接方案。

为了在MPS连接方案20中支持高带宽端口,端口之间(PE到DMR,或者DMR到DMR)的连接可以短(即,局限于邻居)并且是字宽的,这意味着在连接的数据部分中电导体(线)的数量可以与在ALU操作数中使用的位数相同。PE到DMR连接可以包括地址线。DMR到DMR连接可以不必具有地址线,但是可以具有用于流控制的线。

通过保持PE节点简单,大的阵列(例如,在一种MPS实施例中,16行乘16列=256个PE)可以以适度的成本被放在单个VLSI IC上。合适的VLSI技术可以包括但不限于互补金属氧化物半导体(CMOS)场效应晶体管,在硅或其它半导体中具有或不具有双极晶体管。

在一些MPS实施例中,节点之间的通信可以处于程序员控制之下。在MPS中,每个PE可以与邻近的DMR传送数据/指令,并且可选地通过那些DMR传送到其它DMR和PE。这对于在短距离上传送少量的数据是非常有效的。但是,对于较大的数据块或者更长的距离,使用DMA引擎来移动数据是更高效的,从而释放PE去执行ALU操作。

对于更长距离的块移动,一些MPS实施例可以提供用于在DMR之间进行存储器到存储器传送而不涉及PE的手段。PE可以通过与邻居DMR中的DMR型端口关联的特殊SM地址来间接地访问这种端口。这可以允许PE来创建用于发送消息的新通路并且随后拆卸这种通路,或者另选地来接收消息。PE还可以在邻居DMR中的SM缓冲区中保存要传送的数据块,接着指引邻居DMR通过与DMA操作关联的特殊SM地址开始这种操作。这可以在邻居DMR协调数据的DMA传送的时候允许PE继续其它任务。

MPS的各种实施例可以提供用于执行有用算法的有利环境。所关心的算法(例如,用于分析图像数据)可以被分解成ALU的流程图。每个流程图可以作为树、格网图或任何的任意网络(包括多条反馈/前馈路径)被映射到MPS阵列上。一个ALU的有限精度可以被扩展,以通过组合几个PE和DMR获得多字精确结果。当将流程图映射到MPS时,会出现PE/DMR节点之间与节点间距离成比例的通信延迟。而且,如果通信队列大或者如果重新配置频繁,则映射可能需要在每个节点处的更多的存储器。这些因素可以通过谨慎编程来补偿,该编程可以将通信延迟、排队和重新配置考虑在内。

脉动(Systolic)算法代表可以特别高效地映射到MPS的各种实施例的一类算法。脉动算法已经对矩阵算术、图像处理和信号处理中的多种多样的应用开发出来。在脉动算法中,许多处理器可以以同步的方式合作,以执行难的计算。在理想的算法实现中,每个处理器可以反复执行相同的操作(或者小的操作循环)——只要需要该算法,并且数据可以通过邻近的连接流过处理器的网络,其结果是数据字的平衡的产生和消费。如果所产生的每个中间结果数据字随后立即被后续的计算消费,则所需的存储器的量可以被最小化。脉动算法的优点可以包括通过使用标准的低成本VLSI技术来使用流线型处理器、最小化存储器需求以及实现高算术运算速率的能力。

MPS实施例可以每芯片具有许多处理器并具有整体MIMD体系架构,其可以被配置为模仿其它类系统的操作,诸如SIMD系统和分布式MIMD系统。在一些实施例中,MPS可以同时在芯片的不同区域中运行不同的算法。而且,为了节省功率,在一些实施例中,程序员可以选择性地启用和禁用到至少一些PE和DMR的时钟。因此,未用的PE和DMR可以被禁用。

PE/DMR结构

图5是示出MPS结构的一种实施例的更详细的图。在图5中,每个PE被四个DMR包围,它可以与这四个DMR传送存储器请求和消息。除在该结构边缘附近之外,每个DMR被四个其它DMR包围,在该结构边缘附近,每个DMR可以与芯片I/O端口相邻。每个DMR可以与邻近的DMR或芯片I/O端口进行通信,以设置通信通路并在所述通路上发送/接收消息。

MPS操作

图6示出了根据图5的体系架构例子的由均匀地穿插9×9阵列的DMR(圆圈)的8×8阵列的PE(方块)组成的示例MPS。程序可以被编译成被指派给PE的任务。第一示例程序已利用taskID=62被编译,并且被指派给阵列左上角中的特定PE。变量u、v、w是程序源代码中声明的通信变量,并且被指派给相邻DMR中的特定存储器地址;u和v是用于I/O端口的缓冲区,并且w是用于与其关联的DMR的片上网络通信的缓冲区。第二示例程序已利用taskID=71被编译,并且被指派给阵列的内部中的特定PE。变量x是声明的通信变量并且被指派给所示出的DMR。与变量x关联的通信通路从其被指派的DMR经由其它DMR延伸到位于顶行的I/O端口。如图所示,这两个示例程序不相互通信,但是它们可以通过向任务71添加另一通信变量以及其DMR之间的通路和与任务62相邻的DMR中的变量w容易地进行通信。

动态可配置的处理器

图7是示出可以被动态配置的处理元件(PE)的例子的框图。PE 300可以说明图3-6中所示的动态可配置处理器(DCP)。PE 300是动态可配置的,因为它具有重新编程其指令存储器的途径;在图7中,这是通过来自串行总线接口的加载路径。串行总线可以是连接所有DMR和PE存储器与总线控制器的次级互连网络,其中总线控制器可以被一个或多个PE以及被芯片I/O端口访问。为了重新编程PE,它可以被置于等待状态,接着其指令存储器用新程序被重写,程序计数器被设定,接着它可以从等待状态中被移除,以开始执行该新程序。PE 300包括被耦合成控制至少一个算术逻辑单元(ALU)320的指令处理单元(IPU)310。PE 300还包括耦合到多个多路复用器(在本文中也被称为mux)的多个数据输入端口301,mux又被耦合成选择用于ALU 320的至少第一和第二操作数输入。PE 300还包括经由mux被耦合成从ALU 320接收结果数据的多个数据输出端口302,以及被耦合成从指令处理单元310接收地址数据的多个地址端口303。

地址端口303可以被配置为传送用于读和写邻近DMR中的存储器的地址。数据输入端口301和数据输出端口302可以被配置为从邻近DMR和向邻近DMR传送数据。在所示出的PE 300的实施例中,数据输入端口301、数据输出端口302和地址端口303每个都包括四个端口,与图5的示例体系架构一致。

在图7的例子中,示出了单个ALU 320,这在如美国专利No.7,415,594中所描述的现有技术中是典型的。但是,其中每个PE具有更多ALU的另选实施例是预期的,因此其有可能具有高得多的处理吞吐量。在本说明书中随后示出和讨论这些例子。

PE 300可以被配置为对数据字执行算术/逻辑单元操作,其中选定的操作依赖于被IPU 310处理的当前指令。为了支持灵活的编程,IPU 310可以包括至少一个包括多个可寻址位置的指令存储器312、指令解码器314和地址生成器316,其中每个都经由多种多样的互连机制互连。在其它实施例中,预期IPU 310可以包含多于一个指令存储器或者可以包含附加的功能。进一步预期,在其它实施例中,在IPU 310示出的功能可以被分成不同类型的功能单元或者在单个功能单元中实现。

IPU 310可以被配置为经由耦合到数据输入端口301的程序加载路径接收程序数据,用于存储在指令存储器312中。指令存储器312还可以通过全局串行总线(未示出)被写和读。依赖于由指令解码器312进行的特定指令的解码,IPU 310可以被配置为控制耦合到数据输入端口301和数据输出端口302的各种mux,以将数据引导到邻近的DMR和从其引导数据。IPU 310可以还被配置为经由地址端口303向邻近的DMR传送由地址生成器316生成的地址,以例如读或写位于其中的RAM。地址生成器316还可以包括被配置为生成要从指令存储器312提取并由指令解码器314解码的下一个指令地址的程序计数器寄存器(未示出)。

在一种实施例中,PE 300可以不包括数据寄存器文件、数据高速缓存或者用于数据操作数或结果数据的任何本地储存器。在这种实施例中,PE 300可以被配置为利用包括在DMR中的、PE 300直接连接到其的存储器,作为可以从其读取数据操作数并可以向其写结果数据的快速存储介质。在一些实施例中,给定PE可以同时或者在不同的时间从不同的邻居DMR获得不同的数据。如下面更详细描述的,在一些实施例中,通过建立从这种远程DMR到给定PE的邻居DMR的通路,给定PE可以还被配置为读和写在该给定PE不直接连接到的DMR中的数据。

由PE 300实现的指令可以支持算术和逻辑运算以及元指令。PE指令的位可以足够长,以寻址用于两个操作数和一个结果的存储器,这可以允许这些值在一个时钟周期内被读和写。

要注意的是,其它实施例可以实现附加的指令或一组不同的指令。在一些实施例中,在要求一个或多个数据操作数的给定指令的执行期间,给定PE可以被配置为直接访问邻近DMR中的存储器,以访问所需的操作数。

PE 300可以被配置为执行元指令。如本文所使用的,元指令指可以对存储在PE指令存储器(诸如指令存储器312)中的指令执行操作的指令。基本元指令可以是从邻近的DMR中的RAM加载指令存储器312(即,加载覆盖段(overlay))。通过从DMR存储器加载指令存储器,数据与指令之间的存储器分区可以由软件编程确定。因此,应用程序员可以优化其软件,以便可用存储器的最佳利用。在一些实施例中,PE 300可以包括可修改IPU指令存储器或者在DMR存储器中保存指令存储器用于例如测试、误差分析和/或错误恢复的其它元指令。

ALU 320可以被配置为对至少定点数系统执行算术,包括由在特定PE 300实施例中被支持的指令定义的运算。例如,在一种实施例中,ALU 320可以被配置为执行定点加、减、乘、乘-累加、逻辑和移位运算。在一些实施例中,ALU 320可以被配置为保留从前一计算得到的进位位,用于支持扩展精度算术。在其它实施例中,ALU 320可以被配置为执行为实现特定算法选择的浮点算术或专用运算。

图8——开发用于并行执行的软件的方法的流程图

图8示出了根据一种实施例的用于开发针对在多处理器系统上并行执行的软件的方法。除其它设备之外,图8中所示的方法还可以结合本文所描述的任何计算机系统或设备一起使用。在各种实施例中,示出的一些方法元素可以被并发执行、以与所示不同的次序执行或者可以被省略。根据期望,附加的方法元素也可以被执行。如图所示,这个方法可以如下操作。

如x802中所示,在一种示例性实施例中,可以接收指定期望系统的(例如作为在多处理器系统上部署和执行的目标的应用的)多个视图的输入。每个视图可以代表或指定系统的相应方面,并且视图可以共同提供可由编译器(或其它软件工具)使用的信息,以生成可部署到多处理器系统供高效并行执行的可执行程序。

输入可以以多种多样的形式中的任意一种并且经由多种多样的工具中的任意一种被接收。例如,在一些实施例中,输入可以由用户提供,即可以是用户输入。在其它实施例中,根据期望,输入可以从另一系统或过程、从存储介质等等接收。而且,输入可以本地提供,或者可以经网络(诸如局域网(LAN)或者像因特网的广域网(WAN))被接收。在一种示例性实施例中,用户可以在电子数据表中指定视图。在另一种示例性实施例中,用户可以向向导(即,引导用户通过指定过程的图形用户界面(GUI))录入输入,例如经由提示、有帮助的建议等等。在另一实施例中,用户可以使用检查表来管理输入/指定过程,其中要指定的每一项(例如视图、子视图等等)在检查表中表示,并且其中检查表指示是否每个检查表项都已经被指定(或者还没有)。在另一种示例性实施例中,可以提供一个或多个模板或表格,用户可以利用指定视图的信息填充它们。

每个视图可以包括应用的操作或执行的相应方面或者是该方面的表示。多个视图可以包括存储器视图、通信视图、控制视图和处理视图。其它视图也可以根据期望被定义或指定。在一种实施例中,每个视图可以包括或指定多个指定视图的更详细属性的子视图(或者“刻面”)。例如,每个视图可以包括大小、行为和可访问性子视图(或刻面),其中每个子视图可以在它作为一部分的视图的上下文中具有特定的意义。

因此,例如,存储器视图可以指定应用需要的或供应用使用的可用的存储器的大小(或量),即由应用用来处理数据的存储器结构大小;存储器的行为,即存储器结构按时间行为表现的方式;及存储器可访问性,即存储器结构被例如应用和/或系统的可访问性。

类似地,输入可以定义或指定通信视图,包括定义通信视图的相应子视图,例如通信大小、行为和可访问性;控制视图,包括控制大小、行为和可访问性;以及处理视图,包括处理大小、行为和可访问性。

要注意的是,在一些实施例中,一些视图或子视图可以通过其它子视图或视图的指定被自动定义或指定,例如,通过同一个或其它视图的子视图。因此,例如,一旦存储器大小、行为和可访问性被指定,通信行为就可以自动被指定。以另一种方式考虑,在一些实施例中,视图可以被“过指定”或“超定”,类似于线性方程的超定系统,其中方程的数量超过了变量的数量。

应当注意的是,本文中所使用的特定术语或标签仅仅是示例性的,并且任何名称都可以根据期望被用于本文公开的新颖组件、信息和过程。例如,根据期望,视图或方面也可以被称为模型等,并且本文公开的子视图可以被称为子模型、刻面、性质等,等等。

一旦系统的视图已经被指定或定义,代表视图的信息就可以被包括在应用的源代码中,如在x804中所指示的。这种包括可以以多种多样的方式中的任何一种来执行。例如,在一些实施例中,信息可以被包括在应用的一个或多个头文件中。在其它实施例中,信息可以被包括在一个或多个动态链接库(DLL)或宏定义中,除了其它应用程序元件或组件外。更一般而言,根据期望,代表视图的信息可以以任何方式并以任何形式被结合到应用源代码中。

在x806中,源代码可以被处理,例如被编译器或其它工具,包括分析代表为系统指定或定义的多个视图的信息。例如,在一种实施例中,编译器可以被配置为识别应用源代码中代表多个视图的信息,并且可以提取并分析该信息。在其它实施例中,编译器可以原地分析该信息。

如在x808中所指示的,可执行程序可以基于处理生成,其中可执行程序可部署到多处理器系统,用于高效的并行执行。换句话说,编译器可以基于x806的处理(包括指定的视图的分析)生成可执行程序。

因此,本技术的实施例可以解决如上指出的现有技术软件开发方法的各种缺点,从而允许用户指定关于系统的操作(例如,多处理器系统上的应用的操作)的各种需求或约束,其中这些指定的需求或约束可以被编译器(或其它工具)用来生成可以在系统上高效执行的可执行代码。

以下给出以上技术的各种示例性实施例。

1.一种用于开发在多处理器系统中并行执行的应用软件的方法,该方法包括:计算机执行:响应于第一输入,指定期望系统的多个视图,其中这多个视图包括:存储器视图;通信视图;控制视图;和处理视图;将代表这多个视图的信息包括在应用程序的源代码中;处理应用程序的源代码,包括分析代表这多个视图的信息;以及基于所述处理生成可执行程序,其中该可执行程序可部署到多处理器系统,供并行执行。

2.如条款1所述的方法,其中所述指定多个视图包括:为每个视图指定:大小;行为;及可访问性。

3.如条款1所述的方法,其中输入包括被接收到以下至少一个的用户输入:向导;图形用户界面;电子数据表;或数据文件。

4.如条款1所述的方法,其中所述将代表多个视图的信息包括在在应用程序的源代码中包括将信息包括在以下一个或多个中:应用程序的一个或多个头文件;用于应用程序的宏定义;或者一个或多个动态链接库(DLL)。

5.如条款1所述的方法,其中所述处理和所述生成是由编译器执行的。

6.如条款1所述的方法,其中多处理器系统包括HyperX体系架构。

更多实施例

以下给出以上技术的更多示例性实施例的描述,但是应当注意的是,所公开的实施例仅仅是示例性的,而不是要将技术的实现限定到任何特定的形式、功能或外观。两个示例性实施例作为具体的(非限制性)用例给出:成像滤波器和有限脉冲响应(FIR)滤波器。

定义的系统的视图和过程

在系统中(实时的或者其它的),数据通常是作为流被接收的(或者真正的或者概念上的),不管是从无线电接收器、图像传感器还是其它输入收集设备。期望所接收的数据以对算法及其代表性数据结构自然的方式被处理。这会使处理要进行处理的样本、块或混合形式的数据结构的能力成为必需。这还可以意味着处理系统的通信和存储器体系架构可能需要是实时动态的并且适应性的,以支持各种算法和数据结构系统。

示例性用例:成像滤波器

作为一个例子,考虑由等式1特征化的示例性成像滤波器:

其中t是时间,r是行索引,c是列索引,x[r,c,t]是输入像素,h[r,c,t]是滤波器系数,并且y[r,c,t]是输出像素。

总和是跨2M+1行和2N+1列的,使得滤波器的维度存储器大小是(2M+1)乘以(2N+1);并且最小等待时间是期望的。

使用成像滤波器系统来说明图8的方法

示例性成像滤波过程在图9A中用图示出。在这种方法中,像素的数据流(像素数据)通常按行来接收。一旦足够多行的数据被接收以满足滤波器和/或边界条件的数据需求,如图所示,2维滤波器就可以跨数据水平运行,以创建滤波后的图像。图9A的方法在图10中以框图形式表示,图10示出了具有单个过程的图像滤波框图。

为了更快地处理图像数据,常见的方案是垂直划分图像,其中用于每个垂直片段的数据按像素、按行被接收(到处理资源),以并行地执行滤波,如图9B中所示。图9B的并行方法在图11中以框图形式表示,图11示出了具有多个过程的图像滤波框图。

在支持MPI的基于ANSI C语言的软件编程模型中实现用于处理线程的这种技术的实施例的示例性程序(滤波器内核的代码例)可以如下编写:

代码部分A:filter_kernel.c——滤波器内核的代码例

由“filter_kernel.c”处理线程组成的系统可以如下编写(滤波器系统的代码例):

代码部分B:filter_system.c——滤波器系统的代码例

“void 2d_filter(....)”函数可以如在以下的例子中那样编写:

代码部分C:实现为MxN滤波器的2d_filter函数

代码部分D:实现为Laplacian滤波器的2d_filter函数

代码部分E:实现为Laplacian滤波器的简化的void 2d_filter函数

应当注意的是,本文所给出的代码部分/程序仅仅是示例性的,并且不是要将实施例限定到任何特定的编程语言。

在逻辑上,具有ANSI C软件编程模型的MPI可以支持混合存储器和可适应通信方案的全部需求。执行模型可以提供满足软件编程模型需求的能力。此外,软件编程模型可以支持可以以可变实时性能为目标的可扩展代码。

在存储器网络处理器上实现的结果的例子,诸如像示例性hx3XXX处理器(由Coherent Logix公司提供),如在图12中所示。更具体而言,图12示出了以30fps(左边图像)、接着以60fp)s(右边图像)在hx3100处理器上示出的示例4K视频2D滤波器系统资源布局,无需改变一行C代码。在这里,软件线程的数量增加了并且能够使用附加的硬件线程来增加帧速率吞吐量。

如以上所指出的,关于目前方法的一个问题是,利用支持目标硬件特征的外推的软件编程模型,它们不允许系统的高效描述。为了正确地描述系统,其行为和交互性的所有重要方面都应当在编码模型的相应控制、通信、存储器和处理模型内以某种方式被捕获。后两者,存储器和处理模型,通常不被提出,而是被假设为从执行模型隐含地提高。

因此,为了高效地定义,任何系统都可以要求有效地定义整个系统。在这个例子中,讨论将集中在从存储器结构性质及其与通信性质的交互性和来自系统需求的处理的角度描述系统。如以上参照图8的方法所描述的,这可以涉及定义存储器结构性质:被用来支持通信的结构大小、被用来支持处理的结构大小、支持处理的结构行为、支持通信的结构行为、支持处理的结构可访问性以及支持通信的结构可访问性。照此,通信、控制和处理属性可以被得出或明确定义。

对于以上讨论的成像滤波器例子,这可以按以下方式进行:

定义存储器结构大小:

如图11中所指示的,在该成像滤波器的例子中,环线缓冲区寻址方案可能需要被创建,以支持对系统最自然的存储器结构。该存储器结构可以由滤波器的大小(即,滤波器处理所需的或当前数据的行数(在该情况下是2M+1)加上捕获处理的当前结果的额外行加上并发地接收下一数据行的额外行加上用于发送滤波器处理的之前计算结果的额外行)定义。因此,对于这个示例性应用,存储器结构大小可以被定义或指定为像素的乘积(2M+4)*(2N+H/Nv)。

定义存储器结构行为:

除了结构的大小,结构按时间的行为也需要被清楚地定义。在该特定的情况下,存储器行为是按时间关于已经被处理过的之前接收的数据以及可用的(已到达的)新数据来定义的。具体而言,在这种示例性实施例中,存在可以被表示为“当前数据”的存储器区段,该区段旨在用于当前处理,其大小为“2M+1”行乘以大于“2N+1”列,存在接受下一行数据的存储器区段,存在保持之前的计算结果的存储器区段,以及最后还存在从处理收集当前结果的存储器区段。在当前处理完成并且之前的计算结果送出之后,存储器行为可以被更新,使得刚刚接收到的下一行数据现在变成当前数据中的第一行。接着,当前结果变成要送出的之前的计算结果并且当前结果被重新指派其位置。因此,存储器区段的这种循环使用可以定义或特征化存储器结构的行为。

定义存储器结构可访问性:

每个存储器区段都需要定义其可访问性。在该特定的示例性情况下,对于当前数据,数据需要以标准2维数组的形式可访问。根据上述存储器结构行为,每次当新数据行到达并且变成新的第一行数据并且最旧的或最后一行数据被丢弃时,对物理地址的二维访问可以被更新,以支持从用户/程序员角度来看自然的数据写和访问。存储器的其它三个区段(以上提到的)可以有效地实现支持数据、滤波结果的接收以及结果的发送的一维数据数组。

定义通信性质(大小、行为、可访问性)

一旦存储器结构大小、行为和可访问性已经被定义,互相(inter-)通信或内部(intra-)通信、控制和处理性质就可以基于该系统或另一系统内的交互性被得出或明确定义。在这种特定情况下,系统的输入性质可以从存储器结构大小、行为和可访问性定义得出。其它系统可以要求更明确的定义,例如对于通信无线电中的交织和/或去交织的情况。

在一种实施例中,下一步可以是有效地在软件编程模型中表示系统性质。可以有任意数量的途径来完成这件事,包括但不限于创建或扩展诸如MPI的API来支持ANSI C、在C++中创建具体的类结构,等等。但是,具体的词汇表示不重要。重要的是编程模型识别出这些(动态的)系统定义,即工具流可以解释系统定义,并接着有效地将系统映射到目标执行模型和底层硬件体系架构。

代码部分A filter_kernel.c的示例代码明确地接近控制模型、通信模型和支持性存储器结构和处理,并且可能需要被这样解释。这不允许动态交互性在控制、通信和存储器结构之间以这样的方式被定义,即使得直观地表示系统、定义系统或以高效的方式解释系统。

继续成像滤波器例子,filter_kernel.c可以如下重写:

代码部分F:filter_kernel.c——根据一种实施例的、结合系统性质定义的滤波器内核的更新后的代码例

如可以看到的,在以上代码部分F的更新的代码例中,程序语句“mpx_2d_lin int buffer[(ROW+3)*COL];”声明变量,具体而言,具有以上讨论的尺寸、行为和可访问性性质的存储器结构,其现在由编程模型支持。

相应地,代码部分A的“void 2d_filter(....)”函数可以以自然的形式编写,并且可以在其处理中实现更高的操作效率,如在以下两个例子中给出的:

代码部分G:被实现为MxN滤波器的void 2d_filter函数的更新后的代码例

代码部分H:被实现为Laplacian滤波器的void 2d_filter函数的更新后的代码例

随后,程序语句“MPX_Recv(....);//未阻塞行接收”可以提供单个更新,以自动更新行为和可访问性性质。这设置要被接收的下一行数据、用于处理的当前数据以及要收集的当前结果。

在工具流内,编译器可以被设计为解释系统行为并且更有效地映射硬件资源,以支持所定义的系统功能。

以上成像滤波器例子主要是从存储器定义(存储器视图)的角度描述的。这不应当被解释为限制。作为对就大小、行为和可访问性进行描述的系统的存储器模型的附加或另选,控制、通信和处理视图(和子视图)可以类似地被用来描述或定义系统。

因此,在软件编程模型内,为了支持有效的系统描述,所有模型可能都需要支持描述或隐含地解释处理、存储器、通信和控制的大小、行为和可访问性及其之间和/或内部的活动的过程。

示例性用例:有限脉冲响应滤波器

作为另一个例子,考虑由等式2特征化的示例性有限脉冲响应(FIR)滤波器:

其中t是时间,ci是系数,x[t]是输入样本,N是滤波器长度,并且y[t]是输出样本。

使用FIR滤波器来说明图8的方法

在这种类型的系统(FIR滤波器)中,数据流输入通常一个样本一个样本地被接收,即一次一个样本。FIR滤波器的特征在于其长度,该长度等于它用来产生输出样本的输入样本的数量。一旦接收到满足FIR滤波器的数据需求(例如,长度)的足够多的数据样本,FIR滤波器计算就跨数据运行,以创建滤波后的数据样本输出。为了更快地处理数据,常见的方案是把滤波器处理分成阶段和/或流水线片段。框图形式的单个FIR滤波器过程在图13A中示出。以框图形式示出阶段和流水线并行化的使用多个过程的FIR滤波器在图14中示出。

使用支持MPI的基于ANSI C语言的软件编程模型描述在图12和13中示出的线程过程的程序可以如下编写:

代码部分I:fir_filter_kernen.c——FIR滤波器内核的代码例

相应地,代码部分J中的系统代表图14的句法表示,示出了由“fir_filter_kernel.c”处理线程组成的FIR滤波器的流水线和算法阶段并行化,并且可以如下编写:

代码部分J:fir_filter_system.c——FIR滤波器系统的代码例

以下代码部分K以与图15一致的方式使用环形缓冲区实现FIR计算。

“void fir_filter(....)”函数可以如下编写:

代码部分K:fir_filter函数

在这种实现中,“ld_sample_buffer”可以像在图15中示出的随着时间推移的存储器中的结构一样操作。

如以上关于成像滤波器例子所指出的,具有ANSI C软件编程模型的MPI可以支持混合存储器和可适应通信方案的完全需求。执行模型可以提供满足软件编程模型需求的能力,并且软件编程模型可以支持可以以实时性能为目标的可扩展代码。

如以上还指出的,在当前的方法中,支持目标硬件特征的外推的软件编程模型不允许或便于系统的高效描述。

在这个示例性FIR滤波器例子中,讨论将集中在从通信结构性质及其与存储器性质的交互性和来自系统需求的处理的角度描述系统。这涉及定义通信结构性质:被用来支持通信的结构大小、被用来支持处理的结构大小、支持处理的结构行为、支持存储器的结构行为、支持处理的结构可访问性以及支持存储器的结构可访问性。一旦定义了这种通信视图,存储器、控制和处理属性可以被得出或明确定义。在一种示例性实施例中,这可以按以下方式进行:

定义通信结构大小:

如图14的FIR滤波器例子中所指示的,环形样本缓冲区寻址方案可以被创建,以支持对系统最自然的存储器结构。通信结构大小可以由滤波器的大小(即,滤波器处理所需的或当前数据的样本数(在该情况下是N)加上捕获处理的当前结果的额外样本加上并发地接收下一数据样本的额外样本加上用于发送FIR滤波器处理的之前计算结果的额外样本)定义。因此,对于这个示例性应用,通信结构大小可以被定义或指定为“N+3”。

定义通信结构行为:

除了通信结构的大小,结构按时间的行为也需要被清楚地定义。在该特定情况下,通信行为是按时间关于已经被处理过的之前接收的数据以及可用的(已到达的)新数据定义的。具体而言,在该示例性实施例中,存在被表示为“当前数据”的(通信存储器的)区段,该区段旨在用于当前处理,其大小大于“N”个样本,存在接受下一数据样本的区段(或样本空间),存在保持之前的计算结果的区段(或样本空间),以及最后还存在从处理收集当前结果的区段。在当前处理完成并且之前的计算结果送出之后,通信行为可以被更新,使得刚刚接收到的下一数据样本现在变成当前数据中的第一样本。接着,当前结果变成要送出的之前的计算结果并且当前结果被重新指派其位置。因此,通信(存储器)区段的这种循环使用可以定义或特征化通信结构的行为。

定义通信结构可访问性:

每个通信区段都需要定义其可访问性。在该特定的示例性情况下,对于当前数据,数据需要以标准1维数组的形式可访问。根据上述通信结构行为,每次新数据样本到达或被接收并且变成新的第一数据样本并且最旧的或最后一个数据样本被丢弃时,对物理地址的1维访问可以被更新,以支持从用户/程序员角度来看自然的数据写和访问。通信的其它三个区段(以上提到的)可以有效地实现支持数据、滤波结果的接收以及结果的发送的数据样本空间。

定义存储器性质(大小、行为、可访问性)

一旦通信结构大小、行为和可访问性已经被定义,存储器间或存储器内、控制和处理性质就可以基于该系统或另一系统内的交互性被得出或明确定义。在该特定情况下,系统的输入性质可以从通信结构大小、行为和可访问性定义得出。

再次,下一步可以是有效地在软件编程模型中表示系统性质,并且可以有任意数量的途径来做这件事,包括但不限于创建或扩展诸如MPI的API来支持ANSI C、用C++创建具体的类结构,等等。但是,如以上所指出的,具体的词汇表示不重要。相反,重要的是编程模型识别出这些(动态的)系统定义,即工具流可以解释系统定义,并接着有效地将系统映射到目标执行模型和底层硬件体系架构。

代码部分I fir_filter_kernel.c的示例代码明确地接近控制模型、存储器模型和支持性通信结构和处理,并且可以被要求这样解释,如以上解释的,这不允许动态交互性在控制、通信、处理和存储器结构之间以这样的方式定义,即使得直观地表示系统、定义系统或以高效的方式解释系统。

继续FIR滤波器例子,fir_filter_kernel.c现在可以如下重写:

代码部分L:fir_filter_kernel.c——根据一种实施例的、结合了系统性质定义的FIR滤波器内核的更新的代码例

如在代码部分L的更新的代码例中所示,程序语句“int com[N];”声明现在被编程模型支持的、在通信结构中使用的变量,该变量采取以上讨论的大小、行为和可访问性性质。这由代码部分L中的示例性MPI构造“MPX_Recv(com,....,MPX_FIFO_FIR|MPX_NONBLOCKING|MPX_FIFO_IN;”和“MPX_Send(com,....,MPX_FIFO_FIR|MPX_NONBLOCKING |MPX_FIFO_OUT);”示出。

代码部分K的“void fir_filter(....)”函数现在可以按自然的形式编写,并且可以在其处理中实现更高的操作效率,如下:

代码部分M:更新后的fir_filter函数

在这里,“com”通信存储器可以像图16中所示随时间在存储器中的结构那样操作。

最后,程序语句“MPX_Recv(com.recieve,....,MPX_FIFO_FIR|MPX_NONBLOCKING|MPX_FIFO_IN);//未阻塞样本接收或数据样本接收和部分累加”可以提供单个更新,以自动更新行为和可访问性性质。这设置要接收的下一个数据样本、用于处理的当前数据、要收集的当前结果。

在以上FIR滤波器例子的一种示例性变体中,FIR滤波器的一部分在线程中执行并且FIR的部分累加需要为了计算而被接收,并且一旦计算完成,就连同适当的数据样本被转发到另一线程。示例性代码部分N示出了接收样本数据和部分累加的线程,之后是代码部分O,该代码部分O示出了部分FIR滤波器内核(kernel)以及代表性通信存储器结构的使用,如图17中所示,其对应于图14中所示的FIR阶段/片段的中间块。

代码部分N:在通信模型结构的上下文中结合系统性质定义的、支持采样数据和部分累加转发的部分滤波器内核的例子

代码部分O:以支持部分累加的自然形式编写的FIR滤波器内核的部分

接收仅仅样本并且发送带部分累加结果的样本的代码,以及接收样本和部分累加以产生最终FIR滤波器结果的代码,可以被写为所提供的两个FIR代码例子的变体,并且在这里为了简洁而没有给出,本文所公开的技术的这种具体实现在编程领域技术人员的能力范围之内。许多其它的滤波器类型也可以以类似的方式重新构造,其它的算法和过程也是如此。换句话说,以上例子仅仅是示例性和说明性的,而不是要限制本发明的范围。

因此,以上公开的技术的实施例可以提供相对于关于软件在多处理器系统上的并行执行的现有技术方法的实质效率。

与代码部分M相比,代码部分O不必重新缩放累加器,以适应整数。

如以上关于成像滤波器例子所指出的,在工具流内,编译器可以被设计为解释系统行为并更有效地映射硬件资源,以支持所定义的系统功能。

以上FIR滤波器例子主要是从通信定义(通信视图)的角度描述的。再次,这不应当被解释为限制。作为对就大小、行为和可访问性描述的系统的通信模型的附加或另选,控制、存储器和处理视图(和子视图)可以类似地被用来描述或定义系统。

在系统设计的高效捕获之后,为了从硬件获得更高效的操作,新的可编程硬件特征已经被创建以支持既定的系统性质。这些特征可以包括但不限于处理元件、数据路径、地址生成、控制流等。这些特征是要在给定的操作循环中实现(基本上)最大操作和能量效率并且在许多计算密集应用中将开销(设置、索引寄存器更新等)降低至接近零。

硬件元件

以下描述提供改进的系统的各种新颖硬件体系架构元件。

硬件的设计可以被紧密耦合,以对作为目标的系统应用以能量高效的方式执行。环形数据缓冲可以使用模寻址和DMR FIFO技术(如下描述)结合硬件重复循环来进行,以使寻址在循环中自动化。HyperOp(如下描述)提供了控制高并行度的方式,而无需常规技术所需的高优化成本。多数据路径硬件(如下描述)以几乎和纯ASIC、非可编程方案一样高效的方式允许实际算法数学部分的更大并行性。自动重复缓冲降低了提取(和解码)功率。有限的地址空间对数据和指令都提供了高效的寻址和读/写操作。数据重新对准和累加器转发提供了降低数据移动开销并且将多个PE结合到一起来操作附加资源以更快地运行算法的机制。

目标

硬件系统的任何工程设计实现的目标是要以最小的成本函数提供系统所需的功能。这个成本函数包括很多方面,其中除了许多其它的之外,其中最重要的一些是实际硬件成本、实现整个系统的时间/成本、使用成本(诸如功率和面积)。许多时候,以各种方式分解权衡的多个选项是可用的。在前面的章节中,给出了各种方案,包括GPP、GPU、DSP、FPGA、众/多核和ASIC。使用这些类型硬件可用的现有系统实现在复杂性、使用方便、可编程性、灵活性、成本和功率方面都有很大变化。在给出的例子中,ASIC对于给定系统是最功率高效的。但是,它也是最不灵活的,并且通常就开发时间和成本而言是最昂贵的。其它的提供更大灵活性,主要是通过更低的成本/时间与增加的功率的权衡。本文所描述的硬件的目标是提供对于特定类型的计算负荷通过常规手段高度可编程、同时仍然接近纯ASIC硬件方案的功率效率的硬件平台。

概念

为了尝试并达到这一目的,从基本上所有其它给出的方案借用概念。这些概念的创新修改和组织就功率效率而言允许接近纯硬件方案的功率高效实现,同时仍然提供允许更快实现(上市时间)所期望的高度可编程性。所使用的软件技术被紧密耦合到提供硬件辅助的性能和功率优化的体系架构。

本文的主要焦点是描述执行单元或处理元件(PE)如何被设计体系架构来以低功率提供高吞吐量。这与数据存储器路由器(DMR)中的存储器和通信系统耦合,其中DMR提供一结构,数据在该结构上流入和流出PE供处理。

处理元件

现有技术中的处理元件(PE)(GPP、GPU、多核、DSP等)具有或者传统完全编码的指令或者带用于多个操作单元的控制的多个槽的非常长指令字(VLIW)的指令体系架构。对于这些体系架构中的数据路径,一些现有技术包括可以以各种程度的独立性并行操作的多个操作单元。一些可以支持在超标量类型实现中互混的多个指令流,而其它的则是单线程的。

这里给出的创新PE体系架构是传统完全编码的指令和用于子指令的VLIW风格槽的混合体。这是非常灵活且高效的指令体系架构,它可以支持多种多样的具有多个操作单元(诸如乘法器、ALU单元、地址生成器等)的数据路径,以及用于互连它们的机制。不像为了调度指令流的执行需要很多硬件的超标量体系架构的动态调度,这种体系架构提供了由生成指令流的软件工具(编译器和汇编器,等等)提供的静态调度。虽然这种静态调度确实有一些局限性,使得它对于比如GPP的随机指令流不是最佳的,但它对用于DSP和图像处理的高度结构化实时类型算法是完全足够的并且在与适当的优化编译器和软件开发工具耦合时提供大大改善的运行时功率效率。

PE由单独的操作单元在其中运行的多个流水线阶段组成。主要的操作单元是指令提取、解码/发布、操作数提取、执行单元和回写(耦合到提取)。所使用的额定9阶段流水线在图18中示出,其中操作单元关于它们在流水线中的何处操作而被标记。

这种流水线结构按今天的标准来说是相当浅的并且这是有目的的。各个单元和特征的设计将在以下章节中讨论,重点在于允许低功率设计的独特设计点。将注意到,信息趋于跨多个章节散布,因为该设计使得跨多个功能单元的特征和体系架构一起工作,以产生独特的整体硬件设计。比大多数具有更少阶段的流水线是为增加性能和降低功率所进行的硬件优化的一部分。通过更小、更不复杂的硬件,即使使用浅流水线,它也可以被建立以按高性能级别运行。

执行流水线

基本流水线

图19是说明性的改进PE数据路径体系架构相对于(versus)单数据路径体系架构。更具体地,图19示出了稍标准的单数据路径(类似于前一代)和改进的PE数据路径体系架构(指令提取、解码和控制逻辑没有示出)的概念框图。这种改进的数据路径可以比单数据路径大约多60%的逻辑实现。换句话说,以每循环基本上等同或更多的运算能力,改进的数据路径中pipe0或pipe1比单数据路径少20%的逻辑。单数据路径具有用于逻辑运算和算术运算的单独路径。乘法器可以是24bx24b,以支持浮点尾数乘法。这后面可以接着40b累加器和加-比较-选择(ACS)单元。接着,所有结果被移位并再次累加。通过将累加器分成一半并且以单指令多数据(SIMD)模式操作,有限数量的流水线并行化对8位的数据是可能的。

改进的数据路径体系架构包含两条独立的流水线,如在图中示为pipe0或pipe1。这些管道中每一条可以具有两个16b×16b的乘法器。管道通过压缩器电路结合,以实现一定范围的乘法结果:四个16b、两个16b加一个32b、两个32b或者一个64b(对于浮点数学,它还支持单个24b乘)。对于每个管道,压缩器后面可以跟着移位、逻辑、加和ACS阶段,接着是最终的累加器。在简单的单数据路径流水线中,对于16b操作、用于实时DSP引擎的主要数据大小,每个时钟可以只执行单个数学运算(乘法或加/减)。通过该新的体系架构,硬件被分成更多的最优结构,以为DSP算法对以这种形式有用的特定运算每时钟提供多达四个相同类型的运算。连同每流水线减少数量的硬件,这种体系架构提供进行DSP和图像计算的能量高效得多的途径。可实现的能量效率与纯硬件方案具有可比性,但在这里这是以完全软件可编程的PE实现的,其减小了开发努力。双/四流水线体系架构使得每PE循环能够有许多不同的操作组合;但是传统的汇编语言指令集可能不支持所有的固有灵活性。整体指令编码和编程模型中为了完全利用这种增加的灵活性而进行的改变也将被讨论。

要注意的是,在图19和20中,耦合两个压缩器(pipi1和pipi0之间)的数据路径在乘法器之后。这条路径提供乘法的单次累加,用于像FIR滤波器等所需的大量操作数的乘法累加这样的运算的加速。这是进行这些运算以及绝对差之和(SAD)类型运算的极其高效的途径。这种优化大大增加了这种体系架构相对于其它的功率效率。这是在对来自用于MAC的乘法器阵列或用于SAD类型运算的加法器阵列的部分乘积进行另一位压缩运算的同时提供另一完全加法器的有效性的几个简单的门。再次,高效地使用这些额外的门的能力可以要求随后讨论的改进的指令编码和控制技术。

概括地说,改进的PE数据路径特征:

两条数据路径,每条能够(每循环):

●一个/两个16乘16乘法或者一个32乘32乘法

●一个/两个16加法/减法或者一个32b加法/减法

●40b桶形移位

●32b逻辑运算

●使用两个40b累加器之一的40b累加数据路径一起可以执行(每循环):

●一个32乘32乘法或者乘法-累加

●一个32b浮点加法/减法/乘法

●具有两个或单个累加的四个16×16乘法

●具有累加的四个绝对差之和

基于两条数据路径中乘法器和加法器的四重运算,存在可以被高效执行的、对于DSP算法所需的更多的功能。改进的指令集可以被设计为在相当低等级的编程模型暴露硬件,以允许这些运算在编程级实现,而不是单纯在指令编码级(见随后的HyperOp)。这通过该体系架构提供了另一创新。

操作数对准

从存储器提取操作数以及将结果写到存储器是所有体系架构的较大功耗的任务之一。利用大的本地高速缓存和复杂的高速缓存系统,大量功率会在这些操作中被耗散,因此伤害整体效率。在大多数现有技术系统中,存储器子系统允许许多不同的操作数大小以及大地址空间,通过多级高速缓存系统被访问。在多处理器IC芯片中用于每个PE的片上支持性存储器的大小更受限,并且不需要支持这么多的操作数大小和对准操作。

操作数大小和对准在这里简单地进行讨论,以便描述数据对准多路复用器及其在PE体系架构中对支持HyperOp的使用。数据操作数和结果将在随后的章节中更详细地讨论,但是对于这种讨论,全部所需的就是体系架构在各种条件下并且不必同时提供以下选项:

●2个16位操作数的提取

●2个32位操作数的提取

●16位和32位操作数的组合的提取

●附加的64位对准操作数的提取

●单个16位结果的写

●单个32位结果或两个16位结果的写

●两个32位结果或64位结果的写

为了保持存储器接口简单,所有以上运算都应当对于物理存储器在数据大小边界对准。这将看起来限制它们在某些算法中使用的可行性。为了解决这种限制,操作数(和结果)对准多路复用器被添加到上述双/四流水线体系架构。对准多路复用器可以在具有汇编语言编程模型的单流水线体系架构中具有非常有限的使用,但是它们与具有HyperOp编程模型的双/四流水线体系架构的灵活性很好地匹配。

图20示出了具有两个高吞吐量操作单元的数据路径例子,这两条流水线被指定为数据流水线0(DP0)和数据流水线1(DP1),为了这种讨论,具有一些附加流寄存器的扩展。这些是用于输入的额外流水线寄存器X、Y和用于输出的Z。还示出了额定操作数阶段A、B、C和目的地阶段D。

A、B和C寄存器被用来存储多达64位宽的操作数,如前面所讨论的那样可用的。HyperOp使用A、B和C寄存器与两条数据路径的X和Y寄存器之间的复用,以控制由数据路径执行的每个运算所需的操作数和字对准。在HyperOp处理期间将操作数提取到A、B和C寄存器中受程序控制,以允许对存储器的对准的访问,以便以重新对准的方式(并且因此看起来未对准的,如果必要的话)向数据路径数学单元提供操作数。这种创新允许更简单、低功率的存储器结构和寻址模式,从而提供将足够多操作数馈送到复杂数据路径/HyperOp组合的方式,以独立于操作数如何存储在存储器中而提供峰值吞吐量。

类似于操作数讨论的是结果一。在HyperOp执行期间数据路径结果被放到累加器中或者Z寄存器中。接着,这些可以被移动到D用于回写到别的地方,或者被反馈到所示出的路径上用作后续指令中的附加操作数。关于操作数,结果的重新对准可以在这里发生,以提供未对准的数据到存储器/寄存器的对准的回写。再次,这些操作由HyperOp指令独立控制。

每流水线的两个累加器

在支持用于将类似数学运算的长串一起相加成单个和的累加器的许多体系架构中,存在单个累加器。此外,有时候所有运算都利用结果修改该累加器(再次,我们的前一代)。虽然这种结构对于每周期主要是单个标量操作的体系架构工作得很好,但是随着额外数据路径的添加以及利用HyperOp在每周期对多个操作数进行运算的能力,扩展这个概念变得有必要。当前的设计点包含每数据路径两个独立的累加器。每个操作可以选择哪个(如果有的话)累加器将被更新。因此,这些可以被用来或者通过之前讨论的复用结构存储用于随后处理的中间值或者允许多个数据流以交织的形式被处理而无需保存和恢复累加器值的附加周期或功率开销。当与诸如双数据路径和操作数/结果对准的其它特征耦合时,双累加器结构的这些特征提供保持流水线更完全地被利用的机制,这又会对设计减少每操作的总功率。

累加器转发

涉及累加器的另一个特征提供了加速一些算法的内循环并且跨芯片中的多个PE增加并行执行的另一途径。例如,为了最小化应当跨多个PE散布的计算循环上的开销以便提供足够的数据处理带宽,这是需要的,就像在多抽头高带宽FIR滤波器中。这可以利用PE之间的“累加器转发”实现,其在图21中示出。

这个图示出了两个PE,但是这很容易被扩展至达到期望带宽所需的那么多PE。提供路径,使得当一个累加器被更新时,更新后的值在DMR的结构扩展上被转发到另一个PE。在这里,这个到达的累加器值被用来加到本地计算并且放在新的本地累加器中。这个新的累加器值可以再次被转发到另一个PE,用于附加计算。

在这个图中还示出了C寄存器对于保存用于本地MAC(或任何其它)计算的四个系数值的使用。例如,这可以提供FIR滤波器的四个抽头。链中的每个PE可以提供附加的四个抽头。因此,作为例子但不受其限制,八个PE可以以每时钟一个样本以完全时钟速率实现32抽头FIR滤波器。为了实现此目的,单个PE上的相同滤波器将其带宽限制到每八个时钟一个样本。

利用FIFO结构向前移动数据流通过滤波器,数据在DRM之间被传递。在前面章节中提到的重新对准缓冲区被用来选择用于每个本地PE正在处理的当前数据集的正确系数。数据移动与执行是步调一致的,使得触发在数据到达时发生,以便以与算法一致的方式进行下一次计算。以这种方式,滤波器可以只使用与实现类似滤波器的纯硬件结构所需的相同的数据移动和相同的计算来实现。这使得这种可编程方案的功耗与执行相同功能的ASIC具有可比性。

基于这种情况,单个四乘法-累加指令可以被提取,以运行这个算法的内循环。在随后的章节中将提供更多细节,但是这个指令(如果需要,连同其它的)可以被指令提取和配发单元存储在本地指令缓冲区中。当在循环中时,不需要附加的指令提取,并且对于单个指令不需要附加的解码;从而有可能节约大量功耗。

例如,在使用多个具有双/四体系架构的PE的FIR滤波器的情况下,每个周期中的每个PE可以利用单个指令处理多达四个输入样本。这个指令被反复执行,而无需控制线切换。当系统检测到这重复的(一条或多条)指令时,指令存储器可以被置于功率节约模式,因为不发生从存储器的提取。对于一些紧循环DSP算法,就像FIR滤波器,这种可编程系统中的数据移动和计算以及一些微小的控制切换与ASIC硬件实现类似,因此实现接近于相同的低动态功耗。

指令提取/解码中的地址生成

在图20中,包含地址生成单元(AGU)的地址生成器部分被示出,但没有详细描述。PE体系架构的地址生成器部分为由硬件支持的各种寻址模式生成地址。其独特的特征将在这一章节中进一步描述。

地址生成器部分可以具有多个可编程数学单元,用于地址的生成。这些单元中每一个是地址生成单元(AGU)。此外,可以有一个或多个可以被用于在流水线的地址计算部分中进行附加计算的扩展数学和逻辑单元(GALU)。这些计算对于扩展管道的功能和性能以及对于去除表查找类型操作以及其它中的流水线延迟是有用的。在图20中,示例地址生成器部分包含三个AGU和一个GALU和一组支持寄存器。

对于标准编码方法中的典型操作,AGU被用来为或者两个源操作数和一个目的地或者为这些的子集和某个地址或扩展数学运算生成地址。这些单元与编码紧密耦合。对于经由HyperOp编码的扩展操作,这些单元更多地被解耦并且可以由指令流独立控制。这允许操作的更大灵活性和更大并行化。优化可以在编译时执行,使得实时重新排序是不需要的并且因此不存在这种优化的操作功率惩罚。

这种硬件的更详细框图在图22中示出。这个图使得多个AGU的耦合连同这部分中使用的可用寄存器清楚。这个示例性硬件可以详细描述为:

●用于地址类型计算的3个标准AGU

●用于附加数学/逻辑支持(GALU)的1个扩展AGU

●8个基本寄存器B0..B7

○寻址模式中的B0产生值零

○B0被用作堆栈指针(SP相对寻址模式)

●8个索引寄存器I0..I7

○寻址模式中的I0产生值零

○10可以被用作用于其它AGU算术的临时寄存器

●8个步幅寄存器S0..S7

○Sn与In或Bn一起使用

●用于二级索引或基本寄存器的4个附加增量器

○索引寄存器I4..I7

○基本寄存器B4..B7

○通过步幅寄存器S4..S7递增

后三项可以不仅仅用在管道的早期指令提取部分中的地址计算和快速数学中,而且被耦合到随后描述的硬件重复操作,以为关键的循环计算提供零开销循环。

图23是示出单个AGU的更详细视图的框图。用于每个AGU的特征可以包括:

1)在更多寄存器上可用的附加地址计算,

2)用于扩展的快速AGU操作的新块。(可以只有这些当中的一个。输入使用来自A和B源地址解码的现有的多路复用器和字段。),

3)加法器的条件代码输出将允许快速分支能力。(当决定数学由AGU而不是在主数据路径中被执行时,这提供零开销条件分支,这插入附加的流水线延迟),

4)模索引数学(用于环形缓冲),

5)多步幅索引数学(用于多维数组到扁平存储器映射),及

6)用于加速的表查找的复杂数学。

除了使用单个AGU用于地址计算,多个AGU可以由某些指令组合,以便执行更复杂的地址计算。以这种方式,HyperOp可以分配AGU来对地址做复杂数学,以对存储器地址如何被使用提供更大灵活性。这些更复杂的寻址模式可以包括诸如环形寻址(在随后的章节中更详细地被包括)、模寻址、用于与2D和3D寻址使用的多步幅索引、复杂表查找寻址、正弦/余弦特殊寻址等等之类。由于在硬件流水线的这部分中具有加法器和逻辑能力的灵活性,有可能以比如果地址数学要在正常执行流水线中执行的话可能的更大效率对特定算法执行复杂的地址数学。因为AGU是与主数据路径ALU分离的硬件,所以地址计算可以与数据计算并发地执行。

AGU分支

AGU流水线领域中的另一ALU功能是启用零开销分支的早期分支计算。当计算分支决定的数学在流水线的正常执行部分中被执行时,它在流水线时序结构中发生得非常晚。这意味着,如果分支被不正确地预测,则在分支决定完成的同时,若干条指令被提取并且应当被投机地执行(指令不被允许通过写结果来改变持久状态)。如果决定不正确,则这些结果失效并且不被使用,并且用于它们的功率和时间都被浪费了。因为AGU数学在管道中比被执行的分支决定发生得早得多,因此没有不正确的指令被提取并且没有投机执行发生。因此,分支不在没用的指令上浪费任何执行周期或功率。

环形寻址

为了支持用于DSP算法加速的复杂流传输数据结构,期望扩展的寻址模式。一种这样的模式是环形寻址。这种类型的寻址允许数学以更简单的形式被编写并且许多复杂性从数据路径转移到AGU部分,在那里它可以更高效地并在流水线的对于性能的更好时隙中被执行。硬件如何被用来实现这个目的可以通过以下例子来理解。

假设来自两个AGU的一对两个索引增量器被组合,以生成用于一个索引的环形寻址,例如,{i6,s6}和{i7,s7}。

假设图24中所示的环形缓冲区,其中:

●i6保持当前数组索引

●s6保持正常步幅

●i7保持最后一个有效的环形数组索引

●s7保持用于绕回(wrap)情形的步幅

这可以通过耦合两个增量器来实现,如图25中所示。这对地址实现了完全按N取模绕回,只要数学使得它将仅对每次地址计算至多绕回一次就可以。这种约束可以由软件维持。由于有四个增量器,因此我们可以利用这种方法实现两个环形缓冲区:{i4,s4,i5,s5}和{i6,s6,i7,s7}。

在典型的GPP体系架构中,用于寻址和管理数据流的算法和数学是总计算负荷的相当大的一部分。上述PE体系架构特征连同数据流的编译时间管理一起,大大减小了应用的总计算负荷,并且因此降低了功耗。

指令格式和编码

这种体系架构的指令集被分解成两个不同的子集:

●64b常规汇编指令

●238b HyperOp指令

这两个子集具有图26中所示的、用于编程的关联模型。常规的汇编模式(ASM)可以是被编码到固定长度64位指令中的单指令流模式——现有技术中典型的。ASM编码可以支持用于不同指令类型的几种格式,其主要形式是具有单个数据路径操作的3操作数(2源,1目的地)格式。在这种模式中比在128位HyperOp模式中支持更小的并行化。但是,对于SIMD指令可以有特定的指令编码,该指令编码控制对单个流水线的两个一半或者对两个(或更多个)流水线的操作。还可以有用于非常有限的指令集的编码,该编码将为了性能和功率优化而执行四数据路径操作。

另选指令子集是HyperOp模式。这在以下章节中讨论。来自两个编码模型的指令可以在指令流中以对给定算法提供最佳操作的无论什么形式和顺序混合,该形式和顺序可以由优化编译器确定。

HyperOp

被称为HyperOp的指令集为了高灵活性而以细粒度方式控制双/四流水线。指令编码风格在“传统”汇编(ASM)风格与非常长指令字(VLIW)风格之间某处。这提供:

●执行单元中两个数据路径管道的隔离的独立控制

●源操作数的位置的隔离的独立控制

●结果回写的位置的隔离的独立控制

●每时钟多达三个AGU的单独控制

●硬件重复模型的控制

●用于预测执行的控制(在许多情况下比分支更高效)

广泛的流水线和并发并行化有可能利用所说明的改进的双/四数据路径来编程。数据路径元素的独立控制、以及数据(操作数)提取和(一个或多个)结果回写与数据路径执行的解耦在操作中提供了巨大的灵活性,不像传统SIMD机器的僵化。HyperOp指令提供数据路径流水线和并发并行化的细粒度控制。依赖于所使用的HyperOp,每个管道可以每时钟运行多个操作。

用于HyperOp的基本动机是来自对广泛范围的应用软件的汇编代码的分析,其例子从RF波形处理到MPEG图像压缩和加密。汇编(ASM)代码常常比“C”代码更高效地运行,但是有很多它不是最优并且运行低效的情况发生。我们关于被用来执行算法中所涉及的数学运算的PE周期的数量来定义效率。当数据流必须根据某种层次格式被解释、根据同一或另一层次格式被处理(诸如利用2D滤波器)接着重新包装时,低效发生。在其它情况下,在变量类型{short,integer,float,long}之间转换所花的时间过多。在这些情况下,循环常常被用来扫描存储在各种维度并且有可能可变大小的数组中的数据。当循环地址计算对用来处理数据的相同硬件执行时,地址计算则引起循环延迟(开销)。

此外,新的双/四体系架构提供更独立操作的单元并且因此为(一个或多个)流水线中所包含的并行操作或更快的串行操作提供更大的灵活性和更大的机会。HyperOp指令提供控制这种硬件的途径,而无需将其限制到ASM格式。独立槽的概念是从在行业中使用的非常长指令字(VLIW)编码风格中借来的。在VLIW风格中,指令内的某些字段被指定为“槽(slot)”,以控制特定的功能单元。槽的编码独立性对应于功能单元的独立性。VLIW风格指令可能没有使每个功能单元做一些事,但是程序员将一般想要大多数槽做对程序中大部分指令有用的一些事。这种ASM和VLIW编码风格的混合允许:

●可编程的数据路径并行化

●数据路径元素的独立控制

HyperOp指令给出执行管道操作、寄存器和复用的更细粒度控制,使得指令可以以不会以标准编码方案发生的方式被并行化并加速。这提供对当前实现中的3个AGU和2个数据路径执行单元的独立控制。当使用常规编码方法经过常规流水线时被绑定到操作数的流水线寄存器在这种模式下被暴露给程序员。这允许与中间结果的紧循环,其中中间结果不需要存储到存储器,以便更高效地运行,并且允许操作数移动和对准与执行流水线的解耦,以便在由编译器进行的流水线优化中提供更大的灵活性。错误!没有找到参考源。这些寄存器在图20中图示的PIPE部分上被标记为X、Y和Z。这些总是存在并且被用来甚至利用常规指令来使硬件流水线化。但是,在HyperOp中,它们由指令编码连同所示的复用硬件直接控制,以便为了性能和功率的优化而提供对数据流的非常细粒度的控制。

这可以很容易地利用附加的编码位被扩展到附加的硬件。图20仅仅是一种示例PE体系架构。

让HyperOp指令控制五个执行单元的位字段的格式的例子在图27中示出,该图说明类似指令集的通用编码。一些高编号的位可以发信号通知与图27中所示不同的特殊指令格式。第一个字段(No.127)被用来发信号通知PE指令或者是用于多部分指令的128位编码或者是用于单部分指令的64位编码。“condExec”字段被用来基于已经被计算并作为状态存储在PE中的条件允许对指令某些字段的有条件执行。三个“typ”字段与AGU字段结合使用,作为控制信息的一部分。用于地址生成单元(G0、G1和G2)的两组字段控制在那些单元中的每一个上执行的操作。最后(最低编号位)两个字段每个都是20位字段,以控制在执行单元中的两条流水线化数据路径中的每一条上执行的操作。

要注意的是,独立控制对于多达五个执行单元是可能的。每个单元能够按吞吐量每时钟执行1个或多个操作。典型的HyperOp可以每时钟控制大约8至12个基本操作。如果所有重复硬件也都在使用并且我们将每个16位数据字的加载和存储计数为一个“Op”,则有可能使用这种HyperOp指令格式获得大约36op/时钟。利用1.5GHz时钟和256PE设计点,这几乎是14TOPS(每秒万亿(tera)次操作)。

这是控制指令级并行化并且将那种并行化的调度和优化留在编译器和软件开发工具领域中的非常高效的途径。这相对于超标量型方案大大最小化了硬件,虽然超标量型方案确实要求编译器优化来达到峰值性能,但是在运行时也要求更大量的硬件和功率来完全重新排序和优化操作数、操作和结果。

用于“FIR”滤波器的并行汇编语言的例子可能帮助说明这如何工作。这种并行汇编语言例子对应于在代码部分M中提供的ANSI C代码例子。“||”符号分离要经由HyperOp编码指令并行完成的操作。

//对当前样本数据执行FIR滤波并产生样本输出

//%b1指向结构com.com

//%b2指向系数数组滤波器

//%d1指向结构com.result

//%i1是索引i

{repeat1$0,FILTER_LENGTH-1,$4,%il,ACCO=0;

|A|1di com.com,%b1;|B|1di filter,%b2;|C|void;

|D|void;|G|void;}

{|A|1d640[%b1+%il],%AB;|B|void;|C|1d640[%b2+%il],%C;

|DP0|qmadd16%AB,%C,%ACC0;|D|st32%ACC0,%d1;

|G|void;}

代码部分P:用于对应于jANSI C中代码部分M的FIR滤波器函数的并行汇编语言代码

提取/流控制

硬件还可以包括相当标准的指令提取单元,该单元保持流水线经由预取方法被馈送以指令。存在附连到这种提取单元并耦合到指令中的流控制,以提供处理某些控制条件的高效途径。这些包括:

●用于以低开销方式加速循环的重复硬件

●重复缓冲

●有条件执行(多级)

指令提取/缓冲

指令提取和解码单元的例子在图28中示出。指令可以以FIFO方式维持在指令缓冲区中,其中输出包含导致指令序列被存储的当前指令。

当指令被发布时,IFU计算新的指令地址并且读取指令存储器(IM),并且指令在指令缓冲区中被加载。IFU可以处理作为长度混合的指令,例如64b和128b。这些被打包在指令存储器中,没有填充符。来自IM的第一指令字(IW)可以包含用于指令长度的代码。在启动时,读取128位的指令。接着,在指令发布之后,适当的位数被读取,以装满被发布的指令的字。

许多指令可以被存储在指令缓冲区中;典型的例子将是8至16。在这个例子中,指令按序列被维持并且不重新排序。动态重新排序在一些微处理器体系架构中进行,但是需要复杂的逻辑,并且会消耗相当大的功率。

当当前指令完成时,它就“退役”并且下一个指令被指定为当前指令,以此类推。小到足以适应指令缓冲区的指令的组可以高效地在循环中执行,并且可以不需要任何附加的提取一直到循环完成。重复的硬件编程被用来检测这些序列并且在缓冲区中保持适当的指令。这提供非常功率高效的内循环。缓冲区和重复的硬件支持多达3深度(或者3维循环执行)的嵌套。对于单个指令的最高效的内循环,该单个指令作为当前指令保持静止并且简单地驱动控制来以静态方式解码,直到循环计数被满足。这对于可编程体系架构是非常功率高效的。

在从重复缓冲区的执行期间,当不需要提取时,指令存储器可以被置于低功率状态,以节约功率。函数的最内循环中指令的数量是对于循环的每次迭代的执行时间的很大的因素,并且因此与函数的速度、吞吐量和带宽成反比。重复缓冲区的目的是提供足够的深度(最有可能是8或16个指令),使得最关键的内循环将适应该缓冲区。

这种混合体系架构每PE一次处理一条指令,并且因此可以被称为标量的(非超标量的)。但是,HyperOp的子指令被独立解码并且因此可以维持子指令的多于一个线程。优化编译器工具可以将用户程序编译成指令流,并接着通过将指令流分割成子指令的多个线程以实现更大的并行化来将其优化。服从避免数据危害的规则,各个子指令可以在指令流中前后移动以优化指令流。将子指令锁定以步调一致地发布的这种限制大大降低了解码器、控制和提取单元的复杂性,由此节约了功耗。

重复

重复硬件是在实时DSP算法的紧内循环上提供硬件中的循环的机制,其比GPP的典型测试-分支方法更高效。

重复循环硬件提供:

●为了零开销循环而用于内循环的硬件预加载

●使用主索引寄存器,支持3级嵌套

●4个次级基本/索引寄存器的自动递增

重复循环的函数由以下像C的代码示出:

代码部分Q:重复循环伪代码。

用于实现这种操作的硬件寄存器在表1中示出。这些当中的一些之前已经在地址计算的讨论中讨论过了。因为用于重复循环的索引值常常被用来将地址计算成被处理的数据的数组,所以这些寄存器可被AGU访问。

表1:重复寄存器

在64位和128位编码中,可以有特殊的指令来在单个时钟中加载所有这些必要的寄存器并且可选地开始重复硬件。这里相对于前几代的一个创新是包括加载重复硬件并且一旦到达循环的TOP地址就准备其开始的途径。这提供了3个深循环,其中两个最内的循环在开始外循环之前被加载。以这种方式,对于内循环不存在重复指令的提取并且因此就循环计数而言它们变成零开销循环。

利用这种硬件,有可能在一组指令上实现3-深嵌套,其中整个循环利用仅指令所需的时钟执行。对于循环计数器、递增、比较、分支、地址计算等不需要循环开销。这释放了数据路径硬件以使其集中到算法的算术部分。

图29

图29是示出接收和执行多部分指令的第一实施例的流程图。

该方法可以在包括提取单元和多个地址生成器单元的多处理器装置中操作。提取单元可以被配置为接收多部分指令,其中多部分指令包括多个字段。该多个地址生成器单元可以包括被配置为依赖于多个字段中的第一字段执行算术运算的第一地址生成器单元。该多个地址生成器单元还可以包括被配置为生成多个地址中的至少一个地址的第二地址生成器单元,其中该多个地址中的每个地址依赖于该多个字段中的相应字段。多处理器装置还可以包括被配置为依赖于该多个地址中的第一地址存储第一数据的存储单元。另外,提取单元可以被配置为依赖于该多个地址中的第二地址提取第二数据。多处理器装置还可以包括被配置为生成该多个地址中的至少另一地址的第三地址生成器单元。另外,该多个字段的子集中的每个字段可以编码要由该多个地址生成器单元中的相应地址生成器单元执行的操作。

用于接收和执行多部分指令的的方法可以如下操作。

首先在2902,处理器可以接收多部分指令,其中多部分指令包括多个字段。接着在2904,处理器可以依赖于该多个字段中的第一字段执行算术运算。在2906,处理器还可以依赖于该多个字段中的相应字段生成多个地址中的给定地址。

在附加实施例中,该方法还可以包括依赖于多个地址中的第一地址存储第一数据。该方法还可以包括依赖于该多个地址中的第二地址提取第二数据。在一种实施例中,处理器包括多个地址生成器单元,并且执行算术运算包括使用这多个地址生成器单元中的至少一个地址生成器单元执行该算术运算。另外,在一种实施例中,该多个字段的子集中的每个字段可以编码要由多个地址生成器单元中的相应地址生成器单元执行的操作。

图29的方法可以在包括多个处理器和多个动态可配置的通信元件的系统中操作,其中通信元件可以是例如数据存储器路由器(DMR),其中该多个处理器和多个动态可配置的通信元件可以以穿插布置耦合在一起。多个处理器中的给定处理器可以被配置为:1)接收多部分指令,其中多部分指令包括多个字段;2)依赖于该多个字段中的给定字段执行算术运算;3)依赖于该多个字段的子集生成多个地址。多个处理器中的每个处理器可以还被配置为依赖于多个地址中的第一地址存储第一数据。另外,多个处理器中的给定处理器可以还被配置为依赖于多个地址中的第二地址提取第二数据。

此外,多个处理器中的给定处理器可以包括多个地址生成器单元,并且多个字段的子集中的每个字段可以编码要由多个地址生成器单元中的相应地址生成器单元执行的操作。

图30

图30是示出接收和执行多部分指令的第一实施例的流程图。

该方法可以在包括提取单元和执行单元的多处理器装置中操作。提取单元可以被配置为接收多部分指令,其中多部分指令包括多个数据字段。执行单元可以包括多个流水线单元并且可以被配置为:1)依赖于多个字段中的第一字段使用多个流水线单元中的给定流水线单元执行第一操作;及2)依赖于多个字段中的第二字段并行地使用多个流水线单元中的至少两个流水线单元执行第二操作。多个流水线单元中的每个流水线单元可以包括多个乘法器单元和多个加法器单元。多个流水线单元中的每个流水线单元还可以包括被配置为将第一数量的部分乘积压缩成第二数量的部分乘积的压缩器单元。多个流水线单元中的第一流水线单元的压缩器单元可以被配置为从多个流水线单元中的第二流水线单元的压缩器单元接收至少一个部分乘积。而且,多个字段的子集中的每个字段可以编码要由多个流水线单元中的相应流水线单元执行的操作。

用于接收和执行多部分指令的方法可以如下操作。在3002,处理器可以接收多部分指令,其中多部分指令包括多个字段。接着在3004,处理器可以依赖于多个字段中的第一字段使用多个流水线单元中的给定流水线单元执行第一操作。在3006,处理器可以依赖于多个字段中的第二字段并行地使用多个流水线单元中的至少两个流水线单元执行第二操作。

在一种实施例中,多个字段的子集中的每个字段可以编码要由多个流水线单元中的相应流水线单元执行的操作。

执行第二操作可以包括由多个流水线单元中的该至少两个流水线单元中的第一流水线单元生成第一组部分乘积,并且由多个流水线单元中的该至少两个流水线单元中的第二流水线单元依赖于第一组部分乘积中的至少一个部分乘积生成第二组部分乘积。

由多个流水线单元中的这至少两个流水线单元中的第一流水线单元生成第一组部分乘积可以包括将第一数量的部分乘积压缩成第二数量的部分乘积,其中第二数量小于第一数量。多个流水线单元中的每个流水线单元可以包括多个乘法器单元和多个加法器单元。

图30的方法可以在包括多个处理器和多个动态可配置的通信元件(例如DMR)的系统中操作。多个处理器中的每个处理器可以包括多个流水线单元。多个处理器和多个动态可配置的通信元件可以在穿插布置中耦合到一起。多个处理器中的每个处理器可以被配置为:1)接收多部分指令,其中多部分指令包括多个字段;2)依赖于多个字段中的第一字段使用多个流水线单元中的给定流水线单元执行第一操作;及3)依赖于多个字段中的第二字段并行地使用多个流水线单元中的至少两个流水线单元执行第二操作。

每个处理器的多个流水线单元中的每个流水线单元可以包括多个乘法器单元和多个加法器单元。多个处理器中的每个处理器的多个流水线单元中的每个流水线单元还可以包括被配置为将第一数量的部分乘积压缩成第二数量的部分乘积的压缩器单元。相应处理器的第一流水线单元的压缩器单元中的至少一个可以还被配置为从该相应处理器的第二流水线的另一压缩器单元接收至少一个部分乘积。

在一种实施例中,多个字段的子集中的每个字段可以编码要由多个流水线单元的相应流水线单元执行的操作。

图31

图31是示出由处理器执行操作的一种实施例的流程图。

该方法可以在多处理器装置中执行,其中多处理器装置包括被配置为接收指令的提取单元和包括多个流水线单元的执行单元。每个流水线单元可以包括累加器单元。执行单元可以被配置为:1)使用多个流水线单元中的第一流水线单元,依赖于接收到的指令执行第一操作以生成结果;2)在多个流水线单元中的第一流水线单元的累加器单元中存储结果;及3)将存储在多个流水线单元中的第一流水线单元的累加器单元中的结果传送到处理器的累加器单元。多个流水线单元中的每个流水线单元可以包括多个乘法器单元和多个加法器单元。

作为一个例子,第一操作可以包括乘法操作,并且为了在第一流水线单元的累加器单元中存储结果,执行单元可以还被配置为在第一流水线单元中存储乘法操作的至少一个部分乘积。

在一种实施例中,指令可以包括多个字段,并且为了使用第一流水线单元依赖于接收到的指令执行第一操作,执行单元可以还被配置为使用第一流水线单元,依赖于多个字段中的第一字段执行第一操作。

执行单元可以还被配置为依赖于多个字段中的第二字段并行地使用多个流水线单元中的至少两个流水线单元执行第二操作。

用于执行操作的方法可以如下操作。

在3102,该方法可以包括使用多个处理器中的第一处理器执行第一操作。第一处理器可以包括第一多个累加器,并且执行第一操作可以包括在第一多个累加器中的给定累加器中存储值。

在3104,该方法可以包括将存储在第一多个累加器中的给定累加器中的值传送到多个处理器中的第二处理器中所包括的第二多个累加器中的给定累加器。

在3106,该方法可以包括依赖于存储在第二多个累加器中的给定累加器中的值使用多个处理器中的第二处理器执行第二操作。

在一种实施例中,该方法还可以包括由第一处理器接收第一多部分指令,其中第一多部分指令包括第一多个字段。使用第一处理器执行第一操作可以包括依赖于第一多个字段中的第一字段使用多个处理器中的第一处理器执行第一操作。

该方法还可以包括由多个处理器中的第二处理器接收第二多部分指令,其中第二多部分指令包括第二多个字段。

依赖于存储在给定累加器中的值使用第二处理器执行第二操作可以包括依赖于第二多个字段中的第一字段使用第二处理器执行第二操作。

图31的方法可以在包括多个处理器和多个动态可配置的通信元件(例如DMR)的系统中操作。多个处理器中的每个处理器可以包括多个累加器单元。多个处理器和多个动态可配置的通信元件可以以穿插布置耦合在一起。第一处理器可以被配置为:1)接收第一指令;2)依赖于第一指令执行第一操作,以生成第一结果;3)在第一处理器的多个累加器单元中的给定累加器单元中存储结果;及4)将存储在第一处理器的多个累加器单元中的给定累加器单元中的结果传送到多个处理器中的第二处理器的多个累加器单元中的给定累加器单元。

多个处理器中的第二处理器可以被配置为:1)接收第二指令;及2)依赖于第二指令和存储在多个处理器中的第二处理器的多个累加器单元中的给定累加器单元中的值执行第二操作。

第一指令可以包括第一多部分指令,其中第一多部分指令包括第一多个字段,并且其中第二指令包括第二多部分指令,其中第二多部分指令包括第二多个字段。为了依赖于第一指令执行第一操作,第一处理器可以还被配置为依赖于第一多个字段中的第一字段执行第一操作。为了依赖于第二指令和存储在给定累加器单元中的值执行第二操作,第二处理器可以还被配置为依赖于第二多个字段中的第一字段执行第二操作。

图32

图32是示出由处理器执行操作的一种实施例的流程图。

该方法可以在包括提取单元、多个地址生成器单元和多个缓冲区的多处理器装置中执行。提取单元可以被配置为接收多部分指令,其中多部分指令包括多个字段。多个地址生成器单元中的第一地址生成器单元可以被配置为依赖于第一字段执行第一操作,以生成第一结果。此外,多个地址生成器单元中的第二地址生成器单元可以被配置为依赖于多个字段中的第二字段和第一结果执行第二操作。

在一种实施例中,第一缓冲区被配置为依赖于多个字段中的至少一个字段存储第一步幅值,并且第二缓冲区被配置为依赖于多个字段中的至少另一个字段存储第二步幅值。

为了依赖于多个字段中的第一字段执行第一操作,第一地址生成器单元可以还被配置为依赖于第一步幅值执行第一操作。

用于执行操作的该方法可以如下操作。该方法可以在包括多个地址生成器单元和多个缓冲区的处理器中操作。

在3202,该方法可以接收多部分指令,其中多部分指令包括多个字段。在3204,该方法可以依赖于多个字段中的第一字段使用第一地址生成器单元执行第一操作。在3206,该方法可以依赖于多个字段中的第二字段和第一结果使用第二地址生成器单元执行第二操作。

该方法还可以包括在多个缓冲区中的第一缓冲区中存储第一步幅值并且在多个缓冲区中的第二缓冲区中存储第二步幅值。

依赖于第一字段使用第一地址生成器单元执行第一操作可以包括依赖于第一步幅值执行第一操作。

该方法可以在包括多个处理器和多个动态可配置的通信元件(例如DMR)的系统中操作。多个处理器和多个动态可配置的通信元件可以在穿插布置中耦合到一起。多个处理器中的给定处理器可以被配置为:1)接收多部分指令,其中多部分指令包括多个字段;2)依赖于多个字段中的第一字段使用多个生成器中的第一地址生成器执行第一操作,以生成第一结果;及3)依赖于多个字段中的第二字段和第一结果使用多个生成器中的第二地址生成器执行第二操作。

在一种实施例中,多个处理器中的每个处理器包括多个缓冲区。给定处理器可以还被配置为在该给定处理器的多个缓冲区中的第一缓冲区中存储相应的第一步幅值。给定处理器可以还被配置为在该给定处理器的多个缓冲区中的第二缓冲区中存储相应的第二步幅值。

为了依赖于第一字段使用第一地址生成器执行第一操作,给定处理器可以还被配置为依赖于相应的第一步幅值执行第一操作。

图33

图33是示出操作处理器的一种实施例的流程图。

该方法可以在包括提取单元、执行单元和多个地址生成器单元的多处理器装置中操作。提取单元可以被配置为接收指令。执行单元可以包括多个流水线单元。执行单元可以被配置为:1)响应于确定指令是多部分指令而使用多个流水线单元中的第一流水线单元执行第一操作,其中多部分指令包括多个字段,其中第一操作依赖于多个字段中的第一字段;及2)依赖于多个字段中的第二字段并行地使用多个流水线单元中的至少两个流水线单元执行第二操作。

执行单元可以还被配置为响应于确定指令是单部分指令而使用第一流水线单元执行第三操作。为了响应于确定指令是单部分指令而使用多个流水线单元中的第一流水线单元执行第三操作,执行单元可以还被配置为依赖于之前接收到的多部分指令使用多个流水线单元中的第二流水线单元执行第四操作。第一地址生成器可以被配置为依赖于多个字段中的第二字段执行算术运算。

用于操作处理器的该方法可以如下操作,该方法可以在包括多个流水线单元的处理器中操作。

在3302,该方法可以接收指令。

在3304,该方法可以响应于确定指令是多部分指令而使用第一流水线单元执行第一操作。多部分指令可以包括多个字段,其中第一操作依赖于多个字段中的第一字段。

在3306,该方法可以依赖于多个字段中的第二字段并行地使用多个流水线单元中的至少两个流水线单元执行第二操作。

该方法还可以响应于确定指令是单部分指令而使用第一流水线单元执行第三操作。使用第一流水线单元执行第三操作可以包括依赖于之前接收到的多部分指令而使用多个流水线单元中的第二流水线单元执行第四操作。

该方法还可以包括响应于确定指令是单部分指令而提取第一地址。该方法还可以包括依赖于多个字段的子集生成多个地址。

该方法可以在包括多个处理器和多个动态可配置的通信元件(例如DMR)的系统中操作。多个处理器和多个动态可配置的通信元件可以以穿插布置耦合在一起。多个处理器中的每个处理器可以包括多个流水线单元。每个处理器可以被配置为:1)接收指令;2)响应于确定指令是多部分指令而使用多个流水线单元中的第一流水线单元执行第一操作,其中多部分指令包括多个字段,其中第一操作依赖于多个字段中的第一字段;及3)依赖于多个字段中的第二字段并行地使用多个流水线单元中的至少两个流水线单元执行第二操作。

每个处理器可以还被配置为响应于确定指令是单部分指令而使用第一流水线单元执行第三操作。为了响应于确定指令是单部分指令而使用第一流水线单元执行第三操作,每个处理器可以还被配置为依赖于之前接收到的多部分指令而使用第二流水线单元执行第四操作。

在一种实施例中,每个处理器还被配置为依赖于多个字段的子集生成多个地址。每个处理器可以还被配置为依赖于多个地址中的第一地址存储第一数据。

图34

图34是示出操作具有多个流水线单元的处理器的第一实施例的流程图。

该方法可以在包括提取单元和执行单元的装置中操作。提取单元可以被配置为接收多条指令,并且依赖于接收到的多条指令识别至少一个重复的指令序列。该至少一个重复的指令序列可以包括所述多条指令中的至少一条指令。执行单元可以包括多个流水线单元,并且可以被配置为依赖于识别出的重复指令序列选择性地禁用多个流水线单元的第一子集达至少第一周期。执行单元可以还被配置为依赖于识别出的重复指令序列选择性地禁用多个流水线单元的第二子集达第二周期。例如,禁用可以包括将多个流水线单元的子集置于低功率模式。该装置可以还包括多个地址生成器单元、提取单元和存储单元。存储单元可以被配置为依赖于至少一个重复的指令序列进入低功率模式。提取单元可以被配置为依赖于该至少一个重复的指令序列进入低功率模式。多个地址生成器单元中的至少一个可以被配置为依赖于该至少一个重复的指令序列进入低功率模式。

用于操作处理器的该方法可以如下操作。

首先在3402,处理器可以接收多条指令。接着在3404,处理器可以依赖于接收到的多条指令识别至少一个重复的指令序列,其中这至少一个重复的指令序列包括至少一条指令。在3406,处理器可以依赖于识别出的重复的指令序列选择性地禁用多个流水线单元中的第一子集达至少第一周期。在3408,处理器可以依赖于识别出的重复的指令序列选择性地禁用多个流水线单元中的第二子集达第二周期。

在3410,处理器可以依赖于该至少一个重复的指令序列禁用存储单元。在3412,处理器可以另选或附加地依赖于该至少一个重复的指令序列禁用提取单元。在3414,处理器可以另选地或附加地依赖于该至少一个重复的指令序列选择性地禁用多个地址生成器单元的子集。

图34的方法可以在包括多个处理器和多个动态可配置的通信元件的系统中操作,其中多个处理器和多个动态可配置的通信元件可以以穿插布置耦合在一起。多个处理器中的每个处理器可以包括多个流水线单元,并且可以被配置为:1)接收多条指令;2)依赖于接收到的多条指令识别至少一个重复的指令序列,其中这至少一个重复的指令序列包括这多条指令中的至少一条指令;3)依赖于识别出的重复的指令序列选择性地禁用多个流水线单元的第一子集达至少第一周期;及4)依赖于识别出的重复的指令序列选择性地禁用多个流水线单元的第二子集达第二周期。在附加实施例中,多个处理器中的每个处理器可以包括多个地址生成器单元、提取单元和存储单元。存储单元、提取单元和多个地址生成器单元中的至少一个这些当中的一个或多个可以被配置为依赖于该至少一个重复的指令序列进入低功率模式。

以下编号的段落描述附加实施例:

控制多条数据路径

1.一种装置,包括:被配置为接收多部分指令的提取单元,其中多部分指令包括多个数据字段;及包括多个流水线单元的执行单元,其中执行单元被配置为:依赖于多个字段中的第一字段使用多个流水线单元中的给定流水线单元执行第一操作;以及依赖于多个字段中的第二字段并行地使用多个流水线单元中的至少两个流水线单元执行第二操作。

2.如条款1所述的装置,其中多个流水线单元中的每个流水线单元包括多个乘法器单元和多个加法器单元。

3.如条款1所述的装置,其中多个流水线单元中的每个流水线单元包括被配置为将第一数量的部分乘积压缩成第二数量的部分乘积的压缩器单元。

4.如条款4所述的装置,其中多个流水线单元中的第一流水线单元的压缩器单元被配置为从多个流水线单元中的第二流水线单元的压缩器单元接收至少一个部分乘积。

5.如条款1所述的装置,其中多个字段的子集中的每个字段编码要由多个流水线单元中的相应流水线单元执行的操作。

6.一种用于操作处理器的方法,其中处理器包括多个流水线单元,该方法包括:接收多部分指令,其中多部分指令包括多个字段;依赖于多个字段中的第一字段使用多个流水线单元中的给定流水线单元执行第一操作;以及依赖于多个字段中的第二字段并行地使用多个流水线单元中的至少两个流水线单元执行第二操作。

7.如条款6所述的方法,其中多个字段的子集中的每个字段编码要由多个流水线单元中的相应流水线单元执行的操作。

8.如条款6所述的方法,其中执行第二操作包括由多个流水线单元中的至少两个流水线单元中的第一流水线单元生成第一组部分乘积,并且依赖于第一组部分乘积中的至少一个部分乘积由多个流水线单元中的至少两个流水线单元中的第二流水线单元生成第二组部分乘积。

9.如条款8所述的方法,其中由多个流水线单元中的至少两个流水线单元中的第一流水线单元生成第一组部分乘积包括将第一数量的部分乘积压缩成第二数量的部分乘积,其中第二数量小于第一数量。

10.如条款6所述的方法,其中多个流水线单元中的每个流水线单元包括多个乘法器单元和多个加法器单元。

11.一种系统,包括:多个处理器,其中多个处理器中的每个处理器包括多个流水线单元;及多个多个动态可配置的通信元件;其中该多个处理器和多个动态可配置的通信元件以穿插布置耦合在一起;其中多个处理器中的每个处理器被配置为:接收多部分指令,其中多部分指令包括多个字段;依赖于多个字段中的第一字段使用多个流水线单元中的给定流水线单元执行第一操作;以及依赖于多个字段中的第二字段并行地使用多个流水线单元中的至少两个流水线单元执行第二操作。

12.如条款11所述的系统,其中每个处理器的多个流水线单元中的每个流水线单元包括多个乘法器单元和多个加法器单元。

13.如条款11所述的系统,其中每个处理器的多个流水线单元中的每个流水线单元包括被配置为将第一数量的部分乘积压缩成第二数量的部分乘积的压缩器单元。

14.如条款13所述的系统,其中多个处理器中的给定处理器的多个流水线单元中的第一流水线单元的压缩器单元还被配置为从多个处理器中的给定处理器的多个流水线单元中的第二流水线单元的另一个压缩器单元接收至少一个部分乘积。

15.如条款11所述的系统,其中多个字段的子集中的每个字段编码要由多个流水线单元中的相应流水线单元执行的操作。

累加转发

1.一种装置,包括:被配置为接收指令的提取单元;包括多个流水线单元的执行单元,其中多个流水线单元中的每个流水线单元包括累积器单元,其中执行单元被配置为:依赖于接收到的指令使用多个流水线单元中的第一流水线单元执行第一操作以生成结果;将结果存储在多个流水线单元中的第一流水线单元的累加器单元中;以及将存储在多个流水线单元中的第一流水线单元的累加器单元中的结果传送到处理器的累加器单元。

2.如条款1所述的装置,其中多个流水线单元中的每个流水线单元包括多个乘法器单元和多个加法器单元。

3.如条款1所述的装置,其中第一操作包括乘法操作,并且其中为了在多个流水线单元中的第一流水线单元的累加器单元中存储结果,执行单元还被配置为在多个流水线单元中的第一流水线单元中存储乘法操作的至少一个部分乘积。

4.如条款1所述的装置,其中指令包括多个字段,并且其中为了依赖于接收到的指令使用多个流水线单元中的第一流水线单元执行第一操作,执行单元还被配置为依赖于多个字段中的第一字段使用多个流水线单元中的第一流水线单元执行第一操作。

5.如条款5所述的装置,其中执行单元还被配置为依赖于多个字段中的第二字段并行地使用多个流水线单元中的至少两个流水线单元执行第二操作。

6.一种用于操作多个处理器的方法,该方法包括:使用多个处理器中的第一处理器执行第一操作,其中第一处理器包括第一多个累加器,并且其中执行第一操作包括在第一多个累加器中的给定累加器中存储值;将存储在第一多个累加器中的给定累加器中的值传送到多个处理器中的第二处理器中所包括的第二多个累加器中的给定累加器;以及依赖于存储在第二多个累加器中的给定累加器中的值使用多个处理器中的第二处理器执行第二操作。

7.如条款6所述的方法,还包括由第一处理器接收第一多部分指令,其中第一多部分指令包括第一多个字段。

8.如条款7所述的方法,其中使用多个处理器中的第一处理器执行第一操作包括依赖于第一多个字段中的第一字段使用多个处理器中的第一处理器执行第一操作。

9.如条款8所述的方法,还包括由多个处理器中的第二处理器接收第二多部分指令,其中第二多部分指令包括第二多个字段。

10.如条款9所述的方法,其中依赖于存储在第二多个累加器中的给定累加器中的值使用多个处理器中的第二处理器执行第二操作包括依赖于第二多个字段中的第一字段使用多个处理器中的第二处理器执行第二操作。

11.一种系统,包括:多个处理器,其中多个处理器中的每个处理器包括多个累加器单元;以及多个动态可配置的通信元件;其中多个处理器和多个动态可配置的通信元件以穿插布置耦合在一起;其中多个处理器中的第一处理器被配置为:接收第一指令;依赖于第一指令执行第一操作以生成结果;在第一处理器的多个累加器单元中的给定累加器单元中存储结果;以及将存储在第一处理器的多个累加器单元中的给定累加器单元中的结果传送到多个处理器中的第二处理器的多个累加器单元中的给定累加器单元。

12.如条款11所述的系统,其中多个处理器中的第二处理器被配置为:接收第二指令;以及依赖于第二指令和存储在多个处理器中的第二处理器的多个累加器单元中的给定累加器单元的值执行第二操作。

13.如条款12所述的系统,其中第一指令包括第一多部分指令,其中第一多部分指令包括第一多个字段,并且其中第二指令包括第二多部分指令,其中第二多部分指令包括第二多个字段。

14.如条款13所述的系统,其中为了依赖于第一指令执行第一操作,多个处理器中的第一处理器还被配置为依赖于第一多个字段中的第一字段执行第一操作。

15.如条款13所述的系统,其中为了依赖于第二指令和存储在给定累加器单元的值执行第二操作,多个处理器中的第二处理器还被配置为依赖于第二多个字段中的第一字段执行第二操作。

AGU耦合(环形寻址)

1.一种装置,包括:被配置为接收多部分指令的提取单元,其中多部分指令包括多个字段;以及多个地址生成器单元;其中多个地址生成器单元中的第一地址生成器单元被配置为依赖于多个字段中的第一字段执行第一操作以生成第一结果;并且其中多个地址生成器单元中的第二地址生成器单元被配置为依赖于多个字段中的第二字段和第一结果执行第二操作。

2.如条款1所述的装置,还包括多个缓冲区。

3.如条款2所述的装置,其中多个缓冲区中的第一缓冲区被配置为依赖于多个字段中的至少一个字段存储第一步幅值。

4.如条款3所述的装置,其中多个缓冲区中的第二缓冲区被配置为依赖于多个字段中的至少另一个字段存储第二步幅值。

5.如条款3所述的装置,其中为了依赖于多个字段中的第一字段执行第一操作,多个地址生成器单元中的第一地址生成器单元还被配置为依赖于第一步幅值执行第一操作。

6.一种用于操作处理器的方法,其中处理器包括多个地址生成器单元,该方法包括:接收多部分指令,其中多部分指令包括多个字段;依赖于多个字段中的第一字段使用多个地址生成器单元中的第一地址生成器单元执行第一操作;以及依赖于多个字段中的第二字段和第一结果使用多个地址生成器单元中的第二地址生成器单元执行第二操作。

7.如条款6所述的方法,其中处理器还包括多个缓冲区。

8.如条款7所述的方法,还包括在多个缓冲区中的第一缓冲区中存储第一步幅值。

9.如条款8所述的方法,还包括在多个缓冲区中的第二缓冲区中存储第二步幅值。

10.如条款7所述的方法,其中依赖于多个字段中的第一字段使用多个地址生成器单元中的第一地址生成器单元执行第一操作包括依赖于第一步幅值执行第一操作。

11.一种系统,包括:多个处理器;以及多个动态可配置的通信元件;其中多个处理器和多个动态可配置的通信元件在穿插配置中耦合到一起;其中多个处理器中的给定处理器被配置为:接收多部分指令,其中多部分指令包括多个字段;依赖于多个字段中的第一字段使用多个生成器中的第一地址生成器执行第一操作以生成第一结果;以及依赖于多个字段中的第二字段和第一结果使用多个生成器中的第二地址生成器执行第二操作。

12.如条款11所述的系统,其中多个处理器中的每个处理器包括多个缓冲区。

13.如条款12所述的系统,其中多个处理器中的给定处理器还被配置为在该给定处理器的多个缓冲区中的第一缓冲区中存储相应的第一步幅值。

14.如条款13所述的系统,其中多个处理器中的给定处理器还被配置为在该给定处理器的多个缓冲区中的第二缓冲区中存储相应的第二步幅值。

15.如条款13所述的系统,其中为了依赖于多个字段中的第一字段使用多个生成器中的第一地址生成器执行第一操作,多个处理器中的给定处理器还被配置为依赖于该相应的第一步幅值执行第一操作。

通过单部分/多部分确定来接收指令

1.一种装置,包括:被配置为接收指令的提取单元;包括多个流水线单元的执行单元,其中执行单元被配置为:响应于确定指令是多部分指令而使用多个流水线单元中的第一流水线单元执行第一操作,其中多部分指令包括多个字段,其中第一操作依赖于多个字段中的第一字段;以及依赖于多个字段中的第二字段并行地使用多个流水线单元中的至少两个流水线单元执行第二操作。

2.如条款1所述的装置,其中执行单元还被配置为响应于确定指令是单部分指令而使用多个流水线单元中的第一流水线单元执行第三操作。

3.如条款2所述的装置,其中为了响应于确定指令是单部分指令而使用多个流水线单元中的第一流水线单元执行第三操作,执行单元还被配置为依赖于之前接收到的多部分指令使用多个流水线单元中的第二流水线单元执行第四操作。

4.如条款1所述的装置,还包括多个地址生成器单元。

5.如条款4所述的装置,其中多个地址生成器单元中的第一地址生成器单元被配置为依赖于多个字段中的第二字段执行算术运算。

6.一种用于操作处理器的方法,其中处理器包括多个流水线单元,该方法包括:接收指令;响应于确定指令是多部分指令而使用多个流水线单元中的第一流水线单元执行第一操作,其中多部分指令包括多个字段,其中第一操作依赖于多个字段中的第一字段;以及依赖于多个字段中的第二字段并行地使用多个流水线单元中的至少两个流水线单元执行第二操作。

7.如条款6所述的方法,还包括响应于确定指令是单部分指令而使用多个流水线单元中的第一流水线单元执行第三操作。

8.如条款6所述的方法,其中使用多个流水线单元中的第一流水线单元执行第三操作包括依赖于之前接收到的多部分指令使用多个流水线单元中的第二流水线单元执行第四操作。

9.如条款6所述的方法,还包括响应于确定指令是单部分指令而提取第一地址。

10.如条款6所述的方法,还包括依赖于多个字段的子集生成多个地址。

11.一种系统,包括:多个处理器,其中多个处理器中的每个处理器包括多个流水线单元;以及多个动态可配置的通信单元;其中多个处理器和多个动态可配置的通信单元以穿插布置耦合在一起;其中多个处理器中的每个处理器被配置为:接收指令;响应于确定指令是多部分指令而使用多个流水线单元中的第一流水线单元执行第一操作,其中多部分指令包括多个字段,其中第一操作依赖于多个字段中的第一字段;以及依赖于多个字段中的第二字段并行地使用多个流水线单元中的至少两个流水线单元执行第二操作。

12.如条款11所述的系统,其中多个处理器中的每个处理器还被配置为响应于确定指令是单部分指令而使用多个流水线单元中的第一流水线单元执行第三操作。

13.如条款12所述的系统,其中为了响应于确定指令是单部分指令而使用多个流水线单元中的第一流水线单元执行第三操作,多个处理器中的每个处理器还被配置为依赖于之前接收到的多部分指令使用多个流水线单元中的第二流水线单元执行第四操作。

14.如条款11所述的系统,其中多个处理器中的每个处理器还被配置为依赖于多个字段的子集生成多个地址。

15.如条款11所述的系统,其中多个处理器中的每个处理器还被配置为依赖于多个地址中的第一地址存储第一数据。

在重复循环期间将不用的部分断电

1.一种装置,包括:提取单元,被配置为:接收多条指令;并且依赖于接收到的多条指令识别至少一个重复的指令序列,其中这至少一个重复的指令序列包括所述多条指令中的至少一条指令;以及包括多个流水线单元的执行单元,其中执行单元被配置为:依赖于识别出的重复的指令序列选择性地禁用多个流水线单元的第一子集达至少第一周期;并且依赖于识别出的重复的指令序列选择性地禁用多个流水线单元的第二子集达第二周期。

2.如条款1所述的装置,还包括多个地址生成器单元、提取单元和存储单元。

3.如条款2所述的装置,其中存储单元被配置为依赖于所述至少一个重复的指令序列进入低功率模式。

4.如条款2所述的装置,其中提取单元被配置为依赖于所述至少一个重复的指令序列进入低功率模式。

5.如条款2所述的装置,其中多个地址生成器单元中的至少一个被配置为依赖于所述至少一个重复的指令序列进入低功率模式。

6.一种用于操作处理器的方法,其中处理器包括多个流水线单元,该方法包括:接收多条指令;依赖于接收到的多条指令识别至少一个重复的指令序列,其中这至少一个重复的指令序列包括至少一条指令;依赖于识别出的重复的指令序列选择性地禁用多个流水线单元的第一子集达至少第一周期;以及依赖于识别出的重复的指令序列选择性地禁用多个流水线单元的第二子集达第二周期。

7.如条款6所述的方法,其中处理器还包括提取单元、存储单元和多个地址生成器单元。

8.如条款7所述的方法,还包括依赖于所述至少一个重复的指令序列禁用存储单元。

9.如条款7所述的方法,还包括依赖于所述至少一个重复的指令序列禁用提取单元。

10.如条款7所述的方法,还包括依赖于所述至少一个重复的指令序列选择性地禁用多个地址生成器单元的子集。

11.一种系统,包括:多个处理器,其中多个处理器中的每个处理器包括多个流水线单元;以及多个动态可配置的通信元件;其中多个处理器和多个动态可配置的通信元件以穿插布置耦合在一起;其中多个处理器中的每个处理器被配置为:接收多条指令;依赖于接收到的多条指令识别至少一个重复的指令序列,其中这至少一个重复的指令序列包括所述多条指令中的至少一条指令;依赖于识别出的重复的指令序列选择性地禁用多个流水线单元的第一子集达至少第一周期;以及依赖于识别出的重复的指令序列选择性地禁用多个流水线单元的第二子集达第二周期。

12.如条款11所述的系统,其中多个处理器中的每个处理器包括多个地址生成器单元、提取单元和存储单元。

13.如条款12所述的系统,其中存储单元被配置为依赖于所述至少一个重复的指令序列进入低功率模式。

14.如条款12所述的系统,其中提取单元被配置为依赖于所述至少一个重复的指令序列进入低功率模式。

15.如条款12所述的系统,其中多个地址生成器单元中的至少一个被配置为依赖于所述至少一个重复的指令序列进入低功率模式。

在各种实施例中,计算机可读存储器介质可以存储可由MPS的处理器和/或一个或多个外部处理器执行的程序指令,以实现上述各种功能,诸如交换软件应用中所涉及的功能。一般而言,计算机可读存储器介质可以包括任何指令集,其当被执行时实现本文所描述的功能的一部分或全部。一般而言,计算机可读存储器介质可以包括在使用期间可由计算机访问以便向计算机系统提供指令和/或数据的任何存储介质。例如,计算机可读存储器介质可以包括存储介质,诸如磁或光介质,例如盘(固定的或可移动的)、带、CD-ROM、DVD-ROM、CD-R、CD-RW、DVD-R、DVD-RW或Blu-Ray。存储介质可以还包括易失性或非易失性存储器介质,诸如RAM(例如,同步动态RAM(SDRAM)、Rambus DRAM(RDRAM)、静态RAM(SRAM),等等)、ROM、闪速存储器、可经由诸如通用串行总线(USB)接口的外围接口访问的非易失性存储器(例如,闪速存储器)、闪速存储器接口(FMI)、串行外设接口(SPI),等等。存储介质可以包括微机电系统(MEMS),以及可经由诸如网络和/或无线链路的通信介质访问的存储介质。载波介质可以包括计算机可访问的存储介质以及诸如有线或无线传输的传输介质。

虽然本发明的系统和方法已结合优选实施例进行了描述,但并不意在限定到本文所阐述的具体形式,相反,它意在覆盖可以合理地包括在如由权利要求限定的本发明的精神和范围内的此类另选方案、修改和等同物。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1