【发布时间】:2019-07-30 12:57:52
【问题描述】:
在英特尔® 64 和 IA-32 架构软件开发人员手册中,处理器“提示”到底是什么?
我在几个部分看到它:
-
在
PREFETCHWT1的描述中-Prefetch hint T1 有意写作。 -
在 SSE4 的介绍中“该技术还提供了一个 提示可以在读取时提高内存吞吐量 不可缓存的 WC 内存类型。”这让我想到了 this answer 关于 WC 内存,但没有明确说明什么是提示。
-
接下来我阅读了 SSE4 指令之一,可以使用 “流媒体”提示。这让我找到了SSE4 Programming reference 我发现提示可以是时间的或非时间的。
-
流式加载提示指令本身
MOVNTDQA“提供非时间提示” -
进一步阅读手册,我发现事务同步 Extensions(TSX) 在
XACQUIRE和XRELEASE -
在描述
VGATHERPF0DPD和其他人时,在 AVX 512 位部分 (还有 7 种以上类型的指令都带有 /PS 选项)。在这些情况下,我们使用 T0 或 T1 提示 dword 或 qword 索引。 -
我看到手册中使用的hint最有见地的一次(这个列表是 按顺序)出现在第 10.4.6.1 节中
“非时间 提示指示处理器将数据存储到内存中,而无需 将数据写入缓存层次结构。”
这是在涉及MOVNTQ、MOVNTPS、MASKMOVQ 的“可缓存性控制指令”部分中,那么临时提示是否会写入缓存行?我推断这好像与非时间提示相反?
我使用的其他链接试图拼凑处理器提示的含义:
Wikipedia page on cache lines ...说提示可以准备、丢弃或驱逐缓存行(也称为缓冲区?)。那么提示只是与缓存行相关的指令吗?
谢谢
【问题讨论】:
-
提示只是有关某些特定用法的额外信息,然后 cpu 可以将其用于优化。提示也可以忽略。
-
提示是您提供的额外信息,以帮助处理器在提供多个选择且无法仅根据上下文做出决定时做出正确决定(该术语并非特定于处理器)。
-
请举例?
-
例如,
MOVNTDQA与MOVDQA相同,只是它告诉处理器您不会重用该值。那就是“非时间暗示”。然后,cpu 可以避免将数据加载到缓存中。 (但你已经发现了。)还有分支预测提示会告诉 cpu 是否应该进行跳转。 -
MOVNTDQA本身并不是一个提示。它有一个适当的功能:它进行数据传输。该提示仅提供有关您打算如何使用数据的额外信息。XACQUIRE/XRELEASE是提示,它们是应用于其他指令的前缀。提示也不需要处理缓存。XACQUIRE不处理缓存。分支提示不处理缓存。提示是您可以传递给 cpu 的任何一般信息,以便它可以更好地完成工作。它应该仍然能够在没有提示的情况下执行相同的工作,但可能会更慢。
标签: assembly x86 intel instructions