多处理器计算机系统中共享结果数据的方法和系统.pdf

上传人:Y94****206 文档编号:659900 上传时间:2018-03-02 格式:PDF 页数:38 大小:1.37MB
返回 下载 相关 举报
摘要
申请专利号:

CN97122499.4

申请日:

1997.11.13

公开号:

CN1185609A

公开日:

1998.06.24

当前法律状态:

终止

有效性:

无权

法律详情:

专利权有效期届满IPC(主分类):G06F 15/16申请日:19971113授权公告日:20021127|||授权|||公开|||

IPC分类号:

G06F15/16

主分类号:

G06F15/16

申请人:

国际商业机器公司;

发明人:

威廉姆·J·斯塔克

地址:

美国纽约

优先权:

1996.12.16 US 767406

专利代理机构:

中国国际贸易促进委员会专利商标事务所

代理人:

于静

PDF下载: PDF下载
内容摘要

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

权利要求书

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的方法,其特征在于还包括防止所述多个处理器的操作 计数值超过所选定数量的步骤。

说明书


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

    本发明涉及多处理器计算机系统中的数据处理的改进。

    图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-mapped cache)一样工作,该结果缓冲器中每一个入口都被直接映射到一个特定的操作计数值。它利用了半数寄存器文件资源,因为执行在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   I11  28   I12  29   I13  30   I14  31   I15  32   I16  33   I17  34   I18  35   I19  36   I20(不接受)  37   I21  38   I22  39   I23  40   I24(折转)  41   I28  42   I29  43   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        26        I28

    11     I27        I27

    12     I30(接受)

    13     I11        I14

    14     I12        I13       I15         I16

    15     I17        I18       I19

    16     I20(不接受)

    17     I21        I22       I28         I24(折转)

    18     I23        I29

    19     I30(不接受)

    20     I31

    在这个例子中,(A)的简单实现共用44个周期来执行此程序段,而其复杂实现仅用20个周期。因此,构造复杂机(complex machine)来执行体现ILP(正如这段代码所体现的)的算法具有性能上的优势。虽然这个优势的一部分考虑到有限的存储效率(finite storage effects)而要被打折扣,但产业趋势显示计算机制造商依旧认为开发复杂处理器的巨大的风险和费用是值得的。一面在欣赏简单机的低设计费用和低复杂度,另一面下一节还是要说明本发明是如何为复杂机提供某些性能增益的。本发明的指令集结构

    本发明的具体实施可以作为一个新的指令集结构,这在极大简化的机器结构基础上提供了广泛的功能,也可以作为现有指令集结构的一个扩展,这使得前述结构SMP结构的多处理器更快速地协同求解单线程问题(single threaded 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                     IBSTPMO  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                  I10

       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

        EXIT

    重编码程序段中出现了许多原有程序段中没有的指令。并且,原有的程序段中的一些指令也出现在不止一个重编码段中。下面给出简要说明。

    处理器0和处理器1程序段开始处的SPAWN指令初始化并同步这四个相互依赖指令流。

    原有程序段的指令I20开始的条件路径(conditional path)被稍做修改重新编码(保持了原有的功能)以简化流的分配。除了与重编码有关的异常之外,原有程序段中的控制流指令会出现在所有重编码相互依赖程序段中。因为四个相互依赖程序都必须遵循相同的控制流路径以保持同步,所以这是有道理的。

    使用结果缓冲器使得四个相互依赖程序之间可以进行通信,但有些通过结果缓冲器的数据具有比较长久的特性,必须把它从结果缓冲器中移至通用寄存器中以供以后使用。因此,就增加了一些完全是为了把数据值从结果缓冲器转移至通用寄存器的指令。

    如先前提到过的,因为本发明实施例(仅为易于理解而示)在每条指令执行后将引发处理器操作计数值递增,在这特定的实施例中就必需一些空操作(no-op)指令来保证每个相互依赖代码段执行了相同数量的指令,以维持同其他处理器相同的操作计数值。

    最后,因为写入结果缓冲器的数据值必须被一定数量(使用计数值指定)的指令来使用,所以为条件路径增加了IL指令和IN指令,以保证数据被使用正确的次数(使得使用计数值达到零),通常它们并不使用该数值。需要着重注意的是,实现结果缓冲器管理方法M2的实施例没有使用计数值,所以并没有这样的限制。执行时序

    以下一个周期一个周期地显示了四个相互依赖程序段在(如前所述的本实施例扩充的SMP的)四个“简单”处理器上同时执行的过程注意给出的时序采取前一时序实例的简单形式,并遵循前一时序实例的执行路径。本发明扩展I SA示例相互依赖程序段执行时序周期  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)性能。

    尽管本发明已经通过一个最佳实施例详细地描述,对于熟练的技术人员来说在不背离本发明精神和范围基础上做一定形式和细节上的改变是容易理解的。

多处理器计算机系统中共享结果数据的方法和系统.pdf_第1页
第1页 / 共38页
多处理器计算机系统中共享结果数据的方法和系统.pdf_第2页
第2页 / 共38页
多处理器计算机系统中共享结果数据的方法和系统.pdf_第3页
第3页 / 共38页
点击查看更多>>
资源描述

《多处理器计算机系统中共享结果数据的方法和系统.pdf》由会员分享,可在线阅读,更多相关《多处理器计算机系统中共享结果数据的方法和系统.pdf(38页珍藏版)》请在专利查询网上搜索。

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1