c++ - 如何在测量性能时减少循环开销?

标签 c++ performance profiling

当我尝试衡量一段代码的性能时,我将其放入一个循环中并迭代一百万次。

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"
}

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

最佳答案

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

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

  1. 增加循环计数器。
  2. 跳到循环的顶部。
  3. 计数器与限制的比较。

在许多处理器上,这些都是一个或接近一个处理器指令。因此,找出一条指令退出的平均时间,乘以开销中的指令数,这就是一次迭代的开销时间。

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

关于c++ - 如何在测量性能时减少循环开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28174085/

相关文章:

c++ - 使用 ATI Mobility Radeon HD 5850 显卡执行计算

c++ - Simulink 和 DLL

performance - 为什么提供缓存页面需要一秒钟?

javascript - 用于查找所有 javascript 函数(包括箭头符号)的正则表达式?

ruby-on-rails-3 - MiniProfiler Ruby : Getting a better breakdown for non-SQL calls

python - 分析在 Mod_wsgi 上运行的 Python 脚本

c++ - C/C++ 中的自给自足头文件

c++ - 制作文本文件,逐个输入字符串

python - python 服务器进程的性能监控/分析(类似于 New Relic)

c# - WPF TextBox 绑定(bind)到 StringBuilder 以模拟控制台性能