通过内容可寻址存储器和并行计算执行模型的条件执行的制作方法

文档序号:6567674阅读:278来源:国知局
专利名称:通过内容可寻址存储器和并行计算执行模型的条件执行的制作方法
技术领域
本发明通常涉及计算机系统、处理器和存储器,特别涉及并行计算。
背景技术
在相当长的时间,计算机程序开发者和使用者已经能够受益于使芯片特征 尺寸不断减少的技术的进步。随着可以被生产的设备(举例来说,微处理器和存储 器)的尺寸越来越小,因此设备变得更快、更便宜并且可被紧凑包装。这些进步的 结果是允许当代计算继续使用控制驱动(冯,诺依曼)执行模型,其中在该执行模 型中,由程序员编写一系列的指令以便处理器遵循执行,并且当按次序执行的时候, 这些指令可以执行所需的计算。
然而,传统计算技术的极限也快要达到了。这是因为随着芯片特征尺寸继 续减少,也随之出现了多种问题。比如,当芯片变得越来越紧凑包装的时候,串扰, 电容负载、缺陷密度以及热耗散将变得更加明显。
因此,为试图继续改进计算功率,制造商正进入基于一定数量的并行计算 的解决方案。比如,现代处理器通过试图发现可以以任意次序执行的操作,因此可 并行执行而不会改变结果来试图自动地从控制驱动码中提取某种并行性。然而,以 这种方式提取并行性是一个非常复杂的问题,可能不是特别成功或者有效的,因为 它需要对指令的相当大数量的预测或者回顾,以确定可以并行进行那些操作,如果 存在这些操作的话。尽管如此复杂度,但计算机产业仍正在向并行计算发展。所需 要的是用于并行计算的更好的体系结构。

发明内容
简要的说,本发明针对一种系统和方法,通过该系统和方法,基于配置的 执行模型结合内容可寻址存储器体系结构提供能够实现多个计算概念的装置,这些 概念包括条件执行,(举例来说,if-Then语句和while循环),函数调用和递归。
内容可寻址存储器使用标记来标识输入到计算硬件配置的操作数。通过使
用CAM特征来实现If-then语句,其中CAM特征仅仅发送来自CAM的完成的操 作数集合以用于处理;其中,对于条件的两个分支,每个都具有自己独特的输入标 记空间,具有独特的操作数集合。在执行期间,可以生成任意一个分支所需的值, 以及对该值进行标记,以便于这些值落入适当分支的输入标记空间。由图中的条件 节点生成附加的种子令牌,作为在分支的任一端上的操作数集合的一部分。当为每 个测试条件评估条件节点的时候,为该条件的真或者假的分支中任何一个生成种子 令牌,以为条件的正确分支完成操作数集合,同时相对的分支未完成。因此,下游 运算符仅仅检索完成的操作数集合,并且丢弃未完成的集合。
while循环使用完成的操作数集合概念和标记空间。使用两个标记空间,一 个用于对while循环的输入,另一个用于在数据流图中的接下来的配置。条件运算 符生成种子令牌,该种子令牌导致循环继续while循环迭代,或者停止迭代而当前 数据值的至少一个数据值作为一个操作数,另外一个操作数指示迭代完成。下游运 算符可以处理一个或者多个被指示为完成的数据操作数,尽管可能发生阻塞,直到 已经通过while循环处理并完成了多个输入的完成集合。
通过放置函数的返回标记作为伴随函数参数数据进入函数的输入标记空间 的操作数,经由CAM体系结构来处理函数调用;;在函数调用中传送返回标记直 到已经计算了函数的输出。当函数调用结束的时候,以返回标记来标记输出数据, 输出数据被指定为在调用程序之后返回到配置的输入标记空间中。
通过操作标记来处理递归,便于它们可以返回到它们的递归双亲的输入标记 空间中。将递归函数分成两半,递归前部分和递归后部分。执行递归调用,直到达 到终止条件。递归函数中每一个也都执行到(包括)递归调用它们自身。当终止条 件达到时,并且所有的递归前调用都已经结束了执行,接着将每个函数调用的第二 部分以逆向调用的次序执行,以便结束函数评估。
促进了并行计算的其它方面,包括标记清除、高速缓存管理、和常量。通过 使用标记以标识唯一操作数集合,允许计算无序进行、并且稍后为进一步的处理进 行重新聚集。这允许通过同时计算大型操作数集合的多个并行处理单元或者通过当 操作数集合可用时抓住时机地取回和执行操作数集合提供的更高的计算速度。
当结合附图的时候,从下面的详细描述中,其它的优点将变得明显,附图中
附图的简要说明


图1是通常表示可在其中包括本发明的计算环境的框图2是根据本发明的各个方面、通常表示计算硬件的节点和其中数据操作数 流的数据流图,其中图可以是配置的部分或者全部;
图3是根据本发明的各个方面、通常表示内容可寻址存储器(CAM)体系结 构的框图4是根据本发明的各个方面、用于操作CAM体系结构中使用的标记以标识 和存储数据的各种方式的表示;
图5和6是根据本发明的各个方面、用于安排标记的各种方式的表示,诸如 以固定前缀来安排;
图7是根据本发明的各个方面、从CAM发送到由图节点表示的请求计算硬件 的完成的操作集合的表示;
图8是根据本发明的各个方面、通过函数输入标记模型处理矩阵乘法的例子, 其中数据从CAM流到计算硬件;
图9是根据本发明的各个方面、函数输入标记空间模型的概念的示例表示;
图IO是根据本发明的各个方面、基于函数关系而改变输入标记的示例表示;
图11-13是根据本发明的各个方面、函数输入标记空间模型中可能的某些示例 性输入标记空间函数的表示;
图14是根据本发明的各个方面、函数输入标记空间模型中可能的示例性函数 标记空间矩阵索引操作的表示;
图15和16是根据本发明的各个方面、分别示出可能的聚集和分散存储器存 取的固定前缀和函数输入标记空间表示;
图17是根据本发明的各个方面、示出函数输入标记规格的交错标记空间的基 于矢量的函数的表示;
图18是根据本发明的各个方面、示出函数输入标记规格的紧凑标记空间的矩 阵乘法操作的表示;
图19是根据本发明的各个方面、示出一对多函数输入标记空间关系的矩阵乘 法操作的表示;
图20和21是根据本发明的各个方面、使用函数输入标记空间模型的高速缓 存管理例子的表示;
图22是根据本发明的各个方面、通过CAM的处理稀疏矢量/矩阵的示例表示; 图23是根据本发明的各个方面、由节点表示的计算硬件配置的示例表示; 图24是根据本发明的各个方面、表示用于管理(计算硬件的)功能单元的配
置的示例状态机的框图25是根据本发明的各个方面、在管理配置中使用的执行记录的表示;
图26A和26B是根据本发明的各个方面、表示随着操作数集合完成和配置被
执行的配置和相应执行记录的图27是根据本发明的各个方面、关于如何将CAM操作数用于执行条件if-then
语句的表示;
图28和29是根据本发明的各个方面、关于如何将CAM操作数用于执行和实 现while循环的表示;
图30是根据本发明的各个方面、关于如何以及何时在配置输出合并之后执行 标记清除的示例表示;
图31-33是根据本发明的各个方面、表示为阻塞输入数据流一段时间直到图中 的其他数据己经被处理而使用标志的示例性图34是根据本发明的各个方面、例示配置加载的调度的优化的表示;
图35A和35B是根据本发明的各个方面、表示对用于处理递归函数的返回标 记的使用的图36是根据本发明的各个方面、在处理递归函数中使用的前向和递归后码输 入标记格式的表示;
图37-44是根据本发明的各个方面、当处理图35A和35B的示例递归函数时 所生成的标记和结果的重复;
图45是根据本发明的各个方面、标记如何在外部存储器中划分的表示;
图46是根据本发明的各个方面、示例多层TRIE实现形式的示例外部存储器 数据结构分层结构的表示;以及
图47-52是根据本发明的各个方面、管理外部存储器中的标记和数据时使用的 各种表格的表示。
详细描述
^吝^寻必存儲器rC4M)沐l潜沟 本发明的内容可寻址存储器(CAM)体系结构一般旨在以一种易于编程、具有 实际实现并可被应用到通用的问题中的方式为执行相对高要求的计算任务提供平 台。存可并行处理的各种计算问题和任务,比如图形、语音处理、人工智能、仿真
和建模、生物合成、数据挖掘、数据处理、数据库、服务器应用等。这些应用中的 很多应用是众所周知的,并且属于巨型计算机领域。
但是,本发明不仅仅局限于任何特定的数据处理应用。通常,当本发明所描 述的一个示例体系结构试图解决上述标识的问题和任务中的一些或者全部的时候,
可以将CAM体系结构縮小到一定程度。因此,由CAM体系结构提供的高速计算 可为大量市场用户使用;举例来说,很多基于CAM的特征可被包括在消费者计算 环境中,比如文字处理、数据库和游戏程序。
图1显示比如计算机器100的一般计算环境,其中在该计算机器中,可以实 现本发明的各个方面。在图1中,机器包括具有一些计算硬件102的芯片,其中计 算硬件102通过互连网络104和CAM控制器硬件105耦合到在片上(on-chip)CAM 存储区域106。注意到CAM控制器硬件105至少在某种程度上可以与互连网络104 组合,为了更高的效率和/或更好的实现。
并且也如图1所示的 一些随机存取存储器107包括片外(off-chip)CAM存储 区域108。通常,并且如下所述,片上(on-chip)CAM存储缓冲区106是快速高速缓 存,片外(off-chip)CAM存储区域108用作片上(on-chip)CAM存储缓冲区106较慢 存取但较大的支持存储。注意到片外(off-chip)CAM存储108自身可以是由持久存 储器113比如硬盘驱动器支持的虚拟存储器。存储器管理器115或者类似物(自身 部分加载在RAM中)可以以众所周知的方式处理这样的RAM/持续存储虚拟化。 各种与CAM相关的组件在下面进行更详细的描述。
根据本发明的各个方面,CAM (包括它的各种组件)提供了标识和跟踪数据 以便并行执行的一种方式。和其中程序员为处理器编写一系列的指令以便依次序执 行所玩控制驱动的体系结构形成对比,本发明可以使用数据驱动,或者数据流程序, 其中当指令的另外一种解释可以给出相同的结果时,在处理上不用强加严格的次 序。尽管数据流驱动结构明确地显示操作(或者步骤)之间的必要依赖关系,但没 有对可以并行执行的操作给出任何限制。相反,数据流处理器使用数据流程序作为 输入,接着将按照明确指定的依赖性所允许一样多的并行性应用到问题中。
如图2中所表示的,可以将数据流程序指定为连接运算符的图(表示为节点 NA-NC),因此通常将程序称为数据流图。操作数(举例来说,io-i3禾ns^2禾nO()) 包括在连接的圆弧上隐含地流动的数据。无论何时,运算符在它所有的输入圆弧上 均具有操作数,比如节点NA有操作数i。和i,存在,允许该操作数点火(执行它的 操作)并产生用于下一计算的一个或者多个输出操作数(举例来说,S,)。
数据流处理以从数据流过图的方式来得到其名称。在图2的例子中,如果每 条指令花费一个单位时间来执行,则数据流程序可以在两个时间步骤中执行,因为 允许两个乘法操作在第一时间步骤中并行执行,仅仅执行总和需要第二时间步骤。 与此相反,控制驱动的程序将在三个时间步骤中执行(一个用于第一乘法, 一个用 于第二乘法以及一个用于总和操作)。
数据流图的一个特性是可以认为图中的每个节点均是孤立的系统;节点等待
输入,并且当输入存在时,产生输出。通常,除了排队输入以及以某种流控制方案
产生输出以外,节点是不需要考虑其周围其他节点的动作的。因此,可以将系统设
计成在该系统中(可能相对的简单),处理器专门用于这些节点的每一个,并且
处理器可以并行操作。比如,在图2中, 一个处理器可以处理节点NA上的乘法操
作,另一处理器处理节点Nb上的乘法操作,并且又一处理器处理节点Nc上的总
和操作。然而注意到,因为通常这样的图远大于可使用每个处理器节点方法来实现
的图,所以数据流体系结构试图处理这样一个问题将大的数据流图映射到计算资
源的小得多的集合上。注意到如下所述的,硬件在运行时是可重新配置的(举例来
说,通过类似现场可编程门阵列的硬件),由此如果需要的话,可以配置数据流图 或者其中的一部分。
此外, 一旦处理器执行操作,独立于下游处理,处理器一接收到它的输入操 作数的完成集合,就可以自由地执行其它操作。节点因此是独立的。为此目的,节
点可以从CAM接收其操作数,比如在FIFO队列中,并且将它的输出放置在类似 的FIFO队列(举例来说, 一组硬件寄存器)中,其中FIFO队列又由下游处理器 或者CAM消费。或者,当队列可以连接处理节点的时候,可以直接连接处理节点 使得在它们之间没有队列,或者队列长度为l。在运行操作数进入计算节点之前, 通过建造完成的操作数集合,来保证必要的值是可用的,由此一旦操作数集合被运 行,计算中即不需要延迟以等待值,减少或者消除了队列的需要。实际上,CAM 用作数据的全局队列,并且当完成的操作数集合变得可用的时候,将其从全局队列 中拉出来。但是,可以使用不需要在运行前完全集合完成的操作数集合的硬件来提 供其它优势。此外,对于一个给定的输入,存在产生多于一个输出的操作模式,因 此在节点之间的队列是有优势的。而且,因为图中的不同节点需要不同数目的时钟 周期来完成计算,可能有必要使用节点之间的固定延迟队列,以便对来自供应共同 的孩子节点的两个兄弟节点的输出进行路径长度匹配。
除并行计算以外,节点的独立提供了集合处理数据的能力,基本上如一批操
作数。因此,比如,与控制驱动程序不同, 一旦节点NA点火之后, 一具有它的输 入时,节点Np就可以再次点火。这意味着当节点Nc正在点火的时候,比如在第
二时间单位上,节点Na和NB也可以在相同的第二时间单位上点火,比如使用输
入操作数i4到i7 (没有示出)。因此,在节点NA和NB点火一次之后,图2中所
表示的三个节点可以在同样的时间点火,直到在CAM中没有数据可用于输入给节 点Na和Nb。应该可以意识到,通过考虑成千上万个数据输入集合,比如,除了数 据的第一和最后一个集合以外均是在两个时间步骤中由三个并行操作处理的。比
如,给定四个数据输入的IOOO个集合(i。到i,9),以及每个操作一个时间步骤,
需要1001个时间步骤来处理整个集合;时间TO可以开始i"3的集合SO(半处理), 时间Tl将结束集合SO并且开始集合Sl,时间T2将结束集合Sl并且开始S2等 依此类推,直到时间T1000结束集合S999。可以看出,与对每个集合其需要三个 操作(乘法、乘法、接着加法)然后开始下一集合,从而在以上示例中总共3000 个时间单位的控制驱动的程序不同在使用大量数据的情况下,通过这样的并行实现
了计算速度上的巨大增益(在上述例子中约为三倍)。通常,图越复杂(举例来说, 越宽),计算速度上的增益就越大。
可以看出,由数据流方法提供的加速与算法允许的并行性直接相关。对每个 算法,程序中存在的并行性的量会有相当大的不同,但是存在很多展示高度并行性 并可受益于计算的数据流模型的众多应用。这些领域包括图形、祌经网络、数字信 号处理、通信、网络服务器、语音处理、数据挖掘、天气预报、各种仿真器和一般 的科学计算。数据流程序可以大大加速这些类型的应用,只要给定能够使用明确指 定的并行性的计算机。
尽管对本发明不是很必要的,数据流计算很好地对应于运行时的重配置 (RTR)的概念。更具体地,数据流编程模型是指定独立操作的计算节点的集合之 间的连接的一种模型,而运行时重配置是使硬件实现这些节点的动作的一种可能的 方式。为此,与将函数蚀刻在芯片上并且从不改变,相反仅由控制驱动程序的指令 引导的传统的芯片技术不同,运行时可重配置系统试图以这样的方式构造设备的逻 辑它们可以在运行时重定目标以适应当前的任务。在图2的数据流例子中,在设 备上可以有三个通用的节点,并且对于这些程序,将两个配置成乘法器,同时将第 三个配置成加法器。因此,运行时可重配置的机器试图更好地使用可用芯片。不仅 可重配置能力是不同的,而且运行时可重配置系统不同于在管芯上固定三个通用的 处理器,比如,因为运行时可重配置系统中的通用节点通常是更加简单的。比如,
相对于成百个或者上千个具有完全特征的通用处理器,具有成百个或者上千个简单 可重配置功能单元将是更实际的。
因此,可以使用运行时可重配置芯片来转换处理元素的集合,以实现给定的 函数,并且从而执行并行计算,并且对固定函数通用处理器实现加速。当获取加速 的优势后,如果期望的话,可以通过使用加速来节约功率。换句话说,较高速的执 行意味着需要执行计算所需时钟周期较少,因此,相比于较慢的、通用处理器,可 使较快的运行时可重配置系统消耗较少的功率。
因此可以理解,可以各种方式连接的可配置计算元素的大型集合非常好地映 射到数据流计算。运行时可重配置系统具有某个有限数目的这些计算元素(或者功 能单元),并且将不同的配置(整个图或者子图)在运行时编程到这些功能单元中。 如下所述,在需求基础上将配置分页到硬件中,类似于如何在传统的计算机中处理 虚拟存储器的方式。当产生数据集的时候,将其相应的配置分页到硬件中,并且接 着在其上运行数据集。接着生成新的数据集,其可以导致新的配置进入页面依此类 推通过程序。
在图3中描述了通用CAM系统体系结构,其中在计算硬件比如包括计算逻辑 的功能单元302和CAM片上(on-chip)高速缓存组件306之间的连接是通过互连网 络304的,比如通过纵横制互连网络。根据空间限制,如果必要的话可以经由分层 结构对纵横制互连网络可以进行尺寸限制。比如,可以将功能单元分成群集,每个 群集包括连接到芯片级的纵横制互连网络上的本地纵横制互连网络。
功能单元302包括用于处理逻辑操作、整数操作和其它操作的硬件,操作比 如是数字串行浮点操作(如下所述)。可以将功能单元302构造成以固定已知延迟 进行操作,使得它们可以流水线方式通过互连网络(纵横制互连网络)304进行连 接,而不用引入流水线停顿或气泡(bubble)。在一些情况下,有必要要将额外的 流水线级延迟引入数据流图中,以获取这样的结果。此外,因为通过图的路径不必 是相同长度的(举例来说,按照节点个数),对于两个具有不同等待时间的合并路 径,可以使用这些延迟来进行路径长度均等化。这样的流水线级可以被包括在功能 单元302、互连(路由)网络304中,和/或作为连接到互连网络304的单独元件。 然而,注意到不同的延迟也是可行的,如同在功能单元的输出处排队一样。
如图3所示,CAM包括两个组件,片上(on-chip)高速缓存组件306和从传统 RAM中构造的片外主存储器组件308的;(这些组件被统称为内容可寻址存储器, 即CAM 310)。片上(on-chip)高速缓存组件306是是用于将数据提供给功能单元
302的较小的快速存储器,其试图通过存储可能在不久的将来即需要的数据的影子
(shadow)副本来最小化片外存取。相对于片上高速缓存306,片外存储器308的 存储容量大得多但是速度比较慢,并且由硬件通过使用如下所述的数据结构来进行 管理。如参考图1所述,并且如图3中所提示的,可通过将部分数据存储在磁盘上, 如同众所周知的虚拟存储器一样,来虚拟化片外存储器308以便获得更多的容量。
根据本发明的一个方面,CAM体系结构以不同于正常处理器的方式来虚拟化 主存储器。更具体地,使用也被称为关联存储器的CAM310作为机器的主存储和 同步化机构。为此,并且一般而言,向系统中的每个数据分配用于引用该数据的唯 一标记。使用硬件管理的分配系统将数据及其相关联的标记存储在存储器中。因此, 通过使用各种聪明的存储技术,硬件可以帮助阻止随机存取模式。
在CAM体系结构中使用的一个适当的示例标记生成机制是标记的数据项目 用来从数据流图的一个部分行进到下一部分的一个过程,。该过程在以下描述,但 是一般而言,在图4的概念模型中表示了标记生成硬件的一个概念。在图4中,根 据输入标记生成输出标记。各种掩码技术、布尔操作、移位操作和加法可以将期望 的输入标记转换成期望的输出标记。注意到如下所述,CAM处理标记生成,以及 仅发送到计算硬件的数据;(注意到有时随数据将与标记相关的值发送到计算硬件 中)。此外,注意到如图4中所示的操作仅仅旨在大体上描述概念,并不旨在表示 给定的机器中可能所需的功能的全部集合。
因此,除了作为存储器以外,CAM310也提供系统的同步机制。当产生标记/ 数据对的时候,将它们收集起来,并且将它们组织起来以用于后面的检索。比如, CAM具有用于标识要输入到计算硬件的数据的标记,其以操作数的形式提供数据 给计算硬件以便消费(举例来说,在一FIFO队列中),并且基于相应数据的输入 标记将结果输出数据(例如,在另一FIFO队列中)与输出标记重新关联。生成标 记以便由以下配置在同一操作中使用的数据值在存储器中具有相邻的位置,这样可 以便于快速检索。
当创建数据的时候,通过存储器分层结构转发数据,以便于(通常地)其可 以在与后面将要使用的其它操作数非常近的位置中停下来。比如,如果计算了数量 A,那么将其转发以便在与B相邻的地方停下来,使得当执行C-A + B的时候, A和B可以位于存储器中物理位置非常接近的地方。下面将参考操作数集合描述 这个概念。
进一步的增强通过类似地放置给定操作序列将需要处于邻近处的所有数据或 者大多数数据而得到其它增强。换句话说,不仅仅上述计算的单个A和B元素是
相邻的,并且如果存在需要加在了起的好几对A和B,这些对在主存储器中物理
上也是相邻的。相比于其它方式,其便于更快的存储器存取。
根据本发明的一个方面,通过标记,CAM体系结构引入了硬件级对象的概念, 其包括简化编程模型的装置,以及将并行性引入系统的机制。通常,CAM体系结 构中使用的每个操作数可以被认为是由唯一标记引用的对象,如上所述,这允许跟 踪中间计算中使用的操作数。将这些操作数组合起来以形成较大的对象,接着作为
整体被代码模块弓1用并且被处理。
在面向对象的编程模型中数据流机器工作良好。现在已经在众多处理器上定 义和使用了面向对象语言,然而,在现代处理器上运行的代码没有对象的概念,并 且实际上,面向对象的模型仅仅向程序员呈现了面向对象行为的假像。因此面向对 象编程对于程序员来说是仅是语法深度上的一个组织工具。比如,尽管有可能编写
以下形式的矢量加法操作的源代码
C二A + B;(其中A、 B和C是矢量),
在内部,源代码将最终导致如下代码被执行 for( i = 0; i < n; i++ ) C[i] = A[i] + B[i].
根据本发明,特定对象的元素可共享引用对象的标记位的公共模式(举例来 说,前缀)。在上述例子中的索引i被表示为标记中的变量位,它们用于将标记空 间中的迭代保持分离。比如,在上述例子中的矢量A和B具有公共的标记前缀, 并且允许每个索引i使用标记的低位来选择特定的A[i]、 B[i]对。硬件提供用于管 理这些对象(标记空间)的机制,以用于有效地替代在更传统系统中的垃圾收集器。
为了试图最大化对可能的并行性的使用,CAM处理器使用面向对象的编程风 格作为一种机制。如下所述,当用户指定两个对象之间的操作时,迭代变量是隐含 的。接着允许硬件来以任何次序处理这些对象的元素,使用尽可能多的并行性。其 本质上等于在硬件级进行循环展开。
这个技术允许空间和时间并行性两者。依赖于对象中元素的数目、处理流水 线的有效设置时间以及每个元素的处理时间,硬件可以选择配置宽的、高度并行的 处理配置,可能在一个节点仅仅处理一个元素。换句话说,也可以将硬件以更流水 线的方式进行配置,比如非常狭窄的配置仅仅具有一个处理元素。可以在运行时作 出这些类型的决策,以符合处理器上所存在的执行条件。
此外,如果对象的一些元素需要长于其它元素的处理时间,或者如果一些元
素己经准备被处理,而其它的元素还没有准备好,本发明通常让元素进行无序的处 理,以便对计算资源进行更优化的使用。比如,在对矢量的元素进行迭代的循环中, 一些元素需要比其它元素更多的迭代。在这样的处理中,允许早期终止的元素落入 用于进一步处理的循环中,而同时允许需要更多迭代的元素留在后面是非常有益 的。总的来说,这是非常有益的,因为如果元素需要依次序退出迭代步骤的话,并 且比如,第一元素碰巧需要更多迭代,相比这种情况本发明允许算法的后面级早点 开始执行。
另外一个优势是使计算流水线更满。作为示例,如果流水线是五个时间周期 长,那么特定操作数的每次迭代将需要五个时钟周期来完成。如果第一操作数需要 五个迭代,那么将在该一个计算上花费二十五个时钟周期。然而,在这些相同的二 十五个时钟周期期间,其它的操作数将占用"空"的流水线级。如果这些其它的操 作数需要较少的迭代,那么它们将更迅速地停止迭代,从而在流水线中释放它们的 时间槽供新操作数使用。因此,在也可以执行该一个二十五时钟周期长的计算的同 时,许多其它的操作数也有可能完成循环。
作为一个额外的增益,这种类型的并行性具有平均元素之间的迭代步骤的执 行时间的作用,以便于将对于落入循环并且快速离开的较快迭代元素来平衡需要很 多迭代的一些单个元素。这对调度是非常重要的,因为对数据流图中的执行路径长 度进行匹配以实现最佳性能。
作为示例,考虑矢量,其中期望使用Newton的方法来找到每个元素的平方根。 事先不知道计算根所需的迭代的确切数目,并且每个元素需要不同数目的迭代。然 而,对矢量使用面向对象的方法,可以任何次序处理和完成元素,同时确保在相当 程度上占用计算节点。
因此,CAM体系结构通过将整个数据集合作为关于存储器系统的对象,进一 步对各种其它的模型进行了改进。对于特定标记空间的所有操作数集合,可以从处 理节点中发出单个请求。接着可按照电路交换的方式使用网络来传送满足请求的操 作数集合,每个操作具有非常小的管理开销。相反的,单独操作每个标记/数据对 的系统具有更加开销密集的任务。通过管理由多个操作数组成的对象,而不是各个 操作数本身,系统可以添加额外的计算节点以按比例增加处理性能。因为将 CAM310处理为更加整体的结构,作为预处理节点相关联存储器的尺寸的结果,溢 出和死锁的问题较少。
并行系统的另外一个目标是可縮放性,其中将更多的计算资源添加到系统中,
产生了更快的解决时间。其为真的程度依赖于计算和体系结构。每个计算问题都具 有对可进行多少个并行计算的限制,并且CAM体系结构允许通过对象(标记空间) 的使用表示算法的自然并行性。如此处所述的,系统接着应用尽可能多的并行性来 完成任务。
根据体系结构的约束,瓶颈可能出现在机器的数据处理部分,或者机器的控 制部分。数据流计算模型的一个好处是其固有地将计算问题的数据依赖性减少到正 确完成计算所需的最小的可能。此外,对每个处理节点来说,操作是本地的,因此 有可能使用分布式控制结构来有效地处理数据流图。对每个节点来说,数据也是本 地的,给出了相同的好处。通过构造机器体系结构来利用数据和控制的本地性,以 允许完全分布式的处理,固有地得到了可縮放性。
可以从图3中看出,与具有内部高速缓存的处理器不同,本发明的CAM体系 结构将相关联存储器(CAM)310从处理元件(功能单元)302中分离开,并且作为 计算网络上的分离的共享资源来访问存储器。因此,可以添加单独的处理元件作为 可縮放性的单位。当处理元件执行的时候,该元件请求包括很多操作数的对象(标 记空间),当操作元件的操作数集合完成的时候,每个操作数可以在处理元件上运 行。注意到与此相反的,其它的数据流体系结构将机器划分成节点,每个节点包括 用于操作数匹配的相关联存储器以及处理元件;可縮放性的单位是相关联存储器/ 处理元件对。此外,在传统的处理中,在主存储器中检索数据并且存储数据,其中 主存储器具有限的带宽。传统的微处理器硬件通过使用高速缓存存储器的分层结构 继之以片外主存,试图减少数据检索和存储的带宽相关问题。当预期将来的访问将 请求相同的数据、或者位于最后一次数据访问邻近处的数据时,使用小而快的高速 缓存来作为较大、较慢、片外存储器的镜像。然而,传统的硬件对软件选择使用的 存储器访问模式没有许多控制。因此,正常微处理器上的程序有可能以高速缓存提 供小到没有(little-to-no)的好处的方式来访问存储器。
转到另一个一般的设计方面,计算机应用程序往往是"处理器绑定"或者"I/O 绑定"的,其中将处理器绑定应用程序定义为花费较多的资源(和时间)来执行计 算而较少的时间来移动数据,然而I/O绑定应用程序往往花费较多的资源(和时间) 来移动数据而较少的时间来执行代码。通常,因为比如磁盘和片外存储器的I/0子 系统的限制,构建一个用于I/O绑定应用程序的机器比构建一个用于处理器绑定应 用程序的机器,要困难很多。此外,设计用于I/0绑定应用程序的体系结构通常在 执行处理器绑定应用程序时,要比处理器绑定的体系结构执行I/O绑定计算执行得
好。如可容易理解的,当可以置于单个芯片上的计算能力的数量增加的时候,应用 程序将变得越来越1/0绑定的。
很多具有高度并行性的应用程序也是I/O绑定的,并且因此本发明的CAM体 系结构的设计试图提供i/o能力。机器(举例来说,运行时可重配置)的体系结构 通常包括可编程计算元件(功能单元)302、用于在它们之间移动数据的路由网络 304、某种类型的控制和存储器。良好的I/0性能的要素包括路由网络和存储器。
路由网络304确定在功能单元302之间的连接的灵活性。更复杂的网络,比 如纵横制互连网络,以更多芯片面积为代价允许任意或者接近任意的连接模式。较 不复杂的网络,比如总线,仍然允许小面积成本下的任意连接,但是因时间复用而 以性能为代价。其它网络,比如网格,通过向最近的邻居提供良好的连接,是两个 极端之间的折衷。这没有遭受总线的全部性能损失,但是也没有提供纵横制互连网 络的全部灵活性。在尝试满足数据流图可允许的任意模式的时候,这可以导致功能 单元的内部分段,因此可以结束功能单元资源的浪费。此外,由网络强加的路由约 束可以强制数据流图被分成较小的片,导致需要额外的缓冲,而这可以落在片外存 储器中。
因为CAM体系结构主要是用于,为可能展示I/0绑定行为的高度并行问题提 供高性能机器,期望在最小化对芯片区域的影响的同时,能够维持最大的连通性。 因此, 一种实现使用纵横制互连网络作为主要片上互连304。注意到可以减少其一 般较大的空间需求,比如通过数字串行算术方案的选择。
更具体地,数字串行算术包括可用来表示浮点数的交替数字表示技术。数字 串行算术从最高位数字处理到最低位数字,而非很多程序员和机器设计员所熟悉的 最低位到最高位方法。可以实现这些,是因为在某个容许度范围内,允许后面的数 字对前面的数字进行校正。容许度可以被认为是按照任何给定数字步长的计算的间 隔。
尽管对本发明不是必要的,但存在使用数字串行算术作为机器的表示方案的 优势,包括数字串行技术首先产生最高位数字,这样字面上有可能在前一个结束之 前开始下一个计算。可以在逐个数字的级别上、从一个操作到下一个操作对数字串 行机器进行流水化。根据流水线结构,在操作的限制下,可以将任何功能都减少成 单个时钟周期。此外,数字串行数据路径可以比典型的字宽路径狭窄。这减少了数 据路由所需的面积,并且使得系统中可能有更丰富的互连结构。更多的互连意味着 可以在芯片上并发表示更大的数据流图,以及使得映射问题变得更加简单。也意味
着在芯片上包括更多的功能单元,因为现在它们有更多空间。
用于数字串行的单个数字操作可以是相当简单的,比如移位和加法。因此, 可能以非常高的速率对这样的机器进行时钟同步。也可能在单个数字串行节点中构 造比标准加、减、乘和除更复杂函数。比如,可以实现超越函数,以及所感兴趣的 其它函数。此外,简单地通过修改一些起始参数,即可以改变特定节点的功能,这
很好地适合可重配置的体系结构。但是,尽管数字串行算术可以是CAM体系结构 中以及其它的体系结构中的主要计算方法,但CAM体系结构也可以在不使用数字 串行算术的情况下起作用。
在某个程度上,CAM与正常的RAM相类似,因为数据被存储在特定的地址 中,并且可以使用这个地址来检索该数据。然而,在CAM和RAM之间存在很多 差异,包括CAM310便于快速并行搜索和检索操作,包括通过请求特定标记以查 看其是否存在于存储器中。与RAM不同,CAM 310允许部分指定的标记来匹配 在CAM 310中的单个标记的范围,并且连续对它们全部进行检索。虽然在RAM 中是可能的,但这样的操作需要软件搜索。
然而,可以使用CAM310作为硬件管理的分类设备,其中硬件提供了用于特 定算法的较大的加速。在CAM310中通过使用键值作为标记的一部分,接着允许 以分类的次序从CAM310中检索标记范围以完成分类操作。注意到标记不必以分 类的次序进行检索;相反,用于分类的键值可作为标记的一部分被包括,这将产生 类似的效果。即使可无次序地检索标记本身,键值被包括在标记中的事实可以允许 各种机制获知特定标记在集合中的相对次序。
此外,在CAM 310中,标记的尺寸可以比相应的RAM的地址宽度宽很多。 换句话说,在四吉字节的RAM上存在三十二条地址线,在直接寻址方案中,这可 将标记宽度限为基本上32位。然而,CAM310管理存储器,使得即使存储器的物 理尺寸可以是例如四吉字节,但标记宽度可以大得多,举例来说,64位或者更多。 如下所述,对于一些操作来说,比如,需要很多的标记的递归,宽标记宽度是有价 值的。
标记它们本身没有暴露给计算硬件302。相反,如下所述,除了当被包括为数 据流的一部分以用于进一步的操作和计算以外,它们被整体维护在CAM组件306 和308中,。如上所述,将批量数据运行进入计算硬件302中,并且当它们返回的 时候重新将其与其标记相关联。因此,当其数据运行的时候,可以在FIFO中存储 输入标记,并且然后当数据批量从功能单元302中的实例化的子图返回时以FIFO
次序检索该标记。在CAM体系结构中,不需要在计算硬件302中进行标记转换, 由此可以通过将它们整个包括在CAM310中来以保存一些资源。换句话说,无需 维持用于标记与数据流并行的硬件路径;相反,可以将数据运行到系统中,并将其 相关联标记留在CAM中,以便当数据返回的时候重新联结。
通常如上所述,操作数集合是生成一个结果所需的值的集合。比如,当评估 2*(3+7)的时候,存在三个操作数,即2、 3和7;当这三个操作数都可用时,汇编 了一个完成的操作数集合。操作数集合由与数据值相关联的标记指定。在下面描述 了指定和使用与数据相关联的标记以形成操作数集合的两种方法,即固定的前缀模 型和函数输入标记空间模型。注意到这些方法仅仅是非限制性的例子,并且其它的 方法也是可行的。
当己经汇编了用于给定操作数集合的所有操作数的时候,当运行时该操作数 集合有资格从CAM传送到其相应的配置中。通常,仅从CAM中发射完成的操作
数集合。
根据本发明的一个方面,通过使用标记来标识唯一操作数集合,允许计算被 无序处理,并且为进一步的处理而在稍后进行重新收集。无序处理以多个方式允许 较大的计算速度,包括多个并行处理单元可以同时计算操作数集合的大型集合。这 可以将标记空间再细分成更小的固定尺寸区域,或者当操作数集合变为可用时,处 理单元可以抓住时机地取回并执行操作数集合。因为未强加任何计算的人工的边 界,抓住时机的取回方法具有潜在较短处理时间的优势,而再细分的标记空间可以 允许更好的高速缓存管理。
如果计算具有可变的等待时间,则非有序处理也是有优势的。这是其中每个 操作数集合的精确的运行时间不同的众多迭代算法的情况。在这种情况下,抓住时 机从标记空间读出操作数集合的一组处理单元尤其有利,因为数据的任何给定的子 集合的总处理时间是未知的。
如上所述,使用标记作为系统中每个数据操作数的唯一标签或者标识符。一 种类型的标记使用操作数集合组合件的固定前缀输入标记空间概念,这是非常直截 了当的。在图5和6中表示了这个系统中的典型标记的例子。标记空间由其所包含 的数据值的标记中的前缀位的公共集合来定义。除了公共前缀之外,该标记空间内 的各个操作数集合按中间位的公共集合来标识。使用这些中间位来区分比如迭代次 数、矢量索引和操作数数目等。通过使用来自数据流的键值来替代它们,也可以使 用它们来进行检索和分类操作。因此给定操作数集合的各个操作数通常仅在它们各
自标记的一些低位上是不同的。
在图5的例子中,标记的高16位指定标记所属的标记空间。注意到每个配置 具有唯一的输入标记空间,并且区分了这些位是如何唯一的。
跟随其后的是例子中29位"用户空间"。这些位不需要是相邻的,并且在所 使用的值上不存在真正的限制。这些位可以用于对特定的应用有意义的任何目的,, 然而在实践中,使用这些位来分开一配置的输入标记空间中的操作数集合。因为中
间的29位指定标记所属的特定操作数集合,具有共同的16位前缀和这29位的任 意两个标记将被放置在同一操作数集合中。
使用最低的三位(也被称为数据(或者图5中的位置位)),来指示与该标 记相关联的数据将在操作数集合中占用哪个"槽"。举例来说,该槽将被耦合到配 置中的特定路径上,比如除法运算符的右端。在图5的例子中,最低的3位指示相 关联数据旨在填入操作数集合内八个可能的操作数中的哪一个。
然而,注意到,根据这个标记空间的操作数集合的大小,在某种程度上用户 位和位置位是可以权衡的。因此,如图6中所示,可以允许操作数集合中的操作数 的数目发生变化,其中在图6中,在操作数集合中存在四个操作数。如果标记空间 使用四个操作数的操作数集合,那么将存在三十个用户位和两个位置位。如果标记 空间使用各自一个操作数的操作数集合,那么将存在三十一个用户位和一个位置 位。然而,注意到,图5和6的例子使用48位标记,且可使用更宽的标记。
在图7中进一步描述了固定前缀输入标记空间的概念,其中在图的左边表示 了 CAM内容,具有以公共标记前缀0x1236形成的若干操作数集合。注意到形成 这个例子中的完成操作数集合需要八个操作数(四个操作数,每个都需要两个操作 数来点火)。最高的集合(前缀0xl234)具有两个操作数,下一个集合(前缀0x1235) 具有一个操作数,下一个集合(无影子,前缀0x1236)具有全部的八个操作数而 最低的集合(前缀0x1238)具有七个操作数。因为该无影子的集合具有完成数目 的操作数,即这个例子中的八个,所以将集合发送给配置以便处理,如由从标记内 容连接到图的右端上的节点的箭头所表示。其余的操作数集合保持在CAM310中 处于空闲状态,直到它们完成。
如果操作数集合的所有成员操作数都是有效的,那么该操作数集合完成。CAM 体系结构的每个配置(计算内核)具有单个输入标记空间规格,即公共的前缀位。 在执行时,CAM310从空间开始发出标记以用于处理。通常,CAM仅从输入标记 空间发出完成的操作数集合,(尽管存在期望发出没有完成的操作数集合的异常)。
当配置执行的时候,CAM 310发出与作为输入标记的函数的新的标记相关联的新
数据值。这些新的标记落入它们的消费者配置的输入标记空间以用于以后的处理。 以这种方式,标记的产生是"前向供给",本质上意味着给定消费者的标记 的生产者将其标记引导至相同的标记空间。这帮助硬件路由数据,并且将其形成为 系统的自然分区。可以很容易地在存储器中安排标记,使得根据标记值相邻的标记
在存储器中也是相邻的。该存储器相邻性允许硬件使用快速RAM突发访问以流入 完成的操作数集合中,该操作数集合然后可被转发给计算硬件302以用于处理。 这个计算的模型试图确保在同一计算中将一起使用的值在RAM中彼此物理
上相邻,使得可以在执行时快速地对其检索。注意到与其中从潜在的具有较大差异 的存储器位置中检索数据的很多控制驱动程序形成对比。访问RAM地址空间中非 接近位置,具有根据从外部RAM较长访问时间的成本,因为需要启动额外的总线 周期和RAM页面改变的可能而这是非常昂贵的。可以通过高速缓存接近不同位置 中每一个的其它的数据来将这些影响减轻到一定的程度,但是其效率有限。
注意到在固定前缀输入标记空间概念中,数据需要在处理的某个阶段被混洗 和安排,基本上是在数据产生期间。当产生每个数据值的时候,基于程序员提供的 常量和对输入标记的函数关系,为其生成相关联的标记。接着将新的标记/数据对 发送到CAM 310中,在那里它被路由到片上高速缓存306以及外部RAM存储器 系统308中的适当位置。
在这个阶段,所生成的标记/数据对有可能被发送给完全不同的存储器位置。 然而,通常,相比于读分散影响,更易于处理写分散影响。如果发出相应于太多不 同的位置的读请求,硬件不得不访问外部存储器系统,并且读取所有的数据,可能 以及来自每一位置的额外数据,因预期将在稍后需要这些数据。可将对不同位置的 写请求保存在高速缓存中一段时间,期望将发出对接近先前写请求之一的其它位置 的其它写请求。在这样的情况中,硬件可以积累可作为一单位向RAM的单个区域 发出的好几个写请求,而不用处理昂贵的RAM页改变。通常在最坏的情况发生的 时候,可以将特定的写请求发给单独的位置,在其附近没有发出其它的写请求。尽 管如此,这种情形在一种实现中是优选的,因为对目标位置仅仅需完成单个写操作, 而不是可由高速缓存执行的、期望满足可能永远也不会到达的某些将来的读请求的 一系列的读请求。
固定前缀模型的扩展包括函数输入标记空间模型,它试图解决固定模型的问 题同时也提供增强的功能。注意到任何固定前缀输入标记空间系统均可以使用函数
输入标记空间模型来实现,举例来说,使用非常简单的函数。在函数模型中,其中 根据输入标记的函数来生成一个标记,用户位域实质上整个延伸到左边,由此前缀 没有特定的含义,并且将操作数集合概念处理为片上高速缓存抽象。使用相同的数 据结构,函数相关的标记仍可被存储在物理存储器的相同位置中。位置位仍可以指 示操作数集合内的操作数数目,尽管它也可以是所计算出的位之一,从而对各个操 作数有所不同。因为一种实现支持对标记的低位的索引,程序员通常应该为最高效 率而作同样的事情。
固定前缀模型的问题之一是在某些情况中需要数据复制。考虑到正常矩阵乘

a02600 602
X6i。、
a21621
将A的每行与B的每列相乘,来获得结果。固定前缀输入标记空间模型需要 A的每行复制三次,每个副本接着与B的一列相匹配。如图8所示,这产生九个 不同的乘积,接着再对它们进行适当的求和。需要A中每个元素的三个副本,以 便于它们可以与B的元素形成唯一操作数集合,并且产生唯一的乘积。将这些操 作数集合置于乘法运算符的输入标记空间中,并且然后对其进行处理。在图8的例 子中,示出了三个乘法节点,但是该例也可以使用单个乘法节点。
这种类型的数据复制对片上和片外带宽通常是有害的,因为产生了重复的数 据,系统没有选择,不得不将其作为唯一数据进行处理。因为在该例中的数据的三 个副本中的每一个都具有唯一的标记,系统也仅可以假定数据是唯一的。这个过量 的数据导致片上高速缓存306中的需求不必要地增加,可将其自己或者其它的数据 推到片外。由于外部存储器访问速度较低,这样的情况是不受欢迎的。
相反,通过允许操作数集合引用A的元素而不用实际上复制数据,可以实现 更好的模型。这要求用于被允许是操作数集合的一部分的标记的更通用的规格机 制。在图9中示出了一种构建操作数集合的方法,其中在操作数集合中的每个位置 中具有不同的输入标记说明符,而不是其中操作数集合中的所有操作数共享相同的 前缀和用户位,仅在位置上不同的固定前缀方案。在完全灵活的系统中,可将任意 标记说明符放置在所示的四个位置的每一个中,使得系统需要维持大的数据结构, 以便跟踪哪些标记形成了用于每个运算符的操作数集合;然而,尽管是灵活的设计, 但为了跟踪很多关系,可能要承受性能的损失。 改进的系统是不需要大型关系表,但是仍允许使用足够的规格灵活性的一个 系统。如可以理解,固定前缀输入标记规格可能是最不灵活的系统,因为它仅允许 输入标记之间的单个隐含关系。对于标记操作,并且后面的数据操纵,固定前缀输 入标记规格依赖于这样一个事实标记可以在输出之后发生改变,以落入目的地标 记空间中。然而,如同所示的,因此它可能导致其自身的问题。改进的解决方案使 用输入标记之间的函数关系。更具体地,如果每个标记可使用程序员指定的函数从 任意另一标记得到,则不需要潜在较大的关系表,并且对输入标记计进行有价值的 操作来创建操作数集合也是有可能的。
输入标记之间的函数关系的所期望的复杂度是依赖于特定的应用的。然而, 在图10中表示了简单的函数输入标记空间的例子,其中在标记生成时使用了通配 符。在图10中,输入标记A的规格显示了不变前缀E67以及较低四位(半字节)
中的通配符"?"。输入标记B的规格有前四位中的不变前缀4、接下来的四位中 的四位通配符"?"以及低八位中的不变的F0。当机器试图构造操作数集合的时 候,它访问CAM系统以试图为标记A规格找到匹配。它所找到的第一匹配是E671, 它现在将通配符位置固定为1。将通配符值1代入标记B的通配符位置,得到41F0。 机器然后将试图检索标记41F0,并且在这个例子中,找到了该标记,完成了操作 数集合。如果41F0不存在,则操作数集合未被完成,机器将移动到下一个匹配标 记A,而不对计算硬件进行发送。从图IO的例子中可以看出,存在匹配标记A规 格的四个标记,并且每个都在CAM中具有用于标记B的匹配条目。所找到的任何 完成的操作数集合将导致相关联的数据被转发转发到计算硬件302中(图3)以便 进一步处理。
通常,系统搜索匹配标记之一的规格的任何条目,然后通过应用所指定的变
换函数派生出与之相关的标记。函数关系可比简单的通配符替换更加复杂。考虑到
下面的矢量,以及图11-13的例子,其中,使用了通配符变量i和x: ["。
") "2 "3〗 F^加r5 [6。
^ 62 63 ]
在图ll所示的例子中,A的元素成对地加到B的元素上,然而,以逆序访问 B的元素。在图12中,"连续"例子的类似Fibonacci的序列显示了如何从相同的 矢量中引用值,图13的"蝴蝶"的例子也是如此。可以看出,可以对通配符位应 用有趣的数学或者位混合(swizzling)函数,以获取派生的输入标记。这些函数类 似于可对在输出标记的位上执行的函数,并且实际上,其在功能上可能是一样的。
在图14中显示了用于矩阵乘法的索引交换的例子。在图14中,索引i跨四个
不同的输入标记指示符的四个域进行移动,可能同时将四个不同的矩阵相乘。
可以将输入标记规格认为是大型存储器中带有允许它匹配多个存储器位置的 通配符的地址。在运行时使用用于每个存储器位置、匹配地址模式中完全指定的位 的特定的位来填充通配符。尽管这些例子显示通配符位在标记中是相邻的,但不必 是这样的情况。比如,可为输入标记空间之间的任何遍历关系按照输入标记空间之 间的任意模式打乱通配符位。同样地,在每个输入标记空间中不变保存的位是独立 的,并且是可个别控制的。因为可以通过改变输入标记说明符之间的位模式和/或 函数关系来对标记空间进行重新定义,标记空间的概念变得更加柔韧。
当函数输入标记空间模型向系统添加了灵活性,并且允许容易地解决重复数 据问题的时候,它也引入了潜在的其它问题。考虑到图15和16中表示的数据访问 模式,它表示固定前缀对比函数输入标记空间存储器访问模式。
固定前缀模型(图15)将操作数集合的成员限于具有仅在最低的两个三个位 中变化的标记。这样的限制使得这个模型能够容易地群集存储器中操作数集合的成
员,使得可以使用对RAM的快速突发读取来访问这些成员。这是可能的,因为操
作数操纵在簇的输出阶段发生,此时应用了标记变换函数并且将新得到的标记及其
相关联的数据被归纳到CAM中以进行分类。 一旦位于CAM310中即将标记/数据 对导入存储器中传统上置于与其操作数集合的其它成员直接相邻的适当位置中。最 后,可如所示地显现访问模式,,访问模式在配置的输入端上为线性聚集存储器访 问,在输出端上为潜在"散弹枪(shotgun)"模式的分散存储器访问。
相反地,图16的函数输入标记空间模型允许构成操作数集合的规格中有更多 的自由度。输入操作数之间的函数关系可以导致对配置的输入的随机读模式,并且 也可以展示随机写模式。
如上所述,线性存取允许快速的外部RAM突发模式。这即是固定前缀模型在 配置的输入端上所允许的,尽管配置的输出端仍然是相当随机的。然而,相比于随 机读访问,随机写访问稍易于处理,因为对随机读的正常解决方案是将靠近实际读 目标的一行值突发读入高速缓存中,期望在同一邻近处将需要另外一个值。这是非 常投机的,并且消耗外部总线带宽、内部髙速缓存资源,可能或者可能不会提供就 将来的高速缓存命中而言的好处。另一方面,期望在不久的将来将对与之前的写相 邻、或者非常接近的位置执行另一写,可在一段时间上内部地高速缓存随机写。当 到了要从高速缓存上驱逐写数据的时间的时候,可以将位于第一写附近的数据作为 块突发输出给存储器。因此,对于写,在将已知有效的数据流传送给存储器之前,
高速缓存可用于缓冲该数据一段时间,然而对于读,强制高速缓存对潜在无用的数 据进行投机性的读取,期望它将在将来被访问。
理想上,数据的访问模式没有随机性,而将存在禁止大量潜在应用的过度限 制的要求。因此,经常必需使用各种有趣的方式来访问数据,比如对FFT(快速傅 立叶变换)操作。在一种实施例中,选择随机写,由此当可能的时候,即使使用函 数输入标记空间模型,也在配置的输出端而不是在输入端完成标记操作。
然而,存在这样的时候禁止输入端标记操作将导致大量的数据复制,这可 能在甚至大于高速缓存的投机读取的程度上不利地影响片外带宽。比如,足够小以 适合整个在高速缓存的内部的矩阵允许任何输入端遍历模式,或者对相同元素的多 次访问,来适应没有外部存储器访问。如果输入标记空间模型强制进行数据复制, 同一矩阵的多个副本(举例来说,八个或者更多)将被强制放入髙速缓存中,这可 能使存储器溢出,或者至少使其他的数据离开高速缓存,因此生成外部存储器访问。 在一个实施例中,因此也向软件提供函数输入标记空间模型的灵活性,因为也可以 将其安排成作为固定前缀模型行动,并且应当理解,如果使用不当,这可能导致问 题。
存在减轻函数输入标记空间模型的固有聚集问题的各种方法,包括向程序员 提供底层硬件体系结构的一些知识,以便于程序员可以为其进行软件优化。然而, 尽管不是完全期望的,可以提供基本知识,比如认识到特定的数据集将适合放入高 速缓存中和/或者对其进行细分,使得它将适合放入高速缓存中,这对该数据集的 重复或随机访问都是有益的。维护数据本地化的一些概念也是非常有益的,举例来 说,如果知道将在将来的操作中一起使用两个不同的对象,那么可以有利地交错它 们的标记空间,比如图17中,它显示了用于函数输入标记的交错的标记空间。
在图17中,以交错的标记空间安排了矢量A、 B禾QC,使得它们将在存储器 中以交错模式被安排。软件通过配置设定向硬件提供提示,指示操作数集合的元素 是交错的。这利用了快速外部RAM突发访问以单个突发读取来读入整个操作数集 合,而不是必须从潜在不同的RAM页面执行三个不同突发读取以读入相同的数据。
相反的,如果存在大量的数据重复,或者如果在很多不同的位置上使用了相 同的对象,则对对象进行打包使其占用连续的标记位置仍是有利的。比如,这可能 是在多个计算中使用了矩阵A的情况。在那种情况下,如在图18中所示,可以将 其在标记空间中从而在存储器中的表示进行打包,图18显示了用于函数输入标记 规格的紧凑标记空间。可能需要基于程序分析来决定替换方式。然而,任何所需的分析应根据程序 是以数据流格式进行编写的事实来简化,这使得这样的依赖关系明确。这种类型的 优化依赖于连续标记将占用连续的存储器位置的假设,如同在鼓励数据流模型的模 型CAM体系结构中。
转到输入标记说明符之间的一对多映射的概念,可见,在其它的方面中,这 产生了矩阵乘法的更加紧凑的表示。考虑下面图19的矩阵乘法,它示出一对多函
数输入标记空间关系。在图19中,A的输入标记说明符具有两个通配符域i和j。 它们可以匹配矩阵A的任意元素。在找到匹配后,如所示的,仅仅将j域传播给矩 阵B的输入标记说明符。这将B说明符的k域留作第二通配符,它然后能自由地 匹配B中匹配j域的任何元素。在图19的左下方中,将该过程示为A的i和j域 并绑定到O,O,然后将B的j域固定为O,但是允许k域绑定到O、 l和2。以这种 方式,如右侧成对的列所示,生成执行矩阵乘法所需的元素排列。这种映射方案的 结果是A的每个元素都将被取回到高速缓存中,并且可用于与B的元素迸行所有 可能的排列,然后可被丢弃。这促进了对标记空间关系所定义的每个数据子空间的 引用的本地化,保存了片外存储器的带宽。
通配符概念的这种扩展提供了超出数据组织之外的多个潜在的使用,包括通 过输入操作数进行的通配符传播而创建的标记之间的关系可用于构造标记空间中 的关系数据库。也可以将这种关系视为是逻辑系统的传递特性,可以在多个不同的 应用中使用,比如人工智能、数学操作、自动的证明系统等。此外,可使用类似这 样的系统,很容易地实现类似Prolog和Lisp的语言,因为这两种语言(在某种意 义上)都是基于某种约束在状态空间上进行搜索的数据库构造。
可以看出,函数输入标记空间规范模型允许有力的数据操作,同时在存在负 值数据的情况中提供优于固定前缀模型性能优化。通过输入标记空间有计划的定义 和构造,可以最小化输入聚集问题,并且仍可以在函数输入标记空间规范模型内实 现前缀模型。
函数输入标记空间模型的其它使用包括高速缓存管理。更具体地,通过仔细 选择配置中使用的标记模式,有可能保证那些模式所引用的数据的量适合放入高速 缓存中以便避免溢出。比如,考虑到下面提出的4x4矩阵乘法的例子
"00<formula>formula see original document page 25</formula>
为了执行这个运算,需要执行总共6*4 = 64个逐个元素的乘法。希望CAM高 速缓存306包括所有64个输出操作数,如同32个输入操作数,以便于可以执行元 素上的各种遍历,而不用付出转到外部RAM308的代价。作为例子,考虑不足以 保存这些数据,并且需要在数据适合填入之前将其分成四份的高速缓存。如图20 中所示的,函数输入标记空间模型允许输入数据可以很容易地被细分,图20显示 了矩阵A列O,矩阵B行O的例子。
通过在j通配符域中放置常量,乘法该阶段所涉及的元素的数目已经减少到8, 并且输出的数目已经减少到了 16。注意到已经选择了标记掩码,以便于将由这个 计算覆盖A的列O和B的行O。因此,在这个输入标记集耗尽了以后,不再需要 高速缓存中的任何输入值,并且为此计算引用同一输入操作数的相继输入标记集不 会导致任何其它的高速缓存未命中。
注意到此时仅仅完成了工作的四分之一,从而需要再处理三个输入标记空间。 图21是对上述的高速缓存管理例子中剩余标记空间的处理的表示。
这些输入规格中的每一个覆盖了它们所引用的元素的乘积,因此避免了对于 这个输入数据的将来的高速缓存未命中。 一旦计算了乘积对之后,定义了一个或者 多个输入标记集,这些输入标记集合管理总和来产生矩阵乘法的最后输出。然而, 可以看出,以这种方式使用函数输入标记空间模型允许程序员对数据进行分割,由 此可对大型数据集保证高速缓存的有效使用。
当处理稀疏的矢量和矩阵的时候,操作数集合的概念可以有其它优点。在逐 个元素的基础上,可以将两个稀疏矢量聚集到操作数集合中。变量位用于矢量中每 个元素的索引位置。在图22中描述了这样的稀疏矢量/矩阵处理例子的矢量点积操 作。从图22中可以看出,在点积中矢量v和矢量n是点乘在一起的。首先,将两 个矢量逐个元素地插入CAM中,使用元素索引作为可变的标记位。CAM安排这 些元素以便于相等的元素索引彼此相邻。具有对应集的任何元素集形成了完成的操 作数集合,并且从CAM中发出。将完成的操作数集转发给乘法累积配置,而不发 送任何"单个"元素(n2、 v3和n4)。后来将这些单个元素从CAM中删除,因 为不需要它们,因为它们在另一矢量中没有匹配的元素,有效地将它们与零相乘。 然而注意到,CAM除去了它们,而不是在计算硬件中将其实际与零相乘。
对一般需要补零的任何操作而言,该相同类型的处理是有用的。比如,图像 处理应用程序通常需要在图像边缘补零,FFT (快速傅立叶变换)操作通常需要补 零直到2幂的边界。如果需要单个的元素,如矢量加法运算的情况,则通过另外一
个配置从CAM中将单个元素检索出来,稍后与求和的对一起被合并回来。 执行模型
在理想情况下,整个数据流图都将在机器中被实例化,当操作数集合完成时 数据将以批量数据的形式从中流过。然而,给定现有的硬件,所感兴趣的大部分图 都太大了,以至于不能适应于装入机器,所以有必要将图像分割成更多的可管理的 小片即子图像。将这些子图像称为配置。这些配置是互不重叠的,并且形成原始数 据流的完成的覆盖集。
在图23中表示了配置的示例组,图中每个虚线框表示了不同的配置(配置A 一配置E)。
如上所述,配置从CAM接受完成的操作数集合作为输入,并且产生被发回给 CAM的输出,在那里它们与一个或多个输出标记空间相关联。配置通过消耗来自 于其指定的输入标记空间的完成的操作数集合直到操作数集合被耗尽来继续执行。 此时,在一些可能的清除操作之后,该配置将被另外的配置所替代。依赖于正在执 行的确切函数,这些清除操作可包括删除标记空间中剩余的任何部分填满的操作数 集合。然而注意到,偶尔地可使用不完成的操作数集合作为输入,如上所述的稀疏 矢量加法的例子中。
如上所述,可由运行时可重配置的硬件便于将数据流图分成静态子图的动态 执行集。通常,将配置编程到运行使可重配置硬件中的过程类似于在控制驱动机器 中的操作码的取回。它表示仅间接有助于机器加速的开销。因此,它有利于尽可能 快地重新配置,和/或使用等待时间隐藏技术来最小化它对机器执行时间的影响。 在CAM的体系结构中,这是以两种主要的方式来实现的。
首先,与将配置编程到硬件中所需的时钟周期的数目相比,处理标记空间中 的操作数所需的时钟周期的数目被假定为较大。实际上,假设了正在处理的数据集 较大,这对很多有意义的并行应用而言是真实的假设。这是很多运行时可重配置系 统的假设,但是根据编程配置所需的实际时钟周期数,它或多或少是合理的。在一 些体系体系结构中,配置通道可以窄到一个单个的位,很显然这往往将减慢配置进 程。为加速处理,CAM体系结构使用合理宽的配置通道。
第二等待时间隐藏技术在运行时可重配置硬件中使用影子控制寄存器的库。 更具体地,当寄存器的活动集正在为另一个配置处理数据时,将下一配置写入影子 硬件控制寄存器。基本上,当数据正运行在相同的硬件上时,将下一配置写入到控
制寄存器的后台"页"中,因此当先前的配置完成时,活动的配置可迅速改变。
配置的使用或执行可因很多系统事件触发。在一个直截了当的例子中,可因 一个或多个其它的配置的完成来触发配置以便执行。每个配置具有它所依赖来形成 完衡的操作数集合的一个输入列表。当提供输入的每个配置完成时,加载其相关配 置的列表,并且在每一个中对相关标志置位。当每个相关标志置位时,为该配置检 查完成的标志集合。如果对任何配置的所有输入状态标志均被置位,那么调度该配 置以便执行。
在图24中表示了这样的执行状态机机制的示例概念图,其中可见,形成了反
馈循环。CAM310和/或功能单元阵列302生成前往配置控制单元2420的触发事件。 配置控制单元(控制器)2420更新配置存储器2422中的标志,最终指示当前的配 置以完成执行,且得到的数据被存放在一个或更多的输出标记空间中。如果对任何 相关配置的所有标志均被置位,那么将该相关配置放置在执行队列2424中以便调度。
并且,举例来说,配置控制器2420基本上同时地将从执行序列2424中移除 待处理的配置,并且使用其来自配置存储器2422中的配置数据来配置运行时可重 配置硬件的影子寄存器。 一旦当前的配置完成,将通过配置装载器2426使影子寄 存器活动,并且功能单元硬件302将通过新的配置开始处理数据。注意到一旦先前 的配置从影子寄存器被传送到活动硬件中,那么待处理的配置即可以出列,并且被 编程到影子寄存器中。这允许进行后台重新配置,以及有效地将配置时间流水化(或 隐藏)为对实际数据处理的后台操作。
可以看到,形成了执行循环,当配置结束时,它们为要调度执行的下一配置 集更新输入状态(就绪)标志,然后执行并更新依赖于其的输入状态标志。
在图25中表示了执行记录的模型,图26A显示了各种配置以及配置A, B和 E的执行记录。如经由执行记录中的数据可见,在图26A所表示的时刻,配置A 正在运行,从其输入标记空间中拉出完成的操作数集合,处理它们并产生落入配置 E的输入标记空间的输出。注意到为配置块A对所有的4个输入状态标志置位(如 由二进制值llll表示),这是调度它来执行的触发条件。也注意到,对配置块B 的所有输入状态标志置位,但它仍然位于执行队列2424中,等待被配置到机器上。 有可能在当配置A执行的时候,配置B正在被编程到同一硬件的影子控制寄存器 中。注意到,也有可能使配置B被加载并与配置A同时运行,然而为这个例子的 目的,可以假设由于有限的计算资源, 一次只能加载一个配置。当配置A运行的时候,它消耗从CAM中接收到的操作数集合,举例来说,被指定为处于输入标记 空间内的任何操作数集合。
图26B表示了在配置A耗尽了来自于其输入标记空间的完成的操作数集合之 后,且当配置B开始执行时的记录A、 B和E。注意到在配置A完成之后,已经 将其执行记录的输入状态标志复位为0,并准备好接收新一批的操作数集合(如果 有的话)。同样注意到,己经对配置E的执行记录的输入状态标志的第一位进行 了置位,指示由配置A的完成产生了第一操作数集合。
当配置B完成执行时,执行以配置C和D继续(为简洁的目的,在此不单独 显示和描述它们的记录)直到满足了配置E的所有四个输入依赖关系。此时,配 置E将被置入执行队列2424以便调度。
注意到,这样是可行的在系统中加载新的配置而不是等待配置全部完成, 好像(例如从历史分析)了解到该另一配置将等待片刻来完成。比如,配置A可 执行一段时间,但正在等待没有就绪的操作数集合。在此时,可加载并执行配置B, 并且完成它的操作数集合,使得执行工作而不是简单地等待可能在稍后发生的配置 A完成。尽管可行,但在众多类型的数据处理应用程序中不太可能,并且由于额外 的重新配置和/或者刷新A中已经位于片上高速缓存中的数据,仅为了重新加载配 置A及其所需数据两者,可能耗费更多的时间。
姿伴说疗
在CAM体系结构中,如if-then语句或者while循环这样的条件执行,是使用 操作数集合的概念进行处理的,实质上是通过在条件满足之前不完成操作数集合来 进行的。条件执行在运行时可重配置机器上是稍稍较难的问题,由于需要取决于条 件函数的评估,在逐个操作数的基础上通过不同的硬件路径操纵数据。
If/Then语句是通过使用仅从CAM发出完成的操作数集合以便处理的CAM特 征来实现的。因为条件的两个分支通常将需要执行不同的代码,条件的每一分支具 有各自不同的输入标记空间,并具有不同的操作数集合。在执行过程中,可以生成 每个分支所需要的值,并且将对其进行标记,使得这些值可以落入适当分支的输入 标记空间中。
下面的代码提供了一个条件的例子
if(A<B) C = Dl + D2;else
C = E1-E2;
如图27所通常表示的,为了处理分支,也指定附加的种子令牌,作为分支的 任何一端上的操作数集合的一部分,由此除非且直到种子令牌可用,否再将不从 CAM中发出操作数集合。当为给定测试条件评估操作数(分支之前)时,由图中 的条件节点来生成种子令牌。注意到图27中的节点是一个简单的例子,条件节点 实际上可能是复杂的条件配置。
当为每个测试条件评估条件节点时,它为条件的真或假分支中的任一个生成 种子令牌。因此,在图27的例子中,给定Ao和B()操作数集合,看起来AO不小 于B0,由此为E01和E02生成了种子假令牌SFO,而不是D01或D02。对于A1 和B,以及&和B2操作数集合,基于它们的各自评估,生成真种子令牌ST1和ST2 来完成《D11, D12》和(D21, D22)操作数集合。生成种子假令牌SF3来完成馈送到条 件节点的八3和B3操作数集合的操作数集合(E31, E32}。
种子令牌因此为条件的正确分支完成了操作数集合,而留下相对的分支还没 有完成。因此,下游运算符仅检索完成的操作数集合,而未完成的操作数集合将被 丢弃。如上所示,(fori = 0to3) , Ai〈Bi的第一和第四评估结果为假,而第二和 第三评估为真。因此条件节点发出真种子令牌ST1和ST2,完成这些操作数集合, 由此CAM将向真分支发出(ST1,D11,D12)和{ST2, D21, D22},且加法节点将评 估C1:D11+D12禾卩C2 = D21十D22两者。己经为SF0和SF3发出了假种子令牌, 使CAM向假分支发出(SFO, EOl, E02)和(SF3, E31, E32},这将执行C0=E01-E02 和C3:E31-E32。注意到由于分离的需要,真分支和假分支将具有两个不同的输入 标记空间,但这些分支的输出通过发出位于"C"输入标记空间(C0-C3)的令牌 被合并以便进行后续的计算。
注意到,某些"短路评估"是可能的,因为一旦A和B的值准备好被使用, 这些种子令牌即可被发出和使用。因此,条件计算可用有效地短路(退出)未使用 分支所需要的任何计算。例如,考虑完全为该条件分支的使用计算D1的值。在这 种情况下,来自该条件的种子令牌可被用作计算D1的门函数,仅允许计算所必需 的D1的值。相反,如果在该条件以及图中除该条件以外的某个部分使用了D2的 值,则短路将不会节省任何东西;在此处的真分支的输入标记空间以及其它位置中 均可使用D2的值,以防止对D2的潜在重复计算。
此外,迄今所述的执行模型在配置和配置之间流动,而不管数据流将可能发
生什么情况。有可能在图中遇到条件分支,其中所有数据从分支的一边流下,而没 有数据从相对的一边流下。因为两边都取决于分支点,两者都可被调度以用于执行。 然而,有可能用标记检测硬件来确定对给定的执行分支是否确实生成了任何标记。 如果没有生成标记,那么该整个执行边(该子图)实质上可通过留下该边的输入状 态标志保持未置位而被"短路"。
while循环使用类似于if/Then语句的形式,并再次使用操作数集合的概念。 在概念上,创建如图28中表示的while循环。使用了两个标记空间, 一个作为对 while循环的输入,另一个属于数据流图的下面的配置。使用条件运算符来产生种 子令牌,该种子令牌或者使循环继续迭代,或者停止迭代并允许计算继续。作为一 个例子,考虑下面的循环,如在寻找根的问题中所使用的
while (abs(f(x) - Target) 〉 Delta) x = Update (x);
在图29中表示了这种while循环实现的一种数据流表示,在数据流中,大于 "〉"比较运算符发出两个种子令牌中的一个。如果迭代继续的话,那么将种子继 续令牌发回到while循环的输入标记空间。如果迭代停止的话,则将种子停止令牌 发到下一标记空间。
因此,在这个例子中,输入x值(可能被更新)作为下一标记空间的一个操 作数被输出。随后对更新后的x值应用该函数和目标减法,接着是绝对值函数,然 后将该修改后的值与delta比较。如果小于delta,则发出种子停止,完成下一标记 空间操作数集合,由此配置将执行。否则,通过产生种子继续操作数来继续更新x, 完成更新x循环的输入操作数集合,这将更新x直到满足delta准则。
注意到,在循环的输入标记空间以及下一图的输入标记空间中都使用x更新 后的值;种子令牌和更新后的x值为while循环或者下一图形成了操作数集合。只 要在循环的输入标记空间中存在完成的操作数集合,循环就将继续执行,使得向循 环的输入标记空间发出种子令牌将使x值在循环中再次运行直到条件满足。
执行中未执行的边可能在CAM中留下未完成的操作数集合,因为其它配置可 能对其标记空间有所影响。同样,稀疏向量点积也可能在CAM中留下部分操作数 集合。它们在数据流图中诸如两个执行边重新合并的稍后节点处以删除操作从 CAM中清除。
图30中描述了这样一个标记清除的例子,其中条件节点包含在配置A中,它 适当地为配置B和C产生种子令牌。配置B和C仅向CAM检索完成的操作数集 合,并且均产生落入配置D的标记空间中的输出和标记,这就是上面暗示的"合 并"操作。所使用的输入标记空间规范系统将确定何时删除任何未完成的操作数集 合是安全的。
如果使用了固定前缀输入标记规格,那么配置B的输入标记空间中任何未完 成的操作数集合可在配置B已经检索了所有的完成的操作数集合之后,随时被删
除。同样地,在配置C向CAM检索了所有的完成操作数集合之后,可从其输入标
记空间中删除未完成的操作数集合。
或者,如果使用了函数输入标记空间规格,那么某些数据有可能在配置B和 C中是公共的。在这样的事件中,有必要在从CAM删除数据之前等待直到配置B 和C均完成。便于上述操作的时间是在配置D完成之后,自此以后不需要任何附 加的与逻辑来控制删除命令的发布。
转向条件执行的另一方面,执行引擎中存在这样一些情况有必要阻塞输入 数据流一段时间,直到已经处理了图中更下方的数据。这种情况可能在处理while 循环时产生,例如,当有必要保证,在新的数据被允许进入循环之前,输入集合完 全完成了循环的执行。这允许多个"Xi"的输入流过同一 while循环,随其迭代或 者达到某种条件而继续或退出。如果必须要保证输入数据是以集合处理的而不是作 为自由流,那么也可以对图的主要输入进行阻塞。
可以利用执行记录中的输入状态标志来完成这种类型的同步。通常,加上用 作新输入不能跨越的屏障的输入状态标志。屏障标志取决于信号通知阻塞期结束的 配置的完成。
为了举例说明数据阻塞的实现,图31中显示了上面的"寻找根"的while循 环的例子,该循环被分成四个不同的配置块,包含生成配置块3140、更新配置块 3142、测试配置块3144和下一配置块3146。在图31中,图上显示的配置之间的 实线弧是数据通道,也是执行记录中的依赖关系。 一条从下一配置块3146运行到 生成配置块3140的虚线弧是屏障弧。没有数据流过屏障弧。注意到在图31中,没 有显示生成配置块3140、更新配置块3142和下一配置块3146的内容,因为对于 这个例子来说,它们没有关系。它们自己本身各自可能包含一种以上的配置,但相 同的同步技术仍然可用。
在图32中表示了用于该图的执行记录之间的依赖关系。执行记录的依赖关系 以及各自的输入状态标志,形成了 CAM体系结构遍历的执行状态机。
在图33中表示了数据阻塞例子中的输入状态标志的状态转移。如上所述,无
论何时用于配置的所有输入状态标志均被置位,即调度该配置以便执行。在执行过 程中,生成到给定的输入标记空间的新X值将重写旧值。图33中表示的示例性事 件序列如下进行
1. 图的启动条件,其显示位于"初始"块下方的标志,示出生成配置准备就 绪以便执行,因为它的屏障标志和输入标志都被置位,分别指示循环不忙,并且新 数据己经放入到CAM中以便检索。
2. 配置生成配置以便执行,并且清空它的两个输入状态标志。该配置为循环 创建了x值以便处理,以及每个x的种子值。因为生成配置生成了完成的操作数 集合{种子值,X值},每个x值将运行通过循环评估。当生成配置耗尽了来自于 CAM中的所有的启动输入时,它对更新配置的两个输入状态标志进行置位,即种 子标志和X标志。最终的状态在状态表的"生成配置之后"列中显示。
3. 因为更新配置的两个输入状态标志都被置位,接下来它将执行且其输入状 态标志将被清除。更新配置将计算更新后的X值,该值将被三种相关的配置使用 它自身、测试配置和下一配置。在耗尽了来自输入标记空间中的所有完成的操作数 集合以后,它对所有三种相关配置的"X标志"输入状态标志置位。
4. 接着加载测试配置,因为现在它所有的输入状态标志均被置位。其输入状 态标志立刻被清除。该配置将所有的X值与容许规范相比较,然后产生在逐个值 的基础上指示循环应继续还是结束的种子标记。如果给定的X值不够接近,则将 生成继续种子,这将与在更新配置的输入标记空间中匹配X值成对。如果给定的 X值足够接近,将生成停止种子,这将被与在下一配置中匹配X值成对。当测试 了所有的X值时,那么将更新相关的执行记录中的一条。如果任何X值继续迭代, 那么更新配置执行记录的种子标志将被置位。否则,下一配置执行记录的种子标志 将被置位。因此,将仅仅允许继续一条或另一条执行路径。
5. 在这个例子中,迭代将继续N次,每次重新调用更新配置直到每个X值 都处于所允许的容许范围内。在最后一次迭代时,当所有的X值都处于容许范围 中时,下一配置的种子标志被置位,且将更新配置的种子标志保持清除。
6. 因此调度下一配置用于配置,并且它立即清除它的输入状态标志。X值继 续通过计算的下一阶段。然而,由于在更新配置和测试配置的输入处存在一些未完 成的操作数集合,仍需进行清除。这些当下一配置完成时自动被删除。因为现在已 经对while循环清除了无关的数据,下一配置也对生成配置的屏障标志置位,有效 地起动它来接收新的输入集。
这种机制允许CAM体系结构保证数据借助迭代运算符和其它分支结构以完 成的集合流过图像。阻塞操作数实质上是通过检测条件运算符种子值的生成,然后 只为应被允许继续的分支对输入状态标志置位而工作的。各个数据值的种子可能自 身沿条件分支适当地被生成,它们将沿着每条弧完成操作数集合,使得操作数集合 机制可以用于仅检索和处理所需的那些数据值。
注意到当X值落在容许范围内时,不必产生各个停止种子。在这样的情况中,
使用下一配置种子标志来阻塞执行的继续,直到所有的X值都已经通过(fall through) 了循环,这样已经足够了。为了清楚地说明,每个操作数的种子都被包 含在其中,尽管实际中移除这样的弧将减少程序的带宽需求。
转向高速缓存和配置调度考虑,为了保存片外带宽,期望试图最大地利用已 经被移到片上的数据。在控制驱动体系结构中,高速缓存经由最近最少使用高速缓 存策略即通过将最近访问过那些数据尽可能长时间地保持在芯片上来达到这样的 目的的;通常仅在需要检索更新的数据,且没有其它空闲高速缓存可用时,才从片
上高速缓存中驱逐数据。此时,常规高速缓存管理器将寻找闲置时间最长的数据, 并且将它们发送到片外送往主存储器。
在CAM体系结构中,硬件具有这样的优势来自数据流图的提示向其告知什
么数据将由任何给定的配置需要。由于配置需要预先指定它的输入标记空间,硬件 可以精确地知道它需要什么数据(与必须处理控制驱动程序的近似随机数访问模式 不同)。利用这种信息可在多方面体现优势。例如,当配置完成时,执行记录向硬 件告知关于何种配置正在等待以消费刚刚产生的数据。然后有可能调度那些相关配 置中的一个来立即消费新的数据,尽管数据仍处于片上存储器中。
而且,为了对某些配置保证片上数据的存在,有可能分析数据流图。例如,
在图34的代表性图中,有可能要为优化作一些预测调度。配置控制器2420(图24) 具有调度配置A或者配置C的选择,因为两个配置都应被放置在执行队列2424中。 然而, 一种依赖关系进一步延伸到图的下方,可以看出除了配置B所需的来自配 置A中的数据以外,配置B已经准备就绪。另一方面,配置D将仍在等待数据, 即使配置C将要立即执行。选择调度配置A而不是配置C,具有期望的结果将 生成配置A的输出,并且立即允许配置B执行。因为配置A刚刚完成,很可能其 至少某些示出仍然存在于片上CAM高速缓存306 (图3)中,省去了存储器系统 向片外存储器308检索它们。如果相反,在配置A之前调度配置C来执行,则配 置C的输出将在没有立即消费者的情况下被生成,由此更有可能需要将它们从移
动到片外存储器308。此外,在配置C之后调度的无论何种配置然后将潜在地需要
从片外主存308将其所有输入带回。
在这种情况下,非常明显地,调度配置A是更有利的,由此配置B立刻准备 好被执行,有可能还具有使片上数据等待它的优势。使用这种类型的预测调度,可 以改进节约节省和因此的执行效率。如果程序编译器具有体系结构调度策略和顺序 的知识,则这可在一定程度上由程序编译器预先完成。引导体系结构的执行模式可 能同安排执行记录中列出依赖关系的顺序一样简单。这种静态优化只要数据到达模 式预知即可起作用。
在数据到达模式未知的情况下,尤其在条件执行的情况下,硬件仍可执行一 些有用的分析。这可能与观察哪些标记空间目前位于片上高速缓存中并对使用该数 据的配置给出执行偏好一样直接。可以更复杂,比如在运行时对数据流图进行动态 分析,期望找到最佳执行路径。尽管动态分析的一个更有限的版本可能会有用,但 是动态分析的完全实现可能是一个特别复杂的任务。这样的实现可以基于数据流图 的执行记录中的"双亲"指针。
递归是另一个数据流计算机的概念,它通常与图像自身的动态生长和折叠相 当。在固有的函数编程体系结构中创建堆栈的等效物同样是一个问题。 一般,相同 的问题通常在稍小一些的范围上对函数调用发生。
函数调用通常由CAM体系结构处理,通过当需要函数调用时,将函数的返回 标记作为操作数与函数参数数据一起放置在函数的输入标记空间内。直到函数的输 出被计算出来之后,返回标记才穿过函数调用。以返回标记对输出数据加标签,函 数调用结束。将返回标记设计成以在调用程序之后落回到配置的输入标记空间,并 且调用完成。函数调用因此是相当直截了当的,并且这种机制同样足够处理尾递归, 因为它本质上相当于一个带有嵌入式函数调用的while循环。
通过操纵标记使得它们将落回到其递归双亲的输入标记空间来处理真递归。 为此,将递归函数分为两半,递归前部分和递归后部分。直到递归调用本身时的所 有内容都位于递归前部分中。在执行模式方面,进行相同的划分。首先,执行所有 的递归调用,直到命中终止条件。每个都是执行到并且包括递归调用本身。当终止 条件命中时,所有的递归前调用都己经结束执行,于是每个函数调用的第二部分以 逆向调用顺序被执行以结束函数评估。
图35A和35B提供了过程函数f(x)的递归和子图调用的概念上的范例表述, 该函数可用来递归计算特定个数的Fibonacci值,如下代码所示<formula>formula see original document page 36</formula>
注意到在图35A和35B中,Xij等于X在递归调用j上的实例i的值;并且实 线代表立即结果,而虚线表述延迟结果。图35A和35B显示了数据流图递归调用 的调用树,同时图36表示分别用于递归前和递归后调用的标记的格式。
如图36所示,递归前调用操作数集合包括两个操作数,即返回标记和当前X 值。将标记本身分为四个域,包括用于指定所属的标记空间的公共标记前缀、对单 个X值共享的实例值、用于为相同的X值区分分离的递归调用的迭代值j以及指 示这是操作数集合中的第一还是第二操作数的数据或操作数编号。实质上,(例如 递增地)操作i、 j和k的值以保持处于正确的标记空间中,并防止在该标记空间 内发生冲突。注意到在这个例子中,为标记仅使用了四个半字节;但实际上,为避 免冲突可能有必要使用更宽的标记空间。
递归后调用操作数集合包括四个操作数,即返回标记、部分结果操作数(在 本例中未使用)、f(X-2)的值和f (X-l)的值。也将这些集合的标记域分为相同的 各个域,除了所使用的标记前缀使这些标记落入图的递归后部分的输入标记空间 中,且存在四个不同的操作数位置指示符值。
返回图35A,作为迭代运算的例子,将输入值放入递归前部分的输入标记空 间,并对其调度以便执行。将输入操作数中j迭代的值(图36所示)置为O。递归 前部分开始从CAM310读入完成的操作数集合。对其读取的每一个集合,它将检 查终止条件是否满足。如果条件满足,则发出带有"返回标记"的适当的值作为它 的标记值,并且该递归调用结束。否则,该调用未命中终止条件,该过程继续。这 样,由于终止条件为x是否小于2,因此输入值1或0将结束,而输入值2或以上 将继续。下面的例子使用f(3),并且也参考图37-44进行描述。
当继续时,创建三个新的操作数集合,其中两个用于新的递归调用f(X-2)和f (X-l),另一个用于该调用的递归后代码。用于递归后代码的操作数集合将包括向 其传送的同一"返回标记"、递归前代码计算的任何部分结果、以及与两个未解决 的递归调用相对应的两个未知(将来)值。这些未知值不能被立即填入,并且它们
将在两个递归调用完成后获解。用于该操作数集合的标记将落入递归后代码的输入 标记空间,表示为示意图中的Y标记前缀。 一旦发出用于新操作数集合的标记之
后,k参数(图36)将递增。
对于两个新递归调用中的每个调用来说,发出从上落入正确未知值槽(slot)
中的返回标记,以及更新后的函数参数值。除了每一个的j值将递增一次之外,用 于这两个新调用的标记落回到递归前代码的输入标记空间内。由于它们位于同一输 入标记空间内,将由同一递归前配置将这些标记读回,并且随后被处理为新的函数 调用。
当递归前代码耗尽其输入标记空间内的所有操作数集合时,每个初始的x值 应该已经命中了它们各自的终止条件,尽管这些函数的值仍然未解。唯一可以求解 的函数值是那些在没有递归调用的立即终止的函数。此时,配制递归后代码以便执行。
递归后代码开始向它的输入标记空间检索完成的操作数集合。首先,在它的 输入标记空间中应当有很多未完成的操作数集合,并且可能有一个与递归调用相对 应的完成的集合,其中孩子调用均命中终止条件。当检索到完成的操作数集合时,
将部分结果f(X-2)和f(X-l)的值相加以形成一结果。然后,使用作为操作数传入 的相关联的"结果标记"将该结果随后写回到CAM。这个动作将完成函数的评估, 潜在地完成CAM中另一个操作数集合,这将触发另一个函数评估的完成,等等。 递归后代码将继续执行直到从CAM中耗尽了所有完成的操作数集合。当耗尽了所 有的操作数集合时,将己经评估了所有的递归调用。
这个过程已经在一系列的CAM的快照中被进一步描述,如图37-44所示。该 例子评估了其中对f(3)进行了单个调用的情况,这与上面的调用图中所描述的例子 相匹配。在这个例子中,递归前代码的输入标记空间具有公共前缀OxA000,
递归后代码具有公共前缀0xB000,输出或最终返回标记空间为0xC000。这个 算法起始于初始时间T1,此时调用程序将返回标记值(在此例中为0xC000)和X 值(3)写入到递归前代码的输入标记空间(0xA000)中,如图37所示。
加载递归前配置,且它仅读入它的输入标记空间(OxAOO)中完成的操作数集 合。使用自变量3,递归前代码未命中终止条件,所以它创建三个新的操作数集合。 第一个集合用于递归后代码,因此并与返回标记和部分结果域两者一起被写入 0xB000的标记空间,对于这个例子,该部分结果域为0。如图38所示,在该时间 T2时,也通过将标记和f(X-2)和f(X-l)的操作数写出到标记0xA010和0xA020来
创建另两个操作数集合。注意到与这些相关联的返回标记被设计成完成来自新创建 的递归后操作数集合缺少的操作数。
递归前代码继续向它的输入标记空间检索完成的操作数集合,并且拉出 OxA010标记。此次终止条件命中,因为X-1,由此计算出适当的返回值(在此例中
恰好为1),并且将其输出到所指定的返回标记0xB002,这将其放入递归后操作数 集合的缺少操作数的位置之一中。图39中显示了该第二个递归前操作即快照时刻 T3。
在T4时刻,递归前代码然后检索0xA020行。此行还没有满足终止条件X < 2, 这时同样产生三个新的操作数集合, 一个递归后集合和两个新的递归前集合,分别 写入到OxBOlO、 0xA030和0xA040。图40显示了这种状态。
此后,递归前代码取回0xA030,确定X-O的值满足终止条件,且以返回标 记值0xB012来写出该值,它被填入OxBOlO递归后操作数集合的第一缺少位置中。 图41中显示了快照时刻T5的状态。
在递归例子的T6时刻,递归前代码从它的输入标记空间取回了 0xA040操作 数集合,发现X二1满足终止条件,并以标记值0xB013输出值l,完成0xB010操 作数集合。图42显示了这种状态。
递归前输入标记空间现在为空,于是配置终止。然而,递归后代码有操作数, 因此调度并加载递归后代码。当在递归后代码中搜索完成的操作数集合时,在它的 输入标记空间中发现0xB010集合。按照代码,它将f(X-2) + f(X-l)相加得到1, 并且以其返回标记0xB003写出。这个动作完成了 OxBOOO操作数集合,如图43中 快照时刻T7所示。
因为现在完成了操作数集合OxBOOO,递归后代码检索该操作数就和,并执行 f(X-2) + f(X-l)= 1 + 1 =2。将其写入它的返回标记OxCOOO中,这完成了递归评估, 如图44中快照时刻T8所示。
如可见,使用这种方法,为执行递归配置中不存在切换和清空(trash)。递 归前部分被加载并执行一次,递归后部分被加载并执行一次。这是有益的,因为执 行配置操作的开销应尽可能避免。相反的,根据本发明,使用CAM空间来存储中 间结果,直到那些结果可以被完全评估。相当有可能的是,需要一个以上的配置来 实现递归前或递归后代码,但在递归前代码的执行结束和递归后代码执行开始之间 存在明显的裂口。
由于使用CAM来存储结果,递归的深度受限于CAM的大小以及标记中j或
k迭代域的宽度。对于这个特定的例子,j的增长速度是k的两倍,所以它成为限 制因素。如果j域"倾翻",问题(冲突)将跟着发生。
递归计算不会受到控制驱动系统中存在的子例程调用和返回的开销的影响。 此外,标记的结构和分离允许以并行和/或流水线的方式评估众多不同的X值。例 如,有可能使两个或两个以上的递归前代码的实例并行操作,对递归后代码同样也 是。而且,可以观察到,对于任一单个X值,有必要向CAM返回值然后并且在执 行可继续之前检索这些值。这可能增加计算的等待时间,然而如果存在一个以上的 初始X值正在进行同时评估,这可能通过流水化来隐藏。
转而考虑常量,数据流图中的常量提供有意义的问题。通常,使用常量通过 配置的每个操作数集合需要使该常量可用。并不期望复制常量作为每个操作数集合 的一部分,因为这将消耗片上和片外带宽、资源和时钟周期。例如,如果创建向流 过它的每个操作数加上10的一个节点,希望避免必须为每个匹配操作数通过体系
结构来操作值10。此外,常量可能需要在程序的控制下进行周期性的改变。这些
问题的解决方案取决于所使用的输入标记空间模型。
使用固定前缀输入标记空间模型,一个解决方案是向CAM体系结构中的功能
单元提供一组影子值寄存器。当功能单元检测到新的操作数正启动时,功能单元可 以从影子寄存器加载常量的值并在该操作数持续时间内与这些值工作。当新的操作 数被启动时,再次加载影子寄存器。对常量的更新可能通过在使用它们的配置头部 的特定域中存储常量。在配置时,从这些域加载常量,且常量的更新被写入到这些 域中。
如果使用函数输入标记空间模型,则情况得到改善。在这种情况下,向要使 用的常量给定由配置中的所有操作数集合所引用的单个固定标记。每个配置引用同 一数据,这意味着将仅占用单个高速缓存行且不需要从片外读取,节约了片上资源
和片外带宽。用于改变常量的更新机制为简单地将新值写入到该固定标记位置。
同样考虑数字串行算术,因为值被表示为以串行方式通过机器的数字串。通 过观察到数字串行计算维护节点中算术状态的某些概念,可以应用相同的解决方 案。这种状态可被认为是需要被制成表格的算术余数,并且可能由表示节点当前值 的有理式的两个或更多的整数表示。
对固定前缀输入标记空间模型,当新的输入数字串开始时,可以使用影子寄 存器来预加载节点的内部状态。以此方式,所需常量被预加载并将作为算术过程的 一部分被发出。根据数字串行实现的结构,该方法也可用于乘以或除以常量,以及 加上或减去常量。输入值的任意线性组合也是可能的。
如果函数输入标记空间模型用于数字串行算术,则解决方案是将常量分配到 固定标记位置并且如任何其它操作数那样读取该常量。然而,能够执行一些这里描 述的常量縮放或偏移量操作可能仍然是有益的,并且由于这样的原因,可能期望包 括影子寄存器。
,縦
转而考虑如何在真实的硬件中构建这些构造的各种实际的例子,在一个实 施例中,由于片上存储器和片外处理器之间的速度差异,以主要考虑保存芯片带宽 来设计系统的外部存储器结构。在时钟对时钟的基础上,相比于片外芯片,可以快 得多地在片上访问数据(举例来说,至少快四倍)即使假设外部数据的确切位置是 已知的;此外,片上存储器访问时间和片外访问时间之间的差趋向于增长。通常, 对于带有标记的数据系统,因为可能是典型的控制驱动处理器,所以预先不知道数 据的确切位置,因此激化了问题。如果标记精确对应于物理RAM地址,那么可以 帮助解决问题,但是这限制了标记的大小。
应注意到,片上存储器和片外处理器之间的速度上的差异,可以是类似于 主存储器与硬盘驱动器之间的速度差异。因此,可应用软件所使用来处理大型数据 库的很多外部存储器算法。
通常,在外部存储器操作的意义上,由CAM体系结构使用的数据结构需要在 线,由此当维持运行时CAM的完整性的同时,可以插入和删除(实质上类似于数 据库)各个数据项。为令牌匹配起见,数据结构也需要支持对CAM中特定条目的 快速搜索。当从配置中写出新的数据值的时候,其相关联的标记需要被发送给 CAM,并且被存储在正确的位置中以便于稍后的快速检索。
将CAM —般配置成支持基于公共标记前缀的流动范围查询。这将在配置 开始运行,并且请求完成的操作数集合作为输入的时候需要。尽管其它的数据流体 系结构使用了散列作为变量标记匹配策略,但散列也不是特别顺应该需求。
因为以硬件实现结构,数据结构需要相对易于维护,因为维护将由芯片上 的状态机来执行。此外,易于维护通常意味着用于内务处理的较少的存储器访问, 这将有助于减少侵入片外带宽上的开销的数目。这个约束以一些浪费的外部RAM 为代价,因为可以观察到RAM大小继续跟随指数级增长趋势。必须观察和供应现 代同步RAM的特定属性。比如,能够以八个字的持续突发访问数据将有速度收益。
而且,在RAM库之间进行移动性能有损失,但是在同一库内移动是几乎没有损失 的。
这些约束导致选择多层TRIE作为一个适合的数据结构。为了支持这个,在一 个实施例中,标记如图45所示进行细分,显示了标记的外部存储器分区。在图45 中,使用域来对表分层结构中的指针进行索引,以访问所感兴趣的标记/数据。如 图46所表示的,在存储器中,这显现为外部存储器数据结构分层结构。注意到在 此处所示的外部存储器组织仅仅是有效实现的一个示例概念,并且其它组织和/或 实现是可行的。
使用标记前缀来索引到跳转表内,该表可具有图47的外部存储器标记空间跳 转表中所示的格式。该表包括用于每个标记空间的单独的TRIE的基本地址。如果 指针为NULL,那么这个标记空间当前并不在使用。每个TRIE的根采用图48中 所示的外部存储器高位索引(high index)表形式。由以上在标记中所示的高位空 间域来对该表进行索引,以得到指向另外一个表的指针,该另一个表基本上是相同 的,如图49的外部存储器低位索引(low index)表所示。接着由上述低位空间域 来对外部存储器低位索引表进行索引,并且给出指向页面表的指针。
然而,页面表是不同的。由来自标记的页面域来索引页面表,并且每个条目 包括指向真实数据值的页面的指针,但是它也包括用于目标数据表中所包含的每个 操作数集合中的每个操作数的状态位。图50,连续到图51,显示了带有每个页指 针128个操作数集合的外部存储器页表,以及带有操作数集合状态位的16个页指 针。
将页表分成16个区域(页面指针0到15),其中的每一个包括指向相关联数 据页的指针,以及用于每个操作数的存在标志。如果数据页是空的,那么可以将该 指针置为NULL。如所示的,对每个操作数集合存在一个字节的存在信息,并且将 每个字节的一个位与该集合中八个可能的操作数之一相关联。
如图52中所表示的,数据页本身概念上显现为具有128个操作数集合的数据 页,每个操作数集合有8个操作数。因为在系统中,为数据的每个字维护存在标志, 存储这些标志需要深思熟虑。在典型的使用模式中,CAM控制器2420 (图24)或 者可以试图找到特定的条目并写入新值,在这种情况下,需要对适当的存在位置位。 或者,CAM控制器将执行读操作,其中它可以期望仅拉出完成的操作数集合。尤 其在读情景中,将数据页存在位存储在分层结构中至少比实际数据本身高一个层次 上是有利的,因为可以使用该信息来引导以流化流水线的方式从数据页本身进行将
来的突发读取。此外,可能碰巧存在完全由未完成的操作数集合构成的页,而在该 层次上访问存在位将允许整个页面被跳过,同时避免浪费的RAM库交换的可能。 注意到每个页表条目按设计包括空的空间,预料到随着时间流逝,可能需要更多的 标志。
在初始标记空间跳转表以后,其它子表是相同大小的,在此处示为正常4K字 节。具有相同大小的表的优势在于简化了存储器分配方案,且不会存在如果在分层 结构的每个层次上使用不同大小的表而可能产生的碎片问题。这种方法的不利之处
在于,对稀疏标记集合,可能会浪费空间。比如,如果创建标记空间,使得仅占用 任何给定数据页的一个操作数集合。如所示的,存储器分配器可以维护可用页的单 向链列,并且不加区别地将其少量发放给分层结构的任何层次。当然,从同一RAM 库中在给定的TRIE存储器内分配所有的节点有优势,因为可以避免库交换损失。 这样的设计也适用于突发RAM体系结构,因为相关数据被放置在连续的存储 器位置中。比如,八个操作数集合的所有操作数可以使用四个读取的突发读取从数 据页中读入。并且,数据页的所有存在位可使用两个八个读取的突发读取从页表中 读取。
注意到数据结构设计退化来支持小于八个操作数的操作数集合(尽管在这个 例子中使用了八个)。存在检测位域,以及数据页本身,通过改为这些域的较窄的 解释,可以很容易地将其细分来支持每个操作数集合8、 4、 2或者1个操作数。同 样地,可以很容易适于大小为7、 6、 5或者3的操作数集合而浪费很小或者没有。 所需的精确大小可以在运行时由配置数据指定。
为了避免当标记空间读取操作扫描数据结构以为了供给配置的时候、不得不 重新读取较高层次的表,在片上高速缓存一些较高层次的表是有利的。尽管没有要 求特定的大小,但一般4k的页面大小是适宜的。在本实现中,尽管有可能高速缓 存活动标记空间的指针,但是主标记空间跳转表太大了以至于不能高速缓存在片 上。
从前面的详细描述中可以看出,为并行计算提供了一种改进的体系结构。该 体系结构提供固定或者基于函数的标记来便于无序处理,提供配置(可能可重配置 的)来执行数据流图,并且允许实现多个计算概念,包括条件执行,(举例来说, if-then语句和while循环)、函数调用和递归。
尽管易于对本发明进行各种修改、和替换构造,但其某些示出的实施例在 附图中显示并在以上详细描述了。然而,应当理解,没有旨在将本发明限与所
公开的特定形式,相反,旨在覆盖落入本发明的精神和范围内的所有修改、替 换构造以及等效方式。
权利要求
1.在计算环境中,一种方法包括从内容可寻址存储器发送包括操作数的第一操作数集合的数据,所述内容可寻址存储器维护与标记关联的数据,从所述内容可寻址存储器发送到计算硬件的所述数据包括条件运算符;从所述计算硬件接收提供对应于所述输入数据的条件结果的输出数据;基于所述条件结果生成种子标记;如果所述条件结果为真,则将所述种子标记与第二操作数集合相关联,或者如果所述条件结果为假,则将所述种子标记与第三操作数集合相关联,使得仅所述第二或者仅所述第三操作数集合是完成的操作数集合;以及仅将所述完成的操作数集合发送到所述计算硬件中。
2. 如权利要求l所述的方法,其中所述条件运算符对应于if/then语句,并且 其中基于条件结果生成种子标记使所述完成的操作数集合被发送给所述计算硬件 中的两个分支中的一个。
3. 如权利要求l所述的方法,其中所述条件运算符对应于while循环,并且 其中基于条件结果生成种子标记使所述完成的操作数集合处于一个标记空间或者 另外一个标记空间中,每个标记空间对应于所述计算硬件中的一位置,使得所述完 成的操作数集合被发送给所述计算硬件的两个位置中的一个。
4. 如权利要求1所述的方法,还包括评估任何标记的操作数集合是否是完 成的,以便沿所述计算硬件中的特定路径向下发送,并且如果未完成,则跳过对应 于所述特定路径的配置。
5. 如权利要求l所述的方法,还包括丢弃未完成的操作数集合。
6. 至少一种具有计算机可执行指令的计算机可读介质,当所述指令被执行的 时候执行如权利要求1所述的方法。
7. 在计算环境中, 一种方法包括安排函数参数数据和返回标记作为进入函数的输入标记空间的操作数; 在所述函数中传送所述返回标记,直到输出数据由函数计算出来;以及 以所述返回标记来标记所述输出数据。
8. 如权利要求7的方法,其中所述返回标记对应于跟随调用所述函数的第一 配置之后的第二配置的输入标记空间。
9. 如权利要求7的方法,其中所述函数被递归调用,包括将所述函数划分成 递归前部分和递归后部分,执行所述递归前部分中的递归调用直到达到终止条件, 并且以逆调用顺序执行所述递归后部分以完成所述函数的评估。
10. 如权利要求7所述的方法,其中对于每个递归函数调用,所述返回标记对应于递归双亲调用程序的输入标记空间。
11. 至少一种具有计算机可执行指令的计算机可读介质,当所述指令被执行 的时候执行如权利要求1所述的方法。
12. 在计算环境中, 一种系统包括 计算硬件;内容可寻址存储器机构,包括当一个或多个操作数集合被所述内容可寻址存 储器认为是完成的时候、将其发送给所述计算硬件的机构;在所述计算硬件中加载的配置,所述配置包括作为条件运算符操作的至少一 个元素;所述条件运算符,它接收第一操作数集合、针对条件评估所述第一操作数集 合、生成包括指示针对所述条件的评估结果的信息的结果操作数、以及返回给所述 内容可寻址存储器结构;以及所述内容可寻址存储器,它在第二操作数集合中包括所述结果操作数。
13. 如权利要求12所述的系统,其中所述条件运算符对应于if/then语句,并且其中所述结果操作数包括完成所述第二操作数集合的真种子令牌或者假种子令牌。
14. 如权利要求12所述的系统,其中所述条件运算符对应于while循环,并 且其中所述结果操作数包括完成所述第二操作数集合的继续种子令牌或者结束种 子令牌。
15. 如权利要求12所述的系统,还包括用于丢弃未完成的操作数集合的装置。
全文摘要
以内容可寻址存储器(CAM)体系结构使用基于配置的执行模型能够实现各个计算概念,包括条件执行,(举例来说,If-Then语句和while循环)、函数调用和递归。通过使用仅从CAM中发出完成的操作数集合以便处理的CAM特征来实现if-then和while循环;为不同的条件评估结果生成不同的种子操作数,并且将种子操作数与用于if-then分支或者退出while循环之后计算出的数据进行匹配。因此,下游运算符仅检索完成的操作数。通过使用返回标记作为操作数连同函数参数数据进入函数的输入标记空间来处理函数调用和递归。将递归函数分成两半,递归前部分和在递归前部分调用之后执行的递归后部分。
文档编号G06F7/00GK101189573SQ200680019476
公开日2008年5月28日 申请日期2006年6月1日 优先权日2005年6月1日
发明者R·A·小布里特纳 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1