C / C ++代码的简单但准确的基准测试

Simple but accurate benchmarking of C / C++ code

用于准确对 C/C++ 代码进行基准测试的推荐方法/库是什么?可以克服简单测量执行时间的不准确性,即 CPU 频率和系统负载可能会随着执行时间而变化。不确定对执行的指令进行计数是否是正确的方法,因为我的代码中的瓶颈(可能)是内存访问。

GNU 分析器 gprof 是一种对单线程代码进行性能测量的传统方法。您不必手动检测代码,只需在构建期间向 gcc 添加一个选项。

你问的几乎不可能。

因为在现代处理器上,由于缓存和虚拟内存的影响,执行时间是高度不确定的。此外,一些操作的循环次数取决于参数的特定值。

这意味着静态基准测试(只看源代码)不可能准确,您无法避免 运行 该程序。然后 运行 时间会从一次执行到下一次波动。

即使取几次运行的平均值也是不准确的,因为第二次和下一次执行将受到第一次的影响,并且不再处于现实条件下。

其实,"the" 运行时间已经不存在了

在 clock() 上使用滴答和滴答,运行 通过将函数包装在 for 循环中至少十分之一秒。这消除了大部分缓存效果。但是,您可以指出的一点是,您不一定要消除缓存,因为该函数在真正使用时将在部分缓存的上下文中 运行 。很难回答这个问题。

如果您使用的是 X86,可以试试英特尔 V-Tune 放大器,它可以为您提供 C 或 C++ 应用程序的深入微架构分析。它使用 CPU 内置性能计数器来测量执行时间以及缓存未命中数和大量微架构级别信息。