用于设计重用的多处理器编程工具包的制作方法
【技术领域】
[0001] 本发明的领域一般而言涉及用于数字电子系统的软件开发,并且更具体而言,涉 及用于多处理器阵列的编程技术。
【背景技术】
[0002] 越来越多地,数字电子系统使用一个或多个多处理器阵列(MPA)。数字电子系统的 例子包括:计算机、数字信号处理器OSP)以及嵌入在封闭装备中的那些系统,所述封闭装 备诸如是无线电电话、政府服务无线电、诸如蜂窝电话、智能电话和平板电脑的消费者无线 装备、蜂窝基站装备、视频处理和广播装备、物体识别装备、超光谱图像数据处理,等等。
[0003] MPA可以被松散地定义为多个处理元件(Processing Element,PE) ( 即,处理器)、 支持存储器(Supporting Memory,SM)和高带宽互连网络(Interconnection Network,IN) 〇 在MPA的上下文中,术语"阵列"在其最广泛的意义上被用来指通过网络互连的多个计算单 元(每个计算单元包含处理和存储器资源),其中网络具有在一个、两个、三个或更多个维 度中可用的连接,其中维度包括圆形维度(回路或环)。应当指出,较高维度的MPA可以被 映射到具有较少维度的制造介质上。例如,在IN中具有四维(4D)超立方体形状的MPA可以 被映射到硅集成电路(1C)芯片的3D堆叠上,或者映射到单个2D芯片上,或者甚至计算单 元的1D行上。同样,低维度的MPA可以被映射到较高维度的介质。例如,计算单元的1D行 可以以蜿蜒的形状布置到1C芯片的2D平面上,或者盘绕在芯片的3D堆叠中。MPA可以包 含多种类型的计算单元以及处理器和存储器的穿插布置。在一些MPA实现的广泛意义中, 还包括MPA的层次或嵌套布置,尤其是由互连的1C芯片组成的MPA,其中1C芯片包含一个 或多个还可以具有更深层次结构的MPA。
[0004] MPA为软件开发方法和工具提出了新的问题和机遇。由于MPA可以扩展到上千 个PE,因此需要管理大量的软件来操作阵列,并且以高效的方式来测试、调试和重建这种软 件。通常,这需要模块化、层次化、可适应的模块重用以及自动构建方法。虽然这些想法已 出现在常规的软件开发系统中,但是它们没有以支持通用模块的方式集成到开发工具中, 其中通用模块取决于性能要求或者不同的形状或拓扑结构要求,可以静态地和/或动态地 适应于不同数量的PE和其它资源,而性能要求或者不同的形状或拓扑结构要求又可能取 决于资源的可用性或应用要求。
[0005] 因此,期望有改进的技术和工具用于多处理器阵列软件开发。
【发明内容】
[0006] 以下提供了用于为多处理器阵列或结构及其使用开发软件的技术的各种实施例。 多处理器结构可以包括多个处理器和多个通信元件,并且如所期望的,可以是(一般地)同 构或异构的。每个通信元件可以是可动态配置的和/或可以包括多个通信端口、存储器和 /或路由引擎,以及其它可能的元件。每个处理器可以包括用于执行算法逻辑的装置、指令 处理单元和/或多个处理器端口,以及其它可能的元件。通信元件和处理器可以以穿插的 方式耦合在一起。例如,对于每个处理器,可以将多个处理器端口配置为耦合到多个通信元 件的第一子集,并且对于每个通信元件,通信端口的第一子集可以被配置为耦合到多个处 理器的子集并且通信端口的第二子集可以被配置为耦合到多个通信元件的第二子集。
[0007] 在一些实施例中,软件编程语言工具包可以指定并实现目标是在多处理器阵列 (MPA)上执行的软件应用。在一种实施例中,软件代码可以包括可执行以执行函数的第一程 序指令。在这个实施例中,软件代码也可以包括一个或多个语言构造(construct),其可配 置来指定一个或多个通信端口和一个或多个参数输入。在该实施例中,一个或多个通信端 口可配置来指定与其它软件代码的通信。在该实施例中,一个或多个参数输入可配置来指 定可用来执行软件代码的一组硬件资源。在该实施例中,硬件资源包括多个处理器并且可 以包括多个支持存储器。在该实施例中,软件代码的实例能部署在MPA上以执行不同软件 应用中的函数。每个实例可以包括软件构造的配置。在一些实施例中,一个或多个参数输入 可以配置为指定第一函数的操作、数据流大小、用来存储临时状态的数据量和通信资源量、 外部输入和/或输出等。软件代码可以被包括在非暂时性计算机可存取存储介质上。
[0008] 各种功能可以被实现为编程语言或者对现有编程语言的扩展,例如,对C或C++的 扩展,等等。多处理器阵列可以包括多个处理元件、支持存储器以及通信地耦合该多个处理 元件和支持存储器的高带宽互连网络(IN)。软件编程语言工具包可以包括用于(例如,利 用上述软件代码实施例)实现小区模型(cell model)的函数,其可提供:基于小区的层次 设计、小区重用和MPA的物理资源的分配。物理资源可以包括处理元件、通信资源和存储 器。小区并因此阵列资源的分配可以被静态地或动态地配置或修改,并且因此可以提供用 于配置在MPA上执行的软件应用的高度灵活和有效的工具。
【附图说明】
[0009] 当结合以下附图来考虑以下对优选实施例的详细描述时,可获得对本发明的更好 理解,其中附图中:
[0010] 图1说明示例性开发系统的一种实施例;
[0011] 图2和3说明示例性多处理器阵列(MPA)系统的实施例;
[0012] 图4和5A是说明用于MPA的软件开发流程的实施例的流程图;
[0013] 图5B是说明软件开发流程的另一种实施例的流程图;
[0014] 图6根据一种实施例说明小区的层次结构;
[0015] 图7和8根据一种实施例说明相应的参数化的小区层次;
[0016] 图9和10根据一种实施例说明对一对小区的相应物理资源分配;及
[0017] 图11根据一种实施例说明以反映不同资源优化的两种不同方法实例化的小区和 较低层次小区的视图。
[0018] 虽然本发明易于进行各种修改和替换形式,但其具体实施例在附图中作为例子示 出并且在本文中进行详细描述。但是,应当理解,附图和对其的详细描述不是要将本发明限 制到所公开的特定形式,而是相反,意图是要覆盖属于如所附权利要求定义的本发明的精 神和范围内的所有修改、等效物和替换。
[0019] 这里使用术语"被配置为"是通过指示单元/电路/组件包括在操作过程中执行一 个或多个任务的结构(例如,电路系统)来意指结构。因此,单元/电路/组件可以被称为 被配置为执行任务,即使在指定的单元/电路/组件目前没有操作(例如,没有开启)时。 与"被配置为"语言一起使用的单元/电路/组件包括硬件--例如,电路、存储可执行以 实现操作的程序指令的存储器等。陈述单元/电路/组件"被配置为"执行一个或多个任 备明确地不是耍对那个单元/电路/组件援引35U. S. C. § 112 (f)。
【具体实施方式】
[0020] 通讨引用结合
[0021] 以下专利的全部内容通过引用被结合于此,就好像在本文被完全和完整地阐述了 一样:
[0022] 于 2003 年 6 月 24 日提交的、标题为"Processing System With Interspersed Stall Propagating Processors And Communication Elements" 的美 国专利 No. 7, 415, 594,其发明人是 Michael B.Doerr、William H.Hallidy、David A. Gibson 和 Craig M. Chase〇
[0023] 于 2011 年 10 月 14 日提交的、标题为"Disabling Communication in a Multiprocessor System"的美国专利申请序列No. 13/274, 138,其发明人是Michael B.Doerr、Carl S. Dobbs、Michael B. Solka、Michael R Trocino 和 David A. Gibson。
[0024] 术语
[0025] 以下是在本申请中使用的术语表:
[0026] 存储介质-各种类型的存储器设备或存储设备中的任何一种。术语"存储介质" 意图包括:安装介质,例如CD-ROM、软盘104或者磁带设备;计算机系统存储器或随机存取 存储器,比如DRAM、DDR RAM、SRAM、EDO RAM、Rambus RAM等;或非易失性存储器,比如磁介 质,例如,硬盘驱动器、光存储装置或ROM、EPROM、FLASH等。存储介质也可包括其它类型的 存储器或者其组合。此外,存储介质可位于执行程序的第一计算机中,或者可位于通过网 络一一比如互联网一一连接到第一计算机的另一不同的第二计算机中。在后一种情况下, 第二计算机可将程序指令提供给第一计算机以便执行。术语"存储介质"可包括两个或更多 个存储介质,这些存储介质可存在于不同位置,例如存在于通过网络连接的不同计算机中。
[0027] 承载介质一如上所述的存储介质,以及物理传送介质,比如传达诸如电或光信号 之类的信号的总线、网络和/或其它物理传送介质。
[0028] 可编程硬件元件一包括各种硬件设备,其中包括经由可编程的或硬连线的互连连 接的多个可编程功能块。例子包括FPGA(Field Programmable Gate Array,现场可编程门 阵列)、PLD(Programmable Logic Device,可编程逻辑器件)、FP0A(Field Programmable Object Array,现场可编程对象阵列)和CPLD (Complex PLD,复杂PLD)。可编程功能块可 从细粒的(组合逻辑或查找表)到粗粒的(算术逻辑单元或处理器核)不等。可编程硬件 元件也可被称为"可重配置逻辑"。
[0029] 专用集成电路(ASIC) -这个术语意图具有其普通含义的完整广度。尽管术语 ASIC意图包括为特定应用定制的
集成电路,而不是通用可编程设备,但是ASIC可以包含可 编程处理器核作为构建块。蜂窝电话小区、MP3播放器芯片以及许多其它单功能1C是ASIC 的例子。ASIC通常用硬件描述语言进行描述,诸如Verilog或VHDL。
[0030] 程序一术语"程序"意图具有其普通含义的完整广度。术语"程序"包括1)可以存 储在存储器中并且可被处理器执行的软件程序,或2)可用于配置可编程硬件元件或ASIC 的硬件配置程序。
[0031] 软件程序一术语"软件程序"意图具有其普通含义的完整广度,并且包括可被存储 在存储介质中并被处理器执行的任何类型的程序指令、代码、脚本和/或数据,或其组合。 不例性软件程序包括用基于文本的编程语言 _ _例如,命令式或过程式语言,诸如c、c++、 PASCAL、FORTRAN、COBOL、JAVA、汇编语言等--编写的程序;图像程序(用图像编程语言 编写的程序);汇编语言程序;已编译成机器语言的程序;脚本;及其它类型的可执行软件。 软件程序可以包括以某种方式互操作的两个或更多个软件程序。
[0032] 硬件配置程序一可以被用来编程或配置可编程硬件元件或ASIC的程序,例如,网 表(netlist)或位文件。
[0033] 计算机系统一各种类型的计算或处理系统中的任何一种,包括个人计算机系统 (PC)、大型机计算机系统、工作站、网络设备、互联网设备、个人数字助理(PDA)、网格计算系 统或者其它设备或设备的组合。一般地,术语"计算机系统"可被广泛地定义为涵盖具有执 行来自存储介质的指令的至少一个处理器的任何设备(或设备的组合)。
[0034] 自动一指的是在没有直接指定或执行动作或操作的用户输入的情况下由计算机 系统(例如,由计算机系统执行的软件)或设备(例如,电路系统、可编程硬件元件、ASIC, 等等)执行的动作或操作。从而,术语"自动"与在用户提供输入来直接执行操作的情况下 由用户手动执行或指定的操作形成对照。自动过程可由用户提供的输入发起,但是"自动" 执行的后续动作不是用户指定的,即,不是在用户指定每个要执行的动作的情况下"手动" 执行的。例如,通过选择每个字段并且提供指定信息的输入(例如,通过键入信息、选择复 选框、单选选择,等等)来填写电子表单的用户是在手动填写该表单,虽然计算机系统必须 响应于用户动作来更新表单。表单可由计算机系统自动填写,其中计算机系统(例如,在计 算机系统上执行的软件)分析表单的字段并且在没有任何指定字段的答案的用户输入的 情况下填写表单。如上所述,用户可调用表单的自动填写,但不参与表单的实际填写(例 如,用户不是手动指定字段的答案,而是这些字段被自动地完成)。本说明书提供了响应于 用户采取的动作而自动执行操作的各种示例。
[0035] 开发过程一指的是基于方法学的用于开发的生命周期。在粗略的水平,它描述了 如何通过设计、实现、验证、部署和维护驱动用户的需求和约束。
[0036] 处理元件一术语"处理元件"(PE)可与"处理器"互换使用并且指配置为执行程序 指令的各种元件或元件的组合。处理元件包括,例如,诸如ASIC(专用集成电路)的电路、 全部的处理器内核、单独的处理器以及诸如现场可编程门阵列(FPGA)的可编程硬件设备。
[0037] 概沭
[0038] 参考图1-5A,本公开内容最初地描述用于可包括本文所公开技术的实施例的MPA 的软件开发的概述。然后参考图5B-11描述基于小区的软件开发技术的实施例。本文所公 开的各种技术可以允许在MPA上下文中的灵活的设计重用。
[0039] 以下描述了用于多处理器阵列(MPA)软件开发的工具或工具包的各种实施例,诸 如编程语言或编程语言扩展,其中包括特定于目标是在MPA系统上执行的软件的设计、开 发和实现的程序指令或命令。MPA通常包括多个处理元件、支持存储器和高带宽互连网络 (IN)。用于描述MPA的其它术语可包括多处理器结构或多处理器网格(mesh)。在一些实施 例中,MPA(或结构/网格)是多个处理器和耦合到该多个处理器的多个通信元件,其中多 个通信元件中的每一个都包括存储器。
[0040] 工具包可以被用来实现在多处理器阵列上执行的函数的模块化,层次设计重用, 并从而可以允许设计者创建可以在许多不同的设计中(或在同一设计中多次)进行配置和 使用的通用功能单元,从而节省了需要手动创建小区的特定于情景的版本的工作量。虽然 这种方法可以在本文中称为"小区模型"(CM),但是这个术语只是示例性的,并不是要将本 方法限定到任何特定的形式、功能或外观,因此可以根据需要使用任何其它的一个或多个 名称。工具包可以允许配置:小区之间的通信、可用来执行小区功能的硬件数量、小区层次 等。
[0041] 应当指出,本文所公开的技术可以被用在各种不同阵列大小的MPA中。例如,在一 种示例性实施例中,MPA可包括三个或更多个PE。在其它示例性实施例中,MPA的大小(阵 列中PE、支持存储器和相关联的通信资源的数量)可以大于或等于某个指定的数,其在各 种不同的实施例中可以具有任何期望的值,例如,4、8、16、24、32、64等。更一般地,取决于特 定的应用或使用,MPA中PE的数量可以具有指定的下限,其可以根据期望被指定为任何复 数值。
[0042] 用于MPA的软件开发
[0043] 软件开发项目是人与机器工作的结合,以产生使某个产品或服务按照由开发团队 所采用的需求操作的软件。通常,较多的设计和测试自动化是有利的,因为这使得更多地测 试所生成的软件,并因此可以消除更多的错误(bug)。
[0044] 用于嵌入式系统的软件开发环境在图1中画出。除了人类软件工程师和程序员之 外,图1还示出了开发环境的三个主要部分:最终产品、工作站和试验台。在各种实施例中, 软件代码可以在工作站上进行配置并且部署到MPA上。
[0045] 在一些实施例中,最终产品规定至少技术需求的列表。在一些实施例中,测试台被 配置为为被测设备(device under test,DUT)生成测试模式输入和捕获DUT的输出并与已 知的好模式进行比较。DUT与最终产品匹配地越近,开发出的软件在最终产品中将按预期操 作的置信度越高。
[0046] 例如,工作站可以是具有操作系统(OS)的台式或膝上型计算机,其中操作系统管 理大容量存储装置、设计数据的数据库以及读和写项目数据库的一组(或一套)设计工具 的细节。可能存在不止一个项目和不止一个项目数据库,并且工具和库可以在它们之间进 行共享,以降低开发成本。
[0047] 通常,用于计算机和DSP的存储器以层次结构进行组织,其中快的存储器在层次 结构的顶部,并且在沿着层次结构向下的每一级处的存储器较慢但是容量较高。在MPA的 一些实施例,在层次结构顶部的支持存储器位于每个PE的附近。在一些实施例中,每个支 持存储器可以被专用于只持有指令或只持有数据。在其它实施例中,支持存储器可以存储 指令和数据两者。用于特定TO的支持存储器可以对该PE是私有的或者是与其它PE共享 的。
[0048] 存储器层次结构再往下可能是更大的共享存储器(例如,半导体SDRAM),其具有 比邻近每个PE的支持存储器的位容量大许多倍的位容量。在一些实施例中,在存储器层次 结构的再下面,诸如闪速存储器、磁盘或光盘的存储元件是可以访问的。
[0049] 如上所述,多处理器阵列(MPA)在一些实施例中包括处理元件(PE)的阵列、支持 存储器(SM)以及支持PE和/或存储器之间的高带宽数据通信的主互连网络(PIN或简单 地IN)。示例性MPA在图2和3中示出,在以下进行描述。在一些实施例中,PE具有寄存 器以缓冲输入数据和输出数据、指令处理单元(IPU)以及对数据执行算术和逻辑功能的装 置,加上与系统的其它部分通信的多个交换机和端口。在这些实施例中,IPU从存储器中取 得指令、将它们解码并设置适当的控制信号来将数据移进或移出PE以对数据执行算术和 逻辑功能。由于每个包含大MPA的1C芯片具有大量的PE,因此适于大MPA的PE通常被选 择或设计为比通用处理器(GPP)具有更高能效。
[0050] 如本文所使用的,术语MPA涵盖处理器的相对同构阵列以及通用和被集成在所谓 "平台1C"芯片上的专用处理器的异构集合。平台1C芯片通常也具有多种I/O电路以与许 多不同类型的其它设备通信。
[0051] 一个示例MPA体系架构是在美国专利No. 7, 415, 594中所讨论的HyperX?体系架 构。在HyperX?体系架构的一种实施例中,具有很宽范围大小的多处理器阵列可以由基于 单元-小区的硬件结构(网格)构成,其中每个小区被称为HyperSlice。硬件结构可以通 过在格子上布置单元-小区并互连相邻的小区来形成。每个HyperSlice可以包括一个或多 个数据存储器和路由器(DMR)以及一个或多个处理元件(PE)。在美国专利No. 7, 415, 594 中,DMR被称为可动态配置的通信(DCC)元件,并且PE被称为可动态配置的处理(DCP)元 件。在该实施例中,DMR可以为其相邻的PE提供支持存储器,以及用于互连网络(IN)的路 由器和链接。
[0052] 硬件结构可以通过将HyperSlices邻接在一起来创建,这涉及对齐HyperSlices 以形成正确的电气连接。这些连接包括到DMR的链接和到供电网的连接。复制 HyperSlices、将它们对齐并通过邻接进行连接的技术是集成电路(1C)芯片的超大规模集 成(VLSI)中很好理解的技术,尤其是用互补金属氧化物半导体(CMOS)电路技术制造的1C。 在该实施例中,硬件结构具有独立地和透明地操作的到处理元件的PIN,并且可以通过组合 (ensemble)在支持任意通信网络拓扑的HyperSlices之间的实时可编程和可适应通信路 径(其可以被称为路由或通道)来提供按需的带宽。协调的HyperSlices组可以在软件控 制下"在运行中(on-the-fly)"形成和重新形成。动态地更改用于评估函数的硬件数量的 能力可以允许硬件资源的高效或最
佳的应用,以减轻处理瓶颈。在硬件结构的边缘,链接可 以连接到专用于存储器层次结构再下级的类型的存储器的电路,或专用于在集成电路(1C) 芯片的边缘的I/O的电路。
[0053] 互连的DMR可以跨芯片和在芯片之间提供最近邻居的、区域的和全局的通信。这 些通信方式每个都可以物理地使用DMR资源来取决于数据的本地性和软件算法要求不同 地发送数据/消息。可以提供"快速端口 "设施以支持一个或多个字数据从处理器到任何 网络目的地的低延迟传输。对于块传输,直接存储器访问(DMR)内的DMA引擎可用于管理 跨存储器和路由结构的数据移动。对于PE之间的最近邻居通信,使用共享存储器和/或寄 存器可能是最高效的数据移动方法。对于区域和全局数据移动,利用路由结构(PIN)可能 是最高效的方法。通信路径(或路由)可以是动态或静态的。动态路由可以被建立用于数 据传输并且在传输完成后进行拆除以便为其它路由和数据传输释放PIN资源。静态路由可 以贯穿程序的执行停留在原地,并且被主要地用于高优先级和关键通信。通信路径的物理 位置以及数据跨它们进行传输的定时可以通过软件程序来控制。可以存在多个通信路径以 支持任何发送方和接收方之间的同时数据传输。
[0054] DMR的体系架构可以允许在多处理器结构中使用不同的可互换的PE以便为特定 的应用优化系统。HyperX?多处理器系统可包括PE的异构或同构阵列。PE可以是常规的 处理器,或者作为替代,PE可以不符合处理器的常规定义。PE可以简单地是用作用于某些 逻辑功能的硬连线处理器的逻辑门集合,其中可编程能力对于更高的性能、较小的面积和/ 或较低的功率进行了权衡。
[0055] 图2说明HyperX?系统的一种示例性实施例的处理元件(PE)和数据存储器路由 器(DMR)的网络的视图。PE被示为矩形方框并且DMR被示为圆形。DMR之间的路由通道 被示为虚线。在示出的实施例中,实心三角形示出网外通信(其也可以被称为芯片输入和 /或输出)并且实线示出DMR之间的活动数据通信。计算任务利用它的数字标识符示出并 且被放置在正执行它的PE上。被用于通信的数据变量通过其名称示出并且被放置在包含 它的DMR上。在图示的例子中,左上方的PE已被分派具有任务ID 62的任务,并且可以经 与该PE相邻的相应的DMR--通过通信路径变量t、w和u指示--与其它PE或存储器通 信。如还示出的,在本实施例中,活动通信通道将指示为71(例如,另一个任务ID)的PE连 接到网外通信路径或端口。在一些实施例中,PE可以利用二者共享变量(例如,利用相邻 的DMR)和沿着IN传递的消息彼此通信。在各种实施例中,根据本文所公开的技术开发的 软件模块可以被部署在示出的网络的各部分上。
[0056] 图3说明在芯片上实现的示例性多处理器系统。如所示出的,类似于图2的示例 性系统,该芯片包括用于与芯片外设备通信的多个I/O路由器,以及内部多处理器结构。 HyperX?处理器体系架构可包括固有的多维性,但是可以被物理地实现在如所示出的平面 实现中。处理器体系架构可具有高能效特性并且也可以是本质上可伸缩(到大阵列)和可 靠的-代表低功率和可靠的概念二者。使处理器体系架构能够实现这种性能的方面包括 流线型的处理器、存储器网络和灵活的10。在一些实施例中,处理元件(PE)可以是成熟的 DSP/GPP并且基于存储器到存储器(无高速缓存的)的体系架构,该体系架构由可变宽度的 指令字指令集体系架构维持,该可变宽度的指令字指令集体系架构可以动态地扩充执行生 产线以在同时最大化硬件资源使用的同时保持吞吐量。
[0057] 在示出的实施例中,多处理器系统包括:MPA输入/输出,其可被用来与通用网外 存储器(例如,在一种实施例中的一个或多个DRAM)和/或其它外围设备通信。
[0058] 软件是操作计算机或其它存储有程序的设备所需的指令的组合(ensemble)(也 称为程序代码)。软件可根据其使用进行分类。为终端用户用于特定用途(诸如文字处理、 上网、视频或蜂窝电话信号处理等)操作计算机的软件可以被称为应用软件。应用软件包 括由人类程序员编写的源程序和脚本、各种中间编译的形式,并且被称为运行时软件的最 终形式可以被目标设备(PE、微处理器或CPU)执行。运行时软件也可以被模拟器执行,其中 模拟器是被设计成比用于调试(错误消除)目的的实际目标设备提供更多的对目标设备内 部状态的可视性。
[0059] 开发软件(一组或一套软件开发工具)是用于生成应用软件的软件。基本开发工 具包括编译器、汇编器和链接器,如在图4中所指示的,其中图4示出了用于基于MPA的系 统的示例性软件设计和开发流程。通过其用户编写源代码的编辑器也可以被认为是基本的 开发工具。人类工程师或程序员通常设计程序并将其转换为可以经程序编辑器创建的源代 码,由图4中标有"完整的设计"的文档表示。在标有"语言编译/汇编"的方框中,使用编 译器将源代码转换成模块化的地址可重定位的目标代码;然后使用汇编器来创建模块化机 器代码;并且最终,使用链接器创建整个程序的可执行二进制映像。标有"处理设计以创建 芯片编程文件"的编译、汇编和链接(产生二进制映像)的这个过程可以利用存储在"make files"中的对操作系统的指令来自动化。为了测试程序,二进制映像通常被加载到目标设 备的存储器中,在图4中通过向"处理器1C芯片"供给和实现"芯片编程信息",即"编程芯 片",并执行(即"运行程序")来表示。其它常见的软件工具包括调试器(以加载、开始、暂 停、转储、并且从目标PE反汇编二进制映像),以及周期精确的模拟器。周期精确的模拟器 提供对处理器内部状态的完全可视性,但是它们运行得比目标硬件慢得多,例如,10000到 一百万分之几。
[0060] 对于多处理器系统而言,其与单处理器系统比较,存在重要的额外步骤,这就是向 特定的物理硬件资源--诸如在PE和系统I/O端口之间或其中的PE和通信资源--分 配特定的处理任务或模块。注意,资源分配可以包括将数据变量分配到存储器资源,因为共 享的和本地的存储器的分配可能对PE和通信资源的分配有影响,反之亦然。在图4中,这 个额外的步骤通过标记为资源分配(其也可以被称为物理设计)的方框来表示。该流程的 资源分配部分可以利用布置和路由工具,其可用于向阵列中的特定PE分派任务,并在IN中 选择特定的端口和通信路径。这些通信路径可以是在创建后静态的或者在软件执行过程中 动态地变化。当动态路径在正常操作过程中被路由和拆除时,系统的优化可以包括时间维 度以及空间维度。此外,系统的优化可能受系统约束的影响,例如,运行时延迟、延时、功率 损耗、数据处理依赖性等。因此,这种系统的优化可以是多维的优化。
[0061] 图5A说明更详细的示例性软件设计数据流。如可以看到的,第三方系统开发工具 被一般地用来创建程序,例如,ANSI-C程序,其被编译、汇编和链接,以生成映像(二进制可 执行文件)。还如所示出的,编译的结果可以被进一步利用,以按照目标硬件优化软件。更 具体地,任务提取、多维优化(以上提到的)、和资源分派/分配可以基于系统约束和目标硬 件产品来执行,例如,如所指示的,HyperX?硬件产品。如所示出的,这个过程本质上可以进 行迭代。
[0062] 当涉及少量处理器时,物理设计(向物理位置分派应用软件任务和通信路径的具 体路由)可能相对简单并且可以被手动地完成。即便如此,每个处理器的工作负荷会随着 时间而显著地变化,使得可能期望某种形式的动态分配,以最大化吞吐量。此外,对于具有 大量PE的MPA来说,如果物理设计过程手动完成,则该过程会是单调乏味的并且容易出错。 为了解决这些问题,用于多处理器系统的软件开发工具可以定义任务(程序代码块)和通 信要求(用于每条路径的源和目标),并自动将资源分配给任务(地点和路由)。如果设计 大或者包含很多重复的任务,那么如果将它表达为小区层次结构,则它可能更易于管理。但 是,层次结构描述将一般地必须被扁平化到所有任务和所有通信路径的列表中,其中在可 以使用位置和路由工具来完成物理设计之前在运行时需要这些任务和通信路径。
[0063] 层次结构、可配置小区的思想已在硬件描述语言(HDL)的领域中使用。层次可配 置性被内置在常用的HDL中,诸如Verilog和VHDL。但是,那些方法面向创建在逻辑门中实 现的并且通常不是在多处理器阵列中使用的设计。主要区别在于在每个领域中使用的计算 模型。在HDL模型中,所有计算资源通常默认为并发执行,但可以被指定为顺序执行。多处 理器模型通常假定受限数量的并行计算流,其中每一个都可以遵循顺序执行模型。
[0064] 这种HDL没有多处理器阵列的唯一属性的表示,例如,唯一的或共享的存储器空 间、唯一的或共享的同步资源、或几组特定于处理器的机器指令。相反,用于多处理器的软 件语言通常包括这些特征的表示。
[0065] 在软件语言的领域中,函数可配置性已被使用了一些时间。但是,现有技术的软件 编程语言不支持(固定的和可重新配置的小区两者的)编程可重用性以及用层次分解管理 设计复杂性。例如,在C++中被称为"templates (模板)"的construct (构造)允许函数 被专用于特定的用途;但是,参数化的范围被限定到其参数的数据类型,并且不允许,例如, 在MPA上的计算的并行实现的改变。
[0066] 基于小厌的开发概沐
[0067] 在一些实施例中,小区模型可以使得能够进行函数并行实现的封装和参数化,这 可以允许在函数的任何特定使用中所采用的并行化量被扩展或收缩,以适应正在使用它的 环境。例如,本文所公开的技术可以允许更多硬件资源的使用(通过更多的并行化),以构 造小区更高性能的版本。
[0068] 在一些实施例中,小区模型可以允许小区在被定义为小区外部并因此可以与其它 小区进行共享的存储器和同步资源上操作。这可以进一步使小区能够重用,因为小区能被 收缩以仅仅包含关键功能,并且较简单的和功能上较单纯的小区更容易重用。一般地,小区 模型可以包括软件构造,其允许指定小区和其它小区之间的连接性和/或对给定小区可用 的通信资源量。
[0069] 在MPA上的小区资源分配也可以是对参数敏感的。例如,小区可以被设计成具有 参数,参数可以确定它是否被直线地布置或以矩形形式布置。作为另一个例子,参数可以表 示资源的边界框,其中该小区被设计为要分配到该边界框。
[0070] 在一些实施例中,参数可以被配置为改变小区的函数操作。例如,一些实施例中, 参数可以被用来配置过程要运行的迭代次数或者设置用于过程完成的收敛准则。在另一种 实施例中,参数可以被配置为,例如,通过在小区中可用的多个不同算法中选择来完全改变 小区的功能。
[0071 ] 在一些实施例中,小区模型也可以被用来动态地改变该小区在它执行时正在使用 的资源,例如,通过动态地改变被使用的资源量和/或改变正在被使用的特定的资源组。例 如,基于改变负载条件,小区可以使用更多的处理器来及时地完成计算。另一个例子是基于 被传递到小区中的数据的大小改变用于在计算过程中存储临时状态的数据量。还有一个例 子是使用更多的通信资源来更快地将数据放到小区中。此外,参数可以被用来向MPA输入 和/或输出以及MPA外部的一个或多个系统存储器提供小区访问。
[0072] 在一些实施例中,由特定小区所使用的资源的分配可以被动态地改变,例如,当小 区扩展时,它需要将其附加的资源分配到多处理器阵列上。作为另一个例子,如果相邻小区 需要扩展和使用更多的资源,则该小区可以最小化其正在使用的资源,或重新分配它正在 使用的这组资源,以便给相邻的小区更多的空间。
[0073] 本文所公开的可以被称为"用于设计重用的多处理器编程语言扩展(MPPLEDR) "的 编程语言扩展可以解决对大量PE的设计重用和可伸缩性。在各种实施例中,可伸缩性的基 础是基于小区的层次结构方法,其中参数化的小区可以被设计并存储在一个或多个库中, 用于跨多个项目的可定制重用。
[0074] 本文所公开的示例性编程构造或编程语言扩展被表示为对C语言的扩展;但是, 应该指出,其它的编程语言也可以类似的方式进行扩展或定义,例如,C++、Java和FORTRAN 等,并且,本文所公开的基于C语言的实施例意图仅仅作为示例性的,并不是要将所考虑的 编程语言限制到任何特定的编程语言集合。在一些实施例中,所公开的编程语言或编程语 言扩展可以被用来创建和实例化小区。
[0075] 此外,在一些实施例中,本文所公开的技术可以提供或有助于将小区和实例化实 现到多处理器阵列上的工具流程。在以下描述中,利用本技术创建的小区,例如,语言扩展, 被称为"通用(generalized)小区"。通用小区可以是分层的,即,能够利用其它的通用小区 作为其定义的一部分,并且子-小区的配置可以被父小区的配置修改。
[0076] 图5B示出了说明用于基于小区的软件开发方法的一种实施例的流程图。在一些 实施例中,图5B的步骤可以被实现为图4和图5A的过程的一部分。在图5B中示出的方法 可以结合计算机系统、设备、元件或本文所公开的组件中的任一种以及其它设备使用。在各 种实施例中,一些示出的方法元素可以被并发地执行、以与所示出的不同的顺序执行、或者 可以被省略。根据需要也可以执行附加的方法元素。流程在方框510开始。
[0077] 在方框510,为特定的函数创建小区类型或定义。该特定的函数可以是各种函数中 的任一种,例如,诸如数学变换。在本实施例中,小区类型包括一个或多个语言构造,其可配 置来至少指定(1)与其它软件代码的通信和(2) -个或多个参数。示例性软件构造将参考 以下代码示例进行讨论。小区类型的创建可以由软件开发人员针对特定应用或作为例如可 用于创建各种应用的小区类型库的一部分执行。在一些实施例中,可以创建不包括特定功 能,但是仅仅充当例如对其它小区的封装(wrapper)的小区类型或定义。流程继续到方框 520〇
[0078] 在方框520,创建小区的实例化。这个步骤可以在编写特定的软件应用时执行。软 件应用可以包括同种或不同类型的多个小区,并且可以或不可以包括不符合小区模型的其 它软件。在该实施例中,实例化小区包括指定小区与软件应用的通信和指定可用来执行特 定函数的一组硬件资源。指定通信可以包括指定与其它小区的通信和/或在其它小区内放 置小区。在一些实施例中,软件构造可以定义通信端口。在一种实施例中,通信端口包括一 个或多个光纤端口(例如,到IN的)和一个或多个共享存储器端口(例如用于在对多个PE 可用的存储器中利用共享变量进行通信)。指定通信可以包括为这些端口指定连接。
[0079] 在一些实施例中,创建小区类型(例如,如在步骤510中)可以包括为小区的部署 定义不同的硬件配置。在这些实施例中,指定可用来执行特定函数的一组硬件资源可包括 在小区实例化中提供选择所定义的其中一个硬件配置的参数。在其它实施例中,指定这组 硬件资源可以不基于预先定义的配置,而是可以利用参数定义这组硬件资源(例如,通过 指定多个处理器、通信资源等)。流程继续到方框530。
[0080] 在方框530,实例化的小区被部署在具有软件应用的多处理器阵列上。这可以包括 在作为该组硬件资源的一部分的一个或多个存储器和/或PE上存储数据和/或指令,并且 分派PE用于执行指令以完成特定的功能。流程继续到方框540。
[0081] 在方框540,在MPA上执行特定的函数。特定函数的执行取决于在步骤520中指定 的硬件资源量可能具有不同的性能特性。而且,对小区的硬件资源分派可以被动态地调整。 在一些实施例中,动态调整可以基于来自其它小区(例如,MPA上相邻小区)关于它们的硬 件资源使用的信息。因此,小区也可以被配置为将它的资源使用传递给其它小区。流程在 方框540结束。
[0082] 图6根据一种实施例说明小区的示例性层次结构,其中小区A包括并使用小区 B (两个实例)、C和D,并且其中小区C包括并利用小区D (四个实例)。这种模块化层次结 构可有利于复杂的功能和体系架构模式,以及模块的重用。通用小区的这种层次结构有助 于在MPA上的软件应用的并行化执行的高度可配置的解决方案。
[0083] 例如,图7说明包括小区A、小区B、小区C、小区D和小区E的示例性小区层级结 构。小区B是参数化的小区的例子,并且被参数化为包括两个子小区,在这种情况下,小区 E的两个实例。图8根据一种实施例说明了图7的小区层次结构的修改后的版本。如可以 看到的,在这个例子中,小区B已被参数化为包括四个子小区,具体而言,小区E的四个实 例,从而经附加的子小区提供了小区B的任务的增加的并行性。在其它实施例中,子小区任 务可以例如利用参数通过配置的对特定子小区可用的硬件资源进行并行化。在一些实施例 中,可配置以改变小区B中的子小区数量的参数可以是数字,例如,指示要包括的小区E的 实例数量。在其它实施例中,可配置来改变小区B中子小区数量的参数可以指示或引用小 区E的类型或实例(例如,小区B可以不包括与小区E相关联的信息,而是该信息可以作为 参数进行传递)。在一些实施例中,小区可以不包括指示任何特定功能的代码,而是可以用 作对可被插入以执行不同的可配置功能的其它小区的封装。
[0084] 通用小区的配置或参数化可以被用来配置或修改小区的逻辑和/或功能操作。通 用小区可以利用多处理器阵列中的零个或更多个处理器,并且小区配置信息可以改变小区 利用的处理器数量。类似地,通用小区可以利用主互连阵列中的零个或更多个组件,并且小 区配置信息可以改变小区利用的互连网络(IN)的组件的数量。类似地,通用小区可以利用 MPA的支持存储器中的零个或更多个存储位置并且小区配置信息可以改变小区利用的存储 位置的数量。
[0085] 通用小区的定义还可以包括控制小区的物理实现的信息,并且物理实现可以通过 改变配置进行修改。物理实现可以,例如,包括所使用的确切的或相对的处理器、处理器到 处理器通信的方法和实现、及功能变量在一个或多个阵列存储器中的位置。
[0086] 图9和10说明物理上占据MPA的相应部分的两个小区(小区A和B)。在这些图 中,每个小区的面积意图表示所使用的处理和/或存储器资源。更具体而言,图9说明根据 第一配置(或参数化)用于小区A和小区B的相应的资源使用,其中,如可以看到的,小区B 比小区A利用更多的多处理器阵列资源。图10说明根据第二配置(或参数化)用于小区 A和小区B的相应的资源使用,其中,在第二配置中,用于图9的小区的资源已被重新分配, 使得小区A在小区B扩展时改变形状和位置。注意,在这个新的配置中,小区B比小区A利 用多得多的多处理器阵列资源,并且比用图9的配置的小区B大得多。该重新分配可以是 动态的(例如,当包含小区A和B的软件应用正在执行时),或者可以在程序的开发过程中 执行(例如,小区A和B可以在不同的应用中利用不同的硬件资源量进行部署)。
[0087] 在一种实施例中,语言构造或参数可以允许小区与相邻小区或在相邻处理器上运 行的函数共享存储器或同步资源(例如信号灯(semaphore))。应当指出,本文所公开的 技术,包括小区模型及其使用的实施例,适用于各种MPA体系架构一一包括同构的和异构 的--中的任一种。
[0088]示例件实施例和实现
[0089] 以下描述本文所公开的技术的各种示例性实施例和实现。但是,应该指出,所描述 的特定实施例和技术并不将本发明限制到任何特定的形式、功能或外观。例如,实施例中的 一些根据C编程语言的扩展,具有C-类型的数据结构、语法及特定的函数、结构或元素名 称,来描述;但是,所描述的技术可以用各种编程语言(或对这种语言的扩展)中的任一种 来实现或者实现为任何各种编程语言(或对这种语言的扩展)中的任一种,根据期望,可以 使用任何语法和名称。
[0090] 小厌
[0091] 可以为MPA上的可伸缩分层设计定义通用小区。在一些实施例中,可伸缩性的基 础是基于小区的层次结构方法,其中参数化的小区可以被设计并存储在一个或多个库、集 合或组中,用于跨多个项目的可定制的重用。
[0092] 小区可以是用来构建层次化设计的组件。小区可以包括一个或多个任务或
函数以 及其它小区的实例。小区可以实现抽象的功能,例如,其可以像传递(一种输入,一种输出 通信结构)那样简单或者像矩阵相乘或维特比(Viterbi)解码器那样复杂(或比其更复 杂
[0093] 在一种实施例中,小区可以具有两个主要部分:小区定义和视图。多处理器小区定 义构造可以定义小区名称以及端口和参数名称及其类型的有序列表。端口是用于小区和其 它小区或外部世界之间的数据通信的通道。参数配置小区并且在单元被实例化时被绑定到 恒定值。
[0094] 在一种实施例中,示例性小区定义构造可以根据以下语法来定义:
[0096] 如可以看到的,以上示例性小区定义构造mpx_celldef包括小区名称和小区的端 口与参数列表。
[0097] |SiM
[0098] 视图(其根据需要可以具有不同的名称)可以利用视图定义来定义,例如,利用视 图定义构造,例如,mpx_view构造。视图定义构造可以定义视图名称、任务及可能的其它小 区的实例化。更一般地,视图可以定义小区的主体,并且可以包含叶任务。视图也可以包含 其它小区的实例。在一些实施例中,小区可以具有多个视图。小区的每个视图可以独立于 任何其它视图。
[0099] 视图提供小区的功能,并且取决于系统要求可以以不同的方式来实现。不同实现 的原因可能包括,但不限于,延迟和吞吐量要求、PE指令存储器可用性、DMR数据存储器可 用性和路由拥塞,以及其它。
[0100] 因此,小区的不同实现可以利用视图定义构造,例如,mpx_view,被定义为视图。每 个视图实现或实例可以具有其自己的文件。在一种实施例中,示例性视图定义构造可以根 据以下语法来定义:
[0102] 术语"队列(rank) "和"MPX_PARALLEL"(以下提及)是本技术分层功能的示例性 实现的特定语义。根据本文所使用的定义,小区可以具有功能并实例化其它小区。功能可以 通过任务来创建,并且其它小区可以利用MPX_PARALLEL构造来实例化。如本文所使用的, 任务是在处理器上执行的一个功能,例如,函数、代码块、或程序指令集合,并且队列是为任 务分派的唯一标识符。任务默认地可以与在其它处理器上执行的所有其它任务并发地执 行。如果同一处理器被分派了不止一个任务,则可以做出规定(provision)以在处理器上 执行多个任务-存在广泛的技术描述多任务机制。特殊队列标识符,MPX_PARALLEL,提供 了方便的语法手段将其它小区及所有它们的任务输入到当前视图中,从而实例化在本实施 中统一地声明为小区的单独定义的多任务集合。以稍微不同的方式描述,任务是在处理器 上执行的一个功能,并且队列是取决于任务最终所位于的特定处理器为实例化的小区创建 不同任务的手段。MPX_PARALLEL队列是其中其它小区被实例化的特殊的队列。但是,应当 指出,术语"队列"可以不仅仅应用到MPX_PARALLEL (或功能等效物);而是,在一些实施例 中,队列可以是一系列任务或一块并行的小区实例。在本实施例中,预定义的队列符号MPX_ PARALLEL指定其中包含的语句是并发语句而不是串行语句。
[0103] 应该指出,在一些实施例中,分层系统可以不用任何任务来实现,而只实例化其它 小区。
[0104] 端旦
[0105] 在视图中的任务和在视图之外的任务之间的通信可以利用端口接口进行配置。在 一种实施例中,小区的端口接口可以声明两种类型的端口:comm端口和数据端口。
[0106] 在一种实施例中,comm(用于通信路径的简称)端口可以用输入、输出或端口类 型,例如,mpx_input、mpx_output或mpx_port来声明。在一些实施例中,comm端口可以用 于光纤通信,而数据端口可以用于共享变量通信。Comm端口可以用于路由的通信,诸如DMA 传输。在一种实施例中,(30臟端口类型(例如,11^1_口01'1:、11^1_;[即111:、11^1_01^口111:)可以只 用于小区定义的声明(mp X_Celldef),并且不可以用于声明局部或全局变量或声明函数参 数。在一些实施例中,也可以支持comm端口数组。
[0107] 例如,输入comm端口数组在一种实施例中可以根据以下示例性语法进行声明:
[0109] 注意,在一些实施例中,声明的数组端口大小可能需要是常量或之前声明的参数, 即,普通变量可能是不允许的。
[0110] 在一些实施例中,数据端口可以用类型限定符shared (共享的)或semaphore (信 号灯),例如mpx_shared或mpx_semaphore,进行声明,并且可以将被声明为小区外部的共 享变量或信号灯与本地端口符号相关联。在小区视图中的任务可以引用该端口符号以直接 访问共享变量或信号灯。
[0111] 注意,在一些实施例中,可以支持无特定方向的mpx_port(或功能等效物)。最终 的方向可以通过实现系统来选择。端口的范围在利用mpx_celldef (或功能等效物)声明 的小区内可以是全局的。端口可以不需要作为参数传递给在该小区内调用的函数。在一种 实施例中,为了能够引用端口,可能需要函数与mpx_celldef在同一文件中。小区端口可以 在发送和接收API中用作comm ID〇
[0112] 不例性类型限定符mpx_shared或mpx_semaphore当用在mpx_celldef声明中时, 可以声明数据端口。数据端口可以提供对小区之外声明的变量的访问。可能需要声明具有 全局范围,并因此可能不允许位于函数、小区定义(例如,mpx_celldef或mpx_cell)或实 现(例如,mpx_view)的内部。
[0113] 以下根据一种实施例说明示例性所需的外部声明:
[0115] 在这个例子中,sharedVar在小区A的功能或定义的外部进行声明。与小区实例 化相关联的实际的comm.符号和共享变量可以匹配正式小区定义中的端口位置。在以上的 例子中,具有标识符1000的comm.与输入comm?端口 "in"相关联,2000与输出comm端口 "out"相关联,并且sharedVar与共享变量数据端口 "shv"相关联。在另一种实施例中,端 口和参数可以通过名称匹配到实例化中的comm ID和参数值。
[0116] 用限定符mpx_semaphore (或功能等效物)声明的变量可以被用作用于控制共享 资源的互斥访问的信号灯。在一些实施例中,信号灯变量无论被声明为变量或者数据端口, 其都只可以利用MPX_Lock和MPX_Unlock函数(或功能等效物)来设置,并且不可以作为 参数传递给其它函数。注意,本文所公开的技术不限于任何信号灯的特定实现;例如,在一 些实施例中,可以利用提取(fetch)和递增(increment)指令。
[0117] 示例:共享的存储器
[0118] 以下是根据一种实施例的关于共享的存储器的示例性声明集合。
[0120] 在以上声明中,端口 in和out是comm端口,并且shv是数据端口。在cel 1A中, shv是对在该小区之外声明和拥有的共享变量的引用,比如在main, c中的sharedVar。
[0121] 在一些实施例中,数据端口可以被传递经过小区层次结构的多个层次。例如,以下 在cellA的viewA实现内的cellB的实例化传递shA。注意,在这个例子中的共享变量大小 匹配。
[0122]
[0123] 示例件小厌参数
[0124] 如上所述,小区可以被参数化。以下表示利用示例性实现的实施例,该实现利用 C-风格语言构造。
[0125] 参数化的小区可以在其接口定义中具有mpx_param声明。以下是小区参数的示例 性声明:
[0127] 在一种示例性实施例中,可能需要小区参数的声明出现在mpx_celldef (或功能 等效物)的定义中。在一些实施例中,可能需要参数在它使用之前被声明。
[0128] 在一些实施例中,参数可以被用来为小区端口或在文件全局范围中声明的数组变 量(即任务全局变量或共享变量)指定大小,如通过以下使用参数指定端口大小的示例性 声明所指示的:
[0129]
[0130] 参数可以影响任务和/或小区实例的个数(数量)和/或选择,如在以下例子中 所示出的:
[0132] 在一些实施例中,参数可以用在循环中以生成实例,如在以下例子中所示出的:
[0134] 在这个例子中,例如,利用编程工具包,可以展开循环、评估comm. ID表达式和产 生实例标签。
[0135] 为了便于讨论,指定端口或变量大小或控制任务或实例选择/生成的参数可以被 称为结构参数。
[0136] 参数可以在功能上影响视图,诸如计算、任务或函数的选择,并且一般地,在可以 使用常量的情况下,参数可以被用在表达式中。参数的这种使用不会影响结构。以下是控 制计算的参数示例性使用:
[0138] 队列(rank)
[0139] 在一些实施例中,队列是包含语句列表的范围或块。语句可以是串行的或并发的。 包含串行语句的队列可以直接地在MPA中的处理器上执行。包含并发语句的队列可以包含 小区的实例化。每个并发语句可以是那个实例化小区的队列的层次调用。
[0140] 示例件小厌卖例化
[0141] 在一些实施例中,为了使用小区,小区必须被实例化。语法上,这可能类似于函数 调用,但是语义上这两个概念可能非常不同。小区实例化是(在一些实施例中)只能在特 殊的队列,例如,被称为MPX_PARALLEL,内发生的并行构造。在一些实施例中,传递给小区实 例化的参数列表可以以由小区接口定义所定义的顺序对应于小区的端口。
[0142] 在一些实施例中,以下可以经小区接口传递:
[0143] 常量 comm id ;
[0144] 父小区的ccmm端口;
[0145] 用const MPX_Comm_t声明的数组变
量的名称;
[0146] 在父小区中声明的共享或信号灯变量;
[0147] 父小区的数据端口;及
[0148] 小区参数。
[0149] 参数传递
[0150] 当参数化的小区被实例化时,每个参数可被传递实际的表达式,其在一些实施例 中可能是,但不限于:
[0151] 标量常量值;
[0152] 只包括标量常量的简单表达式;
[0153] 声明为MPX_Comm_t的数组变量;
[0154] 父(进行实例化的)小区的参数;及
[0155] 包括父小区的参数和标量常量的简单表达式;
[0156] 以下示例性代码展示了示例性参数传递:
[0157]
[0158] 图11说明按照以上示例性参数传递例子的可配置小区的使用。该图示出了小区 A(严格地说,在这个特定的例子内,cellA的viewA)内的小区B的两个实例,U1和U2。阴 影方块表示处理器资源(PE)并且圆圈表示对那些处理器可用的存储器资源(DMR)。在示出 的实施例中,小区B是可配置的小区,其参数NUM_PROCS定义它使用的处理器数量。因此, 小区B的实例U1具有两个处理器并且实例U2具有四个处理器(根据以上声明)。
[0159] 注意,在这个例子中,小区A的输入端口,IN,被直接地连接到小区B的实例U1的 输入端口,DATA。小区A的输出端口 OUT在这个例子中被直接地连接到小区B的实例U2的 输出端口,RESULT。此外,实例U1的输出RESULT经小区A内部的通信通道1000被连接到 U2的输入DATA。
[0160] 虽然对以上实施例已经进行了相当详细的描述,但是一旦以上公开内容被完全理 解,许多变化和修改将对本领域技术人员变得显而易见。以下权利要求意图要被解释为包 含所有这些变化和修改。
【主权项】
1. 一种存储能部署在多处理器阵列(MPA)上的软件代码的非临时性计算机可存取存 储介质,其中所述软件代码包括: 可执行以执行第一函数的第一程序指令;及 一个或多个第一语言构造,所述第一语言构造是用户可配置来指定一个或多个通信端 口和一个或多个参数输入; 其中所述一个或多个通信端口是用户可配置来指定与软件应用中其它软件代码的通 f目; 其中所述一个或多个参数输入是用户可配置来指定可用来执行所述软件代码的一组 硬件资源,其中所述硬件资源包括多个处理器和多个存储器;及 其中所述软件代码的实例能部署在至少一个MPA中以执行在不同软件应用中的所述 第一函数; 其中所述软件代码的每个实例包括指定所述一个或多个通信端口的连接性的一个或 多个通信端口的相应配置;及 其中所述软件代码的每个实例还包括指定在用于部署所述软件代码的相应实例的所 述至少一个MPA中的一组硬件资源的一个或多个参数输入的相应配置。2. 如权利要求1所述的非临时性计算机可存取存储介质, 其中所述软件代码的第一实例化能部署在至少一个MPA上以执行第一软件应用中的 第一函数,其中所述一个或多个通信端口具有指定第一连接性的第一配置,并且其中所述 一个或多个参数输入指定在用于部署的所述至少一个MPA上的第一组硬件资源;及 其中所述软件代码的第二实例化能部署在至少一个MPA上以执行第二软件应用中的 第一函数,其中所述一个或多个通信端口具有指定第二连接性的第二配置,并且其中所述 一个或多个参数输入指定在用于部署的所述至少一个MPA上的第二组硬件资源。3. 如权利要求2所述的非临时性计算机可存取存储介质,其中所述软件代码的第二实 例化基于所述一个或多个参数输入的配置比所述软件代码的第一实例化使用更多的处理 器。4. 如权利要求2所述的非临时性计算机可存取存储介质,其中第二软件应用是与第一 软件应用相同的软件应用并且其中所述第一实例化和所述第二实例化被配置为并行地执 行所述第一函数。5. 如权利要求1所述的非临时性计算机可存取存储介质,其中所述一个或多个通信端 口包括一个或多个结构端口和一个或多个共享存储器端口。6. 如权利要求1所述的非临时性计算机可存取存储介质,其中所述一个或多个参数输 入可配置来指定以下中的至少一个: 所述第一函数的操作; 数据流大小; 用于部署所述软件代码的多个处理器; 对所述MPA外部的一个或多个通用存储器的访问; 对一个或多个MPA输入和/或输出的访问; 在执行所述第一函数时用来存储临时状态的数据量;及 可访问所述软件代码的通信资源量。7. 如权利要求1所述的非临时性计算机可存取存储介质, 其中所述软件代码的一个或多个实例能部署在软件代码的另一给定实例中;及 其中所述软件代码的给定实例包括一个或多个语言构造,所述语言构造用户可配置来 指定一个或多个通信端口和一个或多个参数输入,其中所述一个或多个通信端口可配置来 指定与所述软件应用中的其它软件代码的通信并且其中所述一个或多个参数输入可配置 来指定可用来执行所述软件代码的给定实例的一组硬件资源。8. 如权利要求1所述的非临时性计算机可存取存储介质,其中所述一个或多个参数输 入在所述软件代码的执行过程中是可配置来调整用来执行所述软件代码的所述一组硬件 资源的。9. 一种用于配置多处理器阵列(MPA)的方法,其中所述MPA包括硬件资源,所述硬件资 源包括多个处理器和多个存储器,所述方法包括: 在存储介质中存储软件代码,其中所述软件代码执行第一函数,其中所述软件代码可 在第一软件应用中使用,其中所述软件代码包括指定所述软件代码与所述第一软件应用中 的其它代码的通信连接性的一个或多个第一语言构造,其中所述软件代码还包括指定用于 部署的一组硬件资源的一个或多个第二语言构造;及 接收创建用于在第一应用中使用的所述软件代码的第一实例的用户输入,其中所述接 收创建所述第一实例的用户输入包括: 接收对指定第一通信连接性的一个或多个第一语言构造的用户输入;及 接收对指定在其上部署所述软件代码的第一实例的第一组硬件资源的一个或多个第 二语言构造的用户输入。10. 如权利要求9所述的方法,还包括: 接收创建所述软件代码的第二实例的用户输入,其中所述接收创建所述第二实例的用 户输入包括: 接收对指定第二通信连接性的一个或多个第一语言构造的用户输入;及 接收对指定在其上部署所述软件代码的第二实例的第二组硬件资源的一个或多个第 二语言构造的用户输入。11. 如权利要求10所述的方法; 其中所述软件代码的第一和第二实例在软件代码的另一实例内进行实例化;及 其中所述软件代码的另一实例包括指定所述软件代码与所述第一软件应用中的其它 代码的通信连接性的一个或多个第一语言构造,其中所述软件代码的另一实例还包括指定 用于部署的多处理器阵列(MPA)中的一组硬件资源的一个或多个第二语言构造。12. 如权利要求9所述的方法,还包括: 利用对应于所述第一组硬件资源的一个或多个处理器和一个或多个存储器在MPA上 部署所述软件代码的第一实例。13. 如权利要求12所述的方法,还包括: 在所述软件代码的执行过程中,基于到所述一个或多个第二硬件构造的输入改变来调 整所述第一组硬件资源。14. 如权利要求9所述的方法,还包括: 配置所述一个或多个参数输入以更改所述第一函数的操作。15. -种存储能部署在多处理器阵列(MPA)上的软件代码的非临时性计算机可存取存 储介质,其中所述软件代码包括: 指定小区类型和第一函数的第一程序指令;及 实例化所述小区类型的第一实例的第二程序指令; 其中所述第二程序指令包括一个或多个语言构造,所述语言构造指定: 与软件应用中的其它软件代码的通信;及 可用于为具有所述小区类型的第一实例执行所述第一函数的一组硬件资源;及 其中所述第一实例能部署在至少一个MPA上以执行所述软件应用中的第一函数。16. 如权利要求15所述的非临时性计算机可存取存储介质,其中所述软件代码还包 括: 实例化所述小区类型的第二实例的第三程序指令,其中所述第二实例能部署在至少一 个MPA上以执行所述第一函数。17. 如权利要求15所述的非临时性计算机可存取存储介质; 其中所述第一小区类型包括另一个小区类型的小区的多个实例化;及 其中所述多个实例化中的每一个包括一个或多个语言构造,所述语言构造指定: 与所述第一小区类型的通信;及 可用来执行所述第一函数的一个或多个部分的一组硬件资源。18. 如权利要求15所述的非临时性计算机可存取存储介质,其中与所述软件应用中的 其它软件代码的通信包括一个或多个结构端口和一个或多个共享存储器端口。19. 如权利要求15所述的非临时性计算机可存取存储介质,其中所述第一组硬件资源 包括多个处理元件(PE)和多个存储器。20. 如权利要求15所述的非临时性计算机可存取存储介质,其中所述第一函数能跨所 述一组硬件资源中的多个处理器并行化。
【专利摘要】本发明公开涉及用于设计重用的多处理器编程工具包。公开了用于指定和实现目标在于在多处理器阵列(MPA)上执行的软件应用的技术。MPA可以包括多个处理元件、支持存储器以及通信耦合多个处理元件和支持存储器的高带宽互连网络(IN)。在一种实施例中,软件代码可以包括可执行以执行函数的第一程序指令。在这个实施例中,软件代码也可以包括可配置来指定一个或多个通信端口和一个或多个参数输入的一个或多个语言构造。在这个实施例中,一个或多个通信端口可配置来指定与其它软件代码的通信。在这个实施例中,一个或多个参数输入可配置来指定可用来执行软件代码的一组硬件资源。在这个实施例中,硬件资源包括多个处理器并且可以包括多个支持存储器。
【IPC分类】G06F9/445, G06F9/45
【公开号】CN104903855
【申请号】CN201380067521
【发明人】S·E·利姆, V·N·恩苟, J·M·尼科尔森, J·M·比尔兹利, T-I·王, Z·Q·尚, M·L·珀内尔
【申请人】相干逻辑公司
【公开日】2015年9月9日
【申请日】2013年10月7日
【公告号】EP2917827A1, US20140130013, WO2014074251A1