CN104903855B - 用于配置多处理器阵列的方法和设备以及开发系统 - Google Patents
用于配置多处理器阵列的方法和设备以及开发系统 Download PDFInfo
- Publication number
- CN104903855B CN104903855B CN201380067521.2A CN201380067521A CN104903855B CN 104903855 B CN104903855 B CN 104903855B CN 201380067521 A CN201380067521 A CN 201380067521A CN 104903855 B CN104903855 B CN 104903855B
- Authority
- CN
- China
- Prior art keywords
- software code
- mpa
- software
- cell
- hardware resource
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开涉及用于设计重用的多处理器编程工具包。公开了用于指定和实现目标在于在多处理器阵列(MPA)上执行的软件应用的技术。MPA可以包括多个处理元件、支持存储器以及通信耦合多个处理元件和支持存储器的高带宽互连网络(IN)。在一种实施例中,软件代码可以包括可执行以执行函数的第一程序指令。在这个实施例中,软件代码也可以包括可配置来指定一个或多个通信端口和一个或多个参数输入的一个或多个语言构造。在这个实施例中,一个或多个通信端口可配置来指定与其它软件代码的通信。在这个实施例中,一个或多个参数输入可配置来指定可用来执行软件代码的一组硬件资源。在这个实施例中,硬件资源包括多个处理器并且可以包括多个支持存储器。
Description
技术领域
本发明的领域一般而言涉及用于数字电子系统的软件开发,并且更具体而言,涉及用于多处理器阵列的编程技术。
背景技术
越来越多地,数字电子系统使用一个或多个多处理器阵列 (MPA)。数字电子系统的例子包括:计算机、数字信号处理器 (DSP)以及嵌入在封闭装备中的那些系统,所述封闭装备诸如是无线电电话、政府服务无线电、诸如蜂窝电话、智能电话和平板电脑的消费者无线装备、蜂窝基站装备、视频处理和广播装备、物体识别装备、超光谱图像数据处理,等等。
MPA可以被松散地定义为多个处理元件(Processing Element, PE)(即,处理器)、支持存储器(Supporting Memory,SM)和高带宽互连网络(Interconnection Network,IN)。在MPA的上下文中,术语“阵列”在其最广泛的意义上被用来指通过网络互连的多个计算单元(每个计算单元包含处理和存储器资源),其中网络具有在一个、两个、三个或更多个维度中可用的连接,其中维度包括圆形维度(回路或环)。应当指出,较高维度的MPA可以被映射到具有较少维度的制造介质上。例如,在IN中具有四维(4D)超立方体形状的MPA可以被映射到硅集成电路(IC)芯片的3D堆叠上,或者映射到单个2D芯片上,或者甚至计算单元的1D行上。同样,低维度的MPA可以被映射到较高维度的介质。例如,计算单元的1D行可以以蜿蜒的形状布置到IC芯片的2D平面上,或者盘绕在芯片的 3D堆叠中。MPA可以包含多种类型的计算单元以及处理器和存储器的穿插布置。在一些MPA实现的广泛意义中,还包括MPA的层次或嵌套布置,尤其是由互连的IC芯片组成的MPA,其中IC芯片包含一个或多个还可以具有更深层次结构的MPA。
MPA为软件开发方法和工具提出了新的问题和机遇。由于MPA 可以扩展到上千个PE,因此需要管理大量的软件来操作阵列,并且以高效的方式来测试、调试和重建这种软件。通常,这需要模块化、层次化、可适应的模块重用以及自动构建方法。虽然这些想法已出现在常规的软件开发系统中,但是它们没有以支持通用模块的方式集成到开发工具中,其中通用模块取决于性能要求或者不同的形状或拓扑结构要求,可以静态地和/或动态地适应于不同数量的PE和其它资源,而性能要求或者不同的形状或拓扑结构要求又可能取决于资源的可用性或应用要求。
因此,期望有改进的技术和工具用于多处理器阵列软件开发。
发明内容
以下提供了用于为多处理器阵列或结构及其使用开发软件的技术的各种实施例。多处理器结构可以包括多个处理器和多个通信元件,并且如所期望的,可以是(一般地)同构或异构的。每个通信元件可以是可动态配置的和/或可以包括多个通信端口、存储器和/或路由引擎,以及其它可能的元件。每个处理器可以包括用于执行算法逻辑的装置、指令处理单元和/或多个处理器端口,以及其它可能的元件。通信元件和处理器可以以穿插的方式耦合在一起。例如,对于每个处理器,可以将多个处理器端口配置为耦合到多个通信元件的第一子集,并且对于每个通信元件,通信端口的第一子集可以被配置为耦合到多个处理器的子集并且通信端口的第二子集可以被配置为耦合到多个通信元件的第二子集。
在一些实施例中,软件编程语言工具包可以指定并实现目标是在多处理器阵列(MPA)上执行的软件应用。在一种实施例中,软件代码可以包括可执行以执行函数的第一程序指令。在这个实施例中,软件代码也可以包括一个或多个语言构造(construct),其可配置来指定一个或多个通信端口和一个或多个参数输入。在该实施例中,一个或多个通信端口可配置来指定与其它软件代码的通信。在该实施例中,一个或多个参数输入可配置来指定可用来执行软件代码的一组硬件资源。在该实施例中,硬件资源包括多个处理器并且可以包括多个支持存储器。在该实施例中,软件代码的实例能部署在MPA上以执行不同软件应用中的函数。每个实例可以包括软件构造的配置。在一些实施例中,一个或多个参数输入可以配置为指定第一函数的操作、数据流大小、用来存储临时状态的数据量和通信资源量、外部输入和 /或输出等。软件代码可以被包括在非暂时性计算机可存取存储介质上。
各种功能可以被实现为编程语言或者对现有编程语言的扩展,例如,对C或C++的扩展,等等。多处理器阵列可以包括多个处理元件、支持存储器以及通信地耦合该多个处理元件和支持存储器的高带宽互连网络(IN)。软件编程语言工具包可以包括用于(例如,利用上述软件代码实施例)实现小区模型(cell model)的函数,其可提供:基于小区的层次设计、小区重用和MPA的物理资源的分配。物理资源可以包括处理元件、通信资源和存储器。小区并因此阵列资源的分配可以被静态地或动态地配置或修改,并且因此可以提供用于配置在MPA上执行的软件应用的高度灵活和有效的工具。
附图说明
当结合以下附图来考虑以下对优选实施例的详细描述时,可获得对本发明的更好理解,其中附图中:
图1说明示例性开发系统的一种实施例;
图2和3说明示例性多处理器阵列(MPA)系统的实施例;
图4和5A是说明用于MPA的软件开发流程的实施例的流程图;
图5B是说明软件开发流程的另一种实施例的流程图;
图6根据一种实施例说明小区的层次结构;
图7和8根据一种实施例说明相应的参数化的小区层次;
图9和10根据一种实施例说明对一对小区的相应物理资源分配;及
图11根据一种实施例说明以反映不同资源优化的两种不同方法实例化的小区和较低层次小区的视图。
虽然本发明易于进行各种修改和替换形式,但其具体实施例在附图中作为例子示出并且在本文中进行详细描述。但是,应当理解,附图和对其的详细描述不是要将本发明限制到所公开的特定形式,而是相反,意图是要覆盖属于如所附权利要求定义的本发明的精神和范围内的所有修改、等效物和替换。
这里使用术语“被配置为”是通过指示单元/电路/组件包括在操作过程中执行一个或多个任务的结构(例如,电路系统)来意指结构。因此,单元/电路/组件可以被称为被配置为执行任务,即使在指定的单元/电路/组件目前没有操作(例如,没有开启)时。与“被配置为”语言一起使用的单元/电路/组件包括硬件––例如,电路、存储可执行以实现操作的程序指令的存储器等。陈述单元/电路/组件“被配置为”执行一个或多个任务明确地不是要对那个单元/电路/组件援引35 U.S.C.§112(f)。
具体实施方式
通过引用结合
以下专利的全部内容通过引用被结合于此,就好像在本文被完全和完整地阐述了一样:
于2003年6月24日提交的、标题为“Processing System With InterspersedStall Propagating Processors And Communication Elements”的美国专利No.7,415,594,其发明人是Michael B.Doerr、 William H.Hallidy、David A.Gibson和CraigM.Chase。
于2011年10月14日提交的、标题为“Disabling Communication in aMultiprocessor System”的美国专利申请序列 No.13/274,138,其发明人是MichaelB.Doerr、Carl S.Dobbs、Michael B.Solka、Michael R Trocino和David A.Gibson。
术语
以下是在本申请中使用的术语表:
存储介质–各种类型的存储器设备或存储设备中的任何一种。术语“存储介质”意图包括:安装介质,例如CD-ROM、软盘104 或者磁带设备;计算机系统存储器或随机存取存储器,比如DRAM、 DDR RAM、SRAM、EDO RAM、Rambus RAM等;或非易失性存储器,比如磁介质,例如,硬盘驱动器、光存储装置或ROM、 EPROM、FLASH等。存储介质也可包括其它类型的存储器或者其组合。此外,存储介质可位于执行程序的第一计算机中,或者可位于通过网络——比如互联网——连接到第一计算机的另一不同的第二计算机中。在后一种情况下,第二计算机可将程序指令提供给第一计算机以便执行。术语“存储介质”可包括两个或更多个存储介质,这些存储介质可存在于不同位置,例如存在于通过网络连接的不同计算机中。
承载介质—如上所述的存储介质,以及物理传送介质,比如传达诸如电或光信号之类的信号的总线、网络和/或其它物理传送介质。
可编程硬件元件—包括各种硬件设备,其中包括经由可编程的或硬连线的互连连接的多个可编程功能块。例子包括FPGA(Field Programmable Gate Array,现场可编程门阵列)、PLD (Programmable Logic Device,可编程逻辑器件)、FPOA(Field ProgrammableObject Array,现场可编程对象阵列)和CPLD (Complex PLD,复杂PLD)。可编程功能块可从细粒的(组合逻辑或查找表)到粗粒的(算术逻辑单元或处理器核)不等。可编程硬件元件也可被称为“可重配置逻辑”。
专用集成电路(ASIC)—这个术语意图具有其普通含义的完整广度。尽管术语ASIC意图包括为特定应用定制的集成电路,而不是通用可编程设备,但是ASIC可以包含可编程处理器核作为构建块。蜂窝电话小区、MP3播放器芯片以及许多其它单功能IC是ASIC的例子。ASIC通常用硬件描述语言进行描述,诸如Verilog或VHDL。
程序—术语“程序”意图具有其普通含义的完整广度。术语“程序”包括1)可以存储在存储器中并且可被处理器执行的软件程序,或2)可用于配置可编程硬件元件或ASIC的硬件配置程序。
软件程序—术语“软件程序”意图具有其普通含义的完整广度,并且包括可被存储在存储介质中并被处理器执行的任何类型的程序指令、代码、脚本和/或数据,或其组合。示例性软件程序包括用基于文本的编程语言––例如,命令式或过程式语言,诸如C、C++、PASCAL、FORTRAN、COBOL、JAVA、汇编语言等––编写的程序;图像程序(用图像编程语言编写的程序);汇编语言程序;已编译成机器语言的程序;脚本;及其它类型的可执行软件。软件程序可以包括以某种方式互操作的两个或更多个软件程序。
硬件配置程序—可以被用来编程或配置可编程硬件元件或 ASIC的程序,例如,网表(netlist)或位文件。
计算机系统—各种类型的计算或处理系统中的任何一种,包括个人计算机系统(PC)、大型机计算机系统、工作站、网络设备、互联网设备、个人数字助理(PDA)、网格计算系统或者其它设备或设备的组合。一般地,术语“计算机系统”可被广泛地定义为涵盖具有执行来自存储介质的指令的至少一个处理器的任何设备(或设备的组合)。
自动—指的是在没有直接指定或执行动作或操作的用户输入的情况下由计算机系统(例如,由计算机系统执行的软件)或设备(例如,电路系统、可编程硬件元件、ASIC,等等)执行的动作或操作。从而,术语“自动”与在用户提供输入来直接执行操作的情况下由用户手动执行或指定的操作形成对照。自动过程可由用户提供的输入发起,但是“自动”执行的后续动作不是用户指定的,即,不是在用户指定每个要执行的动作的情况下“手动”执行的。例如,通过选择每个字段并且提供指定信息的输入(例如,通过键入信息、选择复选框、单选选择,等等)来填写电子表单的用户是在手动填写该表单,虽然计算机系统必须响应于用户动作来更新表单。表单可由计算机系统自动填写,其中计算机系统(例如,在计算机系统上执行的软件)分析表单的字段并且在没有任何指定字段的答案的用户输入的情况下填写表单。如上所述,用户可调用表单的自动填写,但不参与表单的实际填写(例如,用户不是手动指定字段的答案,而是这些字段被自动地完成)。本说明书提供了响应于用户采取的动作而自动执行操作的各种示例。
开发过程—指的是基于方法学的用于开发的生命周期。在粗略的水平,它描述了如何通过设计、实现、验证、部署和维护驱动用户的需求和约束。
处理元件—术语“处理元件”(PE)可与“处理器”互换使用并且指配置为执行程序指令的各种元件或元件的组合。处理元件包括,例如,诸如ASIC(专用集成电路)的电路、全部的处理器内核、单独的处理器以及诸如现场可编程门阵列(FPGA)的可编程硬件设备。
概述
参考图1-5A,本公开内容最初地描述用于可包括本文所公开技术的实施例的MPA的软件开发的概述。然后参考图5B-11描述基于小区的软件开发技术的实施例。本文所公开的各种技术可以允许在 MPA上下文中的灵活的设计重用。
以下描述了用于多处理器阵列(MPA)软件开发的工具或工具包的各种实施例,诸如编程语言或编程语言扩展,其中包括特定于目标是在MPA系统上执行的软件的设计、开发和实现的程序指令或命令。MPA通常包括多个处理元件、支持存储器和高带宽互连网络(IN)。用于描述MPA的其它术语可包括多处理器结构或多处理器网格(mesh)。在一些实施例中,MPA(或结构/网格)是多个处理器和耦合到该多个处理器的多个通信元件,其中多个通信元件中的每一个都包括存储器。
工具包可以被用来实现在多处理器阵列上执行的函数的模块化,层次设计重用,并从而可以允许设计者创建可以在许多不同的设计中 (或在同一设计中多次)进行配置和使用的通用功能单元,从而节省了需要手动创建小区的特定于情景的版本的工作量。虽然这种方法可以在本文中称为“小区模型”(CM),但是这个术语只是示例性的,并不是要将本方法限定到任何特定的形式、功能或外观,因此可以根据需要使用任何其它的一个或多个名称。工具包可以允许配置:小区之间的通信、可用来执行小区功能的硬件数量、小区层次等。
应当指出,本文所公开的技术可以被用在各种不同阵列大小的 MPA中。例如,在一种示例性实施例中,MPA可包括三个或更多个 PE。在其它示例性实施例中,MPA的大小(阵列中PE、支持存储器和相关联的通信资源的数量)可以大于或等于某个指定的数,其在各种不同的实施例中可以具有任何期望的值,例如,4、8、16、24、 32、64等。更一般地,取决于特定的应用或使用,MPA中PE的数量可以具有指定的下限,其可以根据期望被指定为任何复数值。
用于MPA的软件开发
软件开发项目是人与机器工作的结合,以产生使某个产品或服务按照由开发团队所采用的需求操作的软件。通常,较多的设计和测试自动化是有利的,因为这使得更多地测试所生成的软件,并因此可以消除更多的错误(bug)。
用于嵌入式系统的软件开发环境在图1中画出。除了人类软件工程师和程序员之外,图1还示出了开发环境的三个主要部分:最终产品、工作站和试验台。在各种实施例中,软件代码可以在工作站上进行配置并且部署到MPA上。
在一些实施例中,最终产品规定至少技术需求的列表。在一些实施例中,测试台被配置为为被测设备(device under test,DUT)生成测试模式输入和捕获DUT的输出并与已知的好模式进行比较。 DUT与最终产品匹配地越近,开发出的软件在最终产品中将按预期操作的置信度越高。
例如,工作站可以是具有操作系统(OS)的台式或膝上型计算机,其中操作系统管理大容量存储装置、设计数据的数据库以及读和写项目数据库的一组(或一套)设计工具的细节。可能存在不止一个项目和不止一个项目数据库,并且工具和库可以在它们之间进行共享,以降低开发成本。
通常,用于计算机和DSP的存储器以层次结构进行组织,其中快的存储器在层次结构的顶部,并且在沿着层次结构向下的每一级处的存储器较慢但是容量较高。在MPA的一些实施例,在层次结构顶部的支持存储器位于每个PE的附近。在一些实施例中,每个支持存储器可以被专用于只持有指令或只持有数据。在其它实施例中,支持存储器可以存储指令和数据两者。用于特定PE的支持存储器可以对该PE是私有的或者是与其它PE共享的。
存储器层次结构再往下可能是更大的共享存储器(例如,半导体 SDRAM),其具有比邻近每个PE的支持存储器的位容量大许多倍的位容量。在一些实施例中,在存储器层次结构的再下面,诸如闪速存储器、磁盘或光盘的存储元件是可以访问的。
如上所述,多处理器阵列(MPA)在一些实施例中包括处理元件(PE)的阵列、支持存储器(SM)以及支持PE和/或存储器之间的高带宽数据通信的主互连网络(PIN或简单地IN)。示例性MPA 在图2和3中示出,在以下进行描述。在一些实施例中,PE具有寄存器以缓冲输入数据和输出数据、指令处理单元(IPU)以及对数据执行算术和逻辑功能的装置,加上与系统的其它部分通信的多个交换机和端口。在这些实施例中,IPU从存储器中取得指令、将它们解码并设置适当的控制信号来将数据移进或移出PE以对数据执行算术和逻辑功能。由于每个包含大MPA的IC芯片具有大量的PE,因此适于大MPA的PE通常被选择或设计为比通用处理器(GPP)具有更高能效。
如本文所使用的,术语MPA涵盖处理器的相对同构阵列以及通用和被集成在所谓“平台IC”芯片上的专用处理器的异构集合。平台IC芯片通常也具有多种I/O电路以与许多不同类型的其它设备通信。
一个示例MPA体系架构是在美国专利No.7,415,594中所讨论的 HyperXTM体系架构。在HyperXTM体系架构的一种实施例中,具有很宽范围大小的多处理器阵列可以由基于单元-小区的硬件结构(网格) 构成,其中每个小区被称为HyperSlice。硬件结构可以通过在格子上布置单元-小区并互连相邻的小区来形成。每个HyperSlice可以包括一个或多个数据存储器和路由器(DMR)以及一个或多个处理元件(PE)。在美国专利No.7,415,594中,DMR被称为可动态配置的通信(DCC)元件,并且PE被称为可动态配置的处理(DCP)元件。在该实施例中,DMR可以为其相邻的PE提供支持存储器,以及用于互连网络(IN)的路由器和链接。
硬件结构可以通过将HyperSlices邻接在一起来创建,这涉及对齐HyperSlices以形成正确的电气连接。这些连接包括到DMR的链接和到供电网的连接。复制HyperSlices、将它们对齐并通过邻接进行连接的技术是集成电路(IC)芯片的超大规模集成(VLSI)中很好理解的技术,尤其是用互补金属氧化物半导体(CMOS)电路技术制造的IC。在该实施例中,硬件结构具有独立地和透明地操作的到处理元件的PIN,并且可以通过组合(ensemble)在支持任意通信网络拓扑的HyperSlices之间的实时可编程和可适应通信路径(其可以被称为路由或通道)来提供按需的带宽。协调的HyperSlices组可以在软件控制下“在运行中(on-the-fly)”形成和重新形成。动态地更改用于评估函数的硬件数量的能力可以允许硬件资源的高效或最佳的应用,以减轻处理瓶颈。在硬件结构的边缘,链接可以连接到专用于存储器层次结构再下级的类型的存储器的电路,或专用于在集成电路(IC)芯片的边缘的I/O的电路。
互连的DMR可以跨芯片和在芯片之间提供最近邻居的、区域的和全局的通信。这些通信方式每个都可以物理地使用DMR资源来取决于数据的本地性和软件算法要求不同地发送数据/消息。可以提供“快速端口”设施以支持一个或多个字数据从处理器到任何网络目的地的低延迟传输。对于块传输,直接存储器访问(DMR)内的DMA 引擎可用于管理跨存储器和路由结构的数据移动。对于PE之间的最近邻居通信,使用共享存储器和/或寄存器可能是最高效的数据移动方法。对于区域和全局数据移动,利用路由结构(PIN)可能是最高效的方法。通信路径(或路由)可以是动态或静态的。动态路由可以被建立用于数据传输并且在传输完成后进行拆除以便为其它路由和数据传输释放PIN资源。静态路由可以贯穿程序的执行停留在原地,并且被主要地用于高优先级和关键通信。通信路径的物理位置以及数据跨它们进行传输的定时可以通过软件程序来控制。可以存在多个通信路径以支持任何发送方和接收方之间的同时数据传输。
DMR的体系架构可以允许在多处理器结构中使用不同的可互换的PE以便为特定的应用优化系统。HyperXTM多处理器系统可包括 PE的异构或同构阵列。PE可以是常规的处理器,或者作为替代, PE可以不符合处理器的常规定义。PE可以简单地是用作用于某些逻辑功能的硬连线处理器的逻辑门集合,其中可编程能力对于更高的性能、较小的面积和/或较低的功率进行了权衡。
图2说明HyperXTM系统的一种示例性实施例的处理元件(PE) 和数据存储器路由器(DMR)的网络的视图。PE被示为矩形方框并且DMR被示为圆形。DMR之间的路由通道被示为虚线。在示出的实施例中,实心三角形示出网外通信(其也可以被称为芯片输入和/ 或输出)并且实线示出DMR之间的活动数据通信。计算任务利用它的数字标识符示出并且被放置在正执行它的PE上。被用于通信的数据变量通过其名称示出并且被放置在包含它的DMR上。在图示的例子中,左上方的PE已被分派具有任务ID 62的任务,并且可以经与该PE相邻的相应的DMR——通过通信路径变量t、w和u指示——与其它PE或存储器通信。如还示出的,在本实施例中,活动通信通道将指示为71(例如,另一个任务ID)的PE连接到网外通信路径或端口。在一些实施例中,PE可以利用二者共享变量(例如,利用相邻的DMR)和沿着IN传递的消息彼此通信。在各种实施例中,根据本文所公开的技术开发的软件模块可以被部署在示出的网络的各部分上。
图3说明在芯片上实现的示例性多处理器系统。如所示出的,类似于图2的示例性系统,该芯片包括用于与芯片外设备通信的多个 I/O路由器,以及内部多处理器结构。HyperXTM处理器体系架构可包括固有的多维性,但是可以被物理地实现在如所示出的平面实现中。处理器体系架构可具有高能效特性并且也可以是本质上可伸缩(到大阵列)和可靠的–代表低功率和可靠的概念二者。使处理器体系架构能够实现这种性能的方面包括流线型的处理器、存储器网络和灵活的IO。在一些实施例中,处理元件(PE)可以是成熟的DSP/GPP 并且基于存储器到存储器(无高速缓存的)的体系架构,该体系架构由可变宽度的指令字指令集体系架构维持,该可变宽度的指令字指令集体系架构可以动态地扩充执行生产线以在同时最大化硬件资源使用的同时保持吞吐量。
在示出的实施例中,多处理器系统包括:MPA输入/输出,其可被用来与通用网外存储器(例如,在一种实施例中的一个或多个 DRAM)和/或其它外围设备通信。
软件是操作计算机或其它存储有程序的设备所需的指令的组合 (ensemble)(也称为程序代码)。软件可根据其使用进行分类。为终端用户用于特定用途(诸如文字处理、上网、视频或蜂窝电话信号处理等)操作计算机的软件可以被称为应用软件。应用软件包括由人类程序员编写的源程序和脚本、各种中间编译的形式,并且被称为运行时软件的最终形式可以被目标设备(PE、微处理器或CPU)执行。运行时软件也可以被模拟器执行,其中模拟器是被设计成比用于调试 (错误消除)目的的实际目标设备提供更多的对目标设备内部状态的可视性。
开发软件(一组或一套软件开发工具)是用于生成应用软件的软件。基本开发工具包括编译器、汇编器和链接器,如在图4中所指示的,其中图4示出了用于基于MPA的系统的示例性软件设计和开发流程。通过其用户编写源代码的编辑器也可以被认为是基本的开发工具。人类工程师或程序员通常设计程序并将其转换为可以经程序编辑器创建的源代码,由图4中标有“完整的设计”的文档表示。在标有“语言编译/汇编”的方框中,使用编译器将源代码转换成模块化的地址可重定位的目标代码;然后使用汇编器来创建模块化机器代码;并且最终,使用链接器创建整个程序的可执行二进制映像。标有“处理设计以创建芯片编程文件”的编译、汇编和链接(产生二进制映像) 的这个过程可以利用存储在“makefiles”中的对操作系统的指令来自动化。为了测试程序,二进制映像通常被加载到目标设备的存储器中,在图4中通过向“处理器IC芯片”供给和实现“芯片编程信息”,即“编程芯片”,并执行(即“运行程序”)来表示。其它常见的软件工具包括调试器(以加载、开始、暂停、转储、并且从目标 PE反汇编二进制映像),以及周期精确的模拟器。周期精确的模拟器提供对处理器内部状态的完全可视性,但是它们运行得比目标硬件慢得多,例如,10000到一百万分之几。
对于多处理器系统而言,其与单处理器系统比较,存在重要的额外步骤,这就是向特定的物理硬件资源––诸如在PE和系统I/O端口之间或其中的PE和通信资源––分配特定的处理任务或模块。注意,资源分配可以包括将数据变量分配到存储器资源,因为共享的和本地的存储器的分配可能对PE和通信资源的分配有影响,反之亦然。在图4中,这个额外的步骤通过标记为资源分配(其也可以被称为物理设计)的方框来表示。该流程的资源分配部分可以利用布置和路由工具,其可用于向阵列中的特定PE分派任务,并在IN中选择特定的端口和通信路径。这些通信路径可以是在创建后静态的或者在软件执行过程中动态地变化。当动态路径在正常操作过程中被路由和拆除时,系统的优化可以包括时间维度以及空间维度。此外,系统的优化可能受系统约束的影响,例如,运行时延迟、延时、功率损耗、数据处理依赖性等。因此,这种系统的优化可以是多维的优化。
图5A说明更详细的示例性软件设计数据流。如可以看到的,第三方系统开发工具被一般地用来创建程序,例如,ANSI-C程序,其被编译、汇编和链接,以生成映像(二进制可执行文件)。还如所示出的,编译的结果可以被进一步利用,以按照目标硬件优化软件。更具体地,任务提取、多维优化(以上提到的)、和资源分派/分配可以基于系统约束和目标硬件产品来执行,例如,如所指示的, HyperXTM硬件产品。如所示出的,这个过程本质上可以进行迭代。
当涉及少量处理器时,物理设计(向物理位置分派应用软件任务和通信路径的具体路由)可能相对简单并且可以被手动地完成。即便如此,每个处理器的工作负荷会随着时间而显著地变化,使得可能期望某种形式的动态分配,以最大化吞吐量。此外,对于具有大量PE 的MPA来说,如果物理设计过程手动完成,则该过程会是单调乏味的并且容易出错。为了解决这些问题,用于多处理器系统的软件开发工具可以定义任务(程序代码块)和通信要求(用于每条路径的源和目标),并自动将资源分配给任务(地点和路由)。如果设计大或者包含很多重复的任务,那么如果将它表达为小区层次结构,则它可能更易于管理。但是,层次结构描述将一般地必须被扁平化到所有任务和所有通信路径的列表中,其中在可以使用位置和路由工具来完成物理设计之前在运行时需要这些任务和通信路径。
层次结构、可配置小区的思想已在硬件描述语言(HDL)的领域中使用。层次可配置性被内置在常用的HDL中,诸如Verilog和 VHDL。但是,那些方法面向创建在逻辑门中实现的并且通常不是在多处理器阵列中使用的设计。主要区别在于在每个领域中使用的计算模型。在HDL模型中,所有计算资源通常默认为并发执行,但可以被指定为顺序执行。多处理器模型通常假定受限数量的并行计算流,其中每一个都可以遵循顺序执行模型。
这种HDL没有多处理器阵列的唯一属性的表示,例如,唯一的或共享的存储器空间、唯一的或共享的同步资源、或几组特定于处理器的机器指令。相反,用于多处理器的软件语言通常包括这些特征的表示。
在软件语言的领域中,函数可配置性已被使用了一些时间。但是,现有技术的软件编程语言不支持(固定的和可重新配置的小区两者的) 编程可重用性以及用层次分解管理设计复杂性。例如,在C++中被称为“templates(模板)”的construct(构造)允许函数被专用于特定的用途;但是,参数化的范围被限定到其参数的数据类型,并且不允许,例如,在MPA上的计算的并行实现的改变。
基于小区的开发概述
在一些实施例中,小区模型可以使得能够进行函数并行实现的封装和参数化,这可以允许在函数的任何特定使用中所采用的并行化量被扩展或收缩,以适应正在使用它的环境。例如,本文所公开的技术可以允许更多硬件资源的使用(通过更多的并行化),以构造小区更高性能的版本。
在一些实施例中,小区模型可以允许小区在被定义为小区外部并因此可以与其它小区进行共享的存储器和同步资源上操作。这可以进一步使小区能够重用,因为小区能被收缩以仅仅包含关键功能,并且较简单的和功能上较单纯的小区更容易重用。一般地,小区模型可以包括软件构造,其允许指定小区和其它小区之间的连接性和/或对给定小区可用的通信资源量。
在MPA上的小区资源分配也可以是对参数敏感的。例如,小区可以被设计成具有参数,参数可以确定它是否被直线地布置或以矩形形式布置。作为另一个例子,参数可以表示资源的边界框,其中该小区被设计为要分配到该边界框。
在一些实施例中,参数可以被配置为改变小区的函数操作。例如,一些实施例中,参数可以被用来配置过程要运行的迭代次数或者设置用于过程完成的收敛准则。在另一种实施例中,参数可以被配置为,例如,通过在小区中可用的多个不同算法中选择来完全改变小区的功能。
在一些实施例中,小区模型也可以被用来动态地改变该小区在它执行时正在使用的资源,例如,通过动态地改变被使用的资源量和 /或改变正在被使用的特定的资源组。例如,基于改变负载条件,小区可以使用更多的处理器来及时地完成计算。另一个例子是基于被传递到小区中的数据的大小改变用于在计算过程中存储临时状态的数据量。还有一个例子是使用更多的通信资源来更快地将数据放到小区中。此外,参数可以被用来向MPA输入和/或输出以及MPA外部的一个或多个系统存储器提供小区访问。
在一些实施例中,由特定小区所使用的资源的分配可以被动态地改变,例如,当小区扩展时,它需要将其附加的资源分配到多处理器阵列上。作为另一个例子,如果相邻小区需要扩展和使用更多的资源,则该小区可以最小化其正在使用的资源,或重新分配它正在使用的这组资源,以便给相邻的小区更多的空间。
本文所公开的可以被称为“用于设计重用的多处理器编程语言扩展(MPPLEDR)”的编程语言扩展可以解决对大量PE的设计重用和可伸缩性。在各种实施例中,可伸缩性的基础是基于小区的层次结构方法,其中参数化的小区可以被设计并存储在一个或多个库中,用于跨多个项目的可定制重用。
本文所公开的示例性编程构造或编程语言扩展被表示为对C语言的扩展;但是,应该指出,其它的编程语言也可以类似的方式进行扩展或定义,例如,C++、Java和FORTRAN等,并且,本文所公开的基于C语言的实施例意图仅仅作为示例性的,并不是要将所考虑的编程语言限制到任何特定的编程语言集合。在一些实施例中,所公开的编程语言或编程语言扩展可以被用来创建和实例化小区。
此外,在一些实施例中,本文所公开的技术可以提供或有助于将小区和实例化实现到多处理器阵列上的工具流程。在以下描述中,利用本技术创建的小区,例如,语言扩展,被称为“通用(generalized) 小区”。通用小区可以是分层的,即,能够利用其它的通用小区作为其定义的一部分,并且子-小区的配置可以被父小区的配置修改。
图5B示出了说明用于基于小区的软件开发方法的一种实施例的流程图。在一些实施例中,图5B的步骤可以被实现为图4和图5A 的过程的一部分。在图5B中示出的方法可以结合计算机系统、设备、元件或本文所公开的组件中的任一种以及其它设备使用。在各种实施例中,一些示出的方法元素可以被并发地执行、以与所示出的不同的顺序执行、或者可以被省略。根据需要也可以执行附加的方法元素。流程在方框510开始。
在方框510,为特定的函数创建小区类型或定义。该特定的函数可以是各种函数中的任一种,例如,诸如数学变换。在本实施例中,小区类型包括一个或多个语言构造,其可配置来至少指定(1)与其它软件代码的通信和(2)一个或多个参数。示例性软件构造将参考以下代码示例进行讨论。小区类型的创建可以由软件开发人员针对特定应用或作为例如可用于创建各种应用的小区类型库的一部分执行。在一些实施例中,可以创建不包括特定功能,但是仅仅充当例如对其它小区的封装(wrapper)的小区类型或定义。流程继续到方框520。
在方框520,创建小区的实例化。这个步骤可以在编写特定的软件应用时执行。软件应用可以包括同种或不同类型的多个小区,并且可以或不可以包括不符合小区模型的其它软件。在该实施例中,实例化小区包括指定小区与软件应用的通信和指定可用来执行特定函数的一组硬件资源。指定通信可以包括指定与其它小区的通信和/或在其它小区内放置小区。在一些实施例中,软件构造可以定义通信端口。在一种实施例中,通信端口包括一个或多个光纤端口(例如,到IN 的)和一个或多个共享存储器端口(例如用于在对多个PE可用的存储器中利用共享变量进行通信)。指定通信可以包括为这些端口指定连接。
在一些实施例中,创建小区类型(例如,如在步骤510中)可以包括为小区的部署定义不同的硬件配置。在这些实施例中,指定可用来执行特定函数的一组硬件资源可包括在小区实例化中提供选择所定义的其中一个硬件配置的参数。在其它实施例中,指定这组硬件资源可以不基于预先定义的配置,而是可以利用参数定义这组硬件资源 (例如,通过指定多个处理器、通信资源等)。流程继续到方框530。
在方框530,实例化的小区被部署在具有软件应用的多处理器阵列上。这可以包括在作为该组硬件资源的一部分的一个或多个存储器和/或PE上存储数据和/或指令,并且分派PE用于执行指令以完成特定的功能。流程继续到方框540。
在方框540,在MPA上执行特定的函数。特定函数的执行取决于在步骤520中指定的硬件资源量可能具有不同的性能特性。而且,对小区的硬件资源分派可以被动态地调整。在一些实施例中,动态调整可以基于来自其它小区(例如,MPA上相邻小区)关于它们的硬件资源使用的信息。因此,小区也可以被配置为将它的资源使用传递给其它小区。流程在方框540结束。
图6根据一种实施例说明小区的示例性层次结构,其中小区A 包括并使用小区B(两个实例)、C和D,并且其中小区C包括并利用小区D(四个实例)。这种模块化层次结构可有利于复杂的功能和体系架构模式,以及模块的重用。通用小区的这种层次结构有助于在MPA上的软件应用的并行化执行的高度可配置的解决方案。
例如,图7说明包括小区A、小区B、小区C、小区D和小区E 的示例性小区层级结构。小区B是参数化的小区的例子,并且被参数化为包括两个子小区,在这种情况下,小区E的两个实例。图8 根据一种实施例说明了图7的小区层次结构的修改后的版本。如可以看到的,在这个例子中,小区B已被参数化为包括四个子小区,具体而言,小区E的四个实例,从而经附加的子小区提供了小区B的任务的增加的并行性。在其它实施例中,子小区任务可以例如利用参数通过配置的对特定子小区可用的硬件资源进行并行化。在一些实施例中,可配置以改变小区B中的子小区数量的参数可以是数字,例如,指示要包括的小区E的实例数量。在其它实施例中,可配置来改变小区B中子小区数量的参数可以指示或引用小区E的类型或实例(例如,小区B可以不包括与小区E相关联的信息,而是该信息可以作为参数进行传递)。在一些实施例中,小区可以不包括指示任何特定功能的代码,而是可以用作对可被插入以执行不同的可配置功能的其它小区的封装。
通用小区的配置或参数化可以被用来配置或修改小区的逻辑和/ 或功能操作。通用小区可以利用多处理器阵列中的零个或更多个处理器,并且小区配置信息可以改变小区利用的处理器数量。类似地,通用小区可以利用主互连阵列中的零个或更多个组件,并且小区配置信息可以改变小区利用的互连网络(IN)的组件的数量。类似地,通用小区可以利用MPA的支持存储器中的零个或更多个存储位置并且小区配置信息可以改变小区利用的存储位置的数量。
通用小区的定义还可以包括控制小区的物理实现的信息,并且物理实现可以通过改变配置进行修改。物理实现可以,例如,包括所使用的确切的或相对的处理器、处理器到处理器通信的方法和实现、及功能变量在一个或多个阵列存储器中的位置。
图9和10说明物理上占据MPA的相应部分的两个小区(小区 A和B)。在这些图中,每个小区的面积意图表示所使用的处理和/ 或存储器资源。更具体而言,图9说明根据第一配置(或参数化)用于小区A和小区B的相应的资源使用,其中,如可以看到的,小区 B比小区A利用更多的多处理器阵列资源。图10说明根据第二配置 (或参数化)用于小区A和小区B的相应的资源使用,其中,在第二配置中,用于图9的小区的资源已被重新分配,使得小区A在小区B扩展时改变形状和位置。注意,在这个新的配置中,小区B比小区A利用多得多的多处理器阵列资源,并且比用图9的配置的小区B大得多。该重新分配可以是动态的(例如,当包含小区A和B 的软件应用正在执行时),或者可以在程序的开发过程中执行(例如,小区A和B可以在不同的应用中利用不同的硬件资源量进行部署)。
在一种实施例中,语言构造或参数可以允许小区与相邻小区或在相邻处理器上运行的函数共享存储器或同步资源(例如信号灯 (semaphore))。应当指出,本文所公开的技术,包括小区模型及其使用的实施例,适用于各种MPA体系架构——包括同构的和异构的——中的任一种。
示例性实施例和实现
以下描述本文所公开的技术的各种示例性实施例和实现。但是,应该指出,所描述的特定实施例和技术并不将本发明限制到任何特定的形式、功能或外观。例如,实施例中的一些根据C编程语言的扩展,具有C-类型的数据结构、语法及特定的函数、结构或元素名称,来描述;但是,所描述的技术可以用各种编程语言(或对这种语言的扩展)中的任一种来实现或者实现为任何各种编程语言(或对这种语言的扩展)中的任一种,根据期望,可以使用任何语法和名称。
小区
可以为MPA上的可伸缩分层设计定义通用小区。在一些实施例中,可伸缩性的基础是基于小区的层次结构方法,其中参数化的小区可以被设计并存储在一个或多个库、集合或组中,用于跨多个项目的可定制的重用。
小区可以是用来构建层次化设计的组件。小区可以包括一个或多个任务或函数以及其它小区的实例。小区可以实现抽象的功能,例如,其可以像传递(一种输入,一种输出通信结构)那样简单或者像矩阵相乘或维特比(Viterbi)解码器那样复杂(或比其更复杂)。
在一种实施例中,小区可以具有两个主要部分:小区定义和视图。多处理器小区定义构造可以定义小区名称以及端口和参数名称及其类型的有序列表。端口是用于小区和其它小区或外部世界之间的数据通信的通道。参数配置小区并且在单元被实例化时被绑定到恒定值。
在一种实施例中,示例性小区定义构造可以根据以下语法来定义:
如可以看到的,以上示例性小区定义构造mpx_celldef包括小区名称和小区的端口与参数列表。
视图
视图(其根据需要可以具有不同的名称)可以利用视图定义来定义,例如,利用视图定义构造,例如,mpx_view构造。视图定义构造可以定义视图名称、任务及可能的其它小区的实例化。更一般地,视图可以定义小区的主体,并且可以包含叶任务。视图也可以包含其它小区的实例。在一些实施例中,小区可以具有多个视图。小区的每个视图可以独立于任何其它视图。
视图提供小区的功能,并且取决于系统要求可以以不同的方式来实现。不同实现的原因可能包括,但不限于,延迟和吞吐量要求、 PE指令存储器可用性、DMR数据存储器可用性和路由拥塞,以及其它。
因此,小区的不同实现可以利用视图定义构造,例如, mpx_view,被定义为视图。每个视图实现或实例可以具有其自己的文件。在一种实施例中,示例性视图定义构造可以根据以下语法来定义:
术语“队列(rank)”和“MPX_PARALLEL”(以下提及) 是本技术分层功能的示例性实现的特定语义。根据本文所使用的定义,小区可以具有功能并实例化其它小区。功能可以通过任务来创建,并且其它小区可以利用MPX_PARALLEL构造来实例化。如本文所使用的,任务是在处理器上执行的一个功能,例如,函数、代码块、或程序指令集合,并且队列是为任务分派的唯一标识符。任务默认地可以与在其它处理器上执行的所有其它任务并发地执行。如果同一处理器被分派了不止一个任务,则可以做出规定(provision)以在处理器上执行多个任务–存在广泛的技术描述多任务机制。特殊队列标识符, MPX_PARALLEL,提供了方便的语法手段将其它小区及所有它们的任务输入到当前视图中,从而实例化在本实施中统一地声明为小区的单独定义的多任务集合。以稍微不同的方式描述,任务是在处理器上执行的一个功能,并且队列是取决于任务最终所位于的特定处理器为实例化的小区创建不同任务的手段。MPX_PARALLEL队列是其中其它小区被实例化的特殊的队列。但是,应当指出,术语“队列”可以不仅仅应用到MPX_PARALLEL(或功能等效物);而是,在一些实施例中,队列可以是一系列任务或一块并行的小区实例。在本实施例中,预定义的队列符号MPX_PARALLEL指定其中包含的语句是并发语句而不是串行语句。
应该指出,在一些实施例中,分层系统可以不用任何任务来实现,而只实例化其它小区。
端口
在视图中的任务和在视图之外的任务之间的通信可以利用端口接口进行配置。在一种实施例中,小区的端口接口可以声明两种类型的端口:comm端口和数据端口。
在一种实施例中,comm(用于通信路径的简称)端口可以用输入、输出或端口类型,例如,mpx_input、mpx_output或mpx_port 来声明。在一些实施例中,comm端口可以用于光纤通信,而数据端口可以用于共享变量通信。Comm端口可以用于路由的通信,诸如 DMA传输。在一种实施例中,comm端口类型(例如,mpx_port、 mpx_input、mpx_output)可以只用于小区定义的声明 (mpx_celldef),并且不可以用于声明局部或全局变量或声明函数参数。在一些实施例中,也可以支持comm端口数组。
例如,输入comm端口数组在一种实施例中可以根据以下示例性语法进行声明:
注意,在一些实施例中,声明的数组端口大小可能需要是常量或之前声明的参数,即,普通变量可能是不允许的。
在一些实施例中,数据端口可以用类型限定符shared(共享的) 或semaphore(信号灯),例如mpx_shared或mpx_semaphore,进行声明,并且可以将被声明为小区外部的共享变量或信号灯与本地端口符号相关联。在小区视图中的任务可以引用该端口符号以直接访问共享变量或信号灯。
注意,在一些实施例中,可以支持无特定方向的mpx_port(或功能等效物)。最终的方向可以通过实现系统来选择。端口的范围在利用mpx_celldef(或功能等效物)声明的小区内可以是全局的。端口可以不需要作为参数传递给在该小区内调用的函数。在一种实施例中,为了能够引用端口,可能需要函数与mpx_celldef在同一文件中。小区端口可以在发送和接收API中用作comm ID。
示例性类型限定符mpx_shared或mpx_semaphore当用在 mpx_celldef声明中时,可以声明数据端口。数据端口可以提供对小区之外声明的变量的访问。可能需要声明具有全局范围,并因此可能不允许位于函数、小区定义(例如,mpx_celldef或mpx_cell)或实现(例如,mpx_view)的内部。
以下根据一种实施例说明示例性所需的外部声明:
在这个例子中,sharedVar在小区A的功能或定义的外部进行声明。与小区实例化相关联的实际的comm.符号和共享变量可以匹配正式小区定义中的端口位置。在以上的例子中,具有标识符1000的 comm.与输入comm.端口“in”相关联,2000与输出comm端口“out”相关联,并且sharedVar与共享变量数据端口“shv”相关联。在另一种实施例中,端口和参数可以通过名称匹配到实例化中的 comm ID和参数值。
用限定符mpx_semaphore(或功能等效物)声明的变量可以被用作用于控制共享资源的互斥访问的信号灯。在一些实施例中,信号灯变量无论被声明为变量或者数据端口,其都只可以利用 MPX_Lock和MPX_Unlock函数(或功能等效物)来设置,并且不可以作为参数传递给其它函数。注意,本文所公开的技术不限于任何信号灯的特定实现;例如,在一些实施例中,可以利用提取(fetch) 和递增(increment)指令。
示例:共享的存储器
以下是根据一种实施例的关于共享的存储器的示例性声明集合。
在以上声明中,端口in和out是comm端口,并且shv是数据端口。在cellA中,shv是对在该小区之外声明和拥有的共享变量的引用,比如在main.c中的sharedVar。
在一些实施例中,数据端口可以被传递经过小区层次结构的多个层次。例如,以下在cellA的viewA实现内的cellB的实例化传递 shA。注意,在这个例子中的共享变量大小匹配。
示例性小区参数
如上所述,小区可以被参数化。以下表示利用示例性实现的实施例,该实现利用C-风格语言构造。
参数化的小区可以在其接口定义中具有mpx_param声明。以下是小区参数的示例性声明:
在一种示例性实施例中,可能需要小区参数的声明出现在 mpx_celldef(或功能等效物)的定义中。在一些实施例中,可能需要参数在它使用之前被声明。
在一些实施例中,参数可以被用来为小区端口或在文件全局范围中声明的数组变量(即任务全局变量或共享变量)指定大小,如通过以下使用参数指定端口大小的示例性声明所指示的:
参数可以影响任务和/或小区实例的个数(数量)和/或选择,如在以下例子中所示出的:
在一些实施例中,参数可以用在循环中以生成实例,如在以下例子中所示出的:
在这个例子中,例如,利用编程工具包,可以展开循环、评估 comm.ID表达式和产生实例标签。
为了便于讨论,指定端口或变量大小或控制任务或实例选择/生成的参数可以被称为结构参数。
参数可以在功能上影响视图,诸如计算、任务或函数的选择,并且一般地,在可以使用常量的情况下,参数可以被用在表达式中。参数的这种使用不会影响结构。以下是控制计算的参数示例性使用:
队列(rank)
在一些实施例中,队列是包含语句列表的范围或块。语句可以是串行的或并发的。包含串行语句的队列可以直接地在MPA中的处理器上执行。包含并发语句的队列可以包含小区的实例化。每个并发语句可以是那个实例化小区的队列的层次调用。
示例性小区实例化
在一些实施例中,为了使用小区,小区必须被实例化。语法上,这可能类似于函数调用,但是语义上这两个概念可能非常不同。小区实例化是(在一些实施例中)只能在特殊的队列,例如,被称为 MPX_PARALLEL,内发生的并行构造。在一些实施例中,传递给小区实例化的参数列表可以以由小区接口定义所定义的顺序对应于小区的端口。
在一些实施例中,以下可以经小区接口传递:
常量comm id;
父小区的comm端口;
用const MPX_Comm_t声明的数组变量的名称;
在父小区中声明的共享或信号灯变量;
父小区的数据端口;及
小区参数。
参数传递
当参数化的小区被实例化时,每个参数可被传递实际的表达式,其在一些实施例中可能是,但不限于:
标量常量值;
只包括标量常量的简单表达式;
声明为MPX_Comm_t的数组变量;
父(进行实例化的)小区的参数;及
包括父小区的参数和标量常量的简单表达式;
以下示例性代码展示了示例性参数传递:
图11说明按照以上示例性参数传递例子的可配置小区的使用。该图示出了小区A(严格地说,在这个特定的例子内,cellA的 viewA)内的小区B的两个实例,U1和U2。阴影方块表示处理器资源(PE)并且圆圈表示对那些处理器可用的存储器资源(DMR)。在示出的实施例中,小区B是可配置的小区,其参数NUM_PROCS 定义它使用的处理器数量。因此,小区B的实例U1具有两个处理器并且实例U2具有四个处理器(根据以上声明)。
注意,在这个例子中,小区A的输入端口,IN,被直接地连接到小区B的实例U1的输入端口,DATA。小区A的输出端口OUT 在这个例子中被直接地连接到小区B的实例U2的输出端口, RESULT。此外,实例U1的输出RESULT经小区A内部的通信通道1000被连接到U2的输入DATA。
虽然对以上实施例已经进行了相当详细的描述,但是一旦以上公开内容被完全理解,许多变化和修改将对本领域技术人员变得显而易见。以下权利要求意图要被解释为包含所有这些变化和修改。
Claims (20)
1.一种开发系统,包括:
多处理器阵列MPA,其中所述MPA包括硬件资源,所述硬件资源包括多个处理器、多个存储器以及通信耦合所述多个处理器和所述多个存储器的互连网络IN;和
存储能部署在所述MPA上的软件代码的非临时性计算机可存取存储介质,其中所述软件代码包括:
可执行以执行第一函数的第一程序指令;及
一个或多个第一语言构造,所述第一语言构造是用户可配置来指定一个或多个通信端口和一个或多个参数输入;
其中所述一个或多个通信端口是用户可配置来指定与软件应用中其它软件代码的通信,所述软件应用在所述MPA的硬件资源上执行;
其中所述一个或多个参数输入是用户可配置来指定所述MPA的可用来执行所述软件代码的一组硬件资源;及
其中所述软件代码的实例能部署在至少一个MPA中以执行在不同软件应用中的所述第一函数;
其中所述软件代码的每个实例包括指定所述一个或多个通信端口到所述IN或到所述多个存储器中的多个存储器的连接性的一个或多个通信端口的相应配置;及
其中所述软件代码的每个实例还包括指定用于部署所述软件代码的相应实例的在包括多个处理器和多个存储器的至少一个MPA中的一组硬件资源的一个或多个参数输入的相应配置,并且其中在其上部署所述软件代码的相应的不同实例的相应硬件部分中的硬件资源量是不同的并且是基于用户指定的一个或多个参数输入的。
2.如权利要求1所述的开发系统,
其中所述软件代码的第一实例化能部署在至少一个MPA上以执行第一软件应用中的第一函数,其中所述一个或多个通信端口具有指定第一连接性的第一配置,并且其中所述一个或多个参数输入指定用于部署的在所述至少一个MPA上的第一组硬件资源;及
其中所述软件代码的第二实例化能部署在至少一个MPA上以执行第二软件应用中的第一函数,其中所述一个或多个通信端口具有指定第二连接性的第二配置,并且其中所述一个或多个参数输入指定用于部署的在所述至少一个MPA上的第二组硬件资源。
3.如权利要求2所述的开发系统,其中所述软件代码的第二实例化基于所述一个或多个参数输入的配置比所述软件代码的第一实例化使用更多的处理器。
4.如权利要求2所述的开发系统,其中第二软件应用是与第一软件应用相同的软件应用并且其中所述第一实例化和所述第二实例化被配置为并行地执行所述第一函数。
5.如权利要求1所述的开发系统,其中所述一个或多个通信端口包括一个或多个结构端口和一个或多个共享存储器端口。
6.如权利要求1所述的开发系统,其中所述一个或多个参数输入可配置来指定以下中的至少一个:
所述第一函数的操作;
数据流大小;
用于部署所述软件代码的处理器数量;
对所述MPA外部的一个或多个通用存储器的访问;
对一个或多个MPA输入和/或输出的访问;
在执行所述第一函数时用来存储临时状态的数据量;及
可访问所述软件代码的通信资源量。
7.如权利要求1所述的开发系统,
其中所述软件代码的一个或多个实例能部署在软件代码的另一给定实例中;及
其中所述软件代码的给定实例包括一个或多个语言构造,所述语言构造是用户可配置来指定一个或多个通信端口和一个或多个参数输入的,其中所述一个或多个通信端口可配置来指定与所述软件应用中的其它软件代码的通信并且其中所述一个或多个参数输入可配置来指定可用来执行所述软件代码的给定实例的一组硬件资源。
8.如权利要求1所述的开发系统,其中所述一个或多个参数输入在所述软件代码的执行过程中是可配置来调整用来执行所述软件代码的所述一组硬件资源的。
9.一种用于配置多处理器阵列MPA的方法,其中所述MPA包括硬件资源,所述硬件资源包括多个处理器、多个存储器以及通信耦合所述多个处理器和所述多个存储器的互连网络IN,所述方法包括:
在存储介质中存储软件代码,其中所述软件代码执行第一函数,其中所述软件代码可在第一软件应用中使用,其中所述软件代码包括指定所述软件代码与所述第一软件应用中的其它代码的通信连接性的一个或多个第一语言构造,所述第一软件应用在所述MPA的硬件资源上执行,其中所述软件代码还包括指定用于部署的一组硬件资源的一个或多个第二语言构造;及
接收创建用于在第一应用中使用的所述软件代码的第一实例的用户输入,其中所述接收创建所述第一实例的用户输入包括:
接收对指定所述软件代码到所述IN或到所述多个存储器中的多个存储器的第一通信连接性的一个或多个第一语言构造的用户输入;及
接收对指定在其上部署所述软件代码的第一实例的第一组硬件资源的一个或多个第二语言构造的用户输入,其中所述第一组硬件资源包括所述多个处理器中的一个或多个以及所述多个存储器中的一个或多个,并且其中在其上部署所述软件代码的相应的不同实例的相应硬件部分中的硬件资源量是不同的并且是基于用户指定的一个或多个参数输入的。
10.如权利要求9所述的方法,还包括:
接收创建所述软件代码的第二实例的用户输入,其中所述接收创建所述第二实例的用户输入包括:
接收对指定第二通信连接性的一个或多个第一语言构造的用户输入;及
接收对指定在其上部署所述软件代码的第二实例的第二组硬件资源的一个或多个第二语言构造的用户输入。
11.如权利要求10所述的方法;
其中所述软件代码的第一和第二实例在软件代码的另一实例内进行实例化;及
其中所述软件代码的另一实例包括指定所述软件代码与所述第一软件应用中的其它代码的通信连接性的一个或多个第一语言构造,其中所述软件代码的另一实例还包括指定用于部署的多处理器阵列MPA中的一组硬件资源的一个或多个第二语言构造。
12.如权利要求9所述的方法,还包括:
利用对应于所述第一组硬件资源的一个或多个处理器和一个或多个存储器在MPA上部署所述软件代码的第一实例。
13.如权利要求12所述的方法,还包括:
在所述软件代码的执行过程中,基于到所述一个或多个第二语言构造的输入改变来调整所述第一组硬件资源。
14.如权利要求9所述的方法,还包括:
配置一个或多个参数输入以更改所述第一函数的操作。
15.一种开发系统,包括:
多处理器阵列MPA,其中所述MPA包括硬件资源,所述硬件资源包括多个处理器、多个存储器以及通信耦合所述多个处理器和所述多个存储器的互连网络IN;和
存储能部署在所述MPA上的软件代码的非临时性计算机可存取存储介质,其中所述软件代码包括:
指定小区类型和第一函数的第一程序指令;及
实例化所述小区类型的第一实例的第二程序指令;
其中所述第二程序指令包括一个或多个语言构造,所述语言构造指定:
经由所述IN或所述多个存储器中的多个存储器与软件应用中的其它软件代码的通信;及
可用于为具有所述小区类型的第一实例执行所述第一函数的包括多个处理器和多个存储器的MPA的一组硬件资源;及
其中所述第一实例能部署在至少一个MPA上以执行所述软件应用中的第一函数,并且其中在其上部署所述小区的相应的不同实例的相应硬件部分中的硬件资源量是不同的并且是基于用户指定的一个或多个参数输入的。
16.如权利要求15所述的开发系统,其中所述软件代码还包括:
实例化所述小区类型的第二实例的第三程序指令,其中所述第二实例能部署在至少一个MPA上以执行所述第一函数。
17.如权利要求15所述的开发系统;
其中所述小区类型的第一实例包括具有另一个小区类型的小区的多个实例化;及
其中所述多个实例化中的每一个包括一个或多个语言构造,所述语言构造指定:
所述小区类型内的通信;及
可用来执行所述第一函数的一个或多个部分的一组硬件资源。
18.如权利要求15所述的开发系统,其中与所述软件应用中的其它软件代码的通信包括一个或多个结构端口和一个或多个共享存储器端口。
19.如权利要求15所述的开发系统,其中所述第一函数能跨所述一组硬件资源中的多个处理器被并行化。
20.一种用于配置多处理器阵列MPA的设备,包括用于执行如权利要求9-14中的任一项所述的方法的步骤的装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811023611.2A CN109240704B (zh) | 2012-11-06 | 2013-10-07 | 用于设计重用的多处理器编程工具包 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201261722850P | 2012-11-06 | 2012-11-06 | |
US61/722,850 | 2012-11-06 | ||
PCT/US2013/063628 WO2014074251A1 (en) | 2012-11-06 | 2013-10-07 | Multiprocessor programming toolkit for design reuse |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811023611.2A Division CN109240704B (zh) | 2012-11-06 | 2013-10-07 | 用于设计重用的多处理器编程工具包 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104903855A CN104903855A (zh) | 2015-09-09 |
CN104903855B true CN104903855B (zh) | 2018-09-18 |
Family
ID=49448313
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380067521.2A Active CN104903855B (zh) | 2012-11-06 | 2013-10-07 | 用于配置多处理器阵列的方法和设备以及开发系统 |
CN201811023611.2A Active CN109240704B (zh) | 2012-11-06 | 2013-10-07 | 用于设计重用的多处理器编程工具包 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811023611.2A Active CN109240704B (zh) | 2012-11-06 | 2013-10-07 | 用于设计重用的多处理器编程工具包 |
Country Status (4)
Country | Link |
---|---|
US (4) | US9904542B2 (zh) |
EP (2) | EP3828700A1 (zh) |
CN (2) | CN104903855B (zh) |
WO (1) | WO2014074251A1 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2506596A (en) * | 2012-10-02 | 2014-04-09 | Ibm | Managing a set of software modules in a runtime environment |
US10691451B2 (en) * | 2015-12-28 | 2020-06-23 | Coherent Logix, Incorporated | Processor instructions to accelerate FEC encoding and decoding |
GB2554349B (en) * | 2016-09-13 | 2018-10-17 | Imagination Tech Ltd | Build-time memory manangement for multi-core embedded system |
EP3853726A1 (en) * | 2018-10-22 | 2021-07-28 | Siemens Industry Software Inc. | Dynamic allocation of computing resources for electronic design automation operations |
CN110244955B (zh) * | 2019-05-29 | 2023-04-18 | 广州至真信息科技有限公司 | 一种应用的处理方法、装置、服务器和介质 |
CN110266546B (zh) * | 2019-06-29 | 2022-04-22 | 苏州浪潮智能科技有限公司 | 一种配置交换机端口的方法、设备及可读介质 |
CN115981652B (zh) * | 2021-10-14 | 2023-09-29 | 华为技术有限公司 | 语言互操作方法、装置、存储介质及程序产品 |
Family Cites Families (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5274818A (en) * | 1992-02-03 | 1993-12-28 | Thinking Machines Corporation | System and method for compiling a fine-grained array based source program onto a course-grained hardware |
US7415594B2 (en) | 2002-06-26 | 2008-08-19 | Coherent Logix, Incorporated | Processing system with interspersed stall propagating processors and communication elements |
US7469321B2 (en) * | 2003-06-25 | 2008-12-23 | International Business Machines Corporation | Software process migration between coherency regions without cache purges |
US20080235490A1 (en) * | 2004-06-18 | 2008-09-25 | Anthony Mark Jones | System for configuring a processor array |
US7701973B2 (en) * | 2004-06-28 | 2010-04-20 | Intel Corporation | Processing receive protocol data units |
US9009660B1 (en) * | 2005-11-29 | 2015-04-14 | Tilera Corporation | Programming in a multiprocessor environment |
US8826228B2 (en) * | 2006-03-27 | 2014-09-02 | Coherent Logix, Incorporated | Programming a multi-processor system |
WO2007137266A2 (en) * | 2006-05-22 | 2007-11-29 | Coherent Logix Incorporated | Designing an asic based on execution of a software program on a processing system |
US8443348B2 (en) * | 2006-06-20 | 2013-05-14 | Google Inc. | Application program interface of a parallel-processing computer system that supports multiple programming languages |
US8261270B2 (en) * | 2006-06-20 | 2012-09-04 | Google Inc. | Systems and methods for generating reference results using a parallel-processing computer system |
GB2443277B (en) * | 2006-10-24 | 2011-05-18 | Advanced Risc Mach Ltd | Performing diagnostics operations upon an asymmetric multiprocessor apparatus |
US8495627B2 (en) * | 2007-06-27 | 2013-07-23 | International Business Machines Corporation | Resource allocation based on anticipated resource underutilization in a logically partitioned multi-processor environment |
US7885969B2 (en) * | 2007-09-17 | 2011-02-08 | International Business Machines Corporation | System and method for executing compute-intensive database user-defined programs on an attached high-performance parallel computer |
US20090172353A1 (en) * | 2007-12-28 | 2009-07-02 | Optillel Solutions | System and method for architecture-adaptable automatic parallelization of computing code |
US8495624B2 (en) * | 2008-10-23 | 2013-07-23 | International Business Machines Corporation | Provisioning a suitable operating system environment |
US9250973B2 (en) * | 2009-03-12 | 2016-02-02 | Polycore Software, Inc. | Apparatus and associated methodology of generating a multi-core communications topology |
US8473818B2 (en) | 2009-10-12 | 2013-06-25 | Empire Technology Development Llc | Reliable communications in on-chip networks |
US8627300B2 (en) * | 2009-10-13 | 2014-01-07 | Empire Technology Development Llc | Parallel dynamic optimization |
WO2011071498A1 (en) * | 2009-12-10 | 2011-06-16 | Hewlett-Packard Development Company, L.P. | Managing hardware resources for soft partitioning |
EP2628090B1 (en) | 2010-10-15 | 2018-05-30 | Coherent Logix Incorporated | Disabling communication in a multiprocessor system |
US8561078B2 (en) * | 2011-09-27 | 2013-10-15 | Throughputer, Inc. | Task switching and inter-task communications for multi-core processors |
US9158587B2 (en) * | 2012-01-19 | 2015-10-13 | International Business Machines Corporation | Flexible task and thread binding with preferred processors based on thread layout |
RU2012127581A (ru) * | 2012-07-02 | 2014-01-10 | ЭлЭсАй Корпорейшн | Генератор исходного кода для разработки и тестирования программного обеспечения для многопроцессорных сред |
WO2014074783A2 (en) * | 2012-11-09 | 2014-05-15 | Coherent Logix, Incorporated | Real time analysis and control for a multiprocessor system |
US8918596B2 (en) * | 2012-12-20 | 2014-12-23 | Oracle International Corporation | System and method for implementing NUMA-aware statistics counters |
-
2013
- 2013-10-07 WO PCT/US2013/063628 patent/WO2014074251A1/en active Application Filing
- 2013-10-07 EP EP20216963.7A patent/EP3828700A1/en active Pending
- 2013-10-07 EP EP13780017.3A patent/EP2917827B1/en active Active
- 2013-10-07 CN CN201380067521.2A patent/CN104903855B/zh active Active
- 2013-10-07 CN CN201811023611.2A patent/CN109240704B/zh active Active
- 2013-10-07 US US14/047,135 patent/US9904542B2/en active Active
-
2018
- 2018-01-16 US US15/872,421 patent/US10592233B2/en active Active
-
2020
- 2020-03-13 US US16/818,007 patent/US11163558B2/en active Active
-
2021
- 2021-10-28 US US17/513,336 patent/US11914989B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
EP3828700A1 (en) | 2021-06-02 |
EP2917827B1 (en) | 2021-01-06 |
US20200218534A1 (en) | 2020-07-09 |
US20220050676A1 (en) | 2022-02-17 |
CN104903855A (zh) | 2015-09-09 |
US11914989B2 (en) | 2024-02-27 |
US10592233B2 (en) | 2020-03-17 |
CN109240704A (zh) | 2019-01-18 |
EP2917827A1 (en) | 2015-09-16 |
US20140130013A1 (en) | 2014-05-08 |
WO2014074251A1 (en) | 2014-05-15 |
US9904542B2 (en) | 2018-02-27 |
US11163558B2 (en) | 2021-11-02 |
CN109240704B (zh) | 2022-06-14 |
US20180143824A1 (en) | 2018-05-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104903855B (zh) | 用于配置多处理器阵列的方法和设备以及开发系统 | |
JP5009979B2 (ja) | 処理システムでのソフトウェアプログラムの実行に基づくasicの設計 | |
EP2216722B1 (en) | Various methods and apparatus for configurable mapping of address regions onto one or more aggregate targets | |
CN101464922B (zh) | 基于集群系统的计算机体系结构方案并行模拟优选方法 | |
CN103678745A (zh) | 一种用于fpga的跨平台多层次集成设计系统 | |
Koul et al. | Aha: An agile approach to the design of coarse-grained reconfigurable accelerators and compilers | |
Thomas | The automatic synthesis of digital systems | |
He et al. | Fecaffe: Fpga-enabled caffe with opencl for deep learning training and inference on intel stratix 10 | |
Cannella et al. | Towards an ESL design framework for adaptive and fault-tolerant MPSoCs: MADNESS or not? | |
Jha et al. | High-level library mapping for memories | |
CN114153562A (zh) | 基于事件驱动的可重构空间阵列的仿真建模平台及方法 | |
CN116457789A (zh) | 针对异构集成电路的基于模型的设计和分割 | |
Qu et al. | Cim-mlc: A multi-level compilation stack for computing-in-memory accelerators | |
Srinivasan | Partitioning for FPGA-based reconfigurable computers | |
Postula et al. | A comparison of high level synthesis and register transfer level design techniques for custom computing machines | |
Fabiani et al. | Intermediate level components for reconfigurable platforms | |
Mashayekhi | A stochastic RTL circuit generator for FPGA architecture and CAD evaluation | |
Gramacy et al. | Package ‘laGP’ | |
Koonar | A reconfigurable hardware implementation of genetic algorithms for VLSI CAD design | |
Sharma et al. | A Design Methodology for Folded, Pipelined Architectures in VLSI Applications using Projective Space Lattices | |
Nazar Shahsavani et al. | Efficient Compilation and Mapping of Fixed Function Combinational Logic onto Digital Signal Processors Targeting Neural Network Inference and Utilizing High-level Synthesis | |
CN115730545A (zh) | 一种面向存算fpga的部署映射的工具 | |
Phillips | AC to register transfer level algorithm using structured circuit templates: A case study with simulated annealing | |
Chu | Hardware mapping and module selection in the hyper synthesis system | |
Severino | Systems Synthesis with Multi-Value Logic (MVL) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |