6

我在英特尔的页面上找到

https://ark.intel.com/products/97123/Intel-Core-i5-7500-Processor-6M-Cache-up-to-3_80-GHz

该处理器支持 TSX-NI 技术,但我在谷歌上找不到任何有关它的信息。它与英特尔 TSX 相同吗?如果有区别,那么我该如何使用它。

对不起,我的英语不好!:)

4

2 回答 2

7

这似乎只是一种营销点缀。

我在互联网、英特尔手册和英特尔 ISA 扩展手册中都没有找到对“TSX-NI”的引用。

引用英特尔[ 1 ]

英特尔事务同步扩展(英特尔 TSX)有两种风格:HLE 和 RTM。

由于它们的实现,这两个方面是解耦的(可以独立于另一个支持)并且只有 RTM 引入了新指令。
所以他们可能指的是RTM。

我相信首先引入了 HLE,应该有支持 HLE 但不支持 RTM 的处理器(反过来,虽然可能,但似乎不可信)。

所以,也许,这只是营销正确的说法:“这个 CPU 支持我们最新的 TSX 功能!”。


作为参考,我在假设“TSX-NI”指的是“TSX RTM”的情况下,对Intel TSX的两个部分进行了简要介绍。
完整的参考资料可在英特尔手册 1 - 第 15 章中找到。

HLE

HLE(硬件锁省略)部分向后兼容。
我们仍然可以使用CPUID.07H.EBX.HLE[bit 4]测试它的可用性,但它是通过更改指令 前缀repne/的语义来实现的。repe

此功能包含两个“新”前缀:xacquirexrelease. CPU 现在能够进入事务状态,其中每次读取都添加到事务的读取集中,并且每次写入都添加到事务的写入集中,并且不会执行到内存中。
粒度是高速缓存行的大小。

如果一个线程从另一个线程的读集读取,或写入读集或写集,则事务被中止。
CPU 将架构状态恢复为事务开始时的状态,并以非事务方式重新执行指令。
如果事务成功完成,所有写入的内存都会以原子方式完全提交。

事务由xacquire和分隔xrelease
它们可以嵌套,但深度(超过该深度的事务被中止)和可以忽略的不同锁的数量有限制(超过 CPU 不会忽略新锁但不会中止事务)。
当嵌套事务中止时,CPU 重新开始执行最外层事务。

xacquire(操作码F2,与 相同repne)用于获取锁(即写入锁)的指令前面并标记事务的开始。
此读取不会添加到写入集(或者在每个线程都写入锁时不会发生并发,这将立即中止任何后续事务)。
它被添加到读取集中。

xrelease(opcode F3) 用于释放锁并标记事务结束的指令前面。
xrelease必须用在xacquire与它配对并完成事务的同一个锁上。

xacquire只能与lock这些指令的 d 版本一起使用:ADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCHG8B, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADD, XCHG.
xrelease使用相同的说明加上MOV mem, regMOV mem, imm没有lock前缀。

如果存在 HLE(或 RTM),则有一条新指令xtest可用,它将ZF设置为处理器不在事务中。

RTM

RTM(受限事务内存)不向后兼容。
可以用CPUID.07H.EBX.RTM [bit 11]进行测试。

它引入了三个新指令xbeginxendxabort
它们只是已经指定的通用事务执行功能的新接口。

必须提供一个指向回退代码路径的xbegin指针作为相对偏移量。
每当事务提交失败时,都会执行此代码。
在这种情况下eax持有中止的原因。
xend结束事务并指示 CPU 提交它。
xabort让程序员使用自定义错误代码显式中止事务。

英特尔不保证处理器成功提交事务的能力。
虽然 HLE 有一组非常具体的条件,但 RTM 是一种“尽力而为”的功能 - 因此需要备用代码。

RTM 比 HLE 更底层,它允许程序员使用事务内存,无论是否使用锁。

混合 HLE 和 RTM

引用英特尔:

HLE 和 RTM 嵌套在一起时的行为——RTM 中的 HLE 或 HLE 中的 RTM——是特定于实现的。但是,在所有情况下,实现都将保持 HLE 和 RTM 语义。当在 RTM 区域内使用时,实现可能会选择忽略 HLE 提示,并且在 HLE 区域内使用 RTM 指令时可能会导致事务中止。在后一种情况下,从事务执行到非事务执行的转换无缝发生,因为处理器将重新执行 HLE 区域而不实际进行省略,然后执行 RTM 指令。

于 2017-02-28T13:32:29.077 回答
4

TSX-NI 是对先前指令集 (HLE) 的扩展 (RTM)。

来自英特尔页面

硬件锁省略 (HLE)

HLE 是一个与传统兼容的指令集扩展(包括 XACQUIRE 和 XRELEASE 前缀),用于指定事务区域。HLE 适用于喜欢传统互斥编程模型的向后兼容性并希望在旧硬件上运行支持 HLE 的软件,但希望在支持 HLE 的硬件上利用新的锁消除功能的程序员。

受限事务内存 (RTM)

RTM 是一种新的指令集接口(包括 XBEGIN、XEND 和 XABORT 指令),供程序员以比 HLE 更灵活的方式定义事务区域。

RTM 适用于喜欢灵活接口而不是事务执行硬件的程序员。

所以新的集合包括:

XACQUIRE    Prefix hint to the beginning of an HLE transaction region

XRELEASE    Prefix hint to the end of an HLE transaction region

XBEGIN  Transaction begin of an RTM transaction region

XEND    Transaction end of an RTM transaction region

XABORT  Abort an RTM transaction execution

XTEST   Test if executing in a transactional region
于 2017-02-28T14:24:38.673 回答