循环展开如何导致高速缓存未命中

时间:2019-07-03 03:58:08

标签: caching optimization loop-unrolling

我已经读过(在Wikipedia上)循环展开会导致指令高速缓存未命中,但是我不知道如何。根据我的理解,无论循环是否展开,它仍将执行相同的指令,所不同的是展开的循环将具有较少的循环开销调用,但是它将如何影响指令缓存?

我找不到明确的答案。关于另一个StackOverflow问题,有一个答案,但未提供完整答案:How can a program's size increase the rate of cache misses?

1 个答案:

答案 0 :(得分:0)

展开循环(通常)会使代码变大,因为循环的主体在已编译的可执行文件中重复。在理想情况下,编译器可以优化迭代之间共享的代码,但这并不总是可能的。

这种代码大小的增加会迫使其他代码退出指令缓存,从而导致性能降低。如果循环的主体及其所调用的代码不再适合高速缓存,则会严重降低性能。