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