具有散布处理器DMA‑FIFO的处理系统的制作方法

文档序号:11216220阅读:625来源:国知局
具有散布处理器DMA‑FIFO的处理系统的制造方法与工艺

本申请是申请号为201380060488.0、申请日为2013年03月08日、发明名称为“具有散布处理器dma-fifo的处理系统”的发明专利申请的分案申请。

本发明涉及计算机系统和数字信号处理器(dsp),更特别地,涉及多处理器系统。



背景技术:

以加快的速度执行软件任务的需求产生了对并行计算的需求。并行计算可以加速诸如电信、遥感、雷达、声纳、视频、影院和医疗成像等之类的应用中的多个复杂信号的处理。并行计算还可以提供更大的计算吞吐量并且可以克服串行计算方法的某些限制。计算系统的能力可以通过通常针对一组指定测试算法的性能度量来比较。所关注的主要性能度量一直为每秒计算量。但是,对于电池供电的或散热受限的装备,把每秒计算量除以能耗的度量可能更优选。

在理论上考虑,并行计算机或信号处理器可以由多个处理器、多个存储器以及一个或更多个互连通信网络组成。这些部件已经组合在论述并行处理器计算也称为多重处理的文献中介绍的许多不同的拓扑结构中。所有这些部件由于与导体迹线(电线)的充放电有关的内部延迟以及传输线效应而具有输入到输出的等待时间(latency),其中所述传输线效应之一是信号不可能行进得比光速快。因此,更小的部件相比于体形更大的部件一般呈现更短的等待时间,并且具有更少部件的系统相比于具有更多计算部件的系统将呈现更短的平均等待时间。尽管系统中的更多部件可能增加平均等待时间,但是存在着布置计算以利用相邻元件之间的短等待时间的通信的技术,诸如流水线和脉动处理(systolicprocessing)。

近年来,在集成电路制造上的进展使得可以制作日益小型化的并行计算机部件。通过小型化,部件以更低的功耗、更高的速度和更短的等待时间运行。因此数百个处理元件(pe)和支持存储器(sm)连同高带宽互连网络(in)可以被装配在单个多处理器的集成电路(ic)芯片上。可以用这种多处理器芯片构建各种各样的并行计算机系统,范围从使用部分芯片的小系统到包括高速高容量存储器芯片的多芯片系统。

诸如计算机、数字信号处理器(dsp)和封闭装备中所嵌入的系统之类的数字电子系统越来越多地采用一个或更多个多处理器阵列(multi-processorarray,mpa)。mpa可以宽松地定义为多个处理元件(pe)、支持存储器(sm)和高带宽互连网络(in)。如本文所使用的,术语“处理元件”是指处理器或者中央处理器(cpu)、微处理器、或处理器内核。mpa中的阵列一词在其最宽泛的意义上用来意指由网络互连的多个计算单元(每个都包含处理和存储器资源),其中所述网络具有在包括圆形维度(圈或环)的一个、二个、三个或更多个维度中可用的连接。注意,更高维度的mpa可以映射到具有更少维度的制造介质上。例如,具有四维(4d)超立方体形状的mpa可以映射到硅集成电路(ic)芯片的3d堆叠上,或者映射到单个2d芯片或甚至计算单元的1d线上。低维度的mpa也可以映射到更高维度的介质。例如,计算单元的1d线可以以蜿蜒的形状布置在ic芯片的2d平面上,或者绕进芯片的3d堆叠中。mpa可以包含多种类型的计算单元以及处理器和存储器的散布的布置。在宽泛意义上,mpa还包括mpa的层次或嵌套布置,尤其是由互连的ic芯片组成的mpa,其中ic芯片包含也可以具有更深的层次结构的一个或更多个mpa。

一般来说,用于计算机和数字信号处理器(dsp)的存储器按这样的层次组织:顶部是快速存储器,层次向下每级是更慢却更高容量的存储器。在mpa中,在层次顶部的支持存储器位于每个pe附近。每个支持存储器可以专门只保持指令或只保持数据。特定pe的支持存储器可以对该pe是私有的或者与其他pe共享。

存储器层次再向下可以具有更大的共享存储器,该共享存储器典型地由半导体同步动态随机存取存储器(sdram)组成,sdram具有比与每个pe相邻的支持存储器的位容量大许多倍的位容量。存储器层次再向下是闪存、磁盘和光盘。

如上所述,多处理器阵列(mpa)可以包括处理元件(pe)、支持存储器(sm)以及支持pe和/或存储器之间的高带宽数据通信的主互连网络(pin或仅仅in)的阵列。在图1和图2中例示了mpa的各种实施例,下面会进行描述。一般地,pe具有用于缓冲输入数据和输出数据的寄存器、指令处理单元(ipu)以及用于对数据执行算术和逻辑功能的装置,外加用于与系统的其他部分通信的若干交换机和端口。ipu从存储器取得指令,对它们进行解码,并设置适当的控制信号以移动数据进出pe以及对数据执行算术和逻辑功能。仅因为包含大mpa的每个ic芯片的pe数量大,所以适合于大mpa的pe一般比通用处理器(gpp)能效更高。

如本文所使用的,术语mpa覆盖了相对同构的处理器阵列以及在所谓的“平台ic”芯片上集成的通用和专用处理器的异构集合这两者。平台ic芯片可以包含典型地与共享存储器或许还有芯片上的网络互连的从几个到许多个处理器。在mpa和“平台ic”芯片之间可以存在或可以不存在差异。但是,“平台ic”芯片可以被推销为针对特定垂直市场中的特定技术需求。

互连网络(in)可以为完全连接的或者交换的。在完全连接的网络中,所有输入端口都硬接线到所有输出端口。但是,完全连接的网络中的电线的数量按n2/2增加,其中n为端口数量,因此对于甚至中等规模的系统,完全连接的网络也很快变得不实际。

交换的网络由链路和交换节点组成。链路可以包括接线、传输线、波导(包括光学波导)或无线接收机-发射机对。交换节点可以如在时窗期间到总线的连接那样简单,也可以如具有许多端口和缓冲队列的交叉开关那样复杂。单级网络是其中所有输入端口和输出端口都驻留在一个大交换节点上的网络。多级网络是其中数据移动穿过第一个交换节点、第一个链路、第二个交换节点以及可能更多的链路-节点对以到达输出端口的网络。例如,传统的有线电话系统是多级网络。

并行计算机的互连网络在规模、带宽和控制方法上变化很大。如果网络提供了从输入到输出的数据路径或电路并且在被请求拆除之前不管它,则可以称之为“电路交换”。如果网络提供长度只够把数据包从输入传递到输出的路径,则可以称之为“包交换”。控制方法在完全确定性的(可以通过对与主时钟同步的每个步骤编程来实现)到完全反应性的(可以通过异步地响应端口输入处的数据移动请求来实现)之间变化。

对于单级网络,请求/授权协议是控制交换机的普通方式。请求信号被提供到输入端口并且在争用检测电路中与来自所有其他输入端口的请求信号进行对比。如果不存在争用,则in以授权信号响应。该端口发送地址,in设置交换机来连接输入与输出。当检测到争用时,仲裁电路(或“仲裁器”)将决定请求端口中的哪一个得到授权信号。没有授权信号的端口将必须等待。在一个周期中没有成功的端口可以在后续周期中再次尝试。在仲裁器中使用各种优先级/轮流方案以确保每个端口得到至少某种服务。

对于多级网络,可以使用被称为“虫孔路由(wormholerouting)”的特定协议。虫孔路由是基于这样的想法:消息可以被形成为字的系列或串,所述字的系列或串具有用于导航的头部、携带有效载荷数据的主体和用于关闭路径的尾部。消息如下地“曲折行进”通过网络。假设网络被布置为笛卡尔网格;并且交换节点和存储器位于网格的每个结。头部可以包含一串简单的操纵方向(诸如向前直行、左转、右转或连接到本地存储器),所述操纵方向指示蠕虫在它在网络中遇到每个节点处应当去哪。这些操纵方向简单到节点可以对它们进行解码并且以很少的电路非常快速地设置交换机。由头部建立的路径或“孔”允许有效载荷数据即“主体”通过,直到遇到使节点在其之后关闭该孔的代码字“尾部”。关闭路径可以释放链路和节点,以便通过相同的虫孔路由协议来建立其他路径。

in的带宽可以被定义为在长区间上平均的、每单位时间发生的成功数据移动的数量。交换的in的带宽以任何分析方式都难以估计,因为它取决于in的细节中的和给该in的数据移动请求的特性中的许多因素。当请求率低时,对于资源的冲突的几率低,并且几乎100%的请求成功。测量和仿真显示,随着数据移动请求率上升,成功的数据移动的比率从100%下降。最终,每秒的成功数据移动的数量将饱和或达到峰值,并且最大值被取作in的带宽。

可以用软件对mpa进行编程以执行应用的具体功能。有两种主要类型的软件──应用软件和开发工具。应用软件是源文本、中间形式以及被加载到mpa存储器中以便由mpa中的pe执行的最终二进制映像。开发工具是用于针对目标硬件设计和测试应用软件的软件程序,诸如语言编译器、连接器、并发任务定义助手、通信通路(pathway)布局助手、物理设计自动化、仿真器和调试器。开发工具软件可以运行在应用软件的目标硬件(可由其执行)上或可以不运行在应用软件的目标硬件上。



技术实现要素:

公开了多处理器阵列的各种实施例。宽泛地说,设想了其中多个处理器、本地存储器、直接存储器访问(dma)引擎和能配置的通信元件以散布的方式耦接在一起的电路和方法。每个能配置的通信元件可以包括多个通信端口,并且每个dma引擎可以被配置为在所选择的通信端口和本地存储器之间传送数据。dma控制器可以被配置为控制多个dma引擎的操作。一个或更多个本地存储器可以被配置为作为先进先出(fifo)缓冲区进行操作,并且dma控制器还可以被配置为控制对fifo缓冲区进行操作的多个dma引擎的子集。

在一个实施例中,dma控制器还可以被配置为使得对于对fifo缓冲区的每次单个dma写入能够进行对fifo的多个dma读取。

在另一个实施例中,dma控制器还可以被配置为使得对于对fifo缓冲区的每次单个dma读取能够进行对fifo的多个dma写入。

附图说明

图1是例示了本文称为多处理器阵列(mpa)的处理系统的一个实施例的框图;

图2是例示了mpa连接方案的一个实施例的框图;

图3是例示了数据存储器路由器(dmr)的一个实施例的框图;

图4是例示了dmr的另一个实施例的框图;

图4a是例示了dmr的实施例的框图;

图4b是例示了dmr的一部分的实施例的框图;

图5a是例示了dmr端口布置示例的框图;

图5b是例示了dmr的另一个示例性端口布置的框图;

图6是例示了多处理器阵列的一部分中的dmr与pe之间的连接的框图;

图7是例示了dmr内的示例性局部路由的框图;

图8是例示了dmr内的示例性全局路由的框图;

图8a是例示了dmr的实施例的框图;

图9是例示了用于控制dmr内的交叉开关交换机(crossbarswitch)的优先级的表;

图10是例示了多处理器阵列内的全局和局部路由的一个实施例的操作的示图;

图11是例示了直接存储器访问(dma)引擎的框图;

图12是例示了操作存储器缓冲区的方法的流程图;

图13是例示了操作存储器缓冲区的另一种方法的流程图;

图14例示了各种指针配置的图表;

图15是指针比较和停顿单元的实施例的框图;

图16是例示了处理引擎读取fifo的仿真的框图;

图17例示了头部字上的路由逻辑的一个实施例的操作;

图18描绘了示出通过mpa的一部分的示例性通路的框图;

图19描绘了示出通过mpa的一部分的横跨安全区域的示例性通路的框图;

图20描绘了示出在通信通路停用的情况下的mpa的一部分的实施例的框图;

图21描绘了示出数据检查处理的示例的框图;

图22描绘了示出分布式拥塞分析器的框图。

虽然本公开容许各种修改和替代形式,但是其具体实施例以示例的方式在附图中示出并将在本文得到详细描述。但是应当理解,附图及其详细描述并非意在把本公开限制为所例示的特定形式,相反,意在涵盖落入由所附权利要求书限定的本公开的精神和范围之内的所有修改、等效和替代。本文所使用的标题仅仅是用于组织的目的,而非意味着用来限制描述的范围。如本申请书自始至终所使用的,词语“可以”是以容许的意义(即意味着具有可能性)而非强制的意义(即意味着必须)来使用。同样,词语“包括”“包含”意味着包括但不限于。

各种单元、电路或其他部件可以被描述为“被配置为”执行任务。在这种语境中,“被配置为”是结构的宽泛叙述,一般意味着“具有”在操作期间执行任务的“电路”。因此,即使单元/电路/部件当前未开启,单元/电路/部件也可以被配置为执行任务。一般来说,形成与“被配置为”对应的结构的电路可以包括硬件电路。类似地,在描述中为了方便起见,各种单元/电路/部件可以被描述为执行任务。这种描述应当被解释为包括短语“被配置为”。记载被配置为执行一项或更多项任务的单元/电路/部件明显地意在不调用35u.s.c.§112第六段对该单元/电路/部件的解释。更一般地,任何元件的记载都明显地意在不调用35u.s.c.§112第六段对该元件的解释,除非明确记载了语言“用于……的装置”或“用于……的步骤”。

具体实施方式

通过引用并入

发明人为michaelb.doerr、williamh.hallidy、davida.gibson和craigm.chase的、标题为“processingsystemwithinterspersedstallpropagatingprocessorsandcommunicationelements”的美国专利no.7415594,其全部内容通过引用并入于此,就像在此全面且完整地阐述了一样。

2011年10月14日提交的发明人为michaelb.doerr、carls.dobbs、michaelb.solka、michaelrtrocino和davida.gibson的、标题为“disablingcommunicationinamultiprocessorsystem”的美国专利申请no.13/274138,其全部内容通过引用并入于此,就像在此全面且完整地阐述了一样。

术语

硬件配置程序-由源文本构成的程序,所述源文本可被编译为可用来对诸如集成电路之类的硬件进行编程或配置的二进制映像。

计算机系统-各种类型的计算或处理系统中的任何一种,包括个人计算机系统(pc)、主机计算机系统、工作站、网络家电、因特网家电、个人数字助理(pda)、网格计算系统或其他设备或者设备的组合。一般来说,术语“计算机系统”可以被宽泛地定义为包含具有执行来自存储介质的指令的至少一个处理器的任何设备(或设备的组合)。

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

详细描述

示例性的mpa架构在图1和2中示出并且它是在美国专利no.7415594中公开的hyperxtm架构的示例。在图1所示的实施例中,mpa10包括多个处理元件(pe)和多个支持存储器(sm)以及互连网络(in)。in由交换节点和链路组成。交换结点也称为路由器,可与链路一起用于形成pe之间的以及pe与mpai/o端口之间的通信通路。但是,在每个pe处,所传送的任何信息可以缓冲在sm中。在图1中,sm与通信路径路由器被组合在被称为数据存储器路由器(dmr)的圆形元件中。如本文所使用的,pe也可以被称为pe节点,而dmr也可以被称为dmr节点。dmr在本文也被称为“能配置的通信元件”。

图1和图2中所示的dmr之间的链路形成直线网状结构;但是,许多其他连接方案也是可能的并被设想。在图2所示的mpa连接方案中,每个pe连接到四个相邻dmr,而每个dmr连接到四个相邻pe以及四个相邻dmr。还设想了其他连接方案以支持更高维度的in,诸如每个dmr使用六个dmr到dmr的链路以支持三维直线网状结构,或者每个dmr使用八个链路以支持四个对角方向外加北、东、南和西方向。链路不必限于物理上最近的邻居。

mpa与应用软件的结合可以被称为并行处理系统(pps),尽管该名称的使用并非意在以任何方式限制本发明的范围。例如,可以把mpa编程为缓冲和分析来自摄像机的原始视频数据,然后对缓冲内容执行视频数据压缩以把压缩后数据外传到无线电链路上。例如,应用软件与mpa的这种结合可以被称为并行视频信号处理器。

带有芯片i/o单元的mpa20可以被用在当前使用通用微处理器、dsp、fpga或asic的各种系统和应用中的任何一种中。例如,图1和图2中所示的处理系统可以被用在各种类型的计算机系统、数字信号处理器(dsp)或要求计算的其他设备的任何一种中。

hyperx硬件构造

在hyperxtm架构的一个实施例中,多处理器阵列可以由基于单位单元的硬件构造(网状结构)组成,其中每个单元都被称为超切片(hyperslice)。硬件构造可以通过在网格上布置单位单元并且使相邻单元互连来形成。每个超切片可以包括一个或更多个数据存储器和路由器(dmr)以及一个或更多个处理元件(pe)。

在美国专利no.7415594中,dmr可以被称为能动态配置的通信(dcc)元件,而pe可以被称为能动态配置的处理(dcp)元件。dmr可以为相邻pe提供支持存储器以及为互连网络(in)提供路由器和链路。本语境中的能动态配置意味着在应用软件正在运行的同时可以重新分配这些硬件资源(pe、dmr链路和dmr存储器)。这是通过把应用软件划分成更小任务的层次和通信消息来实现的。这些任务和消息被分配到资源并且同时地(或者在需要时串行地)执行。随着任务和消息完成,它们可以被再次执行或者由其他任务和消息取代,以形成应用软件的新配置。“即时”(onthefly)改变配置的能力支持了灵活性,以更高效地利用有限的资源并且更适于改变外部需求等。

hyperx硬件构造具有相对于处理元件独立且透明地进行操作的主in(pin),并且可以在支持任意通信网络拓扑的超切片之间提供通过能实时编程的且能适应的通信通路(可以被称为路由或路径)的整体的按需带宽(on-demandbandwidth)。在软件控制下可以“即时”形成和重新形成超切片的协调组。动态地改变用于估算功能的硬件数量的这种能力允许硬件资源的最佳应用以缓解处理瓶颈。在硬件构造的边缘,链路可以连接到为存储器层次再往下的存储器类型或者集成电路(ic)芯片边缘的i/o所专用的电路。

hyperx硬件构造的互连dmr可以提供跨芯片和从芯片到芯片的最近邻、区域和全局通信。这些通信模式的每一个都可以按照数据的位置和软件算法要求物理地使用dmr资源来有差异地发送数据/消息。可以提供“快速端口”设施,以支持一个或更多个字的数据从处理器到任何网络终点的低等待时间传送。对于块传送,dmr内的直接存储器访问(dma)引擎可用于管理跨存储器和路由构造的数据移动。对于pe之间的最近邻通信,使用共享存储器和寄存器可能是最高效的数据移动的方法。对于区域的和全局的数据移动,使用路由构造(pin)可能是最高效的方法。通信通路(或路由)可以是动态的或者静态的。动态路由可以针对数据传送来建立并且传送一完成就被拆除,以释放pin资源用于其他路由和数据传送。静态路由可以在程序执行期间保持就位,并且主要用于高优先级和关键的通信。通信通路的物理位置和横跨它们的数据传送的定时可以受控于软件程序。可以存在多条通信通路以支持任何发送者和接收者之间的同时数据传送。

处理元件(pe)

dmr的架构可以允许不同的可互换的pe用在多处理器构造中以最优化针对具体应用的系统。hyperxtm多处理器系统可以包括pe的异构或者同构的阵列。pe可以是传统的处理器,或者替代地,pe可以不符合处理器的传统定义。pe可以简单地是用作针对某些逻辑功能的硬接线处理器的逻辑门的集合,在所述硬接线处理器中为了更高的性能、更小的面积和/或更低的功率牺牲了可编程性。

如图2中所示,例如可以通过在pe之间散布dmr来向诸如hyperxtmmpa之类的mpa中的pe供应到多个存储器的并行连接。相对于隔离的(即非散布的)布置,这种布置可以降低给定pe访问dmr中的存储器所需的时间和能量,并且在本文中可以被称为pe和sm散布布置。

在图1的实施例中,pe与dmr的比率是1:1。在各种其他实施例中,pe与dmr的不同比率是可能的。

hyperxtm处理器架构可以包括固有的多维度,但是可以在物理上实施为平面实现。处理器架构可以具有高能效的特性并且在根本上是可扩展(至大阵列)的和可靠的──表示既低功率又可靠的概念。使得处理器架构能够实现前所未有的性能的方面包括最新型的处理器、存储网络和灵活的io。处理元件(pe)可以是成熟的dsp/gpp并且基于由可变宽度指令字指令集架构维持的存储器到存储器(无高速缓存)架构,所述可变宽度指令字指令集架构可以动态地扩展执行流水线,以在同时地最大化硬件资源的使用的同时维持吞吐量。

通信通路的建立

图1例示了hyperxtm系统的实施例,包括处理元件(pe)和数据存储器路由器(dmr)的网络。pe被示为矩形块并且dmr被示为圆圈。dmr之间的路由路径被示为虚线。实心三角形示出了网状结构外的通信,并且实线示出了dmr之间的活跃的数据通信。计算任务由其数字标识符示出并被放置在正执行它的pe上。正用于通信的数据变量由其名称示出并被放置在包含它的dmr上。在所例示的实施例中,左上角的pe已被分配带有任务id62的任务,并且可以经由与该pe相邻的由通信路径变量t、w和u指明的各dmr与其他pe或存储器通信。同样如所示出的,在本实施例中,活跃的通信通道经由用“x”标注的相邻dmr把由71(例如,另一任务id)指明的pe连接到网状结构外的通信路径或端口。

数据存储器路由器

在图3例示了dmr硬件结构的实施例的框图。在所例示的实施例中,中央数据存储器(dm)由表示路由器的八边形的环围绕着。注意,所示的八边形形状仅仅是象征性的,实际形状可以不同,例如可以是矩形的。围绕着dmr的是许多表示到其他dmr和pe的数据路径的双向箭头。这些双向数据路径可以用在每端的实际双向收发机实施,或者实施为一对方向相反的单向路径。

图3中的路由器与数据存储器之间的单向箭头表示存储器与路由器之间的单向数据路径。这些箭头附近的小正方形表示dma引擎,即支持从dm读取的dma读取器(dmar),和/或支持把数据写到dm的dma写入器(dmaw)。dmar引擎产生用于存储器的地址信号,以典型地跨缓冲区递增,读取数据以发出到另一个dmr的链路。类似地,dmaw引擎产生用于存储器的地址信号,以典型地跨缓冲区递增,写入它从链路收到的数据。每个dma引擎都比pe小得多并使用更小的功率,所以使用它们来读写存储器块是有吸引力的。可以通过pe写到dm存储器空间中的相关联的配置寄存器来配置dma引擎。写到特定地址触发dma开始递增,当dma完成穿过地址块的递增时,它便停止──除非被配置为继续循环无限次或预定次数的循环。

为了支持诸如图2中所示的mpa20之类的mpa中的高带宽端口,端口之间的连接或链路(pe到dmr或dmr到dmr)可以是短的(即,限于邻居),并且由许多并行导电迹线或者“电线”或“线路”组成。在某些实施例中,链路可以仅由几条并行迹线、一条迹线或波导组成。

pe到dmr的连接可以使用于存储器地址的迹线与用于数据的迹线分开。用于数据的迹线可以连接到支持双向数据传送的收发机或分为把写入数据带到存储器的一组迹线和从存储器带走读取数据的另一组迹线。dmr到dmr的连接可以不一定具有地址线,但是可以具有用于表示所传递的数据中的诸如用于消息头部或消息终止的控制字之类的特殊字的线路。

所有dmr连接都可以具有用于流控制的附加线路。例如,线路可以给上游(从终点到源)发信号通知:因为在路途上存在某种其他的通信路径或者因为终点无法接受更多的数据,数据字的进一步前进被阻塞。在本文档中,这种上游线路可以被命名为“blk”、“stall”、“rtr_busyout”或“rtr_busyin”,以列举这几个。另一条线路可以给下游(从源到终点)发信号通知:有效数据准备好了。在本文档中,这种下游线路可以被命名为“idl”、“ready”、“rtr_rdyout”或“rtr_rdyin”,列举这几个。给上游和下游发信号都可以用于指示与dmr之间的链路的端点连接的发射机和接收机的状态,其中dmr要么是本地的(相邻的)dmr要么是全局的(非相邻的)dmr。在某些mpa实施例中,节点之间的通信可以在程序员的控制下。

在图4中,通信控制器430可以引导交叉开关450使数据从dmr输入端口404中的一个或更多个路由到dmr输出端口405中的一个或更多个,从而可以沿着穿过mpa的路径中继数据。dmr400可以提供用于数据的附加通信路径。在所例示的实施例中,多端口sram425可以经由多个多工设备(mux)或复用器(multiplexer)在其写入端口接收来自dmr输入端口401或输出寄存器455的数据。复用器可以允许通信控制器430在多端口sram425以别的方式有可能空闲的时间期间访问多端口sram425。路由器控制器430可以被编程为选择要从存储器交换机(memory)、其他三个dmr进入端口404的任何一个或快速端口输出的数据。

交换路由构造中的通信通路

在某些mpa实施例中,更长距离的通信(即超出dmr与相邻的dmr的通信)可以由本质上可以是逻辑通道的通路支持。每条通路可以只在一个方向上传输数据;如果需要双向通信,则可以在相反的方向上建立第二条通路。一般来说,mpa实施例可以在dmr对之间具有通过对多个有形连接进行空间复用或时间复用而形成的多个连接链路。在这种连接链路上可以建立通路。但是,一旦建立了通路,在其存在期间便不能改变其使用的连接链路或者与其耦接的dmr。所以,每条通路可以被唯一地定义为dmr和连接链路的有序序列,例如被唯一地定义为第一或源dmr、第一连接链路、第二dmr、第二连接链路、第三dmr、第三连接链路等,直到最后的或终点dmr。在一个实施例中,mpa中的所有通路的集合可以由所有路由器的状态唯一地定义。

为了支持mpa的动态配置,可以快速地创建和快速地销毁通路。在某些实施例中,通路创建和销毁可以由给定pe或者给定dmr启动。例如,给定dmr可以被配置为在没有pe干预的情况下执行到另一个dmr的dma传送,因此可以被配置为创建和销毁通路。可以实现动态通路创建和销毁的两种方法包括全局编程和虫孔路由。接下来描述利用全局编程的通路创建,随后描述对于许多mpa通路可以是共同的模式和流控制特征。在模式和流控制描述之后是对虫孔路由方法的描述。

使用全局编程方法的通路创建或建立可以要求mpa中的每一条通路都必须由软件控制定义,并且可以要求每条这种通路在该通路用于数据传送之前配置。这可以由程序员手工进行,或者例如由路由编译器或辅助软件或通过选择函数代码已经包括通路建立的库函数来自动进行。如果所有通路的整体要在mpa中同时使用,则可以由程序员来确保它们不使用超过硬件中可得到的通信链路资源。作为替代,可以使用软件工具来帮助链路资源使用的设计。

为了用全局编程来创建单条通路,可以把几条指令加载到沿着通路的dmr内的诸如图4的通信控制器430之类的通信控制器中。指令可以加载与路径中每个链路相关联的适当的交叉开关配置寄存器451的位组。在某些实施例中,这些指令可以立即或按顺序进行这项任务,虽然在其他实施例中它们可以等待某种触发信号。在各种实施例中,通路一旦建立,硬件可以防止其中断或者可以不防止其中断。因此,确保每次向任何给定链路仅分配一条通路可能是程序员或路由软件的责任。一旦全都沿着通路的dmr中的路由器控制状态寄存器451被设置,通信通路就可以完成并对数据做好准备。当不再需要通路时可以通过改变该通路中所包括的每个dmr的交叉开关配置寄存器中的相关位组来销毁该通路。作为替代,现有通路可以无限期地保留完整,并且在不再需要现有通路后,可以根据需要由新的通路简单地覆写沿着通路的路由器控制状态。

虫孔路由

为了支持通过虫孔路由建立的通路,某些mpa实施例可以提供某些附加电路。对于每个dmr类型的端口,这些附加电路可以包括指示控制/数据状态和标注的c/d的附加控制线,附加控制线可以被包括在dmr之间的每个连接链路中并且耦接到每个dmr中的路由逻辑435。连接链路中的电线的最大数量可以标称地对应于每个数据字的位数加上用于以上定义的c/d、idl和blk的各一条电线的总和,其中c/d、idl和blk中的后两个用于流控制。但是,在某些mpa实施例中,可以以许多不同的方式复用这些信号以降低电线总数。

由于数据字是在一个dmr处从另一个dmr收到的,所以c/d位可以由接收dmr使用来区分蠕虫的头部、主体和尾部字。如果c/d位被去断言(de-asserted),这可以指示所收到的字是主体字。主体字可以对应于可无变化地沿着通路穿过的数据字加上控制位。如果c/d位被断言(asserted),这可以指示所收到的字是控制字。控制字可以允许字的数据部分包含用于路由逻辑435解释的路由代码。

路由代码的一个重要特征可以是指示控制字是头部还是尾部;因此,可以提供指示控制字的头部/尾部状态的h/t位。在一个实施例中,h/t位可以与c/d位相邻,但是在其他实施例中,它可以被分配到其他位位置或者可以是特定的多位代码。如果控制字是尾部字,那么它可以沿着通路传播并且可以随后释放dmr输出端口以由某条其他通路使用。

如果控制字是头部字,则其可以被锁存在接收dmr的输入寄存器454内并由路由逻辑435中的组合逻辑进行解码。路由逻辑435可以检查头部字的适当位以及该头部来自的端口,并且可以发布交叉开关450对于输出端口的请求,如表1中所示。出于请求输出端口的目的而由路由逻辑435检查的几个位可以被称为导航单元或nunit。对于包括每个dmr四个dmr类型输出端口的dmr实施例,nunit可以使用两位的代码来指定四个方向选项,如表1中所示。在包括相同或不同数量的dmr类型端口的其他实施例中,可以使用其他nunit代码。下面描述使用每个nunit两位的代码。如果输出端口未被已经建立的通路阻塞,则路由逻辑435可以评估nunit并允许蠕虫继续前进。例如,如果从sram(一种dm)到达的头部字带有的nunit代码为10,则路由逻辑435可以针对该蠕虫的头部字和后续字请求交叉开关450的东输出端口。

表1根据方向代码和输入端口的输出端口

图17例示了路由逻辑的一个实施例对头部字的操作。图17将头部字描绘为从源节点前行穿过通路上的多个dmr节点直到终点节点。情形(a)可以例示处于源自于源dmr的初始状态的头部字。在这种状态下,头部字包括c/d位、h/t位以及编号为hn0到hn4的多个头部nunit字段,其中hn0占据头部字的最低有效位。

在包括源dmr和终点dmr的每个dmr处,头部字可以在如下修改的情况下被传递到交叉开关的输出。头部字可以右移一个nunit并从左充填零。然后可以把c/d和h/t位重新存储到其原始位置。图10的情形(b)至(e)可以分别例示在头部已经由一个至四个dmr处理后发生的头部修改。随着穿过每个dmr,领头头部字可以充填更多的零直到空代码在最右边的nunit中,如情形(e)中所示。如果在头部字不是来自同一dmr(控制器或相邻dmr)时空代码是最右边的nunit,并且下一个蠕虫字不是控制字,则该头部字可能在该蠕虫的终点dmr处。

对到达终点dmr的检测可能需要多个时钟周期。首先可以把领头头部字移动到输入寄存器454中的一个中,并由路由器控制逻辑435测试在最右边的nunit中的空代码。如果找到了空代码,则在下一个时钟周期中蠕虫的下一个字可以覆写领头头部字并且可以对其c/d和h/t位进行测试。如果下一个字是另一个头部字,则它可以变为新的领头头部字,并且可以使用其最右边的nunit来选择针对下一个dmr的输出端口。每蠕虫可以有许多头部字,以横跨大阵列进行路由。如果下一个字是主体字而不是头部字,则该蠕虫可能在其终点dmr处。在这种情况下,可以把主体字写到dmr中的预置sram位置。主体字到达某位置可以由通信控制器430的dma逻辑或由dmr来检测,通信控制器430的dma逻辑和dmr中的任一个都可以为后续主体字的到达服务。关于如何为蠕虫服务的信息可以预加载在终点节点处或者可以紧接头部之后包括在蠕虫中。

图18是例示了通过mpa的一部分的示例性通路的框图。图18描绘了标注为“路由器a”至“路由器h”的八个路由器。每个描绘的路由器可以是图4b的示范路由器。尽管为了简单未示出附加逻辑,但是每个描绘的交叉开关可以被包括在各自的诸如图4中所例示的dmr400之类的dmr中,并且例如,每个这种dmr可以耦接到诸如图2中所示的mpa20之类的mpa中的其他dmr。

在图18的所例示实施例中,路由器a-h中的每一个都包括在路由器左边缘上标注有n、s、e和w的四个输入端口以及在路由器右边缘上标注有n、s、e和w的四个输出端口。每个路由器的输入端口可以耦接到各自的dmr的dmr输入端口404,并且每个路由器的输出端口可以耦接到各自的dmr的dmr输出端口405。另外,路由器a-h中的每一个都包括到诸如图4的多端口sram425之类的存储器的输入连接和输出连接,这种连接分别在路由器的左右边缘上标注为m。

在所例示的实施例中,每个路由器a-h都经由每个各自的dmr耦接到多个相邻路由器,使得每个路由器的每个输出端口n、s、e和w耦接到多个相邻路由器中的每一个的各自的输入端口s、n、w、e。因此,在所例示的实施例中,每个路由器都可以被耦接为接收来自四个相邻路由器的输入以及向四个相邻路由器发送输出。注意,在替代实施例中,可以采用不同数量的路由器,每个路由包括不同数量的输入端口、输出端口和存储器连接。

图18例示了从包括路由器a的源dmr到包括路由器h的终点dmr的通路,该通路穿过了包括路由器b、f和g的dmr。一并参考图17和图18,根据表1定义的2位的nunit代码可以用于实施所例示的通路如下。该通路起源于经由输入存储器连接m耦接到路由器a的sram,并且经由输出端口e离开路由器a。根据表1,针对路由器a的nunit应当是10。路由器a的输出e耦接到路由器b的输入w,并且所例示的通路经由输出端口s离开路由器b。根据表1,针对路由器b的nunit应当是01。路由器b的输出s耦接到路由器f的输入n,并且所例示的通路经由输出端口e离开路由器f。根据表1,针对路由器f的nunit应当是10。路由器f的输出e耦接到路由器g的输入w,并且所例示的通路经由输出端口e离开路由器g。根据表1,针对路由器g的nunit应当是11。最后,路由器g的输出e耦接到路由器h的输入w,并且所例示的通路在经由输出存储器连接m耦接到路由器h的sram中结束。根据表1,针对交叉开关h的nunit应当是00。

因此,对于图18中例示的路径以图17的格式实施虫孔路由的头部控制字可以包括指示控制字的已断言c/d位、指示头部字的已断言h/t位以及分别对应于字段hn4至hn0的值00、11、10、01和10。注意,所例示的通路仅仅是通过一个map实施例的许多可能通路之一。在其他实施例中,可以采用不同数量的路由器和端口,并且不同的通路和路由方法都是可能的并被设想。

由于每个nunit可以由沿着通路的特定dmr消耗,所以可以把一个或更多个位添加到每个nunit以在各个dmr处请求特定行为。例如,在一个实施例中,可以使用每nunit一个添加位来指定给定dmr是否应当以多层模式进行操作。在这种实施例中,虫孔路由的路径可以根据对头部的编程在沿着该路径的不同dmr处使用不同的模式。

在另一个实施例中,例如,pe可以把头部字直接发送给相邻的诸如图4中所示的dmr400之类的dmr的交叉开关输入。pe可以经由dmr地址端口向相邻dmr指定特定的寄存器地址并且经由同一寄存器地址向该dmr的输出路由器发送头部字来这么做。诸如图4中所绘的路由控制逻辑435之类的路由控制逻辑可以被配置为然后在不使用存储器交换机或存储器的情况下把在其途中的蠕虫发送到其终点。这种技术可以提供pe之间的更高效的短消息传递能力。

冲突处理

由虫孔路由建立的通路可能偶遇具有已经路由通过给定dmr或正在路由通过给定dmr的过程中的一个或更多个其他通路的dmr。当一个或更多个入站头部字同时请求同一交叉开关输出端口(冲突)时或者当该输出端口已经被某通路占据(阻塞)时,可能出现资源冲突。路由控制逻辑可以包括被配置为仲裁在冲突的情况下哪条通路有权访问争夺的输出端口的逻辑。路由控制逻辑可以检测冲突并且只授权一个蠕虫访问争夺的输出端口。各种优先级/轮流方案(如循环(round-robin)方案)可以用于形成通信量分布,并且确保没有特定输入端口总是被拒绝访问所请求的输出端口。

当由虫孔路由初始建立的通路被阻塞时,在不销毁被阻塞的蠕虫的情况下停止其向前行进可能是有利的。在这种情况下,可以采用以上所述的流控制机制。词语“蠕虫”在此用来表示可以是字、字节或其他位组的流单元(在文献中称为“flit”)的有序的序列或串。在某些实施例中,dmr流控制协议可以操作如下。当蠕虫遭遇阻塞时,该蠕虫的领头流单元可以被锁存在阻塞dmr的输入寄存器中,并且blk信号被向回驱动至该通路中的上一个上游dmr,以把蠕虫的另一个流单元锁存在上一个上游dmr的输入寄存器中。可以重复该过程,追溯到包含蠕虫的尾部字的dmr,或者在尾部字尚未被源发送时追溯到源dmr。蠕虫中的数据可以被捕获在通路中的被配置为以同步数据传递模式操作的dmr的输入寄存器和输出寄存器中。如上所述,每个dmr可以存储两个字,导致已停顿的蠕虫的“挤压”或“叠缩”状态。蠕虫可以无限期地保持冻结直到阻塞状况消失,随后,可以通过传播blk信号的去断言来自动地重新开始蠕虫的向前运动。对dmr流控制协议的以上描述假设一个流单元被存储在链路输入端口寄存器中并且一个流单元被存储在链路输出端口寄存器中;但是,可以在阻塞状况下添加附加寄存器来存储每端口的附加流单元,并且这可以对蠕虫的长度提供附加的弹性。在某些实施例中,特定通路的源端可以暂时停止发送流单元并使“ready”信号去断言,并且流控制信令可以逐渐地停止流单元的向前运动,直到终点端收到“ready”信号的去断言,于是该蠕虫将被冻结在原地直到源再次开始发送。在替代协议实施例中,源数据发送的暂时停止和“ready”信号的去断言可以在通路中产生由具有经去断言的“ready”位的流单元组成的泡。该泡可以逐渐生长直到源恢复发送数据或者该泡到达终点,于是终点接收机继续读取流单元但是把包含去断言的ready位的所有流单元丢弃。当源恢复发送数据时,泡对着终点接收机破裂;并且终点接收机可以在出现断言的“ready”位时恢复接收数据。在某些实施例中,多种协议可以由硬件支持并由软件选择。

下面讨论了例示mpa功能的几个示例性应用。应当注意,这种示例并非意在限制mpa或其部件的结构、功能或范围,而是仅仅意在帮助对以上描述的理解。设想了可以采用这些示例的众多变型,以及下面讨论的示例可以有众多替代应用。

多层互连

诸如以上所述的多处理器系统可能需要硬件(如dmr和pe)与软件以协作的方式工作以完成特定的计算任务。为了实现系统的各种处理器之间的协作,可以使用网络来在各个处理器之间传输数据和指令。在某些实施例中,可以采用多个网络来用于处理器之间的通信。

具有高数据吞吐能力的多处理器系统内的网络可以被指定为主互连网络(pin),该主互连网络(pin)可以由链路(即在节点之间布置的一条或更多条电线)和节点组成。节点可以具有可用来与本地处理引擎、本地存储器单元或者多处理器阵列边界处的i/o端口连接的端口。具有更低数据吞吐能力的、可以以类似方式构建的其他网络可以被指定为次级互连网络(sin),诸如例如在美国专利申请13/274138中描述的串行网络。这种次级网络可以用于控制、测试、调试、安全和任何其他适合的应用。

节点可以包括能够在一个链路或端口与另一个链路或端口之间建立独立的连接并且可以与dmr对应的交换机。在某些实施例中,例如,位于集成电路的边缘附近的节点可以具有用于与诸如随机存取存储器(ram)或通用处理器(gpp)之类的相同或不同类型的其他ic芯片进行芯片外通信的专用端口。

在某些实施例中,pin拓扑结构可以包括由节点的2维阵列构成的2维网络结构。每个节点可以具有到另一个节点的北、南、东和西链路。通过向2维网络结构的每个节点添加“上”和“下”链路以允许连接一个或更多个2维网络结构,可以实现3维网络结构。可以以类似的方式连接3维网络结构以形成通常所称的“超立方网络结构”。尽管已经描述了2维和3维的网络结构,但是在其他实施例中,可以采用任何合适数量的维度来形成多维网络结构。维度不需要在可能的范围内无穷;相反它可以循环返回到自身,以形成网络结构柱或网络结构环。并且在某些实施例中,一组pe可以与随机形成然后被映射以给出到终点的地址的pin互连。

布线技术可以影响每个维度中的链路的相对密度。在某些实施例中,诸如电路板或超大规模集成(vlsi)ic,可用的布线密度在电路平面内高,但是在第三个维度内有限。通过在第三个维度内使用较少链路,或通过把所有链路投射到电路平面内,可以容纳3维网络结构。然后可以对节点和链路路由进行调整以创建面积高效的布局。

形成网络的这种分层方法可以允许高维网络而不需要独特的制造技术。更高维度的互连网络可以在计算资源,即处理引擎与存储器单元之间提供更多的通信通路。在某些实施例中,链路可以横跨存储器单元被路由,在多处理器系统的硅面积增加最小的情况下允许附加的pin资源。更高维度的网络也可以使用包括硅穿孔(through-siliconvias,tsv)和各种类型的硅中介层技术的先进的封装技术来实现。

为了实现分层建网方法,节点可以包括数据路径交换机、流控制信令和路由器控制机构(rcm)。数据路径交换机可以被配置为建立连接,每个连接都实现链路和端口的允许子集之间的数据路径。例如,可以在链路与不同链路之间、链路与端口之间以及端口与不同端口之间建立连接。在某些实施例中,数据路径交换机可以包括字宽的位并行的复用器,该复用器的输出可以耦接到链路或端口的外出部分,并且其输入可以耦接到链路或端口的进入部位。在某些实施例中,可以在链路或端口接口处使用时钟同步的寄存器来缓冲进入或外出的数据并调整其定时。在各种实施例中,数据路径交换机可以用复用的单个级实现,而在其他实施例中,数据路径交换机可以用复用的多个级实现。

本发明的一个实施例的多层in交换节点以其最一般的形式包括针对多条通信通路的层交换和方向交换,其中所述多条通信通路可以起源于该节点、穿过该节点或终止于该节点。节点根据能配置的协议对到达其端口的入站数据进行解释以确定要对其做什么。可由链接到in中的其他节点的端口接受的数据的最小单位也是链路上的经受数据流控制的最小单位,并且在文献中其被称为流单位或“flit”。

流控制信令可以调整横跨每个连接的数据流,使得不会由于发送超过接收机能吸收的数据或者由于接收机复制发送机不能足够快地发送的数据而使数据丢失。在源端口被发送到通道中的数据在某段等待时间后,可以出现在其终点端口。在某些情况下,等待时间段可以每穿过一个链路对应一个时钟周期。为了防止数据丢失,通道中的数据流的速率可以由硬件、软件或其结合来控制。在某些实施例中,硬件流控制信令可以使用从发送机到接收机的指示数据已准备好的二进制电信号、以及从接收机到发送机的请求发送机应当在发送更多数据之前等待(停顿)的另一种二进制电信号。这些流控制信号可以并行地遵循数据路径,包括穿过数据复用器。

路由控制机构可以被配置为处理对资源(链路或端口)的连接请求。在某些实施例中,rcm可以跨多个输入(一般从不同方向)搜索进入信号。如果信号包含请求特定资源的代码,则rcm可以检查所请求的资源可用,即资源未被预先存在的连接预定。如果所请求的资源可用,则rcm可以同意该请求,向数据路径复用器发送信号以建立连接,并且建立跨连接的流控制信令。相反,如果所请求的资源不可用,则rcm可以不同意该请求并可以向该请求输入发信号使发送机停顿,直到不兼容的预先存在的状况被消除。作为替代,rcm可以使该阻塞连接按时间共享并按照部分时间允许所请求的连接(通常称为“切入(cut-through)”)。虽然对输入的任何特定子集进行停顿或时间共享,但是rcm可以对输入的剩余集搜索进入信号。

rcm可以包括仲裁机构以处理对可用资源的同时请求。如果对同一资源(链路或端口)的两个或更多个连接请求同时到达,则rcm可以对它们进行仲裁并选择赢者。在某些实施例中,仲裁方案可以是优先级方案、循环方案或任何其他适合的仲裁方法。在其他实施例中,仲裁方案能够被配置作为优先级方案、循环或任何其他适合仲裁方法。

当收到了针对特定连接的终止命令时,rcm可以把终止命令中继到任何输出链路,并释放与该连接相关联的资源。释放的资源可以立即可用于建立其他连接。在已经建立了切入的情况下,rcm可以把资源交还给被切的预先存在的连接。注意,在各种实施例中,rcm可以执行其他功能或工作。

通过pin的路由可以以分层方式执行,其中在层次的不同等级采用不同技术。节点内的rcm为最低级别,通信通路(通道)的建立和拆除为中间级别,而通路的组选择以使相互干扰最小为最高级别。在节点级别,路由是基本且快速的,并且典型地由硬件实现。在路由层次的更高级别,路由更复杂并可以用软件实现。

在节点级别,路由是用路由控制机构实现的,如上面更详细地描述的。在某些实施例中,可以把rcm实施为状态机。路由请求可以经由端口从本地pe到达节点中。路由请求还可以被编码在消息的头部中从链路到达。如上面更详细地描述的,被编码在消息中的路由请求形成了通常称为“虫孔路由”的通道配置方法的基础。在这种路由方法中,消息在源节点处组成并用描述了通道去往何方的头部做前缀。在各种实施例中,可以采用不同的头部风格。

rcm还可以监视已连接的通道中的通信量,并且使用这种信息把连接局部地调整为更优的布局。例如,如果在链路上时间共享两条路径,并且路径之一与另一个连接相比相对较忙,则可以准许rcm把更大比例的时间分配给具有更高通信量负载的路径。在另一个示例中,如果交换节点具有附加链路来疏通本地通信量,则可以把通过的通信量转移到这些链路,从而释放本地资源以发起或终止路径。

当不再需要路径时,可以把“tail”代码发送到路径的源端口。在某些实施例中,tail代码可以由系统的硬件自动发送。在其他实施例中,软件可以控制tail代码的发送。随着tail代码沿着建立的路径传播,各个rcm清除连接并释放各自的路由资源。tail代码的插入可以是经由硬件自动的或者在软件控制下发送。在某些实施例中,可以在链路中包括额外的数据位以使头部和尾部字与消息主体区分开。字的奇偶位也可以在任何链路中运送以协助数据完整性。

通路(也被称为通道)可以是静态的或动态的。静态路径可以建立和用于给定应用的持续期间,而动态路径可以针对消息传送而创建并然后拆除,为要形成的其他通路释放链路和节点。在某些实施例中,动态路径可以在稍后的时间由其自身的另一实例拆除并取代。

如上所述,蠕虫头部可以包含诸如源地址、中间地址、终点地址以及模式请求之类的路由信息。这种信息中,通常需要终点地址并可以以许多不同方式对其编码。在一个实施例中,可以把地址编码为转向的序列,而在其他实施例中,可以把地址编码为笛卡尔x-y对,或任何其他合适的编码方法。在某些实施例中,路由信息可以采取导航单位序列的形式(通常称为“nunit”)。nunit可以被编码以请求在建立通信通路时所遇到的rcm以及每个节点的连接资源(链路和端口)和模式。

最小(2位)的nunit代码可以请求连接“向前直行”、“左转”、“右转”或“停止”。当头部消息经过节点时,随着连接指令被执行,nunit序列可以从前方缩短。当遇到“停止”指令时,rcm可以引导数据路径复用器把蠕虫消息的剩余部分交给寄存器以便由pe或dma访问。dmr中可以支持多个这种寄存器,以便同时支持多个通道。这种寄存器的地址可以映射到终点节点处的相应的到达方向,使得特定的pe能够等待消息从特定方向到达。

尽管以上描述了2位的导航单位,但是在其他实施例中,任何数量的位可以用于导航,以允许用于具有更高维度网络结构连接的in,并允许附加的路由器模式。例如,可以把附加位编码在每个nunit中。附加的nunit位可以允许交换层的连接指令,“向上走”或“向下走”,并且可以与两层或更多层的pin兼容。附加的nunit位可用于修改路由器模式,诸如固定或最优化,其中最优化可应用于时间共享的配量、使用非最近相邻链路的快捷路由、或者其他最优化。

多处理器阵列(mpa)上的应用软件可能需要pe与芯片i/o接口之间和当中的许多通信通路的整体。由于两条或更多通路可能彼此阻塞,并且当过多路径拥挤到有限资源上时阻塞的概率变为必然,所以通路整体的路由简化为找到至少一个可行(无干扰)的路由整体。随着路径的密度增大,可行的整体可能变得更难以找到。路径密度的度量是路径对链路的填充比值(即,路径总长度除以链路总长度),随着填充比值接近100%,完成所有路径路由可能变为无法实现。

可以用被称为“路由器”的软件工具来实现通信通路(路径)的整体的路由,其中路由器可以被包括作为软件开发套件的一部分。(也许使用任务布局工具的)程序员可以为路由器工具提供也被称为连线表(netlist)的需要路由的路径的列表。最初,路径可以仅仅由其源节点和终点节点的位置指定。对于要路由的每条路径,路由器可以选择从源到终点的链路中的最短距离序列。在第一次通过后,存在阻塞其他路径的路径,可以使用阻塞减少技术对整体再路由。可以重复进行阻塞减少的再路由,直到检测不到阻塞。

使路由过程更容易的方法可以包含重构应用软件算法,以降低所需路径的数量。在某些情况下,当多条路径正在寻找同一节点或试图从节点离开时,路径密度高。在这种情况下为了减少拥挤,算法可以跨多个节点分布,以便有效地跨更多链路分布消息通信量。在硬件再设计中,可以增加dmr链路容量以允许每节点更多的连接。使路由过程更容易的另一种方法可以包含提高每个dmr的可用连接资源(链路和交换机)的数量。

关于向dmr添加连接资源的目标,附加的资源可以被组织在被添加到in的层中。每个添加层都可以包含一组节点到节点的连接,并且每个路由器可以包括一组数据路径复用器、流控制信令和路由器控制机构。为了准许任何通信通路从一层跨越到另一层,可能需要附加的数据路径交换机及其控制。

图5a示出了用于单层in中的dmr节点550的单层方向交换机的示例性实施例。dmr节点之间的链路连接到每个dmr上的输入端口和输出端口。这些端口又连接到dmr中的方向交换机(路由器)。路由器输入部件552、554、556和558在图4b的下半部分(项482和项486)中被进一步详述。路由器输出部件551、553、555和557在图4b上半部分(项481、485、487和路由器控制逻辑489)中被进一步详述。注意,在图4b中,输入端口数据寄存器486对输入流单元进行缓冲并连接到三个路由器输出部件(以左转、向前直行或右转)和存储器交换机488(用于终止通路)以及可直接用作连接的pe的快速端口(未示出)。在图5a中,在路由器输入部件与路由器输出部件之间所画的线表示可由输出部件中的路由器控制逻辑489和数据路径复用器485选择的多位总线。

图5b例示了用于两层in中的dmr节点500的两层方向交换机的实施例。在所例示的实施例中,节点500包括由输出端口501、505、509和513组成的添加的全局(层b)以及输入交换机的b侧。图5b中,在输入交换机的b侧与go端口之间画的线表示可由在go端口处的数据路径复用器选择的多位总线的连接。

在图5b所例示的实施例中,预先存在的本地(a层)方向交换机可以与图4b和图5a中所示的方向交换机相同;但是为了保持图5b整洁,仅示出了a层的输出端口502、506、510和514以及输入端口503、508、512和515。

如图5b中所示,节点500进一步包括分别耦接到本地(层a)输入端口503、508、512和515的输入交换机504、507、511和516。输入交换机的目的是允许入站通信通路从本地(层a)交换到全局(层b),或者从全局(层b)交换到本地(层a)。在某些实施例中,交叉开关交换机504、507、511和516可以由2个输入和2个输出(2×2)的交叉开关交换机组成,该交叉开关交换机能够只有两种状态,一种为直通连接而另一种是交叉连接。

在图5b所示的实施例中,输入交换机控制逻辑(未示出)可以与路由器控制逻辑489分离。把输入交换机控制逻辑与路由器控制逻辑放在一起可以被看作路由器控制机构。

每个交叉开关交换机都从a端口和b端口接收数据,并且选择性地使数据穿过同一层或者跨层穿过。本地(a层)输出端口502、506、510和514可以从dma或pe接受数据,并且把数据传输到各自的a链路。在某些实施例中,本地(a层)输出端口也可以与输入端口503、508、512和515连接以允许创建直通路由。

全局输出端口501、505、509和513可以从交叉开关交换机504、507、511和516的b侧接受数据,并且在各自的b链路上传输数据。在各种实施例中,全局输出端口可以不联合本地路由使用。

注意,图5b中例示的节点的端口配置仅仅是示例。在其他实施例中,端口的不同数量、配置和互连也是可能的。

在图6中例示了多处理器阵列的一部分的实施例。所例示的实施例包括dmr601,dmr601通过本地链路611和全局链路610耦接到dmr602。dmr601进一步耦接到pe603,并且dmr602也进一步耦接到dmr602。

在dmr601中,全局链路610和本地链路611耦接到交叉开关交换机604,它进一步耦接到全局端口605和本地端口606。在dmr602中,全局链路610和本地链路611被耦接到交叉开关交换机607,交叉开关交换机607进一步耦接到全局端口608和本地端口609。

在操作期间,从dmr601的本地端口606传输的数据可以耦接到本地链路611。在我们的示例中,交叉开关仅在输入端口侧。作为替代,从全局端口605传输的数据可以通过交叉开关交换机604耦接到本地链路611或全局链路610。此外,来自全局端口605的数据只能在全局链路610上出去。以类似方式,由dmr602经由全局链路610收到的数据可以通过交叉开关交换机607路由到本地端口608或者全局端口609。注意,交叉开关交换机604仅仅具有直通或交叉这两种活动状态。例如,当全局链路610被连接到本地端口608时,那么本地链路611只能连接到全局端口609,而当全局链路610连接到全局端口609时,那么本地链路611只能连接到本地端口608。

注意,图6中例示的多处理器阵列的in中的节点到节点链路的实施例仅仅是示例。在其他实施例中,dmr之间的不同数量和类型的连接是可能并被设想,包括双向的和时间共享的连接。

在图7中例示了描绘dmr内的可能内部路由的框图。在所例示的实施例中,dmr700包括本地端口701、703、705和707以及全局端口702、704、706和708。dmr700还包括本地存储器709。在图7所例示的实施例中,本地端口701耦接到本地端口703、705和707。本地端口701还耦接到本地存储器708。在某些实施例中,如上面更详细地描述的,可以由rcm来建立前述耦接,并且所述耦接可以允许在dmr700中的直通路由。例如,从相邻dmr传输到本地端口701的数据可以穿过本地端口703、705和707中的任何一个的输出部分。另外,通过本地端口701收到的数据可以存储在本地存储器709中。图7中所例示的端口的数量及其布局以及内部路由仅仅是示例。在各种实施例中,可以采用不同数量的端口和不同配置的内部路由。

在图8例示了描绘dmr内的可能全局路由的框图。在所例示的实施例中,dmr800包括本地端口801、803、805和807以及全局端口802、804、806和808。

在图8所例示的实施例中,全局端口802耦接到全局端口804、806和808。在某些实施例中,如上面更详细地描述的,可以由rcm来建立前述耦接,并且所述耦接可以允许dmr800中的直通路由。例如,从相邻dmr传输到全局端口802的数据可以穿过全局端口804、806和808中的任何一个的输出部分。

图8中所例示的端口布置仅仅是示例。在其他实施例中,不同数量的端口和不同布置的端口是可能的并被设想。

在图4至图8中例示并在上面描述的实施例中,输入交换机控制逻辑可以具有能配置的优先级。在图9中例示了描绘示例性输入交换机控制优先级的表。对于被编程为留在本地(层a)上的进入通路路由,输入路由器端口a可以具有比输入路由器端口b更高的优先级。在进入全局(层b)路由的情况下,输入路由器端口b可以具有比输入路由器端口a更高的优先级。但是,当输入路由器端口a和输入路由器端口b请求同一资源时,取决于请求的类型,更高优先级的端口可以控制输入交换机的状态,由此访问资源,而更低优先级的端口可以在所请求的资源可用时跟随,或者它可以在所请求的资源不可用时停顿。在图9所例示的表中描绘了这种优先级。

图9的路由表对应于示例性路由协议的半自动模式,该半自动模式允许层交换机控制逻辑硬件在通路建立期间基于节点的当前状态和向其提交的方向交换请求来做出层交换选择。这种模式有利于处理包含仅指定了方向请求的最小尺寸的nunit的流单元,并且在某些情况下它可以避免被其他通路阻塞。

示例性路由协议的非自动模式可以不允许控制硬件逻辑有任何自由对数据路径交换机(层或方向)做出选择,而是相反,要求该选择被编码在到达的头部流单元的当前nunit中。这种模式可能需要比半自动模式更大的nunit,并且这些可以被成比例地供应更多头部流单元,以建立虫孔路由的通信通路。这种模式有利于通过对应用软件所需的路径整体具有宽得多的视野的软件开发工具套件对通路位置进行精确控制,并且相比于在无视其他通路进行路径选择的情况下所获得的结果,在避免阻塞和不可行的通路整体方面更有准备。

针对层交换机和方向交换机使用能配置的控制逻辑支持多模式路由协议。在示例性的hyperxdmr中,当前配置由dmr中的寄存器保存,该寄存器的r/w可由应用软件访问。每个dmr都可以与其他dmr独立地配置,因此有可能用于建立虫孔路由通路的头部流单元根据其打算遇到的dmr的期望模式设置而具有混合尺寸的nunit。

停顿重试

注意,交叉开关交换机可以实施入站通路设置的所有情况,但是两个端口(a和b)都请求本地(层a)访问时的情况除外。当两个端口都请求本地访问时,交叉开关交换机可以停顿输入路由器端口b。在某些实施例中,交叉开关交换机可以允许访问,但是下游构造的优先级逻辑可以停顿该请求。为了使对定时的影响最小化,可以把交叉开关交换机设计为基于仅使用当前头部流单元请求和交叉开关状态的最小逻辑来切换到合适的状态。不考虑其他的下游停顿。这可能导致基于有限的状态关注而可能做出潜在不良的决策的情况。

这些情况全都可以由以下单组条件描述:

输入交叉开关当前未“锁定”在现有的活动事务上。

全局请求由到达a和/或b端口的第一个头部流单元提出。

基于优先级方案,第一个头部流单元可以被放在b’(全局)总线上并发送到go端口逻辑。

该go端口逻辑要么已经被(来自不同方向的)另一条通路使用,要么正在接收来自具有更高优先级的方向的、在同一周期中的第二个头部流单元请求。

在这些条件下,第一个头部流单元将在输入交叉开关的下游被停顿,因此它将不得不等待go端口变为可用。

在这种情况下,有可能与所请求的路由方向相关联的输出端口(层a)可用于全局路由,但是逻辑太过复杂而不能在单个周期中执行来检测到。在这种情况下,可以采用“停顿和重试”策略。当前述状况发生时,可以停顿请求;并且在相同的完整时钟周期期间评估所有必要的逻辑以确定层交换输入交叉开关的不同决策是否将提供清晰的路径。如果是这种情况,那么可以在下一个上升时钟沿记录相关信息,并且可以联合任意新的请求来评估重试。当没有新的请求(在同一端口或其他端口上)与重试冲突时,那么可以同意重试并且可以在可替代路径上完成路由。

前述方法提供了对全局路由结构的充分使用,就好像在不以造成临界速度路径的方式使周期的逻辑负担过重的情况下在第一个请求周期中考虑了所有状况。基于构造中的当前状况,路由建立仍然是确定性的,但是当需要重试时,路由可能花费额外的周期以穿过dmr。

图9中所例示的表中所描述的优先级仅仅是示例。在其他实施例中,不同优先级是可能的并被设想。还要注意,在各种实施例中,交叉开关可以由硬件或软件(比如,nunit/流单元编程和控制寄存器)或其组合控制。

在图10中例示了多层路由的示例。在所例示的实施例中,pe1006创建了从dmr1001的东端口路由到dmr1003的西端口的蠕虫头部。路由起源于路由器端口a或dmr1001,然后行进到dmr1002。到达dmr1002时,dmr1002中的层交换输入交叉开关决定使用路由器端口b(全局端口)把该蠕虫向前发送到dmr1003上。到达dmr1003时,dmr1003中的层交换机把该路由交换回本地(层a)输入端口,允许虫孔路径在此终止。

另外在图10中例示了由pe1007创建以从dmr1005的北端口行进到dmr1004的西端口的蠕虫路由。该路由起源于dmr1005的路由器端口a(北)。如上面参考图9中所例示的优先级表描述的,路由交换到dmr1001的路由器端口b(东)。由于输入交叉开关交换机的固定状态(例如,交叉开关交换机已经被由pe1006建立的路由设置方向,如上所述),所以路由交换到dmr1002的路由器端口a(西)。因为同样的原因,路由在dmr1003交换返回全局路由级(级b)。路由经由路由器端口b离开dmr1003并进入dmr1004,然后被交换到本地输入路由端口,在此虫孔路由终止。

注意,图10中所描绘的路由仅仅是示例。在其他实施例中,不同数量的路由和不同的路由路径是可能的。

安全旁路路由

可能需要保护mpa芯片的区域免于mpa芯片的其他区域的影响。由于各种原因,mpa的一个区域可以包含与设备控制、ip许可、用户授权等有关的敏感数据,或者运行对适当操作关键的算法。与此同时,mpa的另一个区域可能正在执行还未被验证为安全的软件。未验证的软件可能因为各种原因(它可以是新的并带有许多瑕疵,或者该源代码对安全验证不可用,或者它相当的大和复杂以至于对其进行验证不经济)而存在。未验证的软件可以包含病毒或间谍软件。

可以把虫孔路由的通信通路设计为源于一个区域中、探查另一个区域并复制入或复制出数据或指令。为了防止这种探查,dmr的链路和端口可以设计为使得可以能配置地停用它们,见以上引用的美国专利申请序列号13/274138。在一个实施例中,在图8a中示出了所涉及的dmr链路和端口,其中圆形特征是可以停用消息通信量的点。在图8a中还示出了到串行总线的sbs接口中的配置寄存器,该寄存器被设计为可以写入单独的位以停用dmr端口/链路中的每一个。串行总线可以是可用于配置和调试目的的芯片上的低带宽的次级互连网络(sin)。

图19示出了具有被凭手画的边界所勾画的区域的mpa,其中该区域可以通过使边界处的通信通路停用来进行保护。安全区域内的通信路径不受边界处被停用的通信影响。但是,所划界的区域足够大,以至妨碍了保护区域两边的pe之间的通信。因此需要有一种方法来在不侵犯安全区域的安全的情况下使不安全的消息路由横跨保护区域(在本文被称为“安全旁路路由”)。

可以通过把dmr设计为能够能配置地限制蠕虫消息连接到本地存储器和pe端口但是允许安全区域上方的旁路,来实现安全旁路路由。dmr可以被设计为使得存储器和pe端口除了间接地通过层交换机(输入交叉开关)之外,只直接连接到本地层a的数据路径,而不直接连接到其他层的数据路径。在这种dmr实施例中,蠕虫消息层交换被限于输入交叉开关,并且防止蠕虫消息在dmr中交换层的方法是把交叉开关锁定为直通状态。

对于两层in,交叉开关只有两种状态(通过或交叉)。当这些交叉开关被锁定为通过状态时,那么任何入站蠕虫消息都被限制从同一层上的交叉开关离开。在图5a所例示的实施例中,在本地层a上入站的蠕虫消息可以在层a的输出端口上离开,或者它们可以在输入端口终止。在全局层b上入站的蠕虫消息只可以在层b的go端口上离开。

对于三层和更多层in,交叉开关可以具有许多状态并且可以包括任意输入层到本地层a的连接。如果这些“连接到本地输入端口”状态是被解锁的状态,那么上层上的入站蠕虫消息可以交换层但是被从输入端口排除,从而保持了输入端口的安全。在某些情形下,可取的是允许某些上层入站通信通路到达dmr输入端口,并且这可以用dmr配置寄存器中的更多编程位来实现。

在图19中例示了安全区域上方的不安全通信通路,其中虚线描绘了经过安全区域上的全局(层b)链路上的路由;并且它不在安全区域内起源或终止。

在图20所例示的实施例中,在以下示例中描述了在安全区域上创建旁路的事件序列。注意在本示例中,术语“config-reg”是配置寄存器的缩写:

●用在上方路由保护pe(0,0)和dmr(1,1)。

-设置pe(0,0)--加载其im然后保护其免于进一步的r/w

●如果需要的话,设置sbs(0,0)配置寄存器以重置pe(0,0)

●通过sb写入pe(0,0)的所有im并选择性地验证

●设置sbs(0,0)配置寄存器位,以停用im总线并锁定sbs配置寄存器

●可选择地读取sbs配置寄存器以确认其被锁定

-建立dmr(1,1)

●如果需要的话,设置sbs(1,1)配置寄存器位以重置dmr(1,1)

●可选择地初始化dmr(1,1)并验证

●设置sbs(1,1)配置寄存器位以停用北和东端口以及im总线,并锁定配置寄存器

●可选择地确认sbs配置寄存器和im总线被锁定

●停用所有a端口并设置输入交叉开关锁定器位

●停用pe总线ne、nw、se;并且锁定配置

-dmr(1,1)是安全的,因为只有pe(0,0)具有读或写其dm或寄存器的访问权限并且pe(0,0)被保护;并且忽视了到达dmr端口或sbs的消息。

-在保护pe(0,0)和dmr(1,1)之后,存在不会与其互动的许多可能的旁路路由。例如,使用位于dmr(1,0)北部的dmr(2,0)(未示出)中的快速端口的pe(1,0)可以把头部流单元写到dmr(2,0)南快速端口,该南快速端口在a层上到达dmr(1,1)并然后被交换到b’层。旁路路由可以在链路上继续到b层上的dmr(1,1)。在dmr(1,1)内部,旁路路由可以根据头部流单元中的nunit信息往北、南或东。假设nunit选择南,那么旁路路由会继续到dmr(0,1),在此它可以在b层上继续,或者既然它在安全区域外部,它可以交换到a层并继续路由或终止。

在保护pe(0,0)和dmr(1,1)之后,存在不会与其互动的许多可能的旁路路由。例如,使用位于dmr(1,0)北部的dmr(2,0)(未示出)中的快速端口的pe(1,0)可以把头部流单元写到dmr(2,0)南快速端口,该南快速端口在a层上到达dmr(1,1)并然后被交换到b’层。旁路路由可以在链路上继续到b层上的dmr(1,1)。在dmr(1,1)内部,旁路路由可以根据头部流单元中的nunit信息往北、南或东。假设nunit选择南,那么旁路路由会继续到dmr(0,1),在此它可以在b层上继续,或者既然它在安全区域外部,它可以交换到a层并继续路由或终止

在示例性的hyperxdmr节点中用于实施协议的控制逻辑和数据路径交换在两个阶段中执行——首先层交换交叉开关,然后方向交换路由器。作为替代,在其他实施方式中,方向交换可以首先出现,其次是层交换。在其他实施方式中,这两个阶段可以被一起集成在统一的交换中。作为替代,可以用超过两个阶段来实施协议和交换。

示例性的dmr路由器实施方式具有作为多层交换机的两层版本的层交换机(输入交叉开关),而示例性的方向交换是多方向交换机的三方向版本。本实施例不把这些交换机部件中的任何一个限于本示例性的dmr实施方式的层和方向的数量。通过对示例性的实施方式进行微小修改,可以容易地把概念扩展到许多层和许多方向。这些扩展形式支持附加的in连接维度。

在此描述并在示例性的hyperx架构中使用的虫孔路由方法通过使用连续头部流单元提供了无限的地址空间。对于短距离通信,单个头部流单元可以是所需要的一切。当dmr遇到仅具有一个非终止nunit的第一个头部流单元时,那么dmr可以执行nunit指定的方向选择,丢弃第一个流单元,把第二个流单元推到第一个流单元,并把蠕虫消息向前发送到下一个dmr。如果需要穿过跨许多fmpa芯片伸展的mpa,则可以组成非常长的头部。蠕虫消息头部的有限地址使用固定数量的位来指定蠕虫的终点地址。对于低维度in,有限寻址不妨碍在此描述的多层方法,但是它可能随着in维度增加而变得低效。

为了提供自动的迂回路由,路由引擎可以本地地以及更多是全局地使用关于路由拥塞的信息,以允许其绕着拥塞区进行路由。可以照常计划通路路由并将其编程到头部流单元中,然后如果沿途遇到拥挤,可以进行未计划的迂回来避免。in节点的路由控制机构可以单独地或者联合来自相邻节点的本地或全局的信息计算迂回。节点可以按照需要增加nunit或头部流单元以实现迂回,在此之后蠕虫消息可以在其预先计划的路由上继续直到其终点。如果时间知识也被包括在路由信息中,则拥塞的估计时长也用作路径确定的一部分。总之,这是先前描述的固定路径方法的拥塞避免适应性改变。

可以根据由图22中的框图所例示的方法来确定拥塞。在本框图中,正方形盒代表dmr。中央的标注有“a”的dmr能够通过以下列方式收集来自其邻居的拥塞信息来做出关于拥塞的决定。周围的dmr(b1-b8)可以向dmra提供关于本地和全局的拥挤信息的度量。从dmrb1到dmra的单个度量告知dmra有关dmrb1自己正在观察的拥塞级别。这是本地拥塞度量。dmrb1还通过从与其相邻但不是dmra的邻居的dmr收集信息来向dmra提供全局拥塞度量。这些与dmrb1相邻但不是dmra的邻居的dmr已经在图22中标为“c”。类似地,dmrb2向dmra提供了本地拥塞度量。它还通过收集与其相邻但不是dmra的邻居的dmr收集信息来向dmra提供全局拥塞度量。这些与dmrb2相邻但不是dmra的邻居的dmr已经在图22中标为“d”。如图22中所指示的,针对dmr的所有邻居重复该过程。注意,这种确定拥塞的方法可以扩展到多维中,并且可以使用来自更远的邻居的信息来确定全局拥塞,如pin的拓扑结构和计算自动迂回路由的算法的需要所要求的。

链路带宽改善

存在几种增大两个dmr单元之间的任一链路的带宽的方法。一种方法是增加每个链路的迹线(电线)的数量。另一种是用诸如双倍数据速率(ddr)之类的更快的协议运行链路层。再另一种是包括同一物理层上的逻辑路由的时分复用(tdm)。对于tdm,重要的是对离开链路的数据流进行可靠的解复用。一种直截了当的方法是增加向下发送到物理链路的每个流单元的位数,所赠加的位是标签(lag)。标签位携带有用于其余位所属于的蠕虫消息的代码。n位的标签可以编码多达2n个不同的蠕虫消息,其中每个的长度都未限制。其他模式可以把每个蠕虫消息划分成包,并把头部流单元应用到每个包。这些包头部流单元可以包含消息标识符和其他信息以帮助解复用。

直接存储器访问fifo

诸如上面所述的多处理器阵列(mpa)可以用于用复杂算法处理高速数据流。这些数据流经常是连续的并以恒定速率到达和离开。但是,pe更适合以每次一块(block-at-a-time)的形式来处理存储器中的数据;因此与连续的数据流存在不匹配。对这个问题的一种解决方案是分配一部分存储器用作缓冲存储器,也被称为缓冲区。典型地,在被编译以操作mpa的应用软件中指定缓冲区。缓冲区可以在编译时间被静态地分配,或者在操作期间被动态地分配。在任何特定应用软件内,可以存在许多缓冲区,例如用于数据流的分析和综合。如之前所述,术语“阵列”并不意味着暗示任何维度。

存储器缓冲区(本文称为“缓冲区”)可以向多处理器阵列内的数据路径提供弹性的质量。例如,缓冲区能够吸收短期的数据速率变化(假设平均输入和输出数据速率匹配)。在某些应用中,可能需要把高速率数据流分成多个低速率数据流。作为替代,在其他应用程序中可能需要把多个低速率数据流合并成单个高速率数据流。这些操作可能要求在任何数据流内没有数据的丢失或重复。

pe可以用来把数据存储到为存储器缓冲区分配的存储器的部分中。同一个pe或另一个pe可以用来从缓冲区检索数据。但是,这种数据存储和检索的方法未充分使用pe的能力。在某些实施例中,更简单的直接存储器访问(dma)引擎可以用来访问缓冲区并移动数据,从而释放pe以用于其他更复杂的任务,或者使其空闲以节省能量。

在某些实施例中,dma引擎可以在端口和本地存储器之间传送数据时执行大多数工作。当pin端口包含可以被同时操作的输入和输出部分这两者时,分开的dma引擎对每个部分可以是必要的。

转向图11,例示了dma引擎的框图。dma引擎1101包括地址生成器1102、存储器接口1103、网络i/o1104和控制寄存器1105。存储器接口1103可以耦接到诸如sram之类的外部存储器。在各种实施例中,网络i/o1104可以耦接到多处理器阵列的外部i/o端口或任何合适的内部端口。

地址生成器1102可以包括根据许多可能的计数器配置之一设计的计数器。在某些实施例中,计数器可以被配置为重置到预定值。地址生成器1102还可以包括诸如加法器之类的例如被配置为使计数器的输出与附加数据结合以形成在访问存储器中要使用的地址值的电路。被配置为存储索引值的单独的计数器也可以包括在地址生成器1102中。

控制寄存器1105可以包括被配置为存储用于dma引擎1101的控制信息的一个或更多个锁存器、触发器或任何其他合适的存储电路。例如,控制寄存器1105可以存储可用来影响数据传送的方向、起始地址和地址值之间的增量(通常称为“步幅(stride)”)等的信息。在某些实施例中,可以在多处理器阵列的初始化或引导过程把控制信息写到控制寄存器1105中。

存储器接口1103可以被配置为采用各种存储器接口方法之一。在某些实施例中,存储器接口1103可以提供例如诸如时钟之类的定时信号、模式选择信号、地址值和到dma引擎1101外部的存储器的输入数据值。外部存储器可以驻留在多处理器阵列内部或外部。在各种实施例中,外部存储器可以包括动态随机存取存储器(dram)、sram、只读存储器(rom)或诸如例如flash之类的非易失性存储器。

注意,图11中所例示的dma引擎的实施例仅仅是示例。在其他实施例中,不同的功能块和块的不同配置是可能的并被设想。

可以使用协议来协调输入到缓冲区的数据和从缓冲区输出的数据。这种协议可以防止数据在缓冲区中被覆写,并且在其他实施例中,防止在缓冲区内的数据重复。协议可以由输入到输出的数据顺序进行分类。有两种主要的顺序:先进先出(fifo)和先进后出(filo)。在fifo中,数据的次序可以不改变,而在filo中,数据的次序可以反转。

转向图12,例示了用于操作dma引擎的方法的实施例。一并参考图11和图12,方法在方框1201中开始。然后初始化起始地址和索引(框1202)。在某些实施例中,起始地址可以被加载到地址生成器1102中的计数器中,初始索引值也可以存储在地址生成器1102中所包括的另一个计数器中。

然后可以从存储器读取数据字(框1203)。在某些实施例中,存储器接口1102可以使用由地址生成器1103提供的地址值来访问dma引擎1101外部的存储器。从外部存储器读取的数据可以临时存储在存储器接口1102中。所读取的数据字然后可以被写到pin端口(框1104)。在各种实施例中,数据字可以从存储器接口1103传送到网络i/o1104,以输出到pin端口。

然后递增当前地址(框1205)。在某些实施例中,可以以存储在控制寄存器1105之一中的步幅值递增当前地址。然后递减索引值(框1206)。在某些实施例中,索引值被递减的量也可以存储在控制寄存器1105中。本方法然后依赖于经递减的索引值(框1207)。

当经递减的索引值大于预定阈值时,使用递增的地址值从存储器读取新的数据字(框1203),并且本方法如上所述地继续。当递减的索引值小于或等于预定阈值时,本方法结束(框1208)。在某些实施例中,预定阈值可以为零,但是其他值是可能的。

注意,图12中所例示的方法仅仅是示例。在其他实施例中,不同的操作和不同的次序或操作是可能的并被设想。另外,术语“递增”和“递减”并非意在把相相关联的操作限制为加法和减法,因为与负数相加提供的结果与减法相同,而与负数相减提供的结果与加法相同。对术语“大于”和“小于”也类似地不作限制。

在图13中,例示了操作dmq引擎的另一种方法。一并参考图11和图13,本方法从框1301开始。然后初始化起始地址和索引(框1302)。在某些实施例中,可以把起始地址加载到地址生成器1102中的计数器之中。初始索引值页可以存储在地址生成器1102中所包括的另一个计数器中。

然后可以从pin端口中读取数据字(框1303)。在某些实施例中,数据字可以通过网络i/o1104接收并被传送到存储器接口1103以临时存储。然后可以使用了由地址生成器1102提供的地址值把所收到的数据字写到存储器(框1304)。

然后递增当前地址(框1305)。在某些实施例中,可以以存储在控制寄存器1105之一中的步幅值递增当前地址。然后递减索引值(框1306)。在某些实施例中,索引值被递减的量也可以存储在控制寄存器1105中。本方法然后依赖于经递减的索引值(框1307)

当经递减的索引值大于预定阈值时,使用递增的地址值从存储器读取新的数据字(框1303),并且本方法如上所述地继续。当递减的索引值小于或等于预定阈值时,本方法结束(框1308)。在某些实施例中,预定阈值可以为零,但是其他值是可能的。

注意,图13中所例示方法的操作被描绘为以顺序的方式执行。在其他实施例中,可以并行地或以不同次序执行操作。

在诸如图12和图13中所例示的dma引擎的操作期间,应当小心谨慎,以防止存储器中的数据覆写或数据重复。在某些实施例中,当pin或本地存储器不能从dma引擎接受数据或向dma引擎提供数据时,dma引擎可以停顿,即不执行读或写操作。在这种情况下,dma引擎可以把最近读或写的数据字存储在寄存器中,以在稍后的时间使用。也可以将有关停顿的信息从dma引擎的端口侧传播到dma引擎的存储器侧,反之亦然。例如,来自pin端口的忙指示可以使dma引擎停顿通过其存储器接口产生读或写请求。

数据流可以比缓冲区的大小更长。在这种情况下,有必要协调数据输入(填入)过程和数据消除(排出)过程,以防止数据的丢失或重复。在某些实施例中,可以使用两个缓冲区(一个被填充而另一个被排出)。这种技术通常被称为“双重缓存”。在操作期间,当填充缓冲区变满时,输入数据流可以交换到排出缓冲区。当排出缓冲区变空时,发生类似的交换;然后从填充缓冲区读取输出流。缓冲区交换角色的过程经常被称为“缓冲区交换”,并且可以通过交换到缓冲区存储器地址的指针来实现。在某些实施例中,使用更复杂的控制器来保持跟踪哪个地址正被写入以及哪个地址正被读取可以把对两个缓冲区的使用折叠到单个缓冲区中。

用dmafifo逻辑可以实现固定复用的形式。因为dma引擎在物理上比dmr小的多,所以dmr可以包含多个dma写入引擎和多个dma读取引擎。对在同一缓冲区上工作的多个dma引擎的耦合控制允许把多个数据流合并为一个输出流,或者相反,可以把单个输入数据流分为多个输出数据流。另外,多个dma引擎的耦合控制可以包括与流控制逻辑的协调以防止数据的丢失或重复。采用固定的交错模式,对耦合控制的设计相对直截了当;并且如果输入流中的数据包长度全都相同,则可以对控制逻辑进行简化;但是,这些都不是本发明的限制。

如上所述,可以利用控制器来协调访问单个fifo缓冲区存储器的多个dma引擎。控制器可以配置为允许在另一个dma引擎正在向fifo缓冲区存储器进行写入的同时,多个dma引擎从fifo缓冲区存储器中进行读取。执行读操作的dma引擎(dmar)的数量可以取决于从最近的pin节点面向存储器的双向pin端口的数量。这种配置可以只使用dma引擎,即不需要pe,来提供支持数据划分和重排序的灵活性。

为了支持数据重排序和数据流的划分,对多个读取步幅的支持可以是必要的。也可以以附加的硬件复杂度为成本来利用对多个读取步幅的支持。在某些实施例中,可以权衡逻辑电路的复杂度和功耗来调整数据经过缓冲区和多个dma引擎的系统的等待时间。

用于多个dma引擎的dma控制器可以被配置为支持单次且连续的dma、伴有多个读取的单个写入、以及伴有多个写入的单个读取。在某些实施例中,连同dma控制器和多个dma引擎使用的fifo缓冲区可以以硬件被“充分保护”,即,一旦已经配置了控制器及其相关联的dma引擎,就不需要附加的软件控制。

用于多个dma引擎的控制器可以由被配置用于指针比较和停顿条件检测的逻辑电路构成,并且在各种实施例中这些电路可以以模块的形式构造。例如,逻辑电路可以被配置为支持单个fifo缓冲区操作。然后可以对这些逻辑电路复制所需的任意次数,以支持期望数量的fifo缓冲区操作。在各种实施例中,可以根据功耗需求来调整用于比较的地址位的数量。

转向图14,例示了描绘用于单个读取单个写入实现的指针的可能配置的图。注意,尽管图14中所例示的图描绘了单个读取单个写入的情况,但是诸如两个读取单个写入的其他实施方式是可能的并被设想。

在图14所描绘的每种情况中,wrap值用来指示在连续dma模式中写指针已经折回到fifo的起始。当写指针已经折回时,与该缓冲区相关联的读指针可以继续到fifo的末尾,并且不需要进一步的检查。当前述读指针到达缓冲区的末尾时,wrap值被清除并且fifo返回到正常模式。当wrap值等于零时,读取停顿条件由以下确定:

((rd_prt–wr_prt)大于或等于零)

在wrap值为1的情况中,读指针与写指针之间的类似对比将提供非负结果的写停顿值。图14中所描绘的其余情况是针对读和写都不停顿。

在图14所例示的示例中,情况1、2、6和7适用于一次dma操作。当dmafifo开始时,根据情况1来组织读指针和写指针。允许对fifo写入,但是读取停顿。在正常操作期间(见情况2),写指针领先读指针并且读取和写入都被允许。在某些情况中,读指针赶上写指针(见情况7),导致读取停顿。当对fifo的写入完成时(见情况6),写指针可以指向fifo外部的地址,并且可以允许继续读取直到已经到达fifo的末尾。

在图14所例示的示例中,除了情况6之外的所有情况都适用于连续的dma操作。当用于连续的情况时,可以针对fifo内的每个读/写指针对来维持wrap位。在某些实施例中,一种类型的dma中的多于一个可以与其他类型的dma中的一个进行对比(如,4个读取,1个写入),导致需要多于一个的折回位(wrapbit)。在各种实施例中,可以根据dma的配置来以不同的方式利用折回位。

在多个写入的情况下,当单个写指针折回时可以设置折回位,并且当每个附加折回位的各自的读指针指示已经出现折回时,可以清除所述每个附加折回位。在多个写入的情况下,当每个写指针折回时可以对折回位进行设置,并且当读指针指示折回时,可以清除所有的附加折回位。

单个fifo缓冲区可以包括一个输入和多于一个的输出。在这种情况下,有必要比较多于一个的指针以确定用于连接到fifo缓冲区的dma引擎的停顿信号。在某些实施例中,如果比较功能分布在可连接到fifo缓冲区的dma引擎之间,则可以以集中的方式来执行比较以避免电路的重复和附加的路由。在多处理器阵列系统的每个dmr中,可以利用被配置为比较指针并产生停顿信号的一个或更多个功能块。dma-fifo缓冲区和控制器也可以在芯片i/o接口处实现;包括专用于诸如sdram芯片之类的外部存储器芯片的接口。在各种实施例中,fifo缓冲区可以包括任何合适数量的输入和输出端口以连接到更高维度的网络结构。

转向图15,例示了指针比较和停顿单元(pointercompareandstallunit,pcsu)的实施例。在所例示的实施例中,pcsu1500包括dma读指针输入1501、dma读取控制输入1504、dma写指针输入1502、dma写入控制输入1503、dma读取fifo停顿输出1510以及dma写入fifo停顿输出1511。尽管指针输入被描绘为包含9位并且控制输入被描绘为包含4位,但是在其他实施例中,可以利用针对每种类型的输入的任何合适的位宽。

在图15所例示的实施例中,dma读指针输入1501和dma写指针输入1502耦接到比较器1505至1508。在各种实施例中,比较器1505至1508可以实现任何合适的比较算法,诸如以上描述的读指针和写指针之间的差异。比较器1505至1508的输出然后可以耦接到停顿逻辑1509。被包括在停顿逻辑1509中的电路可以使用诸如例如与(and)、或(or)等之类的任何合适的逻辑函数来对比较器的输出进行组合,以形成dma写入fifo停顿输出1511和dma读取fifo停顿输出1510。

注意,图15中所例示的pcsu仅仅是示例。在其他实施例中,不同的功能块和块的不同配置是可能的。

在某些情景下,pe对存储器进行读取或写入并与fifo结构相关联可能是可取的。在某些实施例中,这可以使用附加的dmr和之前描述的dmafifo控制器的功能中的至少一些来实现。转向图16,例示了pe读fifo的仿真的框图。在所例示的实施例中,1605中的正常路由耦接到dmr1601,dmr1601又经由附加的路由1606耦接到dmr1603。dmr1603进一步耦接到pe1604。在某些实施例中,dmr1601可以包括单个写入单个读取的fifo1602。在本图中,1607不是dmafifo,而仅仅是正在保持来自1606路由链路的值直到pe1604能读取它们的dmr上的inport(输入端口)。该路由被停顿直到pe读取值,或者pe被停顿直到下一个值可在端口中获得。

在操作期间,dma-fifo1602可以经由输入端口1607把在1605中从正常路由收到的数据发送到dmr1603。处理元件1604然后可以经由dmr1604对输入端口1607执行读取停顿,导致存储在dma-fifo1602中的数据的本地拷贝。在某些实施例中,处理元件1604可以能够以最小的附加等待时间来从dma-fifo1602接收数据。注意,图16中所例示的实施例仅仅是示例。在其他实施例中,不同数量和布置的dmr块和处理元件是可能的。

dma—先进的想法

可以把处理插到能以各种方式编程的构造互连的传送路径中。该处理可以对于dmafifo模式以及正常的传送模式都存在。简单类型的处理包括比如位交织(bitinterleaving)和去交织(de-interleaving)的事情。其他简单的处理可以包括字节交换、字节包装和拆包、字段屏蔽、诸如加法和乘法之类的算术函数等。也可以执行更复杂的功能。对于安全应用有用的功能是加密和解密。可能容易地改编到dma流功能中的其他计算是crc、奇偶校验、移位、提取和过滤。上述示例仅仅是出于例示的目的,并非意味着用来限制本说明书的范围。

在许多情况下,需要扫描整个存储器并且计算取决于所扫描的所有位的签名。dma引擎已经具有用于产生地址序列以扫描存储器的方法,并且增加适度的处理能力使其直接计算纵向奇偶校验、当前的和或当前的积,仅举此几例。可以把输出签名写到能被应用软件访问的一个或更多个寄存器中,以便在应用程序中使用该结果。

一种用途是快速且高效地比较两个或多个数据阵列以测试它们是相同的,方法是计算一个阵列的签名并计算第二个阵列的签名,然后比较签名。对每个阵列的签名计算可以由在时间上分开的同一硬件完成,或者由在空间和/或时间上分开的不同硬件完成。同一个签名计算硬件不需要在两个阵列上使用,只要签名计算相同即可。这允许签名计算在例如不同的dmr或不同的ic芯片中进行。对来自一个或更多个签名计算的签名的比较可以在中心位置进行,或跨多个位置分布,要么在dma的硬件中要么在pe硬件上执行的软件中。在任何情况下,签名的分布计算可能需要把签名值传输到中心位置或者使签名值沿着比较位置的分布传输。dma引擎可以被配置为发布用于将阵列的签名值递送到终点以便比较的虫孔路由的消息。签名消息可以比它们代表的数据短得多,因此被更高效地分发。

对数据阵列等效性的验证例如被用于三重模式冗余(triplemodularredundancy,tmr)的方法中,所述tmr取得三个(可能是错误的)计算的结果并针对等效性对它们进行比较,并且如果两个或更多个结果是等效的,则其结果可以被接受为正确。如果每个计算的结果已经是小的,则dma签名计算将没有帮助,但是如果结果多于几十个字,则dma签名计算会比用pe计算签名更高效。

针对签名计算的硬件支持的想法不限于dma引擎,它还可以应用于pe及其支持存储器之间的地址和数据流,所述支持存储器包括数据存储器(dm)和指令存储器(im)这两者。图21示出了被接进pe和dm之间的地址和数据总线中的和校验单元(sum-checkunit)的可能布置。这些和校验单元计算当前的和以计算签名,但是也可以实施其他算术和逻辑处理。和校验单元的输出可以发送到模式冗余“表决者”以确定要接受哪些结果。

尽管已经关于优选实施例描述了本发明的系统和方法,但是并非意在限于本文所阐述的具体形式,相反,意在覆盖可被合理地包括在由所附权利要求限定的本发明的精神和范围内的这种替代、修改和等效。

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