事务存储器(tm)系统中的读和写监控属性的制作方法

文档序号:6587912阅读:186来源:国知局
专利名称:事务存储器(tm)系统中的读和写监控属性的制作方法
技术领域
本发明涉及处理器执行领域,并且具体来说,涉及多组指令的执行。相关申请的交叉引用本申请涉及以下与其一同递交的专利申请Gad Sheaffer等于2008年12月30 日递交的代理人卷号为 P29132、标题为“Extending Cache CoherencyProtocols to Support Locally Buffered Data,,的美国专利申请 no. 12/346,543 ;Gad Sheaffer 等于 2008年12月30日递交的代理人卷号为P29131、标题为“Memory Model for Hardware Attributes Within a Transactional MemorySystem" W^H^^J^it no. 12/346, 539 ; Gad Sheaffer等于2008年12月30日递交的代理人卷号为P29129、标题为“Registering a User-Handler inHardware for Transactional Memory Event Handling,,的美国专利申 请no. 12/346, 518 ;Gad Sheaffer等于2008年12月30日递交的代理人卷号为P29128、标 题为“Metaphysical Address Space for Holding Lossy Meta-data inHardware,,的美国 专利申请 no. 12/346,500。
背景技术
半导体工艺和逻辑设计技术的进步已经使得集成电路设备上可以存在的逻辑的 数量得到增加。因此,计算机系统配置已经从一个系统中有单个或多个集成电路演进到在 单独集成电路上存在多个核心和多个逻辑处理器。处理器或集成电路通常包括单个处理器 管芯,其中,处理器管芯可以包括任意数量的核心或逻辑处理器。集成电路上数量不断增加的核心和逻辑处理器使得能够同时执行更多软件线程。 然而,可以同时执行的软件线程的数量的增加已经造成了与同步这些软件线程之间共享的 数据有关的问题。访问多核或多逻辑处理器系统中的共享数据的一种通用方案包括使用锁 来确保对共享数据进行的多个访问上的互斥性。然而,不断提高的执行多个软件线程的能 力仍然可能导致执行的误竞争(false contention)和串行化。例如,考虑保存有共享数据的哈希表。对于锁系统,程序员可以锁定整个哈希表, 允许一个线程访问整个哈希表。然而,其他线程的吞吐量和性能可能受到不利影响,因为 在锁被释放之前它们不能访问该哈希表中的任何条目。可替代地,哈希表中的每个条目都 可以被锁定。对于任何一种方式,在将该简单示例外推到大型可扩展程序之后,显而易见的 是,锁竞争、串行化、细粒度同步以及避免死锁的复杂性会成为程序员的极繁重的负担。另一种近来的数据同步技术包括使用事务存储器(transaCti0nalmem0ry,TM)。通 常,事务执行包括执行由多个微操作、操作或指令组成的组。在上面的示例中,两个线程均 在哈希表中执行,并且它们的存储器访问被监控/跟踪。如果两个线程访问/改变同一条 目,则可以执行冲突解决来保证数据的有效性。一种事务执行包括软件事务存储器(STM), 其中,用软件来执行存储器访问的跟踪、冲突解决、中止任务和其他事务任务,通常没有硬 件的支持。在强原子性软件事务存储器(STM)系统中,为了保证不发生事务存储器操作和非事务存储器操作之间的运行时冲突,编译器将每个非事务存储器操作视为单个操作事务。 换言之,在事务存储器访问处和非事务存储器访问处插入事务屏障(barrier),以将事务彼 此之间以及与非事务存储器访问进行隔离。然而,在每个事务存储器操作和非事务存储器 操作处执行事务屏障可能是昂贵且复杂的。 另一种事务执行包括硬件事务存储器(HTM)系统,其中,硬件被包括在内来支持 访问跟踪、冲突解决以及其他事务任务。然而,之前在对事务执行的硬件支持方面上的尝试 并未有效地将软件事务的优点(例如,在任何数据粒度级上进行访问跟踪和冲突检测)集 成到硬件中。


通过举例的方式来说明本发明,并且附图并不意图限制本发明。图1说明了包括能够同时执行多个软件线程的多个处理部件的处理器的实施例。图2说明了处理器中支持事务执行的结构的实施例。图3说明了在存储器访问监控的选择性关联模式下或者在存储器访问监控的非 选择性关联模式下工作的方法的流程图的实施例。图4说明了包括额外监控的高速缓存一致性状态的高速缓存一致性状态的状态 转变图的另一实施例。图5说明了监控存储器访问的方法的流程图的实施例。
具体实施例方式在以下描述中,为了提供对本发明的透彻理解,阐述了许多特定细节,例如,事务 执行的特定硬件结构、访问监控器的特定类型和实现、特定的高速缓存实现、特定类型的高 速缓存一致性模型、特定的数据粒度,以及存储器访问和位置的特定类型等的示例。然而, 将对本领域技术人员显而易见的是,实践本发明并不一定要采用这些特定细节。在其他示 例中,为了避免不必要地混淆本发明,未详细描述熟知的组件或方法,例如,软件中事务的 编码、事务的划分、特定且可选的多核与多线程处理器架构、特定的编译器方法/实现,以 及微处理器的特定操作细节。本文所描述的方法和装置用于提供存储器访问监控器来支持事务执行。特别地, 主要参照与高速缓冲存储器结构相关联、用于跟踪对存储器地址的访问的监控器,来讨论 提供存储器访问监控器。实际上,在下面图2和4中具体参照与高速缓冲存储器相关联的 监控器。然而,用于提供存储器访问监控器的方法和装置并不限于此,它们可以结合用于跟 踪对数据元素的存储器访问的任何结构来实现。参照图1,说明了能够同时执行多个线程的处理器的实施例。注意,处理器100可 以包括对硬件事务执行的硬件支持。以结合硬件事务执行的方式或者以单独进行的方式, 处理器100还可以对以下项提供硬件支持软件事务存储器(STM)的硬件加速、STM的单独 执行,或者其组合,例如混合型事务存储器(TM)系统。处理器100包括任意处理器,例如, 微处理器、嵌入式处理器、数字信号处理器(DSP)、网络处理器,或执行代码的其他设备。如 所示出的,处理器100包括多个处理部件。在一个实施例中,处理部件是指线程单元、处理单元、上下文、逻辑处理器、硬件线程、核心,和/或能够保持处理器的状态(例如,执行状态或架构状态)的任何其他部件。换 言之,在一个实施例中,处理部件是指能够与代码(例如,软件线程、操作系统、应用程序或 其他代码)独立相关的任何硬件。物理处理器通常是指集成电路,其可以包括任意数量的 其他处理部件,例如多个核心或多个硬件线程。核心通常是指位于集成电路上能够维持独立的架构状态(其中,每个独立维持的 架构状态与至少一些专用执行资源相关联)的逻辑。与核心相对地,硬件线程通常是指位 于集成电路上能够维持独立的架构状态(其中,独立维持的架构状态共享对执行资源的访 问)的任何逻辑。如可以看到的,当某些资源被共享而其他资源专用于一个架构状态时,硬 件线程和核心的命名之间的界线有重叠。然而通常来说,核心和硬件线程被操作系统视为 单独的逻辑处理器,其中,操作系统能够单独调度每个逻辑处理器上的操作。如图1中所示,物理处理器100包括两个核心,核心101和102,它们共享对更高 级高速缓存110的访问。尽管处理器100可以包括非对称的核心,即,多个核心具有不同的 配置、功能单元和/或逻辑,但是所说明的是对称的核心。因此,为了避免重复讨论,将不 详细讨论被示出为与核心101等同的核心102。另外,核心101包括两个硬件线程IOla和 101b,而核心102包括两个硬件线程102a和102b。因此,诸如操作系统这样的软件实体可 以将处理器100视为四个单独的处理器,S卩,能够同时执行四个软件线程的四个逻辑处理 器或处理 部件。这里,第一线程与架构状态寄存器IOla相关联,第二线程与架构状态寄存器IOlb 相关联,第三线程与架构状态寄存器102a相关联,而第四线程与架构状态寄存器102b相关 联。如所示出的,在架构状态寄存器IOlb中复制架构状态寄存器101a,因此,能够针对逻辑 处理器IOla和逻辑处理器IOlb存储单独的架构状态/上下文。还可以针对线程IOla和 IOlb复制其他更小的资源,例如,指令指针和重命名分配器逻辑130中的重命名逻辑。一些 资源,例如,重排序/引退单元135中的重排序缓冲器、ILTB 120、载入/存储缓冲器以及队 列,可以通过分区来共享。而其他资源,例如通用内部寄存器、页表基址寄存器、低级数据高 速缓存与数据TLB 115、执行单元140,以及乱序单元135的部分,可以被完全共享。处理器100通常包括其他资源,这些资源可以被完全共享、通过分区来共享,或者 被处理部件专用/专用于处理部件。在图1中,说明了仅示例性的处理器的实施例,其具有 处理器的说明性功能单元/资源。注意,处理器可以包括或者省略任何这些功能单元,也可 以包括任何其他未示出的已知功能单元、逻辑或固件。如所示出的,处理器100包括总线接口模块105,用于与处理器100外部的设备 (例如,系统存储器175、芯片组、北桥或其他集成电路)进行通信。存储器175可以专用于 处理器100,或者为系统中的其他设备所共享。更高级或更靠外的高速缓存110用于对最近 从更高级高速缓存110获取的元素进行缓存。注意,更高级或更靠外是指高速缓存级别增 加或者离执行单元更远。在一个实施例中,更高级高速缓存110是二级数据高速缓存。然 而,更高级高速缓存110并不限于此,它可以与指令高速缓存相关联或者包括指令高速缓 存。跟踪高速缓存(即,一种指令高速缓存)可以替代地耦合在译码器125之后,用于存储 最近译码的跟踪。模块120还可以包括用于预测要执行/采用的分支的分支目标缓冲器, 和用于存储指令的地址转换条目的指令转换缓冲器(I-TLB)。译码模块125被耦合到获取单元120,以对获取的元素进行译码。在一个实施例中,处理器100与指令集架构(ISA)相关联,所述指令集架构定义/规定了处理器100上可执行的指令。这里,被ISA识别的机器码指令通常包括该指令中的被称为操作码(opcode) 的那一部分,其涉及/规定要执行的指令或操作。在一个示例中,分配器和重命名器模块130包括分配器,用于保留诸如寄存器文 件这样的资源,以存储指令处理结果。然而,线程IOla和IOlb可能能够进行乱序执行,在 这种情况下,分配器和重命名器模块130还保留诸如重排序缓冲器这样的其他资源,以跟 踪指令结果。单元130还可以包括寄存器重命名器,用于将程序/指令引用寄存器重命名 为处理器100内部的其他寄存器。重排序/引退单元135包括诸如上面提及的重排序缓冲 器、载入缓冲器和存储缓冲器这样的组件,以支持乱序执行和乱序执行的指令之后的有序 引退。在一个实施例中,调度器和执行单元模块140包括调度器单元,用于调度执行单 元上的指令/操作。例如,在具有可用浮点执行单元的执行单元的端口上调度浮点指令。与 这些执行单元相关联的寄存器文件也被包括来存储信息指令处理结果。示例性执行单元包 括浮点执行单元、整数执行单元、跳转执行单元、载入执行单元、存储执行单元,以及其他已 知执行单元。低级数据高速缓存和数据转换缓冲器(D-TLB) 150被耦合到执行单元140。该数据 高速缓存存储最近使用/操作的元素,例如数据操作数,这些元素可以被保持在存储器一 致性状态。该D-TLB存储最近的对物理地址的虚拟/线性转换。作为一特定示例,处理器 可以包括页表结构,以将物理存储器分成多个虚拟页。在一个实施例中,处理器100能够进行事务执行。事务也可以被称为代码的临界 或原子段,其包括要作为原子组被执行的由指令、操作或微操作组成的组。例如,指令或操 作可以用来划分事务或临界段。在一个实施例中,如下面更详细描述的,这些指令是诸如 指令集架构(ISA)这样的指令集的一部分,其可被处理器100的诸如上述译码器这样的 硬件识别。通常,一旦从高级语言被编译成硬件可识别的汇编语言,这些指令包括操作码 (opcode),或者这些指令的在译码阶段由译码器识别的其他部分。通常,在执行事务期间,在事务被提交(commit)之前,对存储器的更新不是全局 可见的。例如,对一位置的事务写操作对本地线程可能是可见的,但是,在包括该事务写操 作的事务被提交之前,对于来自另一线程的读操作,并不转发写数据来作为响应。如下面所 更详细讨论的,当事务仍未决时,从存储器载入和写入存储器的数据项/元素被跟踪。一旦 事务到达提交点,如果未检测到对于该事务的冲突,则该事务被提交,并且使该事务期间所 进行的更新为全局可见。然而,如果事务在其未决期间被无效,则事务被中止并且可能被重启,而不使更新 为全局可见。因此,如本文所使用的,事务的未决是指事务已经开始执行,但是还未被提交 或中止,也即未决。事务执行的示例性实现包括硬件事务存储器(HTM)系统、软件事务存储 器(STM)系统,及其组合或混合。软件事务存储器(STM)系统通常是指用软件或至少部分用软件来执行访问跟踪、 冲突解决,或其他事务存储器任务。在一个实施例中,处理器100能够执行编译器来编译程 序代码,以支持事务执行。这里,编译器可以插入操作、调用、函数以及其他代码,以使得能 够执行事务。
编译器通常包括程序或程序集,用于将源文本/代码转换成目标文本/代码。通 常,用编译器对程序/应用程序代码进行的编译以多个阶段和多遍来实现,以将高级编程 语言代码转换成低级机器或汇编语言代码。然而,仍然可以将单遍编译器用于简单编译。编 译器可以使用任何已知编译技术,并执行任何已知编译器操作,例如,词法分析、预处理、句 法分析、语义分析、代码生成、代码转换以及代码优化。
尽管较大的编译器通常包括多个阶段,但是这些阶段最常见的是包括在两个通用 阶段内(1)前端,即,一般在其中可以进行句法处理、语义处理和一些转换/优化;以及 (2)后端,即,一般在其中进行分析、转换、优化和代码生成。一些编译器涉及中端,其说明编 译器的前端和后端之间的界定模糊。因此,所涉及的编译器的插入、关联、生成或其他操作 可以在前述多个阶段或多遍以及编译器的任何其他已知的多个阶段或多遍中的任何一个 内进行。作为说明性示例,编译器可以将事务操作、调用、函数等插入编译的一个或更多阶 段中,例如,在编译的前端阶段中插入调用/操作,然后在事务存储器转换阶段期间将调用 /操作转换成低级代码。然而,不管编译器的执行环境和动态或静态特性是何种情况,在一个实施例中,编 译器都编译程序代码来使得能够进行事务执行。因此,在一个实施例中,所涉及的程序代码 的执行是指(1)动态或静态地执行编译器程序,以编译主程序代码来维持事务结构或执行 其他事务相关的操作;(2)执行包括事务操作/调用的主程序代码;(3)执行与主程序代码 相关联的其他程序代码,例如库;或者⑷它们的组合。在一个实施例中,处理器100能够利用硬件/逻辑(即,在硬件事务存储器(HTM) 系统内)执行事务。当实现HTM时,许多具体实现细节来自于架构和微架构这两种角度;这 些细节中的大部分在本文中未作讨论,以免不必要地模糊本发明。然而,出于说明的目的, 公开了一些结构和实现。然而,应该注意,这些结构和实现并非必需的,并且可以用具有不 同实现细节的其他结构来补充和/或替换这些结构和实现。作为实现设计选择的示例,HTM可以工作在本地更新(update-in-place)方式下 或者工作在写缓冲方式下。在本地更新式HTM中,对涉及的存储器地址执行事务写操作,以 修改其中保存的之前数据。然而,不将所修改的数据提供给外部请求线程,即,不使该数据 为全局可见,而将该数据提供给本地读操作来用于本地存储器排序目的。另外,之前数据通 常被“记录”,以便当中止事务时,能够恢复该之前数据以获得线程在事务的执行开始之前 的状态。为了进行说明,假定数据高速缓存150包括一级数据高速缓存来保存来自诸如高 速缓存110和系统存储器175这样的更高级存储器的数据。因此,在写回式高速缓存的一个 实施例中,一旦遇到将之前数据项写入数据高速缓存150的事务写操作,则将该之前数据 项写回更高级高速缓存110。可替代地,之前数据可以被记录在处理器100内部或外部的另 一单独存储器中。在记录了之前数据项之后,执行事务写操作来更新高速缓存150中的数 据项。因此,诸如本地线程IOla这样的本地线程,S卩,与该事务写操作相关联的线程,可以 读取高速缓存150中的所修改的数据项。然而,如果包括该事务写操作的事务还未被提交, 则响应于读请求,不向诸如线程102b这样的另一线程提供所修改的数据,而是提供所记录 的数据。当事务提交时,所记录的数据被无效或忽略。然而,如果事务中止,则之前数据被 重新载入或者被全局标识为有效数据。
相对地,在写缓冲式HTM中,事务写操作被缓冲在写缓冲器中,而之前数据驻留在 其原始位置。如果诸如线程102b这样的本地线程执行针对被事务性地写入的数据的读操 作,则从写缓冲器转发修改的数据。作为必然结果,如果外部线程请求读取该数据,而包括 该事务写操作的事务仍然未决,则提供来自原始位置的之前数据。此外,一旦提交事务,则 将修改的数据拷贝到对应的存储器地址,而一旦中止,则忽略被缓冲的数据。如可以从上面的讨论所看到的,对数据项的访问和请求均可以通过本地处理部件 进行,并且也可以通过其他处理部件来进行。在没有安全机制的情况下,这些访问中的一些 可能会导致无效的数据和执行,即,对数据的写操作使读操作无效,或者读取无效的数据。 因此,处理器100可以包括用于跟踪或监控存储器访问的逻辑,以识别可能的冲突。在一个实施例中,处理器100包括读和写监控器,用于监控和/或跟踪存储器访 问。作为第一示例,这些监控器以数据元素的粒度来监控对数据元素的存储器访问,而不考 虑保存数据元素的物理存储器结构/位置的粒度的限制。数据项或数据元素可以包括硬 件、软件或其组合定义的任何粒度级别的数据。数据、数据元素、数据项或对其的引用的示例的非穷举列表包括存储器地址、数 据对象、类、动态语言代码的类型的字段、动态语言代码的类型、变量、操作数、数据结构,以 及对存储器地址的间接引用。然而,任何已知的数据组都可以被称为数据元素或数据项。上 面示例中的一些,例如动态语言代码的类型的字段和动态语言代码的类型,是指动态语言 代码的数据结构。为了进行说明,诸如Sim Microsystems公司的Java 这样的动态语言代 码是强类型语言。在编译时,每个变量都具有已知的类型。这些类型被分成两类——基元 类型(布尔型和数值型,例如,整型、浮点型)和引用类型(类、接口和数组)。引用类型的 值是对对象的引用。在Java 中,由字段组成的对象可以是类实例或数组。给定类A的对 象a,习惯使用记法A: :x来指代类型A的字段X,使用a. χ来指代类A的对象a的字段χ。 例如,一个表达式可以表达为a. χ = a. y+a. ζ。这里,字段y和字段ζ被载入以相加,并将结 果写入字段X。因此,可以以任何数据级粒度来执行对数据项的存储器访问的监控。例如,在一个 实施例中,可以以类型级来监控对数据的存储器访问。这里,对字段A: :χ的事务写操作和 字段A::y的非事务载入可以作为对同一数据项(即,类型A)的访问而被监控。在另一实 施例中,以字段级粒度执行存储器访问的监控。这里,对A: :x的事务写操作和A: :y的非事 务载入不作为对同一数据项的访问而被监控,因为它们是对不同字段的访问。注意,在跟踪 对数据项的存储器访问中,可以考虑其他数据结构或编程技术。例如,假设类A的对象的指 向类B的对象的字段χ和y (即,A: :X和A: :y)被初始化给新分配的对象,并且在初始化之 后从未被进行写操作。在一个实施例中,对于A::y所指向对象的字段B::z的非事务载入 来说,对A::X所指向对象的字段B::z的事务写操作不作为对与其相同的数据项的存储器 访问而被监控。从这些示例外推,可以确定监控器可以以任何数据粒度级别来执行监控。在一个实施例中,监控器包括读监控器和写监控器,相应地用于跟踪被确定要监控的载入和存储。例如,硬件读监控器和写监控器至少以数据项的粒度来执行数据项的有 界(bounded)监控,而不管保存所述数据项的存储结构的粒度。在一个实施例中,数据项的 读监控器包括与该数据项相关联的第一数量的读属性。类似地,数据项的写监控器包括与 该数据项相关联的第二数量的写属性。注意,第一数量的读属性和第二数量的写属性可以相同;然而,它们并不限于此,并且可以包括不同数量的属性。读或写属性包括用于保存与数据项相关联的状态或信息的任何逻辑、固件或结 构。例如,数据项的属性包括位向量,其中,位向量中的每个位代表数据项的一种属性,例 如,被事务性地载入、被事务性地写入、被非事务性地载入、被非事务性地写入、未被事务性 地载入、未被事务性地写入、未被非事务性地载入、未被非事务性地写入、检测到访问冲突、 未检测到访问冲突、有读请求、无读请求、有写请求、无写请求、有所有权请求、无所有权请 求,或者与数据项或保存该数据项的存储器位置相关联的任何其他属性或状态。作为另一示例,数据项的属性包括编码值。例如,使用两个属性位(即,四个二进 制值00、01、11和10)来对诸如以下四种状态的状态进行编码(1)被事务性地写入;(2)被 事务性地读取;(3)被非事务性地写入;以及( 4)被非事务性地读取。注意,这四种状态可 以包括示例监控写状态、监控读状态、非监控写状态以及非监控读状态。如上面所涉及的,读和写属性可以以任何已知方式与数据项/元素相关联。例如, 由此可以将处理器100内的通用存储设备用来保存与要监控的数据项的读和写相对应的 读和写属性。用于关联属性与数据项的方式的数量太多而无法详述所有方法。作为第一示例,属性是与高速缓存行的字节的子集相关联。例如,假定高速缓存 150的高速缓存行长度为64字节,并且可以以8字节段被处理器100所访问。这里,属性 可以与任何物理存储粒度相关联,例如,作为说明性示例的2、4、8、16、32、64或128字节的 数据,并且可以在高速缓存150中改变,例如,对于高速缓存150的一部分与物理存储的每 4个字节相关联,而对于高速缓存150的另一部分与每8个字节相关联。在一个实施例中,无论或不管物理存储的边界,监控器/属性都要以数据项的粒 度级别来执行该数据项的有界监控,而不管处理器100中的物理存储(即高速缓存150和 属性存储中的一个或二者)的粒度。例如,假定高速缓存150包括可以以4字节段访问的 16字节行,S卩,每个高速缓存行内有四个可访问段。此外,假定读和写属性与每个16字节行 的每个8字节段相关联。因此,该高速缓存能够读和写每4字节的数据,而属性能够监控每 8字节的数据。进一步说明该示例,被监控的载入使得载入20字节大小的数据项,跨越高速缓存 150的两个高速缓存行的一部分,即,第一行的所有16个字节和第二行的前4个字节。因 此,与高速缓存150的第一高速缓存行的16个字节相关联的读属性被更新,以指示发生了 所监控的载入。此外,与高速缓存150的第二高速缓存行的前8个字节相关联的读属性也被 类似地更新,尽管所述数据项仅占据第二高速缓存行的4个字节。实质上,在该实施例中, 至少以数据项的粒度级别来提供对该数据项的监控,并且可以以更大的粒度来提供对该数 据项的监控,以保证监控(即,有界监控)完整数据项。换言之,这里,通过保证即使在由于 物理存储的粒度而使得包括更多数据的情况下数据项也被监控,属性对该数据项的监控进 行限界,而不考虑物理存储粒度限制或属性关联。相反,如果属性提供与高速缓存150相比 较更小的粒度,则基于属性关联对数据项的跟踪可能比以高速缓存150的可访问粒度进行 的跟踪更准确。上面的示例假定属性/监控器与预定大小静态关联,例如,监控器用于16字节高 速缓存行的每8个字节。注意,这些关联仅仅是说明性的并且可以有显著改变,例如,包括 更小或更大的监控器关联粒度。然而,在另一实施例中,在进行数据项的载入或存储时,从属性池动态指派属性。为了进行说明,在该环境下重新检验上面的示例。这里,当使用被监 控的载入来载入20字节数据项时,读属性此时与从中载入该数据项的高速缓存150的20 个字节相关联。这里,数据项的监控真正地与物理存储结构的粒度去耦合。在两种示例中, 数据均通过监控器来限界,而不管基础存储结构(即,高速缓存150)的粒度。然而,在第一 示例中,必须考虑监控器与高速缓存150的部分关联的静态粒度,以保证数据通过正确的 监控来被限界。然而,在第二示例中,监控器以数据项的具体粒度被动态关联。 在一个实施例中,在第一模式下的处理器100内的监控器用于监控所有的存储器 访问。例如,当正在执行事务时,监控所有的事务存储器访问。此外,在另一模式下,处理器 100能够选择性监控存储器访问。存储器访问的选择性监控在下文中参照图3来更详细地 讨论。在一个实施例中,用于监控存储器访问操作的硬件监控器被用来进行冲突检测, 例如,检测使存储器访问无效的情况(其可能要求中止事务)。不管如何实现硬件监控器或 属性的关联,如本文所更详细讨论的,监控器的访问状态可以被冲突检测逻辑、固件、软件 或其组合用来检测可能的存储器访问冲突。为了进行说明,假定与高速缓存150中保存的 数据项相关联的读硬件监控器指示该数据项之前已经被一事务载入,并且随后,另一线程 作出的写该数据项的请求被高速缓存150的高速缓存控制逻辑所接收。基于该写请求和读 监控器的当前状态,即被事务性地载入,在一个实施例中与高速缓存控制逻辑一起被包括 或者耦合到高速缓存控制逻辑的冲突逻辑检测可能的冲突。响应于可能的冲突,可以用硬 件、软件或其组合来进行任意数量的操作。参照图2更详细讨论的示例包括响应于冲突而 设置状态寄存器中的一位或者设置一标志,并且响应于设置所述位或所述标志而将控制转 移给处理机来处理可能的冲突。因此,如上面的示例中所推断的,在一个实施例中,在属性与诸如数据高速缓存 150这样的高速缓冲存储器相关联的情况下,现有已知的一致性和通信/监听协议可以与 硬件监控器/属性相组合来用于检测冲突。这里,基于该设计,高速缓存一致性请求和监控 器/属性的状态的不同组合导致可能的冲突,例如,上面的读监控器指示数据项的被监控 的载入,而监听指示对该数据项的写请求。反过来,写监控器指示对数据项的被监控的写操 作,而监听指示对该数据项的读请求可以被认为可能相冲突。在一个实施例中,为了检测访 问请求和属性状态的此类组合,监听逻辑被耦合到冲突检测/报告逻辑,例如用于冲突检 测/报告的监控器和/或逻辑。然而,在一个实施例中,检测冲突并不限于使用通常的一致性协议。例如,采用图1 中说明的处理器100的架构。这里,单独的物理线程共享对数据高速缓存150和更高级高 速缓存110 二者的访问。因此,如果监控器与作为要在线程IOla和IOlb之间共享的共享 高速缓存的高速缓存150相关联,则由于缺少响应于来自线程IOla和IOlb的访问而产生 的与高速缓存150的互连请求,所以不能充分检测线程IOla和IOlb之间可能的冲突。因此,在一个实施例中,基于每个处理部件来复制监控器/属性。在该示例中,可 以每线程地复制属性,即,针对线程IOla和IOlb复制相同的属性。注意,属性复制可以包 括单个组的属性与不同线程标识符相关联,以指示哪个线程与该单个组的属性的状态相关 联。相对地,复制可以包括多个单独组的复制属性,其中每一个与一个线程相关联。例如, 针对数据项的一组属性与线程IOla相关联,而针对该数据项的第二组属性与线程IOlb相关联。因此,检测共享对高速缓存150的访问的线程IOla和IOlb之间的冲突包括基于 每个处理部件(例如,每个线程)进行访问跟踪。为了进行说明,假定线程IOla设置与数 据项D相关联的监控器。这里,与线程IOla相关联的复制属性被设置为适当的监控值。因 此,如果线程IOlb作出对数据项D的冲突请求,则检测到冲突。在一个实施例中,耦合到控 制逻辑以检测冲突的报告逻辑报告冲突以进行适当处理。例如,诸如逻辑“或”这样的逻辑 运算组合了不同的冲突事件,例如,由于外部原因(驱逐或外部监听)和由于共享高速缓存 线程访问冲突造成的监控的丢失。在一个实施例中,使用暂时或专有存储来实现与高速缓存150中保存的数据项相 关联的属性。这里,属性可以被保存在高速缓存150的任何位置,例如,高速缓存150的行 自身内。例如,上面描述的HTM的一个示例包括本地更新型HTM。这里,事务修改的数据被 保存在当前的存储器位置,而之前数据被记录/备份在例如更高级存储器中。因此,在一个 实施例中,当针对一数据项来访问高速缓存150时,将属性与该数据项一起暂时存储在高 速缓存150中。这里,该数据项被保持在专有或暂时一致性状态,这允许高速缓存控制逻辑 保证支持事务语义。换言之,保持在暂时状态下的数据项未被提供给其他线程。然而,如果从高速缓存150中驱逐该数据项,则所专有保存的属性可能丢失。实质 上,这些属性被系统创建来监控数据项,并且不被写回更高级存储器。在当驱逐或其他事件 发生时属性消失(即,丢失)的场景中,可能以类似于上述的检测可能的访问冲突的方式来 触发可能的冲突,。一个版本的暂时存储和专有状态,例如,被缓冲的存储和被缓冲的状态, 在与本申请一起递交的代理人卷号为P29132、标题为“Extending the MESIprotocol to support locally buffered data” 的相关申请中有讨论。如上面讨论的示例所说明的,与高速缓存中的数据项相关联的硬件属性可以被保 存在高速缓存外部、高速缓存逻辑内、高速缓存的阵列内、高速缓存的其他结构内,或者甚 至暂时在高速缓存的数据部分内。通常,在没有通过执行用户指令来进行指引操纵的情况 下,这些硬件属性由硬件来维护。例如,软件程序包括对数据项的事务写操作。当处理器遇 到事务写操作并确定其要被监控时,硬件适当地更新与该数据项相关联的写属性。例如,暂 时存储被插入并执行,以向高速缓存150更新该数据项和相关联的写属性。作为另一示例, 属性被附加在高速缓存150的一致性状态位上,并响应于事务写操作,更新高速缓存150中 用于保存该数据项的行的一致性状态。然而,在一个实施例中,除了硬件监控器/属性的硬件管理之外,指令也可以被硬 件识别来直接操纵属性。例如,这些指令或操作是处理器100可识别的指令集架构(ISA) 的一部分,用于对属性执行操作。例如,ISA包括操作码,用于当被处理器100的译码器检 测到时相应地修改所述属性。可以使用的指令的示例包括设置指令,用于将与数据项相关 联的属性设置为一状态;重置指令,用于将与数据项相关联的属性重置为默认状态;测试 或读指令,用于读取属性的状态;以及清除指令,用于清除用于一个事务的所有属性或在高 速缓存内的所有属性。前述示例中的一个包括用于清除属性的清除指令。在一个实施例中,批清除指令 被用来清除一批读和写监控器。注意,批清除指令可以用于多个场景。第一,在事务提交或 中止时,可以清除/重置针对该事务的读和写监控器。第二,处理器100从一个域到另一个域的转变可以被配置来清除/重置读和写监控器。英特尔的IA 32架构中的域的示例包括读取域、大实域(big real domain)和虚拟域。第三,在发生异常或中断时,它可以用来清 除读和写监控器。因此,当遇到清除指令时,清除满足特定条件的一个监控器、一范围内的 监控器、所有监控器,或者高速缓存内的所有监控器。如上面开始参照图1时所阐述的,处理器100的架构仅仅是用于讨论目的的说明 性的架构。类似地,将属性与数据项/元素进行关联的特定示例也是示例性的,因为可以使 用以不同粒度来关联硬件监控器/属性与数据项的任何方法。参照图2进一步讨论将属性 与高速缓存中的数据项进行关联的示例。参照图2,说明了将属性与高速缓冲存储器中的数据项进行关联的实施例。处理 器250包括任何类型的已知处理器,其具有任意数量的能够进行事务执行的处理部件。如 上面所讨论的,属性可以与任何物理大小的物理存储结构静态关联,或者被动态地指派给 数据项。图2的实施例说明了分别与高速缓存205的静态部分(即,部分210-225)相关联 的属性,即,属性211. r-226. r和211. w-226. w。例如,部分210-225是高速缓存250的高速 缓存行。高速缓存250包括与处理器相关联的任何高速缓存,例如,一级高速缓存或二级高 速缓存。如所示出的,读属性211. r与高速缓存行210相关联,并且写属性211. w与高速缓 存行210相关联。在一个实施例中,阵列235包括具有属性211. r和211. w的标记阵列。在 另一实施例中,阵列235包括状态阵列,例如一致性状态阵列,属性211. r和211. w被包括 在状态位内,以实质地创建高速缓存205的新的一致性状态。使用一致性状态的示例在下 文中参照图4来更详细地描述。在又一实施例中,阵列235包括高速缓存控制逻辑230中 的任何阵列(如图中所示),或者包括在控制逻辑外部并且在处理器250内的属性的任何其 他结构(未示出)。在一个实施例中,属性211. r-226. r和211. w_226. w监控对诸如数据元素201这 样的数据项/元素的存储器访问,而不管存储结构的物理边界,例如高速缓存205中的高速 缓存行的边界。实际上,数据项可以不与高速缓存205的诸如高速缓存行这样的边界对齐。 这里,不管高速缓存205的物理边界而对数据项进行的监控包括对未对齐数据项进行限 界,其中基于监控属性与高速缓存205的部分的关联来进行监控。这里,属性以每个行为基 础而被关联;因此,包含有被监控的数据项的任何行都被进行监控,即使它们保存了其它数 据也是如此,以保证该数据项被正确监控。上面讨论了不同数据项的多个示例。在图2中,数据项201被描绘为大小是I1Zi个 高速缓存行。作为说明性的示例,假定执行事务载入操作,以从涉及数据元素201的存储器 地址进行载入,这使得将数据元素201载入高速缓存行210和215。处理器250通过模式或 一组条件来确定要监控该事务载入。因此,控制逻辑230确定要对数据项201进行限界,即,至少该数据项被监控,并且 可能监控比所需更多的数据以保证正确的冲突检测。这里,控制逻辑230更新字段2111 和 216r,以指示从高速缓存行215和216进行的被监控的载入已经发生。作为第一示例,将字 段211r和216r从非监控逻辑值(例如,逻辑0)更新为监控逻辑值(例如,逻辑1)。在阵 列235是一致性状态阵列的实施例中,如下面所描述的,将字段211和216转变到适当的一 致性状态,例如,被监控的读共享一致性状态。因此,例如,当控制逻辑230中的监听逻辑检测到对高速缓存行210或205的写请求时,检测到可能的冲突。尽管图2主要关注于与高速缓存的数据部分205分离的属性,但是如上面所提到 的,也可以将属性保存在数据部分205内。使用上述示例,响应于被监控的载入,不更新属 性211i 和216r,而是将这些属性专有地存储在高速缓存行210、215或二者中。高速缓存 行210和215的状态被转变到缓冲或专有状态。因此,在有写请求时,使用专有保存的属性 信息检测类似的冲突。然而,在进行行210或215的驱逐时,该属性信息可能消失,即丢失。 因此,可以触发类似的冲突处理。还要注意,参照图2进行的讨论针对每个高速缓存行仅包 括一组属性。然而,如上面参照图1的高速缓存150所阐述的,可以针对处理器250的每个 线程来复制属性。例如,针对共享高速缓存205的每个线程来复制属性。另外,可以提供数 量不同的读和写属性,而不是所说明那样提供数量相同的读和写属性。在一个实施例中,可以包括在高速缓存控制逻辑230中或者与其相关联的冲突逻 辑用于检测与属性相关联的冲突。基于设计实现,属性状态、请求、通信协议或一致性协议 的任何组合可以用来确定冲突的存在。作为非常简化的基本示例,对于被监控的读操作来 说,写操作是可能的冲突,而对于被监控的写操作来说,读操作或写操作是可能的冲突。在一个实施例中,一旦检测到冲突,报告逻辑就报告该冲突。该冲突可以通过硬 件、固件、软件或其组合来进行处理。在一个实施例中,报告逻辑包括存储部件,例如,寄存 器245。该存储部件可以包括处理器250内用于保存信息的任何结构,例如,存储器、通用寄 存器或模型专用寄存器(MSR)。作为第一示例,寄存器245包括状态寄存器。响应于检测到 冲突,可以在寄存器245中将一值设置为冲突值,以指示冲突已经发生。这里,软件可以轮 询寄存器245来查看该值是否被设置为冲突值。作为另一示例,处理器250包括标志寄存 器,以包含诸如溢出标志这样的标志,其要被诸如跳转指令这样的指令来测试。为了进行说 明,载入指令之后的条件跳转指令能够用来测试事务的读设置的一致性。如上面所提及的,由于驱逐或其他事件造成的属性数据的丢失也被认为是冲 突。这里,可以以类似的方式将寄存器245用来指示属性数据的丢失。在一个实施例中, 响应于属性数据的丢失,报告逻辑将处理器250的操作重新指引到软件处理机,以适应 用于监控属性的有限存储容量。响应于溢出事件而对事务存储器进行虚拟化的示例在 共同未决的序列号为 11/479,902、标题为 “Global Overflow Method for Virtualized TransactionalMemory"的申请中有讨论。另外,使用诸如寄存器245这样的存储部件来 寄存用户处理机以处理诸如冲突这样的事务事件的示例,在Gad Sheaffer等于2008年 12月30日与本申请一起递交的序列号为12/346,518并且代理人卷号为P29129、标题为 “Registering a User-Handler in Hardware forTransactional Memory Event Handling,, 的申请中有讨论。在一个实施例中,寄存器245要保存一值来指示处理器250的工作模式,例如,非 监控模式、非选择性监控模式和选择性监控模式。在选择性监控模式中,寄存器245或其他 寄存器还可以定义用于监控访问的选择准则。注意,关于将寄存器245用作状态寄存器、用 于寄存用户处理机的寄存器、用于定义工作模式的寄存器以及用于定义选择准则的寄存器 的讨论,可以指单个寄存器或寄存器的组合,用于实现前述对存储部件245的可能使用的 任何组合。接下来参照图3,说明了以不同模式进行监控的方法的流程图的实施例。注意,图3和5的流程图基本上以串行方式来说明。然而,这些图所说明的方法并不限于此,它们可以以任何顺序进行,并且可以至少部分被并行地执行。在流程305中,确定是否要监控涉及数据元素的存储器访问。在一个实施例中,提供了多种监控的模式,例如,不监控、非选择性监控和选择性监控。例如,软件能够设置监控 模式。例如,用户指令能够寻址到诸如图2的寄存器245这样的用于指示监控模式的寄存 器。这里,软件确定要监控哪些读和写。例如,可以通过软件代码(例如,静态或运行时期 间的编译器、应用程序代码、操作系统代码、管理程序代码或事务运行时代码)来作出该确 定。在一个实施例中,在选择性监控模式期间,监控除落入特定准则内的读和写之外 的读和写,所述特定准则可以用任何方式来定义。对存储器地址的存储器访问可以不被监 控的选择准则的非穷举示例性列表包括对以下项的存储器访问落入或未在范围内或者匹 配掩码(mask)的虚拟地址;落入或未在范围内或者匹配掩码的物理地址;属于特定存储器 类型的地址;输入/输出(I/O)空间内的地址;在一个保护域中执行的代表另一保护域中 的操作的地址;特定操作码或前缀以及诸如浮点数或向量操作这样的特定数据类型标识的 指令所访问的地址。另外,可以响应于特定识别的指令来设置监控属性,例如,仅用于用户 标识出的并且处理器250的硬件可识别的显式事务载入和显式事务存储操作。一旦在流程350中确定是否要应用监控,则或者在流程315中通过更新与数据元 素相关联的监控器来应用监控,或者在流程310中不执行监控,而正常地执行访问。如本文 所讨论的,更新诸如属性这样的与数据元素相关联的监控器包括适当地修改用于监控访问 的属性的任何方法。下面讨论基于被监控和未被监控的读/写来将监控器更新为不同的一 致性状态的示例。接下来参照图4,示出了包括被监控的一致性状态的一致性状态之间的转变的方 法的状态转变图的实施例。注意,为了简化图,图4中的状态转变图是部分状态图,未示出 诸如监控属性的清除这样的一些状态转变。此外,状态和状态之间的转变仅仅是说明性的。 例如,状态之间可以发生多阶段状态转变,而不是图4中所说明的一些直接转变。所描绘的高速缓存一致性状态的列表包括(1)修改(M 420)状态,即,地址被进 行写操作并且没有与其相关联的属性;(2)修改读(MR 430)状态,即,地址被进行读操作并 且具有与其相关联的读属性(例如,当之前对该地址进行读操作,然后对地址进行事务写 操作时);(3)修改写(MW425)状态,即,地址被进行写操作,并且具有与其相关联的写属性; (4)修改读写(MRW 435)状态,即,地址被进行读操作,然后被进行写操作,并且具有与其相 关联的读属性和写属性二者;(5)独占(E 440)状态,即,地址被进行读操作,并且没有与其 相关联的属性;(6)独占写(ER 445)状态,即,地址被进行读操作,并且具有与其相关联的 读属性;(7)共享(S 410),S卩,地址被进行读操作,并且没有与其相关联的属性;(8)共享读 (SR 415)状态,即,地址被进行读操作,并且具有与其相关联的读属性。在一个实施例中,这些状态可以根据图2的示例来实现,其中,属性被包括在高速 缓存的状态位内,由此创建这些新的被监控的一致性状态。例如,当行被保持在共享状态 410并且发生了涉及包括所述行的数据项的存储器地址的被监控的读操作时,所述行的一 致性状态被转变到SR 415状态。因此,在一个实施例中,由于一致性状态为SR 415,所以对 所述行进行写操作的外部请求导致可能的冲突。可能存在其他可能的冲突,这些冲突基于一致性状态与其他存储器访问请求类型的组合,例如,当包括数据项的至少一部分的高速 缓存行被保持在MW —致性状态425时,对该数据项的外部读请求。转至图5,说明了执行存储器访问的流程图的实施例。在流程505中,遇到涉及与 数据项相关联的存储器地址的存储器访问。遇到存储器访问包括在执行的任何阶段检测存 储器访问的任何方法。遇到操作的不同阶段的示例包括译码器识别用于存储器访问的操 作码;从指令高速缓存中获取存储器访问操作;调度存储器访问以在诸如载入/存储单元 这样的执行单元上执行;以及引退存储器访问。在流程510中,确定处理器是否正工作在选择性工作模式下。如上面所阐述的,在 一个实施例中,软件设置处理器的模式。这里,当执行时,软件更新诸如寄存器这样的存储 部件,以指示工作模式。例如,当事务的执行开始时 ,软件将所述模式设置为非选择性的, 艮口,监控所有存储器访问。当该事务结束时,所述模式翻转到选择性监控或不监控。然而, 在另一实施例中,由处理器中的硬件确定工作模式。如果确定模式为选择性的,则在流程515中确定是否要监控特定存储器访问。在 该确定中可以应用任意数量的选择准则,例如,所涉及的存储器地址是否落入规定的地址 范围内,或者数据项是否具有特定类型。另外,所述准则可以简单地包括存储器访问是否被 软件标识为要被监控,例如,被标识为显式的事务存储器访问。如果不监控存储器访问,则 在流程525中正常执行存储器访问。然而,如果要监控存储器访问,则在流程520中,相应 地更新与数据项相关联的访问监控器。这里,可以在流程520中更新监控器之前、期间或之 后,在流程525中执行访问。因此,如可以从上文所看到的,诸如属性这样的监控器提供了对存储器访问的至 少数据项/元素粒度的监控,而不受物理存储结构粒度的限制。因此,硬件属性在硬件中提 供了对存储器地址和相关联的数据项的访问的监控,同时维持了以软件的数据结构级别来 监控并检测冲突的能力。此外,通过支持在属性信息消失时溢出到软件,属性还可以用作大 事务的过滤器。另外,在一个实施例中,包括用户机构来允许对属性的访问,以对它们执行 直接操作。在这里使用的模块是指任何硬件、软件、固件或其组合。通常被示出为分离的模块 边界一般是变化的并且有可能重叠。例如,第一模块和第二模块可以共享硬件、软件、固件 或其组合,同时可以保留一些独立的硬件、软件或固件。在一个实施例中,术语逻辑的使用 包括硬件,例如,晶体管、寄存器或者其它硬件,例如可编程逻辑器件。然而,在另一实施例 中,逻辑也可以包括与硬件集成的软件或代码,例如固件或微码。在这里使用的值包括数字、状态、逻辑状态或二值逻辑状态的任何已知表示。通 常,对逻辑电平或者逻辑值的使用也被称为1或0,这简单地表示二值逻辑状态。例如,1指 代高逻辑电平而0指代低逻辑电平。在一个实施例中,存储单元,例如晶体管或闪存单元, 可以具有保存单个逻辑值或者多个逻辑值的能力。然而,已经使用了计算机系统中值的其 它表示。例如,十进制数字10也可以被表示为二进制值1010,以及十六进制字母A。因此, 值包括能够被保存在计算机系统中的信息的任何表示。此外,状态可以由值或者值的部分来表示。例如,第一值,例如逻辑1,可以表示默 认或初始状态,而第二值,例如逻辑0,可以表示非默认状态。另外,在一个实施例中,术语重 置和设置分别指默认的和更新的值或状态。例如,默认值可能包括高逻辑值,即重置,而更新的值可能包括低逻辑值,即设置。注意,值的任何组合可以被用来表示任意数量的状态。上面阐述的方法、硬件、软件、固件或代码集的实施例可以通过存储在机器可访问或机器可读介质上的可由处理部件执行的指令或代码来实现。机器可访问/可读介质包括 提供(即存储和/或传送)机器(例如,计算机或电子系统)可读形式的信息的任何机制。 例如,机器可访问介质包括随机存取存储器(RAM),如静态RAM(SRAM)或动态RAM(DRAM); ROM ;磁或光存储介质;闪存器件;电存储器件、光存储器件、声存储器件或其它形式的传播 信号(例如,载波、红外信号、数字信号)存储器件等等。例如,机器可以通过从能够保存要 在传播信号上传送的信息的介质接收所述传播信号(例如,载波)来访问存储器件。在说明书中通篇提到“一个实施例”或者“一实施例”意指结合该实施例描述的特 定特征、结构或特性被包括在本发明的至少一个实施例中。因此,短语“在一个实施例中” 或“在一实施例中”在说明书中各处出现并非必须全都指同一实施例。此外,所述特定的特 征、结构或特性可以在一个或更多实施例中以任何适当的方式组合。在前述说明书中,已经参照特定的示例性实施例给出了详细的描述。然而显而易 见的是,可以对本发明作出各种修改和改变而不偏离如所附权利要求书中所给出的本发明 的宽泛精神和范围。因此,说明书和附图是要被视为说明性的而非限制性的。此外,前面对 实施例和其它示例性语言的使用并非必须指同一实施例或同一实例,而是可以指不同的或 相异的实施例,以及可能地指同一实施例。
权利要求
一种装置,包括执行逻辑,用于执行涉及与数据项相关联的存储器地址的事务存储器访问操作;存储器,其耦合到处理逻辑,用于响应于所述执行逻辑执行所述事务存储器访问操作而保存所述数据项;以及硬件监控器,其与所述存储器相关联,用于在不管所述存储器的粒度的情况下响应于所述执行逻辑执行所述事务存储器访问操作,而执行所述数据项的有界访问监控。
2.根据权利要求1所述的装置,其中,所述硬件监控器是响应于所述执行逻辑执行用 户级指令而可读并且可修改的。
3.根据权利要求1所述的装置,其中,所述存储器包括数据高速缓存,并且其中,与所 述数据高速缓存相关联的硬件监控器包括与所述数据高速缓存的多个高速缓存行相对应 的多个读监控器和多个写监控器。
4.根据权利要求3所述的装置,其中,所述数据高速缓存的所述多个高速缓存行中的 数个高速缓存行保存与所述多个高速缓存行的边界未对齐的数据项。
5.根据权利要求4所述的装置,其中,所述事务存储器访问操作包括事务载入,并且其 中,与所述数据高速缓存相关联、用于在不管所述存储器的粒度的情况下响应于所述执行 逻辑执行所述事务载入而执行所述数据项的有界访问监控的硬件监控器包括所述多个读 监控器中的数个读监控器,所述数个读监控器对应于所述多个高速缓存行中保存所述数据 项的至少一部分的数个高速缓存行,所述数个读监控器响应于所述执行逻辑执行所述事务 载入而被更新到监控读状态。
6.根据权利要求5所述的装置,其中,所述事务存储器访问操作包括事务存储,并且其 中,与所述数据高速缓存相关联、用于在不管所述存储器的粒度的情况下响应于所述执行 逻辑执行所述事务存储而执行所述数据项的有界访问监控的硬件监控器包括所述多个写 监控器中的数个写监控器,所述数个写监控器对应于所述多个高速缓存行中保存所述数据 项的至少一部分的数个高速缓存行,所述数个写监控器响应于所述执行逻辑执行事务写操 作而被更新到监控写状态。
7.根据权利要求6所述的装置,其中,当所述数个读监控器中对应于所述数个高速缓 存行中的一高速缓存行的一读监控器被更新到所述监控读状态时,响应于控制逻辑检测到 对所述一高速缓存行的外部写请求,所述控制逻辑检测到事务冲突。
8.根据权利要求6所述的装置,其中,当所述数个写监控器中对应于所述数个高速缓 存行中的一高速缓存行的一写监控器被更新到所述监控写状态时,响应于控制逻辑检测到 对所述一高速缓存行的外部读请求,所述控制逻辑检测到事务冲突。
9.根据权利要求6所述的装置,其中,响应于所述执行逻辑执行用户级清除操作,所述 数个读监控器和所述数个写监控器要被重置为非监控状态。
10.根据权利要求6所述的装置,其中,所述数个包括大于1的整数个。
11.根据权利要求1所述的装置,其中,所述硬件监控器基于所述数据项的大小来与所 述存储器动态相关联。
12.根据权利要求11所述的装置,其中,所述硬件监控器基于所述数据项的大小来与 所述存储器动态相关联包括逻辑响应于所述数据项的大小大于所述存储器的一行并且所 述执行逻辑执行所述事务存储器访问操作,动态地从读监控器和写监控器的池向所述存储器的多个行指派读监控器和写监控器,所述多个行保存所述数据项的至少一部分。
13.根据权利要求12所述的装置,其中,与所述存储器相关联、用于在不管所述存储器 的粒度的情况下响应于所述执行逻辑执行所述事务存储器访问操作而执行所述数据项的 有界访问监控的硬件监控器包括指派给所述多个行、响应于所述执行逻辑执行事务载入 操作而被设置为监控读状态的读监控器,和指派给所述多个行、响应于所述执行逻辑执行 事务存储操作而被设置为监控写状态的写监控器。
14.一种处理器,包括用户可访问寄存器,其保存用于指示所述处理器的非选择性工作模式的非选择性值, 和用于指示所述处理器的选择性工作模式的选择性值;控制逻辑,其耦合到所述用户可访问寄存器,用于响应于所述用户可访问寄存器保存 有所述选择性值,而基于选择准则来确定是否要监控存储器访问操作;以及硬件属性,用于响应于所述用户可访问寄存器保存有所述非选择性值或者所述控制逻 辑基于所述选择准则确定要监控所述存储器访问操作,而跟踪对存储器进行的所述存储器 访问操作。
15.根据权利要求14所述的装置,其中,所述硬件属性与高速缓冲存储器相关联,所述 高速缓冲存储器保存与所述存储器访问操作涉及的存储器地址相关联的数据元素,并且其 中,所述硬件属性跟踪对存储器进行的所述存储器访问操作包括响应于所述处理器执行 所述存储器访问操作,将所述硬件属性更新为已访问状态,来指示所述数据元素已经被访 问。
16.根据权利要求14所述的装置,其中,所述非选择性值包括第一逻辑值,而所述选择 性值包括第二逻辑值。
17.根据权利要求14所述的装置,其中,所述选择准则包括译码逻辑可识别的、用来指 示操作要被监控的操作码,并且其中,所述控制逻辑基于所述操作码来确定是否要监控存 储器访问操作包括所述译码逻辑检测到所述操作码与所述存储器访问操作相关联。
18.根据权利要求14所述的装置,其中,所述选择准则包括从以下项组成的组中选择 的、由用户级软件在第二用户可访问寄存器中规定的准则一范围内的虚拟地址、一范围内 的物理地址、存储器类型、输入/输出(I/O)地址空间、保护域地址空间、操作码、前缀,以及 数据类型。
19.根据权利要求18所述的装置,其中,所述控制逻辑基于选择准则来确定是否要监 控存储器访问操作包括将与所述存储器访问操作相关联的准则与所述选择准则进行比 较,并基于所述准则与所述选择准则的比较来确定要监控所述存储器访问操作。
20.根据权利要求18所述的装置,其中,所述选择准则是由用户级软件在第二用户可 访问寄存器中规定的。
21.一种装置,包括遇到存储器访问操作的逻辑,所述存储器访问操作涉及与要被监控的数据项相关联的 存储器地址;包括多个行的高速缓冲存储器的数据阵列,其中,响应于所述逻辑遇到所述存储器访 问操作,所述多个行中的数个行保存所述数据项;以及所述高速缓冲存储器的一致性状态阵列,其包括对应于所述多个行中的每一个的状态条目,其中,响应于第一数个行保存有所述数据项,对应于保存有所述数据项的数个行的状 态条目中的每一个被更新为表示被监控的一致性状态。
22.根据权利要求21所述的装置,其中,所述被监控的一致性状态包括从以下项组成 的组中选择的一致性状态修改读(MR)状态、修改写(MW)状态、修改读写(MRW)状态、独占 读(ER)状态,以及共享写(SR)状态。
23.根据权利要求22所述的装置,其中,与不是所述数个行之一的行相关联的状态条 目表示非监控状态,并且其中,所述非监控状态包括修改独占共享无效(MESI)状态。
24.根据权利要求21所述的装置,响应于接收到与所述被监控的一致性状态冲突的外 部访问请求,与所述高速缓冲存储器相关联的控制逻辑检测到冲突。
25.根据权利要求24所述的装置,其中,与所述被监控的一致性状态冲突的外部访问 请求包括所述外部访问请求包括外部写请求,而所述被监控的一致性状态包括修改独占 共享无效(MESI)状态的读版本。
26.根据权利要求24所述的装置,还包括状态寄存器,响应于所述控制逻辑检测到所 述冲突,所述状态寄存器被所述控制逻辑更新为冲突值。
27.根据权利要求21所述的装置,其中,涉及与要被监控的数据项相关联的存储器地 址的存储器访问操作在用户级软件中被标识为要被监控的存储器访问操作。
28.根据权利要求27所述的装置,其中,遇到所述存储器访问操作的逻辑包括译码器 逻辑。
29.根据权利要求21所述的装置,其中,所述数个行包括数目多于一个的行。
30.一种系统,包括处理器,其包括高速缓冲存储器,其保存要被所述处理器执行的事务存储器访问操作涉及的数据项;硬件属性,其与所述高速缓冲存储器相关联,用于响应于所述处理器执行所述存储器 访问操作,以与所述高速缓冲存储器的行未对齐的所述数据项的粒度来表示所述数据项的 访问状态,其中,所述访问状态与所述事务存储器访问操作的类型相关联;以及系统存储器,其被耦合到所述处理器,用于保存所述数据项的非缓存的拷贝。
31.根据权利要求30所述的系统,其中,与所述事务存储器访问操作的类型相关联的 访问状态包括响应于所述事务存储器访问的类型为载入类型的事务读状态,和响应于所 述事务存储器访问的类型为存储类型的事务写状态。
32.根据权利要求30所述的系统,其中,与所述高速缓冲存储器相关联的、用于表示访 问状态的硬件属性是从以下项组成的组中选择的位向量、编码值和状态值。
33.根据权利要求30所述的系统,其中,所述硬件属性包括与第一线程相关联的、用于 响应于所述处理器的所述第一线程执行所述存储器访问操作而以与所述高速缓冲存储器 的行未对齐的所述数据项的粒度来表示所述数据项的针对所述第一线程的访问状态的硬 件属性,并且其中,所述硬件属性被复制,以与共享对所述高速缓冲存储器的访问的第二线 程相关联,用于响应于所述处理器的所述第一线程执行涉及所述数据项的第二存储器访问 操作而以与所述高速缓冲存储器的行未对齐的所述数据项的粒度来表示所述数据项的针 对所述第二线程的第二访问状态。
34.一种方法,包括确定是否要监控涉及数据项的存储器访问操作;在高速缓存的数个行中缓存所述数据项;以及响应于确定要监控所述存储器访问操作,而进行以下操作确定与所述高速缓存相关联的硬件属性,以对所述数据项进行限界;以及更新所述硬件属性,以表示与所述存储器访问操作的类型相关联的访问状态。
35.根据权利要求34所述的方法,其中,确定是否要监控涉及数据项的存储器访问操 作是基于执行所述存储器访问操作的处理器的工作模式。
36.根据权利要求34所述的方法,其中,确定是否要监控涉及数据项的存储器访问操 作是基于用户级软件将所述存储器访问操作标识为要被监控的操作。
37.根据权利要求34所述的方法,其中,确定与所述高速缓存相关联的硬件属性以对 所述数据项进行限界包括动态地指派与未和所述数个行对齐的所述数据项相关联的硬件 属性。
38.根据权利要求34所述的方法,其中,确定与所述高速缓存相关联的硬件属性以对 所述数据项进行限界包括确定一致性状态条目中与所述数个行相关联的硬件属性位,并 且其中,更新所述硬件属性以表示与所述存储器访问操作相关联的访问状态包括更新一 致性状态条目中与数个行相关联的硬件属性,以表示与所述存储器访问操作的类型相关联 的被监控的一致性状态。
39.根据权利要求34所述的方法,其中,与所述存储器访问操作的类型相关联的访问 状态包括响应于所述存储器访问操作的类型包括读类型的监控读状态,和响应于所述存 储器访问操作的类型包括写类型的监控写状态。
40.根据权利要求34所述的方法,还包括响应于所述存储器访问操作的执行之后的外部访问请求,基于所述外部访问的类型和 与所述存储器访问操作的类型相关联的访问状态来检测冲突;响应于检测到所述冲突,使用所述处理器中的状态寄存器来向软件报告所述冲突;以及响应于使用所述处理器中的状态寄存器向软件报告所述冲突,执行软件处理机来处理 所述冲突。
全文摘要
本文描述了用于用硬件来监控存储器访问以支持事务执行的方法和装置。属性监控对数据项的访问,其中不用考虑以物理存储结构粒度进行检测,但是保证至少以数据项粒度进行监控。例如,属性被添加到高速缓存的状态位,以实现新的高速缓存一致性状态。一旦对数据项进行了可以选择性确定的被监控的存储器访问,与所述数据项相关联的一致性状态被更新为监控状态。因此,通过将请求类型与所述数据项的被监控的一致性状态相组合来检测对所述数据项的无效请求。
文档编号G06F9/38GK101814018SQ20091100028
公开日2010年8月25日 申请日期2009年12月25日 优先权日2008年12月30日
发明者E·科亨, G·谢弗, O·马古利斯, R·萨德, S·赖金, V·巴辛 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1