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

文档序号:8395768阅读:来源:国知局
到相同锁保护的关键部分但是它们没有对彼此的数 据执行任何冲突操作,则这些线程能够并行执行并且无需串行化。即使软件对共用锁使用 锁获取操作,硬件也会识别到这一点、省略该锁、并且对两个线程执行关键部分而不通过该 锁要求任何通讯一如果动态地该通讯不是必要的话。
[0044] 如果处理器不能事务地执行该区域,则该处理器将非事务地执行该区域并且没有 省略。能HLE的软件具有与底层基于非HLE锁的执行相同的转发进度(forward progress) 保证。对于成功HLE执行,所述锁和所述关键部分必须遵循某些指南。这些指南仅仅影响性 能;并且没有遵循这些指南将不会导致功能性故障。没有HLE支持的硬件将忽略XACQUIRE 和XRELEASE前缀提示并且将不执行任何省略,因为这些前缀对应于REPNE/REPE IA-32前 缀,其在其中XACQUIRE和XRELEASE有效的指令上被忽略。重要的是,HLE与现有基于锁的 编程模型兼容。提示的适当使用将不会导致功能性程序错误(bug),尽管可能暴露已经在代 码中的潜在程序错误。
[0045] 受限的事务内存(RTM)提供用于事务执行的灵活软件接口。RTM为程序员提供三 个新指令一XBEGIN、XEND以及XAB0RT-以便启动、提交以及中止事务执行。
[0046] 程序员使用XBEGIN指令来指定事务代码区域的开头以及使用XEND指令指定事务 代码区域的结尾。如果RTM区域不能被事务性地成功执行,则XBEGIN指令获取向回落指令 地址提供相对偏移的操作数。
[0047] 处理器可以因为多种原因而中止RTM事务执行。在许多情况下,硬件自动检测事 务中止条件并从具有与在XBEGIN指令开始处呈现的架构状态对应的架构状态以及被更新 以描述中止状况的EAX寄存器的回落指令地址重启执行。
[0048] XAB0RT指令使得程序员清楚地中止RTM区域的执行。XAB0RT指令采取8比特中 间变元(i_ediate argument),其被加载到EAX寄存器并因此可用于跟随在RTM中止之后 的软件。RTM指令不具有任何与它们相关联的数据内存位置。尽管硬件不就RTM区域是否 将在任何时候事务性地成功提交提供保证,但是期望跟随在推荐的指南之后的大部分事务 将事务性地成功提交。不过,程序员必须总是在回落路径中提供可替代代码序列以便保证 转发进度。这可能与获取锁和非事务性地执行指定代码区域一样简单。而且,总是在给定 实施方式上中止的事务可能在未来的实施方式上事务性地完成。因此,程序员必须确保用 于事务区域的代码路径以及替代性代码序列在功能上得到测试。
[0049] HLE支持的检测。
[0050] 如果CPMD. 07H. EBX. HLE[比特4] = 1,则处理器支持HLE执行。不过,应用可以 使用HLE前缀(XACQUIRE和XRELEASE)而不核查处理器是否支持HLE。没有HLE支持的处 理器忽略这些前缀并将执行所述代码而不进入事务执行。
[0051] RTM支持检测
[0052] 如果CPMD. 07H. EBX. RTM [比特11] = 1,则处理器执行RTM执行。在处理器使用 RTM指令(XBEGIN、XEND、XABORT)之前处理器必须核实该处理器是否支持RTM。这些指令在 被用于不支持RTM的处理器上时将生成#UD例外。
[0053] XTEST指令的检测
[0054] 如果处理器支持HLE或RTM则处理器支持XTEST指令。应用在使用XTEST指令之 前必须核实这些特征标志的任何一个。该指令在被用于不支持HLE或RTM的处理器上时将 生成而D例外。
[0055] 查询事务执行状况
[0056] XTEST指令能够被用于确定由HLE或RTM所指定的事务区域的事务状况。要注意 的是,尽管HLE前缀在不支持HLE的处理器上被忽略,但是XTEST指令将在被用于不支持 HLE或RTM的处理器上时将生成#UD例外。
[0057] HLE锁的要求
[0058] 对于要成功地事务性地提交的HLE执行,所述锁必须满足某些特性并且对该锁的 访问必须遵循某些指南。
[0059] 带有前缀XRELEASE的指令必须将所省略的锁的值恢复到其在所述所获取之前 所具有的值。这使得硬件能够通过不将他们添加到所述写入集而安全地省略锁。所述锁 释放(带有前缀XRELEASE)指令的数据尺寸和数据地址必须匹配所述锁获取(带有前缀 XACQUIRE)的数据尺寸和数据地址并且所述锁不必跨过超高速缓存线边界。
[0060] 软件不应采用有XRELEASE前缀的指令之外的任何指令向事务HLE区域内的所省 略的锁写入,否则这种写入会导致事务中止。此外,递归锁(其中,线程在没有第一次释放 所述锁的情况下多次获取同一锁)也可以导致事务中止。需要注意的是,软件能够观察到 关键部分内所省略锁获取的结果。这种线程操作将所述写入的值返回到所述锁。
[0061] 所述处理器自动检测对这些指南的违反情况,并且在不省略的情况下安全地过度 到非事务执行。由于英特尔TSX以超高缓冲线的粒度来检测冲突,因此可以通过省略同一 锁的其他逻辑处理器将对共同位于与所省略锁相同的超高速缓冲线上的数据的写入检测 为数据冲突。
[0062] 事务嵌套
[0063] HLE和RTM两者都支持嵌套事务区域。不过,事务中止将状态恢复到启动事务执行 的操作:或者是最外面有前缀XACQUIRE的HLE合格指令或者是最外面XBEGIN指令。所述 处理器将所有嵌套事务当作一个事务。
[0064] HLE嵌套和省略
[0065] 程序员可以嵌套HLE区域直到MAX_HLE_NEST_COUNT的具体实现深度。每个逻辑处 理器内部地跟踪该嵌套计数,但是该计数不能用于软件。有前缀XACQUIRE的符合HLE的指 令使得嵌套技术递增,并且有前缀XRELEASE的符合HLE的指令使其递减。逻辑处理器在该 嵌套计数从零变为一时进入事务执行。该逻辑处理器仅仅在嵌套技术变成零时尝试提交。 如果该嵌套计数超过MAX_HLE_NEST_COUNT。
[0066] 除了支持嵌套的HLE区域,该处理器还可以省略多个嵌套锁。该处理器跟踪用于 省略的锁,所述省略对于该锁始于有前缀XACQUIRE的符合HLE的指令并且对于同一锁结 束于有前缀XRELEASE的符合HLE的指令。在任何一次,该处理器能够跟踪直到MAX_HLE_ ELIDED_L0CKS数量个锁定。例如,如果该实施方式支持的MAX_HLE_ELIDED_LOCKS值为二 并且如果程序员嵌套三个HLE标识的关键部分(通过对三个不同锁执行有前缀XACQUIRE 的符合HLE的指令而不对这些锁的任意一个执行插入的有前缀XRELEASE的符合HLE的 指令),那么前两个锁定将被省略,但是第三个锁定将不会被省略(但是将会被添加到事 务的写入集)。不过,该执行依然事务性地继续。一旦遇到用于两个被省略的锁之一的 XRELEASE,通过有前缀XACQUIRE的符合HLE的指令获得的随后的锁将被省略。
[0067] 当所有省略的成对XACQUIRE和XRELEASE已经得到匹配时该处理器尝试提交HLE 执行,嵌套计数变为零,并且这些锁满足要求。如果执行不能原子地提交,那么
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1