ARM Cortex-A8 L2 缓存未丢失开销



我正在阅读 ARM Cortex-A8 数据手册,在数据手册中 ARM 表示,L2 中遗漏的负载数据至少需要 28 个内核周期才能完成,现在我无法想象在这 28 个周期中,CPU 会停滞并在管道中放置气泡或执行其他指令,直到此负载完成? 如果我们有一个基于此加载结果的分支怎么办? 如果我们在该指令之后有另一个负载怎么办在 L2 中再次错过??

即使在缓存未命中的情况下,管道也会继续,直到 RAW(写入后读取(依赖项咬合。

ldr     r12, [r0], #4
subs    r12, r12, r1
beq     end_loop

由于 RAW 依赖性,subs指令不能与ldr同时执行。
由于 CPSR RAW 依赖性,beq指令无法与subs同时执行。

总而言之,在最好的情况下,上述序列将需要 6 个周期:三个周期指令执行加上 3 个周期 L1 命中延迟,而在最坏情况下为 3 + 28 = 31 个周期(总缓存未命中(

最新更新