CN104487946B - 用于事务存储器系统中的自适应线程调度的方法和设备 - Google Patents
用于事务存储器系统中的自适应线程调度的方法和设备 Download PDFInfo
- Publication number
- CN104487946B CN104487946B CN201280061721.2A CN201280061721A CN104487946B CN 104487946 B CN104487946 B CN 104487946B CN 201280061721 A CN201280061721 A CN 201280061721A CN 104487946 B CN104487946 B CN 104487946B
- Authority
- CN
- China
- Prior art keywords
- thread
- affairs
- conflict
- scheduling
- period
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- 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
- G06F9/467—Transactional memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Advance Control (AREA)
Abstract
本文描述用于事务存储器环境中的自适应线程调度的设备和方法。追踪随着时间的线程中的若干冲突。并且如果冲突超过阈值,可以延迟(自适应调度)线程以便避免竞争线程之间的冲突。此外,更复杂的版本可追踪在时期上由第二线程引起的第一线程内的事务异常中止的数量,以及在所述时期上由第一线程执行的事务的总数。根据所述追踪,确定第一线程关于第二线程的冲突比率。并且当第一线程将被调度时,如果第二线程正在运行并且冲突比率超过冲突比率阈值,则第一线程可以被延迟。
Description
技术领域
本公开关于集成电路的领域,并且更具体地,关于处理器中的并行执行。
背景技术
半导体处理和逻辑设计中的进展已经允许可出现在集成电路装置上的逻辑的量中的增长。作为结果,计算机系统配置已经从系统中的单个或多个集成电路演进到出现在单个集成电路上的多个核以及多个逻辑处理器。处理器或集成电路通常包括单个处理器管芯,其中处理器管芯可包括任何数量的核或逻辑处理器。
集成电路上不断增加的数量的核以及逻辑处理器使得更多软件线程能够并发执行。然而,可同时执行的软件线程的数量的增长已经造成同步软件线程中共享的数据的问题。存取多个核或多个逻辑处理器系统中的共享数据的一个普遍的解决方案包括使用锁来保证对共享数据的多个存取之间的互斥。然而,执行多个软件线程的不断增长的能力潜在地导致错误争用和串行化的执行。
例如,考虑保存共享数据的哈希表。通过锁系统,程序员可以锁住整个哈希表,从而允许一个线程存取整个哈希表。然而,其它线程的吞吐量和性能潜在地受到不利影响,因为在释放锁之前,它们不能存取哈希表中的任何条目。任一种方式,在将这个简单的示例外推到大规模程序中之后,显然锁争用的复杂性、串行化、精细粒度的同步以及死锁避免变成程序员非常麻烦的负担。
另一种最近的数据同步技术包括使用事务存储器(TM)。通常事务执行包括原子地执行一组多个微操作、操作或指令。在以上示例中,线程在哈希表内执行,并且它们的存储器存取被监视/追踪。如果线程存取/更改相同条目,则可执行冲突解决来确保数据有效性。一种类型的事务执行包括软件事务存储器(STM),其中存储器存取的追踪、冲突解决、异常中止任务以及其它事务任务在软件中执行,通常没有硬件的支持。另一种类型的事务执行包括硬件事务存储器(HTM)系统,其中包括软件以支持存取追踪、冲突解决和其它事务任务。
如可以看到的,TM具有提供多个线程之间的更好性能的潜力。然而,如果由于线程之间的数据冲突而产生太多事务异常中止,则性能可变成降级。换句话说,事务异常中止的成本(即,将架构和存储器状态退回到事务之前的点)可能是耗时的。并且虽然一些异常中止通常是实现可能的最高并行性能的一部分,太多异常中止可导致比不利用锁执行的受益花费更多时间来异常中止事务。传统地,如果事务异常中止太多次,执行回复到基于锁的执行。但是,仍没有尝试有效地调度线程以便最小化(或在一些情况下避免)并行线程之间的冲突。
发明内容
按照本发明的第一方面的一种用于线程调度的设备,包括:冲突模块,适于确定第一线程与第二线程的冲突率太高;以及线程调度模块,适于:确定在调度第一线程之前第二线程是否正在运行,并且响应于冲突模块确定第一线程与第二线程的冲突率太高以及线程调度模块确定第二线程正在运行而延迟第一线程的调度。
按照本发明的第二方面的一种用于线程调度的设备,包括:冲突逻辑,配置成确定在时间量上第一线程与第二线程的冲突度量;以及调度器逻辑,配置成当第二线程当前正在执行并且冲突度量大于冲突阈值时响应于调度第一线程的请求而延迟调度第一线程用于执行。
按照本发明的第三方面的一种非暂时性机器可读介质,其包括代码,代码在由机器执行时引起机器执行以下操作:确定第一线程中的由于与第二线程的冲突在时间段上异常中止的事务的第一数量;以及在第二线程当前正在运行时,基于第一线程中的在时间段上异常中止的事务的第一数量,响应于第一线程内的事务的开始,用控制软件调度器来延迟第一线程的调度。
按照本发明的第四方面的一种用于线程调度的方法,包括:确定在时间段上执行的第一线程中的事务的第一数量;确定在时间段上执行的第一数量的事务中的响应于与第二线程的冲突而异常中止的事务的第二数量;基于事务的第一数量和事务的第二数量来确定冲突比率;以及响应于第二线程当前正在运行并且冲突比率超过冲突阈值而延迟第一线程的调度。
按照本发明的第五方面的一种包括代码的非暂时机器可读介质,当由机器执行代码时,引起机器执行上面的方法。
按照本发明的第六方面的一种用于线程调度的设备,包括:用于确定在时间段上执行的第一线程中的事务的第一数量的部件;
用于确定在时间段上执行的第一数量的事务中的响应于与第二线程的冲突而异常中止的事务的第二数量的部件;用于基于事务的第一数量和事务的第二数量来确定冲突比率的部件;以及用于响应于第二线程当前正在运行并且冲突比率超过冲突阈值而延迟第一线程的调度的部件。
附图说明
本发明通过示例的方式示出并且不意图受附图限制。
图1图示了包括具有多个处理元件(2个核以及4个线程槽)的处理器的系统的逻辑表示的实施例。
图2图示了软件事务存储器系统和支持其执行的硬件结构的逻辑表示的实施例。
图3图示了基于线程冲突自适应调度线程的模块的逻辑表示的实施例。
图4图示了基于线程冲突自适应调度线程的模块的逻辑表示的实施例。
图5图示了用于基于与当前运行的线程的冲突来延迟线程的调度的方法的流程图的实施例。
图6图示了用于基于线程冲突自适应调度线程的方法的流程图的实施例。
图7图示了用于基于线程冲突自适应调度线程的方法的流程图的另一实施例。
具体实施方式
在以下描述中,阐述了许多特定细节,例如以下示例:特定类型的特定处理器配置、特定硬件结构、特定架构和微架构细节、特定寄存器配置、特定冲突公式、特定类型的控制软件等,以便提供对本发明的透彻理解。然而,对于本领域技术人员将显而易见的是不需要采用这些特定细节来实践本发明。在其它实例中,公知的部件或方法,例如特定和备选的处理器架构、用于所述算法的特定逻辑电路/代码、特定功率单元实现细节、解码器的特定操作、指令的特定格式和处理器的其它特定操作细节未详细描述以便避免不必要地使本发明变得模糊。
虽然参考处理器描述以下实施例,但是其它实施例也可适用于其它类型的集成电路和逻辑装置。本文描述的实施例的类似技术和教导可应用于其它类型的电路或半导体装置(其可受益于更高的管道吞吐量和改进的性能)。例如,公开的实施例不限于计算机系统。并且还可用于其它装置,例如手持式装置和嵌入式应用。手持式装置的一些示例包括蜂窝电话、互联网协议装置、数字照相机、个人数字助理(PDA)以及手持式PC。嵌入式应用包括微控制器、数字信号处理器(DSP0、片上系统、网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交换机或能够执行下面教导的功能和操作的任何其它系统。
本文描述的方法和装置用于自适应调度线程以最小化冲突,具体地,关于微处理器(例如处理器100)的事务执行来讨论自适应线程调度。但是,并不如此限制本文描述的设备和方法,因为它们可以结合备选处理器架构以及包括多个处理元件的任何装置来实现。例如,自适应线程调度可以在其它类型的集成电路和逻辑装置中实现。或者它可以用于小形状因素的装置、手持式装置或嵌入式应用中。另外,自适应线程调度还可实现用于调度与事务执行无关的线程。作为示例,调度线程以便采用与如下描述的类型方式来最小化高速缓存或其它共享资源中的系统失效。
参考图1,图示了包括多个核的处理器的实施例。处理器100包括任何处理器或处理装置,例如微处理器、嵌入式处理器、数字信号处理器(DSP)、网络处理器、手持式处理器或执行代码的其它装置。在一个实施例中,处理器100包括至少两个核——核101和102,其可包括不对称核或对称核(图示的实施例)。然而,处理器100可包括可以是对称或不对称的任何数量的处理元件。
在一个实施例中,处理元件指支持软件线程的硬件或逻辑。硬件处理元件的示例包括:线程单元、线程槽、线程、处理单元、上下文、上下文单元、逻辑处理器、硬件线程、核和/或任何其它元件,其能够保存处理器的状态,例如执行状态或架构状态。换句话说,在一个实施例中,处理元件指能够与代码独立关联的任何硬件,所述代码例如软件线程、操作系统、应用或其它代码。物理处理器通常指集成电路,其潜在地包括任何数量的其它树立元件,例如核或硬件线程。
核通常指位于能够保持独立架构状态的集成电路上的逻辑,其中每个独立保持的架构状态与至少一些专用执行资源关联。与核相比,硬件线程通常指位于能够保持独立架构状态的集成电路上的逻辑,其中独立保持的架构状态共享对执行资源的存取。如可以看到的,当某些资源被共享而其它资源专用于架构状态时,硬件线程与核的命名之间的线重叠。但是,核与硬件线程经常由操作系统视为独立的逻辑处理器,其中操作系统能够独立地调度每个逻辑处理器上的操作。
如图1中图示的,物理处理器100包括两个核,核101与核102。此处,核101与核102被考虑为对称核,即具有相同配置、功能单元和/或逻辑的核。在另一实施例中,核101包括无序处理器核,而核102包括有序处理器核。然而,核101与核102可独立地选自任何类型的核,例如本地核、软件管理的核、适于执行本地指令集架构(ISA)的核、适于执行转换的指令集架构(ISA)的核、共同设计的核或其它已知核。但是为了进一步讨论,核101中图示的功能单元在下面进一步详细描述,同样地核102中的单元以类似方式进行操作。
如示出的,核101包括两个硬件线程101a和101b,其还可被称为硬件线程槽101a和101b。因此,在一个实施例中,软件实体,例如操作系统,潜在地将处理器100视为4个分离的处理器,即能够并发执行4个软件线程的4个逻辑处理器或处理元件。为了躲避上面,第一线程与架构状态寄存器101a关联,第二线程与架构状态寄存器101b关联,第三线程可与架构状态寄存器102a关联,并且第四线程可与架构状态寄存器102b关联。此处,架构状态寄存器(101a、101b、102a、102b)中的每个可被称为处理元件、线程槽或线程单元,如上所述。如图示的,架构状态寄存器101a在架构状态寄存器101b中复制,因此独立的架构状态/上下文能够被存储用于逻辑处理器101a和逻辑处理器101b。在核101中,其它更小的资源,例如重命名分配器逻辑130中的重命名逻辑和指令指针还可被复制用于线程101a和101b。一些资源,例如重排序/引退单元135、ILTB 120、加载/存储缓冲器和队列中的重排序缓冲器可通过分区来共享。其它资源,例如通用内部寄存器、页-表基础寄存器、低级数据高速缓存和数据-TLB 115、执行单元140和无序单元135的部分潜在地完全共享。
处理器100通常包括其它资源,其可完全共享、通过分区共享或由处理元件专用或专用于处理元件。在图1中,图示了具有处理器的图示性逻辑单元/资源的纯粹示范性的处理器的实施例。注意到处理器可包括或省略这些功能单元中的任何一个,以及包括未示出的任何其它已知功能单元、逻辑或固件。如图示的,核101包括简化的、代表性的无序(OOO)处理器核。但是有序处理器可用于不同实施例中。OOO核包括用于预测要被执行/采用的分支的分支目标缓冲器120以及存储指令的地址转换条目的指令-转换缓冲器(I-TLB)120。
核101还包括耦合到取出模块120以便解码取出的元素的解码模块125。在一个实施例中,取出逻辑包括与线程槽关联的单独定序器。通常,核101与第一指令集架构(ISA)关联,第一指令集架构定义/规定处理器100上可执行的指令。通常作为第一ISA的一部分的机器代码指令包括指令(称为操作码)的一部分,其参考/规定要执行的指令或操作。解码逻辑125包括电路,所述电路从它们的操作码中识别这些指令并且将解码的指令在管道中传递用于由第一ISA定义的处理。例如,如下面更详细讨论的,在一个实施例中,解码器125包括设计成或适于识别特定指令(例如事务指令)的逻辑。作为解码器125的识别的结果,架构或核101采取特定、预定义的动作来执行与适当指令关联的任务。重要的是注意到本文描述的任务、块、操作和方法中的任一项可响应于单个或多个指令而执行;其中一些可以是新的或旧的指令。
在一个示例中,分配器和重命名器块130包括分配器来保留资源(例如寄存器文件)以便存储指令处理结果。然而,线程101a和101b潜在地能够无序处理,其中分配器和重命名器块130还保留其它资源,例如重排序缓冲器以追踪指令结果。单元130还可包括寄存器重命名器以重命名程序/指令参考寄存器为处理器100内部的其它寄存器。重排序/引退单元135包括部件,例如上述的重排序缓冲器、加载缓冲器和存储缓冲器来支持无序执行以及无序执行的指令的后面的有序引退。在一个实施例中,当线程最近已经太过频繁地与当前运行的线程冲突时,自适应线程调度包括延迟来自缓冲器(例如加载或存储缓冲器)的线程的指令的分派,这导致调度随后被延迟。
在一个实施例中,调度器和执行单元块140包括用来调度执行单元上的指令/操作的调度器单元。例如,浮点指令被调度在具有可用的浮点执行单元的执行单元的端口上。在下面更详细描述的一个实施例中,调度器140配置成对于与已经正运行/调度的线程太多冲突的执行自适应调度和/或延迟线程。还包括与执行单元关联的寄存器文件以便存储信息指令处理结果。示范性执行单元包括浮点执行单元、整数执行单元、跳转执行单元、加载执行单元、存储执行单元以及其它已知执行单元。
更低级的数据高速缓存和数据转换缓冲器(D-TLB)150耦合到执行单元140。数据高速缓存将存储最近使用的/操作的元件,例如数据操作数、其潜在地保存在存储器一致性状态中。D-TLB将存储最近的虚拟/线性到物理地址转换。作为特定示例,处理器可包括页表结构来将物理存储器分拆成多个虚拟页。
这里,核101和102共享对更高级或更外高速缓存110的存取,所述高速缓存110将缓存最近取出的元素。注意到更高级或更外指的是高速缓存级增加或变得更远离执行单元。在一个实施例中,更高级高速缓存110是最后级数据高速缓存——处理器100上的存储器分层结构中的最后高速缓存——例如第二或第三级数据高速缓存。然而,更高级高速缓存110并不如此限制,因为它可以关联于或包括指令高速缓存。替代地,追踪高速缓存(一种类型的指令高速缓存)可在解码器125之后耦合以存储最近解码的追踪。
在图示的配置中,处理器100还包括总线接口模块105来与处理器100外部的装置通信,例如系统存储器175、芯片集(通常包括用来连接到存储器175的存储器控制器集线器和用来连接外围装置的I/O控制器集线器)、存储器控制器集线器、北桥或其它集成电路。总线105可包括任何已知的互连,例如多点总线、点对点互连、串行互连、并行总线、一致(例如,高速缓存一致)总线、分层的协议架构、差动总线以及GTL总线。存储器175可专用于处理器100或与系统中的其它装置共享。存储器175的类型的公共示例包括动态随机存取存储器(DRAM)、静态RAM(SRAM)、非易失性存储器(NV存储器)以及其它已知的存储器装置。注意到装置180可包括耦合到存储器控制器集线器的图形加速器、处理器或卡、耦合到I/O控制器集线器的数据存储装置、无线收发器、闪存装置、音频控制器、网络控制器或其它已知装置。
注意到在示出的实施例中,控制器集线器和存储器示出在处理器100的外部。然而,本文描述的方法和设备的实现并不这样限制。实际上,因为更多逻辑和装置正被集成在单个管芯(die)上,例如片上系统(SOC),这些装置中的每个可以合并在处理器100上。例如,在一个实施例中,存储器控制器集线器在和处理器100相同的封装和/或管芯上。这里,核的一部分(核上部分)包括控制器集线器用于与例如控制器集线器的其它装置接口连接。在SOC环境中,甚至更多的装置,例如网络接口、协处理器以及任何其它已知计算机装置/接口可集成在单个管芯或集成电路上以便提供高功能性和低功耗给小形状因素。
在一个实施例中,处理器100能够进行硬件事务执行、软件事务执行或其组合/混合。事务(还可被称为代码的关键或原子部分/区域的执行)包括作为原子组执行的一组指令或操作。例如,指令或操作可用于区分事务或关键部分。在下面更详细描述的一个实施例中,这些指令是指令的集合的部分,例如指令集架构(ISA),这些指令由处理器100的硬件(例如上述的解码器)可识别。通常,这些指令一旦从高级语言编译到硬件可识别的汇编语言时包括解码器在解码阶段识别的操作代码(操作码)或指令的其它部分。
通常,在事务的执行期间,直到事务被提交才使对存储器的更新全局可见。作为示例,到某个存储单元的事务写潜在地对本地线程可见;但是,响应于来自另一个线程的读,直到包括事务写的事务被提交才转发写数据。虽然事务仍然未决,但是加载自存储器以及写到存储器内的数据项/元素被追踪,如下面更详细讨论的。一旦事务到达提交点,如果对于所述事务还未检测到冲突,则事务被提交并且使事务期间进行的更新全局可见。然而,如果事务在其未决期间是无效的,则事务被异常中止并且潜在地重新开始而不使更新全局可见。作为结果,如本文使用的,事务的未决指已经开始执行并且未提交或异常中止(即,未决)的事务。
软件事务存储器(STM)系统通常指在软件或代码的执行内或至少主要通过软件或代码的执行来执行存取追踪、冲突解决或其它事务的存储器任务。在一个实施例中,处理器100能够利用硬件/逻辑,即在硬件事务存储器(HTM)系统内执行事务。当实现HTM时,从架构和微架构的角度,许多特定实现细节存在;其大部分未在本文讨论以避免不必要地使本讨论变得模糊。然而,处于说明的目的公开了一些结构、资源和实现。但是,应注意到这些结构和实现不是要求的并且可被增大和/或用具有不同实现细节的其它结构来代替。与事务存储器紧密相关的另一种执行技术包括锁省略{通常被称为硬件锁省略(HLE)}。在此情景中,锁指令对(锁和解锁)(由用户、软件或硬件)用原子开始和结束图型来代替。并且锁指令对之间的代码的部分类似于事务而执行。
作为组合,处理器100可以能够例如在无限的事务存储器(UTM)系统内使用混合方法(硬件和软件)来执行事务,所述UTM系统尝试利用STM和HTM系统的益处。例如,HTM通常是快速并且高效的用于执行小事务,因为它不依赖于软件来执行所有的存取追踪、冲突检测、验证和事务提交。然而,HTM通常只能够处理小事务,而STM能够处理更大大小的事务(其通常称为无限大小的事务)。因此,在一个实施例中,UTM系统利用硬件来执行较小的事务并且利用软件来执行对于硬件太大的事务。如可以从下面讨论中看到的,甚至当软件正在处理事务时,可以利用硬件来协助并且加速软件;这种混合的方法通常被称为硬件加速STM,因为主事务存储器系统(簿记,等等)驻留在软件中并且使用硬件钩(hook)来加速。
简要参考图2,示出了STM系统的简化的说明性实施例。注意到图2的讨论主要关于乐观读STM系统。在那点上,提供某些事务存储器实现细节的讨论,例如直接对间接引用、乐观对悲观并发控制以及在适当存储单元的更新对写缓冲以便说明在实现事务存储器系统时做出的几个设计选择。然而,本文描述的方法和设备可实现用于任何事务存储器系统,例如HTM、硬件加速STM、混合STM、悲观STM或其它已知事务存储器系统,以及结合任何已知的实现细节。
在STM的一个实施例中,存储器存储单元(地址)数据项和/或数据元素(例如要被保持在高速缓存行215中的数据元素201)与元数据存储单元(例如数组240中的元数据存储单元250)关联。作为说明书示例,与数据元素201和/或高速缓存205的行215关联的地址或其部分被哈希到数组240中的索引地址250。通常,关于事务存储器,元数据存储单元250被称为事务记录,而数组240被称为事务记录的数组。但是,整个事务的元数据可包括关于事务本身的信息,例如下面更详细描述的事务描述280、读集合265和写集合270。虽然如图示的,事务记录250与单个高速缓存行关联,可以在任何数据粒度级(例如数据元素201的大小)提供事务记录,数据元素201的大小可以小于或大于高速缓存行215,以及包括操作数、对象、类、类型、数据结构或数据的任何其它元素。
数据项、数据对象或数据元素(例如数据项201)可包括在任何粒度级的数据,如由硬件、软件或其组合所定义的。数据、数据元素、数据项或对其的引用的非穷举的列表包括存储器地址、数据对象、变量、操作数、数据结构和对存储器地址的间接引用。然而,任何已知分组的数据可称为数据元素或数据项。以上的几个示例,例如一种类型的动态语言代码的域和一种类型的动态语言代码指动态语言代码的数据结构。为了说明,动态语言代码,例如来自Sun Microsystems有限公司的Java™是强类型语言。每个变量具有在编译时间已知的类型。所述类型被分成两个类别——原语类型(布尔逻辑和数值,例如整形、浮点型)和引用类型(类、接口和数组)。引用类型的值是对于对象的引用。在Java™中,包括域的对象可以是类实例或数组。给出类A的对象,惯例是使用记号A::x来指类型A的域以及a.x来指类A的对象的域。例如,表达式可以表达为a.x=a.y+a.z。这里,域y和域z被加载以便添加并且结果将被写到域x。
因此,对数据项的监视/缓冲存储器存取可在任何数据级粒度执行。例如,在一个实施例中,对数据的存储器存取在类型级监视。这里,对域A::x的事务写和域A::y的非事务加载可被监视为对相同数据项(即,类型A)的存取。在另一实施例中,存储器存取监视/缓冲在域级粒度执行。这里,对A::x的事务写和域A::y的非事务加载未被监视为对相同数据项的存取,因为它们是对分别的域的引用。注意,可以在追踪对数据项的存储器存取中考虑其它数据结构或编程技术。作为示例,假设类A的对象的域x和y(即,A::x和A::y)指向类B的对象、被初始化成新分配的对象并且在初始化之后从不被写。在一个实施例中,由A::x指向的对于对象的域B::z的事务写未被监视为对关于由A::y指向的对象的域B::z的非事务加载相同数据项的存储器存取。从这些示例外推,有可能确定监视可以在任何数据粒度级监视/缓冲。
通常在STM中,事务记录(TR)250(还称为事务锁)被用来提供关联的存储器地址(例如数据元素201)的拥有权的不同级别和对关联的存储器地址的存取。在一个实施例中,TR 250持有第一值来表示解锁的或未被拥有的状态,并且持有第二值来表示锁定或被用户的状态。在一些实现中,TR 250可以能够具有多个不同级别的锁定或被拥有状态,例如写锁/排他锁状态以提供排他的拥有权给单个拥有者;读锁,其中读者读取数据元素201同时允许其他人仍读取但是不允许写数据元素201;以及读锁,其具有升级到写/排他锁状态的意图,其中潜在的写者想要获取排他的写锁,但是等待当前读者释放数据元素201。
用于表示TR 250中解锁状态和锁定状态的值基于实现变化。例如,在乐观并发控制STM的一个实施例中,TR 250持有版本值或时间戳值(例如,表示更新数据元素201的最近提交的事务的值)以便指示解锁状态。并且TR 250持有对事务描述符的引用,例如指针,以便表示锁定状态。通常,事务描述符280持有描述事务的信息,例如事务ID 281和事务状态282。利用对事务描述符280的指针的上述示例通常被称为直接引用STM,其中事务记录250持有对拥有的事务281的直接引用。
在另一实施例中,被拥有或锁定的值包括对写集合条目的引用,例如写集合270的写条目271。在一个实施例中,写条目271在锁被获取之前将持有来自事务记录250的记录的版本号;对事务描述符280的指针,以便指示事务281与写条目271关联;以及对事务记录250的反向指针。这个示例通常被称为间接引用STM,其中TR 250间接地引用拥有的事务,即通过写条目271。
相比于TR 250中的指针值的版本,在悲观并发控制STM的一个实施例中,TR 250持有位向量/位图,其中更高阶的位表示执行事务(或线程执行事务),其中LSB 251和第二LSB252表示写锁状态、解锁状态以及对写锁状态的读升级。在解锁状态中,被设置表示对应的事务的更高位具有读数据元素201。在锁定状态中,更高位之一被设置成指示事务中的那个具有写锁定数据元素201。
在一个实施例中,在对数据元素201的存储器存取时,执行存取障碍以便确保适当存取和数据有效性。这里,经常执行拥有权测试以便确定TR 250的拥有权状态。在一个实施例中,TR 250的一部分,例如LSB 251和/或第二LSB 252被用于指示数据元素201的可用性。为了说明,当LSB 251持有第一值,例如逻辑0,则TR 250被解锁,并且当LSB 251持有第二值,例如逻辑1,则TR 250被锁定。在这个示例中,第二LSB 252可用于指示合适读拥有者意图升级到排他的写锁。备选地,位251-252的组合,以及其它位,可用于编码不同的拥有权状态,例如上述的多个锁状态。
在一个实施例中,在存储器存取的障碍执行簿记连同上述的拥有权测试。例如,在数据元素201的读取时,在TR 250上执行拥有权测试。如果解锁,即持有乐观并发控制STM中的版本值,则版本值被记录在读集合266的读条目265中。后面,一旦验证,其可以是在事务的未决期间或在事务的提交时按需的,TR 250的当前值与条目266中的记录值进行比较。如果值是不同的,则任一另一个拥有者已经锁定TR 250和/或修改数据元素201,则导致潜在的数据冲突。此外,写障碍可执行类似的簿记操作用于对数据元素201的写,例如执行拥有权测试、获取锁、指示升级锁的意图、管理写集合270,等等。
之前,在事务的末端,尝试了事务的提交。作为示例,验证写集合以便确保从事务的未决期间读取的存储单元是有效的。换句话说,保持在读条目266中的记录的版本值与保持在事务记录250中的当前值进行比较。如果当前值与记录版本相同,则没有其它存取已经更新数据元素201。因此,与条目266关联的读被确定为有效。如果所有存储器存取被确定为有效,则事务被提交和/或引退。
然而,如果版本不同并且当前事务未读取并且然后写到数据元素,则另一个事务获取TR 250的锁和/或修改数据元素201。结果,事务则可被异常中止。再一次,取决于STM的实现,由提交和异常中止功能执行的操作可以是可互换的。例如,在写缓冲STM中,事务的未决期间的写被缓冲,并且一旦提交,它们被复制到对应的存储器存储单元中。这里,当事务异常中止时,写缓冲器中的新值被丢弃。相反地,在更新合适的STM中,新的值被保存在对应的存储器存储单元中,而旧的值被记录在写记录中。这里,一旦异常中止,旧的值被复制回到存储器存储单元中,并且在提交时,写记录中旧的值被丢弃。
无论是在写缓冲STM中或在更新合适STM中,当需要更新的存储器存储单元的退回时,通常利用撤销记录,例如撤销记录290。作为示例,撤销记录290包括条目,例如条目291以便追踪在事务期间对存储器的更新。为了说明,在更新合适的STM中,存储器存储单元被直接更新。然而,一旦异常中止,则基于撤销记录290来丢弃更新。在一个实施例中,撤销记录290能够退回嵌套的事务。这里,撤销记录290潜在地退回嵌套的事务而不使更高/外面级别的事务无效,例如退回到紧靠在嵌套事务的开始之前的检查点。
如上所述,事务包括通过本地处理元件以及潜在地通过其它处理元件的对数据项的事务存储器存取。在没有事务存储器系统中的安全机制的情况下,这些存取中的一些可导致无效数据和执行,即对使读无效的数据的写,或无效数据的读。在纯粹的STM系统中,这些安全机制通过上述的软件障碍的构造而存在。在HTM或混合HTM/STM中,硬件监视器连同协议(例如现有的高速缓存一致性协议)和/或软件长在提供这样的安全机制。
虽然图2主要示出STM环境,但是它还有助于论述STM的硬件加速。例如,在一个实施例中,高速缓存行210-230与事务属性关联。这些属性可以通过存储器(即,贯穿存储器分层结构存在的高速缓存行215的一部分)是持久的或不持久的(即,本地在高速缓存行205内并且一旦高速缓存行215驱逐的丢失)。此外,这些属性可以是行215的一部分或者与行215关联,例如数据数组205的状态数组中的附加位。或者,在一个实施例中,属性包括配置成由用于追踪加速的软件指令操作的位。例如,事务读位和事务写位被提供以便分别在事务读和写时设置。这里,软件可检查事务读位的状态以确定当前事务是否已经读了高速缓存行215。并且如果位被设置(指示高速缓存行215已经被存取),则软件取消读障碍操作,例如检查事务记录250、记录读集合265中的事务记录值250,等等。这里,对事务内相同存储器地址的后续软件事务存取使用硬件属性来加速,软件能够对所述硬件属性存取、翻译并且相应地起作用。
回到图1的讨论,在一个实施例中,处理器100包括监视器以便检测或追踪存取,以及与数据项关联的潜在的后续冲突。注意这些监视器在一个实施例中是相同属性的(或者包括)STM的加速的上述属性。在此情景中,监视器可兼任硬件追踪和软件加速支持。例如,处理器100的硬件包括读监视器以及写监视器来相应地追踪加载和存储,其被确定为被监视。硬件读监视器和写监视器可在数据向的粒度监视数据项,尽管有基础的存储结构的粒度。或者备选地,它们在存储结构粒度监视。在一个实施例中,数据项由关联的追踪机制在存储结构的粒度限制以便确保至少整个数据项被适当监视。
作为特定的说明性示例,读和写监视器包括与高速缓存存储单元关联的属性,例如更低级数据高速缓存150(其可包括投机性的高速缓存)内的存储单元,以便监视从与那些存储单元关联的地址的加载和到那些地址的存储。这里,数据高速缓存的高速缓存存储单元的读属性在对与高速缓存存储单元关联的地址的写事件时被设置成监视对相同地址的潜在的冲突写。在这个情况下,写属性以类似方式操作用于写事件来监视对相同地址的潜在的冲突读和写。为了进一步说明此示例,硬件能够基于对高速缓存存储单元的读和写的监听来检测冲突,其中读和/或写属性设置成指示高速缓存存储单元被监视。相反,在一个实施例中,设置读和写监视器,或更新高速缓存存储单元到缓冲的状态导致监听,例如读请求或对拥有权请求的读取,这允许其它高速缓存中监视的地址的冲突被检测。
因此,基于所述设计,高速缓存分层结构请求的不同组合以及高速缓存行的监视的分层结构状态导致潜在的冲突,例如保存处于共享读监视状态的数据项的高速缓存行和指示对数据项的写请求的监听。相反,保存处于缓冲读状态的数据项的高速缓存行和指示对数据项的读请求的外部监听可考虑为潜在冲突。在一个实施例中,为了检测接入请求和属性状态的此类组合,监听逻辑被耦合到冲突检测/报告逻辑,例如用于冲突检测/报告的监视器和/或逻辑,以及报告冲突的状态寄存器。
然而,条件和情景的任何组合可以考虑为对于事务是无效的。可考虑为事务的非提交的因素的示例包括检测对事务存取的存储器存储单元的冲突、丢失监视信息、丢失缓冲的数据、丢失与事务存取的数据项的元数据,以及检测其它的无效事件,例如中断、环形转换或外显的用户指令。
在一个实施例中,处理器100的硬件将持有以缓冲的形式的事务更新。如上所述,将不使事务写全局可见,直到事务提交为止。然而,与事务写关联的本地软件线程能够存取后续事务存取的事务更新。作为第一示例,分离的缓冲器结构提供在处理器100中以便保存缓冲的更新,其能够提供状态给本地线程并且不提供给其它外部线程。
相比之下,作为另一示例,高速缓存存储器,例如数据高速缓存150被用于缓冲更新,且提供相同的事务功能性。这里,高速缓存150能够保持数据项在缓冲的一致性状态中;在一种情况下,新缓冲的一致性状态被添加到高速缓存一致性协议,例如修改的排他共享无效(MESI)协议以便形成MESIB协议。响应于对缓冲的数据项的本地请求——数据项被保持在缓冲的一致性状态中,高速缓存150提供数据项给本地处理元件以确保内部事务的顺序排序。然而,响应于外部存取请求,提供丢失响应以便确保事务更新的数据项直到提交才变得全局可见。此外,当高速缓存150的线被保持在缓冲的一致性状态中并且被选择用于驱逐时,缓冲的更新未被写回更高级的高速缓存存储器——缓冲的更新将不通过存储器系统扩散,即直到提交之后才变得全局可见。替代地,事务可异常中止或者驱逐的行可存储在数据高速缓存和更高级的高速缓存存储器之间的投机性的结构中,例如受害(victim)高速缓存。一旦提交,缓冲的行被转换到修改状态以便使数据项全局可见。
注意到术语内部和外部通常关于与事务的执行或共享高速缓存的处理元件关联的线程的观点。例如,用于执行与事务的执行关联的软件线程的第一处理元件被称为本地线程。因此,在以上讨论中,如果接收到对地址的存储或来自地址的加载之前由第一线程写(其导致地址的高速缓存行被保持在缓冲的一致性状态中),则高速缓存行的缓冲的版本被提供给第一线程,因为它是本地线程。相比之下,第二线程可以执行在相同处理器的另一个处理元件上,但是不与负责保持在缓冲状态中的高速缓存行的事务——外部线程的执行关联;因此来自到所述地址的第二线程的加载或存储丢失高速缓存行的缓冲版本,并且正常的高速缓存替换被用于从更高级存储器取回高速缓存行的未缓冲的版本。
在一个实施例中,处理器100能够执行编译器/优化代码177来编译应用代码176以支持事务执行,以及以便潜在地优化应用代码176。这里,编译器可插入操作、调用、函数和其它代码来实现事务的执行。
编译器通常包括程序或程序集合用于将源文本/代码转换成目标文本/代码。通常,利用编译器的程序/应用代码的编译在多个阶段中进行并且传递以便将高级编程语言代码变换成低级机器或汇编语言代码。但是,单遍编译器仍可用于简单的编译。编译器可利用任何已知的编译技术并且执行任何已知的编译器操作,例如词汇分析、预处理、解析、语义分析、代码生成、代码变换以及代码优化。事务实质和动态代码编译的交叉潜在地导致实现更有侵略性的优化,同时保留必须的存储器排序保护。
更大的编译器通常包括多个阶段,但是更通常这些阶段包括在两个一般阶段中:(1)前端,即一般地语法处理、语义处理和一些变换/优化可发生的地方,以及(2)后端,即一般地分析、变换、优化和代码生成发生的地方。一些编译器涉及中间件,其图示编译器的前端和后端之间的轮廓的模糊。结果,对插入、关联、生成或编译器的其它操作的引用可在前述阶段或遍的任何一个以及编译器的任何其它已知阶段或经过中发生。作为说明性示例,编译器潜在地将事务操作、调用、函数等插入编译的一个或多个阶段中,例如在编译的前端阶段中插入调用/操作并且然后在事务存储器变换阶段期间将调用/操作变换成低级代码。注意到在动态编译期间,编译器代码或动态优化代码可插入这样的操作/调用,以及优化代码用于在运行时间执行。作为特定的说明性示例,二进制代码(已经编译的代码)可在运行时间动态优化。这里,程序代码可包括动态优化代码、二进制代码或其组合。
然而,尽管执行环境以及编译器的动态或静态性质;在一个实施例中,编译器编译程序代码以便实现事务执行和/或优化程序代码的部分。因此,在一个实施例中,对程序代码的执行或STM环境的引用指的是:(1)编译程序的执行或优化代码优化器动态或静态地编译程序代码以便维持事务结构来执行其它事务相关操作,或者以便优化代码;(2)主程序代码的执行包括事务操作/调用,例如已经优化/编译的应用代码;(3)与主程序代码关联的其它程序代码(例如库)的执行,以便维持事务结构来执行其它事务相关操作,或者以便优化代码;或者(4)其组合。
通常在软件事务存储器(STM)系统内,编译器将用于插入一些操作、调用和与应用代码内联的其它代码用于编译,而其它操作、调用、函数和代码在库内分别提供。这潜在地提供了库分配器优化和更新库的能力,而无需重新编译应用代码。作为特定示例,对提交函数的调用可在事务的提交点内联插入应用代码内,同时提交功能单独在可更新的库中提供。此外,选择在哪里放置特定操作和调用潜在地影响应用代码的效率。
在一个实施例中,处理器100配置成支持线程的自适应调度以便最小化冲突。结果,经验主义的反馈可用于协助线程调度以便最小化线程之间的冲突。因此,如果线程具有冲突的历史,例如引起一个线程的事务太过频繁地异常中止,则这些线程被自适应调度以便最小化它们并行执行的时间。但是,在一些实施例中,自适应调度的目标是减少或最小化竞争线程之间的冲突。但是完全的互相隔离可能不是有利的。因此,减少冲突同时维持执行并行性之间的平衡潜在地在此设计中寻求。备选地,设计师可选择使用自适应调度技术来避免冲突。注意到自适应线程主要参考自适应调度包括事务的线程来讨论。并且因此,所讨论的冲突是关于由于线程之间的冲突而异常中止的事务。然而,任何已知的线程之间冲突可以被利用,例如高速缓存中的系统失效、共享资源的垄断等等。结果,自适应线程调度,例如使线程延迟调度,可以基于任何已知的线程之间冲突来执行。
作为说明性实施例,STM实现/环境做出线程之间的线程决定。例如,当第一线程进行开始事务调用,TM系统确定冲突的第二线程是否已经在运行。并且如果第二线程是冲突的而且当前正在运行,则第一线程被自适应调度以最小化第一线程和第二线程并行执行的时间。在一个实施例中,这样的自适应调度通过延迟第一线程的调度来执行,其有效地弥补了冲突线程(第一和第二线程)的同时执行。
虽然线程的自适应调度可基于线程本身内异常中止的事务的有限的、自我视角而不关于其它线程来执行;这种方法有可能过于谨慎。作为本文将利用的说明性示例,假设线程A、B、C、D分别在线程槽101a、101b、101c和101d上执行。并且还假设线程A与线程D频繁冲突(线程A中大量的事务由于与线程D的数据冲突而异常中止)。在下一个尝试调度线程A时,例如开始线程A内的事务的调用,可执行自适应线程调度。在恐外(xenophobic)的角度(只关于来自线程A的视角的冲突,而不考虑A与哪些线程冲突),可以延迟线程A,因为它遇到频繁冲突。然而,如果线程D不再在处理器100上运行,则线程A遇到冲突的原因已经被移除。结果,延迟调度线程A来避免冲突是浪费的,因为冲突的可能性已经通过线程D不在处理器100上运行而得到减小。
因此,在一个实施例中,线程的线程调度决定可以基于与其它线程的实际冲突历史来做出。继续上面的示例,当线程A将被调度时,检查或确定它与线程D的冲突率。在此示例中,频繁冲突(由于与线程D的数据冲突而产生的线程A中事务的异常中止)指示线程A和D正发生冲突。结果,如果线程D当前正在运行,则线程A调度被延迟。然而,如果线程D当前没有在运行并且线程A不具有与正在运行的线程B和C的频繁冲突,则线程A可以正常调度。因此,在甚至当冲突线程不再运行时线程A被延迟的情景被潜在避免,这导致更有效地调度。同时,当线程D已经在运行时线程A的延迟最小化线程A和D的重叠,这潜在地最小化竞争线程之间数据冲突的可能性。
线程之间的冲突,例如事务的异常中止,可以按任何方式来测量/确定。在一个实施例中,冲突随时间确定。这里,确定冲突比率。对于一段时间,其可以是预先确定量的时间或两个定义的事件之间的一段时间,执行(或开始)的事务的总数连同异常中止的事务的数量一起确定。执行的事务的数量从感兴趣的线程(即,在所述时间段内线程A中执行的事务的数量)的视角来确定。并且异常中止的事务的数量可以基于设计实现对于线程A来确定,而不关于其它线程,或者对于线程关于一个或多个潜在竞争线程,例如线程B、C和D来确定。然后,计算冲突比率(异常中止的事务的数量除以执行的事务的总数)。注意到在一些实施例中,冲突比率(CR)可对于每个潜在竞争线程存在{即,对于线程A和线程B的CR或CR(A,B);CR(A,C);和CR(A,D)}。
上述的确定冲突比率的实施例不是可以确定线程之间的冲突率的唯一方法。在一个实施例中,利用衰减冲突比率公式来确定冲突率。作为示例,冲突比率对每个时间段递归地确定。并且那个冲突比率利用一个或多个时期的测量来在时间上求平均。例如,等式1利用当前冲突比率和先前冲突比率来确定平均的或加权的冲突比率。
等式1
在等式1中,CR(A,D)是平均的或加权的冲突比率,CR(A,D)是当前时期的冲突比率,是先前时期的先前冲突比率,并且P是大于或等于0并且小于或等于1的常数。注意到P越接近变成1,则等式越变成更偏向最当前冲突比率。而且,如果当前冲突比率是0或先前冲突比率是0,则CR(A,D)加权朝向非零冲突比率。在CR1(A,D)为0的情况下,朝向先前冲突比率的加权仍衰减(随时期减小)。例如,假设P为5。因此,如果CR1(A,D)是0,则CRA(A,D)变成。换句话说,CRA(A,D)等于先前冲突比率的一半。此外,如果在时期期间没有执行事务,则那个冲突比率默认地可设置为0来避免除以0的情形。
结果,当线程C将在上面示例中调度时,来自示例中CR(A,D)的冲突比率太频繁(即,CR(A,D)大于冲突比率阈值)。然而,CR(A,B)和CR(A,C)低于冲突比率阈值。可以用任何方式选择冲突比率阈值,例如预先确定的方式或动态地。在一个实施例中,基于线程A在延迟测量时期上延迟的次数来调整冲突阈值。例如,如果线程A连续延迟超过3次,则冲突比率阈值可增加,使得在线程A中需要更高的冲突比率阈值来引起另一个延迟。类似地,如果不存在延迟或太多事务异常中止,则冲突比率阈值可以动态降低。换句话说,可以选择阈值以允许可接收数量的事务异常中止;在单个线程中或在全部执行的线程中。如上面提到的,在一个实施例中,完全避免并行运行的竞争线程可能不是目标。而是,在这个实施例中,重要的是减少而不是消除冲突线程的同时执行以便通过允许不同线程同时执行并且不串行化执行来提高并发性。
不管阈值的设置,确定CR(A,D)是否大于那个阈值。然后,当将做出对开始线程A中事务的调用,确定线程D是否正在运行。如果线程D正在运行,则延迟对开始事务的调用。例如,对应用接口的调用由事务存储器(TM)运行时间环境延迟。在此示例中,由TM系统执行延迟,因此控制软件,例如操作系统(OS)或管理程序未被更改。然而,这样的延迟可以在控制软件中,以及在硬件、固件、代码或其任何组合中实现。在一个实施例中,历史冲突的线程偶尔和/或周期的在相同时间期间故意地调度以便重新计算冲突比率来确定线程是否仍在竞争。换句话说,如果每次线程D都在运行,则线程A被延迟,则有可能线程A和D不再并行运行。但是线程A和D可能不再冲突,因此,可能潜在有利的是基本上检查每个如此频繁以便确定线程A和D实际上仍在竞争。
此外,应该注意到图1图示具有不同模块、单元和/或逻辑的表示的示范处理器的抽象的、逻辑的视图。然而,注意到利用本文所述方法和设备的处理器不需要包括所示单元。并且,处理器可省略一些或所有示出的单元。图1仅示出两个核;但是处理器可包括任何数量的核,例如相同类型的多个核,以及类型不同的多于两个的核。
图1还示出以点对点方式与到外部存储器控制器(控制器集线器170)的接口耦合的存储器的实施例。然而如上所讨论的,许多当前处理器已经开始包括处理器上存储器接口模块——芯片上模块——具有不同互连架构,例如环形配置用于互连多个核,以及共享高速缓存和其它接口。尽管未示出,处理器100在一个实施例中包括环形互连耦合核、高速缓存和存储器控制器部件。
这里,缓存代理用于管理一片物理分布的高速缓存。作为示例,每个高速缓存部件将管理一片高速缓存用于并置的核——用于管理高速缓存的分布的片的与高速缓存代理关联的核。很像高速缓存代理处理环形互连上的业务并且与高速缓存片接口连接,核代理/部件将处理业务以及与核接口连接。此外,环形互连可以将存储器控制器接口逻辑(MCIL)和/或其它控制器耦合以便与其它模块接口连接,例如存储器和/或图形处理器。
此外,更多模块和装置可合并在单个集成电路、管芯或封装上,例如片上系统(SOC)设计。例如,用于支持自适应线程调度的处理器可与其它装置集成,例如图形加速器、控制器集线器、协处理器、信号处理器、网络处理器、数据存储装置、存储器、无线收发器、闪存装置、音频控制器、网络控制器或其它已知的计算机系统装置。
转到图3,示出了用于基于线程冲突来自适应调度线程的模块的逻辑表示的实施例。线程301和302示出为潜在的竞争或冲突线程。虽然它们在下面被称为线程,线程301和302可以指软件线程或用于执行软件线程的硬件线程槽。并且即使仅示出两个线程,自适应调度可扩大以便应用到具有任何数量的线程的系统。注意到当下面参考线程301讨论自适应调度时,线程301可以在物理线程槽中活动、不活动或暂停并等待返回。在每个情况下,处理器300可采取系统或不同动作来自适应调度线程301。
在一个实施例中,冲突模块310确定第一线程(310)与第二线程(302)的冲突率。注意到确定两个线程(如下面讨论的)之间的冲突率纯粹是说明性的,并且它可以类似地递归应用到计算机系统中的其它线程(无论活动或不活动的)。例如,假设存在4个线程;其中2个是活动的而另外2个是不活动的。冲突率确定和追踪可以相对于其它3个线程中的每个而对于第一线程进行,这产生3个冲突率或比率。或者追踪可以仅在两个活动的线程之间进行,而不活动的线程保持它们在那时与其它活动线程的先前的冲突比率作为它们的上下文的一部分。如上所述,自适应线程调度不限于线程之间的冲突率。替代地,冲突率可对于感兴趣的线程确定,而不相对于特定的其它线程(即,线程中的冲突的数量而不管哪个其它线程引起冲突)。
作为一个示例,冲突率包括线程之间随着时间的任何可测量的冲突(即,冲突率)。为了说明,假设数据项305保存在由线程301和302共享的共享数据存储单元(例如,高速缓存行)。并且高速缓存控制逻辑(未示出)确定由来自线程302的请求的对于线程301的高速缓存行的若干驱逐。这里,冲突率可包括由线程302随着时间的线程301的高速缓存行的若干驱逐。注意到线程资源之间的类似冲突,例如上面参考图1描述的那些资源,可以被追踪用于冲突率。
在一个实施例中,线程301和线程302的冲突率包括在一个时间量上由于与线程302的冲突的线程301中异常中止的事务的数量。在另一个实施例中,线程301与线程302的冲突率包括在一个时间量上由于与线程302的冲突的线程301中异常中止的事务的数量除以在所述时间量上线程301中执行的事务的总数的比率。例如,如果在所述时期内执行的事务的总数是10并且异常中止的数量是4,则冲突比率是0.4或40%。
注意到紧接着上面相对于随着时间的冲突率的讨论是参考单个时间量子。然而,冲突率可以在多个时间段上求平均(例如,大于1的任何整数的时期)。在一个示例中,对于多个时期的冲突比率的平均被相等地加权。然而,在另一实施例中,在多个时期上的冲突比率被偏置或加权。例如,来自上面的等式1在下面重新复制。
等式1
这里,包括如上所述的当前冲突比率。并且先前的冲突比率包括在先前的时间量期间由于与第二线程302的冲突的线程301中异常中止的事务的先前的数量处理在先前的时间量期间第一线程301中执行的事务的先前的数量。此外,P是大于或等于0并且小于或等于1的常数。常数P提供两个冲突比率之间的加权以便获得最终(或平均的)冲突比率。例如,如果P等于0.5,则冲突比率相等地加权。如果P大于0.5,则加权的/平均的冲突比率偏向当前冲突比率。并且如果P小于0.5,则加权的/平均的冲突比率偏向先前冲突比率。在一个实施例中,P是静态的预先确定的常数。备选地,P是在运行时间期间动态可调的,例如基于第一线程实际被延迟的调度的次数。
虽然偏置公式(等式1)是对于两个时期的冲突比率,冲突比率可在多于两个时期上平均或加权。此外,如上所述,当没有新的事务在线程301中执行时在多个时期上衰减是无价值的。这里,如果在时期或时间量中总事务的数量是0,则被设置为0以便避免除以0的情况。并且等式1变成只基于先前冲突比率 。结果,如果P不等于0,则乘以小于1的分数,则留下比先前更低的。还注意到一旦随后重新计算,新的可以完全重新计算、作为平均冲突比率、来自先前时期,或者作为当前冲突比率、来自计算的冲突比率的先前时期。
如上所述,可以通过冲突模块310使用在时间量(时期)期间执行的事务的总数和异常中止的事务的数量来计算冲突比率。作为最直接的说明性示例,计数器用于追踪(或计数)开始的或执行的事务的数量,以及异常中止的事务的数量。这里,这样的计数器可以实现在硬件、软件、固件或其组合中。在硬件示例中,硬件事务计数器在每次事务开始、提交、执行或引退时递增。并且如果发生事务的异常中止(即,检测到由于一致性协议和追踪机制的高速缓存中的冲突),则异常中止计数器递增。每个计数器在时期的开始被重置并且保存最后的计数(分别地,总的事务和异常中止)。
在软件示例中,执行代码以保持计数,例如随着时间异常中止和执行的事务的可变计数。例如,当开始事务指令被编译、遭遇或执行时,事务计数变量递增(即,响应于来自例如STM环境的软件环境的代码的执行,指定用于软件事务计数变量的硬件位置递增)。类似地,当由软件检测到对冲突处理机的调用或异常中止时,它类似地递增软件异常中止计数。这里,事务存储器系统可在运行时间期间执行时维持元数据以指示什么线程引起冲突,例如正确的计数器(即,用于正确线程的异常中止计数器)递增。例如,如果4个线程正在运行并且在第一和第四线程之间存在冲突,则事务存储器系统保持这样的信息。在此情况下,用于异常中止的事务的3个计数变量可以对于线程1保存(线程1相对于线程2、线程1相对于线程3以及线程1相对于线程4)。作为事务存储器系统信息的结果,线程1相对于线程4的计数基于事务存储器系统元数据信息而正确地递增。
因此,在一个实施例中,冲突模块310包括一个或多个软件计数器(如上所述)以及保存代码的存储介质,所述代码执行时引起软件计数器追踪在所述时间量上由于与第二线程的冲突的第一线程中异常中止的事务的数量。如上所述,代码可以是STM环境中的一部分,例如事务库的一部分,其在运行时间期间执行时提供‘计数器’更新。注意到使用术语‘软件计数器’指代码,所述代码在由硬件执行时引起硬件存储由软件指示的值(即,用于异常中止计数的异常中止存储器存储单元,其一旦有事务的异常中止,响应于软件递增1)。因此,甚至使用术语‘软件计数器’指有形装置的变换,例如存储介质,以便保持由软件引导的计数。
冲突率已经在上面参考在时间量上或在时期期间的冲突进行讨论。然而,可以利用比率的任何测量。作为第一示例,时间量包括时间值(即,特定的或预先确定的时间量)。然而,使用术语‘时间量’还可指特定事件之间的时间中的改变。注意到在第一情况中(使用特定的时间量)测量持续时间是周期性的,并且在第二情况中(在事件之间)时期可以变化但是不要求改变。注意到事件可以是同步的(依赖于或响应于指令)或异步的(不可与指令直接有关)。例如,预先确定计算时间阈值。并且在事务的每个开始,相对于阈值检查当前时间段。如果当前时间段小于阈值,则利用先前计算的冲突比率。然而,如果当前时间段大于阈值,则重新计算冲突比率。
作为说明性示例,假设冲突重新计算的时期是1秒。计算的第一时期可以实际在1秒发生。在执行第一事务(T1)时,计算冲突比率。在1秒阈值之前100ms,执行第二事务(T2)。这里,未超过阈值,因此利用先前计算的冲突比率。然后,假设另一事务(T3)直到T1的计算之后1.5秒才执行。最为时期超过1秒阈值的结果,计算新的冲突比率。如可以从这个示例中看到的,计算时期(时间量)不总是周期性的或者相等的(即,在上面的示例中,用于计算的第一持续时间是1秒并且第二时期是1秒)。
因此,尽管冲突率确定的时期的实际测量,在一个实施例中,由冲突模块310在每个时期确定冲突率。备选地,保存原始数据(事务和异常中止)并且冲突率由冲突模块310按需计算。例如,当进行对开始事务的调用时,响应于开始事务调用而计算冲突率。然而,在每个时期上的计算允许冲突率容易可用,如果冲突率不太高,这潜在地实现立即调度而不必等待计算。
如果冲突率太高,则可以利用利用冲突模块310确定的任何已知的方法。在一个实施例中,冲突模块310将确定冲突率是否大于冲突率阈值。例如,当使用冲突比率时,则冲突比率与冲突比率阈值进行比较。并且因为冲突比率通常导致小于或等于1的数(或转换时的百分比),则冲突阈值可以类似地包括小于或等于1的数,百分比或分数或比率的其它已知的表示。结果,如果冲突比率大于(或在一些实施例中等于)冲突阈值,则冲突率视为‘太高’。如可以看到的,术语‘太高’相对于阈值。因此,在动态阈值的一个备选实施例中,冲突阈值在运行时间动态可变/可调。任何已知的效率或因素可用于作为阈值的调整的基础。例如,如果阈值已经被延迟太多此(在时期上或连续地),则可调整阈值。在一个实施例中,调整的目的是通过延迟冲突的线程来减少冲突,同时不消除竞争或冲突线程之间的并发性。
在一个实施例中,线程调度模块315适用于确定线程302是否在调度线程301之前运行,并且适用于响应于冲突模块310确定线程301的冲突率来延迟线程301的调度,其中线程302太高并且线程302正在运行。作为说明性示例,假设线程302将进行调用以开始事务。在这点,线程调度模块315连同冲突模块310确定是否有与线程301的任何线程冲突。换句话说,它们确定与线程(例如线程302)的冲突率是否大于冲突比率。这里,冲突模块310可能已经在每个时期的冲突率计算时进行比较并且存储结果的表示。例如,对应于每个其它线程的线程301的位图可以用冲突值来更新以指示与线程301冲突(具有太高冲突率)的线程。备选地,冲突模块310可根据需要执行计算、阈值比较或两者。
任一种方法,假设线程302和线程301的冲突率超过冲突阈值,则阈值调度模块315确定冲突线程(线程302)当前是否正在运行。注意到在备选实现中,确定什么线程正在运行或被调度。并且然后检查那些线程以便确定它们是否正发生冲突。实现的选择可以是静态的或动态的以便基于先确定所有线程中的哪些发生冲突还是先确定什么线程正在运行将是更快的来实现最快确定。
确定线程是否正在运行可以用任何已知的方式来进行。在一个实施例中,线程的状态保存在硬件、软件、固件或其组合中。并且线程调度模块315能够从那些结构中的任何一个中收集此信息。线程‘运行’可以具有许多不同含义。然而,在一个实施例中,线程运行包括可以潜在地引起与在感兴趣的线程上执行的事务冲突的数据的任何状态。这样的状态的示例包括活动的、准备好调度、正在执行、正在执行事务,等等。
如果线程302正在运行并且确定为冲突线程,则线程调度模块315自适应地调度线程301。在一个实施例中,自适应调度包括对于特定的时间量、随机时间量延迟线程301,或延迟线程301直到特定事件发生(高速缓存丢失、线程302变成不活动的、对特定存储单元的存取、定时器过期,等等)。注意到使用术语‘延迟调度’在一个实施例中具体地指用于指令、线程或操作的调度过程的实际延迟(或对于延迟时期的调度的省略)。在另一实施例中,调度的延迟指在管道中某个地方引入的延迟,其响应于引入的延迟有效地延迟指令、线程或操作的调度。例如,调度的延迟可包括延迟要被调度的线程的上下文切换。虽然调度过程没有被直接延迟,上下文切换中的延迟有效地转换成来自线程的指令的调度的延迟,如果不是上下文切换中引入的延迟,所述线程将已经更早发生。
在一个实施例中,线程调度模块315包括保存事务存储器库的存储介质,所述事务存储器库在执行时响应于确定线程301和线程302的冲突率太高并且线程302正在运行而延迟线程301对特权的控制软件的应用接口的调用。作为示例,开始事务调用在执行时调用事务存储器库中的开始事务例程/函数。事务存储器库代码在执行时检查如上所述的冲突模块310的信息来确定线程302是否与线程301冲突。并且事务存储器运行时间调度器将对事务的调用从线程301延迟到应用程序接口(API)用于响应于确定线程302正在运行并且与线程301太频繁冲突而控制软件(例如,操作系统、管理程序、内核,等等)。在此情况下,事务运行时间环境提供延迟,其潜在地不包括对OS或硬件的任何改变。换句话说,自适应调度的效率可以由事务运行时间环境本身提供,而不需要求OS提供商或硬件提供商改变他们的产品。虽然也可以在控制软件或硬件中实现自适应线程调度。
在另一实施例中,硬件配置成延迟线程的调度、来自线程的指令、操作,等等。作为第一示例,硬件调度器配置成响应于冲突模块确定线程301和线程302的冲突率太高并且线程调度模块315确定线程302正在运行而延迟来自线程301的指令的调度。这里,指令到执行单元的分派可以延迟某个时间量。例如,延迟开始事务的指令或操作,使得事务的开始被延迟并且不能从与线程302的冲突异常中止直到它在延迟之后开始。但是,可以插入管道中的任何延迟,其有效地延迟线程301执行将产生冲突的指令或操作。
作为一个示例,上下文切换逻辑配置成响应于冲调模块310确定线程301和线程302的冲突率太高以及线程调度模块315确定线程302正在运行而延迟线程302到物理线程单元的切换。这里,线程302可以是不活动的。并且当它将切换到物理线程单元中时,确定线程302(竞争线程)在物理线程单元中是否活动。如果线程302是活动的,则延迟上下文切换,则不可避免地延迟指令的调度,例如开始事务指令。
然而,用于最小化冲突的自适应线程调度不必排他地仅实现在硬件或软件中。替代地,可以利用混合实现。例如,硬件计数器配置成追踪线程301中在时间量上由于与线程302的冲突而异常中止的事务的属灵以及在所述时间量上线程301中执行的事务的总数。并且包括事务运行时间代码的存储介质在执行时将引起执行逻辑从计数器中保存的事务的总数和异常中止的事务的数量来确定冲突率。此外,事务运行时间代码在执行时响应于确定线程301和线程302的冲突率太高以及线程调度模块确定线程302正在运行而延迟对特权的控制软件的应用接口的调用。
参考图4,示出了配置成基于线程冲突自适应调度线程的逻辑的逻辑表示的实施例。在一个实施例中,处理器400能够执行硬件事务。线程401和402将共享事务存储器410,例如高速缓存存储器。并且追踪机制连同一致性协议,例如上面参考图1和2描述的那些,将检测冲突并且引起事务异常中止。
这里,假设取出开始事务指令403用于线程401开始事务。解码器405解码指令并且其它管道逻辑430特别地响应于开始事务指令403,基于通过指令403的操作代码(操作码)和解码器405识别指令403来执行预先确定的操作。在事务期间,线程401和402可以如由硬件(例如高速缓存存储器410)检测到的产生冲突(即,线程之间写之后的读、读之后写或写之后写)。并且线程401的事务可异常中止。
类似于以上讨论,这些事务及其异常中止被追踪。在一个实施例中,硬件计数器415和420在追踪期的开始被重置。并且事务计数器415对于在时间段中由线程401执行的每个事务递增。注意到事务计数器415可在管道中的任何阶段递增,例如在开始事务指令403的解码、在结束事务指令的解码、那些指令之一的引退,等等。类似地,在时间段期间每次检测到线程401中的事务的异常中止时,异常中止计数器420递增。例如,当硬件检测到在线程401中执行的事务的冲突时,硬件计数器415配置成递增。在另一实施例中,复制事务计数器415用于多个潜在的竞争线程。因此,事务计数器415在此情况下专用于追踪线程401和线程402之间的冲突/异常中止。因此,如果在线程401中存在由于除了线程402之外的线程产生的事务的异常中止,则计数器415在此情况下不递增。还注意到计数器415、420可实现为累加器而不是计数器。并且替代直接使用计数,利用在计算期的开始和计算期的结束的计数之间的增量(delta)(例如,替代使用10个执行的事务的事务计数,在计算期的结束的30个事务的累加器计数减去在计算期的开始的累加器计数20产生相同的10个执行的事务)。
冲突逻辑425配置成确定在时间量上第一线程401和线程402的冲突度量。例如,冲突度量包括线程401关于线程402的冲突率。这里,冲突逻辑配置成确定事务冲突比率。如上所述,在一个实施例中,冲突比率包括线程401中基于与线程402的冲突异常中止的事务的数量(计数器值420)除以在时间量上线程401中执行的事务的总数(计数器值415)。注意到时间量或时间段可包括任何时间量,其可由布置在时间段的每一侧的事件定义,例如开始事务指令的先前的执行和开始事务指令的当前执行。
并且如果在线程402当前正在运行、执行和/或活动时接收来自线程401的调度的请求,并且冲突度量大于冲突阈值,则调度器逻辑440配置成延迟来自线程401的调度或延迟线程401的调度以用于执行单元445上的执行。例如,硬件调度器440将响应于开始事务指令403可用于调度并且线程402当前是活动的用于执行而延迟调度来自线程401的开始事务指令403,虽然冲突比率高于冲突比率阈值。注意到从以上讨论中,在一些实施例中,冲突阈值响应于调度器逻辑440将用于执行的线程401的调度延迟超过延迟时间帧上的延迟阈值而动态增加。这里,比冲突比率测量更长的时间段可用于观察线程401被延迟多少次。在此实例中,调整冲突比率阈值以增加或减少线程401被延迟的次数的量。并且如前所述,线程401的延迟可被忽略以便有意地同时调度冲突的/竞争的线程以便确保它们真正地仍在冲突。
移到图5,示出基于与当前正在运行的线程的冲突而延迟线程的调度的方法的流程图的实施例。注意到图5-7的流程图的流程以基本上连续的方式用列出的流程的顺序示出。然而,这些流程的连续的性质以及示出的顺序都不是要求的。例如,参考图5,基于设计实现,设计师可选择在确定流程当前是否正在运行(流程510)之前执行流程515(#线程的事务太高)。此外,流程605和610以线性或连续的方式示出。然而,确定执行的和异常中止的事务通常在相同时间段上并行执行。此外,任何示出的流程可以在硬件、软件、固件或其组合内执行。此外,采用一个或多个指令或操作的形式的任何程序代码在执行时可引起机器执行下面示出和描述的流程。
在流程505中,确定第一数量的事务,所述第一数量的事务由于与第二线程的冲突在第一线程中在时间段上异常中止。作为第一示例,响应于事务的异常中止(其响应于第一线程的事务和由第二线程的存取之间的冲突),关于第二线程的第一线程的异常中止计数递增(通过软件、硬件、固件或其组合)。
在流程510中,确定第二线程是否正在运行。如上所述,这可通过以下来进行:对于硬件的软件查询、对于线程的状态的检查硬件、查看线程是否具有凸出的指令/操作用于调度或者未引退、软件维持的线程的状态及其组合。注意到当确定线程当前是否正在运行是在流程515之前执行,系统基本上确定当前活动的或正在运行的线程集合(即,能够潜在地与感兴趣的线程产生冲突的所有线程,所述感兴趣的线程是将被调度的线程)。
在流程515中,在那个线程集合中,确定由于线程集合中的那些线程中的每个的冲突而异常中止的事务的数量是否太高(即,超过异常中止阈值)。虽然这里的讨论参考特定线程之间的异常中止,但是异常中止的数量可包括与哪个线程引起冲突无关的线程中的异常中止。或者异常中止可相对于线程的组来确定,例如在处理器的特定核上执行的线程的组。
在流程510或515中,如果潜在冲突的线程不在运行或者归因于冲突线程的异常中止的数量不超过阈值,则第一线程的调度或执行正常地继续。然而,如果第二线程正在运行并且引起太多异常中止,例如由在最近的时期上或者在时期上求平均的冲突比率指示的,则第一线程的调度在流程520中延迟。在一个实施例中,延迟第一线程的调度由控制软件调度器响应于第一线程内的事务的开始而执行。在此示例中,延迟第一线程的调度包括响应于第一线程内的事务的开始而延迟对控制软件的应用接口(例如应用程序接口(API))的调用。然而,本文描述的任何方法和设备可用于基于异常中止的恐外的观点来延迟线程;当前的、最近的冲突比率;平均的或加权的冲突比率;或确定线程之间的冲突的任何其它已知方法。
参考图6,示出了基于线程冲突来自适应调度线程的方法的流程图的实施例。在流程605中,确定在时间段上在第一线程中执行的事务的第一数量。并且在流程510中,确定响应于与第二线程的冲突而异常中止的在时间段上执行的事务的第一数量的事务的第二数量。这些‘计数’可保存在硬件(计数器、寄存器,等等)中或者在硬件本身的命令、软件(例如,响应于软件事务存储器(STM)运行时间代码的执行)、固件或其组合。
在流程615中,确定基于事务的第一数量(605)和事务的第二数量(610)的冲突比率。例如,冲突比率从包括M/N的公式确定,其中N包括事务的第一数量而M包括事务的第二数量。在另一实施例中,冲突比率公式包括:P * M/N + (1-p) * X/Y,其中N包括事务的第一数量,M包括事务的第二数量,Y包括在先前的时间段上执行的第一线程中的事务的第三数量,X包括在先前的时间段期间异常中止的第一线程中的事务的第四数量,并且p包括大于或等于0并且小于或等于1的常数。并且如上所述,P可以是静态常数或者随时间变化的动态常数。
在流程620中,确定冲突比率是否大于冲突阈值。并且如果是的话,则在流程625中延迟第一线程的调度。结果,可以说第一线程的调度则响应于第二线程当前正在运行并且冲突比率超过冲突阈值而被延迟。作为第一示例,延迟线程的调度包括延迟返回到第一线程。作为另一个说明性示例,延迟线程的调度包括延迟第一线程的应用接口调用。作为又一示例,延迟调度线程包括将延迟引入处理器管道或延迟第一线程的上下文切换。
关于图7,示出了基于线程冲突来自适应调度线程的方法的流程图的实施例。在流程705中,在第一线程(T10中开始事务,例如通过执行开始事务指令。在流程710中,确定自上一个冲突比率计算以来的时间。如果所述时间大于阈值,则在流程715和720中计算冲突比率。注意到在这个示例中冲突比率计算的时间量或时期(甚至连续时期)可能不相同。替代地,新的冲突比率在自上一个计算以来的时间超过分配的时间量(阈值)时在事务开始时计算。
在流程715中,确定当前冲突比率。例如,由于另一线程(例如T2)产生的T1中异常中止的事务的数量除以自上一个冲突比率计算以来在T1中执行的事务的总数。并且然后在流程720中通过等式1确定平均的或加权的冲突比率,等式1在下面重新复制。
等式1
并且无论平均冲突比率被重新计算(来自流程720)还是已经先前计算的当前的平均冲突比率,过去的时间量未超过计算阈值(直接来自流程710),在流程725中确定T2是否正在运行。如果T2不在运行,则T1在流程727中正常调度。然而,如果T2正在运行,则在流程730中确定平均冲突比率是否大于冲突比率阈值。如果冲突比率未超过阈值,则在流程727中正常调度T1。然而,如果冲突比率大于阈值,则在流程735中将第一线程延迟某个时间。
因此,如上面可以看到的,基于与其它线程的冲突自适应调度线程,这潜在地最小化线程之间的冲突,同时维持并发执行益处。然而,线程的延迟可基于与特定的单独线程的冲突。因此,当感兴趣的线程将被调度并且只有与感兴趣的线程不太经常冲突的线程正在运行时,感兴趣的线程可以正常调度。此外,甚至在特定的竞争线程之间,它们可以被周期性地调度以用于有意的并发执行以便重新检查线程是否仍发生冲突。
如本文使用的模块指任何硬件、软件、固件或其组合。通常,示出为分离的模块边界普遍地变化并且潜在地重叠。例如,第一和第二模块可以共享硬件、软件、固件或其组合,同时潜在地保留一些独立硬件、软件或固件。在一个实施例中,术语逻辑的使用包括硬件,例如晶体管、寄存器,或其它硬件,例如可编程逻辑装置。然而,在另一实施例中,逻辑还包括与硬件集成的软件或代码,例如固件或微代码。
如本文使用的值包括数字、状态、逻辑状态或二进制逻辑状态的任何已知表示。通常,逻辑电平、逻辑值、或逻辑的值的表示也称为1和0,这简单地表示二进制逻辑状态。例如,1指高逻辑电平并且0指低逻辑电平。在一个实施例中,存储单元,例如晶体管或闪存单元,可以能够保存单个逻辑值或多个逻辑值。然而,已经使用计算机系统中的值的其它表示。例如,十进制数10还可表示为二进制值1010和十六进制字母A。因此,值包括能够保存在计算机系统中的信息的任何表示。
此外,状态可以由值或值的部分表示。作为示例,第一值,例如逻辑1可以表示默认或初始状态,而第二值,例如逻辑0可以表示非默认状态。此外,在一个实施例中,术语重置和设置分别指默认和更新的值或状态。例如,默认值潜在地包括高逻辑值,即重置,而更新的值潜在包括低逻辑值,即设置。注意到值的任何组合可用于表示任何数量的状态。
上面阐述的方法、硬件、软件、固件或代码的实施例可经由可由处理元件执行的存储在机器可存取、机器可读、计算机可存取或计算机可读的介质上的指令或代码实现。非暂时性机器可存取/可读介质包括以由机器(例如计算机或电子系统)可读的形式提供(即,存储和/或传输)信息的任何机制。例如,非暂时性机器可存取介质包括随机存取存储器(RAM),例如静态RAM(SRAM)或动态RAM(DRAM);ROM;磁或光存储介质;闪存装置;电存储装置;光存储装置;声存储装置;用于保存从暂时性(传播的)信号(例如,载波、红外信号、数字信号)接收的信息的其它形式的存储装置;等等,其将区别于可从那里接收信息的非暂时性介质。
本说明书中通篇对“一个实施例”或“一实施例”的引用意味着结合实施例描述的特定特征、结构或特性被包括在本发明的至少一个实施例中。因此,短语“在一个实施例中”或“在实施例中”在本说明书中通篇各处的出现不一定全部指相同实施例。此外,可以用任何合适的方式在一个或多个实施例中组合特定特征、结构或特性。
在前述说明书中,已经参考特定的示范性实施例给出具体实施方式。然而,将显而易见的是在不偏离如附加的权利要求中阐述的本发明的更广阔的精神和范围的情况下,可对其进行各种修改和改变。因此,说明书和附图将以说明性的方式而不是限制的方式来看待。此外,实施例和其它示范性语言的前述使用不一定指相同实施例或相同示例,而是可以指不同和独特的实施例,以及潜在地相同实施例。
Claims (37)
1.一种用于线程调度的设备,包括:
冲突模块,适于确定第一线程与第二线程的冲突率太高,其中当所述第一线程与所述第二线程的所述冲突率大于或等于冲突率阈值时,确定所述第一线程与所述第二线程的所述冲突率为太高;以及
线程调度模块,适于:
确定在调度所述第一线程之前所述第二线程是否正在运行,并且响应于所述冲突模块确定所述第一线程与所述第二线程的所述冲突率太高以及所述线程调度模块确定所述第二线程正在运行而延迟所述第一线程的调度。
2.如权利要求1所述的设备,其中所述第一线程与所述第二线程的所述冲突率包括在时间量上由于与所述第二线程的冲突的所述第一线程中异常中止的事务的数量除以在所述时间量上所述第一线程中执行的事务的总数的冲突比率。
3.如权利要求2所述的设备,其中所述时间量包括选自包括预先确定的时间量、同步事件之间的时间量、异步事件之间的时间量以及预先确定的事件之间的时间量的组的时间段。
4.如权利要求2所述的设备,其中所述冲突模块包括软件计数器和保存冲突处理机代码的存储介质,所述冲突处理机代码在执行时引起所述软件计数器追踪在所述时间量上由于与所述第二线程的冲突的所述第一线程中异常中止的事务的数量。
5.如权利要求2所述的设备,其中先前冲突比率包括在先前的时间量期间由于与所述第二线程的冲突的所述第一线程中异常中止的事务的先前数量除以在所述先前的时间量期间所述第一线程中的事务的先前数量,并且其中所述冲突率还包括:P*冲突比率+(1-P)*先前冲突比率,其中P是大于或等于0并且小于或等于1的常数。
6.如权利要求5所述的设备,其中P基于所述第一线程的调度被延迟的次数在运行时间期间动态可调。
7.如权利要求2所述的设备,其中冲突模块适于确定第一线程与第二线程的冲突率太高包括所述冲突模块适于确定所述冲突比率大于冲突比率阈值。
8.如权利要求7所述的设备,其中所述冲突比率阈值在运行时间期间动态可调。
9.如权利要求1所述的设备,其中所述线程调度模块适于响应于所述冲突模块确定所述第一线程与所述第二线程的所述冲突率太高以及所述线程调度模块确定所述第二线程正在运行而延迟所述第一线程的调度包括:所述线程调度模块包括保存事务存储器库的存储介质,所述事务存储器库在执行时响应于确定所述第一线程与所述第二线程的所述冲突率太高以及所述线程调度模块确定所述第二线程正在运行而延迟对特权的控制软件的应用接口的调用。
10.如权利要求1所述的设备,其中所述线程调度模块适于响应于所述冲突模块确定所述第一线程与所述第二线程的所述冲突率太高以及所述线程调度模块确定所述第二线程正在运行而延迟所述第一线程的调度包括:硬件调度器配置成响应于所述冲突模块确定所述第一线程与所述第二线程的所述冲突率太高以及所述线程调度模块确定所述第二线程正在运行而延迟来自所述第一线程的指令的调度。
11.如权利要求1所述的设备,其中所述线程调度模块适于响应于所述冲突模块确定所述第一线程与所述第二线程的所述冲突率太高以及所述线程调度模块确定所述第二线程正在运行而延迟所述第一线程的调度包括:上下文切换逻辑配置成响应于所述冲突模块确定所述第一线程与所述第二线程的所述冲突率太高以及所述线程调度模块确定所述第二线程正在运行而延迟将所述第一线程切换到物理线程单元。
12.如权利要求2所述的设备,其中所述冲突模块适于确定第一线程与第二线程的冲突率太高包括:硬件计数器配置成追踪在所述时间量上由于与所述第二线程的冲突的所述第一线程中异常中止的事务的所述数量以及在所述时间量上所述第一线程中执行的事务的所述总数,并且存储介质包括事务运行时间代码,所述事务运行时间代码在执行时引起执行逻辑根据异常中止的事务的数量和事务的总数来确定所述冲突比率,并且其中所述线程调度模块包括所述存储介质,所述存储介质包括所述事务运行时间代码,所述事务运行时间代码在执行时响应于确定所述第一线程与所述第二线程的所述冲突率太高以及所述线程调度模块确定所述第二线程正在运行而延迟对特权的控制软件的应用接口的调用。
13.一种用于线程调度的设备,包括:
冲突逻辑,配置成确定在时间量上第一线程与第二线程的冲突度量;以及
调度器逻辑,配置成当所述第二线程当前正在执行并且所述冲突度量大于冲突阈值时响应于调度所述第一线程的请求而延迟调度所述第一线程用于执行。
14.如权利要求13所述的设备,其中所述冲突逻辑配置成确定在时间量上第一线程与第二线程的冲突度量包括:所述冲突逻辑配置成确定在所述时间量上第一线程与所述第二线程的事务冲突比率,其中所述冲突比率包括所述第一线程中的基于与所述第二线程的冲突而异常中止的事务的数量除以在所述时间量上所述第一线程中执行的事务的总数。
15.如权利要求14所述的设备,其中所述冲突逻辑包括第一硬件计数器,所述第一硬件计数器配置成响应于所述第一线程中异常中止的若干事务的所述第一线程中事务的异常中止而递增,以及第二硬件计数器,所述第二硬件计数器配置成响应于遇到所述第一线程中执行的总数的事务的所述第一线程中的事务而递增。
16.如权利要求13所述的设备,其中所述调度器逻辑配置成当所述第二线程当前正在执行并且所述冲突度量大于冲突阈值时响应于调度所述第一线程的请求而延迟调度所述第一线程用于执行包括:硬件调度器响应于开始事务指令可用于调度并且所述第二线程当前活动用于执行而延迟调度来自所述第一线程的所述开始事务指令。
17.如权利要求13所述的设备,其中所述冲突阈值响应于所述调度器逻辑将调度所述第一线程用于执行在延迟时间帧上延迟超过延迟阈值而动态增加。
18.一种非暂时性机器可读介质,其包括代码,所述代码在由机器执行时引起所述机器执行以下操作:
确定第一线程中的由于与第二线程的冲突在时间段上异常中止的事务的第一数量;以及
在所述第二线程当前正在运行时,基于所述第一线程中的在时间段上异常中止的事务的所述第一数量大于或等于阈值,响应于所述第一线程内的事务的开始,用控制软件调度器来延迟所述第一线程的调度。
19.如权利要求18所述的机器可读介质,其中确定第一线程中的由于与第二线程的冲突在时间段上异常中止的事务的第一数量包括:响应于事务的异常中止,递增第一线程相对于所述第二线程的异常中止计数,所述事务的所述异常中止响应于所述第一线程的事务与由所述第二线程的存取之间的冲突。
20.如权利要求18所述的机器可读介质,其中在所述第二线程当前正在运行时,基于所述第一线程中的在所述时间段上异常中止的事务的所述第一数量,响应于所述第一线程内的事务的开始,用控制软件调度器来延迟所述第一线程的调度包括:在所述第二线程当前正在运行时,基于所述第一线程中的在所述时间段上异常中止的事务的所述第一数量,响应于所述第一线程内的所述事务的所述开始,延迟对所述控制软件的应用接口的调用。
21.如权利要求20所述的机器可读介质,其中在所述第二线程当前正在运行时,基于所述第一线程中的在所述时间段上异常中止的事务的所述第一数量,响应于所述第一线程内的事务的开始,用控制软件调度器来延迟所述第一线程的调度还包括:在所述第二线程当前正在运行并且所述第一线程中的在所述时间段上异常中止的事务的所述第一数量大于所述时间段上的异常中止阈值时,响应于所述第一线程内的所述事务的所述开始,延迟对所述控制软件的所述应用接口的所述调用。
22.如权利要求20所述的机器可读介质,其中在所述第二线程当前正在运行时,基于所述第一线程中的在所述时间段上异常中止的事务的所述第一数量,响应于所述第一线程内的事务的开始,用控制软件调度器来延迟所述第一线程的调度还包括:在所述第二线程当前正在运行并且所述第一线程中的在所述时间段上异常中止的事务的所述第一数量除以来自所述时间段上执行的所述第一线程的事务的总数大于冲突比率阈值时,响应于所述第一线程内的所述事务的所述开始,延迟对所述控制软件的所述应用接口的所述调用。
23.一种用于线程调度的方法,包括:
确定在时间段上执行的第一线程中的事务的第一数量;
确定在所述时间段上执行的第一数量的事务中的响应于与第二线程的冲突而异常中止的事务的第二数量;
基于事务的所述第一数量和事务的所述第二数量来确定冲突比率;以及
响应于所述第二线程当前正在运行并且所述冲突比率超过冲突阈值而延迟所述第一线程的调度。
24.如权利要求23所述的方法,其中确定在时间段上执行的第一线程中的事务的第一数量以及确定在所述时间段上执行的第一数量的事务中的响应于与第二线程的冲突而异常中止的事务的第二数量响应于软件事务存储器(STM)运行时间代码的执行而执行。
25.如权利要求23所述的方法,其中确定在时间段上执行的第一线程中的事务的第一数量以及确定在所述时间段上执行的第一数量的事务中的响应于与第二线程的冲突而异常中止的事务的第二数量在硬件中执行。
26.如权利要求23所述的方法,其中基于事务的所述第一数量和事务的所述第二数量来确定冲突比率包括从包括M/N的公式确定所述冲突比率,其中N包括事务的所述第一数量并且M包括事务的所述第二数量。
27.如权利要求23所述的方法,其中基于事务的所述第一数量和事务的所述第二数量来确定冲突比率包括从包括P * M/N + (1-p) * X/Y的公式确定所述冲突比率,其中N包括事务的所述第一数量,M包括事务的所述第二数量,Y包括在先前的时间段上执行的所述第一线程中事务的第三数量,X包括所述第一线程中的在所述先前的时间段期间异常中止的事务的第四数量,并且p包括大于或等于0并且小于或等于1的常数。
28.如权利要求23所述的方法,其中响应于所述第二线程当前正在运行并且所述冲突比率超过冲突阈值而延迟调度所述第一线程包括响应于所述第二线程当前正在运行并且所述冲突比率超过冲突阈值而延迟返回到所述第一线程。
29.如权利要求23所述的方法,其中响应于所述第二线程当前正在运行并且所述冲突比率超过冲突阈值而延迟调度所述第一线程包括:响应于所述第二线程当前正在运行并且所述冲突比率超过冲突阈值而延迟对于所述第一线程的应用接口调用。
30.一种包括代码的非暂时机器可读介质,当由机器执行所述代码时,引起所述机器执行权利要求23-29中任一项所述的方法。
31.一种用于线程调度的设备,包括:
用于确定在时间段上执行的第一线程中的事务的第一数量的部件;
用于确定在所述时间段上执行的第一数量的事务中的响应于与第二线程的冲突而异常中止的事务的第二数量的部件;
用于基于事务的所述第一数量和事务的所述第二数量来确定冲突比率的部件;以及
用于响应于所述第二线程当前正在运行并且所述冲突比率超过冲突阈值而延迟所述第一线程的调度的部件。
32.如权利要求31所述的设备,其中确定在时间段上执行的第一线程中的事务的第一数量以及确定在所述时间段上执行的第一数量的事务中的响应于与第二线程的冲突而异常中止的事务的第二数量响应于软件事务存储器(STM)运行时间代码的执行而执行。
33.如权利要求31所述的设备,其中确定在时间段上执行的第一线程中的事务的第一数量以及确定在所述时间段上执行的第一数量的事务中的响应于与第二线程的冲突而异常中止的事务的第二数量在硬件中执行。
34.如权利要求31所述的设备,其中用于基于事务的所述第一数量和事务的所述第二数量来确定冲突比率的部件包括用于从包括M/N的公式确定所述冲突比率的部件,其中N包括事务的所述第一数量并且M包括事务的所述第二数量。
35.如权利要求31所述的设备,其中用于基于事务的所述第一数量和事务的所述第二数量来确定冲突比率的部件包括用于从包括P * M/N + (1-p) * X/Y的公式确定所述冲突比率的部件,其中N包括事务的所述第一数量,M包括事务的所述第二数量,Y包括在先前的时间段上执行的所述第一线程中事务的第三数量,X包括所述第一线程中的在所述先前的时间段期间异常中止的事务的第四数量,并且p包括大于或等于0并且小于或等于1的常数。
36.如权利要求31所述的设备,其中用于响应于所述第二线程当前正在运行并且所述冲突比率超过冲突阈值而延迟调度所述第一线程的部件包括用于响应于所述第二线程当前正在运行并且所述冲突比率超过冲突阈值而延迟返回到所述第一线程的部件。
37.如权利要求31所述的设备,其中用于响应于所述第二线程当前正在运行并且所述冲突比率超过冲突阈值而延迟调度所述第一线程的部件包括:用于响应于所述第二线程当前正在运行并且所述冲突比率超过冲突阈值而延迟对于所述第一线程的应用接口调用的部件。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/273,695 US8719828B2 (en) | 2011-10-14 | 2011-10-14 | Method, apparatus, and system for adaptive thread scheduling in transactional memory systems |
US13/273695 | 2011-10-14 | ||
PCT/US2012/059204 WO2014107143A2 (en) | 2011-10-14 | 2012-10-08 | Method, apparatus, and system for adaptive thread scheduling in transactional memory systems |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104487946A CN104487946A (zh) | 2015-04-01 |
CN104487946B true CN104487946B (zh) | 2018-09-18 |
Family
ID=48086878
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201280061721.2A Active CN104487946B (zh) | 2011-10-14 | 2012-10-08 | 用于事务存储器系统中的自适应线程调度的方法和设备 |
Country Status (5)
Country | Link |
---|---|
US (1) | US8719828B2 (zh) |
EP (1) | EP2775982A4 (zh) |
KR (1) | KR101617975B1 (zh) |
CN (1) | CN104487946B (zh) |
WO (1) | WO2014107143A2 (zh) |
Families Citing this family (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013103339A1 (en) * | 2012-01-04 | 2013-07-11 | Intel Corporation | Bimodal functionality between coherent link and memory expansion |
US9164912B2 (en) * | 2012-06-13 | 2015-10-20 | International Business Machines Corporation | Conflict resolution of cache store and fetch requests |
US20140053161A1 (en) * | 2012-08-14 | 2014-02-20 | Advanced Micro Devices, Inc. | Method for Adaptive Scheduling of Multimedia Jobs |
US8971968B2 (en) * | 2013-01-18 | 2015-03-03 | Dell Products, Lp | System and method for context aware usability management of human machine interfaces |
US9183043B2 (en) | 2013-07-16 | 2015-11-10 | Oracle International Corporation | Systems and methods for adaptive integration of hardware and software lock elision techniques |
KR20150019349A (ko) * | 2013-08-13 | 2015-02-25 | 삼성전자주식회사 | 다중 쓰레드 실행 프로세서 및 이의 동작 방법 |
JP6021112B2 (ja) * | 2013-11-28 | 2016-11-02 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | 複数のスレッドで順序付きトランザクションを実行する方法、並びに、当該トランザクションを実行するためのコンピュータ及びそのコンピュータ・プログラム |
KR102177871B1 (ko) * | 2013-12-20 | 2020-11-12 | 삼성전자주식회사 | 멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법 |
US9817693B2 (en) * | 2014-03-14 | 2017-11-14 | International Business Machines Corporation | Coherence protocol augmentation to indicate transaction status |
US9454313B2 (en) * | 2014-06-10 | 2016-09-27 | Arm Limited | Dynamic selection of memory management algorithm |
CN104052638B (zh) * | 2014-06-27 | 2017-11-10 | 北京蓝汛通信技术有限责任公司 | 模块间冲突检测方法、装置及服务器 |
US9524246B2 (en) | 2014-09-10 | 2016-12-20 | International Business Machines Corporation | Resetting memory locks in a transactional memory system |
CN105045563B (zh) * | 2015-06-19 | 2017-10-10 | 陕西科技大学 | 一种推测嵌套软件事务存储的冲突管理方法 |
GB2541400B (en) * | 2015-08-17 | 2017-11-15 | Advanced Risc Mach Ltd | Tracing of exception handling events |
CN106547609B (zh) * | 2015-09-18 | 2020-09-18 | 阿里巴巴集团控股有限公司 | 一种事件处理方法和设备 |
US9921878B1 (en) * | 2015-12-07 | 2018-03-20 | Amazon Technologies, Inc. | Singleton coordination in an actor-based system |
US10366013B2 (en) * | 2016-01-15 | 2019-07-30 | Futurewei Technologies, Inc. | Caching structure for nested preemption |
WO2017166166A1 (en) * | 2016-03-31 | 2017-10-05 | Oracle International Corporation | System and method for providing runtime tracing for web-based client accessing transactional middleware platform using extension interface |
US10108453B2 (en) * | 2016-06-30 | 2018-10-23 | International Business Machines Corporation | Averting lock contention associated with core-based hardware threading in a split core environment |
US10031834B2 (en) * | 2016-08-31 | 2018-07-24 | Microsoft Technology Licensing, Llc | Cache-based tracing for time travel debugging and analysis |
US11868818B2 (en) | 2016-09-22 | 2024-01-09 | Advanced Micro Devices, Inc. | Lock address contention predictor |
CN106656391B (zh) * | 2016-12-12 | 2018-10-12 | 中国航空工业集团公司西安航空计算技术研究所 | 一种交换机芯片多路时钟同步原语冲突处理电路 |
US10261835B2 (en) * | 2017-03-21 | 2019-04-16 | Arm Limited | Hardware thread scheduling |
CN107766478A (zh) * | 2017-10-11 | 2018-03-06 | 复旦大学 | 一种面向高竞争情景的并发索引结构的设计方法 |
CN110019468B (zh) * | 2017-12-05 | 2021-07-16 | 华为技术有限公司 | 一种数据库系统及数据库访问方法 |
US10402224B2 (en) | 2018-01-03 | 2019-09-03 | Intel Corporation | Microcontroller-based flexible thread scheduling launching in computing environments |
US10558572B2 (en) * | 2018-01-16 | 2020-02-11 | Microsoft Technology Licensing, Llc | Decoupling trace data streams using cache coherence protocol data |
US10831607B2 (en) | 2018-07-30 | 2020-11-10 | International Business Machines Corporation | Dynamic transaction throttling in a data processing system supporting transactional memory |
US10984028B2 (en) * | 2018-11-28 | 2021-04-20 | International Business Machines Corporation | Temporal sensitive cognitive interface |
CN109783209B (zh) * | 2018-11-28 | 2023-08-22 | 四川商通实业有限公司 | 一种多级缓存提高服务器处理效率的方法及系统 |
US11132198B2 (en) | 2019-08-29 | 2021-09-28 | International Business Machines Corporation | Instruction handling for accumulation of register results in a microprocessor |
CN113535346B (zh) * | 2020-04-21 | 2024-03-19 | 中移动信息技术有限公司 | 线程数量调整的方法、装置、设备及计算机存储介质 |
US11288092B2 (en) * | 2020-07-20 | 2022-03-29 | Red Hat, Inc. | Dynamically adjusting reconciliation time-delays |
KR20220048081A (ko) * | 2020-10-12 | 2022-04-19 | 삼성전자주식회사 | 저널 파일을 관리하는 전자 장치 및 이의 동작 방법 |
CN113157408B (zh) * | 2021-03-25 | 2024-05-17 | 上海科世达-华阳汽车电器有限公司 | 一种嵌入式软件计数定时方法、装置、电子设备和介质 |
CN115629822B (zh) * | 2022-11-09 | 2023-07-25 | 深圳计算科学研究院 | 一种基于多核处理器的并发事务处理方法及其系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101510162A (zh) * | 2009-03-26 | 2009-08-19 | 浙江大学 | 一种基于延时策略的软件事务内存的实现方法 |
CN101807144A (zh) * | 2010-03-17 | 2010-08-18 | 上海大学 | 一种前瞻多线程并行执行优化方法 |
Family Cites Families (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7865485B2 (en) * | 2003-09-23 | 2011-01-04 | Emc Corporation | Multi-threaded write interface and methods for increasing the single file read and write throughput of a file server |
US20050108711A1 (en) * | 2003-11-13 | 2005-05-19 | Infineon Technologies North America Corporation | Machine instruction for enhanced control of multiple virtual processor systems |
US7631308B2 (en) * | 2005-02-11 | 2009-12-08 | International Business Machines Corporation | Thread priority method for ensuring processing fairness in simultaneous multi-threading microprocessors |
US7827554B2 (en) * | 2005-06-20 | 2010-11-02 | Microsoft Corporation | Multi-thread multimedia processing |
US20070136289A1 (en) * | 2005-12-14 | 2007-06-14 | Intel Corporation | Lock elision with transactional memory |
US7870545B2 (en) * | 2005-12-16 | 2011-01-11 | Intel Corporation | Protecting shared variables in a software transactional memory system |
US7752279B2 (en) * | 2007-05-29 | 2010-07-06 | Research In Motion Limited | System for facilitating thread-based message prioritization |
US8661204B2 (en) * | 2007-08-15 | 2014-02-25 | University Of Rochester, Office Of Technology Transfer | Mechanism to support flexible decoupled transactional memory |
US8209689B2 (en) * | 2007-09-12 | 2012-06-26 | Intel Corporation | Live lock free priority scheme for memory transactions in transactional memory |
US20090138890A1 (en) * | 2007-11-21 | 2009-05-28 | Arm Limited | Contention management for a hardware transactional memory |
US8245232B2 (en) * | 2007-11-27 | 2012-08-14 | Microsoft Corporation | Software-configurable and stall-time fair memory access scheduling mechanism for shared memory systems |
US8195898B2 (en) * | 2007-12-27 | 2012-06-05 | Intel Corporation | Hybrid transactions for low-overhead speculative parallelization |
US9244732B2 (en) * | 2009-08-28 | 2016-01-26 | Vmware, Inc. | Compensating threads for microarchitectural resource contentions by prioritizing scheduling and execution |
US8099693B2 (en) * | 2008-11-04 | 2012-01-17 | Cadence Design Systems, Inc. | Methods, systems, and computer program product for parallelizing tasks in processing an electronic circuit design |
US8402464B2 (en) * | 2008-12-01 | 2013-03-19 | Oracle America, Inc. | System and method for managing contention in transactional memory using global execution data |
US9170844B2 (en) * | 2009-01-02 | 2015-10-27 | International Business Machines Corporation | Prioritization for conflict arbitration in transactional memory management |
US8161247B2 (en) * | 2009-06-26 | 2012-04-17 | Microsoft Corporation | Wait loss synchronization |
US8539486B2 (en) * | 2009-07-17 | 2013-09-17 | International Business Machines Corporation | Transactional block conflict resolution based on the determination of executing threads in parallel or in serial mode |
US8819686B2 (en) * | 2009-07-23 | 2014-08-26 | Empire Technology Development Llc | Scheduling threads on different processor cores based on memory temperature |
US8645963B2 (en) * | 2009-11-05 | 2014-02-04 | International Business Machines Corporation | Clustering threads based on contention patterns |
KR20110080073A (ko) * | 2010-01-04 | 2011-07-12 | 삼성전자주식회사 | 멀티쓰레드 환경을 테스트하는 커버리지 장치 및 방법 |
US8438568B2 (en) * | 2010-02-24 | 2013-05-07 | International Business Machines Corporation | Speculative thread execution with hardware transactional memory |
US8392930B2 (en) * | 2010-03-11 | 2013-03-05 | Microsoft Corporation | Resource contention log navigation with thread view and resource view pivoting via user selections |
US8363669B2 (en) * | 2010-06-25 | 2013-01-29 | International Business Machines Corporation | Recovering data from a plurality of packets |
US8677361B2 (en) * | 2010-09-30 | 2014-03-18 | International Business Machines Corporation | Scheduling threads based on an actual power consumption and a predicted new power consumption |
US20130019083A1 (en) * | 2011-07-11 | 2013-01-17 | International Business Machines Corporation | Redundant Transactional Memory |
-
2011
- 2011-10-14 US US13/273,695 patent/US8719828B2/en active Active
-
2012
- 2012-10-08 EP EP12887860.0A patent/EP2775982A4/en not_active Withdrawn
- 2012-10-08 WO PCT/US2012/059204 patent/WO2014107143A2/en active Application Filing
- 2012-10-08 KR KR1020147011868A patent/KR101617975B1/ko not_active IP Right Cessation
- 2012-10-08 CN CN201280061721.2A patent/CN104487946B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101510162A (zh) * | 2009-03-26 | 2009-08-19 | 浙江大学 | 一种基于延时策略的软件事务内存的实现方法 |
CN101807144A (zh) * | 2010-03-17 | 2010-08-18 | 上海大学 | 一种前瞻多线程并行执行优化方法 |
Also Published As
Publication number | Publication date |
---|---|
US20130097607A1 (en) | 2013-04-18 |
KR101617975B1 (ko) | 2016-05-03 |
US8719828B2 (en) | 2014-05-06 |
WO2014107143A3 (en) | 2014-09-25 |
EP2775982A2 (en) | 2014-09-17 |
EP2775982A4 (en) | 2016-04-20 |
WO2014107143A2 (en) | 2014-07-10 |
CN104487946A (zh) | 2015-04-01 |
KR20140138586A (ko) | 2014-12-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104487946B (zh) | 用于事务存储器系统中的自适应线程调度的方法和设备 | |
Ramadan et al. | Dependence-aware transactional memory for increased concurrency | |
McDonald et al. | Architectural semantics for practical transactional memory | |
JP5944417B2 (ja) | トランザクショナル・メモリ・イベントの処理のためのハードウェアにおけるユーザハンドラの登録 | |
CN101814018B (zh) | 事务存储器(tm)系统中的读和写监控属性 | |
JP5860450B2 (ja) | ローカルにバッファリングされたデータをサポートするためのキャッシュコヒーレンスプロトコルの拡張 | |
JP5608738B2 (ja) | 無制限トランザクショナルメモリ(utm)システムの最適化 | |
CN101814017B (zh) | 提供硬件属性的存储器模型以支持事务执行的方法和设备 | |
US10884931B2 (en) | Interprocessor memory status communication | |
US10261828B2 (en) | Interprocessor memory status communication | |
US9921872B2 (en) | Interprocessor memory status communication | |
US9916180B2 (en) | Interprocessor memory status communication | |
JP6023765B2 (ja) | 無制限トランザクショナルメモリ(utm)システムの最適化 | |
Kubiatowicz | Closing the Window of Vulnerability in Multiphase memory transaction: The alewife transaction store | |
JP6318440B2 (ja) | 無制限トランザクショナルメモリ(utm)システムの最適化 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20221115 Address after: China Taiwan Hsinchu Science Park Hsinchu city Dusing Road No. 1 Patentee after: MEDIATEK Inc. Address before: California, USA Patentee before: INTEL Corp. |