【问题标题】:What is a processor hint?什么是处理器提示?
【发布时间】:2019-07-30 12:57:52
【问题描述】:

英特尔® 64 和 IA-32 架构软件开发人员手册中,处理器“提示”到底是什么?

我在几个部分看到它:

  1. PREFETCHWT1的描述中-Prefetch hint T1 有意写作。

  2. 在 SSE4 的介绍中“该技术还提供了一个 提示可以在读取时提高内存吞吐量 不可缓存的 WC 内存类型。”这让我想到了 this answer 关于 WC 内存,但没有明确说明什么是提示。

  3. 接下来我阅读了 SSE4 指令之一,可以使用 “流媒体”提示。这让我找到了SSE4 Programming reference 我发现提示可以是时间的或非时间的。

  4. 流式加载提示指令本身MOVNTDQA “提供非时间提示”

  5. 进一步阅读手册,我发现事务同步 Extensions(TSX) 在XACQUIREXRELEASE

  6. 在描述VGATHERPF0DPD 和其他人时,在 AVX 512 位部分 (还有 7 种以上类型的指令都带有 /PS 选项)。在这些情况下,我们使用 T0 或 T1 提示 dword 或 qword 索引。

  7. 我看到手册中使用的hint最有见地的一次(这个列表是 按顺序)出现在第 10.4.6.1 节中

“非时间 提示指示处理器将数据存储到内存中,而无需 将数据写入缓存层次结构。”

这是在涉及MOVNTQMOVNTPSMASKMOVQ 的“可缓存性控制指令”部分中,那么临时提示是否会写入缓存行?我推断这好像与非时间提示相反?

我使用的其他链接试图拼凑处理器提示的含义:

Wikipedia page on cache lines ...说提示可以准备、丢弃或驱逐缓存行(也称为缓冲区?)。那么提示只是与缓存行相关的指令吗?

谢谢

【问题讨论】:

  • 提示只是有关某些特定用法的额外信息,然后 cpu 可以将其用于优化。提示也可以忽略。
  • 提示是您提供的额外信息,以帮助处理器在提供多个选择且无法仅根据上下文做出决定时做出正确决定(该术语并非特定于处理器)。
  • 请举例?
  • 例如,MOVNTDQAMOVDQA 相同,只是它告诉处理器您不会重用该值。那就是“非时间暗示”。然后,cpu 可以避免将数据加载到缓存中。 (但你已经发现了。)还有分支预测提示会告诉 cpu 是否应该进行跳转。
  • MOVNTDQA 本身并不是一个提示。它有一个适当的功能:它进行数据传输。该提示仅提供有关您打算如何使用数据的额外信息。 XACQUIRE/XRELEASE 是提示,它们是应用于其他指令的前缀。提示也不需要处理缓存。 XACQUIRE 不处理缓存。分支提示不处理缓存。提示是您可以传递给 cpu 的任何一般信息,以便它可以更好地完成工作。它应该仍然能够在没有提示的情况下执行相同的工作,但可能会更慢。

标签: assembly x86 intel instructions


【解决方案1】:

提示是指令操作的一部分,可能无法以所述方式实现。它可能根本没有实现,也可能以不同的方式实现。提示的具体作用可能取决于指令执行的具体情况。一般来说,如何实现提示不会影响 CPU 的架构状态。对于缓存相关的提示,这意味着缓存中的最终结果可能会有所不同,尽管对于当前处理器,至少缓存将保持一致状态。 (其他处理器可能会看到当前处理器以与正常 x86 内存排序规则不一致的顺序进行的内存访问,因为某些提示可能违反这些规则。)

例如,非临时提示告诉处理器避免为给定的内存引用用尽缓存中的空间。通常使用它们是因为程序员认为内存中的位置不会被 CPU 再次访问,因此使用缓存会浪费空间。写入视频内存是一个常见的例子,因为视频内存几乎总是被程序用作“只写”内存。

在实践中,非临时提示的操作可能会有很大差异,这取决于特定的 CPU、是否使用了写组合 (WC) 内存、是读还是写以及具体的指令。有关一些可能的差异,请参阅BeeOnRope's answer 关于非临时负载和正常内存的问题。另请注意,鉴于缓存的异步特性,任何与缓存相关的确切行为都很难确定为预取,并且其他处理器的操作很容易意外驱逐或引入缓存行。

【讨论】:

    猜你喜欢
    • 2015-08-28
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多