使能混合事务存储器系统中的最大并发性的制作方法

文档序号:10694032阅读:549来源:国知局
使能混合事务存储器系统中的最大并发性的制作方法
【专利摘要】在事务存储器系统的一实施例中,设备包括处理器和执行逻辑,以便实现第一软件事务模式的至少一个第一软件事务和第二软件事务模式的第二软件事务以及第一硬件事务模式的至少一个硬件事务和第二硬件事务模式的至少一个第二硬件事务的并发执行。在一个示例中,执行逻辑可在处理器中实现。描述并且要求保护其他实施例。
【专利说明】使能混合事务存储器系统中的最大并发性
【背景技术】
[0001] 在并行编程计算环境中,共享对相同存储器位置的访问要求适当管理和同步,这 会比较难以执行。按传统,访问共享存储器的线程之间的同步使用锁定来实现,以保护共享 数据免于同时访问。但是,锁定在其对共享数据的串行化中常常是过度保守的(这在执行时 可能不一定是必要的),但是确定编写代码的时间常常是棘手或不可能的。
[0002] 作为备选解决方案提出了事务存储器,以允许线程推测地并行执行临界区(称作 事务)。如果冲突在执行时发生,则线程停止或终止其事务,并且再次执行它们以解决冲突。 在事务存储器系统中,线程能够推测地执行事务,而无需改变共享存储器位置的内容,直到 事务随后提交。如果在两个事务之间检测到冲突,则可中止事务其中之一,使得其他事务能 够提交,在这时,所提交事务可改变共享存储器位置的内容。
【附图说明】
[0003] 图1是按照一实施例的系统的框图。
[0004] 图2是按照一实施例的事务的执行的高级流程图。
[0005] 图3示出按照一实施例的硬件事务与软件事务之间的可能定时。
[0006] 图4是按照本发明的一实施例的混合事务存储器系统流程的框图。
[0007] 图5是按照一实施例的第一硬件事务的执行的流程图。
[0008] 图6是按照一实施例的第一硬件事务的阶段的细节。
[0009]图7是按照一实施例的第二事务的执行的流程图。
[0010] 图8是按照一实施例的基于基本布隆过滤器的硬件事务的细节。
[0011] 图9是按照一实施例的基于优化布隆过滤器的硬件事务的细节。
[0012] 图10是按照一实施例的推测软件事务的执行的流程图。
[0013] 图11示出按照一实施例的软件事务执行的细节。
[0014] 图12是按照一实施例的不可撤销软件事务的执行的流程图。
[0015] 图13示出按照一实施例的不可撤销软件事务的细节。
[0016] 图14是按照另一个实施例的系统的框图。
【具体实施方式】
[0017] 在实现事务存储器系统的各个实施例中,可在与一个或多个软件事务并发执行的 一个或多个硬件事务之间使用与被访问存储器位置有关的信息来确定冲突。在某些实现 中,这个信息可通过与执行事务的线程关联的过滤器组来保持。更具体来说,实施例可将这 些过滤器组作为所谓的布隆过滤器来实现,其中可存储与被访问存储器位置有关的信息。
[0018] -般来说,布隆过滤器可实现为位向量,其包括各提供与一个或多个存储器位置 关联的值的多个字段。在操作中,将被访问存储器位置地址(或者其一部分)与一个或多个 哈希值进行哈希。哈希结果用来装载位向量的对应条目。更具体来说,在访问和哈希计算 时,位向量的所指示字段可设置在逻辑一或有效值,以指示已经访问对应地址。类似地,具 有逻辑零或无效值的任何字段指示尚未访问存储器的一个或多个给定地址。
[0019] 冲突检测可至少部分使用多个布隆过滤器值来执行。更具体来说,第一线程的布 隆过滤器可使其内容与具有并发执行事务的第二线程的布隆过滤器的内容进行比较。如果 交叉比较指示访问存储器位置在一个或多个位置中交叉,则检测到冲突,并且终止或中止 事务的一个或多个的操作可发生。而如果交叉比较指示被访问位置没有交叉,则事务之一 或两者可在没有冲突检测的情况下继续提交。
[0020] 实施例可用来确定与软件事务并发执行的硬件事务之间的冲突。使用为各线程提 供布隆过滤器的一实施例,在软件全局锁定由软件事务所保持的同时完成执行的硬件事务 仅当发现冲突时才可被迫中止。布隆过滤器有时能够允许误报,因此假中止仍然能够发生。 然而,布隆过滤器的使用能够改进硬件事务的提交率。
[0021] 实施例可用于混合事务存储器(HTM)(其使用将要由给定软件事务所获取的单个 全局锁定来提供软件事务和硬件事务)中。硬件事务存储器可以只通过处理器硬件来实现, 其使用尽力来完成要提交的事务。软件事务存储器完全通过软件来实现,以便在多线程程 序中同步共享存储器。
[0022] 在硬件事务结束时,硬件事务咨询单个全局锁定。如果锁定为空,则硬件事务能够 成功提交。在单个全局锁定不为空的情况下,冲突检测可使用每线程布隆过滤器(其表示各 事务的读和写集合)来执行。这样,即使单个全局锁定被软件事务占用,非冲突硬件事务也 能够提交。
[0023] 因此,实施例实现混合事务存储器系统中所实现的并发量的增加。为了检测软件 事务与硬件事务之间的冲突,各线程与布隆过滤器关联。在线程中的事务的执行期间,注解 每个读和写,以便将存储器位置添加到布隆过滤器。在一实施例中,这个注解可通过资料库 调用进行。但是,其他实施例可采用读和写存储器访问来嵌入这类注解。备选地,编译器可 插入指令,以操控布隆过滤器插入。
[0024] 在完成硬件事务(即,事务的临界区)时,事务在提交之前咨询全局锁定,以及如果 锁定为空,则该事务能够成功提交。但是,如果锁定被占用,则在交叉操作中比较硬件事务 和软件事务(其拥有全局锁定)的布隆过滤器内容,以确定是否存在冲突。布隆过滤器允许 误报,但是不允许漏报。因此,尽管事务没有实际冲突,也可检测到冲突,但是如果事务访问 相同存储器位置,则交叉比较将不会报告零冲突。因此,即使锁定被占用,硬件事务也能够 成功提交,只要布隆过滤器没有报告冲突。
[0025] 在一个特定混合事务存储器系统中,单个软件事务可与一个或多个硬件事务并发 执行。在软件事务开始时,它获取单个全局锁定以确保独占性。各硬件事务在临界区结束时 读取这个锁定,以确定它是否能够设法提交或者要咨询布隆过滤器。在一实施例中,单个全 局锁定能够存储拥有者线程的标识符,因而向硬件事务指示要对哪一个布隆过滤器检查冲
[0026] 在一实施例中,布隆过滤器可实现为软件布隆过滤器。使用这些过滤器,各事务 (硬件或软件)在读取/写入那个位置时将所读取或写入的各存储器位置添加到其自己的布 隆过滤器。在硬件事务结束时,布隆过滤器用来识别与当前保持单个全局锁定(若有的话) 的软件事务的冲突。
[0027] 注意,硬件事务主要通过硬件来执行,但是使读和写访问被注解,使得所读取/写 入的位置被输入到每线程软件布隆过滤器中。在提交时间,硬件事务检查全局锁定,以及如 果它为空,则它们能够提交,否则它们计算它们自己的布隆过滤器与软件布隆过滤器之间 的组交叉。如果不存在冲突,则硬件事务能够成功提交。在提交时(在确认没有冲突或过滤 器交叉之后),通过将已更新值写到存储器(使得所有更新立即变为可见),由硬件事务所执 行的更新变成是其他线程可见的。如果事务中止,则所有更新恢复到其初始状态。
[0028] 中止的硬件事务重试多次。在N(其是可配置参数)重试之后,硬件事务转变成软件 事务,并且寻求获取单个全局锁定。在软件事务没有中止的一实施例中,这个转变确保前向 进展。
[0029] 在这个实施例中,只有一个软件事务能够在任何给定时间执行。软件事务在其线 程拥有单个全局锁定时能够执行。它通过在锁定位置写入其线程标识符(ID)来获取锁定, 并且开始执行其临界区。由软件事务所执行的所有更新在原位进行(换言之,软件事务直接 更新存储器)。此外,软件事务还在其线程的布隆过滤器中存储所读取/写入的位置,以允许 任何并发硬件事务检查冲突。在一实施例中,软件事务能够从不中止。
[0030] 混合事务存储器方式可用来实现更快的事务执行以及与硬件事务存储器关联的 降低开销,同时确保被操控事务的前向进展。按照混合事务存储器方式,各事务最初通过硬 件来操控,以及随后在前向进展无法通过软件来取得时通过软件来操控。在各个实施例中, 提供一种混合事务存储器系统,其中全局锁定用来实现软件事务和一个或多个硬件事务的 并发执行。
[0031] 图1是设备100的框图。如图1所示,设备100包括多个元件,其中包括处理器元件 102、存储器元件104和事务管理模块106。但是,实施例并不局限于所示元件的类型、数量或 布置。
[0032]在各个实施例中,处理器元件102可使用能够实现任务级并行性的任何处理器或 逻辑装置来实现。在一些实施例中,处理器元件102可以是多核处理器。在另一个示例实施 例中,处理器元件102可以是设置成并行执行任务的多个处理器。存储器元件104可使用能 够存储数据的任何机器可读或计算机可读介质来实现,包括易失性和非易失性存储器。在 一些实施例中,存储器元件104可包括处理器元件102的高速缓存。在各个实施例中,作为补 充或替代,存储器元件104可包括其他类型的数据存储介质,例如只读存储器(R0M)、随机存 储存储器(RAM)、动态RAM(DRAM)、双倍数据速率DRAM(DDRAM)、同步DRAM(SDRAM)、静态RAM (SRAM)、可编程ROM(PROM)、可擦可编程ROM(EPROM)、电可擦可编程ROM(EEPR0M)、闪速存储 器、聚合物存储器(例如铁电聚合物存储器、奥式存储器、相变或铁电存储器、硅氧化氮化氧 化硅(S0N0S)存储器)、磁或光卡或者适合存储信息的任何其他类型的介质。存储器元件104 的部分或全部可包含在与处理器元件102相同的集成电路上,或者备选地,存储器元件104 的部分或全部可设置在处理器元件102的集成电路外部的集成电路或其他介质(例如硬盘 驱动器)上。
[0033]在一些实施例中,事务管理模块106可包括电路、逻辑、其他硬件和/或指令,以按 照事务存储器范例来管理事务的执行。在各个实施例中,事务管理模块106可引起硬件事务 和软件事务的执行。硬件事务可以是由处理器元件102中的逻辑装置电路直接执行的事务。 软件事务可以是由执行于处理器元件102的编程逻辑间接执行的事务。
[0034]如图1进一步所示,提供系统140,其包括设备100和收发器144。收发器144可包括 一个或多个无线电单元,其能够使用各种适当的无线通信技术来传送和接收信号。这类技 术可涉及跨一个或多个无线网络的通信。示范无线网络包括(但不限于)无线局域网 (WLAN)、无线个人区域网络(WPAN)、无线城域网(WMN)、蜂窝网络和卫星网络。
[0035] 在一些实施例中,处理器元件102可托管一个或多个线程108。各线程108可对应于 执行于处理器元件102的应用或程序,以及任何特定应用或程序可具有一个以上关联线程 108。应用或程序可使用特定线程108来请求一个或多个事务110的执行。事务110可引起各 种计算或其他任务的执行被处理器元件102来执行。
[0036]在各个实施例中,当线程108请求事务的执行时,事务管理模块106按照混合事务 存储器算法来管理事务。在一些实施例中,混合事务存储器算法可实现多个执行阶段或模 式,在此期间,尝试执行和提交事务。在各个实施例中,混合事务存储器算法可包括硬件阶 段和软件阶段。在一些实施例中,事务管理模块106可以仅在硬件阶段不成功之后将软件阶 段用于事务。
[0037]在一些实施例中,事务管理模块106可利用全局锁定112,以便实现软件事务和一 个或多个硬件事务的并发执行。在各个实施例中,事务管理模块106可在软件事务经历执行 时使全局锁定112被设置或者是有效的,以及在没有软件事务经历执行时使全局锁定112被 清除或者是无效的。在一些实施例中,全局锁定112可以是自旋锁定。在其他实施例中, Mellor-Crummey-Scott (MCS)锁定可用于全局锁定112,以便降低锁定高速缓存线上的争 用。在各个这类实施例中,"MCS_acquire"和"MCS_release"方法可用来利用硬件事务来加 速比较和交换(CAS)指令的执行。在一些实施例中,这个全局锁定进一步可使用如本文所述 的过滤机制来实现。
[0038]在一些实施例中,如果全局锁定112在事务结束时是无效的并且没有其他冲突在 事务执行期间发生,则事务管理模块106可使硬件事务进行提交。而如果全局锁定112在硬 件事务寻求提交时是有效的或者被占用,则事务管理模块116可通过参照与发起事务的线 程关联的布隆过滤器中存储的信息,来确定冲突是否存在于硬件事务与未决软件事务之 间。
[0039]在各个实施例中,事务管理模块106可包括执行逻辑114。在一些实施例中,执行逻 辑114可以是执行事务110的电路、其他硬件和/或指令。在各个实施例中,每当线程108请求 新事务的执行时,执行逻辑114可执行事务的一个或多个执行。在一些实施例中,执行逻辑 114最初可将事务作为硬件事务来执行一次或多次,并且随后在事务执行于硬件时无法提 交时将事务作为软件事务来执行。因此,在一些实施例中,软件事务模式可以是回退执行阶 段,在此期间,事务被指配最高优先级,以确保它将提交并且将取得前向进展。在一些实施 例中,执行逻辑114还可在硬件事务结束时检查全局锁定112。
[0040] 在一些实施例中,事务管理模块106可包括跟踪逻辑116。在各个实施例中,跟踪逻 辑116可包括管理全局锁定112、重试计数器118和重试阈值120的电路、其他硬件和/或指 令。在一些实施例中,跟踪逻辑116可基于来自执行逻辑114的指令来设置全局锁定112。例 如,当执行逻辑114开始软件阶段中的事务的执行时,执行逻辑114可指示跟踪逻辑116来设 置全局锁定112。在各个实施例中,重试计数器118可包括在硬件事务模式已经进行以执行 事务的执行总尝试次数。在一些实施例中,重试阈值120可包括尝试次数,在该尝试次数之 后,执行逻辑114应当从作为硬件事务的执行进入作为软件事务的执行。在各个实施例中, 当接收新事务时,跟踪逻辑116可将重试计数器118(对应于事务)重置为零。在一些实施例 中,在事务的每个不成功执行之后,跟踪逻辑116可使重试计数器118递增。
[0041]如图1进一步所示,存储器元件104包括每线程读集合存储装置126和每线程写集 合存储装置128。在一实施例中,存储装置可存储与事务期间所读取或写入的值有关的信 息。另外,各线程可具有与其关联的对应布隆过滤器134和136,其各与给定读集合存储装置 或写集合存储装置(和线程)关联。如本文将进一步描述,在事务的执行期间,每个读和写可 注解到对应布隆过滤器中,以指示在事务期间已经访问给定存储器地址。这个信息以后可 用来确定至少潜在冲突是否存在于并发执行事务之间。
[0042]在各个实施例中,事务管理模块106可包括最终完成逻辑128。在一些实施例中,最 终完成逻辑128可包括确定在事务由执行逻辑114来执行之后是提交还是中止事务的电路、 其他硬件和/或指令。在各个实施例中,最终完成逻辑128可在事务与其他事务冲突或潜在 冲突时确定任何特定事务将被中止。在一些实施例中,最终完成逻辑128可通过检查全局锁 定112来确定事务是否可能与并发软件事务潜在地冲突。在各个实施例中,如果全局锁定 112被设置并且事务是硬件事务,则最终完成逻辑128然后可引用交叉逻辑124来确定是否 至少潜在冲突存在于硬件事务与软件事务之间。为此,交叉逻辑124可访问发起事务的线程 的相应布隆过滤器134和136,以确定过滤器组是否交叉。如果是这样的话,则至少潜在冲突 存在,并且因此交叉逻辑124可向最终完成逻辑128报告有效交叉。如果过滤器组而是没有 指示交叉,则向最终完成逻辑128报告这个无效交叉。
[0043] 最终完成逻辑128又可在发现交叉时使硬件事务被中止,否则使硬件事务能够提 交(假定没有检测到其他冲突)。
[0044] 在一些实施例中,如果全局锁定112被设置并且事务是软件事务,则最终完成逻辑 128可提交事务,并且指示跟踪逻辑116释放全局锁定112。在各个实施例中,如果全局锁定 112没有设置,则最终完成逻辑128可提交硬件事务,并且指示跟踪逻辑116清除重试计数器 118,而无需与交叉逻辑124进行交互以确定过滤器组是否指示潜在冲突。
[0045] 在一些实施例中,事务管理模块106可包括中止处理程序逻辑130。在各个实施例 中,中止处理程序逻辑130可包括操控最终完成逻辑128所指示的事务的中止的电路、其他 硬件和/或指令。在一些实施例中,中止处理程序逻辑130可确定被中止事务的下一个尝试 执行是应当作为硬件事务还是作为软件事务发生。在各个实施例中,中止处理程序逻辑130 可确定事务是否因与其他事务的冲突或潜在冲突或者由于另一种原因而被中止。如果事务 由于另一种原因、例如因非法指令、容量上溢或者不规则存储器访问模式引起的高速缓存 关联性上溢而被中止,则中止处理程序逻辑130可确定执行逻辑114应当直接进入软件阶 段。如果事务因与其他事务的冲突或潜在冲突而被中止,则中止处理程序逻辑130可例如基 于重试次数来确定事务是应当在当前阶段还是在下一个阶段来重试。
[0046]在各个实施例中,为了确定被中止事务的下一个尝试执行应当作为硬件事务还是 软件事务来操控,中止处理程序逻辑130可将重试计数器118与重试阈值120进行比较。在一 些实施例中,如果重试计数器118小于重试阈值120,则中止处理程序逻辑130可指示执行逻 辑114将事务作为硬件事务来重试。否则中止处理程序逻辑130可指示执行逻辑114将事务 作为软件事务来重试。在各个实施例中,跟踪逻辑116可基于尝试事务的成功和/或不成功 提交数量自适应地确定重试阈值120的值。虽然在图1实施例中以这个较高等级示出,但是 要理解,本发明的范围并不局限于这个方面,以及混合事务存储器系统可采取许多不同形 式并且具有许多变化。
[0047] 现在参照图2,所示的是按照一实施例的事务的执行的高级流程图。如在图2中看 到,按照方法200,所有事务作为硬件事务通过硬件开始执行(框210)。在对每个读或写的执 行期间(框215),事务在对应线程的软件布隆过滤器中记录所读取或写入的各位置。在硬件 事务完成其临界区的执行之后(框220),它通过检查与软件事务(若存在的话)的冲突来尝 试提交。硬件事务首先检查全局锁定是否被占用(菱形框225)。如果这个锁定为空,则硬件 事务能够成功提交(假定如菱形框240所确定没有中止发生)。如果锁定被占用,则锁定的值 指示保持锁定的线程的索引或标识符,其因而执行软件事务。
[0048] 在这种情况下,硬件事务转到菱形框230,以便访问执行软件事务的线程的布隆过 滤器,以确定是否存在任何冲突。更具体来说,在菱形框230,交叉操作可在2个过滤器之间 执行,以确定2个布隆过滤器的任何条目或字段是否交叉(例如,两者均具有有效或逻辑一 值)。如果是这样的话,则硬件事务中止,并且控制转到菱形框270,以确定给定硬件事务的 重试次数是否已经达到可配置数N。注意,各种步骤可在中止事务时进行,包括逐出与线程 关联的缓冲器或其他存储装置中的任何已更新值。
[0049] 如果而是确定布隆过滤器之间不存在交叉,则控制转到菱形框240,以确定事务是 否例如因另一种原因而被中止。如果不是的话,则控制转到框250,其中提交事务。为了进行 提交,硬件事务可采用任何已更新值(其先前存储于仅在硬件事务执行期间是给定线程可 见的缓冲器中)来更新存储器。
[0050] 还要理解,虽然关于事务是否中止的确定在图2实施例的特定位置以菱形框240示 出,但是有可能在通过冲突检测逻辑(其可检测其他类型的冲突或者事务期间的中止的其 他原因)使硬件事务在其执行期间的任何时间中止。但是,为了便于说明,要理解,菱形框 240在图2所示的位置中表示。
[0051] 又参照图2,如果在菱形框270确定重试次数尚未达到阈值数N,则控制转到框280, 其中使重试次数递增,并且然后控制转回到框210以再次开始硬件事务。否则,如果重试次 数已经达到重试阈值N,则控制改为从菱形框270转到框260,其中执行可切换到软件事务模 式。更具体来说,在仅准许单个软件事务的这个实现中,事务因而可在软件事务模式执行以 完成,从而允许事务在框250提交。
[0052]布隆过滤器确保软件事务与硬件事务之间的冲突检测。由硬件事务存储器系统来 确保硬件事务之间的冲突检测和解决。在一实施例中,单个全局锁定确保在任何时间只有 一个软件事务执行,并且因此没有为软件事务提供附加冲突检测机制。
[0053]图3示出按照一实施例的硬件事务与软件事务之间的可能定时。在情况310,软件 事务首先更新变量X,并且硬件事务稍后将相同变量X更新成不同值。当硬件事务尝试提交 时,执行过滤器组交叉,其识别双重访问,因而产生冲突并且中止硬件事务。类似操作在情 况320发生。但是,在情况330和340,在硬件事务提交的点,软件线程已经提交并且释放单个 全局锁定。因此,当硬件线程检查这个锁定时,发现它被释放,并且因而事务能够成功提交。 [0054]在情况330和340,当硬件事务设法提交时,锁定为空,表示没有软件事务并发地执 行。即使存在重叠软件事务,它到这个点也已经提交,在硬件事务之前串行化。如果软件事 务已经执行在硬件事务之后串行化的任何冲突操作,则硬件事务在冲突时会被中止(由于 硬件冲突检测机制)。因此,当锁定为空时使硬件事务能够提交提供正确行为。
[0055] 如果当硬件事务设法提交时锁定而是被占用(如同情况310和320中一样),则并发 软件事务执行。提交硬件事务因软件事务所执行的可能将来冲突操作而在这个软件事务之 前串行化。但是,软件事务可能在硬件事务开始跟踪那些位置之前对一个或多个存储器位 置执行了冲突操作,并且因而在软件事务之前串行化硬件事务会不正确地表现。因此,实施 例使用布隆过滤器来确定这种情况。
[0056] 注意,软件布隆过滤器没有包含软件事务在将来将访问的所有位置,而只是事务 已经访问的位置。然而,将来访问将在所提交硬件事务之后正确地串行化。因此,如果布隆 过滤器没有交叉,则硬件事务能够在软件事务之前正确地串行化。如果布隆过滤器识别冲 突,则冲突操作首先在软件事务中并且然后在硬件事务中发生,否则硬件事务已经中止。在 这种情况下,硬件事务无法在软件事务之前串行化,并且将被中止。因此,实施例正确地识 别这些冲突,并且中止硬件事务。注意,在一实施例中,有可能使布隆过滤器不正确地报告 冲突(作为难区分的误报),因此硬件事务也将在这两种情况下中止。但是,布隆过滤器没有 引起漏报,并且因此识别和防止所有冲突。
[0057]在一实施例中,有效布隆过滤器实现允许在0(1)时间的插入和组交叉,从而使开 销为最小。此外,硬件事务只在提交之前仅读取全局锁定并且读取软件布隆过滤器,从而当 硬件事务可能因软件事务修改这些位置而被中止时减小窗口。在一实施例中,读取锁定和 布隆过滤器可以仅对事务的读集合添加两个附加高速缓存线。在一些实施例中,这能够优 化成使得布隆过滤器的位用来指示锁定是否被占用并且布隆过滤器的其余部分用作布隆 过滤器。在这种实现中,锁定位置能够服务于两种目的,从而将硬件事务的读集合大小减小 到仅一个附加位置。事务自己的布隆过滤器对写集合添加附加高速缓存线,但是在一实现 中,这可能低至仅一个高速缓存线,这取决于布隆过滤器大小。
[0058] 使用一实施例,访问其本身的分离存储器访问的许多小硬件事务和并发执行大软 件事务能够进行提交。作为一个这种示例,考虑表示开放寻址哈希表的阵列。线程能够执行 这个哈希表中的lookup (X)操作和insert (X)操作。一旦取得占据的阈值,线程决定通过分 配新阵列并且将元素从旧阵列重新哈希到新阵列来使哈希表的大小翻倍。查找和插入操作 是短事务,并且能够在大多数时间通过硬件成功进行。重新哈希可改为作为软件事务来执 行(以及执行重新哈希的线程获取单个全局锁定)。在这种情况下,通过软件事务与并发硬 件事务之间的准确冲突检测,作为硬件事务所执行的查找操作能够在对新阵列的重新哈希 发生的同时使用来自旧阵列的数据进行提交。此外,作为硬件事务所执行的对旧阵列结束 (即,在尚未重新哈希的部分中)进行的插入操作也能够在重新哈希期间提交。因此,实施例 通过允许小硬件事务与长执行软件事务并发地提交来改进吞吐量。
[0059] 虽然如上所述提供布隆过滤器冲突检测技术改进并行性,但是在给定上述实施例 中的单个全局锁定的使用的情况下,仍然能够存在低效。在其他实施例中,可提供一种事务 存储器系统,其使多个硬件事务和多个软件事务能够并行地执行和提交。一般来说,基于高 速缓存的硬件事务存储器系统可用于硬件组件,以及基于失效的软件事务存储器系统可用 于软件组件。这些实施例提供一种混合事务存储器系统,其允许多个硬件事务与多个软件 事务并发地执行,同时仍然保证前向进展。
[0060] 现在参照图4,所示的是按照本发明的一实施例的混合事务存储器系统的框图。如 图4所示,HTM系统400提供多个硬件事务模式和多个软件事务模式。在图4所示的实现中,事 务在第一硬件事务模式410(本文中称作轻硬件(LiteHW)事务模式)开始。如果上溢或者未 支持指令发生,则事务立即升级到另一种类型的事务模式。如果事务而是由于另一种原因 (例如因冲突)而中止,则事务在被升级到第二硬件事务模式420(本文中称作布隆过滤器硬 件(BFHff)模式)之前重试多次。类似重试发生,并且在事务没有提交时将其更新到第一软件 事务模式430 (本文中称作推测软件(SpecSW)模式)。再次在这个模式中,事务可在被升级到 第二软件事务模式440(本文中称作不可撤销软件(IrrevocSW)模式)之前重试多次。要理 解,虽然在图4中采用特定模式和交互来示出,但是实施例并不局限于这个方面。
[0061 ]如果大多数事务较短、访问能够符合TM支持高速缓存空间的存储器并且没有包含 未支持指令,则它们能够直接通过硬件成功进行,而无需与软件事务进行同步。最轻量类型 的事务是第一硬件事务模式(LiteHff)。这个事务类型在没有读和写的任何注解的情况下执 行,并且在它设法提交时没有软件事务执行时能够成功提交。这种类型的事务是简单和快 速的,但是它允许与软件事务的极少并发性。
[0062]第二硬件事务模式BFHW使用软件布隆过滤器来记录硬件事务所读取和写入的位 置,以实现与并发执行的软件事务的冲突的检测。这种事务类型与LiteHff事务相比增加额 外开销,但是能够甚至在并发执行软件事务存在的情况下也能够提交。硬件事务较快,但是 在尽力HTM中因未支持指令或上溢而会出故障,并且因而提供软件回退。
[0063]第一软件事务模式SpecSW又执行推测软件事务,其中事务在与其他软件和硬件事 务的冲突检测的布隆过滤器中记录所读取和写入的位置,并且将所有写存储在哈希表中供 提交阶段期间的延缓更新。失效在提交后发生,以中止进行中冲突事务,并且每事务锁定用 来确保不透明性。在这个第一软件事务模式中,验证每个读,以防止僵事务(将中止的事务) 达到不一致状态。
[0064]最后,第二软件事务模式IrrevocSW在原位执行所有更新(直接对存储器),并且无 法被中止。由于这个质量,只有一个IrrevocSW事务能够在任何给定时间执行。但是,多个 SpecSW和BFHff事务能够与IrrevocSW事务并发地执行。
[0065]多个软件事务之间的冲突检测使用布隆过滤器来实现,如上所述。软件与硬件事 务之间的冲突检测也使用布隆过滤器,但是,使用没有逸出动作的尽力HTM-般导致在冲突 检测时中止硬件事务。这种行为归因于硬件事务的强隔离:由硬件来跟踪的任何存储器位 置将引起冲突,由此当软件事务执行对那个位置的冲突访问时中止硬件事务。此外,硬件更 新没有变成是其他线程可见的,直到硬件事务提交。
[0066]实施例将硬件与软件事务之间的冲突检测推迟到硬件事务已经提交之后。硬件事 务则执行提交后阶段,其中它使所有进行中冲突软件事务失效。因为硬件事务已经提交,所 以与其他线程的共享布隆过滤器信息无法使它中止。
[0067] 无论是软件还是硬件的各事务经过多个阶段。这些阶段的每个中的行为取决于事 务的类型。第一阶段是开始事务的开始阶段。硬件事务调用开始硬件事务指令,而软件事务 记录与起始地址有关的信息,并且经由指示至少一个软件事务的存在的指示符、例如标志 (例如,sw_exists标志)来通知其他线程关于其存在。
[0068] 在执行阶段期间,注解读和写操作,并且根据事务执行的类型来判定行为。所有事 务类型在布隆过滤器中记录被访问位置,除了 LiteHff事务之外。
[0069] 在中止阶段期间,硬件中止由硬件自动地应对。对于软件事务,软件清除事务执行 期间所记录的信息,并且从开始阶段期间所存储的地址重新开始。
[0070] 在提交阶段期间,执行冲突检测,以及如果事务能够提交,则进行存储器更新。其 实现取决于事务类型。
[0071] 在提交后阶段期间,事务可执行失效。注意,这个阶段在事务已经提交并且采用其 写集合位置来更新存储器。这个阶段确保与刚提交的事务冲突的所有进行中软件事务将被 中止。
[0072] 如以上概述,第一硬件模式LiteHW是最简单和最快的类型,因为它引入可忽略附 加软件开销,并且完全通过硬件来执行。LiteHff事务只能在软件事务不存在的情况下提交。 图5是按照一实施例的这种事务的执行的流程图。方法500例如经由用户级硬件事务开始指 令来开始硬件事务的执行(框510)。随后,执行事务主体(框520)。执行这个临界区,而没有 记录读或写的任一个。当事务尝试提交(在框530)时,它检查是否有任何软件事务当前正执 行(例如,通过检查sw_exists标志(如果软件事务正执行,则sw_exists != 0))(菱形框 540)。如果存在并发执行的软件事务,则控制转到菱形框550,以确定是否已经达到重试阈 值(M)。如果不是的话,则控制转到框555,并且使重试计数递增。控制随后转回到上述框 510。如果事务而是重试了阈值次数,则控制转到框558,其中事务切换到第二硬件事务模式 BFHff模式。
[0073]如果在菱形框540确定没有软件事务执行(sw_exi Sts=O ),则事务能够成功提交, 假定事务在菱形框560尚未中止。因为LiteHff是硬件事务,所以其提交可瞬时执行(框565)。 如果事务在由硬件冲突检测机制的执行期间的任何点被中止,则中止处理程序检查硬件所 设置的中止状态,以确定是否在相同模式重试这个事务(最多M次),或者切换到SpecSW(框 570)(例如,如果中止通过上溢所引起)或者切换到IrrevocSW(框580)(例如,如果事务通过 未支持指令、例如输入/输出指令所引起)。
[0074]图6示出LiteHW事务501的更多细节。在开始阶段期间,事务执行开始硬件事务指 令(例如txbegin指令)。在执行期间,OnRead和OnWrite处理程序(其是采用访问来更新布隆 过滤器的处理程序、例如基于资料库的处理程序)为空。OnAbort处理程序使重试次数递增, 并且基于重试次数和中止原因来判定是将事务作为LiteHW事务来重试还是切换到不同模 式。最后,也通过硬件所执行的提交阶段检查SWjXiStS标志,并且调用硬件事务结束指令 (例如txend指令)。这种事务类型没有提交后阶段。
[0075] 图7是按照一实施例的BFHW事务的执行的流程图。方法600例如经由用户级硬件事 务开始指令来开始硬件事务的执行(框610)。随后,执行事务主体(框620)。在其执行期间, 事务在其读和写布隆过滤器中记录所读取或写入的存储器位置。当事务设法提交(菱形框 630)时,它检查提交锁定是否被占用(菱形框640)。如果锁定为空,并且假定没有中止已经 发生(如在菱形框660所确定),则事务获取其自己的硬件事务锁定(在框670)并且提交(框 675) 〇
[0076] 如果事务锁定被占用,则软件事务当前正提交。在一实施例中,在这种情况下要做 的最简单事情是中止,因为硬件事务可能具有与提交软件事务的冲突存储器更新。这种情 况在以下图8中更详细示出。
[0077] 但是,如果硬件事务没有与提交软件事务的任何冲突,则硬件事务可能在软件事 务正提交的同时进行提交。这能够使用布隆过滤器比较来确定。这个硬件事务模式的优化 行为是在发现提交锁定被占用时检查提交软件事务的布隆过滤器。如果布隆过滤器指示冲 突,则硬件事务中止,否则它能够提交(在它如上所述获取其自己的事务锁定之后)。这种情 况在图9中示出。
[0078]与Li teHW相似,OnAbort处理程序确定是否上升到多个软件模式其中之一(例如在 框658和690)或者达到阈值数的重试次数是否已经发生(在菱形框650)。否则,重试次数在 框655递增,并且事务在框610再次开始。
[0079] 被写入事务存储器完全通过硬件来提交。首先,事务通过检查提交锁定和软件布 隆过滤器(提交锁定是否被占用)来确定它是否能够提交(在菱形框650)。如果不存在冲突 (锁定为空或者硬件交易的布隆过滤器没有与软件事务的布隆过滤器交叉),则硬件事务获 取其自己的事务锁定(在框675)(在图8和图9中示为tlock)。这个锁定仅通过拥有它的硬件 事务来获取,因此它在那个事务设法获取它时始终为空。但是,它用来防止与开始其提交阶 段的软件事务的竞争,如以下更详细描述。
[0080] 注意,如果事务被中止,则事务的锁定自动释放,因为它是其推测写集合的部分。 此外,写到锁定的值仅当硬件事务对存储器提交其变更时才变成是其他线程可见的。如果 其他线程在锁定被占用之后但是在变更提交给存储器之前检查这个位置,则硬件事务被中 止,从而确保竞争不是可能的。
[0081] 仍然参照图7,在框675的提交之后,这个第二硬件事务模式的提交后阶段通过软 件来执行,并且在硬件事务对存储器提交其变更之后发生。如看到,提交后操作包括使冲突 软件事务失效(框680)。注意,在这个点,硬件事务已经被提交,但是它确保与其冲突的所有 软件事务将被中止。这通过针对进行中软件事务的布隆过滤器检查硬件事务的布隆过滤器 来取得。如果检测到冲突,则软件事务被中止。在完成失效过程之后,硬件事务重置其锁定。
[0082] 图8示出包括开始阶段、执行阶段、提交阶段和提交后阶段的基于基本布隆过滤器 的硬件事务601。如看到,在执行期间,将读和写添加到对应读和写布隆过滤器。但是要理 解,在其他实施例中,单个布隆过滤器可用于读和写集合。随后确定提交锁定是否被占用, 以及如果是这样的话,则事务在这个基本实现中中止。否则,事务锁定被占用,并且事务写 入被提交。然后在提交后阶段中,执行布隆过滤器交叉,以中止所有冲突软件事务,并且此 后释放事务锁定。
[0083] 图9示出包括开始阶段、执行阶段、提交阶段和提交后阶段的基于优化布隆过滤器 的硬件事务602。在这种情况下,如果提交锁定被占用,则冲突可使用布隆过滤器交叉来检 测,以确定冲突是否存在,以及如果不是的话,则硬件线程可提交,而如果冲突存在,则事务 中止。否则,操作与图8类似地发生。
[0084] 图10是按照一实施例的推测软件事务的执行的流程图。方法700开始软件事务的 执行(框710)。随后,执行事务主体(框720)。如看到,在执行期间,将读和写位置记录到布隆 过滤器。在提交时(框730),事务获取提交锁定(框740),并且咨询争用管理器(在框760)(其 可通过硬件、软件、固件或其他逻辑或者其组合来实现),以确定它是提交还是中止(使得冲 突进行中软件事务能够继续执行)。如果争用管理器决定中止事务,则事务释放提交锁定, 并且作为SpecSW事务进行重试,这取决于在菱形框790所确定的重试次数。如果低于这个阈 值,则重试计数器在框792递增,并且事务在推测软件事务模式重新执行(在框710)。如果高 于阈值,则事务在框795切换到不可撤销软件事务模式。
[0085]否则,如果事务能够提交,则它获取不可撤销锁定(在框765),对存储器提交其变 更(在框770),使进行中冲突软件事务失效(在框775),并且释放锁定(在框780)。
[0086] SpecSW事务执行的其他细节在图11中示出。如看到,推测软件事务701通过软件执 行所有阶段。在图11的实施例中,在主要执行期间,读取被验证并且添加到读布隆过滤器, 而写被添加到写布隆过滤器。注意,延缓更新可通过将任何已更新值写到哈希表或其他暂 时存储装置来执行。在提交阶段期间,假定允许事务进行提交,它得到不可撤销锁定并且更 新存储器。否则,它释放锁定,并且重新开始事务。然后在提交后阶段,事务在释放锁定之前 执行失效,从而使任何冲突软件事务失效。
[0087] 最后要注意,SpecSW事务甚至当BFHW正提交时也提供正确执行。如果SpecSW事务 在BFHW准备好提交时已经开始提交过程,则BFHW事务将观测到提交锁定被占用,并且将检 查针对软件布隆过滤器对其布隆过滤器检查冲突。如果不存在冲突,则硬件事务能够提交, 否则BFHff将中止。
[0088]但是,如果BFHW在SpecSW事务开始提交阶段之前检查提交锁定,则两种状况之一 能够发生:提交锁定在BFHff硬件事务提交之前改变(其中止硬件事务,从而消除任何潜在冲 突);或者提交锁定在BFHW硬件事务提交之后改变。推测软件事务不检查与硬件事务的冲 突,并且因而它可能遗漏与新提交硬件事务的冲突,并且可能开始对存储器提交其变更。为 了避免这种状况,所有SpecSW事务在获取提交锁定之后检查所有硬件事务的锁定,并且等 待到它们为空。如果SpecSW事务在事务锁定为空时仍然有效,则它没有与任何所提交硬件 事务的冲突。
[0089] 现在参照图12,所示的是不可撤销软件事务IrrevocSW的执行的流程图。如在图12 中看到,方法800开始于事务的开始阶段(框810)。随后,事务获取不可撤销锁定并且提交锁 定(框820)。然后,主要事务主体可在框830执行。注意,对于不可撤销软件事务,所有更新在 原位执行(直接对存储器),因而事务在开始执行时立即获取不可撤销并且提交锁定,以确 保串行性。随后,事务进行提交(框840)。此后,例如基于布隆过滤器组交叉来使冲突软件事 务失效(框850)。最后,释放两种锁定(框860)。
[0090] 图13示出按照一实施例的不可撤销软件事务801的其他细节。注意,在执行开始 时,获取两种锁定,并且设置软件标志。在主体中,虽然使用直接更新,但是将读和写添加到 对应布隆过滤器,以实现与冲突软件事务的以后失效。在一实施例中,不可撤销事务无法被 中止,并且因而提交阶段基本上是没有操作(Ν0Ρ)。提交后阶段与推测软件事务的提交后阶 段相似:当前事务已经提交,并且因而它使进行中冲突软件事务失效。
[0091] 在一实施例中,争用管理器由推测软件事务用来确定它们在到达其提交阶段时是 否能够提交。争用管理器考虑在提交事务被允许提交时会被中止的所有进行中事务,并且 基于各种因素来判定允许要中止的哪一个事务或哪些事务前进。在一实施例中,这个判定 可基于优先级、提交和冲突事务的读和写集合大小以及各线程的事务进展(例如至此的提 交数量)以及其他因素。
[0092] 在提交之后执行的失效确保新事务能够在提交阶段期间开始,而没有被失效过程 遗漏。如果事务被失效过程遗漏(因为它过迟开始),则它在提交事务的失效过程之后开始。 因此,它在提交事务提交其与之后开始,并且因而新开始事务的所有读在提交事务之后串 行化并且因而是一致的。下表1是按照一实施例的失效过程的伪代码表示。
[0093] 表 1 If _ 義 eis 錄.1. irrevoc !ock ^ im tnrid; -.W WV .. MEyBARSTLD(i; for {mr - 0; thr < MAX..THREADS.: { if {ixns|thr].stalus ACTIVE) | if |bf.Jnter'sectsieixnsfthn.rbloo^.( etxnsi.jm....ihnd|Avb!oom)'} { ^rirBvocjDOk -- CASmt〇〇^m^yPTY; 'I y'· 对于不是执行读的事务的写集合的部分的每一个读执行验证。如果读是写集合的部 分,则从存储事务的已更新值的哈希表返回值,并且没有验证需要被执行。
[0094] 在一实施例中,验证可执行如下。首先,线程将新读位置插入其布隆过滤器,并且 然后它读取该位置。该顺序确保潜在冲突将不会被提交事务的失效过程遗漏。在读取读位 置的值之后,被返回仍然不是安全的,因为其他事务可能处于其提交阶段中间、从而更新存 储器位置。如果当前读针对刚更新的位置,则返回这个读可能生成不正确程序行为,因为当 前事务的所有其他读来自提交事务更新存储器之前。
[0095] 为了避免这种状况,可对所有先前未写入的读执行验证码。这个代码检查不可撤 销锁定是否被占用,以及如果是的话,则它读取软件事务的布隆过滤器(通过不可撤销锁定 的标识符所指示),以确定是否存在任何冲突。如果锁定在同时发生变化,则冲突能够被验 证码忽略。但是在验证结束时,事务检查是否由其他软件事务使它失效。如果锁定在同时被 释放,则表示提交事务必须完成了失效。如果验证通过并且没有由提交事务使事务失效,则 读是安全的。
[0096] 现在参照表2,所示的是按照一实施例的验证过程的伪代码。
[0097] 表 2 负吝txnslJmJhrk^rbloomi Saddf); MEMBARSTLOO; vai:~ (%|idciii|:; local.jrrevoc.Jock - irrevoc.jock; if |ei 电'_f otherbf ~ txnspocal..jrrevc€ jock].vvt>lD〇m; if Oocal sirevoc lock srrevoc lock)! if(bf..jnt.ersecis(&o出erb[ ^xns[_Jn\…thridl、rb!oom>){ tx.ns[_Jrrs Jhrid].status - iNVAUD; }: if (ixns[ im J:hrid].staS:us ~~ INVALID) { restarts: Jm Jhrid); 不可撤销事务在开始执行时获取提交锁定和不可撤销锁定。推测事务首先获取提交锁 定,并且咨询争用管理器关于它是否能够提交。如果争用管理器允许事务进行提交,则就在 将其更新写到存储器之前获取不可撤销锁定。
[0098] 提交事务可从其提交阶段开始来获取不可撤销锁定,从而使提交锁定是不必要 的。但是,推测事务将其验证码基于所获取的不可撤销锁定。如果提交锁定不存在并且不可 撤销锁定在提交阶段开始时获取,则在咨询争用管理器之前,下列状况可能发生。考虑执行 读并且执行验证码的SpecSW事务,注意其读与提交软件事务冲突。因此,它决定重新开始。 提交事务咨询争用管理器,但是不允许它进行提交(例如因具有高优先级的进行中事务)。 因此,提交事务也中止。但是,其他事务已经终止。此外,竞争可能发生,使得争用管理器将 其中止判定基于刚决定在验证期间中止的事务,因此两个事务相互中止,而没有前进。
[0099] 提交锁定可用来避免这种状况。因此,提交事务要求提交锁定,其仅在被给予提交 准许之后升级到不可撤销锁定。验证码仅因与保持不可撤销锁定的其他事务的冲突而中止 事务。因此,事务因与肯定提交的事务的冲突而仅被验证中止。
[0100] 硬件用来确保相对并发硬件事务的正确性。硬件事务极大地隔离,因此对存储器 进行的变更仅当事务提交时才变成是其他线程原子可见的。此外,冲突检测通过硬件来实 现,因此事务的冲突事务将被中止。因此,不存在其他软件组件来确保多个LiteHW事务与多 个BFHff事务之间的正确交互。
[0101] 并发软件事务之间的冲突检测使用失效方法来确保。所有提交事务检查与其他进 行中软件事务的冲突,并且在存在冲突时中止它们。没有软件事务能够在失效过程期间进 行提交,因为提交事务保持提交锁定。不可撤销事务在它变成有效时立即获取提交锁定,并 且因此没有其他软件事务能够在其执行期间变为不可撤销或提交。当不可撤销事务提交 时,它还使进行中冲突事务失效,从而确保没有违反可串行化正确性。
[0102] 关于硬件-软件正确性,在一实施例中,LiteHW事务能够与软件事务同时执行,但 是它们在软件事务当前执行时无法提交。这是因为LiteHW事务没有保持被访问存储器位置 的记录,因此LiteHff事务与软件事务之间的冲突检测无法执行。
[0103] 相比之下,BFHff事务跟踪它们访问的存储器位置,因此它们能够执行冲突检测。此 外,BFHW事务甚至当软件事务正执行时也能够进行提交。如果提交软件事务具有与BFHW事 务的冲突,则后者将由硬件自动中止。如果提交BFHff事务具有与进行中软件事务的冲突,则 软件事务在BFHW提交后阶段(失效阶段)期间被中止。此外,在硬件事务结束时将硬件事务 的布隆过滤器与软件事务的布隆过滤器进行比较是充分的。这样,能够避免硬件事务的每 一个读和写的冲突检测。
[0104] 实施例还实现存储器的一致性。对于并发硬件事务,不透明性由硬件自动保持,因 为更新没有变成是可见的,直到硬件事务进行提交,从而确保一致性。
[0105] 通过在不可撤销事务使用直接更新正执行的同时或者推测事务正执行回写的同 时读取存储器位置,硬件事务可进入不一致状态。但是,在硬件事务中发生的故障和循环将 使事务中止和重新开始,而没有对其他线程的显著影响。
[0106] 在软件事务之间使用每个新读的验证码来确保不透明性,如上所述,使得软件事 务无法因其他软件事务所引起的更新而进入不一致状态。
[0107] 通过读取刚提交的硬件事务所修改的存储器位置,软件事务可进入不一致状态。 在一实施例中,不允许软件事务进行提交,并且通过硬件事务的提交后阶段使其失效。但 是,由于具有读不一致数据,软件事务在注意到使其失效之前可能进入非法状态。
[0108] 为了防止这种状况,一实施例可对SpecSW事务提供软件沙箱。备选地,软件事务的 不透明性能够使用硬件提交后计数器来提供。在这种情况下,计数器对于在BFHW模式刚提 交并且当前在提交后阶段中的硬件事务的数量进行计数。BFHff事务在提交硬件事务之前使 用存储操作使这个计数器递增。如果违反原子性,则中止硬件事务,从而没有留下变化痕 迹。在提交后阶段完成之后,BFHff事务例如使用取和置换指令使提交后计数器递减。使用这 个计数器,能够在BFHW事务存在的情况下对SpecSW事务实现不透明性。SpecSW事务又可读 取这个计数器,并且在对其读集合添加新值之前等待到它达到零。这确保SpecSW事务所读 取的所有新值在硬件事务的提交后阶段之外来读取,并且因而是一致的(否则SpecSW事务 在BFHW事务的提交后阶段期间标记为INVALID)。此外,BFHff事务可使用这个提交后计数器 来确保SpecSW事务的一致性,并且确保在提交阶段期间与SpecSW事务的互斥(在一实施例 中使每事务锁定未使用)。
[0109] 注意,提交锁定串行化软件事务的提交阶段和提交后阶段。但是,硬件事务没有相 对并发提交软件和硬件事务来串行化;因此它们能够并发地提交和执行失效,从而使系统 更为可缩放和实用。
[0110] 现在参照图14,所示的是按照另一个实施例的设备的框图。如图14所示,设备100' 包括与以上针对图1所述的设备100类似的电路、组件和逻辑。实际上,在许多系统实现中, 混合事务存储器系统可执行于相同硬件,无论它是按照实现单个全局锁定的一实施例(如 以上在图2中所述)还是实现多个锁定和多个软件模式事务模式的系统(例如,如图4所述)。
[0111]为了便于论述,在图14的实施例中与图1相同的组件、电路和逻辑将不作论述。本 论述而是将集中于实现具有多个硬件事务模式和多个软件事务模式的混合事务存储器事 务的执行的设备100'的差别。如看到,代替单个全局锁定,提供提交锁定112和不可撤销锁 定113,以使不同软件事务能够在事务中根据事务模式在不同时间获取这些锁定(当然要理 解,在其他实施例中,附加或不同锁定可存在)。另外,可提供多个重试计数器118,其中各重 试计数器与给定事务模式的重试计数关联。以及类似地,还提供多个重试阈值120。
[0112]仍然参照图14,事务管理模块106还包括失效逻辑125,其配置成如上所述执行提 交后失效。一般来说,设备100'和系统140'的其余部分与图1中相同。注意,给定在例如结合 图4-13所述的混合事务存储器系统中执行的附加功能性和操作,在各种逻辑组件的实现中 可存在一些差别。此外要理解,虽然在图14以这个较高等级示出,但是许多变化和备选方案 是可能的。
[0113]以下示例涉及其他实施例。
[0114]在示例1中,一种设备包括:处理器;执行逻辑,在事务存储器系统中实现第一软件 事务模式的至少一个第一软件事务和第二软件事务模式的第二软件事务以及第一硬件事 务模式的至少一个硬件事务和第二硬件事务模式的至少一个第二硬件事务的并发执行;跟 踪逻辑,激活标志,以指示至少一个软件事务正经历在第一软件事务模式或第二软件事务 模式的执行;交叉逻辑,确定在第二硬件事务模式的第一硬件事务的结束时,第二硬件事务 模式的第一硬件事务的过滤器组是否与经历执行的至少一个软件事务的过滤器组冲突;以 及最终完成逻辑,在没有冲突时提交第一硬件事务,而在存在冲突时中止第一硬件事务。注 意,在一些实现中,执行逻辑、跟踪逻辑、交叉逻辑和最终完成逻辑中的一个或多个可在处 理器中实现。还要注意,上述处理器能够使用各种部件来实现。在一示例中,处理器包括结 合在用户设备触摸使能装置中的芯片上系统(SoC)。在另一个示例中,一种系统包括显示器 和存储器,并且包括本文中的示例的一个或多个的处理器。
[0115] 在示例2中,在第二硬件事务模式,第一硬件事务可选地更新第一硬件事务的各存 储器访问的第一硬件事务的过滤器组。
[0116] 在示例3中,在第一软件事务模式,第一软件事务在第一软件事务结束时可选地得 到第一锁定和第二锁定,并且采用哈希表中存储的写数据来更新事务存储器系统的事务存 储器。
[0117] 在示例4中,在第一软件事务模式,在第一软件事务的提交之后,第一软件事务可 选地使第一软件事务模式的其他软件事务失效。
[0118] 在示例5中,在第二硬件事模式,第二硬件事务可选地在第二硬件事务的提交之前 得到提交锁定和事务锁定。
[0119] 在示例6中,其中如果交叉在第一软件事务的过滤器组与其他软件事务的过滤器 组之间发生,则示例4的第一软件事务可选地使其他软件事务失效。
[0120] 在示例7中,在示例3的第一软件事务模式,第一软件事务在执行期间可选地验证 读数据。
[0121] 在示例8中,在上述示例的任一个的第二软件事务模式:在第二软件事务的开始, 第二软件事务得到第一锁定和第二锁定;以及在第二软件事务模式的第二软件事务的执行 期间,第二软件事务直接更新事务存储器系统的事务存储器。
[0122] 在示例9中,一种方法包括:由事务存储器系统中的处理器并发地执行第一线程的 软件事务和第二线程的硬件事务;激活全局锁定,以指示软件事务的执行;以及在硬件事务 结束时,确定全局锁定的状态,以及如果全局锁定是有效的,则确定第一线程的过滤器组是 否与第二线程的过滤器组交叉,而如果不是的话,则提交硬件事务。
[0123] 在示例10中,示例9的方法可选地还包括提交软件事务,并且在软件事务结束时停 用全局锁定。
[0124] 在示例11中,示例9或10的方法可选地还包括在全局锁定在硬件事务结束时是无 效的时候提交硬件事务,而没有确定过滤器组是否交叉。
[0125] 在示例12中,示例9-1其中之一的方法可选地还包括:由硬件事务将对事务存储器 系统的事务存储器的访问的地址插入第一线程的过滤器组中;以及基于将访问的地址与一 个或多个哈希值进行哈希来更新第一线程的过滤器组的一个或多个字段。
[0126] 在示例13中,示例9-12其中之一的方法可选地还包括在第一线程的写集合中存储 第一线程的过滤器组,过滤器组包括布隆过滤器。
[0127] 在示例14中,示例13的方法可选地还包括将全局锁定添加到第一线程的过滤器 组,并且基于确定过滤器组是否交叉来确定全局锁定的状态。
[0128] 在示例15中,示例9-14中的任一个的方法可选地还包括:在软件事务中并发地将 哈希表从第一大小重新哈希到第二大小;以及在硬件事务中访问哈希表,并且使硬件事务 能够在并发重新哈希期间提交。
[0129] 在另一个示例中,包括指令的计算机可读介质执行上述示例的任一个的方法。在 又一个示例中,一种设备包括用于执行上述示例的任一个的方法的部件。
[0130] 在示例16中,至少一个计算机可读介质包括指令,其在执行时使系统能够:在事务 存储器系统的第二硬件事务模式执行第二硬件事务;在第二硬件事务结束时提交第二硬件 事务;以及在第二硬件事务的提交之后,如果冲突存在于第二硬件事务与至少一个软件事 务之间,则使与第二硬件事务并发执行的至少一个软件事务失效。
[0131] 在示例17中,示例16的至少一个计算机可读介质可选地还包括指令,其在执行时 使系统在第二硬件事务的提交之前确定是否获取了提交锁定,以及如果是的话,则确定冲 突是否存在于第二硬件事务与获取了提交锁定的第一软件事务之间。
[0132] 在示例18中,示例17的至少一个计算机可读介质可选地还包括指令,其在执行时 使系统能够在冲突存在于第二硬件事务与第一软件事务之间时中止第二硬件事务,其中如 果第二硬件事务的过滤器组与第一软件事务的过滤器组交叉,则确定冲突存在。
[0133] 在示例19中,示例17的至少一个计算机可读介质可选地还包括指令,其在执行时 使系统能够在第一软件事务获取提交锁定之后确定是否由一个或多个硬件事务获取了一 个或多个事务锁定,以及如果是的话,则将第一软件事务的提交延迟到一个或多个事务锁 定被释放。
[0134] 在示例20中,示例17的至少一个计算机可读介质可选地还包括指令,其在执行时 使系统能够:在事务存储器系统的第一硬件事务模式执行第一硬件事务;在第一硬件事务 结束时确定至少一个软件事务是否并发地执行;以及如果是的话,则中止第一硬件事务,否 则提交第一硬件事务。
[0135] 在示例21中,示例17的至少一个计算机可读介质可选地还包括指令,其在执行时 使系统能够:验证由第一软件事务在第一软件事务的执行期间对事务存储器系统的事务存 储器的读操作;以及如果读操作被验证,则将读操作的位置添加到第一软件事务的过滤器 组。
[0136] 在示例22中,示例17的至少一个计算机可读介质可选地还包括指令,其在执行时 使系统能够:在第二软件事务模式执行第二软件事务,包括在第二软件事务的执行开始时 获取第一锁定和提交锁定,并且在第二软件事务执行期间直接更新一个或多个存储器位 置;以及在第二软件事务结束时,提交第二软件事务,使第一软件事务模式的一个或多个并 发执行软件事务失效,并且此后释放第一锁定和提交锁定。
[0137] 在示例23中,一种系统包括:处理器,包括混合事务存储器逻辑,以便并发地执行 至少一个硬件事务和至少一个软件事务。混合事务存储器逻辑可在第一硬件事务模式执行 第一事务,直到提交第一事务或者第一事务在第一硬件事务模式重试第一阈值次数,并且 此后如果没有提交第一事务,则在第一软件事务模式执行第一事务。混合事务存储器逻辑 可包括交叉逻辑,以确定关联在第一硬件模式所执行的第一事务的过滤器组是否与关联在 第一软件事务模式所执行的第二事务的过滤器组冲突,以及响应冲突,混合事务存储器逻 辑防止在第一硬件事务模式的第一事务进行提交。该系统还包括耦合到处理器的事务存储 器。
[0138] 在示例24中,混合事务存储器逻辑可选地可在第一软件事务模式执行第一事务, 直到提交第一事务或者第一事务在第一软件事务模式重试第二阈值次数,以及在第二阈值 次数之后,在第二软件事务模式执行第一事务,其中第一事务直接更新事务存储器。
[0139] 在示例25中,混合事务存储器逻辑可选地可在第一硬件事务模式的执行之前在第 二硬件事务模式执行第一事务,其中在第一硬件事务模式执行第一事务之前,混合事务存 储器逻辑在第二硬件事务模式将第一事务执行第三阈值次数。
[0140]在示例26中,混合事务存储器逻辑可选地可使第一事务在第一软件事务模式的执 行期间验证读数据,基于与读数据关联的地址来更新与在第一软件事务模式所执行的第一 事务关联的过滤器组,并且采用写数据来更新哈希表。
[0141] 在示例27中,示例26的混合事务存储器逻辑可选地可使:在第二软件事务模式的 第二事务在第二事务开始时得到第一锁定和第二锁定,并且此后在第二事务的执行期间直 接更新事务存储器;以及在第一软件事务模式的第一事务在第一事务的提交时得到第一锁 定和第二锁定,并且此后采用来自哈希表的写数据来更新事务存储器,并且使在第一软件 事务模式并发地执行的至少一个其他软件事务失效。
[0142] 在示例28中,一种用于执行事务存储器事务的系统包括:用于在事务存储器系统 的第二硬件事务模式执行第二硬件事务的部件;用于在第二硬件事务结束时提交第二硬件 事务的部件;以及用于在第二硬件事务的提交之后、在冲突存在于第二硬件事务与至少一 个软件事务之间时使与第二硬件事务并发执行的至少一个软件事务失效的部件。
[0143] 在示例29中,示例28的系统可选地还包括用于执行下列步骤的部件:在第二硬件 事务的提交之前确定是否获取了提交锁定,以及如果是的话,则确定冲突是否存在于第二 硬件事务与获取了提交锁定的第一软件事务之间。
[0144] 在示例30中,示例28的系统可选地还包括在冲突存在于第二硬件事务与第一软件 事务之间时中止第二硬件事务的部件,其中如果第二硬件事务的过滤器组与第一软件事务 的过滤器组交叉,则确定冲突存在。
[0145] 在示例31中,示例28的系统可选地还包括用于执行下列步骤的部件:在第一软件 事务获取提交锁定之后确定是否由一个或多个硬件事务获取了一个或多个事务锁定,以及 如果是的话,则将第一软件事务的提交延迟到一个或多个事务锁定被释放。
[0146] 在示例32中,示例28的系统可选地还包括:用于在事务存储器系统的第一硬件事 务模式执行第一硬件事务的部件;用于在第一硬件事务结束时确定至少一个软件事务是否 并发地执行的部件;以及用于执行下列步骤的部件:如果是的话,则中止第一硬件事务,否 则提交第一硬件事务。
[0147] 在示例33中,示例28的系统可选地还包括:用于验证由第一软件事务在第一软件 事务的执行期间对事务存储器系统的事务存储器的读操作的部件;以及用于在读操作被验 证时将读操作的位置添加到第一软件事务的过滤器组的部件。
[0148] 在示例34中,示例28的系统可选地还包括:用于执行下列步骤的部件:在第二软件 事务模式执行第二软件事务,包括在第二软件事务的执行开始时获取第一锁定和提交锁 定,并且在第二软件事务执行期间直接更新一个或多个存储器位置;以及用于执行下列步 骤的部件:在第二软件事务结束时,提交第二软件事务,使第一软件事务模式的一个或多个 并发执行软件事务失效,并且此后释放第一锁定和提交锁定。
[0149] 要理解,上述示例的各种组合是可能的。
[0150] 实施例可用于许多不同类型的系统中。例如,在一个实施例中,通信装置能够设置 成执行本文所述的各种方法和技术。当然,本发明的范围并不局限于通信装置,而是其他实 施例能够针对用于处理指令的其他类型的设备或者包括指令的一个或多个机器可读介质, 指令响应执行于计算装置而使该装置执行本文所述方法和技术的一个或多个。
[0151] 实施例可通过代码来实现,并且可存储在非暂时存储介质上,存储介质上存储了 能够用于将系统编程为执行指令的指令。存储介质可包括但不限于:任何类型的磁盘,包括 软盘、光盘、固态驱动器(SSD)、致密光盘只读存储器(CD-ROM)、可改写光盘(CD-RW)和磁光 盘;半导体器件,例如只读存储器(R0M)、诸如动态随机存取存储器(DRAM)和静态随机存取 存储器(SARAM)之类的随机存取存储器(RAM)、可擦可编程只读存储器(EPROM)、闪速存储 器、电可擦可编程只读存储器(EEPROM)、磁卡或光卡;或者适合于存储电子指令的任何其他 类型的介质。
[0152] 虽然针对有限数量的实施例描述了本发明,但是本领域的技术人员将会从中知道 大量修改和变更。预计所附权利要求书涵盖落入本发明的真实精神和范围之内的所有这类 修改和变更。
【主权项】
1. 一种设备,包括: 处理器; 执行逻辑,用于在事务存储器系统中使能第一软件事务模式的至少一个第一软件事务 和第二软件事务模式的第二软件事务以及第一硬件事务模式的至少一个硬件事务和第二 硬件事务模式的至少一个第二硬件事务的并发执行; 跟踪逻辑,用于激活标志,以指示至少一个软件事务正经历在所述第一软件事务模式 或者所述第二软件事务模式的执行; 交叉逻辑,用于确定在所述第二硬件事务模式的第一硬件事务结束时所述第二硬件事 务模式的所述第一硬件事务的过滤器组是否与经历执行的所述至少一个软件事务的过滤 器组冲突;以及 最终完成逻辑,用于在不存在冲突时提交所述第一硬件事务,而在存在冲突时终止所 述第一硬件事务。2. 如权利要求1所述的设备,其中,在所述第二硬件事务模式,所述第一硬件事务更新 所述第一硬件事务的各存储器访问的所述第一硬件事务的所述过滤器组。3. 如权利要求1所述的设备,其中,在所述第一软件事务模式,第一软件事务在所述第 一软件事务结束时得到第一锁定和第二锁定,并且采用哈希表中存储的写数据来更新所述 事务存储器系统的事务存储器。4. 如权利要求3所述的设备,其中,在所述第一软件事务模式,在所述第一软件事务的 提交之后,所述第一软件事务使所述第一软件事务模式的另一个软件事务失效。5. 如权利要求4所述的设备,其中,在所述第二硬件事模式,第二硬件事务在所述第二 硬件事务的提交之前得到提交锁定和事务锁定。6. 如权利要求4所述的设备,其中如果交叉在所述第一软件事务的过滤器组与所述另 一个软件事务的过滤器组之间发生,则所述第一软件事务使所述另一个软件事务失效。7. 一种方法,包括: 由事务存储器系统中的处理器并发地执行第一线程的软件事务和第二线程的硬件事 务; 激活全局锁定,以指示所述软件事务的执行;以及 在所述硬件事务结束时,确定所述全局锁定的状态,以及如果所述全局锁定是有效的, 则确定所述第一线程的过滤器组是否与所述第二线程的过滤器组交叉,而如果不是的话, 则提交所述硬件事务。8. 如权利要求7所述的方法,还包括提交所述软件事务,并且在所述软件事务结束时停 用所述全局锁定。9. 如权利要求7所述的方法,还包括在所述全局锁定在所述硬件事务结束时是无效的 时候在没有确定所述过滤器组是否交叉的情况下提交硬件事务。10. 如权利要求7所述的方法,还包括: 将所述硬件事务对所述事务存储器系统的事务存储器的访问的地址插入所述第一线 程的所述过滤器组;以及 基于将所述访问的地址与一个或多个哈希值进行哈希来更新所述第一线程的所述过 滤器组的一个或多个字段。11. 如权利要求7所述的方法,还包括: 在所述软件事务中并发地将哈希表从第一大小重新哈希到第二大小;以及 在所述硬件事务中访问所述哈希表,并且使所述硬件事务能够在所述并发重新哈希期 间进行提交。12. -种方法,包括: 在事务存储器系统的第二硬件事务模式执行第二硬件事务; 在所述第二硬件事务结束时提交所述第二硬件事务;以及 在所述第二硬件事务的提交之后,如果冲突存在于所述第二硬件事务与所述至少一个 软件事务之间,则使与所述第二硬件事务并发执行的至少一个软件事务失效。13. 如权利要求12所述的方法,还包括在所述第二硬件事务的提交之前确定是否获取 了提交锁定,以及如果是的话,则确定冲突是否存在于所述第二硬件事务与获取了所述提 交锁定的第一软件事务之间。14. 如权利要求12所述的方法,还包括在所述冲突存在于所述第二硬件事务与所述第 一软件事务之间时中止所述第二硬件事务,其中如果所述第二硬件事务的过滤器组与所述 第一软件事务的过滤器组交叉,则确定冲突存在。15. 如权利要求12所述的方法,还包括在所述第一软件事务获取所述提交锁定之后,确 定是否由一个或多个硬件事务获取了一个或多个事务锁定,以及如果是的话,则将所述第 一软件事务的提交延迟直到所述一个或多个事务锁定被释放。16. 如权利要求12所述的方法,还包括: 在所述事务存储器系统的第一硬件事务模式执行第一硬件事务; 在所述第一硬件事务结束时,确定至少一个软件事务是否并发地执行;以及 如果是的话,则中止所述第一硬件事务,否则提交所述第一硬件事务。17. 如权利要求12所述的方法,还包括: 验证由所述第一软件事务在所述第一软件事务的执行期间对所述事务存储器系统的 事务存储器的读操作;以及 如果所述读操作被验证,则将所述读操作的位置添加到所述第一软件事务的过滤器 组。18. 如权利要求12所述的方法,还包括: 在第二软件事务模式执行第二软件事务,包括在所述第二软件事务的执行开始时获取 第一锁定和提交锁定,并且在所述第二软件事务执行期间直接更新一个或多个存储器位 置;以及 在所述第二软件事务结束时,提交所述第二软件事务,使所述第一软件事务模式的一 个或多个并发执行软件事务失效,并且此后释放所述第一锁定和所述提交锁定。19. 包括多个指令的至少一个机器可读介质,所述指令响应在计算装置上执行而使所 述计算装置执行如权利要求12至18中的任一项所述的方法。20. -种系统,包括: 处理器,包括混合事务存储器逻辑,以便并发地执行至少一个硬件事务和至少一个软 件事务, 其中所述混合事务存储器逻辑在第一硬件事务模式执行第一事务,直到提交所述第一 事务或者所述第一事务在所述第一硬件事务模式重试第一阈值次数,以及此后,如果没有 提交所述第一事务,则在第一软件事务模式执行所述第一事务,其中所述混合事务存储器 逻辑包括交叉逻辑,以确定关联在所述第一硬件模式所执行的所述第一事务的过滤器组是 否与关联在所述第一软件事务模式所执行的第二事务的过滤器组冲突,并且响应所述冲 突,所述混合事务存储器逻辑防止在所述第一硬件事务模式的所述第一事务进行提交;以 及 耦合到所述处理器的事务存储器。21. 如权利要求20所述的系统,其中,所述混合事务存储器逻辑在所述第一软件事务模 式执行所述第一事务,直到提交所述第一事务或者所述第一事务在所述第一软件事务模式 重试第二阈值次数,以及在所述第二阈值次数之后,在第二软件事务模式执行所述第一事 务,其中所述第一事务直接更新所述事务存储器。22. 如权利要求20所述的系统,其中,所述混合事务存储器逻辑在所述第一硬件事务模 式的执行之前在第二硬件事务模式执行所述第一事务,其中在所述第一硬件事务模式执行 所述第一事务之前,所述混合事务存储器逻辑在所述第二硬件事务模式将所述第一事务执 行第三阈值次数。23. 如权利要求20所述的系统,其中,所述混合事务存储器逻辑使所述第一事务在所述 第一软件事务模式的执行期间验证读数据,基于与所述读数据关联的地址来更新与在所述 第一软件事务模式所执行的所述第一事务关联的过滤器组,并且采用写数据来更新哈希 表。24. 如权利要求23所述的系统,其中,所述混合事务存储器逻辑使: 在第二软件事务模式的第二事务在所述第二事务开始时得到第一锁定和第二锁定,并 且此后在所述第二事务的执行期间直接更新所述事务存储器;以及 在所述第一软件事务模式的所述第一事务在所述第一事务的提交时得到所述第一锁 定和所述第二锁定,并且此后采用来自所述哈希表的所述写数据来更新所述事务存储器, 以及使在所述第一软件事务模式并发执行的至少一个其他软件事务失效。
【文档编号】G06F17/30GK106062707SQ201580010928
【公开日】2016年10月26日
【申请日】2015年3月25日
【发明人】I.卡尔丘, J.E.戈特施利奇, T.什佩斯曼, G.A.波坎
【申请人】英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1