CN112236750A - 处理支持事务存储器的设备中的独占式加载指令 - Google Patents
处理支持事务存储器的设备中的独占式加载指令 Download PDFInfo
- Publication number
- CN112236750A CN112236750A CN201980036398.5A CN201980036398A CN112236750A CN 112236750 A CN112236750 A CN 112236750A CN 201980036398 A CN201980036398 A CN 201980036398A CN 112236750 A CN112236750 A CN 112236750A
- Authority
- CN
- China
- Prior art keywords
- exclusive
- transaction
- address
- instruction
- processing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000012545 processing Methods 0.000 title claims description 278
- 230000004044 response Effects 0.000 claims abstract description 70
- 238000000034 method Methods 0.000 claims description 26
- 238000004590 computer program Methods 0.000 claims description 15
- 238000001514 detection method Methods 0.000 claims description 10
- 230000008569 process Effects 0.000 claims description 8
- 238000011084 recovery Methods 0.000 claims description 6
- 230000000717 retained effect Effects 0.000 claims 1
- 230000007717 exclusion Effects 0.000 abstract description 34
- 230000001960 triggered effect Effects 0.000 abstract description 5
- 230000004888 barrier function Effects 0.000 description 10
- 238000013459 approach Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 4
- 230000003993 interaction Effects 0.000 description 4
- 206010000210 abortion Diseases 0.000 description 3
- 230000009471 action Effects 0.000 description 3
- 238000007792 addition Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- RWSOTUBLDIXVET-UHFFFAOYSA-N Dihydrogen sulfide Chemical compound S RWSOTUBLDIXVET-UHFFFAOYSA-N 0.000 description 1
- 101000628483 Homo sapiens Suppressor of tumorigenicity 7 protein-like Proteins 0.000 description 1
- 102100026721 Suppressor of tumorigenicity 7 protein-like Human genes 0.000 description 1
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000001747 exhibiting effect Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
- G06F9/38585—Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
- G06F9/528—Mutual exclusion algorithms by using speculative mechanisms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
- Debugging And Monitoring (AREA)
Abstract
描述了一种设备,该设备使用独占式监控器指示来支持事务存储器和独占式加载/存储指令以追踪对给定地址的独占式访问。响应于在给定事务内执行的指定加载目标地址的预定类型的加载指令,先前针对该加载目标地址设置的任何独占式监控器指示被清除。响应于独占式加载指令,而触发对下述事务的中止:针对该事务,该给定地址被指定为该事务的地址工作集中的一个地址。这有助于维持在事务与非事务线程之间的互斥,即使在非事务线程中存在加载推测也如此。
Description
技术领域
本技术涉及数据处理领域。更具体地,涉及支持事务存储器的数据处理设备。
背景技术
数据处理系统可执行若干数据处理线程。有时,线程可能需要对共享资源进行访问,并且数据处理操作的性质可能使得一旦线程开始与共享资源交互,可能有必要在没有另一线程同时访问该资源的情况下使用该资源原子地完成一组操作。
第一线程中的代码临界区(critical section)相对于第二线程中的代码临界区原子地执行的性质可被称为“互斥(mutual exclusion)”。这些临界区可包括在各个线程中相同的指令序列,或者可包括均更新共享资源的不同的代码区。在如下情况下可满足互斥:如果所执行的两个临界区的结果为或者使得该结果相当于第一线程执行临界区并且随后第二线程使用第一线程中的临界区的结果执行其临界区,或者反之结果为使得第一线程使用第二线程中的临界区的结果来进行在第一线程中对共享资源的处理。其中并行处理第一和第二线程的临界区但一个线程中的临界区不考虑获自另一线程中的临界区的共享资源的更新值的结果会违反互斥。
一种用于在线程之间维持互斥的技术可为使用锁(lock)来控制对至少一个目标资源的独占式访问。例如,当一个线程开始对特定的地址区域中的数据进行访问时,线程可设置锁变量以主张锁的所有权,并且随后因为拥有锁的线程具有锁的所有权,对锁变量进行检查的其他线程可以确定锁已被主张并且因此不可进入与该地址区域交互的代码区。这样的基于锁的方法可以被看作是封闭式,原因在于默认每个线程假设该线程不可以进入访问共享资源的代码区,因为除非该线程具有锁的所有权(从而保证可以不发生冲突),否则可能发生与另一线程的冲突。然而,锁标识符通常可控制对若干资源(例如,地址范围)的独占式访问,并且因此不保证在一个线程正在访问由锁变量保护的资源集合内的某些资源的情况下另一线程会明确地访问相同资源。因此,在线程之间的冲突极少的情形中,基于锁的方法可导致性能损失,因为线程可能在进入使用共享资源的代码临界区之前不必要地等待锁被释放。
用于处理访问共享资源的线程之间的冲突的更开放式方法可以是使用事务存储器支持。一种数据处理系统可具有电路来支持在由处理电路处理的数据线程内执行事务。事务可为线程中的指令,这些指令在标记事务开始的事务开始指令与标记事务结束的事务结束指令之间执行。在事务开始与结束指令之间,处理电路可推测性地执行介于中间的指令,并且阻止这些推测性地执行的指令的结果的提交,直至到达事务结束指令。在执行事务开始指令之后(但在到达事务结束指令之前)发生的中止事件可导致该事务中止并且丢弃推测结果。可存在中止事务的许多原因,但一个原因可能是检测到与另一线程进行的存储器访问的冲突。因此,利用此方法,每个线程可假设不会与其他线程发生冲突而开放式地开始处理代码的临界区,并且随后如果在未检测到任何冲突的情况下到达临界区的结束,则可以提交事务结果。在冲突极少的情形中,使用事务存储器支持可以通过允许更多线程同时处理它们的代码临界区来提高性能(与基于锁的方法相比)。
发明内容
至少一些示例提供了一种设备,包括:
处理电路,用于对数据处理线程进行处理;以及
事务存储器支持电路,用于支持在由处理电路处理的线程内执行事务,该事务包括线程中在事务开始指令与事务结束指令之间推测性地执行的指令,针对该事务,处理电路被配置为:阻止该推测性地执行的指令的结果的提交,直至到达事务结束指令,该事务存储器支持电路包括冲突检测电路,用于响应于检测到来自另一线程对针对该事务所追踪的地址工作集中的一个地址的冲突访问而触发对该事务的中止;其中:
响应于指定给定地址的独占式加载指令,处理电路被配置为:针对给定地址设置独占式监控器指示;
响应于指定给定地址的独占式存储指令,处理电路被配置为:当给定地址不再具有所设置的独占式监控器指示时返回独占式存储失败指示;
响应于在给定事务内执行的指定加载目标地址的预定类型的加载指令,处理电路被配置为:触发对先前针对加载目标地址设置的任何独占式监控器指示的清除;并且
响应于所述独占式加载指令,处理电路和事务存储器支持电路中的至少一者被配置为触发对下述事务的中止:针对该事务,该给定地址被指定为地址工作集中的一个地址。
至少一些示例提供了一种数据处理方法,包括:
响应于指定给定地址的独占式加载指令,针对给定地址设置独占式监控器指示;
响应于指定给定地址的独占式存储指令,当给定地址不再具有所设置的独占式监控器指示时返回独占式存储失败指示;
响应于在事务内执行的指定加载目标地址的预定类型的加载指令,清除先前针对加载目标地址设置的任何独占式监控器指示,事务包括给定线程中在事务开始指令与事务结束指令之间推测性地执行的指令,针对该事务,阻止该推测性地执行的指令的结果的提交,直至到达事务结束指令,其中事务将响应于检测到来自另一线程对针对事务所追踪的地址工作集中的一个地址的冲突访问被中止;并且
响应于所述独占式加载指令,触发对下述事务的中止:针对该事务,该给定地址被指定为地址工作集中的一个地址。
至少一些示例提供了一种计算机程序,用于控制主机数据处理设备以提供供执行数据处理线程执行的指令执行环境;该计算机程序包括:
处理程序逻辑,用于对数据处理线程进行处理;以及
事务存储器程序逻辑,用于支持在由处理程序逻辑处理的线程内执行事务,该事务包括线程中在事务开始指令与事务结束指令之间推测性地执行的指令,针对该事务,处理程序逻辑被配置为:阻止推测性地执行的指令的结果的提交,直至到达事务结束指令,该事务存储器程序逻辑包括冲突检测程序逻辑,用于响应于检测到来自另一线程对针对该事务所追踪的地址工作集中的一个地址的冲突访问而触发事务中止;其中:
响应于指定给定地址的独占式加载指令,处理程序逻辑被配置为:针对给定地址设置独占式监控器指示;
响应于指定给定地址的独占式存储指令,处理程序逻辑被配置为:当给定地址不再具有所设置的独占式监控器指示时返回独占式存储失败指示;
响应于在给定事务内执行的指定加载目标地址的预定类型的加载指令,处理程序逻辑被配置为:触发对先前针对加载目标地址设置的任何独占式监控器指示的清除;并且
响应于该独占式加载指令,处理程序逻辑和事务存储器程序逻辑中的至少一者被配置为:触发对下述事务的中止:针对该事务,该给定地址被指定为地址工作集中的一个地址。
至少一些示例提供了一种互连,包括:
多个接口,用于与多个处理元件交换消息;以及
控制电路,被配置为管理多个处理元件之间的一致性;其中:
响应于来自给定处理元件的独占式监控器设置消息,控制电路被配置为触发接口将独占式监控器设置消息发送到至少一个其他处理元件,其中,该独占式监控器设置消息指示了对与该给定地址相关联的独占式监控器指示的设置,独占式监控器指示用于追踪对给定地址的独占式访问;并且
响应于从第一处理元件接收到的预定类型的读取请求,控制电路被配置为:触发接口将独占式监控器取消消息发送到至少一个其他处理元件,以触发对与目标地址相关联的任何独占式监控器指示的取消,其中该预定类型的读取请求请求返回与由第一类型的读取请求指定的目标地址相关联的读取数据值。
附图说明
本技术的其他方面、特征和优点将从对结合附图进行解读的示例的以下描述中显而易见,在附图中:
图1示意性图示出具有多个处理元件和互连的数据处理系统的示例;
图2示出了包括事务存储器支持电路的处理元件的示例;
图3图示出在具有事务存储器支持的系统中处理事务的示例;
图4示出了用于以使用锁的非事务方式执行与图3的事务等效的操作的替代代码序列;
图5至图8示出了图示出在加载推测存在时在独占式加载/存储指令与事务之间的交互如何导致互斥损失的代码示例;
图9为示出了处理独占式加载指令的方法的流程图;
图10为示出了处理独占式存储指令的方法的流程图;
图11为示出了处理存储指令的方法的流程图;
图12为示出了处理在事务内执行的加载指令的方法的流程图;
图13至图15示出了由互连支持的一致性消息的示例;并且
图16示出了可以使用的模拟器实现。
具体实施方式
下文公开了一些具体示例。应理解,权利要求书不限于这些具体示例。
处理电路可具有事务存储器支持电路,用于支持在由处理电路处理的线程内执行事务。事务包括线程中在事务开始指令与事务结束指令之间推测性地执行的指令。处理电路可阻止该推测性地执行的指令的结果的提交,直至到达事务结束指令。事务存储器支持电路可包括冲突检测电路,用于响应于检测到来自另一线程对针对事务所追踪的地址工作集中的一个地址的冲突访问而触发对该事务的中止。
由于事务存储器支持电路提供了对事务内的指令的推测性执行,使得如果事务不得不中止,则推测结果可以倒回,所以不必使用锁变量来避免在执行事务的两个线程之间的冲突。然而,也可能存在以基于非事务的方法执行的一些线程。例如,这样的非事务线程可为执行最初在不使用事务的情况下编写或编译的代码区(不包括任何事务开始/结束指令)的线程。替代地,非事务线程可包括先前以基于事务的模式处理指令的线程,但对于这些线程,事务遇到频繁的中止事件(例如,由于与其他线程的冲突),并且因此处理现在已切换到基于非事务的模式。为了简明起见,下文使用的术语“非事务线程”指代完全不使用事务的线程或当前正执行退守路径的事务线程,退守路径是在对使用事务的若干次尝试执行已失败时选择的。
如果这样的非事务线程需要对至少一个目标资源的独占式访问,则通常锁变量可用于控制对该至少一个目标资源的独占式访问。与直觉相反,事务线程仍可需要在基于事务的代码路径内(不仅仅在退守代码路径中)检查锁变量,因为为了确保任何非事务线程的正确结果,应当阻止事务线程提交涉及在非事务线程保持锁时对共享资源进行写入的事务。因此,甚至经常在以事务模式执行的线程事务内,事务仍可包括用于检查锁变量以确定任何其他线程是否持有对资源的独占式访问的指令,并且如果该锁当前由另一线程持有,则推迟后续操作,从而阻止事务的提交、或中止事务。
非事务线程以检查并获取锁的一种方式可以使用独占式加载和独占式存储指令。当执行指定给定地址的独占式加载指令时,处理电路可针对该给定地址设置独占式监控器指示。独占式加载指令还可返回从对应于该给定地址的存储位置读取的值。当执行指定给定地址的独占式存储指令时,当给定地址不再具有所设置的独占式监控器指示时,处理电路可返回独占式存储失败指示。另一方面,当在执行独占式存储指令时候独占式监控器指示仍设置时,随后可执行存储操作以将更新值写入给定地址,并且可返回独占式存储成功指示。各种事件可以触发清除先前设置的独占式监控器指示,例如另一线程执行存储操作以更新与给定地址相关联的数据值、或另一线程执行指定给定地址的另一独占式加载指令。对需要清除先前设置的独占式监控器指示的事件的追踪可通过数据处理系统的微架构执行,而不需要在程序代码中执行明确指令以检查这些事件。因此,非事务线程可以使用独占式加载指令来读取锁变量并且设置独占式监控器,并且随后后续的独占式存储指令可以通过将更新值写入锁变量来尝试主张锁,并且如果同时另一线程已主张了锁,则后续的独占式存储指令可失败(因为此情况下独占式监控器可能不再被设置)。使用独占式监控器指示来支持独占式加载和存储指令可以简化在线程之间强制互斥。
因此,一些线程可使用独占式加载/存储指令所使用的独占式监控器指示以强制一些资源的互斥,从而为当前线程预留资源,使得在没有来自另一线程的干扰的情况下可以原子地使用该资源。其他线程可使用事务存储器来在线程之间强制这样的互斥。为了确保在事务与非事务线程之间的正确交互,事务线程可包括用于检查由非事务线程中的独占式加载/存储指令访问的锁变量的指令。
然而,发明人认识到,在一些情况下,即使事务被布置为检查锁变量并且在另一线程已持有锁的情况下阻止对共享资源的写入的提交,这有时可导致与使用独占式加载和存储指令来强制互斥的线程的互斥损失。这是因为一些微架构在其知晓是否确实需要加载之前可支持推测性地执行加载指令。因此,在一些情形中,处理电路的微架构可以将非事务线程的后续加载指令拉到检查较早的独占式存储指令是否已成功地完成的指令之前。如果所有线程均为使用独占式加载/存储指令以强制互斥的非事务线程,则这不是问题,因为最终如果确定独占式存储指令失败,则已经推测性地执行的后续加载指令会被确定为已不正确地执行,并且可以将该加载的任何结果丢弃。
然而,如果还存在使用事务执行以强制互斥的其他线程,则事务有可能在不按顺序推测性地执行的较新独占式加载指令与设置锁的较早独占式存储指令之间的周期内开始并且结束。在此情况下,互斥可能丢失,因为事务不会检测非事务线程的动作(因为当事务执行时锁尚未由非事务线程主张),而且非事务线程不会检测事务线程(因为事务线程本身通常不主张锁,除非其采用基于锁的退守代码路径的方法)。因此,较新加载的推测执行将被允许提交,并且可导致非事务线程使用在事务被执行之前存在的共享资源的陈旧值而非由事务提供的更新值。因此,事务的效果会直接丢失,并且可存在违反互斥。
一种缓解此问题的可能方式可为在与非事务线程相关联的代码内包括推测障碍指令。推测障碍指令要求处理电路的微架构不允许执行障碍指令后面的任何指令,直至在障碍之前的所有较早指令已完成。通过在用于主张锁的独占式存储指令之后并且在加载与代码临界区相关联的共享数据的后续加载指令之前包括障碍,这阻止将后续推测性加载提升到独占式存储指令之前,使得在与代码临界区相关联的任何值被读取之前就知晓独占式存储指令的结果。这意味着即使事务线程开始使用相同的共享资源的事务并且该事务在独占式存储指令被解析出之前完成,非事务线程的后续加载将加载获自事务完成的值而非在执行事务之前存在的值,以维持互斥。
然而,包括这样的障碍的问题为这会降低非事务线程的性能,这是因为在不存在与事务线程的冲突的情形中,可阻止稍后的加载以较早时序被推测性地执行,这会通过非必要地延迟对存储器的访问而使性能降低。此外,重写代码以包括这样的额外障碍指令可导致相对高的软件开发和销售开销。例如,针对不具有事务存储器支持的系统编写的传统代码(使用独占式加载和存储指令编写以强制互斥)可能不再安全地在支持事务存储器的系统上执行,并且因此将需要对这样的代码进行重写以包括可能不期望的障碍。
避免需要推测障碍的一种方式为提供预定类型的加载指令,该预定类型的加载指令当在指定加载目标地址的给定事务中执行时,触发处理电路以触发对先前响应于独占式加载指令而针对加载目标地址设置的任何独占式监控器指示的清除。在实施独占式加载/存储的比较系统中,对已设置独占式监控器指示的地址的加载通常不会导致清除独占式监控器,这是因为该加载并不被期望以改变在与独占式监控器指示相关联的地址处的数据值,并且因此该加载不会被认为是对独占式监控器所追踪的地址的独占性访问的干扰风险。然而,通过当在事务内执行预定类型的加载时清除独占式监控器指示,这意味着即使在独占式存储指令在非事务线程中被执行以主张锁之前就执行了事务,非事务线程也能够检测到该事务的介入行为,从而阻止互斥损失(由于独占式存储指令的最终失败将阻止非事务线程使用共享资源的陈旧值来继续临界区,即使在已推测性地执行了从该临界区的加载的情形中)。
此外,响应于独占式加载指令,处理电路和/或事务存储器支持电路可触发对下述事务的中止:针对该事务,由独占式加载指令指定的给定地址被指定为与该事务相关联的地址工作集中的一个地址。这意味着即使在事务线程与非事务线程之间的相对时序为使得在非事务线程中执行独占式加载指令并且在非事务线程中执行加载推测之前开始事务(这可以导致在事务线程更新共享变量之前推测性地执行了共享变量的加载),通过中止事务,阻止发生事务线程对共享变量的更新,以确保互斥。一旦由非事务线程中的临界区进行的更新被执行,可稍后重试事务。
因此,无论非事务线程中的独占式加载/存储指令与在事务线程中的事务之间的相对执行时序如何,即使不按顺序推测性地执行一些加载指令,同样可以强制互斥。这允许在依赖于独占式监控器指示的线程与使用事务的线程之间的安全交互工作,而不需要重写非事务代码以包括额外障碍。
在本申请中讨论的技术可以在具有单个处理元件的设备中使用。例如,单个处理元件可以时间共享方式处理多个数据处理线程,或者可以使用同时多线程(SMT),其中来自多个线程的指令同时存在于处理流水线中,并且分区的寄存器集合同时追踪多个线程的架构状态。
然而,此技术在处理电路包括可以并行执行多个处理线程的多个处理元件(例如,处理器核心,CPU或GPU)的系统中是特别有用的。在具有多个处理元件的系统中,一个处理元件可能与执行非事务线程的另一处理元件并行地执行事务线程。在此情形中,如上文讨论的冲突类型以及由非事务线程内的推测导致的潜在互斥损失可能性更大,并且可以通过上文讨论的技术缓和。
在其中处理电路具有两个或多个处理元件的系统中,则当独占式加载指令在给定处理元件上执行时,给定处理元件可触发将消息发送到至少一个其他处理元件,该消息指示已针对由独占式加载指令指定的给定地址设置了独占式监控器指示。通常在支持独占式监控器的系统中,尽管要求清除独占式监控器指示的事件可能广播到多处理器系统内的其他处理元件,但将独占式监控器指示的设置广播到其他处理元件并不常见。然而,通过将指示独占式监控器指示被设置的消息发送到至少一个其他处理元件,这允许另一处理元件上执行的事务(该事务在其地址工作集中具有给定地址)被中止,如上文讨论的那样。
在一些实施方式中,指示已设置了独占式监控器指示的消息可以广播到除了已执行独占式加载指令的给定处理元件之外的所有其他处理元件。然而,在其他情形中,可能不必将消息发送到所有其他处理元件。例如,一些处理元件可能不具有事务存储器支持电路,并且因此不可能执行事务,在此情形中不必将消息发送到这样的处理元件。此外,在一些情形中,连接各个处理元件的互连可以包括监听过滤器或其他逻辑,用于追踪哪些处理元件正在执行事务或哪些地址由处理元件缓存/访问,并且因此可根据互连内持有的数据来确定给定地址是否会在针对给定处理元件上的事务所追踪的地址工作集内,在此情形中,对于当前不处理任何事务或者可以根据互连中的逻辑确定为具有不包括给定地址的地址工作集的处理元件,可以省略独占式监控器取消消息。
类似地,当预定类型的加载指令在给定处理元件上执行时,给定处理元件可触发将消息发送到至少一个其他处理元件以指示先前由至少一个其他处理元件针对加载目标地址设置的任何独占式监控器指示应当被清除,以确保跨处理元件维持互斥,即使在针对非事务线程执行的加载推测存在时。
响应于在给定事务内执行的预定类型的加载指令,处理电路可将加载目标地址添加到针对该给定事务的地址工作集。这意味着,如果非事务线程随后尝试执行独占式加载指令以针对同一地址设置独占式监控器,则该事务被中止以维持互斥。
在一些示例中,追踪地址工作集可包括分开地追踪地址读取集(表示由事务读取的地址)、以及地址写入集(表示由事务进行写入的地址)。例如,地址读取/写入集可以通过在缓存中设置标志来追踪,这些标志指示相关联的缓存线为分别针对给定事务的读取集还是写入集的部分。在分开地追踪读取和写入集的实施方式中,预定类型的加载可触发将加载目标地址添加到地址读取集,并且独占式加载指令的执行可触发对下述事务的中止:由独占式加载指令指定的给定地址在针对该事务所追踪的读取集内。
预定类型的加载指令的执行还可导致对在其写入集内具有所指定的加载目标地址的其他事务的中止。在其读取集中具有所指定的加载目标地址的其他事务可在预定类型的加载指令的执行之后未被中止地继续。实际上,预定类型的加载指令的期望用例可为读取由非事务线程所使用的锁变量,因此事务线程不大可能需要对锁变量进行写入(除非后退到非事务退守路径),因此预定类型的加载指令的地址不大可能在针对事务所追踪的写入集内。因此,在多个事务都正读取相同的锁变量的情况下,多个事务可以并行处理而不会因为读取锁变量导致另一事务中止,从而允许并行处理事务,而不会不必要地因检查锁变量而串行化事务。
除了预定类型的加载指令之外,处理电路还可支持第二类型的加载指令,该第二类型的加载指令当在给定事务内执行时,触发处理电路保持先前针对加载目标地址设置的任何独占式监控器指示。通过区分不同类型的加载指令,这避免了在事务中的每次加载导致将先前设置的独占式监控器清除(这会因导致独占式存储指令的较频繁的失败而导致性能损失)。尽管响应于加载而清除独占式监控器可适用于加载锁变量能够阻止当进行事务与非事务线程的交互工作时由加载推测导致的潜在互斥损失(如上文讨论的那样),而对于其他加载操作,由于对值进行读取本身不足以打断由独占式监控器指示的访问独占性(因为读取不会改变在与独占式监控器相关联的地址处存储的数据值),优选保持独占式监控器。例如,预定类型的加载指令可以用于事务内的一部分事务代码,这部分代码访问由其他非事务线程使用的锁变量以支配对共享资源的访问;而第二类型的加载指令可以用于代码临界区,对于事务内进行的从共享资源实际加载所关注数据的加载,该代码临界区必须被原子地执行。
执行独占式加载和存储事务的处理电路可支持给定线程推测性地执行加载指令以在处理电路解析出用于控制对目标地址的独占式访问的锁变量是否已成功由该给定线程主张之前从目标地址加载数据值。换句话说,加载推测可导致在对条件指令(其评估独占式存储指令是否已被成功执行)的解析之前执行加载指令。这样的加载推测可以改进性能。上文讨论的方法可以确保即使执行了这样的推测,非事务与事务线程仍可实现互斥。
事务存储器支持电路可具有多种形式。各种中止事件可导致冲突检测电路在到达事务的事务结束指令之前触发对该事务的中止。一个示例可以为当冲突检测电路检测到来自另一线程对针对第一线程的事务所追踪的地址工作集中的一个地址的冲突访问时,该冲突访问可触发对第一线程的事务的中止。可以导致事务中止的其他事件可以包括:不被允许在事务内执行的指令类型的执行;发生异常事件或中断;或如上文讨论的指定地址工作集内的地址的独占式加载指令的执行。
事务存储器支持电路除了冲突检测电路之外,还可包括其他元件。例如,事务存储器支持电路可以包括推测结果存储电路和/或复原状态存储电路,该推测结果存储电路用于存储针对至少一个事务推测性地执行的指令的结果,该复原状态存储电路用于存储响应于事务的事务开始指令而捕获的架构状态(如果事务中止,该架构状态可被复原)。例如,推测结果存储电路可以缓冲存储指令的结果,直至事务响应于事务结束指令被提交为止,使得事务内的推测性地执行的存储指令不会污染存储器系统,直至知晓事务可被提交为止。在当事务被中止时状态需要倒回至较早执行点的情形中,复原状态存储电路可以例如在寄存器组内包括用于保持在事务开始时存在的状态检查点的寄存器。替代地,复原状态可以使用寄存器重命名来维持,以追踪在与存储当前架构状态的寄存器相同的寄存器文件内的旧的检查点处的架构状态。
中止事务的另一可能原因可能为若事务存储器支持电路耗尽资源,使得不再可能保证事务将在没有冲突的情况下继续正确地进行。例如,如果要被存储在推测结果存储电路中的推测结果的数量超过了所提供的存储装置内可用的容量,则事务可被中止。
在中止事务时,可能由软件来确定是重试执行事务还是替代地使用非事务退守路径(例如,使用锁和独占式加载/存储指令)。然而,处理电路的微架构可以提供指示事务中止的可能原因的提示,这些提示可以被软件使用来确定是否值得再次尝试执行事务还是使用退守路径(例如,在中止原因关于使得任何的将来尝试很可能失败的情况下)。
相应的计算机程序可被提供用于控制主机数据处理设备以提供供数据处理线程执行的指令执行环境,该计算机程序包括:处理程序逻辑和事务存储器程序逻辑,该处理程序逻辑用于对数据处理线程进行处理,该事务存储器程序逻辑用于支持由处理程序逻辑处理的线程内执行事务(以与上文针对硬件实施例讨论的类似方式支持事务)。事务存储器程序逻辑可包括冲突检测程序逻辑,用于当检测到来自另一线程对针对事务所追踪的地址工作集中的一个地址的冲突访问时触发对该事务的中止。计算机程序的程序逻辑可以以与上文针对相应处理电路和事务存储器支持电路讨论的类似方式对独占式加载/存储指令和对预定的加载指令的执行进行响应。
因此,可将展现出与将由具有上文讨论的特征的实际硬设备提供的指令环境类似的指令环境的计算机程序提供到在计算机程序之上执行的软件,尽管在执行该计算机程序的主机计算机中可能不存在提供这些特征的任何实际硬件。替代地,计算机程序(例如可以是模拟器或虚拟机)能够通过提供诸如指令集或数据结构之类的程序逻辑来模拟硬件架构的功能性,使得通用主机数据处理设备能够以与在具有事务存储器支持的设备上将会实现的结果兼容的方式来执行旨在在该具有事务存储器支持的设备上执行的代码。
还可提供一种互连,其具有用于与各个处理元件交换消息的若干接口以及用于管理在处理元件之间的一致性的控制电路。响应于来自给定处理元件的独占式监控器设置消息(其指示了对与该给定地址相关联的独占式监控器指示的设置,该独占式监控器指示用于追踪对给定地址的独占式访问),控制电路可触发接口以将该独占式监控器设置消息发送到至少一个其他处理元件。响应于从第一处理元件接收到的预定类型的读取请求(其请求返回与由第一类型的读取请求指定的目标地址相关联的读取数据值),控制电路可触发接口将独占式监控器取消消息发送到至少一个其他处理元件以触发对与目标地址相关联的任何独占式监控器指示的取消。
因此,尽管传统的互连通常不会将独占式监控器指示的设置广播到其他处理元件,但通过这样做,这使得执行在事务的读取集中具有给定地址的事务的其他处理元件能够中止该事务,从而确保互斥,即使设置独占式监控器指示的非事务线程使用加载推测来不按顺序地执行对共享资源的加载。此外,在给定处理元件处执行的预定加载指令可触发给定处理元件以发布第一类型的读取请求,这导致互连将独占式监控器取消消息转发到其他处理元件,再次帮助维持非事务与事务线程之间的互斥。
图1示意性地图示出具有处理电路4的数据处理系统2的示例,该处理电路支持若干数据处理线程的执行。在此示例中,处理电路4包括若干独立的处理元件6,这些处理元件均可以彼此并行地执行各自的处理线程的执行。每个独立的处理元件6可例如为中央处理单元(CPU)、图形处理单元(GPU)或能够执行指令的任何其他可编程单元。每个处理元件可具有用于缓存来自存储器系统20、16的数据的至少一个缓存8,其中访问缓存8中的数据与从存储器系统访问数据相比需要较少的延时。
互连10被提供以管理在处理元件6之间的通信,并管理在处理元件6各自的缓存8中的数据之间的一致性。互连10具有用于与独立的处理元件6进行通信的若干接口12、以及用于与存储器装置16(例如DRAM或非易失性存储器)进行通信的存储器装置接口14。互连10具有用于追踪处理元件6对数据的读取或写入请求并且对请求进行响应以维持一致性的一致性控制单元18,例如,一致性控制电路18可通过向其他处理元件发送监听消息(这些监听消息查询在其他处理元件的本地缓存8中缓存的数据的状态并且/或者请求针对相应地址的缓存数据的返回和/或无效)来控制互连10对读取或写入请求进行响应。例如,当一个处理元件尝试以唯一状态将数据读取到其缓存中(在该唯一状态中可以在不发布对互连的进一步请求的情况下对该数据进行写入)时,一致性控制器18可检查其他处理元件是否持有该数据,并且在必要时使该数据从其他处理元件8中无效。在一些情形中,可在互连内提供监听过滤器和/或系统缓存20。如果提供了系统缓存,则该系统缓存可缓存来自存储器16的数据以进行与不得不总是从存储器取出数据的情况相比较快的访问(但具有与数据在处理元件8的本地缓存中的情况相比较长的延时)。监听过滤器可部分或完全追踪在每个处理元件的缓存8中缓存的数据,使得需要发送的一致性消息的数量可以减少(例如,如果已知处理元件并不持有所需数据,则可以省略针对给定处理元件的监听请求)。在一些情形中,可使用公共存储结构来实现系统缓存和监听过滤器(例如,通过与系统缓存20的每个缓存线相关联的追踪位(指示数据是否也缓存在每个处理元件的缓存8中)来表示监听过滤器)。任何已知的一致性协议可由互连10使用于管理处理元件之间的一致性。例如,可以使用由英国剑桥的Limited提供的ACE或CHI协议。
图2更详细地示出了处理元件6中的一个处理元件的一部分的示例。处理元件6具有用于执行指令以执行数据处理操作的处理逻辑104。例如,处理逻辑104可包括:用于执行各种类型的处理操作的执行单元,例如用于执行算术或逻辑运算(比如加法、乘法、AND、OR等)的算术/逻辑单元(ALU);用于对浮点操作数执行运算的浮点单元;或用于对包括多个数据元素的向量操作数进行向量处理的向量处理单元。提供了用于存储由处理逻辑104执行的指令的操作数并且用于存储所执行的指令的结果的一组架构寄存器106。指令解码器108解码从指令缓存110取出的指令以生成控制信号,用于控制处理逻辑104或数据处理设备102的其他元件执行相关的操作。还提供了加载/存储单元112以执行加载操作(响应于由指令解码器108解码的加载指令)来将数据值从1阶或2阶缓存114、116或主存储器16加载至架构寄存器106中,并执行存储操作(响应于由指令解码器108解码的存储指令)来将数据值从架构寄存器106存储到缓存114、116或主存储器16。请注意,图1中示出的本地缓存8可以对应于图2的1阶指令及数据缓存110、114或2阶缓存116中的任一者。
设备102还具有事务存储器支持电路120,该事务存储器支持电路提供用于支持硬件事务存储器(HTM)的各种资源。在事务存储器支持电路120中的HTM资源可包括例如用于存储事务的推测结果的推测结果存储装置122、用于追踪由事务访问的地址的地址追踪电路124、用于检测在由事务进行的数据访问与由其他线程进行的数据访问之间的冲突使得当检测到冲突时事务可以被中止的冲突检测电路126、以及用于存储在事务开始时来自架构寄存器106的架构状态数据的快照使得当事务被中止时此状态可被复原以重写事务的推测结果的复原状态存储电路128。尽管在图2中地址追踪电路124被示出为分立的组件,在一些情况下,地址追踪电路可以使用1阶或2阶缓存114、116的每个缓存线中的元数据(其追踪在事务中给定地址是否已被读取或写入)来实现。在一些情形中,可以针对给定事务来区分(通过地址追踪电路)地址的分开的读取和写入集124。
此外,资源可包括用于存储追踪事务嵌套级别的嵌套深度值的嵌套深度寄存器132。这可有益于使程序员或编译器能够定义嵌套事务(其中在第一事务开始指令之后但在对应于第一事务开始指令的事务结束指令之前遇到第二事务开始指令)。这可以用于确保原子地处理代码的临界区,即使有分支去往代码中超出第一事务开始指令的部分。然而,为了避免必须将架构状态的多个检查点捕获于推测结果存储装置中,一些微架构可有效地忽略嵌套事务集的“内部”事务,并且仅响应于最初的第一条事务开始指令来捕获架构状态的检查点。在事务结束指令之前出现的任何后续事务开始指令可被有效地忽略,除非嵌套深度寄存器132可被递增以追踪已遇到了多少条事务开始指令,使得在遇到事务结束指令时,微架构可以追踪哪条事务结束指令与嵌套事务集的外套事务有关。因此,当遇到事务结束指令时,如果嵌套深度为一或更多,则忽略该事务结束指令,并且如果嵌套深度为零(指示事务为嵌套集合的外套事务),则该事务可被提交。
图2示出了具有事务存储器支持电路120的处理元件的示例。在一些情形中,图1示出的系统2的若干处理元件6可具有这样的事务存储器支持电路120。然而,所有处理元件6都具有事务存储器支持电路是不必要的——可存在一些不能够执行事务的处理元件。此外,尽管图2示出了在独立的处理元件6的微架构内的事务存储器支持电路120,但这不是必要的。在一些情形中,一些事务存储器资源可以在各个处理元件之间共享——例如,可以提供可供在多个处理元件之间共享使用的用于捕获复原状态128或追踪地址124的某个公共存储装置。
图3示出了使用事务存储器支持电路120和处理逻辑104来执行给定线程内的事务的示例。事务是由事务开始指令(tstart)与事务结束指令(tcommit)限定的程序代码区。如图3所示,响应于事务开始指令,捕获在架构寄存器106中的当前架构状态并且将其存储在复原状态存储电路128中(对于嵌套事务,仅嵌套事务集的外套事务可触发对架构状态的捕获)。处理逻辑104开始执行在tstart指令后面的后续指令的推测执行,并且由于这些指令被执行,由这些指令访问的地址被地址追踪电路124追踪,并且冲突检测电路126检测在所追踪的地址与响应于其他线程而使用加载/存储单元112进行访问的地址之间的冲突。在事务内的指令的至少一些推测结果被存储在推测结果存储电路122内。例如,在事务仍然未决时,响应于存储指令STR而要存储到缓存或存储器的值可保存在推测结果存储装置122中。如果在其间不发生中止事件的情况下到达事务结束指令(tcommit),则响应于事务结束指令,提交推测结果。在提交该事务时,在推测结果存储装置122中针对该线程存储的任何结果可写入数据缓存114或存储器116,并且复原状态128可被丢弃或允许被重写,这是因为不再需要将架构状态倒回至遇到事务开始指令之前的点。
另一方面,如果发生中止事件,例如当由冲突检测电路126检测到冲突(当另一线程访问已经由事务访问的地址时)时,则触发对该事务的中止,并且将来自复原状态存储装置128的复原状态复原到架构寄存器106。中止事件的其他原因可以例如包括执行不允许在事务内执行的指令、在推测结果存储装置122或地址追踪电路124内用于处理推测结果或给定事务所需的地址的资源不足、或在事务期间接收到中断。
图3示出了在使用事务开始和结束指令的事务模式中可以如何执行某一处理操作集合。针对非事务线程管理锁的另一方式可为使用独占式监控器。处理电路4可支持使用独占式加载和独占式存储指令,这些指令可以用于确保处理不继续进行到后续代码区,除非没有其他处理与在执行独占式加载指令与执行独占式存储指令之间的给定地址交互。响应于执行独占式加载指令,执行该独占式加载指令的处理元件6触发设置与该独占式加载指令的目标地址相关联的独占式监控器指示。如图1所示,此独占式监控器指示可以保存在处理元件本身内提供的本地独占式监控器30内或在互连内提供的全局独占式监控器32内。例如,如果由独占式加载指令指定的地址为保证不由其他处理元件访问的不可共享地址,则可以使用本地独占式监控器30,而全局独占式监控器32可以用于能够由多个处理元件6访问的可共享地址。在一些实施方式中,可能不必提供本地与全局独占式监控器30、32两者并且这些独占式监控器的功能可以结合。
针对独占式加载指令的目标地址设置的独占式监控器指示可为允许本地/全局独占式监控器30、32检测其应当对能够指示不再保证对该具体地址的独占式访问的事件(例如由其他线程或其他处理元件触发的对同一地址的存储操作、或由另一线程或另一处理元件对同一地址执行进一步的独占式加载指令)进行监控的任何指示。在一些示例中,按照地址区块来索引的存储结构可以具有针对每个区块设置的标志,该标志指示是否已为该区块设置了独占式监控器。然而,实际上,需要为其设置独占式监控器的地址数量是相对低的,因此更有效的实施方式可以简单地提供存储有已对其设置了独占式监控器指示的位置地址的一个或多个寄存器。
在检测到可以指示不再保证对给定地址的独占式访问的事件时,互连10可将指示已发生这样的事件的消息发送到每个处理元件,使得如果已针对相关地址设置了任何独占式监控器,则可以清除独占式监控器。如何管理独占式指示的精确细节可在针对具体处理器实施方式选择的具体微架构的方面。因此,通常,架构可指定若干事件应当触发对独占式监控器的清除,但由互连10对这些事件进行信号告知或在独占式监控逻辑30、32内对这些事件进行追踪的精确方式可以不同。
当给定处理元件6执行独占式存储指令时,处理元件6可检查先前针对独占式存储指令的所需地址设置的独占式监控器指示是否仍被设置,并且如果是,则存储指令可成功地执行以将数据存储到给定存储器地址并且处理元件还可返回独占式存储成功指示,例如在寄存器中设置标志以确认存储已正确地完成。后续的条件指令可随后检查独占式存储成功指令以确定是否继续进行后续代码,该后续代码使用对其需要进行独占式访问的资源。因此,通过执行指定用于提供锁变量的地址的独占式加载和存储对,这可以提供保证对非事务线程中的某一后续代码区的原子访问的方式。如果在独占式监控器指示已被清除时执行独占式存储指令,则返回独占式存储失败指示,这可以导致后续的条件指令不满足其条件代码,从而阻止程序流超出该条件指令继续,使得当不能保证对较早资源的独占式访问时不进入代码的临界区。
在一些情形中,由于设置了独占式监控器指示,独占式监控逻辑30、32可仅具有用于同时追踪有限数量的地址的资源。例如,在一些实施方式中,独占式监控器指示可以简单地包括对被认为针对其设置了独占式监控器指示的单个地址的指示,并且如果指定不同地址的另一独占式加载指令被执行,则这可清除先前针对由较早的独占式加载指令指定的任何地址设置的指示。
因此,由处理电路4执行的一些线程处理可使用如图3所示的事务模式以对某一范围的地址强制互斥,而其他线程可使用基于锁的模式(该模式使用独占式加载和存储指令)以在不使用事务的情况下强制原子访问。例如,图4示出了在代码的临界区开始处设置锁并且随后一旦完成临界区即释放锁的方法(独占式加载/存储指令可以用于在图4的步骤140处处理对锁的读取与主张)。例如,可存在不具有硬件事务存储器资源120并且因此被限制于使用基于锁的方法的一些处理元件6,而其他处理元件6可具有硬件事务存储器资源120。此外,如果对于某些事务频繁发生中止,则最初使用事务模式进行尝试的线程可切换到使用非事务模式(该非事务模式使用锁)。例如,可存在持续遇到冲突的线程集,并且因此继续针对所有这些线程使用事务并非是有效的。因此,甚至当一个线程使用与图3所示的事务模式类似的事务模式时,仍可能存在需要使用基于锁的机制的其他线程。此外,在事务模式中操作的线程仍可需要访问也被非事务线程访问的共享资源。在一些情形中,非事务线程可实际上执行与事务线程相同的代码,但该代码可具有在代码内的事务和非事务路径两者,这可根据事务是否已经在先前情况被发现是有效的来进行选择(例如,如果事务路径持续中止,则软件可切换到非事务路径)。
由于可能存在需要共享对由锁保护的资源的访问的事务与非事务线程两者,则有时事务线程可能仍需要具有读取锁地址的一些指令,并且如果锁当前被主张或设置,则中止事务或等待一段时间。尽管这样的锁检查指令不需要来确保正确处理事务线程本身(这是因为冲突检查电路126能够检测另一线程是否与事务冲突,并且如果存在冲突,则中止事务以阻止不正确的结果),但是仍将需要进行锁检查来阻止在另一线程持有锁时提交事务结果,否则会不利于非事务线程的操作。
处理电路4还可支持指令的推测执行,其中对一些指令的执行发生在知晓是否确实应当执行这些指令或到指令的输入是否正确之前。例如,给定处理元件可具有用于在条件分支指令的结果实际被确定之前预测该结果(分支结果可以取决于从存储器系统加载的值或尚不可用的较早指令的结果)的分支预测器,并且较迟指令可以基于所预测的结果来执行。如果正确地预测了分支,则这可以改进性能,但如果存在误预测,则可以丢弃任何推测性地执行的指令的结果,并且在寄存器106中的架构状态可以倒回到分支点,并且与正确分支结果相关联的后续指令随后可被执行。与解析误预测相关联的延时代价可能超过在预测是正确的情形中使指令能够尽快取出、解码并执行的性能增益。有时,这样的推测性处理可导致用于加载来自存储器系统8、20、16的数据的加载指令在解析出较早条件分支(该分支支配是否应当实际执行该加载)之前执行。在此分支被误预测的情形中,这可以导致在事务线程与使用独占式加载/存储指令的非事务线程之间交互方面的问题,从而潜在地导致互斥损失。给出以下示例来说明此问题。
考虑两个处理元件(P0和P1),每一个均对特定变量x执行运算,对此需要互斥:
如果x最初具有值0,则期望x的最终结果为以下任一者:
·1,如果首先执行P0的更新,并且随后P1作用于获自P0的值x;或者
·3,如果首先执行P1的更新,并且随后P0作用于获自P1的值x。
最终结果2会违反互斥,由于这将暗示在P1已开始处理x之后但在P1已将x的新值写回存储器之前,P0读取x的当前值。应理解,此示例是人为想出的,并且实际上由每个处理线程对共享数据资源执行的处理操作可能更加复杂。但此简化的示例可用于解释该问题。
图5示出了“自旋锁(spinlock)”代码示例,该示例示出了在处理元件P0上执行的线程的可能实施方式,其中独占式加载/存储指令LDAXR、STXR被用于检查锁当前是否被主张,并且如果没有其他线程已主张该锁(独占式监控逻辑30在独占式加载指令与独占式存储指令之间的周期中检测到另一线程主张锁的情况),则主张该锁,并且因此检查使用共享的“x”变量继续进行处理是否安全。
图6和图7示出的代码示例示出了一种替代实施方式,其中事务被用于尝试省略(elide)锁。图7更详细地示出了图6中示出的功能CHECK、WAIT_ACQ、LOCK、CHECK_ACQ和UNLOCK。请注意,图6所示的代码既包括用于开始和提交事务的代码,也包括在当执行事务时另一线程持有锁的情况下用于重试事务的退守代码路径(标记为“fallback:”)以及在省略(elision)失败(如果事务已经不成功地重试了某一次数)的情况下将执行的锁定路径(标记为“lock:”)。如图7所示,在功能LOCK(Xx)中的锁定路径以与图5中示出的示例类似的方式使用独占式加载/存储指令。还请注意,在图6中,如果成功使用该事务(没有其他处理持有锁),则图6所示的代码将进入被标记为“entry:”的临界区,而从未主张锁本身(尽管在CHECK(X1)处将锁地址添加到针对事务的工作读取集,但锁并未被写入,除非在事务失败的情况下执行了锁定路径)。
如图8所示,执行图5的自旋锁代码的处理元件P0可执行加载推测,以在知晓是否应当实际执行该加载之前执行一些加载指令。这可以导致在解析出条件分支(其测试独占式存储指令是否成功)之前执行加载共享变量x的加载指令(该加载指令在尚未获取到锁的情况下则不应当执行)(即,有时共享变量“x”的加载可在已实际获取到锁之前执行)。如果所有处理元件都使用相同机制(独占式加载/存储指令)来确保互斥,这是可接受的,如同独占式存储指令稍后被确定为未成功(即,本应采用图8的条件分支指令CBNZ),针对解析不正确推测所提供的机制随后将消除加载共享变量“x”以及任何后续指令的影响,并且基于正确分支结果重置处理,仿佛从未执行过“x”变量的加载一样。这将确保循环再次被尝试,使得如果任何其他线程在此期间更新了“x”变量,则图8中示出的当前线程将读取“x”的最后值,并且当前线程的结果将仅在独占式存储指令STXR成功的情况下(即,没有其他线程导致响应于LDAXR指令而设置的独占式监控器在执行STXR指令以主张锁之前被清除)才被提交为架构状态。
然而,如果处理元件P0使用独占式加载/存储指令来处理临界区,而处理元件P1使用事务处理临界区来省略锁,则由处理元件P0不按顺序地推测执行“x”变量的加载可以导致违反互斥,例如,如果由P0和P1执行的指令的相对时序如下:
P0执行锁变量的LDAXR(看到0=空闲的),并且针对锁变量地址设置独占式监控器指示
P0执行x变量的LDR(看到0)
…
P1执行TSTART和锁变量的LDR(看到0=空闲的)
P1执行x变量的STR(将其设置为1)
P1执行TCOMMIT并且成功
…
P0执行锁变量的STXR(将其设置为1),并且独占式存储是成功的,因为尚未有对锁变量的介入写入将针对锁变量地址预留设置的独占式监控器指示清除
P0执行x变量的STR(将其设置为2)
P0执行锁变量的STLR(将其设置为0)
此序列违反互斥,因为x的最终值为2。互斥违反是有可能的,因为省略的(事务)路径从未对锁变量进行写入,因此由自旋锁代码设置的独占式监控器保持完整。加载推测将临界区加载提升到P0的锁存储之前,并且因此如果P1上的事务的开始和结束均在由P0存储锁之前,则由P0加载的“x”的值在临界区中是陈旧的(过期)。
解决此问题的一种方式可以为将推测障碍引入非事务自旋锁代码中以阻止将加载提升到较早条件分支之上。然而,这可能需要对已经针对不支持事务存储器的系统写好的众多程序进行重写,这对软件开发者而言是不合理的负担。
可以确保与针对不支持事务存储器的系统写好的传统代码的向后兼容性的方法可以在架构中引入两种额外的措施,以确保事务与非事务线程之间的兼容性。首先,当独占式加载指令在一个处理元件6上执行时,将针对由指令指定的地址进行的独占式指示设置广播到其他处理元件(至少具有HTM资源120的处理元件),使得在事务的地址工作集(读取集)中指定同一地址的任何事务中止。其次,引入一类新的事务加载指令(下文称为预定类型的加载指令),该事务加载指令在事务内被执行时,将由加载指令指定的地址加载到该事务的工作地址读取集中,并且将请求清除任何先前针对同一地址设置的独占式监控器指示的信号发送到互连10。在图7的“CHECK(Xx)”功能内的加载指令LDR可以用预定类型的加载来替换。
这些措施能够确保互斥,因为在上文所示的示例中,当在处理元件P1上的事务对锁变量执行预定类型的加载时,这将清除由处理元件P0针对锁变量设置的独占式监控器指示,并且因此当后续的独占式存储指令STXR在处理元件P0上执行时,则此指令将失败,因为独占式监控器不再被设置。这意味着即使推测执行导致将x变量的加载提升到执行处理元件P1上的事务之前,由于自旋锁代码在处理元件P0上失败,自旋锁代码中止其当前尝试使用x变量执行代码的临界区,并且随后循环再一次返回到尝试主张锁,并且这一次如果锁主张成功,则x变量的加载将见到获自由处理元件P1上的事务提供的所提交的更新的值,而非在执行事务之前读取的陈旧值。
类似地,如果在处理元件P0和P1上的操作之间的时序的不同导致在处理元件P0上的独占式加载指令之前在处理元件P1中的事务内发生对锁变量的加载事务,则将独占式指示的设置广播到其他处理元件,以允许其他处理元件中止在其地址读取集中具有与由地址追踪电路124追踪的地址相同的地址的事务事务。这阻止互斥丢失,因为此时事务将失败并且在锁变量已在处理元件P0上由自旋锁代码释放之后的后续尝试执行事务时,事务将会看到获自成功完成的其他处理元件P0上的代码临界区的x变量的值。
图9示出了对指定给定地址X的独占式加载指令进行响应的方法。在步骤200处,独占式加载指令由给定处理元件6执行。作为响应,在步骤202处,处理元件6触发针对地址X设置独占式监控器指示。如果已经到达可以同时为其设置独占式监控器指示的地址的最大数量,则步骤202还可触发清除与先前设置的地址相关联的独占式监控器指示。
在步骤204处,针对地址X的独占式监控器的设置触发其他处理元件6或线程清除已针对地址X设置的任何独占式监控器和/或触发全局独占式监控器32清除由其他处理元件或线程针对地址X设置的任何独占式监控器。此外,在步骤206处,在一个处理元件上的针对地址X的独占式监控器的设置触发中止在其地址工作集(读取集)中具有地址X的任何事务。在一些情形中,步骤204和206所示的动作可由互连10路由的分开的消息触发,或者替代地两个动作均可由相同的消息触发。
在步骤208处,响应于独占式加载指令,将来自地址X的数据加载到执行独占式加载指令的处理元件6的寄存器中。例如,此数据可以从该处理元件的缓存8、或从其他处理元件或互连10中的缓存、或从主存储器16获得。
图10示出了处理由给定处理元件6处理的独占式存储指令的方法。在步骤210处,指定给定地址X的独占式存储指令由给定处理元件6执行。作为响应,在步骤212处,处理元件6确定独占式监控器是否已经由给定处理元件针对地址X所设置。如果不是,则在步骤214处,返回独占式存储失败指示(例如,对寄存器设置的预定值),并且不执行存储操作(由独占式存储指令指定的寄存器中的数据值不写入缓存或存储器)。如果给定处理元件的独占式监控器仍针对地址X设置,则在步骤216处,将来自由独占式存储指令指定的寄存器的数据存储到在与地址X相关联的缓存或存储器中的位置,并且在步骤218处,处理元件返回独占式存储成功指示,例如,将与在步骤214处的失败情形中返回的值不同的值存储到寄存器。例如,此值可以由后续条件分支指令进行检查以确定是否继续进行到访问其中强制互斥的资源的代码区。
图11示出了对非独占式存储指令的存储指令的处理。在步骤220处,指定地址X的存储指令由给定处理元件执行,并且作为响应,在步骤222处,由其他线程或处理元件针对地址X设置的任何独占式监控器指示被清除。在步骤224处,将来自由存储指令指定的寄存器的数据存储到缓存或存储器的与地址X相关联的位置处。存储指令还可被检测为针对任何事务(这些事务在其地址的读取或写入集内指定了由地址追踪电路124追踪的地址X)的冲突访问。
图12图示出处理由事务处理元件6在事务内执行的加载指令的方法。在步骤240处,加载指令在事务内执行,该加载指令指定了给定的加载目标地址X。作为响应,在步骤242处,地址追踪电路将地址X添加到其地址工作集(读取集)。在步骤244处,在其地址写入集中具有地址X的任何其他事务被中止(不必中止在其读取集中具有地址X的事务)。
在步骤246处,加载指令的类型被识别。如果加载指令为预定的类型(独占式监控清除类型),则在步骤248处,执行加载指令的处理元件6向互连10发布触发清除由其他处理元件或线程针对地址X设置的任何独占式监控器指示的读取请求类型。另一方面,如果加载类型为第二类型(非独占式监控清除类型)的加载指令,则在步骤250处,处理元件6发布允许保留由其他线程或处理元件已针对地址X设置的独占式监控器的读取请求类型。无论是哪种加载指令类型,在步骤252处,当响应于读取请求返回数据(从处理元件6的本地缓存8,或者在从另一处理元件的缓存8或主存储器16取出数据之后从互连10)时,将数据写回由加载指令指定的寄存器106,并且如果数据尚未在处理元件6的本地缓存8中,则也可被分配到本地缓存8中。
因此,通过提供触发清除独占式监控器的特殊类型的加载指令(不同于第二类型的加载),这使得用于在事务内检查锁变量的加载能够事务以清除任何先前针对由非事务线程设置的锁地址设置的独占式监控器,使得即使存在加载推测,也能够维持互斥。
图13至图15示出了两个处理元件PE0、PE1(6)与互连10之间的通讯的示例。在这些示例中,假设处理元件PE1正在执行检查作为锁变量的地址X的事务线程,并且PE0正在执行针对锁变量地址X设置独占式监控器指示的非事务线程(与上文所示的示例类似)。
图13示出了对图12中示出的第二类型的加载指令的处理。响应于第二类型的加载指令,PE1向互连10发布指定加载指令的目标地址X的ReadShared请求。互连10发送出针对标识地址X处的数据的最新的数据值所需的任何监听消息,并且获取该数据(该数据可在另一处理元件6的本地缓存8中或者在系统缓存20或存储器16内)。互连10将数据返回到处理元件6,该处理元件将以“共享”状态缓存该数据,该“共享”状态指示将来对该数据的任何写入都需要利用互连进行检查(因为如果PE1对其本地缓存的复本进行写入,则在其他位置处保持的数据可能需要被无效)。利用第二类型的加载指令,不需要清除任何先前针对地址X设置的独占式监控器指示。因此,如果先前由非事务线程针对地址X设置了任何独占式监控器,则PE0可将其保留。
图14示出了对预定类型的加载指令的处理,响应于该加载指令,PE1将“ReadUnique”请求发送到互连10,该互连请求以这样的状态将数据返回到PE1:其中对数据的进一步写入可以在不用互连10检查的情况下执行。ReadUnique消息导致互连10将独占式监控器取消消息260发送到其他处理元件,在此示例中,该独占式监控器取消消息触发PE0取消其已针对地址X设置的独占式监控器。在获得该数据之后,该数据以“Unique”状态返回到PE1,在该状态中,对本地缓存的数据的写入被允许,无需再次利用互连10检查。ReadUnique消息还可触发互连将在系统的其他缓存8、20中保持的针对地址X的数据的缓存复本无效。
在其他示例中,除了使用以“Unique”状态返回数据的“ReadUnique”请求之外,可以由PE1响应于预定形式的加载指令将不同形式的一致性消息发布到互连10,该一致性消息不以Unique状态返回数据(例如,替代地数据可以以“Shared”状态被返回,在该“Shared”状态中,需要到互连10的另一消息来使对缓存数据的写入被接受,使得在需要时可以使其他缓存复本无效),但该一致性消息仍触发独占式监控器取消消息260确保将先前针对地址X设置的独占式监控器指示取消。实际上,预定类型的加载的期望用例为用于检查锁变量,其中不期望在事务内进行写入,因此以“Unique”状态返回数据不是必要的。无论如何,通过定义一种形式的一致性消息来触发响应于加载指令进行的对独占式监控器的取消,这可以帮助如上文讨论的在事务与非事务线程之间的交互工作。
图15示出了当PE0执行将地址X指定为其目标地址的独占式加载指令时的通讯。作为响应,独占式监控器设置消息270被发送到互连10,该独占式监控器设置消息被传递到支持事务存储器的任何其他处理元件6。响应于独占式监控器设置消息270,PE1将在读取集中具有地址X的事务中止。从PE0发送到互连10的独占式监控器设置消息270的形式可以与从互连10发送到诸如PE1之类的其他处理元件6的独占式监控器设置消息的形式相同或不同。
图16图示出可以使用的模拟器实现。虽然先前所描述的实施例是从用于操作支持相关技术的特定处理硬件的设备和方法的方面实施本技术,但也可能提供根据本文中所描述的实施例的指令执行环境,该指令执行环境是通过使用计算机程序来实施的。这样的计算机程序通常称为模拟器,只要它们提供硬件架构的基于软件的实现。模拟器计算机程序的变型包括仿真器、虚拟机器、模型、以及二进制转换器(包括动态二进制转换器)。一般而言,模拟器实现可以运行在支持模拟器程序310的主机处理器330(可选地运行主机操作系统320)上。在一些布置中,可能在硬件与所提供的指令执行环境之间存在着多层模拟,并且/或者存在着提供在相同主机处理器上的多个相异的指令执行环境。历史上,已经需要强力的处理器来提供以合理的速度执行的模拟器实现,但这样的方法在某些情况下可以是有理的,例如在出于兼容性或重复使用的理由而有需要运行相对于另一个处理器而言是原生的代码时。例如,模拟器实现可以提供具有未受主机处理器硬件所支持的额外功能性的指令执行环境,或提供一般与不同的硬件架构相关联的指令执行环境。模拟的概述在RobertBedichek在1990年冬季的USENIX会议第53-63页所发表的“Some Efficient ArchitectureSimulation Techniques(一些高效的架构模拟技术)”中给出。
在先前已经针对特定硬件构造或特征描述实施例的情况下,在模拟的实施例中,可以由合适的软件构造或特征提供等效的功能性。例如,可以在模拟的实施例中将特定的电路实施为计算机程序逻辑。类似地,可以在模拟的实施例中将存储器硬件(例如寄存器或缓存)实施为软件数据结构。在先前所描述的实施例中所引用的硬件元件中的一者或更多者存在于主机硬件(例如主机处理器330)上的布置中,一些模拟的实施例可以在合适时利用主机硬件。
模拟器程序310可以被存储在计算机可读存储介质(其可以是非暂态介质)上,并且提供对目标代码300(其可以包括应用程序、操作系统、以及超管理器)的程序界面(指令执行环境),该程序界面与正被模拟器程序310建模的硬件架构的应用程序界面相同。因此,可以使用模拟器程序310从指令执行环境内执行目标代码300的程序指令(包括上文描述的预定类型的加载指令以及独占式加载/存储指令),使得实际上不具有上文所讨论的设备2的硬件特征的主机计算机330可以模仿这些特征。模拟器程序310可包括处理程序逻辑312、事务存储器程序逻辑314以及独占式监控器程序逻辑316,它们分别提供对应于处理逻辑104、硬件事务存储器资源120以及独占式监控器30、32的功能性。在本申请中,用词“被配置为…”用来意指设备的元件具有能够实现所定义的操作的配置。在此背景脉络下,“配置”意指硬件或软件互连的布置或方式。例如,该设备可以具有提供所定义的操作的专用硬件,或者可以将处理器或其他的处理设备编程为执行功能。“被配置为”并不暗示需要以任何方式改变设备元件以提供所定义的操作。
虽然已经在本文中参考附图详细描述本发明的说明性实施例,但应理解,本发明不限于这些精确的实施例,并且可以在不脱离如由所附权利要求所限定的本发明的范围和精神的情况下由本领域技术人员在这些实施例中进行各种改变、添加、以及修改。
Claims (12)
1.一种设备,包括:
处理电路,用于对数据处理线程进行处理;以及
事务存储器支持电路,用于支持在由所述处理电路处理的线程内执行事务,所述事务包括所述线程中在事务开始指令与事务结束指令之间推测性地执行的指令,针对所述事务,所述处理电路被配置为:阻止所述推测性地执行的指令的结果的提交,直至到达所述事务结束指令,所述事务存储器支持电路包括冲突检测电路,所述冲突检测电路用于响应于检测到来自另一线程对针对所述事务所追踪的地址工作集中的一个地址的冲突访问而触发对所述事务的中止;其中:
响应于指定给定地址的独占式加载指令,所述处理电路被配置为:针对所述给定地址设置独占式监控器指示;
响应于指定所述给定地址的独占式存储指令,所述处理电路被配置为:当所述给定地址不再具有所设置的独占式监控器指示时返回独占式存储失败指示;
响应于在给定事务内执行的指定加载目标地址的预定类型的加载指令,所述处理电路被配置为:触发对先前针对所述加载目标地址设置的任何独占式监控器指示的清除;并且
响应于所述独占式加载指令,所述处理电路和所述事务存储器支持电路中的至少一者被配置为:触发对下述事务的中止:针对该事务,所述给定地址被指定为地址工作集中的一个地址。
2.如权利要求1所述的设备,其中,所述处理电路包括能够并行执行多个处理线程的多个处理元件。
3.如权利要求2所述的设备,其中,响应于在所述多个处理元件中的给定处理元件上执行所述独占式加载指令,所述给定处理元件被配置为:触发将消息发送到至少一个其他处理元件,所述消息指示针对所述给定地址设置了所述独占式监控器指示。
4.如权利要求2和3中任一项所述的设备,其中,响应于在所述多个处理元件中的给定处理元件上执行所述预定类型的加载指令,所述给定处理元件被配置为:触发将消息发送到所述多个处理元件中的至少一个其他处理元件,所述消息指示先前由所述至少一个其他处理元件针对所述加载目标地址设置的任何独占式监控器指示应当被清除。
5.如前述任一权利要求所述的设备,其中,响应于在所述给定事务内执行的所述预定类型的加载指令,所述处理电路被配置为:将所述加载目标地址添加到针对所述给定事务的地址工作集。
6.如前述任一权利要求所述的设备,其中,响应于在所述给定事务内执行的指定加载目标地址的第二类型的加载指令,所述处理电路被配置为:保留先前针对所述加载目标地址设置的任何独占式监控器指示。
7.如前述任一权利要求所述的设备,其中,所述处理电路被配置为:支持给定线程推测性地执行加载指令,所述加载指令用于在所述处理电路已解析出用于控制对目标地址的独占式访问的锁变量是否已经由所述给定线程成功主张之前从所述目标地址加载数据值。
8.如前述任一权利要求所述的设备,包括独占式监控器电路,用于响应于检测到以下各项中的一者而触发对针对所述给定地址设置的所述独占式监控器指示的清除:
所述处理电路执行指定所述给定地址或另一地址的独占式加载指令;
所述处理电路执行将所述给定地址指定为所述加载目标地址的所述预定类型的加载指令;以及
用于将数据存储到对应于所述给定地址的存储器位置的存储操作。
9.如前述任一权利要求所述的设备,其中,所述事务存储器支持电路还包括以下各项中的至少一者:
推测结果存储电路,用于存储针对至少一个事务推测性地执行的指令的结果;以及
复原状态存储电路,用于存储响应于所述事务开始指令捕获的、将在中止所述事务时复原的状态。
10.一种数据处理方法,包括:
响应于指定给定地址的独占式加载指令,针对所述给定地址设置独占式监控器指示;
响应于指定所述给定地址的独占式存储指令,当所述给定地址不再具有所设置的独占式监控器指示时返回独占式存储失败指示;
响应于在事务内执行的指定加载目标地址的预定类型的加载指令,清除先前针对所述加载目标地址设置的任何独占式监控器指示,所述事务包括给定线程中在事务开始指令与事务结束指令之间推测性地执行的指令,针对所述事务,阻止所述推测性地执行的指令的结果的提交,直至到达所述事务结束指令,其中所述事务将响应于检测到来自另一线程对针对所述事务所追踪的地址工作集中的一个地址的冲突访问被中止;以及
响应于所述独占式加载指令,触发对下述事务的中止:针对该事务,所述给定地址被指定为地址工作集中的一个地址。
11.一种计算机程序,用于控制主机数据处理设备以提供供数据处理线程执行的指令执行环境;所述计算机程序包括:
处理程序逻辑,用于对数据处理线程进行处理;以及
事务存储器程序逻辑,用于支持在由所述处理程序逻辑处理的线程内执行事务,所述事务包括所述线程中在事务开始指令与事务结束指令之间推测性地执行的指令,针对所述事务,所述处理程序逻辑被配置为:阻止所述推测性地执行的指令的结果的提交,直至到达所述事务结束指令,所述事务存储器程序逻辑包括冲突检测程序逻辑,所述冲突检测程序逻辑用于响应于检测到来自另一线程对针对所述事务所追踪的地址工作集中的一个地址的冲突访问而触发对所述事务的中止;其中:
响应于指定给定地址的独占式加载指令,所述处理程序逻辑被配置为:针对所述给定地址设置独占式监控器指示;
响应于指定所述给定地址的独占式存储指令,所述处理程序逻辑被配置为:当所述给定地址不再具有所设置的独占式监控器指示时返回独占式存储失败指示;
响应于在给定事务内执行的指定加载目标地址的预定类型的加载指令,所述处理程序逻辑被配置为:触发对先前针对所述加载目标地址设置的任何独占式监控器指示的清除;并且
响应于所述独占式加载指令,所述处理程序逻辑和所述事务存储器程序逻辑中的至少一者被配置为:触发对下述事务的中止:针对该事务,所述给定地址被指定为地址工作集中的一个地址。
12.一种互连,包括:
多个接口,用于与多个处理元件交换消息;以及
控制电路,被配置为管理所述多个处理元件之间的一致性;其中:
响应于来自给定处理元件的独占式监控器设置消息,所述控制电路被配置为触发所述接口将所述独占式监控器设置消息发送到至少一个其他处理元件,其中所述独占式监控器设置消息指示了对与给定地址相关联的独占式监控器指示的设置,所述独占式监控器指示用于追踪对所述给定地址的独占式访问;并且
响应于从第一处理元件接收到的预定类型的读取请求,所述控制电路被配置为:触发所述接口将独占式监控器取消消息发送到至少一个其他处理元件,以触发对与所述目标地址相关联的任何独占式监控器指示的取消,其中所述预定类型的读取请求请求返回与由所述第一类型的读取请求指定的目标地址相关联的读取数据值。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP18386018.8 | 2018-06-25 | ||
EP18386018.8A EP3588280B1 (en) | 2018-06-25 | 2018-06-25 | Handling load-exclusive instructions in apparatus having support for transactional memory |
PCT/GB2019/051276 WO2020002869A1 (en) | 2018-06-25 | 2019-05-09 | Handling load-exclusive instructions in apparatus having support for transactional memory |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112236750A true CN112236750A (zh) | 2021-01-15 |
Family
ID=62948064
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980036398.5A Pending CN112236750A (zh) | 2018-06-25 | 2019-05-09 | 处理支持事务存储器的设备中的独占式加载指令 |
Country Status (8)
Country | Link |
---|---|
US (1) | US11579873B2 (zh) |
EP (1) | EP3588280B1 (zh) |
JP (1) | JP2021529372A (zh) |
KR (1) | KR20210021521A (zh) |
CN (1) | CN112236750A (zh) |
IL (1) | IL279126B2 (zh) |
TW (1) | TWI801603B (zh) |
WO (1) | WO2020002869A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115408178A (zh) * | 2022-10-31 | 2022-11-29 | 北京登临科技有限公司 | 用于保护对片上资源的访问的方法、介质和电子设备 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11675899B2 (en) * | 2020-12-15 | 2023-06-13 | International Business Machines Corporation | Hardware mitigation for Spectre and meltdown-like attacks |
GB2603167B (en) * | 2021-01-29 | 2023-04-26 | Advanced Risc Mach Ltd | Monitor exclusive instruction |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090089520A1 (en) * | 2007-09-28 | 2009-04-02 | Bratin Saha | Hardware acceleration of strongly atomic software transactional memory |
US20150378911A1 (en) * | 2014-06-27 | 2015-12-31 | International Business Machines Corporation | Allowing non-cacheable loads within a transaction |
CN106716348A (zh) * | 2014-09-08 | 2017-05-24 | Arm 有限公司 | 用于执行多个线程的数据处理设备中的共享资源 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7792805B2 (en) * | 2006-05-30 | 2010-09-07 | Oracle America, Inc. | Fine-locked transactional memory |
GB2483903A (en) | 2010-09-24 | 2012-03-28 | Advanced Risc Mach Ltd | Instruction which specifies the type of the next instruction to be executed |
GB2491350B (en) * | 2011-05-27 | 2020-02-12 | Advanced Risc Mach Ltd | Store-exclusive instruction conflict resolution |
US9760494B2 (en) * | 2015-06-24 | 2017-09-12 | International Business Machines Corporation | Hybrid tracking of transaction read and write sets |
US9792147B2 (en) * | 2015-07-02 | 2017-10-17 | International Business Machines Corporation | Transactional storage accesses supporting differing priority levels |
-
2018
- 2018-06-25 EP EP18386018.8A patent/EP3588280B1/en active Active
-
2019
- 2019-05-09 JP JP2020570061A patent/JP2021529372A/ja active Pending
- 2019-05-09 KR KR1020217000307A patent/KR20210021521A/ko unknown
- 2019-05-09 IL IL279126A patent/IL279126B2/en unknown
- 2019-05-09 CN CN201980036398.5A patent/CN112236750A/zh active Pending
- 2019-05-09 US US17/255,001 patent/US11579873B2/en active Active
- 2019-05-09 WO PCT/GB2019/051276 patent/WO2020002869A1/en active Application Filing
- 2019-06-12 TW TW108120255A patent/TWI801603B/zh active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090089520A1 (en) * | 2007-09-28 | 2009-04-02 | Bratin Saha | Hardware acceleration of strongly atomic software transactional memory |
US20150378911A1 (en) * | 2014-06-27 | 2015-12-31 | International Business Machines Corporation | Allowing non-cacheable loads within a transaction |
US20150378927A1 (en) * | 2014-06-27 | 2015-12-31 | International Business Machines Corporation | Allowing non-cacheable loads within a transaction |
CN106716348A (zh) * | 2014-09-08 | 2017-05-24 | Arm 有限公司 | 用于执行多个线程的数据处理设备中的共享资源 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115408178A (zh) * | 2022-10-31 | 2022-11-29 | 北京登临科技有限公司 | 用于保护对片上资源的访问的方法、介质和电子设备 |
CN115408178B (zh) * | 2022-10-31 | 2023-02-21 | 北京登临科技有限公司 | 用于保护对片上资源的访问的方法、介质和电子设备 |
WO2024093102A1 (zh) * | 2022-10-31 | 2024-05-10 | 北京登临科技有限公司 | 用于保护对片上资源的访问的方法、介质和电子设备 |
Also Published As
Publication number | Publication date |
---|---|
IL279126A (en) | 2021-01-31 |
IL279126B2 (en) | 2024-03-01 |
WO2020002869A1 (en) | 2020-01-02 |
EP3588280B1 (en) | 2021-09-08 |
IL279126B1 (en) | 2023-11-01 |
TW202001566A (zh) | 2020-01-01 |
TWI801603B (zh) | 2023-05-11 |
KR20210021521A (ko) | 2021-02-26 |
US20210342152A1 (en) | 2021-11-04 |
US11579873B2 (en) | 2023-02-14 |
EP3588280A1 (en) | 2020-01-01 |
JP2021529372A (ja) | 2021-10-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8180967B2 (en) | Transactional memory virtualization | |
US7930695B2 (en) | Method and apparatus for synchronizing threads on a processor that supports transactional memory | |
JP5118652B2 (ja) | アウトオブオーダープロセッサにおけるトランザクショナルメモリ | |
US20090119459A1 (en) | Late lock acquire mechanism for hardware lock elision (hle) | |
JP2011529603A (ja) | バーチャル化可能な高度な同期機構 | |
WO2004075055A1 (en) | Start transactional execution (ste) instruction to support transactional during program execution | |
TWI786181B (zh) | 在例外遮罩更新指令之後允許未中止的交易處理 | |
JP7281491B2 (ja) | トランザクショナル比較及び破棄命令 | |
WO2004075053A1 (en) | Commit instruction to support transactional program execution | |
TWI801603B (zh) | 處理獨佔式載入指令的資料處理設備、方法及電腦程式 | |
WO2004075054A1 (en) | Fail instruction to support transactional during program execution | |
CN111164572B (zh) | 数据处理装置和方法 | |
CN112334874B (zh) | 数据处理装置和数据处理方法 | |
US20230315510A1 (en) | A technique for handling transactions in a system employing transactional memory | |
Harris et al. | Hardware-Supported Transactional Memory |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |