我正在研究用C语言编写的基准测试。我尝试使用优化标志 - gcc中存在的funroll-loops来编译它。我只使用funroll-loops然后funroll-loops编译它--param max-unrolled-insns = 10并且令人惊讶的是,使用funroll-loops编译的二进制文件花费了50秒--param max-unrolled-insns = 10运行选项比使用简单的funroll循环编译的二进制文件。 与funroll-all-loops相同的情况也是如此。 我无法理解gcc的这种行为。当我们使用调整参数max-unrolled-insns时,为什么性能会下降? 请帮助。
答案 0 :(得分:1)
当你说它增加50秒时,参考什么,总数有多大?
max-unrolled-insns将设置循环可以展开的指令数,因此如果将其设置为10,则很可能会丢失一些百分比。例如..如果你有一个有6个指令的循环,它根本不会展开,因为展开将使它成为12个指令。
在这种情况下不展开会让你失去一些指令并强制分支..所以它可以增加几个百分点的运行时间。