优化编译器如何决定展开循环的时间和数量?

Mik*_*e G 10 c c++ performance compiler-optimization loop-unrolling

当编译器执行循环展开优化时,它如何确定展开循环的因素或是否展开整个循环?由于这是空间性能权衡,平均而言,这种优化技术在使程序运行得更好方面效率如何?此外,在什么条件下建议使用这种技术(即某些操作或计算)?

这不必特定于某个编译器.它可以是任何解释,概述这种技术背后的想法以及在实践中观察到的内容.

jus*_*tin 10

当编译器执行循环展开优化时,它如何确定展开循环或天气的哪个因素来展开整个循环.

堆栈消费和地方.指令很重要.能够根据展开和内联的程序进行/传播优化.循环大小是固定的,还是预期在一定范围内.配置文件输入(如果适用).可以从循环体中移除的操作.等等

由于这是平均空间性能权衡,这种优化技术在使程序运行得更好方面效率如何?

它在很大程度上取决于输入(您的程序).它可以更慢(不典型)或者可以快几倍.编写一个程序以最佳方式运行并且还使优化器能够完成其工作.

此外,在什么条件下建议使用这种技术(即某些操作或计算)

通常,在非常小的主体上进行大量迭代,特别是无分支且具有良好数据局部性的主体.

如果您想知道该选项是否有助于您的应用,个人资料.

如果您需要更多,您应该留出一些时间来学习如何编写最佳程序,因为主题非常复杂.