gpt4 book ai didi

c++ - 英特尔®事务同步扩展新指令(TSX-NI)与英特尔TSX有区别吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:48 26 4
gpt4 key购买 nike

我在英特尔页面上找到了

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



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

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

最佳答案

似乎只是一种营销手段。

在Internet上,Intel手册或Intel ISA扩展手册中都找不到“TSX-NI”的引用。

引用英特尔[1]

Intel Transactional Synchronization Extensions (Intel TSX) comes in two flavours: HLE and RTM.



由于它们的实现,这两个方面是分离的(可以彼此独立地支持),并且只有RTM引入了新的指令。
因此,他们可能指的是RTM。

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

因此,也许这只是市场上正确的说法:“此CPU支持我们最新的TSX功能!”。

作为引用,我在假定“TSX-NI”指的是“TSX RTM”的前提下,简要介绍了英特尔TSX的两个部分。
完整的引用资料可以在英特尔手册1-第15章中找到。

LE

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

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

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

事务由 xacquirexrelease分隔。
它们可以嵌套,但是在深度上(事务被中止超过)和可以消除的不同锁的数量有限制(超出了CPU不会取消新锁但不会中止事务的限制)。
当嵌套事务中止时,CPU重新开始执行最外面的事务。
xacquire(操作码 F2,与 repne相同)用于将获取锁(即写入锁)并标记事务开始的指令的前面。
该读操作不会添加到写集中(或者因为每个线程向锁写入操作都不会发生并发操作,这会立即中止任何后续事务)。
而是将其添加到读取集。
xrelease(操作码 F3)用于将释放锁并标记事务结束的指令之前。
必须将 xreleasexacquire一起使用,以与它配对并完成交易。
xacquire仅可与以下指令的 lock d版本一起使用: ADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCHG8B, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADD, XCHG
具有相同指令的 xrelease,以及没有 MOV mem, reg前缀的 MOV mem, immlock

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

RTM

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

它引入了三个新指令: xbeginxendxabort
它们只是已指定的通用事务执行功能的新接口(interface)。
xbegin必须提供一个指向后备代码路径的指针作为相对偏移量。
每当事务提交失败时,就会执行此代码。
在这种情况下, eax保留了中止的原因。 xend结束事务并指示CPU提交它。 xabort使程序员可以使用自定义错误代码显式中止事务。

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

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

混合HLE和RTM

引用英特尔:

The behaviour when HLE and RTM are nested together—HLE inside RTM or RTM inside HLE—is implementation specific. However, in all cases, the implementation will maintain HLE and RTM semantics. An implementation may choose to ignore HLE hints when used inside RTM regions, and may cause a transactional abort when RTM instructions are used inside HLE regions. In the latter case, the transition from transactional to non-transactional execution occurs seamlessly since the processor will re-execute the HLE region without actually doing elision, and then execute the RTM instructions.

关于c++ - 英特尔®事务同步扩展新指令(TSX-NI)与英特尔TSX有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42507787/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com