CN101833475B - 用于执行指令原子块的方法和装置 - Google Patents

用于执行指令原子块的方法和装置 Download PDF

Info

Publication number
CN101833475B
CN101833475B CN201010175491.5A CN201010175491A CN101833475B CN 101833475 B CN101833475 B CN 101833475B CN 201010175491 A CN201010175491 A CN 201010175491A CN 101833475 B CN101833475 B CN 101833475B
Authority
CN
China
Prior art keywords
thread
instruction
execution
block
memory
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.)
Expired - Fee Related
Application number
CN201010175491.5A
Other languages
English (en)
Other versions
CN101833475A (zh
Inventor
Q·雅克布森
H·王
J·舍恩
G·金雅
P·哈默伦德
X·邹
B·比格比
S·考舒基
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.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of CN101833475A publication Critical patent/CN101833475A/zh
Application granted granted Critical
Publication of CN101833475B publication Critical patent/CN101833475B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • 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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • 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/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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/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/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Memory System (AREA)
  • Debugging And Monitoring (AREA)

Abstract

一种方法包括:并发地执行对存储器的公共逻辑视图进行共享的多个线程;挂起所述多个线程中除第一线程以外的所有其它线程的执行,以便所述第一线程能够原子地执行指令块;其中,所述挂起是由所述第一线程调用硬件机制的动作触发的,其中,所述挂起包括:由所述第一线程向被所述多个线程共享的预定存储位置写入第一预定值,并且响应于写入到所述预定存储位置,对其余的每个线程生成中断,其中,其余的每个线程用于响应于所述中断而检查存储在所述预定存储位置中的值,并且用于如果所述预定存储位置包含所述第一预定值则挂起自己的执行;以及在所述第一线程完成所述指令块的原子执行之后,通过向所述预定存储位置写入第二预定值,来恢复所述其它线程。还描述和声明了其它实施例。

Description

用于执行指令原子块的方法和装置
本申请是申请日为2006年6月23日、申请号为200680022486.2的名为“用于增强线程级推测的原语”的专利申请的分案申请。
技术领域
本公开总体上涉及信息处理系统,更具体地,涉及支持线程级推测。
背景技术
多线程逐渐得到硬件上的支持。例如,在一种方式中,多处理器系统(诸如单芯片多处理器(“CMP”)系统)中的处理器每个都可以并发地运行多个软件线程中的一个。在被称为同时多线程(“SMT”)的另一种方式中,单个物理处理器看起来像是多个逻辑处理器那样操作系统和用户程序。对于SMT,能够在单个处理器上同时启动并执行多个软件线程而无需切换。也就是,每个逻辑处理器维护一整套架构状态,但是该物理处理器的许多其它资源都是共享的,比如高速缓存、执行单元、分支预测器、控制逻辑和总线。因此,对于SMT来说,来自多个软件线程的指令并发地在每个逻辑处理器上执行。
对于诸如SMT和/或CMP系统这样的支持软件线程并发执行的系统,一个应用程序可以被并行化为多线程代码以利用该系统的并发执行能力。多线程应用程序的线程之间可能需要通信和同步,这通常是通过共享存储器来完成的。另外,通过将单线程程序组织为多个线程然后并发地运行这些线程,每个线程在单独一个线程单元上运行,该单线程程序也可以被并行化为多线程代码。当在对这样的单线程程序进行并行化处理期间作出关于依赖性的某些假设时,该技术有时被称为推测多线程(speculative multithreading)。
为了提高多线程程序的性能和/或使其更易于编写,可以使用线程级推测。线程级推测指的是推测地确定一个线程的指令块性能。也就是,该线程执行这些指令,而其他线程不被允许看到这些指令的结果,直到该线程决定提交或丢弃(也称为放弃)该推测地完成的工作。
通过提供用于缓存和包含作为推测的指令块的一部分而完成的存储器更新的能力,处理器能够使线程级推测更高效。存储器更新可以被缓存,直到被指示执行或丢弃所推测的存储器更新。
程序可能希望推测的一件事情是,一个代码块是否依赖于并发地运行在其它线程上的其它代码。处理器通过为检测依赖性提供支持,能够使得该推测更高效。例如,处理器可以提供支持以检测一个推测的代码块是否读取随后要被另一个并发的线程修改的任意存储单元。
发明内容
考虑到上述问题而设计了本发明。
根据一个方面,提供了一种方法,包括:并发地执行对存储器的公共逻辑视图进行共享的多个线程;挂起所述多个线程中除第一线程以外的所有其它线程的执行,以便所述第一线程能够原子地执行指令块;其中,所述挂起是由所述第一线程调用硬件机制的动作触发的,其中,所述挂起包括:由所述第一线程向被所述多个线程共享的预定存储位置写入第一预定值,并且响应于写入到所述预定存储位置,对其余的每个线程生成中断,其中,其余的每个线程用于响应于所述中断而检查存储在所述预定存储位置中的值,并且用于如果所述预定存储位置包含所述第一预定值则挂起自己的执行;以及在所述第一线程完成所述指令块的原子执行之后,通过向所述预定存储位置写入第二预定值,来恢复所述其它线程。
根据另一个方面,提供了一种用于执行指令原子块的装置,包括:执行单元,用于执行原子块;事务状态寄存器,用于保持陷阱位,其中,如果在所述原子块的执行期间发生中断,则该陷阱位被设置;监控部件,用于监控在所述原子块的执行期间加载的地址;缓存部件,用于对在所述原子块的执行期间的写操作进行缓存,其中,所述监控部件和所述缓存部件用于在对在所述原子块的执行期间发生的所述中断进行处理期间维持持久状态,并且其中,所述执行单元用于,如果所述执行单元在进入处理程序以处理所述中断时用事务清空陷阱位指令来清空所述陷阱位,则在处理所述中断之后,恢复当采取所述中断时正在执行的所述原子块的执行。
根据再一个方面,提供了一种装置,包括:执行资源,用于并行地执行多个线程,所述多个线程中的每一个都共享存储器的公共逻辑视图;硬件机制,用于检测与所述多个线程中的第一线程相关联的触发事件,其中,响应于检测到所述触发事件,所述多个线程中除所述第一线程以外的每一个线程被挂起,以使得所述执行资源能够执行来自所述第一线程的指令原子块,其中,所述挂起包括:由所述第一线程向被所述多个线程共享的预定存储位置写入第一预定值,并且响应于写入到所述预定存储位置,对其余的每个线程生成中断,其中,其余的每个线程用于响应于所述中断而检查存储在所述预定存储位置中的值,并且用于如果所述预定存储位置包含所述第一预定值则挂起自己的执行;其中,在执行完来自所述第一线程的指令原子块之后,通过向所述预定存储位置写入第二预定值,所述执行资源恢复执行所述多个线程中每一个被挂起的线程。
附图说明
参考下列附图,可以理解本发明的实施例,在附图中相同或相似的单元用相同或相似的数字标明。这些附图并不是要进行限制,而是被提供用来说明系统、方法和机制的选定实施例,以便提供具有事务执行支持的推测多线程。
图1是示出一般的并行编程方法的图形表示的框图。
图2是说明根据本发明的至少一个实施例的处理器的选定特性的框图。
图3、4和5是说明了用于执行具有事务执行支持的推测多线程的至少一个实施例的数据和控制流的流程图。
图6是用于确定事务块的执行已失败的机制的至少一个实施例的数据流图。
图7是说明能够执行所公开的技术的系统的至少一个实施例的框图。
图8是说明包括地址监控表和原子更新表以支持事务执行的处理器的至少一个实施例的框图。
具体实施方式
下面的说明描述了用于为线程级推测提供硬件支持的方法、系统和机制的选定实施例。这里所述的装置、系统和方法实施例可以用于单核或多核多线程系统。在下面的说明中,阐述了大量具体细节,例如处理器类型、多线程环境、系统配置、数据结构、指令助记符以及语义,以便提供对本发明的实施例的更透彻的理解。然而,本领域技术人员可以理解,也可以无需这样的特定细节而实施本发明。此外,并未详细示出一些公知的结构、电路等,以免不必要地模糊本发明。
对于采用线程级推测的多线程工作负荷,并发执行的线程的至少一部分(如果不是全部的话)可以共享相同的存储空间。如这里所使用的,术语“协作线程(cooperative threads)”描述了共享相同的存储空间的一组线程。由于协作线程共享存储空间,它们可以读取和/或写入相同的存储项。因此,为了进行正确的、有意义的工作,并发执行的协作线程应该被彼此同步。
图1是以图形形式说明两个协作线程125、126的框图,这两个协作线程125、126共享存储器的公共逻辑视图。这样的共享存储器多处理范例可以被用于称为并行编程的方法。根据该方法,应用程序员可以将一个软件程序(有时称为“应用程序”或“进程”)拆分成要并发运行的多个线程,以便表示该软件程序的并行化。也就是,单线程程序(或“进程”)120可以被分成可以并发执行的两个线程126、125。
图1说明了每个线程125、126分别具有自己的应用和系统状态202a、202b。与特定进程120相关联的协作线程125、126共享存储器的特定逻辑视图204。因此,对于至少一个实施例,协作线程125、126每个都可以共享由操作系统为进程120构建的虚拟存储器的相同视图,并且可以看到彼此的虚拟地址空间。
为了简化讨论,图1仅说明了进程120的两个线程125、126。然而,这样的示例说明不应被理解为限制性的。与进程120相关联的协作线程的数目可以多于两个。与进程120相关联的线程的数目的上限可以由操作系统(OS)程序(未示出)来限定。
已经设计出各种方法来处理协作线程的存储器访问的同步。一种处理协作线程的同步的通常方法是使用存储器锁。存储器锁可以用于保证特定线程对于特定代码段的共享数据具有排它的访问权。在传统的多线程算法中,可以在任意关键代码段周围使用锁,其中如果多个线程并发执行关键段,则可能会引发错误的行为。对于这种方法,一个线程可以获得该锁,执行其关键段,然后释放该锁。性能可能会因这些锁而降低,这是因为这些锁能禁止多个线程并发地运行。如果,“仅仅是为了安全”而保持超过需要的锁,那么性能会进一步降低。也就是,可能经常会相当保守地使用这些锁。
为了最小化锁的性能影响,一个应用程序可以使用多个不同的锁,以便以与不同代码段或者不同代码块相关联的细粒度级别进行加锁。细粒度加锁可能对于代码实现来说很麻烦,并且当单个线程必须获得多个锁的所有权时可能易于出现死锁。
出于各种原因,关键段内的多个线程并发访问一组共享的数据结构可能事实上并不会因特定事件发生而出现冲突。对于这种情况,由锁提供的串行化对于确保正确执行并不是必需的。在这种情况下对锁的保守使用可能会妨碍并行化优势的完全实现,这是因为一个线程要以串行化的方式等待空闲锁,然后获得该锁,即便是对于维持准确的存储器值并不需要这样的串行化时也是如此。
因此,一种避免不必要的串行化的方法被称为推测锁忽略(“SPE”,Speculative Lock Elision)。该SPE方法可以降低锁的开销。在“Speculative Lock Elision:Enabling Highly Concurrent MultithreadedExecution”,Rajwar et al.,Proc.30th ACM/IEEE Int’l.Symp.onMicroarchitecture,2001中描述了这样的方法。对于这种方法,认识到某些同步指令被保守地使用并且并不是必需的。对于SPE,一些同步指令被预测为是不必要的并且被忽略。在两个并发执行的关键段并未触及任何相同的存储位置的情况下,避免了锁的人为串行化。
作为对上述加锁和SPE方案的一种替代方法,出现了事务执行(transactional execution)。在事务执行方法中,一个指令块可以被划分为一个原子块,并且可以自动执行而无需锁。(如这里所使用的,术语“原子块”和“事务块”可以互换使用)可以提供这样的语义,使得要么各个划分的指令的实际结果均可见并且均被提交给处理器状态,要么任何划分的指令的结果均不可见或不被提交。这为访问共享存储器提供了一种替代的同步形式,在并发方面以及在程序编写者所要进行的推理上有很多优点。
推测锁忽略和事务执行都可以借助线程级推测支持来实现。在这两种情况下,语义要求推测地执行代码块同时监控数据依赖性。所要求的支持包括某些方式来缓存在推测范围内执行的存储器更新,然后提交或丢弃这些更新。所要求的支持还包括某些方式来检测在推测范围内的存储器读是否观察到在推测期间被另一个线程修改的值。这要求某些方式来记住在推测范围内读取的存储器地址并监控其它线程对其的更新。
推测多线程是实现程序的多线程并使用线程级推测的另一种方法。对于推测多线程,一个顺序的程序被分成顺序的多个任务或代码块,然后并行地运行。确保这些任务提交他们的更新,以便保留原始顺序的语义。这些任务也监控之前的任务进行的任何更新是否改变了它们所观察的值,在这种情况下它们需要丢弃他们推测的更新并重做该工作。对此的硬件支持基本上与上述的线程级推测支持相同。
对于如何构建对线程级推测的硬件支持,以及如何提供软件接口,已有很多不同的提议。这些方法中的大部分通过多样化的接口提供了相同的基本功能。它们有效地确定了一些架构状态(architectedstate)的检查点。然后它们继续执行,缓存存储器更新并针对外来的写操作监控被读取的存储位置。
在执行协作线程的原子块期间,对于至少一种已知的事务执行方法,该线程创建的存储器状态是推测的,这是因为并不知道该指令原子块是否将成功地完成执行。也就是,第二个协作线程可能要争用相同的数据,于是知道第一个协作线程无法被原子地执行。也就是,知道对于第一和/或第二个协作线程做出了误推测。根据至少一些提出的事务执行方法,为了预防误推测,在执行原子块的指令期间并不更新处理器状态。相反,处理器状态被维持在未定义的中间状态,直到原子块完成执行。
对于这样的方法,在原子块的每个指令上的处理器的状态取决于该原子块的状态最终是否将被提交。因此,在执行该原子块期间,中间状态是:1)如果该状态最终被提交,则为第一状态(类似于上述的被维持在推测存储器缓冲器中的状态);以及2)如果该状态最终未被提交,则为第二状态。
因此,对于一些普通的事务执行方法,并未定义原子块的中间状态。这使得某些操作,例如精确的陷阱处理和单步调试,对于原子块内的指令是不可行的。然而,图2说明了一个线程执行单元的至少一个实施例,该单元支持推测线程和事务执行,并且还提供原子块中每个指令的边界(诸如引退(retirement))处的精确的架构状态。
图2是说明了多线程处理器200的框图,该处理器200具有实现事务执行同时提供每个指令的边界处的精确架构状态的功能,其中所述每个指令包括事务块内的指令。处理器200支持同时多于一个线程的并发执行。如这里所使用的,术语“线程”至少包括以下概念,即,独立地执行可以与一个进程的其它线程并发执行的指令流。因此,术语“线程”包含以下思想,即,与相关联的处理器状态一道执行软件指令流。
对于至少一个实施例,处理器200可以执行已经通过使用协作线程而被并行化的应用程序代码的一部分。例如,称为子(spawnee)线程的推测线程可以在处理器200上运行以执行某些指令,这些指令在程序顺序上领先于正由执行了该线程生成(spawn)的线程在处理器200上执行的代码。执行了该线程生成的线程被称为父(spawner)线程。
图2说明了至少一个CMP实施例,其中多个线程单元104中的每一个是一个处理器内核,多个内核104a-104n存在于单片封装103内。每个内核104可以是单线程处理器或多线程处理器。对于至少一个实施例,与执行父线程的内核(例如,104c)不同的一个CMP内核(例如,104a)执行子线程。
对于至少一个替代实施例,处理器200可以是支持并发多线程的单核处理器。对于这样的实施例,尽管是同一个处理器内核执行所有线程指令,但每个线程单元104是一个逻辑处理器,具有自己的下一指令指针以及取指逻辑。(术语“线程单元”和“程序装置(sequencer)”在这里可以互换使用)。对于这样的实施例,逻辑处理器104维持其自己版本的架构状态,尽管该单处理器内核的执行资源在全部线程之间是共享的。
对于这样的替代实施例,在支持推测多线程的单核同时多线程系统中执行子线程。对于这样的实施例,由父线程所处的同一个物理处理器200上的第二个SMT逻辑处理器(例如,104a)执行该子线程,而由另一个SMT逻辑处理器(例如,104n)执行该父线程。本领域技术人员可以理解,这里所述的事务执行实施例可以用于任意多线程方法中,包括SMT、CMP多线程或其它多处理器多线程、或任意其它已知的多线程方法。
尽管这里所述的处理器200的CMP实施例仅指出每个处理器内核104有单个线程,但是不应设想这里的公开内容被限制于单线程处理器。这里所述的技术可以用于任意CMP系统中,包括那些在单片封装103中包括多个多线程处理器内核的系统。
因此,图2说明了处理器200包括两个或更多个线程单元104a-104n。为了便于讨论,线程单元的数目被定为“N”。线程单元104超出两个这样的线程单元之后的选择性在图2中被表示为点线和省略号。也就是,图2说明了N≥2。为了简化讨论,这里进一步详细讨论一个CMP实施例。也就是,每个线程单元104可以代表32位和/或64位处理器,诸如
Figure GDA00003273059600081
Figure GDA00003273059600082
Pro、
Figure GDA00003273059600083
II、
Figure GDA00003273059600084
III、
Figure GDA00003273059600085
4、和
Figure GDA00003273059600086
以及
Figure GDA00003273059600087
2微处理器。然而,这样的部分列举不应被认为是限制性的。
图2中说明的处理器200的实施例被设计用于提供某些语义以支持推测多线程。(每个都将在下面进一步详细讨论)。尽管在下面讨论了这样的特征的某些特定实现,但是应该理解,提供这样的实现细节仅是为了示例的目的,而不应被认为是限制性的。
首先,处理器200提供了某些方式来划分一组指令(在这里可互换地被称为“原子块”或“事务块”)的起始和结束,其中该组指令包括了对于共享数据的存储器操作。
第二,处理器200包括了用于监控载入(存储器读)地址的硬件,以便检测多个协作线程之间的争用。
第三,处理器200包括了用于缓存存储(存储器写)操作的硬件(“存储缓冲器”)。
第四,处理器200被设计用于从存储缓冲器中执行存储器的原子更新(如果在执行原子块期间未发觉争用)。
最后,处理器200被设计用于如果在执行原子块期间检测到争用,则丢弃存储缓冲器的存储器更新并发信号通知失败。这样的通用的能力由处理器200的至少一个实施例提供。
关于划分原子块,处理器200可以以几种方式中的任意一种来提供这样的支持。对于至少一个实施例,程序员可以通过在指令操作码自身中设置特定的位来指示读或写指令是原子块的一部分。例如,“原子”指示符可以是指令操作码(opcode)的一部分,或者可以由载入或存储指令的特定前缀来指示。
对于至少一个其它实施例,处理器200所支持的指令集可以包括显式的架构划分指令。也就是,处理器200的该指令集可以包括“开始监控”指令,其可以由程序员放置在该原子块的起始。类似地,处理器200的该指令集还可以包括“停止监控”指令,其可以由程序员放置在该原子块的最后一个指令之后。对于至少一个实施例,单个指令可以被用于操纵一个控制寄存器以执行“开始监控”和“停止监控”指令二者。关于这样的指令和控制寄存器的至少一个实施例的进一步的讨论,将在下面结合图7进行阐述。
如上所述,支持推测多线程和事务执行的处理器200的一个实施例可以提供对载入(存储器读)地址的基于硬件的监控,以便检测多个协作线程之间的争用。图2说明了每个线程单元104可以包括一个表106以存储要针对外部更新进行监控的一个或多个地址。这样的表106可以被称为地址监控表(“AMT”)。对于线程单元104,可以在架构上定义AMT106的逻辑概念,但并不是必须要被实现为分立的硬件表结构。
AMT106可能会很有用,这是因为如上所述,原子块内的潜在依赖性和/或共享数据争用可能是不明确的。如果程序员已经知道在执行原子块期间另一个线程将试图写入到在该原子块中使用的地址,则该程序员可能就不会试图在并发执行期间读取该位置。换句话说,如果程序员已经知道在原始程序中存在争用/依赖性,就不会尝试以这种方式对代码进行并行化;该代码就被允许如原始编写的那样顺序地执行竞争的指令。因此,AMT106可能在识别误推测上会很有用。
此外,图2说明了每个线程单元104也可以包括表108,以便如果确定执行更新的该线程不是误检测的,则对可能会稍后执行的存储器更新进行缓存。这样的表108可以被称为原子更新表(“AUT”)。(对于SMT实施例,可以在多个逻辑处理器之间共享单个AMT106和AUT108,其中这些表的不同部分被分配给每个逻辑处理器)。AUT108可以缓存在原子块期间执行的存储器写。这样的方法避免了令其它线程利用该原子块的中间状态。
当最终确定该原子块是否已经能够完成执行而没有与另一个线程的未解决的依赖性或争用时,在AUT108中缓存的存储器更新可以被原子地执行。然而,如果事务失败(也就是,如果由于争用或未解决的数据依赖,该原子块不能完成执行),则可以清空AUT108并且不执行被缓存的更新。以这种方式,不需要响应于确定发生了误推测而回退(unroll)已经执行的存储器写。
图2中说明的处理器200的至少一个实施例以下面的方式提供了原子块中每个指令的边界(诸如引退)处的精确的架构状态。可以设置处理器200中的某些用户可控状态以指示如果在执行原子块的指令期间发生陷阱或异常,则不应发生事务失败。而是,处理该异常/陷阱的同时保留AMT106和AUT108中的内容。在这样的处理之后,该原子块的执行继续进行。以这种方式,维持了精确的状态,使得在处理了陷阱/异常之后可以恢复执行该原子块。
尽管在图2中AMT106和AUT108被说明为分立块,但是这样的说明是为了表达这样的表具有逻辑上不同的结构。尽管这样的表106、108可以在架构上是显式的,但是他们的具体组织和物理结构则是设计选择的问题,物理实现的确切方式不应被认为是被限制于任何特定结构或组织。通常,AMT106和AUT108的信息可以被维持在任意存储区域中。例如,逻辑“表”106、108可以是位集合或可以是对于其它现有硬件结构的扩展。
关于AMT106和AUT108的具体实现方式,表106、108通常可以被实现在一个或多个物理存储区域中作为有限逻辑结构。表106、108的有限性必然限制了能够作为一个事务而被成功执行的指令的数目。因此,后备存储(backstore)160中的一个或多个存储器表可以用于扩展AMT106和/或AUT108的大小。
图2说明了处理器200的至少一个实施例可以耦合到存储器150,其中存储器150的一部分可以被软件利用以维持用于AMT106和/或AUT108的后备存储160。软件可以控制将来自表106、108的溢出项存至后备存储160。
对于至少一个实施例,AMT106可以被实现为一个并行于载入缓冲器的结构。类似地,AUT108可以被实现为一个并行于存储缓冲器的结构。图8中说明了这样的实施例的其它可能的配置。
图8是进一步详细说明了处理器1004的至少一个实施例的框图,该处理器1004包括AMT106和AUT108并且包括载入请求缓冲器440和存储请求缓冲器450。AMT106、AUT108、载入请求缓冲器440和/或存储请求缓冲器450中的一个或多个可以是存储器排序缓冲器(MOB,memory ordering buffer)223的一部分。处理器1004也可以包括解码器1022,以接收并解码指令集中的指令。解码器1022能够接收和解码指令;要由解码器1022解码的指令可以包括执行下面结合表1所述的操作的指令。
图8说明了处理器1004,其实现了无阻塞(non-blocking)高速缓冲存储子系统(该高速缓冲存储子系统有时在这里也被简称为“高速缓存系统”)。该高速缓存系统包括L0高速缓存460和L1高速缓存410。对于至少一个实施例,L0高速缓存460和L1高速缓存410是片上(on-die)高速缓存。处理器1004还可以从主存储器102获取数据。主存储器102、L1高速缓存410和L0高速缓存460一起构成了存储层次(memory hierarchy)240。
存储器排序缓冲器(“MOB”)223可以临时保存未完成的载入和存储指令从发出到完成期间的状态。对于至少一个实施例,存储指令的该状态信息可以被维持在存储请求缓冲器450中,而载入指令的该状态信息可以被维持在载入请求缓冲器440中。
对于至少一个实施例,可选地,可以经由AMT106来处理对载入指令的跟踪,该AMT可以在事务执行期间与载入请求缓冲器440一起使用。
对于至少一个实施例,对于正常操作,未完成的存储指令的状态信息可以被维持在存储请求缓冲器450中,或者,可以在事务执行期间被维持在AUT108中。
图8说明了每个存储缓冲器项450a-450n可以包括控制部分515。尽管如图8所示逻辑上彼此相关联,但是本领域技术人员可以理解,存储请求缓冲器项450a-450n的控制部分515和数据部分480并不是必然物理地存在于存储设备的连续存储区域中,甚至并不是必然物理地存在于同一个存储设备中。例如,图8说明了存储缓冲器450的控制部分515可以被包括在MOB223中而数据部分480可以存在于片上高速缓存410中。
对于至少一个实施例,MOB223包括控制逻辑475。控制逻辑475包括选择逻辑236,用于确定存储数据应被缓存在存储请求缓冲器450中还是AUT108中。对于至少一个实施例,选择逻辑236可以指示存储数据应被记录在存储请求缓冲器450和AUT108中的仅一个中。也就是,确定在哪里保存存储数据可以是“异或”运算。选择逻辑236可以指示当未在进行原子执行时,存储状态可以被缓存在存储请求缓冲器450中。然而,在原子执行期间,选择逻辑236改为令存储状态被缓存在AUT108中。
对于至少一个实施例,选择逻辑236还用于确定是否应将已从存储器中读取的载入数据的存储器地址输入到AMT106中。这样的输入可以在原子执行期间与将存储器读数据拉入到载入请求缓冲器440的正常操作一起进行。也就是,确定是否在AMT106中监控载入地址可以是选择性的操作,使得在正常的载入请求存储器440操作以外还执行监控。
使用AMT106和AUT108使得能够进行代码的预测多线程,该代码否则会因为不明确的数据依赖性或数据争用而很难被并行化。通过使用逻辑地址监控表106和逻辑地址更新表108,处理器200可以检测到在执行之前看起来不确定的某些潜在的数据依赖性或争用在执行期间可能确实存在于线程之间。如上所述,表106、108因此分别支持对载入(存储器读)操作进行监控和对存储(存储器写)操作进行缓存。
图3是说明方法300的至少一个实施例的数据和控制流的流程图,其中该方法300使用AMT106和AUT108来执行具有事务执行支持的推测多线程。通常,该方法300执行原子块的指令但是缓存对存储器的更新。此外,该方法300通常准备监控在原子块执行期间读取的存储器地址,以便确定是否另一个线程尝试对同一个地址执行写操作。如果是的话,则在执行该原子块期间存在对该存储器地址的争用,因此由于对该存储器地址的争用导致该原子块的事务执行失败。
图3说明了该方法300开始于框302。假定针对已被划分为事务块的一个块执行方法300。如上所述,因此对于至少一个实施例假定在开始该方法300前已执行了“开始监控”指令。对于这样的实施例,也假定执行“停止监控”指令将导致在框314处的判定结果为假值。
可替换地,可以通过用前缀、操作码字段、或者其它个性化指示符标记原子块内的每个载入和存储指令,来表示所述划分,其中所标记的指令要作为原子块的一部分执行。对于这样的实施例,执行可选框308和312(使用虚线框来表示为可选的)以确定该指令是否是原子块的一部分。
对于至少一个实施例,假定方法300由包括AMT106和AUT108(见图2)的处理器的线程执行单元(例如,图2的104)来执行。因此,本领域技术人员可以理解,确定一个指令是否是原子块的一部分,这也指示了在所划分的指令的正常执行期间执行的任何存储器写操作应当被缓存在AUT108中,并且在所划分的指令的正常执行期间执行的任何存储器读操作的地址应当被维持在AMT106中。
图3说明了,根据所示的方法300,在原子块执行期间的任何时刻,可以采取陷阱、异常或中断。如果采取这样的事件,则可以维持精确的架构状态。换句话说,在处理异常/中断/陷阱事件期间,可以维持AMT106和AUT的内容。这样的事件并不会被当作导致失败的条件。相反,当处理了该事件之后,可以恢复根据图3中所示的方法300执行原子块。图3在框390说明了这样的事件并不是方法300的至少一个实施例的失败条件。
图3说明了方法300的处理过程从框302前进到框304。在框304,获取并解码线程的下一指令。然后处理过程前进到框306。在框306,确定在框304获取并解码的指令是否是存储器读指令(例如,载入指令)。如果是的话,则处理过程前进到可选框308。否则,处理过程前进到框310。
可选框308确定该指令是否是原子块的一部分。这种确定的方式可以因各种实现而不同。对于并未在存储器写指令本身中嵌入这种信息而是使用“开始监控”指令的实现,不需要为每个存储器读指令执行这种确定308。而是,假定了在框302处开始执行方法300之前已经执行了“开始监控”指令并且该方法300在执行期间对此了解。对于至少一个实施例,例如,这样的信息可以被维持在控制寄存器中,诸如下面讨论的事务控制寄存器(“TCR”)。对于这样的实施例,处理过程从框306前进到连接符“A”,且并不执行可选框308。结合图4进一步详细描述了与连接符“A”相关联的处理过程。
在框310,确定在框304获取并解码的指令是否是存储器写指令(例如,存储指令)。如果是的话,则处理过程前进到可选框312。否则,处理过程前进到框311。
可选框312确定存储器写指令是否是原子块的一部分。同样,这种确定的方式可以因各种实现实施例而不同。对于并未在存储器写指令本身中嵌入这种信息而是使用“开始监控”指令的实现,不需要为每个存储器写指令执行这种确定312。而是,如前所述,假定了在开始执行方法300之前已经执行了“开始监控”指令。同样,这样的信息可以被存储在控制寄存器中。对于这样的实施例,处理过程从框310前进到连接符“B”,且并不执行可选框312。结合图5进一步详细描述了与连接符“B”相关联的处理过程。
如果已在框304获取的当前指令既不是存储器读指令也不是存储器写指令,处理过程落入框311。在框311,执行该指令。然后处理过程前进到框314。
对于利用“开始监控”和“停止监控”指令的实施例,执行框314。对于这样的实施例,如果还未遇到“停止监控”指令,则在框314处的判定结果为“假”。
对于并未利用“开始监控”划分指令而是将原子块指示符与单独的存储器指令相关联的实施例,也执行框314。对于这样的实施例,在框314处判断是否达到某种终止指示符。对于至少一个实施例,该终止指示符可以是一个指令、或者是指令的操作码位或前缀,用于指示在AUT(见图2的108)中缓存的更新应被提交到存储器。对于这样的实施例,如果还未遇到终止指示符,则在框314处的判定结果为“真”。
如果在框314处的判定结果为“真”,则处理过程循环回框304以便获取下一指令。否则,处理过程可以在框318结束或者可以可选地前进到框316。
如果方法300到达框316而没有经历事务失败中断,则该原子块已经成功地完成执行而没有遇到争用。因此,在该原子块执行期间被缓存的存储器更新可以被提交316给存储器。在框316,来自AUT108的被缓存的存储器更新被原子地提交给存储器。然后可以清空AUT108中的项。可以响应于一个指令(例如,由程序员放置在该原子块的最后一个指令之后的指令)来执行原子更新,即,在框316处将AUT108的项提交到存储器。在下面结合表1更详细地讨论了这种指令的一个实施例,即推测执行提交指令。
对于至少一个实施例,在框316,也可以执行其它动作。例如,可以进行动作来禁止(现在该原子块已经完成执行)针对随后的存储器读操作而更新AMT106。也可以在框316禁止将随后的存储器写操作缓存在AUT表108中。然后,方法300的处理过程在框318结束。
图4是说明处理过程“A”的至少一个实施例的框图,其中,如果在图3的框306(以及视情况而定的可选框308)处的判定结果指示当前指令是一个原子块的存储器读指令,则执行该处理过程“A”。对于这种情况,处理过程前进到框402。在框402,执行该指令以便读取所指示的存储器地址。然后,处理过程前进到框404。
在框404,所指示的存储器地址被添加到地址监控表(“AMT”)106。再次,要注意AMT106是一个逻辑结构。例如,在框404,代替实际修改AMT表中的项以便包括所指定的存储器地址,可以针对不同的实施例来不同地处理框404的过程。仅作为一个实施例,与片上数据高速缓存相关联的状态位可以被切换(toggle)以指示要针对外来的写操作监控该高速缓存线中的存储器地址。在框404处更新了AMT106之后,处理过程返回到图3的框314。
图5是说明了处理过程“B”的至少一个实施例的框图,其中,如果在图3的框310(以及视情况而定的可选框312)处的判定结果指示当前指令是一个原子块的存储器写指令,则执行该处理过程“B”。对于这种情况,处理过程前进到框502。在框502,执行该存储器写指令。然而,该存储器写指令更新AUT108中的项而不是更新存储器。以这种方式,在原子块期间执行的存储器写操作被缓存在AUT108中。
同样,AUT108是一个逻辑结构并且可以被以各种方式用硬件实现。对于至少一个示例性实施例,例如,AUT108可以被实现为门控存储队列。在框502处更新了AUT108之后,处理过程前进到图3的框314。
上述讨论说明了使用AMT106和AUT108以及某些形式的原子块划分,能够支持硬件线程推测。此外,某些指令和状态也可以被集成到这种方案中。共同地,这些要素可以允许推测线程的高效执行以提供广泛的推测线程模型。
图7是说明线程单元904的至少一个实施例的框图,其中,该线程单元904包括逻辑AMT106和AUT108表,以及特定的事务执行状态950。此外,线程单元904能够执行特定指令,使得可以以提供原子块的每个指令的边界处的精确状态的方式来支持该原子块的事务执行。
图7中说明的事务状态950是可选的,如虚线所表示的那样。也就是,该状态可以经由通过指定的存储器地址进行的消息传递而被维持在存储器中,而不是被作为硬件状态维持在执行内核930中。然而,对于至少一个实施例,事务状态950被维持在一个或多个硬件寄存器中。
对于至少一个实施例,维持事务状态950的寄存器包括事务控制寄存器951(这里称为“TCR”)以及事务状态寄存器952(这里称为“TSR”)。该事务控制寄存器控制AMT106和AUT108的更新。该事务状态寄存器可以报告AMT和AUT的状态,并且也可以指示事务失败。
事务控制寄存器951可以包括多种位,这些位当被设置时,引起有关AMT和AUT表106、108的各种类型的行为。事务控制寄存器951可以控制是否对存储器更新进行缓存、以及是否监控存储器引用(memory reference)以用于依赖性检查。例如,该事务控制寄存器可以包括一个或多个位来表示下列每个行为:
●强制重置AUT
●强制重置AMT
●命令更新AMT
●命令对存储器写进行缓存(更新AUT)
对于至少一个实施例,可以由一个位来指示多个行为。例如,事务控制寄存器951中的一个位可以表示应当将AUT和AMT都重置。
对于一个特定实施例,事务控制寄存器951(“TCR”)包括多个字段,取决于在任意给定时间存储在字段中的值,这些字段可以确定AMT和AUT的行为,并且/或者可以影响每个指令的执行。当然,其它实施例也可以利用更多或更少的位。对于事务控制寄存器951的一个实施例,可以如下定义这些字段。特定的位数被提供以仅用于说明的目的,而不应被认为是限制性的。对于在任意长度的寄存器中实现了下述位字段的实施例,下面并未描述的额外字段可以是“保留的”字段。这样的保留位可以被实现为写忽略、读零。
TCR重置位。TCR951的两个一位字段可以是只写位,用于重置和清空AMT和AUT:
AMT清空位(AMT clear bit)(TCR第0位,只写):控制AMT的重置。如果‘1’被写到该位的位置,则清空AMT,使得无有效项。AMT清空位读出为零。
AUT清空位(AUT clear bit)(TCR第1位,只写):控制AUT的重置。如果‘1’被写到该位的位置,则丢弃被缓存的推测存储器更新。AUT清空位读出为零。
TCR更新位。TCR951的两个一位字段可以用于控制关于更新AMT或AUT的指令执行的行为:
AMT更新位(AMT update bit)(TCR第2位):控制AMT的更新。
如果该AMT更新位被设置(值为‘1’),那么针对通过指令读取的每个存储位置更新AMT。如果该AMT更新位未被设置(值为‘0’),则当指令执行时不更新AMT。软件能够切换该位的状态,以使得能够混合受监控的和未监控的存储器引用。如果该AMT更新位被设置而事务失败了(见状态位),那么AMT不需要被更新。
AUT更新位(AUT update bit)(TCR第3位):控制对第3环级(ring-level3)(用户模式)中的存储器更新进行缓存。如果该AUT更新位被设置(值为‘1’),则指令在第3环级中进行的存储器更新被缓存并且不对存储器执行该更新,直到事务提交操作。如果该位未被设置(值为‘0’),则指令进行的存储器更新不被缓存并且像通常一样直接向存储器执行该更新。如果该AUT更新位被设置而事务失败了(见状态位),那么在第3环级中完成的存储器更新不需要被缓存并且可以被简单地丢弃。
可选TCR位。可替换的实现可以规定要在TCR中定义的一个或多个下列字段:
AUT无旁路位(AUT No bypass bit)(TCR第6位):使指令进行的存储器读操作看到该存储位置的值,而无需像使能AUT情况下通常要执行的那样,检查AUT以便进行写后读(read-after-write)旁路。如果在一个实现中不支持该位,那么尝试设置该位(写入值‘1’)将导致设置事务状态寄存器中的模式不支持位;这会迫使活动事务失败。
处理程序中的AUT更新(AUT update in handler)(TCR第7位):实现低于3的环级中的存储器更新。如果AUT使能位和该位均被设置(值为‘1’),则任何环级中的存储器更新均将被缓存在AUT中。在第3环级中对该位的更新被忽略(不改变值)。一旦从第3环级转到较低环级(遇到陷阱/异常/中断),则该位可以被自动清零。如果没有实现该位,则在低于3的环级中尝试对其进行更新可以导致设置事务状态寄存器中的陷阱强制失败位;这可以迫使活动事务失败。
事务状态寄存器952可以包括一个或多个位,以反映与原子块的执行有关的某些状况。事务状态寄存器952的内容可以指示事务的状态并且可以指示事务失败。例如,事务状态寄存器952可以包括一个或多个位来表示下列状况:
●是否发生事务失败
●事务失败(如果发生的话)的起因。该字段的值可以包括溢出、冲突等
●AMT状态。该字段的值可以包括全满、非全满、空、非空等
●AUT状态。该字段的值可以包括全满、非全满、空、非空等
●是否在原子块执行期间采用了陷阱
●是否有陷阱导致事务失败。
对于一个特定实施例,事务状态寄存器952(“TSR”)是包括多个字段的只读寄存器,取决于在任意给定时间存储在字段中的值,这些字段通常可以提供关于AMT、AUT以及当前事务的状况的状态信息。当然,其它实施例可以使用更多或更少的位。对于事务状态寄存器952的一个实施例,可以如下定义这些字段。特定的位数被提供以仅用于说明的目的,而不应被认为是限制性的。对于在任意长度的寄存器中实现了下述位字段的实施例,下面并未描述的额外字段可以是“保留的”字段。这样的保留位可以被实现为写忽略、读零。
对于至少一个实施例,TSR952的第1位指示当前事务是否失败。接下来4位是关于AMT和AUT的状态信息位。第6位指示在有活动事务(AMT和/或AUT非空)的同时发生了陷阱/异常/中断。最后一组的位可以用于指示当前事务已失败并且提供关于失败原因的信息。
在特定情况下,TSR的每个位都可以由硬件来设置。每个位都可被一个或多个事件影响。如果多个事件同时发生,相对于设置位的事件,清空位的事件具有优先级。
事务失败位。如果当前事务失败(设置了最后8个状态位(第6至13位)中的任意一个),则设置事务状态寄存器的第1位。
事务失败位(Transaction Fail Bit)(TSR第0位):指示当前事务已失败。如果该位被设置,则第6至13位中的至少一个也被设置以指示失败的原因。
信息位。TSR的接下来4位是关于AMT和AUT的状况的信息位。如果AUT或AMT二者之一或全部是非空的,则认为事务是活动的;这是由下面定义的非空位指示的。这些位是:
AMT非空位(AMT non-empty bit)(TSR第1位):指示该AMT至少有一个有效项。
AMT全满位(AMT full bit)(TSR第2位):指示该AMT全满或接近全满(精确定义取决于实现)。该位指示随后的对于该AMT的更新很可能导致该结构溢出(如果还没有溢出的话)。
AUT非空位(AUT non-empty bit)(TSR第3位):指示该AUT至少有一个被缓存的存储器更新。
AUT全满位(AUT full bit)(TSR第4位):指示该AUT全满或接近全满(精确定义取决于实现)。该位指示随后的对于该AUT的更新很可能导致该结构溢出(如果还没有溢出的话)。
陷阱位。TSR952的第5位可以用作陷阱位,以指示当AMT106或AUT108非空时发生了陷阱/异常/中断。该位可以由事务清空陷阱位指令(例如,见下面表1中的TRNXOK指令)来清空。如果当陷阱处理程序返回时或者当下一个陷阱/异常/中断发生时,该位仍旧被设置,则会导致陷阱强制失败位被设置并且该事务失败:
陷阱位(Trap bit)(TSR第5位):如果AMT或AUT非空,一旦遇到陷阱/异常/中断,可以由硬件自动设置该位。可以不为用户级处理程序设置该位。事务知晓的处理程序知道它们是事物安全的,可以在进入该处理程序时用事务清空陷阱位指令(例如,见下面表1中的TRNXOK指令)来清空该位。以这种方式,陷阱或异常可以被作为非失败条件来处理,使得当采取陷阱/异常/中断时正在执行的原子块的执行在处理该事件之后可以被恢复执行。
事务失败位。TSR108的接下来8位可以用作指示事务已失败的字段。如果有活动的事务(AUT106和AMT108二者之一或全部为非空)并且下面8位中任意一个被设置,则认为一个事务已失败:
AMT溢出位(AMT overflow bit)(TSR第6位):指示AMT已溢出并且该事务读取的至少一个存储位置还未被记录在AMT中以便进行监控。
AMT一致性冲突位(AMT coherency collision bit)(TSR第7位):指示AMT在一个项和一个对存储器的外部更新之间存在冲突、或可能的冲突(允许保守的近似)。
AUT溢出位(AUT overflow bit)(TSR第8位):指示AUT已溢出并且被认为缓存的至少一个存储器更新已被丢弃。
AUT一致性冲突位(AUT coherency collision bit)(TSR第9位):指示AUT已观察到一个一致性事件,该事件将不允许它完成被缓存的更新。
AUT缓冲器旁路不允许位(AUT buffer bypass not allowedbit)(TSR第10位):如果AUT更新位被清空而同时AUT被使能并且其非空,如果处理器不支持AUT中的直接存储器更新旁路缓存更新,则可以由硬件来设置该位。
AUT失败写后读位(AUT failed RAW bit)(TSR第11位):指示因为所执行的载入操作未能取得从AUT旁路的值以提供正确的写后读语义,或者关于AUT中的更新存在不明确之处并且无法确定该载入操作的正确值,所以该载入操作可能看到不一致的值。如果有不明确之处,则为该载入操作返回的值将是来自存储器的值而不是来自AUT的值。
陷阱强制失败位(Trap Force Failure bit)(TSR第12位):指示已由陷阱/异常/中断强制出现失败而同时AMT或AUT非空。这指示出,由变换到较低环级的动作或者由较低环级内的动作引发的行为导致活动事务失败。因为AUT不为空并且处理器不支持存储器更新旁路缓存更新,所以可以设置该位。当陷阱/异常/中断发生或者发生从陷阱/异常/中断的返回,并且当前设置了陷阱位(TSR第5位)时,也可以由硬件来设置该位。
不支持模式位(Unsupported Mode bit)(TSR第13位):如果对事务控制寄存器的写入试图令处理器处于不支持的模式,则由硬件自动设置该位。
当AMT106被清空时,与AMT106相关联的所有TSR952状态位均可以被自动清零。这样的清空可以是例如响应于将‘1’写入TCR951的AMT清空位或者通过事务提交指令来发生的。
类似地,当AUT108被清空时,与AUT108相关联的所有TSR952状态位均可以被自动清零。这样的清空可以是例如响应于将‘1’写入TCR951的AUT清空位或者通过事务提交指令来发生的。
当AMT106和AUT108二者被同时清空时,或者当AMT106或AUT108二者之一被清空而另一结构为空时,TSR951的所有其余位(即,不直接与AMT106或AUT108相关联的那些位)可以被自动清零。可以通过向TCR951的AMT106清空位和/或AUT108清空位进行写入或者通过事务提交指令来进行该清空。
图7说明了存储在存储系统902中的用户程序960可以包括在实现几个多线程范例中的任意一个的过程中有用的指令。例如,使用这样的指令,程序员可以实现事务执行、SPE、锁忽略、和/或多线程编程范例。
图7用虚线说明了使用任意或全部这样的指令是可选的。根据本发明的至少一个实施例的线程单元904可以解码并执行一个或多个下面在表1中所述的指令,或者叫“原语”。通常,这些指令可以包括下列中的一个或多个:写事务控制寄存器的指令,对提交被缓存的存储器更新进行触发的指令,读事务状态寄存器的指令,和/或清空与陷阱/异常/中断处理相关联的一个事务状态寄存器位的指令。当然,可替换的实施例可以使用比表1中所示的更多或更少的指令,以便实现所述的功能。
表1
Figure GDA00003273059600231
对于至少一个实施例,TRNXSET指令将值写入事务控制寄存器(TCR)951。执行TRNXSET指令可以令事务开始或失败。该指令也可以用于临时禁止监控存储器读(载入)地址。
TRNXSET指令可以用于基于原子块中的存储器指令,通过在TCR951中设置将导致清空AMT106和AUT108的位,以及通过在TCR951中设置将导致更新和检查表106、108的位,来划分事务的起始。作为执行TRNXSET指令的结果写入到TRC951中的值可以基于源寄存器中的一个值。源寄存器的一部分位可以被用作要被写入到TCR中的值。源寄存器中的另一部分位可以被用作保留掩码(更新掩码的反转)。保留掩码中的每一个值为零的位使得TCR中的值被用来自更新值的值更新,而保留掩码中的每一个值为一的位使得TCR中的值被保留为其原先值。TRNXSET指令能够在任意特权级中执行(但是假定它通常只用于CPL3中或者事务知晓的特定陷阱处理程序中)。
TRNXSET指令也能够用于关闭事务内的地址监控(关闭AMT更新),以及稍后重新开启监控,以允许特定的存储器地址被访问而不让AMT监控该地址。这对于以下情况来说是很重要的:实现预测多线程(多标量(multiscalar))执行,使得头令牌(head token)的概念能够被传递给一个预测块而不会导致该块失败。
TRNXSET指令也能够用于通过清空AMT和AUT以及将TCR951设置为“禁止”和“不更新”,来强制令事务失败。
对于至少一个实施例,TRNXCMT指令的执行可以导致处理器904检查事务状态寄存器952(TSR)的值。如果事务失败位未被设置,那么TRNXCMT指令的执行可以导致处理器904尝试对存储器902执行来自AUT108的被缓存的存储器更新,使得它们看起来被原子地执行。
TRNXCMT指令的执行可以导致处理器904清空AMT106和AUT108。这种执行也可以将事务控制寄存器TCR951清为全零的值。TRNXCMT指令可以在源寄存器中返回一个值,以指示它是否成功地执行了来自AUT108的被缓存的更新。如果没能执行该更新,而是丢弃该更新,则处理器904可以用零值来更新源寄存器。如果执行了该更新,则处理器904可以用非零值来更新源寄存器。对于至少一个实施例,如果AUT108为空,则提交可以被认为是成功的,并且可以在源寄存器中返回一个非零值。
TRNXRD指令的执行可以导致处理器904将事务控制寄存器(TCR)951和事务状态寄存器(TSR)952的值读取到目的地寄存器中。对于至少一个实施例,事务控制寄存器951的值被左移某个固定量并且与事务状态寄存器951的值进行或运算,以生成写入到目的地寄存器中的值。
对于至少一个实施例,TRNXOK指令的执行导致处理器904向事务状态寄存器的事务陷阱位(第5位)写入零值。当事务陷阱位被设置时,如果在原子块执行期间采取了陷阱,则陷阱处理程序可以避免强制发生错误。
也就是,程序员可以通过使用TRNXOK指令并通过设置TCR951中的某些位,显式地控制是否在陷阱处理期间更新AUT/AMT。默认情况下,处理器904可以被设计为在关闭对AMT106和AUT108表的更新期间采取陷阱。对于这种默认操作,在原子块期间采取的陷阱终止了该事务并且使得AMT106和AUT108停止。当该陷阱返回时,该事务已经失败了,导致中间状态被丢弃。然而,这种默认操作可以被TRNXOK指令覆盖,这使得当在原子块执行期间采取陷阱时陷阱处理程序能够避免强制事务失败,并且使得在处理在原子块执行期间发生的陷阱或异常的过程中AMT106和AUT108的状态保持不变。对于这种实施例,当陷阱返回时事务并未失败,并且可以用在发生陷阱或异常时存在的精确的处理器状态来恢复该原子块的执行。
对于至少一个实施例,TRNXOK指令的操作允许陷阱处理程序作为该事务的一部分来执行工作。如果TCR951的当前值有相应指示的话,可以在陷阱处理期间更新AMT106和AUT108表。因此,对于至少一个实施例,可以从原子块内为至少一些类的陷阱和异常提供服务。
处理器904的至少一个实施例可以允许原子块的单步执行。这允许从该原子块外部运行单步调试器,同时维持AMT106和AUT108的值。结果是,根据本发明的至少一个实施例,程序员可以单步执行一个原子块并且察看在每个指令结束时的架构状态。这种方式使得能够在原子块内采用传统的软件调试方法。
该特征与在原子块的指令执行期间未定义中间状态的其它方案形成对比。对于这样的方案,在可以为陷阱提供服务或者可以执行单步操作之前,中间状态要么被提交,要么被丢弃。
对于至少另一个实施例,TRNXOK指令可以允许陷阱处理程序作为该事务的一部分来执行工作,但是来自该原子块外部的陷阱处理程序可以直接从/向存储器进行读取和写入,旁路了AMT106和AUT108表。是否将旁路AMT106和AUT108可以由TCR951的值来指示。这种方式允许执行陷阱处理程序而同时它还在该原子块的外部。
总之,表1中列举的这些指令可以被实现为一组指令集扩展,其使得能够将推测线程中的指令块划分为事务块,并令硬件执行该指令以便将更新进行缓存并且要么以后丢弃要么以后原子地执行该更新。所述扩展也可以提供对存储器地址读操作进行监控,以检测外来更新,从而检测存储器依赖性。这些扩展因而允许软件来尝试执行推测的线程。该硬件提供支持以使得推测线程能够高效执行,以支持广泛的推测线程模型。
并不是必须要有一个支持这样的指令的处理器(例如,图7中所示的处理器904)来提供关于推测的事务将成功进行的任何保证。相反,硬件就可以令事务失败,只要它正确地向软件通知了该失败即可。
图6是说明用于确定事务块的执行已失败的机制的至少一个实施例的数据流图。图6示出了两个协作线程,线程A125和线程B126。当然,本领域技术人员可以理解,图6中示出的该机制可以用于任意数目(Y)的协作线程,其中Y≥2。
图6示出了在第一时间,时间t1,第一协作线程125开始执行原子块602。在原子块602执行期间,在时间t2,第一线程125执行特定地址的存储器读指令。在执行该指令时(t2),在图6中被示出为存储器地址“000A”的该地址被输入到AMT106中。
图6示出了在时间t3,第二线程(线程B126)向第一指令读取的那个存储器地址执行写入。第二线程的更新发生在第一线程已读取该存储器地址之后、且在第一线程(线程A125)完成执行之前。硬件注意到了在原子块执行期间的该尝试,即由第二协作线程对已由第一线程读取的地址进行写入,这是因为该尝试被识别为是对AMT106中的一个地址的“外来”写入。这种事件可以触发一个异步事件,以指示原子块602的执行失败。
图6中示出的数据流图仅展示了在原子块执行期间的失败的一个实例。除了对之前读取的存储器地址的外来写入以外的其它事件也可以导致原子块的执行失败。例如,一种这样的事件是AMT106或AUT108的“表全满”或者溢出。例如,另一种这样的事件是AUT108中的写后读(“RAW”)违例。也可以实现其它失败条件,诸如一致性冲突等等。
可以利用各种机制来向软件告知原子块的执行已失败。对于可能导致原子块失败的任意事件,这样的事件可以被线程单元(例如,图2的线程单元104)报告为异步生成事件,例如中断。对于至少一个实施例,失败事件可以触发用户级中断。
实现用户级中断以指示事务执行失败的一种方式在这里被称为用户级享元(fly-wight)中断处理。这种机制可以包括一个信道,其中可以指示某些触发事件。触发事件可以被称为“场景(scenario)”。触发场景可以是架构上定义的一个或多个事件的集合。可替换地,触发场景可以是用户定义的一个或多个事件的集合。当检测到在信道中指定的触发场景时,可以将控制权转移给用户级处理例程。对于这种用户级享元中断处理机制的至少一个实施例的进一步说明,请参见共有未决专利申请Ser.No.______(代理案卷号P14912X),名为“AProgrammable Event Driven Yield Mechanism Which May ActivateService Threads”。
对于在图7中示出的处理器实施例904,可以定义一个或多个场景以支持这里所讨论的事务执行方案的一个或多个实施例。对于至少一个实施例,可以定义一个场景(称为“状态更新场景”)以便当TSR952的内容改变时生成中断。也就是,当TSR952的内容以特定方式被更新时,可以生成中断。
该状态更新场景可以通过用一个掩码监控事务状态寄存器(TSR)来实现。因此该状态更新场景可以与被应用于TSR的一个掩码相关联。如果该掩码和TSR的“与”运算的结果是非零值并且处理器在第3环级中,那么该场景可以触发用户级事件处理程序。该掩码可以被定义为,当TCR952指示事务失败时,可以生成基于状态更新场景的中断。
因此,上述讨论指出,处理器(例如,图7中示出的处理器904)可以令事务失败,只要它能够正确地向软件告知该失败即可。也就是,基于上述硬件方案,并未向程序员保证原子块将成功执行。对于至少一个实施例,处理器904提供了附加的功能,以便程序员当需要时可以利用一个或多个用户级软件指令,这些指令可确保原子块将会完成执行而不会有来自其它协作线程的争用。这种附加的功能在这里被称为“全部停止(stop-the-world)”功能。
即使原子块包括大量存储器指令(例如,载入和/或存储指令),全部停止功能可以被用于确保该原子块执行。即使原子块总是与其它事务冲突,全部停止功能也可以被用于确保该原子块执行。通常,当软件尝试使用上述指令(见表1)来执行推测的代码块,并且已确定由于有限的资源限制或者由于反复性的存储器依赖性违例而导致不太可能成功时,全部停止功能可以用于该软件中。该软件可以启动一个全部停止编程抽象,而无需使用推测线程硬件。
不是依靠诸如AMT106和AUT108这样的逻辑结构,而是可以通过软件层(例如,库或运行时例程)来提供全部停止功能,其中,所述软件层在原子块执行期间利用用户级中断通过挂起所有其它协作线程来确保原子性。全部停止功能可以利用处理器904支持的两个中断场景。
可以用于实现全部停止功能的第一场景是外来更新场景。也就是,该场景提供了如下能力:针对外来更新来监控某个存储器地址,并且如果发生这种更新则生成中断。“外来”更新可以被理解为表示一个存储器地址上的值已由另一个协作线程写入。因此该外来更新场景可以为一个线程提供一种机制,来中断所有其它协作线程,以便在实现基础编程模型上同步。当所有较早的推测任务均已完成并且一个推测任务可以转变为非推测任务时,也可以使用该相同场景以便向该推测任务发出通知。
可以用于实现全部停止功能的第二场景是‘从特权返回’场景。该第二场景是要在控制权从陷阱/异常/中断处理程序返回到用户代码时调用用户处理程序。该场景检测何时发生到第3环级的转变并调用用户级处理程序。这种场景基本上允许每当控制权从陷阱/异常/中断处理程序返回到第3环级时就调用用户级处理程序。该场景使得一个线程能够检查其协作线程当前是否在运行该线程需要与其同步的软件。如果协作线程已经同步而一个线程还在处理程序中或者未被活动地调度,则可能会发生这种情况。
利用这两个场景,程序员可以挂起所有其它线程,以便特定协作线程可以执行原子块,而不会有来自被挂起的协作线程的争用。
要注意的是,全部停止功能是一种实现事务执行而无需上述附加的硬件结构106、108、状态951、952以及指令(见表1)的替代方式(这里称为“硬件”实施例)。这两种方式可以一起使用。如果软件程序能够达到下述概念,即,所执行的代码块的语义表明该代码块是原子的,那么这可以是一个非常理想的编程模型。当根据上述硬件方案的一个实施例,事务执行失败时,全部停止功能可以用于保留所述编程语义。
上述的外来更新和从处理程序返回这两个场景可以用于实现‘全部停止’行为。为此,希望执行原子块的线程可以对一个用于同步的协定存储位置执行调换(swap)。该调换可以向该存储位置写入“忙”值,并且可以检查前一个值是否为“空闲”值。如果前一个值不是“空闲”,则该线程可以重复,直到检测到“空闲”值。
所有的协作线程可以有一种方案来监控该同步位置。对于至少一个实施例,每个协作线程都可以令“外来更新”场景在信道中变成活动的,以便响应于该场景发生的条件而生成中断。对于至少一个实施例,如果“忙”值被写入到该同步位置,则该场景已经被满足,因此,对所有其它协作线程生成用户级中断。(应当注意的是,对于一个可替换的实施例,可以利用经存储器接口的消息传递而不是通过用户级中断机制,来实现类似功能。)每个协作线程的相关联的事件处理程序可以使协作线程进入自旋锁、或其它等待模式,直到该同步位置上的值被设置回“空闲”值。
所有的协作线程也可以令“返回到第3环级”场景在信道中变成活动的。因此,当控制权从陷阱/异常/中断处理程序返回到用户特权级时,协作线程可以被打断,并且调用中断处理程序。一旦满足该场景,就可以生成中断。如果该同步位置的值不是“空闲”,则相关联的中断处理程序可以使协作线程检查该同步位置和自旋锁,或者以其它等待模式来进行等待。
在等待了有限的时间,以令所有其它协作线程有时间观察到该同步事件并停止执行之后,启动该停止全部操作的线程然后能够执行该原子块。在该原子块结束时,该线程可以将空闲值写入同步位置,以便所有协作线程能够继续执行。
这里公开的机制的实施例可以用硬件、软件、固件、或这样的实现方式的组合来实现。本发明的实施例可以被实现为在可编程系统上执行的计算机程序,其中所述可编程系统包括至少一个处理器、数据存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备、以及至少一个输出设备。程序代码可以被应用于输入数据以执行这里所述的功能并生成输出信息。输出信息可以被以已知的方式应用于一个或多个输出设备。为了该应用,处理系统包括具有处理器的任意系统,所述处理器例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)、或微处理器。
所述程序可以用高级过程的或面向对象的编程语言来实现,以与处理系统进行通信。如果需要的话,所述程序也可以用汇编或机器语言来实现。事实上,这里所述的机制的范围并不限于任何特定的编程语言。无论如何,该语言可以是编译语言或解释语言。
所述程序可以被存储在通用或专用可编程处理系统可读的存储介质或设备(例如,硬盘驱动器、软盘驱动器、只读存储器(ROM)、CD-ROM设备、闪存设备、数字通用光盘(DVD)、或其它存储设备)上。当处理系统读取存储介质或设备以执行这里所述的过程时,可由该处理系统中的处理器存取的指令用于配置和操作该处理系统。本发明的实施例也可以被认为是被实现为机器可读存储介质,其被配置为与处理系统一起使用,其中这样配置的存储介质使得该处理系统以特定或预定方式操作以执行这里所述的功能。
图7中示出了一个这样类型的处理系统的例子。系统900表示基于英特尔公司提供的
Figure GDA00003273059600311
Figure GDA00003273059600312
Pro、
Figure GDA00003273059600313
II、
Figure GDA00003273059600314
III、
Figure GDA00003273059600315
4、和
Figure GDA00003273059600316
以及
Figure GDA00003273059600317
2微处理器的处理系统,尽管也可以使用其它系统(包括具有其它微处理器的个人计算机(PC)、工程工作站、机顶盒等等)。在一个实施例中,样本系统900可以执行微软公司提供的一个版本的
Figure GDA00003273059600318
操作系统,尽管也可以使用例如其它操作系统和图形用户界面。
图7示出了能够执行所公开的技术的处理系统900可以包括存储系统940和处理器904。存储系统940可以包括存储器902以及一个或多个片上或片外高速缓存。例如,存储系统940可以包括数据高速缓存940和/或指令高速缓存944。
存储系统940可以存储用于控制处理器904的操作的指令910和/或数据912。指令910和/或数据912可以包括用于执行这里所述的任意或全部技术的代码。存储系统940是要作为处理器的概括表示,并且可以包括多种形式的存储器,诸如硬盘、CD-ROM、随机存取存储器(RAM)、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)等,以及相关电路。
图7示出了处理器904可以包括前端920。前端920可以包括取指和解码逻辑。例如,前端920可以包括逻辑上独立的下一指令指针和取指逻辑320,以获取每个线程上下文的指令,即使多个逻辑程序装置可以被实现在单个物理的取指/解码单元322中也是如此。取指/解码单元322可以包括解码逻辑以对指令进行解码,所述指令诸如上述的TRNXSET、TRNXCMT、TRNXTRD和/或TRNXOK指令。响应于接收到所述指令之一,解码逻辑可以向执行内核930发送一个或多个信号,所述信号使得执行内核930执行期望的操作。(在前面结合对表1的论述,阐述了与每个这种指令的至少一个实施例相关联的操作)。
对于图7中所示的多程序装置系统900的一个SMT实施例,术语“程序装置”至少包含用于一个线程上下文的下一指令指针和取指逻辑320,以及用于该线程上下文的至少一些相关联的架构状态。应注意的是,SMT系统900的程序装置并不需要是对称的。例如,同一个物理内核904的两个SMT程序装置在它们各自维护的架构状态信息的数量上可以不同。
因此,对于至少一个实施例,多程序装置系统900是支持并发多线程的单核处理器904。对于这种实施例,每个程序装置是一个逻辑处理器,具有自己的指令下一指令指针和取指逻辑320以及自己的架构状态信息,尽管由同一个物理处理器内核304执行所有的线程指令。对于这种实施例,尽管该单个处理器内核的执行资源可以在并发执行的线程之间共享,逻辑处理器维持其自己版本的架构状态。
图7中所示的系统900的至少一个可替换的实施例是基于多核处理器(例如,见图2中所示的处理器200)。这样的系统可以包括两个或更多个单独的物理处理器(例如,见图2中的104-104n),每一个都能够执行不同的线程,使得多个不同线程中的至少一部分的执行可以是同时进行的。每个处理器包括物理上独立的取指单元322,用于获取其相应线程的指令信息。在每个处理器执行单个线程的实施例中,取指/解码单元322实现了单个的下一指令指针和取指逻辑320。然而,在每个处理器支持多个线程上下文的实施例中,取指/解码单元322为每个所支持的线程上下文实现了不同的下一指令指针和取指逻辑320。处理器904中额外的下一指令指针和取指逻辑320的可选性在图7中用点线表示。
尽管已经示出和描述了本发明的特定实施例,但是对本领域技术人员来说显而易见的是,在不背离所附权利要求的范围的情况下,可以做出许多改变和变形。因此,本领域技术人员将会认识到,在不背离本发明的更广方面的情况下,可以做出许多改变和变形。所附权利要求是要在其范围内涵盖落入本发明的真正范围内的所有这样的改变和变型。

Claims (9)

1.一种用于原子地执行指令块的方法,包括:
并发地执行对存储器的公共逻辑视图进行共享的多个线程;
挂起所述多个线程中除第一线程以外的所有其它线程的执行,以便所述第一线程能够原子地执行指令块;其中,所述挂起包括:
由所述第一线程向被所述多个线程共享的预定存储位置写入第一预定值,并且
响应于写入到所述预定存储位置,对其余的每个线程生成中断,其中,其余的每个线程用于响应于所述中断而检查存储在所述预定存储位置中的值,并且用于如果所述预定存储位置包含所述第一预定值则挂起自己的执行;以及
在所述第一线程完成所述指令块的原子执行之后,通过向所述预定存储位置写入第二预定值,来恢复所述其它线程。
2.根据权利要求1所述的方法,其中:
由包括支持事务执行的硬件的多线程处理器来执行所述方法。
3.根据权利要求2所述的方法,其中:
所述硬件包括用于对指令原子块的写操作进行缓存的存储缓冲区。
4.根据权利要求2所述的方法,其中:
所述硬件包括用于维持指令原子块的存储器读操作的地址的存储区。
5.根据权利要求1所述的方法,其中:
所述挂起是响应于用户级软件指令而被启动的。
6.一种用于执行指令原子块的装置,包括:
执行单元,用于执行原子块;
事务状态寄存器,用于保持陷阱位,其中,如果在所述原子块的执行期间发生中断,则该陷阱位被设置;
监控部件,用于监控在所述原子块的执行期间加载的地址;
缓存部件,用于对在所述原子块的执行期间的写操作进行缓存,
其中,所述监控部件和所述缓存部件用于在对在所述原子块的执行期间发生的所述中断进行处理期间维持持久状态,并且其中,所述执行单元用于,如果所述执行单元在进入处理程序以处理所述中断时用事务清空陷阱位指令来清空所述陷阱位,则在处理所述中断之后,恢复当采取所述中断时正在执行的所述原子块的执行。
7.根据权利要求6所述的装置,其中:
所述监控部件包括用于维持地址监控表(AMT)的存储区,并且所述缓存部件包括用于维持地址更新表(AUT)的存储区。
8.一种用于原子地执行指令块的装置,包括:
用于并发地执行对存储器的公共逻辑视图进行共享的多个线程的模块;
用于挂起所述多个线程中除第一线程以外的所有其它线程的执行,以便所述第一线程能够原子地执行指令块的模块,其中,所述用于挂起的模块包括:
用于由所述第一线程向被所述多个线程共享的预定存储位置写入第一预定值的模块,以及
用于响应于写入到所述预定存储位置,对其余的每个线程生成中断的模块,其中,其余的每个线程用于响应于所述中断而检查存储在所述预定存储位置中的值,并且用于如果所述预定存储位置包含所述第一预定值则挂起自己的执行;以及
用于在所述第一线程完成所述指令块的原子执行之后,通过向所述预定存储位置写入第二预定值,来恢复所述其它线程的模块。
9.根据权利要求8所述的装置,其中:
所述挂起是响应于用户级软件指令而被启动的。
CN201010175491.5A 2005-06-23 2006-06-23 用于执行指令原子块的方法和装置 Expired - Fee Related CN101833475B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/165,639 US7882339B2 (en) 2005-06-23 2005-06-23 Primitives to enhance thread-level speculation
US11/165,639 2005-06-23

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN200680022486.2A Division CN101203831B (zh) 2005-06-23 2006-06-23 用于对存储器更新进行缓存的装置、方法和系统

Publications (2)

Publication Number Publication Date
CN101833475A CN101833475A (zh) 2010-09-15
CN101833475B true CN101833475B (zh) 2014-04-16

Family

ID=37433515

Family Applications (2)

Application Number Title Priority Date Filing Date
CN200680022486.2A Expired - Fee Related CN101203831B (zh) 2005-06-23 2006-06-23 用于对存储器更新进行缓存的装置、方法和系统
CN201010175491.5A Expired - Fee Related CN101833475B (zh) 2005-06-23 2006-06-23 用于执行指令原子块的方法和装置

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN200680022486.2A Expired - Fee Related CN101203831B (zh) 2005-06-23 2006-06-23 用于对存储器更新进行缓存的装置、方法和系统

Country Status (6)

Country Link
US (4) US7882339B2 (zh)
JP (4) JP5415069B2 (zh)
CN (2) CN101203831B (zh)
DE (2) DE112006001698T5 (zh)
GB (2) GB2457181B (zh)
WO (1) WO2007002550A2 (zh)

Families Citing this family (124)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8607241B2 (en) 2004-06-30 2013-12-10 Intel Corporation Compare and exchange operation using sleep-wakeup mechanism
US7882339B2 (en) * 2005-06-23 2011-02-01 Intel Corporation Primitives to enhance thread-level speculation
US7865894B1 (en) * 2005-12-19 2011-01-04 Nvidia Corporation Distributing processing tasks within a processor
US8683143B2 (en) * 2005-12-30 2014-03-25 Intel Corporation Unbounded transactional memory systems
US7350027B2 (en) * 2006-02-10 2008-03-25 International Business Machines Corporation Architectural support for thread level speculative execution
US8180977B2 (en) * 2006-03-30 2012-05-15 Intel Corporation Transactional memory in out-of-order processors
US8180967B2 (en) * 2006-03-30 2012-05-15 Intel Corporation Transactional memory virtualization
US7620850B2 (en) * 2006-06-09 2009-11-17 Sun Microsystems, Inc. Breakpoints in a transactional memory-based representation of code
US8307346B2 (en) * 2006-06-09 2012-11-06 Oracle America, Inc. Atomic groups for debugging
US7809926B2 (en) * 2006-11-03 2010-10-05 Cornell Research Foundation, Inc. Systems and methods for reconfiguring on-chip multiprocessors
US8190859B2 (en) * 2006-11-13 2012-05-29 Intel Corporation Critical section detection and prediction mechanism for hardware lock elision
US8719807B2 (en) * 2006-12-28 2014-05-06 Intel Corporation Handling precompiled binaries in a hardware accelerated software transactional memory system
US20080184011A1 (en) * 2007-01-30 2008-07-31 Nema Labs Ab Speculative Throughput Computing
US20080222616A1 (en) * 2007-03-05 2008-09-11 Innaworks Development Limited Software translation
US8095750B2 (en) * 2007-05-14 2012-01-10 International Business Machines Corporation Transactional memory system with fast processing of common conflicts
US8095741B2 (en) * 2007-05-14 2012-01-10 International Business Machines Corporation Transactional memory computing system with support for chained transactions
US8117403B2 (en) * 2007-05-14 2012-02-14 International Business Machines Corporation Transactional memory system which employs thread assists using address history tables
US9009452B2 (en) * 2007-05-14 2015-04-14 International Business Machines Corporation Computing system with transactional memory using millicode assists
US20090133022A1 (en) * 2007-11-15 2009-05-21 Karim Faraydon O Multiprocessing apparatus, system and method
US9081687B2 (en) * 2007-12-28 2015-07-14 Intel Corporation Method and apparatus for MONITOR and MWAIT in a distributed cache architecture
US8407425B2 (en) * 2007-12-28 2013-03-26 Intel Corporation Obscuring memory access patterns in conjunction with deadlock detection or avoidance
US10387151B2 (en) 2007-12-31 2019-08-20 Intel Corporation Processor and method for tracking progress of gathering/scattering data element pairs in different cache memory banks
US8447962B2 (en) * 2009-12-22 2013-05-21 Intel Corporation Gathering and scattering multiple data elements
US7984273B2 (en) 2007-12-31 2011-07-19 Intel Corporation System and method for using a mask register to track progress of gathering elements from memory
US20090177871A1 (en) * 2008-01-08 2009-07-09 Von Praun Christoph Architectural support for software thread-level speculation
US9128750B1 (en) * 2008-03-03 2015-09-08 Parakinetics Inc. System and method for supporting multi-threaded transactions
US8239843B2 (en) * 2008-03-11 2012-08-07 Oracle America, Inc. Value predictable variable scoping for speculative automatic parallelization with transactional memory
BRPI0920541A2 (pt) 2008-11-24 2018-11-06 Intel Corp sistemas, métodos e aparelho para decompor um programa sequencial em multicadeias, executar as ditas cadeias, e reconstruir a execução sequencial
US9189233B2 (en) 2008-11-24 2015-11-17 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US10621092B2 (en) 2008-11-24 2020-04-14 Intel Corporation Merging level cache and data cache units having indicator bits related to speculative execution
US9672019B2 (en) 2008-11-24 2017-06-06 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US9785462B2 (en) * 2008-12-30 2017-10-10 Intel Corporation Registering a user-handler in hardware for transactional memory event handling
US8145890B2 (en) * 2009-02-12 2012-03-27 Via Technologies, Inc. Pipelined microprocessor with fast conditional branch instructions based on static microcode-implemented instruction state
US7979675B2 (en) * 2009-02-12 2011-07-12 Via Technologies, Inc. Pipelined microprocessor with fast non-selective correct conditional branch instruction resolution
US8281185B2 (en) * 2009-06-30 2012-10-02 Oracle America, Inc. Advice-based feedback for transactional execution
US8566524B2 (en) 2009-08-31 2013-10-22 International Business Machines Corporation Transactional memory system with efficient cache support
US8255626B2 (en) * 2009-12-09 2012-08-28 International Business Machines Corporation Atomic commit predicated on consistency of watches
US8095824B2 (en) 2009-12-15 2012-01-10 Intel Corporation Performing mode switching in an unbounded transactional memory (UTM) system
US8316194B2 (en) * 2009-12-15 2012-11-20 Intel Corporation Mechanisms to accelerate transactions using buffered stores
US8464035B2 (en) * 2009-12-18 2013-06-11 Intel Corporation Instruction for enabling a processor wait state
US10175990B2 (en) 2009-12-22 2019-01-08 Intel Corporation Gathering and scattering multiple data elements
JP5673666B2 (ja) * 2010-02-23 2015-02-18 富士通株式会社 マルチコアプロセッサシステム、割込プログラム、および割込方法
CN104794006A (zh) * 2010-02-23 2015-07-22 富士通株式会社 多核处理器系统、中断程序、以及中断方法
US8739164B2 (en) * 2010-02-24 2014-05-27 Advanced Micro Devices, Inc. Automatic suspend atomic hardware transactional memory in response to detecting an implicit suspend condition and resume thereof
US9626187B2 (en) 2010-05-27 2017-04-18 International Business Machines Corporation Transactional memory system supporting unbroken suspended execution
CN101882091A (zh) * 2010-06-22 2010-11-10 北京北大众志微系统科技有限责任公司 线程局部存储实现方法和装置
US20110320781A1 (en) * 2010-06-29 2011-12-29 Wei Liu Dynamic data synchronization in thread-level speculation
US8407389B2 (en) * 2010-07-20 2013-03-26 International Business Machines Corporation Atomic operations with page migration in PCIe
US9052890B2 (en) 2010-09-25 2015-06-09 Intel Corporation Execute at commit state update instructions, apparatus, methods, and systems
US20120079245A1 (en) * 2010-09-25 2012-03-29 Cheng Wang Dynamic optimization for conditional commit
US8424015B2 (en) * 2010-09-30 2013-04-16 International Business Machines Corporation Transactional memory preemption mechanism
US8713259B2 (en) * 2010-11-17 2014-04-29 Advanced Micro Devices, Inc. Method and apparatus for reacquiring lines in a cache
US8904109B2 (en) 2011-01-28 2014-12-02 Freescale Semiconductor, Inc. Selective cache access control apparatus and method thereof
GB2489000B (en) 2011-03-14 2019-09-11 Advanced Risc Mach Ltd Diagnosing code using single step execution
US9043796B2 (en) * 2011-04-07 2015-05-26 Microsoft Technology Licensing, Llc Asynchronous callback driven messaging request completion notification
US8756405B2 (en) * 2011-05-09 2014-06-17 Freescale Semiconductor, Inc. Selective routing of local memory accesses and device thereof
WO2013048468A1 (en) 2011-09-30 2013-04-04 Intel Corporation Instruction and logic to perform dynamic binary translation
US10387324B2 (en) * 2011-12-08 2019-08-20 Intel Corporation Method, apparatus, and system for efficiently handling multiple virtual address mappings during transactional execution canceling the transactional execution upon conflict between physical addresses of transactional accesses within the transactional execution
US8892946B2 (en) 2011-12-15 2014-11-18 International Business Machines Corporation Verifying speculative multithreading in an application
WO2013115818A1 (en) * 2012-02-02 2013-08-08 Intel Corporation A method, apparatus, and system for transactional speculation control instructions
US8972697B2 (en) 2012-06-02 2015-03-03 Intel Corporation Gather using index array and finite state machine
WO2013180738A1 (en) 2012-06-02 2013-12-05 Intel Corporation Scatter using index array and finite state machine
US9448796B2 (en) 2012-06-15 2016-09-20 International Business Machines Corporation Restricted instructions in transactional execution
US9384004B2 (en) 2012-06-15 2016-07-05 International Business Machines Corporation Randomized testing within transactional execution
US9436477B2 (en) 2012-06-15 2016-09-06 International Business Machines Corporation Transaction abort instruction
US20130339680A1 (en) 2012-06-15 2013-12-19 International Business Machines Corporation Nontransactional store instruction
US10437602B2 (en) * 2012-06-15 2019-10-08 International Business Machines Corporation Program interruption filtering in transactional execution
US9348642B2 (en) 2012-06-15 2016-05-24 International Business Machines Corporation Transaction begin/end instructions
US8682877B2 (en) 2012-06-15 2014-03-25 International Business Machines Corporation Constrained transaction execution
US9772854B2 (en) 2012-06-15 2017-09-26 International Business Machines Corporation Selectively controlling instruction execution in transactional processing
US9740549B2 (en) 2012-06-15 2017-08-22 International Business Machines Corporation Facilitating transaction completion subsequent to repeated aborts of the transaction
US8688661B2 (en) 2012-06-15 2014-04-01 International Business Machines Corporation Transactional processing
US9336046B2 (en) 2012-06-15 2016-05-10 International Business Machines Corporation Transaction abort processing
US9361115B2 (en) 2012-06-15 2016-06-07 International Business Machines Corporation Saving/restoring selected registers in transactional processing
CN105760265B (zh) * 2012-06-29 2019-11-05 英特尔公司 用于测试事务性执行状态的指令和逻辑
US9430166B2 (en) 2012-08-10 2016-08-30 International Business Machines Corporation Interaction of transactional storage accesses with other atomic semantics
US9361103B2 (en) * 2012-11-02 2016-06-07 Advanced Micro Devices, Inc. Store replay policy
US10133577B2 (en) 2012-12-19 2018-11-20 Intel Corporation Vector mask driven clock gating for power efficiency of a processor
US9547594B2 (en) * 2013-03-15 2017-01-17 Intel Corporation Instructions to mark beginning and end of non transactional code region requiring write back to persistent storage
US9460145B2 (en) 2013-03-26 2016-10-04 International Business Machines Corporation Transactional lock elision with delayed lock checking
US9891936B2 (en) 2013-09-27 2018-02-13 Intel Corporation Method and apparatus for page-level monitoring
US9311260B2 (en) * 2013-12-09 2016-04-12 Jack Mason Context preservation during thread level speculative execution
US9678834B2 (en) * 2014-10-20 2017-06-13 Ab Initio Technology, Llc Recovery and fault-tolerance under computational indeterminism
JP5867630B2 (ja) * 2015-01-05 2016-02-24 富士通株式会社 マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラム
US9749548B2 (en) 2015-01-22 2017-08-29 Google Inc. Virtual linebuffers for image signal processors
GB2535213B (en) * 2015-02-13 2021-10-06 Advanced Risc Mach Ltd An apparatus and method for controlling debugging of program instructions including a transaction
GB2535212B (en) 2015-02-13 2021-08-04 Advanced Risc Mach Ltd An apparatus and method for controlling debugging of program instructions including a transaction
US10095479B2 (en) 2015-04-23 2018-10-09 Google Llc Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure
US9769356B2 (en) 2015-04-23 2017-09-19 Google Inc. Two dimensional shift array for image processor
US9756268B2 (en) 2015-04-23 2017-09-05 Google Inc. Line buffer unit for image processor
US9785423B2 (en) 2015-04-23 2017-10-10 Google Inc. Compiler for translating between a virtual image processor instruction set architecture (ISA) and target hardware having a two-dimensional shift array structure
US9965824B2 (en) 2015-04-23 2018-05-08 Google Llc Architecture for high performance, power efficient, programmable image processing
US10291813B2 (en) 2015-04-23 2019-05-14 Google Llc Sheet generator for image processor
US9772852B2 (en) 2015-04-23 2017-09-26 Google Inc. Energy efficient processor core architecture for image processor
US9858074B2 (en) * 2015-06-26 2018-01-02 International Business Machines Corporation Non-default instruction handling within transaction
US20160378488A1 (en) * 2015-06-26 2016-12-29 Microsoft Technology Licensing, Llc Access to target address
US10303477B2 (en) * 2015-06-26 2019-05-28 Intel Corporation Persistent commit processors, methods, systems, and instructions
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US11755484B2 (en) 2015-06-26 2023-09-12 Microsoft Technology Licensing, Llc Instruction block allocation
US10776115B2 (en) * 2015-09-19 2020-09-15 Microsoft Technology Licensing, Llc Debug support for block-based processor
US10313641B2 (en) 2015-12-04 2019-06-04 Google Llc Shift register with reduced wiring complexity
US9830150B2 (en) 2015-12-04 2017-11-28 Google Llc Multi-functional execution lane for image processor
JP6512087B2 (ja) * 2015-12-09 2019-05-15 株式会社デンソー 車両用制御装置
US10318295B2 (en) * 2015-12-22 2019-06-11 Intel Corporation Transaction end plus commit to persistence instructions, processors, methods, and systems
US9898351B2 (en) 2015-12-24 2018-02-20 Intel Corporation Method and apparatus for user-level thread synchronization with a monitor and MWAIT architecture
CN111858256B (zh) * 2015-12-25 2024-05-28 北京忆芯科技有限公司 命令队列监控电路、数据交换方法及其设备
US11188336B2 (en) 2015-12-28 2021-11-30 Qualcomm Incorporated Replay of partially executed instruction blocks in a processor-based system employing a block-atomic execution model
US10387988B2 (en) 2016-02-26 2019-08-20 Google Llc Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform
US10204396B2 (en) 2016-02-26 2019-02-12 Google Llc Compiler managed memory for image processor
US10380969B2 (en) 2016-02-28 2019-08-13 Google Llc Macro I/O unit for image processor
US20180005059A1 (en) 2016-07-01 2018-01-04 Google Inc. Statistics Operations On Two Dimensional Image Processor
US20180005346A1 (en) 2016-07-01 2018-01-04 Google Inc. Core Processes For Block Operations On An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register
US20180007302A1 (en) 2016-07-01 2018-01-04 Google Inc. Block Operations For An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register
US10546211B2 (en) 2016-07-01 2020-01-28 Google Llc Convolutional neural network on programmable two dimensional image processor
CN109508239A (zh) * 2017-09-15 2019-03-22 北京国双科技有限公司 进程的控制方法及装置
EP3462312B1 (en) * 2017-09-29 2022-08-17 ARM Limited Permitting unaborted processing of transaction after exception mask update instruction
US10853223B2 (en) * 2018-01-19 2020-12-01 Arm Limited Simulation of transactions
CN109324838B (zh) * 2018-08-31 2022-05-10 深圳市元征科技股份有限公司 单片机程序的执行方法、执行装置及终端
US10761822B1 (en) * 2018-12-12 2020-09-01 Amazon Technologies, Inc. Synchronization of computation engines with non-blocking instructions
US10521383B1 (en) * 2018-12-17 2019-12-31 Micron Technology, Inc. Handling operation collisions in a non-volatile memory
US20220300610A1 (en) * 2019-06-20 2022-09-22 Technion Research & Development Foundation Limited Secured speculative execution processor
CN110960857B (zh) * 2019-12-03 2023-06-02 米哈游科技(上海)有限公司 一种游戏数据监控方法、装置、电子设备及存储介质
US11954465B2 (en) * 2021-12-13 2024-04-09 Intel Corporation Apparatuses, methods, computer programs, and data carriers for indicating and detecting atomic operations
WO2023205387A1 (en) * 2022-04-21 2023-10-26 Microchip Technology Incorporated Atomic instruction set and architecture with bus arbitration locking

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5966530A (en) * 1995-02-14 1999-10-12 Fujitsu, Ltd. Structure and method for instruction boundary machine state restoration
CN1281613A (zh) * 1997-10-07 2001-01-24 卡纳尔股份有限公司 多线程数据处理器

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4819234A (en) * 1987-05-01 1989-04-04 Prime Computer, Inc. Operating system debugger
US5428761A (en) * 1992-03-12 1995-06-27 Digital Equipment Corporation System for achieving atomic non-sequential multi-word operations in shared memory
JPH0615138U (ja) * 1992-07-22 1994-02-25 株式会社熊谷組 中央処理装置
CN1280714C (zh) * 1996-08-27 2006-10-18 松下电器产业株式会社 独立处理多个指令流、软式控制各指令流的处理功能的多线程处理器
US6795966B1 (en) * 1998-05-15 2004-09-21 Vmware, Inc. Mechanism for restoring, porting, replicating and checkpointing computer systems using state extraction
US6401155B1 (en) * 1998-12-22 2002-06-04 Philips Electronics North America Corporation Interrupt/software-controlled thread processing
US6892258B1 (en) * 2001-10-26 2005-05-10 Lsi Logic Corporation Hardware semaphores for a multi-processor system within a shared memory architecture
US6799236B1 (en) * 2001-11-20 2004-09-28 Sun Microsystems, Inc. Methods and apparatus for executing code while avoiding interference
US7657880B2 (en) 2003-01-31 2010-02-02 Intel Corporation Safe store for speculative helper threads
US7269717B2 (en) * 2003-02-13 2007-09-11 Sun Microsystems, Inc. Method for reducing lock manipulation overhead during access to critical code sections
US6862664B2 (en) * 2003-02-13 2005-03-01 Sun Microsystems, Inc. Method and apparatus for avoiding locks by speculatively executing critical sections
US7418577B2 (en) 2003-02-13 2008-08-26 Sun Microsystems, Inc. Fail instruction to support transactional program execution
US20040163082A1 (en) 2003-02-13 2004-08-19 Marc Tremblay Commit instruction to support transactional program execution
WO2005062170A2 (en) * 2003-12-18 2005-07-07 Koninklijke Philips Electronics N.V. Method and compilation system for translating source code into executable code
US7984248B2 (en) * 2004-12-29 2011-07-19 Intel Corporation Transaction based shared data operations in a multiprocessor environment
US7882339B2 (en) * 2005-06-23 2011-02-01 Intel Corporation Primitives to enhance thread-level speculation

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5966530A (en) * 1995-02-14 1999-10-12 Fujitsu, Ltd. Structure and method for instruction boundary machine state restoration
CN1281613A (zh) * 1997-10-07 2001-01-24 卡纳尔股份有限公司 多线程数据处理器

Also Published As

Publication number Publication date
CN101203831A (zh) 2008-06-18
US20130073835A1 (en) 2013-03-21
JP2011227934A (ja) 2011-11-10
WO2007002550A2 (en) 2007-01-04
JP5479416B2 (ja) 2014-04-23
GB0907512D0 (en) 2009-06-10
JP2009501366A (ja) 2009-01-15
GB2457181B (en) 2009-12-23
US20120084536A1 (en) 2012-04-05
GB2441665B (en) 2009-12-09
CN101203831B (zh) 2011-09-14
JP2013168168A (ja) 2013-08-29
GB0721281D0 (en) 2007-12-12
JP2015111439A (ja) 2015-06-18
DE112006004265A5 (de) 2013-07-04
GB2457181A (en) 2009-08-12
US8332619B2 (en) 2012-12-11
GB2441665A (en) 2008-03-12
WO2007002550A3 (en) 2007-05-31
US7882339B2 (en) 2011-02-01
US20110087867A1 (en) 2011-04-14
DE112006001698T5 (de) 2008-04-30
US20060294326A1 (en) 2006-12-28
JP5415069B2 (ja) 2014-02-12
CN101833475A (zh) 2010-09-15

Similar Documents

Publication Publication Date Title
CN101833475B (zh) 用于执行指令原子块的方法和装置
US6675192B2 (en) Temporary halting of thread execution until monitoring of armed events to memory location identified in working registers
US7584332B2 (en) Computer systems with lightweight multi-threaded architectures
US7178062B1 (en) Methods and apparatus for executing code while avoiding interference
Rossbach et al. TxLinux: Using and managing hardware transactional memory in an operating system
US8468526B2 (en) Concurrent thread execution using user-level asynchronous signaling
US7962923B2 (en) System and method for generating a lock-free dual queue
US7500087B2 (en) Synchronization of parallel processes using speculative execution of synchronization instructions
US20040073906A1 (en) Processor with speculative multithreading and hardware to support multithreading software {including global registers and busy bit memory elements}
JP4376692B2 (ja) 情報処理装置、プロセッサ、プロセッサの制御方法、情報処理装置の制御方法、キャッシュメモリ
JP2005284749A (ja) 並列処理コンピュータ
JP2001188685A (ja) オブジェクトのロック管理方法及び装置
US20110145802A1 (en) Accelerating unbounded memory transactions using nested cache resident transactions
CN107003896B (zh) 具有共享事务处理资源的装置和数据处理方法
US11579873B2 (en) Handling load-exclusive instructions in apparatus having support for transactional memory
JP3798726B2 (ja) メモリ・アクセス順序付け及びロック管理の方法、装置、プログラム及び記録媒体
CN118260051A (zh) 线程访问控制设备、方法与计算设备
Mowry Architectural Support for Thread-Level Data Speculation
Harris et al. Hardware-Supported Transactional Memory

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20140416

Termination date: 20170623