【问题标题】:x86/64 vs ARM cache miss/branch mispredict penaltyx86/64 与 ARM 缓存未命中/分支错误预测惩罚
【发布时间】:2016-01-18 07:27:38
【问题描述】:

对于 ARM 和 x86/64 处理器,缓存未命中和分支预测错误之间是否存在显着或根本的区别?

我了解,行驶里程可能会因机器的具体型号和整体配置而异。但还是想知道有没有什么。

【问题讨论】:

  • AFAIK 否,因为这些是已知的优化主题(理论上)。
  • 只是在 x86/64 处理器实现中,更重要的是在主板实现中,您的结果会有所不同,因此对于其他架构而言,这种担心是毫无意义的。 arm 实现的差异甚至比 x86 之间的差异还要大,因为 arm 只覆盖芯片的一小部分,内存接口是其他人的 IP,外设和其他总线的仲裁也是如此。

标签: performance x86 arm cpu cpu-architecture


【解决方案1】:

基本上,~32MHz 3 级 Cortex-M0 流水线的工作方式与~3GHz 40 级 NetBurst P4 流水线相同 - 如果下一条指令/数据尚不可用,您只需等待直到它是。

实际的周期数、时序和其他一切将取决于许多不同的微架构/系统/实现细节,即使在单个架构内也有很大差异(将 NetBurst P4 与 486DX-40 进行比较,或将 Cortex-M0 与 X 进行比较-例如基因 2)。

【讨论】:

  • IIRC,在 Intel Haswell 等现代 CPU 上的错误预测惩罚在从 uop 缓存运行时大约为 15 个周期,当指令直接来自解码器时为 19 个周期。错误预测惩罚不是完整的流水线长度,而是提取到可以检测到错误预测的点。 (现代 Intel CPU 很聪明,不会在检测到错误预测时刷新不需要刷新的内容。)您可以在 agner.org/optimize 找到许多 x86 微架构的编号。
猜你喜欢
  • 2014-04-30
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 2020-04-22
  • 2019-10-18
  • 1970-01-01
  • 2016-10-19
相关资源
最近更新 更多