循环展开如何导致缓存失误



我读过(在Wikipedia上(,循环展开会导致指令缓存失误,但我不明白如何。从我的理解来看,如果循环是未浏览的,它仍然会执行相同的说明,而传开的循环将较少的循环开销呼叫较少,但是它如何影响指令缓存?

我找不到关于它的明确答案。在另一个Stackoverflow问题上有一个答案,但没有提供一个完整的答案:程序的大小如何提高缓存率的速度?

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

代码大小的增加可以将其他代码迫使指令缓存,从而导致性能降低。如果循环的主体及其所调用的代码不再适合缓存,则性能将大大降低。

最新更新