用于在计算机组中处理数据的系统及方法

文档序号:6462388阅读:106来源:国知局
专利名称:用于在计算机组中处理数据的系统及方法
技术领域
本发明总的来说涉及具有处理架构并进行指令处理的电计算机和数字 处理系统,更具体地说,涉及用于对特别支持或进行数字传输操作的指令数 据进行处理的这类电计算机和数字处理系统。
背景技术
在计算领域,处理速度是非常期望的品质,并且对创造更快速的计算机 和处理器的探索正在进行中。然而,行业中普遍认为,至少对于利用目前已 知的技术来提高微处理器的速度而言,微处理器速度的极限正在迅速地被接 近。因此,通过在处理器之间分担计算机任务来提高整体计算机速度的多处 理器的使用,越来越受到关注。但是还通常认为,在工作量的分担中几乎不 可避免地存在整体效率的一些下降。也就是说,所述多处理器的使用适用以
下古老的谚语仅仅由于一个人可以在60分钟内挖一个柱洞,并不必然得 出60个人可以在1分钟内挖一个柱洞的结论。同样的道理几乎适用于任何 任务的分工,处理器之间的任务分工也不例外。
当然,正在努力使计算机处理器之间的任务分担更加高效。正在研究和 过程改进的正是如何分配任务的问题。本发明人在该领域的工作过程中观察 到,在某些场合下,在多CPU环境中将数据从一个CPU传输到另一个CPU 可能很麻烦。例如,如果必须将数据从一个CPU传输到另一个CPU,且目 标CPU与源CPU之间被 一 个CPU隔开,则源CPU必须将该数据成 一 直线 直接写入该CPU,然后,该CPU必须读取该数据,并将该数据写入目标CPU, 然后目标CPU必须读取该数据。这种过程需要多次读操作和写操作,而且
如果要传输大量的数据,则这么多的读命令和写命令可能会阻塞系统运行。为了满足对允许同时在各种相异方向中-即在同 一 系统中任意的各个不 同CPU之间-进行若干个读操作和写操作的需求,已经开发了用于多端口读 和写操作的系统及方法。这些系统及方法处理了以上讨论中的大多数所关注
的问题,但是如同任何卓越进步那样,这些系统及方法已经引起新的难题。
例如,在CPU以流水线或多维阵列的方式排列的多CPU环境中,在CPU 对在先CPU而不是后续CPU进行写的情况下,可能会发生反转。可以精心
设计机制来防止反转的发生,但是这些机制的实现必需对硬件进行修改或进
行大量编程及CPU间的通信。作为另一个例子,目前的很多应用需要实时
处理或仅期望提高处理速度和效率。由此可见,对多端口读和写々乘作进行优 化是有益的。类似的原理,既然多端口操作可用,使这些操作的建立和性能 更加灵活也是有益的。

发明内容
相应地,本发明的目的在于提供在计算机流水线和阵列中处理数据的改 进系统及方法。
筒言之,本发明的一方面是由计算机组处理数据的方法。该计算机组包 括首计算机和末计算机,并且其中除首计算机之外的各计算机前面均置有在 先计算机,除末计算机之外的各计算机后面均置有后续计算机。可以将该过
程视为各计算机被看作当前计算机。(a)利用当前计算机读取新数据。然 后,(b)利用当前计算机写旧数据。然后,(c)在当前计算机中处理该新 数据,以生成下一次的旧数据。此后,(d)如果当前计算机非末计算机, 则将该旧数据保存在当前计算机中。该步骤(c)可以包括执行指令字中的 若干条指令。该步骤(a)和(b)可以在单个指令字中执行。(a) 、 (b) 和(c)中的至少一个步骤可以异步进行。
简言之,本发明的另一方面是处理数据的计算机组。该组包括首计算机 和末计算机,且其中除该首计算机之外的各计算机的前面置有在先计算机, 除该末计算机之外的各计算机后面置有后续计算机。各计算机均具有通过第
6一数据路径读取新数据的读逻辑、通过第二数据路径写旧数据的写逻辑和处 理该新数据以产生下 一次的旧数据的处理逻辑。除该末计算才几之外的该计算 机包括存贮元件存贮该旧数据。所述写逻辑在所述读逻辑之后操作,且所述 写逻辑在所述处理逻辑之前操作。所述读逻辑和所述写逻辑可以由以单个指 令字形式的程序来执行。所述读逻辑、所述写逻辑和所述处理逻辑中的至少 一个逻辑可以异步进行。
本发明还提供计算机程序,当该计算机程序运行在计算机组上时,使所 述计算机组实施本发明的所述一方面的方法。该程序可以位于载体上。该载 体可以是信号或存贮器。该存贮器可以是记录介质或其它例子中的存储器装 置。
本发明实施例的优势在于,它避免了在发生从高位计算机向低位计算机 写入数据期间的反转。
本发明实施例的另 一优势在于,它改进了数据通过计算机流水线或阵列 的初始传递,乂人而可以更快i也开始相应的处理。
本发明实施例的再一优势在于,它尤其适合于在需要向计算机组中的所 有计算机提供相同的初始数据值的情况下使用。
本发明实施例的又一优势在于,它尤其适合于与能够进行异步多端口读 取和多端口通信的计算机流水线或阵列 一起使用。
鉴于这里描述的及在附图的图中所示出的对目前已知的实施本发明的 最佳方式和优选实施例的工业实用性的描述,本发明实施例的这些及其它目 的和优势将对本领域技术人员来说将变得清楚。


本发明实施例的意图和优势将从以下结合附图的详细描述中变得明显,
在附图中
图1为根据本发明的计算机阵列的概略图2为示出图1的计算机的子集的详细图及图l的互连数据总线的更详细一见图3为描绘图1和图2的计算机中一个计算机的一般布局的框图; 图4为可在图l和图2的计算机中使用的指令字的概略图; 图5为图3的时间片定序器的示意图; 图6为描绘根据本发明的一种方法的例子的流程图; 图7为示出用于讨论根据本发明示例性实施例的图1和图2中计算机阵 列一部分的详细图8a-f为示出可在图7的部分中的计算机中使用的端口地址解码的概观 的表格;
图9为描绘图7和图8d-f所示的多写方法如何具体地与在单指令字中 包括若干条指令的能力相结合的示意性框图10为保证在如上所述的多读/多写系统中传播不反转的处理规则表;
图11为描绘当数据通过相连的CPU组从左边顺序传输到右边时在一连 串时间的优化流水线状态的框图12a-b为在形式上示出图11流水线中的数据的初始流的示意图,其 中图12a示出如果没有遵循规则3,则发生反转,图12b示出如果遵循规则 3,则数据流通过流水线而不发生反转。
在附图中的各幅图中,相同的附图标记用于表示相同的或相似的元件或 步骤。
具体实施例方式
虽然根据用于实现目的的模式对本发明的实施例进行描述,但是本领域 技术人员将认知到鉴于这些启示并未脱离本发明的精神或范围,因此可以实
现变体。
这里所描述的和/或在附图中所示的本发明的实施例及其变体仅以示例 方式给出,并不限定本发明的范围。除非以其它方式具体说明,本发明的独 立方面和部件可以被省略或修改,或可以具有因此^皮替代的等价物,或可以具有还未知的替代品,例如可能在未来开发的,或例如可能在未来被发现是 可接受的替代品的。由于潜在应用的范围很大,且由于本发明意在适应很多 这样的变体,因此只要保持在所要求的发明的精神和范围之内,本发明还可 以针对各种各样的应用而被修改。
本发明的优选实施例是在计算机流水线和阵列中处理数据的改进系统 及方法。如这里的不同附图所示出的,尤其是在图12b的视图中,本发明的 优选实施例由 一般附图标记1 000来描绘。
作为本发明的场景和基础,首先给出异步计算机通信的详细背景例子, 然后进一步给出在这种异步计算机通信中多端口读操作和多端口写操作的 详细背景例子。
对于第一背景例子,图1中的概略图中描绘一计算机阵列,该计算机阵
列在此由一般附图标记10来指代。计算机阵列IO具有多个(在示出的例子 中是24个)计算机12 (在阵列的例子中有时也称作"核"或"节点")。 在示出的例子中,所有的计算机12都位于单个电路小片14上。各计算机 12通常是独立运行的计算机,如在下文更详细地讨论的。计算机12由多条 相互连接的数据总线16 (其数量将在下文更详细地讨论)相互连接。在该 例子中,数据总线16是双向异步高速并行数据总线,尽管出于该目的而采 用其它的互连手段也在这里的技术范围之内。在阵列IO的本实施例中,不 仅计算机12之间的数据通信是异步的,而且独立的计算机12内部也以异步 模式运行。已经发现这种模式提供了重要的优势。例如,由于没有必要在整 个计算机阵列10中分发时钟信号,因此可以节省大量的功率。此外,没有 必要分发时钟信号还消除了可能限制阵列10的大小或产生其它困难的很多 时序问题。
本领域技术人员将认识到,电路小片14上还存在附加的部件,为了清 楚起见,图1的视图中省略了这些部件。这些附加的部件包括微处理器芯片 的电源总线、外部连接焊盘及其它这些普通方面。
计算机12e为不处于阵列10边界的一个计算机12的例子。也就是说,计算机12e具有四个互相垂直的相邻计算机12a, 12b, 12c和12d。在下 文中将使用计算机12a-12e的这个分组,来更详细讨论阵列10的计算机12 间的通信。如图1的视图所见,诸如计算机12e这样的内部计算机12具有 四个其他的可以通过总线16与其通信的计算机12。在以下讨论中,所讨论 的原理将应用于所有计算机12,除了只能够与三个其他计算机12直接通信 的位于阵列10边界的计算机12,以及只能够与两个其他计算机12直接通 信的拐角计算机12。
图2为图1中的一部分的更详细视图,只示出一些计算机12,特别是 包括计算机12a-12e。图2的视图还揭示每条数据总线16都具有读线18、 写线20和多条(在本例子中为18)数据线22。数据线22能够并行同时传 输一个18位指令字的所有位。应当注意到,在替代实施例中, 一些计算机 12是相邻计算机的镜像。然而,计算机12是全部具有同一方向,还是作为 相邻计算机的镜像在此并不重要,且在此将不再进一步讨论该潜在的复杂情 况。
诸如计算机12e的计算机12可以将其一条、两条、三条或全部四条读 线18设置为高,从而准备从相应的一个、两个、三个或全部四个相邻计算 机12中接收数据。相似地,计算机12也可以将其一条、两条、三条或全部 四条写线设置为高。(在下文中会更详细地讨论这两种情况。)
当一个相邻计算机12a、 12b、 12c或12d将其自身与计算机12e之间的 写线20设置为高时,如果计算机12e已经将对应读线18设置为高,那么字 在相关联的数据线22上从那个计算机12a、 12b、 12c或12d传输至计算机 12e。然后,发送计算机12将释放写线20,并且接收计算机12e (在该例子 中)将写线20和读线18拉低。后一个动作是向发送计算机12确认已经接 收到数据。注意,上述说明并不必然地意在按次序指示事件的顺序。在实际 应用中,接收计算机可以在发送计算机12释放(停止拉高)写线20之前, 试着将写线20设置得略低。在这种情况下,发送计算机12—释放写线20, 写线20就会被接收计算机12e拉低。在本例子中,只有编程错误才会使位于一条总线16的对立端的两个计
算机12试着同时将它们的两条读线18均设置为高或同时将它们的两条写线 20均设置为高。然而,目前预计到,将存在以下时机期望将读线18的不 同组合设置为高,从而使一个计算机12可以处于等待来自选中计算机12中 的首个计算机的数据来将该首个计算机的对应写线20设置为高的等待状 太
心o
在以上讨论的例子中,计算机12e被描述为在相邻的计算机(选自计算 机12a、 12b、 12c或12d中的一个以上计算机)将该相邻计算机的写线20 设置为高之前,计算机12e将该计算机12e的读线18中的一条以上读线设 置为高。然而,该过程当然也可以以相反的次序发生。例如,如果计算机 12e正尝试向计算机12a写,那么计算机12e会将计算机12e和计算机12a 之间的写线20设置为高。如果计算机12e和计算机12a之间的读线18还没 有被计算机12a设置为高,则计算机12e会筒单地等待,直到计算机12a将 该读线18设置为高为止。然后,如上所讨论的,当读线18与写线20的对 应对均为高时,等待在数据线22上进行传输的数据被传输。之后,发送计 算机12e—释放写线20,接收计算机12a (在该例子中)就会将两个计算机 12e与12a (在该例子中)之间的读线18和写线20都设置为低。
每当诸如计算机12e的计算机12预计要写,将其一条写线20设置为高 时,它将简单等待,基本不消耗功率,直到如上所述有适当的相邻计算机 12 "请求"该数据为止,除非数据待被发送到其上的计算机12已经将它的 读线18设置为高,在这种情况下数据被立即发送。类似地,每当计算机12 预计要读取,将其一条以上读线18设置为高时,它将简单等待,基本不消 耗功率,直到连接到所选择的计算机12的写线20变高以在两个计算机12 之间传输指令字为止。
可能存在若干种潜在的手段和/或方法来使计算机12如所述工作。但是,
步运行(除了以所述异步方式相互之间传输数据)。也就是说,通常是按顺序完成指令。当发生写指令或读指令时,直到该指令完成(或者,也许作为 替代地,直到其因为"复位"或其他原因被异常中断时)才会有进一步的动 作。现有技术中,没有规则的时钟脉冲。更具体地说,只有当正在^f皮执行的 指令既不是读类型指令也不是写类型指令时(假如读或写类型指令经常需要 另一个实体完成)或当该读或写类型操作事实上已经完成时,才生成脉冲以
完成下一个指令。
图3为描绘图1和图2的一个计算机12例子的总体布局的框图。如图
3的视图所见,各计算机12为具有其自己的RAM 24和ROM 26的通用整 装计算机。如以上提到的,计算机12有时也称为独立的"核"。在本例子 中,假如计算机12被组合在单芯片上。
计算机12的其他基本部件为返回堆栈28、指令区域30、算术逻辑单元 (ALU 32)、数据堆栈34和用于对指令进行解码的解码逻辑段36。本领域 技术人员通常应该很熟悉基于诸如本例子中的计算机12的堆栈计算机的操 作。计算机12为具有数据堆栈34和分离的返回堆栈28的双堆栈计算机。
在这个实施例中,计算机12具有与相邻计算机12进行通信的四个通信 端口 38。通信端口 38为三态驱动器,具有关闭状态、接收状态(用于驱动 信号使其进入计算机12)和发送状态(驱动信号使其离开计算机12)。当 然,如果特定计算机12不在诸如计算机12e的例子的阵列(图1 )内部,那 么至少出于这里所述的意图, 一个以上通信端口 38不会被那个特定计算机 使用。指令区域30包括若干寄存器40,在本例子中,寄存器40包括A寄 存器40a、 B寄存器40b、 P寄存器40c以及I/O控制和状态寄存器(IOCS 寄存器40d)。在本例子中,A寄存器40a和IOCS寄存器40d为全18位寄 存器,而B寄存器40b和P寄存器40c为9位寄存器。
尽管该技术并不限于该例子,但是本计算机12被实施为执行本才几Forth 语言指令。如熟悉Forth计算机语言的人将认知的,复杂Forth指令,即通 常所说的Forth "字"是根据设计在计算机中的本机处理器指令所构建的。 在其它语言中,这可能为通常所说的"库"。如下文将更详细描述的,计算机12在一个时段从RAM 24、 ROM 26或直接从一条数据总线16 (图2 )读 取十八位。然而,由于Forth中的大多数指令(即通常所说的无操作数指令) 直接从堆栈28和34中得到它们的操作数,因此它们的长度通常仅为5位, 使得在单个十八位指令字中可以包含多达四条指令,条件是该组指令的最后 一条指令选自仅需三位的指令的有界集。在该实施例中,数据堆栈34顶部 的两个寄存器是T寄存器44和S寄存器46。在图3的视图中以框图的形式 描绘的还有时间片定序器42 (稍后详细讨论)。
图4为指令字48的概略图。(应该注意指令字48实际上可以包含指令、 数据,或包含指令和数据的一些组合。)指令字48由十八位50组成。作为 二进制计算机,各位50将为"1"或"0"。如这里先前所讨论的,十八位 宽的指令字48可以包含位于四个时间片54中的多达四条指令52,该四个 时间片54被称为时间片零54a、时间片一 54b、时间片二 54c和时间片三54d。 在本实施例中,十八位指令字48总是作为整体被读取。因此,由于指令字 48中总是存在具有多达四条指令的潜能,因此在计算机12的指令集中包括 no-op (无操作)指令以提供用于当没有必要或甚至是不期望使用所有可用 的时间片54的情况。应该注意,根据一个特定实施例,在间隔的时间片(具 体来说,时间片一 54b和时间片三54c )中位50的极性(与有效低相比较是 有效高)是相反的。然而,这不是必需的,因此,为了更好地解释这项技术, 在下面的讨论中也避免这种潜在的复杂情况。
图5为图3的时间片定序器42的示意图。从图5的视图中可以看出, 时间片定序器42具有排列成环形的多个(在该例子中是十四个)反相器56 和一个与非门58,使得信号在经过该十四个反相器56和与非门58时被反 相奇数次。当或门60的两个输入中的任一个变为高时,在时间片定序器42 中发起一信号。第一或门输入端62得自正在被执行的指令52的i4位66。 如果i4位66为高,则该特定指令52是ALU指令,且i4位66为"1"。当 i4位66为"1"时,则第 一或门输入端62为高,则时间片定序器42被触发, 以发起使下一条指令52被执行的脉冲。当第一或门输入端62变高或被第二或门输入端64变高(如将在下文中
讨论的)而触发时间片定序器42时,信号绕时间片定序器42移动两圏,每 次在时间片定序器输出端68产生输出。该信号第一次通过时间片定序器输 出端68时,时间片定序器^T出端68的输出为#^,而第二次时为高。来自时 间片定序器输出端68的相对宽的输出被提供给脉沖发生器70 (以框图的形 式示出),该脉冲发生器70产生窄时序脉冲作为输出。本领域技术人员应 该认识到窄时序脉冲是为准确发起计算机12的操作所期望的。
当正在被执行的特定指令52为读指令或写指令或任何其它指令时,其 中所述任何其它指令不期望正在被执行的指令52顺序地触发下一条指令52 的执行,则i4位66为"0"(低),并且因此第一或门输入端62也为低。 本领域技术人员将认识到,在诸如计算机12的器件中,事件的时序通常很 关键,而且无一例外。本领域技术人员将认识到,在检测时间片定序器42 后,来自或门60的输出必须保持为高,直到该信号循环通过与非门58以便 发起环的第二 "圈"之后为止。之后,在第二 "圈"期间,来自或门60的 输出会变低,以便阻止电路的多余继续振荡。
根据以上讨论可以认知到,假设下文会讨论的第二或门输入端64不为 高,则当i4位66为"0"时,时间片定序器42不会被触发。
如上所述,根据各指令52是否为读类型指令或写类型指令来设置各指 令52的i4位66。指令52的剩余位50为该指令提供了特定操作码的剩余部 分。在读类型指令或写类型指令的情况下, 一个以上位可用于指示从该特定 计算机12读取数据的地址或将数据写入该特定计算机12的地址。在本例子 中,待写入的数据总是来自于T寄存器44 (数据堆栈34的顶部),然而数 据可以被选择性地读入T寄存器44或可以执行该数据的指令区域30。也就 是说,在该特定实施例中,由于可以以在此所述的方式来传送数据或指令, 因此尽管不是必需的,也可以从数据总线16直接执行指令。此外, 一个以 上位50将用来指示哪个端口 38,如果存在的话,将被设置为读或写。当前 的操作可以通过利用 一个以上位指代诸如A寄存器40a、 B寄存器40b等的寄存器40来可选地完成。在这种例子中,将具有与各端口 38 (以及计算机 12可尝试与之通信的任何其它潜在实体,例如存储器、外部通信端口等) 相对应的位的数据预载入所指代的寄存器40。例如,在特定寄存器40中, 四位中的各位可以对应于上端口 38a、右端口 38b、左端口 38c或下端口 38d 中的各端口。在这些位的位置中的任意位置存在"1"的情况下,通过对应 的端口 38将通信设置为继续进行。
紧接着的例子采用计算机12e尝试向计算机12c写的通信,尽管该例子 适用于在任意相邻计算机12之间的通信。当在写计算机12e中执行写指令 时,选中的写线20被设置为高(在该例子中,是计算机12e与12c之间的 写线20)。如果对应的读线18已经为高,则通过所选中的通信端口 38马 上将数据从选中的位置发送出去。作为替换地,如果对应的读线18还不为 高时,则计算机12e筒单地停止操作,直到对应的读线确实变高为止。这里 先前已经讨论过当存在读类型指令或写类型指令时停止计算机12a (或更准 确地说是禁止计算机12a的进一步操作)的机制。简言之,指令52的操作 码在i4位66的位置处为'0,,因此或门60的第一或门输入端62为低, 并且时间片定序器42不会被触发而生成使能脉沖。
关于如何在读类型指令或写类型指令完成时恢复计算机12e的操作,机 制如下当计算才几12e和12c之间的读线18和对应写线20均为高时,则两 条线18和20分别被将相应线保持为高的相应计算机12中的各计算机12释 放。(在该例子中,发送计算机12e将写线20保持为高,而接收计算机12c 会将读线18保持为高)。然后,接收计算机12c将两条线18和20拉低。 在实际应用中,接收计算机12c可以在发送计算机12e释放写线20之前尝 试将线18和20拉低。然而,由于线18和20被拉高,且只能微弱地保持(锁 存)为低,因此将线18或20拉低的任何尝试实际上都不会成功,直到线 18或20被将其锁存为高的计算机12释放为止。
当数据总线16中的两条线18和20均被拉低时,则这是"确认"条件。 计算机12e和12c中的各计算机在接收该确认条件之后,将其自身的确认线72设置为高。如从图5的视图中可以看出的,确认线72提供给第二或门输 入端64。由于到任意或门60输入端62或64的输入都会使或门60的输出 变高,所以这将以这里先前所述的方式来发起时间片定序器42的操作,使 得将执行指令字48的下一个时间片54中的指令52。确认线72保持为高, 直到下一条指令52被解码为止,从而防止伪地址到达地址总线。
当正在被执行的指令52位于指令字48的时间片三的位置时,无论如何, 计算机12将提取下一个等待的十八位指令字48,当然除非i4位66为'0,。 在实际应用中,可以包括用于"预提取"指令的方法和装置,使得可以在指 令字48中所有指令52的执行结束之前开始该提取。然而对于异步数据通信 来说这也不是必需的。
已经详细描述了计算机12e向计算机12c写的以上例子。如根据以上讨 论可以认知的,无论计算机12e首先尝试向计算机12c写还是计算才几12c首 先尝试从计算机12e读取,其操作基本相同。操作在计算机12e和12c都就 绪之后才会完成,而且无论计算机12e还是计算片几12c首先就绪,该首先就 绪的首个计算机12简单地"进入睡眠",直到另一个计算机12e或12c完 成传输为止。实际上,考虑上述处理的另一种方式是,当写计算机12e和接 收计算机12c分别执行写指令和读指令时,它们均进入睡眠,但是当读线18 和写线20都为高时,最后进入事务处理的计算机几乎瞬时再度醒来,而发 起事务处理的首个计算机12会几乎无限期地保持睡眠,直到第二计算机12 做好完成处理的准备为止。
相信使能器件之间有效的异步通信的关键特征是某种确认信号或条件。 在现有技术中,器件之间的大多数通信是时钟控制的,且发送器件没有得知 接收器件已准确接收数据的直接方式。诸如校验和操作的方法可用来尝试保 证数据的正确接收,但是发送器件没有已完成操作的直接指示。如这里所述 的本方法提供必要的确认条件,该条件允许器件之间的异步通信,或至少使 器件之间的异步通信变得实用。此外,确认条件还可能使一个以上器件"进 入睡眠",直到确认条件发生才会醒来。当然,也可以通过在计算机12之间发送的分离信号(通过互连的数据总线16或通过分离的信号线)来在计 算机12之间传送确认条件。然而,可以认知到,因为用于确认的方法不需 要在实际上影响通信的任何额外的信号、时钟周期、定时脉冲或除所述的之 外的任何这类资源,因此这里包括更多的经济节约。
根据对程序和用于完成该程序的手段的以上讨论,现在可以理解对背景
方法的例子的以下筒单描述。图6为描绘该方法例子的流程图74。在'发 起通信'操作76中, 一个计算机12执行使其尝试与另一计算机12通信的 指令52。该指令可以是对写的尝试或对读的尝试。在通常与'发起通信' 的操作76同时发生的'将第一线设置为高,操作78中,将读线18或写线 20设置为高(取决于首个计算机12是尝试读还是尝试写)。作为"将第一 线设为高',操作78的一部分,如此操作的计算机12将根据当前描述的操作 实施例来中止操作,如这里先前所详细描述的。在'将第二线设置为高'操 作80中,第二线(写线20或读线18)被第二计算机12设置为高。在'传 送数据操作'82中,在数据线22上发送并接收数据(或指令等)。在'拉 低线,操作84中,释放读线18和写线20,然后将该读线18和写线20拉 低。在'继续,操作86中,确认条件使计算机12恢复它们的操作。在本例 子的情况下,确认条件产生确认信号88 (图5),在这种情况下该确认信号 88仅仅是确认线72的"高"条件。
针对第二背景例子,图7为示出图1和图2中计算机12的计算机阵列 10的一部分100的详细图。不过,为了强调该部分100建立在第一背景例 子的技术之上,计算机(节点、核等)现在仍然被称为CPU 12。
如图7所示,中心CPU 12通过相应的数据总线16连接到邻居CPU 12a、 12b、 12c和12d,每条数据总线16都包括读线18、写线20和十八条数据线 22。然而,在CPU 12中,总线16内部连"^,如果同时有至少两个端口 38 待读取,则CPU 12会创建未定义的硬件状态。在软件设计中应当考虑这种 情形,以允许从这些状态中复原。
CPU 12e具有其自身的存储器102 (例如图3所示的RAM 24和ROM26),该存储器102可以包含其自身的软件104。 CPU 12e还具有一套寄存 器40,以包含用于搡作的操纵指针。这些寄存器包括用于数据操作的A寄 存器40a和B寄存器40b、用于保持程序指针的P寄存器40c,以及I/0控 制和状态寄存器(IOCS寄存器40d)(也见图3)。
图8a-f为示出可在图7中部分100的CPU 12中使用的端口地址解码的 总体的表格图。图8a示出当寄存器40中的高地址位108被设置为"1"时, 寄存器40通常对一个以上端口 38进行寻址。相反地,未示出,当高地址位 108为"0"时,寄存器40对存储器102中的位置进行寻址。当高地址位108 被设置为高时,接下来的八位充当选择位110,选择位110指出哪个或哪些 特定的端口38被选中,且它们是待被读还是待-波写。因此,对于CPU 12e 中的寄存器40,"右"指示右侧或东侧邻居CPU 12a,"下"指示下侧或南 侧邻居CPU12b,"左"指代左侧或西侧邻居CPU 12c,且"上"指代上侧 或北侧邻居CPU 12d。针对"RR"动作而设置的选择位110指示即将到来 的读请求,而针对"WR"动作而设置的选择位110指示即将到来的写请求。
注意,为了一致且最小化混淆,我们在此坚持一般的惯例高值或"1" 表示真条件,低值或"0"表示假条件。然而,这并不是必要条件,并且可 以使用替代的惯例。例如,CPU 12的某些当前优选实施例在RR位的位置 使用"0"来表示真,在WR位的位置使用'T'表示真。
顺便应该注意到,该端口地址解码方法还允许将高地址位108设置为 "1",并且不设置选择位110。这可以有利地用来对CPU 12中的其它元件 进行寻址。例如,可以以这种方式对IOCS寄存器40d进4亍寻址。
在CPU 12的本实施例中,IOCS寄存器40d使用相同的端口地址排列 来报告端口 38的读线18和写线20的当前状态。这使得IOCS寄存器40d 中的这些相应位有助于允许对I/O操作状态的编程测试。例如,与其CPU 12e 从CPU 12b中异步读取,其中如果CPU 12b尚未将共用的写线20设置为高, 则CPU 12e会进入睡眠,倒不如CPU 12e测试IOCS寄存器40d中位13 (下 /WR)的状态(反映将CPU 12b连接到CPU 12e的写线20的状态),并转移到来自CPU 12b的就绪数据且立即读取或转移到另一条指令且立即执行。
图8b示出筒单的第一例子。这里设置针对右/RR的选择位110,指示待 从端口 38b读取数据。图8c示出简单的第二例子。这里设置针对右/WR的 选4奪位110,现在指示待向端口 38b写入。
习惯上在任何给定的时段,只可以使能一个选择位110来指定单个端口 38和单个动作(读或写)。然后若干个高位被解码为错误条件。然而,在 此公开的新颖方法并不遵从该习惯,而是可以同时有利地使能针对端口 38 的一个以上选择位110,从而请求若干个读和/或写操作。在这种情况下,所 有相应端口 38上会给出数据,包括给出新数据的信号。
图8d-f示出若干个读和/或写操作的一些例子。图8d示出CPU12e中的 寄存器40可以以何种方式并发指定从CPU 12b的读取和对CPU 12a的写。 图8e示出可以以何种方式并发指定从CPU 12b的读取和对CPU 12c的写。 图8f示出指定从CPU 12b的读取和对CPU 12a或CPU 12b的写。(如预示 的,人们可以将图8d-f与图9进行比较,在图9中数据传输路径由箭头132 和134来代表。)
在多写期间的实践中,CPU 12e将在与一个以上目标CPU 12a、 12b、 12c或12d共用的总线16上给出数据并将写线20设置为高。然后,源CPU 12e会等待,直到接收到数据已经被读取的指示为止。在某些最终意义上来 说,可假定地, 一个以上目标CPU 12a、 12b、 12c或12d在与CPU 12e共 用的总线16上将相应的读线18设置为高。然后,目标CPU 12正式读取数 据,并在与CPU 12e共用的总线16上将相应读线18和写线20拉低,从而 确认来自CPU 12e的数据的4妻收。
图9为描绘图7和图8d-f所示的多写方法可以以何种方式具体与一个 数据字120中包括多达四条指令的能力相结合的示意性框图。各指令通常是 五位,所以18位宽的数据字120容纳大约四条指令。于是最后一条指令可 以只有三位,但这对于许多指令已足够。该方法的一个值得注意的有利方面 是它允许使用非常高效的数据传输机制。在下文中,@=提取,!=存储,且p是指"程序计数器"或P寄存器40c。 在⑥p+和!p+中的"+"是指在执行之后寄存器中的存储器地址递增,除非如
果寄存器内容指向另一寄存器或端口,该寄存器内容不被递增。这样,在后
者这些情况下的"+"将这些指令区分为"专用的",而不是通常的 p和!p指令。
图9给出单个指令序列程序如何将数据从一个CPU 12传输到另一 CPU 12的例子,该程序可以包括在仅利用用来读和写数据的P寄存器40c的单 个18位的数据字120中。这里"@p+"是时间片零54a中装载的指令122。 这是从P寄存器40c中指定的当前地址中提取下一个18位数据字120的直 接量操作,将该数据字120压入数据栈34。[而且,通过将P寄存器40c中 的地址递增,除非当地址是针对寄存器或端口时才不递增,这里P寄存器 40c中高地址位108会指示正在指定端口。]接下来,"."是时间片一 54b 中装载的指令124。这是不执行任何操作的简单的nop操作(无操作)。而 且接下来,"!p+"是时间片二 54c中装载的指令126。这是将顶部的数据字 120从数据堆栈34中弹出、并将该数据字120写入P寄存器40c中所指定 的当前地址的存贮操作。注意,P寄存器40c中所指定的地址没有改变,其 仅是在功能上使不同的邻居CPU 12被访问而已。最后"unext"是时间片三 54d中装载的指令128。这是根据返回堆栈28的顶部是否为零来执行不同的 操作的微下一步(micro-next)操作。当返回堆栈28不为零时,微下一步使 返回堆栈28递减,使在当前所高速緩存的数据字120的时间片零54a中的 指令处(即在这里的例子中,再次在指令122处)继续执行。尤其应该注意, 这里使用微下一步不需要提取新的数据字120。相反,当返回堆栈28为零 时,微下一步从P寄存器40c中所指定的当前地址中提取下一个数据字120, 并使执行在该新的数据字120的时间片零54a中的指令处开始。
针对该特定的例子,P寄存器40c可以^皮装载以lOllOOOOOb,且返回堆 栈28的顶部可以包含lOlb(十进制的5 )。由于P寄存器40c包含101100000b (见例如图8a和图8d),因此这里指令122中的"@p+"指令CPU12e从CPU 12b读取(通过其端口 38b)下一个数据字120,并将读取的数据字120 压入数据堆栈34。不过,由于P寄存器40c中的地址是针对端口的,因此 不会递增。这里指令124中的"."nop仅仅是填充器,用来填满18位当前 数据字120。接下来,由于P寄存器40c仍然包含101100000b,这里指令 126中的"!p+"指令CPU 12e弹出数据栈34的顶部数据字120 (即由指令 122置入的数据字120),并将该数据字120(通过端口 38a)写入CPU 12a。 再次,由于P寄存器40c中的地址是针对端口的,因此该地址不会递增。然 后,指令128中的"unext"使返回堆栈28缩减到100b (十进制的4 ),并 在指令122处继续执行。并且,指令122、 124、 126和128中的单个字程序 以这种方式继续,将返回堆栈28縮减到Ollb、 010b、 OOlb,最终缩减到OOOb (十进制的0 ),从CPU 12b提取下一数据字120,并执行这个新数据字120 的时间片零54a中的指令。
总之,在这里的例子中的P寄存器40c被装载以指定源和目的(端口 38b和38a,以及CPU 12b和12a)的一个地址值,返回堆栈28被装载以迭 代计数(5)。然后,通过CPU 12e有效地传输("流水线地")五个数据 字120,然后CPU 12e在也由CPU 12b提供的第六数据字120的时间片零 54a中的指令处继续执行。
各种其它优势是使用该简单但一流的方法的结果。例如,不需要使用A 寄存器40a和B寄存器40b,从而使得A寄存器40a和B寄存器40b可由 CPU 12e针对其它的数据目的而使用。从此得出,当进行数据传输时,可以 消除指针交换(除杂)。
例如,针对数据流水线技术的传统软件例程会在某个点从输入端口读取 数据,并在另一个点将数据写入输出端口。为此,除了正在使用的相应输入 端口和输出端口的指针外,还需要指向存储器的至少一个指针。由于端口可
能有不同的地址,因此这里继续进行的最直接方式会是使用直接量指令将输 入端口地址载入堆栈,将该地址置入寻址寄存器,从输入端口进行读取,然 后使用直接量指令将输出端口的地址载入堆栈,将该地址置入寻址寄存器,并对输出端口进行写。
该方法中两次直接量载入各需要4个周期,两个寄存器设置指令各需要 1个周期。即在环路内部设置输入和输出指针总共花费10个周期。此外, 当需要这种指针交换时会有额外损失,因为在环路内部需要三个字的存储空 间,从而不允许使用包含在单个18位字中的环路。相应地,该例子中的指
令环路将需要具有存储器访问的分支,这增加了 4个周期的进一步开销,且 使总的指针交换和环路开销至少为14个周期。
然而,相反,由于可以在CPU 12中进行多端口寻址,用于选4奪输入端 口 38和输出端口 38两者的地址可以被装载到1/0环^各的外部,且可用于输 入和输出两者。由于在多端口读取期间仅来自一个邻居的数据被读取,且多 端口写期间仅一个邻居在读取,因此该方法可以运行。这样,就不需要传统 中设置输入和输出指针所花费的环路内部的14个周期的开销。该环路仍然 具有读指令和写指令,但是现在这些指令都可以使用同一指针,所以指针不 需要改变。
这意味着使用多端口写技术可以将某些类型的I/O环路的开销减少14 个周期(或更多)。发明人已经观察到,在最好情况下,该技术允许在CPU 12的处理环路中从23个周期减少到6个周期。在一个周期需要大约一纳秒 的情况下,这表示有效处理器速度从43MHz提高到167MHz,这表示相当 可观的改进。
现在简要地继续图8f,并重新继续图9,图8f和图9示出可以以何种 方式进行多写,甚至是使用单字程序来进行多写。这里CPU 12e从CPU 12b 读取,并写入CPU 12a或CPU 12c。在效果上,这里的流水线4支术为CPU 12a 或CPU 12c首先可用。该流水线技术图示出在CPU 12中可能增加的灵活性, 且仅仅是以何种迄今认为过于困难或不切实际的方式来使用根据本技术的 CPU 12的一个可能的例子。
总之,CPU 12必须处理对端口 38的读取和到端口 38的跳转。在从多 端口地址读取或向跳转到多端口地址时,如果没有正在执行的显式代码用来发现,则无法得知数据或指令是从哪个端口 38获得的。(最快的方式依赖
于对两个CPU 12都相同的端口 38。)传统上,由于不同的数据或代码可能 来自不同的端口,因此这个问题被看作是要避免的问题。然而,在假定的协 同环境下,发明人已经找出如何将一切变为利益。并且本发明就是这种情况。
如果CPU 12从多端口地址中执行,且所有寻址邻居CPU 12协同地(即 同步地)写, 一个邻居CPU 12可以供应指令流,而不同的CPU 12提供直 接量数据。直接量提取操作码(@p+)产生可以选择性地(并不同所有的直 接量都需要这样做)满足不同邻居CPU 12的从P寄存器40c中多端口地址 的读取。这仅仅需要邻居CPU 12之间的广泛"协同"。
然而,在流水线的多端口卩吏用时,在一个邻居CPU 12正在读耳又,而一 个CPU 12正在写的情况下,对同一多端口地址的读取和写不会产生问题。 跳转到这种多端口地址并执行直接量存贮操作码(!p+)的思想允许P寄存 器40c在完全安全的情况下对两个端口 38进行寻址。这使A寄存器40a和 B寄存器40b均空闲,可为本机使用。
当传播数据(实际数据或作为数据正在被传输的指令)时,还可以对 CPU12进行其它优化。图10-12示出一例子,并给出当前的发明。
图10为用于保证在如上所述的多读/多写系统中传播不反转的处理规则 1000的表格。规则l是简单的——各CPU应当将在先CPU "看"作它的源。 规则2和规则3有点深奥,但是通常可以通过将运送液体的流水线与CPU 的流水线进行比较而被认知到。
规则2避免了 CPU的流水线变为"瓶颈"。4艮明显,如果CPU的流水 线无法跟上供应给它的数据,那么就不能实时地进行操作。由此可见,各 CPU应当最好于在先CPU做好写准备之前或在先CPU做好写准备的那一刻 就做好读取准备。当然,这不总是可能的(如图12a-b所示),但是在对CPU 进行编程时,将其作为目标来谨记是有帮助的。图11为通过示出通过相连 的CPU 1102、 1104、 1106和1108组从左到右顺序传输数据时在一连串时间 处优化流水线1100的状态来描绘这一点的框图。在t时刻,CPU 1102向
23CPU1104写(W),而CPU 1104、 1106、 1108都在读取(R)。在t+"l时 刻,此时CPU 1104有数据,并将该数据写入CPU 1106,而CPU 1106、 1108 在读取。在t+2时刻,此时CPU 1106有数据,并将该数据写入CPU 1108, 而CPU 1108在读取。
规则3避免了 CPU的流水线"减速"(这里与液体运送流水线进行类 比变得有些勉强)。图12a-b是在形式上示出图11的流水线1100中的初始 数据流的示意图,既有没有遵循规则3的情况,也有遵循规则3的情况(这 里时间的前进方向是从左到右)。
图12a示出在采用传统的读(R)、处理(P)和写(W)的操作次序的 情况下经过流水线1100的数据流。所有的操作具有最小执行时间(为了简 单起见,这里所示出的相同),但是读(R)和写(W)操作在等待对应的 写(W)或读(R)发生的时候,可能需要除最小时间之外的额外时间。特 别是在异步CPU中,用于处理(P)操作的时间可能随手边的任务而具有相 当可观的变化。因此,在实际应用中,处理(P)操作通常会比在此描绘的 需要更长的时间,因此那些类似于图12a所示的问题很可能会变得更差。
在图12a中描绘出反转1112。当在这里开始写操作1114时,两个读操 作1116和1118正在等待,CPU 1108向CPU 1106写。进一步,在流水线 IIOO中,这会更差。例如,当CPU 1108开始写时,CPU1110可能正忙于 处理或写,然后只有CPU 1106可能在一见图读取。反转1112几乎可以确定不 是流水线1110的编程者所期望的或预期的,它很可能破坏运算精度,或使 流水线1110正在进行的应用崩溃。
图12a还示出反转1112以何种方式显著增加CPU lllO读取(即等待) 数据以开始工作所花费的时间。然而,就这一点而论,从其它方面来说经过 图12a中流水线1110的时序可能也不是最理想的,如通过图12a和图12b 的比较结果可以看出的。
图12b示出在采用读(R)、处理(P)和写(W)的操作次序的情况下 通过流水线1100的数据流。如这里可以看出的,不存在反转,且CPU 1102、1104、 1106、 1108和1110都尽快接收数据以开始工作。
图12b中示出的结点图示出这里的流水线1100的有用的额外特征(这 些应当与转移操作混淆)。在CPU中进行读(R)和写(R)操作之后,以 CPU 1102为例,刚写入CPU 1104的数据不必然是从CPU 1102得到的。因 此,对于一起工作的CPU 1102中随后的处理(P)操作,该数据是可获得 的。这对于利用相同的值来初始化CPU(例如使存贮位置归零或设置计数器) 是有用的。另外, 一些种类的算法也可以受益于此。这些算法例如将单个数 据采样给予若干个CPU,然后在各CPU中以不同的系数值来进行处理的算 法。
可替换地,可通过使用初始读(R)、写(W)和单个n叩指令作为处 理(P)向CPU 1102、 1104、 1106、 1108、 1110中的各CPU提供不同的第 一数据值,直到流水线中的所有CPU具有数据为止,然后这些CPU都使用
这些数据来并行进行实际的处理。
可以在不改变本发明的实施例的值或范围的情况下,对其进行各种额外 的修改。例如,虽然这里在读指令和写指令方面对该发明进行了描述,但是 在实际应用中,可以存在至少两种读类型指令和/或至少两种写类型指令。
仅作为一个例子,在计算机12的一个实施例中,存在使寄存器递增的写指 令和不使寄存器递增的其它写指令。类似地,可以根据使用哪个寄存器40 来选择通信端口 38等而改变写指令,如这里先前所描述的。还可以存在若 干不同的读指令,仅取决于计算机12的设计者认为哪种改变是作为替换的 读行为的有用选项。
类似地,尽管在这里已经关于单个电路小片14上的阵列IO中的计算机 12之间的通信描述了本发明的实施例,但相同的原理和方法可用于或被修 改为用于完成其它器件间通信,例如计算机12与其专用存储器之间的通信, 或阵列10中的计算机12与外部器件之间的通信(通过输入/输出端口等)。 实际上,预计到, 一些应用可能需要阵列的阵列一利用当前描述的器件间通 信方法潜在地适用于阵列的阵列中的通信。尽管这里已讨论了计算机阵列10和计算机12的具体例子及其规则1000 的具体例子,但是,预期将存在很多还无法想象的应用。实际上,本发明的 一个优势在于本创造性方法及装置可以适于大量使用。
本发明还提供一种计算机程序,当该计算机程序在计算机组上运行时, 使该计算机组实施在此之前所描述的创造性方法。该程序可以位于载体上。 该载体可以是信号或存贮设备。该存贮设备可以是记录介质或在其它例子中 的存储器设备。
上面的所有仅是本发明的可用实施例的 一 些例子。本领域技术人员将容 易看出可以在不脱离本发明的精神或范围的情况下,进行大量其它的修改和 变动。相应地,这里的公开内容目的不意在限定,且所附的权利要求被解释 为包含本发明的全部范围。
权利要求
1. 一种由计算机组处理数据的方法,其中该计算机组包括首计算机和末计算机,并且,其中除首计算机之外的各计算机前面均置有在先计算机,且除末计算机之外的各计算机后面均置有后续计算机,该处理包括在被视为当前计算机的各计算机中(a)利用当前计算机读取新数据;(b)在所述(a)之后,利用当前计算机写旧数据;(c)在所述(b)之后,处理当前计算机中的所述新数据,以生成所述旧数据;并且(d)在所述(c)之后,如果当前计算机非末计算机,则将所述旧数据保存在当前计算机中。
2、 根据权利要求1所述的方法,其中所述(a)包括从在先计算机读取所述旧数据作为所述新数据,或者, 在为首计算机的情况下,从该计算机组的外部读取数据作为所述新数据。
3、 根据权利要求1或2所述的方法,其中 所述(b)包括将所述旧数据写入后续计算机,或者, 在为末计算机的情况下,将所述旧数据写到该计算机组的外部。
4、 根据权利要求l、 2或3所述的方法,其中该计算机组为利用数据路径连接以互相通信的两维以上计算机阵列。
5、 根据权利要求4所述的方法,进一步包括利用可编程设置的位来使所述数据路径寻址到至少在先计算机和后续 计算机,使得所述当前计算机可以通过作为所述位并发设置的基础的所述数 据4^径进行通信。
6、 根据权利要求5所述的方法,其中所述(a)包括从由所述位并发指定的若干个计算机中的一个计算机读
7、 根据权利要求5或6所述的方法,其中所述(b)包括将所述旧数据写入由所述位并发指定的若干个计算机中 的一个计算机。
8、 根据前述权利要求中任一项所述的方法,其中 所述(a)包括将所述新数据压入堆栈;且所述(b)包括将所述旧数据从堆栈中弹出。
9、 一种处理数据的计算机组,其中该计算机组包括首计算机和末计算 机,并且,其中除首计算机之外的各计算机前面均置有在先计算机,且除末 计算机之外的各计算机后面均置有后续计算机,所述各计算机均包括通过第 一数据路径读取新数据的读逻辑; 通过第二数据路径写旧数据的写逻辑; 处理所述新数据以生成所述旧数据的处理逻辑;并且 存贝i所述旧数据的存贮元件,针对除末计算机之外的各计算机; 其中所述写逻辑在所述读逻辑之后操作,且所述写逻辑在所述处理逻辑 之前操作。
10、 根据权利要求9所述的计算机组,其中所述读逻辑从在先计算机读取所述旧数据作为所述新数据,或者,在为首计算机的情况下,从该计算机组的外部读取数据作为所述新数据。
11、 根据权利要求9或IO所述的计算机组,其中 所述写逻辑将所述旧数据写入后续计算机,或者,在为末计算机的情况下,将所述旧数据写到该计算机组的外部。
12、 根据权利要求9、 10或11所述的计算机组,其中该计算机组为利用若干条第 一数据路径和若干条第二数据路径连接的 两维以上计算机阵列。
13、 根据权利要求12所述的计算机组,进一步包括 具有位的寄存器,所述位可编程设置为对所述各数据路径进行寻址,使具有位的寄存器,所述位可编程设置为对所述各数据路径进行寻址,使 得所述计算机可以通过所述数据路径中作为所述位并发设置的基础的若干 条数据路径来进行通信,从而允许用所述寄存器中的单个地址兼表示数据的 源和目的两者。
14、 根据权利要求9至13中任一项所述的计算机组,其中 所述读逻辑将所述新数据压入堆栈;且所述写逻辑将所述旧数据从所述堆栈中弹出。
15、 一种计算机程序,当该计算机程序在计算机组上运行时,使该计算 机组实施根据权利要求1至8中任一项所述的方法。
全文摘要
一种计算机组包括首计算机和末计算机。除所述首计算机之外的所述各计算机前面放有在先计算机,除所述末计算机之外的所述各计算机后面放有后续计算机。一逻辑通过第一数据路径读取新数据,且一逻辑通过第二数据路径写旧数据。一逻辑处理所述新数据以生成所述旧数据,并且除所述末计算机之外,存贮元件存贮所述旧数据。所述写逻辑在所述读逻辑之后操作,且所述写逻辑在所述处理逻辑之前操作。
文档编号G06F15/16GK101295242SQ20081009408
公开日2008年10月29日 申请日期2008年4月25日 优先权日2007年4月27日
发明者约翰·W·瑞博, 迈克尔·B·蒙特维利什斯凯 申请人:科技资产股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1