【发布时间】:2019-08-12 23:11:07
【问题描述】:
我正在阅读 ARM Cortex-A8 数据表,在数据表中 ARM 声明 L2 中丢失的加载数据至少需要 28 个核心周期才能完成,现在我无法想象在这 28 个周期内 CPU 会停止并放置在管道中冒泡或执行其他指令直到加载完成?如果我们有一个基于这个加载结果的分支呢?如果我们在 L2 中再次错过的指令之后有另一个负载怎么办?
【问题讨论】:
-
这就是缓存的原因。如果您使用 dram 运行,28 似乎很小,但引用说“至少”。当然,很大程度上取决于您的系统。当然,如果处理器向前移动所需的指令或数据被这些缓存未命中所阻碍,它将(最终)停止管道。
-
很可能在 L1/L2 中连续出现一个、两个、许多未命中,这会导致每个时钟数十个。如果缓存中只有可用的脏行并且您必须等待写回 dram 发生在读取发生之前,情况会变得更糟。你也可以很幸运,让一个操作导致驱逐,但该操作的结果需要刚刚被驱逐的东西。这就是计算机现在的工作方式,处理器本身并不决定性能。
-
dram 通常不在 arm 域内,因此 arm 只能记录它们的部分。芯片供应商选择 DRAM 技术和 IP,电路板供应商选择 DRAM 部件,并且在某个地方,有人在该 DRAM 的选择范围内选择速度。这些选择被添加到 arm 记录的数字中。
标签: arm cpu pipeline cpu-cache cortex-a