CN111164572B - 数据处理装置和方法 - Google Patents

数据处理装置和方法 Download PDF

Info

Publication number
CN111164572B
CN111164572B CN201880063522.2A CN201880063522A CN111164572B CN 111164572 B CN111164572 B CN 111164572B CN 201880063522 A CN201880063522 A CN 201880063522A CN 111164572 B CN111164572 B CN 111164572B
Authority
CN
China
Prior art keywords
transaction
instruction
lock
thread
predetermined type
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.)
Active
Application number
CN201880063522.2A
Other languages
English (en)
Other versions
CN111164572A (zh
Inventor
马修·詹姆斯·霍斯内尔
斯蒂芬·迪斯特尔霍斯特
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ARM Ltd
Original Assignee
ARM Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ARM Ltd filed Critical ARM Ltd
Publication of CN111164572A publication Critical patent/CN111164572A/zh
Application granted granted Critical
Publication of CN111164572B publication Critical patent/CN111164572B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • G06F9/467Transactional memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • G06F9/528Mutual 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)

Abstract

本申请涉及数据处理装置和方法。在具有事务性存储器支持的装置(2)中,预定类型的事务开始指令或在预定类型的事务开始指令之后的后续指令触发对锁定标识符的捕获,该锁定标识符标识用于控制对至少一个资源的独占访问的锁定变量。响应于在预定类型的事务开始指令之后的预定类型的事务结束指令,锁定变量被检查并且当锁定变量指示另一线程持有对目标资源的独占访问时,阻止或推迟对事务的推测性地执行的指令的结果的提交。此方法可以在基于事务性存储器的系统中执行事务时提高性能。

Description

数据处理装置和方法
技术领域
本技术涉及数据处理领域。更具体地,本技术涉及事务性存储器。
背景技术
数据处理系统可以执行多个数据处理线程。有时,线程可能需要访问共享的资源,并且数据处理操作的性质可以是这样的,即一旦线程开始与共享的资源交互,则可能需要一组操作原子地使用资源来完成,而同时没有另一线程访问该资源。
用于处理线程之间的这种冲突的一种技术可能是使用锁定来控制对至少一个目标资源的独占访问。例如,当一个线程开始访问特定地址区域中的数据时,该线程可以设置锁定变量以声明对该锁定的所有权,并且然后在拥有锁定的线程具有该锁定的所有权时,其他检查锁定变量的线程可以确定该锁定已被声明,并且因此可能无法进入与该地址区域进行交互的代码段。这种基于锁定的方法可以将被视为悲观的,因为每个线程默认地假定它不能进入访问共享的资源的代码段,因为可能与另一线程发生冲突,除非它具有保证不发生冲突的锁定的所有权。然而,锁定标识符通常可以控制对多个资源(例如,地址范围)的独占访问,并且因此不能保证如果一个线程正在访问由锁定变量保护的资源集内的某些资源,则另一线程肯定会访问同一资源。因此,在线程之间的冲突很少发生的情况下,基于锁定的方法可能导致性能损失,因为线程可能不必要地在进入使用共享的资源的关键代码段之前等待锁定被释放。
发明内容
一种用于处理访问共享的资源的线程之间的冲突的更乐观的方法可以使用事务性存储器支持。数据处理系统可以具有支持由处理电路在数据处理的线程内执行事务的电路。事务可以是在标记事务开始的事务开始指令与标记事务结束的事务结束指令之间执行的线程的指令。在事务开始指令和事务结束指令之间,处理电路可以推测性地执行中间指令,并且阻止这些推测性地执行的指令的结果的提交,直到到达事务结束指令为止。在执行事务开始指令之后(但在到达事务结束指令之前)发生中止事件可能会导致事务被中止以及推测性结果被丢弃。中止事务可能有多种原因,但一个原因可能是检测到的与另一线程的存储器访问冲突。因此,利用这种方法,每个线程可以假设不会与其他线程发生冲突,从而乐观地开始处理关键代码段,并且然后,如果在没有检测到任何冲突的情况下到达关键段的末端,则可以提交事务的结果。在很少发生冲突的情况下,使用事务性存储器支持可以通过允许更多线程同时处理其关键代码段来提高性能。
至少一些示例提供了一种装置,包括:指令解码器,用于对指令进行解码;以及处理电路,用于响应于由指令解码器解码的指令来执行数据处理,处理电路包括事务性存储器支持电路,该事务性存储器支持电路用于支持处理电路在数据处理的线程内执行事务,该事务包括在事务开始指令与事务结束指令之间推测性地执行的线程的指令,针对该事务,处理电路被配置为阻止推测性地执行的指令的结果的提交,直到到达事务结束指令为止;其中,指令解码器被配置为控制处理电路以响应于给定线程的预定类型的事务开始指令或所述给定线程中所述预定类型的事务开始指令之后的后续指令,而捕获标识锁定变量的锁定标识符,该锁定变量用于控制对至少一个目标资源的独占访问;以及指令解码器被配置为控制处理电路以响应于在所述预定类型的事务开始指令之后执行的给定线程的预定类型的事务结束指令,检查由所捕获的锁定标识符标识的锁定变量,并且在锁定变量指示另一线程持有对所述至少一个目标资源的独占访问时,阻止或推迟针对给定线程的推测性地执行的指令的结果的提交。
至少一些示例提供了一种数据处理方法,包括:
响应于解码的指令,使用处理电路执行数据处理,处理电路包括事务性存储器支持电路,该事务性存储器支持电路用于支持处理电路在数据处理的线程内执行事务,该事务包括在事务开始指令与事务结束指令之间推测性地执行的线程的指令,针对该事务,处理电路被配置为阻止推测性地执行的指令的结果的提交,直到到达事务结束指令为止;响应于对给定线程的预定类型的事务开始指令或所述给定线程中所述预定类型的事务开始指令之后的后续指令的解码,捕获标识锁定变量的锁定标识符,该锁定变量用于控制对至少一个目标资源的独占访问;以及响应于对给定线程的在所述预定类型的事务开始指令之后执行的预定类型的事务结束指令的解码,检查由所捕获的锁定标识符标识的锁定变量,并且在锁定变量指示另一线程持有对所述至少一个目标资源的独占访问时,阻止或推迟针对给定线程的推测性地执行的指令的结果的提交。
至少一些示例提供了一种用于控制主机数据处理装置来提供用于执行指令的指令执行环境的计算机程序,包括:处理程序逻辑,该处理程序逻辑支持在数据处理的线程内执行事务,该事务包括在事务开始指令与事务结束指令之间推测性地执行的线程的指令,针对该事务,处理程序逻辑被配置为阻止推测性地执行的指令的结果的提交,直到到达事务结束指令为止;其中,处理程序逻辑被配置为响应于给定线程的预定类型的事务开始指令或所述给定线程中所述预定类型的事务开始指令之后的后续指令,而捕获标识锁定变量的锁定标识符,该锁定变量用于控制对至少一个目标资源的独占访问;以及处理程序逻辑被配置为响应于给定线程的在所述预定类型的事务开始指令之后执行的预定类型的事务结束指令,而检查由所捕获的锁定标识符标识的锁定变量,并且在锁定变量指示另一线程持有对所述至少一个目标资源的独占访问时,阻止或推迟针对给定线程的推测性地执行的指令的结果的提交。
计算机程序可以被存储在存储介质上。存储介质可以是非暂态存储介质。
附图说明
从下面的示例描述中,本技术的其他方面、特征和优点将变得显而易见,这些描述将结合附图进行阅读,在附图中:
图1示意性地示出了具有事务性存储器支持电路的数据处理装置的示例;
图2示出了在具有事务性存储器支持的系统中对事务进行处理的示例;
图3示出了用于在基于锁定的模式中执行与图2的事务等效的操作的可选代码序列;
图4示出了提供有用于检查锁定变量以保护非事务性线程免受事务性线程的干扰的指令的事务的示例;
图5示出了其中当非事务性线程持有对锁定的资源的独占访问时,事务性线程的处理可能被延迟的问题;
图6示出了通过响应于预定类型的事务开始指令而捕获锁定标识符并且响应于事务结束指令而检查由该锁定标识符标识的锁定变量来避免这种延迟的方法;
图7示出了其中在预定类型的事务开始指令之后,响应于第一加载指令而捕获锁定变量的可选方法;
图8示出了事务性线程和非事务性线程的处理的示例,其中在事务性线程中在事务结束时未声明锁定;
图9示出了其中在事务性线程事务结束时由非事务性线程持有锁定的示例;
图10是示出事务性线程和非事务性线程之间的冲突可以如何使事务中止的示例;
图11示出了处理嵌套的事务的示例;
图12是说明事务开始指令的处理的流程图;
图13是说明事务结束指令的处理的流程图;以及
图14示出了可以使用的仿真器实施例。
具体实施方式
由于事务性存储器支持电路提供事务内的指令的推测性执行,使得在事务必须中止的情况下推测性结果可以被展开,因此不必使用锁定变量来避免执行事务的两个线程之间的冲突。然而,也可能存在以基于非事务的方法执行的一些线程。例如,这种非事务性线程可以是执行最初被写入或编译而不使用事务(不包括任何事务开始指令和事务结束指令)的代码段的线程。可选地,非事务性线程可以包括先前在基于事务的模式中处理指令的线程,但对于该线程,事务遇到频繁中止事件(例如,由于与其他线程发生冲突),并且因此处理现在被切换到基于非事务的模式。如果这种非事务性线程需要对至少一个目标资源的独占访问,则通常锁定变量仍可以被用于控制对至少一个目标资源的独占访问。反直觉地,事务性线程可能仍然需要检查锁定变量,因为为了确保任何非事务性线程的正确结果,应当阻止事务性线程在非事务性线程持有锁定的同时提交对共享的资源的写入。因此,通常即使在事务性模式中执行的线程的事务内,该事务仍然可以包括如下指令,该指令用于检查锁定变量以确定是否有任何其他线程持有对至少一个目标资源的独占访问,并且如果该锁定当前被另一线程持有则推迟后续操作。这可能导致在事务中处理指令的延迟。
然而,发明人认识到,当事务内的指令推测性地执行时,即使事务内要检查的锁定变量指示另一线程持有对至少一个目标资源的独占访问,允许事务性线程继续执行事务内推测性地执行的指令实际上也不是问题。这种锁定变量检查操作实际上不是用于保护事务性线程本身,因为如果检测到与另一线程发生冲突,则由事务性存储器支持电路提供的其他机制可以中止事务。相反,锁定变量检查通常被包括在事务中以保护非事务性线程免受来自事务性线程的干扰。由于直到推测性地执行的指令的结果被提交才能看到事务性线程的影响,这意味着继续事务的推测性执行直到事务结束指令是安全的,而不管锁定变量是否指示另一线程持有对锁定的资源的独占访问。相反,可以响应于事务结束指令来执行对锁定变量的检查。利用该方法,当另一线程持有锁定时,以及当事务到达其他线程可能已经释放了锁定的事务结束指令时,不存在推测性地执行的指令的处理开始的不必要的延迟。因此,该方法可以实现更快的事务处理。这还改进了其他事务的性能,因为当一个线程中的事务被延迟时,它在事务性存储器支持电路内持有不能被用于其他事务的资源。因此,使一个线程中的事务能够更快地完成还可以使其他线程能够更早地使用事务性存储器资源,从而提高整体性能。
因此,指令解码器可以控制处理电路,响应于给定线程的预定类型的事务开始指令或给定线程中该预定类型的事务开始指令之后的后续指令,捕获锁定标识符,该锁定标识符标识用于控制对至少一个目标资源的独占访问的锁定变量。指令解码器可以控制处理电路,响应于给定线程中在预定类型的事务开始指令之后执行的预定类型的事务结束指令,检查由捕获的锁定标识符标识的锁定变量,并且当锁定变量指示另一线程持有对至少一个目标资源的独占访问时,阻止或推迟针对给定线程的推测性地执行的指令的结果的提交。因此,不是要求事务内的显式指令来检查锁定变量并且如果锁定被设置则推迟后续指令的执行,而是由处理电路响应于事务结束指令的解码来执行检查。通过将锁定检查转移到事务结束时,事务内的操作可以被推测性地执行,而不管锁定是否已被持有,从而增加了在达到事务结束时已经释放了锁定的可能性,并且避免了在事务开始时的延迟。
锁定标识符可以是标识要检查的特定锁定变量的任何值。然而,在一些示例中,锁定标识符可以包括存储锁定变量的存储位置的地址。
在一些示例中,指令解码器可以控制处理电路响应于预定类型的事务开始指令本身来捕获锁定标识符。在一些情况下,预定类型的事务开始指令的编码可以实际上指定锁定标识符(直接作为立即值或者通过指定存储锁定标识符的寄存器)。因此,程序员或编译者写入代码可以通过将该变量的锁定标识符包括在事务开始指令的编码内来标识要检查的锁定变量。可选地,可以从预定寄存器中读取锁定标识符,该锁定标识符的读取独立于事务开始指令的特定编码。例如,可以使用某个默认寄存器来保存锁定标识符(例如,锁定变量的地址),并且这可以响应于预定类型的事务开始指令而被读取。因此,对于预定类型的事务开始指令的编码来说,指定锁定标识符不是必需的。
可选地,可以响应于给定线程中预定类型的事务开始指令之后的所选类型的第一指令,而不是响应于预定类型的事务开始指令本身,来执行对锁定标识符的捕获。在一些情况下,所选类型的指令可以是具有专用编码的特殊类型的锁定变量标识指令。然而,所选类型的指令也可以是除了标识锁定标识符之外还提供其他功能的指令类型。例如,所选类型的指令可以是用于将数据值从存储位置加载到寄存器中的加载指令。在一些情况下,锁定标识符可以被确定为加载指令的目标地址,其标识数据值将从其加载的存储位置。因此,利用该方法,当遇到预定类型的事务开始指令之后的第一加载指令时,指令解码器可以控制处理电路来捕获第一加载指令的目标地址作为锁定标识符。这种方法可能是有用的,因为现有代码通常可以将锁定变量检查为事务开始指令之后的第一指令,并且这通常是通过使用加载指令将锁定变量加载到寄存器中,并且然后使用比较指令来检查被加载到寄存器中的锁定变量的值来完成的。因此,通过响应于事务开始指令之后的第一加载来捕获锁定标识符,这可以需要对现有代码的较少修改。
当响应于预定类型的事务结束指令的解码来检查锁定变量,并且锁定变量指示另一线程持有对至少一个目标资源的独占访问时,处理电路可以以各种方式进行响应以阻止或推迟对事务的推测性地执行的指令的结果的提交。在一个示例中,如果在事务结束时,锁定被另一线程持有,则处理电路可以简单地中止事务。这降低了提供试探法以便稍后重试对锁定变量的检查的复杂性。
可选地,响应于预定类型的事务结束指令的解码,可以推迟对事务的推测性地执行的指令的结果的提交,直到锁定的变量指示另一线程放弃对至少一个目标资源的独占访问。该方法可以提供更好的前向进度,因为推测性结果可能仍然能够被提交,可能在等待锁定被另一线程放弃时具有延迟。然而,如果事务结束等待很长时间,则简单地中止事务可能更好。因此,如果当另一线程持有锁定时最初推迟结果的提交,则当对锁定变量进行检查的尝试次数或与等待由另一线程放弃对至少一个目标资源的独占访问相关联的等待时间超过预定阈值时,处理电路可以中止事务。
在一些示例中,响应于对预定类型的事务结束指令的解码而对锁定变量的周期性检查可以由与用于执行指令的正常处理路径分离的锁定检查引擎来控制。因此,对锁定变量的检查可以在由处理逻辑执行的其他处理的后台中发生。锁定检查引擎可以响应于对预定类型的事务结束指令的解码而被调用,并且然后可以处理对锁定变量的周期性检查,并且确定何时经过了检查锁定变量的足够尝试或足够时间,以优选地中止事务。
有时,要执行的线程可能涉及嵌套的事务,其中在执行针对第一事务的事务开始指令之后,在遇到第一事务的事务结束指令之前,进一步的事务开始指令被执行以表示嵌套在第一事务内的第二事务的开始。例如,这可以被用于允许代码内处理可以分支到的多个功能条目或分支目标位置的程序,其中准备代码的人或编译者希望确保在事务内处理某些代码块,而不管处理是否被分支到恰好第一事务开始指令之前或之后的点。尽管一些硬件实现方式可以将每个嵌套的事务视为单独的事务,为每个嵌套的事务维护单独的恢复状态,并且使得能够部分展开到内部嵌套的事务的事务开始指令,但是这可能需要相对复杂的硬件资源,这可能不合理。因此,其他实现方式可以有效地忽略内部事务,因此,即使在内部嵌套的事务中发生中止,该状态被倒回到在与嵌套的事务集合的外部事务相关联的事务开始指令时未决的状态。这意味着对于整个嵌套的事务集合,将只需要维护一个恢复状态集合。
因此,有可能在预定类型的事务开始指令之后在给定线程中执行预定类型的进一步的事务开始指令,而在预定类型的事务结束指令之前执行进一步的事务开始指令。在这种情况下,响应于进一步的事务开始指令,或者响应于进一步的事务开始指令之后的后续指令,指令解码器可以控制处理电路来捕获进一步的锁定标识符,这些锁定标识符标识用于控制对至少一个进一步的目标资源的访问的其他锁定变量。尽管在一些情况下,由进一步的事务开始指令或后续指令标识的锁定变量可能与已捕获的锁定变量相同(在这种情况下,可能不需要单独捕获进一步的锁定标识符),但是在其他情况下,进一步的事务开始指令或后续指令可以指定不同的锁定变量,并且因此可以将进一步的锁定标识符添加到捕获的锁定编码的线程集合。因此,响应于在为给定线程捕获多于一个锁定标识符时对预定类型的事务结束指令的解码,当捕获的锁定变量中的任何锁定变量指示另一线程持有对相应至少一个目标资源的集合的独占访问时,处理电路可以阻止或推迟针对给定线程的推测性地执行的指令的结果的提交。因此,即使在其中硬件不单独地跟踪每个嵌套的事务的实施例中存在事务的嵌套,也可以响应于预定类型的事务结束指令(例如,与嵌套的事务集合的外部事务相对应的事务结束指令)来执行对与嵌套的事务集合的每个事务开始指令相关联的锁定标识符的检查。
在一些示例中,预定类型的事务结束指令可以简单地是任何事务结束指令。然而,如上所述,在嵌套的事务的情况下,嵌套集合的内部事务的事务结束指令可以被有效地忽略,并且可以响应于与嵌套集合的外部事务相关联的事务结束指令来执行与事务结束相关联的操作。因此,处理电路可以维护表示事务嵌套深度的事务嵌套深度值,该事务嵌套深度指示相应事务保持未被中止且未被提交的给定线程的执行的事务开始指令的数量。例如,当在任何事务外部执行指令(没有任何事务保持未决)时,事务嵌套深度可以为0,当在外部事务中执行指令时,深度可以为1,并且当在嵌套集合的内部事务中执行指令时,深度可以大于1。预定类型的事务结束指令可以包括如下事务结束指令,当事务嵌套深度值指示事务嵌套深度等于1时该事务结束指令被执行。这确保了对锁定变量的检查由与集合的外部事务相关联的事务结束指令触发。应当理解,由处理电路(例如,在寄存器内)维持的事务嵌套深度值不必明确地表示事务嵌套深度。尽管在一些情况下,存储的值可以简单地对应于与事务嵌套深度相关联的数值,但是在其他示例中,存储的值可以使用可以从中确定嵌套深度的某个值来对嵌套深度进行编码。
在一些示例中,所有事务开始指令可以被视为预定类型的事务开始指令。然而,在其他示例中,预定的事务开始指令可以是特殊类型的事务开始指令,其触发对锁定标识符(其本身或后续指令)的捕获。还可以提供第二类型的事务开始指令,响应于该第二类型的事务开始指令,解码器对处理电路进行控制以在不捕获锁定标识符的同时执行对后续指令的推测性执行。通过提供两种形式的事务开始指令,这使得不依赖于锁定变量的事务能够与依赖于锁定变量的事务区分开,从而使得这些与锁定无关的事务能够被更快地处理,因为当另一线程持有锁定时,在到达事务结束时不必推迟提交。两种类型的事务开始指令可以由它们的操作码、或由指令编码中指定的开始类型参数、或由存储在配置寄存器中的模式值来区分,该配置寄存器控制相同编码的事务开始指令的行为是预定类型还是第二类型。
该装置可以具有锁定捕获存储区域,用于存储响应于给定线程的一个或多个事务开始指令而捕获的一个或多个锁定标识符。例如,锁定捕获存储区域可以包括事务性存储器支持电路中的内部寄存器的集合。这些内部寄存器不需要由软件直接访问,而可以是仅由硬件使用的隐藏寄存器。响应于对预定类型的事务结束指令的解码,当在锁定捕获存储区域中存储了针对给定线程的零锁定标识符时,处理电路可以独立于锁定变量是否指示另一线程持有对至少一个目标资源的独占访问而确定是否提交事务的推测性地执行的指令的结果。因此,锁定捕获存储区域指示在事务结束时是否需要检查任何锁定,如果需要,则检查哪些锁定变量。如果多个线程正在同时执行事务,则锁定捕获存储区域可以为每个线程分别记录相应一个或多个锁定标识符的集合。
事务性存储器支持电路可以采取各种形式,并且可以包括有助于事务的处理的许多资源。例如,事务性存储器支持电路可以包括推测性结果存储电路,用于存储针对至少一个线程的至少一个事务的推测性地执行的指令的结果。在一些情况下,多个推测性地执行的结果的集合可以被存储,用于不同线程中运行的事务。将所有的推测性结果存储在推测性结果存储电路中不是必需的。例如,事务性存储器支持电路还可以具有恢复状态存储电路,用于存储响应于事务开始指令而捕获的状态,该状态在中止事务时被恢复。因此,在中止事务时恢复的寄存器状态或其他架构状态值不需要被存储在推测性结果存储电路中,因为处理器的架构寄存器中的当前值可以有效地指示那些推测性结果(其将在中止事务时利用恢复状态来重写)。推测性结果存储电路可以例如存储用于将值存储到存储器的存储指令的结果。通过将针对存储指令的推测性结果保存在推测性结果存储电路中直到事务被提交,这避免了利用数据值来污染存储器,该数据值随后可能被证明是不正确的或可能导致其他线程的行为不正确。
在另一示例中,事务性存储器支持电路可以包括冲突检测电路,以检测在第一线程的事务内进行的对给定地址的数据访问与由另一线程(在事务内或在非事务性线程内)进行的对同一地址的数据访问之间的冲突。例如,可以提供地址跟踪电路以跟踪由事务内的指令访问的地址。当另一线程对被记录在地址跟踪电路中的地址之一进行访问时,冲突检测电路可以检测冲突。当冲突被检测时,冲突检测电路可以触发对第一线程的事务的中止,针对该第一线程地址被跟踪。
事务性存储器支持电路还可以具有用于检测可以引起事务中止的其他事件的电路。例如,在接收到中断时,可以中止。此外,如果事务性存储器支持电路用完资源(例如,如果要存储在推测性结果存储电路中的推测性结果的数量或由地址跟踪电路跟踪的地址的数量超过提供的存储装置内可用的容量),则事务可以被中止,使得不再可能保证事务将正确地进行而没有冲突。此外,某些类型的指令可能不适合在事务内处理,并且在遇到事务内不允许的指令类型时,事务可能被中止。在中止事务时,可以由软件来确定是尝试再次执行事务还是使用基于非事务的机制(例如,使用锁定)来执行可选代码路径。
相应计算机程序可以控制主机数据处理装置来提供用于指令的执行的指令执行环境,其中处理程序逻辑响应于预定类型的事务开始指令和预定类型的事务结束指令来处理如上所述的锁定标识符的捕获和锁定变量的检查。这种计算机程序可以允许本身不具有支持预定类型的事务开始/结束指令的事务性存储器支持电路或指令解码器的通用主机数据处理装置,受益于事务性存储器功能性和其中对事务需要检查锁定变量的情况的改进处理,即使可能没有提供这些特征的实际硬件。相反,计算机程序提供模拟这种功能的程序逻辑,例如指令集合或数据结构,使得通用主机数据处理装置能够执行旨在用于在提供这种硬件特征的装置上执行的代码。
图1示出了具有硬件事务性存储器(HTM)支持的数据处理装置2的示例。该装置具有用于执行指令以执行数据处理操作的处理逻辑4。例如,处理逻辑4可以包括用于执行各种类型的处理操作的执行单元,例如用于执行算术或逻辑操作(例如,加、乘、与、或等)的算术/逻辑单元(ALU);浮点单元,用于对浮点操作数执行操作;或者向量处理单元,用于对包括多个数据元素的向量操作数执行向量处理。提供架构寄存器6的集合,用于存储由处理逻辑4执行的指令的操作数,以及用于存储执行的指令的结果。指令解码器8对从指令缓存10提取的指令进行解码,以生成控制信号用于控制数据处理装置2的处理逻辑4或其他元件来执行相关操作。还提供加载/存储单元12以执行加载操作(响应于由指令解码器8解码的加载指令)以将数据值从数据缓存14或主存储器16加载到架构寄存器6中,以及执行存储操作(响应于由指令解码器8解码的存储指令)以将数据值从架构寄存器6存储到数据缓存14或存储器16中。
装置2还具有事务性存储器支持电路20,其提供用于支持硬件事务性存储器(HTM)的各种资源。事务性存储器支持电路20中的HTM资源可包括例如推测性结果存储装置22,用于存储事务的推测性结果;地址跟踪电路24,用于跟踪由事务访问的地址;冲突检测电路26,用于检测由事务进行的数据访问与由其他线程进行的数据访问之间的冲突,以便在检测到冲突时可以中止事务;以及恢复状态存储电路28,用于存储在事务开始时来自架构寄存器6的架构状态数据的快照,以便在中止事务时可以恢复该状态以重写事务的推测性结果。此外,资源可以包括用于强锁定标识符的锁定存储结构30和用于存储跟踪事务的嵌套级别的嵌套深度值的嵌套深度寄存器32,这将在稍后更详细地描述。
图2示出了使用事务性存储器支持电路20和处理逻辑4在给定线程内执行事务的示例。事务是程序代码段,该程序代码段由事务开始指令(tstart)和事务结束指令(tcommit)界定。如图2所示,响应于事务开始指令,架构寄存器6中的当前架构状态被捕获并且被存储在恢复状态存储电路28中。处理逻辑4开始执行在tstart指令之后的后续指令的推测性执行,并且在执行这些指令时,地址跟踪电路24跟踪由这些指令访问的地址,并且冲突检测电路26检测跟踪的地址与响应于其他线程而使用加载/存储单元12进行的访问的地址之间的冲突。事务中的指令的至少一些推测性结果被存储在推测性结果存储电路22内。例如,当事务保持未决时,响应于存储指令STR而存储在缓存或存储器中的值可以被保持在推测性结果存储装置22中。如果在未同时发生中止事件的情况下到达事务结束指令(tcommit),则响应于事务结束指令,推测性结果被提交。在提交事务时,存储在推测性结果存储装置22中的、针对该线程的任何结果可以被写入数据缓存14或存储器16,并且恢复状态28可以被丢弃或允许被重写,因为不再需要将架构状态倒回到遇到事务开始指令之前的点。
另一方面,如果发生中止事件,例如当另一线程访问由事务已经访问的地址时冲突检测电路26检测到冲突时,则事务的中止被触发,并且来自恢复状态存储装置28的恢复状态被恢复到架构寄存器6。中止事件的其他原因例如可以包括执行不允许在事务内执行的指令,推测性结果存储装置22或地址跟踪电路24中没有足够的资源来处理给定事务所需的推测性结果或地址,或者在事务期间接收到的中断。
图2示出了可以如何使用事务开始指令和事务结束指令在事务性模式下执行要执行的处理操作的某个集合。如图3所示,也可以使用基于锁定的机制在非事务性模式下执行同一处理操作的集合。在这种情况下,在开始代码段之前,至少一个锁定检查指令40检查由锁定地址#addLock标识的锁定变量,并且检查该锁定变量是否指示另一线程已经持有锁定。如果另一线程持有锁定,则处理不会进行到锁定检查指令40之外,直到锁定被释放为止。一旦确定锁定可用,则通过将给定值(例如,二进制1)写入锁定地址#addLock来声明锁定。例如,可以使用原子比较和交换指令来实现锁定检查指令40,该原子比较和交换指令比较存储在特定地址处的当前值以确定是否持有锁定,并且如果未声明锁定则更新锁定变量以声明锁定。可选地,可以利用一系列的多个指令来实现锁定检查以读取锁定,测试锁定的值,并且如果已经声明了锁定,则导致处理将被推迟,或者如果当前未声明锁定,则通过更新锁定变量来声明锁定。在完成了由锁定保护的代码段之后,一旦不再需要对由锁定保护的资源的独占访问,则另一指令42可以释放锁定。例如,由锁定保护的资源可以是由在代码的中间段期间访问的各种地址标识的数据位置。
因此,由处理逻辑4执行的处理的一些线程可以使用如图2所示的事务模式,而其他线程可以使用将不使用事务的基于锁定的模式。此外,如果针对那些事务频繁发生中止,则最初尝试使用事务性模式的线程可能会切换到使用(使用锁定的)非事务性模式。例如,可能存在不断遇到冲突的线程集合,并且因此继续使用针对这些线程中的所有线程的事务效率不高。因此,即使一个线程正在使用类似于图2中所示的事务性模式,也可能仍然存在需要使用基于锁定的机制的其他线程。此外,在事务性模式下运行的线程可能仍然需要访问共享的资源,这些资源也由非事务性线程访问。在一些情况下,非事务性线程实际上可能正在执行与事务性线程相同的代码,但是该代码可能在代码内具有事务性路径和非事务性路径两者,其可以根据在以前的情况下是否发现了事务是有效的来进行选择(例如,如果事务性路径不断中止,则软件可能切换到非事务性路径)。
由于可能存在需要共享对由锁定保护的资源的访问的事务性线程和非事务性线程两者,因此如图4所示,有时事务性线程可能仍然需要具有一些读取锁定地址的指令,如果清除了锁定则声明锁定,并且如果当前声明或设置了锁定,则中止事务或等待一段时间。尽管将不需要这种锁定检查指令来确保对事务性线程本身的正确处理,但是由于冲突检查电路26将能够检测另一线程操作是否与事务发生冲突,并且如果发生冲突,则中止事务以防止错误结果,当另一线程持有锁定时将需要进行锁定检查以阻止事务的结果的提交,这可以包括非事务性线程的操作。
因此,如图5所示,对于事务性线程和非事务性线程,当它们共存时通常遇到其中非事务线程T1在事务性线程T0中的事务开始之前声明了锁定的情况。在进入事务时,事务性线程T0可以执行如图4所示的一些指令以检查是否持有由锁定地址#addLock标识的锁定,并且可以延迟对事务的功能指令的后续处理,直到锁定可以由事务性线程T0声明为止。由于这可能花费一些时间,因为非事务性线程T1可能在多个周期内对该锁定不进行解锁,所以这导致如图5所示的延迟。
图6示出了在事务中处理锁定检查的一种可选方式,其可以帮助避免这种延迟。提供预定类型的事务开始指令tstartL,其例如使用立即值或寄存器引用指定锁定地址。响应于预定类型的事务开始指令,在图1所示的锁定存储结构30内捕获锁定地址。例如,锁定存储结构30可以包括可以向其写入锁定变量的地址的一个或多个寄存器。捕获了锁定地址并且执行了与常规事务开始指令相关联的任何其他操作之后,就可以执行事务的功能指令,并且如果锁定当前被持有,则无需包括用于检查锁定变量和推迟事务的处理的任何指令。因此,这消除了图5中所示的延迟。相反,对锁定变量的检查被推迟,直到到达事务结束指令tcommit。响应于事务结束指令,处理逻辑4由指令解码器8控制以检查由在锁定存储结构30内捕获的任何锁定地址指示的锁定变量。在一些情况下,该检查可以被委托给如图1所示的锁定检查引擎34,其可以具有关联的计时器36,当由事务结束指令tcommit激活时,该计时器36控制锁定检查引擎34以周期性地发出加载操作以读取由存储在锁定存储结构30中的锁定地址标识的锁定变量,并且检查锁定变量当前是否指示该锁定由另一线程持有,并且继续检查直到该锁定不再由另一线程持有为止。因此,如果当前被锁定,则由事务的推测性地执行的指令生成的结果的提交被推迟或阻止。另一方面,当发现锁定未声明时,则事务的结果可以被提交。锁定检查电路34不是必须的,而是可以由处理逻辑4或加载存储单元12来处理这种锁定检查。
图7示出了实现预定类型的事务开始指令tstartL的可选方式。在这种情况下,tstartL指令本身未指定锁定标识符地址,而是从预定类型的事务开始指令之后的第一加载指令50获取锁定标识符地址,并且然后加载地址被以与图6相同的方式捕获。图7中的事务结束指令的操作与图6中的相同。
图6和图7中所示的预定类型的事务开始指令tstartL可以以各种方式与图4所示的常规类型的事务开始指令tstart区分开。在一些情况下,不同类型的事务开始指令可能具有不同的指令操作码。可选地,它们可以共享相同的操作码,但是可以在指令编码的另一字段内指定的参数,该参数将不触发捕获或锁定地址的普通事务开始指令与图6和图7中所示的确实触发锁定捕获的特定类型的事务开始区分开。可选地,架构寄存器6中的状态寄存器内的模式位可以控制事务开始指令是否应当触发对锁定地址的捕获。在诸如图7的实现方式中,事务开始指令本身不触发对锁定地址的捕获,可以响应于预定类型的事务开始指令tstartL而将寄存器6之一内的标志设置为第一值,使得当遇到加载指令50时,如果状态标志具有第一值则捕获锁定地址,并且如果状态标志具有第二值则不捕获锁定地址。当捕获锁定地址时,可以将标志设置为第二值,使得后续加载不触发对进一步的地址的捕获。利用该方法,要求编译者或程序员确保在预定的事务开始指令之后执行的第一加载指令是提供锁定变量的地址的指令(实际上,锁定检查将可能是在事务中以任何方式执行的第一操作,因为事务开始指令通常将被包括在需要锁定的关键代码段的开始处)。
如图8所示,利用图6和图7中所示的方法,即使存在持有锁定的非事务性线程时,也允许图5的延迟被消除。在事务性线程T0的预定类型的事务开始指令之后捕获锁定地址,以提供当到达事务结束时将需要检查锁定变量的指示。此时,锁定是否实际上由另一线程持有无关紧要,并且该事务的功能指令可以继续被推测性地执行。在事务结束时,tcommit指令触发对锁定变量的检查,并且在图8所示的情况下,发现由于非事务性线程T1已经对锁定变量进行解锁,因此锁定当前未被声明。因此,事务性线程T0中的事务的结果可以被提交。相反,利用前面讨论的方法,如果锁定是在事务性线程T0中事务开始时由非事务性线程持有的,则将引起延迟。通过在事务结束时而不是开始时检查锁定变量,非事务性线程更有可能在事务结束之前对锁定变量进行解锁。
如图9所示,即使在到达事务结束指令tcommit时,锁定仍然由其他线程T1持有,与等待锁定被放弃相关联的延迟52可能小于如果使用图5所示的方法且在事务开始时检查锁定将产生的延迟,因为等待锁定被释放所花费的一些时间被用于执行事务的功能指令。因此,相对于图5所示的情况,这仍然可以提高性能。
如图10所示,如果在由相应事务性线程T0和非事务性线程T1访问的地址之间存在冲突,则冲突检测电路26将检测到该冲突,并且该事务可以被中止并且稍后被重试或可选地在非事务性模式下执行。因此,即使锁定由非事务性线程T1持有,允许事务的指令继续进行是没有问题的。不需要对锁定进行检查,以便确保对事务性线程T0的正确处理。此外,即使非事务性线程T1在事务已经开始之后尝试声明锁定(并且线程T1可以成功地声明锁定,因为线程T0中的事务不会尝试声明锁定,即使锁定地址是在锁定存储结构30中捕获的),地址冲突将仍然触发中止事务,并且如果没有中止发生,但是当T0到达事务结束时线程T1仍然还有锁定,则事务提交被推迟/阻止。
当锁定地址被分配给锁定存储装置30时,地址跟踪电路24无需跟踪该锁定地址,因此其他线程对该地址的访问不会触发检测到的冲突。这使得能够在不暂停事务的情况下由其他线程写入锁定变量,因为锁定将在事务结束时被检查而不需要中止。
如图11所示,可以嵌套事务,以便在遇到与先前事务开始指令相对应的事务结束指令之前,并且在较早事务仍然未决且尚未中止时,接收到进一步的事务开始指令。嵌套深度寄存器32可以跟踪事务的当前嵌套深度,以区分当没有事务开始时、当仅单个事务开始时、或者当在先前事务中开始进一步的嵌套的事务时的情况。如图11所示,当尚未开始任何事务时,嵌套深度可以是0。响应于第一事务开始指令,嵌套深度可以递增到1。如果开始进一步的嵌套事务,则嵌套深度可以再次递增到2,依此类推。在提交事务时,嵌套深度可能减少。因此,随着每个相应嵌套事务提交,嵌套深度将逐渐地展开,直到所有事务都提交,并且嵌套深度再次回到0。
实际上,可能不值得为每个嵌套的事务维护单独的恢复状态集合。相反,硬件可以有效地忽略任何嵌套的事务,并且简单地将它们视为嵌套集合的较大外部事务的一部分。然而,代码可能具有定义的嵌套事务,以确保即使在外部事务开始指令之后代码分支到程序代码的一部分,分支点之后的代码段仍然将被视为事务。因此,在一些情况下,HTM资源20可以有效地忽略针对集合的内部事务的事务开始指令和事务结束指令(即,当嵌套深度已经为1或更大时对其执行事务开始指令的事务)。因此,外部事务的事务结束指令tcommit(当嵌套深度为1时执行)触发对状态的提交和对恢复状态的丢弃,而内部事务的事务结束指令tcommit将被忽略(当嵌套深度为2或更大时)。注意,嵌套深度不需要在嵌套深度寄存器32内被明确地表示,并且可以存在表示嵌套深度的其他方式,而不是指示实际嵌套深度数的二进制值(例如,状态码可以表示嵌套深度)。
因此,当如上所述提供锁定捕获功能时,嵌套的集合的每个事务开始指令可以导致对单独的锁定变量的捕获。在一些情况下,与第二事务开始指令相关联的锁定标识符可以与已经捕获的锁定标识符相同,并且在这种情况下,锁定存储结构30不需要为同一锁定标识符分配单独的条目。然而,如果锁定标识符不同于已经捕获的锁定标识符,则第二锁定标识符被分配给锁定存储结构30。对于与作为嵌套的集合中的内部事务的事务相关联的事务结束指令tcommit,不执行任何动作。然而,对于外部事务结束指令(当嵌套深度为1时),则被存储在锁定存储结构中的一个、两个或多个锁定标识符被检查,以查看是否有相应锁定变量指示锁定由另一线程持有,并且如果在锁定存储结构30中指示的、针对当前线程的所有锁定当前都是空闲的,则事务(包括任何内部事务)的结果被提交。同样,该机制可以通过将锁定检查推迟到嵌套的事务集合的结束来实现性能改进,从而即使在事务开始时锁定被持有也能够在事务中向前进行。
图12是示出对事务开始指令的处理的流程图。在步骤100,指令解码器8对事务开始指令进行解码。在步骤102,解码器确定事务开始指令是否是预定类型的事务开始指令。如果是,则在步骤104,指令解码器8生成控制信号,该控制信号触发处理逻辑4来捕获锁定存储结构30中的锁定标识符,或者设置状态以响应于下一所选类型的指令(例如,下一加载指令)来触发对锁定标识符的捕获。如果事务开始指令不是预定类型,则省略步骤104。
无论事务开始指令的类型如何,在步骤106,由指令解码器8生成的控制信号还控制处理逻辑4,以通过将存储在架构寄存器6内的当前值写入到恢复状态存储装置中来捕获事务的恢复状态集合。在一些情况下,恢复状态存储装置28可以包括与多个线程相对应的两个或更多个不同的恢复状态集合,并且因此捕获的恢复状态可以被分配给尚未被分配来处理不同线程的恢复状态的区域。在步骤108,响应于事务开始指令的后续指令,指令解码器8生成控制信号以控制处理逻辑4开始对那些指令的推测性执行。地址跟踪电路24开始跟踪由后续推测性地执行的指令访问的地址,并且冲突检测电路26开始检查在地址跟踪电路24中跟踪的地址与由其他线程访问的地址之间的冲突。
图13是示出对事务结束指令的处理的流程图。在步骤120,事务结束指令由指令解码器8解码,以生成控制信号用于控制处理逻辑4来执行图13的后续步骤。在步骤122,嵌套深度寄存器32被检查以确定嵌套深度是否等于1。如果否,则当前事务是嵌套的集合的内部事务,并且在步骤123,事务结束指令被忽略。如果嵌套深度是1,则事务结束指令被执行,并且在步骤124,处理逻辑4确定在锁定存储结构30中是否存储有针对当前线程的捕获的锁定标识符。如果否,则不需要检查锁定(例如,原始事务开始指令可能不是预定类型),并且因此在步骤126,在事务中推测性地生成的结果被提交。因此,存储在推测性结果存储电路22中的任何结果可以被写入到数据缓存14或存储器16中。此外,存储在架构寄存器6中的任何推测性值都变为非推测性的(不需要进行任何改变来确保这一点,相反,结果变为非推测性的,因为它们不再被恢复状态重写)。恢复状态存储装置28中与当前事务相关联的任何恢复状态可以被丢弃,或者可用于由与后续事务相关联的恢复状态进行重写。
如果在步骤124在锁定存储结构30内存在任何捕获的锁定标识符,则在步骤127,处理逻辑4或锁定检查引擎34检查是否有任何捕获的锁定当前被锁定。如果否,则再次在步骤126,事务结果可以被提交。如果在步骤127确定针对当前线程的任何捕获的锁定标识符引用指示相应资源被另一线程锁定的锁定变量,则在步骤128,处理逻辑4或锁定检查引擎34等待一段时间以推迟对事务结果的提交。在等待一段时间之后,在步骤130,确定重试的次数或等待所花费的时间是否小于阈值,并且如果是,则在步骤127,再次尝试检查是否有任何捕获的锁定当前被锁定,并且如果所有锁定被解锁,则事务的结果现在可以被提交126。否则,系统将继续等待。如果在步骤130重试的次数或等待时间达到阈值,则在步骤132事务可以被中止。可选地,代替实施等待机制,如果在步骤127任何捕获的锁定被确定为锁定,则通过直接进行到步骤132来简单地中止事务可能更简单。如果事务被中止,则软件可以确定是否稍后重新计划事务,或尝试使用基于锁定的非事务性模式来执行事务。
图14示出了可以使用的仿真器实现方式。尽管较早描述的实施例在用于操作支持有关技术的特定处理硬件的装置和方法方面实现了本发明,但是也可能提供根据本文描述的实施例的指令执行环境,该指令执行环境通过使用计算机程序来实现。只要这种计算机程序提供了硬件架构的基于软件的实现方式,通常就被称为仿真器。仿真器计算机程序的种类包括模拟器、虚拟机、模型和二进制转换器(包括动态二进制转换器)。通常,仿真器实现方式可以在主机处理器230上运行,可选地运行主机操作系统220、支持仿真器程序210。在一些布置中,在硬件与提供的指令执行环境、和/或在同一主机处理器上提供的多个不同的指令执行环境之间可能存在多层仿真。从历史上看,需要功能强大的处理器来提供以合理的速度执行的仿真器实现方式,但是在某些情况下(例如,当出于兼容性或重用原因而希望运行另一处理器的本地代码时),这种方法可能是合理的。例如,仿真器实现方式可以向指令执行环境提供主机处理器硬件不支持的附加功能,或者提供通常与不同硬件架构相关联的指令执行环境。在“一些有效的架构仿真技术(Some Efficient ArchitectureSimulation Techniques)”(1990年冬季USENIX会议、第53-63页、Robert Bedichek)中给出了仿真的概述。
就先前参考特定硬件构造或特征描述实施例的程度而言,在仿真的实施例中,等效功能可以由合适的软件构造或特征提供。例如,特定电路可以在仿真的实施例中被实现为计算机程序逻辑。类似地,诸如寄存器或缓存之类的存储器硬件可以在仿真的实施例中实现为软件数据结构。在其中在主机硬件(例如,主机处理器230)上存在先前描述的实施例中所引用的一个或多个硬件元件的布置中,在适当的情况下,一些仿真的实施例可以使用主机硬件。
仿真器程序210可以被存储在计算机可读存储介质(其可以是非暂态介质)上,并且向目标代码200(其可以包括应用、操作系统和管理程序)提供程序接口(指令执行环境),该程序接口与由仿真器程序210建模的硬件架构的应用程序接口相同。因此,目标代码200的程序指令(包括上述预定类型的事务开始/结束指令)可以使用仿真器程序210从指令执行环境中执行,使得实际上不具有上述装置2的硬件特征的主机计算机230可以模拟这些特征。
在本申请中,词语“被配置为…”用于表示装置的元件具有能够执行所定义的操作的配置。在本文中,“配置”是指硬件或软件的互连的布置或方式。例如,该装置可以具有提供所定义的操作的专用硬件,或者处理器或其他处理设备可以被编程以执行功能。“被配置为”并不意味着需要以任何方式改变装置元件以便提供所定义的操作。
尽管本文参考附图详细描述了本发明的示例性实施例,但是应该理解,本发明不限于这些精确的实施例,并且本领域的技术人员在不脱离由所附权利要求限定的本发明的精神和范围的情况下,可以在其中进行各种改变和修改。

Claims (23)

1.一种数据处理装置,包括:
指令解码器,用于对指令进行解码;
处理电路,用于响应于由所述指令解码器解码的所述指令来执行数据处理,所述处理电路包括事务性存储器支持电路,所述事务性存储器支持电路用于支持所述处理电路在数据处理的线程内执行事务,所述事务包括在事务开始指令与事务结束指令之间推测性地执行的所述线程的指令,针对所述事务,所述处理电路被配置为阻止所述推测性地执行的指令的结果的提交,直到到达所述事务结束指令为止;并且
其中,所述指令解码器被配置为对所述处理电路进行控制,以响应于给定线程的预定类型的事务开始指令或所述给定线程中所述预定类型的事务开始指令之后的后续指令而捕获标识锁定变量的锁定标识符,所述锁定变量用于控制对至少一个目标资源的独占访问;以及
所述指令解码器被配置为对所述处理电路进行控制,以响应于所述给定线程的在所述预定类型的事务开始指令之后执行的预定类型的事务结束指令而检查由所捕获的锁定标识符标识的所述锁定变量,并且在所述锁定变量指示另一线程持有对所述至少一个目标资源的独占访问时,阻止或推迟针对所述给定线程的推测性地执行的指令的结果的提交,
其中,所述事务性存储器支持电路包括以下中的至少一项:
推测性结果存储电路,所述推测性结果存储电路用于存储针对至少一个线程的至少一个事务的所推测性地执行的指令的所述结果;
恢复状态存储电路,所述恢复状态存储电路用于存储响应于在中止所述事务时要被恢复的所述事务开始指令而捕获的状态;
冲突检测电路,所述冲突检测电路用于检测在第一线程的事务内进行的对给定地址的数据访问与由另一线程进行的对同一地址的数据访问之间的冲突;以及
地址跟踪电路,所述地址跟踪电路用于跟踪由事务内的指令访问的地址。
2.根据权利要求1所述的装置,其中,所述锁定标识符包括存储所述锁定变量的存储位置的地址。
3.根据权利要求1所述的装置,其中,所述指令解码器被配置为对所述处理电路进行控制,以响应于所述预定类型的事务开始指令而捕获所述锁定标识符。
4.根据权利要求3所述的装置,其中,所述预定类型的事务开始指令具有指定所述锁定标识符或指定存储所述锁定标识符的寄存器的编码。
5.根据权利要求3所述的装置,其中,所述指令解码器被配置为对所述处理电路进行控制,以响应于所述预定类型的事务开始指令而从预定寄存器中读取所述锁定标识符。
6.根据权利要求1所述的装置,其中,所述指令解码器被配置为对所述处理电路进行控制,以响应于所述给定线程中所述预定类型的事务开始指令之后的所选类型的第一指令而捕获所述锁定标识符。
7. 根据权利要求6所述的装置,其中,所选类型的所述指令包括用于将数据值从存储位置加载到寄存器的加载指令。
8.根据权利要求7所述的装置,其中,所述加载指令指定目标地址,所述目标地址标识要从其加载所述数据值的所述存储位置;以及
所述锁定标识符包括所述给定线程中所述预定类型的事务开始指令之后的第一加载指令的目标地址。
9.根据权利要求1至8中任一项所述的装置,其中,所述处理电路被配置为:响应于对所述预定类型的事务结束指令的解码,在所述锁定变量指示另一线程持有对所述至少一个目标资源的独占访问时,中止所述给定线程的事务。
10.根据权利要求1至8中任一项所述的装置,其中,所述处理电路被配置为:响应于对所述预定类型的事务结束指令的解码,而推迟针对所述给定线程的推测性地执行的指令的结果的提交,直到所述锁定变量指示所述另一线程已经放弃对所述至少一个目标资源的独占访问为止。
11.根据权利要求10所述的装置,其中,所述处理电路被配置为:响应于对所述预定类型的事务结束指令的解码,在对所述锁定变量进行检查的尝试次数或者与等待由所述另一线程放弃对所述至少一个目标资源的独占访问相关联的等待时间超过预定阈值时,中止所述给定线程的事务。
12.根据权利要求1至8中任一项所述的装置,其中,所述指令解码器被配置为对所述处理电路进行控制,以响应于在所述给定线程中在所述预定类型的事务开始指令之后且在所述预定类型的事务结束指令之前执行的所述预定类型的进一步的事务开始指令,或者响应于在所述进一步的事务开始指令之后的后续指令,而捕获另一锁定标识符,其中所述另一锁定标识符标识用于控制对至少一个进一步的目标资源的访问的进一步的锁定变量。
13. 根据权利要求1至8中任一项所述的装置,其中,所述处理电路被配置为:响应于在针对所述给定线程捕获了多个锁定标识符时对所述预定类型的事务结束指令的解码,在所述多个锁定变量中的任何锁定变量指示另一线程持有对至少一个目标资源的独占访问时,阻止或推迟针对所述给定线程的推测性地执行的指令的结果的提交。
14.根据权利要求1至8中任一项所述的装置,其中,所述处理电路被配置为维护表示事务嵌套深度的事务嵌套深度值,所述事务嵌套深度指示相应事务保持未被中止且未被提交的给定线程的执行的事务开始指令的数量;以及
所述预定类型的事务结束指令包括在所述事务嵌套深度值指示所述事务嵌套深度等于1时执行的事务结束指令。
15.根据权利要求1至8中任一项所述的装置,其中,所述指令解码器被配置为对所述处理电路进行控制,以响应于第二类型的事务开始指令而执行后续指令的推测性执行并且省略对所述锁定标识符的捕获。
16.根据权利要求1至8中任一项所述的装置,包括锁定捕获存储区域,所述锁定捕获存储区域用于对响应于所述给定线程的一个或多个事务开始指令而捕获的一个或多个锁定标识符进行存储。
17.根据权利要求16所述的装置,其中,所述处理电路被配置为响应于对所述预定类型的事务结束指令的解码,在针对所述给定线程的零锁定标识符被存储在所述锁定捕获存储区域时,独立于锁定变量是否指示另一线程持有对至少一个目标资源的独占访问而确定是否提交针对所述给定线程的推测性地执行的指令的结果。
18.根据权利要求1所述的装置,其中,所述冲突检测电路被配置为响应于对所述冲突的检测来触发对所述第一线程的所述事务的中止。
19.一种数据处理方法,包括:
响应于解码的指令,使用处理电路执行数据处理,所述处理电路包括事务性存储器支持电路,所述事务性存储器支持电路用于支持所述处理电路在数据处理的线程内执行事务,所述事务包括在事务开始指令与事务结束指令之间推测性地执行的所述线程的指令,针对所述事务,所述处理电路被配置为阻止所述推测性地执行的指令的结果的提交,直到到达所述事务结束指令为止;
响应于对给定线程的预定类型的事务开始指令或所述给定线程中所述预定类型的事务开始指令之后的后续指令的解码,捕获标识锁定变量的锁定标识符,所述锁定变量用于控制对至少一个目标资源的独占访问;以及
响应于对所述给定线程的在所述预定类型的事务开始指令之后执行的预定类型的事务结束指令的解码,检查由所捕获的锁定标识符标识的所述锁定变量,并且在所述锁定变量指示另一线程持有对所述至少一个目标资源的独占访问时,阻止或推迟针对所述给定线程的推测性地执行的指令的结果的提交,
其中,所述事务性存储器支持电路包括以下中的至少一项:
推测性结果存储电路,所述推测性结果存储电路用于存储针对至少一个线程的至少一个事务的所推测性地执行的指令的所述结果;
恢复状态存储电路,所述恢复状态存储电路用于存储响应于在中止所述事务时要被恢复的所述事务开始指令而捕获的状态;
冲突检测电路,所述冲突检测电路用于检测在第一线程的事务内进行的对给定地址的数据访问与由另一线程进行的对同一地址的数据访问之间的冲突;以及
地址跟踪电路,所述地址跟踪电路用于跟踪由事务内的指令访问的地址。
20.一种计算机可读存储介质,其上存储有指令,当所述指令被处理器执行时,使得所述处理器执行根据权利要求19所述的方法。
21.一种数据处理装置,包括:
指令解码器,用于对指令进行解码;
处理电路,用于响应于由所述指令解码器解码的所述指令来执行数据处理,所述处理电路包括事务性存储器支持电路,所述事务性存储器支持电路用于支持所述处理电路在数据处理的线程内执行事务,所述事务包括在事务开始指令与事务结束指令之间推测性地执行的所述线程的指令,针对所述事务,所述处理电路被配置为阻止所述推测性地执行的指令的结果的提交,直到到达所述事务结束指令为止;并且
其中,所述指令解码器被配置为对所述处理电路进行控制,以响应于给定线程中预定类型的事务开始指令之后的后续指令而捕获标识锁定变量的锁定标识符,所述锁定变量用于控制对至少一个目标资源的独占访问;以及
所述指令解码器被配置为对所述处理电路进行控制,以响应于所述给定线程的在所述预定类型的事务开始指令之后执行的预定类型的事务结束指令而检查由所捕获的锁定标识符标识的所述锁定变量,并且在所述锁定变量指示另一线程持有对所述至少一个目标资源的独占访问时,阻止或推迟针对所述给定线程的推测性地执行的指令的结果的提交,其中,所述指令解码器被配置为对所述处理电路进行控制,以响应于所述给定线程中所述预定类型的事务开始指令之后的所选类型的第一指令而捕获所述锁定标识符。
22. 根据权利要求21所述的装置,其中,所选类型的所述指令包括用于将数据值从存储位置加载到寄存器的加载指令,
所述事务性存储器支持电路包括地址跟踪电路,所述地址跟踪电路用于跟踪由事务内的指令访问的地址,并且所述事务性存储器支持电路包括冲突检测电路,所述冲突检测电路用于检测当另一线程访问由所述地址跟踪电路所跟踪的地址之一时的冲突;以及
响应于所述后续指令没有导致存储所述锁定变量的存储位置被所述地址跟踪电路所跟踪而捕获所述锁定标识符。
23.一种数据处理装置,包括:
指令解码器,用于对指令进行解码;
处理电路,用于响应于由所述指令解码器解码的所述指令来执行数据处理,所述处理电路包括事务性存储器支持电路,所述事务性存储器支持电路用于支持所述处理电路在数据处理的线程内执行事务,所述事务包括在事务开始指令与事务结束指令之间推测性地执行的所述线程的指令,针对所述事务,所述处理电路被配置为阻止所述推测性地执行的指令的结果的提交,直到到达所述事务结束指令为止;并且
其中,所述指令解码器被配置为对所述处理电路进行控制,以响应于给定线程的预定类型的事务开始指令或所述给定线程中所述预定类型的事务开始指令之后的后续指令而捕获标识锁定变量的锁定标识符,所述锁定变量用于控制对至少一个目标资源的独占访问;以及
所述指令解码器被配置为对所述处理电路进行控制,以响应于所述给定线程的在所述预定类型的事务开始指令之后执行的预定类型的事务结束指令而检查由所捕获的锁定标识符标识的所述锁定变量,并且在所述锁定变量指示另一线程持有对所述至少一个目标资源的独占访问时,阻止或推迟针对所述给定线程的推测性地执行的指令的结果的提交,
其中,所述处理电路被配置为:响应于对所述预定类型的事务结束指令的解码,在所述锁定变量指示另一线程持有对所述至少一个目标资源的独占访问时,中止所述给定线程的事务。
CN201880063522.2A 2017-10-10 2018-08-30 数据处理装置和方法 Active CN111164572B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1716568.9A GB2567433B (en) 2017-10-10 2017-10-10 Checking lock variables for transactions in a system with transactional memory support
GB1716568.9 2017-10-10
PCT/GB2018/052452 WO2019073192A1 (en) 2017-10-10 2018-08-30 VERIFYING LOCK VARIABLES FOR TRANSACTIONS IN A SYSTEM WITH TRANSACTIONAL MEMORY SUPPORT

Publications (2)

Publication Number Publication Date
CN111164572A CN111164572A (zh) 2020-05-15
CN111164572B true CN111164572B (zh) 2024-02-13

Family

ID=60326731

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201880063522.2A Active CN111164572B (zh) 2017-10-10 2018-08-30 数据处理装置和方法

Country Status (5)

Country Link
US (1) US11347539B2 (zh)
JP (1) JP7165725B2 (zh)
CN (1) CN111164572B (zh)
GB (1) GB2567433B (zh)
WO (1) WO2019073192A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115408178B (zh) * 2022-10-31 2023-02-21 北京登临科技有限公司 用于保护对片上资源的访问的方法、介质和电子设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105786665A (zh) * 2012-06-29 2016-07-20 英特尔公司 用于测试事务性执行状态的指令和逻辑
CN106062707A (zh) * 2014-03-26 2016-10-26 英特尔公司 使能混合事务存储器系统中的最大并发性
CN107003897A (zh) * 2014-12-19 2017-08-01 Arm 有限公司 监控事务处理资源的利用率

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7213133B2 (en) * 2004-05-03 2007-05-01 Sun Microsystems, Inc Method and apparatus for avoiding write-after-write hazards in an execute-ahead processor
US8099538B2 (en) * 2006-03-29 2012-01-17 Intel Corporation Increasing functionality of a reader-writer lock
US8132158B2 (en) * 2006-12-28 2012-03-06 Cheng Wang Mechanism for software transactional memory commit/abort in unmanaged runtime environment
US7610470B2 (en) * 2007-02-06 2009-10-27 Sun Microsystems, Inc. Preventing register data flow hazards in an SST processor
US8332374B2 (en) * 2007-04-13 2012-12-11 Oracle America, Inc. Efficient implicit privatization of transactional memory
KR20110044884A (ko) * 2008-07-28 2011-05-02 어드밴스드 마이크로 디바이시즈, 인코포레이티드 가상화가능한 진보된 동기화 기능
US8316194B2 (en) * 2009-12-15 2012-11-20 Intel Corporation Mechanisms to accelerate transactions using buffered stores
US20140281236A1 (en) * 2013-03-14 2014-09-18 William C. Rash Systems and methods for implementing transactional memory
US9460145B2 (en) * 2013-03-26 2016-10-04 International Business Machines Corporation Transactional lock elision with delayed lock checking
GB2523804B (en) * 2014-03-06 2021-03-31 Advanced Risc Mach Ltd Transactional memory support
US9454370B2 (en) 2014-03-14 2016-09-27 International Business Machines Corporation Conditional transaction end instruction
US10521277B2 (en) * 2014-07-14 2019-12-31 Oracle International Corporation Systems and methods for safely subscribing to locks using hardware extensions
GB2536871A (en) * 2015-03-04 2016-10-05 Advanced Risc Mach Ltd An apparatus and method to generate trace data in response to transactional execution
US11275590B2 (en) * 2015-08-26 2022-03-15 Huawei Technologies Co., Ltd. Device and processing architecture for resolving execution pipeline dependencies without requiring no operation instructions in the instruction memory

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105786665A (zh) * 2012-06-29 2016-07-20 英特尔公司 用于测试事务性执行状态的指令和逻辑
CN106062707A (zh) * 2014-03-26 2016-10-26 英特尔公司 使能混合事务存储器系统中的最大并发性
CN107003897A (zh) * 2014-12-19 2017-08-01 Arm 有限公司 监控事务处理资源的利用率

Also Published As

Publication number Publication date
JP2020537222A (ja) 2020-12-17
US20200272505A1 (en) 2020-08-27
US11347539B2 (en) 2022-05-31
GB201716568D0 (en) 2017-11-22
CN111164572A (zh) 2020-05-15
GB2567433B (en) 2020-02-26
JP7165725B2 (ja) 2022-11-04
WO2019073192A1 (en) 2019-04-18
GB2567433A8 (en) 2019-05-01
GB2567433A (en) 2019-04-17

Similar Documents

Publication Publication Date Title
CN111133418B (zh) 在例外屏蔽更新指令之后允许未中止的事务处理
TWI812750B (zh) 交易式比較及丟棄指令
CN112236750B (zh) 数据处理方法和设备
CN111164572B (zh) 数据处理装置和方法
US10853223B2 (en) Simulation of transactions
US20230315510A1 (en) A technique for handling transactions in a system employing transactional memory
EP3462308B1 (en) Transaction nesting depth testing instruction

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
GR01 Patent grant
GR01 Patent grant