循环展开(Loop unwinding或loop unrolling),是一种牺牲程序的大小来加快程序执行速度的优化方法。可以由程序员完成,也可由编译器自动优化完成。
循环展开最常用来降低循环开销,为具有多个功能单元的处理器提供指令级并行。也有利于指令流水线的调度。
for (i = 1; i <= 60; i++) a[i] = a[i] * b + c;
可以如此循环展开:
for (i = 1; i <= 58; i+=3) { a[i] = a[i] * b + c; a[i+1] = a[i+1] * b + c; a[i+2] = a[i+2] * b + c; }
这被称为展开了两次。
Kennedy, Ken; Allen, Randy. Optimizing Compilers for Modern Architectures: A Dependence-based Approach. Morgan Kaufmann. 2001. ISBN 1-55860-286-0.