CN101495968B - 用于软件事务存储器系统的硬件加速 - Google Patents
用于软件事务存储器系统的硬件加速 Download PDFInfo
- Publication number
- CN101495968B CN101495968B CN2007800020179A CN200780002017A CN101495968B CN 101495968 B CN101495968 B CN 101495968B CN 2007800020179 A CN2007800020179 A CN 2007800020179A CN 200780002017 A CN200780002017 A CN 200780002017A CN 101495968 B CN101495968 B CN 101495968B
- Authority
- CN
- China
- Prior art keywords
- access
- affairs
- locking
- unit
- value
- 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
Links
- 230000015654 memory Effects 0.000 title claims abstract description 73
- 230000001133 acceleration Effects 0.000 title claims description 10
- 238000000034 method Methods 0.000 claims abstract description 97
- 230000004888 barrier function Effects 0.000 claims abstract description 53
- 238000003860 storage Methods 0.000 claims description 94
- 230000008569 process Effects 0.000 claims description 24
- 230000014509 gene expression Effects 0.000 claims description 17
- 238000012545 processing Methods 0.000 claims description 14
- 238000007689 inspection Methods 0.000 claims description 4
- 230000003068 static effect Effects 0.000 claims description 3
- 230000003139 buffering effect Effects 0.000 claims 1
- 238000010200 validation analysis Methods 0.000 abstract 3
- 230000006870 function Effects 0.000 description 8
- 230000007246 mechanism Effects 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 230000001360 synchronised effect Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 238000012856 packing Methods 0.000 description 3
- 101100016034 Nicotiana tabacum APIC gene Proteins 0.000 description 2
- 230000009471 action Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000007599 discharging Methods 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 230000014759 maintenance of location Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 238000005469 granulation Methods 0.000 description 1
- 230000003179 granulation Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4204—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
- G06F13/4234—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being a memory bus
- G06F13/4243—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being a memory bus with synchronous protocol
-
- 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/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Memory System (AREA)
Abstract
一种用于加速事务的执行的方法和装置。仅在第一次在事务中访问共享存储器行时,调用/执行与事务中的存储器访问所存取的共享存储器行相关联的屏障。提供了硬件支持,例如事务字段/事务位,以确定访问是否是在事务的未决状态期间对共享存储器行的第一次访问。另外,在积极操作模式中,在提交时不对表示存储在共享存储器行中的元素的版本的版本号进行存储和有效确认,以节省有效确认的成本。而且,即使在谨慎模式中,如果在事务的执行期间没有出现对所访问的共享存储器行的驱逐,则其存储版本号以执行有效确认,不会造成有效确认的开支。
Description
技术领域
本发明涉及处理器执行领域,具体而言,涉及事务的执行(transactionalexecution)的加速。
背景技术
在半导体加工工艺和逻辑设计中的进展已经实现了在集成电路器件上可以存在的逻辑的数量的增加。作为结果,计算机系统结构已经从系统中的单个或多个集成电路发展为存在于单个集成电路上的多个内核及多个逻辑处理器。集成电路通常包括单个处理器管芯,其中,该处理器管芯可以包括任何数量的内核或逻辑处理器。
作为实例,单个集成电路可以具有一个或多个内核。术语“内核”通常指的是在集成电路上用以保持独立架构状态的逻辑的能力,在此,每一个独立架构状态都与至少一些专用执行资源相关联。作为另一个实例,单个集成电路或单个内核可以具有多个逻辑处理器,用于执行多个软件线程,其也称为多线程集成电路或多线程内核。多个逻辑处理器常常共享公共的数据高速缓存、指令高速缓存、执行单元、分支预测器、控制逻辑、总线接口及其它处理器资源,同时为每一个逻辑处理器保留唯一性的架构状态。
在集成电路上的不断增加的内核和逻辑处理器数量使得能够执行更多软件线程。然而,在可同时执行的软件线程数量的增加也产生了使在多个软件线程之间共享的数据同步的问题。在多内核或多逻辑处理器系统中用于访问共享数据的常见解决方法包括使用锁定(lock)来确保在对共享数据的多次访问之间的互斥。然而,不断提高的执行多个软件线程的能力有可能会导致对执行的错误争用和错误串行化。
另一种解决方法是使用事务的执行来访问共享存储器,以执行指令以及对数据进行操作。通常,事务的执行包括推测性地执行由多个微操作、操作或指令构成的分组。在由处理器、内核或线程进行事务的推测性执行期间,追踪被读出和写入的存储单元,以查明是否有另一个处理器、内核或线程访问这些单元。如果另一个线程无效性地改变了这些单元,就重新开始该事务,并从开头再次执行它。事务的执行潜在地避免了与常规锁定机制有关的死锁,提供了错误恢复,并有可能得到精细粒度的同步。
以前,事务的执行或者是完全以硬件实现,或者是在软件中实现,其中,在硬件实现的情况下需要复杂且昂贵的逻辑电路,但相对快速,在软件实现的情况下较便宜且更具鲁棒性,但在特定情况下招致了相当大的性能开销。例如,软件事务存储器能够有效地执行嵌套事务,但由于在事务中存储器访问的手段,致使浪费了相当大量的执行时间和执行资源。这个手段用来确保不同的事务访问不相连的存储单元。例如,当单线程运行时,在特定情况下,与常规基于锁定的实现相比,软件事务存储器产生了2-3倍的性能开销。在软件实现的系统中,发现通常最大的开销是追踪对于单元的负载访问以及在提交事务之前对所访问单元的有效确认。
与此相对照,在纯硬件的事务存储器系统中,可以更快地执行事务,因为无需软件追踪每一个访问;然而,牺牲了事务的规模以及功能,因为需要昂贵且复杂的电路/逻辑电路。一些近来的研究建议关注于混合式事务执行形式,其中,首先以硬件执行事务,并且如果失败,就以软件来执行。然而,在实现这些优点之前,通过软件实现的一些性能特征仍会招致与首先以硬件执行事务有关的开销。
附图说明
借助于实例来说明本发明,但并非意图受到附图中示意图的限制。
图1示出了用于提供加速的事务执行的处理器的实施例。
图2示出了用于提供加速的事务执行的处理器的另一个实施例。
图3示出了包括多资源微处理器的底层系统以及用于加速事务执行的伪代码高层提取的实施例。
图4示出了用于加速事务执行的方法的实施例。
图5示出了用于加速事务执行的方法的另一个实施例。
具体实施方式
在以下的说明中,阐明了许多具体细节,例如对事务执行的具体硬件支持的实例、处理器中局部存储器的具体类型,以及存储器访问和单元的具体类型等,以便提供对本发明的全面的理解。然而,对于本领域技术人员显而易见的是,无需使用这些具体细节来实施本发明。在其它实例中,没有详细说明公知的部件或方法,例如软件中的事务的代码、事务的界定(demarcation)、多内核和多线程处理器的架构、以及微处理器的具体操作细节,以避免不必要的模糊对本发明的理解。
在此所述的方法和装置是用于加速处理器中事务的执行。然而,用于加速处理器中事务执行的方法和装置并不限制于此,因为它们可以在任何集成电路器件或系统上实现或者与其相关联地来实现,例如移动电话、个人数字助理、嵌入式控制器、移动平台、桌面型平台以及服务器平台。
处理器
参考图1,示出了处理元件100的一个实施例,其能够进行事务的执行。处理元件100可以是用于执行指令或对数据进行操作的任何元件。处理元件100的实例包括:处理器、微处理器、多资源主机处理器、微处理器、处理内核、逻辑处理器,嵌入式处理器、多线程处理器、以及多内核处理器。
在以下的多个实例之一中,涉及了一种多资源处理器。“资源”常常被称为处理器内核、逻辑处理器、或线程处理器。因此,多资源处理器包括具有多个内核、逻辑处理器、线程或其任何组合的处理器。在此所使用的“内核”指的是在集成电路上能够保持独立架构状态的任何逻辑,其中,每一个独立保持的架构状态都与至少一些专用执行资源相关联。与此相对照,逻辑处理器通常指的是在集成电路上能够保持独立架构状态的任何逻辑电路,其中,独立保持的架构状态共享对执行资源的访问。内核和逻辑处理器常常能够执行线程。因此,多资源处理器还可以指代能够执行多个线程的任何处理器。
处理器100可以包括内核或线程的任何组合,例如多内核处理器,在多内核处理器中,每一个内核都支持多个软件线程的执行。注意,处理器100能够在系统内单独执行,或者可以在多物理处理器的系统中与其它处理元件相结合。在一个实施例中,为了支持事务的推测性执行,处理器100能够进行推测性执行。处理器100的其它可能的执行能力包括:顺序执行、乱序执行、串行执行、并行执行、定点执行、浮点执行、或其它公知的执行类型。以下参考执行资源部分来论述执行逻辑和资源的特定实例。
共享存储器/高速缓存
在图1中还示出了耦合到执行资源105上的存储器110。存储器110包括要由执行资源105访问的任何存储元件或器件,其中,所述资源105例如为内核、逻辑处理器或线程。在一个实施例中,存储器110是由至少两个处理资源共享的共享存储器,其中,所述处理资源例如为内核、线程、逻辑处理器或远程代理。存储器125的实例包括:高速缓存、多个寄存器、寄存器堆(register file)、静态随机存取存储器(SRAM)、多个锁存器、或其它存储元件。注意,当对存储器110内的存储单元进行读出或写入时,处理器100或处理器100上的任何处理资源可以对系统存储单元、虚拟存储器地址、物理地址或者或其它地址进行寻址。将参考以下的各个示范性实施例来更详细地论述存储器110。
作为一个具体的说明性实例,假设存储器110是高速缓冲存储器,例如追踪高速缓存、一级高速缓存、二级高速缓存、或更高级的高速缓存。高速缓存110包括多个高速缓存行111、112和113,其也可以称为存储器110内的存储单元。可以以任何方式组织高速缓存110和行111-112,例如全关联高速缓存、组关联高速缓存(set-associative cache)、直接映射高速缓存、或其它已知的高速缓存结构。
作为另一实例,假设存储器110是多个寄存器,其被处理元件或处理资源用作执行空间,或者用以存储变量、指令或数据的便笺式存储器。在该实例中,寄存器组110中的存储单元111-112是寄存器111、112和113。
在一个实施例中,存储器110中的行、单元或字111-112能够存储一个元素。“元素”指的是通常存储在存储器中的任何指令、操作数、数据操作数、变量或其他逻辑值分组。在可选实施例中,存储器行111-112中每个行都能够存储多个元素。作为实例,高速缓存行111存储了4个元素,包括一条指令和两个操作数。存储在高速缓存行111中的元素可以处于打包状态或压缩状态,以及未压缩状态。以下参考图2来更详细地论述每个共享存储器行的多个元素。
逻辑值
如上述的,存储器110以及处理器100中的其它特征和器件存储逻辑值并对其进行操作。通常,逻辑电平和逻辑值的使用也可以称为1或0,其简单地代表二进制逻辑状态。例如,1指的是高逻辑电平,0指的是低逻辑电平。已经使用了在计算机系统中的其它数值表示,例如逻辑值或二进制值的十进制和十六进制表示。例如,对于十进制数10,其在二进制值中表示为1010,在十六进制中表示为字母A。
在许多较旧的系统中,以例如5V的电压表示高电压电平,以例如0V表示低电压电平。作为另一个具体实例,高逻辑电平是1.2V,低逻辑电平是.3V。然而,高逻辑/电压电平可以指代高于某个阈值的任何电压电平,相反的,低逻辑电平可以指代低于该阈值的任何电压电平。另外,在单元、晶体管或波形中会存在两个以上的逻辑电平。作为实例,单个波形可以表示在不同电压电平上的4个不同逻辑值。
执行模块/资源
图1还示出了要执行事务的执行资源105。执行资源105也可以指代支持事务执行的硬件、逻辑或模块。作为实例,执行资源105用于执行第一事务和嵌套在该第一事务中的第二事务。当在软件或硬件中一个内部(inner)事务的“开始”事务界定在一个外部(outer)事务的事务界定之内时,一个事务就被嵌套在另一个事务内。
在处理器100中还可以包括但并非必须包括在图1中未示出的其它常用模块、逻辑和功能单元,例如以下的任何一种或者其任何组合:数据通路、指令通路、虚拟存储器地址转换单元(转换缓冲器)、算数逻辑单元(ALU)、能够执行单个指令或多个指令的浮点计算单元以及能够以串行或并行方式对单个或多个数据操作数进行操作的浮点计算单元、寄存器、中断控制器、高级可编程中断控制器(APIC)、预读取单元、读取单元、解码单元、高速缓存、指令引退(instruction retirement)单元、指令重排序单元、以及用于对指令和/或数据进行读取、执行或操作的任何其它逻辑。
事务
事务的执行常常包括将多个指令或操作分组到事务、代码的基本部分、或代码的关键部分中。在一些情况下,字指令的使用指的是由多个微操作组成的宏指令。通常有两种方式来识别事务。第一实例包括在软件中对事务进行界定。在此,将某种软件界定包括代码中以便在执行期间进行识别。在可以与前述软件界定一起实施的另一个实施例中,以硬件来对事务进行分组,或者以表示事务开始和事务结束的指令来辨认事务。
在处理器中,可以推测性地或非推测性地执行事务。在第二种情况下,采用对于要访问的共享存储单元的某种锁定形式或有保证的有效访问形式来执行指令组。在可选方案中,事务的推测性执行更常用,在此,推测性地执行事务,并在事务结束时提交事务。在此所用的事务的未决状态指的是已经开始执行但还没有提交的事务,即未决的。例如,如果对外部事务执行“开始”事务指令,随后对所嵌套的内部事务执行另一个“开始”事务指令,则直到执行了相关的“结束”事务指令且提交了该事务为止,该内部嵌套的事务都是未决的。因此,在外部事务的未决状态期间执行在外部事务级别上的任何访问,直到外部事务被提交或中止为止,外部事务都是未决的。
以前,事务的执行包括两个基本步骤:(1)检查与存储器访问相关联的锁定状态;以及(2)在提交事务之前对所访问的存储单元进行有效确认。实际上,在纯软件事务执行环境中,软件事务存储器(STM)保存了锁定阵列,通过一些关联性,例如散列函数,来将每一个存储单元映射到该锁定阵列上。通常,在事务中进行访问时,STM检查锁定,记忆与要访问的单元以及该锁定相关联的值,并且在提交该事务之前,确认该锁定是否在执行期间已经由另一事务获得。可以在Proceedings of Principles and Practice ofParallel Programming(PPoPP)2006上的Bratin Saha,Ali-Reza Adl-Tabatabai,Richard L.Hudson,Chi Cao Mihh和Ben Hertzberg的“McRT-STM:A HighPerformance Software Transactional Memory System for a Multi-core Runtime”中找到与纯软件实现的STM有关的更多信息。
加速模块
仍参考图1,显示了耦合到存储器110的加速模块120。然而,可以以硬件、软件、固件或其任何组合来实现模块。而且,模块的边界通常是变化的,可以共同实现功能,也可以在不同实施例中分别实现功能。作为下面将更详细论述的一个实例,加速模块120基于与在事务中要访问的存储器110中的行相关联的事务位,将事务中的执行重新引向锁定模块115中基于软件的屏障(barrier),例如与存储器110中的行相关联的锁定。另外,加速模块120可以包括:逻辑,其用于如果在提交之前在事务期间所访问的存储器110中的行被驱逐(evict),就产生中断;并且在执行资源105上执行的处理机(handler),以处理该中断以及中止事务。
在另一个实例中,加速模块120包括:逻辑,用于基于与存储器行110相关联的事务位来设置状态,例如进位标志;软件应用程序,用于检查进位标志,并决定是否调用屏障;以及计数器,用于保存在事务中被访问和被驱逐的行的数量的计数值。
依据这些实例,很明显的是,加速模块120可以包括:硬件,例如事务位、软件,例如保存在存储器中的锁定阵列、或固件,并且在边界之间发生变化,例如包括:锁定模块115、存在于存储器110中的事务位、在处理器100中用来产生驱逐中断或者设置进位标志的逻辑、计数器,用以追踪在事务中访问的存储器行的数量、以及在执行资源105上执行的处理机。
在一个实施例中,加速模块120用于确定对共享行的访问是否是在事务期间对该共享行的第一次访问。可以借助于用以追踪对存储器行的访问的任何方法,来判断对一个行(例如存储器110中的行112)的访问是否是在事务执行期间对该行112的第一次访问。
事务字段/位
在一个实施例中,存储器110的每个行都与事务字段相关联。转向图2,将事务字段220示为加速模块225的一部分。事务字段220与存储器210中的共享存储器行211相关联,并用来表示在事务执行期间存储器行211是否先前被访问过,或者是第一次被访问。
可以以硬件、软件或固件来实现事务字段220。在一个实施例中,事务字段220包括在共享存储器行211中的一个位或多个位。在图2所示的实例中,事务字段220是高速缓存210的高速缓存行中的4个最高有效位。然而,事务字段不限于此,因为其可以在寄存器、局部存储器、或者处理器200上的其它存储器件中实现,并通过位221到行211的映射来与高速缓存行211相关联。
假定共享存储器210是高速缓存,每一个高速缓存行,例如行211,都能够存储多个元素。在所示实例中,高速缓存211能够存储元素211a、211b、211c和211d。如上所述的元素可以包括任何指令、操作数、逻辑值分组、或者其任何组合。作为一个具体实例,高速缓存行211包括存储在211a中的指令,该指令用于计算存储在211b和211c中的两个数据操作数的和,并且将结果存储在211d中。
在此,事务字段220包括4个事务位,其显示为多个事务位221。其中每一个事务位221都对应于行211中的一个元素,如所示的从事务位221到元素211a-211b的虚线。作为结果,能够确定在事务期间对行211中单个元素的访问是第一次访问,还是以前已经访问过。然而,在访问字段220中的位或值的任何结构或数量都可以表示对行211中任意一个元素、元素的组合、或全体元素的第一次访问或者后续访问。作为实例,当使用两个位时,使用4个组合00、01、11和10来关联每一个元素。
为了在不使参考图1的论述复杂化和模糊不清的情况下说明访问字段(例如访问字段220)是如何进行操作的,在此将论述未特别示出的单个事务位的操作。很明显,具有多个位的访问字段和具有多个元素的共享存储器行可以采用与以下实例非常相似的方式来操作。因此,假定存在与存储器110中每一个行相关联的事务位。事务位与行111的关联包括将事务位作为行111的一部分,或者在其他情况下事务位在处理器100中并映射到行111。
缺省状态是将事务位设置为第一值,例如第一逻辑值。在这个缺省状态中,事务位就表示在事务执行期间,即在事务未决状态期间,高速缓存行111还没有被访问。一旦对高速缓存行111进行了访问,就将事务位设置为第二值,例如第二逻辑值,其中所述访问包括对高速缓存行111或与高速缓存行111相关联的系统存储单元的写入、存储、读取或装入。在一个实施例中,所述第一值是高逻辑值,所述第二值是低逻辑值。可替换地,所述第一值是低逻辑值,所述第二值是高逻辑值。类似地,在具有多个事务位的访问字段中,可以设置或清除每一个位,以表示共享存储器行中的元素是否已经被访问。
因此,如果检查了与行111相关联的事务位,且该事务位表示第一值,则在事务的未决状态期间就还没有访问行111。相反地,如果该事务位表示第二值,则在事务期间先前已经访问过高速缓存行111。在事务的提交时,清除被设置为第二值的位,以确保将该值设置为第一值,即缺省状态。在一个实施例中,还可以存储资源ID(例如内核ID或线程ID)以及事务ID,或将其与事务位相关联,以获知哪一个事务正在访问高速缓存行111或先前访问了高速缓存行111。以下通过以下优化操作来说明基于第一次或后续访问的事务执行的加速:在访问共享存储器中的单元之前,以及在提交事务之前对这些单元进行有效确认时,重新引向屏障。
屏障/锁定模块
在一个实施例中,基于在事务执行期间对存储器110中的行的访问是对这些行的第一次访问,还是对这些行的后续访问,即不是第一次访问,来检查与这些行相关联的屏障、锁定、元数据、或指令代码。在系统部分的实施例中,详细论述了关于重新引向与存储器行相关联的屏障的实例。屏障包括用于对以下操作进行阻碍的任何方法:对于共享存储器行/单元的访问、对于不在与该共享存储器行/单元相关联的事务内的另一部分代码的任何执行、或对于与该共享存储器行/单元相关联的诸如元数据的其它数据的访问。
作为第一实例,屏障包括物理三态或其它硬件阻塞机制。作为另一个实例,屏障包括对与共享单元相关联的进位标志的状态进行更新。屏障也可以包括元数据。元数据是存储在与该共享存储单元相关联的单元中的任何逻辑值或数据。元数据的一个实例是锁定,在此,锁定所在的单元存储了表示该锁定的状态的数据。独立而言,所存储的数据可以不具有具体含义;而是借助于通过硬件或软件的构建,所存储的数据值展现出一个锁定的功能。因此,元数据的使用不限于以下论述的有关锁定的实例,而是可以包括在第一次访问共享存储器行时所访问的任何数据。在一个实施例中,锁定模块,例如锁定模块115,是屏障。另外,如在以下在提交模块部分所论述的,屏障还可以包括与在提交事务之前对存储单元的确认相关联的薄记(bookkeeping)。
在处理器100中示出了锁定模块115,其耦合到存储器110,但其并不限于此。在一个实例中,锁定模块115包括锁定阵列。在一个实施例中,该锁定阵列是存储在存储器中的软件锁定阵列,所述存储器例如为处理器100上的局部存储器,或耦合到处理器100的系统存储器。在此,所用的术语“锁定(lock)”指的是一种编程结构,用于基于锁定或锁定所表示的值,不允许对资源、处理器、逻辑处理器、内核或线程进行访问。
再次参考图2,示出了锁定模块115的一个实施例,在此在事务存储器中存储了锁定阵列,即,哈希表215。锁定218与存储器210中的行212相关联,而锁定216和217分别与元素211c和211d相关联。可以通过用于关联两个单元的任何映射技术或其它技术来实现锁定与共享存储器行、单元或元素之间的关联。在一个实施例中,锁定通过哈希表与共享存储器行相关联,例如哈希表215。在此情况下,在存储器中存储了锁定阵列,并由用以存取共享存储器行的地址中的某个部分进行定位。例如,屏蔽虚拟地址或线性地址中第一数量的低位比特,以获得用以存取行212的高速缓存行地址,并且该高速缓存行地址用于定位锁定阵列中的锁定218。
锁定(例如锁定218)可以具有多个状态。作为一个具体的说明性实例,软件锁定(例如锁定218)处于被拥有状态或非被拥有状态。例如,当一个事物处理要对行212中进行写入时,其获得锁定218并对行212进行写入。当锁定218被另一个事务获得时,其处于被拥有状态,并且行212不能被其它事务或资源所访问。如果由于一个锁定处于被拥有状态而使事务或资源不能获得该锁定,则可以使用包括等待、后退、并行执行以及其它技术的常用方法。任何用以表示状态的方法都可以用于表示锁定218是被拥有的还是非被拥有的,这些方法例如为;表示性的值、字、或者位组合形式。在一个实施例中,当锁定218表示第一值时,锁定218和行212为被拥有的,当锁定218表示第二值时,锁定218和行212为非被拥有的。
以下实例用于说明编程结构如何将锁定218用作对行212的屏障。当为非被拥有的时,锁定218表示奇数版本值,例如数字3。在事务获得锁定218时,事务或资源写入偶数,例如数字4,以表示锁定218被拥有。如果事务更新了行212,则在释放该锁定时,它将下一个奇数版本值即数字5,写入锁定218中,以表示:(1)由于当前存储了奇数,锁定218再一次是非被拥有的;以及(2)行212是从在锁定218中所存储的最新奇数版本值3时刻起被更新的。
以前,纯软件的事务存储器系统可能会在每次访问存储器中的单元之前检查锁定的状态,记忆存储在锁定中的版本值,并在每次提交事务之前对每一个单元执行有效确认。然而,在一个实施例中,如果访问是在事务执行期间对行212的第一次访问,则加速模块225在访问行212之前检查锁定218的状态。如上所述,可以通过由与行212相关联的事务字段/位表示第一值,来表示在事务执行期间对行212的第一次访问。实质上,如果与行212相关联的事务字段/位表示第一值,则调用锁定模块(例如锁定模块115)来检查锁定218。
作为实例,如果由同步或异步事件初始化了与行212相关联的事务字段/位,就重新引向屏障或检查锁定。在事务中访问行212时,发生同步指示,例如设置稍后要检查的进位标志,或者发生信号的异步产生,例如事务未命中中断,以表明由事务字段/位表示第一值。
在第一种情形下,使用了同步机制,如果与行212相关联的事务字段表明这个访问是在事务执行期间的第一次访问,则设置另一个状态,例如进位标志。然后正常进行对行212的访问,随后,在用应用程序或处理机检查进位标志时,判断是否要进展到获得锁定、存储版本值并执行有效确认的操作。
在产生中断的情形下,处理机通过将执行重新引向屏障(例如检查锁定218)来处理中断,该处理机可以在处理器200或与处理器200相关联的一些固件上执行。注意,对行212的第一次访问并非是可以引起重新引向屏障(即检查锁定218)或产生中断的唯一事件。例如,如果发生高速缓存未命中,即,所请求的行未存在于存储器210中并且要从系统存储器中取得,则可以调用/重复相同的锁定/屏障的“第一次访问”方法。第一次访问或高速缓存未命中在此还称为事务未命中通知。
与“第一次访问”相对照,在一个实施例中,如果对行212的访问不是在事务执行期间对行212的第一次访问,而是对行212的后续访问,则不调用锁定模块115,并且在访问行212之前不检查锁定218。或者在备选方案中,不发生采用诸如设置进位标志之类机制的同步通知。作为结果,如果与行212相关联的事务字段/位表示第二值,允许对行212进行访问,而不调用锁定模块115,即检查锁定218。在一个实施例中,允许对行212的访问的操作是透明的,因为行212简单地被执行资源205更新,或被提供给执行资源205,而不检查锁定218。如可在该实施例中所见的,在单个事务中发生了对共享存储器中同一行的多次访问的情况下,由于在事务中对同一行的后续访问无需遇到与该行相关联的屏障,因此可以加速事务的执行。
加速模块225和其它模块,例如图1所示的锁定模块115和驱逐追踪(eviction tracking)模块125,以及提交模块,可以在多种模式中操作,例如第一积极模式和第二谨慎模式。
在一个实施例中,在积极模式中,当锁定处于非被拥有状态中时,锁定模块或加速模块225获得该锁定,并且不保存在该锁定中所存储的版本值。如以上实例中所述的。奇数版本值表示锁定是非被拥有的。以前,会在事务存储器组中存储奇数版本值,以便能够在提交时进行有效确认。然而,在该积极模式中,在检查了锁定的状态并确定锁定是非被拥有的之后,不在局部事务存储器组中存储第二版本值。因此,在一个积极模式实施例中,不是在提交事务之前用复杂的版本值比较进行复杂的有效确认,而是如果在事务的未决状态期间没有收到驱逐通知(同步或异步的),就提交事务。将在驱逐模块部分中更详细地论述驱逐和驱逐通知。
作为第一说明性实例,执行在事务中的装入指令,以访问在行212中的元素211d。如果访问字段221表示该装入指令不是在事务执行期间对元素211d的第一次访问,则访问元素211d,而不检查锁定216。然而,如果访问字段221表示该装入指令是在事务执行期间对行211的第一次访问,则产生事务未命中中断或设置进位标志。处理机借助于检查锁定216来处理事务未命中中断,或者应用程序检查进位标志并调用处理机。如果在锁定216中存储了奇数版本值,则事务可以通过将偶数值写入到锁定216中来获得锁定216。当在积极模式中时,并不保存在将偶数值写入到锁定216之前存储在锁定216中的奇数版本值。如稍后所论述的,在提交事务时,不对版本值进行比较,节省了与执行事务相关的有效确认的成本。
可替换地,加速模块225及其它模块可以运行在谨慎模式中。例如,积极模式是缺省操作模式,在预定次数的事务中止或事务失败之后,将操作切换为谨慎模式。注意,作为替代,谨慎模式可以是缺省操作模式,并且在没有争用或驱逐通知情况下经过预定数量的成功事务之后,操作切换为积极模式。在谨慎模式中,在事务未命中通知时,发生与积极模式的功能相同的功能,除了将存储在锁定216中的版本号保存在局部事务存储器组中,以便能够在提交事务时进行有效确认。在此,如果在事务执行期间没有驱逐通知,则提交事务。然而,与积极模式不同的是,如果在事务的未决状态期间出现驱逐通知,则将版本号存储在局部事务存储器组中,以便对事务进行有效确认,而不是仅仅是中止事务。
从以上继续该实例,如果在谨慎模式中的操作期间出现了装入指令,则获得锁定216,并将存储在锁定216中的版本值保存在局部事务存储器读取组中。如果在事务的未决状态期间出现驱逐通知,则针对存储在锁定218中的当前版本值,对存储在局部事务存储器读取组中的版本值进行有效确认。如果版本值有效确认是成功的,则提交事务,如果不成功,就中止事务。
在一个实施例中,对在积极模式和谨慎模式中以相同方式进行的操作进行存储。在此,在未命中通知时,在事务存储器中存储/记录元素211d的旧值,并且通过对锁定216写入偶数来获得锁定216。注意,还可能减少执行时间,因为即使在第一次访问一个行时检查存储,也不必在对相同行的后续存储期间进行检查。
驱逐追踪/提交模块
如上所述,在积极模式中,在事务执行期间的驱逐通知会导致中止事务,而在谨慎模式操作期间驱逐通知会启动有效确认。在一个实施例中,如果驱逐了被事务访问的行,即事务访问字段表示第二值,就发生驱逐通知。行的驱逐包括:远程资源对共享存储器行的驱逐、远程资源对共享存储器行的探查、对共享存储器行的访问使在与事务相关的事务存储器组中所存储的共享存储器行的副本无效、和/或由于容量约束造成的驱逐。因此,以下情况都导致驱逐通知:另一个事务的访问驱逐共享存储器行、远程资源的访问,所述远程资源例如为存在于处理器200上的另一个内核/逻辑处理器、任何其它导致无效的访问、或者容量约束。
图1中所示的追踪模块125用于追踪驱逐通知。在一个实施例中,在驱逐通知事件时,产生驱逐通知中断,其将执行重新引向处理机。在检测到驱逐通知事件时,可以使用逻辑或其它中断产生组件来产生驱逐通知中断。在另一个实施例中,保存了对所驱逐的共享存储器行数量的计数,其中这些共享存储器行的事务位已经被设置。应用程序或处理机稍后会检查这个计数,并判断是否重新引向屏障,例如基于该计数执行有效确认。在此,基于对在执行期间所驱逐的行的数量的检查/查询,来产生驱逐通知,这个数量可以存储在逻辑中,例如计数器中。如上所述,处理机可以立即中止事务,在事务结束时且在提交之前中止事务,执行有效确认,和/或提交事务。
在一个实施例中,如果在事务执行期间,驱逐追踪模块运行在积极模式中,并且发生对共享存储器行的无效性的访问,即驱逐通知事件,则驱逐追踪模块中止事务。与此相反,如果驱逐追踪模块运行在谨慎模式中,则驱逐模块或提交模块对事务进行有效确认。
提交模块用于提交事务。提交模块、驱逐追踪模块以及其它模块的边界交叠并包括一些相同的组件。例如,在提交时,将在事务执行期间所设置的事务字段/位重置为第一值,以确保下一个事务从事务位的缺省状态开始。可以在重新执行之前,在事务中止期间进行类似的操作。
由于行的驱逐、提交和有效确认操作是事务执行中的公知技术,因此没有对其进行详细论述,以避免模糊对本发明的理解。如上所述,在一个实施例中,有效确认包括用存储在锁定中的当前版本号对版本号的本地副本进行有效确认。另外,没有详细论述处理机的总体操作和用执行资源在处理器上执行处理机例程的情况,以避免模糊对本发明的理解。然而,在一个实施例中,用于中止事务的处理机能够按照一次一个事务的粒度,回滚(roll back)到所嵌套的事务。在题为“Software Assisted Nested HardwareTransactions”的序列号11/323,092的共同未决申请中论述了嵌套事务的执行和回滚。
系统的实施例
转到图3,示出了系统的一个实施例,具有用于说明系统操作的伪代码提取。多资源处理器300耦合到系统存储器330。尽管未示出,但系统存储器330也可以通过其它组件或器件耦合到处理器300,例如内存控制中心。系统存储器包括用于在系统中进行存储的任何存储器,例如SRAM、DRAM、双倍数据速率(DDR)RAM、非易失性(NV)RAM、EDO RAM、或其它存储器件。系统存储器330用于存储元素,例如要由处理器300执行的指令和数据操作数。在一个实施例中,系统存储器存储多个指令,这些指令要被分组到多个事务中。
伪代码350示出了用于加速事务执行的处理器300的简化的示范性操作。要由资源305或306执行包括多个指令或操作的事务351。资源305是以下各项的任何组合:内核、线程、逻辑处理器、或其它执行资源。事务,例如事务351,常常由一个资源执行,或者用多个资源中的一个资源来确认。在事务351内的一个访问是存储器访问352,其包括对在共享存储器310中的行311的访问。存储器访问包括对共享存储器310进行的写入、读取、存储、或装入。
在执行访问352时,检查事务位326,以缺点访问352是否是在事务311的执行期间对行311的第一次访问。如果事务位326表示第二值,则访问行311,而不将执行重新引向屏障317,该屏障317通过到屏障阵列315中的散列函数与行311相关联,其中,根据设计中的选择,该第二值或者是高逻辑值或者是低逻辑值。将第二值存储在事务位316中表示在事务351执行期间出现过对行311的先前访问。因此,不再检查屏障317。
与此相反,如果事务位316是用以表示访问352是在事务执行期间对行311的第一次访问或者发生了对行311的高速缓存未命中的情况的第二值,则将执行重新引向屏障317。在一个实施例中,通过基于表示第二值的事务位326产生用户级中断,来对执行进行重新引向。在另一个实例中,设置与事务位326或行311相关联的进位标志,随后由应用程序检查该标志,以决定是否将执行重新引向处理机。假定屏障317包括保存在存储器中的锁定阵列中的锁定,则检查锁定317以确定它处于被拥有状态还是非被拥有状态。在此,以偶数值表示被拥有状态,并且事务351不能通过锁定317获得对行311的锁定。相反地,以奇数版本值表示非被拥有状态,例如十进制数9的二进制表示。
如果以积极模式操作加速模块,则通过将偶数写入到锁定317中来获得锁定317,其中,加速模块包括事务位和正在执行的软件事务存储器处理机。但不记忆/存储在锁定317中的版本号。然而,如果是在谨慎模式中,就将版本号存储在局部事务存储器组中,例如用于装入操作的读取组。接下来,在两种操作模式中都返回执行流程,以执行对行311的存储器访问352。
如果在执行期间接收到驱逐通知,则在此时或者在提交时中止事务351。在此,在提交事务部分中示出了伪代码350部分;然而,可以提交之前、在事务执行中间产生并接收驱逐通知,并可以在此时中止该事务。例如,如果资源306探查、驱逐或导致无效性地访问行311,并且这不是执行事务351时分配的任务,则产生驱逐通知中断。接收该中断的处理机会在此时中止该事务,或者进行等待直到在处理该中断前试图提交该事务351为止。可替换地,使用计数器来追踪所驱逐的行的数量,其中,所驱逐的行已经设置了其相关的事务位。在事务的未决状态期间的任何时间,都可以查询计数器并且基于计数器的值来中止计数器。
在异步中断情况下,如果是在积极模式中并且接收到驱逐中断,则中止事务351,并可以重新开始。复位/清除由事务351预先设置的事务位,并释放所获得的锁定。相反的,如果在积极模式期间没有接收到驱逐中断,就提交事务351,这就可以节省对在事务351期间所访问的每一个地址进行有效确认的执行时间。在提交时,仍释放锁定,并复位事务位。如果运行在谨慎模式中且接收到驱逐中断,则对读取组进行有效确认,这是通过以上所述的先前在读出组中存储版本号来实现的。如果有效确认成功,则提交事务351,包括释放锁定并清除事务位。如果有效确认不成功,就中止事务351并重新开始。但如果未接收到驱逐中断,则即使是在谨慎模式中,也可以免除有效确认,并且在不引起额外的有效确认执行时间的情况下提交事务351。
用于加速事务执行的方法的实施例
转到图4,示出了用于加速事务执行的方法的流程图的实施例。在流程405中,执行在事务内的存储器访问指令。该存储器访问指令存取在共享存储器中的单元。对共享存储器中单元的存取可以包括用于存取共享存储单元自身或者与共享存储单元相关的一些外部存储单元的虚拟地址或线性地址。如上所述,共享存储器包括处理器上的任何共享存储器装置,例如高速缓存、寄存器、或其它存储元件。
接下来,在流程415中,确定与共享存储单元相关联的事务位的值。事务位可以通过到共享存储单元的映射来进行关联,或者它可以是共享存储单元的一部分。确定事务位的值的操作包括用于读取/检测存储单元的值(例如逻辑电平)的任何已知方法。例如,在执行访问指令时,从事务位中读取该值。如果与该单元相关联的事务位是第一值,则访问该单元,且不在流程420确定映射到共享存储器中该单元的锁定的状态。因此,与正常装入、存储、读取或写入类似地来进行访问。
然而,如果与该单元相关联的事务位表示第二值,则在流程425确定锁定的状态。如上所述,由表示被拥有状态或非被拥有状态的值来表明锁定的状态。作为一个说明性实例,如果在锁定中存储了偶数值,则该锁定是被拥有的,如果该锁定是可用的,即非被拥有的,就存储奇数版本值。可替换地,可以将另一个值,例如事务ID或资源ID,写入到该锁定中,以表示其是被拥有的。在流程430中,如果该锁定的状态表示非被拥有状态,就获得该锁定并访问该单元。继续进行这个说明性实例,通过将偶数写入到该锁定中来获得该锁定。最后,将与该单元相关联的事务位设置为第一值,来表示在事务执行期间已经对该单元进行过第一次访问。
注意,流程是以线性方式示出的;然而,任何流程都可以采用与所示的不同的顺序来进行。例如,在确定事务位的值表示第二值之后,可以立即将事务位设置为第一值,以表示已经对其进行过第一次访问。
在一个实施例中,如果运行在积极模式中,则在访问该单元之前不保存在锁定中所存储的用以表示非被拥有状态的版本值。可替换地,在谨慎模式中,在访问该单元之前,将在锁定中所存储的用以表示非被拥有状态的版本值保存在局部事务存储器组中。
流程440可以出现在图4所示的流程期间的任何时刻上,在该流程440中,如果单元被驱逐,且与该单元相关联的事务位表示第一值,就产生驱逐中断。在此,如果按照存储第二值的事务位所表示的那样在事务执行期间已经访问过该单元,并且该单元被驱逐,则产生驱逐中断。可以在驱逐时产生这个中断,并在此时刻或者稍后进行处理。可替换地,在流程440中,递增计数器,以便对在事务执行期间驱逐的行的数量进行追踪。可以稍后检查或查询该计数器,以决定版本的存储、有效确认和提交,如下所述。
在积极模式和谨慎模式中,如果在事务执行期间没有出现驱逐,就提交事务。另外,在积极模式中,如果在事务执行期间出现了驱逐,就中止事务。然而,在谨慎模式中,如果产生了驱逐中断,就在提交事务之前对事务进行有效确认。如果有效确认成功,就提交事务,否则,就将其中止并重新开始。注意,如上所述,积极模式或者谨慎模式都可以作为缺省模式。
用于加速事务执行的方法的另一个实施例
最后参考图5,示出了用于加速事务执行的方法的流程图的另一个实施例。在流程505中,确定用以存取共享存储器中单元的访问是否是在事务的未决状态期间的对该单元的第一次访问。在一个实施例中,该单元是共享存储器行。在另一个实施例中,共享存储器行能够存储多个元素,例如指令、操作数、数据操作数、逻辑值,及其任何组合,在共享存储器行中的元素就是所述单元。
单元与事务字段相关联,事务字段至少具有事务位。与以上操作相类似,事务位/事务字段用于确定该访问是否是在事务的未决状态期间对共享存储器行或共享存储器行内的元素的第一次访问。
在流程510中,如果它是对共享存储器行或共享存储器行内的元素的第一次访问,就将执行重新引向与共享存储器中单元相关联的屏障。所述屏障包括与共享存储器(例如高速缓存)相关联的任何锁定机制或访问机制。在一个实施例中,所述屏障包括保存在软件中的锁定阵列内的锁定。锁定和屏障的操作与以上参考图1-3所述的锁定和屏障的操作类似。例如,对执行进行重新引向的操作包括执行处理机以处理事务未命中中断,其中,处理机的执行是将执行重新引向屏障,甚至不需访问或检查锁定。在可选方案中,对执行进行重新引向的操作包括检查进位标志的状态,并调用处理机来处理事务未命中。
反之,在流程515中,如果该访问是对共享存储器行或共享存储器行中的元素的后续访问,就访问在共享存储器行中的单元,且不将执行重新引向与共享存储器内的单元相关联的屏障。在此,诸如装入或存储操作之类的操作在没有屏障的情况下正常操作。
如上所示,采用多种方式来实现对事务执行的加速。例如,在事务中仅在第一次访问共享存储单元时访问屏障,所述屏障例如为在软件锁定阵列内的锁定。后续访问可以直接对该单元进行访问,而不会引起访问屏障的执行命中。而且,不同操作模式提供了不同程度的加速。在积极模式中,不存储锁定的版本号,所以在提交事务时不会引起有效确认执行的延迟。实际上,如果在事务执行期间没有出现驱逐中断,就仅仅是提交该事务。相反地,在谨慎模式中,如有必要,就存储版本号以便执行有效确认。然而,正如在积极模式中那样,如果在事务执行期间没有产生驱逐中断,就不会引起与有效确认相关联的执行命中。因此,加速了对单元的访问以及对与这些访问有关的屏障的访问,还加速了在提交之前对事务的可能的有效确认。
可以通过存储在机器可访问介质或机器可读介质上的、可由处理元件执行的指令或代码来实现以上阐明的方法、软件、固件或代码的各个实施例。机器可访问/可读介质包括用于以机器(例如计算机或电子系统)可读的形式提供(即存储和/或传输)信息的任何机制。例如,机器可访问介质包括随机存取存储器(RAM),例如静态RAM(SRAM)或动态RAM(DRAM);ROM;磁或光存储介质;闪存器件;电、光、声学或传播信号的其它形式(例如载波、红外信号、数字信号);等等。
在前述说明书中,已经参考各个特定示范性实施例给出了详细说明。然而,很明显的,在不脱离如所附权利要求中阐明的本发明广泛精神和范围的情况下,可以对其做出各种修改和变化。因此,说明书和附图被认为是说明性意义的,而不是限制性意义。而且前述实施例和其它示范性语言的使用并非一定指代相同实施例或相同实例,而可以指代不同的相异的实施例,也有可能是相同的实施例。
Claims (48)
1.一种用于加速事务执行的方法,所述方法包括:
使用执行模块来执行被分组到事务中的多个操作,其中,所述多个操作之一包括对在共享存储器中的多个共享行中的一个共享行的访问;并且
使用加速模块来:
如果对所述共享行的所述访问是在所述事务的执行期间对所述共享行的第一次访问,就调用锁定模块,以及
如果对所述共享行的所述访问不是在所述事务的执行期间对所述共享行的第一次访问,就允许访问所述共享行,而不调用所述锁定模块,
其中,所述锁定模块当被调用时,检查与所述共享行相关联的元数据单元的状态。
2.如权利要求1所述的方法,还包括:
使用驱逐追踪模块来在所述事务的执行期间追踪驱逐通知;
其中,如果所述驱逐追踪模块运行在积极模式中,并且在所述事务的执行期间追踪到驱逐通知,所述驱逐追踪模块就中止所述事务;以及如果所述驱逐追踪模块运行在谨慎模式中,并且在所述事务的执行期间追踪到驱逐通知,所述驱逐追踪模块就对所述事务进行有效确认。
3.如权利要求2所述的方法,其中,所述驱逐通知表示从由以下所构成的组中选择的访问:远程资源对所述共享行的驱逐,由于容量约束造成的所述共享行的驱逐,由于远程资源对所述共享行的探查造成的所述共享行的驱逐,以及由于对所述共享行的访问使在与所述事务相关联的事务存储器组中存储的所述共享行的副本无效造成的所述共享行的驱逐,以及
其中,所述驱逐追踪模块中的处理机:如果所述驱逐追踪模块运行在所述积极模式中,就基于所述驱逐通知中止所述事务,并且如果所述驱逐追踪模块运行在所述谨慎模式中,就基于所述驱逐通知对所述事务进行有效确认。
4.如权利要求1所述的方法,其中,所述元数据单元为一锁定。
5.如权利要求4所述的方法,其中,所述锁定在锁定阵列中,并且其中,借助于用以存取所述共享行的地址的散列值,在所述锁定阵列中定位所述锁定。
6.如权利要求5所述的方法,其中,如果所述锁定是被拥有的,则所述锁定的状态是第一被拥有状态,该第一被拥有状态由存储在所述锁定中的第一值来表示,以及如果所述锁定是非被拥有的,则所述锁定的状态是第二非被拥有状态,该第二非被拥有状态由存储在所述锁定中的第二版本值来表示。
7.如权利要求6所述的方法,其中,所述第一值是偶数,以及其中,所述第二版本值是奇数。
8.如权利要求6所述的方法,其中,缺省地,所述锁定模块运行在积极模式中,以及其中,如果所述事务被中止的次数为第一数量,则所述锁定模块就运行在谨慎模式中。
9.如权利要求8所述的方法,其中,当运行在所述积极模式中时,如果所述锁定处于所述第二非被拥有状态,则在检查了所述锁定的状态之后,所述锁定模块获得所述锁定,并且不在局部事务存储器组中存储所述第二版本值。
10.如权利要求8所述的方法,其中,当运行在所述谨慎模式中时,所述锁定模块用于:
如果所述锁定是所述第二非被拥有状态,则在检查了所述锁定的状态之后,获得所述锁定,并将所述第二版本值存储在局部事务存储器组中,以及
在提交所述事务时,对所存储的第二版本值进行有效确认。
11.如权利要求1所述的方法,其中,所述加速模块还用于确定对所述共享行的所述访问是否是在所述事务的执行期间对所述共享行的第一次访问,并且其中,确定对所述共享行的所述访问是否是在所述事务的执行期间对所述共享行的第一次访问包括:
检查与所述共享行相关联的事务位,其中,如果在所述事务的执行期间还没有访问过所述共享行,则所述事务位表示第一值,以及如果在所述事务的执行期间先前已经访问过所述共享行,则所述事务位表示第二值。
12.如权利要求11所述的方法,其中,如果对所述共享行的所述访问不是在所述事务的执行期间对所述共享行的第一次访问,则允许访问所述共享行,而不调用所述锁定模块,该操作包括:如果所述事务位表示所述第二值,则将所述共享行提供给所述执行模块,而不调用所述锁定模块来检查所述锁定的状态。
13.如权利要求11所述的方法,其中,通过使所述事务位成为所述共享行内的位,将所述事务位与所述共享行相关联。
14.如权利要求1所述的方法,其中,所述共享存储器是高速缓冲存储器,其在存在于微处理器上的至少两个资源之间进行共享,并且其中,所述执行模块包括定点单元和浮点单元,所述定点单元执行定点数据操作,所述浮点单元执行浮点数据操作。
15.一种用于加速处理器中的事务执行的方法,其中,所述处理器包括高速缓冲存储器,所述高速缓冲存储器包含多个高速缓存行,所述方法包括:
使用处理器中的执行资源来执行事务,所述事务包括第一指令,用于访问所述多个高速缓存行中的第一高速缓存行,所述第一高速缓存行与第一事务字段和第一锁定相关联;
使用处理器中的加速模块来:
如果所述第一事务字段表示第一值,其中所述第一值表示所述访问是在所述事务的执行期间对所述第一高速缓存行的第一次访问,则在访问所述第一高速缓存行之前检查所述第一锁定的状态,
如果所述第一事务字段表示第二值,其中所述第二值表示所述访问不是在所述事务的执行期间对所述第一高速缓存行的第一次访问,则在访问所述第一高速缓存行之前不检查所述第一锁定的状态,以及
如果所述访问是在所述事务的执行期间对所述第一高速缓存行的第一次访问,则在对于所述第一高速缓存行进行所述访问时,设置所述第一事务字段以表示所述第二值。
16.如权利要求15所述的方法,其中,所述多个高速缓存行中的每一个高速缓存行都能够存储多个元素,并且其中,所述第一事务字段包括多个事务位,所述多个事务位中的每一个都对应于在所述第一高速缓存行中的所述多个元素之一。
17.如权利要求16所述的方法,其中,所述多个元素中的每一个都分别是从由以下构成的组中选择的:指令,操作数,以及逻辑值组;并且其中,所述第一高速缓存行通过将所述第一高速缓存行中的所述多个元素中的至少一个元素映射到第一锁定,来使所述第一高速缓存行与所述第一锁定相关联。
18.如权利要求15所述的方法,其中,所述第一高速缓存行通过哈希表与所述第一锁定相关联,借助于用以存取所述第一高速缓存行的地址的一部分,在所述哈希表中定位所述第一锁定。
19.如权利要求15所述的方法,其中,所述第一事务字段包含事务位,并且其中,所述第一值是高逻辑值,所述第二值是低逻辑值。
20.如权利要求15所述的方法,其中,所述第一指令是装入指令,并且其中,所述加速模块当运行在第一模式中时,在获得所述第一锁定时,不保存在所述第一锁定中所存储的版本号的本地副本,当运行在第二模式中时,在获得所述第一锁定时,保存在所述第一锁定中所存储的版本号的本地副本。
21.如权利要求20所述的方法,其中,使用在所述处理器中的提交模块来:
如果所述加速模块运行在所述第二模式中,则在提交所述事务之前对所述版本号的本地副本进行有效确认,以确定所述第一高速缓存行是否被驱逐;以及
在提交所述事务时,将所述第一事务字段复位为所述第一值。
22.如权利要求15所述的方法,其中,如果在提交所述事务之前所述第一高速缓存行被驱逐,则所述执行资源还执行处理机例程,以中止所述事务,以及其中,所述处理机例程能够以一个事务的粒度回滚被嵌套的事务。
23.如权利要求15所述的方法,其中,从由以下构成的组中选择所述处理器:主机处理器、微处理器、处理内核、逻辑处理器、以及嵌入式处理器、多线程处理器和多内核处理器。
24.一种用于加速在多资源微处理器中的事务执行的方法,其中所述多资源微处理器包括高速缓冲存储器,所述高速缓冲存储器包含多个高速缓存行,所述方法包括:
使用所述多资源微处理器中的执行单元来执行事务,所述事务包括对所述多个高速缓存行中的一高速缓存行的多次访问;
使用所述多资源微处理器中的加速模块来:
在所述事务的未决状态期间对所述高速缓存行的所述多次访问中的第一次访问时,将所述执行单元的执行重新引向与所述高速缓存行相关联的屏障,并且
允许在所述事务的未决状态期间对所述高速缓存行的所述多次访问中的后续访问,而不将执行重新引向与所述高速缓存行相关联的屏障;
其中,系统存储器耦合到所述多资源微处理器,用于存储要装入到所述高速缓冲存储器的所述多个高速缓存行中的元素。
25.如权利要求24所述的方法,其中,从由以下构成的组中选择所述多资源微处理器中的多个资源中的每一个资源:处理器内核、逻辑处理器、处理器线程、以及物理处理器,以及其中,所述系统存储器是从由以下构成的组中选择的存储器件:静态随机存取存储器SRAM、动态随机存取存储器DRAM、双倍数据速率随机存取存储器DDR RAM、和缓冲随机存取存储器RAM。
26.如权利要求24所述的方法,其中,将所述执行单元的执行重新引向与所述高速缓存行相关联的屏障的操作包括:
如果在所述事务的未决状态期间还没有对所述高速缓存行进行第一次访问,则将进位标志设置为第一值;
检查所述进位标志;以及
在检查所述进位标志之后,如果所述进位标志表示所述第一值,则调用处理机,将所述执行单元的执行重新引向所述屏障。
27.如权利要求24所述的方法,其中,将所述执行单元的执行重新引向与所述高速缓存行相关联的屏障的操作包括:
确定在所述事务的未决状态期间是否已经对所述高速缓存行进行了第一次访问;
如果在所述事务的未决状态期间还没有对所述高速缓存行进行第一次访问,就产生中断;以及
用处理机处理所述中断,所述处理机将所述执行单元的执行重新引向所述屏障。
28.如权利要求27所述的方法,其中,确定在所述事务的未决状态期间是否已经对所述高速缓存行进行了第一次访问的操作包括:
检查与所述高速缓存行相关联的事务位;
如果所述事务位表示第一逻辑值,则确定在所述事务的未决状态期间已经对所述高速缓存行进行了第一次访问;以及
如果所述事务位表示第二逻辑值,则确定在所述事务的未决状态期间还没有对所述高速缓存行进行第一次访问。
29.如权利要求28所述的方法,其中,在所述事务的未决状态期间对所述高速缓存行进行所述第一次访问时,将所述事务位从所述第一逻辑值变为所述第二逻辑值,以及其中,在提交所述事务时,将所述事务位复位为所述第一逻辑值。
30.如权利要求27所述的方法,其中,如果出现高速缓存未命中,则也会将所述执行单元的执行重新引向与所述高速缓存行相关联的屏障。
31.如权利要求27所述的方法,其中,所述屏障包括在锁定阵列内的一锁定,借助于用以存取所述高速缓存行的地址的至少一部分在所述锁定阵列中定位所述锁定。
32.如权利要求31所述的方法,其中,如果所述锁定被所述多资源处理器中的资源所拥有,则所述锁定就表示偶数;以及如果所述锁定未被所述多资源处理器中的资源所拥有,则所述锁定就表示奇数版本号,以表示所述高速缓存行的版本。
33.一种用于加速事务执行的方法,包括:
执行事务内的存储器访问指令,其中,所述存储器访问指令存取共享存储器中的单元;
如果与所述单元相关联的事务位表示第一值,其中所述第一值表示所述访问不是在所述事务的未决状态期间对所述单元的第一次访问,则访问所述单元,而不用确定映射到所述共享存储器中的所述单元的锁定的状态;
如果与所述单元相关联的所述事务位表示第二值,其中所述第二值表示所述访问是在所述事务的未决状态期间对所述单元的第一次访问,则:
确定所述锁定的状态,
如果所述锁定的状态表示非被拥有状态,则获得所述锁定并访问所述单元,
将所述事务位设置为所述第一值;以及
如果所述单元被驱逐,并且与所述单元相关联的所述事务位表示所述第一值,则产生驱逐通知。
34.如权利要求33所述的方法,其中,基于从由以下构成的组中选择的驱逐事件来产生所述驱逐通知:驱逐中断、对驱逐计数器的检查、以及由于容量约束造成的驱逐。
35.如权利要求33所述的方法,其中,如果所述锁定表示奇数版本值,则所述锁定的状态就表示所述非被拥有状态,并且如果所述锁定表示偶数值,则所述锁定的状态就表示被拥有状态。
36.如权利要求35所述的方法,其中,获得所述锁定的操作包括:将所述偶数值写入所述锁定中。
37.如权利要求36所述的方法,还包括:
如果运行在积极模式中,则:
在将所述偶数值写入所述锁定中之前,不存储所述奇数版本值,
如果在所述事务的未决状态期间没有产生驱逐通知,则提交所述事务,以及
如果在所述事务的未决状态期间产生了驱逐通知,则中止所述事务。
38.如权利要求37所述的方法,还包括:
如果运行在谨慎模式中:
在将所述偶数值写入所述锁定中之前,存储所述奇数版本值,
如果在所述事务的未决状态期间没有产生驱逐通知,则提交所述事务,以及
如果在所述事务的未决状态期间产生了驱逐通知,则在提交所述事务之前对所述奇数版本值进行有效确认。
39.如权利要求38所述的方法,其中,所述积极模式是缺省模式,以及其中,如果所述事务中止了预定次数,则发生谨慎模式操作。
40.如权利要求33所述的方法,其中,从由以下构成的组选择对所述单元的访问:从所述单元读取、向所述单元写入、从所述单元装入、以及存储到所述单元。
41.一种用于加速事务执行的方法,包括:
确定用以存取共享存储器中的单元的访问是否是在事务的未决状态期间对所述单元的第一次访问;
如果所述访问是在所述事务的未决状态期间对所述单元的所述第一次访问,则将执行重新引向与所述共享存储器中的单元相关联的屏障;
如果所述访问是在所述事务的未决状态期间的所述第一次访问之后的访问,则访问所述共享存储器中的所述单元,而不将执行重新引向与所述共享存储器中的所述单元相关联的屏障。
42.如权利要求41所述的方法,其中,所述单元用于存储多个元素,以及其中,从由以下构成的组中分别选择所述多个元素中的每一个:指令、操作数以及逻辑值组。
43.如权利要求42所述的方法,其中,要存储在所述单元中的所述多个元素中的每一个元素都与事务位相关联,以及其中,确定用以存取所述共享存储器中的所述单元的所述访问是否是对所述单元的第一次访问的步骤包括:
确定在所述多个元素中由用以存取所述单元的所述访问所存取的至少一个元素;
检查与所述多个元素中的所述至少一个元素相关联的所述事务位;
如果与所述至少一个元素相关联的所述事务位表示第一值,则确定用以存取所述共享存储器中的所述单元的所述访问是对所述单元的第一次访问。
44.如权利要求41所述的方法,其中,确定用以存取所述共享存储器中的所述单元的所述访问是否是对所述单元的第一次访问的步骤包括:
检查与所述单元相关联的事务位;
如果所述事务位表示第一值,则确定用以存取所述共享存储器中的所述单元的所述访问是第一次访问。
45.如权利要求44所述的方法,其中,如果所述访问是在所述事务的未决状态期间对所述单元的所述第一次访问,则将执行重新引向与所述共享存储器中所述单元相关联的屏障,该步骤包括:
如果所述事务位表示所述第一值,则产生事务未命中中断;
执行处理机,以处理所述事务未命中中断,其中,处理所述事务未命中中断的操作包括:在访问所述单元之前,检查与所述单元相关联的所述屏障。
46.如权利要求45所述的方法,其中,与所述单元相关联的所述屏障包括在哈希表中与所述单元相关联的锁定,其中,借助于用以存取所述共享存储器中的所述单元的地址的一部分,在所述哈希表中定位所述锁定。
47.如权利要求46所述的方法,还包括:
在将执行重新引向所述屏障并获得与所述单元相关联的所述锁定之后,访问所述单元;以及
在访问所述单元之后,设置与所述单元相关联的所述事务位以表示第二值。
48.如权利要求47所述的方法,还包括:
确定所述访问是否是在所述事务的未决状态期间的所述第一次访问之后的访问,其中,确定所述访问是否是所述第一次访问之后的访问的操作包括:
检查与所述单元相关联的所述事务位,以及
如果所述事务位表示所述第二值,则确定所述访问是所述第一次访问之后的访问。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/349,787 | 2006-02-07 | ||
US11/349,787 US20070186056A1 (en) | 2006-02-07 | 2006-02-07 | Hardware acceleration for a software transactional memory system |
PCT/US2007/003112 WO2007092422A2 (en) | 2006-02-07 | 2007-02-06 | Hardware acceleration for a software transactional memory system |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101495968A CN101495968A (zh) | 2009-07-29 |
CN101495968B true CN101495968B (zh) | 2013-05-29 |
Family
ID=38335342
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007800020179A Expired - Fee Related CN101495968B (zh) | 2006-02-07 | 2007-02-06 | 用于软件事务存储器系统的硬件加速 |
Country Status (4)
Country | Link |
---|---|
US (4) | US20070186056A1 (zh) |
EP (3) | EP2562642B1 (zh) |
CN (1) | CN101495968B (zh) |
WO (1) | WO2007092422A2 (zh) |
Families Citing this family (114)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8813052B2 (en) * | 2005-12-07 | 2014-08-19 | Microsoft Corporation | Cache metadata for implementing bounded transactional memory |
US7809903B2 (en) * | 2005-12-15 | 2010-10-05 | Intel Corporation | Coordinating access to memory locations for hardware transactional memory transactions and software transactional memory transactions |
US8683143B2 (en) * | 2005-12-30 | 2014-03-25 | Intel Corporation | Unbounded transactional memory systems |
US20070186056A1 (en) | 2006-02-07 | 2007-08-09 | Bratin Saha | Hardware acceleration for a software transactional memory system |
US8898652B2 (en) * | 2006-03-23 | 2014-11-25 | Microsoft Corporation | Cache metadata for accelerating software transactional memory |
US8180967B2 (en) * | 2006-03-30 | 2012-05-15 | Intel Corporation | Transactional memory virtualization |
US8180977B2 (en) * | 2006-03-30 | 2012-05-15 | Intel Corporation | Transactional memory in out-of-order processors |
US7647454B2 (en) * | 2006-06-12 | 2010-01-12 | Hewlett-Packard Development Company, L.P. | Transactional shared memory system and method of control |
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 |
US7802136B2 (en) | 2006-12-28 | 2010-09-21 | Intel Corporation | Compiler technique for efficient register checkpointing to support transaction roll-back |
US8132158B2 (en) * | 2006-12-28 | 2012-03-06 | Cheng Wang | Mechanism for software transactional memory commit/abort in unmanaged runtime environment |
US8185698B2 (en) * | 2007-04-09 | 2012-05-22 | Bratin Saha | Hardware acceleration of a write-buffering software transactional memory |
US8688920B2 (en) * | 2007-05-14 | 2014-04-01 | International Business Machines Corporation | Computing system with guest code support of transactional memory |
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 |
US8321637B2 (en) * | 2007-05-14 | 2012-11-27 | International Business Machines Corporation | Computing system with optimized support for transactional memory |
US9009452B2 (en) | 2007-05-14 | 2015-04-14 | International Business Machines Corporation | Computing system with transactional memory using millicode assists |
US8095750B2 (en) * | 2007-05-14 | 2012-01-10 | International Business Machines Corporation | Transactional memory system with fast processing of common conflicts |
US7899999B2 (en) * | 2007-06-27 | 2011-03-01 | Microsoft Corporation | Handling falsely doomed parents of nested transactions |
US9280397B2 (en) * | 2007-06-27 | 2016-03-08 | Intel Corporation | Using buffered stores or monitoring to filter redundant transactional accesses and mechanisms for mapping data to buffered metadata |
US8140773B2 (en) | 2007-06-27 | 2012-03-20 | Bratin Saha | Using ephemeral stores for fine-grained conflict detection in a hardware accelerated STM |
US7941411B2 (en) | 2007-06-29 | 2011-05-10 | Microsoft Corporation | Memory transaction grouping |
US7890472B2 (en) | 2007-09-18 | 2011-02-15 | Microsoft Corporation | Parallel nested transactions in transactional memory |
US8078807B2 (en) * | 2007-12-27 | 2011-12-13 | Intel Corporation | Accelerating software lookups by using buffered or ephemeral stores |
US8032736B2 (en) * | 2008-02-26 | 2011-10-04 | International Business Machines Corporation | Methods, apparatus and articles of manufacture for regaining memory consistency after a trap via transactional memory |
US8972794B2 (en) * | 2008-02-26 | 2015-03-03 | International Business Machines Corporation | Method and apparatus for diagnostic recording using transactional memory |
US9128750B1 (en) * | 2008-03-03 | 2015-09-08 | Parakinetics Inc. | System and method for supporting multi-threaded transactions |
US9367363B2 (en) * | 2008-05-12 | 2016-06-14 | Oracle America, Inc. | System and method for integrating best effort hardware mechanisms for supporting transactional memory |
US8533663B2 (en) * | 2008-05-12 | 2013-09-10 | Oracle America, Inc. | System and method for utilizing available best effort hardware mechanisms for supporting transactional memory |
US20100017581A1 (en) * | 2008-07-18 | 2010-01-21 | Microsoft Corporation | Low overhead atomic memory operations |
US8898401B2 (en) * | 2008-11-07 | 2014-11-25 | Oracle America, Inc. | Methods and apparatuses for improving speculation success in processors |
US8806145B2 (en) * | 2008-11-07 | 2014-08-12 | Oracle America, Inc. | Methods and apparatuses for improving speculation success in processors |
US8914620B2 (en) * | 2008-12-29 | 2014-12-16 | Oracle America, Inc. | Method and system for reducing abort rates in speculative lock elision using contention management mechanisms |
GB2469299B (en) * | 2009-04-07 | 2011-02-16 | Imagination Tech Ltd | Ensuring consistency between a data cache and a main memory |
US8489864B2 (en) * | 2009-06-26 | 2013-07-16 | Microsoft Corporation | Performing escape actions in transactions |
US20100332768A1 (en) * | 2009-06-26 | 2010-12-30 | Microsoft Corporation | Flexible read- and write-monitored and buffered memory blocks |
US8250331B2 (en) * | 2009-06-26 | 2012-08-21 | Microsoft Corporation | Operating system virtual memory management for hardware transactional memory |
US8356166B2 (en) * | 2009-06-26 | 2013-01-15 | Microsoft Corporation | Minimizing code duplication in an unbounded transactional memory system by using mode agnostic transactional read and write barriers |
US8812796B2 (en) | 2009-06-26 | 2014-08-19 | Microsoft Corporation | Private memory regions and coherence optimizations |
US8370577B2 (en) * | 2009-06-26 | 2013-02-05 | Microsoft Corporation | Metaphysically addressed cache metadata |
US8229907B2 (en) * | 2009-06-30 | 2012-07-24 | Microsoft Corporation | Hardware accelerated transactional memory system with open nested transactions |
EP2467852B1 (en) | 2009-08-20 | 2019-05-22 | Rambus Inc. | Atomic memory device |
US8566524B2 (en) | 2009-08-31 | 2013-10-22 | International Business Machines Corporation | Transactional memory system with efficient cache support |
US8327188B2 (en) * | 2009-11-13 | 2012-12-04 | Oracle America, Inc. | Hardware transactional memory acceleration through multiple failure recovery |
JP2011113518A (ja) * | 2009-11-30 | 2011-06-09 | Toshiba Corp | 情報処理装置及びロック設定方法 |
US8539465B2 (en) * | 2009-12-15 | 2013-09-17 | Microsoft Corporation | Accelerating unbounded memory transactions using nested cache resident transactions |
US8095824B2 (en) * | 2009-12-15 | 2012-01-10 | Intel Corporation | Performing mode switching in an unbounded transactional memory (UTM) system |
US9092253B2 (en) * | 2009-12-15 | 2015-07-28 | Microsoft Technology Licensing, Llc | Instrumentation of hardware assisted transactional memory system |
US8316194B2 (en) * | 2009-12-15 | 2012-11-20 | Intel Corporation | Mechanisms to accelerate transactions using buffered stores |
US9477515B2 (en) | 2009-12-15 | 2016-10-25 | Intel Corporation | Handling operating system (OS) transitions in an unbounded transactional memory (UTM) mode |
US8521995B2 (en) * | 2009-12-15 | 2013-08-27 | Intel Corporation | Handling operating system (OS) transitions in an unbounded transactional memory (UTM) mode |
US8402218B2 (en) * | 2009-12-15 | 2013-03-19 | Microsoft Corporation | Efficient garbage collection and exception handling in a hardware accelerated transactional memory system |
US8533440B2 (en) * | 2009-12-15 | 2013-09-10 | Microsoft Corporation | Accelerating parallel transactions using cache resident transactions |
US8464261B2 (en) | 2010-03-31 | 2013-06-11 | Oracle International Corporation | System and method for executing a transaction using parallel co-transactions |
US8402227B2 (en) * | 2010-03-31 | 2013-03-19 | Oracle International Corporation | System and method for committing results of a software transaction using a hardware transaction |
DE112011102242T5 (de) * | 2010-07-02 | 2013-04-25 | International Business Machines Corporation | Vorrichtung zum Verarbeiten einer Stapelarbeitseinheit |
US9965387B1 (en) * | 2010-07-09 | 2018-05-08 | Cypress Semiconductor Corporation | Memory devices having embedded hardware acceleration and corresponding methods |
US8793471B2 (en) | 2010-12-07 | 2014-07-29 | Advanced Micro Devices, Inc. | Atomic program verification |
US9122476B2 (en) * | 2010-12-07 | 2015-09-01 | Advanced Micro Devices, Inc. | Programmable atomic memory using hardware validation agent |
US8788794B2 (en) | 2010-12-07 | 2014-07-22 | Advanced Micro Devices, Inc. | Programmable atomic memory using stored atomic procedures |
US8935485B2 (en) | 2011-08-08 | 2015-01-13 | Arm Limited | Snoop filter and non-inclusive shared cache memory |
US9137778B2 (en) * | 2011-12-05 | 2015-09-15 | Qualcomm Incorporated | Systems and methods for low overhead paging |
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 |
US9250902B2 (en) | 2012-03-16 | 2016-02-02 | International Business Machines Corporation | Determining the status of run-time-instrumentation controls |
US9454462B2 (en) | 2012-03-16 | 2016-09-27 | International Business Machines Corporation | Run-time instrumentation monitoring for processor characteristic changes |
US9471315B2 (en) | 2012-03-16 | 2016-10-18 | International Business Machines Corporation | Run-time instrumentation reporting |
US9442824B2 (en) | 2012-03-16 | 2016-09-13 | International Business Machines Corporation | Transformation of a program-event-recording event into a run-time instrumentation event |
US9280447B2 (en) | 2012-03-16 | 2016-03-08 | International Business Machines Corporation | Modifying run-time-instrumentation controls from a lesser-privileged state |
US9483268B2 (en) | 2012-03-16 | 2016-11-01 | International Business Machines Corporation | Hardware based run-time instrumentation facility for managed run-times |
US9158660B2 (en) | 2012-03-16 | 2015-10-13 | International Business Machines Corporation | Controlling operation of a run-time instrumentation facility |
US9405541B2 (en) | 2012-03-16 | 2016-08-02 | International Business Machines Corporation | Run-time instrumentation indirect sampling by address |
US9367316B2 (en) | 2012-03-16 | 2016-06-14 | International Business Machines Corporation | Run-time instrumentation indirect sampling by instruction operation code |
US9411591B2 (en) | 2012-03-16 | 2016-08-09 | International Business Machines Corporation | Run-time instrumentation sampling in transactional-execution mode |
US9430238B2 (en) | 2012-03-16 | 2016-08-30 | International Business Machines Corporation | Run-time-instrumentation controls emit instruction |
US9465716B2 (en) | 2012-03-16 | 2016-10-11 | International Business Machines Corporation | Run-time instrumentation directed sampling |
US9361115B2 (en) | 2012-06-15 | 2016-06-07 | International Business Machines Corporation | Saving/restoring selected registers in transactional processing |
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 |
US9448796B2 (en) | 2012-06-15 | 2016-09-20 | International Business Machines Corporation | Restricted instructions in transactional execution |
US9317460B2 (en) | 2012-06-15 | 2016-04-19 | International Business Machines Corporation | Program event recording within a transactional environment |
CN104583936B (zh) * | 2012-06-15 | 2019-01-04 | 英特尔公司 | 具有组成按序从存储器进行读取的加载的存储器一致性模型中的乱序加载的信号量方法和系统 |
US20130339680A1 (en) | 2012-06-15 | 2013-12-19 | International Business Machines Corporation | Nontransactional store instruction |
US8880959B2 (en) | 2012-06-15 | 2014-11-04 | International Business Machines Corporation | Transaction diagnostic block |
US9367323B2 (en) | 2012-06-15 | 2016-06-14 | International Business Machines Corporation | Processor assist facility |
US9436477B2 (en) | 2012-06-15 | 2016-09-06 | International Business Machines Corporation | Transaction abort instruction |
US9384004B2 (en) | 2012-06-15 | 2016-07-05 | International Business Machines Corporation | Randomized testing within transactional execution |
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 |
US10437602B2 (en) | 2012-06-15 | 2019-10-08 | International Business Machines Corporation | Program interruption filtering in transactional execution |
US9772854B2 (en) | 2012-06-15 | 2017-09-26 | International Business Machines Corporation | Selectively controlling instruction execution in transactional processing |
US8966324B2 (en) | 2012-06-15 | 2015-02-24 | International Business Machines Corporation | Transactional execution branch indications |
US9336046B2 (en) | 2012-06-15 | 2016-05-10 | International Business Machines Corporation | Transaction abort processing |
US9442737B2 (en) | 2012-06-15 | 2016-09-13 | International Business Machines Corporation | Restricting processing within a processor to facilitate transaction completion |
WO2014078481A1 (en) * | 2012-11-15 | 2014-05-22 | Violin Memory Inc. | Memorty array with atomic test and set |
CN103064729A (zh) * | 2012-12-19 | 2013-04-24 | 上海西本网络科技有限公司 | 对共享资源的加锁、控制方法和装置 |
US9792062B2 (en) | 2013-05-10 | 2017-10-17 | Empire Technology Development Llc | Acceleration of memory access |
US10203995B2 (en) * | 2013-11-22 | 2019-02-12 | Excalibur Ip, Llc | Method or system for access to shared resource |
US11809917B2 (en) | 2014-07-14 | 2023-11-07 | Oracle International Corporation | Systems and methods for safely subscribing to locks using hardware extensions |
US10521277B2 (en) * | 2014-07-14 | 2019-12-31 | Oracle International Corporation | Systems and methods for safely subscribing to locks using hardware extensions |
US9501411B2 (en) | 2014-08-29 | 2016-11-22 | International Business Machines Corporation | Cache backing store for transactional memory |
US9471397B2 (en) * | 2014-10-03 | 2016-10-18 | International Business Machines Corporation | Global lock contention predictor |
US10817425B2 (en) * | 2014-12-26 | 2020-10-27 | Intel Corporation | Hardware/software co-optimization to improve performance and energy for inter-VM communication for NFVs and other producer-consumer workloads |
US9513960B1 (en) | 2015-09-22 | 2016-12-06 | International Business Machines Corporation | Inducing transactional aborts in other processing threads |
US9563467B1 (en) * | 2015-10-29 | 2017-02-07 | International Business Machines Corporation | Interprocessor memory status communication |
US10261827B2 (en) | 2015-10-29 | 2019-04-16 | International Business Machines Corporation | Interprocessor memory status communication |
US9916179B2 (en) | 2015-10-29 | 2018-03-13 | International Business Machines Corporation | Interprocessor memory status communication |
US9760397B2 (en) | 2015-10-29 | 2017-09-12 | International Business Machines Corporation | Interprocessor memory status communication |
US10585610B1 (en) | 2016-09-30 | 2020-03-10 | EMC IP Holding Company LLC | Locking data structures with locking structures in flash memory by setting bits in the locking structures |
CN106776052B (zh) * | 2016-12-07 | 2019-12-10 | 金蝶软件(中国)有限公司 | 共享资源访问方法和装置 |
US10664306B2 (en) * | 2017-01-13 | 2020-05-26 | Arm Limited | Memory partitioning |
CN108446167B (zh) * | 2018-02-09 | 2020-11-06 | 烽火通信科技股份有限公司 | 一种分布式事务处理方法及系统 |
US10733171B2 (en) * | 2018-04-03 | 2020-08-04 | Sap Se | Database lock management with cache-optimized hash table |
US11347713B2 (en) * | 2019-09-27 | 2022-05-31 | Salesforce.Com, Inc. | Version-based table locking |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6804243B1 (en) * | 1999-11-22 | 2004-10-12 | Texas Instruments Incorporated | Hardware acceleration for segmentation of message packets in a universal serial bus peripheral device |
Family Cites Families (38)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5263155A (en) * | 1991-02-21 | 1993-11-16 | Texas Instruments Incorporated | System for selectively registering and blocking requests initiated by optimistic and pessimistic transactions respectively for shared objects based upon associated locks |
US5428761A (en) * | 1992-03-12 | 1995-06-27 | Digital Equipment Corporation | System for achieving atomic non-sequential multi-word operations in shared memory |
US5754819A (en) * | 1994-07-28 | 1998-05-19 | Sun Microsystems, Inc. | Low-latency memory indexing method and structure |
US5699500A (en) * | 1995-06-01 | 1997-12-16 | Ncr Corporation | Reliable datagram service provider for fast messaging in a clustered environment |
US5812798A (en) * | 1996-01-26 | 1998-09-22 | Motorola, Inc. | Data processing system for accessing an external device and method therefore |
US5940839A (en) * | 1997-04-04 | 1999-08-17 | Hewlett-Packard Company | Fault-tolerant system and method of managing transaction failures in hierarchies |
US6195709B1 (en) * | 1997-07-24 | 2001-02-27 | International Business Machines Corporation | Method of providing persistency for transient objects in object oriented technology |
US6125371A (en) * | 1997-08-19 | 2000-09-26 | Lucent Technologies, Inc. | System and method for aging versions of data in a main memory database |
US6052760A (en) * | 1997-11-05 | 2000-04-18 | Unisys Corporation | Computer system including plural caches and utilizing access history or patterns to determine data ownership for efficient handling of software locks |
US6148300A (en) * | 1998-06-19 | 2000-11-14 | Sun Microsystems, Inc. | Hybrid queue and backoff computer resource lock featuring different spin speeds corresponding to multiple-states |
US6353881B1 (en) * | 1999-05-17 | 2002-03-05 | Sun Microsystems, Inc. | Supporting space-time dimensional program execution by selectively versioning memory updates |
US6823511B1 (en) * | 2000-01-10 | 2004-11-23 | International Business Machines Corporation | Reader-writer lock for multiprocessor systems |
US6684398B2 (en) * | 2000-05-31 | 2004-01-27 | Sun Microsystems, Inc. | Monitor entry and exit for a speculative thread during space and time dimensional execution |
US6463511B2 (en) * | 2000-12-29 | 2002-10-08 | Intel Corporation | System and method for high performance execution of locked memory instructions in a system with distributed memory and a restrictive memory model |
US7346632B2 (en) * | 2001-02-22 | 2008-03-18 | International Business Machines Corporation | Mechanism for executing nested transactions in an execution environment supporting flat transactions only |
US20020177831A1 (en) * | 2001-05-25 | 2002-11-28 | Kimberly-Clark Worldwide, Inc. | Personal care absorbent with inherent transfer delay |
WO2003001383A2 (en) * | 2001-06-26 | 2003-01-03 | Sun Microsystems, Inc. | Using an l2 directory to facilitate speculative loads in a multiprocessor system |
KR100567099B1 (ko) * | 2001-06-26 | 2006-03-31 | 썬 마이크로시스템즈, 인코포레이티드 | L2 디렉토리를 이용한 멀티프로세서 시스템의 가-저장촉진 방법 및 장치 |
US7328316B2 (en) * | 2002-07-16 | 2008-02-05 | Sun Microsystems, Inc. | Software transactional memory for dynamically sizable shared data structures |
US7002599B2 (en) * | 2002-07-26 | 2006-02-21 | Sun Microsystems, Inc. | Method and apparatus for hardware acceleration of clipping and graphical fill in display systems |
US7213109B1 (en) * | 2002-11-26 | 2007-05-01 | Unisys Corporation | System and method for providing speculative ownership of cached data based on history tracking |
US7269694B2 (en) * | 2003-02-13 | 2007-09-11 | Sun Microsystems, Inc. | Selectively monitoring loads to support transactional program execution |
US7269693B2 (en) * | 2003-02-13 | 2007-09-11 | Sun Microsystems, Inc. | Selectively monitoring stores to support transactional program execution |
US7089374B2 (en) * | 2003-02-13 | 2006-08-08 | Sun Microsystems, Inc. | Selectively unmarking load-marked cache lines during transactional program execution |
US6862664B2 (en) * | 2003-02-13 | 2005-03-01 | Sun Microsystems, Inc. | Method and apparatus for avoiding locks by speculatively executing critical sections |
US7587584B2 (en) * | 2003-02-19 | 2009-09-08 | Intel Corporation | Mechanism to exploit synchronization overhead to improve multithreaded performance |
US7340569B2 (en) * | 2004-02-10 | 2008-03-04 | Wisconsin Alumni Research Foundation | Computer architecture providing transactional, lock-free execution of lock-based programs |
US7349909B2 (en) * | 2004-03-02 | 2008-03-25 | Intel Corporation | Compact object header |
US7167956B1 (en) * | 2004-05-03 | 2007-01-23 | Sun Microsystems, Inc. | Avoiding inconsistencies between multiple translators in an object-addressed memory hierarchy |
US7567963B2 (en) * | 2004-06-28 | 2009-07-28 | Intel Corporation | Thread synchronization with lock inflation methods and apparatus for managed run-time environments |
US7856537B2 (en) * | 2004-09-30 | 2010-12-21 | Intel Corporation | Hybrid hardware and software implementation of transactional memory access |
US7685365B2 (en) * | 2004-09-30 | 2010-03-23 | Intel Corporation | Transactional memory execution utilizing virtual memory |
US7350034B2 (en) * | 2005-06-20 | 2008-03-25 | International Business Machines Corporation | Architecture support of best-effort atomic transactions for multiprocessor systems |
US7809903B2 (en) * | 2005-12-15 | 2010-10-05 | Intel Corporation | Coordinating access to memory locations for hardware transactional memory transactions and software transactional memory transactions |
US7870545B2 (en) * | 2005-12-16 | 2011-01-11 | Intel Corporation | Protecting shared variables in a software transactional memory system |
US20070143755A1 (en) * | 2005-12-16 | 2007-06-21 | Intel Corporation | Speculative execution past a barrier |
US7475228B2 (en) * | 2006-01-03 | 2009-01-06 | Sun Microsystems, Inc. | Ensuring progress in a system that supports execution of obstruction-free operations |
US20070186056A1 (en) | 2006-02-07 | 2007-08-09 | Bratin Saha | Hardware acceleration for a software transactional memory system |
-
2006
- 2006-02-07 US US11/349,787 patent/US20070186056A1/en not_active Abandoned
-
2007
- 2007-02-06 EP EP12006273.2A patent/EP2562642B1/en not_active Not-in-force
- 2007-02-06 CN CN2007800020179A patent/CN101495968B/zh not_active Expired - Fee Related
- 2007-02-06 EP EP12001665.4A patent/EP2503460B1/en active Active
- 2007-02-06 WO PCT/US2007/003112 patent/WO2007092422A2/en active Application Filing
- 2007-02-06 EP EP07717199.9A patent/EP1989619B1/en not_active Not-in-force
- 2007-10-29 US US11/926,423 patent/US7958319B2/en not_active Expired - Fee Related
- 2007-10-29 US US11/926,440 patent/US7725662B2/en not_active Expired - Fee Related
-
2010
- 2010-05-18 US US12/782,518 patent/US8521965B2/en not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6804243B1 (en) * | 1999-11-22 | 2004-10-12 | Texas Instruments Incorporated | Hardware acceleration for segmentation of message packets in a universal serial bus peripheral device |
Also Published As
Publication number | Publication date |
---|---|
EP2562642A1 (en) | 2013-02-27 |
EP1989619A2 (en) | 2008-11-12 |
EP1989619B1 (en) | 2013-04-24 |
EP2503460A1 (en) | 2012-09-26 |
WO2007092422A2 (en) | 2007-08-16 |
WO2007092422A3 (en) | 2008-10-23 |
US20070186056A1 (en) | 2007-08-09 |
US7958319B2 (en) | 2011-06-07 |
US20100229043A1 (en) | 2010-09-09 |
US20080046661A1 (en) | 2008-02-21 |
US8521965B2 (en) | 2013-08-27 |
EP2562642B1 (en) | 2016-10-26 |
US7725662B2 (en) | 2010-05-25 |
EP2503460B1 (en) | 2018-08-22 |
US20080059717A1 (en) | 2008-03-06 |
CN101495968A (zh) | 2009-07-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101495968B (zh) | 用于软件事务存储器系统的硬件加速 | |
KR102282135B1 (ko) | 영구적 저장 펜스 프로세서, 방법, 시스템, 및 명령어 | |
CN101097544B (zh) | 虚拟化事务存储器的全局溢出方法 | |
CN101317160B (zh) | 软件辅助的嵌套硬件事务 | |
US20180011748A1 (en) | Post-retire scheme for tracking tentative accesses during transactional execution | |
US5023776A (en) | Store queue for a tightly coupled multiple processor configuration with two-level cache buffer storage | |
TWI461912B (zh) | 用於交易式記憶體系統中之硬體屬性之記憶體模式 | |
US7219185B2 (en) | Apparatus and method for selecting instructions for execution based on bank prediction of a multi-bank cache | |
US20110219215A1 (en) | Atomicity: a multi-pronged approach | |
CN101470629A (zh) | 用于在事务性存储器系统中实现强原子性的机制 | |
CN103150206A (zh) | 高效且一致的软件事务存储器 | |
JPH05303492A (ja) | データ処理装置 | |
JPH06243034A (ja) | 推論的データ転送を有するデータ処理装置と動作方法 | |
US20230161704A1 (en) | Computing system with direct invalidation in a hierarchical cache structure based on at least one designated key identification code | |
CN111752477A (zh) | 用于提供具有低开销的存储器原子性的技术 | |
US5295253A (en) | Cache memory utilizing a two-phase synchronization signal for controlling saturation conditions of the cache | |
US10521262B2 (en) | Memory access request for a memory protocol | |
CN101533363B (zh) | 引退前-后混合硬件锁定省略(hle)方案 | |
US11971821B2 (en) | Computing system with write-back and invalidation in a hierarchical cache structure based on at least one designated key identification code | |
CN117270972B (zh) | 指令处理方法、装置、设备和介质 | |
IE901514A1 (en) | Method and apparatus for interfacing a system control unit¹for a multiprocessor system with the central processing¹units |
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: 20130529 Termination date: 20210206 |