【问题标题】:Is Intel® Transactional Synchronization Extensions New Instruction (TSX-NI) difference from Intel TSX?英特尔® 事务同步扩展新指令 (TSX-NI) 与英特尔 TSX 有何不同?
【发布时间】:2017-02-28 11:38:56
【问题描述】:

我在英特尔的页面上找到了

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

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

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

【问题讨论】:

    标签: c++ assembly x86 intel-tsx


    【解决方案1】:

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

    我在 Internet 上、英特尔手册和英特尔 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 现在能够进入事务状态,每次读取都添加到事务的 read-set 中,并且每次写入都添加到事务的 write-set 中并且不会执行到内存中。
    粒度是高速缓存行的大小。

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

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

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

    xrelease(操作码F3)用于将释放锁并标记事务结束的指令前面。
    xrelease必须用于与xacquire相同的锁与之配对并完成交易。

    xacquire 只能与以下指令的 lockd 版本一起使用: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 嵌套在一起时的行为——HLE 内部 RTM 或 HLE 内部的 RTM — 是特定于实现的。然而,在所有情况下, 实现将维护 HLE 和 RTM 语义。一个实现可能 在 RTM 区域内使用时选择忽略 HLE 提示,并且在 HLE 区域内使用 RTM 指令时可能导致事务中止。在后一种情况下, 从事务性执行到非事务性执行的过渡无缝进行 因为处理器将重新执行 HLE 区域而不实际进行省略,并且 然后执行 RTM 指令。

    【讨论】:

      【解决方案2】:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-03
        • 2014-04-30
        • 2023-03-06
        • 2020-05-12
        • 2012-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多