Mik*_*e G 10 c c++ performance compiler-optimization loop-unrolling
当编译器执行循环展开优化时,它如何确定展开循环的因素或是否展开整个循环?由于这是空间性能权衡,平均而言,这种优化技术在使程序运行得更好方面效率如何?此外,在什么条件下建议使用这种技术(即某些操作或计算)?
这不必特定于某个编译器.它可以是任何解释,概述这种技术背后的想法以及在实践中观察到的内容.
jus*_*tin 10
当编译器执行循环展开优化时,它如何确定展开循环或天气的哪个因素来展开整个循环.
堆栈消费和地方.指令很重要.能够根据展开和内联的程序进行/传播优化.循环大小是固定的,还是预期在一定范围内.配置文件输入(如果适用).可以从循环体中移除的操作.等等
由于这是平均空间性能权衡,这种优化技术在使程序运行得更好方面效率如何?
它在很大程度上取决于输入(您的程序).它可以更慢(不典型)或者可以快几倍.编写一个程序以最佳方式运行并且还使优化器能够完成其工作.
此外,在什么条件下建议使用这种技术(即某些操作或计算)
通常,在非常小的主体上进行大量迭代,特别是无分支且具有良好数据局部性的主体.
如果您想知道该选项是否有助于您的应用,个人资料.
如果您需要更多,您应该留出一些时间来学习如何编写最佳程序,因为主题非常复杂.