循环优化是提高执行速度和减少与循环相关的开销的过程。它在提高缓存性能和有效利用并行处理能力方面发挥着重要作用。科学程序的大部分执行时间都花在循环上。
Loop Optimization is a machine independent optimization.
减少内循环中的指令数量可以改善程序的运行时间,即使该循环外的代码量增加。
循环优化技术:
- 频率降低(代码运动):
在频率降低方面,循环中的代码量减少了。可以移出循环体而不影响程序语义的语句或表达式被移出循环。例子:
Initial code: while(i<100) { a = Sin(x)/Cos(x) + i; i++; } Optimized code: t = Sin(x)/Cos(x); while(i<100) { a = t + i; i++; }
- 循环展开:
循环展开是一种循环转换技术,有助于优化程序的执行时间。我们基本上删除或减少迭代。循环展开通过消除循环控制指令和循环测试指令来提高程序的速度。例子:
Initial code: for (int i=0; i<5; i++) printf("Pankaj\n"); Optimized code: printf("Pankaj\n"); printf("Pankaj\n"); printf("Pankaj\n"); printf("Pankaj\n"); printf("Pankaj\n");
- 环路干扰:
环路干扰是将两个或多个环路组合在一个环路中。它减少了编译大量循环所需的时间。例子:
Initial Code: for(int i=0; i<5; i++) a = i + 5; for(int i=0; i<5; i++) b = i + 10; Optimized code: for(int i=0; i<5; i++) { a = i + 5; b = i + 10; }