测量性能时如何减少循环开销?

时间:2015-01-27 15:31:12

标签: c++ performance profiling

当我尝试测量一段代码的性能时,我把它放到一个循环中并迭代了一百万次。

for i: 1 -> 1000000
{
    "test code"
}

但是通过使用分析工具,我发现循环的开销很大,它会显着影响性能结果,特别是当代码片段较小时,比如1.5s的总循环时间和0.5s的循环开销。

所以我想知道是否有更好的方法来测试性能?或者我应该坚持使用这种方法,但是在相同的循环中制作多个相同的代码以增加其在性能方面的权重?

for i: 1 -> 1000000
{
    "test code copy 1"
    "test code copy 2"
    "test code copy 3"
    "test code copy 4"
}

或者可以从总时间中减去循环开销吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

您需要查看编译器生成的汇编列表。计算开销中的指令数。

通常,对于递增循环,开销包括:

  1. 递增循环计数器。
  2. 分支到循环顶部。
  3. 反限制的比较。
  4. 在许多处理器上,这些是每个处理器指令或接近处理器指令。因此,找出指令退出的平均时间,乘以开销中的指令数,这将成为一次迭代的开销时间。

    例如,在平均每条指令100ns和3条开销指令的处理器上,每次迭代每次迭代使用3 *(100ns)或300ns。给定1.0E6迭代,3.0E08纳秒将由于开销。从您的测量值中减去此数量,以更准确地测量环路的内容。