CN111527485B - 存储器网络处理器 - Google Patents
存储器网络处理器 Download PDFInfo
- Publication number
- CN111527485B CN111527485B CN201880084620.4A CN201880084620A CN111527485B CN 111527485 B CN111527485 B CN 111527485B CN 201880084620 A CN201880084620 A CN 201880084620A CN 111527485 B CN111527485 B CN 111527485B
- Authority
- CN
- China
- Prior art keywords
- message
- node
- information
- nodes
- destination
- 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
- 230000015654 memory Effects 0.000 title abstract description 66
- 238000012545 processing Methods 0.000 claims abstract description 20
- 238000000034 method Methods 0.000 claims description 61
- 230000004044 response Effects 0.000 claims description 12
- 230000006870 function Effects 0.000 description 36
- 238000012360 testing method Methods 0.000 description 26
- 238000004891 communication Methods 0.000 description 21
- 238000010586 diagram Methods 0.000 description 16
- 230000008569 process Effects 0.000 description 15
- 230000009977 dual effect Effects 0.000 description 12
- 239000000872 buffer Substances 0.000 description 9
- 238000013459 approach Methods 0.000 description 8
- 238000013461 design Methods 0.000 description 7
- 102100021334 Bcl-2-related protein A1 Human genes 0.000 description 6
- 101000677540 Homo sapiens Acetyl-CoA carboxylase 2 Proteins 0.000 description 6
- 101000894929 Homo sapiens Bcl-2-related protein A1 Proteins 0.000 description 6
- 230000000903 blocking effect Effects 0.000 description 6
- 239000013598 vector Substances 0.000 description 6
- 238000009825 accumulation Methods 0.000 description 5
- 238000007792 addition Methods 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 5
- 230000008859 change Effects 0.000 description 5
- 230000002093 peripheral effect Effects 0.000 description 5
- 230000003213 activating effect Effects 0.000 description 4
- 238000003491 array Methods 0.000 description 4
- 238000012937 correction Methods 0.000 description 4
- 238000011161 development Methods 0.000 description 4
- 230000006872 improvement Effects 0.000 description 4
- 230000003993 interaction Effects 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 230000008093 supporting effect Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 239000008186 active pharmaceutical agent Substances 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 235000019800 disodium phosphate Nutrition 0.000 description 3
- 230000001976 improved effect Effects 0.000 description 3
- 230000033001 locomotion Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 101100278585 Dictyostelium discoideum dst4 gene Proteins 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 2
- 238000006731 degradation reaction Methods 0.000 description 2
- 230000001934 delay Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000001965 increasing effect Effects 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 1
- 238000012935 Averaging Methods 0.000 description 1
- 241001522296 Erithacus rubecula Species 0.000 description 1
- 201000006054 Mulibrey nanism Diseases 0.000 description 1
- 101100175606 Oryza sativa subsp. japonica AGPL2 gene Proteins 0.000 description 1
- 101150070874 SHR1 gene Proteins 0.000 description 1
- 101150009276 SHR2 gene Proteins 0.000 description 1
- 101100095761 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SHR3 gene Proteins 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000002716 delivery method Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000013213 extrapolation Methods 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 238000005562 fading Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 230000000116 mitigating effect Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 239000003921 oil Substances 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000002265 prevention Effects 0.000 description 1
- 230000002035 prolonged effect Effects 0.000 description 1
- 230000006798 recombination Effects 0.000 description 1
- 238000005215 recombination Methods 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 230000003319 supportive effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
- G06F15/17337—Direct connection machines, e.g. completely connected computers, point to point communication networks
- G06F15/17343—Direct connection machines, e.g. completely connected computers, point to point communication networks wherein the interconnection is dynamically configurable, e.g. having loosely coupled nearest neighbor architecture
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
- G06F15/17306—Intercommunication techniques
- G06F15/17312—Routing techniques specific to parallel machines, e.g. wormhole, store and forward, shortest path problem congestion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/745—Address table lookup; Address filtering
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Mathematical Physics (AREA)
- Signal Processing (AREA)
- Multimedia (AREA)
- Advance Control (AREA)
- Multi Processors (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
- Complex Calculations (AREA)
- Hardware Redundancy (AREA)
Abstract
公开了一种针对高性能和低功耗而优化的具有处理元件、散布的存储器以及主要和次级互连网络的多处理器系统。在次级网络中,多个消息路由节点利用多个处理器以散布的方式布置。给定的消息路由节点可以从其它消息节点接收消息,并使用包括在消息中的相对偏移量将接收到的消息中继到目的地消息路由节点。相对偏移量可以指定从发起消息的消息节点到目的地消息节点的消息节点的数量。
Description
通过引用并入
发明人是Michael B.Doerr、Carl S.Dobbs、Michael B.Solka、MichaelR.Trocino、Kenneth R.Faulkner、Keith M.Bindloss、Sumeer Arya、John Mark Beardslee和David A.Gibson的标题为“Memory-Network Processor with ProgrammableOptimizations”的美国专利No.9,430,369通过引用整体并入本文,就如同在本文完全完整地阐述了那样。
发明人是Michael B.Doerr、Carl S.Dobbs、Michael B.Solka、MichaelR.Trocino和David A.Gibson的标题为“Multiprocessor fabric having configurablecommunication that is selectively disabled for secure processing”的美国专利No.9,424,441通过引用整体并入本文,就如同在本文完全完整地阐述了那样。
技术领域
本发明涉及多处理器系统,并且更具体地涉及处理器操作和执行方面的改进。
背景技术
通用硬件系统的主要目标是在保留完全可编程性的同时实现特定于应用的(不可编程的)硬件性能。在历史上,这两个概念是正相反的极端。特定于应用的硬件是以可能的最高效方式执行特定功能的固定硬件解决方案。这通常以每功能的能量或每(一个或多个)操作的能量并且以每(电路)面积的功能来测量,每(电路)面积的功能可以与产品的部分成本相关。芯片产品的成本包括许多因素,这些因素包括管芯面积和最终封装。成本还应当考虑开发产品的整个生态系统。这种生态系统成本包括将特定应用精简至特定硬件解决方案的时间、构成整个系统所需的特定硬件解决方案的数量、以及通过定制通信和存储器结构集成所有特定硬件解决方案所花的时间等等。因此,需要完全集成的解决方案来支持所有各种特定硬件解决方案以及它们的定制互连,这导致单个芯片管芯上非常大的面积需求。在历史上,这个过程曾导致在面积、能量和上市时间方面不高效的解决方案。
在考虑可编程性的世界和针对硬件的概念时,从硬件体系架构和软件开发风格的角度来看,市场或前景是由Intel、AMD和ARM提供的通用处理器(GPP);NVIDIA和AMD的图形处理单元(GPU);Texas Instruments和Analog Devices的数字信号处理器(DSP);Xilinx、Altera等的现场可编程门阵列(FPGA);Cavium和Tilera的多核/众核处理器;以及专用集成电路(ASIC)或片上系统(SoC)代表的。
GPP用于通用处理,即,试图成为万金油(a jack of all trades),其基于被思考超过40年的旧的但经过验证的硬件体系架构。它们的主流目的是利用支持性操作系统(例如,Windows和Linux)运行用户界面(UI)和高度交互式UI密集型应用,比如MSWord、Excel、电子邮件等。影响功耗的硬件特性是多级高速缓存、复杂的硬件存储器管理单元、大型总线和大型时钟结构。总之,它们消耗大量的电力来执行这些任务。从软件开发的角度来看,它被认为是最容易针对的软件编程模型。这是从用户开发连续或串行执行的单个线程的角度来看的。当并行化或多个硬件线程(大于大约四个线程)被引入时,高效地编程这些线程的能力变得困难得多。这是由于从根本上该体系结构未被开发为支持并行线程操作的事实,并且因此该硬件体系架构需要大量的开销复杂性来进行管理。软件编程模型要求引入API或语言扩展,以支持多个软件线程的定义。虽然这不一定是复杂的,但不幸的是,当前的GPP硬件体系架构要求这种复杂性。
在高级别,已经广泛地在世界上每个超级计算机中与C、C++、Fortran等使用多年的API是MPI(消息传递接口)API,这是从20世纪90年代初期开始的一个工业标准。这是不限制硬件实现方式的非常简单、很好理解的API。MPI API允许以独立于硬件的方式对软件线程和通信进行定义。这与OpenMP、Coarray Fortran、OpenCL等以及固有地规定假设的底层硬件模型的其它语言/API不同,该底层硬件模型因此限制解释灵活性并造成前向兼容性问题。换句话说,利用这些后面所述的语言/API,程序员需要针对每个作为目标的新硬件平台重写程序。
GPU在历史上是为处理数据的显示并针对数据的显示而开发的。它们是在体系架构上受其核心外(外部)存储器模型需求和核心内存储器模型需求约束的硬件。核心外存储器要求GPP将数据放在GPU存储器空间中。然后,GPU拉入数据,以流水线方式对数据进行操作,然后将数据放回到在其外部的存储器空间中。从这里,数据可以被发送到显示器,或者GPP需要将数据移出GPU存储器空间,以便在通用处理之下在操作中被进一步使用/存储。硬件中的低效是由于(1)四处移动数据以支持核心外硬件约束所需的支持和(2)有限的核心内存储器结构,其中数据被限制为在精简的流水线中被处理–类似于深度流水线化的SIMD机器。结果是由于处理数据的硬件低效而造成的高功率利用率。所使用的软件编程模型是极其以硬件为中心的,OpenCL、CUDA等,并且因此实现效率是复杂的,而且可移植性不是非常好,其中代码当试图移动到新的硬件目标平台时必须被被重写和重构。
DSP可以被看作是具有已精简并且针对通用信号处理的指令集的GPP。他们遭受与其大哥哥/姐姐GPP同样的高速缓存、MMU和总线困境。此外,任何真正高吞吐量的处理功能(诸如Viterbi/Turbo解码或运动估计)已被精简至具有有限能力的ASIC加速器,通常只支持商业市场中有限的一组特定标准。当针对单个硬件线程时,编程模型类似于GPP,但是由于在执行单元硬件中的信号处理指令方法,实现任何高效率都要求功能的手工装配或专有软件库的使用。当创建多个并行DSP的体系架构时,类似于上面讨论的并行GPP,问题进一步加剧。
FPGA是完全不同的硬件方法,其中功能性的定义可以在位级完成并且逻辑功能之间的通信是通过可编程导线结构完成的。这种硬件方法引入了巨大的开销和复杂性。由于这个原因,高效的编程在硬件编程语言(诸如Verilog或VHDL)中执行。由于类似于在ASIC/SOC中所需的但是具有结构化的导线架构的、引入时序收敛障碍的可编程布线和可编程逻辑,因此编译过程要复杂得多。当一次只比较一个功能时,由于FPGA只执行它确实被编程的功能并且不执行任何其它功能,因此关于特定功能的功耗和性能吞吐量显然比GPP或GPU好得多。但是,如果尝试要在FPGA中实现GPP的所有能力,则FPGA显然比GPP差很多。在硬件级别编程的难度是显而易见的(例如,时序收敛)。对FPGA进行编程实际上不是“编程”,反而它是逻辑/硬件设计,并且VHDL/Verilog是逻辑/硬件设计语言,而不是编程语言。
从硬件的角度来看,几乎所有的多核/众核体系架构都采用核心处理器、高速缓存、MMU、总线以及所有关联的逻辑并且在管芯上复制它们,并且在它们周围具有通信总线/架构。多核体系架构的例子是IBM的Cell、Intel和AMD的四核和N多核、Cavium和Tilera的产品、多种自定义的SoC,等等。此外,在多核体系架构中实现的功率降低很大程度上是微不足道的。这个结果源于多核方法仅仅复制GPU方法的事实。多核体系架构中唯一真正的节能是一些IO驱动器的减少,因为核心通过芯片上的通信总线被连接,所以现在不需要这些IO驱动器,而之前它们是在单独的芯片上。因此,多核方法不会节省更多能量。其次,软件编程模型没有比上文讨论的GPP有所改善。
为其它方法识别出的问题的列表是为什么对于特定市场,系统开发人员致力于使用具有特定GPP、DSP和ASIC加速器的定制芯片来形成片上系统(SoC)。SoC在需要的地方提供编程能力并且为特定功能提供ASIC性能,以平衡功耗和成本。但是,现在软件编程模型甚至比根据上述可编程硬件解决方案所讨论的更加复杂。此外,SoC可能导致与完全可编程解决方案相关联的灵活性的损失。
所有这些可编程硬件解决方案中的共同点是如今在市场上展现的软件编程模型通常关注于外推执行模型和底层硬件结构,以更高效地支持更多应用,而不是变得独立于硬件。
OpenCL支持利用ANSI C编程语言写内核,并且具有一些限制和附加。它不允许使用函数指针、递归、位字段、变长数组和标准的头文件。该语言被扩展,以支持关于向量类型和操作、同步和函数的并行化,以便与工作项目/组一起工作。应用编程接口(API)被用来定义并且然后控制该平台。在进程(course)级别,OpenCL支持利用基于任务和基于数据的并行化的并行计算。
US2017/0286196A1公开了多处理器阵列的实施例,该多处理器阵列可以包括多个处理器和以散布的布置耦合在一起的可配置通信元件。每个可配置通信元件可以包括本地存储器和多个路由引擎。本地存储器可以耦合到多个处理器的子集。每个路由引擎可以被配置为从多个源接收一个或多个消息,取决于配置信息将每个接收到的消息指派给多个目的地中的给定目的地,并且将每个消息转发到指派的目的地。多个目的地可以包括本地存储器以及包括在多个可配置通信元件的子集中的路由引擎。
US2014/0143470A1公开了多处理器阵列的实施例,该多处理器阵列可以包括多个处理器、本地存储器、可配置通信元件和直接存储器访问(DMA)引擎和DMA控制器。每个处理器可以耦合到本地存储器中的一个本地存储器,并且多个处理器、本地存储器和可配置通信元件可以以散布的布置耦合在一起。DMA控制器可以被配置为控制多个DMA引擎的操作。
用于在多处理器系统上并行执行的软件应用的开发的现有技术方法一般需要开发的容易性与并行执行的效率之间的权衡。换句话说,情况一般是,对于程序员来说开发过程越容易,所得到的可执行程序在硬件上执行得更低效;反过来,越高效的执行一般需要程序员的显著更多的努力,即,更详细地设计程序,以避免低效处理并使用目标硬件的效率增强特征。
因此,期望改进的系统和方法,以用于促进应用或系统级视图的软件描述以驱动软件编程模型及其随后的使用针对执行模型和底层硬件体系架构。还期望提供通过这个过程启用应用的高效可编程实现的机制的改进。消息传递接口(MPI)是标准化的独立于语言的、可伸缩且可移植的消息传递通信协议API。MPI API旨在以语言无关的方式用特定于语言的语法(绑定)在(已映射到节点/服务器/计算机实例的)进程的集合之间提供基本的虚拟拓扑、同步和通信功能。MPI API标准定义了库例程的核心的语法和语义,这些库例程包括但不限于对以下各项的支持:各种行为可定义的点对点以及集群/广播通信的发送/接收操作以及进程的同步。MPI是当今高性能计算中使用的主要模型。利用进行紧密通信的许多处理元件、分布式快速存储器以及将系统划分为模块的层次结构的更复杂的软件开发工具,针对在系统级的每瓦功耗的更高的性能取得更大的进步是可能的。在层次结构的底部是指派给处理元件、支持存储器和跨动态可配置的互连网络的灵活通信通路的任务。
发明内容
公开了用于包括多个消息节点的多处理器集成电路的各种实施例。广义上讲,多个消息节点以散布的布置耦合到包括在多处理器中的多个处理器。多个消息节点中的特定消息节点被配置为接收包括有效载荷和路由信息的第一消息,并基于多处理器的路由信息和操作信息来选择多个消息节点中的不同消息节点。特定消息节点还被配置为基于不同的消息节点来修改第一消息的路由信息以生成第二消息并将第二消息转发到不同的消息节点。
附图说明
图1描绘了多处理器阵列的实施例。
图2描绘了PE的数据路径的实施例。
图3是指令解码器的实施例的框图。
图4是图示地址生成器的实施例的框图。
图5是比较编程模型的框图。
图6图示了描述测试谓词标志的表。
图7图示了描绘不同条件指令的三个表。
图8图示了条件方框指令。
图9描述了数据路径逻辑电路。
图10是图示用于turbo指令的有源逻辑电路的框图。
图11是图示用于半turbo指令的有源逻辑电路的框图。
图12是图示用于box plus指令的有源逻辑电路的框图。
图13是图示用于Max*指令的有源逻辑电路的框图。
图14是图示用于另一个Max*指令的有源逻辑电路的框图。
图15描绘了多处理器阵列中包含的消息总线的逻辑概述。
图16是描绘要作为在消息总线上发送消息的一部分被编程的信息的表。
图17是描绘消息总线节点的通用接口的框图。
图18是图示消息总线节点的内部部件的框图。
图19是描绘消息总线网络的实施例的框图。
图20是描绘HyperOp数据路径的框图。
图21是描绘编程模型的框图。
图22描绘了图示用于操作消息节点的方法的实施例的流程图。
虽然本公开容许各种修改和替代形式,但是其具体实施例在附图中以示例的方式示出并且将在本文中进行详细描述。但是,应当理解的是,附图及其详细描述并非旨在将本公开限制为所示的特定形式,相反,其意图是涵盖落入如所附权利要求书所定义的本公开的精神和范围内的所有修改、等同形式和替代形式。本文使用的标题仅用于组织目的,并不意味着用来限制本说明书的范围。如在本申请中各处所使用的,单词“可以”以允许的意义(即,意味着有可能)而不是强制性的意义(即,意味着必须)被使用。类似地,词语“包括”(“include”、“including”和“includes”)是指包括但不限于。
流程图被提供以说明示例性实施例,并且不旨在将本公开限制为示出的特定步骤。在各种实施例中,所示的一些方法元素可以并发执行、以与所示的次序不同的次序执行、或被省略。还可以根据期望执行附加方法元素。
各种单元、电路或其它部件可以被描述为“被配置为”执行一个或多个任务。在这样的上下文中,“被配置为”是对结构的广泛叙述,一般意味着“具有”在操作期间执行一个或多个任务的“电路”。照此,即使单元/电路/部件当前未开启,也可以将单元/电路/部件配置为执行任务。一般而言,形成与“被配置为”对应的结构的电路系统可以包括硬件电路系统。类似地,为了便于描述,各种单元/电路/部件可以被描述为执行一个或多个任务。此类描述应当被解释为包括短语“被配置为”。记载被配置为执行一个或多个任务的单元/电路/部件明确地旨在不对该单元/电路/部件调用35U.S.C.§112第六段解释。更一般而言,任何要素的记载都明确地旨在不对该要素调用35U.S.C.§112第六段解释,除非具体记载了“用于…的单元”或“用于…的步骤”的措词。
具体实施方式
转到图1,描绘了示出多处理器系统(MPS)的一个实施例的框图。在所示的实施例中,MPS 10包括被耦合以彼此传送数据和指令的多个处理器元件(PE)和多个数据存储器路由器(DMR),其也可以被称为动态可配置通信器或动态可配置通信元件。如本文所使用的,PE也可以被称为PE节点,并且DMR也可以被称为DMR节点。
图2中示出了用于数据的双/四处理元件(PE)及其本地支持存储器(SM)的实施例的数据路径图。图2的左上角示出了用于数据的SM(数据RAM)的地址生成器,右上角示出了用于数据存储器路由器(DMR)的寄存器文件和一些控制寄存器。DMR是PE之间的主互连网络(PIN)中的节点。大MUX被用于将不同的数据源切换到主输入操作数寄存器A、B和C。另一个大MUX将操作数数据切换到算术流水线DP1和DP0的X和Y输入。第三个大MUX将算术流水线输出Z1和Z0切换到数据路径D,再返回到寄存器文件或数据RAM。数据RAM与相邻的PE共享,并且访问冲突由硬件仲裁。流水线的控制来自图3中的指令解码方框。
参考图4中的地址生成器,已经包括可编程算术单元以支持复杂的地址计算,该地址计算可以在地址实际使用之前开始若干操作。图4中所示的地址生成器包括三个整数加法单元(AGU0、AGU1和AGU2)、通用整数ALU(GALU)和用于“重复硬件和自动增量器”的箱(box)。寄存器支持具有多达八个索引的嵌套循环,这些索引具有独立的基址和步幅值。附加的通用寄存器支持GALU和重复单元。输出多路复用器支持将任何计算出的地址路由到数据RAM的A、B或D地址端口。
指令的条件执行由图2中心处所示的执行寄存器和谓词标志支持。使指令执行取决于执行状态和谓词是现有技术。如果所有指令每次都在特定数量的时钟周期后完成,那么条件执行可能不会带来任何好处。但是在许多情况下,关键指令可以在更少的时钟周期内完成,从而提供下一条指令或多条指令所需的结果。如果这些接下来的指令被设置为等待状态位,那么在这些情况下它们可以更早开始。谓词是条件指令可以更一般地使用的一些位,不仅用于等待,而且还用于选择和分支。一些指令还用于设置/清除谓词值。
在各个实施例中,PE可以支持将两种类型的指令(64位和128位)混合的程序。较短的指令支持汇编语言编程模型,如下面的图5左侧所示。这对于支持遗留代码和更简单的编译器是有用的。较长的128位指令支持图5右侧所示的“HyperOp”编程模型。需要更长的指令以更精确地控制双数据路径硬件并使其对于信号处理更高效,从而在给定功耗(Pdiss)的情况下提高性能,但是,编程需要更加复杂。
在图2的PE体系架构中,每个流水线内的详细操作调度是由程序编译定义的(与其它体系架构中的硬件辅助的调度相反)。但是,PE指令是为条件执行而设计的,其中执行条件取决于谓词和执行状态的注册值。在一些情况下,有六个谓词成对出现,在每条数据路径中有两对,并且在地址生成器中有一对。单个条件指令可以访问单个谓词对,但是在更多指令上可以访问所有谓词。在一些实施例中,条件执行可以被用于在双流水线或多处理器IC情境中优化PE性能。在各个实施例中,基于每个应用的算法流结构细节,条件执行可以提高平均速度/功率比(也称为“速度/Pdiss比率”)。
在各个实施例中,图1的实施例中包括的PE可以包括以下特征:
·两条数据路径,每条都能够(每个周期)进行:
о一/两个16×16乘法或一个32×16乘法
о一个/两个16b加/减或一个32b加/减
о40b桶(barrel)移位
о32b逻辑运算
·40b累加,两个40b累加器
о数据路径可以一起执行(每个周期):
о一个32×32乘法或乘法-累加
·一个32b浮点加/减/乘
о三个地址生成单元(AGU):
о三个负载:srcA、srcB、srcC
о两个负载和一个存储:srcA、srcB、dstD
о八个基址寄存器和八个索引寄存器
·GP寄存器文件
о32×16b寄存器,可作为16×32b寄存器或8×64b寄存器访问
·指令解码:
о64b常规汇编指令
о128b HyperOp指令
оIM在任何64b对齐下提供128b/周期
·重复循环硬件
о零开销循环
о支持三个嵌套级别,使用三个主索引寄存器
о四个二级基址/索引寄存器的自动递增
·循环缓冲区
о降低(一个或多个)内部循环期间的指令获取能力
设计中内置有重复循环硬件,以提供小代码区段的迭代。这种硬件可以比完成这些“开销”功能的软件指令的执行更高效地包括索引计数器、递增/递减逻辑、完成测试和分支函数。正确执行这个硬件移除执行开销功能的指令周期。可以使用REPEAT指令提供最多三层嵌套的零开销循环,该REPEAT指令直接对执行循环的硬件状态机进行编程,而无需用于开销功能的软件指令。加索引是自动管理的,使得在循环中通常不需要附加指令来管理操作数的地址计算。这允许在不增加循环中的指令开销的情况下访问和管理多个阵列,从而节省功率并提供更好的性能。在各个实施例中,重复循环硬件可以包括:
·八个基址寄存器B0..B7
ο在寻址模式下,B0产生的值为零
οB0被用作堆栈指针(SP相对寻址模式)
·八个索引寄存器I0..I7
ο在寻址模式下,I0产生的值为零
οI0可以被用作其它AGU算术的临时寄存器(在寄存器映射中称为GR0–不是I0)
·七个步幅寄存器S1..S7
οSn与In或Bn一起使用
·对3级重复循环的硬件支持
ο主循环索引为I1、I2、I3
·用于二级索引或基址寄存器的四个附加增量器
ο索引寄存器I4..I7
ο基址寄存器B4..B7
ο步幅增量寄存器S4..S7
ο起始地址/临时寄存器T4..T7
重复循环由REPEAT指令控制:
·REPEAT与上一代HyperX相似,但有以下改进:
·主循环索引I1、I2、I3
·用于选择最多4个基址/索引寄存器以在循环结束时被递增的选项:I4/B4、I5/B5、I6/B6、I7/B7。
·重复循环信息在定义循环指令的标签之前被加载到循环寄存器中。
重复缓冲区(Repeat Buffer)是用于保持包括重复循环的指令的指令FIFO。目的是减少最耗时的代码段期间的指令获取功耗。将指令分配给缓冲区是由HyperX工具在编译时确定的,而不是由用户决定的。此处描述仅是为了向用户提供基本理解。重复缓冲区的主要特征可以包括:
·这组指令由REPEAT指令及其标签确定。
·重复缓冲区的使用情况在编译时确定,并在REPEAT指令中通过标志指示。
·由于性能和功耗的原因,每个重复循环的第一条指令总是加载到重复缓冲区中。
·缓冲区可以保持64b或者128b条指令。
·最多12-64b条目可用。两个条目可用于128b指令。
·整个循环必须容纳在缓冲区中,以便用于缓冲除了循环的第一条指令以外的任何东西。
重复硬件使用主索引(I1-I3)和相关联的其它控制寄存器来控制循环操作。除主要硬件外,还有可以由重复硬件自动管理的另一个寄存器集合,以用于由AGU进行附加的地址计算。这些额外的寄存器是:
·B4-B7–四个附加的基址寄存器。
·I4-I7–四个附加的索引寄存器。
·S4-S7–四个附加的步幅寄存器。
·T4-T7–用于初始化基址或者索引寄存器的四个附加寄存器。
有四个附加的加法器可用于对这些寄存器执行加法。这些加法器可以通过指令(INIT和INCR)或通过REPEAT指令和硬件的自动递增特征来控制。通过使用本文档其它地方描述的AUTOINC寄存器,可以将每个主REPEAT操作绑定在一起,以便还对一个或多个辅助索引或基址寄存器执行地址加法。
每个加法器可以被用于对于通过针对任何主索引(I1-I3)的循环的每次迭代将给定的步幅(S4–S7)添加到相同编号的基址(B4–B7)或相同编号的索引(I4–I7)。此外,每当循环顶部指示导致用起始值加载主索引时,所指示的AUTOINC基址或索引将被加载类似编号的T寄存器(T4–T7)。这允许在没有循环中的附加指令开销的情况下访问和管理多个阵列,从而节省功率并提供更好的性能。
在各种实施例中,条件执行可以基于谓词标志。这些标志可以包括:
·P0-P3:
о由DP测试指令来设置
о根据DP定时设置
·GP0和GP1:
о由AGU测试指令来设置(示例在图6中示出)
о根据AGU定时设置
使用执行以下操作的TEST(测试)类指令设置谓词标志:
·执行TEST操作
·检查所得到的条件
·设置所选择的谓词标志
表1–AGU测试指令
表2–DP测试指令
条件指令在一对谓词标志上指定测试。例如:
·GP0,GP1-由AGU指令使用
·P0,P1-由DP指令使用,通常在DP0中
·P2,P3-由DP指令使用,通常在DP1中
图6中图示了测试谓词标志的示例。此外,图7中图示了DP条件指令、AGU条件指令和程序流程指令。
条件方框指令在图8中示出。图8中所示的指令的描述是实际操作的简化版本。STARTIF、ELSE、ENDIF指令可嵌套;因此存在保持嵌套的条件状态的条件堆栈。STARTIF将新的条件状态压入条件堆栈,ELSE切换当前条件状态(堆栈的顶部),ENDIF弹出条件堆栈。当前条件状态可以约束STARTIF、ELSE和ENDIF的操作。
Hyper-Op可以以各种方式执行。表3中说明了Hyper-Op执行的示例。
表3–Hyper-Op执行
GPn在下一周期准备就绪,因此,如果GTEST指令被用于设置这些位,那么不要求分支预测。但是,如果MOV正在从通用寄存器写入GPn位,那么它将被延迟并执行正常的分支预测。Pn在五个周期后准备就绪,因此要求分支预测。错误预测惩罚为5-n个周期,其中n是测试指令与分支之间的指令周期数。如果测试指令可以在代码中向前移动,那么可以增加n并减少错误预测惩罚,有可能减少为零(0)个周期。
因为谓词是使用显式指令设置它们来计算的,并且不由其它指令修改,所以常常有可能调度代码以大大减少与错误预测的分支相关联的任何惩罚。可以基于分支概率的行业标准启发法将分支预测设为静态,并在编译时确定。
Hyper-Op模式可以允许对指令进行编码,其中数据路径的每个单独部分由指令编码的一部分控制。这允许对硬件的并行性的更直接控制。128位Hyper-Op格式允许表4中所描绘的并行性。
表4–Hyper-Op并行性
关于HyperOp指令可以在DP0和DP1中并行执行存在一些限制。如果两条HyperOp指令具有相同的时延,那么它们可以并行执行。根据定义,DP0和DP1时隙始终可以并行执行完全相同的指令(等效于SIMD)。有一些例外。当在这些计算中使用来自两条数据路径的硬件时,两个DP时隙中只有单条FP指令可以运行。注意的是,虽然支持执行同一指令的SIMD形式,但使用模型在允许并行执行具有相同时延的任何两条指令时灵活得多。
地址指令在FD流水线阶段期间发生,需要1个周期,并且结果可在下一周期中供所有加载/存储指令使用。在各种实施例中,自动递增和重复包括重新加载以减少开销。
每个DMR可以具有直接存储器访问(DMA)引擎,以同时支持多点源和多点目的地。此外,每个DMA引擎的完整状态可以被捕获并被保存在存储器中;稍后可以检索这个状态信息以在它被中断的地方重新启动DMA操作。保存DMA配置的状态的能力要求PE读取多达11个DMA寄存器,以便获得DMA的整个状态。这些寄存器中的许多寄存器是出于捕获状态的目的而暴露给外部访问的内部DMA寄存器。
为了节省寄存器空间,DMA可以以称为描述符的紧凑形式将其状态保存到存储器。PE将指定这个描述符的起始位置,并且DMA和经修改的推送引擎可以将寄存器数据从指定的存储器地址开始写入存储器。推送引擎是DMA引擎的用于将路由消息从一个目的地DMR扩展到第二目的地DMR的一部分。
推送引擎已经具有状态机,该状态机逐步访问DMA中的每个寄存器以便对其进行编程。这种相同的机制也可以被用于读取寄存器。读取的数据然后将需要传输到相邻的端口内模块中。关键环节将是把任何DMA写停顿与推送引擎捆绑起来。这可以通过门控(gate)推送引擎的忙输入信号上的DMA停顿来完成。
DMA唤醒可以被用于向PE发信号通知描述符已保存。此时,PE可以自由交换任务。一旦新任务已经完成,PE可以指向已保存的描述符,并且DMA处理将恢复。注意的是,在任务交换之间将需要正确配置端口内和端口外路由器。
累加器的存储具有可选的预定的移位量的后右移(post-shift right)。在各种实施例中,以下移位量是:
·1:用于求平均
·8:
·16:用于存储ACCH=ACC[31:16]
·15:
这些值存储在用作间接移位量的三个移位字段中。这三个字段在HyperOp语法中表示为SHR1、SHR2和SHR3,并引用PE_CONFIG1寄存器中的移位值字段SHIFT_CTL1-3。
存在两种类型的累加器对:来自每个DP的一个累加器(ACC2_ACC0、ACC2_ACC1、ACC3_ACC0、ACC3_ACC1)和累加器的两半,被视为SIMD 16b数据(ACC0H_ACC0L、ACC1H_ACC1L、ACC2H_ACC2L、ACC3H_ACC3L)。虽然位位置(bit position)的数量相同,但具有累加器对的后移的存储对于累加器对的每个部分执行独立的移位。在以下描述中,“tmp”标识用于尝试阐明语义,而不是实际的硬件寄存器。
表5–累加器对
移位也可以在分开的存储和加载中进行。更多的移位选项一般会增加硬件功耗(Pdiss)。在各种实施例中,可以通过为给定的Pdiss预算选择最需要的移位选项来指导移位硬件设计。可以通过分析应用代码和PE体系架构来确定最需要的移位选项。在一些实施例中,例如在存储器是字寻址而不是字节寻址的情况下,最需要的可能是将字节与字边界对齐/从字边界对齐的移位。
在一些实施例中,可以采用附加的辅助计算单元来提高性能。表6中描绘了可能的辅助计算单元的列表。
表6–辅助计算机单元
HyperOp指令–在程序编译处理中使用静态调度来启用对双数据路径的单独控制。执行线程暴露给编译器,以使其静态调度所有操作。相比之下,用于现代GPP体系架构的编译器将相关指令一起放到机器代码中,但是操作调度的精细细节是由(功耗)硬件完成的。静态调度节省大量的运行时Pdiss。
在数据传输期间,系统中的缺陷可能导致所传输的信号的失真或降级。所传输的信号的这种失真或降级可能导致数据位的值在接收器电路处不正确。为了补救这种影响,在一些实施例中,已经包括用于支持前向纠错(FEC)编码和解码的指令。FEC可以用于各种数字通信以及其它领域,诸如数字记录和从存储介质进行回放。基本构思是获取任意输入数据的块,并以使得能够在接收器或回放电子器件处进行位错误校正的方式用附加的奇偶校验位对它进行编码。数据和奇偶校验位的编码块称为FEC帧。FEC帧可以由调制器进一步处理,然后传输到介质(有线、无线或存储介质)中。
在接收器处,信号由天线或换能器拾取,由A/D转换器(ADC)放大、解调和采样。介质中的信号可能已获得干扰、衰落和回声;并且接收器可能已经添加了噪声。ADC的输出是一系列数字样本。存在多种方式来获取样本的序列、获得同步并将它们格式化为FEC帧;但是这些与FEC计算关系不大,因此在此不再描述。格式化的FEC帧中的每个位位置具有可以被称为软位的数字值,由数字系统中的整数的实位表示。
FEC解码是以下处理:获取格式化的FEC帧中的软位、计算位误差校正、应用它们,并输出经校正的FEC帧。FEC解码算法的目标是,在知道奇偶校验位生成方式的情况下,输出最可能的正确数据帧。为了使FEC正常工作,特定的FEC解码方案(用于纠错的奇偶校验位)必须与FEC编码方案(奇偶校验位生成)相匹配。
通过汉明码、BCH码和Reed-Solomon码实现了FEC的早期成功。卷积码以及卷积码与其它码的串行级联获得了进一步的成功。在解码方面,目标是给定具有噪声引起的误差的接收到的软位,找到最可能正确的数据块。这可以通过单遍算法(Viterbi等)或迭代算法(Turbo等)来实现。
FEC计算涉及取决于从采样器观察到的值序列来比较对于二进制位的值的两个选项的可能正确性。一系列波动值可以被视为随机变量,因此可以应用概率数学。主要关注点是在给定FEC帧中的软位的值的情况下,特定的所传输数据位是1还是-1。在对传输的数据做出硬决策之前,可以计算出大量的软决策。可以通过比较概率来计算这些软决策,并且进行这种决策并且包括奇偶校验位的流行方式是计算条件概率的比率,称为似然比(LR)。LR的对数(LLR)特别令人关注,因为乘法和除法被变换成加法和减法,在PE中,这将更快地计算,并且不易发生上溢和下溢。因此,可以使用以整数存储的LLR的值来计算FEC解码。
乘积的对数概率总和也称为MAX*运算符。在各种实施例中,MAX*运算符可以类似于带偏移指令的加-比较-选择(ACS)的方式执行。它提供了针对指数概率的对数域数学运算的乘积和类型运算。该符号形式常常写为:Max*(x0+y0,x1+y1)。
在各种实施例中,PE实现如下功能:
Z[15:0]=MAX((X[15:0]+Y[15:0]),(X[31:16]+Y[31:16]))+TLUoffset
通过稍微修改操作数用法以提供对turbo操作有用的较高吞吐量形式,可以实现双对数概率乘积和指令。这在单条数据路径中提供了形式为Max*(x0+y0,x1+y1):Max*(x0+y0,x1+y1)的两个结果。
在各种实施例中,PE实现如下功能:
Z[31:16]=MAX((X[31:16]+Y[15:0]),(X[15:0]+Y[31:16]))+TLUoffset
Z[15:0]=MAX((X[15:0]+Y[15:0]),(X[31:16]+Y[31:16]))+TLUoffset
MAX*运算的另一种形式,其中每条数据路径以以下形式产生32位:
Max*(0,x1+y1)-Max*(x1,y1):Max*(0,x0+y0)-Max*(x0,y0)
在各种实施例中,PE实现如下功能:
Z[31:16]=MAX(0,(X[31:16]+Y[31:16]))+TLUoffset–(MAX(X[31:16],Y[31:16]))+TLUoffset)
Z[15:0]=MAX(0,(X[15:0]+Y[15:0]))+TLUoffset–(MAX(X[15:0],Y[15:0])+TLUoffset)
另一条指令可以利用每条数据路径中两个累加器中的值对两个操作数提供双MAX*运算。它像MAXAC指令一样,提供了通过使用累加器来获取大数字组的MAX*结果的快速方式。这两个16位结果进入两个累加器。如果使用两条数据路径,那么当输入数据完成时,这四个累加器需要对这些值运行MAX*运算以获得最终结果。象征性地,等式用符号显示为:
ACCn+1=Max*(ACCn+1,Max*(x1,y1)):ACCn=Max*(ACCn,Max*(x0,y0))
乘积的对数概率和的累加形式的两倍可以使用以下方法实现:
ACCn+1=Max*(ACCn+1,x0+y0):ACCn=Max*(ACCn,x1+y1)
注意的是,用于LP指令的额外硬件的自然结果将“0”索引数据交换为高ACC,而将“1”索引数据交换为低ACC。如果这可以在数据路径中容易地交换,则那将是优选的。在各种实施例中,PE实现如下功能:
ACCn+1=MAX(ACCn+1,(X[15:0]+Y[15:0]))+TLUoffset
ACCn=MAX(ACCn,(X[31:16]+Y[31:16]))+TLUoffset
还有可能在对数域中生成商的两倍和。与以前示出的方式相似的方式,使用减法而不是加法来提供:
ACCn+1=Max*(ACCn+1,x0-y0):ACCn=Max*(ACCn,x1-y1)
在各种实施例中,PE实现如下功能:
ACCn+1=MAX(ACCn+1,(X[15:0]-Y[15:0]))+TLUoffset
ACCn=MAX(ACCn,(X[31:16]-Y[31:16]))+TLUoffset
为了实现上面引用的指令,可以采用专用逻辑电路,诸如图9-图14中描绘的专用逻辑电路。在一些情况下,可以基于指令的类型来选择性地启用逻辑电路,从而允许使用最少数量的逻辑电路来执行多条指令。
MPS的主互连网络(PIN)被设计用于在PE上运行的应用之内和之间以及与芯片I/O端口进行通信的高带宽、低时延的数据运输。互连网络(IN)一般可以被描述为节点的集合,节点之间具有连接链路。大多数PIN在一个阶段中不完全具备点对点能力,因为这将需要太多的导线。相反,它们是多级的,在网络的每个节点处都有路由器,并且节点之间通过链路相互连接。可以通过PIN路由消息,该PIN强制执行用于从源节点到目的地节点的启动、暂停和递送消息的规则。如果消息保持开放,那么可以无限期地将其用作数据管道。但是,由于存在多个阶段,现有消息可能通过占用新消息指定的链路或目的地来阻止新消息的设置,因此无法保证消息递送。在文献中已经出现了对此的一些缓解措施,诸如动态切入以及“跳过”拥塞的长路由。但是,我们的方法是添加互连层,每个层具有另一个链路集合。利用每个附加层,PIN节点路由器被扩展以允许消息从一层跨越到另一层。
在大型MPS中,需要在不影响PIN的操作效率的情况下管理系统。这导致次级互连网络(SIN)的发展,在一些实施例中,次级互连网络可以具有比PIN更低的带宽但是可以保证消息递送。这样的互连网络在图15中示出。如图所示,消息总线1500包括以固定连接方式彼此耦合的多个消息总线节点。消息总线提供了适度的带宽、可变的时延、到达芯片内的每个可访问寄存器和存储器位置(包括PE和DMR位置)的有保证的递送方法,以及I/O控制器(诸如I/O控制器1502)。
消息总线可以被用于在核心阵列架构外部引导、调试和加载数据,以及通过MPS设备提供对几乎所有可寻址位置的访问。例如,消息总线可以访问所有PE/DMR数据和指令存储器位置、内部PE寄存器、DMR寄存器(包括寄存器总线位置)以及附接到I/O总线的I/O外设。
在一些实施例中,消息总线可以为多个同时的主设备(诸如PE、开发访问端口(DAP)1503、引导控制1504和I/O处理器)提供支持。根据源与目的地的相对位置,使用自动路由在消息总线上路由消息。使用相对位置,回复以类似于请求的方式自动路由。错误回复路由利用到消息中维护的源的运行位置。
在一些实施例中,消息总线可以包括多于一个独立的消息结构。在独立结构上的消息尝试访问同一目的地的情况下会出现这种情况;对此,自动仲裁是有用的。仲裁结果可以通过诸如优先级配置之类的简单方案来确定。消息总线优先级配置可以允许针对对DMR地址的访问建立两个唯一的优先级(最低或最高),而所有PE地址访问都在PE中具有最低优先级。
消息总线可以支持多个端点消息组,以允许阵列的子集响应单个消息。可以在单个节点上设置多个组成员身份。在各种实施例中,广播能力可以被用于到达所有节点,并且许多独立的组可以可用于分配。
在各种实施例中,消息总线可以允许多芯片操作。如果实现了多管芯结构,那么目的地的相对地址可以在芯片之间桥接。在一些情况下,消息格式可以允许在X和Y方向上多达256个MBN节点。在其它实施例中,消息可以被扩展以支持附加节点。通过采用使用表(例如,表1807)的中继技术,可以支持任何合适数量的消息节点。
消息总线具有允许设备内的任何处理器到达设备中的每个可寻址位置的能力。这个能力实现了多种可能性,包括处理器之间的消息传递、随着算法进展而更新值表、管理远程I/O控制器的行为、收集有关操作的统计信息、管理单元的安全性以及与处理器之间的非时间关键信息的一般通信。
注意的是,消息总线可以缺少某些特征,这些特征使其不期望被用作PIN路由架构的额外层。首先,带宽要低得多。例如,在一些实施方式中,消息总线可以比PIN慢多达10倍,而在其它实施方式中,消息总线可以仅比PIN慢两倍。其次,即使对于相同的源和目的地对之间的消息,数据递送的时延也相差很大。没有编程的路由设置和拆卸的概念,其中在该架构中,为消息设置了已知长度的路由,并且每次使用该路由时,都要遍历相同的导线以连接两个端点,从而导致数据递送的可预测的时延。对于消息总线,利用由架构硬件确定的路由将相对短的消息从源定向到目的地。如果消息在此途中的某个点被阻塞,那么它将等待另一条阻塞消息完成,然后它将继续。通过一次在架构上只有一条消息(并且目的地没有优先级延迟),消息的数据递送可以表现出可预测的时延。但是,架构上的附加消息业务可能中断数据递送,并可以改变每个后续消息所采用的路由。因此,消息总线可能不适合分发同步的消息,因为不能保证到达时间。
消息总线对于向MPS中的任何目的地/从MPS的任何目的地功率高效地、有保证地递送较低带宽的短消息是有用的。这些将消耗PIN架构中的大量资源,可能在延长的时间内占用链接而几乎没有数据通过,或者要求不断设置和断开链路以防止它们阻塞系统。对于只有靠近I/O端口的那些处理器才可以控制该端口以及与它附接的任何外围设备的MPS,消息总线还简化了芯片I/O的远程处理器管理。
虽然不是很适合定时关键的应用,但是消息总线仍然具有显著的可用性能。总线本身每个时钟移动一个字,并且时钟可以与功能核心时钟相同,功能核心时钟的目标频率可以是1500MHz。这导致节点之间有效的1500M字/秒移动速率。由于消息总线被设计为通过总线推送数据和地址,然后将总线尽可能快地释放给其它消息,因此对于递送到寄存器的每个字,定义路由、识别字应当在何处读取或写入以及如何将数据或状态返回到发出请求的节点需要固有的开销。这些非数据字降低了针对单个事务的总线吞吐量。为了限制消息结构开销的影响,可以在一条消息中传送任意数量的字,唯一的限制是它们必须从单个起始地址开始连续。
在正常情况下,可以访问MPS设备内的任何正常可寻址的位置。这意味着可以在被访问的特定地址的参数范围内写入或读取具有正常模式地址的任何寄存器、存储器位置或外围设备。对于一些PE内部寄存器,可以在PE运行时读取PE的内容,但是,所包含的值表示发生读取时的时间快照,并且仅在请求该值时才更新。此外,在生成请求、消息总线从PE或DMR读取值以及将结果传递回请求者之间存在时间间隔,这取决于系统和消息总线负载,可以表示针对结果的大量等待时间。对于在几乎每个时钟上进行操作都需要的某些PE内部寄存器的访问可能存在过多等待,从而有效地使请求停顿,直到PE在断点处停止为止。可能会在代码中出现间隙,从而允许读取这些寄存器,但是PE需要多个寄存器才能操作,并且消息总线消息尝试以默认的低优先级读取这些寄存器一般会导致延长的消息停顿。在DMR中,访问的优先级是可编程的,因此可以使该请求一直等到针对该地址区域没有其它请求挂起,或者立即访问该地址并阻塞所有其它尝试访问该同一区域的请求。
正常模式地址位置可以包括:
·对任何DMR数据存储器位置的读/写访问
·对任何DMR存储器映射的寄存器的读/写访问
·对任何PE指令存储器位置的读/写访问
·对PE状态和控制寄存器的读/写访问
·对时钟控制寄存器的读/写访问
·断点控制,硬件中断插入除外
·PE唤醒控制
·奇偶控制
·PE消息传递
·PE程序员注册访问
·IO总线上的存储器和外围设备
当程序正在执行时在指令存储器上进行操作时,必须格外小心。有可能将指令块写入存储器,并且由于执行了当前正在运行的程序,因此可以执行一部分新代码,而没有首先完全替换该代码块,从而导致不可预测的操作。MPS可以可被配置为在每次写入存储器时包括奇偶校验位,并在每次读取操作时检查奇偶校验,如果检测到错误就跳转到故障条件。但是,奇偶校验比没有校验验时消耗更多的功率。MPS中的奇偶校验可以被认为是在极端环境中使用的一种操作模式,这意味着有和没有奇偶校验是存储器的不同操作模式,并且在运行使用该存储器的应用时不建议在这些模式之间进行更改。
在所有情况下都有可能访问时钟控制,但是,并非所有时间都建议更改时钟寄存器的状态。在系统可运行时,尤其是当在多个处理器之间共享的数据集上运行时,将在本地对时钟控制进行改变,而无需考虑其它节点,也可以访问这些节点来更新那些位置的时钟控制。如果在算法运行时尝试更改时钟配置,那么将有可能丢失访问数据的定时。
当PE在断点处停止时,可以对消息总线进行附加的访问。当PE暂停时,程序计数器已停止,并且有可能更新硬件断点。所有正常模式能力均可用,另外硬件断点插入能力是可用的。
由于断点的实施方式,在系统操作时改变值可能导致不可预测的结果,包括错过的中断和意外的中断。因此,在程序执行停止时,对断点的改变将最可靠地生效。
当PE在断点处停止时,内部寄存器访问时间将得到改善,并且对于停止的处理器,返回的值将保持准确。PE寄存器访问的仲裁虽然没有更改,但没有活动的更高优先级的请求者,从而使调试系统能够更快地访问PE内部状态寄存器。类似地,在DMR上,在DMA操作完成之后,没有对地址的其它竞争性的访问,甚至最低优先级的请求也将立即得到服务。
在引导期间,消息总线可以用于首次加载处理器、配置时钟和安全性以及将PE从复位释放到启动操作。对于引导操作,预计消息总线上的大多数事务都将来自引导处理器,并且目的地遍及整个设备。预计长突发操作将很普遍,从而减少由于地址而导致的程序加载开销。
引导控制器的一个后来的用途是实现动态单元,其中可以将新的单元加载到已经运行的系统中。如本文所使用和定义的,单元是指派给一个或多个PE和一个或多个DMR的应用的一部分。注意的是,在单元中包括至少一个DMR,以用作该单元中包括的相关PE的指令存储器。在这种情况下,消息总线上可能会有更多活动,但是同样,由于已经在设备的外围,因此仲裁被简化以将新的单元传输到阵列中。通过利用更大的块传送,可以最小化加载动态单元的时间。与初始加载不同,加载替换单元时,在某个时候可能会出现争用。当实现动态单元加载时应考虑突发的总长度,因为它将可能占用一条路径很长时间,并可能导致其它消息的递送延迟。
系统内调试器的一个常见问题是调试工具与系统功能操作的潜在交互。在某些情况下,当进行调试时,它可能导致功能系统的行为发生改变,或者更有问题的是在进行调试时校正或改变错误。虽然必须被仲裁的访问永远无法完全除去功能系统与并行调试工具之间的交互,但是如果将调试操作映射到单独的消息总线实例中,那么这可以除去最终数据访问仲裁以外的所有交互。通过仔细选择调试以使其具有最低优先级,调试将仅在不以其它方式使用系统的情况下与系统交互,并且不会破坏从功能系统生成的功能访问。在各种实施例中,优先级可以在低和高之间改变。
当处理器处于断点时,没有PE发起的请求递送到DMR。这并不意味着DMR中不存在任何请求,因为在PE停止的同时可以继续处理DMA请求。这将导致分裂状态,其中PE请求被立即处理,因为将不存在其它数据请求;以及DMR状态,其中DMA事务将继续领先于调试请求。从逻辑上讲,这维持了调试不应当干扰操作以及针对非断点处理器的想法。
在深入研究总线本身的细节之前,首先了解消息总线上下文中消息的含义是有帮助的。从最一般的意义上讲,消息需要将消息递送到预期目的地的手段、要递送的数据以及使响应返回到起始点的手段。详细地说,消息总线通过其网络传递几种独特的不同消息,现在将对其进行介绍。
通过对消息总线节点内的配置寄存器进行编程来构造和发送消息。对于消息总线的两个通道(A和B),存在这些寄存器的两个集合。这些寄存器的编程将在下面讨论。有几种可用的消息格式。这些可以被分类如下:
·点对点消息–允许节点从任何其它单个节点读取或写入信息。
·多点消息–允许用单条消息读取或写入一组端点节点。
·回复消息–不是由用户直接生成的。被消息总线用于提供对其它消息的确认。
·安全配置消息–用于配置芯片的安全性的一种消息形式。
为了发送消息,程序必须将消息的基本部件编程到配置寄存器中,然后发信号通知要被发送的消息。编程部件在图16中列出。
STATUS寄存器被用于观察已发送消息的状态。除了这些直接控制正在发送的消息的寄存器之外,还有稍后将描述的一些其他配置寄存器,这些配置寄存器被用于控制消息总线系统的其它方面。注意的是,在发送下一条消息之前,仅需要更新需要被修改以定义新消息的寄存器。例如,为了将同一条消息发送到五个位置,仅仅更新DELTA_OFFSET中的路由信息,然后使用GEN_MSG重新发送该消息。消息格式将在下面更全面地描述。
最基本的消息是点对点消息,这可以由任何主设备用来到达芯片中任何位置。顾名思义,这个消息以单个位置为目标,并从单个位置发出。两个节点之间传递的信息只能被这两个节点在消息总线外部看到,因为所有中间位置都没有窥探传递的数据的手段,在这一点上,所有点对点消息都是安全的。可以使用多种选项来构造该消息,这平衡这种消息类型的能力和开销。
从设备一次只能接收和处理一条消息,因此无需知道哪个节点正在请求数据访问,只需要返回主设备的路由,使得回复可以通过。请求消息的一部分包括用于响应的返回路径,这对于完成点对点消息的往返是必需的。
点对点消息可以是读取请求或者写入请求,其中读取请求生成包含所请求的读取数据的回复消息,而写入请求生成指示执行写入的成功或失败的响应。就像读取或写入请求消息平衡能力和性能一样,回复消息也使开销最小化,但以牺牲主设备处的一些灵活性为代价。
对每个点对点读取或写入消息有一个回复消息,并且在包括多个数据字的情况下,将包括多个回复字,以便发出的每个地址都有返回的回复,该回复是写入的状态或者是读取的数据。消息主体中的数据将按照与发送的请求相同的次序返回。为了确保在返回到请求节点时及时从总线上删除数据,在MBN中对存储响应的地址进行编程。由于一次只能存储一个回复位置,因此如果期望返回多于1个字,那么每个MBN一次可以具有一个未完成的事务,并使用自动存储器加载机制。如果处理器从节点中提取所有数据,那么未完成的请求的数量可以与处理器期望的一样多。
相同的回复消息格式被用于所有多个端点回复,但是,对于这些多个端点回复,将单个回复字插入到有效载荷中。例如,在读取消息中,是所请求的地址的值,或者如果尝试对安全区域进行无效读取,那么是安全错误控制字。可替代地,在写入消息中,回复可以包括指示是否执行了请求写入的通过或失败值。
由多于一个活动节点接收多端点写入消息。这个消息对于单元内的通信是有用的,其中可以通过消息总线配置地址写入指示该单元对哪些消息作出反应。安全性可以防止发生写入操作,并且针对整个消息返回单个写入状态,而不是单独的字状态,因为这可能造成阻塞。回复地址被记录为距请求节点的增量偏移量,这在通过阵列分发多播消息时被计算。这将导致许多路径被用于将回复消息返回给主设备,其中许多路径不遵循与请求相同的路径。多端点消息的一种情况是广播消息,它一次寻址所有节点。
有时从消息总线节点集合中读取相同地址的功能是有用的。对于这些情况,可以使用多端点读取。该操作起作用以使得只有与多节点地址匹配的节点才能响应。与其它多个端点消息一样,回复路径由到达回复节点的途中计算的增量偏移量确定。回复将遵循返回请求节点的多个路由,其中这些路由中的许多路由与从源到目的地的路径不同。也存在所有节点都响应并返回一个字的情况。
在每个节点处,维持安全配置,该安全配置描述在该节点处允许的操作。设置这个配置必须是安全动作,并且通过作为引导操作的一部分选择的IO处理器来实现。这个消息被用于更新安全配置,并且可以由系统中被选的处理器生成。这个消息的格式是唯一的,并且不能通过数据写入来构造,因此只有已识别出的安全处理器才能生成这个消息。导致生成安全配置消息的底层安全决策超出了消息总线的范围,因为唯一的考虑是消息的递送。禁止未被选择为安全主设备的节点发送安全消息,这类似于可以禁用主设备以实现调试与功能网络的强制分离,但是在这种情况下,仅限制一种类型消息,而不是像网络隔离中的情况那样限制所有消息生成。
消息总线可以被实现为如图15中所示的二维网状网络。此外,有两个完全相同的并行操作的网络,每个节点内有一个重组点。所示的每条链路都包括输入端口和输出端口,对于两个网络重复,这两个网络都允许在节点的同一侧同时进行传输和接收,在该节点的任一侧总共多达四个消息是活动的。在网络之一的最大使用情况下,所有四个输入端口和四个输出端口均可以被用于在节点上运输消息。在最大用例操作中,对路由的唯一限制是不允许U形转弯路线,但其它三个输出的路由的任何其它组合是可接受的。虽然每个节点处都存在两个网络,但它们完全彼此独立地操作,两个网络之间不可能进行路由,从而使得有可能在一个网络中发生阻塞而另一个网络处于空闲状态。
与其它拓扑相比,实现为网状网络具有多个优点,最大的优点是能够绕过障碍物。由于消息总线是节点之间的动态路由网络,因此在两个节点之间的直接路径上总有可能遇到阻塞,从已被其它消息使用的路由到被断电以降低总体芯片功耗的节点。网状结构提供了到达目的地的选项,在大多数情况下,有将消息移到更靠近端点的位置的两个逻辑方向,这意味着即使阻塞了一个靠近端点的方向,一般也存在另一个方向。仍然可能有无法路由的消息,但这是由于所请求的端点之间完全缺少路径,诸如位于断电区域中的端点,这是系统的故障,而不一定是路由消息的失败。
网状网络的另一个优点是减少了消息行进距离。对于大量节点,有几种潜在的连接方法:串行链、多个环路、面向行或列的总线以及网。在串行链中,主要缺点是消息可能必须在两点之间行进很长的距离。此外,由于通常只有一条路径可通过芯片,因此网络中可以共存的消息的数量一般会减少。串行链访问时序可以是可变的并且难以设计出足够的时序余量。
大型串行链的另一个问题是电力,并且如果任何节点是访问不相关节点所需的路径的一部分,那么无法关闭任意区域的电力。对单个串行总线的改进是多个较小的环路,但是这导致需要在环路之间移动的集中式问题,并且如果在环路间连接点发生冲突,那么会产生明显的延迟。多个环路在功率优化方面也仍然存在问题,因为整个环路都需要加电或断电,这会导致相当大的功率步长。同时访问的数量增加,但在数据必须在独立循环之间移动这一点上仍然受到限制。
面向多总线的布置具有类似多环路构造的类似问题,即,在各个总线区段之间移动所需的点最终成为整个互连网络的阻塞点。总线布置确实允许一次发送多个消息的更容易的手段,但是,由于需要在不同的总线区段之间进行仲裁的复杂性,降低了在一个总线区段上获取消息的容易性。取决于总线间互连的位置,这可能迫使设备的某个区域保持开启状态,这只是出于能够在总线区段之间移动数据的原因。由于I/O遍布在设备的外围,因此没有理想的位置放置总线间连接器,因为数据可能对设备的任何一侧都具有亲和力。这导致一些布局具有相对较高的功率效率,而由于需要大量其它未使用的节点开启才能与其它总线区段互连,使得其它布局的性能不佳。
网格还支持许多并行运行的消息。由于路由没有通用的阻塞点,因此许多消息可以同时在网络中移动。除非通过显著的阻塞来限制路由以同一方向合并并且通过单个节点,否则无论何时发送消息,每条消息都可以进行而通常不会遇到另一条消息。如果每个处理器一次支持一条消息,那么并发的长持续时间消息的上限等于系统中的处理器数量。但是,拥塞可能降低实际上限,这取决于递送并行消息并返回对消息的回复所需的路由。
由于消息总线结构内的所有节点都充当路由的主设备、从设备或中间点,因此本节将大体详细描述每个节点的这些基本功能。确切的接口细节在各个实施例中可以有所不同,其中该描述提供了消息总线节点部件的功能概述。消息总线节点到系统的一般接口在图17中示出。节点附接到IO总线的方式有所不同,因为不要求PE链路,但是底层操作相似。
如图所示,消息总线节点1701被配置为接收包括有效载荷和路由信息的第一消息,基于多处理器阵列的操作信息和路由信息选择多个消息节点中的不同消息节点。如本文所使用的,操作信息是与多处理器阵列的过去或当前性能相关的信息。例如,操作信息可以包括资源可用性、网络性能启发法、消息总线的拥塞信息等。在一些情况下,操作信息可以是关于多处理器阵列的性能的当前信息,而在其它情况下,操作信息可以包括关于多处理器阵列的性能的历史信息。注意的是,在一些实施例中,消息总线节点可以在操作期间从多处理器阵列接收操作信息。
消息总线节点1701还被配置为:基于不同的消息节点,修改第一消息的路由信息以生成第二消息,并将第二消息转发到不同的消息节点。如本文所使用的,路由信息是指定消息的绝对或相对目的地的信息。当指定相对目的地时,从起始节点开始指定多个节点和相应方向,以便确定消息的目的地。可替代地,当指定绝对目的地时,将表示特定节点的标识符指定为目的地。然后,每个消息节点可以确定转发消息的最佳可能节点,以便将消息传播到指定的绝对目的地。如以下更详细描述的,路由信息可以包括偏移量,该偏移量指定消息节点的数量以及消息将在哪个方向上被发送。
如本文所使用和描述的,消息是包括有效载荷(即,消息的内容)以及路由信息的数据的集合。此外,消息可以包括操作信息或操作信息的任何合适的部分。
可以根据各种设计样式来实现消息总线节点(或简称为“消息节点”)。在图18中描绘了特定的实施例。如图所示,消息总线节点1800包括路由器1801、路由器1802、网络处理器1803、网络处理器1804、仲裁器1805、配置电路1806和表1807。
消息总线节点1800通过仲裁器1805附接到PE和DMR,并且在IO总线的情况下,仲裁器1805是IO总线和消息总线之间的桥接器。从本地处理器进入消息总线节点1800的访问有三个目标:配置寄存器(位于配置电路1806中)以及网络处理器1803和1804。此外,网络处理器1803和1804可以正在生成对本地节点的访问,并且从消息总线节点1800返回到DMR或PE只有一条访问路径是可能的。基于节点的配置、访问的类型、远程请求处理、正在生成的本地请求或正在存储的回复,仲裁器1805将网络处理器1803和1804之一连接到PE和DMR接口。此外,配置电路1806可以被配置为存储操作信息。
由于仅请求生成容易从网络侧停顿,因此可以立即生成对DMR或PE的所有写入。在请求读取以便填充用于写入请求的数据或者响应于正在处理的远程访问的情况下,仲裁器1805必须等待一个请求完成,然后再切换到另一个网络处理器。如果DMR或PE已使请求停顿,那么可以将当前请求删除并切换到另一个网络处理器(如果该访问被配置为较高的优先级)。由于PE或DMR已经使访问停顿,因此没有正在运行的数据会因将访问切换到另一个处理器而受到影响。
仲裁器1805还被配置为基于所请求的地址而将寄存器总线业务转向到适当的网络处理器或配置寄存器。在当前正在使用配置寄存器进行远程访问的情况下,仲裁器1805还将往回在寄存器总线接口上生成停顿,因为这是消息总线节点1800中本地节点与远程访问之间的唯一竞争点。
网络处理器1804和1805负责所附接的PE/DMR或IO总线与消息总线网络的其余部分之间的交互。网络处理器1803和1804履行三个职责,第一个是将请求消息生成到网络中。第二个功能是处理从网络接收的消息(包括修改消息的路由信息),并访问消息中请求的本地地址,以进行写入或读取。最后一个功能是处理响应于请求消息而接收到的回复消息。
网络处理器(例如,网络处理器1803)的第一个功能是将新消息生成到网络中。这可以通过以下两种方式之一来实现:第一,对于单字消息,PE可以写入到要访问的远程节点或多个端点组的节点增量、要访问的远程节点的地址,以及在写入的情况下还对写入数据进行写入。然后,网络处理器生成消息结构,并将消息发送到路由器以进行递送。对于更长的消息(意味着两个或更多个字长),PE将到远程节点的节点增量、远程节点的起始地址、远程节点的结束地址以及可以找到写入数据的DMR中的本地地址写入,或者在读取的情况下还写入将存储返回的数据的位置。一旦配置了这些值,网络处理器就会生成到路由器的消息结构,并生成对DMR的读取请求以获取必要的写入数据。
网络处理器的第二个功能是服务于从网络接收到的消息,并提供响应。在这种情况下,将对到达的消息结构进行解构,并存储要访问的第一个和最后一个地址。在读取的情况下,将从第一个地址开始生成对DMR的读取请求,并一直持续直到到达最后一个地址为止。执行正在访问的区域不受安全保护的检查,并返回错误值,而不是读取字的数据,该数据在当前配置中不可访问。在写入的情况下,网络处理器将一直等到第一个数据字到达,然后它将为接收到的每个字生成对DMR的写入。写入还会执行附加的检查,以验证该地址是否是安全配置地址,接收到的消息也是安全消息类型。
网络处理器的第三个功能是接收对请求的回复,并将它们存储回去以供处理器读取。这个步骤有两个选项,第一个是针对单字回复,处理器可以直接从消息总线节点1800的回复寄存器中读取。为了防止多字消息在网络中停顿,当返回多于一个字时,网络处理器会将它们存储回DMR存储器。当生成读取请求时,还在消息总线节点1800中配置回复存储地址范围。网络处理器使用预编程的地址范围来往回存储回复,并丢弃消息中可能已作为安全测量返回的任何附加数据。
由于存在三个功能竞争单个资源,因此网络处理器还必须确定在任何给定时间采取哪个动作。实际上,这三个功能中只有两个会同时出现,因为只有回复或请求服务可以在网络处理器的路由器侧处于活动状态,而请求生成可以在PE/DMR侧处于活动状态。仲裁的主要问题是确保不形成死锁条件,而死锁的预防比死锁潜在操作下系统的性能更为重要。由于系统可以计划消息在系统中如何流动,因此从以下三个选项之一中选择仲裁方案。第一个方案是先进先出。在这种模式下,节点将处理来自网络或者处理器侧的到达的第一个请求,并在考虑任何其它消息之前处理该消息直至完成。这是保持完整网络性能的最简单方法,但是容易出现死锁。第二种方法是轮询服务,它将在两个访问请求之间交替进行访问。遗憾的是,由于DMR接口的流水线深度,这有可能将访问速率降低到2/5的速度。实际上发生的是返回的写操作、或者远程读取或写入将占用一个周期,下一个周期将处理写入数据的本地写入消息读取,然后接口必须等待这两次访问完成。通过等待,避免了与DMR流水线交互的网络停顿,其代价是明显降低了性能。在这两者之间的一种手段是确定进入MBN的消息和离开MBN的消息不在相同的节点之间。虽然可能发生多节点死锁,但是系统必须主动创建这种情况,硬件将无法防范这种情况。通过检查数据来自何处,并与数据去向进行比较,可以确定两个竞争的消息是否可能产生死锁,并且在这种情况下可以选择轮询操作。否则,FIFS可以是默认设置,它全速运行并且作为系统范围内的消息传递,与实现轮循相比,消息完成得更快。
路由器1801和路由器1802中的每一个都耦合到相应的网络,并且被配置为从网络接收消息,并将由网络处理器1803和1804生成的消息转发到相应的下一目的地的消息上。路由器1801和1802可以包括被配置为将网络处理器1803和1804耦合到它们相应的网络的多个交换机或其它合适的电路。
路由器1801和1802完全相同,并且每个路由器对通过节点的数据执行两个主要操作。第一个是识别用于该节点的那些消息。这涉及查看所递送的节点增量地址的两个字节,并在找到零值集合后开始提取消息的以下内容并将它们递送到从处理器。
当没有找到匹配时,第二个主要操作是将消息转发到下一个节点,从而朝着目的地前进。朝向目的地的前进可以潜在地有两个方向,其中如果沿着导致更靠近目的地的两个选项没有可用的路径,那么一个选项是沿着第三方向绕行。数据所来自的方向不是一个选项,因为不允许回溯,因此系统设计的底层要求是允许两个要通信的节点之间的路径,使得路线在遵循路由规则时无需掉头。
路由器还负责将新消息插入网络。为了将消息插入网络,必须知道目的地增量偏移量,并且只要朝着目的地的两个逻辑方向输出之一是空闲的,该消息就被接受并放入消息总线。就在第一个地址和数据对之前,在消息中插入回复增量时隙,以允许目的地节点用所请求的操作的结果进行回复。基于消息通过网络所经过的路径,自动更新回复增量,从而允许沿途中的任何节点(在出现错误回复的情况下)或目的地节点都具有准确的目的地以响应于请求消息而发送回复。
当讨论消息总线内的地址时,重要的是区分消息总线节点的地址与消息中为了路由到该节点而放置的值。节点的地址实际上是整个阵列中节点的X、Y坐标位置,包括IO节点、包含PE和DMR的核心阵列位置以及仅包含DMR的核心节点(如阵列的顶部和右边缘所出现的)。位置(0,0)位于连接到引导处理器的设备的左下角,位于主核心阵列之外。核心阵列由这四个角(1,1)、(1、17)、(17,17)和(17,1)界定,如图19中的整个阵列所示,注意图中的格式为(顶部编号,底部编号)。
消息总线节点的位置地址被用于生成路由增量信息以用于消息头中。为了计算消息所需的路由增量,两个位置的带符号差被用于识别为了从源节点转移到目的地节点在网格的每个方向上需要穿过的节点数。例如,要从(2,2)行进到(4,7),将使用增量地址(+2,+5),并且返回路由将是(-2,-5)。这指示目的地在当前位置以东2个节点,以北5个节点。由于路由信息是相对的,因此这允许灵活放置单元,并且如果移动了单元,那么端点移动相似的距离,而两个位置之间的增量保持不变。
在一些情况下,表1807中存储的信息可以被用于确定路由增量。例如,消息中包括的目的地信息可以用作表1807的索引以检索数据。这种数据可以指定消息应当被转发到的下一个消息总线节点。表1807可以被实现为静态随机存取存储器(SRAM)、寄存器文件或其它合适的存储电路。在各种实施例中,存储在表1807中的信息可以在引导序列期间被加载,并且可以在多处理器阵列的操作期间被更新。
给定8位行和列地址值,消息总线可以有可能跨越256×256节点阵列。为了实现这样的节点阵列,并允许消息总线随着技术节点的缩小而保持恒定的规模,或者支持在以后的代中可能出现的多管芯阵列构造,可以选择不需要针对多代进行修改的地址格式。
一旦消息已到达目的地节点,就需要第二个地址以在目的地节点处定位该值以进行访问。与具有足够增长空间的行和列地址不同,PE/DMR目的地节点本地地址分量实际上在空间上非常紧凑。按照目前的定义,存在16k字的DMR数据存储器、8k字的PE指令存储器、DMR寄存器总线空间、PE内部寄存器和消息总线内部配置寄存器。由于本地地址不需要一个字的所有16位,并且读取写入指示仅需要一位,因此将位15的位置用作控制位。这也是方便的,因为对于要写入或读取的每个突发,地址被重复,并且通过突发选择读取和写入允许突发提供将控制应用于访问的灵活而高效的手段。
对于IO总线接口节点,总线以32位地址操作。基于消息格式,每个突发仅传输15位,从而导致消息未占用17位。对于这些剩余的位,使用页面寄存器,其隐含的高位为0,导致潜在的31位地址可用,对于IO总线放置所有必需的存储器和外围空间来说,这绰绰有余。作为访问IO总线的消息的一部分,消息应当以写入页面寄存器开始,因为页面将保存最后写入的值,如果另一个主设备将页面寄存器设置为与当前主设备期望的不同的值,那么会导致潜在的意外访问位置。
为了进一步说明消息总线节点的操作,在图22中图示了描述用于操作消息总线节点的方法的实施例的流程图。可以应用于消息总线节点1800或任何其它合适的消息总线节点的方法开始于框2201。
该方法包括由多处理器阵列中包括的多个消息节点中的特定消息节点接收包括有效载荷和路由信息的第一消息(框2202)。如上所述,可以经由耦合到特定消息节点的多个消息总线中的一个来接收第一消息。
该方法还包括由特定消息节点基于多处理器阵列的操作信息和路由信息选择多个消息节点中的不同的消息节点(框2203)。如上所述,不同的消息节点可以基于包括在路由信息中的相对偏移量和包括在操作信息中的拥塞或其它启发法。
此外,该方法包括由特定消息节点基于不同的消息节点生成第二消息(框2204)。在各种实施例中,网络处理器(例如,网络处理器1803)可以基于选择了哪个消息节点来生成第二消息。在一些情况下,第二消息可以包括修改后的路由信息,该路由信息可以被其它消息节点用来将消息转发到后续消息节点上。
该方法还包括由特定消息节点将第二消息转发到不同的消息节点(框2205)。在一些实施例中,路由器(例如,路由器1801)可以基于包括在第一消息的路由信息中的相对偏移量来转发第二消息。路由器可以使用这种相对偏移量来确定应当沿哪个方向发送消息。该方法在框2206中结束。
HyperOp数据路径
转到图20,是HyperOp数据路径的实施例。如图所示,HyperOp数据路径包括被识别为DP0和DP1的两条数据路径。DP0和DP1中的每一个可以是完全相同的,并且包括乘法器电路、加法器电路、移位器电路,以及用于通过数据路径移动操作数的附加电路。注意的是,在多处理器阵列中的给定PE可以包括图20中描绘的HyperOp数据路径。
不同的编程模型可以与上述多处理器体系架构一起使用。图21中描绘了此类编程模型的示例。如图所示,图21包括ASM和HyperOp编程模型。下面描述了不同编程模型的其它详细信息和编码示例。每个示例包括:
·C–描述功能操作/算法的参考代码。
·ASM–如何使用64b指令实现操作/算法的一个或多个示例。它还包括使用向量内在函数(伪ASM指令)访问双DP的示例。向量内在函数是已映射到HyperOps指令的类似于ASM的指令。
·HyperOps–如何使用128b指令实现操作/算法的一个或多个示例。
存储器操作数
ASM代码
add16s M1.H,M2.H,M3.H
add16s M1.L,M2.L,M3.L
HyperOps代码
|A|ld32 M1,%A;//从32b M1加载SIMD数据
|B|ld32 M2,%B;//从32b M2加载SIMD数据
|DP1|add16s %AH,%BH,%ACC2;//ACC2=M1[0]+M2[0]
|DP0|add16s %AL,%BL,%ACC0;//ACC0=M1[1]+M2[1]
|D|dst16 %ACC2_ACC0,M3;//将SIMD结果存储到32b M3
立即操作数
ASM代码
sub16s %r2,$10,%r8
HyperOps代码
{
|A|ld16 %r2,%AL;//加载16b R2
|C|ld16 $10,%CLH;//加载16b立即值10
|DP1|sub16s %AL,%CLH,%D1;//D1=R2-10
|D|st16 %D1,%r8;//将结果存储到16b R8
}
注意的是,加载立即数(immed)使用slotC加载%C寄存器的16b段,但是可以使用slotB加载%B寄存器的16b段。
对标量的条件执行
C代码
int16 a,b,c,d,e;
if(a>b)
e=c+d;
ASM代码
//假设:
//a在%R2中
//b在%R3中
//c在%R4中
////d在%R5中
//e在%R6中
//%R7被用作temp
tcmp16s GT %R2,%R3,%P0
add16s %R4,%R5,%R7
cmov16(%P0)%R7,%R6
Hyperops代码(有条件存储时隙)–版本1
{
|A|ld16s %R2,%AL;//加载16b R2
|B|ld16s %R3,%BL;//加载16b R3
|DP0|tcmp16s GT %AL,%BL,%P0;//测试(R2>R3)并设置pred P0
}
{
|A|ld16s %R4,%AH;//加载16b R4
|B|ld16s %R5,%BH;//加载16b R5
|DP0|add16s %AH,%BH,%D0;//D0=R4+R5
|D|st16(%P0)%D0,%R6;//如果(P0)那么将结果存储到16b R6
}
Hyperops代码(有条件存储时隙)–版本2
{
|A|ld32 %R2.d,%A;//加载32b R2:R3
|B|ld32 %R4.d,%B;//加载32b R4:R5
|DP1|tcmp16s GT %AH,%AL,%P0;//测试R2>R3并设置pred P0
|DP0|add16s GT%BH,%BL,%D0;//D0=R4+R5
}
{
|D|st16(%P0)%D0,%R6;//如果(P0)那么将结果存储到16b R6
}
注释:
·ASM模型中的有条件执行仅适用于CMOV
·要求计算结果到临时寄存器,然后有条件地移至目的地
·HyperOps模型中的有条件执行允许将条件独立地应用于时隙
·谓词执行使用在较早指令中设置的谓词标志Pn,而不是同一条指令
·有条件存储是在单独指令的slotD中
·有可能在后续的HyperOp中将其隐藏
对向量的条件执行
C代码
ASM代码
//假设:
//a[0],a[1]在%R2,%R3中
//b[0],b[1]在%R4,%R5中
//c[0],c[1]在%R6,%R7中
//d[0],d[1]在%R8,%R9中
//e[0],e[1]在%R10,%R11中
//%R12,%R13用作temp
tcmp16s GT %R2,%R4,%P1
tcmp16s GT %R3,%R5,%P0
add16s %R6,%R8,%R12
add16s %R7,%R9,%R13
cmov16(%P1)%R12,%R10
cmov16(%P0)%R13,%R11
HyperOp代码(双重条件存储)
注释:
·对slotD指令应用条件执行
·使用SIMD谓词执行模式
·if(%P1%P0){...}
·%P1控制高字
·%P0控制低字
检测数组的非零元素,保存值C代码
使用GPn的ASM代码
周期:2+N(1+4+3)=2+8N
使用Pn的ASM代码
周期:2+N(2+3+1)=2+6N
使用Pn轻松实现HyperOps代码(条件G时隙执行)
周期:2+N(1+1+3+1)=2+6N
使用Pn(条件存储)对HyperOps代码进行流水线化
周期:1+N/4(4+1+4)=1+2.25N
使用2个PE的HyperOps代码
PE0
PE0周期:1+2N
PE1
注释:
·使用2个PE避免在EX中设置%GP0和在FD中使用时的停顿
检测数组的非零元素,保存索引
C代码
使用GPn的ASM代码
周期:2+N(1+4+3)=2+8N
使用Pn的ASM代码
周期:2+N(2+3+1)=2+6N
使用流水线化的Pn的ASM代码
//假设:
//%B1指向a[],i在%I1中
//%B2指向b[],j在%I2中
gmov16$0,%I2
repeat$0,$N-1,$4%I1,L_loop_start,L_loop_end
L_loop_start:
tcmp16s NE 0[%B1+%I1],$0,%P0//测试(a[i+0]<>0)并设置pred P0
tcmp16s NE 1[%B1+%I1],$0,%P1//测试(a[i+1]<>0)并设置pred P1
tcmp16s NE 2[%B1+%I1],$0,%P2//测试(a[i+2]<>0)并设置pred P2
tcmp16s NE 3[%B1+%I1],$0,%P3//测试(a[i+3]<>0)并设置pred P3
add16s(%P0)%I1,$0,0[%B2+%I2]//如果(P0)那么将i+0移至16b b[j]
gadd(%P0)%I2,$1,%I2//如果(P0)那么incr j++
add16s(%P1)%I1,$1,0[%B2+%I2]//如果(P1)那么将i+1移至16b b[j]
gadd(%P1)%I2,$1,%I2//如果(P1)那么incr j++
add16s(%P2)%I1,$2,0[%B2+%I2]//如果(P2)那么将i+2移至16b b[j]
gadd(%P2)%I2,$1,%I2//如果(P2)那么incr j++
add16s(%P3)%I1,$3,0[%B2+%I2]//如果(P3)那么将i+3移至16b b[j]
gadd(%P3)%I2,$1,%I2//如果(P3)那么incr j++
L_loop_end:
周期:2+N/4(4+8)=2+3N
使用GPn(有条件的G时隙和存储)可轻松实现Hyperperps代码
周期:2+N(1+4+2)=2+7N
使用Pn的简单的HyperOps代码
//假设:
//%B1执行a[],i在%I1中
//%B2指向b[],j在%I2中
gdmovi $0,$1,%I2,%S2
repeat$0,$N-1,$1%I1,L_loop_start,L_loop_end
L_loop_start:
{
|A|ld16 0[%B1+%I1],%AL;//将a[i]加载到AL中
|B|ld16 %I1,%BL;//将i加载到BL中
|DP1|tcmp16s NE %AL,$0,%P0;//测试(a[i]<>0)并设置pred P0
|DP0|mov %BL,%D0;//将i移至D0,准备好存储
}
//在EX中写入%P0和在FD中使用时+4周期停顿
{
|A|incr(%P0)$(__i2Mask);//如果(P0)那么incr j++
|D|st16(%P0)%D0,0[%B2+%I2];//如果(P0)那么将i移至16b b[j]
}
L_loop_end:
周期:2+N(1+4+1)=2+6N
使用GPn的HyperOps代码流水线
周期: 2+N/5(5+5(2)) = 2+3N
注意
·通过加载到5个GR中可以隐藏所有停顿
使用Pn流水线化的HyperOps代码
周期:2+N/4(2+3+4)=2+2.25N
注意
·无法用4Pn隐藏所有停顿
使用带标记的数据的HyperOps代码
周期:2+N/4(2+3+4)=2+2.25N
注释:
·带标签的加载LD16T将16b数据(低16b)及其地址(高16b)作为打包数据加载
·数据索引是数据地址(或标签)-数组开始
使用间接取值来访问数组
C代码
ASM代码
周期:1+N(1+4+1)=1+6N
HyperOps代码简单
周期:1+N(1+4+1)=1+6N
HyperOps代码流水线化
周期:3+1+1+N/6(6)=5+N
注释:
·以1个周期按对给从b[i]加载的j建索引
·两个c[j]在1个周期中按对加载并存储到a[i]
·使用6个索引寄存器避免在EX中设置索引并在FD中使用它时的流水线气泡
使用双DP的条件累加
以下是我们可以对于两个谓词使用条件HyperOps的示例。
C代码
ASM代码
这个示例使用向量内在函数(伪ASM指令)来访问双DP。
周期:3+N/2(4)+1=4+2N
HyperOps代码(有条件DP时隙执行-两个时隙)
周期:1+N/2(2)+1=2+N
注释:
·使用DP1和DP0并行处理迭代i和i+1
·将总和拆分成%ACC0和%ACC2,然后在结束时组合
·使用谓词标志%P1和%P0分别独立控制到%ACC2和%ACC0的累加
使用双DP的有条件累加,每个都使用双MUL
下面是我们可以对于4个谓词使用有条件HyperOps的示例。
C代码
HyperOps代码(使用两个DP的四元条件)
周期:2+N/4(2)+1=3+0.5N
注释:
·并行处理迭代i...i+3:
·DP1中的i和i+1
·DP0中的i+2和i+3
·DP0执行双重操作,DP1执行双重操作
·将总和拆分成%ACC0和%ACC2,然后在结束时组合
·使用谓词标志P0-P3独立地控制到%ACC0和%ACC2中的乘积的累加
·b[]和c[]必须与a[]是不同的DMR,才能使64b访问起作用
使用双DP的条件存储
以下C代码是我们可以在其中使用有条件HyperOps执行条件存储的示例。
C代码
ASM代码
这个示例使用向量内在函数(伪ASM指令)访问双DP。
HyperOps代码(双重条件存储)
注释:
·使用DP1和DP0并行处理迭代i和i+1
·使用谓词标志P1和P0独立地控制16b:16b存储(SIMD模式)
使用条件跳转的有条件if-else-if示例
C代码
ASM代码
//假设imin和qmin被存储为打包的数据imin_qmin(甚至地址)
abs16s q,absq//absq=abs(q)
tcmp16 LT absq,qmin,%P1//P1=(absq<qmin)
jmp(!%P1)L_else PNT//如果(!P1)那么跳过qmin更新
tcmp16 LT absq,qmin2,%P0//P0=(absq<qmin2)–延迟时隙
L_if://更新qmin和qmin2:
mov16 qmin,qmin2//qmin2=qmin
jmp L_end
dmov16 i,absq,imin_qmin//qmin=absq,imin=i--延迟时隙
L_else:
jmp(!%P0)L_end PNT DLY
nop//延迟时隙
mov16 absq,qmin2//仅更新qmin2
L_end:
具有DLY优化的ASM代码
abs16s q,absq
tcmp16 LT absq,qmin,%P1
jmp(!%P1)L_else PNT
tcmp16 LT absq,qmin2,%P0//在延迟时隙中执行
L_if:
mov16 qmin,qmin2
jmp L_end
dmov16 i,absq,imin_qmin//在延迟时隙中执行
L_else:
jmp(!%P0)L_end PNT DLY
mov16 absq,qmin2//在JMP之后,但不在延迟时隙中执行
L_end:
使用条件移动的有条件if-else-if示例
C代码
ASM Code
//假设imin和qmin被存储为打包的数据imin_qmin(甚至地址)
abs16s q,absq//absq=abs(q)
tcmp16s LT absq,qmin,%P1//P1=(absq<qmin)
tcmp16s LT absq,qmin2,%P0//P0=(absq<qmin2)
cmov16(%P1)qmin,qmin2//如果(P1)qmin2=qmin
cmov16(%P1)absq,qmin//如果(P1)qmin=absq
cmov16(%P1)i,imin//如果(P1)imin=i
cmov16(!%P1&%P0)absq,qmin2//否则如果(P0)qmin2=absq
周期:7
HyperOps代码
周期:4
注释:
·使用%P1和%P0来保持IF和ELSE IF测试的布尔结果
·假设imin和qmin以16:16打包存储在存储器中
·将%P1和%P0与CSEL一起使用,以有条件地更新状态变量,在可能的情况下成对地更新
使用谓词标志来组合测试
C代码
ASM代码
tcmp16s LT b,c%P0//P0=(b<c)
tcmp16s LT d,e,%P1//P1=(d<e)
cmov16(%P0&%P1)$1,$0,a//a=(P0&P1)1:0
注释:
·编译器将&&替换为&运算符:
·a=(b<c)&(d<e)
使用注册表文件来组合测试
C代码
ASM代码
tcmp16s LT b,c,%R0//R0=(b<c)
tcmp16s LT d,e,%R1//R1=(d<e)
and16 %R0,%R1,a//a=R0&R1
注释:
·编译器将&&替换为&运算符:
·a=(b<c)&(d<e)
条件跳转到子例程
C代码
int a,b,c,d,e,f;
if((a<b)&(c<e)|(d>f))
foo();
ASM代码
tcmp16s LT a,b,%R1//R1=(a<b)
tcmp16s LT c,e,%R2//R2=(c<e)
tand16 NZ%R1,%R2,%P0//P0=(a<b)&(c<e)
tcmp16s GT d,f,%P1//P1=(d>f)
jsr(%P0|%P1)foo//如果(P0|P1)那么foo()
注释:
·使用TAND16而非AND16
·注意,除了TEST以外,Pn不能用作ALU操作的dstD
逻辑/测试操作结果的指派
C代码
int16 a,b,c,d,e,f,result;
result=((a<b)&(c<e)|(d>f));
ASM代码
tcmp16s LT a,b,%R1//R1=(a<b)
tcmp16s LT c,e,%R2//R2=(c<e)
and16 %R1,%R2,%R3//P3=(a<b)&(c<e)
tcmp16s GT d,f,%R4//R4=(d>f)
or16 %R3,%R4,result//结果=(R3|R4)
本文描述的各种实施例中的任何一个都可以以各种形式中的任何一种来实现,例如,作为计算机实现的方法、作为计算机可读存储介质、作为计算机系统等。系统可以由一个或多个定制设计的硬件设备(诸如专用集成电路(ASIC))、由一个或多个可编程硬件元件(诸如现场可编程门阵列(FPGA))、由一个或多个执行存储的程序指令的处理器或由上述内容的任意组合来实现。
在一些实施例中,非暂态计算机可读存储介质可以被配置为使得它存储程序指令和/或数据,其中,如果程序指令由计算机系统执行,那么该程序指令使计算机系统执行方法,例如,本文描述的任何方法实施例、或本文描述的方法实施例的任意组合、或本文描述的方法实施例的任何子集,或此类子集的任意组合。
在一些实施例中,计算机系统可以被配置为包括处理器(或处理器的集合)和存储器介质,其中存储器介质存储程序指令,其中处理器被配置为从存储器介质中读取并执行程序指令,其中程序指令是可执行的,以实现本文描述的各种方法实施例中的任何一个(或本文描述的方法实施例的任意组合、或本文描述的方法实施例的任何子集,或此类子集的任意组合)。计算机系统可以以各种形式中的任何形式来实现。例如,计算机系统可以是个人计算机(以其各种实现方式中的任何一种)、工作站、卡上的计算机、盒子中的专用计算机、服务器计算机、客户端计算机、手持式设备、移动设备、可穿戴计算机、感测设备、电视、视频采集设备、嵌入生物体中的计算机等。计算机系统可以包括一个或多个显示设备。本文公开的各种计算结果中的任何一个都可以经由显示设备来显示,或者经由用户接口设备以其它方式呈现为输出。
一种装置,包括:多个处理器;以及以散布的布置耦合到多个处理器的多个数据存储器路由器,其中特定的数据存储器路由器被配置为将接收到的消息中继到所述多个数据存储器路由器中的至少一个其它数据存储器路由器;其中多个处理器中的特定处理器被配置为设置多个谓词标志中的至少一个谓词标志;并使用多个谓词标志有条件地执行指令。
前述装置,其中多个谓词标志包括与特定处理器中包括的数据路径相关联的至少第一谓词标志集合,以及与特定处理器中包括的地址生成器单元相关联的第二谓词标志集合。
前述装置,其中,为了设置多个谓词标志中的至少一个谓词标志,特定处理器还被配置为响应于测试指令的执行而比较第一值与第二值以生成结果,并基于结果来设置该至少一个谓词标志。
前述装置,其中,为了比较第一值与第二值,特定处理器还被配置为使用第一值和第二值执行逻辑运算以生成结果。
前述装置,其中,为了设置所述多个谓词标志中的所述至少一个谓词标志,特定处理器还被配置为至少部分地基于指示包括在特定处理器中的数据路径的定时操作的信息来设置至少一个谓词标志。
前述装置,其中,为了设置多个谓词标志中的该至少一个谓词标志,特定处理器还被配置为至少部分地基于指示包括在特定处理器中的地址生成器单元的定时操作的信息来设置至少一个谓词标志。
前述装置,其中,为了有条件地执行指令,特定处理器还被配置为使用所述多个谓词标志有条件地执行包括在特定处理器中的数据路径中所包括的一个或多个数据路径时隙。
一种方法,包括:由多个处理器中的特定处理器设置多个谓词标志中的至少一个谓词标志;其中多个处理器以散布的布置耦合到多个数据存储器路由器;由多个处理器中的该特定处理器使用多个谓词标志有条件地执行指令。
前述方法,其中多个谓词标志包括与特定处理器中包括的数据路径相关联的至少第一谓词标志集合,以及与特定处理器中包括的地址生成器相关联的第二谓词标志集合。
前述方法,其中设置所述多个谓词标志中的至少一个谓词标志包括:响应于特定处理器执行测试指令而比较第一值与第二值以生成结果,并基于结果来设置至少一个谓词标志。
前述方法,其中比较第一值与第二值包括使用第一值和第二值执行逻辑运算以生成结果。
前述方法,其中设置多个谓词标志中的至少一个谓词标志包括由特定处理器至少部分地基于指示包括在特定处理器中的数据路径的定时操作的信息来设置至少一个谓词标志。
前述方法,其中设置多个谓词标志中的至少一个谓词标志包括由特定处理器至少部分地基于指示包括在特定处理器中的地址生成器单元的定时操作的信息来设置至少一个谓词标志。
权利要求22的前述方法,其中由特定处理器有条件地执行指令包括使用多个谓词标志有条件地执行包括在特定处理器中的数据路径中所包括的一个或多个数据路径时隙。
一种装置,包括:多个处理器;以及以散布的布置耦合到多个处理器的多个数据存储器路由器,其中特定数据存储器路由器被配置为将接收到的消息中继到多个数据存储器路由器中的至少一个其它数据存储器路由器;其中多个处理器中的特定处理器被配置为:基于接收到的指令,选择性地激活包括在特定处理器中的多条数据路径中的特定数据路径中所包括的多个算术逻辑电路的子集;以及使用多个算术逻辑电路的子集来执行接收到的指令。
前述装置,其中,为了选择性地激活多个算术逻辑电路的子集,特定处理器还被配置为对指令进行解码以生成解码的指令,并且使用解码的指令选择性地激活多个算术逻辑电路的子集。
前述装置,其中多个处理器中的特定处理器还被配置为基于指令在包括在多个算术逻辑电路的子集中的各个算术逻辑电路之间路由数据。
前述装置,其中,为了在包括在多个算术逻辑电路的子集中的各个算术逻辑电路之间路由数据,特定处理器还被配置为选择性地改变包括在特定数据路径中的多个多路复用电路中的至少一个多路复用电路的状态。
前述装置,其中多个逻辑电路中的特定算术逻辑电路至少包括加法器电路。
前述装置,其中多个逻辑电路中的特定算术逻辑电路包括查找表,该查找表被配置为存储在执行指令时使用的偏移量。
前述装置,其中指令指定对数概率运算。
一种方法,包括:选择性地激活包括在多个处理器中的特定处理器中的多条数据路径中的特定数据路径中所包括的多个算术逻辑电路的子集;其中多个处理器以散布的布置耦合到多个数据存储器路由器;以及由多个处理器中的该特定处理器使用所述多个算术逻辑电路的子集来执行指令。
前述方法,其中选择性地激活多个算术逻辑电路的子集包括对指令进行解码以生成解码的指令,并且使用解码的指令选择性地激活多个算术逻辑电路的子集。
前述方法,还包括基于指令在包括在多个算术逻辑电路的子集中的各个算术逻辑电路之间路由数据。
前述方法,其中在包括在多个算术逻辑电路的子集中的各个算术逻辑电路之间路由数据包括选择性地改变包括在特定数据路径中的多个多路复用电路中的至少一个多路复用电路的状态。
前述方法,其中多个逻辑电路中的特定算术逻辑电路至少包括加法器电路。
前述方法,其中多个逻辑电路中的特定算术逻辑电路包括查找表,并且还包括将用于执行指令的偏移量存储在查找表中。
前述方法,其中指令指定对数概率运算。
虽然已经结合优选实施例描述了以上实施例,但是其并不旨在限于本文阐述的具体形式,相反,其旨在涵盖可以合理地包括在由所附权利要求书限定的本发明实施例的精神和范围之内的此类替代、修改和等同形式。
Claims (20)
1.一种装置,包括:
多处理器(10),包括多个处理器;以及
以散布的布置耦合到所述多个处理器的多个消息节点(1701;1800),其中所述多个消息节点(1701;1800)中的特定消息节点(1701;1800)被配置为:
接收包括有效载荷、路由信息和所述多处理器(10)的操作信息的第一消息,所述路由信息包括指示从所述特定消息节点到所述多个消息节点中被指定为所述第一消息的目的地的另一消息节点的相对偏移量的信息,并且所述操作信息包括与所述多处理器(10)的过去和/或当前性能相关的信息;
基于所述操作信息和所述路由信息,选择所述多个消息节点(1701;1800)中的不同的消息节点(1701;1800);
基于所述不同的消息节点(1701;1800),修改第一消息的路由信息,以生成第二消息;以及
将第二消息转发到所述不同的消息节点(1701;1800)。
2.如权利要求1所述的装置,其中所述路由信息包括指示第一消息的绝对目的地的信息。
3.如权利要求1所述的装置,其中所述路由信息包括指示从所述特定消息节点(1701;1800)到所述多个消息节点(1701;1800)中被指定为第一消息的目的地的另一个消息节点(1701;1800)的相对偏移量的信息。
4.如权利要求1所述的装置,其中所述特定消息节点(1701;1800)还被配置为:
响应于确定第一消息是广播消息而生成多个第三消息;以及
将所述多个第三消息中的每一个第三消息转发到所述多个消息节点(1701;1800)中相应的一个消息节点。
5.如权利要求1所述的装置,其中所述操作信息包括拥塞信息。
6.如权利要求1所述的装置,其中,为了选择所述不同的消息节点(1701;1800),所述特定消息节点(1701;1800)还被配置为使用包括在第一消息中的指定目的地的信息从包括在所述特定消息节点(1701;1800)中的表中检索下一个目的地。
7.一种方法,包括:
由包括在多处理器阵列(10)中的多个消息节点(1701;1800)中的特定消息节点(1701;1800)接收第一消息,所述第一消息包括有效载荷、路由信息和所述多处理器阵列(10)的操作信息,所述路由信息包括指示从所述特定消息节点到所述多个消息节点中被指定为所述第一消息的目的地的另一消息节点的相对偏移量的信息,并且所述操作信息包括与所述多处理器阵列(10)的过去和/或当前性能相关的信息;
由所述特定消息节点(1701;1800)基于所述操作信息和所述路由信息选择所述多个消息节点(1701;1800)中的不同的消息节点(1701;1800);
由所述特定消息节点(1701;1800)基于所述不同的消息节点(1701;1800)来生成第二消息;以及
由所述特定消息节点(1701;1800)将第二消息转发到所述不同的消息节点(1701;1800)。
8.如权利要求7所述的方法,其中生成所述第二消息包括修改第一消息的路由信息,以生成包括在第二消息中的修改后的路由信息。
9.如权利要求7所述的方法,其中所述路由信息包括指示第一消息的绝对目的地的信息。
10.如权利要求7所述的方法,其中所述路由信息包括指示从所述特定消息节点(1701;1800)到所述多个消息节点(1701;1800)中被指定为第一消息的目的地的另一个消息节点(1701;1800)的相对偏移量的信息。
11.如权利要求7所述的方法,还包括:
由所述特定消息节点(1701;1800)接收来自包括在所述多处理器阵列(10)中的处理元件的请求;以及
由所述特定消息节点(1701;1800)基于所述请求来生成第三消息。
12.如权利要求7所述的方法,还包括:
响应于确定第一消息是广播消息而生成多个第三消息;以及
将所述多个第三消息中的每一个第三消息转发到所述多个消息节点(1701;1800)中相应的一个消息节点。
13.如权利要求7所述的方法,还包括由所述特定消息节点(1701;1800)使用所述路由信息的至少一部分从表中检索指示第一消息的下一个目的地的信息。
14.一种装置,包括:
耦合到消息总线的路由器电路(1801;1802),其中所述路由器电路被配置为接收包括有效载荷、路由信息和多处理器阵列(10)的操作信息的第一消息,所述路由信息包括指示从特定消息节点到多个消息节点中被指定为所述第一消息的目的地的另一消息节点的相对偏移量的信息,并且所述操作信息包括与所述多处理器阵列(10)的过去和/或当前性能相关的信息;以及
网络处理器电路,被配置为:
基于所述操作信息和所述路由信息,选择多个消息节点(1701;1800)中的特定消息节点(1701;1800),其中包括在所述多个消息节点(1701;1800)中的消息节点(1701;1800)经由消息总线耦合在一起;以及
基于所述特定消息节点(1701;1800),修改第一消息的路由信息,以生成第二消息;以及
其中所述路由器电路还被配置为将第二消息转发到所述特定消息节点(1701;1800)。
15.如权利要求14所述的装置,其中所述路由信息包括指示第一消息的绝对目的地的信息。
16.如权利要求14所述的装置,其中所述路由信息包括指示到所述多个消息节点(1701;1800)中被指定为第一消息的目的地的给定消息节点(1701;1800)的相对偏移量的信息。
17.如权利要求14所述的装置,还包括配置电路,所述配置电路被配置为存储所述操作信息。
18.如权利要求14所述的装置,其中第一消息包括所述操作信息的至少一部分。
19.如权利要求14所述的装置,其中所述网络处理器电路被配置为从包括在所述多处理器阵列(10)中的处理元件接收请求,并且基于所述请求来生成第三消息,并且其中所述路由器电路还被配置为基于包括在第三消息中的信息来将第三消息转发到所述多个消息节点(1701;1800)中不同的消息节点(1701;1800)。
20.如权利要求14所述的装置,还包括被配置为存储多个条目的表,并且其中所述网络处理器电路还被配置为使用包括在第一消息中的信息从所述表中检索下一个目的地。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311152590.5A CN117194311A (zh) | 2017-11-03 | 2018-11-02 | 存储器网络处理器 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201762581512P | 2017-11-03 | 2017-11-03 | |
US62/581,512 | 2017-11-03 | ||
PCT/US2018/058873 WO2019090032A1 (en) | 2017-11-03 | 2018-11-02 | Memory network processor |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311152590.5A Division CN117194311A (zh) | 2017-11-03 | 2018-11-02 | 存储器网络处理器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111527485A CN111527485A (zh) | 2020-08-11 |
CN111527485B true CN111527485B (zh) | 2023-09-12 |
Family
ID=64362725
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311152590.5A Pending CN117194311A (zh) | 2017-11-03 | 2018-11-02 | 存储器网络处理器 |
CN201880084620.4A Active CN111527485B (zh) | 2017-11-03 | 2018-11-02 | 存储器网络处理器 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311152590.5A Pending CN117194311A (zh) | 2017-11-03 | 2018-11-02 | 存储器网络处理器 |
Country Status (6)
Country | Link |
---|---|
US (3) | US10747709B2 (zh) |
EP (1) | EP3704593A1 (zh) |
JP (2) | JP7295104B2 (zh) |
CN (2) | CN117194311A (zh) |
TW (2) | TWI714903B (zh) |
WO (1) | WO2019090032A1 (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111124994B (zh) * | 2019-11-29 | 2022-11-11 | 苏州浪潮智能科技有限公司 | 一种数据传输方法、装置、gpu及可读存储介质 |
US11500641B2 (en) * | 2020-10-07 | 2022-11-15 | Huawei Technologies Co., Ltd. | Devices, methods, and media for efficient data dependency management for in-order issue processors |
KR102578292B1 (ko) | 2020-12-15 | 2023-09-15 | 한국과학기술연구원 | 컴퓨터 메모리 효율성이 향상된 물체/영역 검출 및 분류 시스템 |
TWI775259B (zh) * | 2020-12-29 | 2022-08-21 | 新唐科技股份有限公司 | 直接記憶體存取裝置與使用其的電子設備 |
FR3121239A1 (fr) * | 2021-03-24 | 2022-09-30 | Thales | Système de communication comprenant une pluralité de processeurs et au moins un commutateur, et un procédé de communication associé |
TW202247046A (zh) * | 2021-05-19 | 2022-12-01 | 神盾股份有限公司 | 基於卷積運算的資料處理方法及電路 |
TWI783673B (zh) * | 2021-09-09 | 2022-11-11 | 英業達股份有限公司 | 具有頻寬切換功能之伺服器系統 |
GB2605471B (en) * | 2021-09-30 | 2023-11-01 | Imagination Tech Ltd | Processor with hardware pipeline |
GB2605664B (en) | 2021-09-30 | 2023-03-29 | Imagination Tech Ltd | Processor with hardware pipeline |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101878475A (zh) * | 2007-07-31 | 2010-11-03 | Netlogic微系统公司 | 向星形拓扑串行总线接口委托网络处理器操作 |
CN104798062A (zh) * | 2012-11-21 | 2015-07-22 | 相干逻辑公司 | 包含具有多层互连的散布的处理器的处理系统 |
Family Cites Families (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS5833572B2 (ja) * | 1977-10-21 | 1983-07-20 | 株式会社東芝 | 情報処理方式 |
EP0221360B1 (en) * | 1985-11-04 | 1992-12-30 | International Business Machines Corporation | Digital data message transmission networks and the establishing of communication paths therein |
US5459836A (en) | 1990-02-09 | 1995-10-17 | Unisys Corporation | Inter-processor communication net |
JP3251723B2 (ja) * | 1993-07-15 | 2002-01-28 | 富士通株式会社 | 放送通信方法 |
KR970007251B1 (ko) | 1994-02-25 | 1997-05-07 | 한국전기통신공사 | 다중버스용 실시간 멧세지 전송장치 및 그 제어방법 |
US6226706B1 (en) | 1997-12-29 | 2001-05-01 | Samsung Electronics Co., Ltd. | Rotation bus interface coupling processor buses to memory buses for interprocessor communication via exclusive memory access |
US7861071B2 (en) * | 2001-06-11 | 2010-12-28 | Broadcom Corporation | Conditional branch instruction capable of testing a plurality of indicators in a predicate register |
US7471643B2 (en) * | 2002-07-01 | 2008-12-30 | Panasonic Corporation | Loosely-biased heterogeneous reconfigurable arrays |
US6865662B2 (en) * | 2002-08-08 | 2005-03-08 | Faraday Technology Corp. | Controlling VLIW instruction operations supply to functional units using switches based on condition head field |
JP2006127460A (ja) * | 2004-06-09 | 2006-05-18 | Renesas Technology Corp | 半導体装置、半導体信号処理装置、およびクロスバースイッチ |
US7505734B2 (en) * | 2004-09-10 | 2009-03-17 | Nivis, Llc | System and method for communicating broadcast messages in a mesh network |
JP4336894B2 (ja) | 2005-03-30 | 2009-09-30 | 日本電気株式会社 | 情報処理システムとjob実行方法 |
TWI350525B (en) * | 2006-08-18 | 2011-10-11 | Realtek Semiconductor Corp | Memory management apparatus and method for optical storage system |
US7941499B2 (en) | 2007-03-06 | 2011-05-10 | Freescale Semiconductor, Inc. | Interprocessor message transmission via coherency-based interconnect |
US7761687B2 (en) * | 2007-06-26 | 2010-07-20 | International Business Machines Corporation | Ultrascalable petaflop parallel supercomputer |
US9043478B2 (en) | 2009-12-15 | 2015-05-26 | Qualcomm Innovation Center, Inc. | Methods and apparatus for using a distributed message bus for ad hoc peer-to-peer connectivity |
JP5815717B2 (ja) | 2010-10-15 | 2015-11-17 | コーヒレント・ロジックス・インコーポレーテッド | マルチプロセッサシステムにおける通信の無効化 |
JP2012146201A (ja) | 2011-01-13 | 2012-08-02 | Toshiba Corp | オンチップルータ及びそれを用いたマルチコアシステム |
US9760526B1 (en) | 2011-09-30 | 2017-09-12 | EMC IP Holdings Company LLC | Multiprocessor messaging system |
CN104040528B (zh) | 2011-12-28 | 2016-12-28 | 富士通株式会社 | 计算机系统、通信控制装置以及计算机系统的控制方法 |
US20140025884A1 (en) * | 2012-07-18 | 2014-01-23 | Netronome Systems, Inc. | Transactional Memory that Performs a Statistics Add-and-Update Operation |
WO2014092968A1 (en) * | 2012-12-13 | 2014-06-19 | Coherent Logix, Incorporated | Multiprocessor system with improved secondary interconnection network |
KR20140126189A (ko) * | 2013-04-22 | 2014-10-30 | 삼성전자주식회사 | 프로세서의 멀티 실행 모드 지원 장치 및 방법 |
EP3005078A2 (en) * | 2013-05-24 | 2016-04-13 | Coherent Logix Incorporated | Memory-network processor with programmable optimizations |
CN105306076A (zh) * | 2014-06-30 | 2016-02-03 | 深圳市中兴微电子技术有限公司 | 一种基于MAP算法的Turbo译码方法及装置 |
-
2018
- 2018-11-02 US US16/178,738 patent/US10747709B2/en active Active
- 2018-11-02 EP EP18804849.0A patent/EP3704593A1/en active Pending
- 2018-11-02 WO PCT/US2018/058873 patent/WO2019090032A1/en active Search and Examination
- 2018-11-02 CN CN202311152590.5A patent/CN117194311A/zh active Pending
- 2018-11-02 JP JP2020524772A patent/JP7295104B2/ja active Active
- 2018-11-02 CN CN201880084620.4A patent/CN111527485B/zh active Active
- 2018-11-05 TW TW107139222A patent/TWI714903B/zh active
- 2018-11-05 TW TW109142450A patent/TWI798605B/zh active
-
2020
- 2020-07-17 US US16/931,864 patent/US11550750B2/en active Active
-
2022
- 2022-10-20 US US17/969,871 patent/US11829320B2/en active Active
-
2023
- 2023-06-08 JP JP2023094618A patent/JP2023113879A/ja active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101878475A (zh) * | 2007-07-31 | 2010-11-03 | Netlogic微系统公司 | 向星形拓扑串行总线接口委托网络处理器操作 |
CN104798062A (zh) * | 2012-11-21 | 2015-07-22 | 相干逻辑公司 | 包含具有多层互连的散布的处理器的处理系统 |
Also Published As
Publication number | Publication date |
---|---|
JP7295104B2 (ja) | 2023-06-20 |
TW201923614A (zh) | 2019-06-16 |
CN111527485A (zh) | 2020-08-11 |
US20190138492A1 (en) | 2019-05-09 |
US11829320B2 (en) | 2023-11-28 |
JP2023113879A (ja) | 2023-08-16 |
US20210034566A1 (en) | 2021-02-04 |
TW202121194A (zh) | 2021-06-01 |
US11550750B2 (en) | 2023-01-10 |
TWI714903B (zh) | 2021-01-01 |
TWI798605B (zh) | 2023-04-11 |
CN117194311A (zh) | 2023-12-08 |
US20230061478A1 (en) | 2023-03-02 |
US10747709B2 (en) | 2020-08-18 |
EP3704593A1 (en) | 2020-09-09 |
JP2021501947A (ja) | 2021-01-21 |
WO2019090032A1 (en) | 2019-05-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111527485B (zh) | 存储器网络处理器 | |
CN109213723B (zh) | 一种用于数据流图处理的处理器、方法、设备、及一种非暂时性机器可读介质 | |
US9934010B1 (en) | Programming in a multiprocessor environment | |
JP5989656B2 (ja) | 処理クラスタ用の共有機能メモリ回路要素 | |
US7257780B2 (en) | Software-to-hardware compiler | |
US9158575B2 (en) | Multithreaded processor array with heterogeneous function blocks communicating tokens via self-routing switch fabrics | |
JP2016526220A (ja) | プログラム可能な最適化を有するメモリネットワークプロセッサ | |
WO2016100142A2 (en) | Advanced processor architecture | |
Jo et al. | SOFF: An OpenCL high-level synthesis framework for FPGAs | |
Gupta et al. | System synthesis via hardware-software co-design | |
US20230367604A1 (en) | Method of interleaved processing on a general-purpose computing core | |
US9477628B2 (en) | Collective communications apparatus and method for parallel systems | |
JP2005508029A (ja) | リコンフィギュアラブルアーキテクチャのためのプログラム変換方法 | |
US20050283756A1 (en) | Method and system to automatically generate performance evaluation code for multi-threaded/multi-processor architectures | |
Gupta et al. | COMPUTER SYSTEMS LABORATORY | |
Girard | CellPilot: An extension of the Pilot library for Cell Broadband Engine processors and heterogeneous clusters |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |