买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!
申请/专利权人:超威半导体公司
摘要:用于基于锁地址预测和或时间锁预测来选择性地推测地或非推测地执行锁指令的技术,包括用于对存储器装置中的条目加锁的方法和装置。在一些技术中,检测由线程针对存储器装置的特定存储器条目执行的锁指令。在所述锁指令包括推测锁指令的条件下,检测在先前推测锁期间是否对所述特定存储器条目发生争用。如果在先前推测锁期间对所述特定存储器条目发生争用,则非推测地执行所述锁。如果在先前推测锁期间没有对所述特定存储器条目发生争用,则推测地执行所述锁。
主权项:1.一种用于对存储器装置中的条目加锁的方法,所述方法包括:执行线程的锁指令以锁定所述存储器装置的特定存储器条目;其中所述锁指令是基于所述特定存储器条目是否在先前推测锁的暴露窗口期间被第二线程写入而非基于所述特定存储器条目是否在先前推测锁的所述暴露窗口期间被所述第二线程读取而被推测地或非推测地执行;其中非推测地执行所述锁指令包括禁止所述第二线程对所述特定存储器条目的修改;其中推测地执行所述锁指令包括允许所述第二线程对所述特定存储器条目的修改;以及其中所述暴露窗口是从在所述先前推测锁期间读取所述特定存储器条目时到所述先前推测锁完成时的时间间隔。
全文数据:锁地址争用预测器相关申请的交叉引用本申请要求2016年9月22日提交的美国专利申请号15273,304的权益,该美国专利申请以引用方式并入,如同在本文中充分地阐述。背景技术共享存储器计算架构允许多个线程访问同一存储器,诸如高速缓存存储器或存储器层级的其他级。例如,单个处理器或处理器核心可以执行多个线程或进程,每个线程或进程访问由所述线程和或进程共享的共享存储器,诸如高速缓存。类似地,多核心处理器的多个处理器或核心可以执行多个线程或进程,每个线程和或进程访问由所述处理器或核心并且由所述线程和或进程共享的共享存储器,诸如高速缓存。附图说明可以从结合附图以举例的方式给出的以下描述中获得更详细的理解,在附图中:图1是可以实施一个或多个公开的实施方案的示例性装置的框图。图2是示出了可与图1的装置一起使用并且可以用于实施一个或多个公开的实施方案的示例多核心处理器的框图。图3是示出了用于执行推测锁的示例方法的流程图。图4是示出了用于使用锁地址争用预测来执行推测锁的示例方法的流程图。图5是示出了示例锁地址争用预测写请求监测电路系统的功能的框图。图6是示出了示例锁地址争用预测机构的框图。图7是示出了用于使用时间锁争用预测来执行推测锁的示例方法的流程图。图8是示出了用于使用时间锁争用预测来执行推测锁的示例方法的流程图。具体实施方式一些实施方案提供一种用于对存储器装置中的条目加锁的方法。检测由线程针对存储器装置的特定存储器条目执行的锁指令。在所述锁指令包括推测锁指令的条件下,检测在先前推测锁期间是否对所述特定存储器条目发生争用。如果在先前推测锁期间对所述特定存储器条目发生争用,则非推测地执行所述锁。如果在先前推测锁期间没有对所述特定存储器条目发生争用,则推测地执行所述锁。一些实施方案提供一种用于对存储器装置中的条目加锁的方法。检测由线程针对存储器装置的特定存储器条目执行的锁指令。在所述锁指令包括推测锁指令的条件下,检测在特定时段期间发生争用的所述存储器的先前推测锁数量是否超过阈值数量。如果所述数量超过所述阈值数量,则非推测地执行所述锁。如果所述数量不超过所述阈值数量,则推测地执行所述锁。一些实施方案提供一种被配置用于推测加锁的处理装置。所述装置包括:处理器核心,所述处理器核心具有执行流水线;锁指令检测电路系统,所述锁指令检测电路系统被配置成检测由线程针对存储器装置的特定存储器条目执行的锁指令;争用检测电路系统,所述争用检测电路系统被配置成在所述锁指令包括推测锁指令的条件下,检测在先前推测锁期间是否对所述特定存储器条目发生争用;加锁电路系统,所述加锁电路系统被配置成如果在先前推测锁期间对所述特定存储器条目发生争用,则非推测地执行所述锁;所述加锁电路系统进一步被配置成如果在先前推测锁期间没有对所述特定存储器条目发生争用,则推测地执行所述锁。一些实施方案提供一种被配置用于推测加锁的处理装置。所述装置包括:处理器核心,所述处理器核心包括执行流水线;锁指令检测电路系统,所述锁指令检测电路系统被配置成检测由线程针对存储器装置的特定存储器条目执行的锁指令;争用检测电路系统,所述争用检测电路系统被配置成在所述锁指令包括推测锁指令的条件下,检测在特定时段期间发生争用的存储器的先前推测锁数量是否超过阈值数量;加锁电路系统,所述加锁电路系统被配置成如果所述数量超过所述阈值数量,则非推测地执行所述锁;并且所述加锁电路系统进一步被配置成如果所述数量不超过所述阈值数量,则推测地执行所述锁。图1是可以实现一个或多个公开的实施方案的示例装置100的框图。装置100可以包括例如计算机、游戏装置、手持式装置、机顶盒、电视机、移动电话或平板计算机。装置100包括处理器102、存储器104、存储设备106、一个或多个输入装置108,以及一个或多个输出装置110。装置100还可以任选地包括输入驱动器112和输出驱动器114。应理解,装置100可以包括图1中未示出的附加部件。处理器102可以包括中央处理单元CPU、图形处理单元GPU、位于同一管芯上的CPU和GPU,或者一个或多个处理器核心,其中每个处理器核心可以是CPU或GPU。存储器104可以与处理器102位于同一管芯上,或可以与处理器102分开定位。存储器104可以包括易失性或非易失性存储器,例如随机存取存储器RAM、动态RAM或高速缓存。存储设备106可以包括固定存储设备或可移动存储设备,例如硬盘驱动器、固态驱动器、光盘或闪存驱动器。输入装置108可以包括键盘、小键盘、触摸屏、触摸板、检测器、麦克风、加速计、陀螺仪、生物识别扫描器或网络连接例如,用于发射和或接收无线IEEE802信号的无线局域网卡。输出装置110可以包括显示器、扬声器、打印机、触觉反馈装置、一个或多个灯、天线或网络连接例如,用于发射和或接收无线IEEE802信号的无线局域网卡。输入驱动器112与处理器102和输入装置108通信,并且容许处理器102接收来自输入装置108的输入。输出驱动器114与处理器102和输出装置110通信,并且容许处理器102向输出装置110发送输出。应注意,输入驱动器112和输出驱动器114是任选部件,并且如果输入驱动器112和输出驱动器114不存在,则装置100将以相同方式操作。图2是示出了包括两个处理核心210和220的示例多核心处理器200的示意图。处理器200可以与装置100一起使用,例如作为处理器102。核心210和220可以是任何合适的计算核心,诸如CPU核心、GPU核心,或者CPU核心和GPU核心中的各一个。核心210和220共享对高速缓存存储器230的访问。核心210和220可以各自执行线程,所述线程可以访问高速缓存230中的相同高速缓存条目240中的至少一些。在一些实现方式中,核心210和220中的任一者或两者可以各自执行能访问高速缓存存储器230中的相同高速缓存条目240中的至少一些的多个线程。尽管本文中论述的示例涉及高速缓存存储器,但本文中描述的原理适用于存储器层级的任何合适的存储器或部分,诸如另一高速缓存层未示出或如图1所示并关于其描述的存储器104。处理器200是示例性的,并且本文中描述的原理也适用于单核心处理器或者具有两个以上核心的处理器。共享存储器架构中可能出现的一个问题涉及原子访问。例如,如果第一线程在共享存储器内的特定存储器位置例如,图2中的高速缓存条目250操作例如,读取和写入数据,那么如果第二线程同时在同一存储器位置上操作,则所述数据可能被破坏。这个问题可以使用锁来解决。锁是直到所述锁被释放为止只允许一个线程访问特定存储器位置的相互排斥互斥机构。获取锁的线程通常保证了对加锁的存储器位置的原子访问,直到它释放所述锁。线程可以例如通过以下方式来获取特定存储器位置上的锁:在执行会影响存储在所述存储器位置的数据的其他指令诸如存储指令之前执行锁指令。出于本文中的示例性目的,由线程执行的锁指令来获得锁,并且所述锁也由线程执行的指令来释放。然而,在一些实现方式中,可以由线程所执行的指令的前缀、特定类型或版本的指令或者以任何其他合适的方式来获得和或释放锁。不论它们是否包括离散锁指令或者锁指令是否与另一指令或操作相结合成例如标记、位或前缀,这些中的任一者都可以被称为锁指令。一般来说,如果特定存储器位置被线程或进程加锁,那么尝试访问所述存储器位置的不同线程或进程将不被准许访问所述存储器位置并且通常将接收否定确认NAK信号或其他合适的信号。然而,本文中论述的各种技术和装置不限于锁的任何特定实现方式。锁可能在处理时间方面成本高,这可能会延迟维持锁的线程或进程。通过对处理器高速缓存中的存储器位置加锁来保证其原子属性的锁指令要求所述锁指令先等待它线程中的所有较老指令完成然后再将高速缓存中的行加锁。在锁指令等待较老指令完成时,处理器中的缓冲器可以做备份即,变满或接近满,从而停止处理器。缓解或避免这些可能缺点的一种方式是放松锁的一个或多个属性,诸如原子性或栅栏。例如,可以通过不施行或不严格地施行原子访问来放松锁。在此类情况下,第二线程将被准许访问由第一线程加锁的存储器位置。然而,为了使放松的原子访问起作用,必须建立在锁被第一线程维持时第二线程不访问存储器位置,或者在锁期间第二线程的访问不会对第一线程的执行产生负面影响例如,由第二线程在放松的锁下进行的计算产生的结果与它在严格锁下将产生的相同。由于未必提前知道放松锁属性是否将在加锁的存储器位置产生有效数据,因此维持放松的锁的线程可以被称为推测地执行或在推测锁下。在具有放松的原子性的推测锁的简单示例中,只准许第二线程读访问加锁的存储器位置,这不会改变数据。在这种情况下,相对于读放松所述锁,从而准许第二线程执行此类读,而不是等待第一线程释放所述锁。在具有放松的原子性的推测锁的更复杂示例中,准许第二线程写入或以其他方式修改加锁的存储器位置。例如在锁被第一线程维持时第二线程实际上没有访问加锁的存储器位置的情况下,这将对第一线程的执行产生负面影响。然而,在第一线程在加锁的存储器被第二线程修改之前从所述加锁的存储器中读取以及第一线程在加锁的存储器被第二线程修改之后写入所述加锁的存储器的情况下,这种类型的推测锁可能会对第一线程的执行产生负面影响。在另一示例,可以通过不严格地施行原子访问来放松锁。在此类情况下,在维持针对特定存储器位置的锁时,第一线程将被允许不按次序执行。这可以导致在一些情况下违反栅栏属性。例如,如果来自第一线程的比锁指令“年轻”即,晚的读指令在推测锁完成之前执行,那么它可能会读到过期数据。这在来自第二线程的写指令在推测锁完成之前写入读指令的存储器位置的情况下可能发生。由于加锁的位置的数据的有效性可以被放松的锁属性破坏,因此必须测试读指令的数据的有效性。用于确定数据是否有效的一个可能测试是确定第二线程在推测锁被第一线程维持时是否访问了加锁的位置。其他线程的读没有违反加锁属性。然而,存在将推测锁暴露于其他线程的写的暴露窗口。所述窗口在推测锁读它的存储器位置时开始,并且在推测锁完成时结束。当线程在推测锁的暴露窗口中时,线程必须留意其他线程的将导致违反推测锁的加锁属性的写。可以测试或监测推测地加锁的存储器位置和比在写入推测地加锁的存储器位置之前已经完成的推测锁更年轻的所有读。如果没有其他线程写入加锁的位置,那么数据可以被假定有效。如果发现存储在加锁的位置的数据有效,那么可以继续正常执行,并且可以避免与严格加锁相关联的时间损失。然而,如果发现或假定存储在加锁的位置的数据无效,那么必须冲洗例如,执行线程的核心和或处理器的执行流水线,并且必须以产生有效结果的方式重新执行维持推测锁的线程。因此,在发现因违反推测锁的加锁属性或在锁被释放之后存储在处理器高速缓存内的加锁的位置的数据无效的示例中,冲洗执行流水线,并且使用严格加锁即,使用非推测锁重新执行第一线程,以便避免导致无效数据的放松条件。在根据非推测锁重新执行线程之后,可以假定加锁的位置的数据没有被另一线程重写。图3是示出了用于执行推测锁的示例方法300的流程图。在第一线程执行锁指令的条件310下,在步骤320中,所述线程在特定存储器位置执行推测锁。在步骤320中的推测执行期间,测试所述存储器位置的数据的有效性,如上文论述。在没有违反加锁属性的条件340下,除非在推测锁已经完成的条件330下,否则锁继续推测地执行。如果在条件340下发现已经违反了加锁属性,那么在步骤350中冲洗执行流水线,在步骤360中线程重新启动,并且在步骤370中所述锁非推测地执行到完成。然而,冲洗流水线和重新执行线程具有相关联的时间损失,这可以抵消通过放松锁属性来实现的时间增益。因此,在某些情形下,放松锁的属性可能具有减少的回报。换句话说,在某些情况下,因失败的推测锁而引起的冲洗执行流水线和重新执行线程在时间和电路区域方面比首先简单地执行非推测锁成本更高。因此,可能期望预测放松的锁属性可能会导致冲洗存储器和重新启动执行的情形,以便避免相关联的时间损失。预测放松的锁属性可能会导致无效数据的情形的一种方法是跟踪锁地址争用。这样的预测是基于以下理念:如果特定地址上的推测锁在过去已经导致冲洗和重新启动,或者如果在过去其他线程已经在所述地址被加锁时尝试访问所述地址即,争用所述地址,那么所述地址上的推测锁可能会导致或具有一定的概率会导致冲洗和重新启动。这样的预测可以被称为锁地址争用预测。例如,如果特定存储器地址上的推测锁导致冲洗和重新启动,那么可以跟踪这个事件。因此,可以迫使所述存储器地址上的未来锁非推测地运行。这个策略的变化是可能的。在一个示例中,加锁的地址争用预测器LACP跟踪被导致冲洗和重新启动的推测锁访问的处理器高速缓存行。图4是示出了用于使用锁地址争用预测来执行推测锁的示例方法400的流程图。在第一线程执行锁指令的条件405下,LACP电路系统测试过去在遵循推测锁的目标地址处是否违反锁属性,以及加锁的地址是否还在处理器的本地高速缓存中。在过去违反锁属性并且加锁的地址不再在处理器的本地高速缓存中的条件410下,在步骤415中,锁非推测地执行。否则,在步骤420中,锁推测地执行。在步骤420中的推测执行期间,LACP电路系统测试加锁的地址是否违反锁属性。在一些实现方式中,如果另一线程已经在推测执行期间访问存储器位置,则假定已经违反了加锁属性。在没有违反锁属性的条件425下,除非在推测锁已经完成的条件427下,否则锁继续推测地执行。在违反锁属性的条件425下,在步骤430中更新LACP。更新LACP需要将加锁的地址添加到LACP,或者如果加锁的地址已经记录在LACP中,则更新LACP条目年龄在这个实现方式中,LACP包括用于跟踪加锁的地址记录在LACP中的“年龄”或时长的电路系统并且清除它的命中位。在任一情况下,清除或以其他方式配置与LACP条目相关联的命中位或其他指示符,以防止锁在所述地址上的推测执行。在步骤435中冲洗执行流水线,并且在步骤440和415中重新启动并且非推测地执行线程。应注意,如果需要,对于推测地加锁特定地址的禁止可以到期。在一些实现方式中,可以明确地在期望的持续时间、许多指令、许多锁或其他方面之后发生到期。在一些实现方式中,可以因为地址被逐出LACP以给另一地址让出空间而发生到期。图5是示出了示例LACP写请求监测电路系统500的功能的框图。在一些实现方式中,电路系统500可与如图4所示并关于其描述的方法400和或本文中论述的其他实现方式一起使用,并且可以合并到如图6所示并关于其描述的LACP装置600中或以其他方式与所述LACP装置600一起使用。电路系统500被配置成监测对LACP条目的写请求。在步骤510中,电路系统500检测对于任何LACP条目而言另一线程是否在尝试写入存储在所述LACP条目中的地址。在检测到这样的写尝试的条件520下,在步骤530中,电路系统500更新对应LACP条目的年龄字段和命中位或其他指示符。否则,在步骤510中,电路系统500继续监测其他线程的写请求。应注意,在与本文中论述的其他实现方式诸如图4合并的情况下,图5所示的步骤与那些机构异步地执行。因此,在这个示例中,LACP写请求监测电路系统500不等待推测或非推测锁完成便更新LACP条目的年龄字段和命中位,并且不等待推测或非推测锁开始便测试对处理器高速缓存条目的写请求。应注意,在其他实现方式中,图5所示的步骤可以同步地执行。在这个示例实现方式中,在与LACP条目的地址相关联的高速缓存行是在处理器的本地高速缓存中时,跟踪所述地址。应注意,在其他实现方式中,可以始终跟踪LACP条目的地址。在此类实现方式中,LACP指示所述行没有检测到争用。在本示例实现方式中,命中位指示LACP跟踪的地址是否仍高速缓存在处理器的本地高速缓存中。图6是示出了根据本文中论述的各种实现方式的示例LACP机构600的框图。示例LACP机构600包括若干个存储器条目610,然而应注意,可以使用任何合适数量的条目。这些存储器条目610被配置成将过去在推测地加锁时违反了加锁属性的存储器位置的地址存储在处理器高速缓存670中。在一些实现方式中,存储器条目610还可以或反而可以被配置成将其他线程在锁期间争用访问的存储器位置的地址存储在处理器高速缓存670中。LACP存储器条目的数量可以基于期望的替换策略例如,基于实施条目所需的逻辑电路系统量与替换在将来可能以其他方式提供有用信息的条目之间的权衡。在这个示例中,LACP存储器条目610是LACP的高速缓存内的条目。条目610中的每一者可以用来跟踪违反推测锁的锁属性的处理器高速缓存670的高速缓存行。条目610中的每一者包括命中位650和年龄字段660。如果在线程的执行期间,针对处理器高速缓存670的高速缓存条目630执行锁指令,并且如果高速缓存条目630的地址不匹配存储在LACP条目610中的一者中的地址,那么所述锁可以推测地执行。如果高速缓存条目630的地址匹配存储在LACP条目610中的一者中的地址,那么如果断定特定LACP条目610的高速缓存命中位650,则所述锁可以推测地执行。然而,如果没有断定特定LACP条目610的高速缓存命中位650,那么所述锁必须非推测地执行。应注意,断定未断定可以用任何合适的方式表达,诸如使用位、标记或字段。当因为违反推测锁的属性而创建新LACP条目610时,清除命中位650,其中推测地加锁的处理器高速缓存地址并非已经存储在LACP中。当来自另一线程即,不同于创建LACP条目的线程的写访问匹配LACP条目610时,清除现有LACP条目610的命中位650。当对于创建LACP条目的线程而言非推测锁完成时非推测锁完成保证了高速缓存行在本地高速缓存中,断定命中位。如果例如针对处理器高速缓存670的高速缓存条目630非推测地执行锁,并且如果违反了高速缓存条目630上的推测锁的锁属性例如,通过来自除了维持推测锁的线程之外的线程的写访问,那么使用比较器620将高速缓存条目630的地址与条目610中的每一者进行比较。如果高速缓存条目630不匹配LACP条目610中的现有一个条目,那么选择LACP条目610中的一个条目来跟踪推测锁的高速缓存行630,并且根据任何期望的替换策略,将高速缓存条目630的地址存储在LACP条目610中的一者中。LACP条目可以被逐出并使用任何合适的高速缓存替换算法来替换例如,基于所需的逻辑电路系统和或所引起的延迟的量与替换在将来可能会提供有用信息的条目之间的权衡。例如,可以使用空LACP条目,或者如果没有空LACP条目,则可以替换最近最少使用的LACP条目例如,如根据年龄字段660确定。如果违反了推测锁的加锁属性,则也清除LACP条目610的命中位650,以指示应防止锁针对这个地址推测地执行,并且重置LACP条目610的年龄字段660。在已经创建LACP条目610之后,重新启动线程,并且所述锁非推测地执行。如果另一线程对处理器高速缓存条目630的写访问不匹配LACP条目610中的现有一个条目,那么清除命中位650,指示应防止锁针对这个地址推测地执行,并且重置LACP条目610的年龄字段660。如果在处理器高速缓存条目630上断定非推测锁,那么使用比较器620将条目630的地址与LACP条目610进行比较。如果处理器高速缓存条目630不匹配现有LACP条目610,那么在锁完成时或之后断定条目的命中位,指示LACP条目的地址与当前驻留在处理器的本地高速缓存中的存储器位置相关联。断定的命中位指示可以推测地执行匹配LACP条目的后续锁指令。然而,如果另一线程在后一锁指令被执行之前调查条目630以用于存储器访问,那么使用比较器620将条目630的地址与条目610进行比较。如果高速缓存条目630不匹配现有的LACP条目610,那么清除条目的命中位,以指示可以不针对高速缓存条目630推测地执行锁。如从前述内容可以看出,LACP高速缓存命中位650可以区分两种操作情况。在第一情况下,针对处理器本地高速缓存670上的非推测锁来记录LACP条目610。在这种情况下,断定LACP高速缓存命中位650,以指示可以针对高速缓存条目630继续推测地执行锁。在这种情况下允许推测锁,即使高速缓存条目630的地址命中LACP条目610也是如此。在第二情况下,另一线程的访问从处理器本地高速缓存670中移除高速缓存条目630。因此,在这种情况下清除LACP条目610的命中位,以防止锁指令针对高速缓存条目630推测地运行。这解决了第二线程违反高速缓存条目630上的加锁属性的机会。预测放松的锁属性可能会导致冲洗执行流水线并使用非推测加锁重新启动执行的情形的另一方法是跟踪时间锁争用。这样的预测是基于以下理念:如果任何地址上的给定数量的推测锁在过去已经导致冲洗和重新启动,或者如果在过去给定数量的其他线程已经在任何地址被加锁时争用访问所述地址,那么任何地址上的推测锁可能会导致冲洗和重新启动。如果在给定时段内、以某一速率或在其他方面基于时间已经相对于任何地址发生给定数量的冲洗和重新启动或争用事件,那么任何地址上的推测锁也可以被认为是有可能的。这样的预测可以被称为时间锁争用预测。在一个示例中,时间锁争用预测器跟踪最后X个可高速缓存锁指令的争用历史,其中X可以是任何合适的数量。例如可以基于所需的逻辑量与替换在将来可能会提供有用信息的条目之间的权衡来选择X。如果可高速缓存的锁是推测的并且导致冲洗和重新启动,那么它被时间锁争用预测器记录为锁争用事件。如果锁争用事件的数量超过期望的阈值数量Y,那么阻止后续锁指令推测地执行。在这个示例中,推测加锁的频繁失败被认为是推测加锁的未来失败的预测器。图7是示出了用于使用时间锁争用预测TLCP来执行推测锁的示例方法700的流程图。在第一线程执行锁指令的条件705下,TLCP电路系统测试在过去X个可高速缓存锁指令中在推测锁期间是否违反锁属性Y次或更多次。在这个示例中,TLCP电路系统包括用于跟踪在过去X个可高速缓存锁指令中发生的锁属性违反的数量的计数器,然而TLCP电路系统不限于这个实现方式。例如,TLCP电路系统可以替代地跟踪过去可高速缓存锁指令的绝对数不仅在过去X个可高速缓存锁指令内。应注意,在各种实现方式中,TLCP可以跟踪特定加锁的地址的加锁违反或者任何地址的所有加锁违反的数量。在过去X个可高速缓存锁指令中已经违反锁属性Y次或更多次的条件710下,在步骤715中所述锁非推测地执行,并且在步骤750中针对成功的锁执行来更新TLCP。如果在过去X个可高速缓存锁指令中没有违反锁属性Y次或更多次,那么在步骤720中所述锁推测地执行。在推测执行期间,TLCP电路系统测试是否已违反推测锁的锁属性。在没有违反推测锁的锁属性的条件725下,并且在锁已完成的条件727下,在步骤760中针对成功的锁执行来更新TLCP。在发现已经违反锁属性的条件725下,在步骤730中针对不成功的锁执行来更新TLCP中的数据,在步骤735中冲洗执行流水线,在步骤740中重新启动线程,在步骤715中非推测地执行,并且在步骤750中针对成功的锁执行来更新TLCP。在另一示例中,TLCP电路系统还跟踪最后X个可高速缓存锁指令的争用历史。在这个示例中,如果可高速缓存锁是已经违反锁属性的推测锁,那么由TLCP电路系统记录加锁的地址。如果锁争用事件的数量超过期望数量Y,那么阻止后续锁指令推测地执行。这个实现方式是示例性的。例如,TLCP电路系统可以替代地跟踪某一时间窗口诸如最后X个可高速缓存锁指令内的冲洗重新启动和NAK的数量。在这个示例中,推测加锁的频繁失败和其他线程对被加锁推测地或非推测地的存储器的争用被认为是推测加锁将来失败的预测器。图8是示出了用于使用时间锁争用预测TLCP来执行推测锁的示例方法800的流程图。在第一线程执行锁指令的条件805下,TLCP电路系统测试在过去X个可高速缓存锁指令中按照推测锁是否已违反锁属性例如,除了维持锁的线程之外的线程争用对加锁的地址处的处理器高速缓存的写访问,或者锁的栅栏属性已被违反Y次或更多次。在这个示例中,TLCP电路系统包括用于跟踪在过去X个可高速缓存锁指令中发生的锁属性违反的数量的计数器,然而TLCP电路系统不限于这个实现方式。在过去X个可高速缓存锁指令中已经违反存储器在这个示例中,任何存储器条目上的推测锁Y次或更多次的条件810下,在步骤815中锁非推测地执行。在步骤815中锁非推测地执行时,确定另一线程是否发出写入非推测地加锁的存储器条目的写请求。在任一情况下,除非在锁已完成的条件887下,否则在步骤815处锁继续非推测地执行。在锁期间的任何点处发出这种请求的条件850下,在步骤855中更新TLCP以指示锁争用。在没有发出这种请求的条件850下,在步骤880中更新TLCP以指示没有锁争用。应注意,在TLCP已经反映出适当状态下,可能不需要表达更新。还应注意,在一些实现方式中,TLCP更新可以在锁完成时或之后发生。如果在过去X个可高速缓存锁指令中没有违反锁属性Y次或更多次,那么在步骤820中所述锁推测地执行。在推测执行之后,TLCP电路系统测试是否违反推测锁的锁属性。在一些实现方式中,如果另一线程已经在推测执行期间访问存储器位置,则假定数据无效。在来自另一线程的锁争用没有违反推测锁的锁属性的条件825下,并且在锁已完成的条件827下,在步骤890中针对没有锁争用来更新TLCP。在来自另一线程的锁争用违反推测锁的锁属性的条件825下,在步骤830中更新TLCP以指示已经发生锁争用,在步骤835中冲洗执行流水线,在步骤840中重新启动线程,并且在步骤815中非推测地执行。在一些实现方式中,这些概念可以组合。例如,如果对某一存储器位置的某一数量的锁指令已经导致冲洗重新启动,在某一时段内对所述存储器位置的某一数量的锁指令已经导致冲洗重新启动,对所述存储器位置的锁指令以某一速率或在其他方面基于时间而导致冲洗重新启动,那么可以阻止对所述存储器位置的锁指令推测地运行。本文中公开了一种用于对存储器装置中的条目加锁的方法。检测由线程针对存储器装置的特定存储器条目执行的锁指令。如果检测到所述锁指令,则检测在先前推测锁期间是否对所述特定存储器条目发生争用。如果在先前推测锁期间对所述特定存储器条目发生争用,则非推测地执行所述锁指令。如果在先前推测锁期间没有对所述特定存储器条目发生争用,则推测地执行所述锁指令。在一些示例中,在推测地执行所述锁指令的条件下,检测在所述推测锁期间是否从另一线程对所述特定存储器条目发生争用。在一些示例中,如果在所述推测锁期间从另一线程对所述特定存储器条目发生争用,那么冲洗所述线程在其中执行的执行流水线,并且从所述锁指令开始非推测地重新执行所述线程。在一些示例中,检测在所述推测锁期间是否从另一线程对所述特定存储器条目发生争用包括检测所述特定存储器条目是否含有无效数据。在一些示例中,争用包括以下项中的任一者:在存储器条目的锁期间由另一线程访问、修改、请求访问或请求修改所述存储器条目。在一些示例中,检测在先前推测锁期间是否对所述特定存储器条目发生争用包括检测在所述先前推测锁期间另一线程是否请求访问、访问、请求修改或修改所述特定存储器条目。在一些示例中,推测地执行所述锁包括放松所述锁的约束。在一些示例中,推测地执行所述锁包括放松所述锁的原子访问属性或栅栏属性。本文中公开了一种用于对存储器装置中的条目加锁的方法。检测由线程针对存储器装置的特定存储器条目执行的锁指令。如果检测到所述锁指令,那么检测在特定时段期间发生争用的所述存储器的先前推测锁数量是否超过阈值数量。如果所述数量超过所述阈值数量,则非推测地执行所述锁指令。如果所述数量不超过所述阈值数量,则推测地执行所述锁指令。在一些示例中,检测在所述特定时段期间发生争用的所述存储器的所述先前推测锁数量是否超过所述阈值数量包括检测在所述特定时段期间发生争用的所述特定存储器条目的先前推测锁数量是否超过所述阈值数量。在一些示例中,检测在所述特定时段期间发生争用的所述存储器的所述先前推测锁数量是否超过所述阈值数量包括检测在所述特定时段期间发生争用的所述存储器装置中的任何存储器条目的先前推测锁数量是否超过所述阈值数量。在一些示例中,在推测地执行所述锁指令的条件下,检测在所述推测锁期间是否从另一线程对所述特定存储器条目发生争用。在一些示例中,如果在所述推测锁期间从另一线程对所述特定存储器条目发生争用,那么冲洗所述线程在其中执行的执行流水线,并且从所述锁指令开始非推测地重新执行所述线程。在一些示例中,检测在所述推测锁期间是否从另一线程对所述特定存储器条目发生争用包括检测所述特定存储器条目是否含有无效数据。在一些示例中,争用包括以下项中的任一者:在存储器条目的锁期间由线程访问、修改、请求访问或请求修改所述存储器条目。在一些示例中,检测在特定时段期间发生争用的所述存储器的先前推测锁数量是否超过阈值数量包括:检测在所述先前推测锁期间另一线程是否请求访问、访问、请求修改或修改所述存储器。在一些示例中,推测地执行所述锁包括放松所述锁的约束。在一些示例中,推测地执行所述锁包括放松所述锁的原子访问属性或栅栏属性。本文中公开了一种处理装置,所述处理装置被配置成用于推测加锁。处理器核心包括执行流水线。锁指令检测电路系统被配置成检测由线程针对存储器装置的特定存储器条目执行的锁指令。争用检测电路系统被配置成如果检测到所述锁指令,则检测在先前推测锁期间是否对所述特定存储器条目发生争用。加锁电路系统被配置成如果在先前推测锁期间对所述特定存储器条目发生争用,则非推测地执行所述锁指令。所述加锁电路系统进一步被配置成如果在先前推测锁期间没有对所述特定存储器条目发生争用,则推测地执行所述锁指令。在一些示例中,所述争用检测电路系统进一步被配置成:在推测地执行所述锁指令的条件下,检测在所述推测锁期间是否从另一线程对所述特定存储器条目发生争用。一些示例包括重新执行电路系统,所述重新执行电路系统被配置成:如果在所述推测锁期间从另一线程对所述特定存储器条目发生争用,则冲洗所述线程在其中执行的执行流水线,并且从所述锁指令开始非推测地重新执行所述线程。在一些示例中,检测在所述推测锁期间是否从另一线程对所述特定存储器条目发生争用包括检测所述特定存储器条目是否含有无效数据。在一些示例中,争用包括以下项中的任一者:在存储器条目的锁期间由另一线程访问、修改、请求访问或请求修改所述存储器条目。在一些示例中,检测在先前推测锁期间是否对所述特定存储器条目发生争用包括检测在所述先前推测锁期间另一线程是否请求访问、访问、请求修改或修改所述特定存储器条目。在一些示例中,推测地执行所述锁包括放松所述锁的约束。在一些示例中,推测地执行所述锁包括放松所述锁的原子访问属性或栅栏属性。本文中公开了一种处理装置,所述处理装置被配置成用于推测加锁。处理器核心包括执行流水线。锁指令检测电路系统被配置成检测由线程针对存储器装置的特定存储器条目执行的锁指令。争用检测电路系统被配置成如果检测到所述锁指令,则检测在特定时段期间发生争用的存储器的先前推测锁数量是否超过阈值数量。加锁电路系统被配置成如果所述数量超过所述阈值数量,则非推测地执行所述锁。所述加锁电路系统进一步被配置成如果所述数量不超过所述阈值数量,则推测地执行所述锁。在一些示例中,检测在所述特定时段期间发生争用的所述存储器的所述先前推测锁数量是否超过所述阈值数量包括检测在所述特定时段期间发生争用的所述特定存储器条目的先前推测锁数量是否超过所述阈值数量。在一些示例中,检测在所述特定时段期间发生争用的所述存储器的所述先前推测锁数量是否超过所述阈值数量包括检测在所述特定时段期间发生争用的所述存储器装置中的任何存储器条目的先前推测锁数量是否超过所述阈值数量。在一些示例中,所述争用检测电路系统进一步被配置成:在推测地执行所述锁指令的条件下,检测在所述推测锁期间是否从另一线程对所述特定存储器条目发生争用。一些示例包括重新执行电路系统,所述重新执行电路系统被配置成:如果在所述推测锁期间从另一线程对所述特定存储器条目发生争用,则冲洗所述线程在其中执行的执行流水线,并且从所述锁指令开始非推测地重新执行所述线程。在一些示例中,检测在所述推测锁期间是否从另一线程对所述特定存储器条目发生争用包括检测所述特定存储器条目是否含有无效数据。在一些示例中,争用包括在存储器条目的锁期间由线程访问、修改、请求访问或请求修改所述存储器条目。在一些示例中,检测在特定时段期间发生争用的所述存储器的先前推测锁数量是否超过阈值数量包括以下项中的任一者:检测在所述先前推测锁期间另一线程是否请求访问、访问、请求修改或修改所述存储器。在一些示例中,推测地执行所述锁包括放松所述锁的约束。在一些示例中,推测地执行所述锁包括放松所述锁的原子访问属性或栅栏属性。应理解,基于本文的公开内容,许多变型是可能的。尽管上文以特定组合描述了特征和元件,但是每个特征或元件可以在没有其他特征和元件的情况下单独使用,或者以具有或没有其他特征和元件的各种组合使用。所提供的方法可以在通用计算机、处理器或处理器核心中实现。合适的处理器包括例如通用处理器、专用处理器、常规处理器、数字信号处理器DSP、多个微处理器、与DSP核心相关联的一个或多个微处理器、控制器、微控制器、专用集成电路ASIC、现场可编程门阵列FPGA电路、任何其他类型的集成电路IC和或状态机。可以通过使用经处理的硬件描述语言HDL指令的结果和包括网表的其他中间数据此类指令能够存储在计算机可读介质上配置制造过程来制造此类处理器。这种处理的结果可以是掩模件,所述掩模件随后在半导体制造过程中用来制造实现实施方案的各方面的处理器。本文提供的方法或流程图可以用并入非暂时性计算机可读存储介质中以供通用计算机或处理器执行的计算机程序、软件或固件来实现。非暂时性计算机可读存储介质的示例包括只读存储器ROM、随机存取存储器RAM、寄存器、高速缓存存储器、半导体存储器装置、诸如内部硬盘和可移动磁盘的磁性介质、磁光介质以及诸如CD-ROM盘和数字通用盘DVD的光学介质。
权利要求:1.一种用于对存储器装置中的条目加锁的方法,所述方法包括:检测由线程针对所述存储器装置的特定存储器条目执行的锁指令;在检测到所述锁指令的条件下,检测在先前推测锁期间是否对所述特定存储器条目发生争用;在所述先前推测锁期间对所述特定存储器条目发生争用的条件下,非推测地执行所述锁指令;以及在先前推测锁期间没有对所述特定存储器条目发生争用的条件下,推测地执行所述锁指令。2.如权利要求1所述的方法,所述方法还包括:在推测地执行所述锁指令的条件下,检测在所述推测锁期间是否从另一线程对所述特定存储器条目发生争用。3.如权利要求2所述的方法,所述方法还包括:在所述推测锁期间从另一线程对所述特定存储器条目发生争用的条件下,冲洗所述线程在其中执行的执行流水线,并且从所述锁指令开始非推测地重新执行所述线程。4.如权利要求2所述的方法,其中检测在所述推测锁期间是否从另一线程对所述特定存储器条目发生争用包括检测所述特定存储器条目是否含有无效数据。5.如权利要求1所述的方法,其中争用包括以下项中的任一者:在存储器条目的锁期间由另一线程访问、修改、请求访问或请求修改所述存储器条目。6.如权利要求1所述的方法,其中检测在先前推测锁期间是否对所述特定存储器条目发生争用包括检测在所述先前推测锁期间另一线程是否请求访问、访问、请求修改或修改所述特定存储器条目。7.如权利要求1所述的方法,其中推测地执行所述锁包括放松所述锁的约束。8.如权利要求1所述的方法,其中推测地执行所述锁包括放松所述锁的原子访问属性或栅栏属性。9.一种用于对存储器装置中的条目加锁的方法,所述方法包括:检测由线程针对存储器装置的特定存储器条目执行的锁指令;在检测到所述锁指令的条件下,检测在特定时段期间发生争用的存储器的先前推测锁数量是否超过阈值数量;在所述数量超过所述阈值数量的条件下,非推测地执行所述锁指令;以及在所述数量不超过所述阈值数量的条件下,推测地执行所述锁指令。10.如权利要求9所述的方法,其中检测在所述特定时段期间发生争用的所述存储器的所述先前推测锁数量是否超过所述阈值数量包括:检测在所述特定时段期间发生争用的所述特定存储器条目的先前推测锁数量是否超过所述阈值数量。11.如权利要求9所述的方法,其中检测在所述特定时段期间发生争用的所述存储器的所述先前推测锁数量是否超过所述阈值数量包括:检测在所述特定时段期间发生争用的所述存储器装置中的任何存储器条目的先前推测锁数量是否超过所述阈值数量。12.如权利要求9所述的方法,所述方法还包括:在推测地执行所述锁指令的条件下,检测在所述推测锁期间是否从另一线程对所述特定存储器条目发生争用。13.如权利要求12所述的方法,所述方法还包括:在所述推测锁期间从另一线程对所述特定存储器条目发生争用的条件下,冲洗所述线程在其中执行的执行流水线,并且从所述锁指令开始非推测地重新执行所述线程。14.如权利要求12所述的方法,其中检测在所述推测锁期间是否从另一线程对所述特定存储器条目发生争用包括检测所述特定存储器条目是否含有无效数据。15.如权利要求9所述的方法,其中争用包括以下项中的任一者:在存储器条目的锁期间由线程访问、修改、请求访问或请求修改所述存储器条目。16.如权利要求9所述的方法,其中检测在特定时段期间发生争用的所述存储器的先前推测锁数量是否超过阈值数量包括:检测在所述先前推测锁期间另一线程是否请求访问、访问、请求修改或修改所述存储器。17.如权利要求9所述的方法,其中推测地执行所述锁包括放松所述锁的约束。18.如权利要求9所述的方法,其中推测地执行所述锁包括放松所述锁的原子访问属性或栅栏属性。19.一种处理装置,所述处理装置被配置成用于推测加锁,所述装置包括:处理器核心,所述处理器核心包括执行流水线;锁指令检测电路系统,所述锁指令检测电路系统被配置成检测由线程针对存储器装置的特定存储器条目执行的锁指令;争用检测电路系统,所述争用检测电路系统被配置成在检测到所述锁指令的条件下,检测在先前推测锁期间是否对所述特定存储器条目发生争用;加锁电路系统,所述加锁电路系统被配置成:在先前推测锁期间对所述特定存储器条目发生争用的条件下,非推测地执行所述锁指令;以及在先前推测锁期间没有对所述特定存储器条目发生争用的条件下,推测地执行所述锁指令。20.如权利要求19所述的处理装置,其中所述争用检测电路系统进一步被配置成:在推测地执行所述锁指令的条件下,检测在所述推测锁期间是否从另一线程对所述特定存储器条目发生争用。21.如权利要求20所述的处理装置,所述处理装置还包括重新执行电路系统,所述重新执行电路系统被配置成:在所述推测锁期间从另一线程对所述特定存储器条目发生争用的条件下,冲洗所述线程在其中执行的执行流水线,并且从所述锁指令开始非推测地重新执行所述线程。22.如权利要求20所述的处理装置,其中检测在所述推测锁期间是否从另一线程对所述特定存储器条目发生争用包括检测所述特定存储器条目是否含有无效数据。23.如权利要求19所述的处理装置,其中争用包括以下项中的任一者:在存储器条目的锁期间由另一线程访问、修改、请求访问或请求修改所述存储器条目。24.如权利要求19所述的处理装置,其中检测在先前推测锁期间是否对所述特定存储器条目发生争用包括检测在所述先前推测锁期间另一线程是否请求访问、访问、请求修改或修改所述特定存储器条目。25.如权利要求19所述的处理装置,其中推测地执行所述锁包括放松所述锁的约束。26.如权利要求19所述的处理装置,其中推测地执行所述锁包括放松所述锁的原子访问属性或栅栏属性。27.一种处理装置,所述处理装置被配置成用于推测加锁,所述装置包括:处理器核心,所述处理器核心包括执行流水线;锁指令检测电路系统,所述锁指令检测电路系统被配置成检测由线程针对存储器装置的特定存储器条目执行的锁指令;争用检测电路系统,所述争用检测电路系统被配置成在检测到所述锁指令的条件下,检测在特定时段期间发生争用的存储器的先前推测锁数量是否超过阈值数量;加锁电路系统,所述加锁电路系统被配置成:在所述数量超过所述阈值数量的条件下,非推测地执行所述锁指令;以及在所述数量不超过所述阈值数量的条件下,推测地执行所述锁指令。28.如权利要求27所述的处理装置,其中检测在所述特定时段期间发生争用的所述存储器的所述先前推测锁数量是否超过所述阈值数量包括:检测在所述特定时段期间发生争用的所述特定存储器条目的先前推测锁数量是否超过所述阈值数量。29.如权利要求27所述的处理装置,其中检测在所述特定时段期间发生争用的所述存储器的所述先前推测锁数量是否超过所述阈值数量包括:检测在所述特定时段期间发生争用的所述存储器装置中的任何存储器条目的先前推测锁数量是否超过所述阈值数量。30.如权利要求27所述的处理装置,其中所述争用检测电路系统进一步被配置成:在推测地执行所述锁指令的条件下,检测在所述推测锁期间是否从另一线程对所述特定存储器条目发生争用。31.如权利要求28所述的处理装置,所述处理装置还包括重新执行电路系统,所述重新执行电路系统被配置成:在所述推测锁期间从另一线程对所述特定存储器条目发生争用的条件下,冲洗所述线程在其中执行的执行流水线,并且从所述锁指令开始非推测地重新执行所述线程。32.如权利要求28所述的处理装置,其中检测在所述推测锁期间是否从另一线程对所述特定存储器条目发生争用包括检测所述特定存储器条目是否含有无效数据。33.如权利要求27所述的处理装置,其中争用包括以下项中的任一者:在存储器条目的锁期间由线程访问、修改、请求访问或请求修改所述存储器条目。34.如权利要求27所述的处理装置,其中检测在特定时段期间发生争用的所述存储器的先前推测锁数量是否超过阈值数量包括:检测在所述先前推测锁期间另一线程是否请求访问、访问、请求修改或修改所述存储器。35.如权利要求27所述的处理装置,其中推测地执行所述锁包括放松所述锁的约束。36.如权利要求27所述的处理装置,其中推测地执行所述锁包括放松所述锁的原子访问属性或栅栏属性。
免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。