用于预测执行无竞争的锁定指令的方法和装置的制作方法

文档序号:6596968阅读:110来源:国知局
专利名称:用于预测执行无竞争的锁定指令的方法和装置的制作方法
技术领域
本发明一般涉及采用存储器锁定指令(对存储器执行读_修改_写的原子操作) 的微处理器,更具体地,涉及希望采用可以在无序执行架构中执行的存储器锁定指令的微 处理器。
背景技术
现代的微处理器可以在其架构中支持无序执行。各指令可各自被解码为一组对应 的微操作,然后在执行前被存储到重新排序缓冲器中。调度器可确定哪些微操作已准备好 被执行,并可以不按严格的程序顺序或“无序地”发出上述微操作。当微操作准备引退时, 它们可以按程序顺序引退,因此,看上去它们是按程序顺序执行的。在之前的无序处理器中造成问题的一个指令族是锁定指定族。该锁定指令通常断 言某个信号或采用执行原子存储器业务处理的某过程,也就是说,它锁定存储器中的特定 位置,以防止其他处理器或同一处理器上的其他线程访问在进行作为其组成部分的加载与 存储微操作期间使用的该存储器位置(或等效的高速缓存线)。在不同实施例中,该信号可 包括总线信号或高速缓存一致性协议锁定(protocollock)。这些锁定指令的具体实施要求 在开始执行锁定指令之前引退(retire)所有先前的指令(按程序顺序)。锁定指令的加载 和存储微操作通常被延迟,这使得它们尽可能的被一起执行和引退,以限制处理器保护由 上述锁定指令使用的存储器地址或高速缓存线的时间。然而,这样阻止了加载微操作和任 何其他介于其间的微操作的预测执行,因此,向程序的关键路径中加入了它们的等待时间。 这些具体实施也可能阻止后续的加载操作或其他后续操作的预测执行,从而增加了后续操 作的等待时间。实际上,这可能意味着任何用于支持无序处理的重新排序缓冲器可能填满 流水线和使该流水线发生停顿,这导致了应用程序的性能进一步下降。

发明内容
根据第一实施例,本发明提供了一种处理器,包括预测器,用于作出锁定指令是否会发生竞争的预测;以及调度器,用于当所述预测表明所述锁定指令不发生竞争时以预测方式发出一组与 所述锁定指令对应的微操作;以及用于确定是否出现了竞争指示的监视器,其中,所述竞争指示包括何时st0re_ with_unlock微操作在高速缓存中未命中。根据第二实施例,本发明提供了一种处理器,包括预测器,用于作出锁定指令是否会发生竞争的预测;
解码器,用于将所述锁定指令解码成l0ad_with0Ut_l0Ck微操作和存储微操作; 以及监视器,用于确定是否出现了竞争指示,所述竞争指示包括何时存储微操作在高 速缓存中未命中。根据第三实施例,本发明提供了一种用于预测执行无竞争的锁定指令的方法,包 括预测锁定指令是否会发生竞争;当所述预测认为所述锁定指令不会发生竞争时,发出对应于所述锁定指令的 load_without_lock 微操作;以及监视竞争指示,所述竞争指示包括何时St0re_With_unl0Ck微操作在高速缓存中 未命中。根据第四实施例,本发明提供了一种用于预测执行无竞争的锁定指令的装置,包 括预测锁定指令是否会发生竞争的单元; 当所述预测认为所述锁定指令不会发生竞争时发出对应于所述锁定指令的load_ without_lock微操作的单元;以及监视竞争指示的单元,其中,所述竞争指示包括何时St0re_With_unl0Ck微操作 在高速缓存中未命中。根据第五实施例,本发明提供了一种用于预测执行无竞争的锁定指令的系统,包 括第一处理器,该处理器包括预测器和调度器,所述预测器用于预测锁定指令是否 会发生竞争,所述调度器用于在所述预测认为所述锁定指令不会发生竞争时以预测方式发 出一组对应于所述锁定指令的微操作;用于确定是否出现了竞争指示的监视器,其中,所述竞争指示包括何时st0re_ With_unl0Ck微操作在高速缓存中未命中;第一接口,用于将第一处理器耦合到第二处理器;第二接口,用于将第一处理器耦合到音频输入/输出设备;以及耦合到所述第二接口的音频输入/输出设备。根据第六实施例,本发明提供了一种用于预测执行无竞争的锁定指令的系统,包 括第一处理器,包括用于预测锁定指令是否会发生竞争的预测器,用于将所述锁定 指令解码成l0ad_With0Ut_l0Ck微操作和存储微操作的解码器,以及用于在所述存储微操 作引退之前确定是否出现了竞争指示的监视器,其中,所述竞争指示包括何时store_with_ unlock微操作在高速缓存中未命中;第一接口,用于将第一处理器耦合到第二处理器;第二接口,用于将第一处理器耦合到音频输入/输出设备;以及耦合到所述第二接口的音频输入/输出设备。根据第七实施例,本发明提供了一种处理器,包括用于最初指明锁定指令不发生竞争的部件;
调度器,用于以预测方式发出对应于所述锁定指令的一组微操作;以及用于确定是否出现了竞争指示的监视器,其中,所述竞争指示包括何时st0re_ with_unlock微操作在高速缓存中未命中。根据第八实施例,本发明提供了一种处理器,包括用于最初指明锁定指令不发生竞争的部件;解码器,用于将所述锁定指令解码成l0ad_With0Ut_l0Ck微操作和存储微操作;以及监视器,用于确定是否出现了竞争指示,所述竞争指示包括何时Store_With_ unlock微操作在高速缓存中未命中。根据第九实施例,本发明提供了一种用于预测执行无竞争的锁定指令的方法,包 括最初假定锁定指令不会发生竞争;发出对应于所述锁定指令的IoacLwithout_loCk微操作;以及监视竞争指示,所述竞争指示包括何时St0re_With_unl0Ck微操作在高速缓存中 未命中。根据第十实施例,本发明提供了一种用于预测执行无竞争的锁定指令的装置,包 括最初假定锁定指令不会发生竞争的单元;发出对应于所述锁定指令的IoacLwithout_loCk微操作的单元;以及监视竞争指示的单元,所述竞争指示包括何时St0re_With_unl0Ck微操作在高速 缓存中未命中。


在附图中,通过举例而非限制的方式说明了本发明,且类似的附图标记表示类似 的元件,其中图1是根据本发明的一个实施例的处理器及其执行流水线的示意图,其中示出了 在流水线末端附近工作的锁定竞争预测器;图2是根据本发明的一个实施例的处理器及其执行流水线的示意图,其中示出了 在流水线起始附近工作的锁定竞争预测器;图3是根据本发明的一个实施例的处理器及其执行流水线的示意图,其中示出了 在流水线末端附近工作的锁定竞争预测器;图4是根据本发明的一个实施例的锁定指令执行的状态图;以及图5A和图5B是根据本发明的两个实施例的系统的示意图,这些系统包括支持锁 定竞争预测器以预测执行锁定指令的处理器。
具体实施例方式以下的说明描述了允许无序执行锁定指令的技术,在所述锁定指令未发生竞争 时,无序执行是有利的。可以认为,当超过一个处理器或同一处理器中超过一个线程几乎同 时地试图锁定存储器中的相同位置时,锁定指令发生了竞争。当另一处理器或者同一处理器中的另一个线程试图访问由另一处理器或者线程锁定的存储器位置时,可以认为锁定指 令发生了竞争。这是因为不能确定另一处理器(或另一线程)的存储器访问是锁定企图还 是普通的存储器访问。在以下的描述中,给出了大量具体细节(如逻辑实施方式、软件模块 分配、总线和其他接口信令技术和操作的细节),以便使读者更为透彻地理解本发明。然而, 本领域技术人员应当理解,在不具有这些具体细节时仍可以实施本发明。在其他实例中,未 详细示出控制结构、门级电路和完整的软件指令序列,以避免干扰对本发明的说明。利用本 文包括的说明内容,无需进行过多试验,本领域技术人员便可实现适当的功能。在某些实施 例中,以为与Pentium 兼容的处理器(如Intel 公司生产的处理器)预测符合要求的 预测值的形式公开了本发明。然而,也可以在其他种类的处理器(如与Itanium 族兼容 的处理器或与X-Scale⑧族兼容的处理器)中实施本发明。参考图1,其中示出了根据本发明的一个实施例的处理器100及其执行流水线,该 图示出了在流水线的末端附近工作的锁定竞争预测器。在图1的实施例中,示出了前端级 102、解码级104、跟踪高速缓存106、重新排序缓冲器(ROB) 108、执行级112和引退级114。 在其他实施例中,可以在流水线中使用其他级,且可以改变级的顺序。 可通过前端级102从一级(Li)高速缓存124取得宏指令,并通过解码级104将其 解码成对应的一组微操作。可以将这些成组的微操作以痕迹(trace)的形式存储在跟踪高 速缓存106中,在其他实施例中,可以将上述痕迹存储在其他形式的缓冲器中。在另一些实 施例中,可以以不同于痕迹的形式将这些成组的微操作存储在其他形式的缓冲器中。当准 备执行该组微操作时,可以将其加载到ROB 108之中。ROB 108可包括一系列存储位置150 至166,其中,各存储位置可以包含微操作、其源和目的地寄存器的标识和执行结果(当存 在时)。在其他实施例中,可以设置不同数目的存储位置,且这些存储位置的内容的确切格 式可以不同。可使用调度器110来确定存储位置150-166中的哪些微操作具有它们的源操作 数值(从而允许被执行)。在一个实施例中,调度器110可以检查存储位置150-166中的 各微操作的源寄存器的状态。然后,调度器110发出其源寄存器中包含用于执行的有效数 据的那些微操作(在执行级112中),而不论它们在所写的软件中的顺序(即可能是“无序 的”)。然后,可以将因这些微操作的执行而得到的任何结果作为执行结果临时存储在对应 的存储位置中。存储位置150至166中的各个存储位置可以具有相关的“完成”位130至146,这 些位可以指明对应的微操作已完成执行且执行所得结果已作为执行结果临时存储在对应 的存储位置150-166中。在一个实施例中,完成位130-146可以指明,一旦与之前指令(按 程序顺序)对应的微操作引退,则与该完成位对应的微操作也准备引退。(宏指令产生的微 操作仍必须按原始程序顺序引退)。可以将准备引退的微操作发送到引退级114。也可以 将调用存储器引用的微操作置于存储器顺序缓冲器(MOB) 122之中。MOB 122可存储若干等 待的存储器引用操作。图1中的处理器能执行锁定指令。一种形式的锁定指令可以在处理器对被锁定的 存储位置执行操作时阻止其他处理器或者多线程处理器中的其他线程访问该给定存储位 置或高速缓存线。实际上,在执行上述指令时,锁定了该具体存储位置或高速缓存线,以防 止其他处理器或线程的访问。另一种观点是,这种形式的锁定允许指令对具体存储位置或高速缓存线进行原子修改(业内通常称为原子读-修改-写指令)。相比之下,这些锁定指令可作为软件旗语(semaphore)使用,以便以语义的方式锁定覆盖数目更多的指令的其他 存储位置在本领域中,通常将这些数目更多的指令称为临界区(critical section)。在一 个实施例中,可以将锁定指令实施成将附加到原始指令的锁定前缀。在与Pentium 兼容的 架构中,可以将锁定前缀加到包含如下种类的指令(其中,目标操作数为存储器操作数)之 前=ADD (加),ADC (进位加),AND (逻辑与),BTC (位测试并求反),BTR (位测试并复位), BTS (位测试并置位),CMPXCHG (比较并交换),CMPXCH8B (比较并交换8个字节),DEC (递 减),INC (递增),NEG ( 二进制补码取反),NOT ( 二进制反码取反),OR (逻辑或),SBB (整 数借位减),SUB (减),XOR (异或),XADD (交换并加),以及XCHG (交换存储器和寄存器)。 当强制要求其他处理器或线程不能改变由这些指令指定的读_修改_写功能部分之间的目 的地存储位置的值时,可以用所述锁定前缀来使得这些部分原子化(看上去为一个部分)。在一个实施例中,可以将锁定指令解码成若干微操作,包括“ load_with_store_ interblock”微操作和“stonimlock”微操作。对于上一段提及的各种指令,可以存在其 他微操作。为便于讨论,我们可以将“load_with_store_intent_lock”微操作称为“load_ with_lock”微操作,并将其记为loacLlock。在进入执行单元112时,loacLlock微操作会 启动锁定情形。当从MOB 122发出storejniock微操作时,可以去除该锁定情形。前述实施例在满足两个条件之前不会发出loacLlock微操作。第一个条件是,原 始程序顺序中的所有先前指令必须已执行和引退。换言之,loacLlock微操作应当是ROB 108中最陈旧的微操作。第二个条件是,MOB 122中先前等待的存储微操作必须已完成,且 与M0B122关联的缓冲存储器的内容必须已排空(换言之,所有存储操作必须已将其数据写 入到存储器系统中)。对无序执行而言,这两个条件不兼容。应当注意,锁定指令经常并非是绝对必要的。在很多情况下,存储位置或者高速缓 存线在锁定期间保持无竞争状态也就是说,没有其他处理器或线程尝试访问锁定中的特 定存储位置或高速缓存线,且没有其他处理器事件威胁到该存储位置的完整性。因此,处理 器100还包括锁定竞争预测器118和监视器逻辑116。锁定竞争预测器118可以预测特定 锁定指令在锁定期间是否会发生竞争。如果预测认为该特定锁定指令会发生竞争,则采用 先前的用于锁定指令的执行方法。然而,如果预测认为该特定锁定指令实际上不会发生竞争,则可以以预测的方式 发出正常的加载微操作,并用监视器逻辑116监视所关心的存储位置,以确定是否出现了 任何竞争指示。因此,在执行指令的读-修改-写部分时,实际上,我们可以不锁定存储位置 来实现原子性(atomicity),而是独立执行各个部分,同时监视任何指明其他处理器或线程 可能破坏原子性的情形。所述竞争指示可包括对包含加载指令的目标地址的高速缓存线 的窥探(snoop)、中断或是否随后的storejniock微操作在高速缓存中发生未命中。在某 些实施例中,监视器逻辑116监视处理器中存在的若干已有的逻辑信号。如果在表示等效 锁定情形的时段内未出现竞争指示,则上述以预测方式发出的正常加载微操作可以正常引 退。这样,便允许无序执行锁定指令和提高处理器性能。然而,如果出现了竞争指示,则必 须清洗(flush)流水线,并重新执行锁定指令。在重新执行期间,可以按传统实施方式非预 测地执行锁定指令,以帮助处理向前进行。在另一个实施例中,在以非预测方式执行指令之 前,处理器可以尝试以预测方式执行锁定指令若干次,并在每次执行时检测竞争。当处理器以非预测方式执行指令时(如在传统实施方式中一样),它可以断言信号或者采用某过程 来防止任何其他线程(或处理器)访问所关心的存储位置。这样可确保处理器完成所述执 行和引退所述锁定指令,而无需任何随后的重启。如果在完成固定次数的预测执行尝试后, 处理器未回到非预测执行方式,则可能是处理器在每次执行中遇到了竞争指示并被迫重复 地重启所述锁定指令,从而阻止了处理的向前进行。锁定竞争预测器118可利用电路和有关多种著名的分支预测器之一的运行的理 论(包括本地预测器和全局预测器的相关理论)。在一个实施例中,锁定竞争预测器118 可以是存储某些锁定指令的线性指令指针的表,且过去曾发现这些锁定指令存在竞争。在 一个实施例中,在处理器初始化时,所述表可以为空,并预先假定所有锁定指令不会发生竞 争。当发现关于给定锁定指令的预测错误时,将该锁定指令的线性指令指针写入所述表中, 以备将来使用。当锁定竞争预测器118预测给定的锁定指令不会发生竞争时,调度器110可以从 ROB 108以预测方式发出对应的loacLlock微操作。在一个实施例中,可以从ROB 108发出 作为预测的loacLwithoutJock微操作的对应的loacLlock微操作。然后,两种微操作均 可生成关于拥有对应的高速缓存线的请求,在某些实施例中,这导致高速缓存线转变为排 他的“E”状态(在使用修改的/排他的/共享的/无效的“MESI”高速缓存一致性协议的 高速缓存中)。如果在最低高速缓存中未命中加载微操作,则分配填充缓冲器,且所述加载 微操作作为等待的操作在M0B 122中进行“休眠”。如果在高速缓存中命中了 loacLlock微操作,或当通过对应的高速缓存线填充唤 醒了在M0B 122中休眠的loacLlock微操作时,则发生以下情形。在某些实施例中,可能有 必要在执行loacLlock和引退storejnlock之间防止取代包含锁定变量的高速缓存线。 在一个实施例中,在高速缓存线的标签(tag)中,可以将一个位置位,以防止上述取代,但 仍允许进行存储器排序协议所要求的窥探。然而,在更陈旧的加载操作之前,可以执行一组 上述预测的loacLlock,从而用尽了高速缓存组中的所有途径(way)。这样,便未在高速缓 存组中为更陈旧的加载操作留下任何从下一级高速缓存填充其数据的途径,从而防止了更 陈旧的加载操作的引退,因为它无法完成。上述预测的loacLlock无法引退,因为它们不是 最陈旧的操作,从而形成了死锁。为防止这种情况的出现,仅当所述高速缓存组中存在足够 的未锁定途径时才以预测方式发出loacLlock,以便为更陈旧的指令留出至少某些可用的 途径。如果不存在足够的未锁定途径,则仅当所有先前的指令引退后才发出loacLlock(与 传统实施方式一样)。在一个实施例中,至少必须具有两个可用途径才能发出预测的load_ lock。不管是load_lock微操作还是load_without_lock微操作从R0B 108发出,在所 述加载微操作之前或者之后,可以从R0B 108发出对应的storejnlock微操作和任何居于 其间的微操作。然而,st0re_unl0Ck微操作可以在M0B 122中保持等待,直到加载微操作和 任何居于其间的微操作处于引退点(在该点处,M0B 122可以发出stonimlock微操作) 为止。如果监视器逻辑116确定出现了竞争指示,则不允许引退加载微操作和对应的 stonimlock微操作。这意味着关于锁定指令不会发生竞争的预测是错误的。在不同实施 例中,考虑所述竞争指示的时段长度可能不同。在一个实施例中,所述时段可在存储器存储操作(对应于stonimlock)变得全局可见时结束。此处的“全局可见”意味着高速缓存 一致性域中的所有代理(agent)均可看到所述存储位置的最新值。在另一个实施例中,所 述时段可在st0re_unl0Ck成为MOB 122中的最陈旧的存储操作时结束。在该第二实施例 中,在store_unlock成为M0B122中最陈旧的存储操作的时刻与store_unlock变得全局可 见的时刻之间的短暂时间内,可能需要实现实际的锁定情形。在前述实施方式中,当存储器存储操作变得全局可见时,store_unlock微操作成 为ROB 108中最陈旧的未引退的微操作。然而,在一个实施例中,当存储器存储操作变得全 局可见时,store_unlock微操作不是ROB 108中最陈旧的未引退的微操作,因为加载(存 在锁定或不存在锁定)微操作在存储器存储操作变得全局可见之前不会引退。因此,所述 加载操作是机器中最陈旧的未引退的微操作。在另一个实施例中,可以省略锁定竞争预测器118。相反,可以假定在所有情况下 锁定指令不会发生竞争。在各种情况下,最初可以预测执行对应的加载微操作。在加载指 令事实上发生竞争的情况下,监视器逻辑116可检测竞争指示,并重启执行流水线。仅那些 导致竞争指示的出现的锁定指令才会以非预测方式重新执行。在另一个实施例中,可以省略监视器逻辑116。在该实施例中,高速缓存系统可包 括逻辑,用于拒绝针对锁定指令关心的地址的窥探。这样,无需调用正式的锁定,便可以保 持所关心的地址中的内容的完整性。生成上述窥探的另一个代理可以将对其窥探的拒绝视 为稍后重新尝试窥探的指示。现在参考图2,其中示出了根据一个实施例的处理器及其执行流水线的示意图,该 图示出了在流水线起始附近工作的锁定竞争预测器。图2所示的许多电路与图1类似,但 锁定竞争预测器218可用于修改解码级204的操作。当锁定竞争预测器218确定锁定指令 不会发生竞争时,解码级204将锁定指令解码成包括常规的加载微操作和stonimlock微 操作的微操作,而不是总将锁定指令解码成loacLlock微操作和storejnlock微操作。在 某些实施例中,上述常规的加载微操作可能以附加了提示或其他状态位的loacLlock微操 作的形式出现。然后可以用这些微操作来在跟踪高速缓存206中构建痕迹。在其他实施例 中,可以将上述微操作临时存储在另一种形式的缓冲器中。监视器逻辑216可以执行与图1中的监视器逻辑116所执行功能类似的功能。 同样的,如果监视器逻辑216确定出现了竞争指示,则不允许引退加载微操作和对应的 stonimlock微操作。这意味着关于锁定指令不会发生竞争的预测是错误的。在不同实 施例中,考虑上述竞争指示的时段长度可能不同。在一个实施例中,该时段可以在存储器存 储操作(对应于storejnlock)变得全局可见时结束。在另一个实施例中,该时段可以在 store_unlock成为M0B 222中的最陈旧的存储操作时结束。如果确定了竞争指示,则恢复过程可能不同于以上结合图1所述的过程。重启 时不能从跟踪高速缓存206中重新发出锁定指令,因为跟踪缓存206可能包含具有load_ without_lock微操作的痕迹。必须在解码级204中将上述锁定指令再次解码,这一次,将该 指令解码成包括loacLlock微操作和对应的storejnlock微操作的微操作。这些微操作 可能要求在跟踪高速缓存206中构建新的痕迹。现在参考图3,其中示出了根据一个实施例的处理器及其执行流水线的示意图,该 图示出了在流水线末端附近工作的锁定竞争预测器。图3中的实施例包括指定为重放队列322的修改后的M0B,以支持与Pentium 4兼容的处理器中的重放操作。重放操作可通 过重新执行以预测方式发出的微操作来修复不正确的数据预测,直到数据预测变得正确为 止。在一个实施例中,如果监视器逻辑316指明了竞争而未清洗流水线或者重启锁定指令, 则可以重放load_lock和store_unlock微操作。在另一个实施例中,可以使用检查点恢复逻辑370执行检查点修复。在一个实施 例中,检查点恢复逻辑370可以在loacLlock微操作之前的所有微操作均已引退时存储处 理器状态的快照。在执行检查点修复之后,组成所述预测执行的锁定指令的所有微操作和 在某些实施例中程序中的任何后续指令可以在完成后依次引退。如果监视器逻辑316在存 储器存储操作(对应于stonimlock)全局可见之前指明了竞争,这表明必须清洗处理器 流水线,然后,(从检查点恢复逻辑370)恢复上述loacLlock之前的与其紧接的微操作引 退时的处理器状态。可以重新执行loacLlock、storejnlock和组成上述锁定指令的任何 其他微操作。在该重新执行期间,可以将作为组成部分的上述微操作视为传统实施方式中 的微操作,并可以以非预测方式执行这些微操作。在其他实施例中,可以在其他处理器(如 图1和图2中所示的处理器)中使用检查点恢复逻辑370。在一个实施例中,当锁定竞争预测器318确定锁定指令不会发生竞争时,可以从 R0B 308以预测方式发出load_lock微操作或load_without_lock微操作。不管是load_ lock微操作还是l0ad_with0ut_l0Ck微操作从R0B 308发出,在加载微操作之前或者之后, 可以从R0B 308发出对应的storejnlock微操作和任何居于其间的微操作。当不正确的 数据预测创建了坏地址时,一个或者多个数据检查逻辑368将无效的地址信号372发送到 重放队列322。可以将无效地址信号372与监视器逻辑316 —起使用,以确定对预测的加载 微操作和对应的store_unlock微操作的处理。当无效地址信号372为假且监视器逻辑316未检测到竞争指示时,加载微操作和 store_unlock微操作可以正常引退。当无效地址信号372为假且监视器逻辑316检测到竞 争指示时,可以清洗流水线并重启锁定指令。在另一个实施例中,如果监视器逻辑316检测 到竞争指示,则可以重放加载微操作。然而,当无效地址信号372为真时,监视器逻辑316 的状态是无关的,因为任何竞争指示均可与错误地址相关联。从而,当无效地址信号372为 真时,发生重放,且任何来自监视器逻辑316的竞争指示均不会更新锁定竞争预测器318。现在参考图4,其中示出了根据本发明的一个实施例的锁定指令的执行的状态图。 在框410中,作出关于锁定指令是否会发生竞争的预测。如果预测认为会发生竞争,则过程 沿竞争路径414离开,并进入框460。在框460中,当loacLlock微操作引退且仅在所有等 待的存储缓冲器排空后,将loacLlock微操作发送到存储器系统。然后,在框470中,以非 预测方式正常执行锁定指令的其他微操作。如果框410中作出的预测认为锁定指令不会发生竞争,则过程沿未竞争路径412 离开,且可以以预测方式发出loacLlock微操作(或是某些实施例中的附有关于所述锁定 操作不会发生竞争的某些提示的loacLlock微操作,或是某些实施例中的、变形为load_ with_uncontended_lock微操作或load_without_lock微操作之类的某些新的微操作的 loacLlock微操作),以供执行。然后,在框430中,当loadjock微操作引退时,可以将 storejnlock微操作发送到存储器。然后,该storejnlock微操作准备引退。在一个实施 例中,该stonimlock微操作在存储器存储操作变得全局可见时准备引退。这样也允许上述loacLlock微操作引退。在另一个实施例中,上述st0re_unl0Ck微操作在存储器存储操 作成为存储器排序缓充器中最陈旧的等待的存储微操作时准备引退。而这允许上述load_ lock微操作引退。如果上述storejnlock微操作准备引退(在一个实施例中,当其成为全局可见 时)而无任何竞争指示,则过程沿路径432离开,并且在框440中上述loacLlock微操作引 退,且用预测结果真更新预测逻辑。然而,如果在上述stonimlock微操作准备引退之前 出现了竞争指示,则程序沿路径434离开,并在框450中重启锁定指令,且用假预测结果更 新预测逻辑。在该重新执行中,可以如传统实施方式一样以非预测方式执行锁定指令,以帮 助处理向前进行。在另一个实施例中,可以省略框410、460和470。相反的,可以假定在所有情况下 锁定指令不会发生竞争。在各种情况下,最初以预测方式执行对应的加载微操作(框420)。 在加载指令事实上发生竞争的情况下,监视器逻辑160可以检测竞争指示,清洗执行流水 线,并重启锁定指令(框450)。仅那些导致了竞争指示的锁定指令才会以非预测方式重新 执行。现在参考图5A和图5B,其中示出了根据本发明的两个实施例的、包括支持锁定竞 争预测器和监视器逻辑的处理器的系统的示意图。图5A中的系统一般性地示出了通过系 统总线将处理器、存储器和输入/输出设备相互连接起来的系统,而图5B的系统一般性地 示出了通过若干点到点接口将处理器、存储器和输入/输出设备相互连接起来的系统。图5A的系统可以包括若干处理器,其中,为清楚起见,仅示出了两个处理器40、 60。处理器40、60可以包括一级高速缓存42、62。图5A的系统可以具有通过总线接口 44、 64、12、8与系统总线6连接的若干功能。在一个实施例中,系统总线6可以是Intel .公司 生产的Pentium 微处理器采用的前端总线(FSB)。在其他实施例中,可以使用其他总线。 在某些实施例中,存储器控制器34和总线桥32统称为芯片组。在某些实施例中,可以以不 同于图5A的实施例中所示内容的方式在各物理芯片之间划分芯片组的各个功能。存储器控制器34允许处理器40、60读和写系统存储器10、基本输入/输出系统 (BIOS)的可擦除可编程只读存储器(EPR0M)36。在某些实施例中,BIOS EPR0M 36可利用 闪存。存储器控制器34可以包括总线接口 8,以允许将存储器读和写的数据送至系统总线 6上的总线代理(bus agents)和从这些代理接收上述数据。通过高性能的图形接口 39,存 储器控制器34也可以与高性能的图形电路38相连。在某些实施例中,高性能图形接口 39 可以是先进图形端口(AGP)类型的接口。存储器控制器34可以通过高性能图形接口 39将 数据从系统存储器10导向高性能图形电路38。图5B的系统也可以包括若干处理器,其中,为清楚起见,仅示出了两个处理器70、 80。处理器70、80各自包括本地内存控制器集线器(MCH)72、82,以连接到存储器2、4。处 理器70、80可通过点到点接口 50和使用点到点接口电路78、88交换数据。处理器70、80 可各自通过单独的点到点接口 52、54和使用点到点接口电路76、94、86、98与芯片组90交 换数据。芯片组90也可以通过高性能图形接口 92与高性能图形电路38交换数据。在图5A的系统中,总线桥路32允许系统总线6和总线16之间的数据交换,在某 些实施例中,上述总线是工业标准架构(ISA)总线或者外围组件互连(PCI)总线进行。在 图5B的系统中,芯片组90可通过总线接口 96与总线16交换数据。在这两个系统中,总线16上存在各种输入/输出I/O设备14,在某些实施例中,这些设备包括低性能图形控制器、 视频控制器和网络控制器。在某些实施例中,可以使用另一个总线桥18来允许在总线16 和总线20之间交换数据。在某些实施例中,总线20可以是小型计算机系统接口(SCSI)总 线、集成驱动电子设备(IDE)总线或通用串行总线(USB)型的总线。可以将其他I/O设备 与总线20相连。这些设备包括键盘和光标控制设备22 (包括鼠标)、音频I/O 24、通信设 备26 (包括调制解调器和网络接口)和数据存储设备28。可以将软件代码30存储在数据 存储设备28上。在某些实施例中,数据存储设备28可以是固定的磁盘、软盘驱动器、光盘 驱动器、磁光盘驱动器、磁带或非易失性存储器(包括闪存)。 在以上说明中,结合具体的实施例对本发明进行了描述。然而,显然可以对本发 明进行各种修改和变更,而不至于背离由所附权利要求限定的本发明的更广泛的精神和范 围。因此,应将本说明书和附图视为说明性的而非限制性的。
权利要求
一种处理器,包括预测器,用于作出锁定指令是否会发生竞争的预测;以及调度器,用于当所述预测表明所述锁定指令不发生竞争时以预测方式发出一组与所述锁定指令对应的微操作;以及用于确定是否出现了竞争指示的监视器,其中,所述竞争指示包括何时store_with_unlock微操作在高速缓存中未命中。
2.根据权利要求1所述的处理器,其中,所述调度器发出作为l0ad_With0Ut_l0Ck微操 作的load_with_lock微操作。
3.根据权利要求1所述的处理器,其中,当所述监视器确定出现了竞争指示时,所述处 理器重启对所述锁定指令的处理。
4.根据权利要求3所述的处理器,其中,所述竞争指示是对包含所述锁定指令的目标 地址的高速缓存线的窥探。
5.根据权利要求3所述的处理器,其中,所述竞争指示包括中断。
6.根据权利要求1所述的处理器,其中,所述监视器在所述St0re_With_iml0Ck微操作 成为最陈旧的未引退的存储微操作之前确定所述竞争指示。
7.根据权利要求1所述的处理器,其中,所述监视器在所述St0re_With_iml0Ck微操作 的结果变得全局可见之前确定所述竞争指示。
8.根据权利要求1所述的处理器,还包括窥探拒绝,用于拒绝对所述锁定指令的目标 地址的窥探。
9.一种处理器,包括预测器,用于作出锁定指令是否会发生竞争的预测;解码器,用于将所述锁定指令解码成l0ad_With0Ut_l0Ck微操作和存储微操作;以及监视器,用于确定是否出现了竞争指示,所述竞争指示包括何时存储微操作在高速缓 存中未命中。
10.根据权利要求9所述的处理器,其中,所述处理器在所述监视器确定出现了竞争指 示时重启对所述锁定指令的处理。
11.根据权利要求10所述的处理器,其中,所述竞争指示包括对包括所述锁定指令的 目标地址的高速缓存线的窥探。
12.根据权利要求10所述的处理器,其中,所述竞争指示包括中断。
13.根据权利要求9所述的处理器,其中,所述监视器在所述存储微操作成为最陈旧的 未引退的存储微操作之前确定所述竞争指示。
14.根据权利要求9所述的处理器,其中,所述监视器在所述存储微操作的结果变得全 局可见之前确定所述竞争指示。
15.一种用于预测执行无竞争的锁定指令的方法,包括预测锁定指令是否会发生竞争;当所述预测认为所述锁定指令不会发生竞争时,发出对应于所述锁定指令的load_ without_lock微操作;以及监视竞争指示,所述竞争指示包括何时St0re_With_unl0Ck微操作在高速缓存中未命中。
16.根据权利要求15所述的方法,还包括在所述监视检测到所述竞争指示时重启对所 述锁定指令的执行。
17.根据权利要求15所述的方法,其中,所述竞争指示包括对包括所述锁定指令的目 标地址的高速缓存线的窥探。
18.根据权利要求15所述的方法,其中,所述竞争指示包括中断。
19.根据权利要求15所述的方法,其中,所述发出包括从缓冲器发送所述load_ without_lock 微操作。
20.根据权利要求19所述的方法,其中,所述loacLwithoutJock微操作作为load_ with_lock微操作存储在所述缓冲器中。
21.根据权利要求15所述的方法,其中,所述发出包括从所述锁定指令解码所述load_ without_lock 微操作。
22.一种用于预测执行无竞争的锁定指令的装置,包括预测锁定指令是否会发生竞争的单元;当所述预测认为所述锁定指令不会发生竞争时发出对应于所述锁定指令的load_ without_lock微操作的单元;以及监视竞争指示的单元,其中,所述竞争指示包括何时st0re_With_iml0ck微操作在高 速缓存中未命中。
23.根据权利要求22所述的装置,还包括在所述监视检测到所述竞争指示时重启对所 述锁定指令的执行的单元。
24.根据权利要求22所述的装置,其中,所述竞争指示包括对包括所述锁定指令的目 标地址的高速缓存线的窥探。
25.根据权利要求22所述的装置,其中,所述竞争指示包括中断。
26.根据权利要求22所述的装置,其中,所述发出单元包括从缓冲器发送所述load_ without_lock微操作的单元。
27.根据权利要求26所述的装置,其中,所述l0ad_with0ut_l0Ck微操作作为load_ with_lock微操作存储在所述缓冲器中。
28.根据权利要求22所述的装置,其中,所述发出单元包括从所述锁定指令解码所述 load_without_lock微操作的单元。
29.一种用于预测执行无竞争的锁定指令的系统,包括第一处理器,该处理器包括预测器和调度器,所述预测器用于预测锁定指令是否会发 生竞争,所述调度器用于在所述预测认为所述锁定指令不会发生竞争时以预测方式发出一 组对应于所述锁定指令的微操作;用于确定是否出现了竞争指示的监视器,其中,所述竞争指示包括何时st0re_with_ unlock微操作在高速缓存中未命中;第一接口,用于将第一处理器耦合到第二处理器;第二接口,用于将第一处理器耦合到音频输入/输出设备;以及耦合到所述第二接口的音频输入/输出设备。
30.根据权利要求29所述的系统,其中,所述调度器发出作为l0ad_with0Ut_l0Ck微操 作的load_with_lock微操作。
31.根据权利要求29所述的系统,其中,所述监视器用于确定在St0re_With_iml0ck微 操作引退之前是否出现了竞争指示。
32.根据权利要求29所述的系统,其中,所述处理器在所述监视器确定出现了所述竞 争指示时重启对所述锁定指令的处理。
33.根据权利要求29所述的系统,其中,所述监视器在所述St0re_With_iml0Ck微操作 成为最陈旧的未引退的存储微操作之前确定所述竞争指示。
34.根据权利要求29所述的系统,其中,所述监视器在所述St0re_With_iml0Ck微操作 的结果变得全局可见之前确定所述竞争指示。
35.一种用于预测执行无竞争的锁定指令的系统,包括第一处理器,包括用于预测锁定指令是否会发生竞争的预测器,用于将所述锁定指令 解码成l0ad_With0Ut_l0Ck微操作和存储微操作的解码器,以及用于在所述存储微操作 引退之前确定是否出现了竞争指示的监视器,其中,所述竞争指示包括何时store_with_ unlock微操作在高速缓存中未命中;第一接口,用于将第一处理器耦合到第二处理器;第二接口,用于将第一处理器耦合到音频输入/输出设备;以及耦合到所述第二接口的音频输入/输出设备。
36.根据权利要求35所述的系统,其中,所述处理器在所述监视器确定出现了所述竞 争指示时重启对所述锁定指令的处理。
37.根据权利要求35所述的系统,其中,所述监视器在所述存储微操作成为最陈旧的 未引退的存储微操作之前确定所述竞争指示。
38.根据权利要求35所述的处理器,其中,所述监视器在所述存储微操作的结果变得 全局可见之前确定所述竞争指示。
39.一种处理器,包括用于最初指明锁定指令不发生竞争的部件;调度器,用于以预测方式发出对应于所述锁定指令的一组微操作;以及用于确定是否出现了竞争指示的监视器,其中,所述竞争指示包括何时st0re_with_ unlock微操作在高速缓存中未命中。
40.根据权利要求39所述的处理器,其中,所述调度器发出作为l0ad_with0Ut_l0Ck微 操作的load_with_lock微操作。
41.根据权利要求39所述的处理器,其中,所述处理器在所述监视器确定出现了所述 竞争指示时重启对所述锁定指令的处理。
42.根据权利要求39所述的处理器,其中,所述监视器在所述St0re_With_iml0Ck微操 作成为最陈旧的未引退的存储微操作之前确定所述竞争指示。
43.根据权利要求39所述的处理器,其中,所述监视器在所述St0re_With_iml0Ck微操 作的结果变得全局可见之前确定所述竞争指示。
44.根据权利要求39所述的处理器,还包括窥探拒绝,用于拒绝对所述锁定指令的目 标地址的窥探。
45.一种处理器,包括用于最初指明锁定指令不发生竞争的部件;解码器,用于将所述锁定指令解码成l0ad_With0Ut_l0Ck微操作和存储微操作;以及监视器,用于确定是否出现了竞争指示,所述竞争指示包括何时St0re_With_unl0Ck 微操作在高速缓存中未命中。
46.根据权利要求45所述的处理器,其中,所述处理器在所述监视器确定出现了所述 竞争指示时重启对所述锁定指令的处理。
47.根据权利要求45所述的处理器,其中,所述监视器在所述存储微操作成为最陈旧 的未引退的存储微操作之前确定所述竞争指示。
48.根据权利要求45所述的处理器,其中,所述监视器在所述存储微操作的结果变得 全局可见之前确定所述竞争指示。
49.一种用于预测执行无竞争的锁定指令的方法,包括最初假定锁定指令不会发生竞争;发出对应于所述锁定指令的l0ad_with0ut_l0Ck微操作;以及监视竞争指示,所述竞争指示包括何时St0re_With_unl0Ck微操作在高速缓存中未命中。
50.根据权利要求49所述的方法,还包括在所述监视检测到所述竞争指示时重启对所 述锁定指令的执行。
51.根据权利要求49所述的方法,其中,所述发出包括从缓冲器发送所述load_ without_lock 微操作。
52.根据权利要求51所述的方法,其中所述loacLwithoutJock微操作作为load_ with_lock微操作存储在所述缓冲器中。
53.根据权利要求49所述的方法,其中,所述发出包括从所述锁定指令解码所述load_ without_lock 微操作。
54.一种用于预测执行无竞争的锁定指令的装置,包括最初假定锁定指令不会发生竞争的单元;发出对应于所述锁定指令的l0ad_with0ut_l0Ck微操作的单元;以及监视竞争指示的单元,所述竞争指示包括何时St0re_With_unl0Ck微操作在高速缓存 中未命中。
55.根据权利要求54所述的装置,还包括在所述监视检测到所述竞争指示时重启对所 述锁定指令的执行的单元。
56.根据权利要求54所述的装置,其中,所述发出单元包括从缓冲器发送所述load_ without_lock微操作的单元。
57.根据权利要求56所述的装置,其中,所述loacLwithoutJock微操作作为load_ with_lock微操作存储在所述缓冲器中。
58.根据权利要求54所述的装置,其中,所述发出单元包括从所述锁定指令解码所述 load_without_lock微操作的单元。
全文摘要
本发明的名称是“用于预测执行无竞争的锁定指令的方法和装置”。公开了一种用于在无序处理器中预测执行锁定指令的方法和装置。在一个实施例中,预测给定锁定指令是否会发生竞争。如果不会,则将该锁定指令视为可预测执行的具有正常加载微操作的指令。监视器逻辑可查找有关该锁定指令实际发生竞争的指示。如果未找到这种指示,则引退该预测的加载微操作和与该锁定指令对应的其他微操作。然而,如果确实找到了这种指示,则可重启锁定指令,并更新预测机制。
文档编号G06F9/38GK101847091SQ201010003959
公开日2010年9月29日 申请日期2005年6月17日 优先权日2004年6月30日
发明者B·萨哈, M·C·默藤, P·哈马隆德 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1