当我尝试衡量一段代码的性能时,我将其放入一个循环中并迭代一百万次。
for i: 1 -> 1000000
{
"test code"
}
但是通过使用分析工具,我发现循环的开销非常大,它对性能结果的影响非常大,尤其是当代码片段很小时,比如 1.5 秒的总运行时间和 0.5 秒的循环开销。
所以我想知道是否有更好的方法来测试性能?或者我应该坚持这种方法,但在同一个循环下制作多段相同的代码以增加其在性能上的权重?
for i: 1 -> 1000000
{
"test code copy 1"
"test code copy 2"
"test code copy 3"
"test code copy 4"
}
或者是否可以从总时间中减去循环开销?非常感谢!
最佳答案
您需要查看编译器生成的汇编列表。计算开销中的指令数。
通常,对于递增循环,开销包括:
- 增加循环计数器。
- 跳到循环的顶部。
- 计数器与限制的比较。
在许多处理器上,这些都是一个或接近一个处理器指令。因此,找出一条指令退出的平均时间,乘以开销中的指令数,这就是一次迭代的开销时间。
例如,在平均每条指令 100ns 和 3 条指令开销的处理器上,每次迭代使用 3 * (100ns) 或每次迭代 300ns。给定 1.0E6 次迭代,3.0E08 纳秒将归因于开销。从您的测量值中减去该数量,以更准确地测量环路内容。
关于c++ - 如何在测量性能时减少循环开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28174085/