CN1095133C - 多处理器计算机系统中共享结果数据的方法,装置和系统 - Google Patents

多处理器计算机系统中共享结果数据的方法,装置和系统 Download PDF

Info

Publication number
CN1095133C
CN1095133C CN97122499A CN97122499A CN1095133C CN 1095133 C CN1095133 C CN 1095133C CN 97122499 A CN97122499 A CN 97122499A CN 97122499 A CN97122499 A CN 97122499A CN 1095133 C CN1095133 C CN 1095133C
Authority
CN
China
Prior art keywords
instruction
count value
processor
operation count
results buffer
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.)
Expired - Lifetime
Application number
CN97122499A
Other languages
English (en)
Other versions
CN1185609A (zh
Inventor
威廉姆·J·斯塔克
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN1185609A publication Critical patent/CN1185609A/zh
Application granted granted Critical
Publication of CN1095133C publication Critical patent/CN1095133C/zh
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory

Abstract

一个多处理器计算机系统包括多个处理器,其中每个处理器包括一个执行部件,一个程序计数器,一个包括许多入口的结果缓冲器,一个包含操作计数值的操作计数器,一个译码器,它从将要执行的指令中抽取出处理器标志,处理器标志确定多个处理器中的特定的一个,其中指令的一个或多个输入值将要取自这个已确定的处理器的结果缓冲器。每个译码器还从将要执行的指令中提取出一个偏移量。

Description

多处理器计算机系统中共享结果数据的方法,装置和系统
技术领域
本发明涉及多处理器计算机系统中的数据处理的改进。
技术背景
图1是常规多处理器计算机系统的最简抽象示意图。处理器101、111、121通过系统总线122与存储器102交互。程序计数器103属于处理器101,它指示从存储器102中的某个单元取指令。指令,格式如图2所示被传送到处理器101的执行部件104。执行部件104完成指令所指定的操作201。如图2所描述,操作201的输入值202可能从存储器102的某个单元取出,也可能来自处理器101的寄存器文件105的某个单元;操作201的输出值203可能存储在存储器102中,也可能存储在寄存器文件105中,还有可能存储在程序计数器103中。
在共享存储器的多处理器系统中,当一个处理器执行的操作的输入值是另一个处理器执行操作的结果(即输出值)时,操作处理变得十分复杂。首先,对于第一个处理器,例如处理器101来说,为获取作为输入值的结果数据,第二个处理器,例如处理器111,必须首先将输出值存储到存储器102,然后处理器101可以从存储器102中取出这些结果用作执行指令的输入值。可以看出,这些先决条件步骤耗费附加的指令和时钟周期来从一个处理器到另一个处理器存取这些值,因此大大降低了效率和处理器处理能力。另外,以另一指令执行结果作为输入值的指令执行要求处理器是同步的以确保第一个处理器能访问存储器102中的正确数据,而不是一些先前或过期的数据。在现有技术下,需要由复杂的数据管理过程来保证系统中的存储一致性。
相对于同一个处理器执行的指令间数据共享来说,共享存储器的多处理器结构中多处理器执行指令间的数据共享的低效已经限定了算法的定义方式。例如,为共享存储器的多处理器写的算法被严格仔细地划分,以便能将由一个处理器上运行的指令流和另一个处理器上的指令流之间的数据共享所造成的性能衰减降低到最低限度。这些数据是通过典型的存储操作和锁定原语来分别实现共享和同步的。而为单处理器所写的算法就没有这样的限制。一条指令所产生的数据通过寄存器文件、高带宽、低延迟的机制,来被另一指令共享,并通过指令执行的线性顺序来实现同步。
由于共享存储器的多处理器系统所提供的低带宽,长延迟,高开销的并行性(high overhead parallelism)不适于利用许多算法固有的微粒度的(fine-grained)指令级并行性(ILP),因而处理器设计师已经开始尝试使用其它方法来构造能有效执行这种算法的系统。通过使用流水线(pipelining)技术、多重执行部件机制和复杂的硬件及软件指令规划技术,他们已经实现了单处理器上单指令流中的并行指令执行(通过寄存器文件共享数据),并且提供了一种高效执行ILP算法的途径。
然而不幸的是,有两个弊端限制了这种方法的综合效率。一个弊端是处理器复杂程度的增大。当把一个简单一次一条指令(one-instruction-at-a-time),顺序执行(in-order execution)的处理器扩展使之一次运行多条指令,调度可能的非顺序执行,这时,电路的数目、硅片面积、电路复杂度、测试复杂度、开发周期、风险以及开发费用都将急剧地增多。
第二个弊端来源于这样的事实:并不是所有的算法都能利用能并行执行多指令的单处理器所提供的计算带宽。也就是说,这些算法在简单的一次一条指令处理器上的执行效率和在复杂的一次多条指令处理器上的执行效率不相上下。另外,许多此类算法执行在多处理器环境下时却相当好。
因此在过去,对于第一类算法的理想运行环境一度是复杂而开发费用昂贵的一次多条指令单处理器;对于第二类算法的理想运行环境是共享存储器或分布式存储器的多处理器结构,它由多个简单而开发费用少的一次一条指令的处理器组成。
发明内容
本发明提供了一种处理数据的装置,包括:一个执行部件,其中所述执行部件执行一条指令从而产生一个输出值;包含多个入口的结果缓冲器,每个入口被分配以保存所述执行部件执行一条指令所产生的一个输出值;以及包含一个操作计数值的一个操作计数器,该操作计数值至少在所述执行部件执行向所述结果缓冲器中存入一个输出值的一条指令之后递增,所述指令与所述操作计数器中包含的一个唯一的操作计数值相关,其中响应与产生输出值的该指令相关的所述唯一操作计数值为该输出值分配所述结果缓冲器中的一个特定入口。
本发明提供了一个多处理器计算机系统包括:多个处理器,其中每个处理器包括:一个执行部件,其中所述执行部件利用一个或多个输入值执行一条指令以产生一个输出值;包含多个入口的结果缓冲器,每个入口被分配以保存所述执行部件执行一条指令所产生的一个输出值;包含一个操作计数值的一个操作计数器,操作计数值至少在所述执行部件执行向所述结果缓冲器中存入一个输出值的一个指令时递增,其中当执行产生一个输出值的一条指令时响应所述操作计数值为该输出值分配所述结果缓冲器中的一个特定入口;以及一个译码器,译码器从所述执行部件将要执行的一条指令中提取一个处理器标志,它确定所述多个处理器中的一个,其中所述指令的一个或多个输入值从所述已确定的处理器的所述结果缓冲器中检索。
本发明提供了一种在数据处理器系统中处理数据的方法,包括:执行一条指令,产生一个存储到结果缓冲器的输出值;递增一个操作计数值;以及存储此输出值于结果缓冲器的一个入口中,其中这个入口与已递增的操作计数值是相关联的。
本发明提供了一种在具有多个处理器的多处理系统中存储一个结果的方法,该方法包括:在多个处理器中的一个上执行产生一个结果的指令;将与一个处理器相关的操作计数值递增,其中该结果通过与这个处理器和增加的操作计数值的关联被唯一确认;以及在多处理系统中存储此结果,以便此结果在存储器中被多个处理器中的任何处理器通过此这个处理器和增加的操作计数值所定义的唯一标志进行访问。
本发明提供了一种多处理器计算机系统,包括多个处理器,其中每个处理器包含一个执行部件(executive unit);一个程序计数器;一个结果缓冲器,它包含许多入口(entry),每一个入口被分配来保存执行部件执行指令所产生的输出值;一个存放操作计数值(operation count)的操作计数器(operation counter),操作计数值至少在操作部件执行一条把结果数值存入结果缓冲器的指令后递增。在结果缓冲器中用于给定输出值的入口是在产生此输出值的指令执行时作为操作计数值的函数来被选择的。每个处理器还包括一个译码器(decoder),它从将要执行的指令中提取出处理器标志(processor identifier),处理器标志确定多个处理器中的特定的一个,指令的一个或多个输入值将要取自这个已确定的处理器的结果缓冲器。每个译码器还要从将要执行的指令中提取出一个“偏移量”,当所要求的输入值被存入已确定的处理器的结果缓冲器时,该偏移量提供当前运行处理器的操作计数值与此已确定的处理器所期望的操作计数值之间的相对差值。译码器还将产生一个访问关键字(access key),它是偏移量与当前执行该指令的处理器操作计数值的一个函数,并且到所确定的处理器的结果缓冲器以此访问关键字作为入口索引检索出一个输入值。以上所述的以及本发明的其他的目的、特征和优点通过以下详尽描述将更为清楚。
本发明的新颖独特令人信服的特征列于所附权利要求书。然而本发明及最佳使用方式、发明目的、优点等内容在参照以下将要详细描述的一个实施例连同相关附图将会得以很好地理解,其中:
附图说明
图1是传统的多处理器计算机系统最简模式的示意框图;
图2是传统多处理器上执行的传统指令格式;
图3是根据本发明最佳实施例的一个集成的多处理器计算机系统;
图4是根据本发明的最佳实施例的指令执行格式;
图5是根据本发明的一个最佳实施例的一个本地结果缓冲器的逻辑结构;
图6是本发明的多处理器中,当一条指令指定一个输出要存到本地结果缓冲器中时,数据处理方法的流程图;
图7是根据本发明的最佳实施例,本发明的多处理器系统中,当一指令指定输入要从一远程处理器的结果缓冲器的一个入口中提取时,数据处理过程的流程图;
图8是图5所示结果缓冲器的另一可选实施例,取消使用计数值的存储;
图9是图6所示数据处理方法的另一可选实施例,取消使用计数值的存储;
图10是图7所示数据处理方法的另一可选实施例,取消使用计数值的存储。
具体实施方式
新兴的半导体技术使将越来越多的电路集成到一个芯片上成为可能。通过将多个逻辑实体置于单一芯片而不分开放置,处理器设计师将能够利用到因此而带来的更大的数据带宽和更小的延迟。通过将一整个复杂的处理器集成在单一芯片上,处理器制造商已经把技术水平推进了极大的一步。随着其密度的增大,有可能制造更加复杂的单芯片处理器—花费更多,而性能收益却在减少。
但是,从另一种不同角度来利用这增大的密度,将多个简单处理器集成到一个芯片上,就提供了一种针对前面所述的第二类算法的高性价比的解决方案。
本发明利用通过将多个简单处理器集成到单一芯片中而极大增加的数据带宽来扩展指令集结构以提供多处理器数据共享和同步机制,这正体现寄存器文件的高带宽和低延迟特性。既然本发明采用一个由简单处理器组成的多处理器结构作为它的出发点,那么一个实施例可以不作修改地高性价比地执行第二类算法。
同时,本发明的一个实施例对于前面提到的第一类算法,尤其是那些描述为单指令流和高度ILP(指令级并行)的第一类算法,同样能够高效地执行。这需要将算法重新编译为分布式、相互依赖的、多指令流,指令流之间通过前面提到的扩展进行相互通讯。当这些指令流同时在多简单处理器结构执行时,为这类算法提供一种十分优越的执行性能。正如最佳实施例将会表明的,通过采用多个简单的处理器,而不是单一的复杂处理器,也会获得同样性能。
本发明另一种可选方案是完全采用一种新的指令集结构,而不是去扩展某个现有的。这样的实施例也许会用本发明的特征来取代多数指令系统结构中见到的寄存器文件,而不是去增加它,这样就进一步降低了处理器设计的复杂性。
现在参照图3,它显示了一个依据本发明的最佳实施例的集成的、多处理器计算机系统。此对称多处理器(SMP)系统的每个处理器301、312和321包括一个程序计数器303,执行部件304,寄存器文件305,结果缓冲器306,操作计数器307,和译码器308。本发明系统更可取地应实施在一个单片集成电路上,因为这样的设计更容易达到带宽要求。系统总线322与存储器302和处理器301,312,321互连。在每个处理器中增加了结果缓冲器和操作计数器,通过提供一种使得处理器301,312和321能够以高带宽低延迟同步并行处理相关指令并共享数据的机制,极大地便利了多处理器中的数据处理,同时也提供了一种执行相互依赖指令的方法。在这种方式下,本发明的多处理器系统可以象一个SMP系统一样处理现有的SMP作业(workloads)而不必进行重编译,也可以象一个ILP处理系统一样利用显著增大的处理器间通讯带宽来处理重新编译为相互依赖多指令流的单指令流,这个多处理就好象是单个的、复杂的超标量(superscalar)处理器一样。
作为ILP处理系统工作时,体现ILP的单指令流被计算机编译器分解为多指令流,并通过下面要讲到的指令集结构扩展进行通讯。当这些多指令流被内核(Kernel)调度器分配在多处理器301,302,321上同时执行时,能够达到接近于复杂的超标量单处理器性能的处理速度。在图4中可以看到本发明的多处理器系统应用的由译码器308解码的一个指令,它除了可以将输出403存储到处理器的寄存器文件、程序计数器或存储器中之外,也可以指定将其输出存储到当前运行的处理器的结果缓冲器。在图4中同样可以看出,本发明的多处理器系统应用的一条指令的输入值402除了可以从存储器或处理器寄存器文件提取之外,还可以指定取自一个远程处理器的结果缓冲器。
操作计数器307包含一个操作计数值,这个操作计数值为执行部件304执行的每个或每一组指令提供了一个唯一的计数值。操作计数器307在其处理器执行完一定的指令后递增。详细描述如下:至少在向结果缓冲器306存入输出值的指令被执行部件304执行后,操作计数器307才递增。此外,要做一定的先期准备以同步多处理器301、312、321间的操作计数器307。可以看出,根据具体的实施例,这种同步可以有不同的实现方法。例如在最佳实施例中,指令集结构中加入的一些指令,它们可将多处理器系统中一系列特定的处理器的所有操作计数器置为任何值(然后清除相关的结果缓冲器),可以使不同的处理器的操作计数器同步。在另外一个实施例中,处理器的内部机制根据一定的并不与指令的执行直接相关的事件的发生,而将多处理器系统中的一系列处理器的所有的操作计数器置为任意值(并且清除相关的结果缓冲器)。当这种所选择的指令在执行部件304中执行时,操作计数器307所含的操作计数值值递增1,其他情况下保持不变。正如最佳实施例中所实行的,当每条指令指定一个输出要被存储到结果缓冲器306时,操作计数器必须递增。
下面将给出两种管理结果缓冲器入口分配和解除分配的方法。视具体实施例的需要两者任意一个都可能是适合的。
第一个方法(M1),见图5、图6、图7所示,使用了一个“使用计数值”(usage count)。每当一个结果缓冲器入口被分配,产生将要存储到此入口的结果的指令确定一个使用计数值。这个使用计数值表示此结果可以被一个或多个后继指令引用的次数。这样,当这个结果被引用了使用计数值所确定的次数后便不再需要了,此结果缓冲器入口也可以被释放了。
第二种方法(M2),见图8、图9、图10所示,用限制系统中处理器操作计数值间差值的办法来保证没有处理器能够重写其他处理器还要读的结果。例如,如果每个处理器的结果缓冲器有16个入口,特定的处理器以其最快速度向其结果缓冲器写入数据(也就是说,每个操作计数值一个结果),那么每次它写入结果到结果缓冲器实际上都是在重写当操作计数值等于当前操作计数值减去16时它写进去的结果。进一步来讲,如果处理器(A)可以利用操作计数值偏移量(operation count displacement)-1到-4从另一个处理器(B)的结果缓冲器中读取结果,那么处理器(A)就可以在另一个处理器(B)的操作计数值等于处理器(A)操作计数值减4时在另一个处理器(B)的结果缓冲器中读取处理器(B)产生的结果。这样一来,如果系统中任何两个处理器操作计数值之间的差值都被禁止超过11的话,那么就不可能出现某个处理器重写其他处理器还要读的结果缓冲器入口的情况了。
方法M1使得相关处理器进程增加了自由度,而方法M2因不再需要预先计算使用计数值和可能在多条件代码路径(multiple condtional codepath)间权衡对结果的引用而使得编译器的任务大大简化。
现在来看图5,根据本发明的最佳实施例,这里给出了一个本地结果缓冲器306的逻辑结构。结果缓冲器由离散(discrete)编号的入口构成,每个入口可以被分配来保存一个输出值,并在此值不再需要时被释放。已分配的入口501是结果缓冲器306的多个入口之一,它存储一个输出值502和一个使用计数值306。当入口在结果缓冲器中分配时一个给定的入口501唯一关联于处理器的当前操作计数值504。可以看出,这种关联可以通过不同方式来完成。比较适宜的是,特定的操作计数器同特定的缓冲器入口唯一地关连,这样一个输出值只会在相关操作计数值存在于操作计数器中时被存入那个入口,比如在直接映像构形(direct-mapped configuration)中。在最佳实施例中,结果缓冲器306象一个直接映像高速缓存(direct-mappedcache)一样工作,该结果缓冲器中每一个入口都被直接映射到一个特定的操作计数值。它利用了半数寄存器文件资源,因为执行在ILP模式下时,可寻址的寄存器数目减少了一半,这会在以后讲到。在另一可选实施例中,结果缓冲器可以配置为相联存储器(associative memory)。使用计数值503或引用计数表示此相关输出值502可以被一个或多个处理器中的相关指令作为输入值引用的次数(也就是数据可以被其他指令引用的次数)。使用计数值为零表示结果缓冲器入口中存储的值不再需要了,此入口可以被再分配了。
现在看图6,图6是当本发明的多处理器中一条指令指定一个输出403要存到本地结果缓冲器306中时,数据处理方法的流程演示。过程开始于步骤600,然后如步骤601所示在多处理器中的一个处理器中开始进行指令解码和执行。被执行的指令产生一个输出值和此输出值的使用计数值,并递增执行该指令的处理器的操作计数器的值。在步骤602,处理此指令的处理器试图在其结果缓冲器中分配一个入口来存储输出值。分配入口必须与存储在处理器的操作计数器中的当前操作计数值关联。这使得后期操作可以通过重建合适的操作计数值(并以此作为一个结果缓冲器入口索引关键字)访问结果缓冲器中的入口。如果分配尝试失败,处理器在步骤603阻塞,并回到步骤602重试直到成功为止。如果分配尝试成功,接着在步骤604,步骤601产生的输出值和使用计数值被存入入口。过程在步骤605结束。
现在来看图7,图7是根据本发明的最佳实施例,本发明的多处理器系统中,当一指令指定输入402要从一远程处理器的结果缓冲器306的一个入口提取时,数据处理过程的流程图。实际上,本发明中所使用的术语“远程处理器”可以指一个当前不执行指令的处理器,也可以指正在执行指令的处理器。过程开始于步骤700,然后进行步骤701,在这里处理器对指令进行解码,从指令输入域402中提取出一个处理器标志(PID)和一个偏移量(DISP)。在步骤702,偏移量和处理器的操作计数值组合起来组成一个访问关键字。在步骤703,取得步骤701中的处理器标志所标识的远程处理器的操作计数值。在步骤704中,步骤702中形成的访问关键字与步骤703中获取的远程操作计数值做比较。如果访问关键字大于远程操作计数值,则在步骤705中处理器阻塞,并重新回到步骤703和704,直到访问关键字小于或等于远程操作计数值为止。如果访问关键字小于或等于远程操作计数值,那么在步骤706中,步骤702中产生的访问关键字用于访问由处理器标志确定的处理器的结果缓冲器中选定入口。
这样可以看出,偏移量是当前指令执行时的操作计数值和从远程处理器检索产生输入值并将远程处理器的存储到其结果缓冲器时的操作计数值之间的相对差值。计算访问关键字以在远程输入值产生时给出实际操作计数的值。通过进程阻塞(步骤705),直到远程操作计数值大于或等于访问关键字(步骤704),就可以保证从远程处理器结果缓冲区取出的结果是取自期望的结果产生之后,而非在其产生之前。通过这种方式,可以使得本发明中的处理器避免在正确的结果被存入远程缓冲器之前过早地从中提取输入值。此外可以看出,因为多处理器系统的操作计数器已经被同步,访问关键字不仅提供远程结果值产生时的操作计数值,而且还提供远程结果缓冲器中存储这些结果的入口索引值。这是因为远程处理器按照图6所示操作流程图工作,并且根据那个处理器的当前操作计数值相关的输出值分配入口。结果,就保证在远程结果缓冲器中通过访问关键字作为索引访问的入口能从该处理器入口取出正确的输出值(步骤707)。
在步骤708,与远程结果缓冲器所访问的入口关联的使用(引用)计数值被减去1。在步骤709中,如果被减使用计数值已为零,那么在步骤710在远程结果缓冲器中的此入口将从该结果缓冲器被释放以供后继分配使用;如不为零,那么在步骤711,紧接着处理器中需要此远程结果作为输入值的指令将被执行,步骤707中取出的输出值作为其输入值。其后,过程在步骤712终止。
图8、9、10与图5、6、7不同之处在于,它们阐述了管理结果缓冲器入口分配和释放的第二种方法(M2),这种方法并不需要使用计数值和每一个结果缓冲器入口相关连。在许多方面,图8、9、10都显示出与图5、6、7相同的内容,图8、9、10中的编号方案与图5、6、7的也对应。不再详细地描述图8、9、10的全部内容(这是多余的),而代之以只讲述图8、9、10和图5、6、7中相应的不同之处。以下没有提到的部分应视为同图5、6、7中的相应部分一致。
现在来看图8,方法M2与M1的不同之处在于,M2的结果缓冲器入口中没有包含使用计数值。方法M2中,产生将要存储到结果缓冲器的结果的指令并不指定一个使用计数值。因此没有使用计数值写入结果缓冲器入口,结果缓冲器入口也没有保持此使用计数值的机制。
现在来看图9,方法M2在以下方面有别与方法M1。在步骤901,指令不象步骤601那样产生使用计数值。在步骤902,当前处理器操作计数值同另一个处理器的操作计数值相比较。用OCD来表示当前处理器操作计数值同操作计数值最小的那个处理器的操作计数值之间的差值。用D来表示最大的偏移量,在生成关键字(象图7中步骤702一样)时可能会用到。举例来说,如果DISP字段取值范围为-1到-4,D就是4。用RE来表示每个处理器结果缓冲器入口的数量。给定值OCD、D和RE,步骤902操作如下:如果OCD与D之和小于RE,一个入口可以被分配,控制转向步骤904,否则,可能不分配入口,并且控制将转向步骤903。在步骤904,不象步骤604,使用计数值不存入新近分配结果缓冲器的入口中。
现在再看图10,方法M2与方法M1的区别在于:图7中进行使用计数值处理和结果缓冲器入口释放的步骤708、709、710在图10中没有相似步骤。更确切地说,在方法M2中,如图10示,控制从步骤1007直接转向步骤1011。这是因为在方法M2中,从结果缓冲器入口读取值的指令实际上并不参与入口的释放。更确切地说,一旦其相关操作计数值超出(任何处理器用于合成关键字的)操作计数值范围时(见图7步骤702),入口就被隐含地释放了。指令集结构实例
为便于阐述本发明,现在给出一个关于本发明中操作的计算机指令集结构实例。首先,给出代表现有技术的一个假想的计算机指令集结构(A)。然后,一段为现有技术假想结构(A)编码的示例程序,和此程序在一系列典型计算机实现上的执行将被讨论到。再下一步,假想指令集结构将被扩展为(A′)以用于本发明最佳实施例的多处理器系统。然后,示例程序段将为扩展的用于本发明最佳实施例的计算机指令集结构(A′)重新编码,并且讨论一下这段重新编码的程序段在根据本发明最佳实施例的一个多处理器计算机系统上的执行。
设定假想计算机指令集结构(A)是一个存储程序机,带有可寻址存储器(M),一组32个高速缓冲器用以保存数据值,也就是通用寄存器(R),用以保存条件编码的一组8个高速缓冲器(CR),和一个程序计数器(PC),它包含有下一条将要执行的指令(I)在存储器(M)中的地址。指令(I)的类型分为以下几类:
1.ALU(算术/逻辑)指令,它的编码包含一个操作码(例如:加,减,乘等),两个输入寄存器名(例如:用两个5位的值来指明32个通用寄存器中的两个,作为操作输入的数据值将取自这些通用寄存器),和一个输出寄存器名(指出用来存放操作所产生的数据值的寄存器);
2.ALU/立即(Immediate)指令,除了一个输入寄存器名被一个立即数取代之外,它与ALU指令完全相同,立即数直接编码于指令中;
3.加载(Load)指令,它的编码包含一个操作码,一个偏移量,一个输入寄存器名(偏移量和寄存器名指定的寄存器中的值相加来确定存储器中的一个存储单元,从此单元取出一个数据值),和一个输出寄存器名(指定用来存放从存储器取出的数值的寄存器);
4.存储(Store)指令,它的编码包含一个操作码,一个偏移量,一个输入寄存器名(偏移量和寄存器名指定的寄存器中的值相加来确定存储器中的一个存储单元,向此单元存放一个数据值),和另一个输入寄存器名(指定用于检索放置到存储器中的数据值的寄存器);
5.测试(Test)指令,它的编码包含一个操作码,它指定一个逻辑测试,两个输入寄存器名确定两个寄存器,所含的两个值将被比较,一个输出条件编码寄存器(CR)名(指定8个条件编码槽的那一个被设置以指明测试结果);
6.Test/立即(Immediate)指令,除了一个输入寄存器名被一个立即数取代之外,它与Test指令完全相同,立即数直接编码于指令中;
7.控制流(Control-Flow)指令,它的编码包含一个操作码,指定引发(PC)被设置指向存储器中的一个新单元的准则,一个输入条件代码寄存器名,该寄存器的值限于上面的准则,和一个新存储器单元的描述,如果上述准则满足下一条指令将从访该所在了储单元中取出。实例程序段
以下定义一个为假想计算机指令集结构(A)而写的程序片断。汇编助记符和伪代码被混合使用来代表算法特征和其机器指令形式的实现,对于熟练的技术人员来说很容易理解。对应于特定指令的ID以后用于简洁地代表此指令。初始状态:寄存器R2包含数据在存储器中的基地址标号        操作码           操作数             IDSTART       LOAD        R1<—MEM(R2+OFFSET1)    I1
        LOAD        R3<—MEM(R2+OFFSET2)    I2
        ADD         R4<—R1,R3             I3
        LOAD        R5<—MEM(R2+OFFSET3)    I4
        SUB         R6<—R5,DELTA1         I5
        MULT        R7<—R4,R6             I6
        LOAD        R8<—MEM(R2+OFFSET4)    I7
        CMP         C1<—R7,R8             I8
        BLE         C1—>PART2              I9
        ADD         R9<—R7,DELTA2         I10LOOP        LOAD        R10<—MEM(R7+OFFSET5)   I11
        ADD         R11<—R10,R9           I12
        SUB         R12<—R10,DELTA3       I13
        LOAD        R13<—MEM(R7+OFFSET6)   I14
        ADD         R14<—R13,R9           I15
        SUB         R15<—R13,DELTA4       I16
        MULT        R16<—R11,R15          I17
        MULT        R17<—R12,R14          I18
        CMP         C2<—R14,R11           I19
     BLE          C2—>PART3                    I20
     STORE        R16—>MEM(R7+OFFSET5)         I21
     ADD          R18<—R17,R16                I22
     STORE        R18—>MEM(R7+OFFSET6)         I23
     B               —>PART4                   I24PART3    STORE        R17—>MEM(R7+OFFSET5)         I25
     SUB          R18<—R17,R16                I26
     STORE        R18—>MEM(R7+OFFSET6)         I27PART4    ADD          R7<—R7,DELTA5               I28
     CMP          C3<—R7,LIMIT                I29
     BLE          C3—>LOOP                     I30PART2    STORE        R7—>MEM(R2+OFFSET1)          I31
     EXIT执行时序(Execution Timings)
由于指令执行时序因高速缓存失效、分支预测(branch prediction)、推理执行(speculative execution)等因素而会引入复杂性,本例之时序便有以下简化假设:a)所有加载、存储和指令提取都在高速缓存中命中(hitin the cache),这样就使得没有阻塞周期(stall cycle);b)执行开始之前,控制流依赖(control flow dependencies)必须已经解决,这样就消除了分支预测和推理执行等因素。这些因素的影响将在比较(A)和(A′)的时序时予以讨论。注意无条件分支(I24)是折转的(Folded),不会导致不利后果,也不需依赖条件。因为程序段的可能执行路径有很多,这里只给出了一种,其中主循环(I11至I30)循环两次,第一次循环接受指令(I20)的转移路径,第二次循环不接受指令(I20)的转移路径。
实例程序段的执行时序将与两个采用计算机指令集结构(A)的现有技术计算机组织协同讲解,其中一种结构被称为“简单(simple)”,具有一个执行部件,能够在每个周期执行一条指令,并且必须按照从存储器读取指令的顺序执行指令;另一种结构被称为“复杂(complex)”,具有多个执行部件,能够在一个周期以任何顺序,仅服从于为使之能在给定周期内执行的限制执行四条(仅举例)指令。一条指令的所有数据和控制流依赖条件都必须在前一个周期中或之前被满足。“简单”机实现的执行时序周期       执行部件01             I12             I23             I34             I45             I56             I67             I78             I89             I9(不接受)10            I1011            I1112            I1213            I1314            I1415            I1516            I1617            I1718            I1819            I1920            I20(接受)21            I2522            I2623            I2724            I2825            I2926            I30(接受)  27            I1128            I1229            I1330            I1431            I1532            I1633            I1734            I1835            I1936            I20(不接受)37            I2138            I2239            I2340            I24(折转)41            I2842            I2943            I30(不接受)44            I31“复杂”机实现的执行时序周期      执行部件0      执行部件1    执行部件2     执行部件31          I1             I2           I4            I72          I3             I53          I64          I85          I9(不接受)6          I10            I11          I147          I12            I13          I15           I168          I18            I17          I199          I20(接受)  10        I25            I26          I2811        I27            I2712        I30(接受)13        I11            I1414        I12            I13          I15        I1615        I17            I18          I1916        I20(不接受)17        I21            I22          I28        I24(折转)18        I23            I2919        I30(不接受)20        I31
在这个例子中,(A)的简单实现共用44个周期来执行此程序段,而其复杂实现仅用20个周期。因此,构造复杂机(complex machine)来执行体现ILP(正如这段代码所体现的)的算法具有性能上的优势。虽然这个优势的一部分考虑到有限的存储效率(finite storage effects)而要被打折扣,但产业趋势显示计算机制造商依旧认为开发复杂处理器的巨大的风险和费用是值得的。一面在欣赏简单机的低设计费用和低复杂度,另一面下一节还是要说明本发明是如何为复杂机提供某些性能增益的。本发明的指令集结构
本发明的具体实施可以作为一个新的指令集结构,这在极大简化的机器结构基础上提供了广泛的功能,也可以作为现有指令集结构的一个扩展,这使得前述结构SMP结构的多处理器更快速地协同求解单线程问题(single tbreaded problem)。在本例中,后者是通过显示本发明机制和假想计算机指令结构(A)的结合产生了(A′)来说明的。并且,为了更加全面地描述结果缓冲器管理方法M1的附加的编程的需求,最佳实施例也采用了方法M1。
图4显示出,指令编码被扩展了,这使得指令的输出可以路由选择到处理器的结果缓冲器,指令输入值也可以取自当前正在运行的处理器,或是远程处理器的结果缓冲器。本实施例扩展了这个指令集:(通过5位编码名字)指定寄存器作为输入或输出的指令可以指定或者1)16个通用寄存器的一个,或者2)结果缓冲器作为输入或输出。应该指出的是,本发明提供了一种每一个操作计数值有且只有一个结果写入结果缓冲器的方法,因此,在这种情况下就是每一条指令有一个结果写入。前面已经解释了,当该入口的数据存入结果缓冲器时,结果缓冲器的入口逻辑上是与处理器操作计数值相关联的。在最佳实施例中,有16个结果缓冲器入口以循环方式同16个操作计数值相关联。于是,当下一个操作计数值出现的时候,结果数据就被存入到结果缓冲器的第一个入口中(假设前一数据的使用计数值已经为0)。修改多个通用寄存器的指令(比如LOAD指令自动更新一个索引寄存器)只可以向结果缓冲器写入一个输出数据。最佳实施例的输入/输出操作编码如下所述:(A)的5位操作输入/输出编码输入:′RRRRR′:通过RRRRR来确定32个寄存器中的一个输出:′RRRRR′:通过RRRRR来确定32个寄存器中的一个(A′)的5位操作输入/输出编码输入:′0RRRR′:通过RRRR来确定16个寄存器中的一个
  ′1PPDD′:通过PP来确定4个处理器中的一个中的结果缓冲器
             通过DD来确定操作计数值偏移量(-4到-1)输出:′0RRRR′:通过RRRR来确定16个寄存器中的一个
  ′1CCCC′:确定本地处理器的结果缓冲器
             通过CCCC来确定结果的使用计数值(0到15)
虽然这样实际上将现有设计处理器的可用通用寄存器数减去一半,但是本发明提供了多处理器之间以缓冲方式,和以只有传统地与本地寄存器文件交互方式才能达到的高带宽相互通讯的能力。本发明的机能也可以通过处理器设计中加入结果缓冲器寄存器(result buffer register)的方式实现。
同时这里应该指出,为求简便,本例中的假想机不提供多数机器都提供的浮点寄存器文件。但是,应用通用寄存器编码于通用结果缓冲器的技术同样适用于浮点寄存器编码和浮点结果缓冲器。同样,此述假想机指定测试(TEST)指令结果存入8个条件编码寄存器中的一个,并且控制流指令从这些寄存器中读取输入。正如本发明对通用寄存器编码进行扩展一样,条件编码寄存器编码也可以被扩展。(A)的3位操作输入/输出编码输入:′RRR′:通过RRR来确定8个条件编码寄存器(CR)中的一个输出:′RRR′:通过RRR来确定8个条件编码寄存器(CR)中的一个(A′)的3位操作输入/输出编码输入:′0RR′:通过RR来确定4个条件编码寄存器(CR)中的一个
  ′1PP′:通过PP来确定4个处理器中的一个的结果缓冲器
           确定操作计数值偏移量-1输出:′0RR′:通过RR来确定4个条件编码寄存器中的一个
  ′1CC′:确定本地处理器的结果缓冲器
           通过CC来确定结果的使用计数值(0到3)
这里应该注意,(本实施例中用以选择4个处理器之一的)处理器字段实际上并不限制通过本发明进行互连的处理器总数。确切地讲,它只限定一个处理器只能直接与相邻的4个(有一个是自己)进行交互。根据具体需求,多种实施例可以采用处理器间连接(inter-processor connection)拓扑结构以满足要求。为了更加有效地讲解本发明,本实施例采用一个简单的拓扑结构。虽然本发明并未排除不限数量处理器的使用,为求简便,通过将每一个虚拟处理器直接映射到4个处理器中的一个,本实施例限定编译器于将给定程序在4台虚拟处理器之间分配。这样,上述两个(PP)位提供了一种命名SMP中4个物理处理器之一的方法(事实上本发明并不需要共享存储器,并且可以使用于一些处理器包含专用存储器的应用实例中)。
还应该指出,这里给出的精确的编码实际上是相当随意的,只是为更好地理解本发明进行讲解而顺便给出的。本例的编码和结构不应该限制本发明的应用范围,此处详述仅为讲解之目的。
正如上所述,不同的实施例会使得操作计数值在不同情况下递增,先决条件是至少每当一个结果写入结果缓冲器时应该递增。
本发明实施例变形包括但并不限于以下各项:
a)当每条指令执行后递增操作计数值值;
b)仅当向结果缓冲器写入一个结果的指令执行后递增操作计数值值;
c)仅当从结果缓冲器中读出一个或多个输入值和/或向结果缓冲器写入一个结果值的指令执行后递增操作计数值值;
d)给每条指令增加一个标志码指定指令执行后是否递增操作计数值值;
e)给每条指令增加一个字段指定一个偏移量(0到n),指令执行后偏移量加到操作计数值值上;
f)将多种操作方式集中到指令集结构中,任何指令可以采用前述变形中的一个。
熟练的技术人员会注意到,以给定的操作计数值、结合机器实施中处理器通过操作计数值以任意速率(在它们不因未产生的数据值或不能分配结果缓冲器入口存储输出值而阻塞的范围内)进行的允许限度来关联任意长度的指令组的能力提供了处理器即使是在它们的相邻处理器因为非先行(unanticipant)执行时间因素,例如高速缓存失效或错误预测分支,而处于阻塞状态时仍能继续行进的方法。比之同步(或锁步)ILP执行技术,例如VPIW(very long instruction word超长指令字),其中同步执行指令组中的任何指令都可能阻塞并导致组内所有指令阻塞,本发明的这种异步特性是有着明显优势的。
还应该注意的是,尽管编程人员认为操作计数值是一个可以不受约束增长的值,但硬件实现上操作计数值可以用很少的位数来表示,每当达到最大值后便回零。这是可能的,因为操作计数值的实际数值并不是重要的,操作计数值与系统中其他处理器操作计数值的相对差值才是重要的。因为任何两个处理器操作计数值之间的相对差值都受到数据依赖(datadependencies)和缓冲器分配的限制,系统中任何两个处理器操作计数值差值的最大值是已知的。只要这个差值能够用给定的硬件实现来表示,这个实现就能够正确地工作。
为求简便,在本实施例中,处理器每执行一条指令增大一次操作计数值。这当然就意味着为保持同步,每一个处理器必须执行相同数量的指令;这样,编译器必须插入一些空操作指令(no-ops)以保持操作计数值平衡。
如上所述,本发明的一个正确的实施例需要一些手段来使处理器处于可知的状态以保证它们能够正确地通信。为服务于此目标,本实施例引入了一个新的用户级指令,一个新的监控级(supervisor level)指令和一个新的异常类型如下所述:
一个SPAWN指令,确定4处理器中的一个和一个指令地址。如果指定的处理器就是执行SPAWN指令的处理器,它的操作计数将被置为0,它的结果缓冲器将被清空(也就是说所有的使用计数值将被置为零),程序计数器(PC)被设置为开始从新指定的指令地址取下一条指令。如果指定处理器(PS)不是执行SPAWN指令的处理器(PE),那么(PS)的操作计数值(OC)被置为(PE)的操作计数值,(PS)的结果缓冲器被清除,(PS)的程序计数器(PC)被设置为开始从新指定的指令地址取下一条指令。
通过使用SPAWN指令,一个处理器执行的一序列指令能够启动和同步另一处理器上指令序列的执行。重复这个过程,所有的处理器都能够启动和同步相互依赖的指令序列的并行执行。
一个PREEMPT指令,它是监控级指令。它指定一个处理器,一个PREEMP异常将发布给它。它被设计以使得核心调度器(kernel dispatcher)能引发所有执行相互依赖的线程的处理器的任务切换开关。
一个PREEMP异常,象其他异常一样,使得被中断处理器停止执行当前指令流并且开始执行由异常矢量所指向的指令。如上所述,它是在另一个处理器执行一条PRERMP指令时被引发的,它被设计以保证构成一个任务的所有相互依赖线程被核心调度器一致地切换。本发明扩展的指令集结构ISA(A′)重编码的示例程序段
以下将给出为本发明的多处理器实施例上的执行而重新编码的示例程序段。并定义了附加于先前例子中使用的标准的伪代码汇编程序助记符的扩展。这些扩展提供给编程者一种表示(A′)中可用的扩展的便于记忆的方法。
动作                                 助记符向结果缓冲器写入一个数据                 DRB(c)<-…
使用计数值c向结果缓冲器写入一个条件编               CRB(c)<-…
使用计数值c从处理器p的结果缓冲器中读出一个数据      …<-DRBp(d)
操作计数值偏移d(-4,-3,-2,-1)      DRBp(d)->…从处理器p结果缓冲器中读出一个条件编      CRBp(-1)->…
操作计数值偏移为-1处理器0代码段初始状态:CPU0的DRB(0)包含基地址,使用计数值为3
      CPU0的寄存器R2也包含同样的基地址标号   操作码   操作数                              ID
   SPAWN    CPU1-->STRM1                        IA
   SPAWN    CPU2-->STRM2                        IBSTRMO  LOAD     R1<--MEM(R2+OFFSET1)                I1
   ADD      DRB(1)<-R1,DRB(-1)                 I3
   NOOP                                         IC
   COPY     R7<--DRB2(-1)                       ID
   BLE      CRB3(-1)-->PART20                   I9
   ADD      R9<--R7,DELTA2                     I10LOOP0    NOOP                                    IE
     ADD      DRB(2)<-DRB1(-1),R9           I12
     MULT     DRB(2)<-DRB0(-1),DRB2(-1)     I17
     BLE      CRB3(-1)-->PART30              I20
     STORE    DRB0(-2)->MEM(R7+OFFSET5)      I21
     ADD      R7<--R7,DELTA5                I28a
     BLE      CRB2(-1)-->LOOP0               I30a
     B        -------->PART20                IFPART30   STORE    DRB1(-2)->MEM(R7+OFFSET5)      I25
     ADD      R7<--R7,DELTA5                I28b
     BLE      CRB2(-1)-->LOOP0               I30bPART20   STORE    R7-->MEM(R2+OFFSET1)           I31
     EXIT处理器1代码段标号     操作码   操作数                              ID
     SPAWN    CPU3-->STRM3                        IGSTRM1    LOAD     DRB(1)<-MEM(DRB0(-3)+OFFSET2)       I2
     NOOP                                         IH
     NOOP                                         II
     COPY     R7<--DRB2(-1)                       IJ
     BLE      CRB3(-1)-->PART21                   I9
     NOOP                                         IKLOOP1    LOAD     DRB(2)<-MEM(R7+OFFSET5)             I11
     SUB      R12<--DRB1(-1),DELTA3              I13
     MULT     DRB(2)<-R12,DRB3(-1)               I18
     BLE      CRB3(-1)-->PART31                   IL
     NOOP     <--DRB1(-2)                         IM
    ADD       R7<--R7,DELTA5                I28a
    BLE       CRB2(-1)-->LOOP1               I30a
    B         ---------->PART21              INPART31  NOOP      <--DRB0(-2)                    IO
    ADD       R7<--R7,DELTA5                I28b
    BLE       CRB2(-1)-->LOOP1               I30bPART21  NOOP                                     IP
    EXIT处理器2代码段标号   操作码     操作数                         IDSTRM2   LOAD      R5<--MEM(DRB0(-3)+OFFSET3)     I4
    SUB       R6<--R5,DELTA1                I5
    MULT      DRB(5)<-DRB0(-1),R6           I6
    COPY      R7<--DRB2(-1)                  IQ
    BLE       CRB3(-1)-->PART22              I9
    NOOP                                     IRLOOP2   LOAD      DRB(2)<-MEM(R7+OFFSET6)        I14
    SUB       DRB(1)<-DRB2(-1),DELTA4       I16
    COPY      DRB(1)<-R7                     IS
    NOOP                                     IT
    ADD       R7<--R7,DELTA5                I28
    CMP       CRB(4)<-R7,LIMIT              I29
    BLE       CRB2(-1)-->LOOP2               I30
    NOOP                                     IUPART22  NOOP                                     IV
    EXIT处理器3代码段标号      操作码        操作数                                IDSTRM3     LOAD          R8<--MEM(DRB0(-3)+OFFSET4)            I7
      NOOP                                                IW
      NOOP                                                IX
      CMP           CRB(4)<-DRB2(-1),R8                  I8
      BLE           CRB3(-1)-->PART23                     I9
      ADD           R9<--DRB2(-3),DELTA2                 I10LOOP3     NOOP                                                IY
      ADD           DRB(2)<-DRB2(-1),R9                  I15
      CMP           CRB(3)<-DRB3(-1),DRB0(-1)            I19
      BLE           CRB3(-1)-->PART33                     I20
      ADD           R15<--DRB0(-2),DRB1(-2)              I22
      STORE         R15->MEM(DRB2(-3)+OFFSET6)            I23
      BLE           CRB2(-1)-->LOOP3                      I30a
      B             ----------->PART23                    IZPART33    SUB           R15<--DRB0(-2),DRB1(-2)              I26
      STORE         R15->MEM(DRB2(-3)+OFFSET6)            I27
      BLE           CRB2(-1)-->LOOP3                      I30bPART23    NOOP                                                IAA
      FXIT
重编码程序段中出现了许多原有程序段中没有的指令。并且,原有的程序段中的一些指令也出现在不止一个重编码段中。下面给出简要说明。
处理器0和处理器1程序段开始处的SPAWN指令初始化并同步这四个相互依赖指令流。
原有程序段的指令I20开始的条件路径(conditional path)被稍做修改重新编码(保持了原有的功能)以简化流的分配。除了与重编码有关的异常之外,原有程序段中的控制流指令会出现在所有重编码相互依赖程序段中。因为四个相互依赖程序都必须遵循相同的控制流路径以保持同步,所以这是有道理的。
使用结果缓冲器使得四个相互依赖程序之间可以进行通信,但有些通过结果缓冲器的数据具有比较长久的特性,必须把它从结果缓冲器中移至通用寄存器中以供以后使用。因此,就增加了一些完全是为了把数据值从结果缓冲器转移至通用寄存器的指令。
如先前提到过的,因为本发明实施例(仅为易于理解而示)在每条指令执行后将引发处理器操作计数值递增,在这特定的实施例中就必需一些空操作(no-op)指令来保证每个相互依赖代码段执行了相同数量的指令,以维持同其他处理器相同的操作计数值。
最后,因为写入结果缓冲器的数据值必须被一定数量(使用计数值指定)的指令来使用,所以为条件路径增加了IL指令和IN指令,以保证数据被使用正确的次数(使得使用计数值达到零),通常它们并不使用该数值。需要着重注意的是,实现结果缓冲器管理方法M2的实施例没有使用计数值,所以并没有这样的限制。执行时序
以下一个周期一个周期地显示了四个相互依赖程序段在(如前所述的本实施例扩充的SMP的)四个“简单”处理器上同时执行的过程。注意给出的时序采取前一时序实例的简单形式,并遵循前一时序实例的执行路径。本发明扩展ISA示例相互依赖程序段执行时序周期        CPU0     CPU1      CPU2       CPU31          IA       ?        ?         ?2          IB       IG        ?         ?3          I1       I2        I4         I74          I3       IH        I5         IV5          IC       II        I6         IW6          ID       IJ        IP         I87          I9(N)    I9(N)     I9(N)      I9(N)8           I10          IK           IQ           I109           IE           I11          I14          IX10          I12          I13          I16          I1511          I17          I18          IR           I1912          I20(T)       I20(T)       IS           I20(T)13          I25          IN           I28          I2614          I28b         I28b         I29          I2715          I30b(T)      I30b(T)      I30(T)       I30b(T)16          IE           I11          I14          IX17          I12          I13          I16          I1518          I17          I18          IR           I1919          I20(N)       I20(N)       IS           I20(N)20          I21          IL           I28          I2221          I28a         I28a         I29          I2322          130a(N)      130a(N)      130(N)       130a(N)23          IF           IM           IT           IY24          I31          IO           IU           IZ
从上例可以看出,现有技术ISA(A)执行此程序段需要44周期,当按照本实施例扩展为ISA(A′),程序段被在四个处理器(每一个都是(A′)的一个简单实现)间分配时,根据最佳实施例,共要花费24个周期来执行这个分布程序段(包括预先执行的同步指令)。这十分接近于(A)的复杂实现(也就是超标量处理器)的20周期执行时间水平。
因仔细考虑到因高速缓存失效、错误分支预测或其他因素引起的非先行阻塞条件,本发明实施例,因其异步特性,更主动地执行无序指令时,表现出与超标量处理器相同的性能特性,也就是它们继续执行尽可能多的指令,不理会有一条指令正在阻塞。
例如,本发明实施例中,所有四个指令该在同一周期执行LOAD指令是可能的。如果四个当中的一个未命中高速缓存,其余三个仍然可以继续执行后续的指令(当然,前提是不存在阻塞指令流上的依赖)。这样,其余三个继续执行指令,其中某个仍可能是LOAD指令,可能命中高速缓存或者未命中。这种情况等效于单一“复杂”处理器遇到高速缓存失效后无序地执行非依赖指令。
在错误分支预测情况下,前述本发明实施例扩展的SMP上执行的相互依赖流多个同时执行分支将遇到“复杂”处理器错误分支预测时遇到的同样的不良后果。
作为另一项选择,可以应用本发明所授的技术来利用SPAWN指令,建立预测分支的另一个指令流,使得不论接受路径或不接受路径都可以继续同时执行,直到分支条件被求解后其中一个指令流就可以被中断掉了。这种途径模拟了在一些“复杂”处理器中可见到的完善推测执行(sophisticated speculative execution)性能。
尽管本发明已经通过一个最佳实施例详细地描述,对于熟练的技术人员来说在不背离本发明精神和范围基础上做一定形式和细节上的改变是容易理解的。

Claims (18)

1.一种处理数据的装置,包括:
一个执行部件,其中所述执行部件执行一条指令从而产生一个输出值;
包含多个入口的结果缓冲器,每个入口被分配以保存所述执行部件执行一条指令所产生的一个输出值;以及
包含一个操作计数值的一个操作计数器,该操作计数值至少在所述执行部件执行向所述结果缓冲器中存入一个输出值的一条指令之后递增,所述指令与所述操作计数器中包含的一个唯一的操作计数值相关,其中响应与产生输出值的该指令相关的所述唯一操作计数值为该输出值分配所述结果缓冲器中的一个特定入口。
2.权利要求1的装置,其特征在于所述结果缓冲器中每一个输出值与一个使用计数值关联存储,其中,每一个使用计数值表示其关联输出值被其他一个或多个装置中所执行的指令指定作为输入值的次数。
3.权利要求1的装置,其特征在于还包括一个译码器,译码器从所述执行部件将要执行的指令中提取装置标志,标志确定多个装置中的一个,其中所述指令的一个或多个输入值从所述确定的装置的所述结果缓冲器中提取。
4.权利要求3的装置,其特征在于,所述译码器从所述执行部件要执行的所述指令中提取出偏移量,偏移量提供一个执行所述指令的装置的操作计数值和所述确定的装置的所期望操作计数之间的相对差值,所期望操作计数值是与在该确定的装置的结果缓冲器中为一个或多个输入值分配的入口相关联,其中,所述译码器根据所述偏移量和执行该指令的所述装置的操作计数值产生一个访问关键字,并从该已确定的装置的结果缓冲器与所述访问关键字相关的入口中取出一个输入值。
5.权利要求4的装置,其特征在于,所述偏移量被限制小于一个选定数量。
6.一个多处理器计算机系统,包括:
多个处理器,其中每个处理器包括:
一个执行部件,其中所述执行部件利用一个或多个输入值执行一条指令以产生一个输出值;
包含多个入口的结果缓冲器,每个入口被分配以保存所述执行部件执行一条指令所产生的一个输出值;
包含一个操作计数值的一个操作计数器,操作计数值至少在所述执行部件执行向所述结果缓冲器中存入一个输出值的一个指令时递增,其中当执行产生一个输出值的一条指令时响应所述操作计数值为该输出值分配所述结果缓冲器中的一个特定入口;以及
一个译码器,译码器从所述执行部件将要执行的一条指令中提取一个处理器标志,它确定所述多个处理器中的一个,其中所述指令的一个或多个输入值从所述已确定的处理器的所述结果缓冲器中检索。
7.权利要求6的多处理器计算机系统,其特征在于,在结果缓冲器中的每一个输出值都和一个使用计数值关联存储,其中使用计数值表示相关输出值被至少在所述其他多个处理器的一个上执行的另外一个指令指定作为输入值被使用的次数。
8.权利要求6的多处理器计算机系统,其特征在于,每个译码器从所述执行部件要执行的所述指令中抽取出偏移量,偏移量提供执行所述指令的处理器的操作计数值和所述已确定的处理器的所期望操作计数值之间的相对差值,所期望的操作计数值与所述已确定的处理器结果缓冲器中为所述的一个或多个输入值分配的入口相关联。其中,所述译码器根据所述偏移量和执行指令的所述处理器的操作计数值产生一个访问关键字,并从所述已确定处理器的所述结果缓冲器的与所述访问关键字相关的入口中取出一个输入值。
9.权利要求8的多处理器计算机系统,其特征在于,所述偏移量被限制小于一个所选定的数量。
10.权利要求6的多处理器计算机系统,其特征在于包括一个所述多个处理器可访问的共享存储器。
11.一种在数据处理器系统中处理数据的方法,包括:
执行一条指令,产生一个存储到结果缓冲器的输出值;
递增一个操作计数值;以及
存储此输出值于结果缓冲器的一个入口中,其中这个入口与已递增的操作计数值是相关联的。
12.权利要求11的方法,其特征在于还包括产生一个存储在结果缓冲器的与输出值相关联的使用计数值的步骤,其中此使用计数值表示相关输出值被至少一个其他处理器执行的其他指令作为输入值所使用的次数。
13.权利要求11的方法,其特征在于还包括在指令被执行之前对指令进行译码以提取一个确定多处理器中一个的处理器标志的步骤,其中该指令的一个或多个输入值将从所确定的处理器的结果缓冲器中检索出。
14.权利要求13的方法,其特征在于译码步骤包括提取出一个偏移量,偏移量提供一个执行指令的处理器的操作计数值和已确定的处理器的所期望的操作计数值之间的相对差值,所期望的操作计数与标志处理器结果缓冲器中为一个或多个输入值分配的入口相关联,还包括产生一个作为偏移量和执行指令的处理器的操作计数值的函数的访问关键字和从已确定的处理器的结果缓冲器的与此访问关键字关联的入口中取出输入值的步骤。
15.权利要求14的方法,其特征在于还包括步骤:
防止所述偏移量超出所选定的数量。
16.一种在具有多个处理器的多处理系统中存储一个结果的方法,该方法包括:
在多个处理器中的一个上执行产生一个结果的指令;
将与一个处理器相关的操作计数值递增,其中该结果通过与这个处理器和增加的操作计数值的关联被唯一确认;以及
在多处理系统中存储此结果,以便此结果在存储器中被多个处理器中的任何处理器通过此这个处理器和增加的操作计数值所定义的唯一标志进行访问。
17.权利要求16的方法,其特征在于还包括产生与此结果关联存储的使用计数值的步骤,其中使用计数值表示相关结果被其他在多个处理器的一个或多个上执行的其他指令指定作为输入值而使用的次数。
18.权利要求16的方法,其特征在于还包括防止所述多个处理器的操作计数值超过所选定数量的步骤。
CN97122499A 1996-12-16 1997-11-13 多处理器计算机系统中共享结果数据的方法,装置和系统 Expired - Lifetime CN1095133C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US767406 1996-12-16
US08/767,406 US5889947A (en) 1996-12-16 1996-12-16 Apparatus and method for executing instructions that select a storage location for output values in response to an operation count

Publications (2)

Publication Number Publication Date
CN1185609A CN1185609A (zh) 1998-06-24
CN1095133C true CN1095133C (zh) 2002-11-27

Family

ID=25079382

Family Applications (1)

Application Number Title Priority Date Filing Date
CN97122499A Expired - Lifetime CN1095133C (zh) 1996-12-16 1997-11-13 多处理器计算机系统中共享结果数据的方法,装置和系统

Country Status (5)

Country Link
US (1) US5889947A (zh)
JP (1) JPH10177559A (zh)
KR (1) KR19980063538A (zh)
CN (1) CN1095133C (zh)
TW (1) TW355771B (zh)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6188948B1 (en) 1998-10-02 2001-02-13 Navistar International Transportation Corp. Vehicle anti-lock brake systems assembly verification system
US6643763B1 (en) 2000-02-28 2003-11-04 International Business Machines Corporation Register pipe for multi-processing engine environment
JP3957948B2 (ja) * 2000-04-12 2007-08-15 富士通株式会社 演算処理装置
US6978309B1 (en) * 2000-07-31 2005-12-20 Cisco Technology, Inc. Method and system for reprogramming instructions for a switch
US6662253B1 (en) * 2000-09-13 2003-12-09 Stmicroelectronics, Inc. Shared peripheral architecture
US7069442B2 (en) * 2002-03-29 2006-06-27 Intel Corporation System and method for execution of a secured environment initialization instruction
US8606960B2 (en) * 2002-12-09 2013-12-10 Intel Corporation Method and apparatus for improving packet processing
US7395527B2 (en) 2003-09-30 2008-07-01 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses
US8381037B2 (en) * 2003-10-09 2013-02-19 International Business Machines Corporation Method and system for autonomic execution path selection in an application
JP4549652B2 (ja) * 2003-10-27 2010-09-22 パナソニック株式会社 プロセッサシステム
US7895382B2 (en) 2004-01-14 2011-02-22 International Business Machines Corporation Method and apparatus for qualifying collection of performance monitoring events by types of interrupt when interrupt occurs
US7415705B2 (en) 2004-01-14 2008-08-19 International Business Machines Corporation Autonomic method and apparatus for hardware assist for patching code
US9690581B2 (en) * 2013-10-15 2017-06-27 Mil Computing, Inc. Computer processor with deferred operations
KR101730991B1 (ko) 2014-10-28 2017-04-28 삼성전자주식회사 스토리지 장치 및 스토리지 장치의 동작 방법
US9928117B2 (en) * 2015-12-11 2018-03-27 Vivante Corporation Hardware access counters and event generation for coordinating multithreaded processing
US10776312B2 (en) * 2017-03-14 2020-09-15 Azurengine Technologies Zhuhai Inc. Shared memory access for a reconfigurable parallel processor with a plurality of chained memory ports
US11947802B1 (en) 2022-09-13 2024-04-02 Microsoft Technology Licensing, Llc Memory buffer management on hardware devices utilizing distributed decentralized memory buffer monitoring

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5237694A (en) * 1991-05-30 1993-08-17 Advanced Micro Devices, Inc. Processing system and method including lock buffer for controlling exclusive critical problem accesses by each processor
US5297255A (en) * 1987-07-28 1994-03-22 Hitachi, Ltd. Parallel computer comprised of processor elements having a local memory and an enhanced data transfer mechanism
US5535346A (en) * 1994-07-05 1996-07-09 Motorola, Inc. Data processor with future file with parallel update and method of operation

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS58114274A (ja) * 1981-12-28 1983-07-07 Hitachi Ltd デ−タ処理装置
US5347639A (en) * 1991-07-15 1994-09-13 International Business Machines Corporation Self-parallelizing computer system and method

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5297255A (en) * 1987-07-28 1994-03-22 Hitachi, Ltd. Parallel computer comprised of processor elements having a local memory and an enhanced data transfer mechanism
US5237694A (en) * 1991-05-30 1993-08-17 Advanced Micro Devices, Inc. Processing system and method including lock buffer for controlling exclusive critical problem accesses by each processor
US5535346A (en) * 1994-07-05 1996-07-09 Motorola, Inc. Data processor with future file with parallel update and method of operation

Also Published As

Publication number Publication date
KR19980063538A (ko) 1998-10-07
CN1185609A (zh) 1998-06-24
TW355771B (en) 1999-04-11
US5889947A (en) 1999-03-30
JPH10177559A (ja) 1998-06-30

Similar Documents

Publication Publication Date Title
CN1095133C (zh) 多处理器计算机系统中共享结果数据的方法,装置和系统
CN1127016C (zh) 计算机处理装置和方法
CN1185592C (zh) 并行处理器结构
CN101069161A (zh) 调度方法、调度装置和多处理器系统
CN1174313C (zh) 多指令集的数据处理
CN101051301A (zh) 用于操作计算机处理器阵列的方法和装置
CN1147785C (zh) 执行多个指令流的多程序流程同时处理器
CN1296818C (zh) 用于多线程并行处理器的指令
CN100340975C (zh) 计算机系统、编译器装置以及编译方法
Faraboschi et al. The latest word in digital and media processing
CN1749955A (zh) 控制处理器和协处理器间的数据传输的运算处理装置
CN1268688A (zh) 异步更新共享资源的接口系统和方法
CN1387641A (zh) 并行处理器中的多线程执行
CN1285064A (zh) 进行无序多线程执行的加载和存储指令排序系统
CN1273890C (zh) Arm处理器架构的微内核设计方法
CN1867891A (zh) 用于实时多线程处理的方法和装置
CN1514374A (zh) 变更高速缓存数据区段的方法与装置
CN1514373A (zh) 对高速缓存界线进行更名的装置与方法
Aditya et al. Elcor's machine description system: Version 3.0
CN1734415A (zh) 分枝预测装置及分枝预测方法
CN1225690C (zh) 快取线配置与初始化之装置及方法
Kessler et al. Static scheduling of moldable streaming tasks with task fusion for parallel systems with DVFS
Parashar et al. Hardware abstractions for targeting EDDO Architectures with the Polyhedral Model
Aleta et al. AGAMOS: A graph-based approach to modulo scheduling for clustered microarchitectures
Bernstein et al. Approximation algorithms for scheduling arithmetic expressions on pipelined machines

Legal Events

Date Code Title Description
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C06 Publication
PB01 Publication
C14 Grant of patent or utility model
GR01 Patent grant
CX01 Expiry of patent term

Granted publication date: 20021127