CN101051301A - 用于操作计算机处理器阵列的方法和装置 - Google Patents
用于操作计算机处理器阵列的方法和装置 Download PDFInfo
- Publication number
- CN101051301A CN101051301A CNA2007100907536A CN200710090753A CN101051301A CN 101051301 A CN101051301 A CN 101051301A CN A2007100907536 A CNA2007100907536 A CN A2007100907536A CN 200710090753 A CN200710090753 A CN 200710090753A CN 101051301 A CN101051301 A CN 101051301A
- Authority
- CN
- China
- Prior art keywords
- computing machine
- array
- forthlet
- instruction
- computers
- 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.)
- Pending
Links
Images
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8007—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
- G06F15/8023—Two dimensional arrays, e.g. mesh, torus
-
- 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
-
- 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
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
-
- 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/547—Remote procedure calls [RPC]; Web services
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Multi Processors (AREA)
- Microcomputers (AREA)
Abstract
一种计算机阵列(10),其具有多台计算机(12),用于完成较大的任务,该任务被分割成多个较小的任务,每个较小任务被指定给一台或多台计算机(12)。每台计算机(12)可被配置用于特定功能,并且与外部计算机(12)相关的独立输入/输出电路(26)特别适于特定的输入/输出功能。在计算机阵列(10)中布置的24台计算机(12)的示例,具有中央运算核心(34),更接近基座(14)边缘的计算机(12)被配置用于输入和/或输出。还描述了用于在计算机(12)和外围环境之间进行通讯的机制。
Description
相关申请的交叉引用
本申请要求对由至少一个共同的发明人于2006年3月31日提交的名称为“计算机阵列中的资源的分配(Allocation Of Resources Among An Array OfComputers)”的美国临时专利申请No.60/788,265的权益,该申请以其整体通过引用并入于此。
技术领域
本发明涉及计算机和计算机处理器领域,更具体地,涉及一种用于在计算机之间进行单一类型互动的的方法和装置。该创造性的计算机阵列的当前主要用途在于,在单一微芯片上对多台计算机进行组合。进一步更为具体地,本发明涉及计算机和计算机处理器领域,更具体地,涉及一种用于在堆栈计算机处理器中更有效使用堆栈的方法和装置。
背景技术
本领域公知的是,使用多台计算机处理器,使它们一起工作而完成任务。已经使用了多线程和其它多种方案来允许处理器进行协作。不过,一般认为,该领域的改进空间很大。进一步,现在流行的趋势是,将多台处理器组合在单一的芯片上,但这会加剧问题,并且使得更加紧迫地需要找到一种解决方案来使得计算机以高效的方式一起工作。现在,出于多种原因,认为针对许多应用程序的多台处理器的最佳排列可能是由多台计算机组成的阵列,每台计算机均具有处理能力和至少一些专用存储器。在该示例中,每台计算机如果独立运行,那么它的功能都不会特别强大,但是如果计算机紧密协作,就将会实现强大的计算功能。
共同待审的申请已经描述并宣称这种计算机阵列的多个创造性的方面,包括关于可以怎样布置这种计算机,以及在它们之间的通讯信道如何产生的一些细节。不过,计算机阵列的相对较新的概念的实施,还需要更进一步的创新,以便使运行效率最大。
显然,关于如何最佳地布置计算机阵列,在计算机阵列之间进行通讯,在计算机阵列中分割任务,以及其他使用计算机阵列的方面,有许多需要解答的问题。这些问题中的一些已经得到回答,不过即使在现存的解决方案上,也还存在改进空间。在其它情况下,解决方案可能要求陈述第一印象的问题,以便解决现有技术中目前还不存在的新问题。
堆栈计算机所提供的处理器复杂度大大低于复杂指令集计算机(CISC)的复杂度,并且堆栈机器所提供的系统整体复杂度也低于精简指令集计算机(RICS)或CISC机器的系统整体复杂度。它们并不需要复杂的编译器,也不需要高速缓冲控制硬件来实现优良性能。它们还获得了有竞争力的原始性能,以及在大多数编程环境中针对给定价格的优良性能。它们最初被成功应用的领域是实时嵌入式控制环境,在该环境中它们做得比其它系统设计方法好得多。之前,堆栈大都保持在程序存储器中,较新的堆栈机器为堆栈维护分立的存储器芯片,或者甚至是片上存储器的一块区域。这些堆栈机器提供了极其快速的子例程调用能力,以及及极其的中断处理和任务切换性能。
Zahir等人(USPN 6,367,005)公开了一种寄存器堆栈引擎,该引擎将足够的寄存器堆栈的寄存器保存到存储器,以在堆栈上溢的情况下提供更多可用的寄存器。寄存器堆栈引擎还使微处理器延迟,直到所述引擎可在堆栈下溢的情况下恢复合适数量的寄存器。
Story(USPN 6,219,685)公开了一种将运行结果与阈值进行比较的方法。不过该方法并不对如下两种结果进行区分,一种是结果被四舍五入到阈值(这将引起上溢异常),另一种是结果恰好就等于阈值。被Story公开的另一种方法读取和写入硬件标记,以识别上溢或下溢状况。
采用存储器中的堆栈,上溢或下溢将覆盖堆栈项目,或使用并不意在成为堆栈一部分的堆栈项目。在堆栈中减轻或消除上溢和下溢的方法存在改进的必要。
Forth系统已经能够让不止一个的代码“线程”同时执行,这经常称为协作循环制(cooperative round-robin)。线程得到使用中央处理单元(CPU)的轮次的次序是固定的;例如,线程4总是在线程3之后并在线程5之前得到其轮次。每个线程被允许按其所需的时间保有CPU,然后自动放弃它。线程通过调用字PAUSE实现此过程。在PAUSE函数期间,只需要保存少数数据项目,以便恢复原始任务,但是在中断函数期间,需要保存大量上下文。
每个线程可能有工作要做,也可能没有。如果任务4有工作要做,并且在循环制中在其之前的任务(任务3)调用PAUSE,那么任务4将苏醒并且工作,直到它决定再次PAUSE。如果任务4没有工作要做,它就将控制传递到任务5。当任务调用了将要执行输入/输出功能的字,并且因此将需要等待输入/输出完成时,PAUSE被构建到输入/输出调用中。
PAUSE的可预测性允许非常有效的代码。经常地,基于Forth的协作循环制使每个线程在CPU处拥有轮次所用的时间,小于抢先多任务器确定哪个线程接下来将得到CPU所花的时间。
不过,特定的任务往往可以盖过或压倒CPU。另外,将PAUSE功能进行扩展从而超出一个CPU是有好处的。
发明内容
简而言之,本发明包括计算机阵列,每台计算机具有其自身的存储器并能够发挥独立的计算功能。为了协作完成任务,计算机必须将数据和/或指令从一台传送到另一台。一种可能的配置在于,计算机在垂直邻近的计算机之间具有连接数据路径,这样,每台计算机可以直接与多达四个的“邻居”进行通讯。如果计算机希望与另一台不直接相邻的计算机进行通讯,那么通讯将被引导通过另一台计算机而到达所希望的目的地。
因为,根据所描述的环境,所包含的指令多达四个的数据字可以在计算机之间并行传送,并可以并行传送进和传送出每台计算机的内部存储器,因此单个数据字中的一种迷你程序在此被称为微循环。应该记住的是,在大型处理器阵列中,大型任务理想地被分割成多个较小型的任务,每个小型任务可以被能力受到一定限制的处理器所完成。因此,可以想到,四指令环路将相当有用。这个事实通过相关事实而变得更为明显,该事实是,因为计算机确实在能力上受限,因此对于它们而言比较有利的是,有时从邻近计算机“借用”能力。这将为微循环的使用提供了理想的机会。虽然计算机可能需要从邻近计算机借用处理功能之类,不过另一种可能在于,它可能需要从邻近计算机借用一些存储容量,并且以一定程度上类似于本地存储器的方式使用这些借用的存储容量。通过将微循环传递到邻近计算机,以指令该临近计算机读取或写入一系列数据,就可以容易地实现这种借用的存储器。这种微循环可以例如包含如下指令,该指令从特定的内部存储器位置写入,对该位置进行增值,然后重复给定次数的迭代。微循环因为是单一字,因此不能不止一次地执行指令存储器读取。
上述将微循环传递到邻近计算机的示例为本发明又一方面的示例,该方面在此被称为“Forthlet”,因为它们目前采用Forth计算机语言执行——虽然本发明的应用并不严格限于使用Forth。Forthlet是一种迷你程序,它能够被直接传送到计算机用于执行。与微循环不同,Forthlet可以不止一个字,并且可以执行多存储器读取。在现有技术的计算机中,指令必须在执行之前被读取和存储,但是,如同根据此处的详细描述所可见的,根据本发明这没有必要。事实上,可以预见,本发明的一个重要方面在于,计算机可以产生Forthlet,并将其传递到另一台计算机用于执行。Forthlet可以被程序员“预先写入”,并被存储以便于使用。事实上,Forthlet可以被积聚成“图书馆”,以根据需要使用。不过,根据预编程标准,在计算机中可以产生Forthlet,这也在本发明的范围中。
通过示例,在本发明的实施例中,I/O寄存器被当作存储器地址,这意味着,与读取和写入存储器相同(或相似)的指令也可以执行I/O操作。在多核芯片的情况中,针对I/O结果的这种选择有强大的结果。核心处理器不仅可以读取和执行来自其本地ROM和RAM的指令,而且它还可以读取和执行在I/O端口或寄存器上向其展现的指令。现在,传送数据的紧环路的概念变得难以置信地有影响力。它允许指令流在I/O端口处向核心展示,并直接从I/O端口处执行。因此,一个核心可以将代码对象发送到邻近的核心处理器,而所述临近的核心处理器可以直接执行该代码对象。现在代码对象可以在核心之间传送,这些核心在寄存器处执行这些代码对象。代码对象以非常高的速度到达,因为每个核心基本上完全工作在其本地地址空间中,而不会花费明显的时间用于传送代码指令。
如上文所讨论的,每次指令读取将多个(目前描述的实施例中为四个)指令带进核心处理器。虽然这种内建“缓冲”当然很小,不过在指令本身利用它时,它却及其有效。例如,所构建的微for-next环路可以完全包含于单个18位指令字的限度中。当与构建在I/O寄存器中的自动状态信令结合时,这些类型的构造是理想的,因为这意味着,仅仅采用单次指令读取就可以传送较大的数据块。并且采用这种指令包,执行呈现在在来自邻近处理器核心的共享I/O寄存器上的指令的概念,带来了新能量,因为现在在该寄存器中出现的每个字具有的指令不是一个,而是四个。这些类型的软件/硬件结构以及它们对多核心芯片性能的令人惊愕的冲击,对于传统语言而言简直是不可行的——它们仅仅可行这样的指令集,其中多个指令被打包在单个字中,并且完整的循环可以从该字中执行。
在此描述的器件中,传统的数据和返回堆栈被替换以一阵列的寄存器,其以循环重复模式(circular,repeating pattern)运作。数据堆栈包括T寄存器、S寄存器和八个硬连线寄存器,它们以交替模式(alternating pattern)电互连。这八个硬连线寄存器以诸如循环重复模式的方式互连。这种配置防止从堆栈外部读取,并防止读取不希望的空寄存器值。
类似于数据堆栈,返回堆栈包括R寄存器和八个硬连线寄存器,它们以交替模式电互连。这八个硬连线寄存器以诸如循环重复模式的方式互连。这种配置防止从堆栈外部读取,并防止读取不希望的空寄存器值。
上述双堆栈处理器可以用作独立运作的处理器,或者它可以在互连计算机阵列中用于其它多个类似的或不同的处理器。
考虑到对实施本发明的模式及其工业实用性所做的,如在此所述的以及通过附图的多副图中所图示的,本发明将对本领域技术人员而言变得更加清楚。所列举的目标和优势并非是本发明所有优点的穷尽列举。而且,即使在应用中缺少或不需要一个或多个所意图的目标和/或优点,也可以实践本发明。
进一步,本领域的技术人员将认知,本发明的各种不同的实施例可达到一种或多种目标和/或优点,不过没有必要全部实现。相应地,在此描述的目标和/或优点并非本发明的实质部分,并且不应该被认为是对本发明的限制。
附图说明
图1是根据本发明的计算机阵列的示意图;
图2是示出了图1中计算机的子集和图1中互连数据总线的更详细视图的详细图;
图3是描述图1和图2中的其中一台计算机的一般布局的结构图;
图4是指令字48的示意性表现;
图5是图3中的时段定序器42的示意性表现;
图6是描述根据本发明的微循环的示例的流程图;
图7是描述用于执行来自端口的指令的创造性方法的示例的流程图;
图8是描述用于警醒计算机的创造性的改进方法的示例的流程图;
图9示出了计算机12f和12g的运行。
具体实施方式
下文中将结合附图描述实施本发明的方法,在附图中,相应的附图标记代表相同或相似的元件。虽然按照实现本发明目标的模式描述了本发明,不过本领域人员可以理解的是,在不脱离本发明的精神和范围的前提下,考虑到这些启示,可以实现对本发明的各种改造。
在此描述的和/或在附图中示出的本发明的诸实施例和改造,仅仅旨在示例,而非意在限制本发明的范围。除非另外特别指明,本发明的独特的方面和部分,可能被忽略或修改,或者可能已经因此替代了公知的等价物,或者还是未知的替代物,例如有待于将来开发的或者例如为在将来可能被发现而可接受的替代物。即使需要保持处于所要求保护的发明的精神和范围之内,本发明还是可以针对多种应用进行修改,因为潜在应用的范围很广阔,还因为本发明本就旨在适于多种这类的改造。
以下描述的实施例以计算机阵列为例,该阵列既具有计算机之间的异步通讯,也具有单独的异步运行计算机,虽然如此,本发明的应用绝不限于这里所记载的上下文。
本发明包括单独计算机的阵列。图1中的示意图描述了该创造性的计算机阵列,其在此被一般地标记以附图标记10。计算机阵列10具有多个(在所示的示例中为二十四个)计算机12(有时候在阵列的示例中也称为“核心”或“节点”)。在所示的示例中,所有的计算机12均位于单个基座(die)14上。每台计算机12是通常独立运行的计算机,下文中将对此做更详细的讨论。计算机12被多条(下文中将对该数量做详细阐释)互连数据总线16互相连接。在本示例中,数据总线16是双向异步高速并行数据总线,尽管针对此目的采用其它互连方式也落入本发明的范围中。在阵列10的本实施例中,不仅计算机12之间的数据通讯是异步的,单独的计算机12也以内在(internally)异步模式运行。这已经被发明人所发现能够提供重要的优势。例如,因为时钟信号不必发布到整个计算机阵列10,因此就节约了大量的能量。进一步,由于不必发布时钟信号,就消除了许多定时问题,这些定时问题可能限制阵列10的尺寸或可能导致其它公知麻烦。24台计算机组成的阵列并非一种限制,并且期待的是,随着芯片制造技术更为复杂,计算机的数目将增大,当然,可量测性(scalability)是这种配置的原则。
本领域的技术人员可以认识到,出于清晰的考虑,基座14上的额外部分在图1的视图中被省略了。这些额外部分包括电力总线、外部连接衬垫、和微处理器芯片的其他这类公共方面。
计算机12e是未处于阵列10的周界上的其中一台计算机12的示例。也就是说,计算机12e具有四个垂直相邻的计算机12a、12b、12c和12d。对计算机12a-12e进行的这种分组将在下文中用于对阵列10的计算机12之间的通讯进行更为详细的讨论。如图1的视图可见,诸如计算机12e的内部计算机将具有通过总线16与该内部计算机直接通讯的其它四台计算机12。在下文的阐述中,所讨论的原理将用于所有计算机12,除了在阵列10的周界上的计算机12仅仅与三台其他计算机直接通讯,还除了边角计算机12仅仅与两台其他计算机12直接通讯。
图2是图1的一部分的更为详细的视图,其仅仅示出了一些计算机12,具体而言,仅仅示出了计算机12a-12e。图2的视图还揭示了,所有数据总线16均具有读线路18、写线路20和多条(在本示例中为十八条)数据线路22。数据线路22能够几乎同时地并行转换一个18比特指令字的所有比特。应该注意的是,在本发明的一个实施例中,一些计算机12是相邻计算机的镜像(mirror image)。不过,不论计算机12所有均走向一致还是作为相邻计算机的镜像,均不构成这里描述的本发明的一方面。因此,为了更好地描述本发明,在此并不进一步讨论这种潜在的复杂性。
根据本创造性方法,计算机12,例如计算机12e,可以对它的一条、两条、三条或所有四条读线路18进行设置,从而使得该计算机准备从相应的一台、两台、三台或所有四台相邻计算机12接收数据。类似地,计算机12还可以将其一条、两条、三条或所有四条写线路20设置为高。虽然在此的描述并未涉及在同一时刻将不止一台计算机12的写线路20设置为高,但是如此做法并未超出本发明的范围,因为可以想象,如果事实上希望在多种场合使用的话,例如要写入多端口地址,则这种操作的使用是可能发生的。
当邻近的计算机12a、12b、12c或12d中的一台将其本身与计算机12e之间的写线路20设置为高时,如果计算机12e已经将对应的读线路18设置为高,则字从该计算机12a、12b、12c或12d沿着相关的数据线路22传送到计算机12e。然后,发送计算机12将释放写线路20,并且接收计算机(在本示例中为12e)将写线路20和读线路18均拉低。后一操作将向发送计算机12确认,已经接收到数据。需要注意的是,上述描述并非必然意图按顺序表示这些事件的次序。在实际操作中,在该示例中,在发送计算机12释放(停止拉高)其写线路20之前不久,接收计算机可能试图将写线路20设置为低。在这种情况下,一旦发送计算机12释放其写线路20,写线路20就将被接收计算机12e拉低。
在本示例中,只有程序错误会使得一条总线16相反两端的计算机12均试图将其之间的读线路18设置为高。另外,对于一条总线16相反两端上的计算机12而言,同时均试图将其之间的写线路20设置为高是错误的。类似地,如上文所述,当前不能预见的是,可能需要使单个计算机12将它的四条写线路20中的不止一条设置为高。不过,现在能预见的是,存在如下可能,其中需要将读线路18的不同组合设置为高,从而使计算机12中的一台可以处于等待状态,以等待来自所选择的计算机12中的第一台的数据,从而将其对应的写线路20设置为高。
在上文所讨论的示例中,计算机12e被描述为,在相邻的计算机(从计算机12a、12b、12c和12d中的一台或多台选出)已经将其写线路20设置为高之前,计算机12e将其一条或多条读线路18设置为高。不过,这个过程当然可以按照相反的顺序进行。例如,如果计算机12e正试图向计算机12a写入,那么计算机12e将把计算机12e和计算机12a之间的写线路20设置为高。如果接下来计算机12e和计算机12a之间的读线路18尚未被计算机12a设置为高,则计算机12e将只能等待,直到计算机12a确定将该读线路18设置为高。然后,如上文所述,当相应一对读线路18和写线路20均为高时,就传送等待在数据线路22上传送的数据。接着,一旦发送计算机12e释放线路,接收计算机12(在本示例中为计算机12a)将两台计算机(在本示例中为12e和12a)之间的读线路18和写线路20均设置为低。
只要诸如计算机12e的计算机12已经将其写线路20中的一条设置为高而期望写入,它就将仅仅等待而几乎不使用任何能量,直到数据如上文所述那样由合适的邻近计算机12“请求”,除非数据将要发送到的计算机12将其写线路18设置为高,在这种情况下,数据被立即发送。类似地,只要计算机12已经将其一条或多条写线路18设置为高而期望读取,则它就将仅仅等待而近乎不使用任何能量,直到连接到所选计算机12的写线路20变为高以在两台计算机12之间传送指令字。
可能有多种潜在的装置和/或方法来使得计算机12发挥上文所述的功能。不过,在本示例中,计算机12这样行为仅仅是因为,它们在内部通常异步地运行(并且以所述异步的方式在它们之间传送数据)。也就是说,按顺序完成指令。当产生读指令或写指令时,可以不采取进一步行动,直到完成指令(或者,或许可选地,直到其被“重启”等中止)。并不存在规则的时钟脉冲,在现有技术意义中。更确切地说,只有在正在执行的指令既不是读类型指令也不是写类型指令时(假定读或写类型指令将要求通过另一实体完成),或者在读或写类型操作已经实际上完成时,脉冲才产生以完成下一指令。
图3是描述图1和图2中计算机12之一的示例的通用布局的结构图。如图3的视图所见,计算机12中的每一台均为具有自己的RAM24和ROM26的通用完整计算机。如早先所提,计算机12有时候也被称为单独的“核心”,假设在本示例中它们被组合到单个芯片上。
计算机12的其它基础元件为返回堆栈28、指令区域30、算术逻辑单元(“ALU”)32、数据堆栈34和用于对指令进行解码的解码逻辑部分36。本领域的技术人员通常很熟悉基于堆栈的计算机的运行,例如本示例的计算机12。计算机12为具有数据堆栈34和分立的返回堆栈28的双堆栈计算机。
在本发明的该实施例中,计算机12具有四个通讯端口38,其用于与邻近计算机12进行通讯。通讯端口38为三态驱动器,其具有截止状态、接收状态(用于将信号驱动进入计算机12)和发送状态(用于将信号驱动出计算机12)。当然,如果特定的计算机12未处于阵列10(图1)的内部,例如计算机12e的示例,那么至少出于在此所描述的目的,一个或多个通讯端口在所述特定的计算机中将不会使用。那些毗邻基座边缘的通讯端口38可以具有额外的电路,这些电路或者被设计为处于这种计算机12中,或者被设计为处于计算机12外部但是与其关联,从而导致这种通讯端口38用作外部I/O端口39(图1)。这种外部I/O端口39的示例包括但不限于,USB(通用串行总线)端口、RS232串行总线端口、并行通讯端口、模数和/或数模转换端口以及很多其它可能的变化。在图1中,“边缘”计算机12f被描述为带有相关的接口电路80,该接口电路80用于通过外部I/O端口39与外部器件82通讯。指令区域30包括多个寄存器40,在该示例中,该寄存器包括A寄存器40a、B寄存器40b和P寄存器40c。在该示例中,A寄存器40a是满18比特寄存器,而B寄存器40b和P寄存器40c为9比特寄存器。
为了确保计算结果的精确性,处理器检查每个操作,以确定该操作是否出现异常状态。例如,算术操作受到上溢异常或下溢异常的影响。当计算出的数目大于在为该数目指定的格式中所能表示的最大数目时,出现上溢异常。当计算出的数目小于在为该数目指定的格式中所能表示的最小数目时,出现下溢异常(IEEE 754-1985 Standard for Binary Arithmetic)。
本发明公开了一种堆栈计算机处理器,其中,所述堆栈包括互相连接的寄存器的阵列,其以循环模式(circular pattern)中发挥功能。数据堆栈和返回堆栈并非是在堆栈指针所访问的存储器中的阵列,如许多现有技术的计算机的情况一样。
图4是指令字48的示意性表现。(应该注意的是,指令字48实际上可以包含指令、数据或它们的某种组合)。指令字48由18个比特50组成。对于二进制计算机,比特50中的每一个将为“1”或“0”。如在此之前所讨论的,18比特宽的指令字48可包含四个时段54中的多达四个指令52,时段54被称为时段零54a、时段一54b、时段二54c和时段三54d。在本发明的本实施例中,18比特指令字48总是作为整体来读取。因此,因为总是存在在指令字48中具有多达四个指令的可能,因而在计算机12中的指令集中包含no-op(非运行)指令,这些指令是为可能没有必要甚至不希望使用所有可用时段54的情况所提供的。应该注意的是,根据本发明的一个特定实施例,在交替(alternate)时段(具体而言,时段一54b和时段三54c)中比特50的极性(高有效和低有效的对比)被反转。不过,这并不是在此描述的本发明的方面,因此,为了更好地阐释本发明,在下文的描述中避免这种潜在的复杂性。
图5是图3的时段定序器(sequencer)42的示意性表现。如图5的视图可见,时段定序器42具有以环状排列的多个(本示例中为十四个)反相器56和一个NAND门58,这样,当信号行进通过十四个转换器56和NAND门58时,该信号被反相奇数次。当OR门60的两个输入中的任一个变为高时,在时段定序器42中产生一信号。第一OR门输入62源自正在执行的指令52的比特i466(图4)。如果比特i4为高,则特定指令52为ALU指令,并且i4比特66为“1”。当i4比特为“1”时,则第一OR门输入62为高,并且时段定序器42被触发以产生将要导致执行下一指令52的脉冲。
当或者通过使第一OR门输入62变高,或者通过使第二OR门输入64变高(下文中将进行讨论),而使时段定序器42被触发时,信号就将围绕时段定序器42行进两次,每次在时段定序器输出68处产生输出。当信号第一次经过时段定序器输出68时,它将为低,而在第二次时,在时段定序器输出68处的输出将为高。来自时段定序器输出68的相对宽的输出被提供到脉冲发生器70(以方框视图形式示出),其产生窄的定时脉冲作为输出。本领域的技术人员将认知到,为了精确地产生计算机12的操作,窄定时脉冲是需要的。
当正在执行的特定指令52为读或写指令,或者是任意其他这样的指令,即其中正在执行的指令52立即触发执行顺次的下一指令52是不希望的,那么i4比特66为“0”(低),并且第一OR门输入62因此也为低。本领域的技术人员将认知到,在诸如计算机12的器件中的事件的定时通常相当严格,而不能有异常。在对时段定序器42进行考察之后,本领域的技术人员将认知到,来自OR门60的输出必须保持为高,直到信号已经循环经过NAND门58从而开始循环的第二“圈(lap)”之后。之后,为了防止电路的有害的持续振荡,在该第二“圈”期间来自OR门60的输出将变为低。
如同可以根据上文所理解的那样,当i4比特66为“0”时,时段定序器42就将不被触发——假定下文所要讨论的第二OR门输入66不为高。
如上文所讨论的,每个指令52的i4比特66根据该指令是否为读或写类型的指令而被设置。在指令52中的其余比特50为该指令提供特定操作码(opcode)的剩余部分。在读或写类型指令的情况中,一个或多个比特可以用来指示,在该特定计算机12中数据将要读取之处或将要写入之处。在本发明的本示例中,将要写入的数据总是来自T寄存器44(数据堆栈34的顶部),不过数据可以选择性地读入T寄存器44或指令区域30,该数据可从此处执行。这是因为,在本发明的特定实施例中,数据或者指令可以以此处描述的方式被通讯,并且指令因此可以直接从数据总线16执行,虽然这并非本发明的必要方面。进一步,一个或多个比特50将用于指示,端口38的哪一个将被设置成读取或写入,如果有这样的端口的话。较后的操作可选地通过使用一个或多个比特来指定一寄存器40,例如A寄存器40a、B寄存器等,来实现。在该示例中,指定的寄存器40将被预载以数据,该数据具有与每个端口38对应的比特(以及,任何其它潜在实体,通过该实体,计算机12可被尝试通讯,所述实体例如存储器、外部通讯端口之类)。例如,在特定寄存器40中的四个比特中的每一个可对应上端口38a、右端口38b、左端口38c或下端口38d中的每一个。在这种情况下,如果在这些比特的位置中的任意一处为“1”,则通讯将被设置为通过对应的端口38进行。如之前在此所论述的,在本发明的当前实施例中,可以预见的是,一个读取操作码可以在单个指令中设置不止一个端口38用于通讯,而同时,虽然可能发生但是无法预见的是,读入操作码在单个指令中设置不止一个端口38用于通讯。
紧接下来的示例将假定如下通讯,其中计算机12e正试图写到计算机12c,虽然该示例可用于任何相邻计算机12之间的通讯。当写指令在写入计算机12e中被执行时,所选择的写线路20(在本示例中为计算机12c和12c之间的写线路20)被设置为高,如果对应的读线路18已经为高,则数据立即从所选择的位置通过所选择的通讯端口38发送。作为替换地,如果对应的读线路18还未为高,则计算机12e将仅仅停止运行,直到对应的读线路18确定变高。在此之前已经讨论了用于在存在读或写类型指令之时,停止计算机12a(或者更准确地说,不使计算机12a进一步运行)的机制。简而言之,指令52的操作码将在比特位置i466具有“0”,因此,OR门60的第一OR门输入62为低,进而,时段定序器42不被触发以产生使能脉冲。
至于在读或写类型指令完成之时如何继续计算机12e的运行,用于此的机制如下:当在计算机12e和12c之间的读线路18和对应的写线路20均为高时,线路18和20就将被将其保持为高的相应计算机12中的每一个释放。(在该示例中,发送计算机12e将使写线路18保持为高,而接收计算机12c将使读线路20保持为高)。接下来,接收计算机12c将把线路18和20拉低。在实际运行中,在发送计算机12e已经释放写线路18之前,接收计算机12c可能试图将线路18和20拉低。不过,因为线路18和20被拉高并且只是被不牢固地保持(锁存)为低,因此任何将线路18或20拉低的企图在实际中都将不会成功,直到线路18或20被将其固定为高的计算机12所释放。
当数据总线16中的线路18和20均被拉低时,这是一种“确认”状态。一旦进入该确认状态,计算机12e和12c中的每一台将其自身的内部确认线路72设置为高。如图5的视图可见,确认线路72提供了第二OR门输入64。因为到OR门60的输入62或64中任意一个的输入将导致OR门60的输出变高,因此就将以在此之前所述的方式发起进行时段定序器42的操作,从而将执行指令字48的下一时段54中的指令52。确认线路72保持在高位,直到下一指令52被解码,以便防止伪地址到达地址总线。
无论如何,当正在执行的指令52处于指令字48的时段三位置中时,计算机12将读取下一正在等待的18比特指令字48,当然,除非比特i466为“0”。在实际的操作中,该创造性的机制包括一种方法和装置,其用于“预读取”指令,从而在指令字48中的所有指令52执行终止之前可以开始该读取操作。不过,这也不是当前针对异步数据通讯的创造性方法和装置的必要方面。
在此已经详细描述了上述示例,其中计算机12e正在向计算机12c进行写入。如同根据以上论述所可以理解的,不论计算机12e首先试图对计算机12c进行写入,还是计算机12c首先试图从计算机12e读取,操作基本相同。直到计算机12e和12c均准备就绪,才完成操作,并且无论计算机12e或12c中的哪一台首先准备就绪,首先准备就绪的计算机12仅仅“进入睡眠状态”,直到另一台计算机12e或12c完成传送。观察上述过程的另一种方式为,实际上,在这两台计算机分别执行写和读指令时,写入计算机12e和接收计算机12c均进入睡眠状态,但是当读线路18和写线路20均为高时,后一台进入事务的计算机几乎即刻重新苏醒,然而,首先发起事务的计算机12可以几乎无限期地保持睡眠状态,直到第二台计算机12准备好完成上述过程。
一种用于在器件之间进行有效的异步通讯的方法是某种确认信号或确认状态。在此所述的该方法提供了必要的确认状态,其允许器件之间进行异步通讯,或至少使之可行。进一步,确认状态也使一个或多个器件可以“进入睡眠状态”,直到出现确认状态。当然,可以通过正在计算机12之间发送的分立信号而在计算机12之间对确认状态进行通讯(或者沿着互连数据总线16,或者沿着分立的信号线路),并且这种确认信号将处于本发明的这方面的范围之内。不过,根据在此描述的本发明的实施例,可以理解的是,这里还存在更多经济因素,因为该确认方法不需要任何额外的信号、时钟周期、定时脉冲或任何这类超出所描述范围的资源来在实际中实现通讯。
可以对本发明进行多种修改,而不改变本发明的价值或范围。例如,虽然本发明已经在此描述为用于读指令和写指令的方面,不过在实际操作中,可能存在不止一个读类型指令和/或不止一个写类型指令。仅仅作为一个示例,在本发明的一个实施例中,存在使寄存器递增的写指令以及其它不执行此功能的写指令。类似地,根据哪一个寄存器40被用来选择通讯端口38等等,写指令可以变化,如在此之前所描述的。还可以存在多个不同的读指令,所依据的只是,计算机12的设计者相信何种变化是可替换读行为的有用选择。
类似地,虽然本发明在此已经被描述为涉及单个基座14上的阵列10中的计算机12之间的通讯,不过相同的原理和方法可以用作,或者被改造为用作,完成其它器件间的通讯,例如计算机12和其专用存储器之间的通讯,或者在阵列10中的计算机12和外部器件之间(通过输入/输出端口之类)的通讯。实际上,可以预见的是,在一些应用中可能要求由阵列组成的阵列——将这里描述的器件间的通讯方法潜在地应用于阵列中的阵列之间的通讯。
当诸如图1中的计算机12g的计算机正在执行代码以完成其被指定的首要任务时,程序员可以决定,需要进行诸如12f和12g的两台计算机之间的临时互动。程序员可以规定,计算机12g临时暂停运行以观察其一台或多台邻近计算机是否已经试图进行通讯,如“寻找输入”操作166所指示的。如果如“输入?”决策操作168所指示的,通讯正在等待例如由计算机12f向计算机12g写入,则计算机12g将在“从其它计算机接收”操作170中完成通讯。若不如此,则计算机12g将返回执行其被指定的功能,如图9所示。在“从其它计算机接收”操作170之后,计算机12g将按照在“按输入行动”操作172中所接收的输入行动。程序员可以规定,计算机12g将期望指令作为输入,在这种情况下,计算机12g将执行指令。作为替换地,计算机12g可以被编程以为期望行动所依据的数据。
在“按输入行动”操作172之后,接着,计算机12g返回其首要功能;也就是说,它返回到“执行首要功能”操作162。不过,当然还存在设置更为复杂的示例的可能。例如,可以这样编程,使从计算机12f接收的特定输入将导致其中止其先前被指定的首要功能,并开始执行新功能,或者它可以仅仅暂时停止,并等待进一步的输入。本领域的技术人员将认知,此处行为的各种可能将仅受限于程序员的想象力。
应该注意的是,根据在此描述的本发明的实施例,给定的计算机12不需要在其正在执行任务时中断,因为另一台计算机12被指定执行监控和处理可能另外需要中断的输入的任务。不过,还令人感兴趣地注意到,忙于处理另一任务的计算机12也不能被干扰,除非并且直到该计算机12的编程规定其注意用于输入的端口38。因此,有时候需要使计算机12暂定以查找其它输入。
本发明示意性地对PAUSE指令进行描述。此处所描述的内容为多个处理器之间的“协作多任务”。在一个或多个节点上存在一套任务。PAUSE将顺序检验用于进来的可执行代码的所有节点或端口。在苏醒或热启动之前执行四个no-op(....)。PAUSE指令通过一返回(;)指令而终止,然后,查询下一线程(thread)。检验过的最后一端口使用两套四个no-op。在重启后进行冷启动。
带有输入/输出引脚39的边缘处理器12a或边角处理器12f也可以被PAUSE所查询,从而例如由外部器件82执行任务。PAUSE也可以位于ROM中作为启动条件的一部分。引发器例程将跳转为暂停,并进入邻近处理器的四点读取(four-point read)。虽然在多处理器之间的PAUSE功能已经参照Forth而公开,不过多处理器之间的中断功能的所有概念也可以应用于其它编程语言。
因为四个指令52可以包含于指令字48中,并且由于根据本发明,整个指令字48可以同时在计算机12之间进行通讯,这提供了理想的机会用于在一个操作中传送非常小的程序。例如大多数小的“For/Next”循环可以在单个指令字48中实现。图6是微循环100的示意性表现。不同于其它现有技术的循环,微循环100具有FOR指令102和NEXT指令104。因为指令字48(图4)包含多达四个的指令52,因此指令字48可在单个指令字48中包括三个操作指令106。操作指令106可以是程序员想要包含于微循环100中的可用指令中的几乎任意一个。可以从一台计算机12传送到另一台计算机12的微循环100的典型示例可以是对第二台计算机12的RAM24进行读取或写入的一套指令,从而使第一台计算机12可以“借用”可用的RAM24容量。
FOR指令102将数值压到返回堆栈28上,返回堆栈28代表所希望的迭代数目。也就是说,在数据堆栈34的顶部处的T寄存器44上的数值被压进返回堆栈28的R寄存器29。FOR指令102虽然经常位于指令字48的时段三54d中,不过事实上可以位于任何时段54中。在FOR指令102不位于时段三54d中的情况下,在该指令字48中的其余指令52将在继续到微循环100之前被执行,所述微循环100将通常为下一个被加载指令字48。
根据本发明的当前描述的实施例,在图6中描述的NEXT指令104为特定类型的NEXT指令104。这是因为,它位于时段三54d(图4)中。根据本发明的该实施例,假定在“普通”NEXT指令(未示出)之后的特定指令字40中的所有数据为一地址(for/next循环开始的地址)。针对NEXT指令104的操作码是相同的,不论其处于四个时段54中的哪一个中(明显的例外在于,如果处于时段三54d中,则假设头两比特,而不是显式地(explicitly)写入,如在此之前所讨论的)。不过,因为当NEXT指令104位于时段三54d中时可能不存在跟随NEXT指令104的地址数据,因此也可以假定,在时段三54d中的NEXT指令104为MICRO-NEXT指令104a。MICRO-NEXT指令104a使用第一指令52的地址作为返回地址,该第一指令52位于同一指令字48的时段零54a中。MICRO-NEXT指令104a也获取来自R寄存器29的数值(该数值最初被FOR指令102压至该处),将其减去1,然后将其返回到R寄存器29。当R寄存器29上的数值达到预定值(例如,0)时,MICRO-NEXT指令就将加载下一指令字48,并如在此之前所述继续运行。不过,当MICRO-NEXT指令104a从R寄存器20读取的数值大于预定值时,将再继续在其本身的指令字48的时段零54a处的操作,并执行位于包括再其本身的指令字48的时段零至时段三中的三个指令52。也就是说,在本发明的实施例中,MICRO-NEXT指令104a将总是执行三个操作指令106。因为,在某些情况下,可能需要是使用所有三个潜在可用的指令52,因此“no-op”指令可用于根据需要填充一个或两个时段54。
应该注意的是,微循环100可整体用在单个计算机12中。事实上,全套的可用机器语言指令都可用作操作指令106,并且微循环的应用和使用仅受限于程序员的想象力。不过,如果在单个指令字48中执行整个微循环100的能力与如下能力,即允许计算机12将指令字48发送到邻近计算机12以执行其中基本上直接来自数据总线16的指令52的能力,相结合,那么这就提供了一种强有力的工具,用于允许计算机12使用其邻近计算机的资源。
整体包含于单个数据字48中的小微循环100,可以在计算机12之间通讯,如在此所述的,并且可以直接从接收计算机12的通讯端口38执行,就像包含于指令字48中的其它任意一套指令那样,如在此所描述的。虽然这种“微循环”100有许多用处,不过其一个特定的用处在于当一台计算机12打算将一些数据存储到邻近计算机12的存储器上时。例如,首先发送一条指令到该邻近计算机,以要求该邻近计算机将进入的数据字存储到特定的存储器地址,然后递增该地址,然后重复给定次数的迭代(该次数对应待传送的数据字的数目)。为了读回数据,第一台计算机就将指令第二台计算机(在此即用来进行存储的计算机)使用相似的微循环将所存储的数据写回到第一台计算机。
通过结合在此描述的直接执行方面而使用微循环100结构,当数据存储需要超过构建于每台单独的计算机12中的相对小的容量时,计算机12可以使用另外的休眠的邻近计算机12以存储额外的数据。虽然该示例被描述为针对数据存储的情况,不过相同的技术可以同样用来允许计算机12让其邻近的计算机共享其计算资源-采用的方法是,通过构建微循环100使其它计算机12执行一些操作、存储结果并重复给定次数。可认知的是,能够使用这种创造性的微循环100结构的方式的数量几乎是无限多的。
如在此之前所提到的,在本发明的目前所描述的实施例中,可以以在此描述的方式对数据或指令进行通讯,并且指令因此而能够几乎直接从数据总线16执行。也就是说,没有必要将指令存储到RAM24并然后在执行前对它们再调用(recall)。取而代之的是,根据本发明的这方面,对在通讯端口38上接收的指令字48的处理方式,与从RAM24或ROM26再调用该指令字48的方式,两者不会有显著的不同。虽然这种不同的缺少已经在目前涉及所描述的计算机12的操作的探讨中得到展示,不过,下文中对如何读取和使用指令字48的更为明确的探讨,将有助于理解本发明。
其中一种可用的机器语言指令为FETCH指令。FETCH指令使用A寄存器40a上的地址,以确定从何处读取18比特字。当然,程序将必须已经准备在A寄存器40a上放置正确的地址。如在此之前所讨论的,A寄存器40a为18比特寄存器,这样,就有就有足够范围的地址数据可用,从而使得任何一个可以对其进行读取的潜在资源都可以被区分。也就是说,存在指定到ROM的地址范围,该地址范围不同于指定到RAM的地址范围,并且存在特定的地址用于每个端口38,和用于外部I/O端口39。FETCH指令总是将其读取的18个比特放置于T寄存器44上。
相反地,如在此之前所讨论的,可执行指令(不同于数据)被暂时存储在指令寄存器30a中。对于将18比特指令字48“读取”到指令寄存器30a中,不存在特定的要求。相反地,当在指令寄存器30a中没有可执行指令留下时,计算机就将自动读取“下一”指令字48。该“下一”指令字所处的位置由“程序计数器”(P寄存器40c)确定。P寄存器40c经常自动递增,如同将从RAM24或ROM26读取一系列指令字48的情况。不过,这种一般规则存在许多例外情况。例如,JUMP或CALL指令将导致P寄存器40c在JUMP或CALL指令之后被记载以由目前加载的指令字48的剩余部分中的数据所指定的地址,而不是进行递增。当P寄存器40c接着被加载以与一个或多个端口38对应的地址时,下一指令字48接着将从端口38加载到指令寄存器30a。当指令字48已经从端口38获取到指令寄存器30a中时,P寄存器40c也不会递增。它将继续保持该相同的端口地址,直到明确的JUMP或CALL指令被执行以改变P寄存器40c。也就是说,一旦计算机12被告知从端口38寻找其下一指令,它将持续从同一个端口38(或多个端口38)寻找指令,直到它被告知在其它位置寻找其下一指令字48,例如回到其存储器(RAM24或ROM26)。
如上文所提,计算机12知道,当目前的指令字48中不再存在可执行指令时,所读取的下十八个比特将被放置在指令寄存器30a中。默认地,在JUMP或CALL指令之后(或者在此处不特别讨论的其他特定指令之后),在目前的指令字48中不再留有可执行指令,因为通过限定,18比特指令字中紧接着JUMP或CALL指令的剩余部分专用于JUMP或CALL指令所指定的地址。对于此的另一种陈述方式是,上文所述的处理在多方面是独特的,包括但不限于如下事实,即,JUMP或CALL指令可以可选地输入到端口38,而不是仅仅是输入到存储器地址之类。
应该记住的是,如在此之前所讨论的,计算机12可以从一个端口38或者从任意一组端口38寻找其下一指令。因此,提供对应端口38的各种不同组合的地址。例如当计算机被告知从一组端口38读取指令时,那么它将从所选定的端口38中的任意一个接受第一可用指令字48。如果没有邻近计算机12已经试图写入这些端口38中的任意一个,那么正在讨论的计算机12将“进入睡眠状态”,如上文所详细描述的,直到邻近的计算机确实写入所选择的端口38。
图7是描述上文所述的直接执行方法120的流程图。当如在此之前所述的,在指令寄存器30a中不再留有可执行指令时,将开始“正常”的操作流程。在此时刻,计算机12将“读取”另一个指令字(注意,在此使用的术语“读取”为一般含义,因为并不使用实际的FETCH指令),如“读取字”操作122所指示的。该操作将根据P寄存器40c中的地址而实现,如图7的流程图中的“地址”决策操作124所指示的。如果P寄存器40c中的地址为RAM24或ROM26地址,那么下一指令字48将从在“从存储器读取”操作126中所指定的存储器位置获得。另一方面,如果在P寄存器40c中的地址为一个或多个端口38的地址(非存储器地址),那么下一指令字48将从在“从端口读取”操作128中所指定的端口位置获得。无论何种情况,在“获取指令字”操作130中,所获取的指令字48被置于指令寄存器30c中。在“执行指令字”操作132中,在指令字48的时段54中的指令被顺序完成,如在此之前所讨论的。
在“跳转”决策操作134中,确定了指令字48中的一个操作是否为JUMP指令,或者是否为其他将使操作远离此前所描述的持续的“正常”操作的指令。如果确实是这样,那么在“加载P寄存器”操作136中,指令字48中在JUMP(或其它这类)指令之后所提供的地址被提供到P寄存器40c,并且在“读取字”操作122中再次开始上述序列,如图7的视图所指示。如果不是这样,那么下一行为取决于上一次指令读取是源自端口38还是源自存储器地址,如“端口地址”决策操作138所指示的。如果上一次指令读取源自端口38,那么P寄存器30a没有任何改变,并且从“读取字”操作122开始重复次序。另一方面,如果上一指令读取源自存储器地址(RAM24或ROM26),那么在“读取字”操作122完成之前,在P寄存器30a中的地址递增,如图7中的“递增P寄存器”操作140所指示的。
上文描述并非意在表示实际的操作步骤。相反地,它是根据本发明的所描述实施例的执行而产生的各种决策和操作的图示。实际上,该流程图不应该被理解成,所描述和所示出的每个操作需要分立的独立的顺序步骤。事实上,在图7的流程图中所描述的许多操作,在实际操作中通常同时完成。
图8是描述用于警醒计算机的经过改进的创造性方法的示例的流程图。如在此之前所讨论的,所描述的实施例的计算机12将在等待输入之时“进入睡眠状态”。这种输入可以来自邻近的计算机12,如针对图1-5所描述的实施例中的情况。作为替换地,还是如在此之前所讨论的,具有毗邻基座14边缘的通讯端口38的计算机12可具有额外的电路,该电路或者被设计在该计算机12中,或者被设计处于计算机12的外部但是与计算机12相关联,从而使这种通讯端口38用作外部I/O端口39。无论何种情况,这种创造性的组合可提供额外的优势,即“睡眠”计算机12可稳定并准备苏醒,并在接收到输入之时跳到一些预先指定的行为。因此,本发明也为使用中断来处理输入的方案提供了替换方案,无论这种输入来自外部输入器件,还是来自阵列10中的另一台计算机12。
在此描述的创造性的组合并不会使计算机12必须停止(或暂停)其正在运行的任务以便处理中断,而将允许计算机12处于“睡眠但是警觉”状态,如上文所述。因此,可以指定一台或多台计算机12,以接收和执行特定输入。虽然存在多种方法来使用这种特征,不过图8的视图中描述的示例将用于仅仅描述一种这类“计算机警觉方法”,该示例在此被附图标记150列出。如图8的试图所见,在“进入警觉状态”操作152中,计算机12被引发“进入睡眠状态”,从而使其等待来自邻近计算机12的输入,或者等待来自不止一台(总计多达四台)邻近计算机的输入,或者在“边缘”计算机12的情况下等待外部输入,或者等待外部输入和/或来自邻近计算机12的输入的一些组合。如在此之前所描述的,计算机12可以“进入睡眠状态”,以等待读取操作或写入操作的完成。如该示例所述的,在正在使用计算机12以等待一些可能的“输入”的情况下,显而易见可以假定,正在等待的计算机12已经将其读线路18设置为高,以等待来自邻近计算机或外部源的“写入”。事实上,目前可以预见,这将是通常状态。不过,如下情况处于本发明的范围中,即,正在等待的计算机12将已经将其写线路20设置为高,并因此在邻近计算机或外部源对其进行读取之时正在等待的计算机12将苏醒。
在“苏醒”操作154中,睡眠计算机12恢复运行,因为邻近计算机12或外部器件39已经完成被等待的事务。如果被等待的事务为接收待执行的指令字48,那么计算机12将进而在其中执行该指令。如果被等待的事务为数据的接收,那么计算机12将进而执行队列中的下一指令,所述指令或者是在该指令字48中的下一时段54中的指令,或者下一指令字48将被加载,并且下一指令将位于该下一指令字48的时段0中。无论何种情况,在以所描述的方式使用时,下一指令将开始一系列的一个或多个指令,以便处理刚刚接收到的输入。用于处理这种输入的选择包括,进行反应从而在内部执行一些预定的功能,与阵列10中的一台或多台其它计算机12进行通讯,或者甚至忽略该输入(就如同在传统的现有技术中,在预定的条件状态下中断可被忽略一样)。所述选择可在图8的视图中被描述为“按输入行动”操作156。应该注意的是,在某些情况下,输入的内容可能并不重要。在某些情况下,例如,确实可能仅仅存在如下事实,即,外部器件已经试图进行其所感兴趣的通讯。
如果计算机12被指定以充当“警醒”计算机的任务,以如图8所示的方式,那么它一般将返回到“睡眠但是警觉”状态,如图8所示。不过,所述选择总是开放,以指定计算机12进行一些其它任务,例如在它不再需要监控正在被监控的一个或多个特定输入时,或者在它更便于将该任务传送到阵列中的其它一些计算机12时。
本领域的技术人员将认知,上述这类操作模式将可用作针对传统中断使用的更有效的替代方案。当计算机12的一条或多条读线路18(或写线路20)被设置为高时,可以说,它处于“警觉”状态。在警觉状态中,计算机12准备立即执行通过数据总线16向其发送的任何指令,其中数据总线16对应设置为高的一条或多条读线路18,或者作为替代地,计算机12准备按照沿着数据总线16传送的数据行动。在一阵列的计算机12可用的情况下,可在任意给定时间使用一台或多台计算机,以处于上文所述的警觉状态,从而使预先设置一套输入中的任意一个将触发所述计算机而使其运行。如下情况是优选的,即,使用传统的中断技术而使计算机“集中注意力”,因为中断将导致计算机必须存储特定数据,加载特定数据等等,以响应中断请求。相反地,根据本发明,计算机可处于警觉状态,并被指定以等待感兴趣的输入的任务,从而在开始执行由输入提供的指令时就不会浪费任何指令周期。再次,应该注意,在目前所描述的实施例中,处于警觉状态的计算机实际上将处于“睡眠但是警觉”状态,这意味着,它们在几乎不使用任何能量的意义上处于“睡眠状态”,但是由于它们被输入所即时触发而运行时,因此是“警觉”状态。不过,以下情况处于本发明的这方面的范围之内,即,“警觉”状态即使在计算机并不处于“睡眠”状态时也可以实现。所述警觉状态可用于几乎任何情况中,在这些情况中也可以使用传统的现有技术中断(或者硬件中断,或者软件中断)。
虽然本发明不受该示例的限制,不过此处的计算机12被实现为执行自然(native)Forth语言指令。熟悉Forth计算机语言的技术人员将认知的是,被认为是Forth“字”的复杂Forth指令由设计到计算机中的自然处理器指令所构建的。Forth字的集合被认为是一本“字典”。在其它语言中,这可能被认为是一间“图书馆”。如下文将更为详细论述的,计算机12在某时刻从RAM24、ROM26或直接从数据总线16(图2)之一读取18个比特。不过,因为在Forth中,大多数指令(被认为是无操作数(operand-less)的指令)直接从堆栈28和34获取它们的操作数,因此它们通常只有五比特的长度,从而使得多达四个的指令可以被包含于单个十八比特指令字中,所需要的条件是,该组中的最后一个指令从受限的一套仅仅需要三个比特的指令中选出。在图3的视图中以方框示意图的形式还描述了时段定序器42。在本发明的该实施例中,在数据堆栈34中的头两个寄存器为T寄存器44和S寄存器46。
上述方法包括forthlet的使用。Forthlet是将applet和Forth组合所新造的术语——尽管这并不是确切的描述。Forth是在20世纪70年代早期发展起来的一种计算机编程语言。forthlet是代码周围的包装,并且由此所述代码可以被当作数据处理。可替换的定义是,forthlet是一种由被包装所围绕的机器可执行代码所组成的字符串。所述包装可由头和尾组成,或仅仅由头组成。
Forthlet是支持对可扩缩嵌入式阵列类型的并行处理器进行并行编程的部分和工具。Forthlet具有文件的某些属性。这些属性包括名称、类型、地址、长度和各种进一步可选类型的域,这在下文中会介绍。Forthlet是用于用于由工具或编译器从源代码或模板所构建的事务的包装。Forthlet是用于代码和数据的包装,并还可以包装其它forthlet。Forthlet是这样一种机制,该机制用于发布程序和数据,并帮助构建和调试程序。
这些硬件功能提供了简单而快速的远程程序调用和互斥(mutex)。互斥是一种程序对象的通用名,该程序对象在线程之间协商相互的排除,出于该原因,互斥经常被称为一种锁。可扩缩嵌入式阵列处理器的一种使它们适合于简单的并行程序的属性是,它们被硬件信道连接,这些硬件信道通过将处理器设置于超低能量睡眠状态而同步处理器和处理过程,直到完成未决的消息交换。
本发明在上述环境中所使用的软件的一个属性在于,该软件以典型的方式使用传统的Forth类型协作多任务器,从而使每个处理器在执行其本地存储器空间中的程序和执行流向其执行信道的程序之间多任务化。结合硬件中的多端口地址选择逻辑,这就提供了一种并行的硬件和软件的组合,并使从多任务编程到实际并行多处理编程的转换变得容易。
第二个属性在于,这些经过同步的通讯信道处于处理器的地址空间中的相同地方,并且可以使用指针而用于进行数据读取和写入,或者可通过被分支而执行,或者被处理器程序计数器所调用和读取。
第三个属性在于,多个通讯信道可被选择来由处理器进行读取或写入,因为在这些通讯端口的地址范围中的地址中的单独的比特选择单独的信道。
引导forthlet是一种用于整个应用程序的包装。这不同于以传统x86处理器为代表的传统计算机操作。在传统微处理器中,首先用称为源代码的高级计算机语言写成,例如C++或C#。源代码然后被转换成机器语言,也称为目标语言。这种转换过程被称为编译,并且完成这种过程的程序或机器被称为编译器。然后,目标代码被处理器执行。相反地,forthlet可被直接执行。不过,本发明并不限于可直接执行的forthlet,因为通过将高级命令编译成执行所有forthlet处理的机器代码,可实现同样的过程和功能。
引导forthlet是最基本类型的forthlet,它可不带分支地执行。次复杂的forthlet类型为流可执行forthlet,其包括调用,该调用将地址放置于返回堆栈28上。当进行调用时,PC中的地址被压到返回堆栈。在存储器中,PC将已经被预递增,因此,在调用后,它总是指向在存储器中的下一顺序指令。因此,当返回指令返回到堆栈上的地址时,所返回到的是跟随调用的操作码。以下是以机器Forth写成的低级forthlet的示例。该forthlet是简单的单个字端口可执行Forthlet。
示例1
target
Forthlet port-forthlet
!p+!p+@p+@p+
Fend
第一行标明了环境,第二行声明程序名称为port-forthlet。第三行将头两个堆栈项目发送到其运行的端口,然后将这两个堆栈项目从该端口读回。然后,forthlet返回进入睡眠状态,在该端口上等待某人将下一Forthlet写入该端口。最后一条线路包裹Forthlet,并将其放置到服务器上,这样,名称forthlet返回该包的地址。
当从端口进行调用时,PC中的地址将为该端口。端口地址并不自动递增,相反地,它们等待其它一些处理器来重写该端口,地址并不递增,它们再次读取相同的端口地址并睡眠,直到端口被写入。因此,如果运行在端口中的代码调用不同的端口,或者调用RAM或ROM,那么进行调用的端口的返回地址将被放置在进行调用时的返回堆栈上。当返回指令产生时,它将返回到调用端口,因为该地址就是将回到PC的地址。
第三类型的Forthlet是存储器可执行forthlet。存储器可执行forthlet或者使用引导forthlet或流可执行forthlet作为包装。存储器可执行forthlet可以例如占用存储器节点0地址0(rev 7节点0,rev 9 $200)。存储器可执行Forthlet在存储器中的给定地址处运行。它可以在任何节点上的地址0或1或$D或$34处运行。它可以在节点0或节点1或节点2上运行。
第四类型的Forthlet为节点可执行forthlet。节点可执行forthlet也使用引导forthlet或者流可执行forthlet作为包装。节点可执行forthlet将从任意节点运行。节点可执行forthlet查询存储器的位置。
第五类型的Forthlet为变量(variable)可执行地址forthlet,其也使用引导forthlet或流可执行forthlet作为包装。变量可执行地址forthlet从变量节点运行。
示例2描述了包括直接端口流操作码执行的forthlet。
示例2
Target
$14 org:dosample \getbit is a routine in ram
\if it hasn't been defined previously
\give the word getbit meaning
forthlet call-from-stream
[$12345]#dosample
fend
该示例编译的forthlet称为“call-from-stream”,它开始于文字加载,所述文字加载被执行时将文字$12345加载到T中,然后调用被称为“dosample”的子例程。文字加载指令、采样和向RAM中的子例程的调用,被包装在该forthlet中,并且如果写入到节点中则将导致节点执行加载,并将进行对RAM中例程的调用。当该例程返回时,它将返回到调用其的端口以继续更多代码。
直接端口流操作码执行提供了对5比特指令的访问,所述5比特指令代表了Forth语言中大多数基本操作,并被编译器内联到程序中。这些forthlet被流化到处理器通讯信道,并被逐字执行。这些forthlet没有分支,并且本质上不是特定的地址或节点。这些forthlet形成将其它forthlet作为数据紧附(glue)到消息中的语句。程序计数器保持在选择端口的地址处,并且在执行包含多达四个c18操作码的字之后也不增值。在完成流化代码字的执行后,处理器将进入睡眠状态,直到下一流化指令字到达。极其常见的是,这种类型的forthlet将采用返回指令终止,该返回指令将返回到执行调用该端口的例程,可能为PAUSE多任务器。
示例3
target
forthlet ram-based-spi-driver
5 node! \specify this is for node 5 only
0 org \this resides at address 0 on node 5
:spi-code
ordinary-code
fend
该示例详细说明了一种称为“ram-based-spi-driver”的forthlet,该forthlet将具有如下代码,其将要求引脚对于节点5是唯一的,并且必须在使用中驻留在该处。它也被绑定到由其内部限定的字所指定的特定地址。该字“spi-code”将调用编译成地址0。当运行该forthlet时,该代码将在节点5上的地址0处被加载并执行。
流化的forthlet可以包括对ROM或RAM中的例程的调用。通过编译器,待调用例程的地址产生于待调用例程的名称。在RAM中的例程必须在它们被调用之前加载。如果RAM或ROM中的例程从端口被调用,那么非常可能,传送指令流的处理器将提供下一流化字以便在端口中执行,并进入睡眠状态,与此同时,处理器正在执行被调用的RAM或ROM中的例程。消息的路由包括发送端口可执行流,该端口可执行流唤醒处理器并使其调用在ROM中的路由字。这些字接着读取更多指令流,然后将所述流路由到朝向其目的地的下一个处理器上。
图4描述了ram执行forthlet的开始。
示例4
target
forthlet0 runs-on-ram-server
ordinary-code other-forthlet-execution etc.
fend
这种forthlet被设计为在地址0处的节点0上执行,并可以通过将“runs-on-ram-server”forthlet的地址传递到“X0”命令调用而被加载和执行于节点0上。为了从RAM服务器上加载并使用外部RAM而被封装的应用程序,由该命令封装为Forthlet0类型的forthlet。当应用程序不同于在RAM服务器上使用的格式时,应用程序也可以采用其它格式设置,例如那些需要从SPI或异步串行接口加载的格式。这种类型的forthlet为位于RAM底部的程序。在被加载到ram的底部直至某一地址后,它被执行。因为ram执行forthlet在RAM中运行,因此它们可以具有分支指令,并且可以跳转到、调用或返回到RAM、ROM或通讯端口中的地址。这些forthlet类似于DOS中的.com可执行文件。它们开始于存储器的起始处,并具有一定长度。它们被加载和执行。它们可以在已经被加载之后再次被调用。
示例5描述了一种被加载的forthlet,其被加载或者被加载且运行于其它RAM地址、代码或数据覆盖(overlay)。
示例5
target
0 node!
forthlet ram-based-anynode
0 org
:do-something
ordinary-code
fend
该示例详细说明如下代码,该代码将要运行于地址0处,但是在forthlet包装内部不绑定到任何特定节点。它可以运行在任意节点上的地址0处。
这些被加载的forthlet用于代码和数据覆盖。代码或数据可以被加载在节点上的任意地址处。相同的代码可以被加载到多个节点上的一定范围的地址,并且如果该地址为RAM的起始,则它们可以为类似于图8的ram执行forthlet。当代码或数据被加载到不同于RAM起始的地址处时,则它有时候可以用于在存储器的起始处的代码或数据。在程序中的多个经常使用的子例程可以被加载到高存储器中,并被低存储器中不同的覆盖代码例程所调用。代码也可以容易地被加载到低存储器中并存留在该处,从而被加载到高存储器中的代码覆盖所重复地调用。此处的一个示例可以是如下用法,在该用法中,相同的代码可以被放置于多个节点上的相同地址处,但是组中的每个节点将获得针对由该节点操作的代码所设置的地址处的单一数据的覆盖。
示例6描述了绑定到特定节点的forthlet。
示例6
target
forthlet0 runs-on-ram-server
ordinary-code other-forthlet-execution etc.
fend
该forthlet被设计为在地址0处的节点0上执行,并可以通过将“runs-on-ram-server”forthlet的地址传递到“X0”命令调用而被加载和执行于节点0上。为了从RAM服务器上加载并使用外部RAM而封装的应用程序,由所述命令封装为Forthlet0类型forthlet。
示例7描述了IO电路特定forthlet。
示例7
target
0 node!
forthlet2p ram-based-sync-serial-driver
0 org
:sync-code
ordinary-code
fend
该示例构建的forthlet将被限制于如下需要,即该forthlet所运行的节点具有至少两个引脚。这是典型的IO节点。带有零个或一个引脚的节点不能运行这种forthlet,因为该forthlet将需要读取和写入IOCS寄存器的在比特17读取的引脚和在比特1读取的引脚。
这些forthlet所包含的节点读取或写入对于特定节点来说是唯一的IO电路。诸如SPI连接、A/D、D/A、或重置电路的物理电路具有软件驱动器,该软件驱动器仅仅适于具有匹配io硬件属性以运行这些Forthlet的节点。
X0 forthlet在零节点0上执行,这种自然forthlet在RAM服务器上运行。这些forthlet的作用很类似于大多数系统中的常规程序,因为这些forthlet程序直接从外部存储器加载并且由将它们从外部存储器读取的CPU执行。一些处理器每次从存储器中读取并执行一个字,而一些将外部存储器的块读取到本地高速缓冲存储器后再执行它们。这些forthlet在不直接将高速缓冲存储器的本地地址映射到外部存储器地址的硬件中起作用,这样,处理器就能发现它正在执行外部存储器,不过来自于缓冲存储器。通过运行已经在RAM或ROM中的程序,该forthlet将明确地将代码从外部存储器加载到本地存储器中,然后我们分支到已经加载的代码。任意代码可以将消息发送到节点0、RAM服务器,并且给予它自然forthlet的地址,从而在RAM服务器上的本地RAM的起始处加载和执行。任意处理器可以仅仅将地址放置于其堆栈上,并条用X0功能,而一条X0消息将通过RAM服务器缓冲节点而发送到RAM服务器,以在RAM服务器上的该地址处执行forthlet。然后发生的事情取决于在服务器上执行的自然forthlet的内容。
最基本的数据传送forthlet为fsend。在RAM服务器上加载和执行自然forthlet的过程包括,调用在ROM BIOS或RAM中的例程,该例程从外部存储器进行读取,并且其用于将x0 forthlet加载到其用于执行的本地RAM中。在RAM服务器上运行的forthlet从外部存储器加载其它forthlet,不过将它们传送到管道。端口可执行forthlet语句与存储器可执行forthlet结合从而从一个位置向另一个位置传送数据,该数据也可以为forthlet。用于通过诸如SPI或I2C的协议,或者经无线软件链路而发送芯片之上或之外的驱动器,处理芯片之上和之外的数据,并且数据传送forthlet处理芯片上的节点之间的移动数据。编译器可以对应用程序进行组织,以通过RAM服务器、或者从连接到串行闪存的SPI端口、或者从沿着串行链路发送到处理器的PC开发系统而离开外部存储器。应用程序需要足够的外部存储器以允许使用节点0作为连接到广阔的外部RAM、ROM或闪存器件的RAM服务器,这样的应用程序将依赖于被编译器封装进RAM服务器上的Forthlet中的应用程序。通过上述使用,Forthlet类型的应用程序协作、加载代码覆盖并且互相交换数据且和RAM服务器交换数据。事件可以唤醒外围的处理器节点,并且它们可以与已经苏醒的其它节点一起协同处理数据。
图9描述了未绑定到特定节点的可再定位forthlet。
示例9
target
0 node!
0 org
forthletr ram-based-relocatable-word
:mycode
if....then....
mycode-;
begin....until....
ordinary-code
fend
该示例具有的forthlet未绑定到节点,但是却具有取决于地址的内部分支。当加载到特定地址时,分支的分支域被设置以重新定位将要运行在该特定地址处的例程。
这些forthlet从存储器运行,并可包括分支指令。但是,它们在被加载在节点上时可被告知,以根据需要重新定位到不同的执行地址。这些forthlet提供了一种类似于DLL的机制,其中,可调用功能的某种组合可被不同地安排在运行时(runtime),并仍然安全地调用编译器forthlet。编译器可通过组合不同的基本forthlet类型而帮助构建forthlet,从而提供更为复杂的功能。流forthlet语句被编译器组合到其它已经编译过的forthlet,以提供更为复杂的forthlet类型的安全构建。编译器和程序员可以将forthlet属性指定到可以进行更为精细的对象操作的forthlet。这还提供了带有工具的编程器,所述工具形成具有数学可证属性的forthlet对象,因此有助于安全的程序构建。
编译器为程序员构建了发送forthlet。这是一种导致另一个forthlet被使用指定的路由从一个位置发送到另一个位置的forthlet。程序员使用命令FSEND构建发送类型forthlet,如示例10所示。
示例10
dataforthlet myroute fsend myforthlet
该语句构建名为“myforthlet”的新的发送类型forthlet,该forthlet在执行时将使“dataforthlet”沿着由路由描述符“myroute”所描述的路由而被发送。编译器将允许通过将路由描述为一系列步骤并对其进行描绘,或者通过指定起始节点和终结节点,来构建路由描述符。
图13描述了一运行forthlet。编译器为程序员构建了运行forthlet。这是一种将导致一ram执行forthlet被使用指定的路由从一个位置发送到另一个位置然后从RAM的起点被执行的forthlet。程序员使用命令FRUN构建运行类型forthlet,如示例11所述。
示例11
app2 route 1-21 frun run-app2
该语句构建名为“run-app2”的新的运行类型的forthlet,该forthlet在执行时将使“app2”沿着由路由描述符“route 1-21”所描述的路由而发送。
多个forthlet类似于发送forthlet。获取(get)forthlet类似于反相的发送forthlet。它打开路由,并在它打开的管道中拉动forthlet而不是发送forthlet。广播forthlet被编译器构建为将一个forthlet发送到多个位置。收集和积聚forthlet被编译器构建为将数据从多个位置收集或积聚到单个位置。发布forthlet被编译器构建为将对数据所进行的收集的多个部分从一个位置发布到多个位置。
除了上述简单的forthlet,还有多个中级forthlet对象。中级forthlet对象为如下forthlet,该forthlet具有的对象属性由程序员和编译器所设置,并被更高级forthlet使用来帮助程序员,示例12描述了模板forthlet。
示例12
Target
0 node!
0 org
Forthletr clipper \clip data stream to unsigned fmax#
ioport#!a \specify an unset input output port address
fmax# \specify an unset maximum value for clipping
:clip
... \could be coded many ways
@b Cntmsg# and. \specify an unset port for control messages
clip-;
Fend
该示例示出了数据限制器(clipper)作为可再定位forthlet的定义。使用名称“ioport#”和“famx#”以及“Cntmsg#”指明,该forthlet具有三个域,这三个域带有该Forthlet中的相对地址,在模板被初始化时这三个域将包含实例变量。在可再定位forthlet中使用这些名称告知编译器,该forthlet可以产生多个拷贝,这些拷贝可以被重新定位于存储器中该forthlet所适合的任意节点和任意地址,并且该forthlet具有含待实例化(instantiate)的公知属性的三个域。当构建可再定位forthlet时编译器识别出这些关键字,并了解到,“ioport#”域包含与其相邻的两个域的组合地址,并且该forthlet将读取和写入两个数据样本。当该程序的实例被放进阵列中的位置以处理真实程序中的数据样本时,该域的内容将被设置到对应于适合的相邻域的两个端口的组合地址。
编译器还了解到,“Cntmsg#”域指定将被针对输入控制消息而检测的端口的地址,并且“fmax#”域包含的值为将被限制器在流中传递的最大值。编译器将确定,该forthlet也具有如下属性,即,它需要三个端口,因此它不能放置在只带有两个端口的边角节点中。因此,软件可以将模板程序以如下方式放置在阵列中,而使得可以从数学角度证明,经过阵列的每个节点的消息和控制路径是正确的,并且不存在流死锁。
模板forthlet是一种类型的可执行forthlet,其具有的属性关联到作为其模板的种类。这些对象属性域告知编译器和程序员,什么是该forthlet的通用功能,以及它所具有的可以被安全操作的属性。一种示例是fir过滤器元件模板。多级fir过滤器可以构建在节点的工作组上,其中每个节点执行一部分过滤器功能。总过滤器功能由级联过滤器元件的每一级上的特定设置而确定。在每个过滤器元件中的代码是一致的,除了针对抽头反馈的延迟、用于对每个抽头处反馈的数据进行乘法的常数和数据被读进和写出到下一过滤器级的端口。模板forthlet将由代码组成,该代码所描述的是,可以被操作的参数处于何处以及这些参数代表什么。
通过使用被编译器以安全方式映射到功能的预定义功能模板,许多问题自身就得到解决。这些属性还可以图形化地表示给程序员,以采用可视化帮助设计,并确认设计的正确性。更高级的forthlet将使用这些模板forthlet属性域来确保,模块为带有与邻近模块匹配的部分的结构,从而防止其中模块以允许死锁的方式连接的代码构造。
高级forthlet也被调用,forthlet向导(wizard)可以根据需要被设置为高级。它们是编译器的一部分,并且帮助程序员对代码进行设计、构建和改造。它们使用forthlet的对象属性来为程序员构建对象。在forthlet图书馆中存在一些forthlet向导,并且存在文档,作为替换地,forthlet向导能够用来帮助构建新的forthlet向导。
在FIR过滤器模板forthlet的之前示例中,过滤器建筑器向导forthlet可以接收过滤器的高级描述,并执行所需要的计算,这些计算确定延迟、抽头、常数和端口方向,它们是每个节点构建并行分布式多级FIR过滤器所需的。可以针对每个节点初始化FIR过滤器Forthlet模板,并增加在整个节点的工作组上加载和启动软件所需的forthlet包装。
上述向导可以帮助构建模拟部件对象、R/F元件对象,其包括发送器、接收器、过滤器、协议翻译器、或添加到图书馆的其它任何事物。
诊断forthlet在处理器端口上执行,并将该处理器状态的完整视图,或者关于其状态的任何特定信息,返回到其它一些位置,例如返回到PC上的开发系统,或者甚至沿着无线电链路返回到远程目的地。
Forthlet解释器非常像传统的forth系统,因为它将执行来自forthlet地址列表的forthlet。该列表可以驻留在外部存储器中,并且每次从所述列表读取一个地址。该地址然后将在带有X0的RAM服务器上执行。内部细节将非常类似传统的线程化Forth系统。分支将重置forthlet解释器指针等ram执行。以该方式运行的Forthlet解释器让技术人员可以写非常大的程序,这些程序的运行好像来自非常大的地址空间,就如同传统的处理器。Forth字的大小将不受限于程序员本人的一个本地节点上的存储器的大小,而是受限于外部存储器的大小。Forthlet解释器的使用,将允许技术人员在运行时做很多事情,我们之前已经描述为发生在编译时间。编译器在构建和分配forthlet方面所做的智能事情可以可选地在运行时被处理。一个示例将是动态过滤器建筑器类型程序,其在运行时运行在嵌入式芯片上,以便利用允许对加载并运行在分布式处理器上的forthlet进行压缩的方式。被包含作为运行时Forthlet解释器对象的模板和实例化程序可小于整套实例化节点,在该节点处过滤器元件每次均被复制。
动态forthlet调度器(dispatcher)是高级forthlet。针对一些应用程序,通过使用对可执行forthlet和forthlet工作组进行调度的forthlet,可实现动态运行时加载平衡,调度基于该时刻处可用节点的数目,或基于使用物理或R/F链路而网络连接在一起的芯片的数目。
高级forthlet还可用作可视化工具和分析程序(profiler)。高级forthlet可以检验经过编译的forthlet的对象属性,并提供针对应用程序的分配、使用和效率的有益的可视化。可视化工具和分析程序器可包括完全互动环境,其用作在每个核心上运行的传统的Forth命令解释器,该解释器具有的能力为实时地与处理器和代码互动。对于Forth而言,这已经是传统优势,它经常消除针对如下情况的需要,即,快速调制应用程序所需的麻烦且厌烦的电路内部仿真硬件。
虽然已经在此讨论了创造性的计算机阵列10和计算机12的特定示例,不过可以预期,针对于此的大量应用程序还未被想到。事实上,创造性的方法和装置可适用于许多不同的使用,这是本发明的一大优势。
上述全部内容仅仅为本发明的可用实施例的一些示例。本领域的技术人员将易于想到,在不脱离本发明的精神和范围的前提下,可进行多种其它修改和变化。相应地,本公开在此并不意在限制,并且附带的权利要求书应被理解为涵盖了本发明的全部范围。
工业实用性
创造性的计算机阵列10、10a以及相关方法意在广泛用于多种计算机应用中。可以预期,在有必要实现大量不同但是相关的功能的计算机尖端应用中,它们将尤为有用。可以预见,针对创造性的计算机阵列10、10a以及相关方法的一些最佳应用方案将在于,可以对所需要的任务进行分割,从而使每台计算机12具有接近等同于其它计算机的计算要求。不过,即使在一些计算机12有时候甚至总是可以工作在远小于它们最大能力的情况下,发明人也已经发现,计算机阵列10、10a的整体效率通常将超过现有技术中可动态分配任务的计算机阵列的效率。
应该注意的是,存在多种应用,其中优选地具有不止一个计算机阵列10、10a。众多这类可能示例中的一个是,数字无线电可要求GPS输入。在该示例中,无线电可被一个计算机阵列10执行,该阵列从分立的被配置以实现GPS功能的计算机阵列10接收输入。
进一步应该注意的是,虽然计算机12可被优化以执行单一的任务,不过如上文示例所讨论的,如果该任务不是特定的应用程序中所需要的,那么计算机12可容易地被编程以执行其它一些任务,这仅仅受限于程序员的想象力。
可以预见的是,使用Forth计算机语言将最佳地实现本创造性计算机阵列10、10a,该语言本质上易于根据需要分割任务以执行本发明。Color Forth为Forth语言的最新改造,其将被等价地应用。
因为本发明的计算机阵列10、10a以及计算机阵列方法36可易于形成,并易于与现有任务、输入/输出器件等集成,并且由于提供了在此所描述的优势,因此,可以预见,它们将易于在工业生产中被接受。出于这些和其它原因,可以预见,本发明的使用和工业实用性将具有明显的应用范围以及长时间的应用周期。
元件列表
10计算机阵列
12计算机
12a存储器控制器计算机
14基座
16数据线
18闪存存储器
20RAM
22串行数据线路
24并行数据总线
28a经26p输入/输出电路
28处理器
30ROM
32计算机RAM
34计算核心
36计算机阵列方法
38提供互连计算机
40针对任务配置计算机
42将任务指定到计算机
44初始化计算机
Claims (27)
1、一种计算机阵列系统,包括:
多台计算机;和
连接所述多台计算机的多条数据路径;和
一种机制,其用于在所述多台计算机中的一台和另一台之间发布程序和数据。
2、根据权利要求1所述的计算机阵列系统,其中:
所述机制进一步包括:一种包装,其用于在所述包装遇到所述多台计算机中的至少一台时,指令所述一台计算机所要采取的行动。
3、根据权利要求2所述的计算机阵列系统,其中:
所述包装指令至少一些所述计算机中的所述一台加载所述包装之后的数据。
4、根据权利要求2所述的计算机阵列系统,其中:
所述包装指令所述至少一些计算机中的所述一台加载所述包装之后的指令。
5、根据权利要求2所述的计算机阵列系统,其中:
所述包装指令所述至少一些计算机中的所述一台将所述承载传送到所述计算机中的另一台。
6、根据权利要求2所述的计算机阵列系统,其中:
所述包装可在端口处直接执行。
7、根据权利要求2所述的计算机阵列系统,其中:
所述包装可在端口处直接执行。
8、根据权利要求2所述的计算机阵列系统,其中:
所述包装包括调用,其中,所述调用将地址放置于返回堆栈上,然后返回。
9、根据权利要求2所述的计算机阵列系统,其中:所述包装进一步包括计数器,该计数器用于指示所述包装的长度。
10、根据权利要求1所述的计算机阵列系统,其中:
计算机以5×5阵列的形式进行物理排列。
11、根据权利要求1所述的计算机阵列系统,其中:
至少一些计算机以4×6阵列的形式进行物理排列。
12、根据权利要求1所述的计算机阵列系统,其中:
沿着阵列的每一侧的计算机数量为偶数。
13、根据权利要求1所述的计算机阵列系统,其中:
至少一台计算机与外部存储器源直接通讯。
14、根据权利要求1所述的计算机阵列系统,其中:
至少一台计算机将数据从外部存储器源传达至多台计算机中的至少一些。
15、一种用于执行计算机化工作的方法,包括:
提供多台计算机;和
将不同任务指定到所述计算机中的至少一些。
16、根据权利要求15所述的方法,其中:
所述计算机中的至少一台被指定为与闪存通讯。
17、根据权利要求15所述的方法,其中:
所述计算机中的至少一台被指定为与随机访问存储器通讯。
18、根据权利要求15所述的方法,其中:
所述计算机中的至少一台被指定为完成输入/输出功能。
19、根据权利要求15所述的方法,其中:
所述计算机中的一台将所述指定路由到其余计算机。
20、一种计算机阵列,包括:
多台计算机;和
在所述计算机之间的多条数据连接;其中
所述计算机中的至少一些被编程为执行不同的功能。
21、根据权利要求20所述的计算机阵列,其中:
所述不同功能一起工作以完成任务。
22、根据权利要求20所述的计算机阵列,其中:
当所述计算机阵列被初始化时,所述功能中的每一个被编程到相应的计算机中。
23、根据权利要求20所述的计算机阵列,其中:
所述计算机之间的通讯为异步的。
24、一种使用多台计算机完成任务的方法,包括:
将任务分割成多个操作成分,并将每个所述操作成分指定到所述计算机中的一台;
对所述计算机中的至少一些进行编程,以完成每个所述操作成分。
25、根据权利要求24所述的用于完成任务的方法,其中:
所述操作成分是用于完成全球定位系统接收器的操作。
26、根据权利要求24所述的用于完成任务的方法,其中:
在任务开始之前,对所述计算机进行编程,以完成每个所述操作成分。
27、根据权利要求24所述的用于完成任务的方法,其中:
所述计算机以计算机阵列的形式进行排列。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US78826506P | 2006-03-31 | 2006-03-31 | |
US60/788,265 | 2006-03-31 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101051301A true CN101051301A (zh) | 2007-10-10 |
Family
ID=38283039
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2007100907536A Pending CN101051301A (zh) | 2006-03-31 | 2007-04-02 | 用于操作计算机处理器阵列的方法和装置 |
Country Status (7)
Country | Link |
---|---|
US (1) | US20070250682A1 (zh) |
EP (1) | EP1840742A3 (zh) |
JP (1) | JP2007272895A (zh) |
KR (1) | KR20070098760A (zh) |
CN (1) | CN101051301A (zh) |
TW (1) | TW200817925A (zh) |
WO (1) | WO2007117414A2 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112559440A (zh) * | 2020-12-30 | 2021-03-26 | 海光信息技术股份有限公司 | 多小芯片系统中实现串行业务性能优化的方法及装置 |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080052525A1 (en) * | 2006-08-28 | 2008-02-28 | Tableau, Llc | Password recovery |
US20080052490A1 (en) * | 2006-08-28 | 2008-02-28 | Tableau, Llc | Computational resource array |
US20080126472A1 (en) * | 2006-08-28 | 2008-05-29 | Tableau, Llc | Computer communication |
US8363542B2 (en) * | 2006-11-28 | 2013-01-29 | Nokia Corporation | Robust remote reset for networks |
US20080282062A1 (en) * | 2007-05-07 | 2008-11-13 | Montvelishsky Michael B | Method and apparatus for loading data and instructions into a computer |
GB2454996B (en) * | 2008-01-23 | 2011-12-07 | Ibm | Method for balanced handling of initiative in a non-uniform multiprocessor computing system |
US20090254886A1 (en) * | 2008-04-03 | 2009-10-08 | Elliot Gibson D | Virtual debug port in single-chip computer system |
TWI384374B (zh) * | 2008-05-27 | 2013-02-01 | Nat Univ Tsing Hua | 具資料串流功能之多核心遠端程序呼叫方法 |
US20100023730A1 (en) * | 2008-07-24 | 2010-01-28 | Vns Portfolio Llc | Circular Register Arrays of a Computer |
US20100158076A1 (en) * | 2008-12-19 | 2010-06-24 | Vns Portfolio Llc | Direct Sequence Spread Spectrum Correlation Method for a Multiprocessor Array |
US8185898B2 (en) | 2009-10-01 | 2012-05-22 | National Tsing Hua University | Method of streaming remote procedure invocation for multi-core systems |
KR101738641B1 (ko) | 2010-12-17 | 2017-05-23 | 삼성전자주식회사 | 멀티 코어 시스템의 프로그램 컴파일 장치 및 방법 |
US9910823B2 (en) * | 2011-05-16 | 2018-03-06 | Cypress Semiconductor Corporation | Stack processor using a ferroelectric random access memory (F-RAM) having an instruction set optimized to minimize memory fetch |
US9588881B2 (en) | 2011-05-16 | 2017-03-07 | Cypress Semiconductor Corporation | Stack processor using a ferroelectric random access memory (F-RAM) for code space and a portion of the stack memory space having an instruction set optimized to minimize processor stack accesses |
US9195575B2 (en) * | 2013-05-17 | 2015-11-24 | Coherent Logix, Incorporated | Dynamic reconfiguration of applications on a multi-processor embedded system |
RU2530285C1 (ru) * | 2013-08-09 | 2014-10-10 | Федеральное Государственное Бюджетное Образовательное Учреждение Высшего Профессионального Образования "Саратовский Государственный Университет Имени Н.Г. Чернышевского" | Активный аппаратный стек процессора |
TWI594131B (zh) * | 2016-03-24 | 2017-08-01 | Chunghwa Telecom Co Ltd | Cloud batch scheduling system and batch management server computer program products |
GB2580165B (en) | 2018-12-21 | 2021-02-24 | Graphcore Ltd | Data exchange in a computer with predetermined delay |
Family Cites Families (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4215401A (en) * | 1978-09-28 | 1980-07-29 | Environmental Research Institute Of Michigan | Cellular digital array processor |
US4739474A (en) * | 1983-03-10 | 1988-04-19 | Martin Marietta Corporation | Geometric-arithmetic parallel processor |
DE3533800C1 (de) * | 1985-09-21 | 1987-02-05 | Hans-Werner Lang | Verfahren zum Betreiben eines hochintegrierten Wellenfront-Feldrechners sowie entsprechender Wellenfront-Feldrechner |
US5021947A (en) * | 1986-03-31 | 1991-06-04 | Hughes Aircraft Company | Data-flow multiprocessor architecture with three dimensional multistage interconnection network for efficient signal and data processing |
US5222237A (en) * | 1988-02-02 | 1993-06-22 | Thinking Machines Corporation | Apparatus for aligning the operation of a plurality of processors |
US5257395A (en) * | 1988-05-13 | 1993-10-26 | International Business Machines Corporation | Methods and circuit for implementing and arbitrary graph on a polymorphic mesh |
CA2019299C (en) * | 1989-06-22 | 2002-01-15 | Steven Frank | Multiprocessor system with multiple instruction sources |
US5440749A (en) * | 1989-08-03 | 1995-08-08 | Nanotronics Corporation | High performance, low cost microprocessor architecture |
DE4019040A1 (de) * | 1990-06-14 | 1991-12-19 | Philips Patentverwaltung | Multirechnersystem |
US5765015A (en) * | 1990-11-13 | 1998-06-09 | International Business Machines Corporation | Slide network for an array processor |
JPH0713945A (ja) * | 1993-06-16 | 1995-01-17 | Nippon Sheet Glass Co Ltd | 演算処理部および制御・記憶部分離型マルチプロセッサ ・システムのバス構造 |
US5832291A (en) * | 1995-12-15 | 1998-11-03 | Raytheon Company | Data processor with dynamic and selectable interconnections between processor array, external memory and I/O ports |
EP0840223B1 (en) * | 1996-10-31 | 2002-05-15 | STMicroelectronics Limited | Microcomputer capable of accessing an external memory |
US6895452B1 (en) * | 1997-06-04 | 2005-05-17 | Marger Johnson & Mccollom, P.C. | Tightly coupled and scalable memory and execution unit architecture |
US6292822B1 (en) * | 1998-05-13 | 2001-09-18 | Microsoft Corporation | Dynamic load balancing among processors in a parallel computer |
SE514785C2 (sv) | 1999-01-18 | 2001-04-23 | Axis Ab | Processor och metod för att exekvera instruktioner från flera instruktionskällor |
US6966002B1 (en) * | 1999-04-30 | 2005-11-15 | Trymedia Systems, Inc. | Methods and apparatus for secure distribution of software |
US6691219B2 (en) * | 2000-08-07 | 2004-02-10 | Dallas Semiconductor Corporation | Method and apparatus for 24-bit memory addressing in microcontrollers |
US20060248360A1 (en) * | 2001-05-18 | 2006-11-02 | Fung Henry T | Multi-server and multi-CPU power management system and method |
US20030005168A1 (en) * | 2001-06-29 | 2003-01-02 | Leerssen Scott Alan | System and method for auditing system call events with system call wrappers |
US7069372B1 (en) * | 2001-07-30 | 2006-06-27 | Cisco Technology, Inc. | Processor having systolic array pipeline for processing data packets |
US7249357B2 (en) * | 2001-08-20 | 2007-07-24 | Silicon Graphics, Inc. | Transparent distribution and execution of data in a multiprocessor environment |
US6959372B1 (en) * | 2002-02-19 | 2005-10-25 | Cogent Chipware Inc. | Processor cluster architecture and associated parallel processing methods |
US7415594B2 (en) * | 2002-06-26 | 2008-08-19 | Coherent Logix, Incorporated | Processing system with interspersed stall propagating processors and communication elements |
US7237045B2 (en) * | 2002-06-28 | 2007-06-26 | Brocade Communications Systems, Inc. | Apparatus and method for storage processing through scalable port processors |
US7657861B2 (en) * | 2002-08-07 | 2010-02-02 | Pact Xpp Technologies Ag | Method and device for processing data |
JP3987784B2 (ja) * | 2002-10-30 | 2007-10-10 | Necエレクトロニクス株式会社 | アレイ型プロセッサ |
US7353501B2 (en) * | 2002-11-18 | 2008-04-01 | Microsoft Corporation | Generic wrapper scheme |
US7673118B2 (en) * | 2003-02-12 | 2010-03-02 | Swarztrauber Paul N | System and method for vector-parallel multiprocessor communication |
US7581081B2 (en) * | 2003-03-31 | 2009-08-25 | Stretch, Inc. | Systems and methods for software extensible multi-processing |
US7937557B2 (en) * | 2004-03-16 | 2011-05-03 | Vns Portfolio Llc | System and method for intercommunication between computers in an array |
US7269805B1 (en) * | 2004-04-30 | 2007-09-11 | Xilinx, Inc. | Testing of an integrated circuit having an embedded processor |
US7484041B2 (en) * | 2005-04-04 | 2009-01-27 | Kabushiki Kaisha Toshiba | Systems and methods for loading data into the cache of one processor to improve performance of another processor in a multiprocessor system |
US20080282062A1 (en) * | 2007-05-07 | 2008-11-13 | Montvelishsky Michael B | Method and apparatus for loading data and instructions into a computer |
-
2007
- 2007-03-29 TW TW096110969A patent/TW200817925A/zh unknown
- 2007-03-29 JP JP2007086857A patent/JP2007272895A/ja active Pending
- 2007-03-30 WO PCT/US2007/008235 patent/WO2007117414A2/en active Application Filing
- 2007-03-30 EP EP07251416A patent/EP1840742A3/en not_active Withdrawn
- 2007-03-30 US US11/731,747 patent/US20070250682A1/en not_active Abandoned
- 2007-04-02 CN CNA2007100907536A patent/CN101051301A/zh active Pending
- 2007-04-02 KR KR1020070032588A patent/KR20070098760A/ko not_active Application Discontinuation
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112559440A (zh) * | 2020-12-30 | 2021-03-26 | 海光信息技术股份有限公司 | 多小芯片系统中实现串行业务性能优化的方法及装置 |
CN112559440B (zh) * | 2020-12-30 | 2022-11-25 | 海光信息技术股份有限公司 | 多小芯片系统中实现串行业务性能优化的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
TW200817925A (en) | 2008-04-16 |
EP1840742A3 (en) | 2008-11-26 |
EP1840742A2 (en) | 2007-10-03 |
WO2007117414A3 (en) | 2008-11-20 |
US20070250682A1 (en) | 2007-10-25 |
KR20070098760A (ko) | 2007-10-05 |
JP2007272895A (ja) | 2007-10-18 |
WO2007117414A2 (en) | 2007-10-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101051301A (zh) | 用于操作计算机处理器阵列的方法和装置 | |
CN1252144A (zh) | 一可编程组件中可构元件的自同步方法 | |
CN1121014C (zh) | 具有risc结构的八位微控制器 | |
CN1279469C (zh) | 一种处理器中处理数据的方法和处理数据的系统 | |
CN1129843C (zh) | 使用组合的数据处理器系统和指令系统 | |
CN1088214C (zh) | 用多指令集处理数据的器件和方法 | |
CN1101019C (zh) | 数据序列产生方法及设备、转换方法及计算机 | |
CN1174313C (zh) | 多指令集的数据处理 | |
US8972699B2 (en) | Multicore interface with dynamic task management capability and task loading and offloading method thereof | |
CN1095116C (zh) | 执行两种指令长度代码的处理机及其指令码输入装置 | |
CN1842770A (zh) | 一种在处理器中挂起和释放执行过程中计算线程的整体机制 | |
CN1292366C (zh) | 用于使用多个处理器操纵数据的系统和方法 | |
CN101069161A (zh) | 调度方法、调度装置和多处理器系统 | |
CN1273890C (zh) | Arm处理器架构的微内核设计方法 | |
CN1570870A (zh) | 终极管道和最优重排技术 | |
CN1532693A (zh) | 处理器和编译器 | |
CN1842779A (zh) | 用于执行simd运算的数据处理系统及其方法 | |
CN1591325A (zh) | 计算机系统、编译器装置以及操作系统 | |
CN101040268A (zh) | 宽带网络计算机体系结构中的外部数据接口 | |
CN1440528A (zh) | 寄存器中堆栈操作数的存储 | |
JP2010204979A (ja) | コンパイル方法及びコンパイラ | |
CN1869952A (zh) | 指令执行设备、调试方法、调试设备以及调试程序 | |
CN1236455A (zh) | 具有risc结构的八位微控制器 | |
CN1258704C (zh) | 基于网格环境的多计算引擎协同方法 | |
CN1734415A (zh) | 分枝预测装置及分枝预测方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Open date: 20071010 |