首页> 中国专利> 紧密耦合式多处理器的快速多线程执行

紧密耦合式多处理器的快速多线程执行

摘要

一种包含形式为对称式多重处理系统的多个紧密耦合的处理器架构。特殊的耦合机制可让该多处理器架构有效率地平行地以推测方式执行多个执行线程。操作系统一般负责安排各执行线程在一多处理器系统中的各可用处理器间的执行时程。平行多线程执行的一个问题在于:操作系统安排执行线程执行的时程时所涉及的控管作业使得较短的程序代码区段无法有效率地利用平行多线程执行。因此,无法达到平行多线程执行的效能。本发明以对称式多重处理系统的形式包含额外的电路,该系统可在不涉及操作系统且没有操作系统的固有控管作业的情形下,对多个处理器上的多个执行线程进行时程安排及推测式执行。其有利之处在于:平行多线程执行更有效率,并可提升效能。

著录项

  • 公开/公告号CN1384935A

    专利类型发明专利

  • 公开/公告日2002-12-11

    原文格式PDF

  • 申请/专利权人 先进微装置公司;

    申请/专利号CN00815129.6

  • 发明设计人 U·克拉尼奇;D·S·克里斯蒂;

    申请日2000-07-31

  • 分类号G06F9/48;G06F9/38;

  • 代理机构11245 北京纪凯知识产权代理有限公司;

  • 代理人戈泊;程伟

  • 地址 美国加利福尼亚州

  • 入库时间 2023-12-17 14:32:02

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-08-25

    专利权有效期届满 IPC(主分类):G06F9/38 授权公告日:20050427 申请日:20000731

    专利权的终止

  • 2010-08-11

    专利权的转移 IPC(主分类):G06F9/38 变更前: 变更后: 登记生效日:20100702 申请日:20000731

    专利申请权、专利权的转移

  • 2005-04-27

    授权

    授权

  • 2003-02-26

    实质审查的生效

    实质审查的生效

  • 2002-12-11

    公开

    公开

说明书

发明背景

1.技术领域

本发明涉及多处理器的领域,尤其涉及多处理器中的多线程执行(multithreading)。

2.背景技术

采用多个处理单元的计算机系统提供了可以经济地取得的高效能,而超越了目前单处理器系统所能提供的效能。在一多重处理环境内,并不是将对一应用程序的所有处理集中在一单一处理器中,而是将工作分配到可由各别的处理器处理的若干群组或“执行线程”(“thread”)。因而将整体的处理负载分散到数个处理器,且可以平行的方式同时执行该等分散的工作。操作系统软件将程序代码的各个部分分配给若干可各别执行的执行线程,且通常将一优先级等级指定给每一执行线程。

超纯量多处理器在每一时钟周期中执行多个指令,并选择设计规范所允许的最短时钟周期,而可达到高效能。在本文的用法中,术语“时钟周期”(“clock cycle”)意指符合多处理器内的一指令处理管线的各阶段之一时间间隔。各储存装置(例如寄存器及阵列)根据该时钟周期而取得其值。例如,一储存装置可根据用来界定该时钟周期的一时钟信号之一上升缘或下降缘,而取得一值。该储存装置然后储存该值,直到该计算机系统的后续上升缘或下降缘为止。在本文的用法中,术语“指令处理管线”(“instruction processing pipeline”)意指用来以管线方式处理指令的逻辑电路。虽然可将管线分成用来执行指令处理的各部分的任何数目的阶段,但是指令处理通常包含下列阶段:提取指令、将指令译码、执行指令、以及将执行结果储存在该指令所识别的目的地。

多处理器的一个重要特征是多处理器利用平行处理的程度。平行处理是以平行的方式执行指令,而不是以循序方式执行指令。超纯量处理器以平行方式执行某些指令,而可识别并利用精细分割的指令层级的平行处理。然而,此类的平行处理受限于各指令间的数据相依性。此外,如前文所述,包含一个以上的处理器的计算机系统可分配计算机程序呈现的工作负载,而提升效能。藉由识别较高层级的平行处理,多处理器计算机系统可在各别的处理器上以平行方式执行较大的程序代码区段或执行线程。因为多处理器及操作系统无法识别可进行多线程执行的这些程序代码区段,所以是由应用程序代码本身来识别这些程序代码区段。一般而言,操作系统负责安排各执行线程在一多处理器系统中的各可用处理器间的执行时程。

平行多线程执行的一个问题在于:操作系统安排执行线程执行的时程时所涉及的控管作业使得较短的程序代码区段无法有效率地利用平行多线程执行。因此,无法达到平行多线程执行的潜在效能提升。

发明内容

本发明所说明的一种多处理器及方法大致解决了前文概述的问题。是以对称式多重处理系统的形式包含额外的电路,该对称式多重处理系统可在不涉及操作系统且没有操作系统的固有控管作业的情形下,对多个处理器上的多个执行线程进行时程安排及推测式执行。其有利之处在于:平行多线程执行更有效率,并提升了效能。

广义而言,我们所考虑的多处理器计算机包含多个处理器,其中该等处理器包含一寄存器文件(Register File)、一重新排序缓冲区、及用来支持推测式多线程执行的电路。此外,该多处理器计算机包含一个或多个重新排序缓冲区标记转换缓冲器、及一执行线程控制装置。该执行线程控制装置的配置被设定为储存并传输该等处理器间的指令。该执行线程控制装置及指令支持平行推测式多线程执行。

此外,我们所考虑的一种方法包含执行执行线程建立步骤,用以执行一第二处理器上的一第二执行线程,其中该建立步骤包含下列步骤:一第一处理器将建立指令传送到一第二处理器,其中是在该第二处理器上推测式执行该等建立指令。将一起始指令自该第一处理器传送到该第二处理器,而该起始指令开始以推测方式执行该第二处理器上的该第二执行线程。该第二处理器响应接收到该起始指令,而以与在该第一处理器上执行一执行线程平行的方式开始推测式执行该第二执行线程。响应在该第二处理器中使一终止指令退休,而终止该第二执行线程的执行。最后,响应该第二处理器接收到一撷取结果指令,而将该第二执行线程的执行结果传送到该第一处理器。

附图说明

若参阅下文中的详细说明并配合各附图,将可易于了解本发明的其它目的及优点。该等附图有:

图1是一微处理器实施例的方块图。

图2是一多处理器计算机实施例的方块图。

图3A示出两个微处理器及一执行线程控制装置。

图3B是执行线程建立、执行、及完成的流程图。

图4示出两个微处理器及一执行线程控制装置。

图5示出两个执行线程的指令及一同步指令的使用。

图6示出同步逻辑电路的一同步实施例。

图7示出同步逻辑电路的一异步实施例。

图8示出用来代表同步逻辑电路的一异步实施例之一指令序列。

图9示出一处理器间通信单元及一执行线程控制装置之一实施例。

图10是其中包含图2所示多处理器计算机的一计算机系统实施例的方块图。

虽然本发明可以有各种修改及替代形式,但是将以图式举例的方式示出一些特定实施例,且将在本文中详细说明该等特定实施例。然而,我们当了解,该等图式及详细说明的目的并非将本发明限于所揭示的特定形式,相反地,本发明将涵盖在最后的申请专利范围内界定的本发明精神及范围内的所有修改、等效物、及替代方式。

具体实施方式

处理器概观

现在请参阅图1,图中示出一处理器10实施例的方块图。其它的实施例也是可行的且可列入考虑。如图1所示,处理器10包含一预先提取/预先译码单元12、一分支预测单元14、一指令高速缓存16、一指令对准单元18、多个译码单元20A-20C、多个指令保留区22A-22C、多个功能单元24A-24C、一加载/储存单元26、一数据高速缓存28、一寄存器文件30、一重新排序缓冲区32、一MROM单元34、一处理器间通信单元320、及一总线接口单元37。将只以代号集体地称呼本文中一特定代号后接续有一字母的各组件。例如,将各译码单元20A-20C整体地称为译码单元20。

将预先提取/预先译码单元12耦合成自总线接口单元37接收指令,且预先提取/预先译码单元12进一步耦合到指令高速缓存16及分支预测单元14。同样地,分支预测单元14耦合到指令高速缓存16。此外,分支预测单元14耦合到各译码单元20及各功能单元24。指令高速缓存16进一步耦合到MROM单元34及指令对准单元18。指令对准单元1 8又耦合到各译码单元20。每一译码单元20A-20C耦合到加载/储存单元26及各别的指令保留区22A-22C。指令保留区22A-22C进一步耦合到各别的功能单元24A-24C。此外,各译码单元20及各指令保留区22耦合到寄存器文件30及重新排序缓冲区32。各功能单元24耦合到加载/储存单元26、寄存器文件30、及重新排序缓冲区32。数据高速缓存28耦合到加载/储存单元26及总线接口单元37。总线接口单元37进一步耦合到一L2高速缓存的一L2高速缓存接口、及一总线。处理器间通信单元300耦合到重新排序缓冲区32及结果总线38。最后,MROM单元34耦合到各译码单元20。

指令高速缓存16是一用来储存指令的高速高速缓存。自指令高速缓存16提取指令,并将所提取的指令派发到各译码单元20。在一实施例中,指令高速缓存16的配置被设定成将多达64K字节的指令储存在一具有若干64字节快取线(一个字节包含8个二进制位)的2路成组关联(2 way set associative)结构中。在替代实施例中,亦可采用任何所需的配置及容量。例如,请注意,可将指令高速缓存16实施为完全关系型(fully associative)、成组关系型(set associative)、或直接对映式(direct mapped)配置。

预先提取/预先译码单元12将指令储存在指令高速缓存16。在指令高速缓存16要求指令之前,可根据一预先提取架构而预先提取这些指令。预先提取/预先译码单元12可采用各种预先提取架构。当预先提取/预先译码单元12将指令转移到指令高速缓存16时,预先提取/预先译码单元12为该等指令的每一字节产生三个预先译码位:一开始位、一终止位、及一功能位。该等预先译码位形成用来指示每一指令的边界的标记。该等预先译码标记亦可载有诸如译码单元20是否可直接将一特定的指令译码或是否呼叫MROM单元34所控制的一微程序代码程序而执行该指令等额外的信息,将于下文中详细说明其中的情形。此外,可将预先提取/预先译码单元12的配置设定成侦测分支指令并将对应于该等分支指令的分支预测信息储存在分支预测单元14。其它的实施例可采用任何适当的预先译码架构。

然后将说明采用一可变位组长度指令集的一处理器10实施例的该等预先译码标记之一种编码方式。可变位组长度指令集是一种不同的指令可能占用不同数目的字节的指令集。一处理器10实施例所采用的一例示可变位组长度指令集是x86指令集。

在该例示的编码方式中,如果一特定字节是一指令的第一字节,则设定该字节的开始位。如果该字节是一指令的最后一个字节,则设定该字节的终止位。将译码单元20可直接译码的指令称为“快速路径”指令。根据一实施例,将其余的x86指令称为MROM指令。对于快速路径指令而言,是针对该指令中包含的每一前置字节而设定功能位,并清除其它字节的功能位。在替代实施例,亦可清除每一前置字节的功能位,并设定其它字节的功能位。检视对应于终止字节的功能位,即可决定指令的类型。如果该功能位被清除,则该指令是一快速路径指令。相反地,如果该功能位被设定,则该指令是一MROM指令。一指令的运算码因而可能该指令内,且译码单元20可将该指令直接译码为与该指令中第一被清除功能位相关联的字节。例如,包含两个前置字节、一Mod R/M字节、及一中间字节的一快速路径指令将具有如下文所示的开始位、终止位、及功能位:

开始位    10000

终止位    00001

功能位    11000

MROM指令是被决定为过于复杂而无法为译码单元20所译码的指令。呼叫MROM单元34,而执行MROM指令。更具体而言,当碰到一MROM指令时,MROM单元34分析该指令,并将该指令发出到所界定的快速路径指令之一子集,以便完成所需的运算。MROM单元34将快速路径指令的该子集派发到各译码单元20。

处理器10采用分支预测,以便以推测方式提取在有条件分支指令之后的指令。设有分支预测单元14,以便执行分支预测作业。在一实施例中,分支预测单元14采用一分支目标缓冲区,该分支目标缓冲区存放两个分支目标地址及对应的采取/不采取预测,且该等分支目标地址及预测占用指令高速缓存16中的一快取线的16字节部分。该分支目标缓冲区可包含诸如2048个数据项、或任何其它适当数目的数据项。当将一特定的快取线预先译码时,预先提取/预先译码单元12决定起始的分支目标。可能因执行一快取线内的指令,而发生对应于该快取线的该等分支预测之后续更新。指令高速缓存16提供所提取的指令地址之一指示,因而分支预测单元14可决定要选择哪些分支目标地址以便形成一分支预测。译码单元20及功能单元24将更新信息提供给分支预测单元14。译码单元20侦测分支预测单元14未预测到的分支指令。功能单元24执行该等分支指令,并决定所预测的分支方向是否正确。该分支方向可以是“采取”,此时自该分支指令的目标地址提取后续的指令。相反地,该分支方向可以是“不采取”,此时自该分支指令接续的各内存位置提取后续的指令。当侦测到一错误预测的分支指令时,即自处理器10的各单元中舍弃该错误预测的分支后续的各指令。在一替代配置中,可将分支预测单元14耦合到重新排序缓冲区32,而不要耦合到译码单元20及功能单元24,且分支预测单元14可自重新排序缓冲区32接收分支错误预测信息。分支预测单元14可采用各种适用的分支预测算法。

将自指令高速缓存16提取的指令传送到指令对准单元18。当自指令高速缓存16提取指令时,即扫描对应的预先译码数据,以便将与所提取的指令有关的信息提供给指令对准单元18(及MROM单元34)。指令对准单元18利用该扫描数据,而将一指令对准每一译码单元20。在一实施例中,指令对准单元18将来自三组的八个指令字节的指令对准至译码单元20。译码单元20A接收由译码单元20B及20C同时接收(按照程序顺序)的各指令之前的一指令。同样地,译码单元20B接收由译码单元20C同时接收(按照程序顺序)的指令之前的一指令。

译码单元20的配置被设定成将自指令对准单元18接收的指令译码。侦测寄存器操作数信息,并将该寄存器操作数信息传送到寄存器文件30及重新排序缓冲区32。此外,如果该等指令需要执行一个或多个内存作业,则译码单元20将该等内存作业派发到加载/储存单元26。将每一指令译码成用于功能单元24的一组控制值,并将这些控制值连同操作数地址信息及可能包含在该指令的位移或立即运算数据派发到指令保留区22。在一特定实施例中,将每一指令译码成各功能单元24A-24C可分别执行的(最多可以有的)两个运算。

处理器10支持非循序执行(out of order execution),因而采用重新排序缓冲区32来追踪用于寄存器读取及写入作业的原始程序顺序,以便执行寄存器更名,而可进行推测式指令执行及分支错误预测的回复,并可协助精确地处理异常状况。在将一涉及一寄存器更新的一指令译码时,保留重新排序缓冲区32内的一暂时性储存位置,因而储存了推测的寄存器状态。如果一分支预测是不正确的,则可先在该缓冲区中使推测式执行指令的结果以及错误预测的路径无效,然后才将该等结果写入寄存器文件30。同样地,如果一特定的指令产生一异常状况,则可舍弃该特定指令之后的各指令。在此种方式下,异常状况的处理是“精确的”亦即,在产生异常状况的特定指令之后的各指令并未在该异常状况之前完成。请注意,如果在按照程序顺序在一特定指令前面的各指令之前先执行该特定指令,则是以推测方式执行该特定指令。在前面的各指令可能是一分支指令或一产生异常状况的指令,在此种情形中,重新排序缓冲区32可能舍弃推测式执行结果。

在译码单元20的输出端提供指令控制值、以及立即运算数据或位移数据,并将该等值或数据直接传送到各别的指令保留区22。在一实施例中,每一指令保留区22最多可存放五个等候发出到对应功能单元的等候处理的指令的指令信息(亦即,指令控制值以及操作数值、操作数标记、及(或)立即运算数据)。请注意,对于图1所示的实施例而言,每一指令保留区22是与一专用的功能单元24相关联。因此,各指令保留区22及各功能单元24形成三个专用的“发出部分”。换言之,指令保留区22A及功能单元24A形成发出部分0。由功能单元24A执行被对准及派发到指令保留区22A的指令。同样地,指令保留区22B及功能单元24B形成发出部分1;且指令保留区22C及功能单元24C形成发出部分2。

在将一特定指令译码时,如果所需的一操作数是一寄存器位置,则将寄存器地址信息同时传送到重新排序缓冲区32及寄存器文件30。在一实施例中,重新排序缓冲区32包含一未来文件,用以自各译码单元接收操作数要求。熟习此项技艺者当可了解,x86的寄存器文件包含八个32位的实际寄存器(亦即,通常将这八个寄存器称为EAX、EBX、ECX、EDX、EBP、ESI、EDI、及ESP)。在采用x86处理器架构的处理器10的实施例中,寄存器文件30包含每一该等32位实际寄存器的储存位置。可以在寄存器文件30内包含额外的储存位置,以供MROM单元34使用。重新排序缓冲区32包含用于改变这些寄存器内容的执行结果的暂时性储存位置,因而可进行非循序执行。将重新排序缓冲区32的一暂时性储存位置保留给于译码时决定要修改其中一个该等实际寄存器的内容的每一指令。因此,于执行一特定程序期间的各点上,重新排序缓冲区32可以有存放一特定寄存器的推测式执行内容之一个或多个位置。如果在对一特定指令进行后续译码时决定重新排序缓冲区32具有指定给一用来作为该特定指令的一操作数的寄存器的一个或多个先前位置,则重新排序缓冲区32将下列的信息传送到对应的指令保留区:1在最近指定的位置中的值;2最近指定的位置之一标记,传送该标记之前提是最终将执行先前指令的功能单元尚未产生该值。如果重新排序缓冲区32有一保留给一特定寄存器的位置,则将自重新排序缓冲区32提供操作数值或重新排序缓冲区标记,而并非自寄存器文件30提供该操作数值。如果重新排序缓冲区32并没有为一所需寄存器保留的位置,则直接自寄存器文件30取得该值。如果该操作数对应于一内存位置,则将该操作数值经由加载/储存单元26而提供给该指令保留区。

在一特定实施例中,重新排序缓冲区32的配置被设定成储存并以一单元的方式同时操作被译码的各指令。本文将该配置设定称为“线串导向”(“line-oriented”)。藉由一起操作数个指令,即可简化重新排序缓冲区32内所采用的硬件。例如,当译码单元20发出一个或多个指令时,本实施例中包含的线串导向重新排序缓冲区即分配足以储存与三个指令(由每一译码单元20提供一个指令)有关的指令信息的储存位置。相反地,在传统的重新排序缓冲区中,是根据实际派发的指令数目,而分配一可变量量的储存位置。可能需要较大数目的逻辑门,才能分配该可变量量的储存位置。当已执行了每一同时被译码的指令时,即将各指令结果同时储存到寄存器文件30。然后该储存位置是可自由分配给另一组同时被译码的指令。此外,因为将控制逻辑电路分摊到数个同时被译码的指令,所以减少了每一指令所采用的控制逻辑电路量。可将用来识别一特定指令的一重新排序缓冲区标记分成两个字段:一快取线标记及一偏移量标记。该快取线标记识别包含该特定指令的该组同时被译码的指令,而该偏移量标记识别该组内的哪一指令对应于该特定指令。请注意,将指令结果储存到寄存器文件30并释出对应的储存位置被称为使该指令“退休”(“retiring”)。又请注意,可在处理器10的各种实施例中采用任何重新排序缓冲区配置,其中包括使用一未来文件来储存寄存器文件30的推测状态。

如前文所述,指令保留区22储存指令,直到对应的功能单元24执行该等指令为止。在下列的条件下选择一指令以供执行:(i)已提供该指令的操作数;以及(ii)尚未提供在相同指令保留区22A-22C内且按照程序顺序在该指令之前的那些指令的操作数。请注意,当其中一个功能单元24执行一指令时,将该指令的结果直接传送到正在等候该结果的任何指令保留区22,同时传送该结果,以便更新重新排序缓冲区32通常将该技术称为“结果传送”(“result forwarding”)。在传送相关联的结果的时钟周期中,可选择一指令以供执行,并将该指令传送到一功能单元24A-24C。在此例中,指令保留区22将所传送的结果绕送到功能单元24。在将指令译码成将由功能单元24执行的多个作业的实施例中,可分别地安排该等指令的执行时程。

在一实施例中,将每一功能单元24的配置设定成执行加法及减法的整数算术运算以及移位、旋转、逻辑运算、及分支作业。响应译码单元20针对一特定指令译码的控制值,而执行该等作业。请注意,亦可采用浮点运算单元来进行浮点运算。该浮点运算单元可以一协同处理器的方式工作,自MROM单元34或重新排序缓冲区32接收指令,然后与重新排序缓冲区32交换讯息,以便完成该指令。此外,可将功能单元24的配置设定成地址产生,以供加载/储存单元26所执行的加载及储存内存作业。在一特定实施例中,每一功能单元24可包含一用来产生地址的地址产生单元、及一用来执行其余功能的执行单元。于一时钟周期中,这两个可对不同的指令或作业而独立地工作。

每一功能单元24亦将与有条件分支指令的执行有关的信息提供给分支预测单元14。如果一分支预测是不正确的,则分支预测单元14清除在该错误预测的分支之后的已进入指令处理管线的各指令,并自指令高速缓存16或主存储器提取所需的指令。请注意,在此种情形中,舍弃原始程序序列中在该错误预测的分支指令之后发生的指令结果,其中包括已经过推测式执行且暂时储存在加载/储存单元26及重新排序缓冲区32的那些指令结果。又请注意,功能单元24可将分支执行结果提供给重新排序缓冲区32,而该分支执行结果可向功能单元24指示分支的错误预测。

如果正在更新一寄存器值,则将功能单元24所产生的结果传送到重新排序缓冲区32,而如果一内存位置的内容改变了,则将该结果传送到加载/储存单元26。如果要将该结果储存在一寄存器,则当将该指令译码时,重新排序缓冲区32将该结果储存在保留给该寄存器的值的位置。设有多个结果总线38,用以自功能单元24及加载/储存单元26传送结果。结果总线38传送所产生的结果、以及用来识别所执行的指令的重新排序缓冲区标记。

加载/储存单元26提供功能单元24与数据高速缓存28间之一接口。在一实施例中,加载/储存单元26的配置被设定成具有:一第一加载/储存缓冲区,该第一加载/储存缓冲区具有并未存取数据高速缓存28的待处理的加载或储存的数据及地址信息的若干储存位置;以及一第二加载/储存缓冲区,该第二加载/储存缓冲区具有已存取数据高速缓存28的加载及储存的数据及地址信息的若干储存位置。例如,该第一缓冲区可包含12个位置,且该第二缓冲区可包含32个位置。译码单元20仲裁对加载/储存单元26的存取。当该第一缓冲区已填满时,一译码单元必须等候,直到加载/储存单元26有了可供待处理的加载或储存要求信息的空间为止。加载/储存单元26也针对加载内存作业相对于待处理的储存内存作业而执行相依性检查,以便确保数据的一致性。内存作业是在处理器10与主存储器子系统间的数据转移。内存作业可能是利用内存中储存的一操作数的一指令的结果,内存作业也可能是引发数据转移但并未引发任何其它作业的一加载/储存指令的结果。此外,加载/储存单元26可包含用于诸如区段寄存器及与x86处理器架构所界定的地址转换机制有关的其它寄存器等的特殊寄存器之一特殊储存单元。

数据高速缓存28是一种高速的高速缓存,用以暂时性地储存在加载/储存单元26与主存储器子系统之间转移的数据。在一实施例中,数据高速缓存28在二路成组关联结构中具有最多可储存64k字节的容量。我们当了解,可以各种特定的内存配置来实施数据高速缓存28,这些配置包括成组关联配置、完全关联配置、直接对映式配置、或任何适当容量的任何适当配置。

处理器间通信单元300提供一通信接口,用以与多线程执行式多处理器配置中的另一处理器通信。在一实施例中,处理器间通信单元300可包含一指令保留区,用以暂时储存所要执行的指令。此外,在一实施例中,处理器间通信单元300连接到一用来协助各处理器间的多执行线程相关通信的执行线程控制装置。

在采用x86处理器架构的处理器10之一特定实施例中,指令高速缓存16及数据高速缓存28具有线性地址及实体标记。利用指令所指定的偏移量及x86地址转换机制的区段部分所指定的基址而形成该线性地址。或可将线性地址转换为实体地址,以便存取一主存储器。x86地址转换机制的记忆页部分指定了该线性地址至实体地址的转换。将实体地址与实体标记比较,以便决定一命中/未命中状态。

总线接口单元37的配置被设定成在一计算机系统中经由一总线而进行处理器10与其它组件间的通信。例如,该总线可能与DigitalEquipment Corporation所开发的EV-6总线兼容。在替代实施例中,可使用任何适当的互连结构,其中包括封包型、单向或双向链路等。亦可采用一或有的L2高速缓存接口,用以作为一第二阶高速缓存的接口。

对称式多重处理

图2是一多处理器计算机100的一实施例的方块图,该多处理器计算机100包含多个处理单元12A-12B、一执行线程控制装置300、一总线桥接器30、及一内存20。每一处理单元12A-12B分别包含一处理核心14A-14B、一L1高速缓存16A-16B、及一总线接口18A-18B。处理单元12A-12B经由一系统总线22而耦合到一主存储器20。

图2所示的多处理器计算机100是对称的,这是因为所有的处理单元12A-12B都共享相同的内存空间(亦即,主存储器20),并利用相同的地址对映而存取该内存空间。多重处理系统100进一步是对称的原因在于:所有的处理单元12A-12B对相同的I/O子系统分享同等的使用权。

一般而言,将操作系统软件的单一份拷贝及每一使用者应用软件档案的单一份拷贝储存在主存储器20内。每一处理单元12A-12B自该操作系统及使用者应用软件档案的这些单一份拷贝开始执行。虽然处理核心14A-14B可同时执行程序代码,但是请注意,在一特定时点上,处理单元12A-12B中只有一个处理单元可取得系统总线22的主控权。因此,提供了作为一总线仲裁机制的总线桥接器30,以便仲裁两个或更多个处理单元同时提出的总线要求,并根据一预定的仲裁算法,而将总线主控权授予其中一个处理单元。

每一处理单元12A-12B的高速高速缓存16A-16B分别储存各别处理单元最近存取的数据、及用来指示该相关联的数据所对应的主存储器地址的地址标记。因为程序经常会重复地执行相同区段的程序代码并存取相同的数据结构,所以如果该高速缓存的容量够大,则所存取的许多位置都已经被储存在该高速缓存中。

快取机制提供了两种显著的效益。在第一种效益中,因为是以高速内存来实施高速缓存,且可在无须总线仲裁且没有缓冲延迟的情形下存取高速缓存,所以存取一各别高速缓存中所储存的一位置的速度将远快于对一主存储器的存取速度。在第二种效益中,因为存取各别高速缓存中储存的一位置时,并不需要使用系统总线,所以大幅减少了每一处理器的总线使用率。系统总线因而可用来服务所要求的其它交易。“命中率”愈高,则整体的系统效能就愈好。命中率是一特定处理核心锁存取的即是业已储存在高速缓存的位置的百分率。具有适度大容量的高速缓存的设计良好的系统可达到百分之九十以上的命中率。

采用高速缓存的多重处理系统的一重要的考虑点就是数据的一致性。因为主存储器20所储存的多份数据(及指令)可能同时存在于一个或多个高速缓存16A-16B,所以必须采用一种专用的机制,以便在更新其中一个内存子系统(亦即写入新的数据)时,保持数据的完整性。例如,考虑下列的情形:处理核心14A更新高速缓存16A内一特定部分的数据,但是并未更新主存储器20内对应部分的数据。如果处理核心14B随后存取相同部分的程序代码,则必须有某一可靠的机制来追踪哪一部分是最新的且哪一部分不再有效,以便确保处理核心14B存取正确的数据。因而已开发出各种技术,其目标在于有效率地维持高速缓存的数据一致性,此种技术包括所谓的实时写回(write-through)及延后写回(write-back)的技术。习知的先前技艺在大量的出版品中,已说明了各种的高速缓存数据一致性的技术。

一般性作业

图3A及3B示出多线程执行多重处理的一般性作业。在图3A中,示出两个处理器12A-12B与一执行线程控制装置300间的互连。图3B是图3A所示多处理器计算机的一般性作业的流程图。每一处理器12A-12B包含一处理核心14A-14B、一L1高速缓存16A-16B、及一处理器间通信单元(Interprocessor Communication Unit;简称ICU)320A-320B。图中亦示出执行线程控制装置300包含先进先出(First-IN-First-Out;简称FIFO)缓冲器310A-310B、及同步逻辑电路314。

每一处理器12的ICU320耦合到协助处理器12A与12B间的通信的执行线程控制装置300。一般而言,一处理器12A用来作为主控处理器,而另一处理器12B用来作为从属处理器。主控处理器12A执行所有的单线程程序代码,建立并开始从属处理器12B上的执行线程的执行,以及合并在执行线程执行后的执行结果。一般而言,处理核心14A在步骤330中执行单线程程序代码,直到蹦到一个多执行线程建立指令为止。当处理核心14A在步骤332中碰到一个多执行线程建立指令时,处理核心14A将执行线程建立指令传送到ICU320A,而ICU320A将这些执行线程建立指令传送到FIFO 1310A。ICU320B自FIFO 1310A撷取指令,并将该等指令传送到处理核心14B。然后在步骤334中,主控处理器12A将一执行线程2开始指令传送到ICU320A,而ICU320A将该指令置于FIFO 1310A。ICU320B自FIFO1310A撷取该执行线程开始指令,并将该指令传送到处理核心14B。然后在步骤338中,处理核心14B开始并执行该执行线程2程序代码。当两个处理器12在步骤340及342中执行一JOIN指令及使该JOIN指令退休时,从属处理器12B终止执行线程2的执行,且主控处理器12A恢复单线程执行。主控处理器12A然后可将另一指令传送到处理器12B,而使从属处理器12B将执行线程2执行结果经由FIFO310B而传送到主控处理器12A。然后在步骤344中,主控处理器12A可合并来自各别执行线程的执行结果,并在步骤346中继续正常的执行。总结而言,主控处理器12A建立一第二执行线程,以便在从属处理器12B上执行。主控处理器12A及从属处理器12B都是以平行的方式执行各执行线程。主控处理器12A然后自从属处理器取得第二执行线程的执行结果。

作业的详细说明

图4示出一多线程执行的多处理器之一实施例。包含在图4中的是处理器12A及12B的一部分、执行线程控制装置300、以及总线22。各处理器12包含一ICU320、寄存器文件30、重新排序缓冲区32、系统总线38、及总线接口单元37。此外,ICU320包含一指令保留区402及一重新排序缓冲区标记转换缓冲器(Reorder buffer tag TranslationBuffer;简称RTB)400。执行线程控制装置300包含两个FIFO310及同步逻辑电路314。ICU320耦合到重新排序缓冲区32及系统总线38。寄存器文件30及总线接口单元37耦合到总线22。总线接口单元37亦耦合到总线22。执行线程控制装置300耦合到ICU320。

在图4所示的多线程执行多处理器的一实施例中,下列五个指令是用于执行线程的控制:Wr2Proc、RdFrProc、Fork、Join、Sync。下表1简要说明了每一指令的目的。

指令语法目的Wr2ProcWr2Proc PNo,destreg,srcreg将数据自现行处理器的寄存器文件移到另一处理器的寄存器文件。PNo=目标处理器的编号。destreg=目标处理器上的寄存器识别码。srcreg=现行处理器(来源)上的寄存器识别码。RdFrProcRdFrProc PNo,destreg,srcreg将数据自另一处理器的寄存器文件移到现行处理器的寄存器文件。PNo=目标处理器的编号。destreg=现行处理器(目标)上的寄存器识别码。srcreg=来源处理器上的寄存器识别码。ForkPNo,ThrdAddr开始以推测方式执行另一处理器上的一执行线程。PNo=开始执行执行线程的处理器的编号。ThrdAddr=执行线程程序代码的地址。JoinJoin终止执行线程程序代码的执行。SyncSync循序执行,直到所有的处理器都已到达同步点为止。

表1-执行线程控制指令

简而言之,主控处理器12A将Wr2Proc指令传送到从属处理器12B,而建立一第二执行线程,以供执行。Wr2Proc指令将数据自主控处理器的寄存器文件移到从属处理器。为了开始执行该第二执行线程,使用Fork指令。当主控处理器12A将一Fork指令传送到从属处理器12B时,从属处理器12B将该Fork指令置于其重新排序缓冲区32B,并开始自该Fork指令所载有的执行线程地址提取该第二执行线程的指令。于执行一Join指令时,即终止该第二执行线程的执行。如将于下文中说明的,以推测方式执行执行线程指令的能力是相当重要的。下文将说明对推测式执行的支持,然后更详细地说明执行线程建立及执行的整体机制。

对推测式执行线程执行的支持

现阶段最高技艺的超纯量处理器具有较大的指令保留区。因此,为了在执行线程开始之前等候一Fork指令退休,可能造成显著的延迟。为了可以有最佳的执行线程开始,该机制应可容许以推测方式开始执行线程。此种方式可在Fork指令在主控处理器中退休之前,即容许在从属处理器中开始并执行第二执行线程。其优点在于提升了多线程执行多处理器的效能。

为了支持执行线程的推测式执行,每一处理器12中包含了一重新排序缓冲区标记转换缓冲器RTB400,该RTB400将一处理器的重新排序缓冲区中一指令的位置对映到另一处理器的重新排序缓冲区中星同指令的位置,。在一实施例中,RTB400所具有数据项的数目与重新排序缓冲区32的数据项数目相同。以一第一处理器的重新排序缓冲区32标记寻址到该RTB,且RTB400中被寻址到的数据项存有第二处理器的对应的重新排序缓冲区32标记。

为了可以推测方式开始并执行各执行线程,以推测方式处理该Wr2Proc及Fork指令。当将Wr2Proc及Fork指令派发到主控处理器的ICU320A时,亦经由FIFO 1310A而将该等指令传送到从属处理器12B。当将Wr2Proc指令派发到主控处理器的ICU320A时,存在有两种可能性:可取得数据;或无法取得数据。如果可取得数据,则将该指令、该指令的重新排序缓冲区32A标记、及一“加入指令”传送到该从属处理器。将该指令及数据插入从属处理器的重新排序缓冲区32B,并将该数据项标示为具有有效数据。此外,更新从属处理器的RTB400B,以便指示重新排序缓冲区32A数据项与重新排序缓冲区32B数据项间的对应性。如果在将该等指令派发到主控处理器的ICU320A时,无法取得数据,则将该等指令保留在主控处理器ICU320A的ICU指令保留区402A,直到取得数据为止。然而,仍然将该指令传送到从属处理器12B。将该等指令插入该从属处理器的重新排序缓冲区32B,将该从属处理器的重新排序缓冲区32B中的数据项标示为并未具有有效数据,且以前文所述的方式更新RTB400B。在取得数据之前,并不执行从属处理器的重新排序缓冲区32B中被标示为并未具有有效数据的指令。当在主控处理器12A的指令保留区402A中等候的一指令可取得数据时,自主控处理器12A的指令保留区402A取出该指令,并将该指令发出到ICU320A。当ICU320A接收到该指令时,将该数据及主控处理器的重新排序缓冲区32A标记连同一“数据更新”命令传送到从属处理器12B。从属处理器12B利用RTB400B而转换该重新排序缓冲区32A标记,以便识别从属处理器12B的重新排序缓冲区32B中该指令的标记。然后利用对应的重新排序缓冲区32B标记,将该数据插入正确的重新排序缓冲区32B数据项。现在将从属处理器的重新排序缓冲区32B中的该指令标示为具有有效数据,且可发出从属处理器12B中相依的指令。

执行线程建立及执行线程开始

为了建立一第二执行线程以供在另一处理器上执行,主控处理器12A将推测式Wr2Proc指令经由FIFO 1310A而传送到从属处理器12B。除了该Wr2Proc指令之外,主控处理器12A也将该指令的重新排序缓冲区32A标记传送到从属处理器12B。将该等指令置入该从属处理器的重新排序缓冲区32B。如果可取得用于Wr2Proc指令的数据,则也将该数据置于重新排序缓冲区32B。如果无法取得数据,则将重新排序缓冲区32B的数据项标示为并未具有有效数据。将该从属处理器的重新排序缓冲区32B标记置于主控处理器的重新排序缓冲区32A标记所指示的位置,而以平行的方式更新该从属处理器的RTB400B。如果从属处理器12B的重新排序缓冲区32B已经填满了,则将不再自主控处理器12A接收任何指令。当从属处理器的重新排序缓冲区32B有可用的空间时,主控处理器12A接收到一指示,且可传送待处理的指令。

在第二执行线程的建立完成之后,利用Fork指令来开始执行该第二执行线程。当主控处理器碰到一Fork指令时,即以前文所示的方式将该指令经由执行线程控制装置300而传送到从属处理器12B。如果从属处理器12B已经在执行一执行线程,则不必理会该Fork指令。从属处理器12B作出该Fork作业是否成功的一指示。可利用各种方式作出此种指示,例如设定一个可由主控处理器12A检查的平常的处理器旗标。其它的实施例可利用其它的方式,以便确保当正在执行另一执行线程时,并不进行开始一第二执行线程之一尝试,因而无须设定并检查旗标。如果从属处理器12B并未正在执行一执行线程,则将Fork指令置于重新排序缓冲区32B,且该从属处理器开始提取第二执行线程的指令。将新提取的执行线程指令置于重新排序缓冲区32B中该Fork指令之后的位置,并将该等指令派发到该处理器的功能单元,以供执行。可发出与Wr2Proc指令之间没有未完成的相依性的那些指令。其优点在于:在Fork指令于主控处理器12A中退休之前,可在从属处理器12B中发出许多没有相依性的指令。在从属处理器12B中执行在Fork指令的执行线程指令的机制与一般的超纯量处理器相同。

分支错误预测及修正

当在主控处理器12A中侦测到一分支错误预测时,将使重新排序缓冲区32A中在该分支之后的所有数据项无效。如果错误预测了Wr2Proc或Fork指令,则也需要使从属处理器12B中的这些数据项无效。当主控处理器12A使重新排序缓冲区32A中在一错误预测的分支之后的各数据项无效时,主控处理器12A侦测到在该错误预测的分支之后的第一个Wr2Proc或Fork指令,并将该指令的重新排序缓冲区32A标记及一使无效要求传送到ICU320A。然后将该标记及要求传送到从属处理器12B,此时由RTB400B转换主控处理器的重新排序缓冲区32A标记,以便得到从属处理器12B的重新排序缓冲区32B标记。然后将所得到的重新排序缓冲区32B标记用来使重新排序缓冲区32B中该数据项及所有后续的数据项无效。如果在使重新排序缓冲区32B中的指令无效的期间碰到了一Fork指令,则停止从属处理器12B中的推测式执行。

终止第二执行线程的执行及退休

一Join指令指示在从属处理器12B上执行的第二执行线程的终止。Join指令亦用于在主控处理器12A上执行的执行线程。当主控及从属处理器12都使该Join指令退休时,从属处理器12B停止执行,且只在主控处理器12A中继续执行。当一从属处理器12B使一Join指令退休时,该从属处理器12B将该退休通知主控处理器12A,并清除该从属处理器12B的重新排序缓冲区32B。从属处理器12B然后停止执行,并等候次一Fork指令。当主控处理器12A接收到从属处理器12B已使该Join指令退休的一指示时,主控处理器12A即将其Join指令标示为已完成,并准备使其Join指令退休。

一旦两个处理器12都使该Join指令退休之后,主控处理器12A可存取从属处理器12B的寄存器文件30B,以便取得该第二执行线程的执行结果。利用RdFrProc指令来存取从属处理器的寄存器文件30B。主控处理器12A将RdFrProc指令派发到ICU320A,此时该RdFrProc指令在指令保留区402A中等候,直到该RdFrProc指令自最前面为止,然后发出该RdFrProc指令。然后将该RdFrProc命令传送到从属处理器12B。在从属处理器12B中执行该RdFrProc命令时,将读取所指定寄存器的内容,并将结果经由FIFO 2310B而传送回主控处理器12A。主控处理器中仍然处于执行阶段的该RdFrProc命令撷取该结果,并将该结果置于结果总线38A。然后继续正常的指令执行。

可在Join指令退休之前发出RdFrProc指令,但是该RdFrProc指令可以不退休,直到该Join指令退休之后为止。因为在一RdFrProc指令之前并不执行同步,所以在主控及从属处理器的执行线程中,一Join指令都必须在该指令之前。如果发生一错误预测的分支,且错误预测了RdFrProc指令,则该指令可仍然接收数据,但是主控处理器的重新排序缓冲区32A将舍弃该结果。其优点在于:上述的机制可以推测方式执行RdFrProc指令。

使Wr2Proc及Fork指令退休

当一Wr2Proc或Fork指令在主控处理器的重新排序缓冲区32A退休时,将重新排序缓冲区32A标记传送到从属处理器,此时由RTB400B将该标记转换为该从属处理器的重新排序缓冲区32B标记。然后也可使在主控处理器12A中退休的那些指令自从属处理器12B退休。

可以多种方式处理Wr2Proc及Fork指令的退休。一种方式涉及一退休命令,而第二种方式涉及一Fork提交命令。为了执行前文所述的分支错误预测回复,在Wr2Proc及Fork命令在主控处理器的重新排序缓冲区32A中退休之前,该等指令不得在从属处理器的重新排序缓冲区32B中退休。因此,当此一退休发生时,重新排序缓冲区32A必须通知重新排序缓冲区32B。作出此种通知的一种方式是:当当一Wr2Proc或Fork指令在主控处理器的重新排序缓冲区32A退休时,将一退休命令连同重新排序缓冲区32A标记传送到从属处理器12B。然后从属处理器12B中的RTB400B转换该主控处理器的重新排序缓冲区32A标记,以便得到从属处理器的重新排序缓冲区32B标记。然后利用所得到的从属处理器的重新排序缓冲区32B标记使对应的指令退休。虽然该方法在从属处理器的重新排序缓冲区32B中产生了额外的退休信息流量,该方法作业的优点在于具有软件上的透通性,与下文所述的方法不同。

处理Wr2Proc及Fork指令的退休的第二种方法涉及一Fork提交命令的使用。当一Fork指令在主控处理器的重新排序缓冲区32A中退休时,重新排序缓冲区32A将一Fork指令已经退休的讯息连同对应的重新排序缓冲区32A标记向ICU320A指示。ICU320A然后将一Fork提交命令及该重新排序缓冲区32A标记传送到从属处理器12B。RTB400B然后转换该重新排序缓冲区32A标记,以便得到对应的重新排序缓冲区32B标记。然后利用所得到的重新排序缓冲区32B标记将对应的数据项标示为已完成且准备退休。此外,将从属处理器的重新排序缓冲区32B中所有先前的Wr2Proc指令标示为已完成且现在可退休。当使用该第二种方法时,有一个要考虑的特殊情况。如果诸Wr2Proc指令因某种原因而未接续一Fork指令,则可将该等Wr2Proc指令标示为已完成,并可将该等指令保留在重新排序缓冲区32B中。主控处理器12A所进行的后续执行线程建立可写入更多的Wr2Proc指令。在每一次执行线程执行中,重新排序缓冲区32B中只有较小的可用空间。可继续该程序,而最后将造成从属处理器的重新排序缓冲区32B的满溢。为了避免此种状况,需要软件来追踪从属处理器重新排序缓冲区32B的可用容量。纵然该第二种方法所产生的信息流量小于前文所述第一种方法的信息流量,但是因为需要软件来追踪从属处理器重新排序缓冲区32B中的可用空间,因而不是较佳的方法。因此,前文所述采用一退休命令且对软件最有透通性的该第一种方法是较佳的。

在一实施例中,ICU320在每一周期中可接受多个指令。指令保留区402可容纳多个指令,而该等指令在指令保留区402内的位置指示了要将该等指令传送到另一处理器的顺序。此外,可立刻将多个指令传送到另一处理器。整体而言,必须确保是按照顺序将该等指令插入另一处理器的重新排序缓冲区32B。

执行线程的同步

使用同步指令的同步

于执行一些平行的执行线程时,有时可能需要使该等执行线程进入一可决定的状态。例如,如果必须在各执行线程之间交换数据,则需要一种使该等执行线程的执行同步的机制。为了在一实施例中起动同步,必须使用一Sync指令及同步逻辑电路。根据该系统的特性,而使用该同步机制。如果该系统中的所有处理器具有相同的执行时间及管线阶段,则可使用一具有高度同步的实施例。若非如此,则可用一更具有弹性的实施例。不论是哪一种情形,该机制对软件都具有透通性。可将相同的同步码用于任一种实施例。

图5示出如何将一Sync指令用来使各执行线程同步。图5包含两行,每一行代表一执行线程的指令。第一行代表在一主控处理器上执行的一执行线程的程序代码,而第二行代表在一从属处理器上执行的一执行线程的程序代码。图5中的每一行被分为若干列,而每一方格代表一单一的指令。指令500代表可用来作为来自该程序代码中的别的位置的一分支进入点之一标号。该等执行线程的作业如下文。执行线程1程序代码是以与执行线程2程序代码平行的方式执行。执行线程1执行,直到其到达第一Sync指令502为止。执行线程2程序代码执行mov指令510,该指令将标示元(Handle)数据移到寄存器1。执行线程2然后继续执行至Sync指令512。当两个执行线程分别到达第一Sync指令502及512时,可使该等Sync指令退休。当两个Sync指令已跳出时,继续该同步点已退休的执行。执行线程1执行指令504,该指令将数据自处理器2的寄存器1读到该处理器寄存器文件的寄存器0。这两个执行线程在Sync指令506及514到达一第二同步点。当Sync指令506及514都准备好要退休时,这两个Sync指令都退休,且继续执行。执行线程1然后执行一比较指令507,且如果寄存器0中的数据与标示元数据不相同,则转移指令508使执行在指令500中继续进行。若非如此,则执行线程1继续执行其它的程序代码。如上述的例子所示,在所有的处理器都以准备好要使其对应于Sync指令退休之后,才可使一Sync指令退休。此种方式需要:每一处理器指示其准备好使一Sync指令退休的时机,且每一处理器必须知道所有其它的处理器都已到达同步点的时机。

图6是用来实施同步逻辑电路的一同步机制的方块图。图中示出同步逻辑电路314、若干SSO信号600、及SSI信号602。自CPU1-x输出SSO信号600,并将该等SSO信号600输入到同步逻辑电路314。同步逻辑电路314输出SSI信号602。在图6所示的同步实施例中,每一处理器是以两个信号连接到同步逻辑电路314,这两个信号是一同步状态输出(Sync State Out;简称SSO)信号600及一同步信号输入(Sync Signal In;简称SSI)信号602。每一处理器输出一SSO信号600,用以将Sync指令的状态指示给同步逻辑电路314。此外,每一处理器接收SSI信号602作为输入,用以侦测其它处理器中的Sync指令的状态。在一实施例中,是以下表来描述SSO信号600的状态。

  SSO状态  状态描述  0  无Sync指令  1  Sync指令准备好要退休

表2

各重新排序缓冲区特别地处理Sync指令。在该同步实施例中,如果一Sync指令随即要退休,则将该处理器的SSO信号600设定为状态1,以便将该处理器已进入同步点的讯息告知所有其它的处理器。当输入到同步逻辑电路314的所有SSO信号600都被设定为状态1时,同步逻辑电路314即将SSI信号602设定为状态1。只有在输入到一处理器的SSI信号602被设定为状态1时,该处理器才可使其Sync指令退休。在此种方式下,所有的处理器都同时使其Sync指令退休。当一处理器使一Sync指令退休时,在下一时钟周期中将该处理器的SSO信号600设定为状态0,用以指示该处理器已跳出了同步点。在该退休后的第二时钟周期中,如果一Sync指令已准备好要退休,则可将SSO信号600设定为状态1。在该同步实施例中,同步逻辑电路314可包含一逻辑“及”门,且所有的SSO信号600信号作为该门的输入,而SSI信号602作为该门的输出。该同步实施例提供了较快的同步机制。然而,只有在处理器是以一个周期接着一个周期进行同步的方式下,才可使用该同步实施例。

如果不保证该等处理器间的同步作业,则可使用同步逻辑电路314的一异步实施例。图7是一异步实施例的方块图。图7示出同步逻辑电路314、输入到同步逻辑电路314的若干SSO信号700、及自同步逻辑电路314输出的若干SSI信号702。在该异步实施例中,每一处理器包含一个两位的SSO信号700,用以指示该处理器的Sync指令的状态。如同该同步实施例中的情形,同步逻辑电路314将一SSI信号702输出到每一处理器。在一实施例中,可以下表来描述SSO信号700的状态。

  SSO状态  状态描述  0  无Sync指令  1  Sync指令准备好要退休  2  Sync指令已退休

表3

如同该同步实施例中的情形,重新排序缓冲区32特别地处理Sync指令。在该异步实施例中,如果一Sync指令随即要退休,则将该处理器的SSO信号设定为状态1,以便将该处理器已准备好要使其Sync指令退休的讯息告知其它的处理器。当输入到同步逻辑电路314的所有SSO信号700都被设定为状态1时,同步逻辑电路314即将SSI信号702设定为状态1。只有在输入到一处理器的SSI信号702被设定为状态1时,该处理器才可使其Sync指令退休。在此种方式下,所有的处理器都同时使其Sync指令退休。当一Sync指令退休时,当一Sync指令退休时,将该处理器的SSO信号700设定为状态2,以便将该处理器正在跳出同步点的讯息告知其它的处理器。当一处理器已跳出同步点,并将其SSO信号700设定为状态2时,该处理器将等候到所有其它处理器都已跳出同步点为止。当所有处理器都已将其SSO信号700设定为状态2时,即将SSI信号702设定为状态0。所有处理器然后可侦测到SSI信号702已被设定为状态0,并继续执行。在SSI信号702回到状态0之后,一处理器然后可将其SSO信号700设定为状态1,而指示另一Sync指令已准备要退休。

同步逻辑电路314的该异步实施例可以是中央逻辑电路,也可以是其中一个处理器的一部分。同步逻辑电路314实施一种小型的状态机,其工作方式如图8所示。图8代表一连续循环,其中要持续地检查FSMState的状态。FSMState代表处理器中Sync信号SSO的状态。起始时,同步逻辑电路314可能处于状态WAIT_ALL_S1。当处于状态WAIT_ALL_S1时,将信号SSI设定为状态0。如果所有的SSO信号都处于状态S1,而指示所有的处理器都准备要使一Sync指令退休,则FSMState的次一状态是ALL_S1。如果并非如此,则FSMState的次一状态保持在WAIT_ALL_S1。一旦所有的SSO信号都处于状态S1,则FSMState转变为状态ALL_S1,然后再转变为WAIT_ALL_S2。在状态WAIT_ALL_S2时,将信号SS1设定为状态1,此时可让每一处理器使其Sync指令退休。当处于状态WAIT_ALL_S2时,同步逻辑电路等候所有的SSO信号进入状态2。一旦所有的处理器将其SSO信号设定为状态2,而指示该等处理器都已跳出同步点之后,则FSMState转变为状态ALL_S2,然后再转变为WAIT_ALL_S1,此时将信号SSI设定为状态0。纵使各处理器并未在锁定步骤中工作,该实施例也可使该等处理器同步。虽然该实施例更具有弹性,但是其执行时间长于前文所述同步实施例的执行时间。

利用暂存区的同步

在多个处理器处理不同的执行线程时交换数据的另一种方式是使用一暂存性寄存器空间。图9示出一ICU920A及TCD900的方块图,该TCD900将若干暂存性寄存器用于同步。除了暂存性寄存器902之外,也加入了用来存取该等暂存性寄存器的暂存性指令(SCratchpadINStruction;简称SCINS)。为了实施该暂存区机制,已将暂存性逻辑电路902加入了该TCD。图9示出ICU920A及TCD900。ICU920A包含SCINS读取指令保留区930A、SCINS写入指令保留区932A、及FIFO指令保留区402A。TCD900包含若干FIFO310、同步逻辑电路314、及若干暂存性寄存器902。ICU920A耦合到TCD900。

该等SCINS是锁存到一暂存性寄存器位置的读取-修改-写入(Read-modify-Write;简称RmodW)指令。在执行线程的平行执行期间,这些指令可修改共享的数据。可根据地址而将该暂存性寄存器锁定在一地址。由可能与ICU920A分离或包含在ICU920A的一特殊功能单元来处理该等SCINS。该SCINS功能单元包含用于读取及写入的各别指令保留区930及932。自该等暂存性指令保留区循序发出所有的指令。以一RmodW作业修改一暂存性位置的任何指令都是一锁定的指令。将SCINS译码成多个作业。至少将产生一锁定的读取指令、ALU作业、及一锁定的写入指令。该机制是以下列的步骤工作:

1.将一锁定的RmodW SCINS译码。利用该等被译码的指令,将一锁定的读取指令及锁定的写入指令派发到SCINS功能单元。

2.将该锁定的读取指令插入锁定的读取指令保留区930A。将该锁定的写入指令插入锁定的写入指令保留区932A。

3.当完成了读取指令保留区930A中所有先前的读取指令时,即自读取指令保留区930A发出该锁定的读取指令。因为循序发出所有的RmodW指令,所以对应的的写入指令现在也在写入指令保留区932A的前方。

4.该读取指令现在读取暂存性寄存器902。如果该读取指令是被锁定的,则该读取指令将等候到其被解除锁定为止。然后该读取指令锁定暂存性寄存器902的位置,完成其作业,并将结果传送到结果总线。然而,仍未自指令保留区930A取出该读取指令。

5.现在可发出与该读取指令相依的所有指令。一旦写入指令保留区932A中该锁定的写入指令接收到其输入操作数之后,即准备要发出该写入指令。然而,直至该写入指令即将要在重新排序缓冲区32中退休时,才发出该写入指令。必须以此种方式执行,这是因为只容许非推测式的写入。

6.当该写入指令即将要在重新排序缓冲区32中退休时,自指令保留区932A发出该写入指令,并写入暂存性寄存器902。该写入指令更新数据,并解除该位置的锁定。现在分别自指令保留区930及932取出该等SCINS读取及写入指令。

在上述步骤6中,如果相关联的写入指令退休了,则自指令保留区930取出该读取指令。该读取指令必须保留在指令保留区930中,以便正确地处理分支的错误预测。在错误预测的分支的情形中,该机制是以下列的步骤工作:

1.当侦测到一错误预测的分支时,使重新排序缓冲区32中在该错误预测的分支之后的各数据项无效。

2.在进行使各数据项无效的期间,可能会侦测到一SCINS锁定的指令。此时将使重新排序缓冲区32将该成为无效的SCINS的重新排序缓冲区标记及一使无效命令传送到该SCINS功能单元。如果侦测到多个SCINS指令,则只需要在该分支之后的第一个指令的标记。

3.该SCINS功能单元利用所传送的该重新排序缓冲区标记,使指令保留区930及932中自所接收的该重新排序缓冲区标记开始且在该标记之后的所有指令无效。

4.如果在使读取指令保留区930A中的指令无效时,命中在该指令保留区930A的前方中且业已发出的一读取指令,则该逻辑电路利用该读取指令的地址来解除对暂存性寄存器902中该位置的锁定。

前文所述的机制可解除一推测式锁定的暂存区位置902的锁定。其优点在于:上述的机制可以推测方式执行锁定的读取指令。虽然上述的说明采用了各别的读取及写入指令保留区,但是亦可使用并考虑其它的实施例。然而,此种实施例必须能够:在错误预测了一锁定的读取指令时,在不执行错误预测的锁定的写入指令的情形下,解除一位置的锁定。

计算机系统

现在请参阅图10,图中示出一计算机系统1800实施例的方块图,该计算机系统1800一多处理器计算机100,该多处理器计算机100经由一总线桥接器1802而耦合到各种系统组件。其它的实施例也是可行的且可考虑使用。在所示系统中,一主存储器1804经由一内存总线1806而耦合到总线桥接器1802,且一图形控制器1808经由一AGP总线1801而耦合到总线桥接器1802。最后,多个PCI装置1812A-1812B经由一PCI总线1814而耦合到总线桥接器1802。可进一步提供一辅助总线桥接器1816,用以经由一EISA/ISA总线1820而将一电气接口提供给一个或多个EISA或ISA装置1818。多处理器计算机100经由一CPU总线1824而耦合到总线桥接器1802,且耦合到一或有的L2高速缓存1828。

总线桥接器1802提供了多处理器计算机100、主存储器1804、图形控制器1808、与连接到PCI总线1814的各装置间之一接口。当亦连接到总线桥接器1802的一个装置接收到一作业时,总线桥接器1802识别该作业的目标例如,该目标是一特定的装置,或者在PCI总线1814的情形中,该目标是在PCI总线1814上。总线桥接器1802将该作业传送到目标装置。总线桥接器1802通常将来自来源装置所使用的协议之一作业转换为目标装置或总线所使用的协议。

除了将一ISA/EISA总线接口提供给PCI总线1814之外,辅助总线桥接器1816可视需要而进一步设有额外的功能。计算机系统1800内亦可视需要而包含在辅助总线桥接器1816外部或整合到辅助总线桥接器1816内的一输入/输出控制器(图中未示出),以便对一键盘及鼠标1822以及各种串行端口及并行端口提供作业上的支持。在其它的实施例中,可在多处理器计算机100与总线桥接器1802之间将一外部高速缓存单元图中未示出进一步耦合到CPU总线1824。在替代实施例中,可将该外部高速缓存耦合到总线桥接器1802,且可将该外部高速缓存的高速缓存控制逻辑电路整合到总线桥接器1802中。L2高速缓存1828进一步示于处理器10的一背面配置。请注意,L2高速缓存1828可与多处理器计算机100分开,或者连同多处理器计算机100而整合到一卡匣例如,slot 1或slot A,或者甚至可连同多处理器计算机100而整合到一半导体基材中。

主存储器1804是一种用来储存应用程序且多处理器计算机100执行时所主要使用的内存。适用的主存储器1804包括动态随机存取内存(Dynamic Random Access Memory;简称DRAM)。例如,多个记忆组的同步DRAM(Synchronous DRAM;简称SDRAM)或RambusDRAM(简称RDRAM)都可适用。

PCI装置1812A-1812B代表诸如网络适配卡、视讯加速器、声卡、硬盘机或软盘机或磁盘控制器、小型计算机系统接(Small ComputerSystem Interface;简称SCSI)卡、及电话卡等的各种周边装置。同样地,ISA装置1818代表诸如调制解调器、声卡、及GPIB或现场使用总线适配卡等各种数据撷取适配卡等的各种周边装置。

提供图形控制器1808,以便控制文字及影像在一显示器1826上的成像。图形控制器1808可包含此项技艺中习知的一典型图形加速器,以便使可有效地移进及移出主存储器1804的三维数据结构成像。图形控制器1808因而可以是AGP总线1801的一主控装置,这是因为图形控制器1808可要求并取得总线桥接器1802内的一目标接口的使用权,因而可存取主存储器1804。一专用的图形总线可适应自主存储器1804迅速地撷取数据。对于某些作业而言,可将图形控制器1808的配置进一步设定成在AGP总线1801上产生PCI协议交易。总线桥接器1802的AGP接口因而可包含用来支持AGP协议交易以及PCI协议目标及来源装置交易的功能。显示器1826是可显示影像或文字的任何电子显示器。适用的显示器1826包括阴极射线管(Cathode RayTube;简称CRT)及液晶显示器(Liquid Crystal Display;简称LCD)等。

请注意,虽然在前文的说明中使用了AGP、PCI、以及ISA或EISA总线作为例子,但是可视需要而代用任何的总线架构。又请注意,计算机系统1800可以是包含额外的多处理器计算机例如,图标的多处理器计算机100a是计算机系统1800的一或有组件之一多重处理计算机系统。多处理器计算机100a可类似于多处理器计算机100。更具体而言,多处理器计算机100a可以与多处理器计算机100相同。多处理器计算机100a可经由一独立的总线而连接到总线桥接器1802如图5所示,或者可与处理器100共享CPU总线1824。此外,处理器100a可耦合到一类似于L2高速缓存1828的或有L2高速缓存1828a。

请注意,本发明的说明可能提及各种信号的触发。在本文的用法中,如果一信号载有用来指示一特定状况的一值,则该信号“被触发”(“asserted”)。相反地,如果一信号载有用来指示缺少一特定状况的一值,则该信号“被停止触发”(“deasserted”)。当一信号载有一逻辑零值时,或相反地,当一信号载有一逻辑一值时,可将该信号界定为被触发。此外,在前文的说明中,曾经述及舍弃了各种值。可以若干种方式舍弃一值,但通常涉及修改该值,以便接收该值的逻辑电路不理会该值。例如,如果该值包含一位,则可使该值反相,而舍弃该值。如果该值是一n位的值,则其中一种该n位的编码可指示该值是无效的。将该值设定为该无效的编码,即可使该值被舍弃。此外,一个n位的值可包含一有效位,而当设定该有效位时,即可指示该n位的值是有效的。该有效位的复位可包含该值的舍弃。也可以使用其它舍弃一值的方法。

熟习此项技艺者在完全了解前文的揭示事项之后,将可易于作出多种变化及修改。将把下列的申请专利范围诠释为包含所有此类的变化及修改。

工业上的应用件

本发明适用于多重处理计算机系统。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号