gpt4 book ai didi

x86 - CPUID 会序列化推测数据缓存吗?

转载 作者:行者123 更新时间:2023-12-01 13:16:40 27 4
gpt4 key购买 nike

我在 Intel Vol.2 的多个指令条目中找到了推测数据缓存过程的描述。

例如,lfence :

Processors are free to fetch and cache data speculatively from regions of system memory that use the WB, WC, and WT memory types. This speculative fetching can occur at any time and is not tied to instruction execution. Thus, it is not ordered with respect to executions of the LFENCE instruction; data can be brought into the caches speculatively just before, during, or after the execution of an LFENCE instruction.

此外,我从在线资源中发现推测缓存也会将数据从较远的缓存移动到较近的缓存。

我想知道最强的序列化指令 CPUID 是否会阻止推测性缓存越过屏障。

我已经搜索了 Intel Vol.2 中的 CPUID 条目和 Intel Vol.3 中的“序列化指令”部分。但它没有显示任何有关推测性数据缓存的内容。

最佳答案

LFENCE 已经足够强大(至少在实践中)可以阻止 CPU 在它之后实际查看加载指令,但是 CPU 可以自由地推测加载,原因是其他

停止这需要通过障碍进行某种前瞻,以找出要禁用 HW 预取的地址。那根本不切实际。 CPUID 或其他序列化指令在停止加载预取方面并不比 LFENCE 强。

CPU 总是允许从 WB 和 WT 区域/页面中的内存中推测性地获取。 Intel 的优化手册记录了一些有关其某些 CPU 模型中的硬件预取器的内容,因此您实际上可以避免在 CPUID 之前执行可能触发此类预取的操作。

(WC 是弱有序的不可缓存+写入组合,但理论上也允许推测性提取。在现实生活中,这可能只发生在分支预测错误的阴影下,而不是硬件预取。它通常不像 WB 那样可缓存和 WT。)


如果您要对真实的 CPU 进行微基准测试,某些类型的微基准测试的技巧是找到不会触发 HW 预取的访问模式,或者禁用 HW 预取器。


也许在理论上,您可以拥有一个 x86 CPU,它在指令流中预测加载/存储指令并推测性地预取它们,与实际执行它们分开(英特尔对 LFENCE 的定义会阻止).我认为也没有什么可以阻止它跨 CPUID 执行此操作。

可能没有人会设计这样的CPU,因为

  1. 这不值得晶体管/功率。一旦正常的无序执行可以开始预取就已经足够好了。除了绝对/RIP 相对地址或直接跳转之外,您需要 OoO 核心的寄存器值才能获得有用的预取地址。
  2. 回顾 LFENCE/CPUID 是有悖常理的;它们非常罕见,以至于在 Spectre 时代击败超过它们的负载的投机性“执行”是重点之一。

关于x86 - CPUID 会序列化推测数据缓存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54192913/

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