我正在阅读 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 个周期(总缓存未命中(