利用用于聚结内存事务的指示的方法和系统的制作方法_2

文档序号:8395768阅读:来源:国知局
一半 导体芯片或裸片(die)中,诸如处理器可以被称为微处理器。随后开发的处理器包括多个 IPU,这种处理器通常被称为多处理器。所述多处理器计算机系统(处理器)中的每个这 种处理器可以包括单个或共享超高速缓冲器、内存接口、系统总线、地址转换机构等等。虚 拟机和指令集架构(ISA)仿真器将一层软件添加给处理器,其按照单一硬件处理器中单一 IPU的时间片的利用率为该虚拟机提供多个"虚拟处理器"(也称为处理器)。随着技术进 一步演进,开发了多线程处理器,其使得具有单一多线程IPU的单个硬件处理器能够提供 一种同时执行不同程序的线程的能力,因此,多线程处理器的每个线程对操作系统看起来 像一个处理器。随着技术进一步演进,能够将多个处理器(每个都具有IPU)置于单个半导 体芯片或裸片(die)上。这些处理器被称为处理器核或仅仅称为核。因此诸如例如处理器、 中央处理单元、处理单元、微处理器、核、处理器核、处理器线程以及线程的术语通常被可互 换地使用。在不脱离此处的教导的情况下,可以通过包括前面所示的那些术语的任何或所 有处理器来实施此处实施例的方面。其中此处使用术语"线程"或"处理器线程",期望的是, 在处理器线程实施方式中可以具有该实施例的具体优点。
[0031] 基于Inte「K的实施例中的事务执行
[0032] 在通过整体引用包含在此处的2012年2月披露的" IntelK Architecture Instruction Set Extensions Programming Reference (Intel?:架构指令集扩展编程参 考)"319433-012A中,第8章教导了多线程应用利用数量增加的CPU核来获得更高的性能。 不过,多线程应用的写入需要编程者理解并考虑到在多线程之间的数据共享。对共享数据 的存取通常需要同步机制。这些同步机制被用于通常通过使用受到锁定保护的关键部分确 保多线程通过对被应用到共享数据的操作串行化更新共享数据。由于串行化限制并行性, 程序员试图限制由于同步性导致的开销。
[0033] Imel'K)事务同步扩展(Intel? TSX)容许处理器动态确定线层是否必须通过锁定 保护关键部分而被串行化,并且仅仅在需要的时候执行该船汉化。这使得处理器因为动态 地不必要的同步化而暴露和实施被隐藏在应用中的并行性。
[0034] 采用英特尔TSX,专用于程序员的代码区域(也称为"事务区域"或仅仅称为"事 务")被事务性地执行。如果事务执行成功完成,则在事务区域内执行的所有内存操作从其 它处理器角度看将看起来已经即时发生。处理器使得在事务区域内执行的被执行事务的内 存操作,仅仅在成功提交发生时,即,在所述事务成功地完成执行时,对其它处理器是可见 的。该处理通常被成为原子提交(commit)。
[0035] 因特尔TSX提供两个软件接口来指定用于事务执行的代码的区域。硬件锁省略 (Hardware Lock Elision(HLE))是一种老式(legacy)可兼容指令集扩展(包括XACQUIRE 和XRELEASE前缀),用于指定事务区域。受限事务内存(Restricted Transactional Memory (RTM)是一种用于程序员以比可能采用HLE更灵活的方式限定事务区域的新指令集 接口(包括XBEGIN、XEND以及XAB0RT指令)。所述HLE用于更喜欢普通互斥编程模型的 向后兼容性并且愿意在老式硬件上运行HLE使能软件并且也愿意在具有HLE支持的硬件上 利用新锁定省略能力的程序员。RTM用于更喜欢灵活接口而不喜欢事务执行硬件的程序员。 此外,因特尔TSX还提供了 XTEST指令。该指令容许软件查询逻辑处理器是否正在由HLE 或RTM所识别的事务区域中执行。
[0036] 由于成功的事务执行确保原子(atomic)提交,处理器在没有明确同步的情况下 最有利地执行代码区域。如果对该具体执行而言同步没有必要,则执行可以在没有任何交 叉线程(cross-thread)串行化的情况下提交。如果处理器不能原子化地提交,则该乐观 (optimistic)执行失败。当发生这种情况时,处理器将回滚该执行,一种被称为事务中止 的处理。在事务中止时,处理器将放弃在由该事务所使用的内存区域内执行的所有更新,恢 复架构状态以便看起来就像从来没有发生过最有利执行一样,并且非事务性地继续开始执 行。
[0037] 处理器可能会因为各种原因而执行事务中止。中止事务的主要原因是源于在正在 事务地执行的逻辑处理器和另一个逻辑处理器之间的冲突内存访问。这种冲突内存访问会 防止成功事务执行。在事务区域内的从其中读取的内存地址构成事务区域的读取集而事务 区域内向其中写入的地址构成该事务区域的写入集。因特尔TSX以超高速缓存线的粒度维 持所述读取集和写入集。如果另一个逻辑处理器读取作为事务区域的写入集的部分的位置 或者写入作为事务区域的读取集或写入集的部分的位置,则出现冲突内存访问。冲突访问 通常意味着对该代码区域需要串行化。由于英特尔TSX以超高速缓存线的粒度检测数据冲 突,因此被置于相同超高速缓存线中的不相关数据位置将被检测为冲突,其将导致事务中 止。事务中止也会由于受限的事务资源的出现。例如,在区域中的被访问的数据量可能被 超过专用实施方式的容量。此外,指令和系统事件可能会导致事务中止。频繁的事务中止 导致循环浪费和效率日益低下。
[0038] 硬件锁省略
[0039] 硬件锁省略(HLE)为程序员提供一种老式可兼容指令集接口以便使用事务执行。 HLE提供两个新指令前缀提示(prefix hint) :XACQUIRE和XRELEASE.
[0040] 采用HLE,程序员将XACQUIRE前缀添加到指令的前部,其被用来获取正在保护关 键部分的锁。处理器将所述前缀当作提示(hint)以便省略所述锁获取操作。即使所述锁 获取具有对该锁的相关联写入操作,该处理器既不将所述锁的地址添加到所述事务区域的 写入集,其也不向该锁发出任何写入请求。相反,该所的地址被添加到所述读取集。逻辑处 理器进入事务执行。如果在加有前缀XACQUIRE指令之前可以获得所述锁,那么所有其他处 理器之后将继续将该锁视为可用。由于所述正事务地执行的逻辑处理器既不将所述锁的地 址添加到其写入集也不对该锁外部地执行可视写入操作,因此其它逻辑处理器能够读取该 锁而不导致数据冲突。这使得其它逻辑处理器也进入和并行执行受到所述锁保护的关键部 分。处理器自动检测在事务执行期间发生的任何数据冲突并且将在必要时执行事务中止。
[0041] 尽管所述省略的处理器不对所述锁执行任何外部写入操作,但是该硬件确保在该 锁上的操作的程序顺序。如果该省略的处理器自身读取所述锁在该关键(critical)部分 中的值,其将显得就像该处理器已经获取了所述锁一样,即,该读取将返回非省略值。这种 特性使得HLE执行在功能上等同于没有HLE前缀的执行。
[0042] XRELEASE前缀能够被加载指令的前部,其被用于释放保护关键部分的锁。释放所 述锁包括对锁的写入。如果该指令将恢复该锁的值到该锁在对同一锁的加有前缀XACQUIRE 的锁获取操作之前所具有的值,则处理器省略与该锁的释放相关联的外部写入请求,并且 不将该锁的地址添加到所述写入集。随后处理器试图提交所述事务执行。
[0043] 采用HLE,如果多线程执行受
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1